@vireo-ai/trellis-ui 0.1.51 → 0.1.53

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 (75) hide show
  1. package/package.json +6 -1
  2. package/packages/client/src/components/select/styles.css +19 -0
  3. package/packages/client/src/styles/theme-support.css +267 -0
  4. package/packages/client/src/styles/theme.css +1 -268
  5. package/packages/client/types/runtime/engine/navigation.d.ts +2 -1
  6. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +11 -0
  7. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
  8. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +234 -234
  9. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
  10. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
  11. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-CrezWE-8.js +2 -0
  12. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-DRILCSFH.js.map → capability-motion-CrezWE-8.js.map} +1 -1
  13. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-CpSdQwYp.js → capability-sortable-C65CbsZn.js} +2 -2
  14. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-CpSdQwYp.js.map → capability-sortable-C65CbsZn.js.map} +1 -1
  15. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-D14VdwFn.js +2 -0
  16. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-D14VdwFn.js.map +1 -0
  17. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DvHNTjt1.js +2 -0
  18. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DvHNTjt1.js.map +1 -0
  19. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D3am_GtI.js → entry.generated-BSbzZ3xh.js} +2 -2
  20. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D3am_GtI.js.map → entry.generated-BSbzZ3xh.js.map} +1 -1
  21. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CSDZ4U92.js +2 -0
  22. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CSDZ4U92.js.map +1 -0
  23. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D7qa64eM.js → entry.generated-D07X7NjA.js} +2 -2
  24. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D07X7NjA.js.map +1 -0
  25. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CeD3bUBI.js → entry.generated-DVIdOrvh.js} +2 -2
  26. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CeD3bUBI.js.map → entry.generated-DVIdOrvh.js.map} +1 -1
  27. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DrmfusOi.js +2 -0
  28. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DrmfusOi.js.map +1 -0
  29. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BiyFgA-e.js → entry.generated-bEl9RRQt.js} +2 -2
  30. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BiyFgA-e.js.map → entry.generated-bEl9RRQt.js.map} +1 -1
  31. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DbC4gkeV.js → entry.generated-prmw8aRc.js} +2 -2
  32. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DbC4gkeV.js.map → entry.generated-prmw8aRc.js.map} +1 -1
  33. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-TbFjT_mY.js → entry.generated-xAXkL86X.js} +2 -2
  34. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-TbFjT_mY.js.map → entry.generated-xAXkL86X.js.map} +1 -1
  35. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-JcxejQr4.js → entry2.generated-CXnPh3K6.js} +2 -2
  36. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-JcxejQr4.js.map → entry2.generated-CXnPh3K6.js.map} +1 -1
  37. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-BSal0xp9.js → entry2.generated-CwzLpL1f.js} +2 -2
  38. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-BSal0xp9.js.map → entry2.generated-CwzLpL1f.js.map} +1 -1
  39. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-DCbmWkHV.js → entry2.generated-DXDHgDsN.js} +2 -2
  40. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-DCbmWkHV.js.map → entry2.generated-DXDHgDsN.js.map} +1 -1
  41. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-D26Cigu5.js → entry2.generated-Dolv_r3b.js} +2 -2
  42. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-D26Cigu5.js.map → entry2.generated-Dolv_r3b.js.map} +1 -1
  43. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B4uuk1JX.js → motion-ke2fZiWo.js} +3 -3
  44. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B4uuk1JX.js.map → motion-ke2fZiWo.js.map} +1 -1
  45. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-FNYDCNh6.js +4 -0
  46. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-FOJhyz8V.js.map → ui-FNYDCNh6.js.map} +1 -1
  47. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.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/index.js +1 -1
  52. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
  53. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
  54. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
  55. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
  56. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
  57. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
  58. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
  59. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +1 -1
  60. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
  61. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
  62. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +91 -91
  63. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +8 -8
  64. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +8 -8
  65. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-DRILCSFH.js +0 -2
  66. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-DnQs1xY6.js +0 -2
  67. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-DnQs1xY6.js.map +0 -1
  68. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-5pQvlhmK.js +0 -2
  69. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-5pQvlhmK.js.map +0 -1
  70. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CPzThz_M.js +0 -2
  71. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CPzThz_M.js.map +0 -1
  72. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D7qa64eM.js.map +0 -1
  73. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-cnWgB3wz.js +0 -2
  74. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-cnWgB3wz.js.map +0 -1
  75. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-FOJhyz8V.js +0 -4
@@ -1 +0,0 @@
1
- {"version":3,"file":"entry.generated-cnWgB3wz.js","names":[],"sources":["../../../../../../../../client/src/components/menu/styles.ts","../../../../../../../../client/src/components/dropdown/safe-area.ts","../../../../../../../../client/src/components/dropdown/contract.ts","../../../../../../../../client/src/components/dropdown/machine.ts","../../../../../../../../client/src/components/dropdown/styles.ts","../../../../../../../../client/src/components/dropdown/index.ts","../../../../../../../../client/src/components/dropdown/entry.generated.ts"],"sourcesContent":["import {defineStyles} from '../../runtime';\nimport {OPTION_ICON_CLASSES, OPTION_ITEM_CLASSES, POPOVER_GEOMETRY_CLASSES} from '../common';\n\nconst menuStyles = defineStyles({definition: {\n component: 'ui.menu',\n parts: {\n menu: {\n base: [\n POPOVER_GEOMETRY_CLASSES,\n 'auto-rows-min content-start min-w-48 gap-1 overflow-hidden rounded-overlay-sm p-popover-padding',\n ],\n },\n item: {\n base: [\n OPTION_ITEM_CLASSES,\n ],\n variants: {\n variant: {\n default: '',\n subtle: '',\n filled: '',\n ghost: '',\n },\n color: {\n neutral: '',\n accent: '',\n success: '',\n warning: '',\n danger: '',\n },\n },\n defaults: {\n variant: 'default',\n color: 'neutral',\n },\n },\n itemLabel: {\n base: 'min-w-0 flex-1',\n },\n itemMeta: {\n base: 'ml-auto font-metadata text-metadata [font-weight:var(--font-weight-metadata)] text-current opacity-70',\n },\n itemIcon: {\n base: OPTION_ICON_CLASSES,\n variants: {\n position: {\n leading: '',\n trailing: 'ml-auto',\n },\n },\n defaults: {\n position: 'leading',\n },\n },\n submenu: {\n base: 'contents',\n },\n submenuPanel: {\n base: '',\n },\n group: {\n base: 'grid auto-rows-min content-start gap-1',\n },\n label: {\n base: 'px-menu-item-padding-inline py-1 font-label text-label [font-weight:var(--font-weight-label)]',\n },\n separatorRoot: {\n variants: {\n orientation: {\n vertical: 'self-stretch self-center',\n horizontal: '-mx-popover my-popover h-[var(--border-width-edge-separator)]',\n },\n },\n defaults: {\n orientation: 'horizontal',\n },\n },\n separatorRule: {\n variants: {\n orientation: {\n vertical: 'h-full w-[var(--border-width-edge-separator)] border-0',\n horizontal: 'h-[var(--border-width-edge-separator)] w-full border-0',\n },\n },\n defaults: {\n orientation: 'horizontal',\n },\n },\n },\n}});\n\nexport {menuStyles};\n","type Point = {x: number; y: number};\ntype PanelRect = {left: number; right: number; top: number; bottom: number};\ntype SubmenuSafeArea = {contains(point: Point): boolean};\n\nconst edge = (point: Point, start: Point, end: Point): number => (\n (point.x - end.x) * (start.y - end.y) - (start.x - end.x) * (point.y - end.y)\n);\n\nconst createSubmenuSafeArea = ({origin, panel}: {origin: Point; panel: PanelRect}): SubmenuSafeArea => {\n const nearX = panel.left >= origin.x ? panel.left : panel.right;\n const top = {x: nearX, y: panel.top};\n const bottom = {x: nearX, y: panel.bottom};\n const minX = Math.min(origin.x, nearX);\n const maxX = Math.max(origin.x, nearX);\n\n return {\n contains(point): boolean {\n if (point.x <= minX || point.x >= maxX) return false;\n const first = edge(point, origin, top);\n const second = edge(point, top, bottom);\n const third = edge(point, bottom, origin);\n const hasNegative = first < 0 || second < 0 || third < 0;\n const hasPositive = first > 0 || second > 0 || third > 0;\n return !(hasNegative && hasPositive);\n },\n };\n};\n\nexport {createSubmenuSafeArea};\nexport type {PanelRect, Point, SubmenuSafeArea};\n","import {bool, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {ALIGNMENTS, POSITIONS, type Alignment, type Position} from '../common';\n\nconst DROPDOWN_SIDES = POSITIONS;\n\nconst DROPDOWN_ALIGNS = ALIGNMENTS;\n\ntype DropdownSide = Position;\ntype DropdownAlign = Alignment;\n\nconst dropdownSchema = {\n side: oneOf(DROPDOWN_SIDES, 'bottom' as DropdownSide),\n align: oneOf(DROPDOWN_ALIGNS, 'start' as DropdownAlign),\n offset: number.clamp(-100, 100).default(0),\n gap: number.clamp(0, 50).default(4),\n open: bool,\n disabled: bool,\n class: string,\n};\n\ntype DropdownProps = SchemaToProps<typeof dropdownSchema>;\n\nexport {\n DROPDOWN_ALIGNS,\n DROPDOWN_SIDES,\n dropdownSchema,\n};\nexport type {DropdownAlign, DropdownSide, DropdownProps};\n","import {\n createMachine,\n type Machine,\n type MachineEventObject,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport {defineControlledOpenProps} from '../shared/controlled-open';\nimport type {DropdownProps} from './contract';\n\ntype DropdownContext = {openSubmenuIds: string[]};\ntype DropdownFocus = 'menu' | 'first';\n\ntype DropdownMachineEffects = {\n prepareOpen(focus: DropdownFocus): void;\n finishOpen(): void;\n prepareClose(restoreFocus: boolean, reflectOpen: boolean): void;\n finishClose(): void;\n syncProps(): void;\n syncSubmenus(openSubmenuIds: string[]): void;\n};\n\ntype CreateDropdownMachineOptions = {\n props: DropdownProps;\n effects: DropdownMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'opening',\n project: () => ({}),\n onDone: 'OPENING_DONE',\n onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<DropdownContext, DropdownProps, Record<string, never>, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'closing',\n project: () => ({}),\n onDone: 'CLOSING_DONE',\n onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<DropdownContext, DropdownProps, Record<string, never>, 'closing'>);\n\nconst dropdownHooks = [openingHook, closingHook] as const;\nconst controlledOpenProps = defineControlledOpenProps<DropdownContext, DropdownProps>();\n\nconst focusFrom = (event: MachineEventObject): DropdownFocus => event.focus === 'first' ? 'first' : 'menu';\nconst shouldRestoreFocus = (event: MachineEventObject): boolean => event.restoreFocus === true;\nconst submenuPathFrom = (event: MachineEventObject): string[] => (\n Array.isArray(event.path) ? event.path.filter((value): value is string => typeof value === 'string') : []\n);\n\nconst createDropdownMachine = ({\n props,\n effects,\n}: CreateDropdownMachineOptions): Machine<DropdownContext, DropdownProps> => createMachine<DropdownContext, DropdownProps>({\n initial: 'closed',\n states: {\n closed: {\n tags: ['closed'],\n on: {\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n TOGGLE: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n PROPS_CHANGED: [\n {\n target: 'opening',\n guard: controlledOpenProps.shouldOpen,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareOpen'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n opening: {\n tags: ['visible', 'expanded', 'interactive', 'transitioning'],\n on: {\n OPENING_DONE: {target: 'open', effects: 'finishOpen'},\n OPENING_ERROR: {target: 'open', effects: 'finishOpen'},\n CLOSE: {target: 'closing', reduce: 'clearSubmenus', effects: ['syncSubmenus', 'prepareClose']},\n TOGGLE: {target: 'closing', reduce: 'clearSubmenus', effects: ['syncSubmenus', 'prepareClose']},\n SUBMENU_PATH_CHANGED: {reduce: 'replaceSubmenuPath', effects: 'syncSubmenus'},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replacePropsAndClearSubmenus',\n effects: ['syncSubmenus', 'prepareClose', 'syncProps'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n open: {\n tags: ['visible', 'expanded', 'interactive', 'open'],\n on: {\n CLOSE: {target: 'closing', reduce: 'clearSubmenus', effects: ['syncSubmenus', 'prepareClose']},\n TOGGLE: {target: 'closing', reduce: 'clearSubmenus', effects: ['syncSubmenus', 'prepareClose']},\n SUBMENU_PATH_CHANGED: {reduce: 'replaceSubmenuPath', effects: 'syncSubmenus'},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replacePropsAndClearSubmenus',\n effects: ['syncSubmenus', 'prepareClose', 'syncProps'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n closing: {\n tags: ['visible', 'transitioning'],\n on: {\n CLOSING_DONE: {target: 'closed', effects: 'finishClose'},\n CLOSING_ERROR: {target: 'closed', effects: 'finishClose'},\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n TOGGLE: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n PROPS_CHANGED: [\n {\n target: 'opening',\n guard: controlledOpenProps.shouldOpen,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareOpen'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n },\n}, {\n context: {openSubmenuIds: []},\n props,\n reducers: {\n replaceProps: controlledOpenProps.replace,\n replaceSubmenuPath: (scope) => ({context: {...scope.context, openSubmenuIds: submenuPathFrom(scope.event)}}),\n clearSubmenus: (scope) => ({context: {...scope.context, openSubmenuIds: []}}),\n replacePropsAndClearSubmenus: (scope) => {\n const next = controlledOpenProps.replace(scope);\n return next ? {...next, context: {...scope.context, openSubmenuIds: []}} : undefined;\n },\n },\n guards: {\n canOpen: ({props: currentProps}) => !currentProps.disabled,\n },\n effects: {\n prepareOpen: ({event}) => effects.prepareOpen(focusFrom(event)),\n finishOpen: effects.finishOpen,\n prepareClose: ({event}) => effects.prepareClose(\n shouldRestoreFocus(event),\n event.type !== 'PROPS_CHANGED',\n ),\n finishClose: effects.finishClose,\n syncProps: effects.syncProps,\n syncSubmenus: ({context}) => effects.syncSubmenus(context.openSubmenuIds),\n },\n});\n\nexport {createDropdownMachine, dropdownHooks};\nexport type {\n CreateDropdownMachineOptions,\n DropdownContext,\n DropdownFocus,\n DropdownMachineEffects,\n};\n","import {defineStyles} from '../../runtime';\n\nconst dropdownStyles = defineStyles({definition: {\n component: 'ui.dropdown',\n parts: {\n root: {\n base: 'contents',\n },\n },\n}});\n\nexport {dropdownStyles};\n","import type Alpine from 'alpinejs';\n\nimport {menuStyles} from '@client/components/menu/styles';\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n reflectSchemaProp,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {createAnchoredPopoverSurface, type AnchoredPopoverSurface} from '@client/runtime/anchored-popover';\nimport {createCollectionNavigation, type CollectionNavigation} from '@client/runtime/collection-navigation';\nimport {addDismissableLayer} from '@client/runtime/dismissable-layer';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, asBool, dispatch, type CleanupStack} from '@client/utils';\nimport {createSubmenuSafeArea, type SubmenuSafeArea} from './safe-area';\nimport {dropdownSchema, type DropdownProps} from './contract';\nimport {\n createDropdownMachine,\n dropdownHooks,\n type DropdownContext,\n type DropdownFocus,\n} from './machine';\nimport {dropdownStyles} from './styles';\n\ntype DropdownTransitionName = (typeof dropdownHooks)[number]['name'];\ntype DropdownTransition<TName extends DropdownTransitionName = DropdownTransitionName> = TransitionForHook<\n Extract<(typeof dropdownHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype PopoverElement = HTMLElement & {\n showPopover(): void;\n hidePopover(): void;\n};\n\ntype TriggerBaseline = {\n ariaDisabled: string | null;\n dataDisabled: string | null;\n disabled: boolean | null;\n tabIndex: string | null;\n};\n\ntype SubmenuResource = {\n id: string;\n root: HTMLElement;\n trigger: HTMLElement;\n panel: PopoverElement;\n popover: AnchoredPopoverSurface;\n collection: CollectionNavigation;\n};\n\nlet submenuId = 0;\n\n/**\n * Public Alpine API for `ui.dropdown`.\n *\n * @public\n */\ninterface UiDropdownApi {\n /** Whether the dropdown is opening or fully open. */\n readonly isOpen: boolean;\n\n /** Opens the dropdown unless it is disabled. */\n open(event?: Event): void;\n\n /** Closes the dropdown. Keyboard dismissal restores focus to the trigger. */\n close(event?: Event): void;\n\n /** Reverses the current dropdown lifecycle, including an in-flight transition. */\n toggle(event?: Event): void;\n}\n\ntype DropdownData = AlpineMachine<DropdownContext, DropdownProps, typeof dropdownHooks> & UiDropdownApi & {\n readonly root: BindingObject;\n readonly menu: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst UiDropdown = (): TrellisAlpineComponent<DropdownData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let canReflectOpen = false;\n let reflectTransitionOpen = true;\n let triggerId = '';\n let menuId = '';\n let triggerBaseline: TriggerBaseline | null = null;\n let collection: CollectionNavigation | null = null;\n let popover: AnchoredPopoverSurface | null = null;\n const submenus = new Map<string, SubmenuResource>();\n let safeArea: SubmenuSafeArea | null = null;\n let cleanup: CleanupStack = [];\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Dropdown has not been initialized.');\n return rootEl;\n };\n\n const triggerEl = (): HTMLElement => {\n const trigger = Array.from(root().children)\n .find((el) => el instanceof HTMLElement && !el.matches('[data-ui-menu]'));\n if (!(trigger instanceof HTMLElement)) throw new Error('Dropdown requires a trigger element before the menu.');\n return trigger;\n };\n\n const menuEl = (): PopoverElement => {\n const menu = Array.from(root().children).find((element) => element instanceof HTMLElement && element.matches('[data-ui-menu]'));\n if (!(menu instanceof HTMLElement)) throw new Error('Dropdown requires a menu element.');\n return menu as PopoverElement;\n };\n\n const currentProps = (): Readonly<DropdownProps> => bridge.getSnapshot().props;\n const isExpanded = (): boolean => bridge.hasTag('expanded');\n const isVisible = (): boolean => bridge.hasTag('visible');\n\n const itemFrom = (target: EventTarget | null): HTMLElement | null => {\n if (!(target instanceof Element)) return null;\n const item = target.closest<HTMLElement>('[data-ui-menu-item]');\n return item && root().contains(item) ? item : null;\n };\n\n const itemDisabled = (item: HTMLElement): boolean => (\n asBool({value: item.dataset.disabled})\n || item.getAttribute('aria-disabled') === 'true'\n || item.hasAttribute('disabled')\n );\n\n const collectionNav = (): CollectionNavigation => {\n if (!collection) throw new Error('Dropdown navigation has not been initialized.');\n return collection;\n };\n\n const syncMenuItems = (): void => {\n const items = [collectionNav(), ...Array.from(submenus.values(), ({collection: nested}) => nested)];\n items.forEach((navigation) => navigation.allItems().forEach((item) => {\n if (!item.hasAttribute('role')) item.setAttribute('role', 'menuitem');\n item.tabIndex = -1;\n if (itemDisabled(item)) item.setAttribute('aria-disabled', 'true');\n }));\n };\n\n const submenuForTrigger = (item: HTMLElement | null): SubmenuResource | null => {\n if (!item) return null;\n return Array.from(submenus.values()).find(({trigger}) => trigger === item) ?? null;\n };\n\n const submenuForPanel = (panel: Element | null): SubmenuResource | null => {\n if (!panel) return null;\n return Array.from(submenus.values()).find(({panel: candidate}) => candidate === panel) ?? null;\n };\n\n const parentSubmenu = (resource: SubmenuResource): SubmenuResource | null => {\n const parentPanel = resource.root.parentElement?.closest<HTMLElement>('[data-ui-menu-submenu-panel]') ?? null;\n return submenuForPanel(parentPanel);\n };\n\n const pathTo = (resource: SubmenuResource): string[] => {\n const path: string[] = [];\n let current: SubmenuResource | null = resource;\n while (current) {\n path.unshift(current.id);\n current = parentSubmenu(current);\n }\n return path;\n };\n\n const currentSubmenuPath = (): string[] => bridge.getSnapshot().context.openSubmenuIds;\n\n const syncSubmenus = (openIds: string[]): void => {\n safeArea = null;\n submenus.forEach((resource, id) => {\n const open = openIds.includes(id);\n resource.root.dataset.state = open ? 'open' : 'closed';\n resource.trigger.dataset.state = open ? 'open' : 'closed';\n resource.trigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n resource.panel.dataset.state = open ? 'open' : 'closed';\n resource.panel.hidden = !open;\n if (open) resource.popover.open();\n else {\n resource.collection.clearActiveItem();\n resource.popover.close();\n }\n });\n };\n\n const activateCommittedItem = (navigation: CollectionNavigation): boolean => {\n const selected = navigation.items().find((item) => (\n item.hasAttribute('data-selected')\n || ['true', 'mixed'].includes(item.getAttribute('aria-checked') ?? '')\n ));\n if (!selected) return false;\n navigation.activateItem({el: selected});\n return true;\n };\n\n const openSubmenu = (resource: SubmenuResource, focusFirst = false): void => {\n if (itemDisabled(resource.trigger)) return;\n bridge.send({type: 'SUBMENU_PATH_CHANGED', path: pathTo(resource)});\n queueMicrotask(() => {\n if (focusFirst) resource.collection.focusFirst();\n else activateCommittedItem(resource.collection);\n });\n };\n\n const closeSubmenu = (resource: SubmenuResource, restoreFocus = false): void => {\n const path = pathTo(resource);\n bridge.send({type: 'SUBMENU_PATH_CHANGED', path: path.slice(0, -1)});\n if (restoreFocus) resource.trigger.focus({preventScroll: true});\n };\n\n const captureTriggerBaseline = (): void => {\n const trigger = triggerEl();\n const explicitTabIndex = trigger.getAttribute('tabindex');\n triggerBaseline = {\n ariaDisabled: trigger.getAttribute('aria-disabled'),\n dataDisabled: trigger.getAttribute('data-disabled'),\n disabled: trigger instanceof HTMLButtonElement ? trigger.disabled : null,\n tabIndex: explicitTabIndex ?? (trigger.tabIndex < 0 ? '0' : null),\n };\n };\n\n const restoreAttribute = (el: HTMLElement, name: string, value: string | null): void => {\n if (value === null) el.removeAttribute(name);\n else el.setAttribute(name, value);\n };\n\n const syncTrigger = (): void => {\n if (canReflectOpen && (isExpanded() || reflectTransitionOpen)) {\n reflectSchemaProp({el: root(), schema: dropdownSchema, key: 'open', value: isExpanded()});\n }\n const trigger = triggerEl();\n const baseline = triggerBaseline;\n if (!baseline) return;\n\n trigger.id ||= triggerId;\n trigger.setAttribute('data-ui-dropdown-trigger', '');\n trigger.setAttribute('aria-expanded', isExpanded() ? 'true' : 'false');\n trigger.setAttribute('aria-controls', menuId);\n trigger.setAttribute('data-state', isExpanded() ? 'open' : 'closed');\n\n if (currentProps().disabled) {\n trigger.setAttribute('aria-disabled', 'true');\n trigger.setAttribute('data-disabled', '');\n trigger.tabIndex = -1;\n if (trigger instanceof HTMLButtonElement) trigger.disabled = true;\n return;\n }\n\n restoreAttribute(trigger, 'aria-disabled', baseline.ariaDisabled);\n restoreAttribute(trigger, 'data-disabled', baseline.dataDisabled);\n restoreAttribute(trigger, 'tabindex', baseline.tabIndex);\n if (trigger instanceof HTMLButtonElement && baseline.disabled !== null) trigger.disabled = baseline.disabled;\n };\n\n const syncMenu = (): void => {\n const menu = menuEl();\n menu.id = menuId;\n menu.setAttribute('popover', 'manual');\n menu.setAttribute('role', 'menu');\n menu.tabIndex = -1;\n menu.hidden = !isVisible();\n menu.setAttribute('data-state', isExpanded() ? 'open' : 'closed');\n syncMenuItems();\n };\n\n const prepareOpen = (focus: DropdownFocus): void => {\n reflectTransitionOpen = true;\n syncTrigger();\n syncMenu();\n popover?.open();\n queueMicrotask(() => {\n if (!bridge.hasTag('interactive')) return;\n if (focus === 'first') collectionNav().focusFirst();\n else {\n activateCommittedItem(collectionNav());\n menuEl().focus({preventScroll: true});\n }\n });\n };\n\n const finishOpen = (): void => {\n syncTrigger();\n syncMenu();\n dispatch({el: root(), name: 'ui:open'});\n };\n\n const prepareClose = (restoreFocus: boolean, reflectOpen: boolean): void => {\n reflectTransitionOpen = reflectOpen;\n collectionNav().clearActiveItem();\n syncTrigger();\n syncMenu();\n if (restoreFocus) triggerEl().focus({preventScroll: true});\n };\n\n const finishClose = (): void => {\n popover?.close();\n syncTrigger();\n syncMenu();\n reflectTransitionOpen = true;\n dispatch({el: root(), name: 'ui:close'});\n };\n\n const syncProps = (): void => {\n syncTrigger();\n syncMenu();\n popover?.sync();\n };\n\n const bridge = createAlpineMachine({\n schema: dropdownSchema,\n hooks: dropdownHooks,\n createMachine: ({props}) => createDropdownMachine({\n props,\n effects: {prepareOpen, finishOpen, prepareClose, finishClose, syncProps, syncSubmenus},\n }),\n });\n\n const open = (focus: DropdownFocus = 'menu', event?: Event): void => {\n event?.preventDefault();\n if (currentProps().disabled) return;\n if (bridge.hasTag('expanded')) {\n if (focus === 'first') collectionNav().focusFirst();\n return;\n }\n bridge.send({type: 'OPEN', focus});\n };\n\n const close = (restoreFocus: boolean, event?: Event): void => {\n event?.preventDefault();\n bridge.send({type: 'CLOSE', restoreFocus});\n };\n\n const selectItem = (item: HTMLElement, event: Event): void => {\n if (itemDisabled(item)) {\n event.preventDefault();\n return;\n }\n\n const menuKeepOpen = asBool({value: menuEl().dataset.keepOpen});\n const itemKeepOpen = item.dataset.keepOpen === undefined || item.dataset.keepOpen === ''\n ? menuKeepOpen\n : asBool({value: item.dataset.keepOpen});\n if (!itemKeepOpen) close(false);\n };\n\n const handleClick = (event: Event): void => {\n const item = itemFrom(event.target);\n if (item) {\n const submenu = submenuForTrigger(item);\n if (submenu) {\n event.preventDefault();\n openSubmenu(submenu);\n return;\n }\n selectItem(item, event);\n return;\n }\n\n const target = event.target;\n if (target instanceof Node && triggerEl().contains(target)) {\n event.preventDefault();\n if (!currentProps().disabled) bridge.send('TOGGLE');\n }\n };\n\n const handleKeydown = (event: Event): void => {\n if (!(event instanceof KeyboardEvent)) return;\n if (event.key === 'Escape' && isVisible()) {\n event.preventDefault();\n event.stopPropagation();\n const deepest = submenus.get(currentSubmenuPath().at(-1) ?? '');\n if (deepest) {\n closeSubmenu(deepest, true);\n return;\n }\n close(true);\n return;\n }\n\n const target = event.target;\n if (target instanceof Node && triggerEl().contains(target)) {\n if (event.key === 'ArrowDown') {\n open('first', event);\n return;\n }\n const trigger = triggerEl();\n if (!(trigger instanceof HTMLButtonElement) && !(trigger instanceof HTMLAnchorElement)\n && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n if (!currentProps().disabled) bridge.send('TOGGLE');\n }\n return;\n }\n\n const item = itemFrom(event.target);\n const submenu = submenuForTrigger(item);\n if (submenu && (event.key === 'ArrowRight' || event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n openSubmenu(submenu, true);\n return;\n }\n\n const containingPanel = event.target instanceof Element\n ? event.target.closest<HTMLElement>('[data-ui-menu-submenu-panel]')\n : null;\n const containingSubmenu = submenuForPanel(containingPanel);\n if (containingSubmenu && event.key === 'ArrowLeft') {\n event.preventDefault();\n closeSubmenu(containingSubmenu, true);\n return;\n }\n\n if (item && (event.key === 'Enter' || event.key === ' ')\n && item.matches('[role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]')) {\n event.preventDefault();\n item.querySelector<HTMLInputElement>('input[type=\"checkbox\"], input[type=\"radio\"]')?.click();\n return;\n }\n\n if (containingSubmenu) containingSubmenu.collection.handleKeydown({event});\n else if (menuEl().contains(event.target as Node)) collectionNav().handleKeydown({event});\n };\n\n const handleFocus = (event: Event): void => {\n const item = itemFrom(event.target);\n if (item && !itemDisabled(item)) collectionNav().activateItem({el: item});\n };\n\n const handlePointer = (event: Event): void => {\n if (!(event instanceof PointerEvent)) return;\n if (safeArea?.contains({x: event.clientX, y: event.clientY})) return;\n const item = itemFrom(event.target);\n if (!item || itemDisabled(item)) return;\n safeArea = null;\n const submenu = submenuForTrigger(item);\n const containingPanel = item.closest<HTMLElement>('[data-ui-menu-submenu-panel]');\n const containingSubmenu = submenuForPanel(containingPanel);\n const navigation = containingSubmenu?.collection ?? collectionNav();\n navigation.activateItem({el: item});\n if (submenu) {\n openSubmenu(submenu);\n return;\n }\n bridge.send({type: 'SUBMENU_PATH_CHANGED', path: containingSubmenu ? pathTo(containingSubmenu) : []});\n };\n\n const handlePointerOut = (event: Event): void => {\n if (!(event instanceof PointerEvent)) return;\n if (!window.matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n const item = itemFrom(event.target);\n const submenu = submenuForTrigger(item);\n if (!submenu || !currentSubmenuPath().includes(submenu.id)) return;\n if (event.relatedTarget instanceof Node && submenu.panel.contains(event.relatedTarget)) return;\n const panel = submenu.panel.getBoundingClientRect();\n safeArea = createSubmenuSafeArea({\n origin: {x: event.clientX, y: event.clientY},\n panel: {left: panel.left, right: panel.right, top: panel.top, bottom: panel.bottom},\n });\n };\n\n const handleNativeToggle = (event: Event): void => {\n if (!('newState' in event)) return;\n if (event.newState === 'open') {\n if (!isVisible()) bridge.send('OPEN');\n return;\n }\n if (isVisible()) bridge.send('CLOSE');\n };\n\n let component!: TrellisAlpineComponent<DropdownData>;\n component = {\n ...bridge,\n get isOpen(): boolean {\n return this.snapshot.current?.tags.includes('expanded') ?? false;\n },\n init(): void {\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n triggerId = triggerEl().id || this.$id('dropdown-trigger');\n menuId = menuEl().id || this.$id('dropdown-menu');\n captureTriggerBaseline();\n collection = createCollectionNavigation({\n root: () => menuEl(),\n itemSelector: '[data-ui-menu-item]',\n ownsItem: (item) => item.closest('[data-ui-menu]') === menuEl(),\n isDisabled: itemDisabled,\n loop: () => asBool({value: menuEl().dataset.loop}),\n });\n popover = createAnchoredPopoverSurface({\n reference: triggerEl,\n floating: menuEl,\n position: () => currentProps().side,\n align: () => currentProps().align,\n gap: () => currentProps().gap,\n offset: () => currentProps().offset,\n });\n root().querySelectorAll<HTMLElement>('[data-ui-menu-submenu]').forEach((submenuRoot) => {\n const trigger = submenuRoot.querySelector<HTMLElement>(':scope > [data-ui-submenu-trigger]');\n const panel = submenuRoot.querySelector<HTMLElement>(':scope > [data-ui-menu-submenu-panel]');\n if (!trigger || !panel) throw new Error('Menu submenu requires a trigger and nested menu panel.');\n const id = submenuRoot.dataset.submenuId || `ui-submenu-${++submenuId}`;\n const triggerIdForSubmenu = trigger.id || `${id}-trigger`;\n const panelId = panel.id || `${id}-menu`;\n submenuRoot.dataset.submenuId = id;\n trigger.id = triggerIdForSubmenu;\n trigger.setAttribute('aria-controls', panelId);\n panel.id = panelId;\n panel.setAttribute('aria-labelledby', triggerIdForSubmenu);\n panel.setAttribute('popover', 'manual');\n panel.setAttribute('role', 'menu');\n panel.tabIndex = -1;\n const navigation = createCollectionNavigation({\n root: () => panel,\n itemSelector: '[data-ui-menu-item]',\n ownsItem: (item) => item.closest('[data-ui-menu]') === panel,\n isDisabled: itemDisabled,\n loop: () => asBool({value: panel.dataset.loop}),\n });\n const nestedPopover = createAnchoredPopoverSurface({\n reference: () => trigger,\n floating: () => panel,\n position: () => 'right',\n align: () => 'start',\n gap: () => 4,\n offset: () => 0,\n });\n submenus.set(id, {\n id,\n root: submenuRoot,\n trigger,\n panel: panel as PopoverElement,\n popover: nestedPopover,\n collection: navigation,\n });\n });\n cleanup.push(addDismissableLayer({\n isEnabled: () => bridge.hasTag('interactive'),\n roots: () => [root(), menuEl()],\n onDismiss: () => close(false),\n }));\n const clearSafeArea = (): void => { safeArea = null; };\n addListener({target: window, event: 'blur', handler: clearSafeArea, cleanup});\n addListener({target: window, event: 'resize', handler: clearSafeArea, cleanup});\n addListener({target: window, event: 'scroll', handler: clearSafeArea, cleanup, options: {capture: true}});\n syncTrigger();\n syncMenu();\n syncSubmenus([]);\n canReflectOpen = true;\n if (currentProps().open) queueMicrotask(() => bridge.send('OPEN'));\n },\n destroy(): void {\n cleanup.forEach((dispose) => dispose());\n cleanup = [];\n bridge.disconnect();\n popover?.destroy();\n submenus.forEach(({popover: nestedPopover}) => nestedPopover.destroy());\n submenus.clear();\n safeArea = null;\n popover = null;\n collection = null;\n triggerBaseline = null;\n rootEl = null;\n },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: dropdownStyles.parts.root, props, className: props.class}),\n {\n 'data-ui-dropdown': '',\n ':data-state': () => (bridge.hasTag('expanded') ? 'open' : 'closed'),\n '@click': handleClick,\n '@keydown': handleKeydown,\n '@focusin': handleFocus,\n '@pointermove': handlePointer,\n '@pointerout': handlePointerOut,\n },\n ]});\n },\n get menu(): BindingObject {\n const menu = menuEl();\n return mergeBindings({inputs: [\n resolveStyle({part: menuStyles.parts.menu, props: {}, className: menu.dataset.class}),\n {\n id: menuId,\n popover: 'manual',\n role: 'menu',\n tabindex: '-1',\n 'data-ui-menu': '',\n ':hidden': () => !bridge.hasTag('visible'),\n ':data-state': () => (bridge.hasTag('expanded') ? 'open' : 'closed'),\n '@toggle': handleNativeToggle,\n },\n ]});\n },\n open(event?: Event): void {\n open('menu', event);\n },\n close(event?: Event): void {\n close(event instanceof KeyboardEvent, event);\n },\n toggle(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled) return;\n bridge.send({type: 'TOGGLE', restoreFocus: event instanceof KeyboardEvent});\n },\n };\n\n return component;\n};\n\nconst registerDropdown = defineAlpineData('UiDropdown', UiDropdown);\n\nexport {registerDropdown, UiDropdown};\nexport type {DropdownData, DropdownTransition, UiDropdownApi};\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 {registerDropdown as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerDropdown = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerDropdown};\nexport default registerDropdown;\nexport * from './index';\n"],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import{t as e}from"./bridge-B4S_D6hV.js";import{n as t,r as n}from"./morph-Cq3V_23_.js";import{n as r,o as i}from"./alpine-machine-BTDXpEr6.js";import{t as a}from"./dom-invalidation-Dw6clnS4.js";import{n as o}from"./fragment-Bl3Rq38L.js";var s=`single-child`,c=(e,t)=>{if(typeof t==`string`&&t)return t;let n=e.getAttribute(`data-ui-key`)||e.id;if(n)return n;let r=e.parentElement;if(r?.getAttribute(`data-ui-key-scope`)!==s)return null;let i=r.getAttribute(`data-ui-key`)||r.id;return i?`${i}:single-child`:null},l=`data-ui-motion-key`,u=`data-ui-motion-layout`,ee=e=>typeof e==`object`&&!!e&&Symbol.iterator in e,d=(e=document)=>typeof e==`string`?Array.from(document.querySelectorAll(e)):e instanceof Document||e instanceof Element?[e]:ee(e)?Array.from(e):[document],f=(e=document,t={})=>{let n=d(e).filter(e=>e instanceof Element),r=[],i=(e,t,n)=>{r.push({element:e,attr:t,previous:e.getAttribute(t)}),e.setAttribute(t,n)};return n.forEach(e=>{(t.layout??!0)&&i(e,u,``);let n=c(e,t.key);n&&!e.hasAttribute(`data-ui-motion-key`)&&i(e,l,n)}),()=>{r.reverse().forEach(({element:e,attr:t,previous:n})=>{if(n===null){e.removeAttribute(t);return}e.setAttribute(t,n)})}},p=(e,...t)=>{typeof console<`u`&&console.warn(e,...t)},m=new Set,h=!1,g=null,_=null,v=null,y=Promise.resolve(),b=0,te=e=>{for(let t of e)m.add(t);h||m.size===0||(h=!0,queueMicrotask(()=>{h=!1;let e=Array.from(m);m.clear(),e.forEach(e=>e.invalidateDom())}))},x=e=>{let t=document.createElement(`template`);return t.innerHTML=e,t},S=e=>Array.from(x(e).content.children).filter(e=>e instanceof HTMLElement),C=(e,t)=>{t.forEach(t=>e.initTree(t))},w=(e,t)=>t||e.getAttribute(`x-merge`)||`replace`,T=e=>{if(e.selector)return document.querySelector(e.selector);if(!e.target)return null;let t=e.target.startsWith(`#`)?e.target.slice(1):e.target;return document.getElementById(t)},ne=(e,t,i)=>{let s=w(t,i.mode);if(s===`remove`){t.remove();return}if(!i.html){p(`x-ui-stream: received patch with no html`);return}if(s===`morph`||s===`outer`){if(typeof e.morph==`function`){let o=new Set;e.morph(t,i.html,{key(e){return c(e)},updating(e,t,r,a){if(e instanceof Element&&_?.(i.requestId??null,e)){a?.();return}n(e,t)},updated(t){if(!(t instanceof Element))return;let n=r(e,t);n&&o.add(n),a(t).forEach(e=>{o.add(e)})}}),te(o);return}p(`x-ui-stream: morph mode requires an Alpine morph implementation; falling back to replace`)}if(s===`replace`||s===`morph`||s===`outer`){let[n]=S(i.html);if(!n){p(`x-ui-stream: replace mode produced no element`);return}t.replaceWith(n),e.initTree(n);return}if(s===`update`){o(e,t,i.html);return}let l=x(i.html),u=Array.from(l.content.children).filter(e=>e instanceof HTMLElement);if(s===`append`){t.append(l.content),C(e,u);return}if(s===`prepend`){t.prepend(l.content),C(e,u);return}if(s===`before`){t.before(l.content),C(e,u);return}s===`after`&&(t.after(l.content),C(e,u))},E=(e,t)=>{let n=T(t);if(n){ne(e,n,t),t.focus&&document.querySelector(t.focus)?.focus({preventScroll:!0});return}if(t.selector||t.target){p(`x-ui-stream: target not found`,t.selector??t.target);return}if(!t.html){p(`x-ui-stream: received patch with no html`);return}S(t.html).forEach(n=>{if(!n.id){p(`x-ui-stream: top-level element has no id, skipping`,n);return}let r=document.getElementById(n.id);r&&ne(e,r,{...t,html:n.outerHTML})}),t.focus&&document.querySelector(t.focus)?.focus({preventScroll:!0})},D=(t,n)=>{let r=Array.isArray(n)?n:[n],i=()=>{r.forEach(e=>E(t,e))},a=()=>{let e=r.filter(e=>e.viewTransition===!0);if(e.length===0){i();return}v?v(t,e,i):i()},o=r.flatMap(e=>e.assets??[]);if(o.length===0&&b===0){a();return}b+=1;let s=async()=>{o.length>0&&await e(o,t),a()};y=y.then(s,s).catch(()=>void 0).finally(()=>{--b})},re=e=>{v=e},ie=e=>{document.dispatchEvent(new CustomEvent(e.event,{detail:e.detail??{},bubbles:!0,composed:!0}))},O=e=>{let t=new Map;for(let n of e.data.split(`
2
- `)){let e=n.indexOf(` `),r=e>0,i=r?n.slice(0,e):n;if(!r&&i!==`html`)return p(`x-ui-stream: invalid SSE command line`,i),null;let a=r?n.slice(e+1):``,o=t.get(i);o?o.push(a):t.set(i,[a])}return t},k=(e,t)=>{let n=e.get(t);if(n?.length)return n.length>1&&p(`x-ui-stream: duplicate SSE command, using last value`,t),n.at(-1)},ae=(e,t)=>{let n=O(t);if(!n||n.size===0)return;let r=k(n,`request-id`);if(g&&!g(r??null))return;let i,a=k(n,`assets`);if(a)try{let e=JSON.parse(a);if(!Array.isArray(e))throw TypeError(`assets must be an array`);i=e}catch{p(`x-ui-stream: invalid patch assets JSON`,a);return}D(e,{mode:k(n,`mode`)??`replace`,target:k(n,`target`)??null,selector:k(n,`selector`)??null,html:n.get(`html`)?.join(`
3
- `)??null,requestId:r??null,viewTransition:k(n,`view-transition`)===`true`,focus:k(n,`focus`)??null,...i?{assets:i}:{}})},oe=e=>{let t=O(e);if(!t)return;let n=k(t,`request-id`);if(g&&!g(n??null))return;let r=k(t,`event`);if(!r){p(`x-ui-stream: dispatch SSE frame missing event`);return}let a=k(t,`detail`),o={};if(a)try{let e=JSON.parse(a);i(e)&&(o=e)}catch{p(`x-ui-stream: invalid dispatch detail JSON`,a);return}ie({event:r,detail:o})},se={"trellis-ui-patch":ae,"trellis-ui-dispatch":(e,t)=>oe(t)},ce=`trellis-ui-`,le=(e,t)=>{let n=se[t.event];if(!n){t.event.startsWith(ce)&&p(`x-ui-stream: unsupported SSE event`,t.event);return}n(e,t)},ue=(e,t=``,n=``,r=``)=>{let i=new URL(e,document.baseURI),a=[...new Set(t.split(/\s+/).filter(Boolean))];return n&&i.searchParams.set(`client`,n),r&&i.searchParams.set(`lastEventId`,r),a.length>0&&(i.searchParams.delete(`channel`),a.forEach(e=>i.searchParams.append(`channel`,e))),/^[a-z][a-z\d+.-]*:/i.test(e)||e.startsWith(`//`)?i.href:`${i.pathname}${i.search}${i.hash}`},de=(e,t,n=``,r=``,i={})=>{let a=new EventSource(ue(t,n,r,i.lastEventId)),o=!0,s=e=>{e.lastEventId&&i.eventId?.(e.lastEventId)};return Object.keys(se).forEach(t=>{a.addEventListener(t,t=>{!o||!(t instanceof MessageEvent)||(s(t),le(e,{event:t.type,data:String(t.data)}))})}),a.addEventListener(`stream-open`,()=>{o&&i.open?.()}),a.addEventListener(`stream-reset`,e=>{o&&(e instanceof MessageEvent&&s(e),i.reset?.(e instanceof MessageEvent?String(e.data):``))}),a.addEventListener(`stream-error`,e=>{o&&(o=!1,a.close(),i.error?.(e instanceof MessageEvent?String(e.data):``))}),a.addEventListener(`error`,()=>{o&&(o=!1,a.close(),i.disconnected?.())}),{abort(){o=!1,a.close()}}},A=new Map,fe=new Set,pe=e=>e instanceof HTMLElement&&e.id?e.id:e,me=6e4,he=1e3,ge=2e3,_e=1e3,ve=3e4,j=(e,t,n={})=>{t!==`reset`&&(e.dataset.uiStreamState=t),e.dispatchEvent(new CustomEvent(`ui:stream:${t}`,{bubbles:!0,composed:!0,detail:{source:e,...n}}))},ye=(e,t)=>ue(t,e.dataset.uiStreamScopes,e.dataset.uiStreamClient),be=e=>e.dataset.uiStreamOpenWhenHidden===`true`,M=(e,t)=>JSON.stringify({openWhenHidden:be(e),url:ye(e,t)}),xe=e=>{if(!(e instanceof CustomEvent))return null;let t=e.detail;return!t||typeof t.requestId!=`string`||typeof t.method!=`string`||!(t.controller instanceof AbortController)?null:t},Se=(e,n,r)=>{let i=M(n,r),a=null,o,s=null,c,l,u=!1,ee=``,d=0,f=0,m=!1,h=!1,g=new Map,_=new Set,v=be(n),y=()=>!m&&(v||document.visibilityState===`visible`),b=()=>{window.clearTimeout(c),c=void 0},te=()=>{n.dispatchEvent(new CustomEvent(`ui:stream:resumed`,{bubbles:!0,composed:!0}))},x=t=>{a?.abort(),b();let o=++d;i=M(n,r),j(n,`connecting`),a=de(e,r,n.dataset.uiStreamScopes,t,{lastEventId:ee,open:()=>{if(o!==d)return;let e=u;u=!0,f=0,j(n,`open`),e&&te()},disconnected:()=>{if(o!==d||h||(a=null,k.controller=null,j(n,`disconnected`),!y()))return;let e=Math.min(_e*2**f,ve);f+=1;let t=Math.floor(Math.random()*e);c=window.setTimeout(()=>{c=void 0,T()},t)},reset:e=>j(n,`reset`,{data:e}),eventId:e=>{o===d&&(ee=e)},error:e=>{o!==d||h||(m=!0,a=null,k.controller=null,b(),j(n,`error`,{data:e}))}}),k.controller=a,k.configuration=i,S()},S=()=>{if(window.clearTimeout(o),o=void 0,!y())return;let e=Number(n.dataset.uiStreamClientExpires);if(!Number.isFinite(e)||e<=0)return;let t=e-Date.now()-me;if(t<=0){w();return}o=window.setTimeout(()=>void w(),t)},C=()=>{if(h)return Promise.resolve(null);if(s)return s;let e=n.dataset.uiStreamClientRefresh;return e?(s=fetch(e,{headers:{Accept:`application/json`,"X-Trellis-Client":n.dataset.uiStreamClient??``}}).then(async e=>{if(!e.ok)throw Error(`ClientSession refresh failed (${e.status})`);let t=await e.json();if(typeof t.token!=`string`||typeof t.expiresAt!=`number`)throw Error(`ClientSession refresh returned an invalid payload`);return h?null:(n.dataset.uiStreamClient=t.token,n.dataset.uiStreamClientExpires=String(t.expiresAt),t.token)}).catch(e=>{p(`x-ui-stream: could not refresh ClientSession`,e);let t=Number(n.dataset.uiStreamClientExpires);return!Number.isFinite(t)||t<=Date.now()?(j(n,`error`,{error:e}),null):(y()&&(o=window.setTimeout(()=>void w(),5e3)),n.dataset.uiStreamClient??null)}).finally(()=>{s=null}),s):(j(n,`error`,{reason:`missing-refresh-url`}),Promise.resolve(null))},w=async()=>{if(!y())return;let e=await C();e&&y()&&!h&&x(e)},T=async()=>{if(h||!y()||a)return;let e=Number(n.dataset.uiStreamClientExpires),t=n.dataset.uiStreamClient??``,r=Number.isFinite(e)&&e>0&&e-Date.now()<=me?await C():t;r&&y()&&!h&&!a&&x(r)},ne=()=>{l=void 0,!(h||v||document.visibilityState!==`hidden`)&&(_.size>0||(g.forEach(e=>e.abort(`Document suspended`)),g.clear(),window.clearTimeout(o),o=void 0,b(),a?.abort(),a=null,j(n,`suspended`),k.controller=null))},E=e=>{window.clearTimeout(l),l=void 0,!(v||document.visibilityState!==`hidden`)&&(l=window.setTimeout(ne,e))},D=()=>{m||w()},re=e=>{let t=xe(e);if(t){if(t.method===`GET`){g.set(t.requestId,t.controller);return}_.add(t.requestId),document.visibilityState===`hidden`&&!v&&(window.clearTimeout(l),l=void 0)}},ie=e=>{let t=xe(e);if(t){if(t.method===`GET`){g.delete(t.requestId);return}_.delete(t.requestId),document.visibilityState===`hidden`&&!v&&_.size===0&&E(ge)}},O=()=>{if(!(v||m)){if(document.visibilityState===`hidden`){if(_.size>0)return;E(he);return}window.clearTimeout(l),l=void 0,a||T()}},k={configuration:i,controller:null,element:n,dispose(){h||(h=!0,window.clearTimeout(o),window.clearTimeout(l),b(),n.removeEventListener(`ui:stream:refresh`,D),document.removeEventListener(`visibilitychange`,O),document.removeEventListener(`ui:request:start`,re),document.removeEventListener(`ui:request:finish`,ie),a?.abort())},rescheduleRefresh:S};return t(n,`data-ui-stream-state`),n.addEventListener(`ui:stream:refresh`,D),document.addEventListener(`visibilitychange`,O),document.addEventListener(`ui:request:start`,re),document.addEventListener(`ui:request:finish`,ie),y()?T():j(n,`suspended`),k},Ce=e=>{typeof e.directive==`function`&&e.directive(`ui-stream`,(n,{expression:r},{cleanup:i})=>{if(!r)return;let a=n instanceof HTMLElement?n.dataset.uiStreamClient:``;if(!(n instanceof HTMLElement)||!a){p(`x-ui-stream: missing signed ClientSession capability`);return}let o=pe(n),s=A.get(o),c=M(n,r);if(s?.configuration===c){n.dataset.uiStreamState=s.element.dataset.uiStreamState??`connecting`,t(n,`data-ui-stream-state`),queueMicrotask(()=>s.rescheduleRefresh());return}if(!n.isConnected&&typeof o==`string`){fe.has(o)||(fe.add(o),queueMicrotask(()=>{fe.delete(o);let t=document.getElementById(o);if(!t)return;let n=A.get(o),i=M(t,r);if(n?.configuration===i){n.rescheduleRefresh();return}n?.dispose(),A.set(o,Se(e,t,r))}));return}s?.dispose(),A.set(o,Se(e,n,r)),i(()=>{let e=A.get(o);e?.element===n&&(e.dispose(),A.delete(o))})})},we=e=>{g=e},Te=e=>{_=e},Ee=`X-Trellis-UI-Request`,De=`X-Trellis-Client`,Oe=`X-Trellis-Request-ID`,ke=`X-Trellis-Navigate`,Ae=`X-Trellis-Navigate-History`,N=`[data-ui-stream][data-ui-stream-client]`,je=`ui:stream:open`,Me=`ui:stream:error`,Ne=`ui:stream:disconnected`,Pe=`ui:stream:refresh`,Fe=`meta[name="csrf-token"]`,Ie=`text/event-stream`,Le=`data-ui-request-pending`,Re=`application/x-www-form-urlencoded`,ze=`multipart/form-data`,Be=new Set([`GET`]),Ve=null,He=null,Ue=e=>{let t=(e||`GET`).toUpperCase();return t===`POST`||t===`PUT`||t===`PATCH`||t===`DELETE`?t:`GET`},We=(e,t,n)=>{if(e instanceof FormData){e.append(t,n);return}e.append(t,n instanceof File?n.name:String(n))},Ge=(e,t,n)=>{if(Array.isArray(n)){n.forEach(n=>Ge(e,t,n));return}n!=null&&We(e,t,n instanceof Blob?n:String(n))},Ke=(e,t)=>{Object.entries(t).forEach(([t,n])=>Ge(e,t,n))},qe=(e,t)=>{if(t){if(t instanceof FormData||t instanceof URLSearchParams){for(let[n,r]of t.entries())We(e,n,r);return}Ke(e,t)}},Je=(e,t)=>{let n=new Headers(e);n.set(Ee,`true`);let r=document.querySelector(Fe)?.content;return r&&n.set(`X-CSRFToken`,r),t instanceof URLSearchParams&&!n.has(`Content-Type`)&&n.set(`Content-Type`,Re),n},Ye=(e,t,n)=>{if(e)return new URL(e,document.baseURI);if(t instanceof HTMLFormElement){let e=n?.getAttribute(`formaction`)||t.getAttribute(`action`)||window.location.href;return new URL(e,document.baseURI)}return t instanceof HTMLAnchorElement?new URL(t.href,document.baseURI):new URL(window.location.href)},Xe=(e,t)=>t?.getAttribute(`formenctype`)||e.enctype||Re,Ze=e=>{if(!(e instanceof HTMLButtonElement||e instanceof HTMLInputElement))return null;let t=e.getAttribute(`name`);return t?[t,e.value]:null},Qe=(e,t)=>{let n=new FormData(e),r=Ze(t);return r&&n.append(...r),n},$e=e=>{let t=new URLSearchParams;for(let[n,r]of e.entries())r instanceof File?t.append(n,r.name):t.append(n,r);return t},et=(e,t)=>{if(e===void 0)return{payload:t,explicit:!1};if(e instanceof HTMLFormElement)return{payload:new FormData(e),explicit:!0};if(e instanceof FormData||e instanceof URLSearchParams||typeof e==`string`||e instanceof Blob||e instanceof ArrayBuffer)return{payload:e,explicit:!0};let n=new URLSearchParams;return Ke(n,e),{payload:n,explicit:!0}},tt=(e,t)=>{if(!t)return e;if(e instanceof FormData||e instanceof URLSearchParams)return qe(e,t),e;let n=new URLSearchParams;return typeof e==`string`&&n.append(`data`,e),qe(n,t),n},nt=(e,t)=>e instanceof HTMLFormElement?{payload:Qe(e,t),enctype:Xe(e,t)}:{payload:new URLSearchParams,enctype:Re},rt=(e,t,n)=>t?Ue(t):e instanceof HTMLFormElement?Ue(n?.getAttribute(`formmethod`)||e.getAttribute(`method`)):`GET`,it=(e,t={})=>{let n=t.source,r=t.submitter??null,i=rt(n,t.method,r),a=Ye(e,n,r),o=nt(n,r),s=et(t.data,o.payload),c=tt(s.payload,t.extra),l={method:i,...t.cache?{cache:t.cache}:{}},u=null;return Be.has(i)?c instanceof FormData||c instanceof URLSearchParams?$e(c).forEach((e,t)=>a.searchParams.append(t,e)):typeof c==`string`&&a.searchParams.append(`data`,c):u=c instanceof FormData&&(s.explicit||o.enctype===ze)?c:c instanceof FormData?$e(c):c,l.headers=Je(t.headers,u),u!=null&&(l.body=u),{url:a,method:i,init:l}},at=e=>e?.isConnected?e:document,ot=(e,t,n={})=>new CustomEvent(e,{bubbles:!0,composed:!0,cancelable:n.cancelable??!1,detail:t}),P=(e,t,n,r)=>at(t).dispatchEvent(ot(e,n,r)),F=new WeakMap,st=e=>{if(!e)return;let t=F.get(e)??0;F.set(e,t+1),e.setAttribute(`aria-busy`,`true`),e.setAttribute(Le,`true`)},ct=e=>{if(!e)return;let t=(F.get(e)??1)-1;if(t>0){F.set(e,t);return}F.delete(e),e.removeAttribute(`aria-busy`),e.removeAttribute(Le)},lt=e=>e.headers.get(`Content-Type`)?.toLowerCase().includes(Ie)??!1,ut=async e=>{let t=e.headers.get(ke);if(t){let n=e.headers.get(Ae)??`auto`;return n!==`auto`&&n!==`push`&&n!==`replace`?(p(`x-ui-request: invalid navigation history`,n),{response:e,type:`other`,url:e.url}):{response:e,type:`navigate`,url:e.url,navigation:{history:n,url:t}}}return e.status===204||e.body===null||e.headers.get(`X-Trellis-UI-Response`)===`empty`?{response:e,type:`empty`,url:e.url}:e.redirected&&!lt(e)?(window.location.assign(e.url),{response:e,type:`redirect`,url:e.url}):(p(`x-ui-request: expected an empty response`,e),{response:e,type:`other`,url:e.url})},dt=new WeakMap,I=e=>{let t=e.dataset.uiStreamClient,n=Number(e.dataset.uiStreamClientExpires);return!t||Number.isFinite(n)&&n>0&&n<=Date.now()?null:t},ft=()=>{let e=document.querySelector(N),t=e?I(e):null;return!e||!t||e.dataset.uiStreamState!==`open`?null:{token:t}},pt=e=>{let t=Number(e.dataset.uiStreamTimeout);return Number.isFinite(t)&&t>=0?t:5e3},mt=e=>{let t=document.querySelector(N),n=t?I(t):null;if(!t)return Promise.resolve(null);if(n&&t.dataset.uiStreamState===`open`)return Promise.resolve({token:n});if(t.dataset.uiStreamState===`error`||t.dataset.uiStreamState===`disconnected`||e.aborted)return Promise.resolve(null);let r=dt.get(t),i=r??new Promise(e=>{let n=n=>{window.clearTimeout(a),t.removeEventListener(je,r),t.removeEventListener(Me,i),t.removeEventListener(Ne,i),e(n)},r=()=>{let e=I(t);n(e?{token:e}:null)},i=()=>n(null),a=window.setTimeout(i,pt(t));t.addEventListener(je,r,{once:!0}),t.addEventListener(Me,i,{once:!0}),t.addEventListener(Ne,i,{once:!0})}).finally(()=>{dt.delete(t)});return r||dt.set(t,i),new Promise(t=>{let n=()=>t(null);e.addEventListener(`abort`,n,{once:!0}),i.then(r=>{e.removeEventListener(`abort`,n),t(r)})})},ht=async e=>{let t=ft();if(t)return t;let n=document.querySelector(N);if(!n)return null;if(!I(n)){n.dispatchEvent(new CustomEvent(Pe));let e=ft();if(e)return e}return mt(e)},gt=(e,t)=>{if(!t)return{signal:e.signal,cleanup:()=>void 0};let n=()=>e.abort(t.reason);return t.aborted?n():t.addEventListener(`abort`,n,{once:!0}),{signal:e.signal,cleanup:()=>t.removeEventListener(`abort`,n)}},_t=(e,t)=>t.aborted||e instanceof DOMException&&e.name===`AbortError`||e instanceof Error&&e.name===`AbortError`,vt=async(e,t,n={})=>{let r=n.source,i=new AbortController,a=n.requestId??crypto.randomUUID(),o=it(t,n),s=gt(i,n.signal),c=s.signal;o.init.signal=c,o.init.headers.set(Oe,a);let l=ft()??await ht(c);if(c.aborted)return s.cleanup(),{requestId:a,response:null,type:`aborted`,url:o.url.toString()};if(!l)return s.cleanup(),{requestId:a,response:null,type:c.aborted?`aborted`:`unavailable`,url:o.url.toString()};o.init.headers.set(De,l.token);let u={source:r??document,url:o.url.toString(),method:o.method,requestInit:o.init,requestId:a,controller:i,signal:c};if(!P(`ui:request:before`,r,u,{cancelable:!0}))return s.cleanup(),{requestId:a,response:null,type:`cancelled`,url:o.url.toString()};st(r),P(`ui:request:start`,r,u);try{let e=await fetch(o.url.toString(),o.init),t=await ut(e);u.response=e,u.responseType=t.type,e.ok&&t.type!==`other`||t.type===`redirect`?P(`ui:request:success`,r,u):P(`ui:request:error`,r,u);let n={...t,requestId:a};return n.navigation&&He?.(n),n}catch(e){if(_t(e,c))return u.responseType=`aborted`,{requestId:a,response:null,type:`aborted`,url:o.url.toString()};throw u.error=e,P(`ui:request:error`,r,u),e}finally{s.cleanup(),ct(r),P(`ui:request:finish`,r,u)}},yt=()=>{if(!Ve)throw Error(`Trellis request runtime has not been registered with Alpine.`);return Ve},L=(e,t={})=>vt(yt(),e,t),bt=(e,t={})=>L(e,{...t,method:`GET`}),xt=(e,t={})=>L(e,{...t,method:`POST`}),St=(e,t={})=>L(e,{...t,method:`PUT`}),Ct=(e,t={})=>L(e,{...t,method:`DELETE`}),wt=e=>{Ve=e},Tt=e=>{He=e},Et=`__trellis`,Dt=`[data-ui-scroll-restoration]`,Ot=20,kt=100,At=!1,R=null,z=0,jt=!1,B=null,V=new Map,H=new Set,U=new Map,W=()=>crypto.randomUUID(),Mt=()=>({containers:{},window:{x:0,y:0}}),Nt=e=>e.getAttribute(`data-ui-scroll-restoration`)?.trim()||e.id||null,G=()=>{let e={};return document.querySelectorAll(Dt).forEach(t=>{let n=Nt(t);n&&(e[n]={x:t.scrollLeft,y:t.scrollTop})}),{containers:e,window:{x:window.scrollX,y:window.scrollY}}},K=e=>{if(!i(e))return null;let t=e[Et];if(!i(t))return null;let n=t.navigate;return!i(n)||typeof n.id!=`string`||typeof n.index!=`number`||typeof n.url!=`string`||!i(n.scroll)?null:n},Pt=e=>{let t=i(window.history.state)?window.history.state:{},n=i(t.__trellis)?t[Et]:{};return{...t,[Et]:{...n,navigate:e}}},q=(e,t=e.url)=>{window.history.replaceState(Pt(e),``,t)},Ft=()=>{let e=K(window.history.state);if(!e)return;let t=G();V.set(e.id,t),q({...e,scroll:t})},It=()=>{B!==null&&(cancelAnimationFrame(B),B=null),Ft()},Lt=()=>{let e=K(window.history.state);e&&(V.set(e.id,G()),B===null&&(B=requestAnimationFrame(()=>{B=null;let e=K(window.history.state);if(!e)return;let t=V.get(e.id);t&&q({...e,scroll:t})})))},Rt=e=>{requestAnimationFrame(()=>{window.scrollTo({left:e.window.x,top:e.window.y,behavior:`instant`}),document.querySelectorAll(Dt).forEach(t=>{let n=Nt(t),r=n?e.containers[n]:void 0;t.scrollTo({left:r?.x??0,top:r?.y??0,behavior:`instant`})})})},J=(e,t,n=!1)=>{let r=t.source?.isConnected?t.source:document;return r.dispatchEvent(new CustomEvent(e,{bubbles:!0,cancelable:n,composed:!0,detail:{history:t.history,source:r,url:t.destination}}))},zt=e=>{for(U.set(e.requestId,e);U.size>Ot;){let e=U.keys().next().value;if(!e)break;U.delete(e)}},Bt=e=>{for(H.add(e);H.size>kt;){let e=H.values().next().value;if(!e)break;H.delete(e)}},Vt=()=>{R&&=(Bt(R.requestId),R.controller.abort(`Superseded by a newer Trellis navigation`),null)},Ht=()=>{Vt(),U.forEach(e=>Bt(e.requestId)),U.clear()},Y=e=>{window.location.assign(e.href)},X=e=>{let t=new URL(e,document.baseURI);return t.origin===window.location.origin?t:null},Ut=e=>{It();let t={id:W(),index:z+1,scroll:Mt(),url:e.destination.href};return z=t.index,window.history.pushState(Pt(t),``,e.destination),e.entryId=t.id,t},Wt=e=>{let t={id:W(),index:z,scroll:Mt(),url:e.destination.href};return q(t,e.destination),e.entryId=t.id,t},Gt=e=>{if(e.disposition===`replace`)return!0;if(e.disposition===`push`)return!1;let t=new URL(window.location.href);return t.origin===e.destination.origin&&t.pathname===e.destination.pathname},Kt=(e,t)=>{t?.type===`aborted`||t?.type===`cancelled`||t?.type===`redirect`||Y(e.destination)},qt=(e,t,n)=>{if(H.has(e.requestId))return;if(t.type!==`empty`){Kt(e,t);return}let r=n??(Gt(e)?Wt(e):Ut(e));if(n&&e.destination.href!==n.url){let t={...n,url:e.destination.href};q(t,e.destination),e.entryId=t.id}Rt(r.scroll),J(`ui:navigated`,e)},Jt=(e,t,n)=>{let r={controller:new AbortController,destination:t,entryId:n.restoredState?.id??null,history:n.history,disposition:n.disposition??`auto`,requestId:W(),...n.requestOptions?{requestOptions:n.requestOptions}:{},...n.source?{source:n.source}:{}};if(n.preflight!==!1&&!J(`ui:navigate`,r,!0))return Promise.resolve();Ht(),R=r,J(`ui:navigating`,r);let i=new Headers(r.requestOptions?.headers);i.set(`X-Trellis-Navigation`,r.history?`restore`:`navigate`);let a=!0,o=async()=>{let t=a?r.requestOptions:void 0,n=a?r.source:void 0;a=!1;let s=await vt(e,r.destination,{...t,headers:i,method:`GET`,requestId:r.requestId,signal:r.controller.signal,...n?{source:n}:{}});if(r.destination=new URL(s.url,document.baseURI),!s.navigation)return s;let c=X(s.navigation.url);return c?(r.destination=c,s.navigation.history!==`auto`&&(r.disposition=s.navigation.history),o()):(Y(new URL(s.navigation.url,document.baseURI)),{...s,type:`redirect`})};return o().then(e=>{R?.requestId!==r.requestId&&!U.has(r.requestId)||qt(r,e,n.restoredState)}).catch(e=>{r.controller.signal.aborted||(p(`x-ui-request.navigate: restoration failed`,e),Kt(r))}).finally(()=>{R?.requestId===r.requestId&&(R=null),H.has(r.requestId)||zt(r)})},Yt=()=>{let e=K(window.history.state);e?z=e.index:q({id:W(),index:0,scroll:G(),url:window.location.href}),`scrollRestoration`in window.history&&(window.history.scrollRestoration=`manual`)},Xt=()=>{if(K(window.history.state))return;let e={id:W(),index:z+1,scroll:G(),url:window.location.href};z=e.index,q(e)},Zt=e=>{At||(At=!0,Yt(),we(e=>!e||!H.has(e)),Te((e,t)=>t.matches(`[data-ui-stream]`)&&!!(e&&(R?.requestId===e||U.has(e)))),Tt(t=>{if(!t.navigation)return!1;if(H.has(t.requestId)||R?.requestId===t.requestId)return!0;let n=X(t.navigation.url);return n?(Jt(e,n,{history:!1,disposition:t.navigation.history}),!0):(Y(new URL(t.navigation.url,document.baseURI)),!0)}),window.addEventListener(`scroll`,Lt,{passive:!0}),document.addEventListener(`scroll`,Lt,{capture:!0,passive:!0}),window.addEventListener(`pagehide`,It),window.addEventListener(`hashchange`,Xt),window.addEventListener(`popstate`,t=>{if(jt){jt=!1;return}let n=K(t.state);if(!n){Xt();return}let r=V.get(n.id),i=r?{...n,scroll:r}:n,a=X(n.url);if(!a||a.href!==window.location.href){Y(new URL(window.location.href));return}let o=z;if(z=n.index,!J(`ui:navigate`,{controller:new AbortController,destination:a,entryId:n.id,history:!0,disposition:`replace`,requestId:W()},!0)){jt=!0,window.history.go(o-n.index),z=o;return}Jt(e,a,{history:!0,preflight:!1,restoredState:i})}))},Qt=(e,t,n,r)=>{let{history:i=`auto`,...a}=r??{};return Jt(e,new URL(t,document.baseURI),{history:!1,disposition:i,requestOptions:a,...n?{source:n}:{}})},Z={activeRequests:0},$t=!1,en=!1,Q={},tn=null,nn=(e,t={})=>{let{history:n,navigate:r=!1,...i}=t;if(!r)return bt(e,i);if(!tn)throw Error(`Trellis UI runtime has not been registered with Alpine.`);let{source:a,...o}=i;return Qt(tn,e,a,{...o,...n?{history:n}:{}})},$=(e,t)=>(n,r={})=>{let{navigate:i=!1,...a}=r;return i&&p(`$ui.${e}: navigate is only supported for GET requests`),t(n,a)},rn={get:nn,post:$(`post`,xt),put:$(`put`,St),delete:$(`delete`,Ct),get motion(){if(!Q.motion)throw Error(`Trellis Motion capability is not registered.`);return Q.motion},get sortable(){if(!Q.sortable)throw Error(`Trellis Sortable capability is not registered.`);return Q.sortable},get isFetching(){return Z.activeRequests>0}},an=()=>{en||(en=!0,document.addEventListener(`ui:request:start`,()=>{Z.activeRequests+=1}),document.addEventListener(`ui:request:finish`,()=>{Z.activeRequests=Math.max(0,Z.activeRequests-1)}))},on=e=>{tn=e,$t||=(Z=e.reactive(Z),!0),an(),e.magic(`ui`,()=>rn)},sn=e=>{Q.motion=e},cn=e=>{Q.sortable=e};export{Qt as a,vt as c,p as d,l as f,c as h,rn as i,Ce as l,f as m,sn as n,Zt as o,u as p,cn as r,wt as s,on as t,re as u};
4
- //# sourceMappingURL=ui-FOJhyz8V.js.map