@vireo-ai/trellis-ui 0.1.42 → 0.1.43

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.
Files changed (71) hide show
  1. package/package.json +1 -1
  2. package/packages/client/src/components/field/styles.css +7 -4
  3. package/packages/client/types/components/common.d.ts +1 -1
  4. package/packages/client/types/components/input/contract.d.ts +3 -3
  5. package/packages/client/types/components/select/contract.d.ts +2 -2
  6. package/packages/client/types/components/select/machine.d.ts +2 -2
  7. package/packages/client/types/components/textarea/contract.d.ts +1 -1
  8. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +5 -3
  9. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
  10. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +241 -241
  11. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
  12. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-Ds2wQEQq.js → capability-sortable-aY5GWxrK.js} +2 -2
  13. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-Ds2wQEQq.js.map → capability-sortable-aY5GWxrK.js.map} +1 -1
  14. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-fH2NGblC.js +2 -0
  15. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-fH2NGblC.js.map +1 -0
  16. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-MnVr6QxG.js → entry.generated-B74OtpL2.js} +2 -2
  17. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-MnVr6QxG.js.map → entry.generated-B74OtpL2.js.map} +1 -1
  18. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZXp8Edl.js +2 -0
  19. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZXp8Edl.js.map +1 -0
  20. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BPZeXRC3.js → entry.generated-BbQ_TNRI.js} +2 -2
  21. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BPZeXRC3.js.map → entry.generated-BbQ_TNRI.js.map} +1 -1
  22. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BC8JUf6f.js → entry.generated-BwAge51I.js} +2 -2
  23. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BC8JUf6f.js.map → entry.generated-BwAge51I.js.map} +1 -1
  24. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DYBALnuF.js → entry.generated-CEGLKsEl.js} +2 -2
  25. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DYBALnuF.js.map → entry.generated-CEGLKsEl.js.map} +1 -1
  26. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BO0EDjBb.js → entry.generated-CYHiRVjx.js} +2 -2
  27. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BO0EDjBb.js.map → entry.generated-CYHiRVjx.js.map} +1 -1
  28. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B7ROYMLZ.js → entry.generated-Ck7bhyzz.js} +2 -2
  29. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B7ROYMLZ.js.map → entry.generated-Ck7bhyzz.js.map} +1 -1
  30. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C8pt5QeK.js → entry.generated-CtoSPDoI.js} +2 -2
  31. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C8pt5QeK.js.map → entry.generated-CtoSPDoI.js.map} +1 -1
  32. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DfuZKFMG.js → entry.generated-D0Av2Aiw.js} +2 -2
  33. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DfuZKFMG.js.map → entry.generated-D0Av2Aiw.js.map} +1 -1
  34. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BoOsILKj.js → entry.generated-DSyiRko7.js} +2 -2
  35. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BoOsILKj.js.map → entry.generated-DSyiRko7.js.map} +1 -1
  36. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DjMJNzy1.js → entry.generated-Dd04OzRH.js} +2 -2
  37. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DjMJNzy1.js.map → entry.generated-Dd04OzRH.js.map} +1 -1
  38. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DIPrCNjK.js → entry.generated-Gl6wz0Oh.js} +2 -2
  39. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DIPrCNjK.js.map → entry.generated-Gl6wz0Oh.js.map} +1 -1
  40. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-vM-5KVaL.js +2 -0
  41. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-vM-5KVaL.js.map +1 -0
  42. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D5gXHQl_.js → entry.generated-xjDWyE7q.js} +2 -2
  43. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D5gXHQl_.js.map → entry.generated-xjDWyE7q.js.map} +1 -1
  44. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-Dgrr543E.js → entry2.generated-e3bTOzUi.js} +2 -2
  45. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-Dgrr543E.js.map → entry2.generated-e3bTOzUi.js.map} +1 -1
  46. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
  47. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +1 -1
  48. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
  49. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
  50. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
  51. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +1 -1
  52. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
  53. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +1 -1
  54. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
  55. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +1 -1
  56. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
  57. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
  58. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +1 -1
  59. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +1 -1
  60. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
  61. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
  62. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
  63. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +67 -67
  64. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +1 -1
  65. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +1 -1
  66. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-BOd_thC-.js +0 -2
  67. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-BOd_thC-.js.map +0 -1
  68. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-51hjJ_lu.js +0 -2
  69. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-51hjJ_lu.js.map +0 -1
  70. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BLloDlP5.js +0 -2
  71. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BLloDlP5.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"entry.generated-DYBALnuF.js","names":[],"sources":["../../../../../../../../client/src/components/input/contract.ts","../../../../../../../../client/src/components/input/machine.ts","../../../../../../../../client/src/components/input/index.ts","../../../../../../../../client/src/components/input/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n CONTROL_SIZES,\n CONTROL_VARIANTS,\n COMPONENT_RADII,\n ICON_VARIANTS,\n type ComponentRadius,\n type ControlSize,\n type ControlVariant,\n type IconVariant,\n} from '../common';\n\nconst INPUT_SIZES = CONTROL_SIZES;\nconst INPUT_VARIANTS = CONTROL_VARIANTS;\nconst INPUT_RADII = COMPONENT_RADII;\nconst INPUT_ICON_VARIANTS = ICON_VARIANTS;\n\ntype InputSize = ControlSize;\ntype InputVariant = ControlVariant;\ntype InputRadius = ComponentRadius;\ntype InputIconVariant = IconVariant;\n\nconst inputSchema = {\n type: string.default('text'),\n name: string,\n value: string,\n placeholder: string,\n size: oneOf(INPUT_SIZES, 'lg' as InputSize),\n variant: oneOf(INPUT_VARIANTS, 'outline' as InputVariant),\n radius: oneOf(INPUT_RADII, 'md' as InputRadius),\n disabled: bool,\n readonly: bool,\n required: bool,\n invalid: bool,\n icon: string,\n iconTrailing: string,\n iconVariant: oneOf(INPUT_ICON_VARIANTS, 'outline' as InputIconVariant),\n clearable: bool,\n copyable: bool,\n kbd: string,\n prefix: string,\n suffix: string,\n rootClass: string,\n controlClass: string,\n class: string,\n};\n\nconst inputGroupSchema = {\n size: oneOf(INPUT_SIZES, 'lg' as InputSize),\n variant: oneOf(INPUT_VARIANTS, 'outline' as InputVariant),\n radius: oneOf(INPUT_RADII, 'md' as InputRadius),\n label: string,\n description: string,\n descriptionTrailing: string,\n error: string,\n errors: string,\n badge: string,\n fieldClass: string,\n class: string,\n};\n\nconst inputAffixSchema = {\n class: string,\n};\n\ntype InputProps = SchemaToProps<typeof inputSchema>;\n\nexport {INPUT_ICON_VARIANTS, INPUT_RADII, INPUT_SIZES, INPUT_VARIANTS, inputAffixSchema, inputGroupSchema, inputSchema};\nexport type {InputIconVariant, InputProps, InputRadius, InputSize, InputVariant};\n","import {createMachine, propsChangedEvent, type Machine, type MachineEventObject, type MachineScope} from '../../runtime/state-machine';\nimport type {InputProps} from './contract';\n\ntype InputContext = {value: string};\ntype InputEffects = {\n sync(scope: MachineScope<InputContext, InputProps>): void;\n copy(scope: MachineScope<InputContext, InputProps>): void;\n emitInput(scope: MachineScope<InputContext, InputProps>): void;\n emitChange(scope: MachineScope<InputContext, InputProps>): void;\n focus(scope: MachineScope<InputContext, InputProps>): void;\n startCopiedTimer(scope: MachineScope<InputContext, InputProps>): void;\n};\nconst inputHooks = [] as const;\nconst eventValue = (event: MachineEventObject): string => typeof event.value === 'string' ? event.value : '';\nconst setValue = (scope: MachineScope<InputContext, InputProps>) => ({context: {value: eventValue(scope.event)}});\nconst clearValue = () => ({context: {value: ''}});\nconst reconcileProps = (scope: MachineScope<InputContext, InputProps>) => {\n const event = propsChangedEvent<InputProps>(scope.event);\n if (!event) return;\n const valueChanged = event.changes.some(({key}) => key === 'value');\n return {props: event.props, context: valueChanged ? {value: event.props.value} : scope.context};\n};\n\nconst createInputMachine = ({props, effects}: {props: InputProps; effects: InputEffects}): Machine<InputContext, InputProps> => createMachine<InputContext, InputProps>({\n initial: 'idle',\n on: {\n VALUE_CHANGED: {reduce: 'setValue', effects: 'sync'},\n CLEAR: {target: 'idle', reduce: 'clearValue', effects: ['sync', 'emitInput', 'emitChange', 'focus']},\n COPY: {target: 'copying', effects: 'copy'},\n PROPS_CHANGED: {reduce: 'reconcileProps', effects: 'sync'},\n },\n states: {\n idle: {},\n copying: {on: {\n COPY_DONE: {target: 'copied', effects: ['sync', 'startCopiedTimer']},\n COPY_ERROR: {target: 'idle', effects: 'sync'},\n }},\n copied: {tags: ['copied'], on: {\n COPY: {target: 'copying', effects: 'copy'},\n COPIED_TIMEOUT: {target: 'idle', effects: 'sync'},\n }},\n },\n}, {\n context: {value: props.value},\n props,\n reducers: {setValue, clearValue, reconcileProps},\n effects,\n});\n\nexport {createInputMachine, inputHooks};\nexport type {InputContext, InputEffects};\n","import type Alpine from 'alpinejs';\n\nimport {type AlpineMachine, createAlpineMachine, defineAlpineData, type MachineSnapshot, type TrellisAlpineComponent} from '@client/runtime';\nimport {syncControlPresence, syncNativeControl} from '@client/runtime/form-control';\nimport {addListener, setPresence, type CleanupStack} from '@client/utils';\nimport {inputSchema, type InputProps} from './contract';\nimport {createInputMachine, inputHooks, type InputContext} from './machine';\n\n/** Public Alpine API for `ui.input` and `ui.input.control`. @public */\ninterface UiInputApi {\n /** Current native input value. */\n readonly value: string;\n /** Clear the input, emit native input/change events, and restore focus. */\n clear(): void;\n /** Copy the current value to the clipboard. */\n copy(): void;\n}\n\ntype InputData = AlpineMachine<InputContext, InputProps, typeof inputHooks> & UiInputApi & {\n init(): void;\n destroy(): void;\n};\n\nconst UiInput = (): TrellisAlpineComponent<InputData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let inputEl: HTMLInputElement | null = null;\n let listeners: CleanupStack = [];\n let copiedTimer: number | null = null;\n let dispatching = false;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Input has not been initialized.');\n return rootEl;\n };\n const input = (): HTMLInputElement => {\n if (!inputEl) throw new Error('Input requires a native input element.');\n return inputEl;\n };\n const snapshot = (): MachineSnapshot<InputContext, InputProps> => bridge.getCommittedSnapshot();\n const syncDom = (): void => {\n const current = snapshot();\n const props = current.props;\n const native = input();\n if (native.value !== current.context.value) native.value = current.context.value;\n native.type = props.type;\n if (props.placeholder) native.placeholder = props.placeholder;\n else native.removeAttribute('placeholder');\n syncNativeControl({input: native, state: {\n name: props.name,\n disabled: props.disabled,\n readonly: props.readonly,\n required: props.required,\n invalid: props.invalid,\n }});\n syncControlPresence({el: root(), state: props, value: 'true'});\n const control = root().querySelector<HTMLElement>('[data-ui-input-control]');\n if (control) syncControlPresence({el: control, state: {disabled: props.disabled, invalid: props.invalid}, value: 'true'});\n root().querySelectorAll<HTMLElement>('[data-ui-input-clear]').forEach((button) => {\n button.hidden = current.context.value.length === 0;\n if (button instanceof HTMLButtonElement) button.disabled = props.disabled || props.readonly;\n });\n root().querySelectorAll<HTMLElement>('[data-ui-input-copy]').forEach((button) => {\n if (button instanceof HTMLButtonElement) button.disabled = props.disabled;\n setPresence({el: button, attr: 'data-copied', present: current.tags.includes('copied'), value: 'true'});\n });\n setPresence({el: root(), attr: 'data-copied', present: current.tags.includes('copied'), value: 'true'});\n };\n const dispatchNative = (type: 'input' | 'change'): void => {\n dispatching = true;\n try { input().dispatchEvent(new Event(type, {bubbles: true})); } finally { dispatching = false; }\n };\n const bridge = createAlpineMachine({\n schema: inputSchema,\n hooks: inputHooks,\n createMachine: ({props}) => createInputMachine({props, effects: {\n sync: syncDom,\n copy: (scope) => {\n const write = navigator.clipboard?.writeText(scope.context.value) ?? Promise.resolve();\n void write.then(() => bridge.send('COPY_DONE')).catch(() => bridge.send('COPY_ERROR'));\n },\n emitInput: () => dispatchNative('input'),\n emitChange: () => dispatchNative('change'),\n focus: () => input().focus({preventScroll: true}),\n startCopiedTimer: () => {\n if (copiedTimer !== null) window.clearTimeout(copiedTimer);\n copiedTimer = window.setTimeout(() => bridge.send('COPIED_TIMEOUT'), 1200);\n },\n }}),\n });\n\n return {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n inputEl = root().querySelector<HTMLInputElement>('[data-ui-input]');\n if (!inputEl) throw new Error('Input requires a native input element.');\n bridge.connect(rootEl, this.snapshot);\n addListener({target: inputEl, event: 'input', handler: () => {\n if (!dispatching) bridge.send({type: 'VALUE_CHANGED', value: input().value});\n }, cleanup: listeners});\n addListener({target: rootEl, event: 'click', handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n if (target.closest('[data-ui-input-clear]')) {\n event.preventDefault();\n bridge.send('CLEAR');\n } else if (target.closest('[data-ui-input-copy]')) {\n event.preventDefault();\n bridge.send('COPY');\n }\n }, cleanup: listeners});\n syncDom();\n },\n destroy(): void {\n if (copiedTimer !== null) window.clearTimeout(copiedTimer);\n copiedTimer = null;\n listeners.splice(0).reverse().forEach((cleanup) => cleanup());\n bridge.disconnect();\n rootEl = null;\n inputEl = null;\n },\n get value(): string {\n return bridge.getCommittedSnapshot().context.value;\n },\n clear(): void {\n if (!input().disabled && !input().readOnly) bridge.send('CLEAR');\n },\n copy(): void {\n if (!input().disabled) bridge.send('COPY');\n },\n };\n};\n\nconst registerInput = defineAlpineData('UiInput', UiInput);\n\nexport {registerInput, UiInput};\nexport type {InputData, UiInputApi};\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 {registerInput as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerInput = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerInput};\nexport default registerInput;\nexport * from './index';\n"],"mappings":"2YAYA,IAAM,EAAc,EACd,EAAiB,EACjB,EAAc,EACd,EAAsB,EAOtB,EAAc,CAChB,KAAM,EAAO,QAAQ,MAAM,EAC3B,KAAM,EACN,MAAO,EACP,YAAa,EACb,KAAM,EAAM,EAAa,IAAiB,EAC1C,QAAS,EAAM,EAAgB,SAAyB,EACxD,OAAQ,EAAM,EAAa,IAAmB,EAC9C,SAAU,EACV,SAAU,EACV,SAAU,EACV,QAAS,EACT,KAAM,EACN,aAAc,EACd,YAAa,EAAM,EAAqB,SAA6B,EACrE,UAAW,EACX,SAAU,EACV,IAAK,EACL,OAAQ,EACR,OAAQ,EACR,UAAW,EACX,aAAc,EACd,MAAO,CACX,EAGU,EAAM,EAAa,IAAiB,EACjC,EAAM,EAAgB,SAAyB,EAChD,EAAM,EAAa,IAAmB,ECtClD,IAAM,EAAa,CAAC,EACd,EAAc,GAAsC,OAAO,EAAM,OAAU,SAAW,EAAM,MAAQ,GACpG,EAAY,IAAmD,CAAC,QAAS,CAAC,MAAO,EAAW,EAAM,KAAK,CAAC,CAAC,GACzG,OAAoB,CAAC,QAAS,CAAC,MAAO,EAAE,CAAC,GACzC,EAAkB,GAAkD,CACtE,IAAM,EAAQ,EAA8B,EAAM,KAAK,EACvD,GAAI,CAAC,EAAO,OACZ,IAAM,EAAe,EAAM,QAAQ,MAAM,CAAC,SAAS,IAAQ,OAAO,EAClE,MAAO,CAAC,MAAO,EAAM,MAAO,QAAS,EAAe,CAAC,MAAO,EAAM,MAAM,KAAK,EAAI,EAAM,OAAO,CAClG,EAEM,GAAsB,CAAC,QAAO,aAA4F,EAAwC,CACpK,QAAS,OACT,GAAI,CACA,cAAe,CAAC,OAAQ,WAAY,QAAS,MAAM,EACnD,MAAO,CAAC,OAAQ,OAAQ,OAAQ,aAAc,QAAS,CAAC,OAAQ,YAAa,aAAc,OAAO,CAAC,EACnG,KAAM,CAAC,OAAQ,UAAW,QAAS,MAAM,EACzC,cAAe,CAAC,OAAQ,iBAAkB,QAAS,MAAM,CAC7D,EACA,OAAQ,CACJ,KAAM,CAAC,EACP,QAAS,CAAC,GAAI,CACV,UAAW,CAAC,OAAQ,SAAU,QAAS,CAAC,OAAQ,kBAAkB,CAAC,EACnE,WAAY,CAAC,OAAQ,OAAQ,QAAS,MAAM,CAChD,CAAC,EACD,OAAQ,CAAC,KAAM,CAAC,QAAQ,EAAG,GAAI,CAC3B,KAAM,CAAC,OAAQ,UAAW,QAAS,MAAM,EACzC,eAAgB,CAAC,OAAQ,OAAQ,QAAS,MAAM,CACpD,CAAC,CACL,CACJ,EAAG,CACC,QAAS,CAAC,MAAO,EAAM,KAAK,EAC5B,QACA,SAAU,CAAC,WAAU,aAAY,gBAAc,EAC/C,SACJ,CAAC,ECxBK,MAAmD,CACrD,IAAI,EAA+D,KAC/D,EAAmC,KACnC,EAA0B,CAAC,EAC3B,EAA6B,KAC7B,EAAc,GAEZ,MAA0B,CAC5B,GAAI,CAAC,EAAQ,MAAU,MAAM,iCAAiC,EAC9D,OAAO,CACX,EACM,MAAgC,CAClC,GAAI,CAAC,EAAS,MAAU,MAAM,wCAAwC,EACtE,OAAO,CACX,EACM,MAA4D,EAAO,qBAAqB,EACxF,MAAsB,CACxB,IAAM,EAAU,EAAS,EACnB,EAAQ,EAAQ,MAChB,EAAS,EAAM,EACjB,EAAO,QAAU,EAAQ,QAAQ,QAAO,EAAO,MAAQ,EAAQ,QAAQ,OAC3E,EAAO,KAAO,EAAM,KAChB,EAAM,YAAa,EAAO,YAAc,EAAM,YAC7C,EAAO,gBAAgB,aAAa,EACzC,EAAkB,CAAC,MAAO,EAAQ,MAAO,CACrC,KAAM,EAAM,KACZ,SAAU,EAAM,SAChB,SAAU,EAAM,SAChB,SAAU,EAAM,SAChB,QAAS,EAAM,OACnB,CAAC,CAAC,EACF,EAAoB,CAAC,GAAI,EAAK,EAAG,MAAO,EAAO,MAAO,MAAM,CAAC,EAC7D,IAAM,EAAU,EAAK,EAAE,cAA2B,yBAAyB,EACvE,GAAS,EAAoB,CAAC,GAAI,EAAS,MAAO,CAAC,SAAU,EAAM,SAAU,QAAS,EAAM,OAAO,EAAG,MAAO,MAAM,CAAC,EACxH,EAAK,EAAE,iBAA8B,uBAAuB,EAAE,QAAS,GAAW,CAC9E,EAAO,OAAS,EAAQ,QAAQ,MAAM,SAAW,EAC7C,aAAkB,oBAAmB,EAAO,SAAW,EAAM,UAAY,EAAM,SACvF,CAAC,EACD,EAAK,EAAE,iBAA8B,sBAAsB,EAAE,QAAS,GAAW,CACzE,aAAkB,oBAAmB,EAAO,SAAW,EAAM,UACjE,EAAY,CAAC,GAAI,EAAQ,KAAM,cAAe,QAAS,EAAQ,KAAK,SAAS,QAAQ,EAAG,MAAO,MAAM,CAAC,CAC1G,CAAC,EACD,EAAY,CAAC,GAAI,EAAK,EAAG,KAAM,cAAe,QAAS,EAAQ,KAAK,SAAS,QAAQ,EAAG,MAAO,MAAM,CAAC,CAC1G,EACM,EAAkB,GAAmC,CACvD,EAAc,GACd,GAAI,CAAE,EAAM,EAAE,cAAc,IAAI,MAAM,EAAM,CAAC,QAAS,EAAI,CAAC,CAAC,CAAG,QAAU,CAAE,EAAc,EAAO,CACpG,EACM,EAAS,EAAoB,CAC/B,OAAQ,EACR,MAAO,EACP,eAAgB,CAAC,WAAW,EAAmB,CAAC,QAAO,QAAS,CAC5D,KAAM,EACN,KAAO,GAAU,EACC,UAAU,WAAW,UAAU,EAAM,QAAQ,KAAK,GAAK,QAAQ,QAAQ,GAC1E,SAAW,EAAO,KAAK,WAAW,CAAC,EAAE,UAAY,EAAO,KAAK,YAAY,CAAC,CACzF,EACA,cAAiB,EAAe,OAAO,EACvC,eAAkB,EAAe,QAAQ,EACzC,UAAa,EAAM,EAAE,MAAM,CAAC,cAAe,EAAI,CAAC,EAChD,qBAAwB,CAChB,IAAgB,MAAM,OAAO,aAAa,CAAW,EACzD,EAAc,OAAO,eAAiB,EAAO,KAAK,gBAAgB,EAAG,IAAI,CAC7E,CACJ,CAAC,CAAC,CACN,CAAC,EAED,MAAO,CACH,GAAG,EACH,MAAa,CAGT,GAFA,EAAS,KAAK,IACd,EAAU,EAAK,EAAE,cAAgC,iBAAiB,EAC9D,CAAC,EAAS,MAAU,MAAM,wCAAwC,EACtE,EAAO,QAAQ,EAAQ,KAAK,QAAQ,EACpC,EAAY,CAAC,OAAQ,EAAS,MAAO,QAAS,YAAe,CACpD,GAAa,EAAO,KAAK,CAAC,KAAM,gBAAiB,MAAO,EAAM,EAAE,KAAK,CAAC,CAC/E,EAAG,QAAS,CAAS,CAAC,EACtB,EAAY,CAAC,OAAQ,EAAQ,MAAO,QAAS,QAAU,GAAU,CAC7D,IAAM,EAAS,EAAM,OACf,aAAkB,UACpB,EAAO,QAAQ,uBAAuB,GACtC,EAAM,eAAe,EACrB,EAAO,KAAK,OAAO,GACZ,EAAO,QAAQ,sBAAsB,IAC5C,EAAM,eAAe,EACrB,EAAO,KAAK,MAAM,GAE1B,EAAG,QAAS,CAAS,CAAC,EACtB,EAAQ,CACZ,EACA,SAAgB,CACR,IAAgB,MAAM,OAAO,aAAa,CAAW,EACzD,EAAc,KACd,EAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAS,GAAY,EAAQ,CAAC,EAC5D,EAAO,WAAW,EAClB,EAAS,KACT,EAAU,IACd,EACA,IAAI,OAAgB,CAChB,OAAO,EAAO,qBAAqB,EAAE,QAAQ,KACjD,EACA,OAAc,CACN,CAAC,EAAM,EAAE,UAAY,CAAC,EAAM,EAAE,UAAU,EAAO,KAAK,OAAO,CACnE,EACA,MAAa,CACJ,EAAM,EAAE,UAAU,EAAO,KAAK,MAAM,CAC7C,CACJ,CACJ,EAEM,EAAgB,EAAiB,UAAW,CAAO,EC/HnD,EAAa,IAAI,QAEjB,EAAiB,GAAqC,CACpD,EAAW,IAAI,CAAc,IACjC,EAAW,IAAI,CAAc,EAE7B,EAAkB,CAAc,EACpC"}
1
+ {"version":3,"file":"entry.generated-CEGLKsEl.js","names":[],"sources":["../../../../../../../../client/src/components/input/contract.ts","../../../../../../../../client/src/components/input/machine.ts","../../../../../../../../client/src/components/input/index.ts","../../../../../../../../client/src/components/input/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n CONTROL_SIZES,\n CONTROL_VARIANTS,\n COMPONENT_RADII,\n ICON_VARIANTS,\n type ComponentRadius,\n type ControlSize,\n type ControlVariant,\n type IconVariant,\n} from '../common';\n\nconst INPUT_SIZES = CONTROL_SIZES;\nconst INPUT_VARIANTS = CONTROL_VARIANTS;\nconst INPUT_RADII = COMPONENT_RADII;\nconst INPUT_ICON_VARIANTS = ICON_VARIANTS;\n\ntype InputSize = ControlSize;\ntype InputVariant = ControlVariant;\ntype InputRadius = ComponentRadius;\ntype InputIconVariant = IconVariant;\n\nconst inputSchema = {\n type: string.default('text'),\n name: string,\n value: string,\n placeholder: string,\n size: oneOf(INPUT_SIZES, 'lg' as InputSize),\n variant: oneOf(INPUT_VARIANTS, 'outline' as InputVariant),\n radius: oneOf(INPUT_RADII, 'md' as InputRadius),\n disabled: bool,\n readonly: bool,\n required: bool,\n invalid: bool,\n icon: string,\n iconTrailing: string,\n iconVariant: oneOf(INPUT_ICON_VARIANTS, 'outline' as InputIconVariant),\n clearable: bool,\n copyable: bool,\n kbd: string,\n prefix: string,\n suffix: string,\n rootClass: string,\n controlClass: string,\n class: string,\n};\n\nconst inputGroupSchema = {\n size: oneOf(INPUT_SIZES, 'lg' as InputSize),\n variant: oneOf(INPUT_VARIANTS, 'outline' as InputVariant),\n radius: oneOf(INPUT_RADII, 'md' as InputRadius),\n label: string,\n description: string,\n descriptionTrailing: string,\n error: string,\n errors: string,\n badge: string,\n fieldClass: string,\n class: string,\n};\n\nconst inputAffixSchema = {\n class: string,\n};\n\ntype InputProps = SchemaToProps<typeof inputSchema>;\n\nexport {INPUT_ICON_VARIANTS, INPUT_RADII, INPUT_SIZES, INPUT_VARIANTS, inputAffixSchema, inputGroupSchema, inputSchema};\nexport type {InputIconVariant, InputProps, InputRadius, InputSize, InputVariant};\n","import {createMachine, propsChangedEvent, type Machine, type MachineEventObject, type MachineScope} from '../../runtime/state-machine';\nimport type {InputProps} from './contract';\n\ntype InputContext = {value: string};\ntype InputEffects = {\n sync(scope: MachineScope<InputContext, InputProps>): void;\n copy(scope: MachineScope<InputContext, InputProps>): void;\n emitInput(scope: MachineScope<InputContext, InputProps>): void;\n emitChange(scope: MachineScope<InputContext, InputProps>): void;\n focus(scope: MachineScope<InputContext, InputProps>): void;\n startCopiedTimer(scope: MachineScope<InputContext, InputProps>): void;\n};\nconst inputHooks = [] as const;\nconst eventValue = (event: MachineEventObject): string => typeof event.value === 'string' ? event.value : '';\nconst setValue = (scope: MachineScope<InputContext, InputProps>) => ({context: {value: eventValue(scope.event)}});\nconst clearValue = () => ({context: {value: ''}});\nconst reconcileProps = (scope: MachineScope<InputContext, InputProps>) => {\n const event = propsChangedEvent<InputProps>(scope.event);\n if (!event) return;\n const valueChanged = event.changes.some(({key}) => key === 'value');\n return {props: event.props, context: valueChanged ? {value: event.props.value} : scope.context};\n};\n\nconst createInputMachine = ({props, effects}: {props: InputProps; effects: InputEffects}): Machine<InputContext, InputProps> => createMachine<InputContext, InputProps>({\n initial: 'idle',\n on: {\n VALUE_CHANGED: {reduce: 'setValue', effects: 'sync'},\n CLEAR: {target: 'idle', reduce: 'clearValue', effects: ['sync', 'emitInput', 'emitChange', 'focus']},\n COPY: {target: 'copying', effects: 'copy'},\n PROPS_CHANGED: {reduce: 'reconcileProps', effects: 'sync'},\n },\n states: {\n idle: {},\n copying: {on: {\n COPY_DONE: {target: 'copied', effects: ['sync', 'startCopiedTimer']},\n COPY_ERROR: {target: 'idle', effects: 'sync'},\n }},\n copied: {tags: ['copied'], on: {\n COPY: {target: 'copying', effects: 'copy'},\n COPIED_TIMEOUT: {target: 'idle', effects: 'sync'},\n }},\n },\n}, {\n context: {value: props.value},\n props,\n reducers: {setValue, clearValue, reconcileProps},\n effects,\n});\n\nexport {createInputMachine, inputHooks};\nexport type {InputContext, InputEffects};\n","import type Alpine from 'alpinejs';\n\nimport {type AlpineMachine, createAlpineMachine, defineAlpineData, type MachineSnapshot, type TrellisAlpineComponent} from '@client/runtime';\nimport {syncControlPresence, syncNativeControl} from '@client/runtime/form-control';\nimport {addListener, setPresence, type CleanupStack} from '@client/utils';\nimport {inputSchema, type InputProps} from './contract';\nimport {createInputMachine, inputHooks, type InputContext} from './machine';\n\n/** Public Alpine API for `ui.input` and `ui.input.control`. @public */\ninterface UiInputApi {\n /** Current native input value. */\n readonly value: string;\n /** Clear the input, emit native input/change events, and restore focus. */\n clear(): void;\n /** Copy the current value to the clipboard. */\n copy(): void;\n}\n\ntype InputData = AlpineMachine<InputContext, InputProps, typeof inputHooks> & UiInputApi & {\n init(): void;\n destroy(): void;\n};\n\nconst UiInput = (): TrellisAlpineComponent<InputData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let inputEl: HTMLInputElement | null = null;\n let listeners: CleanupStack = [];\n let copiedTimer: number | null = null;\n let dispatching = false;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Input has not been initialized.');\n return rootEl;\n };\n const input = (): HTMLInputElement => {\n if (!inputEl) throw new Error('Input requires a native input element.');\n return inputEl;\n };\n const snapshot = (): MachineSnapshot<InputContext, InputProps> => bridge.getCommittedSnapshot();\n const syncDom = (): void => {\n const current = snapshot();\n const props = current.props;\n const native = input();\n if (native.value !== current.context.value) native.value = current.context.value;\n native.type = props.type;\n if (props.placeholder) native.placeholder = props.placeholder;\n else native.removeAttribute('placeholder');\n syncNativeControl({input: native, state: {\n name: props.name,\n disabled: props.disabled,\n readonly: props.readonly,\n required: props.required,\n invalid: props.invalid,\n }});\n syncControlPresence({el: root(), state: props, value: 'true'});\n const control = root().querySelector<HTMLElement>('[data-ui-input-control]');\n if (control) syncControlPresence({el: control, state: {disabled: props.disabled, invalid: props.invalid}, value: 'true'});\n root().querySelectorAll<HTMLElement>('[data-ui-input-clear]').forEach((button) => {\n button.hidden = current.context.value.length === 0;\n if (button instanceof HTMLButtonElement) button.disabled = props.disabled || props.readonly;\n });\n root().querySelectorAll<HTMLElement>('[data-ui-input-copy]').forEach((button) => {\n if (button instanceof HTMLButtonElement) button.disabled = props.disabled;\n setPresence({el: button, attr: 'data-copied', present: current.tags.includes('copied'), value: 'true'});\n });\n setPresence({el: root(), attr: 'data-copied', present: current.tags.includes('copied'), value: 'true'});\n };\n const dispatchNative = (type: 'input' | 'change'): void => {\n dispatching = true;\n try { input().dispatchEvent(new Event(type, {bubbles: true})); } finally { dispatching = false; }\n };\n const bridge = createAlpineMachine({\n schema: inputSchema,\n hooks: inputHooks,\n createMachine: ({props}) => createInputMachine({props, effects: {\n sync: syncDom,\n copy: (scope) => {\n const write = navigator.clipboard?.writeText(scope.context.value) ?? Promise.resolve();\n void write.then(() => bridge.send('COPY_DONE')).catch(() => bridge.send('COPY_ERROR'));\n },\n emitInput: () => dispatchNative('input'),\n emitChange: () => dispatchNative('change'),\n focus: () => input().focus({preventScroll: true}),\n startCopiedTimer: () => {\n if (copiedTimer !== null) window.clearTimeout(copiedTimer);\n copiedTimer = window.setTimeout(() => bridge.send('COPIED_TIMEOUT'), 1200);\n },\n }}),\n });\n\n return {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n inputEl = root().querySelector<HTMLInputElement>('[data-ui-input]');\n if (!inputEl) throw new Error('Input requires a native input element.');\n bridge.connect(rootEl, this.snapshot);\n addListener({target: inputEl, event: 'input', handler: () => {\n if (!dispatching) bridge.send({type: 'VALUE_CHANGED', value: input().value});\n }, cleanup: listeners});\n addListener({target: rootEl, event: 'click', handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n if (target.closest('[data-ui-input-clear]')) {\n event.preventDefault();\n bridge.send('CLEAR');\n } else if (target.closest('[data-ui-input-copy]')) {\n event.preventDefault();\n bridge.send('COPY');\n }\n }, cleanup: listeners});\n syncDom();\n },\n destroy(): void {\n if (copiedTimer !== null) window.clearTimeout(copiedTimer);\n copiedTimer = null;\n listeners.splice(0).reverse().forEach((cleanup) => cleanup());\n bridge.disconnect();\n rootEl = null;\n inputEl = null;\n },\n get value(): string {\n return bridge.getCommittedSnapshot().context.value;\n },\n clear(): void {\n if (!input().disabled && !input().readOnly) bridge.send('CLEAR');\n },\n copy(): void {\n if (!input().disabled) bridge.send('COPY');\n },\n };\n};\n\nconst registerInput = defineAlpineData('UiInput', UiInput);\n\nexport {registerInput, UiInput};\nexport type {InputData, UiInputApi};\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 {registerInput as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerInput = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerInput};\nexport default registerInput;\nexport * from './index';\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./capability-motion-C_8mc71v.js";import{f as t,l as n,n as r,u as i}from"./codecs-Cb1ns_47.js";import{i as a,n as o,r as s}from"./dom-qAeVl7dc.js";import{i as c,t as l}from"./alpine-machine-BS13dbK4.js";import{t as u}from"./alpine-data-CytyCyfk.js";import{t as d}from"./collection-navigation-CtNDGKcQ.js";import{n as f,t as p}from"./styles-TfvwVPGw.js";import{t as m}from"./merge-bindings-C8ewA_FD.js";import{t as h}from"./machine-Dqut4h89.js";import{n as g,t as _}from"./props-change-2xfsIAEN.js";import{t as v}from"./semantic-observer-BUswpsNx.js";import{C as y,h as b}from"./common-BOd_thC-.js";var x=[`single`,`multiple`],S=y,C=[`trailing`,`leading`];[...C];var w=b;[...w];var T={mode:n(x,`single`),animate:r,collapsible:r,disabled:r,orientation:n(S,`vertical`),defaultValue:t,defaultValues:t,value:t,values:t,loop:r.default(!0),iconPosition:n(C,`trailing`),headingAs:n(w,`h3`),class:t},E=[c({name:`opening`,state:`changing`,projectEach:e=>e.context.change.openingValues.map(e=>({value:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{open:e=>({type:`OPEN`,value:e}),close:e=>({type:`CLOSE`,value:e}),toggle:e=>({type:`TOGGLE`,value:e}),setValues:e=>({type:`SET_VALUES`,values:e})}}),c({name:`closing`,state:`changing`,projectEach:e=>e.context.change.closingValues.map(e=>({value:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{open:e=>({type:`OPEN`,value:e}),close:e=>({type:`CLOSE`,value:e}),toggle:e=>({type:`TOGGLE`,value:e}),setValues:e=>({type:`SET_VALUES`,values:e})}})],D=e=>typeof e==`string`?e:``,O=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],k=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),A=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),j=(e,t,n)=>{let r=new Set(e.filter(e=>n.values.includes(e))),i=n.values.filter(e=>r.has(e));return t.mode===`single`?i.slice(0,1):i},M=e=>e.mode===`multiple`?k(e.values||e.value):e.value?[e.value]:[],N=e=>g(e.event)?.props??e.props,P=e=>e.event.type===`ITEMS_CHANGED`?{values:O(e.event.values),disabledValues:O(e.event.disabledValues)}:e.context.collection,F=(e,t,n)=>{let r=e.context.selection.values,i=D(e.event.value);switch(e.event.type){case`OPEN`:return!i||n.disabledValues.includes(i)?r:t.mode===`single`?[i]:[...r,i];case`CLOSE`:return!i||n.disabledValues.includes(i)||t.mode===`single`&&!t.collapsible&&r.includes(i)?r:r.filter(e=>e!==i);case`TOGGLE`:return!i||n.disabledValues.includes(i)?r:r.includes(i)?t.mode===`single`&&!t.collapsible?r:r.filter(e=>e!==i):t.mode===`single`?[i]:[...r,i];case`SET_VALUES`:return O(e.event.values);case`PROPS_CHANGED`:return _(e.event,`value`,`values`)?M(t):r;case`ITEMS_CHANGED`:return r;default:return r}},I=e=>{let t=N(e),n=P(e);return j(F(e,t,n),t,n)},L=e=>!([`OPEN`,`CLOSE`,`TOGGLE`,`SET_VALUES`].includes(e.event.type)&&e.props.disabled)&&!A(e.context.selection.values,I(e)),R=({props:e,context:t,effects:n})=>h({initial:`stable`,states:{stable:{tags:[`stable`],on:{OPEN:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},CLOSE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},SET_VALUES:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},PROPS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncItems`}]}},changing:{tags:[`changing`,`transitioning`],on:{CHANGE_DONE:{target:`stable`,effects:`finishChange`},CHANGE_ERROR:{target:`stable`,effects:`finishChange`},OPEN:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},CLOSE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},SET_VALUES:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},PROPS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncItems`}]}}}},{context:t,props:e,reducers:{applyChange:e=>{let t=I(e),n=e.context.selection.values;return{props:N(e),context:{...e.context,selection:{values:t},change:{openingValues:t.filter(e=>!n.includes(e)),closingValues:n.filter(e=>!t.includes(e))},collection:P(e)}}},reconcile:e=>({props:N(e),context:{...e.context,collection:P(e),selection:{values:I(e)}}})},effects:{prepareChange:n.prepareChange,finishChange:n.finishChange,syncProps:n.syncProps,syncItems:n.syncItems}}),z=p({definition:{component:`ui.accordion`,parts:{root:{base:`grid w-full min-w-0 gap-0`,variants:{orientation:{vertical:``,horizontal:`gap-2 md:grid-flow-col md:auto-cols-fr`}},defaults:{orientation:`vertical`}},item:{base:`min-w-0 border-b-edge-separator border-separator last:border-b-0 data-disabled:opacity-50`},heading:{base:`block text-surface-ink`},trigger:{base:[`flex min-h-control-xlg w-full min-w-0 items-center gap-2 rounded-control-sm border border-transparent px-3 py-2`,`text-left text-sm font-medium text-surface-ink outline-none`,`focus-visible:ui-focus-ring`,`data-disabled:pointer-events-none data-disabled:opacity-50`]},triggerLabel:{base:`min-w-0 flex-1`},icon:{base:`size-icon shrink-0 fill-current text-icon`},content:{base:`overflow-hidden text-sm text-surface-ink-muted`},contentInner:{base:`min-w-0 px-3 pb-3 pt-1`}}}}),B=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),V=e=>e?`open`:`closed`,H=e=>e.trim().replace(/[^a-zA-Z0-9_-]+/g,`-`)||`item`,U=()=>{let e=null,t=null,n=null,r=e=>e,c=()=>{if(!e)throw Error(`Accordion has not been initialized.`);return e},u=e=>e.closest(`[data-ui-accordion]`)===c(),p=()=>Array.from(c().querySelectorAll(`[data-ui-accordion-item]`)).filter(u).map((e,t)=>{let n=e.querySelector(`[data-ui-accordion-trigger]`),r=e.querySelector(`[data-ui-accordion-content]`);return!(n instanceof HTMLButtonElement)||!r||!u(n)||!u(r)?null:(e.dataset.value||=`item-${t+1}`,{item:e,heading:e.querySelector(`[data-ui-accordion-heading]`),trigger:n,content:r,value:e.dataset.value,disabled:o({value:e.dataset.itemDisabled})})}).filter(e=>e!==null),h=e=>p().find(t=>t.value===e)??null,g=e=>{if(!(e instanceof Element))return null;let t=e.closest(`[data-ui-accordion-item]`);return t&&u(t)?p().find(e=>e.item===t)??null:null},_=()=>{let e=p();return{values:e.map(e=>e.value),disabledValues:e.filter(e=>e.disabled).map(e=>e.value)}},y=(e,t,n)=>{let r=new Set(e),i=n.filter(e=>r.has(e));return t.mode===`single`?i.slice(0,1):i},b=e=>{let t=_(),n=e.mode===`multiple`?B(e.values||e.value):e.value?[e.value]:[],r=e.mode===`multiple`?B(e.defaultValues):e.defaultValue?[e.defaultValue]:[],i=p().filter(e=>o({value:e.item.dataset.open})).map(e=>e.value);return{selection:{values:y(n.length>0?n:r.length>0?r:i,e,t.values)},change:{openingValues:[],closingValues:[]},collection:t}},x=()=>N.getCommittedSnapshot().props,S=()=>N.getCommittedSnapshot().context,C=e=>S().selection.values.includes(e.value),w=e=>x().disabled||e.disabled,D=e=>x().mode===`multiple`||x().collapsible||!C(e),O=()=>{let e=x(),t=S().selection.values;i({el:c(),schema:T,key:`value`,value:e.mode===`single`?t[0]??``:``}),i({el:c(),schema:T,key:`values`,value:e.mode===`multiple`?t.join(`,`):``}),c().dataset.orientation=e.orientation,c().dataset.iconPosition=e.iconPosition,c().dataset.mode=e.mode,e.disabled?c().setAttribute(`data-disabled`,``):c().removeAttribute(`data-disabled`)},k,A=e=>{let t=x(),n=C(e),i=V(n),a=w(e),o=N.hasTag(`changing`)&&S().change.closingValues.includes(e.value);e.item.dataset.state=i,e.item.dataset.orientation=t.orientation,e.item.className=f({part:z.parts.item,props:t,className:e.item.dataset.class??``}),e.heading?.setAttribute(`data-state`,i),e.heading?.setAttribute(`data-orientation`,t.orientation);let s=H(e.value);e.trigger.id||=r(`accordion-trigger-${s}`),e.content.id||=r(`accordion-content-${s}`),e.trigger.type=`button`,e.trigger.dataset.state=i,e.trigger.dataset.orientation=t.orientation,e.trigger.className=f({part:z.parts.trigger,props:t,className:e.trigger.dataset.class??``}),e.trigger.setAttribute(`aria-expanded`,n?`true`:`false`),e.trigger.setAttribute(`aria-controls`,e.content.id),e.content.dataset.state=i,e.content.dataset.orientation=t.orientation,e.content.setAttribute(`aria-labelledby`,e.trigger.id),e.content.hidden=!n&&!o,[e.item,e.heading,e.trigger,e.content].forEach(e=>{e&&(a?e.setAttribute(`data-disabled`,``):e.removeAttribute(`data-disabled`))}),e.trigger.disabled=a,a||n&&!D(e)?e.trigger.setAttribute(`aria-disabled`,`true`):e.trigger.removeAttribute(`aria-disabled`)},j=()=>{O(),p().forEach(A)},M=()=>{let e=[...S().selection.values];s({el:c(),name:`ui:change`,detail:{value:x().mode===`single`?e[0]??``:``,values:e}})},N=l({schema:T,hooks:E,resolveTransitionElement:({data:e})=>{let t=e.value;return h(t)?.content??null},createMachine:({props:e})=>R({props:e,context:b(e),effects:{prepareChange:()=>{j(),M()},finishChange:()=>{j()},syncProps:j,syncItems:j}})}),P=()=>{if(!t)throw Error(`Accordion navigation has not been initialized.`);return t},F=()=>{let e=_();N.send({type:`ITEMS_CHANGED`,...e})},I=(e,t)=>{t?.preventDefault(),!w(e)&&N.send({type:`TOGGLE`,value:e.value,motion:!(t instanceof KeyboardEvent)})},L=e=>{let t=g(e.target);!t||!(e.target instanceof Node)||!t.trigger.contains(e.target)||I(t,e)},U=e=>{let t=g(e.target);if(!(!t||e.target!==t.trigger)){if(e.key===`Enter`||e.key===` `){I(t,e);return}if(e.key===`Home`){e.preventDefault(),P().focusFirst();return}if(e.key===`End`){e.preventDefault(),P().focusLast();return}if(x().orientation===`vertical`){e.key===`ArrowDown`?(e.preventDefault(),P().focusNext()):e.key===`ArrowUp`&&(e.preventDefault(),P().focusPrevious());return}e.key===`ArrowRight`?(e.preventDefault(),a({el:c()})?P().focusPrevious():P().focusNext()):e.key===`ArrowLeft`&&(e.preventDefault(),a({el:c()})?P().focusNext():P().focusPrevious())}},W=e=>{let t=g(e.target);t&&e.target===t.trigger&&!w(t)&&P().activateItem({el:t.trigger})},G=()=>{n=v({targets:c(),read:_,onChange:F,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-item-disabled`]}})};return k={...N,get value(){return x().mode===`single`?this.snapshot.current?.context.selection.values[0]??``:``},get values(){return[...this.snapshot.current?.context.selection.values??[]]},init(){e=this.$el,r=this.$id.bind(this),N.connect(this.$el,this.snapshot),t=d({root:c,itemSelector:`[data-ui-accordion-trigger]`,isDisabled:e=>e.hasAttribute(`disabled`),loop:()=>x().loop}),j(),G()},destroy(){n?.(),n=null,N.disconnect(),t=null,e=null},get root(){let e=this.snapshot.current?.props??x();return m({inputs:[f({part:z.parts.root,props:e,className:e.class}),{"data-ui-accordion":``,":data-orientation":()=>x().orientation,":data-disabled":()=>x().disabled?``:void 0,"@click":L,"@keydown":e=>{e instanceof KeyboardEvent&&U(e)},"@focusin":W}]})},open(e){N.send({type:`OPEN`,value:e})},close(e){N.send({type:`CLOSE`,value:e})},toggle(e,t){let n=h(e);n&&I(n,t)},isOpen(e){return this.snapshot.current?.context.selection.values.includes(e)??!1}},k},W=u(`UiAccordion`,U),G=new WeakSet,K=t=>{G.has(t)||(G.add(t),e(t),W(t))};export{U as n,K as t};
2
- //# sourceMappingURL=entry.generated-BO0EDjBb.js.map
1
+ import{t as e}from"./capability-motion-C_8mc71v.js";import{f as t,l as n,n as r,u as i}from"./codecs-Cb1ns_47.js";import{i as a,n as o,r as s}from"./dom-qAeVl7dc.js";import{i as c,t as l}from"./alpine-machine-BS13dbK4.js";import{t as u}from"./alpine-data-CytyCyfk.js";import{t as d}from"./collection-navigation-CtNDGKcQ.js";import{n as f,t as p}from"./styles-TfvwVPGw.js";import{t as m}from"./merge-bindings-C8ewA_FD.js";import{t as h}from"./machine-Dqut4h89.js";import{n as g,t as _}from"./props-change-2xfsIAEN.js";import{t as v}from"./semantic-observer-BUswpsNx.js";import{C as y,h as b}from"./common-fH2NGblC.js";var x=[`single`,`multiple`],S=y,C=[`trailing`,`leading`];[...C];var w=b;[...w];var T={mode:n(x,`single`),animate:r,collapsible:r,disabled:r,orientation:n(S,`vertical`),defaultValue:t,defaultValues:t,value:t,values:t,loop:r.default(!0),iconPosition:n(C,`trailing`),headingAs:n(w,`h3`),class:t},E=[c({name:`opening`,state:`changing`,projectEach:e=>e.context.change.openingValues.map(e=>({value:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{open:e=>({type:`OPEN`,value:e}),close:e=>({type:`CLOSE`,value:e}),toggle:e=>({type:`TOGGLE`,value:e}),setValues:e=>({type:`SET_VALUES`,values:e})}}),c({name:`closing`,state:`changing`,projectEach:e=>e.context.change.closingValues.map(e=>({value:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{open:e=>({type:`OPEN`,value:e}),close:e=>({type:`CLOSE`,value:e}),toggle:e=>({type:`TOGGLE`,value:e}),setValues:e=>({type:`SET_VALUES`,values:e})}})],D=e=>typeof e==`string`?e:``,O=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],k=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),A=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),j=(e,t,n)=>{let r=new Set(e.filter(e=>n.values.includes(e))),i=n.values.filter(e=>r.has(e));return t.mode===`single`?i.slice(0,1):i},M=e=>e.mode===`multiple`?k(e.values||e.value):e.value?[e.value]:[],N=e=>g(e.event)?.props??e.props,P=e=>e.event.type===`ITEMS_CHANGED`?{values:O(e.event.values),disabledValues:O(e.event.disabledValues)}:e.context.collection,F=(e,t,n)=>{let r=e.context.selection.values,i=D(e.event.value);switch(e.event.type){case`OPEN`:return!i||n.disabledValues.includes(i)?r:t.mode===`single`?[i]:[...r,i];case`CLOSE`:return!i||n.disabledValues.includes(i)||t.mode===`single`&&!t.collapsible&&r.includes(i)?r:r.filter(e=>e!==i);case`TOGGLE`:return!i||n.disabledValues.includes(i)?r:r.includes(i)?t.mode===`single`&&!t.collapsible?r:r.filter(e=>e!==i):t.mode===`single`?[i]:[...r,i];case`SET_VALUES`:return O(e.event.values);case`PROPS_CHANGED`:return _(e.event,`value`,`values`)?M(t):r;case`ITEMS_CHANGED`:return r;default:return r}},I=e=>{let t=N(e),n=P(e);return j(F(e,t,n),t,n)},L=e=>!([`OPEN`,`CLOSE`,`TOGGLE`,`SET_VALUES`].includes(e.event.type)&&e.props.disabled)&&!A(e.context.selection.values,I(e)),R=({props:e,context:t,effects:n})=>h({initial:`stable`,states:{stable:{tags:[`stable`],on:{OPEN:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},CLOSE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},SET_VALUES:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},PROPS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncItems`}]}},changing:{tags:[`changing`,`transitioning`],on:{CHANGE_DONE:{target:`stable`,effects:`finishChange`},CHANGE_ERROR:{target:`stable`,effects:`finishChange`},OPEN:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},CLOSE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},SET_VALUES:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},PROPS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncItems`}]}}}},{context:t,props:e,reducers:{applyChange:e=>{let t=I(e),n=e.context.selection.values;return{props:N(e),context:{...e.context,selection:{values:t},change:{openingValues:t.filter(e=>!n.includes(e)),closingValues:n.filter(e=>!t.includes(e))},collection:P(e)}}},reconcile:e=>({props:N(e),context:{...e.context,collection:P(e),selection:{values:I(e)}}})},effects:{prepareChange:n.prepareChange,finishChange:n.finishChange,syncProps:n.syncProps,syncItems:n.syncItems}}),z=p({definition:{component:`ui.accordion`,parts:{root:{base:`grid w-full min-w-0 gap-0`,variants:{orientation:{vertical:``,horizontal:`gap-2 md:grid-flow-col md:auto-cols-fr`}},defaults:{orientation:`vertical`}},item:{base:`min-w-0 border-b-edge-separator border-separator last:border-b-0 data-disabled:opacity-50`},heading:{base:`block text-surface-ink`},trigger:{base:[`flex min-h-control-xlg w-full min-w-0 items-center gap-2 rounded-control-sm border border-transparent px-3 py-2`,`text-left text-sm font-medium text-surface-ink outline-none`,`focus-visible:ui-focus-ring`,`data-disabled:pointer-events-none data-disabled:opacity-50`]},triggerLabel:{base:`min-w-0 flex-1`},icon:{base:`size-icon shrink-0 fill-current text-icon`},content:{base:`overflow-hidden text-sm text-surface-ink-muted`},contentInner:{base:`min-w-0 px-3 pb-3 pt-1`}}}}),B=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),V=e=>e?`open`:`closed`,H=e=>e.trim().replace(/[^a-zA-Z0-9_-]+/g,`-`)||`item`,U=()=>{let e=null,t=null,n=null,r=e=>e,c=()=>{if(!e)throw Error(`Accordion has not been initialized.`);return e},u=e=>e.closest(`[data-ui-accordion]`)===c(),p=()=>Array.from(c().querySelectorAll(`[data-ui-accordion-item]`)).filter(u).map((e,t)=>{let n=e.querySelector(`[data-ui-accordion-trigger]`),r=e.querySelector(`[data-ui-accordion-content]`);return!(n instanceof HTMLButtonElement)||!r||!u(n)||!u(r)?null:(e.dataset.value||=`item-${t+1}`,{item:e,heading:e.querySelector(`[data-ui-accordion-heading]`),trigger:n,content:r,value:e.dataset.value,disabled:o({value:e.dataset.itemDisabled})})}).filter(e=>e!==null),h=e=>p().find(t=>t.value===e)??null,g=e=>{if(!(e instanceof Element))return null;let t=e.closest(`[data-ui-accordion-item]`);return t&&u(t)?p().find(e=>e.item===t)??null:null},_=()=>{let e=p();return{values:e.map(e=>e.value),disabledValues:e.filter(e=>e.disabled).map(e=>e.value)}},y=(e,t,n)=>{let r=new Set(e),i=n.filter(e=>r.has(e));return t.mode===`single`?i.slice(0,1):i},b=e=>{let t=_(),n=e.mode===`multiple`?B(e.values||e.value):e.value?[e.value]:[],r=e.mode===`multiple`?B(e.defaultValues):e.defaultValue?[e.defaultValue]:[],i=p().filter(e=>o({value:e.item.dataset.open})).map(e=>e.value);return{selection:{values:y(n.length>0?n:r.length>0?r:i,e,t.values)},change:{openingValues:[],closingValues:[]},collection:t}},x=()=>N.getCommittedSnapshot().props,S=()=>N.getCommittedSnapshot().context,C=e=>S().selection.values.includes(e.value),w=e=>x().disabled||e.disabled,D=e=>x().mode===`multiple`||x().collapsible||!C(e),O=()=>{let e=x(),t=S().selection.values;i({el:c(),schema:T,key:`value`,value:e.mode===`single`?t[0]??``:``}),i({el:c(),schema:T,key:`values`,value:e.mode===`multiple`?t.join(`,`):``}),c().dataset.orientation=e.orientation,c().dataset.iconPosition=e.iconPosition,c().dataset.mode=e.mode,e.disabled?c().setAttribute(`data-disabled`,``):c().removeAttribute(`data-disabled`)},k,A=e=>{let t=x(),n=C(e),i=V(n),a=w(e),o=N.hasTag(`changing`)&&S().change.closingValues.includes(e.value);e.item.dataset.state=i,e.item.dataset.orientation=t.orientation,e.item.className=f({part:z.parts.item,props:t,className:e.item.dataset.class??``}),e.heading?.setAttribute(`data-state`,i),e.heading?.setAttribute(`data-orientation`,t.orientation);let s=H(e.value);e.trigger.id||=r(`accordion-trigger-${s}`),e.content.id||=r(`accordion-content-${s}`),e.trigger.type=`button`,e.trigger.dataset.state=i,e.trigger.dataset.orientation=t.orientation,e.trigger.className=f({part:z.parts.trigger,props:t,className:e.trigger.dataset.class??``}),e.trigger.setAttribute(`aria-expanded`,n?`true`:`false`),e.trigger.setAttribute(`aria-controls`,e.content.id),e.content.dataset.state=i,e.content.dataset.orientation=t.orientation,e.content.setAttribute(`aria-labelledby`,e.trigger.id),e.content.hidden=!n&&!o,[e.item,e.heading,e.trigger,e.content].forEach(e=>{e&&(a?e.setAttribute(`data-disabled`,``):e.removeAttribute(`data-disabled`))}),e.trigger.disabled=a,a||n&&!D(e)?e.trigger.setAttribute(`aria-disabled`,`true`):e.trigger.removeAttribute(`aria-disabled`)},j=()=>{O(),p().forEach(A)},M=()=>{let e=[...S().selection.values];s({el:c(),name:`ui:change`,detail:{value:x().mode===`single`?e[0]??``:``,values:e}})},N=l({schema:T,hooks:E,resolveTransitionElement:({data:e})=>{let t=e.value;return h(t)?.content??null},createMachine:({props:e})=>R({props:e,context:b(e),effects:{prepareChange:()=>{j(),M()},finishChange:()=>{j()},syncProps:j,syncItems:j}})}),P=()=>{if(!t)throw Error(`Accordion navigation has not been initialized.`);return t},F=()=>{let e=_();N.send({type:`ITEMS_CHANGED`,...e})},I=(e,t)=>{t?.preventDefault(),!w(e)&&N.send({type:`TOGGLE`,value:e.value,motion:!(t instanceof KeyboardEvent)})},L=e=>{let t=g(e.target);!t||!(e.target instanceof Node)||!t.trigger.contains(e.target)||I(t,e)},U=e=>{let t=g(e.target);if(!(!t||e.target!==t.trigger)){if(e.key===`Enter`||e.key===` `){I(t,e);return}if(e.key===`Home`){e.preventDefault(),P().focusFirst();return}if(e.key===`End`){e.preventDefault(),P().focusLast();return}if(x().orientation===`vertical`){e.key===`ArrowDown`?(e.preventDefault(),P().focusNext()):e.key===`ArrowUp`&&(e.preventDefault(),P().focusPrevious());return}e.key===`ArrowRight`?(e.preventDefault(),a({el:c()})?P().focusPrevious():P().focusNext()):e.key===`ArrowLeft`&&(e.preventDefault(),a({el:c()})?P().focusNext():P().focusPrevious())}},W=e=>{let t=g(e.target);t&&e.target===t.trigger&&!w(t)&&P().activateItem({el:t.trigger})},G=()=>{n=v({targets:c(),read:_,onChange:F,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-item-disabled`]}})};return k={...N,get value(){return x().mode===`single`?this.snapshot.current?.context.selection.values[0]??``:``},get values(){return[...this.snapshot.current?.context.selection.values??[]]},init(){e=this.$el,r=this.$id.bind(this),N.connect(this.$el,this.snapshot),t=d({root:c,itemSelector:`[data-ui-accordion-trigger]`,isDisabled:e=>e.hasAttribute(`disabled`),loop:()=>x().loop}),j(),G()},destroy(){n?.(),n=null,N.disconnect(),t=null,e=null},get root(){let e=this.snapshot.current?.props??x();return m({inputs:[f({part:z.parts.root,props:e,className:e.class}),{"data-ui-accordion":``,":data-orientation":()=>x().orientation,":data-disabled":()=>x().disabled?``:void 0,"@click":L,"@keydown":e=>{e instanceof KeyboardEvent&&U(e)},"@focusin":W}]})},open(e){N.send({type:`OPEN`,value:e})},close(e){N.send({type:`CLOSE`,value:e})},toggle(e,t){let n=h(e);n&&I(n,t)},isOpen(e){return this.snapshot.current?.context.selection.values.includes(e)??!1}},k},W=u(`UiAccordion`,U),G=new WeakSet,K=t=>{G.has(t)||(G.add(t),e(t),W(t))};export{U as n,K as t};
2
+ //# sourceMappingURL=entry.generated-CYHiRVjx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry.generated-BO0EDjBb.js","names":[],"sources":["../../../../../../../../client/src/components/accordion/contract.ts","../../../../../../../../client/src/components/accordion/machine.ts","../../../../../../../../client/src/components/accordion/styles.ts","../../../../../../../../client/src/components/accordion/index.ts","../../../../../../../../client/src/components/accordion/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {HEADING_LEVELS, ORIENTATIONS, type HeadingLevel, type Orientation} from '../common';\n\nconst ACCORDION_MODES = ['single', 'multiple'] as const;\nconst ACCORDION_ORIENTATIONS = ORIENTATIONS;\nconst ACCORDION_ICON_POSITIONS = ['trailing', 'leading'] as const;\nconst ACCORDION_ITEM_ICON_POSITIONS = ['inherit', ...ACCORDION_ICON_POSITIONS] as const;\nconst ACCORDION_HEADING_AS = HEADING_LEVELS;\nconst ACCORDION_ITEM_HEADING_AS = ['inherit', ...ACCORDION_HEADING_AS] as const;\n\nconst accordionSchema = {\n mode: oneOf(ACCORDION_MODES, 'single'),\n animate: bool,\n collapsible: bool,\n disabled: bool,\n orientation: oneOf(ACCORDION_ORIENTATIONS, 'vertical'),\n defaultValue: string,\n defaultValues: string,\n value: string,\n values: string,\n loop: bool.default(true),\n iconPosition: oneOf(ACCORDION_ICON_POSITIONS, 'trailing'),\n headingAs: oneOf(ACCORDION_HEADING_AS, 'h3'),\n class: string,\n};\n\ntype AccordionMode = typeof ACCORDION_MODES[number];\ntype AccordionOrientation = Orientation;\ntype AccordionIconPosition = typeof ACCORDION_ICON_POSITIONS[number];\ntype AccordionItemIconPosition = typeof ACCORDION_ITEM_ICON_POSITIONS[number];\ntype AccordionHeadingAs = HeadingLevel;\ntype AccordionItemHeadingAs = typeof ACCORDION_ITEM_HEADING_AS[number];\ntype AccordionProps = SchemaToProps<typeof accordionSchema>;\n\nexport {\n ACCORDION_HEADING_AS,\n ACCORDION_ICON_POSITIONS,\n ACCORDION_ITEM_HEADING_AS,\n ACCORDION_ITEM_ICON_POSITIONS,\n ACCORDION_ORIENTATIONS,\n ACCORDION_MODES,\n accordionSchema,\n};\nexport type {\n AccordionHeadingAs,\n AccordionIconPosition,\n AccordionItemHeadingAs,\n AccordionItemIconPosition,\n AccordionOrientation,\n AccordionProps,\n AccordionMode,\n};\n","import {\n createMachine,\n propsChanged,\n propsChangedEvent,\n type Machine,\n type MachineEventObject,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {AccordionProps} from './contract';\n\ntype AccordionContext = {\n selection: {values: string[]};\n change: {openingValues: string[]; closingValues: string[]};\n collection: {values: string[]; disabledValues: string[]};\n};\n\ntype AccordionTransitionData = {value: string};\n\ntype AccordionMachineEffects = {\n prepareChange(scope: MachineScope<AccordionContext, AccordionProps>): void;\n finishChange(scope: MachineScope<AccordionContext, AccordionProps>): void;\n syncProps(scope: MachineScope<AccordionContext, AccordionProps>): void;\n syncItems(scope: MachineScope<AccordionContext, AccordionProps>): void;\n};\n\ntype CreateAccordionMachineOptions = {\n props: AccordionProps;\n context: AccordionContext;\n effects: AccordionMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.openingValues.map((value) => ({value})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n open: (value: string) => ({type: 'OPEN', value}),\n close: (value: string) => ({type: 'CLOSE', value}),\n toggle: (value: string) => ({type: 'TOGGLE', value}),\n setValues: (values: string[]) => ({type: 'SET_VALUES', values}),\n },\n} satisfies TransitionHookDefinition<AccordionContext, AccordionProps, AccordionTransitionData, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.closingValues.map((value) => ({value})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n open: (value: string) => ({type: 'OPEN', value}),\n close: (value: string) => ({type: 'CLOSE', value}),\n toggle: (value: string) => ({type: 'TOGGLE', value}),\n setValues: (values: string[]) => ({type: 'SET_VALUES', values}),\n },\n} satisfies TransitionHookDefinition<AccordionContext, AccordionProps, AccordionTransitionData, 'closing'>);\n\nconst accordionHooks = [openingHook, closingHook] as const;\n\nconst stringValue = (value: unknown): string => typeof value === 'string' ? value : '';\nconst stringValues = (value: unknown): string[] => Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\nconst splitValues = (value: string): string[] => value.split(',').map((item) => item.trim()).filter(Boolean);\nconst sameValues = (left: readonly string[], right: readonly string[]): boolean => (\n left.length === right.length && left.every((value, index) => value === right[index])\n);\n\nconst normalizeValues = (\n values: readonly string[],\n props: AccordionProps,\n collection: AccordionContext['collection'],\n): string[] => {\n const requested = new Set(values.filter((value) => collection.values.includes(value)));\n const ordered = collection.values.filter((value) => requested.has(value));\n return props.mode === 'single' ? ordered.slice(0, 1) : ordered;\n};\n\nconst controlledValues = (props: AccordionProps): string[] => (\n props.mode === 'multiple' ? splitValues(props.values || props.value) : props.value ? [props.value] : []\n);\n\nconst nextProps = (scope: MachineScope<AccordionContext, AccordionProps>): AccordionProps => (\n propsChangedEvent<AccordionProps>(scope.event)?.props ?? scope.props\n);\n\nconst nextCollection = (\n scope: MachineScope<AccordionContext, AccordionProps>,\n): AccordionContext['collection'] => {\n if (scope.event.type !== 'ITEMS_CHANGED') return scope.context.collection;\n return {\n values: stringValues(scope.event.values),\n disabledValues: stringValues(scope.event.disabledValues),\n };\n};\n\nconst requestedValues = (\n scope: MachineScope<AccordionContext, AccordionProps>,\n props: AccordionProps,\n collection: AccordionContext['collection'],\n): string[] => {\n const current = scope.context.selection.values;\n const value = stringValue(scope.event.value);\n switch (scope.event.type) {\n case 'OPEN':\n if (!value || collection.disabledValues.includes(value)) return current;\n return props.mode === 'single' ? [value] : [...current, value];\n case 'CLOSE':\n if (\n !value\n || collection.disabledValues.includes(value)\n || (props.mode === 'single' && !props.collapsible && current.includes(value))\n ) return current;\n return current.filter((item) => item !== value);\n case 'TOGGLE':\n if (!value || collection.disabledValues.includes(value)) return current;\n if (!current.includes(value)) return props.mode === 'single' ? [value] : [...current, value];\n if (props.mode === 'single' && !props.collapsible) return current;\n return current.filter((item) => item !== value);\n case 'SET_VALUES':\n return stringValues(scope.event.values);\n case 'PROPS_CHANGED':\n if (propsChanged<AccordionProps>(scope.event, 'value', 'values')) return controlledValues(props);\n return current;\n case 'ITEMS_CHANGED':\n return current;\n default:\n return current;\n }\n};\n\nconst nextValues = (scope: MachineScope<AccordionContext, AccordionProps>): string[] => {\n const props = nextProps(scope);\n const collection = nextCollection(scope);\n return normalizeValues(requestedValues(scope, props, collection), props, collection);\n};\n\nconst selectionChanges = (scope: MachineScope<AccordionContext, AccordionProps>): boolean => (\n !(\n ['OPEN', 'CLOSE', 'TOGGLE', 'SET_VALUES'].includes(scope.event.type)\n && scope.props.disabled\n ) && !sameValues(scope.context.selection.values, nextValues(scope))\n);\n\nconst createAccordionMachine = ({\n props,\n context,\n effects,\n}: CreateAccordionMachineOptions): Machine<AccordionContext, AccordionProps> => createMachine<AccordionContext, AccordionProps>({\n initial: 'stable',\n states: {\n stable: {\n tags: ['stable'],\n on: {\n OPEN: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n CLOSE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n SET_VALUES: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n PROPS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncProps'},\n ],\n ITEMS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncItems'},\n ],\n },\n },\n changing: {\n tags: ['changing', 'transitioning'],\n on: {\n CHANGE_DONE: {target: 'stable', effects: 'finishChange'},\n CHANGE_ERROR: {target: 'stable', effects: 'finishChange'},\n OPEN: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n CLOSE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n SET_VALUES: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n PROPS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncProps'},\n ],\n ITEMS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncItems'},\n ],\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n applyChange: (scope) => {\n const values = nextValues(scope);\n const previous = scope.context.selection.values;\n return {\n props: nextProps(scope),\n context: {\n ...scope.context,\n selection: {values},\n change: {\n openingValues: values.filter((value) => !previous.includes(value)),\n closingValues: previous.filter((value) => !values.includes(value)),\n },\n collection: nextCollection(scope),\n },\n };\n },\n reconcile: (scope) => ({\n props: nextProps(scope),\n context: {\n ...scope.context,\n collection: nextCollection(scope),\n selection: {values: nextValues(scope)},\n },\n }),\n },\n effects: {\n prepareChange: effects.prepareChange,\n finishChange: effects.finishChange,\n syncProps: effects.syncProps,\n syncItems: effects.syncItems,\n },\n});\n\nexport {accordionHooks, createAccordionMachine};\nexport type {\n AccordionContext,\n AccordionMachineEffects,\n AccordionTransitionData,\n CreateAccordionMachineOptions,\n};\n","import {defineStyles} from '../../runtime';\n\nconst accordionStyles = defineStyles({definition: {\n component: 'ui.accordion',\n parts: {\n root: {\n base: 'grid w-full min-w-0 gap-0',\n variants: {\n orientation: {\n vertical: '',\n horizontal: 'gap-2 md:grid-flow-col md:auto-cols-fr',\n },\n },\n defaults: {\n orientation: 'vertical',\n },\n },\n item: {\n base: 'min-w-0 border-b-edge-separator border-separator last:border-b-0 data-disabled:opacity-50',\n },\n heading: {\n base: 'block text-surface-ink',\n },\n trigger: {\n base: [\n 'flex min-h-control-xlg w-full min-w-0 items-center gap-2 rounded-control-sm border border-transparent px-3 py-2',\n 'text-left text-sm font-medium text-surface-ink outline-none',\n 'focus-visible:ui-focus-ring',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n ],\n },\n triggerLabel: {\n base: 'min-w-0 flex-1',\n },\n icon: {\n base: 'size-icon shrink-0 fill-current text-icon',\n },\n content: {\n base: 'overflow-hidden text-sm text-surface-ink-muted',\n },\n contentInner: {\n base: 'min-w-0 px-3 pb-3 pt-1',\n },\n },\n}});\n\nexport {accordionStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n type BindingObject,\n createCollectionNavigation,\n type CollectionNavigation,\n defineAlpineData,\n mergeBindings,\n type MachineSnapshot,\n observeSemanticChanges,\n reflectSchemaProp,\n resolveStyle,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {asBool, dispatch, isRtl} from '@client/utils';\nimport {accordionSchema, type AccordionMode, type AccordionProps} from './contract';\nimport {\n accordionHooks,\n createAccordionMachine,\n type AccordionContext,\n type AccordionTransitionData,\n} from './machine';\nimport {accordionStyles} from './styles';\n\ntype AccordionTransitionName = (typeof accordionHooks)[number]['name'];\ntype AccordionTransition<TName extends AccordionTransitionName = AccordionTransitionName> = TransitionForHook<\n Extract<(typeof accordionHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype AccordionItemRecord = {\n item: HTMLElement;\n heading: HTMLElement | null;\n trigger: HTMLButtonElement;\n content: HTMLElement;\n value: string;\n disabled: boolean;\n};\n\n/**\n * Public Alpine API for `ui.accordion`.\n *\n * @public\n */\ninterface UiAccordionApi {\n /** Open value in single mode, otherwise an empty string. */\n readonly value: string;\n\n /** Open values in document order. */\n readonly values: readonly string[];\n\n /** Opens an enabled item. In single mode it replaces the current value. */\n open(value: string): void;\n\n /** Closes an item when the current mode permits it. */\n close(value: string): void;\n\n /** Reverses an item's current disclosure state. */\n toggle(value: string, event?: Event): void;\n\n /** Whether an item belongs to the current open-value set. */\n isOpen(value: string): boolean;\n}\n\ntype AccordionData = AlpineMachine<AccordionContext, AccordionProps, typeof accordionHooks> & UiAccordionApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst splitValues = (value: string): string[] => value.split(',').map((item) => item.trim()).filter(Boolean);\nconst stateFor = (open: boolean): 'open' | 'closed' => open ? 'open' : 'closed';\nconst safeIdPart = (value: string): string => value.trim().replace(/[^a-zA-Z0-9_-]+/g, '-') || 'item';\n\nconst UiAccordion = (): TrellisAlpineComponent<AccordionData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let collection: CollectionNavigation | null = null;\n let disconnectObserver: (() => void) | null = null;\n let idFor = (key: string): string => key;\n\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Accordion has not been initialized.');\n return rootEl;\n };\n\n const owns = (element: Element): boolean => element.closest('[data-ui-accordion]') === root();\n\n const items = (): AccordionItemRecord[] => Array.from(\n root().querySelectorAll<HTMLElement>('[data-ui-accordion-item]'),\n ).filter(owns).map((item, index) => {\n const trigger = item.querySelector<HTMLElement>('[data-ui-accordion-trigger]');\n const content = item.querySelector<HTMLElement>('[data-ui-accordion-content]');\n if (!(trigger instanceof HTMLButtonElement) || !content || !owns(trigger) || !owns(content)) return null;\n item.dataset.value ||= `item-${index + 1}`;\n return {\n item,\n heading: item.querySelector<HTMLElement>('[data-ui-accordion-heading]'),\n trigger,\n content,\n value: item.dataset.value,\n disabled: asBool({value: item.dataset.itemDisabled}),\n } satisfies AccordionItemRecord;\n }).filter((item): item is AccordionItemRecord => item !== null);\n\n const itemForValue = (value: string): AccordionItemRecord | null => (\n items().find((item) => item.value === value) ?? null\n );\n\n const itemFrom = (target: EventTarget | null): AccordionItemRecord | null => {\n if (!(target instanceof Element)) return null;\n const itemEl = target.closest<HTMLElement>('[data-ui-accordion-item]');\n return itemEl && owns(itemEl) ? items().find((item) => item.item === itemEl) ?? null : null;\n };\n\n const collectionContext = (): AccordionContext['collection'] => {\n const records = items();\n return {\n values: records.map((item) => item.value),\n disabledValues: records.filter((item) => item.disabled).map((item) => item.value),\n };\n };\n\n const normalize = (\n values: readonly string[],\n props: AccordionProps,\n itemValues: readonly string[],\n ): string[] => {\n const requested = new Set(values);\n const ordered = itemValues.filter((value) => requested.has(value));\n return props.mode === 'single' ? ordered.slice(0, 1) : ordered;\n };\n\n const initialContext = (props: AccordionProps): AccordionContext => {\n const collectionState = collectionContext();\n const controlled = props.mode === 'multiple'\n ? splitValues(props.values || props.value)\n : props.value ? [props.value] : [];\n const defaults = props.mode === 'multiple'\n ? splitValues(props.defaultValues)\n : props.defaultValue ? [props.defaultValue] : [];\n const authored = items().filter((item) => asBool({value: item.item.dataset.open})).map((item) => item.value);\n const requested = controlled.length > 0 ? controlled : defaults.length > 0 ? defaults : authored;\n return {\n selection: {values: normalize(requested, props, collectionState.values)},\n change: {openingValues: [], closingValues: []},\n collection: collectionState,\n };\n };\n\n const currentProps = (): Readonly<AccordionProps> => bridge.getCommittedSnapshot().props;\n const currentContext = (): Readonly<AccordionContext> => bridge.getCommittedSnapshot().context;\n\n const itemIsOpen = (item: AccordionItemRecord): boolean => currentContext().selection.values.includes(item.value);\n const itemIsDisabled = (item: AccordionItemRecord): boolean => currentProps().disabled || item.disabled;\n const canCollapse = (item: AccordionItemRecord): boolean => (\n currentProps().mode === 'multiple' || currentProps().collapsible || !itemIsOpen(item)\n );\n\n const syncRoot = (): void => {\n const props = currentProps();\n const values = currentContext().selection.values;\n reflectSchemaProp({\n el: root(),\n schema: accordionSchema,\n key: 'value',\n value: props.mode === 'single' ? values[0] ?? '' : '',\n });\n reflectSchemaProp({\n el: root(),\n schema: accordionSchema,\n key: 'values',\n value: props.mode === 'multiple' ? values.join(',') : '',\n });\n root().dataset.orientation = props.orientation;\n root().dataset.iconPosition = props.iconPosition;\n root().dataset.mode = props.mode;\n if (props.disabled) root().setAttribute('data-disabled', '');\n else root().removeAttribute('data-disabled');\n };\n\n let component!: TrellisAlpineComponent<AccordionData>;\n\n const syncItem = (item: AccordionItemRecord): void => {\n const props = currentProps();\n const open = itemIsOpen(item);\n const state = stateFor(open);\n const disabled = itemIsDisabled(item);\n const closing = bridge.hasTag('changing') && currentContext().change.closingValues.includes(item.value);\n\n item.item.dataset.state = state;\n item.item.dataset.orientation = props.orientation;\n item.item.className = resolveStyle({\n part: accordionStyles.parts.item,\n props,\n className: item.item.dataset.class ?? '',\n });\n item.heading?.setAttribute('data-state', state);\n item.heading?.setAttribute('data-orientation', props.orientation);\n\n const idPart = safeIdPart(item.value);\n item.trigger.id ||= idFor(`accordion-trigger-${idPart}`);\n item.content.id ||= idFor(`accordion-content-${idPart}`);\n item.trigger.type = 'button';\n item.trigger.dataset.state = state;\n item.trigger.dataset.orientation = props.orientation;\n item.trigger.className = resolveStyle({\n part: accordionStyles.parts.trigger,\n props,\n className: item.trigger.dataset.class ?? '',\n });\n item.trigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n item.trigger.setAttribute('aria-controls', item.content.id);\n item.content.dataset.state = state;\n item.content.dataset.orientation = props.orientation;\n item.content.setAttribute('aria-labelledby', item.trigger.id);\n item.content.hidden = !open && !closing;\n\n [item.item, item.heading, item.trigger, item.content].forEach((element) => {\n if (!element) return;\n if (disabled) element.setAttribute('data-disabled', '');\n else element.removeAttribute('data-disabled');\n });\n item.trigger.disabled = disabled;\n if (disabled || (open && !canCollapse(item))) item.trigger.setAttribute('aria-disabled', 'true');\n else item.trigger.removeAttribute('aria-disabled');\n };\n\n const syncAll = (): void => {\n syncRoot();\n items().forEach(syncItem);\n };\n\n const emitChange = (): void => {\n const values = [...currentContext().selection.values];\n dispatch({el: root(), name: 'ui:change', detail: {\n value: currentProps().mode === 'single' ? values[0] ?? '' : '',\n values,\n }});\n };\n\n const bridge = createAlpineMachine({\n schema: accordionSchema,\n hooks: accordionHooks,\n resolveTransitionElement: ({data}) => {\n const value = (data as AccordionTransitionData).value;\n return itemForValue(value)?.content ?? null;\n },\n createMachine: ({props}) => createAccordionMachine({\n props,\n context: initialContext(props),\n effects: {\n prepareChange: () => {\n syncAll();\n emitChange();\n },\n finishChange: () => {\n syncAll();\n },\n syncProps: syncAll,\n syncItems: syncAll,\n },\n }),\n });\n\n const collectionNav = (): CollectionNavigation => {\n if (!collection) throw new Error('Accordion navigation has not been initialized.');\n return collection;\n };\n\n const sendItemsChanged = (): void => {\n const next = collectionContext();\n bridge.send({type: 'ITEMS_CHANGED', ...next});\n };\n\n const handleToggle = (item: AccordionItemRecord, event?: Event): void => {\n event?.preventDefault();\n if (itemIsDisabled(item)) return;\n bridge.send({type: 'TOGGLE', value: item.value, motion: !(event instanceof KeyboardEvent)});\n };\n\n const handleClick = (event: Event): void => {\n const item = itemFrom(event.target);\n if (!item || !(event.target instanceof Node) || !item.trigger.contains(event.target)) return;\n handleToggle(item, event);\n };\n\n const handleKeydown = (event: KeyboardEvent): void => {\n const item = itemFrom(event.target);\n if (!item || event.target !== item.trigger) return;\n if (event.key === 'Enter' || event.key === ' ') {\n handleToggle(item, event);\n return;\n }\n if (event.key === 'Home') {\n event.preventDefault();\n collectionNav().focusFirst();\n return;\n }\n if (event.key === 'End') {\n event.preventDefault();\n collectionNav().focusLast();\n return;\n }\n if (currentProps().orientation === 'vertical') {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n collectionNav().focusNext();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n collectionNav().focusPrevious();\n }\n return;\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n if (isRtl({el: root()})) collectionNav().focusPrevious();\n else collectionNav().focusNext();\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n if (isRtl({el: root()})) collectionNav().focusNext();\n else collectionNav().focusPrevious();\n }\n };\n\n const handleFocus = (event: Event): void => {\n const item = itemFrom(event.target);\n if (item && event.target === item.trigger && !itemIsDisabled(item)) {\n collectionNav().activateItem({el: item.trigger});\n }\n };\n\n const setupObserver = (): void => {\n disconnectObserver = observeSemanticChanges({\n targets: root(),\n read: collectionContext,\n onChange: sendItemsChanged,\n observer: {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-value', 'data-item-disabled'],\n },\n });\n };\n\n component = {\n ...bridge,\n get value(): string {\n return currentProps().mode === 'single' ? this.snapshot.current?.context.selection.values[0] ?? '' : '';\n },\n get values(): readonly string[] {\n return [...this.snapshot.current?.context.selection.values ?? []];\n },\n init(): void {\n rootEl = this.$el;\n idFor = this.$id.bind(this);\n bridge.connect(this.$el, this.snapshot);\n collection = createCollectionNavigation({\n root,\n itemSelector: '[data-ui-accordion-trigger]',\n isDisabled: (el) => el.hasAttribute('disabled'),\n loop: () => currentProps().loop,\n });\n syncAll();\n setupObserver();\n },\n destroy(): void {\n disconnectObserver?.();\n disconnectObserver = null;\n bridge.disconnect();\n collection = null;\n rootEl = null;\n },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: accordionStyles.parts.root, props, className: props.class}),\n {\n 'data-ui-accordion': '',\n ':data-orientation': () => currentProps().orientation,\n ':data-disabled': () => currentProps().disabled ? '' : undefined,\n '@click': handleClick,\n '@keydown': (event: Event) => {\n if (event instanceof KeyboardEvent) handleKeydown(event);\n },\n '@focusin': handleFocus,\n },\n ]});\n },\n open(value: string): void {\n bridge.send({type: 'OPEN', value});\n },\n close(value: string): void {\n bridge.send({type: 'CLOSE', value});\n },\n toggle(value: string, event?: Event): void {\n const item = itemForValue(value);\n if (item) handleToggle(item, event);\n },\n isOpen(value: string): boolean {\n return this.snapshot.current?.context.selection.values.includes(value) ?? false;\n },\n };\n\n return component;\n};\n\nconst registerAccordion = defineAlpineData('UiAccordion', UiAccordion);\n\nexport {registerAccordion, UiAccordion};\nexport type {AccordionData, AccordionMode, AccordionTransition, UiAccordionApi};\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 {registerMotionCapability} from '../../capabilities/motion';\nimport {registerAccordion as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerAccordion = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerAccordion};\nexport default registerAccordion;\nexport * from './index';\n"],"mappings":"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"}
1
+ {"version":3,"file":"entry.generated-CYHiRVjx.js","names":[],"sources":["../../../../../../../../client/src/components/accordion/contract.ts","../../../../../../../../client/src/components/accordion/machine.ts","../../../../../../../../client/src/components/accordion/styles.ts","../../../../../../../../client/src/components/accordion/index.ts","../../../../../../../../client/src/components/accordion/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {HEADING_LEVELS, ORIENTATIONS, type HeadingLevel, type Orientation} from '../common';\n\nconst ACCORDION_MODES = ['single', 'multiple'] as const;\nconst ACCORDION_ORIENTATIONS = ORIENTATIONS;\nconst ACCORDION_ICON_POSITIONS = ['trailing', 'leading'] as const;\nconst ACCORDION_ITEM_ICON_POSITIONS = ['inherit', ...ACCORDION_ICON_POSITIONS] as const;\nconst ACCORDION_HEADING_AS = HEADING_LEVELS;\nconst ACCORDION_ITEM_HEADING_AS = ['inherit', ...ACCORDION_HEADING_AS] as const;\n\nconst accordionSchema = {\n mode: oneOf(ACCORDION_MODES, 'single'),\n animate: bool,\n collapsible: bool,\n disabled: bool,\n orientation: oneOf(ACCORDION_ORIENTATIONS, 'vertical'),\n defaultValue: string,\n defaultValues: string,\n value: string,\n values: string,\n loop: bool.default(true),\n iconPosition: oneOf(ACCORDION_ICON_POSITIONS, 'trailing'),\n headingAs: oneOf(ACCORDION_HEADING_AS, 'h3'),\n class: string,\n};\n\ntype AccordionMode = typeof ACCORDION_MODES[number];\ntype AccordionOrientation = Orientation;\ntype AccordionIconPosition = typeof ACCORDION_ICON_POSITIONS[number];\ntype AccordionItemIconPosition = typeof ACCORDION_ITEM_ICON_POSITIONS[number];\ntype AccordionHeadingAs = HeadingLevel;\ntype AccordionItemHeadingAs = typeof ACCORDION_ITEM_HEADING_AS[number];\ntype AccordionProps = SchemaToProps<typeof accordionSchema>;\n\nexport {\n ACCORDION_HEADING_AS,\n ACCORDION_ICON_POSITIONS,\n ACCORDION_ITEM_HEADING_AS,\n ACCORDION_ITEM_ICON_POSITIONS,\n ACCORDION_ORIENTATIONS,\n ACCORDION_MODES,\n accordionSchema,\n};\nexport type {\n AccordionHeadingAs,\n AccordionIconPosition,\n AccordionItemHeadingAs,\n AccordionItemIconPosition,\n AccordionOrientation,\n AccordionProps,\n AccordionMode,\n};\n","import {\n createMachine,\n propsChanged,\n propsChangedEvent,\n type Machine,\n type MachineEventObject,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {AccordionProps} from './contract';\n\ntype AccordionContext = {\n selection: {values: string[]};\n change: {openingValues: string[]; closingValues: string[]};\n collection: {values: string[]; disabledValues: string[]};\n};\n\ntype AccordionTransitionData = {value: string};\n\ntype AccordionMachineEffects = {\n prepareChange(scope: MachineScope<AccordionContext, AccordionProps>): void;\n finishChange(scope: MachineScope<AccordionContext, AccordionProps>): void;\n syncProps(scope: MachineScope<AccordionContext, AccordionProps>): void;\n syncItems(scope: MachineScope<AccordionContext, AccordionProps>): void;\n};\n\ntype CreateAccordionMachineOptions = {\n props: AccordionProps;\n context: AccordionContext;\n effects: AccordionMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.openingValues.map((value) => ({value})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n open: (value: string) => ({type: 'OPEN', value}),\n close: (value: string) => ({type: 'CLOSE', value}),\n toggle: (value: string) => ({type: 'TOGGLE', value}),\n setValues: (values: string[]) => ({type: 'SET_VALUES', values}),\n },\n} satisfies TransitionHookDefinition<AccordionContext, AccordionProps, AccordionTransitionData, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.closingValues.map((value) => ({value})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n open: (value: string) => ({type: 'OPEN', value}),\n close: (value: string) => ({type: 'CLOSE', value}),\n toggle: (value: string) => ({type: 'TOGGLE', value}),\n setValues: (values: string[]) => ({type: 'SET_VALUES', values}),\n },\n} satisfies TransitionHookDefinition<AccordionContext, AccordionProps, AccordionTransitionData, 'closing'>);\n\nconst accordionHooks = [openingHook, closingHook] as const;\n\nconst stringValue = (value: unknown): string => typeof value === 'string' ? value : '';\nconst stringValues = (value: unknown): string[] => Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\nconst splitValues = (value: string): string[] => value.split(',').map((item) => item.trim()).filter(Boolean);\nconst sameValues = (left: readonly string[], right: readonly string[]): boolean => (\n left.length === right.length && left.every((value, index) => value === right[index])\n);\n\nconst normalizeValues = (\n values: readonly string[],\n props: AccordionProps,\n collection: AccordionContext['collection'],\n): string[] => {\n const requested = new Set(values.filter((value) => collection.values.includes(value)));\n const ordered = collection.values.filter((value) => requested.has(value));\n return props.mode === 'single' ? ordered.slice(0, 1) : ordered;\n};\n\nconst controlledValues = (props: AccordionProps): string[] => (\n props.mode === 'multiple' ? splitValues(props.values || props.value) : props.value ? [props.value] : []\n);\n\nconst nextProps = (scope: MachineScope<AccordionContext, AccordionProps>): AccordionProps => (\n propsChangedEvent<AccordionProps>(scope.event)?.props ?? scope.props\n);\n\nconst nextCollection = (\n scope: MachineScope<AccordionContext, AccordionProps>,\n): AccordionContext['collection'] => {\n if (scope.event.type !== 'ITEMS_CHANGED') return scope.context.collection;\n return {\n values: stringValues(scope.event.values),\n disabledValues: stringValues(scope.event.disabledValues),\n };\n};\n\nconst requestedValues = (\n scope: MachineScope<AccordionContext, AccordionProps>,\n props: AccordionProps,\n collection: AccordionContext['collection'],\n): string[] => {\n const current = scope.context.selection.values;\n const value = stringValue(scope.event.value);\n switch (scope.event.type) {\n case 'OPEN':\n if (!value || collection.disabledValues.includes(value)) return current;\n return props.mode === 'single' ? [value] : [...current, value];\n case 'CLOSE':\n if (\n !value\n || collection.disabledValues.includes(value)\n || (props.mode === 'single' && !props.collapsible && current.includes(value))\n ) return current;\n return current.filter((item) => item !== value);\n case 'TOGGLE':\n if (!value || collection.disabledValues.includes(value)) return current;\n if (!current.includes(value)) return props.mode === 'single' ? [value] : [...current, value];\n if (props.mode === 'single' && !props.collapsible) return current;\n return current.filter((item) => item !== value);\n case 'SET_VALUES':\n return stringValues(scope.event.values);\n case 'PROPS_CHANGED':\n if (propsChanged<AccordionProps>(scope.event, 'value', 'values')) return controlledValues(props);\n return current;\n case 'ITEMS_CHANGED':\n return current;\n default:\n return current;\n }\n};\n\nconst nextValues = (scope: MachineScope<AccordionContext, AccordionProps>): string[] => {\n const props = nextProps(scope);\n const collection = nextCollection(scope);\n return normalizeValues(requestedValues(scope, props, collection), props, collection);\n};\n\nconst selectionChanges = (scope: MachineScope<AccordionContext, AccordionProps>): boolean => (\n !(\n ['OPEN', 'CLOSE', 'TOGGLE', 'SET_VALUES'].includes(scope.event.type)\n && scope.props.disabled\n ) && !sameValues(scope.context.selection.values, nextValues(scope))\n);\n\nconst createAccordionMachine = ({\n props,\n context,\n effects,\n}: CreateAccordionMachineOptions): Machine<AccordionContext, AccordionProps> => createMachine<AccordionContext, AccordionProps>({\n initial: 'stable',\n states: {\n stable: {\n tags: ['stable'],\n on: {\n OPEN: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n CLOSE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n SET_VALUES: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n PROPS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncProps'},\n ],\n ITEMS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncItems'},\n ],\n },\n },\n changing: {\n tags: ['changing', 'transitioning'],\n on: {\n CHANGE_DONE: {target: 'stable', effects: 'finishChange'},\n CHANGE_ERROR: {target: 'stable', effects: 'finishChange'},\n OPEN: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n CLOSE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n SET_VALUES: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n PROPS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncProps'},\n ],\n ITEMS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncItems'},\n ],\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n applyChange: (scope) => {\n const values = nextValues(scope);\n const previous = scope.context.selection.values;\n return {\n props: nextProps(scope),\n context: {\n ...scope.context,\n selection: {values},\n change: {\n openingValues: values.filter((value) => !previous.includes(value)),\n closingValues: previous.filter((value) => !values.includes(value)),\n },\n collection: nextCollection(scope),\n },\n };\n },\n reconcile: (scope) => ({\n props: nextProps(scope),\n context: {\n ...scope.context,\n collection: nextCollection(scope),\n selection: {values: nextValues(scope)},\n },\n }),\n },\n effects: {\n prepareChange: effects.prepareChange,\n finishChange: effects.finishChange,\n syncProps: effects.syncProps,\n syncItems: effects.syncItems,\n },\n});\n\nexport {accordionHooks, createAccordionMachine};\nexport type {\n AccordionContext,\n AccordionMachineEffects,\n AccordionTransitionData,\n CreateAccordionMachineOptions,\n};\n","import {defineStyles} from '../../runtime';\n\nconst accordionStyles = defineStyles({definition: {\n component: 'ui.accordion',\n parts: {\n root: {\n base: 'grid w-full min-w-0 gap-0',\n variants: {\n orientation: {\n vertical: '',\n horizontal: 'gap-2 md:grid-flow-col md:auto-cols-fr',\n },\n },\n defaults: {\n orientation: 'vertical',\n },\n },\n item: {\n base: 'min-w-0 border-b-edge-separator border-separator last:border-b-0 data-disabled:opacity-50',\n },\n heading: {\n base: 'block text-surface-ink',\n },\n trigger: {\n base: [\n 'flex min-h-control-xlg w-full min-w-0 items-center gap-2 rounded-control-sm border border-transparent px-3 py-2',\n 'text-left text-sm font-medium text-surface-ink outline-none',\n 'focus-visible:ui-focus-ring',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n ],\n },\n triggerLabel: {\n base: 'min-w-0 flex-1',\n },\n icon: {\n base: 'size-icon shrink-0 fill-current text-icon',\n },\n content: {\n base: 'overflow-hidden text-sm text-surface-ink-muted',\n },\n contentInner: {\n base: 'min-w-0 px-3 pb-3 pt-1',\n },\n },\n}});\n\nexport {accordionStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n type BindingObject,\n createCollectionNavigation,\n type CollectionNavigation,\n defineAlpineData,\n mergeBindings,\n type MachineSnapshot,\n observeSemanticChanges,\n reflectSchemaProp,\n resolveStyle,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {asBool, dispatch, isRtl} from '@client/utils';\nimport {accordionSchema, type AccordionMode, type AccordionProps} from './contract';\nimport {\n accordionHooks,\n createAccordionMachine,\n type AccordionContext,\n type AccordionTransitionData,\n} from './machine';\nimport {accordionStyles} from './styles';\n\ntype AccordionTransitionName = (typeof accordionHooks)[number]['name'];\ntype AccordionTransition<TName extends AccordionTransitionName = AccordionTransitionName> = TransitionForHook<\n Extract<(typeof accordionHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype AccordionItemRecord = {\n item: HTMLElement;\n heading: HTMLElement | null;\n trigger: HTMLButtonElement;\n content: HTMLElement;\n value: string;\n disabled: boolean;\n};\n\n/**\n * Public Alpine API for `ui.accordion`.\n *\n * @public\n */\ninterface UiAccordionApi {\n /** Open value in single mode, otherwise an empty string. */\n readonly value: string;\n\n /** Open values in document order. */\n readonly values: readonly string[];\n\n /** Opens an enabled item. In single mode it replaces the current value. */\n open(value: string): void;\n\n /** Closes an item when the current mode permits it. */\n close(value: string): void;\n\n /** Reverses an item's current disclosure state. */\n toggle(value: string, event?: Event): void;\n\n /** Whether an item belongs to the current open-value set. */\n isOpen(value: string): boolean;\n}\n\ntype AccordionData = AlpineMachine<AccordionContext, AccordionProps, typeof accordionHooks> & UiAccordionApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst splitValues = (value: string): string[] => value.split(',').map((item) => item.trim()).filter(Boolean);\nconst stateFor = (open: boolean): 'open' | 'closed' => open ? 'open' : 'closed';\nconst safeIdPart = (value: string): string => value.trim().replace(/[^a-zA-Z0-9_-]+/g, '-') || 'item';\n\nconst UiAccordion = (): TrellisAlpineComponent<AccordionData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let collection: CollectionNavigation | null = null;\n let disconnectObserver: (() => void) | null = null;\n let idFor = (key: string): string => key;\n\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Accordion has not been initialized.');\n return rootEl;\n };\n\n const owns = (element: Element): boolean => element.closest('[data-ui-accordion]') === root();\n\n const items = (): AccordionItemRecord[] => Array.from(\n root().querySelectorAll<HTMLElement>('[data-ui-accordion-item]'),\n ).filter(owns).map((item, index) => {\n const trigger = item.querySelector<HTMLElement>('[data-ui-accordion-trigger]');\n const content = item.querySelector<HTMLElement>('[data-ui-accordion-content]');\n if (!(trigger instanceof HTMLButtonElement) || !content || !owns(trigger) || !owns(content)) return null;\n item.dataset.value ||= `item-${index + 1}`;\n return {\n item,\n heading: item.querySelector<HTMLElement>('[data-ui-accordion-heading]'),\n trigger,\n content,\n value: item.dataset.value,\n disabled: asBool({value: item.dataset.itemDisabled}),\n } satisfies AccordionItemRecord;\n }).filter((item): item is AccordionItemRecord => item !== null);\n\n const itemForValue = (value: string): AccordionItemRecord | null => (\n items().find((item) => item.value === value) ?? null\n );\n\n const itemFrom = (target: EventTarget | null): AccordionItemRecord | null => {\n if (!(target instanceof Element)) return null;\n const itemEl = target.closest<HTMLElement>('[data-ui-accordion-item]');\n return itemEl && owns(itemEl) ? items().find((item) => item.item === itemEl) ?? null : null;\n };\n\n const collectionContext = (): AccordionContext['collection'] => {\n const records = items();\n return {\n values: records.map((item) => item.value),\n disabledValues: records.filter((item) => item.disabled).map((item) => item.value),\n };\n };\n\n const normalize = (\n values: readonly string[],\n props: AccordionProps,\n itemValues: readonly string[],\n ): string[] => {\n const requested = new Set(values);\n const ordered = itemValues.filter((value) => requested.has(value));\n return props.mode === 'single' ? ordered.slice(0, 1) : ordered;\n };\n\n const initialContext = (props: AccordionProps): AccordionContext => {\n const collectionState = collectionContext();\n const controlled = props.mode === 'multiple'\n ? splitValues(props.values || props.value)\n : props.value ? [props.value] : [];\n const defaults = props.mode === 'multiple'\n ? splitValues(props.defaultValues)\n : props.defaultValue ? [props.defaultValue] : [];\n const authored = items().filter((item) => asBool({value: item.item.dataset.open})).map((item) => item.value);\n const requested = controlled.length > 0 ? controlled : defaults.length > 0 ? defaults : authored;\n return {\n selection: {values: normalize(requested, props, collectionState.values)},\n change: {openingValues: [], closingValues: []},\n collection: collectionState,\n };\n };\n\n const currentProps = (): Readonly<AccordionProps> => bridge.getCommittedSnapshot().props;\n const currentContext = (): Readonly<AccordionContext> => bridge.getCommittedSnapshot().context;\n\n const itemIsOpen = (item: AccordionItemRecord): boolean => currentContext().selection.values.includes(item.value);\n const itemIsDisabled = (item: AccordionItemRecord): boolean => currentProps().disabled || item.disabled;\n const canCollapse = (item: AccordionItemRecord): boolean => (\n currentProps().mode === 'multiple' || currentProps().collapsible || !itemIsOpen(item)\n );\n\n const syncRoot = (): void => {\n const props = currentProps();\n const values = currentContext().selection.values;\n reflectSchemaProp({\n el: root(),\n schema: accordionSchema,\n key: 'value',\n value: props.mode === 'single' ? values[0] ?? '' : '',\n });\n reflectSchemaProp({\n el: root(),\n schema: accordionSchema,\n key: 'values',\n value: props.mode === 'multiple' ? values.join(',') : '',\n });\n root().dataset.orientation = props.orientation;\n root().dataset.iconPosition = props.iconPosition;\n root().dataset.mode = props.mode;\n if (props.disabled) root().setAttribute('data-disabled', '');\n else root().removeAttribute('data-disabled');\n };\n\n let component!: TrellisAlpineComponent<AccordionData>;\n\n const syncItem = (item: AccordionItemRecord): void => {\n const props = currentProps();\n const open = itemIsOpen(item);\n const state = stateFor(open);\n const disabled = itemIsDisabled(item);\n const closing = bridge.hasTag('changing') && currentContext().change.closingValues.includes(item.value);\n\n item.item.dataset.state = state;\n item.item.dataset.orientation = props.orientation;\n item.item.className = resolveStyle({\n part: accordionStyles.parts.item,\n props,\n className: item.item.dataset.class ?? '',\n });\n item.heading?.setAttribute('data-state', state);\n item.heading?.setAttribute('data-orientation', props.orientation);\n\n const idPart = safeIdPart(item.value);\n item.trigger.id ||= idFor(`accordion-trigger-${idPart}`);\n item.content.id ||= idFor(`accordion-content-${idPart}`);\n item.trigger.type = 'button';\n item.trigger.dataset.state = state;\n item.trigger.dataset.orientation = props.orientation;\n item.trigger.className = resolveStyle({\n part: accordionStyles.parts.trigger,\n props,\n className: item.trigger.dataset.class ?? '',\n });\n item.trigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n item.trigger.setAttribute('aria-controls', item.content.id);\n item.content.dataset.state = state;\n item.content.dataset.orientation = props.orientation;\n item.content.setAttribute('aria-labelledby', item.trigger.id);\n item.content.hidden = !open && !closing;\n\n [item.item, item.heading, item.trigger, item.content].forEach((element) => {\n if (!element) return;\n if (disabled) element.setAttribute('data-disabled', '');\n else element.removeAttribute('data-disabled');\n });\n item.trigger.disabled = disabled;\n if (disabled || (open && !canCollapse(item))) item.trigger.setAttribute('aria-disabled', 'true');\n else item.trigger.removeAttribute('aria-disabled');\n };\n\n const syncAll = (): void => {\n syncRoot();\n items().forEach(syncItem);\n };\n\n const emitChange = (): void => {\n const values = [...currentContext().selection.values];\n dispatch({el: root(), name: 'ui:change', detail: {\n value: currentProps().mode === 'single' ? values[0] ?? '' : '',\n values,\n }});\n };\n\n const bridge = createAlpineMachine({\n schema: accordionSchema,\n hooks: accordionHooks,\n resolveTransitionElement: ({data}) => {\n const value = (data as AccordionTransitionData).value;\n return itemForValue(value)?.content ?? null;\n },\n createMachine: ({props}) => createAccordionMachine({\n props,\n context: initialContext(props),\n effects: {\n prepareChange: () => {\n syncAll();\n emitChange();\n },\n finishChange: () => {\n syncAll();\n },\n syncProps: syncAll,\n syncItems: syncAll,\n },\n }),\n });\n\n const collectionNav = (): CollectionNavigation => {\n if (!collection) throw new Error('Accordion navigation has not been initialized.');\n return collection;\n };\n\n const sendItemsChanged = (): void => {\n const next = collectionContext();\n bridge.send({type: 'ITEMS_CHANGED', ...next});\n };\n\n const handleToggle = (item: AccordionItemRecord, event?: Event): void => {\n event?.preventDefault();\n if (itemIsDisabled(item)) return;\n bridge.send({type: 'TOGGLE', value: item.value, motion: !(event instanceof KeyboardEvent)});\n };\n\n const handleClick = (event: Event): void => {\n const item = itemFrom(event.target);\n if (!item || !(event.target instanceof Node) || !item.trigger.contains(event.target)) return;\n handleToggle(item, event);\n };\n\n const handleKeydown = (event: KeyboardEvent): void => {\n const item = itemFrom(event.target);\n if (!item || event.target !== item.trigger) return;\n if (event.key === 'Enter' || event.key === ' ') {\n handleToggle(item, event);\n return;\n }\n if (event.key === 'Home') {\n event.preventDefault();\n collectionNav().focusFirst();\n return;\n }\n if (event.key === 'End') {\n event.preventDefault();\n collectionNav().focusLast();\n return;\n }\n if (currentProps().orientation === 'vertical') {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n collectionNav().focusNext();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n collectionNav().focusPrevious();\n }\n return;\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n if (isRtl({el: root()})) collectionNav().focusPrevious();\n else collectionNav().focusNext();\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n if (isRtl({el: root()})) collectionNav().focusNext();\n else collectionNav().focusPrevious();\n }\n };\n\n const handleFocus = (event: Event): void => {\n const item = itemFrom(event.target);\n if (item && event.target === item.trigger && !itemIsDisabled(item)) {\n collectionNav().activateItem({el: item.trigger});\n }\n };\n\n const setupObserver = (): void => {\n disconnectObserver = observeSemanticChanges({\n targets: root(),\n read: collectionContext,\n onChange: sendItemsChanged,\n observer: {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-value', 'data-item-disabled'],\n },\n });\n };\n\n component = {\n ...bridge,\n get value(): string {\n return currentProps().mode === 'single' ? this.snapshot.current?.context.selection.values[0] ?? '' : '';\n },\n get values(): readonly string[] {\n return [...this.snapshot.current?.context.selection.values ?? []];\n },\n init(): void {\n rootEl = this.$el;\n idFor = this.$id.bind(this);\n bridge.connect(this.$el, this.snapshot);\n collection = createCollectionNavigation({\n root,\n itemSelector: '[data-ui-accordion-trigger]',\n isDisabled: (el) => el.hasAttribute('disabled'),\n loop: () => currentProps().loop,\n });\n syncAll();\n setupObserver();\n },\n destroy(): void {\n disconnectObserver?.();\n disconnectObserver = null;\n bridge.disconnect();\n collection = null;\n rootEl = null;\n },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: accordionStyles.parts.root, props, className: props.class}),\n {\n 'data-ui-accordion': '',\n ':data-orientation': () => currentProps().orientation,\n ':data-disabled': () => currentProps().disabled ? '' : undefined,\n '@click': handleClick,\n '@keydown': (event: Event) => {\n if (event instanceof KeyboardEvent) handleKeydown(event);\n },\n '@focusin': handleFocus,\n },\n ]});\n },\n open(value: string): void {\n bridge.send({type: 'OPEN', value});\n },\n close(value: string): void {\n bridge.send({type: 'CLOSE', value});\n },\n toggle(value: string, event?: Event): void {\n const item = itemForValue(value);\n if (item) handleToggle(item, event);\n },\n isOpen(value: string): boolean {\n return this.snapshot.current?.context.selection.values.includes(value) ?? false;\n },\n };\n\n return component;\n};\n\nconst registerAccordion = defineAlpineData('UiAccordion', UiAccordion);\n\nexport {registerAccordion, UiAccordion};\nexport type {AccordionData, AccordionMode, AccordionTransition, UiAccordionApi};\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 {registerMotionCapability} from '../../capabilities/motion';\nimport {registerAccordion as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerAccordion = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerAccordion};\nexport default registerAccordion;\nexport * from './index';\n"],"mappings":"ymBAGA,IAAM,EAAkB,CAAC,SAAU,UAAU,EACvC,EAAyB,EACzB,EAA2B,CAAC,WAAY,SAAS,EACjB,CAAY,GAAG,CAAwB,EAC7E,IAAM,EAAuB,EACK,CAAY,GAAG,CAAoB,EAErE,IAAM,EAAkB,CACpB,KAAM,EAAM,EAAiB,QAAQ,EACrC,QAAS,EACT,YAAa,EACb,SAAU,EACV,YAAa,EAAM,EAAwB,UAAU,EACrD,aAAc,EACd,cAAe,EACf,MAAO,EACP,OAAQ,EACR,KAAM,EAAK,QAAQ,EAAI,EACvB,aAAc,EAAM,EAA0B,UAAU,EACxD,UAAW,EAAM,EAAsB,IAAI,EAC3C,MAAO,CACX,ECoCM,EAAiB,CA5BH,EAAW,CAC3B,KAAM,UACN,MAAO,WACP,YAAc,GAAa,EAAS,QAAQ,OAAO,cAAc,IAAK,IAAW,CAAC,OAAK,EAAE,EACzF,OAAQ,cACR,QAAS,eACT,MAAO,CACH,KAAO,IAAmB,CAAC,KAAM,OAAQ,OAAK,GAC9C,MAAQ,IAAmB,CAAC,KAAM,QAAS,OAAK,GAChD,OAAS,IAAmB,CAAC,KAAM,SAAU,OAAK,GAClD,UAAY,IAAsB,CAAC,KAAM,aAAc,QAAM,EACjE,CACJ,CAgBwB,EAdJ,EAAW,CAC3B,KAAM,UACN,MAAO,WACP,YAAc,GAAa,EAAS,QAAQ,OAAO,cAAc,IAAK,IAAW,CAAC,OAAK,EAAE,EACzF,OAAQ,cACR,QAAS,eACT,MAAO,CACH,KAAO,IAAmB,CAAC,KAAM,OAAQ,OAAK,GAC9C,MAAQ,IAAmB,CAAC,KAAM,QAAS,OAAK,GAChD,OAAS,IAAmB,CAAC,KAAM,SAAU,OAAK,GAClD,UAAY,IAAsB,CAAC,KAAM,aAAc,QAAM,EACjE,CACJ,CAEqC,CAAW,EAE1C,EAAe,GAA2B,OAAO,GAAU,SAAW,EAAQ,GAC9E,EAAgB,GAA6B,MAAM,QAAQ,CAAK,EAChE,EAAM,OAAQ,GAAyB,OAAO,GAAS,QAAQ,EAC/D,CAAC,EACD,EAAe,GAA4B,EAAM,MAAM,GAAG,EAAE,IAAK,GAAS,EAAK,KAAK,CAAC,EAAE,OAAO,OAAO,EACrG,GAAc,EAAyB,IACzC,EAAK,SAAW,EAAM,QAAU,EAAK,OAAO,EAAO,IAAU,IAAU,EAAM,EAAM,EAGjF,GACF,EACA,EACA,IACW,CACX,IAAM,EAAY,IAAI,IAAI,EAAO,OAAQ,GAAU,EAAW,OAAO,SAAS,CAAK,CAAC,CAAC,EAC/E,EAAU,EAAW,OAAO,OAAQ,GAAU,EAAU,IAAI,CAAK,CAAC,EACxE,OAAO,EAAM,OAAS,SAAW,EAAQ,MAAM,EAAG,CAAC,EAAI,CAC3D,EAEM,EAAoB,GACtB,EAAM,OAAS,WAAa,EAAY,EAAM,QAAU,EAAM,KAAK,EAAI,EAAM,MAAQ,CAAC,EAAM,KAAK,EAAI,CAAC,EAGpG,EAAa,GACf,EAAkC,EAAM,KAAK,GAAG,OAAS,EAAM,MAG7D,EACF,GAEI,EAAM,MAAM,OAAS,gBAClB,CACH,OAAQ,EAAa,EAAM,MAAM,MAAM,EACvC,eAAgB,EAAa,EAAM,MAAM,cAAc,CAC3D,EAJiD,EAAM,QAAQ,WAO7D,GACF,EACA,EACA,IACW,CACX,IAAM,EAAU,EAAM,QAAQ,UAAU,OAClC,EAAQ,EAAY,EAAM,MAAM,KAAK,EAC3C,OAAQ,EAAM,MAAM,KAApB,CACI,IAAK,OAED,MADI,CAAC,GAAS,EAAW,eAAe,SAAS,CAAK,EAAU,EACzD,EAAM,OAAS,SAAW,CAAC,CAAK,EAAI,CAAC,GAAG,EAAS,CAAK,EACjE,IAAK,QAMD,MAJI,CAAC,GACE,EAAW,eAAe,SAAS,CAAK,GACvC,EAAM,OAAS,UAAY,CAAC,EAAM,aAAe,EAAQ,SAAS,CAAK,EACtE,EACF,EAAQ,OAAQ,GAAS,IAAS,CAAK,EAClD,IAAK,SAID,MAHI,CAAC,GAAS,EAAW,eAAe,SAAS,CAAK,EAAU,EAC3D,EAAQ,SAAS,CAAK,EACvB,EAAM,OAAS,UAAY,CAAC,EAAM,YAAoB,EACnD,EAAQ,OAAQ,GAAS,IAAS,CAAK,EAFT,EAAM,OAAS,SAAW,CAAC,CAAK,EAAI,CAAC,GAAG,EAAS,CAAK,EAG/F,IAAK,aACD,OAAO,EAAa,EAAM,MAAM,MAAM,EAC1C,IAAK,gBAED,OADI,EAA6B,EAAM,MAAO,QAAS,QAAQ,EAAU,EAAiB,CAAK,EACxF,EACX,IAAK,gBACD,OAAO,EACX,QACI,OAAO,CACf,CACJ,EAEM,EAAc,GAAoE,CACpF,IAAM,EAAQ,EAAU,CAAK,EACvB,EAAa,EAAe,CAAK,EACvC,OAAO,EAAgB,EAAgB,EAAO,EAAO,CAAU,EAAG,EAAO,CAAU,CACvF,EAEM,EAAoB,GACtB,EACI,CAAC,OAAQ,QAAS,SAAU,YAAY,EAAE,SAAS,EAAM,MAAM,IAAI,GAChE,EAAM,MAAM,WACd,CAAC,EAAW,EAAM,QAAQ,UAAU,OAAQ,EAAW,CAAK,CAAC,EAGhE,GAA0B,CAC5B,QACA,UACA,aAC4E,EAAgD,CAC5H,QAAS,SACT,OAAQ,CACJ,OAAQ,CACJ,KAAM,CAAC,QAAQ,EACf,GAAI,CACA,KAAM,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EACnG,MAAO,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EACpG,OAAQ,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EACrG,WAAY,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EACzG,cAAe,CACX,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EAC7F,CAAC,OAAQ,YAAa,QAAS,WAAW,CAC9C,EACA,cAAe,CACX,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EAC7F,CAAC,OAAQ,YAAa,QAAS,WAAW,CAC9C,CACJ,CACJ,EACA,SAAU,CACN,KAAM,CAAC,WAAY,eAAe,EAClC,GAAI,CACA,YAAa,CAAC,OAAQ,SAAU,QAAS,cAAc,EACvD,aAAc,CAAC,OAAQ,SAAU,QAAS,cAAc,EACxD,KAAM,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EACnG,MAAO,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EACpG,OAAQ,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EACrG,WAAY,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EACzG,cAAe,CACX,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EAC7F,CAAC,OAAQ,YAAa,QAAS,WAAW,CAC9C,EACA,cAAe,CACX,CAAC,OAAQ,WAAY,MAAO,EAAkB,OAAQ,cAAe,QAAS,eAAe,EAC7F,CAAC,OAAQ,YAAa,QAAS,WAAW,CAC9C,CACJ,CACJ,CACJ,CACJ,EAAG,CACC,UACA,QACA,SAAU,CACN,YAAc,GAAU,CACpB,IAAM,EAAS,EAAW,CAAK,EACzB,EAAW,EAAM,QAAQ,UAAU,OACzC,MAAO,CACH,MAAO,EAAU,CAAK,EACtB,QAAS,CACL,GAAG,EAAM,QACT,UAAW,CAAC,QAAM,EAClB,OAAQ,CACJ,cAAe,EAAO,OAAQ,GAAU,CAAC,EAAS,SAAS,CAAK,CAAC,EACjE,cAAe,EAAS,OAAQ,GAAU,CAAC,EAAO,SAAS,CAAK,CAAC,CACrE,EACA,WAAY,EAAe,CAAK,CACpC,CACJ,CACJ,EACA,UAAY,IAAW,CACnB,MAAO,EAAU,CAAK,EACtB,QAAS,CACL,GAAG,EAAM,QACT,WAAY,EAAe,CAAK,EAChC,UAAW,CAAC,OAAQ,EAAW,CAAK,CAAC,CACzC,CACJ,EACJ,EACA,QAAS,CACL,cAAe,EAAQ,cACvB,aAAc,EAAQ,aACtB,UAAW,EAAQ,UACnB,UAAW,EAAQ,SACvB,CACJ,CAAC,EChOK,EAAkB,EAAa,CAAC,WAAY,CAC9C,UAAW,eACX,MAAO,CACH,KAAM,CACF,KAAM,4BACN,SAAU,CACN,YAAa,CACT,SAAU,GACV,WAAY,wCAChB,CACJ,EACA,SAAU,CACN,YAAa,UACjB,CACJ,EACA,KAAM,CACF,KAAM,2FACV,EACA,QAAS,CACL,KAAM,wBACV,EACA,QAAS,CACL,KAAM,CACF,kHACA,8DACA,8BACA,4DACJ,CACJ,EACA,aAAc,CACV,KAAM,gBACV,EACA,KAAM,CACF,KAAM,2CACV,EACA,QAAS,CACL,KAAM,gDACV,EACA,aAAc,CACV,KAAM,wBACV,CACJ,CACJ,CAAC,CAAC,EC6BI,EAAe,GAA4B,EAAM,MAAM,GAAG,EAAE,IAAK,GAAS,EAAK,KAAK,CAAC,EAAE,OAAO,OAAO,EACrG,EAAY,GAAqC,EAAO,OAAS,SACjE,EAAc,GAA0B,EAAM,KAAK,EAAE,QAAQ,mBAAoB,GAAG,GAAK,OAEzF,MAA2D,CAC7D,IAAI,EAA+D,KAC/D,EAA0C,KAC1C,EAA0C,KAC1C,EAAS,GAAwB,EAE/B,MAA0D,CAC5D,GAAI,CAAC,EAAQ,MAAU,MAAM,qCAAqC,EAClE,OAAO,CACX,EAEM,EAAQ,GAA8B,EAAQ,QAAQ,qBAAqB,IAAM,EAAK,EAEtF,MAAqC,MAAM,KAC7C,EAAK,EAAE,iBAA8B,0BAA0B,CACnE,EAAE,OAAO,CAAI,EAAE,KAAK,EAAM,IAAU,CAChC,IAAM,EAAU,EAAK,cAA2B,6BAA6B,EACvE,EAAU,EAAK,cAA2B,6BAA6B,EAG7E,MAFI,EAAE,aAAmB,oBAAsB,CAAC,GAAW,CAAC,EAAK,CAAO,GAAK,CAAC,EAAK,CAAO,EAAU,MACpG,EAAK,QAAQ,QAAU,QAAQ,EAAQ,IAChC,CACH,OACA,QAAS,EAAK,cAA2B,6BAA6B,EACtE,UACA,UACA,MAAO,EAAK,QAAQ,MACpB,SAAU,EAAO,CAAC,MAAO,EAAK,QAAQ,YAAY,CAAC,CACvD,EACJ,CAAC,EAAE,OAAQ,GAAsC,IAAS,IAAI,EAExD,EAAgB,GAClB,EAAM,EAAE,KAAM,GAAS,EAAK,QAAU,CAAK,GAAK,KAG9C,EAAY,GAA2D,CACzE,GAAI,EAAE,aAAkB,SAAU,OAAO,KACzC,IAAM,EAAS,EAAO,QAAqB,0BAA0B,EACrE,OAAO,GAAU,EAAK,CAAM,EAAI,EAAM,EAAE,KAAM,GAAS,EAAK,OAAS,CAAM,GAAK,KAAO,IAC3F,EAEM,MAA0D,CAC5D,IAAM,EAAU,EAAM,EACtB,MAAO,CACH,OAAQ,EAAQ,IAAK,GAAS,EAAK,KAAK,EACxC,eAAgB,EAAQ,OAAQ,GAAS,EAAK,QAAQ,EAAE,IAAK,GAAS,EAAK,KAAK,CACpF,CACJ,EAEM,GACF,EACA,EACA,IACW,CACX,IAAM,EAAY,IAAI,IAAI,CAAM,EAC1B,EAAU,EAAW,OAAQ,GAAU,EAAU,IAAI,CAAK,CAAC,EACjE,OAAO,EAAM,OAAS,SAAW,EAAQ,MAAM,EAAG,CAAC,EAAI,CAC3D,EAEM,EAAkB,GAA4C,CAChE,IAAM,EAAkB,EAAkB,EACpC,EAAa,EAAM,OAAS,WAC5B,EAAY,EAAM,QAAU,EAAM,KAAK,EACvC,EAAM,MAAQ,CAAC,EAAM,KAAK,EAAI,CAAC,EAC/B,EAAW,EAAM,OAAS,WAC1B,EAAY,EAAM,aAAa,EAC/B,EAAM,aAAe,CAAC,EAAM,YAAY,EAAI,CAAC,EAC7C,EAAW,EAAM,EAAE,OAAQ,GAAS,EAAO,CAAC,MAAO,EAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,IAAK,GAAS,EAAK,KAAK,EAE3G,MAAO,CACH,UAAW,CAAC,OAAQ,EAFN,EAAW,OAAS,EAAI,EAAa,EAAS,OAAS,EAAI,EAAW,EAE3C,EAAO,EAAgB,MAAM,CAAC,EACvE,OAAQ,CAAC,cAAe,CAAC,EAAG,cAAe,CAAC,CAAC,EAC7C,WAAY,CAChB,CACJ,EAEM,MAA+C,EAAO,qBAAqB,EAAE,MAC7E,MAAmD,EAAO,qBAAqB,EAAE,QAEjF,EAAc,GAAuC,EAAe,EAAE,UAAU,OAAO,SAAS,EAAK,KAAK,EAC1G,EAAkB,GAAuC,EAAa,EAAE,UAAY,EAAK,SACzF,EAAe,GACjB,EAAa,EAAE,OAAS,YAAc,EAAa,EAAE,aAAe,CAAC,EAAW,CAAI,EAGlF,MAAuB,CACzB,IAAM,EAAQ,EAAa,EACrB,EAAS,EAAe,EAAE,UAAU,OAC1C,EAAkB,CACd,GAAI,EAAK,EACT,OAAQ,EACR,IAAK,QACL,MAAO,EAAM,OAAS,SAAW,EAAO,IAAM,GAAK,EACvD,CAAC,EACD,EAAkB,CACd,GAAI,EAAK,EACT,OAAQ,EACR,IAAK,SACL,MAAO,EAAM,OAAS,WAAa,EAAO,KAAK,GAAG,EAAI,EAC1D,CAAC,EACD,EAAK,EAAE,QAAQ,YAAc,EAAM,YACnC,EAAK,EAAE,QAAQ,aAAe,EAAM,aACpC,EAAK,EAAE,QAAQ,KAAO,EAAM,KACxB,EAAM,SAAU,EAAK,EAAE,aAAa,gBAAiB,EAAE,EACtD,EAAK,EAAE,gBAAgB,eAAe,CAC/C,EAEI,EAEE,EAAY,GAAoC,CAClD,IAAM,EAAQ,EAAa,EACrB,EAAO,EAAW,CAAI,EACtB,EAAQ,EAAS,CAAI,EACrB,EAAW,EAAe,CAAI,EAC9B,EAAU,EAAO,OAAO,UAAU,GAAK,EAAe,EAAE,OAAO,cAAc,SAAS,EAAK,KAAK,EAEtG,EAAK,KAAK,QAAQ,MAAQ,EAC1B,EAAK,KAAK,QAAQ,YAAc,EAAM,YACtC,EAAK,KAAK,UAAY,EAAa,CAC/B,KAAM,EAAgB,MAAM,KAC5B,QACA,UAAW,EAAK,KAAK,QAAQ,OAAS,EAC1C,CAAC,EACD,EAAK,SAAS,aAAa,aAAc,CAAK,EAC9C,EAAK,SAAS,aAAa,mBAAoB,EAAM,WAAW,EAEhE,IAAM,EAAS,EAAW,EAAK,KAAK,EACpC,EAAK,QAAQ,KAAO,EAAM,qBAAqB,GAAQ,EACvD,EAAK,QAAQ,KAAO,EAAM,qBAAqB,GAAQ,EACvD,EAAK,QAAQ,KAAO,SACpB,EAAK,QAAQ,QAAQ,MAAQ,EAC7B,EAAK,QAAQ,QAAQ,YAAc,EAAM,YACzC,EAAK,QAAQ,UAAY,EAAa,CAClC,KAAM,EAAgB,MAAM,QAC5B,QACA,UAAW,EAAK,QAAQ,QAAQ,OAAS,EAC7C,CAAC,EACD,EAAK,QAAQ,aAAa,gBAAiB,EAAO,OAAS,OAAO,EAClE,EAAK,QAAQ,aAAa,gBAAiB,EAAK,QAAQ,EAAE,EAC1D,EAAK,QAAQ,QAAQ,MAAQ,EAC7B,EAAK,QAAQ,QAAQ,YAAc,EAAM,YACzC,EAAK,QAAQ,aAAa,kBAAmB,EAAK,QAAQ,EAAE,EAC5D,EAAK,QAAQ,OAAS,CAAC,GAAQ,CAAC,EAEhC,CAAC,EAAK,KAAM,EAAK,QAAS,EAAK,QAAS,EAAK,OAAO,EAAE,QAAS,GAAY,CAClE,IACD,EAAU,EAAQ,aAAa,gBAAiB,EAAE,EACjD,EAAQ,gBAAgB,eAAe,EAChD,CAAC,EACD,EAAK,QAAQ,SAAW,EACpB,GAAa,GAAQ,CAAC,EAAY,CAAI,EAAI,EAAK,QAAQ,aAAa,gBAAiB,MAAM,EAC1F,EAAK,QAAQ,gBAAgB,eAAe,CACrD,EAEM,MAAsB,CACxB,EAAS,EACT,EAAM,EAAE,QAAQ,CAAQ,CAC5B,EAEM,MAAyB,CAC3B,IAAM,EAAS,CAAC,GAAG,EAAe,EAAE,UAAU,MAAM,EACpD,EAAS,CAAC,GAAI,EAAK,EAAG,KAAM,YAAa,OAAQ,CAC7C,MAAO,EAAa,EAAE,OAAS,SAAW,EAAO,IAAM,GAAK,GAC5D,QACJ,CAAC,CAAC,CACN,EAEM,EAAS,EAAoB,CAC/B,OAAQ,EACR,MAAO,EACP,0BAA2B,CAAC,UAAU,CAClC,IAAM,EAAS,EAAiC,MAChD,OAAO,EAAa,CAAK,GAAG,SAAW,IAC3C,EACA,eAAgB,CAAC,WAAW,EAAuB,CAC/C,QACA,QAAS,EAAe,CAAK,EAC7B,QAAS,CACL,kBAAqB,CACjB,EAAQ,EACR,EAAW,CACf,EACA,iBAAoB,CAChB,EAAQ,CACZ,EACA,UAAW,EACX,UAAW,CACf,CACJ,CAAC,CACL,CAAC,EAEK,MAA4C,CAC9C,GAAI,CAAC,EAAY,MAAU,MAAM,gDAAgD,EACjF,OAAO,CACX,EAEM,MAA+B,CACjC,IAAM,EAAO,EAAkB,EAC/B,EAAO,KAAK,CAAC,KAAM,gBAAiB,GAAG,CAAI,CAAC,CAChD,EAEM,GAAgB,EAA2B,IAAwB,CACrE,GAAO,eAAe,EAClB,GAAe,CAAI,GACvB,EAAO,KAAK,CAAC,KAAM,SAAU,MAAO,EAAK,MAAO,OAAQ,EAAE,aAAiB,cAAc,CAAC,CAC9F,EAEM,EAAe,GAAuB,CACxC,IAAM,EAAO,EAAS,EAAM,MAAM,EAC9B,CAAC,GAAQ,EAAE,EAAM,kBAAkB,OAAS,CAAC,EAAK,QAAQ,SAAS,EAAM,MAAM,GACnF,EAAa,EAAM,CAAK,CAC5B,EAEM,EAAiB,GAA+B,CAClD,IAAM,EAAO,EAAS,EAAM,MAAM,EAC9B,MAAC,GAAQ,EAAM,SAAW,EAAK,SACnC,IAAI,EAAM,MAAQ,SAAW,EAAM,MAAQ,IAAK,CAC5C,EAAa,EAAM,CAAK,EACxB,MACJ,CACA,GAAI,EAAM,MAAQ,OAAQ,CACtB,EAAM,eAAe,EACrB,EAAc,EAAE,WAAW,EAC3B,MACJ,CACA,GAAI,EAAM,MAAQ,MAAO,CACrB,EAAM,eAAe,EACrB,EAAc,EAAE,UAAU,EAC1B,MACJ,CACA,GAAI,EAAa,EAAE,cAAgB,WAAY,CACvC,EAAM,MAAQ,aACd,EAAM,eAAe,EACrB,EAAc,EAAE,UAAU,GACnB,EAAM,MAAQ,YACrB,EAAM,eAAe,EACrB,EAAc,EAAE,cAAc,GAElC,MACJ,CACI,EAAM,MAAQ,cACd,EAAM,eAAe,EACjB,EAAM,CAAC,GAAI,EAAK,CAAC,CAAC,EAAG,EAAc,EAAE,cAAc,EAClD,EAAc,EAAE,UAAU,GACxB,EAAM,MAAQ,cACrB,EAAM,eAAe,EACjB,EAAM,CAAC,GAAI,EAAK,CAAC,CAAC,EAAG,EAAc,EAAE,UAAU,EAC9C,EAAc,EAAE,cAAc,EA5BvC,CA8BJ,EAEM,EAAe,GAAuB,CACxC,IAAM,EAAO,EAAS,EAAM,MAAM,EAC9B,GAAQ,EAAM,SAAW,EAAK,SAAW,CAAC,EAAe,CAAI,GAC7D,EAAc,EAAE,aAAa,CAAC,GAAI,EAAK,OAAO,CAAC,CAEvD,EAEM,MAA4B,CAC9B,EAAqB,EAAuB,CACxC,QAAS,EAAK,EACd,KAAM,EACN,SAAU,EACV,SAAU,CACN,UAAW,GACX,QAAS,GACT,WAAY,GACZ,gBAAiB,CAAC,aAAc,oBAAoB,CACxD,CACJ,CAAC,CACL,EA6DA,MA3DA,GAAY,CACR,GAAG,EACH,IAAI,OAAgB,CAChB,OAAO,EAAa,EAAE,OAAS,SAAW,KAAK,SAAS,SAAS,QAAQ,UAAU,OAAO,IAAM,GAAK,EACzG,EACA,IAAI,QAA4B,CAC5B,MAAO,CAAC,GAAG,KAAK,SAAS,SAAS,QAAQ,UAAU,QAAU,CAAC,CAAC,CACpE,EACA,MAAa,CACT,EAAS,KAAK,IACd,EAAQ,KAAK,IAAI,KAAK,IAAI,EAC1B,EAAO,QAAQ,KAAK,IAAK,KAAK,QAAQ,EACtC,EAAa,EAA2B,CACpC,OACA,aAAc,8BACd,WAAa,GAAO,EAAG,aAAa,UAAU,EAC9C,SAAY,EAAa,EAAE,IAC/B,CAAC,EACD,EAAQ,EACR,EAAc,CAClB,EACA,SAAgB,CACZ,IAAqB,EACrB,EAAqB,KACrB,EAAO,WAAW,EAClB,EAAa,KACb,EAAS,IACb,EACA,IAAI,MAAsB,CACtB,IAAM,EAAQ,KAAK,SAAS,SAAS,OAAS,EAAa,EAC3D,OAAO,EAAc,CAAC,OAAQ,CAC1B,EAAa,CAAC,KAAM,EAAgB,MAAM,KAAM,QAAO,UAAW,EAAM,KAAK,CAAC,EAC9E,CACI,oBAAqB,GACrB,wBAA2B,EAAa,EAAE,YAC1C,qBAAwB,EAAa,EAAE,SAAW,GAAK,IAAA,GACvD,SAAU,EACV,WAAa,GAAiB,CACtB,aAAiB,eAAe,EAAc,CAAK,CAC3D,EACA,WAAY,CAChB,CACJ,CAAC,CAAC,CACN,EACA,KAAK,EAAqB,CACtB,EAAO,KAAK,CAAC,KAAM,OAAQ,OAAK,CAAC,CACrC,EACA,MAAM,EAAqB,CACvB,EAAO,KAAK,CAAC,KAAM,QAAS,OAAK,CAAC,CACtC,EACA,OAAO,EAAe,EAAqB,CACvC,IAAM,EAAO,EAAa,CAAK,EAC3B,GAAM,EAAa,EAAM,CAAK,CACtC,EACA,OAAO,EAAwB,CAC3B,OAAO,KAAK,SAAS,SAAS,QAAQ,UAAU,OAAO,SAAS,CAAK,GAAK,EAC9E,CACJ,EAEO,CACX,EAEM,EAAoB,EAAiB,cAAe,CAAW,ECpZ/D,EAAa,IAAI,QAEjB,EAAqB,GAAqC,CACxD,EAAW,IAAI,CAAc,IACjC,EAAW,IAAI,CAAc,EAC7B,EAAyB,CAAc,EACvC,EAAkB,CAAc,EACpC"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./capability-motion-C_8mc71v.js";import{c as t,f as n,l as r,n as i,o as a,s as o,u as s}from"./codecs-Cb1ns_47.js";import{t as c}from"./fragment-Bl3Rq38L.js";import{t as l}from"./alpine-data-CytyCyfk.js";import{n as u,r as d,t as f}from"./virtual-window-BHdOw3Pi.js";import{t as p}from"./drag-and-drop-DHq3udf7.js";import{t as m}from"./capability-sortable-Ds2wQEQq.js";import{E as h,v as g}from"./common-BOd_thC-.js";import{t as _}from"./capability-resizable-Bga8TngJ.js";var v=[`none`,`single`,`multiple`],y=[`compact`,`default`,`comfortable`],b=[`none`,`row`,`grid`],x=[`onChange`,`onEnd`],S=[``,`left`,`right`],C=[`none`,`ascending`,`descending`,`other`],w=[`start`,`center`,`end`],T={fetchUrl:n,totalRows:t.min(0).default(0),rowHeight:t.min(2**-52).default(36),bufferSize:t.min(1).default(50),overscan:t.min(0).default(0),initialIndex:t.min(0).default(0),startParam:n.default(`start`),countParam:n.default(`count`),totalParam:n.default(`total`),totalHeader:n.default(`X-Trellis-Total-Items`),assetsHeader:n.default(`X-Trellis-Assets`),metaSelector:n.default(`template[data-ui-virtualizer-meta]`),selection:r(v,`none`),selectionValue:o({mode:`ids`,ids:[]}),selectOnRowClick:i,rowKey:n.default(`id`),stickyHeader:i.default(!0),resizableColumns:i.default(!0),reorderableColumns:i.default(!0),sortableColumns:i.default(!0),minColumnWidth:t.min(0).default(60),defaultColumnWidth:t.min(2**-52).default(180),maxColumnWidth:o(null),resizeMode:r(x,`onChange`),color:r(h,`neutral`),interaction:r(g,`edge`),dragPreviewPosition:n.trim.default(`preserve`),density:r(y,`default`),border:r(b,`row`),empty:n.default(`No rows found.`),class:n,controlsClass:n,viewportClass:n,headerClass:n,rowClass:n,cellClass:n,footerClass:n,emptyClass:n};t.min(2**-52).default(180),t.min(0).default(60),o(null),r(S,``),r(C,`none`),i.default(!0),i.default(!0),r(w,`start`),o([]),o([]),t.min(0).default(0),n.default(`id`),n.default(`ui.data-grid.row`),n.default(`ui.data-grid.cell`),t.min(0).default(0),t.min(1).default(1),r(w,`start`);var E=(e,t,n)=>{let r=e.getAttribute(t);if(r===null||r.trim()===``)return n;let i=Number(r);return Number.isFinite(i)?i:n},D=(e,t,n)=>{let r=e.getAttribute(t);if(r===null||r.trim()===``)return n;let i=Number(r);return Number.isFinite(i)&&i>0?i:null},O=(e,t,n)=>{if(!e.hasAttribute(t))return n;let r=e.getAttribute(t)??``;return r===``||[`true`,`1`,`yes`,`on`].includes(r.toLowerCase())},ee=(e,t)=>{let n=new Set;return e.flatMap(e=>{let r=(e.dataset.column??``).trim();if(!r)throw Error(`Data Grid columns require a non-empty key.`);if(e.hasAttribute(`data-hidden`))return[];if(n.has(r))throw Error(`Data Grid column key "${r}" is duplicated.`);n.add(r);let i=Math.max(0,E(e,`data-min-width`,t.minWidth)),a=D(e,`data-max-width`,t.maxWidth),o=E(e,`data-width`,t.width),s=Math.min(a??1/0,Math.max(i,o)),c=e.dataset.pinned===`left`||e.dataset.pinned===`right`?e.dataset.pinned:null,l=[`ascending`,`descending`,`other`].includes(e.dataset.sort??``)?e.dataset.sort:`none`,u=[`center`,`end`].includes(e.dataset.align??``)?e.dataset.align:`start`;return[{key:r,label:e.dataset.label??e.textContent?.trim()??r,width:s,minWidth:i,maxWidth:a,hidden:!1,pinned:c,sortable:O(e,`data-sortable`,!1),sort:l,resizable:O(e,`data-resizable`,t.resizable),reorderable:O(e,`data-reorderable`,t.reorderable),align:u,cellClass:e.dataset.cellClass??``,element:e}]})},te=e=>e.map(({width:e})=>`${e}px`).join(` `),k=e=>{let t=new Map,n=new Map,r=0;return e.forEach(e=>{e.pinned===`left`&&(t.set(e.key,r),r+=e.width)}),r=0,[...e].reverse().forEach(e=>{e.pinned===`right`&&(n.set(e.key,r),r+=e.width)}),{left:t,right:n}},A=e=>globalThis.CSS?.escape?globalThis.CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`),j=(e,t)=>{let n=k(t);return t.map((t,r)=>{let i=`[data-ui-data-grid-scope="${A(e)}"]`,a=`[data-column="${A(t.key)}"]`,o=`${i} [data-ui-data-grid-column-header]${a},${i} [data-ui-data-grid-cell]${a}`,s=t.pinned===`left`?`position:sticky;left:${n.left.get(t.key)??0}px;z-index:2;`:t.pinned===`right`?`position:sticky;right:${n.right.get(t.key)??0}px;z-index:2;`:``;return`${o}{grid-column:${r+1};${s}}`}).join(``)},M=(e,t)=>{if(t===`multiple`&&typeof e==`object`&&e&&e.mode===`query`){let t=e;if(typeof t.token==`string`&&Number.isFinite(t.total))return{mode:`query`,token:t.token,total:Math.max(0,Math.floor(t.total??0)),except:[...new Set(Array.isArray(t.except)?t.except.filter(e=>typeof e==`string`):[])]}}let n=typeof e==`object`&&e&&e.mode===`ids`&&Array.isArray(e.ids)?e.ids.filter(e=>typeof e==`string`):[],r=[...new Set(n)];return{mode:`ids`,ids:t===`single`?r.slice(0,1):t===`none`?[]:r}},N=(e,t)=>e.mode===`query`?!e.except.includes(t):e.ids.includes(t),P=(e,t,n,r)=>{let i=M(e,n);if(n===`none`)return{selection:i,added:[],removed:[]};let a=N(i,t),o=r??!a;if(a===o)return{selection:i,added:[],removed:[]};if(i.mode===`query`){let e=o?i.except.filter(e=>e!==t):[...i.except,t];return{selection:{...i,except:e},added:o?[t]:[],removed:o?[]:[t]}}return{selection:{mode:`ids`,ids:n===`single`&&o?[t]:o?[...i.ids,t]:i.ids.filter(e=>e!==t)},added:o?[t]:[],removed:o?[]:[t]}},F=(e,t,n)=>{let r=e.findIndex(e=>e.key===t);if(r<0||!e[r]?.reorderable)return null;let i=e[r]?.pinned??null;if(!e.flatMap((e,t)=>e.pinned===i?[t]:[]).includes(n))return null;let a=[...e],[o]=a.splice(r,1);return o?(a.splice(n,0,o),a):null},I=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),L=`a,button,input,select,textarea,[contenteditable],[role="button"],[role="link"]`,R=e=>{let t=null,n=null,r=null,i=null,o=null,l=[],m=[],h=0,g={mode:`ids`,ids:[]},_=``,v=null,y=0,b=0,x=!1,S=null,C=!1,w=new Map,E=[],D=f(u),O=(e,n)=>{t?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:n}))},k=(e,t)=>{let n=t.split(/\s+/).filter(Boolean);n.length&&e.classList.add(...n)},A=()=>Array.from(t?.querySelectorAll(`[data-ui-data-grid-row]`)??[]),R=()=>{A().forEach(e=>{let t=e.dataset.rowKey??``,n=$.props.selection!==`none`&&t!==``&&N(g,t);e.toggleAttribute(`data-selected`,n),$.props.selection===`none`?e.removeAttribute(`aria-selected`):e.setAttribute(`aria-selected`,String(n))})},z=()=>{if(!t||!o)return;t.style.setProperty(`--ui-data-grid-template`,te(l));let e=t.dataset.uiDataGridScope??``;o.textContent=j(e,l),r?.setAttribute(`aria-colcount`,String(l.length));let n=t.querySelector(`[data-ui-data-grid-header-row]`);l.forEach(e=>n?.append(e.element));let i=n?.querySelector(`[data-ui-data-grid-column-indicator]`);i&&n?.append(i),A().forEach(e=>{let t=new Map(Array.from(e.children).flatMap(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ui-data-grid-cell`)?[[e.dataset.column??``,e]]:[]));l.forEach(({key:n})=>{let r=t.get(n);r&&e.append(r)})}),l.forEach((e,t)=>{e.element.setAttribute(`aria-colindex`,String(t+1)),e.element.dataset.pinned=e.pinned??``,e.element.toggleAttribute(`data-pinned`,e.pinned!==null)}),A().forEach(e=>k(e,$.props.rowClass)),t.querySelectorAll(`[data-ui-data-grid-cell]`).forEach(e=>{let t=l.findIndex(({key:t})=>t===e.dataset.column);if(t>=0){let n=l[t];e.setAttribute(`aria-colindex`,String(t+1)),k(e,$.props.cellClass),k(e,n.cellClass),n.pinned?e.dataset.pinned=n.pinned:e.removeAttribute(`data-pinned`)}})},B=()=>{!t||!i||(t.toggleAttribute(`data-loading`,b>0),t.toggleAttribute(`data-empty`,h===0),t.dataset.selection=$.props.selection,r?.setAttribute(`aria-rowcount`,String(h+1)),t.style.setProperty(`--ui-data-grid-row-height`,`${$.props.rowHeight}px`),t.style.setProperty(`--ui-data-grid-total-height`,`${Math.max(h*$.props.rowHeight,$.props.rowHeight)}px`),i.style.height=`var(--ui-data-grid-total-height)`,R())},V=e=>{let t=I(e);t!==h&&(h=t,B(),O(`ui:data-grid-total-change`,{totalRows:h}))},H=e=>u.compute({axes:{y:{total:h,itemSize:$.props.rowHeight,viewportSize:$.props.bufferSize*$.props.rowHeight,scrollOffset:e*$.props.rowHeight,buffer:0}}}),U=e=>{if(h===0)return[];let t=I($.props.bufferSize,1),n=Math.min(h-1,Math.floor(Math.max(0,e)/$.props.rowHeight)),r=Math.floor(n/t)*t,i=Math.floor((h-1)/t)*t,a=[r-t,r,r+t].map(e=>Math.min(i,Math.max(0,e)));return r===0&&i>t?a.splice(0,3,0,t,Math.min(i,t*2)):r===i&&i>t&&a.splice(0,3,Math.max(0,i-t*2),i-t,i),[...new Set(a)].map(H)},W=e=>{let t=e.axes.y;if(!t)throw Error(`Data Grid requires a vertical virtual window.`);let n=new URL($.props.fetchUrl,document.baseURI);return n.searchParams.set($.props.startParam,String(t.start)),n.searchParams.set($.props.countParam,String(t.count)),n.searchParams.set($.props.totalParam,String(t.total)),/^[a-z][a-z\d+.-]*:/i.test($.props.fetchUrl)||$.props.fetchUrl.startsWith(`//`)?n.href:`${n.pathname}${n.search}${n.hash}`},G=()=>{if(b=Math.max(0,b-1),B(),b>0||v===null||x)return;let e=v;v=null,q(e)},K=async(n,r,i)=>{let a=r.axes.y;if(!a)return;let o=new AbortController;w.set(n.key,o),b+=1,B(),t?.removeAttribute(`data-error`),O(`ui:data-grid-load-start`,{window:r});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,l=await fetch(W(r),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":s},signal:o.signal});if(!l.ok&&l.status!==204){D.fail(i),t?.setAttribute(`data-error`,``),O(`ui:data-grid-error`,{window:r,status:l.status});return}let u=await d(l,$.props);if(D.pending(n.key)!==i||x||!await c(e,n.element,u.html,{assets:u.assets,shouldReplace:()=>D.pending(n.key)===i&&!x})||(u.totalItems!==null&&V(u.totalItems),!D.commit(i,r)))return;n.element.style.height=`${a.count*$.props.rowHeight}px`,n.element.style.transform=`translateY(${a.translateOffset}px)`,z(),R(),O(`ui:data-grid-load`,{window:r,start:a.start,count:a.count,end:a.start+a.count})}catch(e){if(o.signal.aborted)return;D.fail(i),t?.setAttribute(`data-error`,``),O(`ui:data-grid-error`,{window:r,status:0,error:e})}finally{w.get(n.key)===o&&w.delete(n.key),G()}},q=t=>{if(b>0){v=t;return}let n=U(t),r=Math.min(Math.max(0,h-1),Math.floor(Math.max(0,t)/$.props.rowHeight)),i=n.find(e=>{let t=e.axes.y;return t&&r>=t.start&&r<t.start+t.count})??n[0];if(i&&_!==i.key){_=i.key;let e=i.axes.y;O(`ui:data-grid-range`,{start:e.start,count:e.count,end:e.start+e.count,window:i})}if(n.length===0){m.forEach(t=>void c(e,t.element,``));return}let a=new Set;n.forEach(e=>{let t=m.find(t=>D.mounted(t.key)?.key===e.key);t&&a.add(t)});let o=m.filter(e=>!a.has(e));n.forEach(e=>{if(m.some(t=>D.mounted(t.key)?.key===e.key))return;let t=o.shift();if(!t)return;let n=D.begin(t.key,e);n&&K(t,e,n)})},J=()=>{w.forEach(e=>e.abort()),w.clear(),b=0,v=null,_=``,D.invalidate(),m.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,c(e,t.element,``)}),B()},Y=(e,n)=>{g=M(e,$.props.selection),C=!0,$.props.selectionValue=g,t&&s({el:t,schema:T,key:`selectionValue`,value:g}),C=!1,R(),O(`ui:data-grid-selection-change`,{selection:g,added:n?.added??[],removed:n?.removed??[]})},X=(e,t)=>{let n=P(g,String(e),$.props.selection,t);n.added.length===0&&n.removed.length===0||Y(n.selection,n)},Z=(e,t,n)=>{e.width=Math.min(e.maxWidth??1/0,Math.max(e.minWidth,t)),z(),O(`ui:data-grid-column-resize`,{column:e.key,width:e.width,phase:n})},Q=()=>{E.splice(0).forEach(e=>e()),l.forEach(e=>{let t=e.element.querySelector(`[data-ui-data-grid-resize-handle]`);if(!t)return;let n=e.resizable&&$.props.resizableColumns;if(n?t.removeAttribute(`aria-disabled`):t.setAttribute(`aria-disabled`,`true`),t.tabIndex=n?0:-1,!n)return;let r=t=>Z(e,t.previewWidth,t.phase);E.push(p({element:e.element,handle:t,axis:`x`,min:e.minWidth,max:e.maxWidth,mode:$.props.resizeMode,disabled:()=>!$.props.resizableColumns||!e.resizable,onStart:r,onResize:r,onEnd:r}))})},$={props:null,init(){t=this.$el,x=!1;let e=globalThis.crypto?.randomUUID?.()??`grid-${Date.now()}-${Math.random().toString(36).slice(2)}`;if(t.dataset.uiDataGridScope=e,t.querySelector(`[data-ui-data-grid-header-row]`)?.setAttribute(`data-sortable-scope`,e),this.props=a({el:t,schema:T,onChange:(e,t)=>{if(C)return;let n=t.map(({key:e})=>e);(n.includes(`selectionValue`)||n.includes(`selection`))&&(g=M(this.props.selectionValue,this.props.selection),R()),n.includes(`resizableColumns`)&&Q(),n.includes(`totalRows`)?(V(this.props.totalRows),this.reload()):n.some(e=>[`fetchUrl`,`rowHeight`,`bufferSize`].includes(e))&&this.reload()}}),h=I(this.props.totalRows),g=M(this.props.selectionValue,this.props.selection),n=t.querySelector(`[data-ui-data-grid-viewport]`)??t.querySelector(`[data-ui-scroll-area-viewport]`),r=t.querySelector(`[data-ui-data-grid-inner]`),i=t.querySelector(`[data-ui-data-grid-spacer]`),o=t.querySelector(`style[data-ui-data-grid-layout]`),m=Array.from(t.querySelectorAll(`[data-ui-data-grid-block]`)).slice(0,3).map((e,t)=>({element:e,key:`block-${t+1}`})),!n||!r||!i||!o||m.length!==3)throw Error(`Data Grid requires one viewport, table owner, spacer, layout style, and three row blocks.`);n.setAttribute(`data-ui-data-grid-viewport`,``),l=ee(Array.from(t.querySelectorAll(`[data-ui-data-grid-column-header]`)),{width:this.props.defaultColumnWidth,minWidth:this.props.minColumnWidth,maxWidth:this.props.maxColumnWidth,resizable:this.props.resizableColumns,reorderable:this.props.reorderableColumns}),z(),Q(),S=new AbortController,n.addEventListener(`scroll`,()=>{y||=requestAnimationFrame(()=>{y=0,n&&q(n.scrollTop)})},{passive:!0,signal:S.signal}),t.addEventListener(`click`,e=>{let n=e.target,r=n.closest(`[data-ui-data-grid-sort-button]`);if(r&&this.props.sortableColumns){let t=r.closest(`[data-ui-data-grid-column-header]`),n=l.find(({key:e})=>e===t?.dataset.column);if(n?.sortable){let t=n.sort===`ascending`?`descending`:`ascending`;O(`ui:data-grid-sort`,{column:n.key,direction:t,additive:e.shiftKey})}return}let i=n.closest(`[data-ui-data-grid-row]`);if(!i||!t?.contains(i))return;let a=i.dataset.rowKey??``;this.props.selectOnRowClick&&!n.closest(L)&&X(a),O(`ui:data-grid-row-activate`,{rowKey:a,row:i})},{signal:S.signal}),t.addEventListener(`dblclick`,e=>{let t=e.target.closest(`[data-ui-data-grid-cell]`),n=t?.closest(`[data-ui-data-grid-row]`);t&&n&&O(`ui:data-grid-cell-activate`,{rowKey:n.dataset.rowKey??``,column:t.dataset.column??``,cell:t})},{signal:S.signal}),t.addEventListener(`ui:sortable-drop`,(e=>{let t=e.detail?.source;if(t?.type!==`data-grid-column`)return;let n=Number(e.detail?.index??e.detail?.anchor?.index);Number.isInteger(n)&&this.reorderColumn(String(t.id),n)}),{signal:S.signal}),n.style.overscrollBehavior=`contain`,n.style.overflowAnchor=`none`,n.scrollTop=u.scrollTo({total:h,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),B(),q(n.scrollTop)},destroy(){x=!0,y&&cancelAnimationFrame(y),S?.abort(),S=null,E.splice(0).forEach(e=>e()),J(),this.props.disconnect(),t=null,n=null,r=null,i=null,o=null,l=[],m=[]},scrollToIndex(e,t=`start`){n&&(n.scrollTop=u.scrollTo({total:h,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:n.scrollTop,buffer:this.props.bufferSize},{axis:`y`,index:e,align:t}),q(n.scrollTop))},setTotalRows(e){V(e),this.reload({scrollTop:n?.scrollTop??0})},setUrl(e,n={}){C=!0,this.props.fetchUrl=String(e),t&&s({el:t,schema:T,key:`fetchUrl`,value:String(e)}),C=!1,n.reset??!0?this.reset():this.reload()},reset(e={}){this.reload({scrollTop:e.scrollTop??0})},reload(e={}){let t=e.scrollTop??n?.scrollTop??0;J(),n&&(n.scrollTop=Math.max(0,t)),q(t)},resizeColumn(e,t){let n=l.find(t=>t.key===e);n&&Z(n,Number(t),`end`)},reorderColumn(e,t){let n=l.findIndex(t=>t.key===e),r=F(l,e,I(t));r&&(l=r,z(),O(`ui:data-grid-column-reorder`,{column:e,from:n,to:I(t),columns:l.map(({key:e})=>e)}))},selectRow(e){X(String(e),!0)},deselectRow(e){X(String(e),!1)},toggleRow(e){X(String(e))},setSelection(e){Y(e)},selectQuery(e,t,n=[]){Y({mode:`query`,token:String(e),total:I(t),except:n.map(String)})},clearSelection(){Y({mode:`ids`,ids:[]})}};return $},z=e=>{l(`UiDataGrid`,()=>R(e))(e)},B=new WeakSet,V=t=>{B.has(t)||(B.add(t),_(t),e(t),m(t),z(t))};export{R as n,V as t};
2
- //# sourceMappingURL=entry.generated-B7ROYMLZ.js.map
1
+ import{t as e}from"./capability-motion-C_8mc71v.js";import{c as t,f as n,l as r,n as i,o as a,s as o,u as s}from"./codecs-Cb1ns_47.js";import{t as c}from"./fragment-Bl3Rq38L.js";import{t as l}from"./alpine-data-CytyCyfk.js";import{n as u,r as d,t as f}from"./virtual-window-BHdOw3Pi.js";import{t as p}from"./drag-and-drop-DHq3udf7.js";import{t as m}from"./capability-sortable-aY5GWxrK.js";import{E as h,v as g}from"./common-fH2NGblC.js";import{t as _}from"./capability-resizable-Bga8TngJ.js";var v=[`none`,`single`,`multiple`],y=[`compact`,`default`,`comfortable`],b=[`none`,`row`,`grid`],x=[`onChange`,`onEnd`],S=[``,`left`,`right`],C=[`none`,`ascending`,`descending`,`other`],w=[`start`,`center`,`end`],T={fetchUrl:n,totalRows:t.min(0).default(0),rowHeight:t.min(2**-52).default(36),bufferSize:t.min(1).default(50),overscan:t.min(0).default(0),initialIndex:t.min(0).default(0),startParam:n.default(`start`),countParam:n.default(`count`),totalParam:n.default(`total`),totalHeader:n.default(`X-Trellis-Total-Items`),assetsHeader:n.default(`X-Trellis-Assets`),metaSelector:n.default(`template[data-ui-virtualizer-meta]`),selection:r(v,`none`),selectionValue:o({mode:`ids`,ids:[]}),selectOnRowClick:i,rowKey:n.default(`id`),stickyHeader:i.default(!0),resizableColumns:i.default(!0),reorderableColumns:i.default(!0),sortableColumns:i.default(!0),minColumnWidth:t.min(0).default(60),defaultColumnWidth:t.min(2**-52).default(180),maxColumnWidth:o(null),resizeMode:r(x,`onChange`),color:r(h,`neutral`),interaction:r(g,`edge`),dragPreviewPosition:n.trim.default(`preserve`),density:r(y,`default`),border:r(b,`row`),empty:n.default(`No rows found.`),class:n,controlsClass:n,viewportClass:n,headerClass:n,rowClass:n,cellClass:n,footerClass:n,emptyClass:n};t.min(2**-52).default(180),t.min(0).default(60),o(null),r(S,``),r(C,`none`),i.default(!0),i.default(!0),r(w,`start`),o([]),o([]),t.min(0).default(0),n.default(`id`),n.default(`ui.data-grid.row`),n.default(`ui.data-grid.cell`),t.min(0).default(0),t.min(1).default(1),r(w,`start`);var E=(e,t,n)=>{let r=e.getAttribute(t);if(r===null||r.trim()===``)return n;let i=Number(r);return Number.isFinite(i)?i:n},D=(e,t,n)=>{let r=e.getAttribute(t);if(r===null||r.trim()===``)return n;let i=Number(r);return Number.isFinite(i)&&i>0?i:null},O=(e,t,n)=>{if(!e.hasAttribute(t))return n;let r=e.getAttribute(t)??``;return r===``||[`true`,`1`,`yes`,`on`].includes(r.toLowerCase())},ee=(e,t)=>{let n=new Set;return e.flatMap(e=>{let r=(e.dataset.column??``).trim();if(!r)throw Error(`Data Grid columns require a non-empty key.`);if(e.hasAttribute(`data-hidden`))return[];if(n.has(r))throw Error(`Data Grid column key "${r}" is duplicated.`);n.add(r);let i=Math.max(0,E(e,`data-min-width`,t.minWidth)),a=D(e,`data-max-width`,t.maxWidth),o=E(e,`data-width`,t.width),s=Math.min(a??1/0,Math.max(i,o)),c=e.dataset.pinned===`left`||e.dataset.pinned===`right`?e.dataset.pinned:null,l=[`ascending`,`descending`,`other`].includes(e.dataset.sort??``)?e.dataset.sort:`none`,u=[`center`,`end`].includes(e.dataset.align??``)?e.dataset.align:`start`;return[{key:r,label:e.dataset.label??e.textContent?.trim()??r,width:s,minWidth:i,maxWidth:a,hidden:!1,pinned:c,sortable:O(e,`data-sortable`,!1),sort:l,resizable:O(e,`data-resizable`,t.resizable),reorderable:O(e,`data-reorderable`,t.reorderable),align:u,cellClass:e.dataset.cellClass??``,element:e}]})},te=e=>e.map(({width:e})=>`${e}px`).join(` `),k=e=>{let t=new Map,n=new Map,r=0;return e.forEach(e=>{e.pinned===`left`&&(t.set(e.key,r),r+=e.width)}),r=0,[...e].reverse().forEach(e=>{e.pinned===`right`&&(n.set(e.key,r),r+=e.width)}),{left:t,right:n}},A=e=>globalThis.CSS?.escape?globalThis.CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`),j=(e,t)=>{let n=k(t);return t.map((t,r)=>{let i=`[data-ui-data-grid-scope="${A(e)}"]`,a=`[data-column="${A(t.key)}"]`,o=`${i} [data-ui-data-grid-column-header]${a},${i} [data-ui-data-grid-cell]${a}`,s=t.pinned===`left`?`position:sticky;left:${n.left.get(t.key)??0}px;z-index:2;`:t.pinned===`right`?`position:sticky;right:${n.right.get(t.key)??0}px;z-index:2;`:``;return`${o}{grid-column:${r+1};${s}}`}).join(``)},M=(e,t)=>{if(t===`multiple`&&typeof e==`object`&&e&&e.mode===`query`){let t=e;if(typeof t.token==`string`&&Number.isFinite(t.total))return{mode:`query`,token:t.token,total:Math.max(0,Math.floor(t.total??0)),except:[...new Set(Array.isArray(t.except)?t.except.filter(e=>typeof e==`string`):[])]}}let n=typeof e==`object`&&e&&e.mode===`ids`&&Array.isArray(e.ids)?e.ids.filter(e=>typeof e==`string`):[],r=[...new Set(n)];return{mode:`ids`,ids:t===`single`?r.slice(0,1):t===`none`?[]:r}},N=(e,t)=>e.mode===`query`?!e.except.includes(t):e.ids.includes(t),P=(e,t,n,r)=>{let i=M(e,n);if(n===`none`)return{selection:i,added:[],removed:[]};let a=N(i,t),o=r??!a;if(a===o)return{selection:i,added:[],removed:[]};if(i.mode===`query`){let e=o?i.except.filter(e=>e!==t):[...i.except,t];return{selection:{...i,except:e},added:o?[t]:[],removed:o?[]:[t]}}return{selection:{mode:`ids`,ids:n===`single`&&o?[t]:o?[...i.ids,t]:i.ids.filter(e=>e!==t)},added:o?[t]:[],removed:o?[]:[t]}},F=(e,t,n)=>{let r=e.findIndex(e=>e.key===t);if(r<0||!e[r]?.reorderable)return null;let i=e[r]?.pinned??null;if(!e.flatMap((e,t)=>e.pinned===i?[t]:[]).includes(n))return null;let a=[...e],[o]=a.splice(r,1);return o?(a.splice(n,0,o),a):null},I=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),L=`a,button,input,select,textarea,[contenteditable],[role="button"],[role="link"]`,R=e=>{let t=null,n=null,r=null,i=null,o=null,l=[],m=[],h=0,g={mode:`ids`,ids:[]},_=``,v=null,y=0,b=0,x=!1,S=null,C=!1,w=new Map,E=[],D=f(u),O=(e,n)=>{t?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:n}))},k=(e,t)=>{let n=t.split(/\s+/).filter(Boolean);n.length&&e.classList.add(...n)},A=()=>Array.from(t?.querySelectorAll(`[data-ui-data-grid-row]`)??[]),R=()=>{A().forEach(e=>{let t=e.dataset.rowKey??``,n=$.props.selection!==`none`&&t!==``&&N(g,t);e.toggleAttribute(`data-selected`,n),$.props.selection===`none`?e.removeAttribute(`aria-selected`):e.setAttribute(`aria-selected`,String(n))})},z=()=>{if(!t||!o)return;t.style.setProperty(`--ui-data-grid-template`,te(l));let e=t.dataset.uiDataGridScope??``;o.textContent=j(e,l),r?.setAttribute(`aria-colcount`,String(l.length));let n=t.querySelector(`[data-ui-data-grid-header-row]`);l.forEach(e=>n?.append(e.element));let i=n?.querySelector(`[data-ui-data-grid-column-indicator]`);i&&n?.append(i),A().forEach(e=>{let t=new Map(Array.from(e.children).flatMap(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ui-data-grid-cell`)?[[e.dataset.column??``,e]]:[]));l.forEach(({key:n})=>{let r=t.get(n);r&&e.append(r)})}),l.forEach((e,t)=>{e.element.setAttribute(`aria-colindex`,String(t+1)),e.element.dataset.pinned=e.pinned??``,e.element.toggleAttribute(`data-pinned`,e.pinned!==null)}),A().forEach(e=>k(e,$.props.rowClass)),t.querySelectorAll(`[data-ui-data-grid-cell]`).forEach(e=>{let t=l.findIndex(({key:t})=>t===e.dataset.column);if(t>=0){let n=l[t];e.setAttribute(`aria-colindex`,String(t+1)),k(e,$.props.cellClass),k(e,n.cellClass),n.pinned?e.dataset.pinned=n.pinned:e.removeAttribute(`data-pinned`)}})},B=()=>{!t||!i||(t.toggleAttribute(`data-loading`,b>0),t.toggleAttribute(`data-empty`,h===0),t.dataset.selection=$.props.selection,r?.setAttribute(`aria-rowcount`,String(h+1)),t.style.setProperty(`--ui-data-grid-row-height`,`${$.props.rowHeight}px`),t.style.setProperty(`--ui-data-grid-total-height`,`${Math.max(h*$.props.rowHeight,$.props.rowHeight)}px`),i.style.height=`var(--ui-data-grid-total-height)`,R())},V=e=>{let t=I(e);t!==h&&(h=t,B(),O(`ui:data-grid-total-change`,{totalRows:h}))},H=e=>u.compute({axes:{y:{total:h,itemSize:$.props.rowHeight,viewportSize:$.props.bufferSize*$.props.rowHeight,scrollOffset:e*$.props.rowHeight,buffer:0}}}),U=e=>{if(h===0)return[];let t=I($.props.bufferSize,1),n=Math.min(h-1,Math.floor(Math.max(0,e)/$.props.rowHeight)),r=Math.floor(n/t)*t,i=Math.floor((h-1)/t)*t,a=[r-t,r,r+t].map(e=>Math.min(i,Math.max(0,e)));return r===0&&i>t?a.splice(0,3,0,t,Math.min(i,t*2)):r===i&&i>t&&a.splice(0,3,Math.max(0,i-t*2),i-t,i),[...new Set(a)].map(H)},W=e=>{let t=e.axes.y;if(!t)throw Error(`Data Grid requires a vertical virtual window.`);let n=new URL($.props.fetchUrl,document.baseURI);return n.searchParams.set($.props.startParam,String(t.start)),n.searchParams.set($.props.countParam,String(t.count)),n.searchParams.set($.props.totalParam,String(t.total)),/^[a-z][a-z\d+.-]*:/i.test($.props.fetchUrl)||$.props.fetchUrl.startsWith(`//`)?n.href:`${n.pathname}${n.search}${n.hash}`},G=()=>{if(b=Math.max(0,b-1),B(),b>0||v===null||x)return;let e=v;v=null,q(e)},K=async(n,r,i)=>{let a=r.axes.y;if(!a)return;let o=new AbortController;w.set(n.key,o),b+=1,B(),t?.removeAttribute(`data-error`),O(`ui:data-grid-load-start`,{window:r});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,l=await fetch(W(r),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":s},signal:o.signal});if(!l.ok&&l.status!==204){D.fail(i),t?.setAttribute(`data-error`,``),O(`ui:data-grid-error`,{window:r,status:l.status});return}let u=await d(l,$.props);if(D.pending(n.key)!==i||x||!await c(e,n.element,u.html,{assets:u.assets,shouldReplace:()=>D.pending(n.key)===i&&!x})||(u.totalItems!==null&&V(u.totalItems),!D.commit(i,r)))return;n.element.style.height=`${a.count*$.props.rowHeight}px`,n.element.style.transform=`translateY(${a.translateOffset}px)`,z(),R(),O(`ui:data-grid-load`,{window:r,start:a.start,count:a.count,end:a.start+a.count})}catch(e){if(o.signal.aborted)return;D.fail(i),t?.setAttribute(`data-error`,``),O(`ui:data-grid-error`,{window:r,status:0,error:e})}finally{w.get(n.key)===o&&w.delete(n.key),G()}},q=t=>{if(b>0){v=t;return}let n=U(t),r=Math.min(Math.max(0,h-1),Math.floor(Math.max(0,t)/$.props.rowHeight)),i=n.find(e=>{let t=e.axes.y;return t&&r>=t.start&&r<t.start+t.count})??n[0];if(i&&_!==i.key){_=i.key;let e=i.axes.y;O(`ui:data-grid-range`,{start:e.start,count:e.count,end:e.start+e.count,window:i})}if(n.length===0){m.forEach(t=>void c(e,t.element,``));return}let a=new Set;n.forEach(e=>{let t=m.find(t=>D.mounted(t.key)?.key===e.key);t&&a.add(t)});let o=m.filter(e=>!a.has(e));n.forEach(e=>{if(m.some(t=>D.mounted(t.key)?.key===e.key))return;let t=o.shift();if(!t)return;let n=D.begin(t.key,e);n&&K(t,e,n)})},J=()=>{w.forEach(e=>e.abort()),w.clear(),b=0,v=null,_=``,D.invalidate(),m.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,c(e,t.element,``)}),B()},Y=(e,n)=>{g=M(e,$.props.selection),C=!0,$.props.selectionValue=g,t&&s({el:t,schema:T,key:`selectionValue`,value:g}),C=!1,R(),O(`ui:data-grid-selection-change`,{selection:g,added:n?.added??[],removed:n?.removed??[]})},X=(e,t)=>{let n=P(g,String(e),$.props.selection,t);n.added.length===0&&n.removed.length===0||Y(n.selection,n)},Z=(e,t,n)=>{e.width=Math.min(e.maxWidth??1/0,Math.max(e.minWidth,t)),z(),O(`ui:data-grid-column-resize`,{column:e.key,width:e.width,phase:n})},Q=()=>{E.splice(0).forEach(e=>e()),l.forEach(e=>{let t=e.element.querySelector(`[data-ui-data-grid-resize-handle]`);if(!t)return;let n=e.resizable&&$.props.resizableColumns;if(n?t.removeAttribute(`aria-disabled`):t.setAttribute(`aria-disabled`,`true`),t.tabIndex=n?0:-1,!n)return;let r=t=>Z(e,t.previewWidth,t.phase);E.push(p({element:e.element,handle:t,axis:`x`,min:e.minWidth,max:e.maxWidth,mode:$.props.resizeMode,disabled:()=>!$.props.resizableColumns||!e.resizable,onStart:r,onResize:r,onEnd:r}))})},$={props:null,init(){t=this.$el,x=!1;let e=globalThis.crypto?.randomUUID?.()??`grid-${Date.now()}-${Math.random().toString(36).slice(2)}`;if(t.dataset.uiDataGridScope=e,t.querySelector(`[data-ui-data-grid-header-row]`)?.setAttribute(`data-sortable-scope`,e),this.props=a({el:t,schema:T,onChange:(e,t)=>{if(C)return;let n=t.map(({key:e})=>e);(n.includes(`selectionValue`)||n.includes(`selection`))&&(g=M(this.props.selectionValue,this.props.selection),R()),n.includes(`resizableColumns`)&&Q(),n.includes(`totalRows`)?(V(this.props.totalRows),this.reload()):n.some(e=>[`fetchUrl`,`rowHeight`,`bufferSize`].includes(e))&&this.reload()}}),h=I(this.props.totalRows),g=M(this.props.selectionValue,this.props.selection),n=t.querySelector(`[data-ui-data-grid-viewport]`)??t.querySelector(`[data-ui-scroll-area-viewport]`),r=t.querySelector(`[data-ui-data-grid-inner]`),i=t.querySelector(`[data-ui-data-grid-spacer]`),o=t.querySelector(`style[data-ui-data-grid-layout]`),m=Array.from(t.querySelectorAll(`[data-ui-data-grid-block]`)).slice(0,3).map((e,t)=>({element:e,key:`block-${t+1}`})),!n||!r||!i||!o||m.length!==3)throw Error(`Data Grid requires one viewport, table owner, spacer, layout style, and three row blocks.`);n.setAttribute(`data-ui-data-grid-viewport`,``),l=ee(Array.from(t.querySelectorAll(`[data-ui-data-grid-column-header]`)),{width:this.props.defaultColumnWidth,minWidth:this.props.minColumnWidth,maxWidth:this.props.maxColumnWidth,resizable:this.props.resizableColumns,reorderable:this.props.reorderableColumns}),z(),Q(),S=new AbortController,n.addEventListener(`scroll`,()=>{y||=requestAnimationFrame(()=>{y=0,n&&q(n.scrollTop)})},{passive:!0,signal:S.signal}),t.addEventListener(`click`,e=>{let n=e.target,r=n.closest(`[data-ui-data-grid-sort-button]`);if(r&&this.props.sortableColumns){let t=r.closest(`[data-ui-data-grid-column-header]`),n=l.find(({key:e})=>e===t?.dataset.column);if(n?.sortable){let t=n.sort===`ascending`?`descending`:`ascending`;O(`ui:data-grid-sort`,{column:n.key,direction:t,additive:e.shiftKey})}return}let i=n.closest(`[data-ui-data-grid-row]`);if(!i||!t?.contains(i))return;let a=i.dataset.rowKey??``;this.props.selectOnRowClick&&!n.closest(L)&&X(a),O(`ui:data-grid-row-activate`,{rowKey:a,row:i})},{signal:S.signal}),t.addEventListener(`dblclick`,e=>{let t=e.target.closest(`[data-ui-data-grid-cell]`),n=t?.closest(`[data-ui-data-grid-row]`);t&&n&&O(`ui:data-grid-cell-activate`,{rowKey:n.dataset.rowKey??``,column:t.dataset.column??``,cell:t})},{signal:S.signal}),t.addEventListener(`ui:sortable-drop`,(e=>{let t=e.detail?.source;if(t?.type!==`data-grid-column`)return;let n=Number(e.detail?.index??e.detail?.anchor?.index);Number.isInteger(n)&&this.reorderColumn(String(t.id),n)}),{signal:S.signal}),n.style.overscrollBehavior=`contain`,n.style.overflowAnchor=`none`,n.scrollTop=u.scrollTo({total:h,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),B(),q(n.scrollTop)},destroy(){x=!0,y&&cancelAnimationFrame(y),S?.abort(),S=null,E.splice(0).forEach(e=>e()),J(),this.props.disconnect(),t=null,n=null,r=null,i=null,o=null,l=[],m=[]},scrollToIndex(e,t=`start`){n&&(n.scrollTop=u.scrollTo({total:h,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:n.scrollTop,buffer:this.props.bufferSize},{axis:`y`,index:e,align:t}),q(n.scrollTop))},setTotalRows(e){V(e),this.reload({scrollTop:n?.scrollTop??0})},setUrl(e,n={}){C=!0,this.props.fetchUrl=String(e),t&&s({el:t,schema:T,key:`fetchUrl`,value:String(e)}),C=!1,n.reset??!0?this.reset():this.reload()},reset(e={}){this.reload({scrollTop:e.scrollTop??0})},reload(e={}){let t=e.scrollTop??n?.scrollTop??0;J(),n&&(n.scrollTop=Math.max(0,t)),q(t)},resizeColumn(e,t){let n=l.find(t=>t.key===e);n&&Z(n,Number(t),`end`)},reorderColumn(e,t){let n=l.findIndex(t=>t.key===e),r=F(l,e,I(t));r&&(l=r,z(),O(`ui:data-grid-column-reorder`,{column:e,from:n,to:I(t),columns:l.map(({key:e})=>e)}))},selectRow(e){X(String(e),!0)},deselectRow(e){X(String(e),!1)},toggleRow(e){X(String(e))},setSelection(e){Y(e)},selectQuery(e,t,n=[]){Y({mode:`query`,token:String(e),total:I(t),except:n.map(String)})},clearSelection(){Y({mode:`ids`,ids:[]})}};return $},z=e=>{l(`UiDataGrid`,()=>R(e))(e)},B=new WeakSet,V=t=>{B.has(t)||(B.add(t),_(t),e(t),m(t),z(t))};export{R as n,V as t};
2
+ //# sourceMappingURL=entry.generated-Ck7bhyzz.js.map