@vireo-ai/trellis-ui 0.1.47 → 0.1.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/packages/client/src/components/checkbox/styles.css +5 -0
- package/packages/client/src/components/sidebar/styles.css +8 -0
- package/packages/client/src/styles/generated/theme-fonts.css +1 -1
- package/packages/client/src/styles/generated/theme-palette.css +1 -1
- package/packages/client/src/styles/generated/theme-runtime.css +49 -49
- package/packages/client/src/styles/generated-sources.css +1 -1
- package/packages/client/src/styles/recipes/selection.css +0 -4
- package/packages/client/types/component-api.d.ts +3 -1
- package/packages/client/types/components/data-grid/contract.d.ts +1 -0
- package/packages/client/types/components/data-grid/index.d.ts +28 -4
- package/packages/client/types/components/runtime.d.ts +1 -1
- package/packages/client/types/components/sidebar/machine.d.ts +3 -3
- package/packages/client/types/components/virtualizer/contract.d.ts +1 -29
- package/packages/client/types/components/virtualizer/cursor.d.ts +1 -0
- package/packages/client/types/components/virtualizer/index.d.ts +2 -28
- package/packages/client/types/motion/flip.d.ts +2 -2
- package/packages/client/types/runtime/cursor-data-source.d.ts +45 -0
- package/packages/client/types/runtime/focus-handoff.d.ts +11 -0
- package/packages/client/types/runtime/virtualizer-schema.d.ts +29 -0
- package/packages/client/types/runtime/virtualizer.d.ts +41 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +55 -54
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +332 -315
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-DCacA4wj.js → capability-motion-DoZROkFD.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-DCacA4wj.js.map → capability-motion-DoZROkFD.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BoDF_wQX.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BoDF_wQX.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-BnB9Wz0E.js → capability-sortable-DtSghTO8.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-BnB9Wz0E.js.map → capability-sortable-DtSghTO8.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-BOf7dxV2.js → controller-qWtZCkAC.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-BOf7dxV2.js.map → controller-qWtZCkAC.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-DBX5qDXb.js → core-BgbZXaDN.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-DBX5qDXb.js.map → core-BgbZXaDN.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-1meMFJbq.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-1meMFJbq.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Dqyot6vM.js → entry.generated-B-wVMxe6.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Dqyot6vM.js.map → entry.generated-B-wVMxe6.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BdiyPh0p.js → entry.generated-BYDBzadH.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BdiyPh0p.js.map → entry.generated-BYDBzadH.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-F2czAXCg.js → entry.generated-B_q7LVNv.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-F2czAXCg.js.map → entry.generated-B_q7LVNv.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C0S3uZrm.js → entry.generated-BhtgeSTa.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C0S3uZrm.js.map → entry.generated-BhtgeSTa.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-By9j8PrV.js → entry.generated-CJuVLJw9.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-By9j8PrV.js.map → entry.generated-CJuVLJw9.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CQGhCt9y.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CQGhCt9y.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-EAAmcnsg.js → entry.generated-CRhvZ0DI.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-EAAmcnsg.js.map → entry.generated-CRhvZ0DI.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CZWpqP88.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CZWpqP88.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C5kjUnFe.js → entry.generated-CkBblBv9.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C5kjUnFe.js.map → entry.generated-CkBblBv9.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D6qaa8bk.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D6qaa8bk.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DeXEkXMW.js → entry.generated-Des-gEaR.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Des-gEaR.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BV49EHah.js → entry.generated-OqzkZfIu.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BV49EHah.js.map → entry.generated-OqzkZfIu.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-ZcYuKSSI.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-ZcYuKSSI.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-dyQ_HJ8D.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-dyQ_HJ8D.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DcXzHGIV.js → entry.generated-u0Ueamvw.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DcXzHGIV.js.map → entry.generated-u0Ueamvw.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CPbvsglm.js → entry2.generated-CPbvsglm.js} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-CPbvsglm.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-Dzq4GSqn.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-Dzq4GSqn.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-DzEyK-Fp.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-DzEyK-Fp.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-BQk-uLaI.js +3 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-DT-Hq9qe.js.map → motion-BQk-uLaI.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-DuGUQhxd.js +4 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-CfByjNaO.js.map → ui-DuGUQhxd.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-CSk2RJEN.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-CSk2RJEN.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +124 -118
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +9 -9
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +9 -9
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-Z-__iteD.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-Z-__iteD.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B2rTvkxi.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B2rTvkxi.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B8aXTJK6.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B8aXTJK6.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BEjAV5NT.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BEjAV5NT.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BUbxiHwA.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BUbxiHwA.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B_xTkYSB.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B_xTkYSB.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CPbvsglm.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CSgqcIg6.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CSgqcIg6.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DeXEkXMW.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-a2NebZsn.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-a2NebZsn.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-DT-Hq9qe.js +0 -3
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CfByjNaO.js +0 -4
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtual-window-BHdOw3Pi.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtual-window-BHdOw3Pi.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-BUbxiHwA.js","names":[],"sources":["../../../../../../../../client/src/components/data-grid/contract.ts","../../../../../../../../client/src/components/data-grid/model.ts","../../../../../../../../client/src/components/data-grid/index.ts","../../../../../../../../client/src/components/data-grid/entry.generated.ts"],"sourcesContent":["import {bool, json, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {INTERACTION_TREATMENTS, SELECTION_COLORS} from '../common';\n\nconst DATA_GRID_SELECTIONS = ['none', 'single', 'multiple'] as const;\nconst DATA_GRID_DENSITIES = ['compact', 'default', 'comfortable'] as const;\nconst DATA_GRID_BORDERS = ['none', 'row', 'grid'] as const;\nconst DATA_GRID_RESIZE_MODES = ['onChange', 'onEnd'] as const;\nconst DATA_GRID_PINS = ['', 'left', 'right'] as const;\nconst DATA_GRID_SORTS = ['none', 'ascending', 'descending', 'other'] as const;\nconst DATA_GRID_ALIGNS = ['start', 'center', 'end'] as const;\n\ntype DataGridSelectionValue =\n | {mode: 'ids'; ids: string[]}\n | {mode: 'query'; token: string; total: number; except: string[]};\n\nconst dataGridSchema = {\n fetchUrl: string,\n totalRows: number.min(0).default(0),\n rowHeight: number.min(Number.EPSILON).default(36),\n bufferSize: number.min(1).default(50),\n overscan: number.min(0).default(0),\n initialIndex: number.min(0).default(0),\n startParam: string.default('start'),\n countParam: string.default('count'),\n totalParam: string.default('total'),\n totalHeader: string.default('X-Trellis-Total-Items'),\n assetsHeader: string.default('X-Trellis-Assets'),\n metaSelector: string.default('template[data-ui-virtualizer-meta]'),\n selection: oneOf(DATA_GRID_SELECTIONS, 'none'),\n selectionValue: json<DataGridSelectionValue>({mode: 'ids', ids: []}),\n selectOnRowClick: bool,\n rowKey: string.default('id'),\n stickyHeader: bool.default(true),\n resizableColumns: bool.default(true),\n reorderableColumns: bool.default(true),\n sortableColumns: bool.default(true),\n minColumnWidth: number.min(0).default(60),\n defaultColumnWidth: number.min(Number.EPSILON).default(180),\n maxColumnWidth: json<number | null>(null),\n resizeMode: oneOf(DATA_GRID_RESIZE_MODES, 'onChange'),\n color: oneOf(SELECTION_COLORS, 'neutral'),\n interaction: oneOf(INTERACTION_TREATMENTS, 'edge'),\n dragPreviewPosition: string.trim.default('preserve'),\n density: oneOf(DATA_GRID_DENSITIES, 'default'),\n border: oneOf(DATA_GRID_BORDERS, 'row'),\n empty: string.default('No rows found.'),\n class: string,\n controlsClass: string,\n viewportClass: string,\n headerClass: string,\n rowClass: string,\n cellClass: string,\n footerClass: string,\n emptyClass: string,\n};\n\nconst dataGridColumnSchema = {\n key: string,\n label: string,\n width: number.min(Number.EPSILON).default(180),\n minWidth: number.min(0).default(60),\n maxWidth: json<number | null>(null),\n hidden: bool,\n pinned: oneOf(DATA_GRID_PINS, ''),\n sortable: bool,\n sort: oneOf(DATA_GRID_SORTS, 'none'),\n resizable: bool.default(true),\n reorderable: bool.default(true),\n align: oneOf(DATA_GRID_ALIGNS, 'start'),\n class: string,\n headerClass: string,\n labelClass: string,\n resizeHandleClass: string,\n};\n\nconst dataGridRowsSchema = {\n rows: json<unknown[]>([]),\n columns: json<Array<Record<string, unknown>>>([]),\n startIndex: number.min(0).default(0),\n rowKey: string.default('id'),\n rowComponent: string.default('ui.data-grid.row'),\n cellComponent: string.default('ui.data-grid.cell'),\n class: string,\n};\nconst dataGridRowSchema = {key: string, index: number.min(0).default(0), class: string};\nconst dataGridCellSchema = {column: string, index: number.min(1).default(1), align: oneOf(DATA_GRID_ALIGNS, 'start'), class: string};\nconst dataGridEmptySchema = {class: string};\n\ntype DataGridProps = SchemaToProps<typeof dataGridSchema>;\ntype DataGridColumnProps = SchemaToProps<typeof dataGridColumnSchema>;\ntype DataGridRowsProps = SchemaToProps<typeof dataGridRowsSchema>;\ntype DataGridSelection = typeof DATA_GRID_SELECTIONS[number];\ntype DataGridPin = Exclude<typeof DATA_GRID_PINS[number], ''> | null;\ntype DataGridSort = typeof DATA_GRID_SORTS[number];\ntype DataGridAlign = typeof DATA_GRID_ALIGNS[number];\n\nexport {\n DATA_GRID_ALIGNS,\n DATA_GRID_BORDERS,\n DATA_GRID_DENSITIES,\n DATA_GRID_PINS,\n DATA_GRID_RESIZE_MODES,\n DATA_GRID_SELECTIONS,\n DATA_GRID_SORTS,\n dataGridCellSchema,\n dataGridColumnSchema,\n dataGridEmptySchema,\n dataGridRowSchema,\n dataGridRowsSchema,\n dataGridSchema,\n};\nexport type {\n DataGridAlign,\n DataGridColumnProps,\n DataGridPin,\n DataGridProps,\n DataGridRowsProps,\n DataGridSelection,\n DataGridSelectionValue,\n DataGridSort,\n};\n","import type {DataGridAlign, DataGridPin, DataGridSelection, DataGridSelectionValue, DataGridSort} from './contract';\n\ntype DataGridColumn = {\n key: string;\n label: string;\n width: number;\n minWidth: number;\n maxWidth: number | null;\n hidden: boolean;\n pinned: DataGridPin;\n sortable: boolean;\n sort: DataGridSort;\n resizable: boolean;\n reorderable: boolean;\n align: DataGridAlign;\n cellClass: string;\n element: HTMLElement;\n};\n\ntype DataGridColumnDefaults = {\n width: number;\n minWidth: number;\n maxWidth: number | null;\n resizable: boolean;\n reorderable: boolean;\n};\n\ntype DataGridPinnedOffsets = {left: Map<string, number>; right: Map<string, number>};\ntype SelectionChange = {selection: DataGridSelectionValue; added: string[]; removed: string[]};\n\nconst numberAttribute = (element: HTMLElement, name: string, fallback: number): number => {\n const raw = element.getAttribute(name);\n if (raw === null || raw.trim() === '') return fallback;\n const value = Number(raw);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst optionalNumberAttribute = (element: HTMLElement, name: string, fallback: number | null): number | null => {\n const raw = element.getAttribute(name);\n if (raw === null || raw.trim() === '') return fallback;\n const value = Number(raw);\n return Number.isFinite(value) && value > 0 ? value : null;\n};\n\nconst boolAttribute = (element: HTMLElement, name: string, fallback: boolean): boolean => {\n if (!element.hasAttribute(name)) return fallback;\n const raw = element.getAttribute(name) ?? '';\n return raw === '' || ['true', '1', 'yes', 'on'].includes(raw.toLowerCase());\n};\n\nconst normalizeDataGridColumns = (\n elements: readonly HTMLElement[],\n defaults: DataGridColumnDefaults,\n): DataGridColumn[] => {\n const seen = new Set<string>();\n return elements.flatMap((element) => {\n const key = (element.dataset.column ?? '').trim();\n if (!key) throw new Error('Data Grid columns require a non-empty key.');\n if (element.hasAttribute('data-hidden')) return [];\n if (seen.has(key)) throw new Error(`Data Grid column key \"${key}\" is duplicated.`);\n seen.add(key);\n const minWidth = Math.max(0, numberAttribute(element, 'data-min-width', defaults.minWidth));\n const maxWidth = optionalNumberAttribute(element, 'data-max-width', defaults.maxWidth);\n const unclamped = numberAttribute(element, 'data-width', defaults.width);\n const width = Math.min(maxWidth ?? Number.POSITIVE_INFINITY, Math.max(minWidth, unclamped));\n const pinned = element.dataset.pinned === 'left' || element.dataset.pinned === 'right'\n ? element.dataset.pinned\n : null;\n const sort = ['ascending', 'descending', 'other'].includes(element.dataset.sort ?? '')\n ? element.dataset.sort as DataGridSort\n : 'none';\n const align = ['center', 'end'].includes(element.dataset.align ?? '')\n ? element.dataset.align as DataGridAlign\n : 'start';\n return [{\n key,\n label: element.dataset.label ?? element.textContent?.trim() ?? key,\n width,\n minWidth,\n maxWidth,\n hidden: false,\n pinned,\n sortable: boolAttribute(element, 'data-sortable', false),\n sort,\n resizable: boolAttribute(element, 'data-resizable', defaults.resizable),\n reorderable: boolAttribute(element, 'data-reorderable', defaults.reorderable),\n align,\n cellClass: element.dataset.cellClass ?? '',\n element,\n }];\n });\n};\n\nconst columnTemplate = (columns: readonly DataGridColumn[]): string => (\n columns.map(({width}) => `${width}px`).join(' ')\n);\n\nconst pinnedOffsets = (columns: readonly DataGridColumn[]): DataGridPinnedOffsets => {\n const left = new Map<string, number>();\n const right = new Map<string, number>();\n let offset = 0;\n columns.forEach((column) => {\n if (column.pinned !== 'left') return;\n left.set(column.key, offset);\n offset += column.width;\n });\n offset = 0;\n [...columns].reverse().forEach((column) => {\n if (column.pinned !== 'right') return;\n right.set(column.key, offset);\n offset += column.width;\n });\n return {left, right};\n};\n\nconst cssEscape = (value: string): string => (\n globalThis.CSS?.escape ? globalThis.CSS.escape(value) : value.replace(/[^a-zA-Z0-9_-]/g, (character) => `\\\\${character}`)\n);\n\nconst dataGridLayoutCss = (scope: string, columns: readonly DataGridColumn[]): string => {\n const offsets = pinnedOffsets(columns);\n return columns.map((column, index) => {\n const owner = `[data-ui-data-grid-scope=\"${cssEscape(scope)}\"]`;\n const columnSelector = `[data-column=\"${cssEscape(column.key)}\"]`;\n const selector = `${owner} [data-ui-data-grid-column-header]${columnSelector},${owner} [data-ui-data-grid-cell]${columnSelector}`;\n const pin = column.pinned === 'left'\n ? `position:sticky;left:${offsets.left.get(column.key) ?? 0}px;z-index:2;`\n : column.pinned === 'right'\n ? `position:sticky;right:${offsets.right.get(column.key) ?? 0}px;z-index:2;`\n : '';\n return `${selector}{grid-column:${index + 1};${pin}}`;\n }).join('');\n};\n\nconst normalizeSelection = (value: unknown, mode: DataGridSelection): DataGridSelectionValue => {\n if (mode === 'multiple' && typeof value === 'object' && value !== null && (value as {mode?: unknown}).mode === 'query') {\n const query = value as Partial<Extract<DataGridSelectionValue, {mode: 'query'}>>;\n if (typeof query.token === 'string' && Number.isFinite(query.total)) return {\n mode: 'query',\n token: query.token,\n total: Math.max(0, Math.floor(query.total ?? 0)),\n except: [...new Set(Array.isArray(query.except) ? query.except.filter((key): key is string => typeof key === 'string') : [])],\n };\n }\n const ids = typeof value === 'object' && value !== null && (value as {mode?: unknown}).mode === 'ids'\n && Array.isArray((value as {ids?: unknown}).ids)\n ? (value as {ids: unknown[]}).ids.filter((key): key is string => typeof key === 'string')\n : [];\n const unique = [...new Set(ids)];\n return {mode: 'ids', ids: mode === 'single' ? unique.slice(0, 1) : mode === 'none' ? [] : unique};\n};\n\nconst isRowSelected = (selection: DataGridSelectionValue, key: string): boolean => (\n selection.mode === 'query' ? !selection.except.includes(key) : selection.ids.includes(key)\n);\n\nconst toggleSelection = (\n current: DataGridSelectionValue,\n key: string,\n mode: DataGridSelection,\n selected?: boolean,\n): SelectionChange => {\n const normalized = normalizeSelection(current, mode);\n if (mode === 'none') return {selection: normalized, added: [], removed: []};\n const wasSelected = isRowSelected(normalized, key);\n const nextSelected = selected ?? !wasSelected;\n if (wasSelected === nextSelected) return {selection: normalized, added: [], removed: []};\n if (normalized.mode === 'query') {\n const except = nextSelected\n ? normalized.except.filter((value) => value !== key)\n : [...normalized.except, key];\n return {selection: {...normalized, except}, added: nextSelected ? [key] : [], removed: nextSelected ? [] : [key]};\n }\n const ids = mode === 'single' && nextSelected\n ? [key]\n : nextSelected\n ? [...normalized.ids, key]\n : normalized.ids.filter((value) => value !== key);\n return {selection: {mode: 'ids', ids}, added: nextSelected ? [key] : [], removed: nextSelected ? [] : [key]};\n};\n\nconst reorderColumns = (columns: readonly DataGridColumn[], key: string, toIndex: number): DataGridColumn[] | null => {\n const from = columns.findIndex((column) => column.key === key);\n if (from < 0 || !columns[from]?.reorderable) return null;\n const region = columns[from]?.pinned ?? null;\n const regionIndexes = columns.flatMap((column, index) => column.pinned === region ? [index] : []);\n if (!regionIndexes.includes(toIndex)) return null;\n const next = [...columns];\n const [column] = next.splice(from, 1);\n if (!column) return null;\n next.splice(toIndex, 0, column);\n return next;\n};\n\nexport {\n columnTemplate,\n dataGridLayoutCss,\n isRowSelected,\n normalizeDataGridColumns,\n normalizeSelection,\n pinnedOffsets,\n reorderColumns,\n toggleSelection,\n};\nexport type {DataGridColumn, DataGridColumnDefaults, DataGridPinnedOffsets, SelectionChange};\n","import type Alpine from 'alpinejs';\n\nimport {\n createResizable,\n createVirtualWindowController,\n defineAlpineData,\n defineProps,\n fixedAxisWindowAdapter,\n parseVirtualizerFragmentResponse,\n reflectSchemaProp,\n replaceFragmentChildren,\n type FixedAxisWindow,\n type PropState,\n type ResizeEvent,\n type TrellisAlpineComponent,\n type VirtualScrollAlign,\n type VirtualWindowRequest,\n} from '@client/runtime';\nimport {dataGridSchema, type DataGridSelectionValue} from './contract';\nimport {\n columnTemplate,\n dataGridLayoutCss,\n isRowSelected,\n normalizeDataGridColumns,\n normalizeSelection,\n reorderColumns,\n toggleSelection,\n type DataGridColumn,\n} from './model';\n\ntype DataGridResetOptions = {scrollTop?: number};\ntype DataGridSetUrlOptions = {reset?: boolean};\n\n/** Public Alpine API for `ui.data-grid`. @public */\ninterface UiDataGridApi {\n reload(options?: DataGridResetOptions): void;\n reset(options?: DataGridResetOptions): void;\n scrollToIndex(index: number, align?: VirtualScrollAlign): void;\n setUrl(url: string, options?: DataGridSetUrlOptions): void;\n setTotalRows(count: number): void;\n resizeColumn(key: string, width: number): void;\n reorderColumn(key: string, toIndex: number): void;\n selectRow(key: string): void;\n deselectRow(key: string): void;\n toggleRow(key: string): void;\n setSelection(value: DataGridSelectionValue): void;\n selectQuery(token: string, total: number, except?: string[]): void;\n clearSelection(): void;\n}\n\ntype DataGridData = UiDataGridApi & {\n props: PropState<typeof dataGridSchema>;\n init(): void;\n destroy(): void;\n};\n\ntype BlockRecord = {key: string; element: HTMLElement};\n\nconst integer = (value: number, minimum = 0): number => (\n Math.max(minimum, Math.floor(Number.isFinite(value) ? value : minimum))\n);\n\nconst interactiveSelector = 'a,button,input,select,textarea,[contenteditable],[role=\"button\"],[role=\"link\"]';\n\nconst UiDataGrid = (AlpineInstance: Alpine.Alpine): TrellisAlpineComponent<DataGridData> => {\n let root: HTMLElement | null = null;\n let viewport: HTMLElement | null = null;\n let table: HTMLElement | null = null;\n let spacer: HTMLElement | null = null;\n let styleElement: HTMLStyleElement | null = null;\n let columns: DataGridColumn[] = [];\n let blocks: BlockRecord[] = [];\n let totalRows = 0;\n let selection: DataGridSelectionValue = {mode: 'ids', ids: []};\n let currentWindowKey = '';\n let latestScrollTop: number | null = null;\n let scrollFrame = 0;\n let loading = 0;\n let destroyed = false;\n let listenerAborter: AbortController | null = null;\n let suppressPropChange = false;\n const requestAborters = new Map<string, AbortController>();\n const resizeCleanups: Array<() => void> = [];\n const controller = createVirtualWindowController(fixedAxisWindowAdapter);\n\n const dispatch = (name: string, detail: Record<string, unknown>): void => {\n root?.dispatchEvent(new CustomEvent(name, {bubbles: true, composed: true, detail}));\n };\n const addClasses = (element: HTMLElement, value: string): void => {\n const names = value.split(/\\s+/).filter(Boolean);\n if (names.length) element.classList.add(...names);\n };\n const rows = (): HTMLElement[] => Array.from(root?.querySelectorAll<HTMLElement>('[data-ui-data-grid-row]') ?? []);\n const reflectMountedSelection = (): void => {\n rows().forEach((row) => {\n const key = row.dataset.rowKey ?? '';\n const selected = component.props.selection !== 'none' && key !== '' && isRowSelected(selection, key);\n row.toggleAttribute('data-selected', selected);\n if (component.props.selection === 'none') row.removeAttribute('aria-selected');\n else row.setAttribute('aria-selected', String(selected));\n });\n };\n const syncColumnLayout = (): void => {\n if (!root || !styleElement) return;\n root.style.setProperty('--ui-data-grid-template', columnTemplate(columns));\n const scope = root.dataset.uiDataGridScope ?? '';\n styleElement.textContent = dataGridLayoutCss(scope, columns);\n table?.setAttribute('aria-colcount', String(columns.length));\n const headerRow = root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]');\n columns.forEach((column) => headerRow?.append(column.element));\n const indicator = headerRow?.querySelector<HTMLElement>('[data-ui-data-grid-column-indicator]');\n if (indicator) headerRow?.append(indicator);\n rows().forEach((row) => {\n const cells = new Map(Array.from(row.children).flatMap((element) => (\n element instanceof HTMLElement && element.hasAttribute('data-ui-data-grid-cell')\n ? [[element.dataset.column ?? '', element] as const]\n : []\n )));\n columns.forEach(({key}) => {\n const cell = cells.get(key);\n if (cell) row.append(cell);\n });\n });\n columns.forEach((column, index) => {\n column.element.setAttribute('aria-colindex', String(index + 1));\n column.element.dataset.pinned = column.pinned ?? '';\n column.element.toggleAttribute('data-pinned', column.pinned !== null);\n });\n rows().forEach((row) => addClasses(row, component.props.rowClass));\n root.querySelectorAll<HTMLElement>('[data-ui-data-grid-cell]').forEach((cell) => {\n const index = columns.findIndex(({key}) => key === cell.dataset.column);\n if (index >= 0) {\n const column = columns[index]!;\n cell.setAttribute('aria-colindex', String(index + 1));\n addClasses(cell, component.props.cellClass);\n addClasses(cell, column.cellClass);\n if (column.pinned) cell.dataset.pinned = column.pinned;\n else cell.removeAttribute('data-pinned');\n }\n });\n };\n const syncState = (): void => {\n if (!root || !spacer) return;\n root.toggleAttribute('data-loading', loading > 0);\n root.toggleAttribute('data-empty', totalRows === 0);\n root.dataset.selection = component.props.selection;\n table?.setAttribute('aria-rowcount', String(totalRows + 1));\n root.style.setProperty('--ui-data-grid-row-height', `${component.props.rowHeight}px`);\n root.style.setProperty('--ui-data-grid-total-height', `${Math.max(totalRows * component.props.rowHeight, component.props.rowHeight)}px`);\n spacer.style.height = `var(--ui-data-grid-total-height)`;\n reflectMountedSelection();\n };\n const updateTotal = (next: number): void => {\n const normalized = integer(next);\n if (normalized === totalRows) return;\n totalRows = normalized;\n syncState();\n dispatch('ui:data-grid-total-change', {totalRows});\n };\n const blockWindow = (start: number): FixedAxisWindow => fixedAxisWindowAdapter.compute({axes: {y: {\n total: totalRows,\n itemSize: component.props.rowHeight,\n viewportSize: component.props.bufferSize * component.props.rowHeight,\n scrollOffset: start * component.props.rowHeight,\n buffer: 0,\n }}});\n const desiredWindows = (scrollTop: number): FixedAxisWindow[] => {\n if (totalRows === 0) return [];\n const size = integer(component.props.bufferSize, 1);\n const index = Math.min(totalRows - 1, Math.floor(Math.max(0, scrollTop) / component.props.rowHeight));\n const center = Math.floor(index / size) * size;\n const last = Math.floor((totalRows - 1) / size) * size;\n const starts = [center - size, center, center + size].map((start) => Math.min(last, Math.max(0, start)));\n if (center === 0 && last > size) starts.splice(0, 3, 0, size, Math.min(last, size * 2));\n else if (center === last && last > size) starts.splice(0, 3, Math.max(0, last - (size * 2)), last - size, last);\n return [...new Set(starts)].map(blockWindow);\n };\n const requestUrl = (window: FixedAxisWindow): string => {\n const axis = window.axes.y;\n if (!axis) throw new Error('Data Grid requires a vertical virtual window.');\n const url = new URL(component.props.fetchUrl, document.baseURI);\n url.searchParams.set(component.props.startParam, String(axis.start));\n url.searchParams.set(component.props.countParam, String(axis.count));\n url.searchParams.set(component.props.totalParam, String(axis.total));\n return /^[a-z][a-z\\d+.-]*:/i.test(component.props.fetchUrl) || component.props.fetchUrl.startsWith('//')\n ? url.href\n : `${url.pathname}${url.search}${url.hash}`;\n };\n const settle = (): void => {\n loading = Math.max(0, loading - 1);\n syncState();\n if (loading > 0 || latestScrollTop === null || destroyed) return;\n const scrollTop = latestScrollTop;\n latestScrollTop = null;\n reconcile(scrollTop);\n };\n const load = async (\n block: BlockRecord,\n window: FixedAxisWindow,\n request: VirtualWindowRequest<FixedAxisWindow>,\n ): Promise<void> => {\n const axis = window.axes.y;\n if (!axis) return;\n const aborter = new AbortController();\n requestAborters.set(block.key, aborter);\n loading += 1;\n syncState();\n root?.removeAttribute('data-error');\n dispatch('ui:data-grid-load-start', {window});\n try {\n const requestId = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${request.requestGeneration}`;\n const response = await fetch(requestUrl(window), {method: 'GET', headers: {\n Accept: 'text/html',\n 'X-Trellis-Virtualizer': 'true',\n 'X-Trellis-Request-ID': requestId,\n }, signal: aborter.signal});\n if (!response.ok && response.status !== 204) {\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:data-grid-error', {window, status: response.status});\n return;\n }\n const payload = await parseVirtualizerFragmentResponse(response, component.props);\n if (controller.pending(block.key) !== request || destroyed) return;\n const replaced = await replaceFragmentChildren(AlpineInstance, block.element, payload.html, {\n assets: payload.assets,\n shouldReplace: () => controller.pending(block.key) === request && !destroyed,\n });\n if (!replaced) return;\n if (payload.totalItems !== null) updateTotal(payload.totalItems);\n if (!controller.commit(request, window)) return;\n block.element.style.height = `${axis.count * component.props.rowHeight}px`;\n block.element.style.transform = `translateY(${axis.translateOffset}px)`;\n syncColumnLayout();\n reflectMountedSelection();\n dispatch('ui:data-grid-load', {window, start: axis.start, count: axis.count, end: axis.start + axis.count});\n } catch (error) {\n if (aborter.signal.aborted) return;\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:data-grid-error', {window, status: 0, error});\n } finally {\n if (requestAborters.get(block.key) === aborter) requestAborters.delete(block.key);\n settle();\n }\n };\n const reconcile = (scrollTop: number): void => {\n if (loading > 0) {\n latestScrollTop = scrollTop;\n return;\n }\n const desired = desiredWindows(scrollTop);\n const logicalIndex = Math.min(Math.max(0, totalRows - 1), Math.floor(Math.max(0, scrollTop) / component.props.rowHeight));\n const center = desired.find((window) => {\n const axis = window.axes.y;\n return axis && logicalIndex >= axis.start && logicalIndex < axis.start + axis.count;\n }) ?? desired[0];\n if (center && currentWindowKey !== center.key) {\n currentWindowKey = center.key;\n const axis = center.axes.y!;\n dispatch('ui:data-grid-range', {start: axis.start, count: axis.count, end: axis.start + axis.count, window: center});\n }\n if (desired.length === 0) {\n blocks.forEach((block) => void replaceFragmentChildren(AlpineInstance, block.element, ''));\n return;\n }\n const preserved = new Set<BlockRecord>();\n desired.forEach((window) => {\n const existing = blocks.find((block) => controller.mounted(block.key)?.key === window.key);\n if (existing) preserved.add(existing);\n });\n const available = blocks.filter((block) => !preserved.has(block));\n desired.forEach((window) => {\n if (blocks.some((block) => controller.mounted(block.key)?.key === window.key)) return;\n const block = available.shift();\n if (!block) return;\n const request = controller.begin(block.key, window);\n if (request) void load(block, window, request);\n });\n };\n const invalidate = (): void => {\n requestAborters.forEach((aborter) => aborter.abort());\n requestAborters.clear();\n loading = 0;\n latestScrollTop = null;\n currentWindowKey = '';\n controller.invalidate();\n blocks.forEach((block) => {\n block.element.style.height = '';\n block.element.style.transform = '';\n void replaceFragmentChildren(AlpineInstance, block.element, '');\n });\n syncState();\n };\n const setSelection = (value: DataGridSelectionValue, detail?: {added: string[]; removed: string[]}): void => {\n selection = normalizeSelection(value, component.props.selection);\n suppressPropChange = true;\n component.props.selectionValue = selection;\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'selectionValue', value: selection});\n suppressPropChange = false;\n reflectMountedSelection();\n dispatch('ui:data-grid-selection-change', {selection, added: detail?.added ?? [], removed: detail?.removed ?? []});\n };\n const changeRow = (key: string, selected?: boolean): void => {\n const change = toggleSelection(selection, String(key), component.props.selection, selected);\n if (change.added.length === 0 && change.removed.length === 0) return;\n setSelection(change.selection, change);\n };\n const updateColumnWidth = (column: DataGridColumn, width: number, phase: 'start' | 'resize' | 'end'): void => {\n column.width = Math.min(column.maxWidth ?? Number.POSITIVE_INFINITY, Math.max(column.minWidth, width));\n syncColumnLayout();\n dispatch('ui:data-grid-column-resize', {column: column.key, width: column.width, phase});\n };\n const registerResizeHandles = (): void => {\n resizeCleanups.splice(0).forEach((cleanup) => cleanup());\n columns.forEach((column) => {\n const handle = column.element.querySelector<HTMLElement>('[data-ui-data-grid-resize-handle]');\n if (!handle) return;\n const enabled = column.resizable && component.props.resizableColumns;\n if (enabled) handle.removeAttribute('aria-disabled');\n else handle.setAttribute('aria-disabled', 'true');\n handle.tabIndex = enabled ? 0 : -1;\n if (!enabled) return;\n const onResize = (event: ResizeEvent): void => updateColumnWidth(column, event.previewWidth, event.phase);\n resizeCleanups.push(createResizable({\n element: column.element,\n handle,\n axis: 'x',\n min: column.minWidth,\n max: column.maxWidth,\n mode: component.props.resizeMode,\n disabled: () => !component.props.resizableColumns || !column.resizable,\n onStart: onResize,\n onResize,\n onEnd: onResize,\n }));\n });\n };\n\n const component: TrellisAlpineComponent<DataGridData> = {\n props: null as unknown as PropState<typeof dataGridSchema>,\n init(): void {\n root = this.$el;\n destroyed = false;\n const scope = globalThis.crypto?.randomUUID?.() ?? `grid-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n root.dataset.uiDataGridScope = scope;\n root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]')?.setAttribute('data-sortable-scope', scope);\n this.props = defineProps({el: root, schema: dataGridSchema, onChange: (_state, changes) => {\n if (suppressPropChange) return;\n const keys = changes.map(({key}) => key);\n if (keys.includes('selectionValue') || keys.includes('selection')) {\n selection = normalizeSelection(this.props.selectionValue, this.props.selection);\n reflectMountedSelection();\n }\n if (keys.includes('resizableColumns')) registerResizeHandles();\n if (keys.includes('totalRows')) {\n updateTotal(this.props.totalRows);\n this.reload();\n } else if (keys.some((key) => ['fetchUrl', 'rowHeight', 'bufferSize'].includes(key))) this.reload();\n }});\n totalRows = integer(this.props.totalRows);\n selection = normalizeSelection(this.props.selectionValue, this.props.selection);\n viewport = root.querySelector<HTMLElement>('[data-ui-data-grid-viewport]')\n ?? root.querySelector<HTMLElement>('[data-ui-scroll-area-viewport]');\n table = root.querySelector<HTMLElement>('[data-ui-data-grid-inner]');\n spacer = root.querySelector<HTMLElement>('[data-ui-data-grid-spacer]');\n styleElement = root.querySelector<HTMLStyleElement>('style[data-ui-data-grid-layout]');\n blocks = Array.from(root.querySelectorAll<HTMLElement>('[data-ui-data-grid-block]')).slice(0, 3)\n .map((element, index) => ({element, key: `block-${index + 1}`}));\n if (!viewport || !table || !spacer || !styleElement || blocks.length !== 3) {\n throw new Error('Data Grid requires one viewport, table owner, spacer, layout style, and three row blocks.');\n }\n viewport.setAttribute('data-ui-data-grid-viewport', '');\n columns = normalizeDataGridColumns(\n Array.from(root.querySelectorAll<HTMLElement>('[data-ui-data-grid-column-header]')),\n {width: this.props.defaultColumnWidth, minWidth: this.props.minColumnWidth,\n maxWidth: this.props.maxColumnWidth, resizable: this.props.resizableColumns,\n reorderable: this.props.reorderableColumns},\n );\n syncColumnLayout();\n registerResizeHandles();\n listenerAborter = new AbortController();\n viewport.addEventListener('scroll', () => {\n if (scrollFrame) return;\n scrollFrame = requestAnimationFrame(() => {\n scrollFrame = 0;\n if (viewport) reconcile(viewport.scrollTop);\n });\n }, {passive: true, signal: listenerAborter.signal});\n root.addEventListener('click', (event) => {\n const target = event.target as HTMLElement;\n const sortButton = target.closest<HTMLElement>('[data-ui-data-grid-sort-button]');\n if (sortButton && this.props.sortableColumns) {\n const header = sortButton.closest<HTMLElement>('[data-ui-data-grid-column-header]');\n const column = columns.find(({key}) => key === header?.dataset.column);\n if (column?.sortable) {\n const direction = column.sort === 'ascending' ? 'descending' : 'ascending';\n dispatch('ui:data-grid-sort', {column: column.key, direction, additive: event.shiftKey});\n }\n return;\n }\n const row = target.closest<HTMLElement>('[data-ui-data-grid-row]');\n if (!row || !root?.contains(row)) return;\n const key = row.dataset.rowKey ?? '';\n if (this.props.selectOnRowClick && !target.closest(interactiveSelector)) changeRow(key);\n dispatch('ui:data-grid-row-activate', {rowKey: key, row});\n }, {signal: listenerAborter.signal});\n root.addEventListener('dblclick', (event) => {\n const cell = (event.target as HTMLElement).closest<HTMLElement>('[data-ui-data-grid-cell]');\n const row = cell?.closest<HTMLElement>('[data-ui-data-grid-row]');\n if (cell && row) dispatch('ui:data-grid-cell-activate', {\n rowKey: row.dataset.rowKey ?? '', column: cell.dataset.column ?? '', cell,\n });\n }, {signal: listenerAborter.signal});\n root.addEventListener('ui:sortable-drop', ((event: CustomEvent) => {\n const source = event.detail?.source;\n if (source?.type !== 'data-grid-column') return;\n const to = Number(event.detail?.index ?? event.detail?.anchor?.index);\n if (Number.isInteger(to)) this.reorderColumn(String(source.id), to);\n }) as EventListener, {signal: listenerAborter.signal});\n viewport.style.overscrollBehavior = 'contain';\n viewport.style.overflowAnchor = 'none';\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalRows, itemSize: this.props.rowHeight, viewportSize: viewport.clientHeight,\n scrollOffset: 0, buffer: this.props.bufferSize,\n }, {axis: 'y', index: this.props.initialIndex});\n syncState();\n reconcile(viewport.scrollTop);\n },\n destroy(): void {\n destroyed = true;\n if (scrollFrame) cancelAnimationFrame(scrollFrame);\n listenerAborter?.abort();\n listenerAborter = null;\n resizeCleanups.splice(0).forEach((cleanup) => cleanup());\n invalidate();\n this.props.disconnect();\n root = null;\n viewport = null;\n table = null;\n spacer = null;\n styleElement = null;\n columns = [];\n blocks = [];\n },\n scrollToIndex(index, align = 'start'): void {\n if (!viewport) return;\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalRows, itemSize: this.props.rowHeight, viewportSize: viewport.clientHeight,\n scrollOffset: viewport.scrollTop, buffer: this.props.bufferSize,\n }, {axis: 'y', index, align});\n reconcile(viewport.scrollTop);\n },\n setTotalRows(count): void {\n updateTotal(count);\n this.reload({scrollTop: viewport?.scrollTop ?? 0});\n },\n setUrl(url, options = {}): void {\n suppressPropChange = true;\n this.props.fetchUrl = String(url);\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'fetchUrl', value: String(url)});\n suppressPropChange = false;\n if (options.reset ?? true) this.reset();\n else this.reload();\n },\n reset(options = {}): void { this.reload({scrollTop: options.scrollTop ?? 0}); },\n reload(options = {}): void {\n const scrollTop = options.scrollTop ?? viewport?.scrollTop ?? 0;\n invalidate();\n if (viewport) viewport.scrollTop = Math.max(0, scrollTop);\n reconcile(scrollTop);\n },\n resizeColumn(key, width): void {\n const column = columns.find((candidate) => candidate.key === key);\n if (column) updateColumnWidth(column, Number(width), 'end');\n },\n reorderColumn(key, toIndex): void {\n const from = columns.findIndex((column) => column.key === key);\n const next = reorderColumns(columns, key, integer(toIndex));\n if (!next) return;\n columns = next;\n syncColumnLayout();\n dispatch('ui:data-grid-column-reorder', {column: key, from, to: integer(toIndex), columns: columns.map(({key: columnKey}) => columnKey)});\n },\n selectRow(key): void { changeRow(String(key), true); },\n deselectRow(key): void { changeRow(String(key), false); },\n toggleRow(key): void { changeRow(String(key)); },\n setSelection(value): void { setSelection(value); },\n selectQuery(token, total, except = []): void {\n setSelection({mode: 'query', token: String(token), total: integer(total), except: except.map(String)});\n },\n clearSelection(): void { setSelection({mode: 'ids', ids: []}); },\n };\n return component;\n};\n\nconst registerDataGrid = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiDataGrid', () => UiDataGrid(AlpineInstance))(AlpineInstance);\n};\n\nexport {registerDataGrid, UiDataGrid};\nexport type {DataGridData, DataGridResetOptions, DataGridSetUrlOptions, UiDataGridApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerResizableCapability} from '../../capabilities/resizable';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerSortableCapability} from '../../capabilities/sortable';\nimport {registerDataGrid as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerDataGrid = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerResizableCapability(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerSortableCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerDataGrid};\nexport default registerDataGrid;\nexport * from './index';\n"],"mappings":"4eAGA,IAAM,EAAuB,CAAC,OAAQ,SAAU,UAAU,EACpD,EAAsB,CAAC,UAAW,UAAW,aAAa,EAC1D,EAAoB,CAAC,OAAQ,MAAO,MAAM,EAC1C,EAAyB,CAAC,WAAY,OAAO,EAC7C,EAAiB,CAAC,GAAI,OAAQ,OAAO,EACrC,EAAkB,CAAC,OAAQ,YAAa,aAAc,OAAO,EAC7D,EAAmB,CAAC,QAAS,SAAU,KAAK,EAM5C,EAAiB,CACnB,SAAU,EACV,UAAW,EAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EAClC,UAAW,EAAO,UAAkB,EAAE,QAAQ,EAAE,EAChD,WAAY,EAAO,IAAI,CAAC,EAAE,QAAQ,EAAE,EACpC,SAAU,EAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EACjC,aAAc,EAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EACrC,WAAY,EAAO,QAAQ,OAAO,EAClC,WAAY,EAAO,QAAQ,OAAO,EAClC,WAAY,EAAO,QAAQ,OAAO,EAClC,YAAa,EAAO,QAAQ,uBAAuB,EACnD,aAAc,EAAO,QAAQ,kBAAkB,EAC/C,aAAc,EAAO,QAAQ,oCAAoC,EACjE,UAAW,EAAM,EAAsB,MAAM,EAC7C,eAAgB,EAA6B,CAAC,KAAM,MAAO,IAAK,CAAC,CAAC,CAAC,EACnE,iBAAkB,EAClB,OAAQ,EAAO,QAAQ,IAAI,EAC3B,aAAc,EAAK,QAAQ,EAAI,EAC/B,iBAAkB,EAAK,QAAQ,EAAI,EACnC,mBAAoB,EAAK,QAAQ,EAAI,EACrC,gBAAiB,EAAK,QAAQ,EAAI,EAClC,eAAgB,EAAO,IAAI,CAAC,EAAE,QAAQ,EAAE,EACxC,mBAAoB,EAAO,UAAkB,EAAE,QAAQ,GAAG,EAC1D,eAAgB,EAAoB,IAAI,EACxC,WAAY,EAAM,EAAwB,UAAU,EACpD,MAAO,EAAM,EAAkB,SAAS,EACxC,YAAa,EAAM,EAAwB,MAAM,EACjD,oBAAqB,EAAO,KAAK,QAAQ,UAAU,EACnD,QAAS,EAAM,EAAqB,SAAS,EAC7C,OAAQ,EAAM,EAAmB,KAAK,EACtC,MAAO,EAAO,QAAQ,gBAAgB,EACtC,MAAO,EACP,cAAe,EACf,cAAe,EACf,YAAa,EACb,SAAU,EACV,UAAW,EACX,YAAa,EACb,WAAY,CAChB,EAKW,EAAO,UAAkB,EAAE,QAAQ,GAAG,EACnC,EAAO,IAAI,CAAC,EAAE,QAAQ,EAAE,EACxB,EAAoB,IAAI,EAE1B,EAAM,EAAgB,EAAE,EAE1B,EAAM,EAAiB,MAAM,EACxB,EAAK,QAAQ,EAAI,EACf,EAAK,QAAQ,EAAI,EACvB,EAAM,EAAkB,OAAO,EAQhC,EAAgB,CAAC,CAAC,EACf,EAAqC,CAAC,CAAC,EACpC,EAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EAC3B,EAAO,QAAQ,IAAI,EACb,EAAO,QAAQ,kBAAkB,EAChC,EAAO,QAAQ,mBAAmB,EAGN,EAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EACnB,EAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAU,EAAM,EAAkB,OAAO,ECvDnH,IAAM,GAAmB,EAAsB,EAAc,IAA6B,CACtF,IAAM,EAAM,EAAQ,aAAa,CAAI,EACrC,GAAI,IAAQ,MAAQ,EAAI,KAAK,IAAM,GAAI,OAAO,EAC9C,IAAM,EAAQ,OAAO,CAAG,EACxB,OAAO,OAAO,SAAS,CAAK,EAAI,EAAQ,CAC5C,EAEM,GAA2B,EAAsB,EAAc,IAA2C,CAC5G,IAAM,EAAM,EAAQ,aAAa,CAAI,EACrC,GAAI,IAAQ,MAAQ,EAAI,KAAK,IAAM,GAAI,OAAO,EAC9C,IAAM,EAAQ,OAAO,CAAG,EACxB,OAAO,OAAO,SAAS,CAAK,GAAK,EAAQ,EAAI,EAAQ,IACzD,EAEM,GAAiB,EAAsB,EAAc,IAA+B,CACtF,GAAI,CAAC,EAAQ,aAAa,CAAI,EAAG,OAAO,EACxC,IAAM,EAAM,EAAQ,aAAa,CAAI,GAAK,GAC1C,OAAO,IAAQ,IAAM,CAAC,OAAQ,IAAK,MAAO,IAAI,EAAE,SAAS,EAAI,YAAY,CAAC,CAC9E,EAEM,IACF,EACA,IACmB,CACnB,IAAM,EAAO,IAAI,IACjB,OAAO,EAAS,QAAS,GAAY,CACjC,IAAM,GAAO,EAAQ,QAAQ,QAAU,IAAI,KAAK,EAChD,GAAI,CAAC,EAAK,MAAU,MAAM,4CAA4C,EACtE,GAAI,EAAQ,aAAa,aAAa,EAAG,MAAO,CAAC,EACjD,GAAI,EAAK,IAAI,CAAG,EAAG,MAAU,MAAM,yBAAyB,EAAI,iBAAiB,EACjF,EAAK,IAAI,CAAG,EACZ,IAAM,EAAW,KAAK,IAAI,EAAG,EAAgB,EAAS,iBAAkB,EAAS,QAAQ,CAAC,EACpF,EAAW,EAAwB,EAAS,iBAAkB,EAAS,QAAQ,EAC/E,EAAY,EAAgB,EAAS,aAAc,EAAS,KAAK,EACjE,EAAQ,KAAK,IAAI,GAAY,IAA0B,KAAK,IAAI,EAAU,CAAS,CAAC,EACpF,EAAS,EAAQ,QAAQ,SAAW,QAAU,EAAQ,QAAQ,SAAW,QACzE,EAAQ,QAAQ,OAChB,KACA,EAAO,CAAC,YAAa,aAAc,OAAO,EAAE,SAAS,EAAQ,QAAQ,MAAQ,EAAE,EAC/E,EAAQ,QAAQ,KAChB,OACA,EAAQ,CAAC,SAAU,KAAK,EAAE,SAAS,EAAQ,QAAQ,OAAS,EAAE,EAC9D,EAAQ,QAAQ,MAChB,QACN,MAAO,CAAC,CACJ,MACA,MAAO,EAAQ,QAAQ,OAAS,EAAQ,aAAa,KAAK,GAAK,EAC/D,QACA,WACA,WACA,OAAQ,GACR,SACA,SAAU,EAAc,EAAS,gBAAiB,EAAK,EACvD,OACA,UAAW,EAAc,EAAS,iBAAkB,EAAS,SAAS,EACtE,YAAa,EAAc,EAAS,mBAAoB,EAAS,WAAW,EAC5E,QACA,UAAW,EAAQ,QAAQ,WAAa,GACxC,SACJ,CAAC,CACL,CAAC,CACL,EAEM,GAAkB,GACpB,EAAQ,KAAK,CAAC,WAAW,GAAG,EAAM,GAAG,EAAE,KAAK,GAAG,EAG7C,EAAiB,GAA8D,CACjF,IAAM,EAAO,IAAI,IACX,EAAQ,IAAI,IACd,EAAS,EAYb,OAXA,EAAQ,QAAS,GAAW,CACpB,EAAO,SAAW,SACtB,EAAK,IAAI,EAAO,IAAK,CAAM,EAC3B,GAAU,EAAO,MACrB,CAAC,EACD,EAAS,EACT,CAAC,GAAG,CAAO,EAAE,QAAQ,EAAE,QAAS,GAAW,CACnC,EAAO,SAAW,UACtB,EAAM,IAAI,EAAO,IAAK,CAAM,EAC5B,GAAU,EAAO,MACrB,CAAC,EACM,CAAC,OAAM,OAAK,CACvB,EAEM,EAAa,GACf,WAAW,KAAK,OAAS,WAAW,IAAI,OAAO,CAAK,EAAI,EAAM,QAAQ,kBAAoB,GAAc,KAAK,GAAW,EAGtH,GAAqB,EAAe,IAA+C,CACrF,IAAM,EAAU,EAAc,CAAO,EACrC,OAAO,EAAQ,KAAK,EAAQ,IAAU,CAClC,IAAM,EAAQ,6BAA6B,EAAU,CAAK,EAAE,IACtD,EAAiB,iBAAiB,EAAU,EAAO,GAAG,EAAE,IACxD,EAAW,GAAG,EAAM,oCAAoC,EAAe,GAAG,EAAM,2BAA2B,IAC3G,EAAM,EAAO,SAAW,OACxB,wBAAwB,EAAQ,KAAK,IAAI,EAAO,GAAG,GAAK,EAAE,eAC1D,EAAO,SAAW,QACd,yBAAyB,EAAQ,MAAM,IAAI,EAAO,GAAG,GAAK,EAAE,eAC5D,GACV,MAAO,GAAG,EAAS,eAAe,EAAQ,EAAE,GAAG,EAAI,EACvD,CAAC,EAAE,KAAK,EAAE,CACd,EAEM,GAAsB,EAAgB,IAAoD,CAC5F,GAAI,IAAS,YAAc,OAAO,GAAU,UAAY,GAAmB,EAA2B,OAAS,QAAS,CACpH,IAAM,EAAQ,EACd,GAAI,OAAO,EAAM,OAAU,UAAY,OAAO,SAAS,EAAM,KAAK,EAAG,MAAO,CACxE,KAAM,QACN,MAAO,EAAM,MACb,MAAO,KAAK,IAAI,EAAG,KAAK,MAAM,EAAM,OAAS,CAAC,CAAC,EAC/C,OAAQ,CAAC,GAAG,IAAI,IAAI,MAAM,QAAQ,EAAM,MAAM,EAAI,EAAM,OAAO,OAAQ,GAAuB,OAAO,GAAQ,QAAQ,EAAI,CAAC,CAAC,CAAC,CAChI,CACJ,CACA,IAAM,EAAM,OAAO,GAAU,UAAY,GAAmB,EAA2B,OAAS,OACzF,MAAM,QAAS,EAA0B,GAAG,EAC5C,EAA2B,IAAI,OAAQ,GAAuB,OAAO,GAAQ,QAAQ,EACtF,CAAC,EACD,EAAS,CAAC,GAAG,IAAI,IAAI,CAAG,CAAC,EAC/B,MAAO,CAAC,KAAM,MAAO,IAAK,IAAS,SAAW,EAAO,MAAM,EAAG,CAAC,EAAI,IAAS,OAAS,CAAC,EAAI,CAAM,CACpG,EAEM,GAAiB,EAAmC,IACtD,EAAU,OAAS,QAAU,CAAC,EAAU,OAAO,SAAS,CAAG,EAAI,EAAU,IAAI,SAAS,CAAG,EAGvF,GACF,EACA,EACA,EACA,IACkB,CAClB,IAAM,EAAa,EAAmB,EAAS,CAAI,EACnD,GAAI,IAAS,OAAQ,MAAO,CAAC,UAAW,EAAY,MAAO,CAAC,EAAG,QAAS,CAAC,CAAC,EAC1E,IAAM,EAAc,EAAc,EAAY,CAAG,EAC3C,EAAe,GAAY,CAAC,EAClC,GAAI,IAAgB,EAAc,MAAO,CAAC,UAAW,EAAY,MAAO,CAAC,EAAG,QAAS,CAAC,CAAC,EACvF,GAAI,EAAW,OAAS,QAAS,CAC7B,IAAM,EAAS,EACT,EAAW,OAAO,OAAQ,GAAU,IAAU,CAAG,EACjD,CAAC,GAAG,EAAW,OAAQ,CAAG,EAChC,MAAO,CAAC,UAAW,CAAC,GAAG,EAAY,QAAM,EAAG,MAAO,EAAe,CAAC,CAAG,EAAI,CAAC,EAAG,QAAS,EAAe,CAAC,EAAI,CAAC,CAAG,CAAC,CACpH,CAMA,MAAO,CAAC,UAAW,CAAC,KAAM,MAAO,IALrB,IAAS,UAAY,EAC3B,CAAC,CAAG,EACJ,EACI,CAAC,GAAG,EAAW,IAAK,CAAG,EACvB,EAAW,IAAI,OAAQ,GAAU,IAAU,CAAG,CACpB,EAAG,MAAO,EAAe,CAAC,CAAG,EAAI,CAAC,EAAG,QAAS,EAAe,CAAC,EAAI,CAAC,CAAG,CAAC,CAC/G,EAEM,GAAkB,EAAoC,EAAa,IAA6C,CAClH,IAAM,EAAO,EAAQ,UAAW,GAAW,EAAO,MAAQ,CAAG,EAC7D,GAAI,EAAO,GAAK,CAAC,EAAQ,IAAO,YAAa,OAAO,KACpD,IAAM,EAAS,EAAQ,IAAO,QAAU,KAExC,GAAI,CADkB,EAAQ,SAAS,EAAQ,IAAU,EAAO,SAAW,EAAS,CAAC,CAAK,EAAI,CAAC,CAC1F,EAAc,SAAS,CAAO,EAAG,OAAO,KAC7C,IAAM,EAAO,CAAC,GAAG,CAAO,EAClB,CAAC,GAAU,EAAK,OAAO,EAAM,CAAC,EAGpC,OAFK,GACL,EAAK,OAAO,EAAS,EAAG,CAAM,EACvB,GAFa,IAGxB,ECtIM,GAAW,EAAe,EAAU,IACtC,KAAK,IAAI,EAAS,KAAK,MAAM,OAAO,SAAS,CAAK,EAAI,EAAQ,CAAO,CAAC,EAGpE,EAAsB,iFAEtB,EAAc,GAAwE,CACxF,IAAI,EAA2B,KAC3B,EAA+B,KAC/B,EAA4B,KAC5B,EAA6B,KAC7B,EAAwC,KACxC,EAA4B,CAAC,EAC7B,EAAwB,CAAC,EACzB,EAAY,EACZ,EAAoC,CAAC,KAAM,MAAO,IAAK,CAAC,CAAC,EACzD,EAAmB,GACnB,EAAiC,KACjC,EAAc,EACd,EAAU,EACV,EAAY,GACZ,EAA0C,KAC1C,EAAqB,GACnB,EAAkB,IAAI,IACtB,EAAoC,CAAC,EACrC,EAAa,EAA8B,CAAsB,EAEjE,GAAY,EAAc,IAA0C,CACtE,GAAM,cAAc,IAAI,YAAY,EAAM,CAAC,QAAS,GAAM,SAAU,GAAM,QAAM,CAAC,CAAC,CACtF,EACM,GAAc,EAAsB,IAAwB,CAC9D,IAAM,EAAQ,EAAM,MAAM,KAAK,EAAE,OAAO,OAAO,EAC3C,EAAM,QAAQ,EAAQ,UAAU,IAAI,GAAG,CAAK,CACpD,EACM,MAA4B,MAAM,KAAK,GAAM,iBAA8B,yBAAyB,GAAK,CAAC,CAAC,EAC3G,MAAsC,CACxC,EAAK,EAAE,QAAS,GAAQ,CACpB,IAAM,EAAM,EAAI,QAAQ,QAAU,GAC5B,EAAW,EAAU,MAAM,YAAc,QAAU,IAAQ,IAAM,EAAc,EAAW,CAAG,EACnG,EAAI,gBAAgB,gBAAiB,CAAQ,EACzC,EAAU,MAAM,YAAc,OAAQ,EAAI,gBAAgB,eAAe,EACxE,EAAI,aAAa,gBAAiB,OAAO,CAAQ,CAAC,CAC3D,CAAC,CACL,EACM,MAA+B,CACjC,GAAI,CAAC,GAAQ,CAAC,EAAc,OAC5B,EAAK,MAAM,YAAY,0BAA2B,GAAe,CAAO,CAAC,EACzE,IAAM,EAAQ,EAAK,QAAQ,iBAAmB,GAC9C,EAAa,YAAc,EAAkB,EAAO,CAAO,EAC3D,GAAO,aAAa,gBAAiB,OAAO,EAAQ,MAAM,CAAC,EAC3D,IAAM,EAAY,EAAK,cAA2B,gCAAgC,EAClF,EAAQ,QAAS,GAAW,GAAW,OAAO,EAAO,OAAO,CAAC,EAC7D,IAAM,EAAY,GAAW,cAA2B,sCAAsC,EAC1F,GAAW,GAAW,OAAO,CAAS,EAC1C,EAAK,EAAE,QAAS,GAAQ,CACpB,IAAM,EAAQ,IAAI,IAAI,MAAM,KAAK,EAAI,QAAQ,EAAE,QAAS,GACpD,aAAmB,aAAe,EAAQ,aAAa,wBAAwB,EACzE,CAAC,CAAC,EAAQ,QAAQ,QAAU,GAAI,CAAO,CAAU,EACjD,CAAC,CACV,CAAC,EACF,EAAQ,SAAS,CAAC,SAAS,CACvB,IAAM,EAAO,EAAM,IAAI,CAAG,EACtB,GAAM,EAAI,OAAO,CAAI,CAC7B,CAAC,CACL,CAAC,EACD,EAAQ,SAAS,EAAQ,IAAU,CAC/B,EAAO,QAAQ,aAAa,gBAAiB,OAAO,EAAQ,CAAC,CAAC,EAC9D,EAAO,QAAQ,QAAQ,OAAS,EAAO,QAAU,GACjD,EAAO,QAAQ,gBAAgB,cAAe,EAAO,SAAW,IAAI,CACxE,CAAC,EACD,EAAK,EAAE,QAAS,GAAQ,EAAW,EAAK,EAAU,MAAM,QAAQ,CAAC,EACjE,EAAK,iBAA8B,0BAA0B,EAAE,QAAS,GAAS,CAC7E,IAAM,EAAQ,EAAQ,WAAW,CAAC,SAAS,IAAQ,EAAK,QAAQ,MAAM,EACtE,GAAI,GAAS,EAAG,CACZ,IAAM,EAAS,EAAQ,GACvB,EAAK,aAAa,gBAAiB,OAAO,EAAQ,CAAC,CAAC,EACpD,EAAW,EAAM,EAAU,MAAM,SAAS,EAC1C,EAAW,EAAM,EAAO,SAAS,EAC7B,EAAO,OAAQ,EAAK,QAAQ,OAAS,EAAO,OAC3C,EAAK,gBAAgB,aAAa,CAC3C,CACJ,CAAC,CACL,EACM,MAAwB,CACtB,CAAC,GAAQ,CAAC,IACd,EAAK,gBAAgB,eAAgB,EAAU,CAAC,EAChD,EAAK,gBAAgB,aAAc,IAAc,CAAC,EAClD,EAAK,QAAQ,UAAY,EAAU,MAAM,UACzC,GAAO,aAAa,gBAAiB,OAAO,EAAY,CAAC,CAAC,EAC1D,EAAK,MAAM,YAAY,4BAA6B,GAAG,EAAU,MAAM,UAAU,GAAG,EACpF,EAAK,MAAM,YAAY,8BAA+B,GAAG,KAAK,IAAI,EAAY,EAAU,MAAM,UAAW,EAAU,MAAM,SAAS,EAAE,GAAG,EACvI,EAAO,MAAM,OAAS,mCACtB,EAAwB,EAC5B,EACM,EAAe,GAAuB,CACxC,IAAM,EAAa,EAAQ,CAAI,EAC3B,IAAe,IACnB,EAAY,EACZ,EAAU,EACV,EAAS,4BAA6B,CAAC,WAAS,CAAC,EACrD,EACM,EAAe,GAAmC,EAAuB,QAAQ,CAAC,KAAM,CAAC,EAAG,CAC9F,MAAO,EACP,SAAU,EAAU,MAAM,UAC1B,aAAc,EAAU,MAAM,WAAa,EAAU,MAAM,UAC3D,aAAc,EAAQ,EAAU,MAAM,UACtC,OAAQ,CACZ,CAAC,CAAC,CAAC,EACG,EAAkB,GAAyC,CAC7D,GAAI,IAAc,EAAG,MAAO,CAAC,EAC7B,IAAM,EAAO,EAAQ,EAAU,MAAM,WAAY,CAAC,EAC5C,EAAQ,KAAK,IAAI,EAAY,EAAG,KAAK,MAAM,KAAK,IAAI,EAAG,CAAS,EAAI,EAAU,MAAM,SAAS,CAAC,EAC9F,EAAS,KAAK,MAAM,EAAQ,CAAI,EAAI,EACpC,EAAO,KAAK,OAAO,EAAY,GAAK,CAAI,EAAI,EAC5C,EAAS,CAAC,EAAS,EAAM,EAAQ,EAAS,CAAI,EAAE,IAAK,GAAU,KAAK,IAAI,EAAM,KAAK,IAAI,EAAG,CAAK,CAAC,CAAC,EAGvG,OAFI,IAAW,GAAK,EAAO,EAAM,EAAO,OAAO,EAAG,EAAG,EAAG,EAAM,KAAK,IAAI,EAAM,EAAO,CAAC,CAAC,EAC7E,IAAW,GAAQ,EAAO,GAAM,EAAO,OAAO,EAAG,EAAG,KAAK,IAAI,EAAG,EAAQ,EAAO,CAAE,EAAG,EAAO,EAAM,CAAI,EACvG,CAAC,GAAG,IAAI,IAAI,CAAM,CAAC,EAAE,IAAI,CAAW,CAC/C,EACM,EAAc,GAAoC,CACpD,IAAM,EAAO,EAAO,KAAK,EACzB,GAAI,CAAC,EAAM,MAAU,MAAM,+CAA+C,EAC1E,IAAM,EAAM,IAAI,IAAI,EAAU,MAAM,SAAU,SAAS,OAAO,EAI9D,OAHA,EAAI,aAAa,IAAI,EAAU,MAAM,WAAY,OAAO,EAAK,KAAK,CAAC,EACnE,EAAI,aAAa,IAAI,EAAU,MAAM,WAAY,OAAO,EAAK,KAAK,CAAC,EACnE,EAAI,aAAa,IAAI,EAAU,MAAM,WAAY,OAAO,EAAK,KAAK,CAAC,EAC5D,sBAAsB,KAAK,EAAU,MAAM,QAAQ,GAAK,EAAU,MAAM,SAAS,WAAW,IAAI,EACjG,EAAI,KACJ,GAAG,EAAI,WAAW,EAAI,SAAS,EAAI,MAC7C,EACM,MAAqB,CAGvB,GAFA,EAAU,KAAK,IAAI,EAAG,EAAU,CAAC,EACjC,EAAU,EACN,EAAU,GAAK,IAAoB,MAAQ,EAAW,OAC1D,IAAM,EAAY,EAClB,EAAkB,KAClB,EAAU,CAAS,CACvB,EACM,EAAO,MACT,EACA,EACA,IACgB,CAChB,IAAM,EAAO,EAAO,KAAK,EACzB,GAAI,CAAC,EAAM,OACX,IAAM,EAAU,IAAI,gBACpB,EAAgB,IAAI,EAAM,IAAK,CAAO,EACtC,GAAW,EACX,EAAU,EACV,GAAM,gBAAgB,YAAY,EAClC,EAAS,0BAA2B,CAAC,QAAM,CAAC,EAC5C,GAAI,CACA,IAAM,EAAY,WAAW,QAAQ,aAAa,GAAK,GAAG,KAAK,IAAI,EAAE,GAAG,EAAQ,oBAC1E,EAAW,MAAM,MAAM,EAAW,CAAM,EAAG,CAAC,OAAQ,MAAO,QAAS,CACtE,OAAQ,YACR,wBAAyB,OACzB,uBAAwB,CAC5B,EAAG,OAAQ,EAAQ,MAAM,CAAC,EAC1B,GAAI,CAAC,EAAS,IAAM,EAAS,SAAW,IAAK,CACzC,EAAW,KAAK,CAAO,EACvB,GAAM,aAAa,aAAc,EAAE,EACnC,EAAS,qBAAsB,CAAC,SAAQ,OAAQ,EAAS,MAAM,CAAC,EAChE,MACJ,CACA,IAAM,EAAU,MAAM,EAAiC,EAAU,EAAU,KAAK,EAQhF,GAPI,EAAW,QAAQ,EAAM,GAAG,IAAM,GAAW,GAK7C,CAAC,MAJkB,EAAwB,EAAgB,EAAM,QAAS,EAAQ,KAAM,CACxF,OAAQ,EAAQ,OAChB,kBAAqB,EAAW,QAAQ,EAAM,GAAG,IAAM,GAAW,CAAC,CACvE,CAAC,IAEG,EAAQ,aAAe,MAAM,EAAY,EAAQ,UAAU,EAC3D,CAAC,EAAW,OAAO,EAAS,CAAM,GAAG,OACzC,EAAM,QAAQ,MAAM,OAAS,GAAG,EAAK,MAAQ,EAAU,MAAM,UAAU,IACvE,EAAM,QAAQ,MAAM,UAAY,cAAc,EAAK,gBAAgB,KACnE,EAAiB,EACjB,EAAwB,EACxB,EAAS,oBAAqB,CAAC,SAAQ,MAAO,EAAK,MAAO,MAAO,EAAK,MAAO,IAAK,EAAK,MAAQ,EAAK,KAAK,CAAC,CAC9G,OAAS,EAAO,CACZ,GAAI,EAAQ,OAAO,QAAS,OAC5B,EAAW,KAAK,CAAO,EACvB,GAAM,aAAa,aAAc,EAAE,EACnC,EAAS,qBAAsB,CAAC,SAAQ,OAAQ,EAAG,OAAK,CAAC,CAC7D,QAAU,CACF,EAAgB,IAAI,EAAM,GAAG,IAAM,GAAS,EAAgB,OAAO,EAAM,GAAG,EAChF,EAAO,CACX,CACJ,EACM,EAAa,GAA4B,CAC3C,GAAI,EAAU,EAAG,CACb,EAAkB,EAClB,MACJ,CACA,IAAM,EAAU,EAAe,CAAS,EAClC,EAAe,KAAK,IAAI,KAAK,IAAI,EAAG,EAAY,CAAC,EAAG,KAAK,MAAM,KAAK,IAAI,EAAG,CAAS,EAAI,EAAU,MAAM,SAAS,CAAC,EAClH,EAAS,EAAQ,KAAM,GAAW,CACpC,IAAM,EAAO,EAAO,KAAK,EACzB,OAAO,GAAQ,GAAgB,EAAK,OAAS,EAAe,EAAK,MAAQ,EAAK,KAClF,CAAC,GAAK,EAAQ,GACd,GAAI,GAAU,IAAqB,EAAO,IAAK,CAC3C,EAAmB,EAAO,IAC1B,IAAM,EAAO,EAAO,KAAK,EACzB,EAAS,qBAAsB,CAAC,MAAO,EAAK,MAAO,MAAO,EAAK,MAAO,IAAK,EAAK,MAAQ,EAAK,MAAO,OAAQ,CAAM,CAAC,CACvH,CACA,GAAI,EAAQ,SAAW,EAAG,CACtB,EAAO,QAAS,GAAU,KAAK,EAAwB,EAAgB,EAAM,QAAS,EAAE,CAAC,EACzF,MACJ,CACA,IAAM,EAAY,IAAI,IACtB,EAAQ,QAAS,GAAW,CACxB,IAAM,EAAW,EAAO,KAAM,GAAU,EAAW,QAAQ,EAAM,GAAG,GAAG,MAAQ,EAAO,GAAG,EACrF,GAAU,EAAU,IAAI,CAAQ,CACxC,CAAC,EACD,IAAM,EAAY,EAAO,OAAQ,GAAU,CAAC,EAAU,IAAI,CAAK,CAAC,EAChE,EAAQ,QAAS,GAAW,CACxB,GAAI,EAAO,KAAM,GAAU,EAAW,QAAQ,EAAM,GAAG,GAAG,MAAQ,EAAO,GAAG,EAAG,OAC/E,IAAM,EAAQ,EAAU,MAAM,EAC9B,GAAI,CAAC,EAAO,OACZ,IAAM,EAAU,EAAW,MAAM,EAAM,IAAK,CAAM,EAC9C,GAAS,EAAU,EAAO,EAAQ,CAAO,CACjD,CAAC,CACL,EACM,MAAyB,CAC3B,EAAgB,QAAS,GAAY,EAAQ,MAAM,CAAC,EACpD,EAAgB,MAAM,EACtB,EAAU,EACV,EAAkB,KAClB,EAAmB,GACnB,EAAW,WAAW,EACtB,EAAO,QAAS,GAAU,CACtB,EAAM,QAAQ,MAAM,OAAS,GAC7B,EAAM,QAAQ,MAAM,UAAY,GAChC,EAA6B,EAAgB,EAAM,QAAS,EAAE,CAClE,CAAC,EACD,EAAU,CACd,EACM,GAAgB,EAA+B,IAAwD,CACzG,EAAY,EAAmB,EAAO,EAAU,MAAM,SAAS,EAC/D,EAAqB,GACrB,EAAU,MAAM,eAAiB,EAC7B,GAAM,EAAkB,CAAC,GAAI,EAAM,OAAQ,EAAgB,IAAK,iBAAkB,MAAO,CAAS,CAAC,EACvG,EAAqB,GACrB,EAAwB,EACxB,EAAS,gCAAiC,CAAC,YAAW,MAAO,GAAQ,OAAS,CAAC,EAAG,QAAS,GAAQ,SAAW,CAAC,CAAC,CAAC,CACrH,EACM,GAAa,EAAa,IAA6B,CACzD,IAAM,EAAS,EAAgB,EAAW,OAAO,CAAG,EAAG,EAAU,MAAM,UAAW,CAAQ,EACtF,EAAO,MAAM,SAAW,GAAK,EAAO,QAAQ,SAAW,GAC3D,EAAa,EAAO,UAAW,CAAM,CACzC,EACM,GAAqB,EAAwB,EAAe,IAA4C,CAC1G,EAAO,MAAQ,KAAK,IAAI,EAAO,UAAY,IAA0B,KAAK,IAAI,EAAO,SAAU,CAAK,CAAC,EACrG,EAAiB,EACjB,EAAS,6BAA8B,CAAC,OAAQ,EAAO,IAAK,MAAO,EAAO,MAAO,OAAK,CAAC,CAC3F,EACM,MAAoC,CACtC,EAAe,OAAO,CAAC,EAAE,QAAS,GAAY,EAAQ,CAAC,EACvD,EAAQ,QAAS,GAAW,CACxB,IAAM,EAAS,EAAO,QAAQ,cAA2B,mCAAmC,EAC5F,GAAI,CAAC,EAAQ,OACb,IAAM,EAAU,EAAO,WAAa,EAAU,MAAM,iBAIpD,GAHI,EAAS,EAAO,gBAAgB,eAAe,EAC9C,EAAO,aAAa,gBAAiB,MAAM,EAChD,EAAO,SAAW,EAAU,EAAI,GAC5B,CAAC,EAAS,OACd,IAAM,EAAY,GAA6B,EAAkB,EAAQ,EAAM,aAAc,EAAM,KAAK,EACxG,EAAe,KAAK,EAAgB,CAChC,QAAS,EAAO,QAChB,SACA,KAAM,IACN,IAAK,EAAO,SACZ,IAAK,EAAO,SACZ,KAAM,EAAU,MAAM,WACtB,aAAgB,CAAC,EAAU,MAAM,kBAAoB,CAAC,EAAO,UAC7D,QAAS,EACT,WACA,MAAO,CACX,CAAC,CAAC,CACN,CAAC,CACL,EAEM,EAAkD,CACpD,MAAO,KACP,MAAa,CACT,EAAO,KAAK,IACZ,EAAY,GACZ,IAAM,EAAQ,WAAW,QAAQ,aAAa,GAAK,QAAQ,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,IAyB3G,GAxBA,EAAK,QAAQ,gBAAkB,EAC/B,EAAK,cAA2B,gCAAgC,GAAG,aAAa,sBAAuB,CAAK,EAC5G,KAAK,MAAQ,EAAY,CAAC,GAAI,EAAM,OAAQ,EAAgB,UAAW,EAAQ,IAAY,CACvF,GAAI,EAAoB,OACxB,IAAM,EAAO,EAAQ,KAAK,CAAC,SAAS,CAAG,GACnC,EAAK,SAAS,gBAAgB,GAAK,EAAK,SAAS,WAAW,KAC5D,EAAY,EAAmB,KAAK,MAAM,eAAgB,KAAK,MAAM,SAAS,EAC9E,EAAwB,GAExB,EAAK,SAAS,kBAAkB,GAAG,EAAsB,EACzD,EAAK,SAAS,WAAW,GACzB,EAAY,KAAK,MAAM,SAAS,EAChC,KAAK,OAAO,GACL,EAAK,KAAM,GAAQ,CAAC,WAAY,YAAa,YAAY,EAAE,SAAS,CAAG,CAAC,GAAG,KAAK,OAAO,CACtG,CAAC,CAAC,EACF,EAAY,EAAQ,KAAK,MAAM,SAAS,EACxC,EAAY,EAAmB,KAAK,MAAM,eAAgB,KAAK,MAAM,SAAS,EAC9E,EAAW,EAAK,cAA2B,8BAA8B,GAClE,EAAK,cAA2B,gCAAgC,EACvE,EAAQ,EAAK,cAA2B,2BAA2B,EACnE,EAAS,EAAK,cAA2B,4BAA4B,EACrE,EAAe,EAAK,cAAgC,iCAAiC,EACrF,EAAS,MAAM,KAAK,EAAK,iBAA8B,2BAA2B,CAAC,EAAE,MAAM,EAAG,CAAC,EAC1F,KAAK,EAAS,KAAW,CAAC,UAAS,IAAK,SAAS,EAAQ,GAAG,EAAE,EAC/D,CAAC,GAAY,CAAC,GAAS,CAAC,GAAU,CAAC,GAAgB,EAAO,SAAW,EACrE,MAAU,MAAM,2FAA2F,EAE/G,EAAS,aAAa,6BAA8B,EAAE,EACtD,EAAU,GACN,MAAM,KAAK,EAAK,iBAA8B,mCAAmC,CAAC,EAClF,CAAC,MAAO,KAAK,MAAM,mBAAoB,SAAU,KAAK,MAAM,eACxD,SAAU,KAAK,MAAM,eAAgB,UAAW,KAAK,MAAM,iBAC3D,YAAa,KAAK,MAAM,kBAAkB,CAClD,EACA,EAAiB,EACjB,EAAsB,EACtB,EAAkB,IAAI,gBACtB,EAAS,iBAAiB,aAAgB,CAClC,AACJ,IAAc,0BAA4B,CACtC,EAAc,EACV,GAAU,EAAU,EAAS,SAAS,CAC9C,CAAC,CACL,EAAG,CAAC,QAAS,GAAM,OAAQ,EAAgB,MAAM,CAAC,EAClD,EAAK,iBAAiB,QAAU,GAAU,CACtC,IAAM,EAAS,EAAM,OACf,EAAa,EAAO,QAAqB,iCAAiC,EAChF,GAAI,GAAc,KAAK,MAAM,gBAAiB,CAC1C,IAAM,EAAS,EAAW,QAAqB,mCAAmC,EAC5E,EAAS,EAAQ,MAAM,CAAC,SAAS,IAAQ,GAAQ,QAAQ,MAAM,EACrE,GAAI,GAAQ,SAAU,CAClB,IAAM,EAAY,EAAO,OAAS,YAAc,aAAe,YAC/D,EAAS,oBAAqB,CAAC,OAAQ,EAAO,IAAK,YAAW,SAAU,EAAM,QAAQ,CAAC,CAC3F,CACA,MACJ,CACA,IAAM,EAAM,EAAO,QAAqB,yBAAyB,EACjE,GAAI,CAAC,GAAO,CAAC,GAAM,SAAS,CAAG,EAAG,OAClC,IAAM,EAAM,EAAI,QAAQ,QAAU,GAC9B,KAAK,MAAM,kBAAoB,CAAC,EAAO,QAAQ,CAAmB,GAAG,EAAU,CAAG,EACtF,EAAS,4BAA6B,CAAC,OAAQ,EAAK,KAAG,CAAC,CAC5D,EAAG,CAAC,OAAQ,EAAgB,MAAM,CAAC,EACnC,EAAK,iBAAiB,WAAa,GAAU,CACzC,IAAM,EAAQ,EAAM,OAAuB,QAAqB,0BAA0B,EACpF,EAAM,GAAM,QAAqB,yBAAyB,EAC5D,GAAQ,GAAK,EAAS,6BAA8B,CACpD,OAAQ,EAAI,QAAQ,QAAU,GAAI,OAAQ,EAAK,QAAQ,QAAU,GAAI,MACzE,CAAC,CACL,EAAG,CAAC,OAAQ,EAAgB,MAAM,CAAC,EACnC,EAAK,iBAAiB,oBAAsB,GAAuB,CAC/D,IAAM,EAAS,EAAM,QAAQ,OAC7B,GAAI,GAAQ,OAAS,mBAAoB,OACzC,IAAM,EAAK,OAAO,EAAM,QAAQ,OAAS,EAAM,QAAQ,QAAQ,KAAK,EAChE,OAAO,UAAU,CAAE,GAAG,KAAK,cAAc,OAAO,EAAO,EAAE,EAAG,CAAE,CACtE,GAAqB,CAAC,OAAQ,EAAgB,MAAM,CAAC,EACrD,EAAS,MAAM,mBAAqB,UACpC,EAAS,MAAM,eAAiB,OAChC,EAAS,UAAY,EAAuB,SAAS,CACjD,MAAO,EAAW,SAAU,KAAK,MAAM,UAAW,aAAc,EAAS,aACzE,aAAc,EAAG,OAAQ,KAAK,MAAM,UACxC,EAAG,CAAC,KAAM,IAAK,MAAO,KAAK,MAAM,YAAY,CAAC,EAC9C,EAAU,EACV,EAAU,EAAS,SAAS,CAChC,EACA,SAAgB,CACZ,EAAY,GACR,GAAa,qBAAqB,CAAW,EACjD,GAAiB,MAAM,EACvB,EAAkB,KAClB,EAAe,OAAO,CAAC,EAAE,QAAS,GAAY,EAAQ,CAAC,EACvD,EAAW,EACX,KAAK,MAAM,WAAW,EACtB,EAAO,KACP,EAAW,KACX,EAAQ,KACR,EAAS,KACT,EAAe,KACf,EAAU,CAAC,EACX,EAAS,CAAC,CACd,EACA,cAAc,EAAO,EAAQ,QAAe,CACnC,IACL,EAAS,UAAY,EAAuB,SAAS,CACjD,MAAO,EAAW,SAAU,KAAK,MAAM,UAAW,aAAc,EAAS,aACzE,aAAc,EAAS,UAAW,OAAQ,KAAK,MAAM,UACzD,EAAG,CAAC,KAAM,IAAK,QAAO,OAAK,CAAC,EAC5B,EAAU,EAAS,SAAS,EAChC,EACA,aAAa,EAAa,CACtB,EAAY,CAAK,EACjB,KAAK,OAAO,CAAC,UAAW,GAAU,WAAa,CAAC,CAAC,CACrD,EACA,OAAO,EAAK,EAAU,CAAC,EAAS,CAC5B,EAAqB,GACrB,KAAK,MAAM,SAAW,OAAO,CAAG,EAC5B,GAAM,EAAkB,CAAC,GAAI,EAAM,OAAQ,EAAgB,IAAK,WAAY,MAAO,OAAO,CAAG,CAAC,CAAC,EACnG,EAAqB,GACjB,EAAQ,OAAS,GAAM,KAAK,MAAM,EACjC,KAAK,OAAO,CACrB,EACA,MAAM,EAAU,CAAC,EAAS,CAAE,KAAK,OAAO,CAAC,UAAW,EAAQ,WAAa,CAAC,CAAC,CAAG,EAC9E,OAAO,EAAU,CAAC,EAAS,CACvB,IAAM,EAAY,EAAQ,WAAa,GAAU,WAAa,EAC9D,EAAW,EACP,IAAU,EAAS,UAAY,KAAK,IAAI,EAAG,CAAS,GACxD,EAAU,CAAS,CACvB,EACA,aAAa,EAAK,EAAa,CAC3B,IAAM,EAAS,EAAQ,KAAM,GAAc,EAAU,MAAQ,CAAG,EAC5D,GAAQ,EAAkB,EAAQ,OAAO,CAAK,EAAG,KAAK,CAC9D,EACA,cAAc,EAAK,EAAe,CAC9B,IAAM,EAAO,EAAQ,UAAW,GAAW,EAAO,MAAQ,CAAG,EACvD,EAAO,EAAe,EAAS,EAAK,EAAQ,CAAO,CAAC,EACrD,IACL,EAAU,EACV,EAAiB,EACjB,EAAS,8BAA+B,CAAC,OAAQ,EAAK,OAAM,GAAI,EAAQ,CAAO,EAAG,QAAS,EAAQ,KAAK,CAAC,IAAK,KAAe,CAAS,CAAC,CAAC,EAC5I,EACA,UAAU,EAAW,CAAE,EAAU,OAAO,CAAG,EAAG,EAAI,CAAG,EACrD,YAAY,EAAW,CAAE,EAAU,OAAO,CAAG,EAAG,EAAK,CAAG,EACxD,UAAU,EAAW,CAAE,EAAU,OAAO,CAAG,CAAC,CAAG,EAC/C,aAAa,EAAa,CAAE,EAAa,CAAK,CAAG,EACjD,YAAY,EAAO,EAAO,EAAS,CAAC,EAAS,CACzC,EAAa,CAAC,KAAM,QAAS,MAAO,OAAO,CAAK,EAAG,MAAO,EAAQ,CAAK,EAAG,OAAQ,EAAO,IAAI,MAAM,CAAC,CAAC,CACzG,EACA,gBAAuB,CAAE,EAAa,CAAC,KAAM,MAAO,IAAK,CAAC,CAAC,CAAC,CAAG,CACnE,EACA,OAAO,CACX,EAEM,EAAoB,GAAwC,CAC9D,EAAiB,iBAAoB,EAAW,CAAc,CAAC,EAAE,CAAc,CACnF,EC1eM,EAAa,IAAI,QAEjB,EAAoB,GAAqC,CACvD,EAAW,IAAI,CAAc,IACjC,EAAW,IAAI,CAAc,EAC7B,EAA4B,CAAc,EAC1C,EAAyB,CAAc,EACvC,EAA2B,CAAc,EACzC,EAAkB,CAAc,EACpC"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{f as e}from"./codecs-Cb1ns_47.js";import{r as t}from"./dom-qAeVl7dc.js";import{t as n}from"./alpine-machine-BS13dbK4.js";import{t as r}from"./alpine-data-CytyCyfk.js";import{t as i}from"./machine-Dqut4h89.js";var a={startUrl:e,completeUrl:e,purpose:e},o=[],s=(e,t)=>({status:e,uploadId:typeof t.event.uploadId==`string`?t.event.uploadId:t.context.uploadId,error:typeof t.event.error==`string`?t.event.error:``}),c=e=>t=>({context:s(e,t)}),l=({props:e,effects:t})=>i({initial:`idle`,states:{idle:{on:{START:{target:`starting`,reduce:`starting`,effects:`sync`}}},starting:{on:{TRANSFER:{target:`transferring`,reduce:`transferring`,effects:`sync`},FAIL:{target:`failed`,reduce:`failed`,effects:`sync`},CANCEL:{target:`canceled`,reduce:`canceled`,effects:`sync`}}},transferring:{on:{COMPLETE:{target:`completing`,reduce:`completing`,effects:`sync`},FAIL:{target:`failed`,reduce:`failed`,effects:`sync`},CANCEL:{target:`canceled`,reduce:`canceled`,effects:`sync`}}},completing:{on:{SUCCEED:{target:`complete`,reduce:`complete`,effects:`sync`},FAIL:{target:`failed`,reduce:`failed`,effects:`sync`},CANCEL:{target:`canceled`,reduce:`canceled`,effects:`sync`}}},complete:{on:{START:{target:`starting`,reduce:`starting`,effects:`sync`},CLEAR:{target:`idle`,reduce:`idle`,effects:`sync`}}},failed:{on:{START:{target:`starting`,reduce:`starting`,effects:`sync`},CLEAR:{target:`idle`,reduce:`idle`,effects:`sync`}}},canceled:{on:{START:{target:`starting`,reduce:`starting`,effects:`sync`},CLEAR:{target:`idle`,reduce:`idle`,effects:`sync`}}}}},{context:{status:`idle`,uploadId:``,error:``},props:e,reducers:{idle:c(`idle`),starting:c(`starting`),transferring:c(`transferring`),completing:c(`completing`),complete:c(`complete`),failed:c(`failed`),canceled:c(`canceled`)},effects:t}),u=()=>document.querySelector(`meta[name="csrf-token"]`)?.content??``,d=(e,t)=>{if(!e||typeof e!=`object`)return t;let n=Reflect.get(e,`errors`);if(!n||typeof n!=`object`)return t;let r=Object.values(n)[0];if(typeof r==`string`)return r;if(Array.isArray(r)&&r.length>0){let e=r[0];if(typeof e==`string`)return e;if(e&&typeof e==`object`&&typeof Reflect.get(e,`message`)==`string`)return Reflect.get(e,`message`)}return t},f=async(e,t,n={})=>{let r=new FormData;Object.entries(t).forEach(([e,t])=>r.append(e,String(t)));let i=new Headers,a=u();a&&i.set(`X-CSRFToken`,a);let o=await fetch(e,{method:`POST`,body:r,headers:i,credentials:`same-origin`,...n.signal?{signal:n.signal}:{}}),s=await o.json().catch(()=>null);if(!o.ok)throw Error(d(s,`Upload request failed (${o.status}).`));if(s===null)throw Error(`Upload request returned no data.`);return s},p=(e,t,n={})=>new Promise((r,i)=>{let a=new XMLHttpRequest,o=new FormData;Object.entries(e.fields).forEach(([e,t])=>o.append(e,t));let s=new URL(e.url,document.baseURI);if(s.origin===window.location.origin){let e=u();if(e&&o.append(`csrfmiddlewaretoken`,e),!n.capability){i(Error(`A same-origin direct upload requires its upload capability.`));return}o.append(`capability`,n.capability)}o.append(e.file_field,t);let c=()=>n.signal?.removeEventListener(`abort`,l),l=()=>a.abort();if(a.upload.addEventListener(`progress`,e=>{e.lengthComputable&&n.onProgress?.(e.loaded,e.total)}),a.addEventListener(`load`,()=>{if(c(),a.status>=200&&a.status<300){r();return}let e=null;try{e=JSON.parse(a.responseText)}catch{}i(Error(d(e,`Object transfer failed (${a.status}).`)))}),a.addEventListener(`error`,()=>{c(),i(Error(`Object transfer failed.`))}),a.addEventListener(`abort`,()=>{c(),i(new DOMException(`Upload canceled.`,`AbortError`))}),n.signal?.addEventListener(`abort`,l,{once:!0}),n.signal?.aborted){l();return}a.open(e.method,s.toString()),a.send(o)}),m=()=>{let e=null,r=null,i=null,s=null,c=new Map,u=()=>{if(!e)throw Error(`Direct upload has not been initialized.`);return e},d=()=>{let e=u().querySelector(`[data-ui-direct-upload-values]`);if(!e)throw Error(`Direct upload requires a hidden values container.`);return e},m=()=>{let e=d(),t=[...c.entries()].map(([e,t])=>{let n=document.createElement(`input`);return n.type=`hidden`,n.name=u().dataset.name??``,n.value=t,n.dataset.uiDirectUploadValue=``,n.dataset.uploadKey=e,n});if(t.length===0&&Number(u().dataset.maxItems??`1`)===1){let e=document.createElement(`input`);e.type=`hidden`,e.name=u().dataset.name??``,e.dataset.uiDirectUploadValue=``,t.push(e)}e.replaceChildren(...t);let n=t[0];n&&(n.dispatchEvent(new Event(`input`,{bubbles:!0})),n.dispatchEvent(new Event(`change`,{bubbles:!0})))},h=()=>{u().querySelectorAll(`[data-ui-file-upload-item][data-existing-file]`).forEach(e=>{e.hidden=!0})},g=()=>{let e=v.getCommittedSnapshot();u().dataset.uploadState=e.context.status,e.context.error?u().dataset.uploadError=e.context.error:delete u().dataset.uploadError},_=()=>{r?.abort(),r=null,c.clear(),h(),m(),v.send(`CLEAR`),t({el:u(),name:`ui:direct-upload-clear`})},v=n({schema:a,hooks:o,createMachine:({props:e})=>l({props:e,effects:{sync:g}})});return{...v,init(){e=this.$el,v.connect(e,this.snapshot),e.querySelectorAll(`[data-ui-direct-upload-value]`).forEach((e,t)=>{e.value&&c.set(e.dataset.uploadKey??`existing-${t}`,e.value)});let t=e=>{if(!(e instanceof CustomEvent))return;let t=e.detail,n=new Set((t?.files??[]).flatMap(({id:e})=>typeof e==`string`?[e]:[])),r=(t?.source===`picker`||t?.source===`drop`)&&[...c.keys()].some(e=>e.startsWith(`existing-`));t?.source===`picker`||r?(c.clear(),h()):[...c.keys()].filter(e=>e.startsWith(`file-`)&&!n.has(e)).forEach(e=>c.delete(e)),m(),c.size===0&&n.size===0&&v.send(`CLEAR`)};e.addEventListener(`ui:file-upload-change`,t),i=()=>e?.removeEventListener(`ui:file-upload-change`,t);let n=e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-ui-direct-upload-existing-remove]`);if(!n)return;e.preventDefault(),e.stopPropagation();let r=n.dataset.uploadKey;r&&c.delete(r);let i=n.closest(`[data-ui-file-upload-item]`);i&&(i.hidden=!0),m();let a=u().querySelector(`[data-ui-file-upload-root]`),o=!!a?.querySelector(`[data-ui-file-upload-item][data-existing-file]:not([hidden])`),s=!!a?.querySelector(`[data-ui-file-upload-pending]`),l=o||s;a?.toggleAttribute(`data-has-files`,l),a?.toggleAttribute(`data-empty`,!l);let d=a?.querySelector(`[data-ui-file-upload-empty]`);d&&(d.hidden=l),l||v.send(`CLEAR`)};e.addEventListener(`click`,n,!0),s=()=>e?.removeEventListener(`click`,n,!0),g()},destroy(){r?.abort(),r=null,i?.(),i=null,s?.(),s=null,c.clear(),v.disconnect(),e=null},clear(){_()},async upload(e,n){let i=e.data.files;if(i.length===0)return;r?.abort();let a=new AbortController;r=a;let o=()=>a.abort();e.signal.addEventListener(`abort`,o,{once:!0});try{let r=v.getCommittedSnapshot().props,o=[];for(let t of i){let i=n(t.id);if(!i)throw Error(`The selected file is no longer available.`);v.send(`START`);let s=await f(r.startUrl,{purpose:r.purpose,original_name:i.name,content_type:i.type||`application/octet-stream`,size:i.size},{signal:a.signal});v.send({type:`TRANSFER`,uploadId:s.upload_id}),await p(s.instructions,i,{signal:a.signal,capability:s.capability,onProgress:(n,r)=>e.send.progress(t.id,n,r)}),v.send(`COMPLETE`);let c=await f(r.completeUrl,{capability:s.capability},{signal:a.signal});e.send.progress(t.id,t.bytes,t.bytes),v.send({type:`SUCCEED`,uploadId:c.upload_id}),o.push({recordId:t.id,capability:s.capability,completed:c})}o.forEach(({recordId:e,capability:t})=>c.set(e,t)),m(),t({el:u(),name:`ui:direct-upload-complete`,detail:{uploads:o.map(({completed:e})=>e)}})}catch(e){if(a.signal.aborted)v.send(`CANCEL`);else{let n=e instanceof Error?e.message:String(e);v.send({type:`FAIL`,error:n}),t({el:u(),name:`ui:direct-upload-error`,detail:{error:n}})}throw e}finally{e.signal.removeEventListener(`abort`,o),r===a&&(r=null)}}}},h=r(`UiDirectUpload`,m),g=new WeakSet,_=e=>{g.has(e)||(g.add(e),h(e))};export{m as n,_ as t};
|
|
2
|
-
//# sourceMappingURL=entry.generated-B_xTkYSB.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-B_xTkYSB.js","names":[],"sources":["../../../../../../../../client/src/components/direct-upload/contract.ts","../../../../../../../../client/src/components/direct-upload/machine.ts","../../../../../../../../client/src/components/direct-upload/transport.ts","../../../../../../../../client/src/components/direct-upload/index.ts","../../../../../../../../client/src/components/direct-upload/entry.generated.ts"],"sourcesContent":["import {string, type SchemaToProps} from '../../runtime';\n\nconst directUploadSchema = {\n startUrl: string,\n completeUrl: string,\n purpose: string,\n};\n\ntype DirectUploadProps = SchemaToProps<typeof directUploadSchema>;\n\nexport {directUploadSchema};\nexport type {DirectUploadProps};\n","import {createMachine, type Machine, type MachineScope} from '../../runtime/state-machine';\nimport type {DirectUploadProps} from './contract';\n\ntype DirectUploadStatus = 'idle' | 'starting' | 'transferring' | 'completing' | 'complete' | 'failed' | 'canceled';\ntype DirectUploadContext = {status: DirectUploadStatus; uploadId: string; error: string};\ntype DirectUploadEffects = {sync(scope: MachineScope<DirectUploadContext, DirectUploadProps>): void};\n\nconst directUploadHooks = [] as const;\nconst contextFor = (\n status: DirectUploadStatus,\n scope: MachineScope<DirectUploadContext, DirectUploadProps>,\n): DirectUploadContext => ({\n status,\n uploadId: typeof scope.event.uploadId === 'string' ? scope.event.uploadId : scope.context.uploadId,\n error: typeof scope.event.error === 'string' ? scope.event.error : '',\n});\nconst reducerFor = (status: DirectUploadStatus) => (\n scope: MachineScope<DirectUploadContext, DirectUploadProps>,\n) => ({context: contextFor(status, scope)});\n\nconst createDirectUploadMachine = ({\n props,\n effects,\n}: {\n props: DirectUploadProps;\n effects: DirectUploadEffects;\n}): Machine<DirectUploadContext, DirectUploadProps> => createMachine<DirectUploadContext, DirectUploadProps>({\n initial: 'idle',\n states: {\n idle: {on: {START: {target: 'starting', reduce: 'starting', effects: 'sync'}}},\n starting: {\n on: {\n TRANSFER: {target: 'transferring', reduce: 'transferring', effects: 'sync'},\n FAIL: {target: 'failed', reduce: 'failed', effects: 'sync'},\n CANCEL: {target: 'canceled', reduce: 'canceled', effects: 'sync'},\n },\n },\n transferring: {\n on: {\n COMPLETE: {target: 'completing', reduce: 'completing', effects: 'sync'},\n FAIL: {target: 'failed', reduce: 'failed', effects: 'sync'},\n CANCEL: {target: 'canceled', reduce: 'canceled', effects: 'sync'},\n },\n },\n completing: {\n on: {\n SUCCEED: {target: 'complete', reduce: 'complete', effects: 'sync'},\n FAIL: {target: 'failed', reduce: 'failed', effects: 'sync'},\n CANCEL: {target: 'canceled', reduce: 'canceled', effects: 'sync'},\n },\n },\n complete: {on: {START: {target: 'starting', reduce: 'starting', effects: 'sync'}, CLEAR: {target: 'idle', reduce: 'idle', effects: 'sync'}}},\n failed: {on: {START: {target: 'starting', reduce: 'starting', effects: 'sync'}, CLEAR: {target: 'idle', reduce: 'idle', effects: 'sync'}}},\n canceled: {on: {START: {target: 'starting', reduce: 'starting', effects: 'sync'}, CLEAR: {target: 'idle', reduce: 'idle', effects: 'sync'}}},\n },\n}, {\n context: {status: 'idle', uploadId: '', error: ''},\n props,\n reducers: {\n idle: reducerFor('idle'),\n starting: reducerFor('starting'),\n transferring: reducerFor('transferring'),\n completing: reducerFor('completing'),\n complete: reducerFor('complete'),\n failed: reducerFor('failed'),\n canceled: reducerFor('canceled'),\n },\n effects,\n});\n\nexport {createDirectUploadMachine, directUploadHooks};\nexport type {DirectUploadContext, DirectUploadEffects, DirectUploadStatus};\n","type DirectUploadInstructions = {\n transport: string;\n method: 'POST';\n url: string;\n fields: Record<string, string>;\n file_field: string;\n};\n\ntype TransferOptions = {\n signal?: AbortSignal;\n onProgress?: (loaded: number, total: number) => void;\n capability?: string;\n};\n\nconst csrfToken = (): string => document.querySelector<HTMLMetaElement>('meta[name=\"csrf-token\"]')?.content ?? '';\nconst errorMessage = (payload: unknown, fallback: string): string => {\n if (!payload || typeof payload !== 'object') return fallback;\n const errors = Reflect.get(payload, 'errors');\n if (!errors || typeof errors !== 'object') return fallback;\n const first = Object.values(errors)[0];\n if (typeof first === 'string') return first;\n if (Array.isArray(first) && first.length > 0) {\n const value = first[0];\n if (typeof value === 'string') return value;\n if (value && typeof value === 'object' && typeof Reflect.get(value, 'message') === 'string') {\n return Reflect.get(value, 'message') as string;\n }\n }\n return fallback;\n};\n\nconst postDirectUpload = async <T>(\n url: string,\n data: Record<string, string | number>,\n options: {signal?: AbortSignal} = {},\n): Promise<T> => {\n const body = new FormData();\n Object.entries(data).forEach(([key, value]) => body.append(key, String(value)));\n const headers = new Headers();\n const csrf = csrfToken();\n if (csrf) headers.set('X-CSRFToken', csrf);\n const response = await fetch(url, {\n method: 'POST',\n body,\n headers,\n credentials: 'same-origin',\n ...(options.signal ? {signal: options.signal} : {}),\n });\n const payload = await response.json().catch(() => null) as T | null;\n if (!response.ok) throw new Error(errorMessage(payload, `Upload request failed (${response.status}).`));\n if (payload === null) throw new Error('Upload request returned no data.');\n return payload;\n};\n\nconst transferDirectUpload = (\n instructions: DirectUploadInstructions,\n file: File,\n options: TransferOptions = {},\n): Promise<void> => new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n const body = new FormData();\n Object.entries(instructions.fields).forEach(([key, value]) => body.append(key, value));\n const target = new URL(instructions.url, document.baseURI);\n const sameOrigin = target.origin === window.location.origin;\n if (sameOrigin) {\n const csrf = csrfToken();\n if (csrf) body.append('csrfmiddlewaretoken', csrf);\n if (!options.capability) {\n reject(new Error('A same-origin direct upload requires its upload capability.'));\n return;\n }\n body.append('capability', options.capability);\n }\n body.append(instructions.file_field, file);\n\n const cleanup = (): void => options.signal?.removeEventListener('abort', abort);\n const abort = (): void => request.abort();\n request.upload.addEventListener('progress', (event) => {\n if (event.lengthComputable) options.onProgress?.(event.loaded, event.total);\n });\n request.addEventListener('load', () => {\n cleanup();\n if (request.status >= 200 && request.status < 300) {\n resolve();\n return;\n }\n let payload: unknown = null;\n try { payload = JSON.parse(request.responseText); } catch { /* response may be XML or empty */ }\n reject(new Error(errorMessage(payload, `Object transfer failed (${request.status}).`)));\n });\n request.addEventListener('error', () => { cleanup(); reject(new Error('Object transfer failed.')); });\n request.addEventListener('abort', () => { cleanup(); reject(new DOMException('Upload canceled.', 'AbortError')); });\n options.signal?.addEventListener('abort', abort, {once: true});\n if (options.signal?.aborted) {\n abort();\n return;\n }\n request.open(instructions.method, target.toString());\n request.send(body);\n});\n\nexport {postDirectUpload, transferDirectUpload};\nexport type {DirectUploadInstructions, TransferOptions};\n","import type Alpine from 'alpinejs';\n\nimport {\n createAlpineMachine,\n defineAlpineData,\n dispatch,\n type AlpineMachine,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport type {FileUploadTransition} from '../file-upload';\nimport {directUploadSchema, type DirectUploadProps} from './contract';\nimport {\n createDirectUploadMachine,\n directUploadHooks,\n type DirectUploadContext,\n} from './machine';\nimport {\n postDirectUpload,\n transferDirectUpload,\n type DirectUploadInstructions,\n} from './transport';\n\ntype ResolveFile = (id: string) => File | null;\ntype StartResponse = {upload_id: string; capability: string; instructions: DirectUploadInstructions};\ntype CompleteResponse = {upload_id: string; key: string};\n\ninterface UiDirectUploadApi {\n clear(): void;\n upload(transition: FileUploadTransition<'uploading'>, resolveFile: ResolveFile): Promise<void>;\n}\n\ntype DirectUploadData = AlpineMachine<DirectUploadContext, DirectUploadProps, typeof directUploadHooks>\n & UiDirectUploadApi\n & {init(): void; destroy(): void};\n\nconst UiDirectUpload = (): TrellisAlpineComponent<DirectUploadData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let activeController: AbortController | null = null;\n let disconnectFileUpload: (() => void) | null = null;\n let disconnectExistingItems: (() => void) | null = null;\n const capabilities = new Map<string, string>();\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Direct upload has not been initialized.');\n return rootEl;\n };\n const valuesRoot = (): HTMLElement => {\n const container = root().querySelector<HTMLElement>('[data-ui-direct-upload-values]');\n if (!container) throw new Error('Direct upload requires a hidden values container.');\n return container;\n };\n const syncValues = (): void => {\n const container = valuesRoot();\n const inputs = [...capabilities.entries()].map(([key, capability]) => {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = root().dataset.name ?? '';\n input.value = capability;\n input.dataset.uiDirectUploadValue = '';\n input.dataset.uploadKey = key;\n return input;\n });\n if (inputs.length === 0 && Number(root().dataset.maxItems ?? '1') === 1) {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = root().dataset.name ?? '';\n input.dataset.uiDirectUploadValue = '';\n inputs.push(input);\n }\n container.replaceChildren(...inputs);\n const changed = inputs[0];\n if (changed) {\n changed.dispatchEvent(new Event('input', {bubbles: true}));\n changed.dispatchEvent(new Event('change', {bubbles: true}));\n }\n };\n const hideExistingItems = (): void => {\n root().querySelectorAll<HTMLElement>('[data-ui-file-upload-item][data-existing-file]')\n .forEach((item) => { item.hidden = true; });\n };\n const syncDom = (): void => {\n const snapshot = bridge.getCommittedSnapshot();\n root().dataset.uploadState = snapshot.context.status;\n if (snapshot.context.error) root().dataset.uploadError = snapshot.context.error;\n else delete root().dataset.uploadError;\n };\n const clearUpload = (): void => {\n activeController?.abort();\n activeController = null;\n capabilities.clear();\n hideExistingItems();\n syncValues();\n bridge.send('CLEAR');\n dispatch({el: root(), name: 'ui:direct-upload-clear'});\n };\n const bridge = createAlpineMachine({\n schema: directUploadSchema,\n hooks: directUploadHooks,\n createMachine: ({props}) => createDirectUploadMachine({props, effects: {sync: syncDom}}),\n });\n\n return {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n bridge.connect(rootEl, this.snapshot);\n rootEl.querySelectorAll<HTMLInputElement>('[data-ui-direct-upload-value]')\n .forEach((input, index) => {\n if (input.value) capabilities.set(input.dataset.uploadKey ?? `existing-${index}`, input.value);\n });\n const handleFileChange = (event: Event): void => {\n if (!(event instanceof CustomEvent)) return;\n const detail = event.detail as {files?: Array<{id?: unknown}>; source?: unknown} | undefined;\n const fileIds = new Set(\n (detail?.files ?? []).flatMap(({id}) => typeof id === 'string' ? [id] : []),\n );\n const replacesExisting = (detail?.source === 'picker' || detail?.source === 'drop')\n && [...capabilities.keys()].some((key) => key.startsWith('existing-'));\n if (detail?.source === 'picker' || replacesExisting) {\n capabilities.clear();\n hideExistingItems();\n } else {\n [...capabilities.keys()]\n .filter((key) => key.startsWith('file-') && !fileIds.has(key))\n .forEach((key) => capabilities.delete(key));\n }\n syncValues();\n if (capabilities.size === 0 && fileIds.size === 0) bridge.send('CLEAR');\n };\n rootEl.addEventListener('ui:file-upload-change', handleFileChange);\n disconnectFileUpload = () => rootEl?.removeEventListener('ui:file-upload-change', handleFileChange);\n const handleExistingRemove = (event: Event): void => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const remove = target.closest<HTMLElement>('[data-ui-direct-upload-existing-remove]');\n if (!remove) return;\n event.preventDefault();\n event.stopPropagation();\n const key = remove.dataset.uploadKey;\n if (key) capabilities.delete(key);\n const item = remove.closest<HTMLElement>('[data-ui-file-upload-item]');\n if (item) item.hidden = true;\n syncValues();\n const fileUpload = root().querySelector<HTMLElement>('[data-ui-file-upload-root]');\n const hasVisibleExisting = Boolean(\n fileUpload?.querySelector('[data-ui-file-upload-item][data-existing-file]:not([hidden])'),\n );\n const hasPending = Boolean(fileUpload?.querySelector('[data-ui-file-upload-pending]'));\n const hasFiles = hasVisibleExisting || hasPending;\n fileUpload?.toggleAttribute('data-has-files', hasFiles);\n fileUpload?.toggleAttribute('data-empty', !hasFiles);\n const empty = fileUpload?.querySelector<HTMLElement>('[data-ui-file-upload-empty]');\n if (empty) empty.hidden = hasFiles;\n if (!hasFiles) bridge.send('CLEAR');\n };\n rootEl.addEventListener('click', handleExistingRemove, true);\n disconnectExistingItems = () => rootEl?.removeEventListener('click', handleExistingRemove, true);\n syncDom();\n },\n destroy(): void {\n activeController?.abort();\n activeController = null;\n disconnectFileUpload?.();\n disconnectFileUpload = null;\n disconnectExistingItems?.();\n disconnectExistingItems = null;\n capabilities.clear();\n bridge.disconnect();\n rootEl = null;\n },\n clear(): void {\n clearUpload();\n },\n async upload(transition, resolveFile): Promise<void> {\n const records = transition.data.files;\n if (records.length === 0) return;\n\n activeController?.abort();\n const controller = new AbortController();\n activeController = controller;\n const cancel = (): void => controller.abort();\n transition.signal.addEventListener('abort', cancel, {once: true});\n try {\n const props = bridge.getCommittedSnapshot().props;\n const completedBatch: Array<{recordId: string; capability: string; completed: CompleteResponse}> = [];\n for (const record of records) {\n const file = resolveFile(record.id);\n if (!file) throw new Error('The selected file is no longer available.');\n bridge.send('START');\n const started = await postDirectUpload<StartResponse>(props.startUrl, {\n purpose: props.purpose,\n original_name: file.name,\n content_type: file.type || 'application/octet-stream',\n size: file.size,\n }, {signal: controller.signal});\n bridge.send({type: 'TRANSFER', uploadId: started.upload_id});\n await transferDirectUpload(started.instructions, file, {\n signal: controller.signal,\n capability: started.capability,\n onProgress: (loaded, total) => transition.send.progress(record.id, loaded, total),\n });\n bridge.send('COMPLETE');\n const completed = await postDirectUpload<CompleteResponse>(props.completeUrl, {\n capability: started.capability,\n }, {signal: controller.signal});\n transition.send.progress(record.id, record.bytes, record.bytes);\n bridge.send({type: 'SUCCEED', uploadId: completed.upload_id});\n completedBatch.push({recordId: record.id, capability: started.capability, completed});\n }\n completedBatch.forEach(({recordId, capability}) => capabilities.set(recordId, capability));\n syncValues();\n dispatch({\n el: root(),\n name: 'ui:direct-upload-complete',\n detail: {uploads: completedBatch.map(({completed}) => completed)},\n });\n } catch (error) {\n if (controller.signal.aborted) {\n bridge.send('CANCEL');\n } else {\n const reason = error instanceof Error ? error.message : String(error);\n bridge.send({type: 'FAIL', error: reason});\n dispatch({el: root(), name: 'ui:direct-upload-error', detail: {error: reason}});\n }\n throw error;\n } finally {\n transition.signal.removeEventListener('abort', cancel);\n if (activeController === controller) activeController = null;\n }\n },\n };\n};\n\nconst registerDirectUpload = defineAlpineData('UiDirectUpload', UiDirectUpload);\n\nexport {registerDirectUpload, UiDirectUpload};\nexport type {DirectUploadData, UiDirectUploadApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerDirectUpload as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerDirectUpload = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerDirectUpload};\nexport default registerDirectUpload;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-CPbvsglm.js","names":[],"sources":["../../../../../../../../client/src/components/scroll-area/contract.ts","../../../../../../../../client/src/components/scroll-area/machine.ts","../../../../../../../../client/src/components/scroll-area/styles.ts","../../../../../../../../client/src/components/scroll-area/index.ts","../../../../../../../../client/src/components/scroll-area/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\n\nconst SCROLL_AREA_ORIENTATIONS = ['vertical', 'horizontal', 'both'] as const;\nconst SCROLL_AREA_TYPES = ['hover', 'always', 'scroll'] as const;\nconst scrollAreaSchema = {\n orientation: oneOf(SCROLL_AREA_ORIENTATIONS, 'vertical'),\n type: oneOf(SCROLL_AREA_TYPES, 'hover'),\n fill: bool,\n hideNative: bool.default(true),\n disabled: bool,\n class: string,\n viewportClass: string,\n scrollbarClass: string,\n thumbClass: string,\n cornerClass: string,\n};\n\ntype ScrollAreaOrientation = typeof SCROLL_AREA_ORIENTATIONS[number];\ntype ScrollAreaType = typeof SCROLL_AREA_TYPES[number];\ntype ScrollAreaProps = SchemaToProps<typeof scrollAreaSchema>;\n\nexport {\n SCROLL_AREA_ORIENTATIONS,\n SCROLL_AREA_TYPES,\n scrollAreaSchema,\n};\nexport type {\n ScrollAreaOrientation,\n ScrollAreaProps,\n ScrollAreaType,\n};\n","import {\n createMachine,\n propsChangedEvent,\n type Machine,\n type MachineEventObject,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport type {ScrollAreaProps} from './contract';\n\ntype ScrollAxis = 'x' | 'y';\n\ntype ScrollAreaContext = {\n overflow: {x: boolean; y: boolean};\n};\n\ntype ScrollAreaMachineEffects = {\n sync(scope: MachineScope<ScrollAreaContext, ScrollAreaProps>): void;\n};\n\ntype CreateScrollAreaMachineOptions = {\n props: ScrollAreaProps;\n context: ScrollAreaContext;\n effects: ScrollAreaMachineEffects;\n};\n\n\nconst axisIs = (axis: ScrollAxis) => ({event}: MachineScope<ScrollAreaContext, ScrollAreaProps>): boolean => (\n event.axis === axis\n);\n\nconst scrollAreaHooks = [] as const;\n\nconst createScrollAreaMachine = ({\n props,\n context,\n effects,\n}: CreateScrollAreaMachineOptions): Machine<ScrollAreaContext, ScrollAreaProps> => createMachine<ScrollAreaContext, ScrollAreaProps>({\n type: 'parallel',\n on: {\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n MEASURED: {reduce: 'setOverflow', effects: 'sync'},\n },\n states: {\n pointer: {\n initial: 'outside',\n states: {\n outside: {on: {POINTER_ENTERED: {target: 'inside', effects: 'sync'}}},\n inside: {tags: ['hovered'], on: {POINTER_LEFT: {target: 'outside', effects: 'sync'}}},\n },\n },\n focus: {\n initial: 'outside',\n states: {\n outside: {on: {FOCUS_ENTERED: {target: 'inside', effects: 'sync'}}},\n inside: {tags: ['focused'], on: {FOCUS_LEFT: {target: 'outside', effects: 'sync'}}},\n },\n },\n scrolling: {\n initial: 'idle',\n states: {\n idle: {on: {SCROLLED: {target: 'active', effects: 'sync'}}},\n active: {tags: ['scrolling'], on: {SCROLL_SETTLED: {target: 'idle', effects: 'sync'}}},\n },\n },\n dragging: {\n initial: 'idle',\n states: {\n idle: {\n on: {\n DRAG_STARTED: [\n {target: 'vertical', guard: axisIs('y'), effects: 'sync'},\n {target: 'horizontal', guard: axisIs('x'), effects: 'sync'},\n ],\n },\n },\n vertical: {tags: ['dragging', 'dragging-y'], on: {DRAG_ENDED: {target: 'idle', effects: 'sync'}}},\n horizontal: {tags: ['dragging', 'dragging-x'], on: {DRAG_ENDED: {target: 'idle', effects: 'sync'}}},\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n replaceProps: ({event}) => {\n const next = propsChangedEvent<ScrollAreaProps>(event);\n return next ? {props: next.props} : {};\n },\n setOverflow: ({context, event}) => ({\n context: {\n ...context,\n overflow: {\n x: event.overflowX === true,\n y: event.overflowY === true,\n },\n },\n }),\n },\n effects: {sync: effects.sync},\n});\n\nexport {createScrollAreaMachine, scrollAreaHooks};\nexport type {\n CreateScrollAreaMachineOptions,\n ScrollAreaContext,\n ScrollAreaMachineEffects,\n ScrollAxis,\n};\n","import {defineStyles} from '../../runtime';\n\nconst scrollAreaStyles = defineStyles({definition: {\n component: 'ui.scroll-area',\n parts: {\n root: {\n base: [\n 'relative min-w-0 overflow-hidden text-surface-ink',\n 'data-disabled:opacity-60',\n ],\n variants: {\n fill: {\n true: 'flex min-h-0 flex-1 flex-col',\n false: '',\n },\n },\n defaults: {\n fill: false,\n },\n },\n viewport: {\n base: [\n 'min-h-0 min-w-0 outline-none',\n 'focus-visible:ui-focus-ring',\n ],\n variants: {\n orientation: {\n vertical: 'h-full w-full overflow-x-hidden overflow-y-auto',\n horizontal: 'h-full w-full overflow-x-auto overflow-y-hidden',\n both: 'size-full overflow-auto',\n },\n fill: {\n true: 'flex-1',\n false: '',\n },\n },\n defaults: {\n orientation: 'vertical',\n fill: false,\n },\n },\n content: {\n base: 'min-w-0',\n variants: {\n orientation: {\n vertical: '',\n horizontal: 'w-max min-w-full',\n both: 'min-w-full',\n },\n },\n defaults: {\n orientation: 'vertical',\n },\n },\n scrollbar: {\n base: [\n 'pointer-events-none absolute z-10 rounded-scrollbar-thumb opacity-0',\n 'data-visible:pointer-events-auto data-visible:opacity-100 data-disabled:pointer-events-none',\n ],\n variants: {\n orientation: {\n vertical: 'bottom-scrollbar-inset right-scrollbar-inset top-scrollbar-inset w-scrollbar',\n horizontal: 'bottom-scrollbar-inset left-scrollbar-inset right-scrollbar-inset h-scrollbar',\n },\n },\n defaults: {\n orientation: 'vertical',\n },\n },\n thumb: {\n base: [\n 'absolute rounded-scrollbar-thumb bg-scrollbar-thumb',\n 'hover:bg-scrollbar-thumb-hover data-dragging:bg-scrollbar-thumb-hover',\n ],\n variants: {\n orientation: {\n vertical: 'left-0 top-0 w-full',\n horizontal: 'left-0 top-0 h-full',\n },\n },\n defaults: {\n orientation: 'vertical',\n },\n },\n corner: {\n base: [\n 'pointer-events-none absolute bottom-scrollbar-inset right-scrollbar-inset z-10 size-scrollbar rounded-scrollbar-thumb',\n 'bg-transparent opacity-0',\n 'data-visible:opacity-100',\n ],\n },\n },\n}});\n\nexport {scrollAreaStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n mergeBindings,\n type BindingObject,\n type MachineSnapshot,\n resolveStyle,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {addListener, clamp, isRtl, setAttribute, setPresence, type CleanupStack} from '@client/utils';\nimport {scrollAreaSchema, type ScrollAreaOrientation, type ScrollAreaProps} from './contract';\nimport {\n createScrollAreaMachine,\n type ScrollAreaContext,\n scrollAreaHooks,\n type ScrollAxis,\n} from './machine';\nimport {scrollAreaStyles} from './styles';\n\ntype DragState = {\n axis: ScrollAxis;\n pointerId: number;\n startPointer: number;\n startScroll: number;\n trackLength: number;\n thumbLength: number;\n maxScroll: number;\n};\n\ntype ScrollAreaElements = {\n root: HTMLElement;\n viewport: HTMLElement;\n content: HTMLElement | null;\n verticalScrollbar: HTMLElement | null;\n horizontalScrollbar: HTMLElement | null;\n verticalThumb: HTMLElement | null;\n horizontalThumb: HTMLElement | null;\n corner: HTMLElement | null;\n};\n\ntype AxisGeometry = {\n trackLength: number;\n thumbLength: number;\n maxOffset: number;\n maxScroll: number;\n};\n\n/**\n * Public Alpine API for `ui.scroll-area`.\n *\n * @public\n */\ninterface UiScrollAreaApi {\n /** Whether content currently overflows the horizontal axis. */\n readonly overflowX: boolean;\n /** Whether content currently overflows the vertical axis. */\n readonly overflowY: boolean;\n /** Whether the native viewport is in an active scroll session. */\n readonly isScrolling: boolean;\n /** Whether a custom scrollbar thumb is being dragged. */\n readonly isDragging: boolean;\n}\n\ntype ScrollAreaData = AlpineMachine<ScrollAreaContext, ScrollAreaProps, typeof scrollAreaHooks> & UiScrollAreaApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n viewport(el: HTMLElement): BindingObject;\n scrollbar(el: HTMLElement): BindingObject;\n thumb(el: HTMLElement): BindingObject;\n corner(el: HTMLElement): BindingObject;\n};\n\nconst MIN_THUMB_SIZE = 18;\nconst SCROLL_CHROME_FADE_DELAY = 1000;\n\nlet rtlScrollType: 'negative' | 'reverse' | 'default' | null = null;\n\nconst includesAxis = (orientation: ScrollAreaOrientation, axis: ScrollAxis): boolean => (\n orientation === 'both' || (orientation === 'horizontal' && axis === 'x') || (orientation === 'vertical' && axis === 'y')\n);\n\nconst detectRtlScrollType = (): 'negative' | 'reverse' | 'default' => {\n if (rtlScrollType) return rtlScrollType;\n\n const outer = document.createElement('div');\n const inner = document.createElement('div');\n outer.dir = 'rtl';\n outer.style.cssText = 'position:absolute;left:-9999px;width:4px;height:1px;overflow:scroll;';\n inner.style.cssText = 'width:8px;height:1px;';\n outer.append(inner);\n document.body.append(outer);\n\n outer.scrollLeft = 1;\n if (outer.scrollLeft === 0) rtlScrollType = 'negative';\n else {\n outer.scrollLeft = 0;\n rtlScrollType = outer.scrollLeft === 0 ? 'reverse' : 'default';\n }\n\n outer.remove();\n return rtlScrollType;\n};\n\nconst horizontalScrollPosition = (viewport: HTMLElement): number => {\n const max = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\n if (!isRtl({el: viewport})) return viewport.scrollLeft;\n\n const type = detectRtlScrollType();\n if (type === 'negative') return -viewport.scrollLeft;\n if (type === 'reverse') return max - viewport.scrollLeft;\n return viewport.scrollLeft;\n};\n\nconst setHorizontalScrollPosition = (viewport: HTMLElement, value: number): void => {\n const max = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\n const next = clamp(value, 0, max);\n if (!isRtl({el: viewport})) {\n viewport.scrollLeft = next;\n return;\n }\n\n const type = detectRtlScrollType();\n if (type === 'negative') viewport.scrollLeft = -next;\n else if (type === 'reverse') viewport.scrollLeft = max - next;\n else viewport.scrollLeft = next;\n};\n\nconst axisFromOrientation = (el: HTMLElement): ScrollAxis => (\n el.dataset.orientation === 'horizontal' ? 'x' : 'y'\n);\n\nconst isHTMLElement = (value: Element | null): value is HTMLElement => value instanceof HTMLElement;\n\nconst queryDirectPart = (root: HTMLElement, selector: string): HTMLElement | null => {\n const el = root.querySelector(`:scope > ${selector}`);\n return isHTMLElement(el) ? el : null;\n};\n\nconst UiScrollArea = (): TrellisAlpineComponent<ScrollAreaData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let listeners: CleanupStack = [];\n let resizeObserver: ResizeObserver | null = null;\n let mutationObserver: MutationObserver | null = null;\n let measureFrame = 0;\n let positionFrame = 0;\n let fadeTimer = 0;\n let dragging: DragState | null = null;\n let verticalGeometry: AxisGeometry | null = null;\n let horizontalGeometry: AxisGeometry | null = null;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Scroll Area has not been initialized.');\n return rootEl;\n };\n const currentSnapshot = (): MachineSnapshot<ScrollAreaContext, ScrollAreaProps> => (\n bridge.getCommittedSnapshot()\n );\n const currentProps = (): Readonly<ScrollAreaProps> => currentSnapshot().props;\n const hasTag = (tag: string): boolean => currentSnapshot().tags.includes(tag);\n const elements = (): ScrollAreaElements => {\n const rootElement = root();\n const viewport = queryDirectPart(rootElement, '[data-ui-scroll-area-viewport]') ?? rootElement;\n return {\n root: rootElement,\n viewport,\n content: queryDirectPart(viewport, '[data-ui-scroll-area-content]'),\n verticalScrollbar: queryDirectPart(rootElement, '[data-ui-scroll-area-scrollbar][data-orientation=\"vertical\"]'),\n horizontalScrollbar: queryDirectPart(rootElement, '[data-ui-scroll-area-scrollbar][data-orientation=\"horizontal\"]'),\n verticalThumb: queryDirectPart(rootElement, '[data-ui-scroll-area-scrollbar][data-orientation=\"vertical\"] > [data-ui-scroll-area-thumb][data-orientation=\"vertical\"]'),\n horizontalThumb: queryDirectPart(rootElement, '[data-ui-scroll-area-scrollbar][data-orientation=\"horizontal\"] > [data-ui-scroll-area-thumb][data-orientation=\"horizontal\"]'),\n corner: queryDirectPart(rootElement, '[data-ui-scroll-area-corner]'),\n };\n };\n\n const clearFadeTimer = (): void => {\n if (!fadeTimer) return;\n window.clearTimeout(fadeTimer);\n fadeTimer = 0;\n };\n const startFadeTimer = (): void => {\n clearFadeTimer();\n fadeTimer = window.setTimeout(() => {\n fadeTimer = 0;\n bridge.send('SCROLL_SETTLED');\n }, SCROLL_CHROME_FADE_DELAY);\n };\n\n const updateThumbPositions = (parts = elements()): void => {\n const {viewport} = parts;\n if (parts.verticalThumb && verticalGeometry) {\n const offset = verticalGeometry.maxOffset * clamp(viewport.scrollTop / verticalGeometry.maxScroll, 0, 1);\n parts.verticalThumb.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n if (parts.horizontalThumb && horizontalGeometry) {\n const offset = horizontalGeometry.maxOffset * clamp(\n horizontalScrollPosition(viewport) / horizontalGeometry.maxScroll,\n 0,\n 1,\n );\n parts.horizontalThumb.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n };\n\n const updateGeometry = (parts: ScrollAreaElements): void => {\n const {viewport} = parts;\n const updateAxis = (\n axis: ScrollAxis,\n scrollbar: HTMLElement | null,\n thumb: HTMLElement | null,\n overflow: boolean,\n ): AxisGeometry | null => {\n if (!scrollbar || !thumb || !overflow) {\n if (thumb) {\n thumb.style.width = '';\n thumb.style.height = '';\n thumb.style.transform = '';\n }\n return null;\n }\n\n const trackLength = axis === 'y' ? scrollbar.clientHeight : scrollbar.clientWidth;\n const viewportLength = axis === 'y' ? viewport.clientHeight : viewport.clientWidth;\n const scrollLength = axis === 'y' ? viewport.scrollHeight : viewport.scrollWidth;\n const maxScroll = Math.max(1, scrollLength - viewportLength);\n const thumbLength = Math.min(\n trackLength,\n Math.max(MIN_THUMB_SIZE, (viewportLength / scrollLength) * trackLength),\n );\n const maxOffset = Math.max(0, trackLength - thumbLength);\n\n if (axis === 'y') {\n thumb.style.height = `${thumbLength}px`;\n thumb.style.width = '';\n } else {\n thumb.style.width = `${thumbLength}px`;\n thumb.style.height = '';\n }\n return {trackLength, thumbLength, maxOffset, maxScroll};\n };\n\n const {overflow} = currentSnapshot().context;\n verticalGeometry = updateAxis('y', parts.verticalScrollbar, parts.verticalThumb, overflow.y);\n horizontalGeometry = updateAxis('x', parts.horizontalScrollbar, parts.horizontalThumb, overflow.x);\n updateThumbPositions(parts);\n };\n\n const updateVisibility = (parts: ScrollAreaElements): void => {\n const props = currentProps();\n const {overflow} = currentSnapshot().context;\n const interacting = hasTag('hovered') || hasTag('focused') || hasTag('scrolling') || hasTag('dragging');\n const visibleFor = (axisOverflows: boolean): boolean => {\n if (!axisOverflows) return false;\n if (props.type === 'always') return true;\n if (props.type === 'scroll') return hasTag('scrolling') || hasTag('dragging');\n return interacting;\n };\n const verticalVisible = visibleFor(overflow.y);\n const horizontalVisible = visibleFor(overflow.x);\n\n [parts.verticalScrollbar, parts.verticalThumb].forEach((el) => {\n if (el) setPresence({el, attr: 'data-visible', present: verticalVisible});\n });\n [parts.horizontalScrollbar, parts.horizontalThumb].forEach((el) => {\n if (el) setPresence({el, attr: 'data-visible', present: horizontalVisible});\n });\n [parts.verticalScrollbar, parts.horizontalScrollbar].forEach((el) => {\n if (el) setPresence({el, attr: 'data-disabled', present: props.disabled});\n });\n if (parts.verticalThumb) setPresence({el: parts.verticalThumb, attr: 'data-dragging', present: hasTag('dragging-y')});\n if (parts.horizontalThumb) setPresence({el: parts.horizontalThumb, attr: 'data-dragging', present: hasTag('dragging-x')});\n if (parts.corner) setPresence({el: parts.corner, attr: 'data-visible', present: verticalVisible && horizontalVisible});\n };\n\n const releaseDrag = (): void => {\n if (!dragging) return;\n const active = dragging;\n dragging = null;\n const parts = elements();\n const thumb = active.axis === 'y' ? parts.verticalThumb : parts.horizontalThumb;\n try {\n thumb?.releasePointerCapture?.(active.pointerId);\n } catch {\n // Pointer capture cleanup is best-effort after interrupted gestures.\n }\n bridge.send({type: 'DRAG_ENDED', axis: active.axis});\n };\n\n const syncDom = (): void => {\n const parts = elements();\n const props = currentProps();\n const {overflow} = currentSnapshot().context;\n if (props.disabled && dragging) releaseDrag();\n\n setPresence({el: parts.root, attr: 'data-overflow-x', present: overflow.x});\n setPresence({el: parts.root, attr: 'data-overflow-y', present: overflow.y});\n setPresence({el: parts.root, attr: 'data-scrolling', present: hasTag('scrolling')});\n setPresence({el: parts.root, attr: 'data-dragging', present: hasTag('dragging')});\n setPresence({el: parts.root, attr: 'data-disabled', present: props.disabled});\n setAttribute({el: parts.viewport, attr: 'data-orientation', value: props.orientation});\n setPresence({el: parts.viewport, attr: 'data-hide-native', present: props.hideNative});\n updateGeometry(parts);\n updateVisibility(parts);\n };\n\n const scheduleMeasure = (): void => {\n if (measureFrame) return;\n measureFrame = requestAnimationFrame(() => {\n measureFrame = 0;\n const parts = elements();\n const props = currentProps();\n const overflowX = includesAxis(props.orientation, 'x') && parts.viewport.scrollWidth > parts.viewport.clientWidth + 1;\n const overflowY = includesAxis(props.orientation, 'y') && parts.viewport.scrollHeight > parts.viewport.clientHeight + 1;\n const current = currentSnapshot().context.overflow;\n if (overflowX !== current.x || overflowY !== current.y) {\n bridge.send({type: 'MEASURED', overflowX, overflowY});\n } else {\n updateGeometry(parts);\n updateVisibility(parts);\n }\n });\n };\n const schedulePosition = (): void => {\n if (positionFrame) return;\n positionFrame = requestAnimationFrame(() => {\n positionFrame = 0;\n updateThumbPositions();\n });\n };\n\n const onScroll = (): void => {\n schedulePosition();\n if (!hasTag('scrolling')) bridge.send('SCROLLED');\n if ((currentSnapshot().context.overflow.y && !verticalGeometry)\n || (currentSnapshot().context.overflow.x && !horizontalGeometry)) scheduleMeasure();\n startFadeTimer();\n };\n\n const startDrag = (event: PointerEvent, axis: ScrollAxis): void => {\n if (currentProps().disabled) return;\n const parts = elements();\n const viewport = parts.viewport;\n const scrollbar = axis === 'y' ? parts.verticalScrollbar : parts.horizontalScrollbar;\n const thumb = axis === 'y' ? parts.verticalThumb : parts.horizontalThumb;\n const overflow = axis === 'y' ? currentSnapshot().context.overflow.y : currentSnapshot().context.overflow.x;\n if (!scrollbar || !thumb || !overflow) return;\n\n const trackLength = axis === 'y' ? scrollbar.clientHeight : scrollbar.clientWidth;\n const thumbLength = axis === 'y' ? thumb.offsetHeight : thumb.offsetWidth;\n const maxScroll = axis === 'y'\n ? Math.max(0, viewport.scrollHeight - viewport.clientHeight)\n : Math.max(0, viewport.scrollWidth - viewport.clientWidth);\n dragging = {\n axis,\n pointerId: event.pointerId,\n startPointer: axis === 'y' ? event.clientY : event.clientX,\n startScroll: axis === 'y' ? viewport.scrollTop : horizontalScrollPosition(viewport),\n trackLength,\n thumbLength,\n maxScroll,\n };\n try {\n thumb.setPointerCapture?.(event.pointerId);\n } catch {\n dragging = null;\n return;\n }\n clearFadeTimer();\n bridge.send({type: 'DRAG_STARTED', axis});\n };\n\n const moveDrag = (event: PointerEvent): void => {\n if (!dragging || dragging.pointerId !== event.pointerId) return;\n event.preventDefault();\n const {viewport} = elements();\n const pointer = dragging.axis === 'y' ? event.clientY : event.clientX;\n const delta = pointer - dragging.startPointer;\n const maxOffset = Math.max(1, dragging.trackLength - dragging.thumbLength);\n const nextScroll = dragging.startScroll + (delta / maxOffset) * dragging.maxScroll;\n if (dragging.axis === 'y') viewport.scrollTop = clamp(nextScroll, 0, dragging.maxScroll);\n else setHorizontalScrollPosition(viewport, nextScroll);\n schedulePosition();\n };\n\n const endDrag = (event: PointerEvent): void => {\n if (!dragging || dragging.pointerId !== event.pointerId) return;\n releaseDrag();\n startFadeTimer();\n };\n\n const bridge = createAlpineMachine({\n schema: scrollAreaSchema,\n hooks: scrollAreaHooks,\n createMachine: ({props}) => createScrollAreaMachine({\n props,\n context: {overflow: {x: false, y: false}},\n effects: {\n sync: syncDom,\n },\n }),\n });\n\n let component!: TrellisAlpineComponent<ScrollAreaData>;\n component = {\n ...bridge,\n get overflowX(): boolean {\n return this.snapshot.current?.context.overflow.x ?? false;\n },\n get overflowY(): boolean {\n return this.snapshot.current?.context.overflow.y ?? false;\n },\n get isScrolling(): boolean {\n return this.snapshot.current?.tags.includes('scrolling') ?? false;\n },\n get isDragging(): boolean {\n return this.snapshot.current?.tags.includes('dragging') ?? false;\n },\n init(): void {\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n const parts = elements();\n resizeObserver = new ResizeObserver(scheduleMeasure);\n resizeObserver.observe(parts.viewport);\n if (parts.content) resizeObserver.observe(parts.content);\n mutationObserver = new MutationObserver(scheduleMeasure);\n if (parts.content) mutationObserver.observe(parts.content, {childList: true, subtree: true, characterData: true});\n\n addListener({target: parts.viewport, event: 'scroll', handler: onScroll, cleanup: listeners, options: {passive: true}});\n addListener({target: document, event: 'pointermove', handler: (event) => moveDrag(event as PointerEvent), cleanup: listeners});\n addListener({target: document, event: 'pointerup', handler: (event) => endDrag(event as PointerEvent), cleanup: listeners});\n addListener({target: document, event: 'pointercancel', handler: (event) => endDrag(event as PointerEvent), cleanup: listeners});\n scheduleMeasure();\n },\n destroy(): void {\n releaseDrag();\n clearFadeTimer();\n if (measureFrame) cancelAnimationFrame(measureFrame);\n if (positionFrame) cancelAnimationFrame(positionFrame);\n measureFrame = 0;\n positionFrame = 0;\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n resizeObserver = null;\n mutationObserver = null;\n listeners.splice(0).forEach((cleanup) => cleanup());\n bridge.disconnect();\n rootEl = null;\n },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: scrollAreaStyles.parts.root, props, className: props.class}),\n {\n 'data-ui-scroll-area': '',\n ':data-orientation': () => currentProps().orientation,\n ':data-type': () => currentProps().type,\n ':data-fill': () => currentProps().fill ? '' : undefined,\n ':data-disabled': () => currentProps().disabled ? '' : undefined,\n '@pointerenter': () => bridge.send('POINTER_ENTERED'),\n '@pointerleave': () => bridge.send('POINTER_LEFT'),\n '@focusin': () => bridge.send('FOCUS_ENTERED'),\n '@focusout': (event: FocusEvent) => {\n if (!(event.relatedTarget instanceof Node) || !root().contains(event.relatedTarget)) {\n bridge.send('FOCUS_LEFT');\n }\n },\n },\n ]});\n },\n viewport(el: HTMLElement): BindingObject {\n return mergeBindings({inputs: [\n resolveStyle({\n part: scrollAreaStyles.parts.viewport,\n props: {orientation: currentProps().orientation, fill: currentProps().fill},\n className: el.dataset.class,\n }),\n {\n tabindex: '0',\n 'data-ui-scroll-area-viewport': '',\n ':data-orientation': () => currentProps().orientation,\n ':data-hide-native': () => currentProps().hideNative ? '' : undefined,\n },\n ]});\n },\n scrollbar(el: HTMLElement): BindingObject {\n const orientation = axisFromOrientation(el) === 'x' ? 'horizontal' : 'vertical';\n return mergeBindings({inputs: [\n resolveStyle({part: scrollAreaStyles.parts.scrollbar, props: {orientation}, className: el.dataset.class}),\n {\n 'data-ui-scroll-area-scrollbar': '',\n 'aria-hidden': 'true',\n ':data-disabled': () => currentProps().disabled ? '' : undefined,\n },\n ]});\n },\n thumb(el: HTMLElement): BindingObject {\n const axis = axisFromOrientation(el);\n const orientation = axis === 'x' ? 'horizontal' : 'vertical';\n return mergeBindings({inputs: [\n resolveStyle({part: scrollAreaStyles.parts.thumb, props: {orientation}, className: el.dataset.class}),\n {\n 'data-ui-scroll-area-thumb': '',\n 'aria-hidden': 'true',\n '@pointerdown.prevent': (event: PointerEvent) => startDrag(event, axis),\n ':data-dragging': () => hasTag(axis === 'x' ? 'dragging-x' : 'dragging-y') ? '' : undefined,\n },\n ]});\n },\n corner(el: HTMLElement): BindingObject {\n return mergeBindings({inputs: [\n resolveStyle({part: scrollAreaStyles.parts.corner, className: el.dataset.class}),\n {'data-ui-scroll-area-corner': '', 'aria-hidden': 'true'},\n ]});\n },\n };\n\n return component;\n};\n\nconst registerScrollArea = defineAlpineData('UiScrollArea', UiScrollArea);\n\nexport {registerScrollArea, UiScrollArea};\nexport type {ScrollAreaData, ScrollAreaElements, UiScrollAreaApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerScrollArea as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerScrollArea = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerScrollArea};\nexport default registerScrollArea;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{f as e,l as t,n,t as r}from"./codecs-Cb1ns_47.js";import{a as i,o as a,s as o,t as s}from"./dom-qAeVl7dc.js";import{t as c}from"./alpine-machine-BS13dbK4.js";import{t as l}from"./alpine-data-CytyCyfk.js";import{n as u,t as d}from"./styles-TfvwVPGw.js";import{t as f}from"./machine-Dqut4h89.js";import{n as p,t as m}from"./props-change-2xfsIAEN.js";import{n as h,r as ee}from"./form-control-BkVb2Qed.js";import{C as g,D as _,E as v,L as y,M as b,N as x,O as S,P as C,S as w,T,k as E,o as te,s as D,v as O,w as k,x as ne,y as re}from"./common-Dfj6NCjU.js";import{n as ie,r as ae,t as A}from"./styles-CpTCQjY5.js";var j=C,oe=[`default`,`cards`,`pills`,`menu`],M=O,N=te,P=[`default`,`cards`,`pills`,`menu`],F=y,I=re,L={value:e.default(`on`),name:e,label:e,description:e,checked:r(n,`prop-checked`),indeterminate:r(n,`prop-indeterminate`),disabled:r(n,`prop-disabled`),required:r(n,`prop-required`),invalid:r(n,`prop-invalid`),indicator:n.default(!0),placement:t(M,`leading`),icon:e,variant:t(P,`default`),color:t(F,`neutral`),interaction:t(I,`tonal`),size:t(N,`md`),inputClass:e,indicatorClass:e,indicatorIconClass:e,iconClass:e,contentClass:e,labelClass:e,descriptionClass:e,class:e};({...L});var se={name:e,orientation:t(j,`vertical`),variant:t(oe,`default`),color:t(F,`neutral`),interaction:t(I,`tonal`),indicator:n.default(!0),placement:t(M,`leading`),disabled:r(n,`prop-disabled`),required:r(n,`prop-required`),invalid:r(n,`prop-invalid`),class:e};t(N,`md`);var ce=[],le=[],ue={name:``,disabled:!1,required:!1,invalid:!1,variant:`default`},R=e=>e.indeterminate?`indeterminate`:e.checked?`checked`:`unchecked`,z=e=>e.state===`checked`||e.state===`indeterminate`?e.state:`unchecked`,B=({event:e})=>m(e,`checked`,`indeterminate`),V=e=>t=>{let n=p(t.event)?.props;return B(t)&&!!n&&R(n)===e},H=e=>({event:t})=>z(t)===e,de=e=>({context:{...e.context,selection:{state:z(e.event)}}}),fe=e=>{let t=p(e.event)?.props;if(t)return{props:t,context:B(e)?{...e.context,selection:{state:R(t)}}:e.context}},U=e=>[{target:`unchecked`,guard:H(`unchecked`),reduce:`setSelection`,effects:e},{target:`checked`,guard:H(`checked`),reduce:`setSelection`,effects:e},{target:`indeterminate`,guard:H(`indeterminate`),reduce:`setSelection`,effects:e}],pe=({props:e,inherited:t=ue,effects:n})=>{let r=R(e);return f({initial:r,on:{NATIVE_CHANGED:U([`sync`]),API_SET:U([`sync`,`emitInput`,`emitChange`]),INHERITANCE_CHANGED:{reduce:`setInheritance`,effects:`sync`},PROPS_CHANGED:[{target:`unchecked`,guard:V(`unchecked`),reduce:`reconcileProps`,effects:`sync`},{target:`checked`,guard:V(`checked`),reduce:`reconcileProps`,effects:`sync`},{target:`indeterminate`,guard:V(`indeterminate`),reduce:`reconcileProps`,effects:`sync`},{reduce:`reconcileProps`,effects:`sync`}]},states:{unchecked:{tags:[`unchecked`]},checked:{tags:[`checked`]},indeterminate:{tags:[`indeterminate`]}}},{context:{selection:{state:r},inherited:{...t}},props:e,reducers:{setSelection:de,reconcileProps:fe,setInheritance:e=>({context:{...e.context,inherited:{name:typeof e.event.name==`string`?e.event.name:``,disabled:e.event.disabled===!0,required:e.event.required===!0,invalid:e.event.invalid===!0,variant:e.event.variant===`menu`?`menu`:`default`}}})},effects:n})},W=e=>({name:e.name,disabled:e.disabled,required:e.required,invalid:e.invalid,variant:e.variant}),me=({props:e,effects:t})=>f({initial:`ready`,states:{ready:{tags:[`ready`],on:{PROPS_CHANGED:{reduce:`reconcileProps`,effects:`sync`}}}}},{context:{inherited:W(e)},props:e,reducers:{reconcileProps:e=>{let t=p(e.event)?.props;return t?{props:t,context:{inherited:W(t)}}:void 0}},effects:t}),G=[`relative isolate min-w-0 overflow-hidden rounded-surface-md`],K={sm:`text-xs`,md:`text-sm`},he=[K.md,_[4]];d({definition:{component:`ui.card`,parts:{root:{base:[G,`grid`],variants:{size:K,padding:_,paddingX:S,paddingY:E,gap:ne,gapX:w,gapY:g,margin:k,marginX:T,marginY:v},defaults:{size:`md`,padding:`4`,paddingX:`0`,paddingY:`0`,gap:`4`,gapX:`0`,gapY:`0`,margin:`0`,marginX:`0`,marginY:`0`}},header:{base:`grid min-w-0 grid-cols-[minmax(0,1fr)_auto] gap-x-3 gap-y-1`},title:{base:`col-start-1 block min-w-0 pr-2`},description:{base:`col-start-1 min-w-0 pr-2 text-surface-ink-muted`},action:{base:`col-start-2 row-span-2 row-start-1 -mr-1 -mt-1 justify-self-end self-start`},content:{base:`min-w-0 text-inherit`},footer:{base:`min-w-0 gap-2`,variants:{layout:{row:`flex flex-wrap items-center`,stack:`grid`},align:{start:`justify-start`,end:`justify-end`,between:`justify-between`,stretch:``}},compounds:[{when:{layout:`stack`,align:`start`},class:`justify-items-start`},{when:{layout:`stack`,align:`end`},class:`justify-items-end`},{when:{layout:`stack`,align:`stretch`},class:`justify-items-stretch`}],defaults:{layout:`row`,align:`end`}}}}});var q=[...ie,`relative w-auto cursor-pointer rounded-full text-surface-ink`,`shadow-[0_0_0_var(--border-width-edge-control)_var(--ui-surface-edge)]`,`[--ui-interaction-rest-edge:var(--ui-surface-edge)]`,`[&_[data-ui-checkbox-indicator]]:hidden`,`hover:bg-interaction-hover`,`active:bg-interaction-pressed`,`has-[:focus-visible]:ui-focus-ring`,`data-invalid:shadow-[0_0_0_var(--border-width-edge-control)_var(--color-intent-danger-edge)]`,`data-invalid:hover:shadow-[0_0_0_var(--border-width-edge-control)_var(--color-intent-danger-edge-hover)]`,`data-invalid:has-[:focus-visible]:ui-focus-ring-danger`],J=ae,Y=d({definition:{component:`ui.checkbox`,parts:{group:{base:`min-w-0`,variants:{orientation:{vertical:``,horizontal:``},variant:{default:``,cards:``,pills:``,menu:`contents`}},compounds:[{when:{orientation:`vertical`,variant:`default`},class:`grid w-full gap-2`},{when:{orientation:`horizontal`,variant:`default`},class:`flex w-full flex-wrap items-start gap-3`},{when:{orientation:`vertical`,variant:`cards`},class:`grid w-full gap-3`},{when:{orientation:`horizontal`,variant:`cards`},class:`flex w-full flex-wrap items-stretch gap-3`},{when:{orientation:`vertical`,variant:`pills`},class:`inline-grid w-auto gap-2`},{when:{orientation:`horizontal`,variant:`pills`},class:`flex flex-wrap items-center gap-2`}],defaults:{orientation:`vertical`,variant:`default`}},checkbox:{base:`relative min-w-0 cursor-pointer text-inherit outline-none`,variants:{variant:{default:`flex w-full items-start gap-2 rounded-control-md py-0.5`,cards:[...G,...he,`flex w-auto flex-1 cursor-pointer items-start gap-3`],pills:q,menu:x},size:{xs:``,sm:``,md:``,lg:``,xlg:``}},compounds:[{when:{variant:`default`,size:`xs`},class:D.xs},{when:{variant:`default`,size:`sm`},class:D.sm},{when:{variant:`default`,size:`md`},class:D.md},{when:{variant:`default`,size:`lg`},class:D.lg},{when:{variant:`default`,size:`xlg`},class:D.xlg},{when:{variant:`pills`,size:`xs`},class:J.xs},{when:{variant:`pills`,size:`sm`},class:J.sm},{when:{variant:`pills`,size:`md`},class:J.md},{when:{variant:`pills`,size:`lg`},class:J.lg},{when:{variant:`pills`,size:`xlg`},class:J.xlg}],defaults:{variant:`default`,size:`md`}},input:{base:`peer sr-only`},indicator:{base:[`relative mt-0.5 flex shrink-0 items-center justify-center rounded-control-md border-0`],variants:{variant:{default:``,cards:``,pills:``,menu:`order-10 !mt-0 ml-auto`},size:{xs:`size-checkbox-indicator-xs`,sm:`size-checkbox-indicator-sm`,md:`size-checkbox-indicator-md`,lg:`size-checkbox-indicator-lg`,xlg:`size-checkbox-indicator-xlg`}},defaults:{variant:`default`,size:`md`}},indicatorIcon:{base:`pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 shrink-0 fill-current opacity-0 data-checked:opacity-100 data-indeterminate:opacity-100`,variants:{size:{xs:`size-icon-xs`,sm:`size-icon-sm`,md:`size-icon-sm`,lg:`size-icon-sm`,xlg:`size-icon-lg`}},defaults:{size:`md`}},menuIndicator:{base:[`relative order-10 flex`,b]},menuIndicatorIcon:{base:`pointer-events-none absolute inset-0 size-icon shrink-0 fill-current opacity-0 data-checked:opacity-100 data-indeterminate:opacity-100`},content:{base:`grid min-w-0 gap-0.5`},icon:{base:`shrink-0 fill-current text-current opacity-75`,variants:{variant:{default:`mt-0.5 size-icon`,cards:`mt-0.5 size-icon`,pills:``},size:{xs:``,sm:``,md:``,lg:``,xlg:``}},compounds:[{when:{variant:`pills`,size:`xs`},class:A.xs},{when:{variant:`pills`,size:`sm`},class:A.sm},{when:{variant:`pills`,size:`md`},class:A.md},{when:{variant:`pills`,size:`lg`},class:A.lg},{when:{variant:`pills`,size:`xlg`},class:A.xlg}],defaults:{variant:`default`,size:`md`}},label:{base:``},description:{base:`text-surface-ink-muted`}}}}),X=new WeakMap,ge=e=>{let t=e.parentElement?.closest(`[data-ui-checkbox-group]`)??null;return t?X.get(t)??null:null},Z=()=>{let e=null,t=null,n=[],r=null,l=!1,d=()=>{if(!e)throw Error(`Checkbox has not been initialized.`);return e},f=()=>{if(!t)throw Error(`Checkbox requires a native checkbox input.`);return t},p=()=>_.getCommittedSnapshot(),m=()=>{let e=d(),t=f(),n=p(),r=n.props,s=n.context.inherited,c=n.context.selection.state,l=c===`checked`,m=c===`indeterminate`,g=r.disabled||s.disabled,_=r.required||s.required,v=r.invalid||s.invalid,y=r.name||s.name,b=r.variant===`menu`||s.variant===`menu`;t.checked=l,t.indeterminate=m,y||t.removeAttribute(`name`),ee({input:t,state:{name:y,value:r.value,disabled:g,required:_,invalid:v}}),m?t.setAttribute(`aria-checked`,`mixed`):t.removeAttribute(`aria-checked`),a({el:e,attr:`data-state`,value:c}),o({el:e,attr:`data-checked`,present:l}),o({el:e,attr:`data-indeterminate`,present:m}),h({el:e,state:{disabled:g,required:_,invalid:v}}),o({el:t,attr:`data-checked`,present:l}),o({el:t,attr:`data-indeterminate`,present:m}),e.className=u({part:Y.parts.checkbox,props:{...r,variant:b?`menu`:r.variant},className:e.dataset.class}),o({el:e,attr:`data-ui-menu-item`,present:b}),o({el:e,attr:`data-ui-option-recipe`,present:b}),o({el:e,attr:`data-keep-open`,present:b,value:`true`}),o({el:e,attr:`data-selected`,present:b&&(l||m)}),b?(e.setAttribute(`role`,`menuitemcheckbox`),e.setAttribute(`aria-checked`,m?`mixed`:l?`true`:`false`),e.tabIndex=-1,t.tabIndex=-1,t.setAttribute(`aria-hidden`,`true`)):(e.removeAttribute(`role`),e.removeAttribute(`aria-checked`),e.removeAttribute(`tabindex`),t.removeAttribute(`aria-hidden`));let x=e.querySelector(`[data-ui-checkbox-indicator]`);x&&(x.hidden=b,x.className=u({part:Y.parts.indicator,props:{...r,variant:b?`menu`:r.variant},className:x.dataset.class}),a({el:x,attr:`data-state`,value:c}),o({el:x,attr:`data-checked`,present:l}),o({el:x,attr:`data-indeterminate`,present:m}),o({el:x,attr:`data-disabled`,present:g}),o({el:x,attr:`data-invalid`,present:v}));let S=e.querySelector(`[data-ui-checkbox-indicator-icon="checked"]`);S&&(S.setAttribute(`class`,u({part:Y.parts.indicatorIcon,props:r,className:S.dataset.class})),o({el:S,attr:`data-checked`,present:l}),i({el:S,attr:`data-indeterminate`}));let C=e.querySelector(`[data-ui-checkbox-indicator-icon="indeterminate"]`);C&&(C.setAttribute(`class`,u({part:Y.parts.indicatorIcon,props:r,className:C.dataset.class})),o({el:C,attr:`data-indeterminate`,present:m}),i({el:C,attr:`data-checked`}));let w=e.querySelector(`[data-ui-checkbox-menu-indicator]`);w&&(w.hidden=!b,o({el:w,attr:`data-selected`,present:l||m}));let T=e.querySelector(`[data-ui-checkbox-menu-indicator-icon="checked"]`);T&&(o({el:T,attr:`data-checked`,present:l}),i({el:T,attr:`data-indeterminate`}));let E=e.querySelector(`[data-ui-checkbox-menu-indicator-icon="indeterminate"]`);E&&(o({el:E,attr:`data-indeterminate`,present:m}),i({el:E,attr:`data-checked`}))},g=e=>{l=!0;try{f().dispatchEvent(new Event(e,{bubbles:!0}))}finally{l=!1}},_=c({schema:L,hooks:ce,createMachine:({props:e})=>pe({props:e,effects:{sync:m,emitInput:()=>g(`input`),emitChange:()=>g(`change`)}})}),v={setInheritance(e){_.send({type:`INHERITANCE_CHANGED`,...e})}};return{..._,init(){if(e=this.$el,t=d().querySelector(`[data-ui-checkbox-input]`),!t)throw Error(`Checkbox requires a native checkbox input.`);_.connect(e,this.snapshot),s({target:t,event:`input`,handler:()=>{l||_.send({type:`NATIVE_CHANGED`,state:f().checked?`checked`:`unchecked`})},cleanup:n}),s({target:t,event:`change`,handler:()=>{l||_.send({type:`NATIVE_CHANGED`,state:f().checked?`checked`:`unchecked`})},cleanup:n});let i=ge(d());i&&(r=i.register(v)),m()},destroy(){r?.(),r=null,n.splice(0).reverse().forEach(e=>e()),_.disconnect(),e=null,t=null},get state(){return _.getCommittedSnapshot().context.selection.state},setState(e){if(![`unchecked`,`checked`,`indeterminate`].includes(e))throw Error(`Unknown checkbox state: ${String(e)}`);e!==_.getCommittedSnapshot().context.selection.state&&_.send({type:`API_SET`,state:e})}}},Q=()=>{let e=null,t=new Set,n=()=>{if(!e)throw Error(`Checkbox group has not been initialized.`);return e},r=()=>o.getCommittedSnapshot(),i=()=>{let e=r();a({el:n(),attr:`data-orientation`,value:e.props.orientation}),a({el:n(),attr:`data-variant`,value:e.props.variant}),h({el:n(),state:e.context.inherited}),t.forEach(t=>t.setInheritance(e.context.inherited))},o=c({schema:se,hooks:le,createMachine:({props:e})=>me({props:e,effects:{sync:i}})}),s={register(e){return t.add(e),e.setInheritance(r().context.inherited),()=>t.delete(e)},inherited:()=>r().context.inherited};return{...o,init(){e=this.$el,o.connect(e,this.snapshot),X.set(n(),s),i()},destroy(){X.delete(n()),t.clear(),o.disconnect(),e=null}}},_e=e=>{l(`UiCheckbox`,Z)(e),l(`UiCheckboxGroup`,Q)(e)},$=new WeakSet,ve=e=>{$.has(e)||($.add(e),_e(e))};export{Z as n,Q as r,ve as t};
|
|
2
|
-
//# sourceMappingURL=entry.generated-CSgqcIg6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-CSgqcIg6.js","names":[],"sources":["../../../../../../../../client/src/components/checkbox/contract.ts","../../../../../../../../client/src/components/checkbox/machine.ts","../../../../../../../../client/src/components/card/styles.ts","../../../../../../../../client/src/components/checkbox/styles.ts","../../../../../../../../client/src/components/checkbox/index.ts","../../../../../../../../client/src/components/checkbox/entry.generated.ts"],"sourcesContent":["import {attribute, bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n CONTROL_SIZES,\n INDICATOR_PLACEMENTS,\n INTERACTION_TREATMENTS,\n ORIENTATIONS,\n SELECTION_COLORS,\n type ControlSize,\n type IndicatorPlacement,\n type Orientation,\n} from '../common';\n\nconst CHECKBOX_GROUP_ORIENTATIONS = ORIENTATIONS;\nconst CHECKBOX_GROUP_VARIANTS = ['default', 'cards', 'pills', 'menu'] as const;\nconst CHECKBOX_PLACEMENTS = INDICATOR_PLACEMENTS;\nconst CHECKBOX_SIZES = CONTROL_SIZES;\nconst CHECKBOX_VARIANTS = ['default', 'cards', 'pills', 'menu'] as const;\nconst CHECKBOX_COLORS = SELECTION_COLORS;\nconst CHECKBOX_INTERACTIONS = INTERACTION_TREATMENTS;\n\ntype CheckboxGroupOrientation = Orientation;\ntype CheckboxGroupVariant = (typeof CHECKBOX_GROUP_VARIANTS)[number];\ntype CheckboxPlacement = IndicatorPlacement;\ntype CheckboxSize = ControlSize;\ntype CheckboxVariant = (typeof CHECKBOX_VARIANTS)[number];\ntype CheckboxColor = (typeof CHECKBOX_COLORS)[number];\ntype CheckboxInteraction = (typeof CHECKBOX_INTERACTIONS)[number];\n\nconst checkboxControlSchema = {\n value: string.default('on'),\n name: string,\n label: string,\n description: string,\n checked: attribute(bool, 'prop-checked'),\n indeterminate: attribute(bool, 'prop-indeterminate'),\n disabled: attribute(bool, 'prop-disabled'),\n required: attribute(bool, 'prop-required'),\n invalid: attribute(bool, 'prop-invalid'),\n indicator: bool.default(true),\n placement: oneOf(CHECKBOX_PLACEMENTS, 'leading' as CheckboxPlacement),\n icon: string,\n variant: oneOf(CHECKBOX_VARIANTS, 'default' as CheckboxVariant),\n color: oneOf(CHECKBOX_COLORS, 'neutral' as CheckboxColor),\n interaction: oneOf(CHECKBOX_INTERACTIONS, 'tonal' as CheckboxInteraction),\n size: oneOf(CHECKBOX_SIZES, 'md' as CheckboxSize),\n inputClass: string,\n indicatorClass: string,\n indicatorIconClass: string,\n iconClass: string,\n contentClass: string,\n labelClass: string,\n descriptionClass: string,\n class: string,\n};\n\nconst checkboxSchema = {\n ...checkboxControlSchema,\n label: string,\n description: string,\n descriptionTrailing: string,\n error: string,\n errors: string,\n badge: string,\n fieldClass: string,\n};\n\nconst checkboxGroupSchema = {\n name: string,\n orientation: oneOf(CHECKBOX_GROUP_ORIENTATIONS, 'vertical' as CheckboxGroupOrientation),\n variant: oneOf(CHECKBOX_GROUP_VARIANTS, 'default' as CheckboxGroupVariant),\n color: oneOf(CHECKBOX_COLORS, 'neutral' as CheckboxColor),\n interaction: oneOf(CHECKBOX_INTERACTIONS, 'tonal' as CheckboxInteraction),\n indicator: bool.default(true),\n placement: oneOf(CHECKBOX_PLACEMENTS, 'leading' as CheckboxPlacement),\n disabled: attribute(bool, 'prop-disabled'),\n required: attribute(bool, 'prop-required'),\n invalid: attribute(bool, 'prop-invalid'),\n class: string,\n};\n\nconst checkboxIndicatorSchema = {\n size: oneOf(CHECKBOX_SIZES, 'md' as CheckboxSize),\n class: string,\n};\n\ntype CheckboxControlProps = SchemaToProps<typeof checkboxControlSchema>;\ntype CheckboxGroupProps = SchemaToProps<typeof checkboxGroupSchema>;\ntype CheckboxProps = SchemaToProps<typeof checkboxSchema>;\n\nexport {\n CHECKBOX_GROUP_ORIENTATIONS,\n CHECKBOX_GROUP_VARIANTS,\n CHECKBOX_COLORS,\n CHECKBOX_INTERACTIONS,\n CHECKBOX_PLACEMENTS,\n CHECKBOX_SIZES,\n CHECKBOX_VARIANTS,\n checkboxControlSchema,\n checkboxGroupSchema,\n checkboxIndicatorSchema,\n checkboxSchema,\n};\nexport type {\n CheckboxControlProps,\n CheckboxColor,\n CheckboxGroupOrientation,\n CheckboxGroupProps,\n CheckboxGroupVariant,\n CheckboxInteraction,\n CheckboxPlacement,\n CheckboxProps,\n CheckboxSize,\n CheckboxVariant,\n};\n","import {\n createMachine,\n propsChanged,\n propsChangedEvent,\n type Machine,\n type MachineEventObject,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport type {CheckboxControlProps, CheckboxGroupProps} from './contract';\n\ntype CheckboxState = 'unchecked' | 'checked' | 'indeterminate';\ntype CheckboxInheritance = {\n name: string;\n disabled: boolean;\n required: boolean;\n invalid: boolean;\n variant: CheckboxGroupProps['variant'];\n};\ntype CheckboxContext = {\n selection: {state: CheckboxState};\n inherited: CheckboxInheritance;\n};\ntype CheckboxGroupContext = {inherited: CheckboxInheritance};\n\ntype CheckboxMachineEffects = {\n sync(scope: MachineScope<CheckboxContext, CheckboxControlProps>): void;\n emitInput(scope: MachineScope<CheckboxContext, CheckboxControlProps>): void;\n emitChange(scope: MachineScope<CheckboxContext, CheckboxControlProps>): void;\n};\ntype CheckboxGroupMachineEffects = {\n sync(scope: MachineScope<CheckboxGroupContext, CheckboxGroupProps>): void;\n};\n\nconst checkboxHooks = [] as const;\nconst checkboxGroupHooks = [] as const;\nconst EMPTY_INHERITANCE: CheckboxInheritance = {\n name: '', disabled: false, required: false, invalid: false, variant: 'default',\n};\n\nconst checkboxStateFromProps = (props: CheckboxControlProps): CheckboxState => {\n if (props.indeterminate) return 'indeterminate';\n return props.checked ? 'checked' : 'unchecked';\n};\n\nconst stateFromEvent = (event: MachineEventObject): CheckboxState => {\n if (event.state === 'checked' || event.state === 'indeterminate') return event.state;\n return 'unchecked';\n};\n\nconst selectionPropsChanged = ({event}: MachineScope<CheckboxContext, CheckboxControlProps>): boolean => (\n propsChanged<CheckboxControlProps>(event, 'checked', 'indeterminate')\n);\nconst nextSelectionIs = (state: CheckboxState) => (scope: MachineScope<CheckboxContext, CheckboxControlProps>): boolean => {\n const next = propsChangedEvent<CheckboxControlProps>(scope.event)?.props;\n return selectionPropsChanged(scope) && Boolean(next) && checkboxStateFromProps(next as CheckboxControlProps) === state;\n};\nconst eventStateIs = (state: CheckboxState) => ({event}: MachineScope<CheckboxContext, CheckboxControlProps>): boolean => (\n stateFromEvent(event) === state\n);\n\nconst setSelection = (scope: MachineScope<CheckboxContext, CheckboxControlProps>) => ({\n context: {...scope.context, selection: {state: stateFromEvent(scope.event)}},\n});\nconst reconcileProps = (scope: MachineScope<CheckboxContext, CheckboxControlProps>) => {\n const next = propsChangedEvent<CheckboxControlProps>(scope.event)?.props;\n if (!next) return;\n return {\n props: next,\n context: selectionPropsChanged(scope)\n ? {...scope.context, selection: {state: checkboxStateFromProps(next)}}\n : scope.context,\n };\n};\n\nconst selectionTransitions = (effects: string[]) => [\n {target: 'unchecked', guard: eventStateIs('unchecked'), reduce: 'setSelection', effects},\n {target: 'checked', guard: eventStateIs('checked'), reduce: 'setSelection', effects},\n {target: 'indeterminate', guard: eventStateIs('indeterminate'), reduce: 'setSelection', effects},\n];\n\nconst createCheckboxMachine = ({\n props,\n inherited = EMPTY_INHERITANCE,\n effects,\n}: {\n props: CheckboxControlProps;\n inherited?: CheckboxInheritance;\n effects: CheckboxMachineEffects;\n}): Machine<CheckboxContext, CheckboxControlProps> => {\n const initial = checkboxStateFromProps(props);\n return createMachine<CheckboxContext, CheckboxControlProps>({\n initial,\n on: {\n NATIVE_CHANGED: selectionTransitions(['sync']),\n API_SET: selectionTransitions(['sync', 'emitInput', 'emitChange']),\n INHERITANCE_CHANGED: {reduce: 'setInheritance', effects: 'sync'},\n PROPS_CHANGED: [\n {target: 'unchecked', guard: nextSelectionIs('unchecked'), reduce: 'reconcileProps', effects: 'sync'},\n {target: 'checked', guard: nextSelectionIs('checked'), reduce: 'reconcileProps', effects: 'sync'},\n {target: 'indeterminate', guard: nextSelectionIs('indeterminate'), reduce: 'reconcileProps', effects: 'sync'},\n {reduce: 'reconcileProps', effects: 'sync'},\n ],\n },\n states: {\n unchecked: {tags: ['unchecked']},\n checked: {tags: ['checked']},\n indeterminate: {tags: ['indeterminate']},\n },\n }, {\n context: {selection: {state: initial}, inherited: {...inherited}},\n props,\n reducers: {\n setSelection,\n reconcileProps,\n setInheritance: (scope) => ({\n context: {\n ...scope.context,\n inherited: {\n name: typeof scope.event.name === 'string' ? scope.event.name : '',\n disabled: scope.event.disabled === true,\n required: scope.event.required === true,\n invalid: scope.event.invalid === true,\n variant: scope.event.variant === 'menu' ? 'menu' : 'default',\n },\n },\n }),\n },\n effects,\n });\n};\n\nconst inheritanceFromGroupProps = (props: CheckboxGroupProps): CheckboxInheritance => ({\n name: props.name,\n disabled: props.disabled,\n required: props.required,\n invalid: props.invalid,\n variant: props.variant,\n});\n\nconst createCheckboxGroupMachine = ({\n props,\n effects,\n}: {\n props: CheckboxGroupProps;\n effects: CheckboxGroupMachineEffects;\n}): Machine<CheckboxGroupContext, CheckboxGroupProps> => createMachine<CheckboxGroupContext, CheckboxGroupProps>({\n initial: 'ready',\n states: {\n ready: {\n tags: ['ready'],\n on: {\n PROPS_CHANGED: {reduce: 'reconcileProps', effects: 'sync'},\n },\n },\n },\n}, {\n context: {inherited: inheritanceFromGroupProps(props)},\n props,\n reducers: {\n reconcileProps: (scope) => {\n const next = propsChangedEvent<CheckboxGroupProps>(scope.event)?.props;\n return next ? {props: next, context: {inherited: inheritanceFromGroupProps(next)}} : undefined;\n },\n },\n effects,\n});\n\nexport {\n checkboxGroupHooks,\n checkboxHooks,\n checkboxStateFromProps,\n createCheckboxGroupMachine,\n createCheckboxMachine,\n EMPTY_INHERITANCE,\n};\nexport type {\n CheckboxContext,\n CheckboxGroupContext,\n CheckboxGroupMachineEffects,\n CheckboxInheritance,\n CheckboxMachineEffects,\n CheckboxState,\n};\n","import {defineStyles} from '../../runtime';\nimport {\n LAYOUT_GAP_CLASSES,\n LAYOUT_GAP_X_CLASSES,\n LAYOUT_GAP_Y_CLASSES,\n LAYOUT_MARGIN_CLASSES,\n LAYOUT_MARGIN_X_CLASSES,\n LAYOUT_MARGIN_Y_CLASSES,\n LAYOUT_PADDING_CLASSES,\n LAYOUT_PADDING_X_CLASSES,\n LAYOUT_PADDING_Y_CLASSES,\n} from '../common';\n\nconst CARD_ROOT_BASE_CLASSES = [\n 'relative isolate min-w-0 overflow-hidden rounded-surface-md',\n];\n\nconst CARD_SIZE_CLASSES = {\n sm: 'text-xs',\n md: 'text-sm',\n} as const;\n\nconst CARD_ROOT_DEFAULT_CLASSES = [\n CARD_SIZE_CLASSES.md,\n LAYOUT_PADDING_CLASSES['4'],\n];\n\nconst cardStyles = defineStyles({definition: {\n component: 'ui.card',\n parts: {\n root: {\n base: [\n CARD_ROOT_BASE_CLASSES,\n 'grid',\n ],\n variants: {\n size: CARD_SIZE_CLASSES,\n padding: LAYOUT_PADDING_CLASSES,\n paddingX: LAYOUT_PADDING_X_CLASSES,\n paddingY: LAYOUT_PADDING_Y_CLASSES,\n gap: LAYOUT_GAP_CLASSES,\n gapX: LAYOUT_GAP_X_CLASSES,\n gapY: LAYOUT_GAP_Y_CLASSES,\n margin: LAYOUT_MARGIN_CLASSES,\n marginX: LAYOUT_MARGIN_X_CLASSES,\n marginY: LAYOUT_MARGIN_Y_CLASSES,\n },\n defaults: {\n size: 'md',\n padding: '4',\n paddingX: '0',\n paddingY: '0',\n gap: '4',\n gapX: '0',\n gapY: '0',\n margin: '0',\n marginX: '0',\n marginY: '0',\n },\n },\n header: {\n base: 'grid min-w-0 grid-cols-[minmax(0,1fr)_auto] gap-x-3 gap-y-1',\n },\n title: {\n base: 'col-start-1 block min-w-0 pr-2',\n },\n description: {\n base: 'col-start-1 min-w-0 pr-2 text-surface-ink-muted',\n },\n action: {\n base: 'col-start-2 row-span-2 row-start-1 -mr-1 -mt-1 justify-self-end self-start',\n },\n content: {\n base: 'min-w-0 text-inherit',\n },\n footer: {\n base: 'min-w-0 gap-2',\n variants: {\n layout: {\n row: 'flex flex-wrap items-center',\n stack: 'grid',\n },\n align: {\n start: 'justify-start',\n end: 'justify-end',\n between: 'justify-between',\n stretch: '',\n },\n },\n compounds: [\n {when: {layout: 'stack', align: 'start'}, class: 'justify-items-start'},\n {when: {layout: 'stack', align: 'end'}, class: 'justify-items-end'},\n {when: {layout: 'stack', align: 'stretch'}, class: 'justify-items-stretch'},\n ],\n defaults: {\n layout: 'row',\n align: 'end',\n },\n },\n },\n}});\n\nexport {CARD_ROOT_BASE_CLASSES, CARD_ROOT_DEFAULT_CLASSES, CARD_SIZE_CLASSES, cardStyles};\n","import {defineStyles} from '../../runtime';\nimport {CONTROL_TYPOGRAPHY_CLASSES, OPTION_INDICATOR_CLASSES, OPTION_ITEM_CLASSES} from '../common';\nimport {\n BADGE_ICON_SIZE_CLASSES,\n BADGE_ROOT_BASE_CLASSES,\n BADGE_SIZE_CLASSES,\n} from '../badge/styles';\nimport {CARD_ROOT_BASE_CLASSES, CARD_ROOT_DEFAULT_CLASSES} from '../card/styles';\n\nconst CHECKBOX_PILL_CLASSES = [\n ...BADGE_ROOT_BASE_CLASSES,\n 'relative w-auto cursor-pointer rounded-full text-surface-ink',\n 'shadow-[0_0_0_var(--border-width-edge-control)_var(--ui-surface-edge)]',\n '[--ui-interaction-rest-edge:var(--ui-surface-edge)]',\n '[&_[data-ui-checkbox-indicator]]:hidden',\n 'hover:bg-interaction-hover',\n 'active:bg-interaction-pressed',\n 'has-[:focus-visible]:ui-focus-ring',\n 'data-invalid:shadow-[0_0_0_var(--border-width-edge-control)_var(--color-intent-danger-edge)]',\n 'data-invalid:hover:shadow-[0_0_0_var(--border-width-edge-control)_var(--color-intent-danger-edge-hover)]',\n 'data-invalid:has-[:focus-visible]:ui-focus-ring-danger',\n];\n\nconst CHECKBOX_PILL_SIZE_CLASSES = BADGE_SIZE_CLASSES;\nconst CHECKBOX_CARD_CLASSES = [\n ...CARD_ROOT_BASE_CLASSES,\n ...CARD_ROOT_DEFAULT_CLASSES,\n 'flex w-auto flex-1 cursor-pointer items-start gap-3',\n];\n\nconst checkboxStyles = defineStyles({definition: {\n component: 'ui.checkbox',\n parts: {\n group: {\n base: 'min-w-0',\n variants: {\n orientation: {\n vertical: '',\n horizontal: '',\n },\n variant: {\n default: '',\n cards: '',\n pills: '',\n menu: 'contents',\n },\n },\n compounds: [\n {when: {orientation: 'vertical', variant: 'default'}, class: 'grid w-full gap-2'},\n {when: {orientation: 'horizontal', variant: 'default'}, class: 'flex w-full flex-wrap items-start gap-3'},\n {when: {orientation: 'vertical', variant: 'cards'}, class: 'grid w-full gap-3'},\n {when: {orientation: 'horizontal', variant: 'cards'}, class: 'flex w-full flex-wrap items-stretch gap-3'},\n {when: {orientation: 'vertical', variant: 'pills'}, class: 'inline-grid w-auto gap-2'},\n {when: {orientation: 'horizontal', variant: 'pills'}, class: 'flex flex-wrap items-center gap-2'},\n ],\n defaults: {\n orientation: 'vertical',\n variant: 'default',\n },\n },\n checkbox: {\n base: 'relative min-w-0 cursor-pointer text-inherit outline-none',\n variants: {\n variant: {\n default: 'flex w-full items-start gap-2 rounded-control-md py-0.5',\n cards: CHECKBOX_CARD_CLASSES,\n pills: CHECKBOX_PILL_CLASSES,\n menu: OPTION_ITEM_CLASSES,\n },\n size: {\n xs: '',\n sm: '',\n md: '',\n lg: '',\n xlg: '',\n },\n },\n compounds: [\n {when: {variant: 'default', size: 'xs'}, class: CONTROL_TYPOGRAPHY_CLASSES.xs},\n {when: {variant: 'default', size: 'sm'}, class: CONTROL_TYPOGRAPHY_CLASSES.sm},\n {when: {variant: 'default', size: 'md'}, class: CONTROL_TYPOGRAPHY_CLASSES.md},\n {when: {variant: 'default', size: 'lg'}, class: CONTROL_TYPOGRAPHY_CLASSES.lg},\n {when: {variant: 'default', size: 'xlg'}, class: CONTROL_TYPOGRAPHY_CLASSES.xlg},\n {when: {variant: 'pills', size: 'xs'}, class: CHECKBOX_PILL_SIZE_CLASSES.xs},\n {when: {variant: 'pills', size: 'sm'}, class: CHECKBOX_PILL_SIZE_CLASSES.sm},\n {when: {variant: 'pills', size: 'md'}, class: CHECKBOX_PILL_SIZE_CLASSES.md},\n {when: {variant: 'pills', size: 'lg'}, class: CHECKBOX_PILL_SIZE_CLASSES.lg},\n {when: {variant: 'pills', size: 'xlg'}, class: CHECKBOX_PILL_SIZE_CLASSES.xlg},\n ],\n defaults: {\n variant: 'default',\n size: 'md',\n },\n },\n input: {\n base: 'peer sr-only',\n },\n indicator: {\n base: [\n 'relative mt-0.5 flex shrink-0 items-center justify-center rounded-control-md border-0',\n ],\n variants: {\n variant: {\n default: '',\n cards: '',\n pills: '',\n menu: 'order-10 !mt-0 ml-auto',\n },\n size: {\n xs: 'size-checkbox-indicator-xs',\n sm: 'size-checkbox-indicator-sm',\n md: 'size-checkbox-indicator-md',\n lg: 'size-checkbox-indicator-lg',\n xlg: 'size-checkbox-indicator-xlg',\n },\n },\n defaults: {\n variant: 'default',\n size: 'md',\n },\n },\n indicatorIcon: {\n base: 'pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 shrink-0 fill-current opacity-0 data-checked:opacity-100 data-indeterminate:opacity-100',\n variants: {\n size: {\n xs: 'size-icon-xs',\n sm: 'size-icon-sm',\n md: 'size-icon-sm',\n lg: 'size-icon-sm',\n xlg: 'size-icon-lg',\n },\n },\n defaults: {\n size: 'md',\n },\n },\n menuIndicator: {\n base: ['relative order-10 flex', OPTION_INDICATOR_CLASSES],\n },\n menuIndicatorIcon: {\n base: 'pointer-events-none absolute inset-0 size-icon shrink-0 fill-current opacity-0 data-checked:opacity-100 data-indeterminate:opacity-100',\n },\n content: {\n base: 'grid min-w-0 gap-0.5',\n },\n icon: {\n base: 'shrink-0 fill-current text-current opacity-75',\n variants: {\n variant: {\n default: 'mt-0.5 size-icon',\n cards: 'mt-0.5 size-icon',\n pills: '',\n },\n size: {\n xs: '',\n sm: '',\n md: '',\n lg: '',\n xlg: '',\n },\n },\n compounds: [\n {when: {variant: 'pills', size: 'xs'}, class: BADGE_ICON_SIZE_CLASSES.xs},\n {when: {variant: 'pills', size: 'sm'}, class: BADGE_ICON_SIZE_CLASSES.sm},\n {when: {variant: 'pills', size: 'md'}, class: BADGE_ICON_SIZE_CLASSES.md},\n {when: {variant: 'pills', size: 'lg'}, class: BADGE_ICON_SIZE_CLASSES.lg},\n {when: {variant: 'pills', size: 'xlg'}, class: BADGE_ICON_SIZE_CLASSES.xlg},\n ],\n defaults: {\n variant: 'default',\n size: 'md',\n },\n },\n label: {\n base: '',\n },\n description: {\n base: 'text-surface-ink-muted',\n },\n },\n}});\n\nexport {CHECKBOX_CARD_CLASSES, CHECKBOX_PILL_CLASSES, CHECKBOX_PILL_SIZE_CLASSES, checkboxStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n type MachineSnapshot,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {syncControlPresence, syncNativeControl} from '@client/runtime/form-control';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, removeAttribute, setAttribute, setPresence, type CleanupStack} from '@client/utils';\nimport {checkboxControlSchema, checkboxGroupSchema, type CheckboxControlProps, type CheckboxGroupProps} from './contract';\nimport {\n checkboxGroupHooks,\n checkboxHooks,\n createCheckboxGroupMachine,\n createCheckboxMachine,\n type CheckboxContext,\n type CheckboxGroupContext,\n type CheckboxInheritance,\n type CheckboxState,\n} from './machine';\nimport {checkboxStyles} from './styles';\n\n/**\n * Public Alpine API for `ui.checkbox` and `ui.checkbox.control`.\n *\n * @public\n */\ninterface UiCheckboxApi {\n /** Current semantic checkbox state. */\n readonly state: CheckboxState;\n /** Set and commit the semantic checkbox state. */\n setState(state: CheckboxState): void;\n}\n\ntype CheckboxData = AlpineMachine<CheckboxContext, CheckboxControlProps, typeof checkboxHooks> & UiCheckboxApi & {\n init(): void;\n destroy(): void;\n};\ntype CheckboxGroupData = AlpineMachine<CheckboxGroupContext, CheckboxGroupProps, typeof checkboxGroupHooks> & {\n init(): void;\n destroy(): void;\n};\n\ntype CheckboxOwner = {setInheritance(inherited: CheckboxInheritance): void};\ntype CheckboxGroupOwner = {\n register(owner: CheckboxOwner): () => void;\n inherited(): CheckboxInheritance;\n};\n\nconst groupOwners = new WeakMap<HTMLElement, CheckboxGroupOwner>();\n\nconst closestGroupOwner = (element: HTMLElement): CheckboxGroupOwner | null => {\n const group = element.parentElement?.closest<HTMLElement>('[data-ui-checkbox-group]') ?? null;\n return group ? groupOwners.get(group) ?? null : null;\n};\n\nconst UiCheckbox = (): TrellisAlpineComponent<CheckboxData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let inputEl: HTMLInputElement | null = null;\n let listeners: CleanupStack = [];\n let unregisterGroup: (() => void) | null = null;\n let dispatchingNative = false;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Checkbox has not been initialized.');\n return rootEl;\n };\n const input = (): HTMLInputElement => {\n if (!inputEl) throw new Error('Checkbox requires a native checkbox input.');\n return inputEl;\n };\n const currentSnapshot = (): MachineSnapshot<CheckboxContext, CheckboxControlProps> => bridge.getCommittedSnapshot();\n\n const syncDom = (): void => {\n const checkbox = root();\n const native = input();\n const snapshot = currentSnapshot();\n const props = snapshot.props;\n const inherited = snapshot.context.inherited;\n const state = snapshot.context.selection.state;\n const checked = state === 'checked';\n const indeterminate = state === 'indeterminate';\n const disabled = props.disabled || inherited.disabled;\n const required = props.required || inherited.required;\n const invalid = props.invalid || inherited.invalid;\n const name = props.name || inherited.name;\n const menu = props.variant === 'menu' || inherited.variant === 'menu';\n\n native.checked = checked;\n native.indeterminate = indeterminate;\n if (!name) native.removeAttribute('name');\n syncNativeControl({input: native, state: {name, value: props.value, disabled, required, invalid}});\n if (indeterminate) native.setAttribute('aria-checked', 'mixed');\n else native.removeAttribute('aria-checked');\n\n setAttribute({el: checkbox, attr: 'data-state', value: state});\n setPresence({el: checkbox, attr: 'data-checked', present: checked});\n setPresence({el: checkbox, attr: 'data-indeterminate', present: indeterminate});\n syncControlPresence({el: checkbox, state: {disabled, required, invalid}});\n setPresence({el: native, attr: 'data-checked', present: checked});\n setPresence({el: native, attr: 'data-indeterminate', present: indeterminate});\n checkbox.className = resolveStyle({\n part: checkboxStyles.parts.checkbox,\n props: {...props, variant: menu ? 'menu' : props.variant},\n className: checkbox.dataset.class,\n });\n setPresence({el: checkbox, attr: 'data-ui-menu-item', present: menu});\n setPresence({el: checkbox, attr: 'data-ui-option-recipe', present: menu});\n setPresence({el: checkbox, attr: 'data-keep-open', present: menu, value: 'true'});\n setPresence({el: checkbox, attr: 'data-selected', present: menu && (checked || indeterminate)});\n if (menu) {\n checkbox.setAttribute('role', 'menuitemcheckbox');\n checkbox.setAttribute('aria-checked', indeterminate ? 'mixed' : checked ? 'true' : 'false');\n checkbox.tabIndex = -1;\n native.tabIndex = -1;\n native.setAttribute('aria-hidden', 'true');\n } else {\n checkbox.removeAttribute('role');\n checkbox.removeAttribute('aria-checked');\n checkbox.removeAttribute('tabindex');\n native.removeAttribute('aria-hidden');\n }\n\n const indicator = checkbox.querySelector<HTMLElement>('[data-ui-checkbox-indicator]');\n if (indicator) {\n indicator.hidden = menu;\n indicator.className = resolveStyle({\n part: checkboxStyles.parts.indicator,\n props: {...props, variant: menu ? 'menu' : props.variant},\n className: indicator.dataset.class,\n });\n setAttribute({el: indicator, attr: 'data-state', value: state});\n setPresence({el: indicator, attr: 'data-checked', present: checked});\n setPresence({el: indicator, attr: 'data-indeterminate', present: indeterminate});\n setPresence({el: indicator, attr: 'data-disabled', present: disabled});\n setPresence({el: indicator, attr: 'data-invalid', present: invalid});\n }\n const checkedIcon = checkbox.querySelector<HTMLElement>('[data-ui-checkbox-indicator-icon=\"checked\"]');\n if (checkedIcon) {\n checkedIcon.setAttribute('class', resolveStyle({\n part: checkboxStyles.parts.indicatorIcon,\n props,\n className: checkedIcon.dataset.class,\n }));\n setPresence({el: checkedIcon, attr: 'data-checked', present: checked});\n removeAttribute({el: checkedIcon, attr: 'data-indeterminate'});\n }\n const indeterminateIcon = checkbox.querySelector<HTMLElement>('[data-ui-checkbox-indicator-icon=\"indeterminate\"]');\n if (indeterminateIcon) {\n indeterminateIcon.setAttribute('class', resolveStyle({\n part: checkboxStyles.parts.indicatorIcon,\n props,\n className: indeterminateIcon.dataset.class,\n }));\n setPresence({el: indeterminateIcon, attr: 'data-indeterminate', present: indeterminate});\n removeAttribute({el: indeterminateIcon, attr: 'data-checked'});\n }\n const menuIndicator = checkbox.querySelector<HTMLElement>('[data-ui-checkbox-menu-indicator]');\n if (menuIndicator) {\n menuIndicator.hidden = !menu;\n setPresence({el: menuIndicator, attr: 'data-selected', present: checked || indeterminate});\n }\n const menuCheckedIcon = checkbox.querySelector<HTMLElement>('[data-ui-checkbox-menu-indicator-icon=\"checked\"]');\n if (menuCheckedIcon) {\n setPresence({el: menuCheckedIcon, attr: 'data-checked', present: checked});\n removeAttribute({el: menuCheckedIcon, attr: 'data-indeterminate'});\n }\n const menuIndeterminateIcon = checkbox.querySelector<HTMLElement>('[data-ui-checkbox-menu-indicator-icon=\"indeterminate\"]');\n if (menuIndeterminateIcon) {\n setPresence({el: menuIndeterminateIcon, attr: 'data-indeterminate', present: indeterminate});\n removeAttribute({el: menuIndeterminateIcon, attr: 'data-checked'});\n }\n };\n\n const dispatchNative = (type: 'input' | 'change'): void => {\n dispatchingNative = true;\n try { input().dispatchEvent(new Event(type, {bubbles: true})); } finally { dispatchingNative = false; }\n };\n\n const bridge = createAlpineMachine({\n schema: checkboxControlSchema,\n hooks: checkboxHooks,\n createMachine: ({props}) => createCheckboxMachine({\n props,\n effects: {\n sync: syncDom,\n emitInput: () => dispatchNative('input'),\n emitChange: () => dispatchNative('change'),\n },\n }),\n });\n\n const owner: CheckboxOwner = {\n setInheritance(inherited): void {\n bridge.send({type: 'INHERITANCE_CHANGED', ...inherited});\n },\n };\n\n return {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n inputEl = root().querySelector<HTMLInputElement>('[data-ui-checkbox-input]');\n if (!inputEl) throw new Error('Checkbox requires a native checkbox input.');\n bridge.connect(rootEl, this.snapshot);\n addListener({target: inputEl, event: 'input', handler: () => {\n if (dispatchingNative) return;\n bridge.send({type: 'NATIVE_CHANGED', state: input().checked ? 'checked' : 'unchecked'});\n }, cleanup: listeners});\n addListener({target: inputEl, event: 'change', handler: () => {\n if (dispatchingNative) return;\n bridge.send({type: 'NATIVE_CHANGED', state: input().checked ? 'checked' : 'unchecked'});\n }, cleanup: listeners});\n const group = closestGroupOwner(root());\n if (group) unregisterGroup = group.register(owner);\n syncDom();\n },\n destroy(): void {\n unregisterGroup?.();\n unregisterGroup = null;\n listeners.splice(0).reverse().forEach((cleanup) => cleanup());\n bridge.disconnect();\n rootEl = null;\n inputEl = null;\n },\n get state(): CheckboxState {\n return bridge.getCommittedSnapshot().context.selection.state;\n },\n setState(state: CheckboxState): void {\n if (!['unchecked', 'checked', 'indeterminate'].includes(state)) {\n throw new Error(`Unknown checkbox state: ${String(state)}`);\n }\n if (state === bridge.getCommittedSnapshot().context.selection.state) return;\n bridge.send({type: 'API_SET', state});\n },\n };\n};\n\nconst UiCheckboxGroup = (): TrellisAlpineComponent<CheckboxGroupData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n const members = new Set<CheckboxOwner>();\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Checkbox group has not been initialized.');\n return rootEl;\n };\n const currentSnapshot = (): MachineSnapshot<CheckboxGroupContext, CheckboxGroupProps> => bridge.getCommittedSnapshot();\n const syncDom = (): void => {\n const snapshot = currentSnapshot();\n setAttribute({el: root(), attr: 'data-orientation', value: snapshot.props.orientation});\n setAttribute({el: root(), attr: 'data-variant', value: snapshot.props.variant});\n syncControlPresence({el: root(), state: snapshot.context.inherited});\n members.forEach((member) => member.setInheritance(snapshot.context.inherited));\n };\n const bridge = createAlpineMachine({\n schema: checkboxGroupSchema,\n hooks: checkboxGroupHooks,\n createMachine: ({props}) => createCheckboxGroupMachine({\n props,\n effects: {sync: syncDom},\n }),\n });\n const owner: CheckboxGroupOwner = {\n register(member): () => void {\n members.add(member);\n member.setInheritance(currentSnapshot().context.inherited);\n return () => members.delete(member);\n },\n inherited: () => currentSnapshot().context.inherited,\n };\n\n return {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n bridge.connect(rootEl, this.snapshot);\n groupOwners.set(root(), owner);\n syncDom();\n },\n destroy(): void {\n groupOwners.delete(root());\n members.clear();\n bridge.disconnect();\n rootEl = null;\n },\n };\n};\n\nconst registerCheckbox = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiCheckbox', UiCheckbox)(AlpineInstance);\n defineAlpineData('UiCheckboxGroup', UiCheckboxGroup)(AlpineInstance);\n};\n\nexport {registerCheckbox, UiCheckbox, UiCheckboxGroup};\nexport type {CheckboxData, CheckboxGroupData, CheckboxState, UiCheckboxApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerCheckbox as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerCheckbox = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerCheckbox};\nexport default registerCheckbox;\nexport * from './index';\n"],"mappings":"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"}
|