export default class WebCalendar {
    /**
     * @type {['purple', 'red', 'green']}
     * @private
     * @readonly
     */
    private static readonly "__#17@#HIGH_CONTRAST";
    /**
     * @type {['', 'I', 'II', 'III', 'IV']}
     * @private
     * @readonly
     */
    private static readonly "__#17@#PSALTER_WEEK";
    /**
     * Sanitizes the given input string to prevent XSS attacks.
     *
     * It uses the DOMParser to parse the string as HTML and then extracts the
     * text content of the parsed HTML document. This effectively strips any HTML
     * tags from the input string.
     *
     * @param {string} input - The input string to sanitize.
     * @returns {string} The sanitized string.
     * @private
     * @see https://stackoverflow.com/a/47140708/394921
     */
    private static "__#17@#sanitizeInput";
    /**
     * Validates the given class name to ensure it is a valid CSS class name.
     *
     * A valid CSS class name is a string that starts with a letter, underscore or dash,
     * followed by any number of alphanumeric characters, dashes or underscores.
     *
     * @param {string} className - The class name to validate.
     * @returns {boolean} True if the class name is valid, false otherwise.
     * @static
     * @private
     */
    private static "__#17@#isValidClassName";
    /**
     * Validates the given ID to ensure it is a valid HTML ID.
     *
     * A valid HTML ID is a string that starts with a letter, underscore or dash,
     * followed by any number of alphanumeric characters, dashes or underscores.
     *
     * @param {string} id - The ID to validate.
     * @returns {boolean} True if the ID is valid, false otherwise.
     * @static
     * @private
     */
    private static "__#17@#isValidId";
    /**
     * Validates the given element selector to ensure it is a valid HTML element selector.
     *
     * @param {string} element - The element selector to validate.
     * @returns {Element} The DOM element that the selector matches.
     * @throws {Error} If the element selector is invalid or does not match any elements.
     * @static
     * @private
     */
    private static "__#17@#validateElementSelector";
    /**
     * Constructor for the WebCalendar class.
     *
     * Creates a new instance of the WebCalendar class.
     *
     * The options object is optional and can contain any of the following properties:
     * - class: string, the class to apply to the table element
     * - id: string, the id to apply to the table element
     * - firstColumnGrouping: Grouping, the grouping for the first column
     * - removeHeaderRow: boolean, whether to remove the header row
     * - removeCaption: boolean, whether to remove the caption element
     * - psalterWeekColumn: boolean, whether to group events by psalter week
     * - eventColor: ColorAs, the color to apply to events
     * - seasonColor: ColorAs, the color to apply to seasons
     * - seasonColorColumns: Column, the columns to apply the season color to
     * - eventColorColumns: Column, the columns to apply the event color to
     * - monthHeader: boolean, whether to include a month header
     * - dateFormat: DateFormat, the format to use for dates
     * - columnOrder: ColumnOrder, the order of the columns
     * - gradeDisplay: GradeDisplay, the display of grades
     *
     * @param {Object} [options] - An object containing any of the above properties.
     * @throws {Error} If any of the properties in the options object are invalid.
     */
    constructor(options?: Object);
    /**
     * Sets the class attribute for the WebCalendar instance's DOM element.
     *
     * Validates the input class name(s) to ensure they are strings and conform to
     * CSS class naming conventions. If the class name is valid, it is sanitized
     * and assigned to the element. If the class name is an empty string, the
     * class attribute is removed.
     *
     * @param {string} className - A space-separated string of class names to be
     * assigned to the DOM element.
     * @throws {Error} If the className is not a string, or if any class name is
     * invalid.
     * @returns {WebCalendar} The current WebCalendar instance for chaining.
     */
    class(className: string): WebCalendar;
    /**
     * Sets the id attribute for the WebCalendar instance's DOM element.
     *
     * Validates the input id to ensure it is a string and conforms to
     * HTML id attribute naming conventions. If the id is valid, it is sanitized
     * and assigned to the element. If the id is an empty string, the
     * id attribute is removed.
     *
     * @param {string} id - A string to be assigned to the id attribute of the DOM element.
     * @throws {Error} If the id is not a string, or if the id is invalid.
     * @returns {WebCalendar} The current WebCalendar instance for chaining.
     */
    id(id: string): WebCalendar;
    /**
     * Sets the date format for the table.
     *
     * This method sets the format for the dates in the table. The following formats are supported:
     * - FULL: The full date format for the locale, e.g. "Friday, March 3, 2023" or "venerdì 3 marzo 2023".
     * - LONG: The long date format for the locale, e.g. "March 3, 2023" or "3 marzo 2023".
     * - MEDIUM: The medium date format for the locale, e.g. "Mar 3, 2023" or "3 mar 2023".
     * - SHORT: The short date format for the locale, e.g. "3/3/23" or "03/03/23".
     * - DAY_ONLY: Only the day of the month and the weekday, e.g. "3 Friday" or "3 venerdì".
     *
     * The default is DateFormat::FULL.
     *
     * @param {DateFormat} dateFormat The date format to use.
     * @throws {Error} If the input is not a string, or if the date format is not recognized.
     * @returns {WebCalendar} The current instance of the class.
     */
    dateFormat(dateFormat: DateFormat): WebCalendar;
    /**
     * Sets whether or not the caption should be removed from the table.
     *
     * This method controls whether or not the caption element is
     * generated by the {@link WebCalendar.buildTable()} method. The default is true, meaning
     * that the caption should not be generated (= should be removed).
     *
     * @param {boolean} removeCaption Whether the caption should be removed or not.
     *
     * @throws {Error} If the input is not a boolean.
     * @returns {WebCalendar} The current instance of the class.
     */
    removeCaption(removeCaption?: boolean): WebCalendar;
    /**
     * Sets whether or not the header row should be removed from the table.
     *
     * This method controls whether or not the header row is
     * generated by the {@link WebCalendar.buildTable()} method. The default is true, meaning
     * that the header row should not be generated (= should be removed).
     *
     * @param {boolean} removeHeaderRow Whether the header row should be removed or not.
     *
     * @throws {Error} If the input is not a boolean.
     * @returns {WebCalendar} The current instance of the class.
     */
    removeHeaderRow(removeHeaderRow?: boolean): WebCalendar;
    /**
     * Sets the grouping for the first column.
     *
     * This method sets the grouping for the first column of the table.
     * The following groupings are supported:
     * - Grouping.BY_MONTH: the first column will contain month groupings
     * - Grouping.BY_LITURGICAL_SEASON: the first column will contain liturgical season groupings
     *
     * The default is Grouping.BY_LITURGICAL_SEASON.
     *
     * @param {Grouping} firstColumnGrouping The grouping to use for the first column.
     * @throws {Error} If the input is not a valid Grouping.
     * @returns {WebCalendar} The current instance of the class.
     */
    firstColumnGrouping(firstColumnGrouping: Grouping): WebCalendar;
    /**
     * Sets the order of the third and fourth columns.
     *
     * This method sets the order of the third and fourth columns of the table.
     * The following orders are supported:
     * - ColumnOrder.GRADE_FIRST: the third column will contain the liturgical grade and the fourth column the event details
     * - ColumnOrder.EVENT_DETAILS_FIRST: the third column will contain the event details and the fourth column the liturgical grade
     *
     * The default is ColumnOrder.EVENT_DETAILS_FIRST.
     *
     * @param {ColumnOrder} columnOrder The order of the third and fourth columns.
     * @throws {Error} If the input is not a valid ColumnOrder.
     * @returns {WebCalendar} The current instance of the class.
     */
    columnOrder(columnOrder: ColumnOrder): WebCalendar;
    /**
     * Sets whether or not the psalter week grouping should be applied.
     *
     * This method sets whether or not the psalter week grouping should be applied
     * to the table. The psalter week grouping groups events by psalter week.
     * The psalter week is a number from 1 to 4 that indicates the week of Ordinary Time
     * or the week of a seasonal week (Advent, Christmas, Lent, Easter).
     *
     * The default is true, meaning that the psalter week grouping should be applied.
     *
     * @param {boolean} boolVal Whether the psalter week grouping should be applied or not.
     *
     * @throws {Error} If the input is not a boolean.
     * @returns {WebCalendar} The current instance of the class.
     */
    psalterWeekColumn(boolVal?: boolean): WebCalendar;
    /**
     * Sets how the color of a single liturgical event is applied to the table.
     *
     * This method sets how the color of a single liturgical event is applied to the table.
     * The following options are supported:
     * - `ColorAs.BACKGROUND`: the color of the event is applied as the background color of the table cells
     * - `ColorAs.CSS_CLASS`: the color of the event is applied as a CSS class to the table cells
     * - `ColorAs.INDICATOR`: the color of the event is applied as a small 10px inline block element with radius 5px
     *
     * The default is `ColorAs.INDICATOR`.
     *
     * @param {ColorAs} eventColor The color representation to use for the events.
     * @throws {Error} If the input is not a valid ColorAs.
     * @returns {WebCalendar} The current instance of the class.
     */
    eventColor(eventColor: ColorAs): WebCalendar;
    /**
     * Sets how the color of a liturgical season is applied to the table.
     *
     * This method sets how the color of a liturgical season is applied to the table.
     * The following options are supported:
     * - ColorAs.BACKGROUND: the color of the season is applied as the background color of the table cells
     * - ColorAs.CSS_CLASS: the color of the season is applied as a CSS class to the table cells
     * - ColorAs.INDICATOR: the color of the season is applied as a small 10px inline block element with radius 5px
     *
     * The default is ColorAs.BACKGROUND.
     *
     * @param {ColorAs} seasonColor The color representation to use for the seasons.
     * @throws {Error} If the input is not a valid ColorAs.
     * @returns {WebCalendar} The current instance of the class.
     */
    seasonColor(seasonColor: ColorAs): WebCalendar;
    /**
     * Sets which columns to apply the season color to.
     *
     * This method sets the columns to which the season color will be applied.
     * The input should be a number representing a bitfield of column flags.
     * The following columns are supported:
     * - Column.LITURGICAL_SEASON
     * - Column.MONTH
     * - Column.DATE
     * - Column.EVENT_DETAILS
     * - Column.GRADE
     * - Column.PSALTER_WEEK
     * - Column.ALL
     * - Column.NONE
     *
     * The default is Column.ALL.
     *
     * @param {number} seasonColorColumns The column flags to set.
     * @throws {Error} If the input is not a valid column flags.
     * @returns {WebCalendar} The current instance of the class.
     */
    seasonColorColumns(seasonColorColumns: number): WebCalendar;
    /**
     * Sets which columns are affected by the event color settings.
     *
     * This method configures the columns to which the event color will be applied in the calendar.
     * The input should be a number representing a bitfield of column flags. The method ensures
     * that the provided flag is valid and sets it for event color application.
     *
     * @param {number} eventColorColumns The column flags to apply event color to.
     * @throws {Error} If the input is not a number or if it does not represent valid column flags.
     * @returns {WebCalendar} The current instance of the class for chaining.
     */
    eventColorColumns(eventColorColumns: number): WebCalendar;
    /**
     * Controls whether or not month headers are displayed in the table.
     *
     * This method controls whether or not month headers are displayed
     * in the calendar table.
     * The default is true, meaning that month headers should be included.
     *
     * @param {boolean} [monthHeader=true] Whether or not to include month headers in the table.
     *
     * @throws {Error} If the input is not a boolean.
     * @returns {WebCalendar} The current instance of the class.
     */
    monthHeader(monthHeader?: boolean): WebCalendar;
    /**
     * Sets how the liturgical grade is displayed in the table.
     *
     * The liturgical grade can be displayed in full or abbreviated form.
     * The following options are supported:
     * - GradeDisplay.FULL: the grade is displayed with its full rank
     * - GradeDisplay.ABBREVIATED: the grade is displayed with an abbreviated rank
     *
     * The default is GradeDisplay.FULL.
     *
     * @param {GradeDisplay} gradeDisplay The grade display.
     * @throws {Error} If the input is not a valid GradeDisplay.
     * @returns {WebCalendar} The current instance of the class.
     */
    gradeDisplay(gradeDisplay: GradeDisplay): WebCalendar;
    /**
     * Sets the Latin interface for the WebCalendar instance.
     *
     * The Latin interface determines which set of month and weekday names to use
     * for the calendar. The following options are supported:
     * - LatinInterface.ECCLESIASTICAL: month and weekday names are based on the ecclesiastical calendar
     * - LatinInterface.CIVIL: month and weekday names are based on the civil calendar
     *
     * The default is LatinInterface.ECCLESIASTICAL.
     *
     * @param {LatinInterface} latinInterface The Latin interface to use.
     * @throws {Error} If the input is not a valid LatinInterface.
     * @returns {WebCalendar} The current instance of the class.
     */
    latinInterface(latinInterface: LatinInterface): WebCalendar;
    /**
     * Sets the locale for the WebCalendar instance.
     *
     * The locale determines the language and regional settings for date formatting
     * within the calendar. It configures month and date formatters based on the
     * specified locale. If the date format is set to DAY_ONLY, it will format the
     * date to show the day of the month and the full weekday name; otherwise, it
     * uses the configured date style.
     *
     * @param {string} locale - The locale identifier to set, following BCP 47 language tag format.
     * @throws {Error} If the provided locale is not a string or an invalid locale identifier.
     * @returns {WebCalendar} The current instance of the class for method chaining.
     */
    locale(locale: string): WebCalendar;
    /**
     * @description Builds the HTML table from the JSON data for the Liturgical Calendar.
     * @async
     * @returns {WebCalendar} The current instance of the WebCalendar class
     */
    buildTable(): WebCalendar;
    /**
     * Appends the WebCalendar to a given element. If the element does not yet exist in the DOM, the WebCalendar will be appended when the element is inserted.
     * @param {string|HTMLElement} elementSelector - DOM element, or Element selector for the DOM element, to append the WebCalendar to
     */
    appendTo(elementSelector?: string | HTMLElement): void;
    /**
     * @deprecated Use appendTo() instead. This method will be removed in a future version.
     * @param {string|HTMLElement} elementSelector - DOM element, or Element selector for the DOM element
     */
    attachTo(elementSelector?: string | HTMLElement): void;
    /**
     * Subscribes the WebCalendar instance to the `calendarFetched` event emitted by the ApiClient.
     *
     * Upon receiving the event, it processes the liturgical calendar data and updates the calendar display.
     * The method will validate that the `apiClient` is an instance of ApiClient and listen to
     * the `calendarFetched` event on the client's event bus. When the event is triggered, it checks
     * the integrity of the received data, ensuring it contains the necessary properties and is of the correct type.
     * It then converts event dates from UNIX timestamps to Date objects, updates the internal calendar data,
     * and rebuilds the calendar table. If the WebCalendar is attached to a DOM element, the new calendar table
     * replaces the current content of the attached element.
     *
     * @param {ApiClient} apiClient - The API client to listen to for calendar data events.
     * @throws {Error} If the provided `apiClient` is not an instance of ApiClient or if the received
     * data is invalid or malformed.
     * @return {WebCalendar} - Returns the instance of WebCalendar for method chaining.
     */
    listenTo(apiClient: ApiClient): WebCalendar;
    /**
     * The locale used by the WebCalendar instance.
     * @type {string}
     * @readonly
     */
    readonly get _locale(): string;
    /**
     * The number of days on which liturgical events take place in the current WebCalendar.
     * This value is only available after {@link WebCalendar.buildTable()} has been called.
     * @type {number}
     */
    get _daysCreated(): number;
    /**
     * Get the number of days on which liturgical events take place in the current WebCalendar.
     * @returns {number} The number of days on which liturgical events take place in the current WebCalendar. This value is only available after {@link WebCalendar.buildTable()} has been called.
     */
    daysCreated(): number;
    #private;
}
import { DateFormat } from '../Enums.js';
import { Grouping } from '../Enums.js';
import { ColumnOrder } from '../Enums.js';
import { ColorAs } from '../Enums.js';
import { GradeDisplay } from '../Enums.js';
import { LatinInterface } from '../Enums.js';
import ApiClient from '../ApiClient/ApiClient.js';
//# sourceMappingURL=WebCalendar.d.ts.map