{"version":3,"file":"assets/chunk.52ca099e888bd1125dee.js","mappings":"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","sources":["src/components/action-sheets/confirm-save.hbs","src/components/action-sheets/confirm-save.ts","src/components/file-upload.hbs","src/components/file-upload.ts","src/components/page-view/details.hbs","src/components/page-view/details.ts","src/components/schedule-view.hbs","src/components/schedule-view.ts","src/components/simple-binary/async-toggle.hbs","src/components/simple-binary/async-toggle.ts","src/helpers/handle-number-change.ts","src/components/keyword-search-toolbar.hbs","src/components/keyword-search-toolbar.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<ActionSheet\\n    @isActive={{@isActive}}\\n    @title={{t \\\"generic.save\\\"}}\\n    @buttons={{array\\n        (hash text=(t \\\"generic.cancel\\\") fn=@close)\\n        (hash text=(t \\\"generic.save\\\") color=\\\"primary\\\" fn=@confirm disabled=(coalesce @disabled false))\\n    }}\\n    @close={{@close}}\\n    ...attributes\\n>\\n    <:default>\\n        <p>{{@confirmationDescription}}</p>\\n    </:default>\\n</ActionSheet>\")","import templateOnlyComponent from '@ember/component/template-only';\n\nexport interface ActionSheetsConfirmSaveSignature {\n    Args: {\n        close: VoidFunction;\n        confirm: VoidFunction;\n        disabled?: boolean;\n        confirmationDescription: string;\n        isActive: boolean;\n    };\n    Element: HTMLDivElement;\n}\n\nconst ActionSheetConfirmSave = templateOnlyComponent<ActionSheetsConfirmSaveSignature>();\nexport default ActionSheetConfirmSave;\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"file-upload\\\" ...attributes>\\n    {{#if (has-block)}}\\n        <button type=\\\"button\\\" disabled={{this.isUploading}} {{on \\\"click\\\" this.selectFile}}>\\n            {{yield}}\\n        </button>\\n    {{else}}\\n        <label\\n            for={{guid-for this}}\\n            class=\\\"btn\\\"\\n            tabindex=\\\"0\\\"\\n            role=\\\"button\\\"\\n            aria-label={{tc this \\\"browseAriaLabel\\\"}}\\n            {{on \\\"keyup\\\" this.onKeyUp}}\\n        >\\n            {{tc this \\\"browse\\\"}}\\n        </label>\\n    {{/if}}\\n\\n    <span class=\\\"content-wrapper {{if (has-block) \\'custom\\'}}\\\">\\n        {{#if this.isUploading}}\\n            <SpinnerSvg @spinning={{true}} @title={{tc this \\\"loading\\\"}} />\\n        {{else}}\\n            {{#unless (has-block)}}\\n                {{coalesce this.fileName (tc this \\\"noFileSelected\\\")}}\\n            {{/unless}}\\n        {{/if}}\\n    </span>\\n\\n    <input\\n        id={{guid-for this}}\\n        type=\\\"file\\\"\\n        accept={{@accept}}\\n        disabled={{this.isUploading}}\\n        {{on \\\"change\\\" this.fileSelected}}\\n    />\\n</div>\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isEnterOrSpaceCode } from '@adc/ember-utils/utils/a11y';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type AjaxService from '@adc/ajax/services/adc-ajax';\n\nexport interface FileUploadSignature {\n    Element: HTMLDivElement;\n    Args: {\n        /** The maximum allowed file size, in bytes. */\n        maxFileSize?: number;\n        /** A CSV string indicating the accepted file types. */\n        accept?: string;\n        /** The URI endpoint to upload the file to. */\n        endpoint?: string;\n        /** Triggered after the file has uploaded tp the `@endpoint`. */\n        fileUploaded?: (result: Record<string, unknown>) => void;\n        /** Triggered when the user has selected a file. */\n        fileChanged?: () => void;\n        /** Triggered when the file upload has failed. */\n        uploadFailed?: (error: any) => void;\n        /** Triggered when the selected file size is greater than the indicates `@maxFileSize`. */\n        fileTooLarge?: () => void;\n    };\n    Blocks: {\n        default: [];\n    };\n}\n\n/**\n * Default max file size in bytes.\n *\n * @private\n */\nconst DEFAULT_MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024;\n\n/**\n * Upload the specified file.\n *\n * @private\n */\nasync function uploadFile(this: FileUploadComponent, file: File): Promise<void> {\n    const formData = new FormData();\n    formData.append('file', file);\n\n    Object.assign(this, {\n        isUploading: true,\n        fileName: file.name\n    });\n\n    try {\n        const result = await postFormData.call(this, this.args.endpoint, formData);\n        this.args.fileUploaded?.(result);\n    } catch (error) {\n        this.fileName = '';\n        this.args.uploadFailed?.(error);\n    }\n}\n\n/**\n * Send the specified formData to the endpoint.\n *\n * @param endpoint - The api endpoint that should be POSTed to.\n * @param formData - A FormData object that contains the file to upload.\n *\n * @private\n */\nfunction postFormData(\n    this: FileUploadComponent,\n    endpoint: string,\n    formData: FormData\n): Promise<Record<string, unknown>> {\n    const { defaultHeaders, apiBaseUrl } = this.ajax;\n\n    return new Promise((resolve, reject) => {\n        const xhr = new XMLHttpRequest();\n        xhr.open('POST', `${apiBaseUrl}/${endpoint}`);\n        xhr.setRequestHeader('AjaxRequestUniqueKey', defaultHeaders.ajaxrequestuniquekey ?? '');\n\n        xhr.onload = function () {\n            if (this.status >= 200 && this.status < 300) {\n                resolve(JSON.parse(xhr.responseText));\n                return;\n            }\n\n            reject({\n                status: this.status,\n                statusText: xhr.statusText\n            });\n        };\n\n        xhr.onerror = function () {\n            reject({\n                status: this.status,\n                statusText: xhr.statusText\n            });\n        };\n\n        xhr.send(formData);\n    });\n}\n\n/**\n * Reset the upload field.\n *\n * @private\n */\nfunction resetUploadField(this: FileUploadComponent, fileInput: HTMLInputElement): void {\n    fileInput.files = null;\n    fileInput.value = '';\n    this.isUploading = false;\n}\n\n/**\n * @classdesc\n * Upload a file using a POST request to an endpoint.\n */\n@intlPath({ module: '@adc/ui-components', path: 'file-upload' })\nexport default class FileUploadComponent extends Component<FileUploadSignature> {\n    @service declare ajax: AjaxService;\n\n    /**\n     * Max file size that this field will support.\n     */\n    get maxFileSize(): number {\n        return this.args.maxFileSize ?? DEFAULT_MAX_FILE_SIZE_BYTES;\n    }\n\n    /**\n     * Name of the currently selected file.\n     *\n     * @ignore\n     */\n    @tracked fileName = '';\n\n    /**\n     * Is a file currently being uploaded?\n     *\n     * @ignore\n     */\n    @tracked isUploading = false;\n\n    /**\n     * Upload a file when a user selects one to be uploaded.\n     */\n    @action\n    async fileSelected(evt: Event): Promise<void> {\n        const fileInput = evt.target as HTMLInputElement;\n        if (!fileInput?.files?.length) {\n            return;\n        }\n\n        // Call the fileChanged action if there is one.\n        this.args.fileChanged?.();\n\n        const [file] = fileInput.files;\n\n        // The file is too large, call the fileTooLarge action if there is one.\n        if (file.size > this.maxFileSize) {\n            this.args.fileTooLarge?.();\n        } else {\n            await uploadFile.call(this, file);\n        }\n\n        resetUploadField.call(this, fileInput);\n    }\n\n    @action\n    selectFile(e: MouseEvent & { target: HTMLButtonElement }): void {\n        e.preventDefault();\n        e.target.closest('.file-upload')?.querySelector<HTMLInputElement>('input[type=\"file\"]')?.click();\n    }\n\n    /**\n     * For a11y, handles a space or enter while focusing on the file upload button.\n     */\n    @action onKeyUp(evt: KeyboardEvent & { target: HTMLInputElement }): void {\n        if (isEnterOrSpaceCode(evt.code)) {\n            evt.preventDefault();\n            evt.target.closest('.file-upload')?.querySelector<HTMLInputElement>('input[type=\"file\"]')?.click();\n        }\n    }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<PageView @model={{@model}} ...attributes>\\n    <:default as |PageViewContainer api|>\\n        <PageViewContainer @dataLoaded={{@dataLoaded}} class=\\\"md {{coalesce @cssContainer \\'\\'}}\\\">\\n            <:loading as |PageViewLoading|>\\n                <PageViewLoading />\\n            </:loading>\\n\\n            <:default as |data|>\\n                {{yield data api}}\\n\\n                {{#if @deleteModel}}\\n                    <RouteView::Content::DeleteModel @model={{@deleteModel}} />\\n                {{/if}}\\n            </:default>\\n\\n            <:error as |PageViewError|>\\n                <PageViewError />\\n            </:error>\\n        </PageViewContainer>\\n    </:default>\\n</PageView>\")","import Component from '@glimmer/component';\n\nimport type { PageViewSignature } from '../page-view';\nimport type { PageViewContainerSignature } from '../page-view/container';\nimport type { PageViewDeleteSignature } from './delete';\n\ninterface PageViewDetailsSignature<M> {\n    Element: PageViewSignature<M>['Element'];\n    Args: Pick<PageViewContainerSignature<M>['Args'], 'model' | 'dataLoaded'> & {\n        /** Information about the delete operation. */\n        deleteModel?: PageViewDeleteSignature['Args']['model'];\n        /** Optional CSS class applied to the `<PageView::Container />` component. */\n        cssContainer?: string;\n    };\n    Blocks: {\n        default: [PageViewContainerSignature<M>['Blocks']['default'][0], PageViewSignature<M>['Blocks']['default'][1]];\n    };\n}\n\n// eslint-disable-next-line ember/no-empty-glimmer-component-classes\nexport default class PageViewDetails<M> extends Component<PageViewDetailsSignature<M>> {}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"schedule-view\\\" ...attributes>\\n    <div class=\\\"schedule-grid\\\">\\n        <ScheduleHourLabels @isVertical={{false}} class=\\\"hour-labels top\\\" />\\n\\n        {{#if this.isScheduleAllTimes}}\\n            <div class=\\\"all-times {{@allTimesColor}}\\\">\\n                {{coalesce @allTimesText \\\"\\\"}}\\n                <div class=\\\"border\\\"></div>\\n                <div class=\\\"background\\\"></div>\\n            </div>\\n        {{/if}}\\n\\n        {{! Schedule blocks }}\\n        {{#each this.scheduleElements as |scheduleElement|}}\\n            <div class=\\\"schedule-day\\\">\\n                <div class=\\\"day-label\\\">\\n                    {{scheduleElement.dayOfWeek}}\\n                </div>\\n                {{#each scheduleElement.schedules as |accessPlan|}}\\n                    {{#if accessPlan.timeBlocks.length}}\\n                        <div class=\\\"schedule-single-row-wrapper {{accessPlan.planColor}}\\\">\\n                            {{#each accessPlan.timeBlocks as |scheduleDay|}}\\n                                <div class=\\\"schedule-time-span {{scheduleDay.classes}}\\\" style={{scheduleDay.style}}>\\n                                    {{scheduleDay.label}}\\n                                    <div class=\\\"border\\\"></div>\\n                                    <div class=\\\"background\\\"></div>\\n                                </div>\\n                            {{/each}}\\n                        </div>\\n                    {{/if}}\\n                {{/each}}\\n            </div>\\n        {{/each}}\\n    </div>\\n</div>\")","import { computed } from '@ember/object';\nimport BaseSchedule from './views/base-schedule.ts';\n\nimport type { BaseScheduleSignature } from './views/base-schedule';\nimport type { ScheduleElement } from './views/types';\n\nexport interface ScheduleViewSignature extends BaseScheduleSignature {\n    Args: BaseScheduleSignature['Args'] & {\n        /** The text to display when the timetable is 24/7. */\n        allTimesText?: string;\n        /** Optional CSS class used to set color for all times text and bar (will use light gray if not present). */\n        allTimesColor?: 'red' | 'orange' | 'yellow' | 'green' | 'blue' | 'purple' | 'greenblue';\n    };\n}\n\n/**\n * Displays the weekly schedule for a timetable\n */\nexport default class ScheduleView extends BaseSchedule<ScheduleViewSignature> {\n    /**\n     * Schedule to be rendered into the grid\n     */\n    @computed('args.allTimesText', 'planSchedules.[]')\n    get scheduleElements(): ScheduleElement[] {\n        return this.getScheduleElements(false, this.args.allTimesText);\n    }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<SimpleBinary\\n    @type=\\\"toggle\\\"\\n    @checked={{@checked}}\\n    @css={{this.css}}\\n    @errorMessage={{@errorMessage}}\\n    @errorTooltipPlace={{@errorTooltipPlace}}\\n    @errorDuration={{@errorDuration}}\\n    {{on \\\"click\\\" this.animateState.perform}}\\n    ...attributes\\n>\\n    <SimpleBinary::Label @icon={{@icon}} @text={{@label}} />\\n\\n    <SpinnerSvg @spinning={{true}} aria-hidden={{unless this.isPending \\\"true\\\"}} />\\n</SimpleBinary>\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { A } from '@ember/array';\nimport { equal } from '@ember/object/computed';\nimport { timeout, task } from 'ember-concurrency';\n\nimport type { Task } from 'ember-concurrency';\nimport type { SimpleBinarySignature } from '../simple-binary';\n\ntype AsyncState = 'idle' | 'pending' | 'success' | 'failure';\n\nexport interface AsyncToggleSignature {\n    Element: SimpleBinarySignature['Element'];\n    Args: Pick<\n        SimpleBinarySignature['Args'],\n        'checked' | 'errorMessage' | 'errorDuration' | 'errorTooltipPlace' | 'icon' | 'label' | 'css'\n    > & {\n        /** Triggered when the async state is \"pending\". */\n        onChange: (state: boolean) => Promise<unknown>;\n    };\n}\n\nexport default class AsyncToggle extends Component<AsyncToggleSignature> {\n    @tracked state: AsyncState = 'idle';\n\n    get css(): string {\n        const { state } = this;\n\n        return A(['async-toggle', `async-${state}`, state === 'failure' ? 'has-error' : undefined, this.args.css])\n            .compact()\n            .join(' ');\n    }\n\n    @equal('state', 'pending')\n    declare isPending: boolean;\n\n    animateState: Task<void, [MouseEvent]> = task(\n        { drop: true },\n        async (evt: MouseEvent & { target: HTMLInputElement }) => {\n            evt.preventDefault();\n\n            this.state = 'idle';\n\n            try {\n                this.state = 'pending';\n                await this.args.onChange(!!evt.target.checked);\n                this.state = 'success';\n            } catch {\n                this.state = 'failure';\n            } finally {\n                await timeout(this.state === 'success' ? 700 : 3000);\n\n                this.state = 'idle';\n            }\n        }\n    );\n}\n","import { set } from '@ember/object';\n\ntype EventToHandle = Event & { target: HTMLInputElement };\n\nexport default function handleNumberChange<T extends object>(context: T, name: keyof T): (evt: EventToHandle) => void {\n    return (evt: EventToHandle): void => {\n        set(context, name, Number(evt.target.value) as any);\n    };\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div class=\\\"keyword-search-toolbar\\\" ...attributes>\\n    {{#unless @searchBoxHidden}}\\n        <KeywordSearch\\n            @applySearchFn={{@searchValueChange}}\\n            @keywordOptions={{@keywordOptions}}\\n            @keyword={{@keyword}}\\n            @searchString={{@searchString}}\\n            @suggestionClass={{@suggestionClass}}\\n            disabled={{@searchBoxDisabled}}\\n            placeholder={{@searchPlaceholder}}\\n        />\\n    {{/unless}}\\n\\n    <div class=\\\"content\\\">\\n        {{yield}}\\n    </div>\\n</div>\")","import templateOnlyComponent from '@ember/component/template-only';\n\nimport type { KeywordSearchSignature } from './keyword-search';\n\ntype KeywordSearchSignatureArgs = KeywordSearchSignature['Args'];\n\ninterface KeywordSearchToolbarArgs\n    extends Pick<KeywordSearchSignature['Args'], 'suggestionClass' | 'keywordOptions' | 'keyword' | 'searchString'> {\n    /** Triggered when the search string changes. */\n    searchValueChange: KeywordSearchSignatureArgs['applySearchFn'];\n    /** Indicates the search box should be hidden. */\n    searchBoxHidden?: boolean;\n    /** Indicates the search box should be disabled. */\n    searchBoxDisabled?: boolean;\n    /** Optional placeholder value for the search box. */\n    searchPlaceholder?: string;\n}\n\nexport interface KeywordSearchToolbarSignature {\n    Element: HTMLDivElement;\n    Args: KeywordSearchToolbarArgs;\n    Blocks: {\n        default: [];\n    };\n}\n\nconst KeywordSearchToolbar = templateOnlyComponent<KeywordSearchToolbarSignature>();\nexport default KeywordSearchToolbar;\n"],"names":["TEMPLATE","createTemplateFactory","scope","actionSheet_","t_","array","hash","coalesce_","ActionSheetConfirmSave","templateOnlyComponent","confirmSave","setComponentTemplate","on","guidFor_","tc_","tc_0","spinnerSvg_","async","uploadFile","file","formData","FormData","append","Object","assign","this","isUploading","fileName","name","_this$args$fileUpload","_this$args","result","postFormData","call","args","endpoint","fileUploaded","error","_this$args$uploadFail","_this$args2","uploadFailed","defaultHeaders","apiBaseUrl","ajax","Promise","resolve","reject","_defaultHeaders$ajaxr","xhr","XMLHttpRequest","open","concat","setRequestHeader","ajaxrequestuniquekey","onload","status","JSON","parse","responseText","statusText","onerror","send","resetUploadField","fileInput","files","value","FileUploadComponent","c","_ajax","WeakMap","_fileName","_isUploading","_FileUploadComponent","Component","constructor","arguments","_classPrivateFieldInitSpec","i","maxFileSize","_this$args$maxFileSiz","fileSelected","evt","_fileInput$files","_this$args$fileChange","_this$args3","target","length","fileChanged","_this$args$fileTooLar","_this$args4","size","fileTooLarge","selectFile","e","_e$target$closest","preventDefault","closest","querySelector","click","onKeyUp","_evt$target$closest","isEnterOrSpaceCode","code","g","prototype","inject","tracked","n","action","intlPath","module","path","pageView_","routeViewContentDeleteModel_","PageViewDetails","scheduleHourLabels_","ScheduleView","BaseSchedule","scheduleElements","getScheduleElements","allTimesText","_ScheduleView","computed","simpleBinary_","simpleBinaryLabel_","_state","_isPending","AsyncToggle","_defineProperty","buildTask","context","generator","state","onChange","checked","_unused","timeout","drop","css","A","undefined","compact","join","_AsyncToggle","equal","handleNumberChange","set","Number","keywordSearch_","KeywordSearchToolbar","keywordSearchToolbar"],"sourceRoot":""}