@vireo-ai/trellis-ui 0.1.51 → 0.1.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -1
- package/packages/client/src/components/select/styles.css +19 -0
- package/packages/client/src/styles/theme-support.css +267 -0
- package/packages/client/src/styles/theme.css +1 -268
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +11 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +252 -252
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-DRILCSFH.js → capability-motion-DQitxnHn.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-DRILCSFH.js.map → capability-motion-DQitxnHn.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-CpSdQwYp.js → capability-sortable-Dzv1zWaL.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-CpSdQwYp.js.map → capability-sortable-Dzv1zWaL.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-DnQs1xY6.js → core-DMbnlSdM.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-DnQs1xY6.js.map → core-DMbnlSdM.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DvHNTjt1.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DvHNTjt1.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-cnWgB3wz.js → entry.generated-CvcufWkj.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-cnWgB3wz.js.map → entry.generated-CvcufWkj.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BiyFgA-e.js → entry.generated-D3w3QaSO.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BiyFgA-e.js.map → entry.generated-D3w3QaSO.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CeD3bUBI.js → entry.generated-DCLIvEtJ.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CeD3bUBI.js.map → entry.generated-DCLIvEtJ.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-TbFjT_mY.js → entry.generated-DVQaci6w.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-TbFjT_mY.js.map → entry.generated-DVQaci6w.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D3am_GtI.js → entry.generated-DvvVMsQo.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D3am_GtI.js.map → entry.generated-DvvVMsQo.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D7qa64eM.js → entry.generated-Rx9NofFi.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Rx9NofFi.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-oz1RCU1b.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-oz1RCU1b.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DbC4gkeV.js → entry.generated-payXlXhL.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DbC4gkeV.js.map → entry.generated-payXlXhL.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-BSal0xp9.js → entry2.generated-CpoK52gE.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-BSal0xp9.js.map → entry2.generated-CpoK52gE.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-JcxejQr4.js → entry2.generated-D1X0sDop.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-JcxejQr4.js.map → entry2.generated-D1X0sDop.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-DCbmWkHV.js → entry2.generated-DXDHgDsN.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-DCbmWkHV.js.map → entry2.generated-DXDHgDsN.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-D26Cigu5.js → entry2.generated-_UPpJlWp.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-D26Cigu5.js.map → entry2.generated-_UPpJlWp.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B4uuk1JX.js → motion-BDQdr83d.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B4uuk1JX.js.map → motion-BDQdr83d.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-SdoiMWig.js +4 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-FOJhyz8V.js.map → ui-SdoiMWig.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +91 -91
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +8 -8
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +8 -8
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-5pQvlhmK.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-5pQvlhmK.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CPzThz_M.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CPzThz_M.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D7qa64eM.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-FOJhyz8V.js +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry2.generated-BSal0xp9.js","names":[],"sources":["../../../../../../../../client/src/components/tooltip/contract.ts","../../../../../../../../client/src/components/tooltip/machine.ts","../../../../../../../../client/src/components/tooltip/styles.ts","../../../../../../../../client/src/components/tooltip/index.ts","../../../../../../../../client/src/components/tooltip/entry.generated.ts"],"sourcesContent":["import {attribute, bool, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n ALIGNMENTS,\n ELEVATION_REFERENCES,\n POSITIONS,\n SURFACE_REFERENCES,\n type Alignment,\n type ElevationReference,\n type Position,\n type SurfaceReference,\n} from '../common';\n\nconst TOOLTIP_COLORS = ['neutral', 'accent', 'success', 'warning', 'danger'] as const;\nconst TOOLTIP_VARIANTS = ['surface', 'soft', 'solid'] as const;\n\nconst tooltipSchema = {\n side: oneOf(POSITIONS, 'bottom' as Position),\n align: oneOf(ALIGNMENTS, 'center' as Alignment),\n offset: number.clamp(-100, 100).default(0),\n gap: number.clamp(0, 50).default(8),\n openDelay: number.clamp(0, 5000).default(400),\n closeDelay: number.clamp(0, 5000).default(150),\n color: oneOf(TOOLTIP_COLORS, 'neutral'),\n variant: oneOf(TOOLTIP_VARIANTS, 'surface'),\n surface: oneOf(SURFACE_REFERENCES, '2' as SurfaceReference),\n elevation: oneOf(ELEVATION_REFERENCES, '4' as ElevationReference),\n disabled: bool,\n class: string,\n};\n\nconst tooltipDirectiveSchema = {\n side: attribute(tooltipSchema.side, 'ui-tooltip-side'),\n align: attribute(tooltipSchema.align, 'ui-tooltip-align'),\n offset: attribute(tooltipSchema.offset, 'ui-tooltip-offset'),\n gap: attribute(tooltipSchema.gap, 'ui-tooltip-gap'),\n openDelay: attribute(tooltipSchema.openDelay, 'ui-tooltip-open-delay'),\n closeDelay: attribute(tooltipSchema.closeDelay, 'ui-tooltip-close-delay'),\n color: attribute(tooltipSchema.color, 'ui-tooltip-color'),\n variant: attribute(tooltipSchema.variant, 'ui-tooltip-variant'),\n surface: attribute(tooltipSchema.surface, 'ui-tooltip-surface'),\n elevation: attribute(tooltipSchema.elevation, 'ui-tooltip-elevation'),\n disabled: attribute(tooltipSchema.disabled, 'ui-tooltip-disabled'),\n};\n\ntype TooltipProps = SchemaToProps<typeof tooltipSchema>;\ntype TooltipDirectiveProps = SchemaToProps<typeof tooltipDirectiveSchema>;\ntype TooltipColor = typeof TOOLTIP_COLORS[number];\ntype TooltipVariant = typeof TOOLTIP_VARIANTS[number];\n\nexport {\n TOOLTIP_COLORS,\n TOOLTIP_VARIANTS,\n tooltipDirectiveSchema,\n tooltipSchema,\n};\nexport type {TooltipColor, TooltipDirectiveProps, TooltipProps, TooltipVariant};\n","import {createMachine, type Machine, type MachineEventObject} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {TooltipProps} from './contract';\n\ntype TooltipReason = 'pointer' | 'focus' | 'escape' | 'activation' | 'scroll' | 'blur' | 'disabled' | 'replacement';\ntype TooltipContext = {transition: {reason: TooltipReason; instant: boolean}};\ntype TooltipTransitionData = {reason: TooltipReason; instant: boolean};\ntype TooltipMachineEffects = {\n prepareOpen(): void;\n finishOpen(): void;\n prepareClose(): void;\n finishClose(): void;\n syncProps(): void;\n};\n\nconst transitionData = ({context}: {context: TooltipContext}): TooltipTransitionData => context.transition;\nconst openingHook = defineHook({\n name: 'opening', state: 'opening', project: transitionData, onDone: 'OPENING_DONE', onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<TooltipContext, TooltipProps, TooltipTransitionData, 'opening'>);\nconst closingHook = defineHook({\n name: 'closing', state: 'closing', project: transitionData, onDone: 'CLOSING_DONE', onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<TooltipContext, TooltipProps, TooltipTransitionData, 'closing'>);\nconst tooltipHooks = [openingHook, closingHook] as const;\n\nconst reasonFrom = (event: MachineEventObject): TooltipReason => {\n const reason = event.reason;\n return reason === 'focus' || reason === 'escape' || reason === 'activation' || reason === 'scroll'\n || reason === 'blur' || reason === 'disabled' || reason === 'replacement' ? reason : 'pointer';\n};\n\nconst createTooltipMachine = (\n props: TooltipProps,\n effects: TooltipMachineEffects,\n): Machine<TooltipContext, TooltipProps> => createMachine<TooltipContext, TooltipProps>({\n initial: 'closed',\n states: {\n closed: {tags: ['closed'], on: {\n OPEN: {target: 'opening', guard: 'canOpen', reduce: 'transition', effects: 'prepareOpen'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'syncProps'},\n }},\n opening: {tags: ['visible', 'expanded', 'transitioning'], on: {\n OPENING_DONE: {target: 'open', effects: 'finishOpen'},\n OPENING_ERROR: {target: 'open', effects: 'finishOpen'},\n CLOSE: {target: 'closing', reduce: 'transition', effects: 'prepareClose'},\n PROPS_CHANGED: [\n {target: 'closing', guard: 'becomesDisabled', reduce: 'replacePropsDisabled', effects: ['syncProps', 'prepareClose']},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n }},\n open: {tags: ['visible', 'expanded', 'open'], on: {\n CLOSE: {target: 'closing', reduce: 'transition', effects: 'prepareClose'},\n PROPS_CHANGED: [\n {target: 'closing', guard: 'becomesDisabled', reduce: 'replacePropsDisabled', effects: ['syncProps', 'prepareClose']},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n }},\n closing: {tags: ['visible', 'transitioning'], on: {\n CLOSING_DONE: {target: 'closed', effects: 'finishClose'},\n CLOSING_ERROR: {target: 'closed', effects: 'finishClose'},\n OPEN: {target: 'opening', guard: 'canOpen', reduce: 'transition', effects: 'prepareOpen'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'syncProps'},\n }},\n },\n}, {\n context: {transition: {reason: 'pointer', instant: false}},\n props,\n reducers: {\n transition: ({context, props: currentProps, event}) => ({\n context: {transition: {reason: reasonFrom(event), instant: event.instant === true}},\n props: currentProps,\n }),\n replaceProps: ({context, props: currentProps, event}) => ({\n context,\n props: (event.props as TooltipProps | undefined) ?? currentProps,\n }),\n replacePropsDisabled: ({context, props: currentProps, event}) => ({\n context: {transition: {reason: 'disabled', instant: true}},\n props: (event.props as TooltipProps | undefined) ?? currentProps,\n }),\n },\n guards: {\n canOpen: ({props: currentProps}) => !currentProps.disabled,\n becomesDisabled: ({event}) => (event.props as TooltipProps | undefined)?.disabled === true,\n },\n effects,\n});\n\nexport {createTooltipMachine, tooltipHooks};\nexport type {TooltipContext, TooltipMachineEffects, TooltipReason, TooltipTransitionData};\n","import {defineStyles} from '../../runtime';\nimport {POPOVER_GEOMETRY_CLASSES} from '../common';\n\nconst tooltipStyles = defineStyles({definition: {\n component: 'ui.tooltip',\n parts: {\n root: {base: 'contents'},\n content: {\n base: [\n POPOVER_GEOMETRY_CLASSES,\n 'pointer-events-auto min-h-control-md max-w-72 auto-cols-max grid-flow-col items-center gap-2 rounded-overlay-sm px-2 py-1',\n 'font-body text-1 [font-weight:var(--font-weight-normal)]',\n 'data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0',\n ],\n variants: {\n color: {neutral: '', accent: '', success: '', warning: '', danger: ''},\n variant: {surface: '', soft: '', solid: ''},\n },\n defaults: {color: 'neutral', variant: 'surface'},\n },\n shortcut: {base: 'ml-1 inline-flex items-center gap-1 text-[var(--ui-semantic-surface-ink-muted)]'},\n },\n}});\n\nexport {tooltipStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n createAlpineMachine,\n defineAlpineData,\n type SchemaToProps,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {createAnchoredPopoverSurface, type AnchoredPopoverSurface} from '@client/runtime/anchored-popover';\nimport type {CodecFn} from '@client/runtime/codecs';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {declareMorphAttributes} from '@client/runtime/morph';\nimport {observeSemanticChanges} from '@client/runtime/semantic-observer';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, dispatch, type CleanupStack} from '@client/utils';\nimport {createKeybindingController} from '../keybinding/controller';\nimport {keybindingStyles} from '../keybinding/styles';\nimport {\n tooltipDirectiveSchema,\n type TooltipDirectiveProps,\n type TooltipProps,\n tooltipSchema,\n} from './contract';\nimport {\n createTooltipMachine,\n tooltipHooks,\n type TooltipContext,\n type TooltipReason,\n} from './machine';\nimport {tooltipStyles} from './styles';\n\ntype TooltipTransitionName = (typeof tooltipHooks)[number]['name'];\ntype TooltipTransition<TName extends TooltipTransitionName = TooltipTransitionName> = TransitionForHook<\n Extract<(typeof tooltipHooks)[number], {name: TName}>,\n HTMLElement\n>;\ntype PopoverElement = HTMLElement & {showPopover(): void; hidePopover(): void};\ntype TooltipSchema = Record<string, CodecFn<unknown>>;\ntype TooltipBridge = ReturnType<typeof createAlpineMachine<TooltipContext, typeof tooltipSchema, typeof tooltipHooks>>;\n\ntype TooltipController = {\n bridge: TooltipBridge;\n connect(snapshot?: {current: TooltipBridge['snapshot']['current']}): void;\n destroy(): void;\n sync(): void;\n close(reason: TooltipReason, instant?: boolean): void;\n};\n\ntype TooltipWarmStore = {active: TooltipController | null};\nconst warmStores = new WeakMap<Document, TooltipWarmStore>();\nconst warmStore = (document: Document): TooltipWarmStore => {\n let store = warmStores.get(document);\n if (!store) {\n store = {active: null};\n warmStores.set(document, store);\n }\n return store;\n};\n\nconst appendDescription = (trigger: HTMLElement, id: string): void => {\n const tokens = new Set((trigger.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean));\n tokens.add(id);\n trigger.setAttribute('aria-describedby', [...tokens].join(' '));\n};\n\nconst removeDescription = (trigger: HTMLElement, id: string): void => {\n const tokens = (trigger.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter((token) => token && token !== id);\n if (tokens.length) trigger.setAttribute('aria-describedby', tokens.join(' '));\n else trigger.removeAttribute('aria-describedby');\n};\n\nconst createTooltipController = <TSchema extends TooltipSchema>({\n owner,\n trigger,\n content,\n schema,\n syncShortcut,\n}: {\n owner: () => HTMLElement & Alpine.ElementWithXAttributes;\n trigger: () => HTMLElement;\n content: () => PopoverElement;\n schema: TSchema;\n syncShortcut?: (value: string) => void;\n}): TooltipController => {\n let cleanup: CleanupStack = [];\n let popover: AnchoredPopoverSurface | null = null;\n let openTimer: ReturnType<typeof setTimeout> | null = null;\n let closeTimer: ReturnType<typeof setTimeout> | null = null;\n let describedById = '';\n let pointerOnTrigger = false;\n let pointerOnContent = false;\n\n const clearTimer = (timer: 'open' | 'close'): void => {\n const current = timer === 'open' ? openTimer : closeTimer;\n if (current !== null) clearTimeout(current);\n if (timer === 'open') openTimer = null;\n else closeTimer = null;\n };\n const props = (): Readonly<TooltipProps> => bridge.getSnapshot().props as TooltipProps;\n const visible = (): boolean => bridge.hasTag('visible');\n const syncSurface = (): void => {\n const value = props();\n const surface = content();\n surface.dataset.state = bridge.hasTag('expanded') ? 'open' : 'closed';\n surface.setAttribute('data-ui-semantic-surface', '');\n surface.dataset.color = value.color;\n surface.dataset.variant = value.variant;\n surface.dataset.uiSurface = value.surface;\n surface.dataset.uiElevation = value.elevation;\n surface.className = resolveStyle({\n part: tooltipStyles.parts.content,\n props: value,\n className: surface.dataset.class,\n });\n syncShortcut?.(trigger().dataset.uiTooltipShortcut ?? '');\n popover?.sync();\n };\n const finishClose = (): void => {\n popover?.close();\n content().hidden = true;\n syncSurface();\n const store = warmStore(owner().ownerDocument);\n if (store.active === controller) store.active = null;\n dispatch({el: owner(), name: 'ui:close'});\n };\n const effects = {\n prepareOpen(): void {\n content().hidden = false;\n popover?.open();\n syncSurface();\n },\n finishOpen(): void {\n syncSurface();\n dispatch({el: owner(), name: 'ui:open'});\n },\n prepareClose(): void { syncSurface(); },\n finishClose,\n syncProps(): void {\n syncSurface();\n if (props().disabled && visible()) controller.close('disabled', true);\n },\n };\n const machineBridge = createAlpineMachine({\n schema,\n hooks: tooltipHooks,\n createMachine: ({props: machineProps}) => createTooltipMachine(machineProps as TooltipProps, effects) as never,\n });\n const bridge = machineBridge as unknown as TooltipBridge;\n\n const open = (reason: TooltipReason, instant = false): void => {\n clearTimer('open');\n clearTimer('close');\n if (props().disabled || bridge.hasTag('expanded')) return;\n const store = warmStore(owner().ownerDocument);\n const warm = store.active !== null && store.active !== controller;\n if (store.active && store.active !== controller) store.active.close('replacement', true);\n store.active = controller;\n bridge.send({type: 'OPEN', reason, instant: instant || warm});\n };\n const close = (reason: TooltipReason, instant = false): void => {\n clearTimer('open');\n clearTimer('close');\n if (!visible()) return;\n bridge.send({type: 'CLOSE', reason, instant});\n };\n const scheduleOpen = (): void => {\n clearTimer('close');\n if (visible() || props().disabled) return;\n const delay = warmStore(owner().ownerDocument).active ? 0 : props().openDelay;\n clearTimer('open');\n openTimer = setTimeout(() => open('pointer', delay === 0), delay);\n };\n const scheduleClose = (): void => {\n clearTimer('open');\n if (!visible()) return;\n clearTimer('close');\n closeTimer = setTimeout(() => close('pointer'), props().closeDelay);\n };\n\n const controller: TooltipController = {\n bridge,\n connect(snapshot): void {\n bridge.connect(owner(), snapshot);\n describedById = content().id || `ui-tooltip-${crypto.randomUUID()}`;\n content().id = describedById;\n content().setAttribute('role', 'tooltip');\n content().setAttribute('popover', 'manual');\n content().setAttribute('data-ui-tooltip-content', '');\n content().hidden = true;\n trigger().setAttribute('data-ui-tooltip-trigger', '');\n appendDescription(trigger(), describedById);\n declareMorphAttributes(\n trigger(),\n 'aria-describedby',\n 'data-ui-tooltip-trigger',\n );\n popover = createAnchoredPopoverSurface({\n reference: trigger,\n floating: content,\n position: () => props().side,\n align: () => props().align,\n gap: () => props().gap,\n offset: () => props().offset,\n });\n syncSurface();\n cleanup = [\n addListener({target: trigger(), event: 'pointerenter', handler: () => {\n pointerOnTrigger = true;\n scheduleOpen();\n }}),\n addListener({target: trigger(), event: 'pointermove', handler: scheduleOpen}),\n addListener({target: trigger(), event: 'pointerleave', handler: () => {\n pointerOnTrigger = false;\n if (!pointerOnContent) scheduleClose();\n }}),\n addListener({target: content(), event: 'pointerenter', handler: () => {\n pointerOnContent = true;\n clearTimer('close');\n }}),\n addListener({target: content(), event: 'pointerleave', handler: () => {\n pointerOnContent = false;\n if (!pointerOnTrigger) scheduleClose();\n }}),\n addListener({target: trigger(), event: 'focusin', handler: () => open('focus', true)}),\n addListener({target: trigger(), event: 'focusout', handler: () => {\n if (!pointerOnTrigger && !pointerOnContent) close('blur', true);\n }}),\n addListener({target: trigger(), event: 'pointerdown', handler: () => close('activation', true)}),\n addListener({target: trigger(), event: 'click', handler: () => close('activation', true)}),\n addListener({target: owner().ownerDocument, event: 'keydown', handler: (event) => {\n if (event instanceof KeyboardEvent && event.key === 'Escape' && visible()) close('escape', true);\n }}),\n addListener({target: owner().ownerDocument, event: 'scroll', options: {capture: true}, handler: () => {\n if (visible()) close('scroll', true);\n }}),\n observeSemanticChanges({\n targets: trigger(),\n read: () => trigger().dataset.uiTooltipShortcut ?? '',\n onChange: syncSurface,\n observer: {attributes: true, attributeFilter: ['data-ui-tooltip-shortcut']},\n }),\n ];\n },\n close,\n sync: syncSurface,\n destroy(): void {\n clearTimer('open');\n clearTimer('close');\n cleanup.forEach((dispose) => dispose());\n cleanup = [];\n const store = warmStore(owner().ownerDocument);\n if (store.active === controller) store.active = null;\n popover?.destroy();\n popover = null;\n removeDescription(trigger(), describedById);\n trigger().removeAttribute('data-ui-tooltip-trigger');\n bridge.disconnect();\n },\n };\n return controller;\n};\n\ntype TooltipData = TooltipBridge & {\n readonly root: BindingObject;\n readonly content: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst UiTooltip = (): TrellisAlpineComponent<TooltipData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let controller: TooltipController | null = null;\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Tooltip has not been initialized.');\n return rootEl;\n };\n const content = (): PopoverElement => {\n const el = root().querySelector<HTMLElement>(':scope > [data-ui-tooltip-content]');\n if (!(el instanceof HTMLElement)) throw new Error('Tooltip requires ui.tooltip.content.');\n return el as PopoverElement;\n };\n const trigger = (): HTMLElement => {\n const el = Array.from(root().children).find((child) => child instanceof HTMLElement && child !== content());\n if (!(el instanceof HTMLElement)) throw new Error('Tooltip requires an interactive trigger before its content.');\n return el;\n };\n const bridge = createAlpineMachine({\n schema: tooltipSchema,\n hooks: tooltipHooks,\n createMachine: ({props}) => createTooltipMachine(props, {\n prepareOpen() {}, finishOpen() {}, prepareClose() {}, finishClose() {}, syncProps() {},\n }),\n }) as TooltipBridge;\n const component: TrellisAlpineComponent<TooltipData> = {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n controller = createTooltipController({owner: root, trigger, content, schema: tooltipSchema});\n controller.connect(this.snapshot);\n },\n destroy(): void {\n controller?.destroy();\n controller = null;\n rootEl = null;\n },\n get root(): BindingObject {\n return mergeBindings({inputs: [\n resolveStyle({part: tooltipStyles.parts.root, props: this.snapshot.current?.props ?? {}}),\n {'data-ui-tooltip-root': ''},\n ]});\n },\n get content(): BindingObject {\n return {'data-ui-tooltip-content': ''};\n },\n };\n return component;\n};\n\nconst registerTooltipDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.addInitSelector(() => '[x-ui-tooltip]');\n AlpineInstance.directive('ui-tooltip', AlpineInstance.skipDuringClone((el, {expression}, utilities) => {\n if (!(el instanceof HTMLElement)) return;\n const content = el.ownerDocument.createElement('div') as PopoverElement;\n const label = el.ownerDocument.createElement('span');\n label.setAttribute('data-ui-tooltip-label', '');\n content.append(label);\n const shortcut = el.ownerDocument.createElement('span');\n shortcut.setAttribute('data-ui-keybinding', '');\n shortcut.setAttribute('aria-hidden', 'true');\n shortcut.className = resolveStyle({\n part: keybindingStyles.parts.root,\n className: resolveStyle({part: tooltipStyles.parts.shortcut}),\n });\n content.append(shortcut);\n const keybinding = createKeybindingController(shortcut);\n el.insertAdjacentElement('afterend', content);\n const owner = () => el as HTMLElement & Alpine.ElementWithXAttributes;\n const controller = createTooltipController({\n owner,\n trigger: () => el,\n content: () => content,\n schema: tooltipDirectiveSchema,\n syncShortcut: (value) => keybinding.setValue(value),\n });\n controller.connect();\n declareMorphAttributes(el, 'data-ui-tooltip-disabled', 'data-ui-tooltip-shortcut');\n const evaluator = utilities.evaluateLater(expression);\n utilities.effect(() => evaluator((value) => {\n const text = typeof value === 'string' ? value.trim() : '';\n label.textContent = text;\n el.toggleAttribute('data-ui-tooltip-disabled', !text);\n controller.sync();\n }));\n utilities.cleanup(() => {\n controller.destroy();\n keybinding.destroy();\n content.remove();\n });\n })).before('ui-transition');\n};\n\nconst registerTooltip = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiTooltip', UiTooltip)(AlpineInstance);\n registerTooltipDirective(AlpineInstance);\n};\n\nexport {registerTooltip, registerTooltipDirective, UiTooltip};\nexport type {TooltipData, TooltipDirectiveProps, TooltipTransition};\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 {registerShortcutCapability} from '../../capabilities/shortcut';\nimport {registerTooltip as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerTooltip = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerShortcutCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerTooltip};\nexport default registerTooltip;\nexport * from './index';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entry2.generated-CpoK52gE.js","names":[],"sources":["../../../../../../../../client/src/components/tooltip/contract.ts","../../../../../../../../client/src/components/tooltip/machine.ts","../../../../../../../../client/src/components/tooltip/styles.ts","../../../../../../../../client/src/components/tooltip/index.ts","../../../../../../../../client/src/components/tooltip/entry.generated.ts"],"sourcesContent":["import {attribute, bool, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n ALIGNMENTS,\n ELEVATION_REFERENCES,\n POSITIONS,\n SURFACE_REFERENCES,\n type Alignment,\n type ElevationReference,\n type Position,\n type SurfaceReference,\n} from '../common';\n\nconst TOOLTIP_COLORS = ['neutral', 'accent', 'success', 'warning', 'danger'] as const;\nconst TOOLTIP_VARIANTS = ['surface', 'soft', 'solid'] as const;\n\nconst tooltipSchema = {\n side: oneOf(POSITIONS, 'bottom' as Position),\n align: oneOf(ALIGNMENTS, 'center' as Alignment),\n offset: number.clamp(-100, 100).default(0),\n gap: number.clamp(0, 50).default(8),\n openDelay: number.clamp(0, 5000).default(400),\n closeDelay: number.clamp(0, 5000).default(150),\n color: oneOf(TOOLTIP_COLORS, 'neutral'),\n variant: oneOf(TOOLTIP_VARIANTS, 'surface'),\n surface: oneOf(SURFACE_REFERENCES, '2' as SurfaceReference),\n elevation: oneOf(ELEVATION_REFERENCES, '4' as ElevationReference),\n disabled: bool,\n class: string,\n};\n\nconst tooltipDirectiveSchema = {\n side: attribute(tooltipSchema.side, 'ui-tooltip-side'),\n align: attribute(tooltipSchema.align, 'ui-tooltip-align'),\n offset: attribute(tooltipSchema.offset, 'ui-tooltip-offset'),\n gap: attribute(tooltipSchema.gap, 'ui-tooltip-gap'),\n openDelay: attribute(tooltipSchema.openDelay, 'ui-tooltip-open-delay'),\n closeDelay: attribute(tooltipSchema.closeDelay, 'ui-tooltip-close-delay'),\n color: attribute(tooltipSchema.color, 'ui-tooltip-color'),\n variant: attribute(tooltipSchema.variant, 'ui-tooltip-variant'),\n surface: attribute(tooltipSchema.surface, 'ui-tooltip-surface'),\n elevation: attribute(tooltipSchema.elevation, 'ui-tooltip-elevation'),\n disabled: attribute(tooltipSchema.disabled, 'ui-tooltip-disabled'),\n};\n\ntype TooltipProps = SchemaToProps<typeof tooltipSchema>;\ntype TooltipDirectiveProps = SchemaToProps<typeof tooltipDirectiveSchema>;\ntype TooltipColor = typeof TOOLTIP_COLORS[number];\ntype TooltipVariant = typeof TOOLTIP_VARIANTS[number];\n\nexport {\n TOOLTIP_COLORS,\n TOOLTIP_VARIANTS,\n tooltipDirectiveSchema,\n tooltipSchema,\n};\nexport type {TooltipColor, TooltipDirectiveProps, TooltipProps, TooltipVariant};\n","import {createMachine, type Machine, type MachineEventObject} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {TooltipProps} from './contract';\n\ntype TooltipReason = 'pointer' | 'focus' | 'escape' | 'activation' | 'scroll' | 'blur' | 'disabled' | 'replacement';\ntype TooltipContext = {transition: {reason: TooltipReason; instant: boolean}};\ntype TooltipTransitionData = {reason: TooltipReason; instant: boolean};\ntype TooltipMachineEffects = {\n prepareOpen(): void;\n finishOpen(): void;\n prepareClose(): void;\n finishClose(): void;\n syncProps(): void;\n};\n\nconst transitionData = ({context}: {context: TooltipContext}): TooltipTransitionData => context.transition;\nconst openingHook = defineHook({\n name: 'opening', state: 'opening', project: transitionData, onDone: 'OPENING_DONE', onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<TooltipContext, TooltipProps, TooltipTransitionData, 'opening'>);\nconst closingHook = defineHook({\n name: 'closing', state: 'closing', project: transitionData, onDone: 'CLOSING_DONE', onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<TooltipContext, TooltipProps, TooltipTransitionData, 'closing'>);\nconst tooltipHooks = [openingHook, closingHook] as const;\n\nconst reasonFrom = (event: MachineEventObject): TooltipReason => {\n const reason = event.reason;\n return reason === 'focus' || reason === 'escape' || reason === 'activation' || reason === 'scroll'\n || reason === 'blur' || reason === 'disabled' || reason === 'replacement' ? reason : 'pointer';\n};\n\nconst createTooltipMachine = (\n props: TooltipProps,\n effects: TooltipMachineEffects,\n): Machine<TooltipContext, TooltipProps> => createMachine<TooltipContext, TooltipProps>({\n initial: 'closed',\n states: {\n closed: {tags: ['closed'], on: {\n OPEN: {target: 'opening', guard: 'canOpen', reduce: 'transition', effects: 'prepareOpen'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'syncProps'},\n }},\n opening: {tags: ['visible', 'expanded', 'transitioning'], on: {\n OPENING_DONE: {target: 'open', effects: 'finishOpen'},\n OPENING_ERROR: {target: 'open', effects: 'finishOpen'},\n CLOSE: {target: 'closing', reduce: 'transition', effects: 'prepareClose'},\n PROPS_CHANGED: [\n {target: 'closing', guard: 'becomesDisabled', reduce: 'replacePropsDisabled', effects: ['syncProps', 'prepareClose']},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n }},\n open: {tags: ['visible', 'expanded', 'open'], on: {\n CLOSE: {target: 'closing', reduce: 'transition', effects: 'prepareClose'},\n PROPS_CHANGED: [\n {target: 'closing', guard: 'becomesDisabled', reduce: 'replacePropsDisabled', effects: ['syncProps', 'prepareClose']},\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n }},\n closing: {tags: ['visible', 'transitioning'], on: {\n CLOSING_DONE: {target: 'closed', effects: 'finishClose'},\n CLOSING_ERROR: {target: 'closed', effects: 'finishClose'},\n OPEN: {target: 'opening', guard: 'canOpen', reduce: 'transition', effects: 'prepareOpen'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'syncProps'},\n }},\n },\n}, {\n context: {transition: {reason: 'pointer', instant: false}},\n props,\n reducers: {\n transition: ({context, props: currentProps, event}) => ({\n context: {transition: {reason: reasonFrom(event), instant: event.instant === true}},\n props: currentProps,\n }),\n replaceProps: ({context, props: currentProps, event}) => ({\n context,\n props: (event.props as TooltipProps | undefined) ?? currentProps,\n }),\n replacePropsDisabled: ({context, props: currentProps, event}) => ({\n context: {transition: {reason: 'disabled', instant: true}},\n props: (event.props as TooltipProps | undefined) ?? currentProps,\n }),\n },\n guards: {\n canOpen: ({props: currentProps}) => !currentProps.disabled,\n becomesDisabled: ({event}) => (event.props as TooltipProps | undefined)?.disabled === true,\n },\n effects,\n});\n\nexport {createTooltipMachine, tooltipHooks};\nexport type {TooltipContext, TooltipMachineEffects, TooltipReason, TooltipTransitionData};\n","import {defineStyles} from '../../runtime';\nimport {POPOVER_GEOMETRY_CLASSES} from '../common';\n\nconst tooltipStyles = defineStyles({definition: {\n component: 'ui.tooltip',\n parts: {\n root: {base: 'contents'},\n content: {\n base: [\n POPOVER_GEOMETRY_CLASSES,\n 'pointer-events-auto min-h-control-md max-w-72 auto-cols-max grid-flow-col items-center gap-2 rounded-overlay-sm px-2 py-1',\n 'font-body text-1 [font-weight:var(--font-weight-normal)]',\n 'data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0',\n ],\n variants: {\n color: {neutral: '', accent: '', success: '', warning: '', danger: ''},\n variant: {surface: '', soft: '', solid: ''},\n },\n defaults: {color: 'neutral', variant: 'surface'},\n },\n shortcut: {base: 'ml-1 inline-flex items-center gap-1 text-[var(--ui-semantic-surface-ink-muted)]'},\n },\n}});\n\nexport {tooltipStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n createAlpineMachine,\n defineAlpineData,\n type SchemaToProps,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {createAnchoredPopoverSurface, type AnchoredPopoverSurface} from '@client/runtime/anchored-popover';\nimport type {CodecFn} from '@client/runtime/codecs';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {declareMorphAttributes} from '@client/runtime/morph';\nimport {observeSemanticChanges} from '@client/runtime/semantic-observer';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, dispatch, type CleanupStack} from '@client/utils';\nimport {createKeybindingController} from '../keybinding/controller';\nimport {keybindingStyles} from '../keybinding/styles';\nimport {\n tooltipDirectiveSchema,\n type TooltipDirectiveProps,\n type TooltipProps,\n tooltipSchema,\n} from './contract';\nimport {\n createTooltipMachine,\n tooltipHooks,\n type TooltipContext,\n type TooltipReason,\n} from './machine';\nimport {tooltipStyles} from './styles';\n\ntype TooltipTransitionName = (typeof tooltipHooks)[number]['name'];\ntype TooltipTransition<TName extends TooltipTransitionName = TooltipTransitionName> = TransitionForHook<\n Extract<(typeof tooltipHooks)[number], {name: TName}>,\n HTMLElement\n>;\ntype PopoverElement = HTMLElement & {showPopover(): void; hidePopover(): void};\ntype TooltipSchema = Record<string, CodecFn<unknown>>;\ntype TooltipBridge = ReturnType<typeof createAlpineMachine<TooltipContext, typeof tooltipSchema, typeof tooltipHooks>>;\n\ntype TooltipController = {\n bridge: TooltipBridge;\n connect(snapshot?: {current: TooltipBridge['snapshot']['current']}): void;\n destroy(): void;\n sync(): void;\n close(reason: TooltipReason, instant?: boolean): void;\n};\n\ntype TooltipWarmStore = {active: TooltipController | null};\nconst warmStores = new WeakMap<Document, TooltipWarmStore>();\nconst warmStore = (document: Document): TooltipWarmStore => {\n let store = warmStores.get(document);\n if (!store) {\n store = {active: null};\n warmStores.set(document, store);\n }\n return store;\n};\n\nconst appendDescription = (trigger: HTMLElement, id: string): void => {\n const tokens = new Set((trigger.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean));\n tokens.add(id);\n trigger.setAttribute('aria-describedby', [...tokens].join(' '));\n};\n\nconst removeDescription = (trigger: HTMLElement, id: string): void => {\n const tokens = (trigger.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter((token) => token && token !== id);\n if (tokens.length) trigger.setAttribute('aria-describedby', tokens.join(' '));\n else trigger.removeAttribute('aria-describedby');\n};\n\nconst createTooltipController = <TSchema extends TooltipSchema>({\n owner,\n trigger,\n content,\n schema,\n syncShortcut,\n}: {\n owner: () => HTMLElement & Alpine.ElementWithXAttributes;\n trigger: () => HTMLElement;\n content: () => PopoverElement;\n schema: TSchema;\n syncShortcut?: (value: string) => void;\n}): TooltipController => {\n let cleanup: CleanupStack = [];\n let popover: AnchoredPopoverSurface | null = null;\n let openTimer: ReturnType<typeof setTimeout> | null = null;\n let closeTimer: ReturnType<typeof setTimeout> | null = null;\n let describedById = '';\n let pointerOnTrigger = false;\n let pointerOnContent = false;\n\n const clearTimer = (timer: 'open' | 'close'): void => {\n const current = timer === 'open' ? openTimer : closeTimer;\n if (current !== null) clearTimeout(current);\n if (timer === 'open') openTimer = null;\n else closeTimer = null;\n };\n const props = (): Readonly<TooltipProps> => bridge.getSnapshot().props as TooltipProps;\n const visible = (): boolean => bridge.hasTag('visible');\n const syncSurface = (): void => {\n const value = props();\n const surface = content();\n surface.dataset.state = bridge.hasTag('expanded') ? 'open' : 'closed';\n surface.setAttribute('data-ui-semantic-surface', '');\n surface.dataset.color = value.color;\n surface.dataset.variant = value.variant;\n surface.dataset.uiSurface = value.surface;\n surface.dataset.uiElevation = value.elevation;\n surface.className = resolveStyle({\n part: tooltipStyles.parts.content,\n props: value,\n className: surface.dataset.class,\n });\n syncShortcut?.(trigger().dataset.uiTooltipShortcut ?? '');\n popover?.sync();\n };\n const finishClose = (): void => {\n popover?.close();\n content().hidden = true;\n syncSurface();\n const store = warmStore(owner().ownerDocument);\n if (store.active === controller) store.active = null;\n dispatch({el: owner(), name: 'ui:close'});\n };\n const effects = {\n prepareOpen(): void {\n content().hidden = false;\n popover?.open();\n syncSurface();\n },\n finishOpen(): void {\n syncSurface();\n dispatch({el: owner(), name: 'ui:open'});\n },\n prepareClose(): void { syncSurface(); },\n finishClose,\n syncProps(): void {\n syncSurface();\n if (props().disabled && visible()) controller.close('disabled', true);\n },\n };\n const machineBridge = createAlpineMachine({\n schema,\n hooks: tooltipHooks,\n createMachine: ({props: machineProps}) => createTooltipMachine(machineProps as TooltipProps, effects) as never,\n });\n const bridge = machineBridge as unknown as TooltipBridge;\n\n const open = (reason: TooltipReason, instant = false): void => {\n clearTimer('open');\n clearTimer('close');\n if (props().disabled || bridge.hasTag('expanded')) return;\n const store = warmStore(owner().ownerDocument);\n const warm = store.active !== null && store.active !== controller;\n if (store.active && store.active !== controller) store.active.close('replacement', true);\n store.active = controller;\n bridge.send({type: 'OPEN', reason, instant: instant || warm});\n };\n const close = (reason: TooltipReason, instant = false): void => {\n clearTimer('open');\n clearTimer('close');\n if (!visible()) return;\n bridge.send({type: 'CLOSE', reason, instant});\n };\n const scheduleOpen = (): void => {\n clearTimer('close');\n if (visible() || props().disabled) return;\n const delay = warmStore(owner().ownerDocument).active ? 0 : props().openDelay;\n clearTimer('open');\n openTimer = setTimeout(() => open('pointer', delay === 0), delay);\n };\n const scheduleClose = (): void => {\n clearTimer('open');\n if (!visible()) return;\n clearTimer('close');\n closeTimer = setTimeout(() => close('pointer'), props().closeDelay);\n };\n\n const controller: TooltipController = {\n bridge,\n connect(snapshot): void {\n bridge.connect(owner(), snapshot);\n describedById = content().id || `ui-tooltip-${crypto.randomUUID()}`;\n content().id = describedById;\n content().setAttribute('role', 'tooltip');\n content().setAttribute('popover', 'manual');\n content().setAttribute('data-ui-tooltip-content', '');\n content().hidden = true;\n trigger().setAttribute('data-ui-tooltip-trigger', '');\n appendDescription(trigger(), describedById);\n declareMorphAttributes(\n trigger(),\n 'aria-describedby',\n 'data-ui-tooltip-trigger',\n );\n popover = createAnchoredPopoverSurface({\n reference: trigger,\n floating: content,\n position: () => props().side,\n align: () => props().align,\n gap: () => props().gap,\n offset: () => props().offset,\n });\n syncSurface();\n cleanup = [\n addListener({target: trigger(), event: 'pointerenter', handler: () => {\n pointerOnTrigger = true;\n scheduleOpen();\n }}),\n addListener({target: trigger(), event: 'pointermove', handler: scheduleOpen}),\n addListener({target: trigger(), event: 'pointerleave', handler: () => {\n pointerOnTrigger = false;\n if (!pointerOnContent) scheduleClose();\n }}),\n addListener({target: content(), event: 'pointerenter', handler: () => {\n pointerOnContent = true;\n clearTimer('close');\n }}),\n addListener({target: content(), event: 'pointerleave', handler: () => {\n pointerOnContent = false;\n if (!pointerOnTrigger) scheduleClose();\n }}),\n addListener({target: trigger(), event: 'focusin', handler: () => {\n if (trigger().matches(':focus-visible')) open('focus', true);\n }}),\n addListener({target: trigger(), event: 'focusout', handler: () => {\n if (!pointerOnTrigger && !pointerOnContent) close('blur', true);\n }}),\n addListener({target: trigger(), event: 'pointerdown', handler: () => close('activation', true)}),\n addListener({target: trigger(), event: 'click', handler: () => close('activation', true)}),\n addListener({target: owner().ownerDocument, event: 'keydown', handler: (event) => {\n if (event instanceof KeyboardEvent && event.key === 'Escape' && visible()) close('escape', true);\n }}),\n addListener({target: owner().ownerDocument, event: 'scroll', options: {capture: true}, handler: () => {\n if (visible()) close('scroll', true);\n }}),\n observeSemanticChanges({\n targets: trigger(),\n read: () => trigger().dataset.uiTooltipShortcut ?? '',\n onChange: syncSurface,\n observer: {attributes: true, attributeFilter: ['data-ui-tooltip-shortcut']},\n }),\n ];\n },\n close,\n sync: syncSurface,\n destroy(): void {\n clearTimer('open');\n clearTimer('close');\n cleanup.forEach((dispose) => dispose());\n cleanup = [];\n const store = warmStore(owner().ownerDocument);\n if (store.active === controller) store.active = null;\n popover?.destroy();\n popover = null;\n removeDescription(trigger(), describedById);\n trigger().removeAttribute('data-ui-tooltip-trigger');\n bridge.disconnect();\n },\n };\n return controller;\n};\n\ntype TooltipData = TooltipBridge & {\n readonly root: BindingObject;\n readonly content: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst UiTooltip = (): TrellisAlpineComponent<TooltipData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let controller: TooltipController | null = null;\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Tooltip has not been initialized.');\n return rootEl;\n };\n const content = (): PopoverElement => {\n const el = root().querySelector<HTMLElement>(':scope > [data-ui-tooltip-content]');\n if (!(el instanceof HTMLElement)) throw new Error('Tooltip requires ui.tooltip.content.');\n return el as PopoverElement;\n };\n const trigger = (): HTMLElement => {\n const el = Array.from(root().children).find((child) => child instanceof HTMLElement && child !== content());\n if (!(el instanceof HTMLElement)) throw new Error('Tooltip requires an interactive trigger before its content.');\n return el;\n };\n const bridge = createAlpineMachine({\n schema: tooltipSchema,\n hooks: tooltipHooks,\n createMachine: ({props}) => createTooltipMachine(props, {\n prepareOpen() {}, finishOpen() {}, prepareClose() {}, finishClose() {}, syncProps() {},\n }),\n }) as TooltipBridge;\n const component: TrellisAlpineComponent<TooltipData> = {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n controller = createTooltipController({owner: root, trigger, content, schema: tooltipSchema});\n controller.connect(this.snapshot);\n },\n destroy(): void {\n controller?.destroy();\n controller = null;\n rootEl = null;\n },\n get root(): BindingObject {\n return mergeBindings({inputs: [\n resolveStyle({part: tooltipStyles.parts.root, props: this.snapshot.current?.props ?? {}}),\n {'data-ui-tooltip-root': ''},\n ]});\n },\n get content(): BindingObject {\n return {'data-ui-tooltip-content': ''};\n },\n };\n return component;\n};\n\nconst registerTooltipDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.addInitSelector(() => '[x-ui-tooltip]');\n AlpineInstance.directive('ui-tooltip', AlpineInstance.skipDuringClone((el, {expression}, utilities) => {\n if (!(el instanceof HTMLElement)) return;\n const content = el.ownerDocument.createElement('div') as PopoverElement;\n const label = el.ownerDocument.createElement('span');\n label.setAttribute('data-ui-tooltip-label', '');\n content.append(label);\n const shortcut = el.ownerDocument.createElement('span');\n shortcut.setAttribute('data-ui-keybinding', '');\n shortcut.setAttribute('aria-hidden', 'true');\n shortcut.className = resolveStyle({\n part: keybindingStyles.parts.root,\n className: resolveStyle({part: tooltipStyles.parts.shortcut}),\n });\n content.append(shortcut);\n const keybinding = createKeybindingController(shortcut);\n el.insertAdjacentElement('afterend', content);\n const owner = () => el as HTMLElement & Alpine.ElementWithXAttributes;\n const controller = createTooltipController({\n owner,\n trigger: () => el,\n content: () => content,\n schema: tooltipDirectiveSchema,\n syncShortcut: (value) => keybinding.setValue(value),\n });\n controller.connect();\n declareMorphAttributes(el, 'data-ui-tooltip-disabled', 'data-ui-tooltip-shortcut');\n const evaluator = utilities.evaluateLater(expression);\n utilities.effect(() => evaluator((value) => {\n const text = typeof value === 'string' ? value.trim() : '';\n label.textContent = text;\n el.toggleAttribute('data-ui-tooltip-disabled', !text);\n controller.sync();\n }));\n utilities.cleanup(() => {\n controller.destroy();\n keybinding.destroy();\n content.remove();\n });\n })).before('ui-transition');\n};\n\nconst registerTooltip = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiTooltip', UiTooltip)(AlpineInstance);\n registerTooltipDirective(AlpineInstance);\n};\n\nexport {registerTooltip, registerTooltipDirective, UiTooltip};\nexport type {TooltipData, TooltipDirectiveProps, TooltipTransition};\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 {registerShortcutCapability} from '../../capabilities/shortcut';\nimport {registerTooltip as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerTooltip = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerShortcutCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerTooltip};\nexport default registerTooltip;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./capability-motion-DRILCSFH.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{a as c,s as l}from"./alpine-machine-BTDXpEr6.js";import{n as u}from"./dom-invalidation-Dw6clnS4.js";import{t as d}from"./fragment-Bl3Rq38L.js";import{t as f}from"./alpine-data-CytyCyfk.js";import{a as ee,i as p,n as te,r as ne,t as re}from"./cursor-data-source-5pQvlhmK.js";import{t as ie}from"./drag-and-drop-DHq3udf7.js";import{t as m}from"./capability-sortable-CpSdQwYp.js";import{L as h,y as g}from"./common-Dfj6NCjU.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,cursor:i,query:o(null),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())},ae=(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}]})},oe=e=>e.map(({width:e})=>`${e}px`).join(` `),k=e=>e.map(({element:e,...t})=>t),A=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}},j=e=>globalThis.CSS?.escape?globalThis.CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`),se=(e,t)=>{let n=A(t),r=`z-index:2;background-color:var(--ui-surface-color);`;return t.map((t,i)=>{let a=`[data-ui-data-grid-scope="${j(e)}"]`,o=`[data-column="${j(t.key)}"]`,s=`${a} [data-ui-data-grid-column-header]${o},${a} [data-ui-data-grid-cell]${o}`,c=t.pinned===`left`?`position:sticky;left:${n.left.get(t.key)??0}px;${r}`:t.pinned===`right`?`position:sticky;right:${n.right.get(t.key)??0}px;${r}`:``;return`${s}{grid-column:${i+1};${c}}`}).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),ce=(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]}},le=(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},P=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),ue=`a,button,input,select,textarea,[contenteditable],[role="button"],[role="link"]`,F=e=>{let t=null,n=null,r=null,i=null,o=null,f=null,m=[],h=[],g=0,_={mode:`ids`,ids:[]},v=``,y=null,b=0,x=0,S=!1,C=null,w=!1,E=null,D=null,O=null,A=[],j=null,F=null,I=null,L=!1,R=!1,z=new Map,B=[],de=new WeakMap,fe=new WeakMap,V=ne(p),H=(e,n)=>{t?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:n}))},pe=(e,t,n)=>{let r=n.get(e)??[];r.length&&e.classList.remove(...r);let i=[...new Set(t.split(/\s+/).filter(Boolean))];i.length&&e.classList.add(...i),n.set(e,i)},me=()=>({width:$.props.defaultColumnWidth,minWidth:$.props.minColumnWidth,maxWidth:$.props.maxColumnWidth,resizable:$.props.resizableColumns,reorderable:$.props.reorderableColumns}),he=()=>ae(Array.from(t?.querySelectorAll(`[data-ui-data-grid-column-header]`)??[]),me()),ge=e=>{let t=e.element.querySelector(`[data-ui-data-grid-column-label]`),n=e.element.querySelector(`[data-ui-data-grid-sort-button]`);if(t)if(e.sortable&&!n){let n=document.createElement(`button`);n.type=`button`,n.setAttribute(`data-ui-data-grid-sort-button`,``),n.className=e.element.dataset.sortButtonClass??``;let r=document.createElement(`span`);r.setAttribute(`data-ui-data-grid-sort-indicator`,``),r.setAttribute(`aria-hidden`,`true`),t.replaceWith(n),n.append(t,r)}else !e.sortable&&n&&n.replaceWith(t)},U=()=>Array.from(t?.querySelectorAll(`[data-ui-data-grid-row]`)??[]),_e=e=>{i?.style.setProperty(`width`,`${e.getBoundingClientRect().width}px`)},W=()=>{U().forEach(e=>{let t=e.dataset.rowKey??``,n=$.props.selection!==`none`&&t!==``&&N(_,t);e.toggleAttribute(`data-selected`,n),$.props.selection===`none`?e.removeAttribute(`aria-selected`):e.setAttribute(`aria-selected`,String(n))})},G=()=>{if(!t||!f)return;t.style.setProperty(`--ui-data-grid-template`,oe(m));let e=t.dataset.uiDataGridScope??``;f.textContent=se(e,m),r?.setAttribute(`aria-colcount`,String(m.length));let n=t.querySelector(`[data-ui-data-grid-header-row]`);n&&_e(n);let i=n?.querySelector(`[data-ui-data-grid-column-indicator]`);i&&n?.append(i),U().forEach(e=>{let t=Array.from(e.children).filter(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ui-data-grid-cell`)),n=new Map(t.flatMap(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ui-data-grid-cell`)?[[e.dataset.column??``,e]]:[]));m.forEach(({key:t})=>{let r=n.get(t);r&&(r.hidden=!1,e.append(r))});let r=new Set(m.map(({key:e})=>e));t.forEach(t=>{r.has(t.dataset.column??``)||(t.hidden=!0,t.removeAttribute(`aria-colindex`),t.removeAttribute(`data-pinned`),e.append(t))})}),m.forEach((e,t)=>{ge(e),e.element.setAttribute(`aria-colindex`,String(t+1)),e.pinned?e.element.dataset.pinned=e.pinned:e.element.removeAttribute(`data-pinned`),e.sortable?e.element.setAttribute(`aria-sort`,e.sort):e.element.removeAttribute(`aria-sort`),e.element.dataset.disabled=String(!e.reorderable||!$.props.reorderableColumns);let n=e.element.querySelector(`[data-ui-data-grid-column-label-owned]`);n&&(n.textContent=e.label);let r=e.element.querySelector(`[data-ui-data-grid-column-preview-label]`);r&&(r.textContent=e.label);let i=e.element.querySelector(`[data-ui-data-grid-sort-indicator]`);i&&(i.textContent=e.sort===`ascending`?`↑`:e.sort===`descending`?`↓`:``),e.element.querySelector(`[data-ui-data-grid-resize-handle]`)?.setAttribute(`aria-label`,`Resize ${e.label||e.key} column`)}),U().forEach(e=>pe(e,$.props.rowClass,de)),t.querySelectorAll(`[data-ui-data-grid-cell]`).forEach(e=>{let t=m.findIndex(({key:t})=>t===e.dataset.column);if(t>=0){let n=m[t];e.setAttribute(`aria-colindex`,String(t+1)),e.dataset.align=n.align,pe(e,`${$.props.cellClass} ${n.cellClass}`,fe),n.pinned?e.dataset.pinned=n.pinned:e.removeAttribute(`data-pinned`)}})},ve=(e,t)=>{let n=new Map(e.map(e=>[e.key,e])),r=new Map(t.map(e=>[e.key,e]));return{previous:e,columns:t,added:t.filter(({key:e})=>!n.has(e)).map(({key:e})=>e),removed:e.filter(({key:e})=>!r.has(e)).map(({key:e})=>e),changed:t.flatMap(e=>{let t=n.get(e.key);if(!t)return[];let r=Object.keys(e).filter(n=>n!==`key`&&!l(t[n],e[n]));return r.length?[{key:e.key,fields:r}]:[]})}},ye=()=>{if(L=!1,!t||S)return;let e=he(),n=k(e),r=!l(A,n),i=m.length!==e.length||m.some((t,n)=>t.element!==e[n]?.element),a=i||m.some((t,n)=>{let r=e[n];return!r||t.key!==r.key||t.resizable!==r.resizable||t.minWidth!==r.minWidth||t.maxWidth!==r.maxWidth});if(r||i||R){let t=A;m=e,A=n;let i=a||R;R=!1,G(),i&&Ee(),r&&H(`ui:data-grid-columns-change`,ve(t,n))}if($.props.totalRows!==g&&(J($.props.totalRows),E&&(t.dataset.totalItems=String(g))),E){let e=t.hasAttribute(`data-query`)?$.props.query:D;l(O,e)||(O=c(e),E.setQuery(e))}},K=()=>{L||(L=!0,queueMicrotask(ye))},q=()=>{!t||!o||(E||(t.toggleAttribute(`data-loading`,x>0),t.toggleAttribute(`data-empty`,g===0)),t.dataset.selection=$.props.selection,r?.setAttribute(`aria-rowcount`,String(g+1)),t.style.setProperty(`--ui-data-grid-row-height`,`${$.props.rowHeight}px`),t.style.setProperty(`--ui-data-grid-total-height`,`${Math.max(g*$.props.rowHeight,$.props.rowHeight)}px`),(!E||g>0)&&(o.style.height=`var(--ui-data-grid-total-height)`),W())},J=e=>{let t=P(e);t!==g&&(g=t,q(),H(`ui:data-grid-total-change`,{totalRows:g}))},be=e=>p.compute({axes:{y:{total:g,itemSize:$.props.rowHeight,viewportSize:$.props.bufferSize*$.props.rowHeight,scrollOffset:e*$.props.rowHeight,buffer:0}}}),xe=e=>{if(g===0)return[];let t=P($.props.bufferSize,1),n=Math.min(g-1,Math.floor(Math.max(0,e)/$.props.rowHeight)),r=Math.floor(n/t)*t,i=Math.floor((g-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(be)},Se=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}`},Ce=()=>{if(x=Math.max(0,x-1),q(),x>0||y===null||S)return;let e=y;y=null,Y(e)},we=async(n,r,i)=>{let a=r.axes.y;if(!a)return;let o=new AbortController;z.set(n.key,o),x+=1,q(),t?.removeAttribute(`data-error`),H(`ui:data-grid-load-start`,{window:r});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,c=await fetch(Se(r),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":s},signal:o.signal});if(!c.ok&&c.status!==204){V.fail(i),t?.setAttribute(`data-error`,``),H(`ui:data-grid-error`,{window:r,status:c.status});return}let l=await ee(c,$.props);if(V.pending(n.key)!==i||S||!await d(e,n.element,l.html,{assets:l.assets,shouldReplace:()=>V.pending(n.key)===i&&!S})||(l.totalItems!==null&&J(l.totalItems),!V.commit(i,r)))return;n.element.style.height=`${a.count*$.props.rowHeight}px`,n.element.style.transform=`translateY(${a.translateOffset}px)`,G(),W(),H(`ui:data-grid-load`,{window:r,start:a.start,count:a.count,end:a.start+a.count})}catch(e){if(o.signal.aborted)return;V.fail(i),t?.setAttribute(`data-error`,``),H(`ui:data-grid-error`,{window:r,status:0,error:e})}finally{z.get(n.key)===o&&z.delete(n.key),Ce()}},Y=t=>{if(E||$.props.cursor)return;if(x>0){y=t;return}let n=xe(t),r=Math.min(Math.max(0,g-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&&v!==i.key){v=i.key;let e=i.axes.y;H(`ui:data-grid-range`,{start:e.start,count:e.count,end:e.start+e.count,window:i})}if(n.length===0){h.forEach(t=>void d(e,t.element,``));return}let a=new Set;n.forEach(e=>{let t=h.find(t=>V.mounted(t.key)?.key===e.key);t&&a.add(t)});let o=h.filter(e=>!a.has(e));n.forEach(e=>{if(h.some(t=>V.mounted(t.key)?.key===e.key))return;let t=o.shift();if(!t)return;let n=V.begin(t.key,e);n&&we(t,e,n)})},X=()=>{z.forEach(e=>e.abort()),z.clear(),x=0,y=null,v=``,V.invalidate(),h.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,d(e,t.element,``)}),q()},Z=(e,n)=>{_=M(e,$.props.selection),w=!0,$.props.selectionValue=_,t&&s({el:t,schema:T,key:`selectionValue`,value:_}),w=!1,W(),H(`ui:data-grid-selection-change`,{selection:_,added:n?.added??[],removed:n?.removed??[]})},Q=(e,t)=>{let n=ce(_,String(e),$.props.selection,t);n.added.length===0&&n.removed.length===0||Z(n.selection,n)},Te=(e,t,n)=>{e.width=Math.min(e.maxWidth??1/0,Math.max(e.minWidth,t)),e.element.dataset.width=String(e.width),A=k(m),G(),H(`ui:data-grid-column-resize`,{column:e.key,width:e.width,phase:n})},Ee=()=>{B.splice(0).forEach(e=>e()),m.forEach(e=>{let t=e.element.querySelector(`[data-ui-data-grid-resize-handle]`);if(!t)return;let n=e.resizable&&$.props.resizableColumns;if(t.hidden=!e.resizable,n?t.removeAttribute(`aria-disabled`):t.setAttribute(`aria-disabled`,`true`),t.tabIndex=n?0:-1,!n)return;let r=t=>Te(e,t.previewWidth,t.phase);B.push(ie({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}))})},$={get supportsSeek(){return E?.supportsSeek??!1},props:null,init(){t=this.$el,S=!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(w)return;let n=t.map(({key:e})=>e);(n.includes(`selectionValue`)||n.includes(`selection`))&&(_=M(this.props.selectionValue,this.props.selection),W()),n.some(e=>[`resizableColumns`,`reorderableColumns`,`minColumnWidth`,`defaultColumnWidth`,`maxColumnWidth`].includes(e))&&(R=!0),n.some(e=>[`query`,`totalRows`,`resizableColumns`,`reorderableColumns`,`minColumnWidth`,`defaultColumnWidth`,`maxColumnWidth`].includes(e))&&K(),n.some(e=>[`fetchUrl`,`rowHeight`,`bufferSize`].includes(e))&&this.reload()}}),g=P(this.props.totalRows),_=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-body]`),o=t.querySelector(`[data-ui-data-grid-spacer]`),f=t.querySelector(`style[data-ui-data-grid-layout]`),h=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||!f||h.length!==3)throw Error(`Data Grid requires one viewport, table owner, body, spacer, layout style, and three row blocks.`);n.setAttribute(`data-ui-data-grid-viewport`,``),m=he(),A=k(m),G(),Ee();let s=t.querySelector(`[data-ui-data-grid-header-row]`);s&&(typeof ResizeObserver<`u`&&(F=new ResizeObserver(()=>_e(s)),F.observe(s)),j=new MutationObserver(K),j.observe(s,{attributes:!0,childList:!0,subtree:!0,attributeFilter:[`data-column`,`data-label`,`data-width`,`data-min-width`,`data-max-width`,`data-hidden`,`data-pinned`,`data-sortable`,`data-sort`,`data-resizable`,`data-reorderable`,`data-align`,`data-cell-class`,`hidden`]})),I=u(t,{invalidateDom:K}),C=new AbortController,n.addEventListener(`scroll`,()=>{b||=requestAnimationFrame(()=>{b=0,n&&Y(n.scrollTop)})},{passive:!0,signal:C.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=m.find(({key:e})=>e===t?.dataset.column);if(n?.sortable){let t=n.sort===`ascending`?`descending`:`ascending`;H(`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(ue)&&Q(a),H(`ui:data-grid-row-activate`,{rowKey:a,row:i})},{signal:C.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&&H(`ui:data-grid-cell-activate`,{rowKey:n.dataset.rowKey??``,column:t.dataset.column??``,cell:t})},{signal:C.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:C.signal}),t.addEventListener(`ui:virtualizer-total-change`,(e=>{!E||e.target!==t||J(Number(e.detail?.totalItems??0))}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-load-start`,(e=>{!E||e.target!==t||H(`ui:data-grid-load-start`,{mode:`cursor`})}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-load`,(e=>{!E||e.target!==t||(G(),W(),H(`ui:data-grid-load`,{...e.detail,mode:`cursor`}))}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-error`,(e=>{!E||e.target!==t||H(`ui:data-grid-error`,{...e.detail,mode:`cursor`})}),{signal:C.signal}),n.style.overscrollBehavior=`contain`,n.style.overflowAnchor=`none`,n.scrollTop=p.scrollTo({total:g,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),q(),this.props.cursor?this.useCursor(re(()=>{if(!t)throw Error(`Data Grid is not mounted.`);return t})):Y(n.scrollTop)},destroy(){S=!0,b&&cancelAnimationFrame(b),C?.abort(),C=null,j?.disconnect(),j=null,F?.disconnect(),F=null,I?.(),I=null,B.splice(0).forEach(e=>e()),E?.destroy(),E=null,X(),this.props.disconnect(),t=null,n=null,r=null,i=null,o=null,f=null,m=[],A=[],h=[]},scrollToIndex(e,t=`start`){if(E){E.scrollToIndex(e,t);return}n&&(n.scrollTop=p.scrollTo({total:g,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:n.scrollTop,buffer:this.props.bufferSize},{axis:`y`,index:e,align:t}),Y(n.scrollTop))},setTotalRows(e){t&&s({el:t,schema:T,key:`totalRows`,value:P(e)})},setQuery(e){t&&s({el:t,schema:T,key:`query`,value:e})},useCursor(r){if(!t||!n||!o)return;E?.destroy(),E=null,X(),t.dataset.totalItems=String(g),t.dataset.itemSize=String(this.props.rowHeight),o.setAttribute(`data-ui-virtualizer-spacer`,``),h.forEach(({element:e})=>e.setAttribute(`data-ui-virtualizer-block`,``)),D=r.query;let i=t.hasAttribute(`data-query`)?this.props.query:D;O=c(i);let a=te(e,{cursor:{...r,query:i}});E=a,Object.assign(a,{$el:t}),a.init()},setUrl(e,n={}){w=!0,this.props.fetchUrl=String(e),t&&s({el:t,schema:T,key:`fetchUrl`,value:String(e)}),w=!1,n.reset??!0?this.reset():this.reload()},reset(e={}){if(E){E.reset({scrollTop:e.scrollTop??0});return}this.reload({scrollTop:e.scrollTop??0})},reload(e={}){if(E){E.reload(e);return}let t=e.scrollTop??n?.scrollTop??0;X(),n&&(n.scrollTop=Math.max(0,t)),Y(t)},resizeColumn(e,t){let n=m.find(t=>t.key===e);n&&Te(n,Number(t),`end`)},reorderColumn(e,n){let r=m.findIndex(t=>t.key===e),i=le(m,e,P(n));if(!i)return;m=i,A=k(m);let a=t?.querySelector(`[data-ui-data-grid-header-row]`),o=a?.querySelector(`[data-ui-data-grid-column-indicator]`)??null;m.forEach(e=>a?.insertBefore(e.element,o)),G(),H(`ui:data-grid-column-reorder`,{column:e,from:r,to:P(n),columns:m.map(({key:e})=>e)})},selectRow(e){Q(String(e),!0)},deselectRow(e){Q(String(e),!1)},toggleRow(e){Q(String(e))},setSelection(e){Z(e)},selectQuery(e,t,n=[]){Z({mode:`query`,token:String(e),total:P(t),except:n.map(String)})},clearSelection(){Z({mode:`ids`,ids:[]})}};return $},I=e=>{f(`UiDataGrid`,()=>F(e))(e)},L=new WeakSet,R=t=>{L.has(t)||(L.add(t),_(t),e(t),m(t),I(t))};export{F as n,R as t};
|
|
2
|
-
//# sourceMappingURL=entry2.generated-
|
|
1
|
+
import{t as e}from"./capability-motion-DQitxnHn.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{a as c,s as l}from"./alpine-machine-BTDXpEr6.js";import{n as u}from"./dom-invalidation-Dw6clnS4.js";import{t as d}from"./fragment-Bl3Rq38L.js";import{t as f}from"./alpine-data-CytyCyfk.js";import{a as ee,i as p,n as te,r as ne,t as re}from"./cursor-data-source-DvHNTjt1.js";import{t as ie}from"./drag-and-drop-DHq3udf7.js";import{t as m}from"./capability-sortable-Dzv1zWaL.js";import{L as h,y as g}from"./common-Dfj6NCjU.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,cursor:i,query:o(null),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())},ae=(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}]})},oe=e=>e.map(({width:e})=>`${e}px`).join(` `),k=e=>e.map(({element:e,...t})=>t),A=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}},j=e=>globalThis.CSS?.escape?globalThis.CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`),se=(e,t)=>{let n=A(t),r=`z-index:2;background-color:var(--ui-surface-color);`;return t.map((t,i)=>{let a=`[data-ui-data-grid-scope="${j(e)}"]`,o=`[data-column="${j(t.key)}"]`,s=`${a} [data-ui-data-grid-column-header]${o},${a} [data-ui-data-grid-cell]${o}`,c=t.pinned===`left`?`position:sticky;left:${n.left.get(t.key)??0}px;${r}`:t.pinned===`right`?`position:sticky;right:${n.right.get(t.key)??0}px;${r}`:``;return`${s}{grid-column:${i+1};${c}}`}).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),ce=(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]}},le=(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},P=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),ue=`a,button,input,select,textarea,[contenteditable],[role="button"],[role="link"]`,F=e=>{let t=null,n=null,r=null,i=null,o=null,f=null,m=[],h=[],g=0,_={mode:`ids`,ids:[]},v=``,y=null,b=0,x=0,S=!1,C=null,w=!1,E=null,D=null,O=null,A=[],j=null,F=null,I=null,L=!1,R=!1,z=new Map,B=[],de=new WeakMap,fe=new WeakMap,V=ne(p),H=(e,n)=>{t?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:n}))},pe=(e,t,n)=>{let r=n.get(e)??[];r.length&&e.classList.remove(...r);let i=[...new Set(t.split(/\s+/).filter(Boolean))];i.length&&e.classList.add(...i),n.set(e,i)},me=()=>({width:$.props.defaultColumnWidth,minWidth:$.props.minColumnWidth,maxWidth:$.props.maxColumnWidth,resizable:$.props.resizableColumns,reorderable:$.props.reorderableColumns}),he=()=>ae(Array.from(t?.querySelectorAll(`[data-ui-data-grid-column-header]`)??[]),me()),ge=e=>{let t=e.element.querySelector(`[data-ui-data-grid-column-label]`),n=e.element.querySelector(`[data-ui-data-grid-sort-button]`);if(t)if(e.sortable&&!n){let n=document.createElement(`button`);n.type=`button`,n.setAttribute(`data-ui-data-grid-sort-button`,``),n.className=e.element.dataset.sortButtonClass??``;let r=document.createElement(`span`);r.setAttribute(`data-ui-data-grid-sort-indicator`,``),r.setAttribute(`aria-hidden`,`true`),t.replaceWith(n),n.append(t,r)}else !e.sortable&&n&&n.replaceWith(t)},U=()=>Array.from(t?.querySelectorAll(`[data-ui-data-grid-row]`)??[]),_e=e=>{i?.style.setProperty(`width`,`${e.getBoundingClientRect().width}px`)},W=()=>{U().forEach(e=>{let t=e.dataset.rowKey??``,n=$.props.selection!==`none`&&t!==``&&N(_,t);e.toggleAttribute(`data-selected`,n),$.props.selection===`none`?e.removeAttribute(`aria-selected`):e.setAttribute(`aria-selected`,String(n))})},G=()=>{if(!t||!f)return;t.style.setProperty(`--ui-data-grid-template`,oe(m));let e=t.dataset.uiDataGridScope??``;f.textContent=se(e,m),r?.setAttribute(`aria-colcount`,String(m.length));let n=t.querySelector(`[data-ui-data-grid-header-row]`);n&&_e(n);let i=n?.querySelector(`[data-ui-data-grid-column-indicator]`);i&&n?.append(i),U().forEach(e=>{let t=Array.from(e.children).filter(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ui-data-grid-cell`)),n=new Map(t.flatMap(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ui-data-grid-cell`)?[[e.dataset.column??``,e]]:[]));m.forEach(({key:t})=>{let r=n.get(t);r&&(r.hidden=!1,e.append(r))});let r=new Set(m.map(({key:e})=>e));t.forEach(t=>{r.has(t.dataset.column??``)||(t.hidden=!0,t.removeAttribute(`aria-colindex`),t.removeAttribute(`data-pinned`),e.append(t))})}),m.forEach((e,t)=>{ge(e),e.element.setAttribute(`aria-colindex`,String(t+1)),e.pinned?e.element.dataset.pinned=e.pinned:e.element.removeAttribute(`data-pinned`),e.sortable?e.element.setAttribute(`aria-sort`,e.sort):e.element.removeAttribute(`aria-sort`),e.element.dataset.disabled=String(!e.reorderable||!$.props.reorderableColumns);let n=e.element.querySelector(`[data-ui-data-grid-column-label-owned]`);n&&(n.textContent=e.label);let r=e.element.querySelector(`[data-ui-data-grid-column-preview-label]`);r&&(r.textContent=e.label);let i=e.element.querySelector(`[data-ui-data-grid-sort-indicator]`);i&&(i.textContent=e.sort===`ascending`?`↑`:e.sort===`descending`?`↓`:``),e.element.querySelector(`[data-ui-data-grid-resize-handle]`)?.setAttribute(`aria-label`,`Resize ${e.label||e.key} column`)}),U().forEach(e=>pe(e,$.props.rowClass,de)),t.querySelectorAll(`[data-ui-data-grid-cell]`).forEach(e=>{let t=m.findIndex(({key:t})=>t===e.dataset.column);if(t>=0){let n=m[t];e.setAttribute(`aria-colindex`,String(t+1)),e.dataset.align=n.align,pe(e,`${$.props.cellClass} ${n.cellClass}`,fe),n.pinned?e.dataset.pinned=n.pinned:e.removeAttribute(`data-pinned`)}})},ve=(e,t)=>{let n=new Map(e.map(e=>[e.key,e])),r=new Map(t.map(e=>[e.key,e]));return{previous:e,columns:t,added:t.filter(({key:e})=>!n.has(e)).map(({key:e})=>e),removed:e.filter(({key:e})=>!r.has(e)).map(({key:e})=>e),changed:t.flatMap(e=>{let t=n.get(e.key);if(!t)return[];let r=Object.keys(e).filter(n=>n!==`key`&&!l(t[n],e[n]));return r.length?[{key:e.key,fields:r}]:[]})}},ye=()=>{if(L=!1,!t||S)return;let e=he(),n=k(e),r=!l(A,n),i=m.length!==e.length||m.some((t,n)=>t.element!==e[n]?.element),a=i||m.some((t,n)=>{let r=e[n];return!r||t.key!==r.key||t.resizable!==r.resizable||t.minWidth!==r.minWidth||t.maxWidth!==r.maxWidth});if(r||i||R){let t=A;m=e,A=n;let i=a||R;R=!1,G(),i&&Ee(),r&&H(`ui:data-grid-columns-change`,ve(t,n))}if($.props.totalRows!==g&&(J($.props.totalRows),E&&(t.dataset.totalItems=String(g))),E){let e=t.hasAttribute(`data-query`)?$.props.query:D;l(O,e)||(O=c(e),E.setQuery(e))}},K=()=>{L||(L=!0,queueMicrotask(ye))},q=()=>{!t||!o||(E||(t.toggleAttribute(`data-loading`,x>0),t.toggleAttribute(`data-empty`,g===0)),t.dataset.selection=$.props.selection,r?.setAttribute(`aria-rowcount`,String(g+1)),t.style.setProperty(`--ui-data-grid-row-height`,`${$.props.rowHeight}px`),t.style.setProperty(`--ui-data-grid-total-height`,`${Math.max(g*$.props.rowHeight,$.props.rowHeight)}px`),(!E||g>0)&&(o.style.height=`var(--ui-data-grid-total-height)`),W())},J=e=>{let t=P(e);t!==g&&(g=t,q(),H(`ui:data-grid-total-change`,{totalRows:g}))},be=e=>p.compute({axes:{y:{total:g,itemSize:$.props.rowHeight,viewportSize:$.props.bufferSize*$.props.rowHeight,scrollOffset:e*$.props.rowHeight,buffer:0}}}),xe=e=>{if(g===0)return[];let t=P($.props.bufferSize,1),n=Math.min(g-1,Math.floor(Math.max(0,e)/$.props.rowHeight)),r=Math.floor(n/t)*t,i=Math.floor((g-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(be)},Se=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}`},Ce=()=>{if(x=Math.max(0,x-1),q(),x>0||y===null||S)return;let e=y;y=null,Y(e)},we=async(n,r,i)=>{let a=r.axes.y;if(!a)return;let o=new AbortController;z.set(n.key,o),x+=1,q(),t?.removeAttribute(`data-error`),H(`ui:data-grid-load-start`,{window:r});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,c=await fetch(Se(r),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":s},signal:o.signal});if(!c.ok&&c.status!==204){V.fail(i),t?.setAttribute(`data-error`,``),H(`ui:data-grid-error`,{window:r,status:c.status});return}let l=await ee(c,$.props);if(V.pending(n.key)!==i||S||!await d(e,n.element,l.html,{assets:l.assets,shouldReplace:()=>V.pending(n.key)===i&&!S})||(l.totalItems!==null&&J(l.totalItems),!V.commit(i,r)))return;n.element.style.height=`${a.count*$.props.rowHeight}px`,n.element.style.transform=`translateY(${a.translateOffset}px)`,G(),W(),H(`ui:data-grid-load`,{window:r,start:a.start,count:a.count,end:a.start+a.count})}catch(e){if(o.signal.aborted)return;V.fail(i),t?.setAttribute(`data-error`,``),H(`ui:data-grid-error`,{window:r,status:0,error:e})}finally{z.get(n.key)===o&&z.delete(n.key),Ce()}},Y=t=>{if(E||$.props.cursor)return;if(x>0){y=t;return}let n=xe(t),r=Math.min(Math.max(0,g-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&&v!==i.key){v=i.key;let e=i.axes.y;H(`ui:data-grid-range`,{start:e.start,count:e.count,end:e.start+e.count,window:i})}if(n.length===0){h.forEach(t=>void d(e,t.element,``));return}let a=new Set;n.forEach(e=>{let t=h.find(t=>V.mounted(t.key)?.key===e.key);t&&a.add(t)});let o=h.filter(e=>!a.has(e));n.forEach(e=>{if(h.some(t=>V.mounted(t.key)?.key===e.key))return;let t=o.shift();if(!t)return;let n=V.begin(t.key,e);n&&we(t,e,n)})},X=()=>{z.forEach(e=>e.abort()),z.clear(),x=0,y=null,v=``,V.invalidate(),h.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,d(e,t.element,``)}),q()},Z=(e,n)=>{_=M(e,$.props.selection),w=!0,$.props.selectionValue=_,t&&s({el:t,schema:T,key:`selectionValue`,value:_}),w=!1,W(),H(`ui:data-grid-selection-change`,{selection:_,added:n?.added??[],removed:n?.removed??[]})},Q=(e,t)=>{let n=ce(_,String(e),$.props.selection,t);n.added.length===0&&n.removed.length===0||Z(n.selection,n)},Te=(e,t,n)=>{e.width=Math.min(e.maxWidth??1/0,Math.max(e.minWidth,t)),e.element.dataset.width=String(e.width),A=k(m),G(),H(`ui:data-grid-column-resize`,{column:e.key,width:e.width,phase:n})},Ee=()=>{B.splice(0).forEach(e=>e()),m.forEach(e=>{let t=e.element.querySelector(`[data-ui-data-grid-resize-handle]`);if(!t)return;let n=e.resizable&&$.props.resizableColumns;if(t.hidden=!e.resizable,n?t.removeAttribute(`aria-disabled`):t.setAttribute(`aria-disabled`,`true`),t.tabIndex=n?0:-1,!n)return;let r=t=>Te(e,t.previewWidth,t.phase);B.push(ie({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}))})},$={get supportsSeek(){return E?.supportsSeek??!1},props:null,init(){t=this.$el,S=!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(w)return;let n=t.map(({key:e})=>e);(n.includes(`selectionValue`)||n.includes(`selection`))&&(_=M(this.props.selectionValue,this.props.selection),W()),n.some(e=>[`resizableColumns`,`reorderableColumns`,`minColumnWidth`,`defaultColumnWidth`,`maxColumnWidth`].includes(e))&&(R=!0),n.some(e=>[`query`,`totalRows`,`resizableColumns`,`reorderableColumns`,`minColumnWidth`,`defaultColumnWidth`,`maxColumnWidth`].includes(e))&&K(),n.some(e=>[`fetchUrl`,`rowHeight`,`bufferSize`].includes(e))&&this.reload()}}),g=P(this.props.totalRows),_=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-body]`),o=t.querySelector(`[data-ui-data-grid-spacer]`),f=t.querySelector(`style[data-ui-data-grid-layout]`),h=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||!f||h.length!==3)throw Error(`Data Grid requires one viewport, table owner, body, spacer, layout style, and three row blocks.`);n.setAttribute(`data-ui-data-grid-viewport`,``),m=he(),A=k(m),G(),Ee();let s=t.querySelector(`[data-ui-data-grid-header-row]`);s&&(typeof ResizeObserver<`u`&&(F=new ResizeObserver(()=>_e(s)),F.observe(s)),j=new MutationObserver(K),j.observe(s,{attributes:!0,childList:!0,subtree:!0,attributeFilter:[`data-column`,`data-label`,`data-width`,`data-min-width`,`data-max-width`,`data-hidden`,`data-pinned`,`data-sortable`,`data-sort`,`data-resizable`,`data-reorderable`,`data-align`,`data-cell-class`,`hidden`]})),I=u(t,{invalidateDom:K}),C=new AbortController,n.addEventListener(`scroll`,()=>{b||=requestAnimationFrame(()=>{b=0,n&&Y(n.scrollTop)})},{passive:!0,signal:C.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=m.find(({key:e})=>e===t?.dataset.column);if(n?.sortable){let t=n.sort===`ascending`?`descending`:`ascending`;H(`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(ue)&&Q(a),H(`ui:data-grid-row-activate`,{rowKey:a,row:i})},{signal:C.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&&H(`ui:data-grid-cell-activate`,{rowKey:n.dataset.rowKey??``,column:t.dataset.column??``,cell:t})},{signal:C.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:C.signal}),t.addEventListener(`ui:virtualizer-total-change`,(e=>{!E||e.target!==t||J(Number(e.detail?.totalItems??0))}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-load-start`,(e=>{!E||e.target!==t||H(`ui:data-grid-load-start`,{mode:`cursor`})}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-load`,(e=>{!E||e.target!==t||(G(),W(),H(`ui:data-grid-load`,{...e.detail,mode:`cursor`}))}),{signal:C.signal}),t.addEventListener(`ui:virtualizer-error`,(e=>{!E||e.target!==t||H(`ui:data-grid-error`,{...e.detail,mode:`cursor`})}),{signal:C.signal}),n.style.overscrollBehavior=`contain`,n.style.overflowAnchor=`none`,n.scrollTop=p.scrollTo({total:g,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),q(),this.props.cursor?this.useCursor(re(()=>{if(!t)throw Error(`Data Grid is not mounted.`);return t})):Y(n.scrollTop)},destroy(){S=!0,b&&cancelAnimationFrame(b),C?.abort(),C=null,j?.disconnect(),j=null,F?.disconnect(),F=null,I?.(),I=null,B.splice(0).forEach(e=>e()),E?.destroy(),E=null,X(),this.props.disconnect(),t=null,n=null,r=null,i=null,o=null,f=null,m=[],A=[],h=[]},scrollToIndex(e,t=`start`){if(E){E.scrollToIndex(e,t);return}n&&(n.scrollTop=p.scrollTo({total:g,itemSize:this.props.rowHeight,viewportSize:n.clientHeight,scrollOffset:n.scrollTop,buffer:this.props.bufferSize},{axis:`y`,index:e,align:t}),Y(n.scrollTop))},setTotalRows(e){t&&s({el:t,schema:T,key:`totalRows`,value:P(e)})},setQuery(e){t&&s({el:t,schema:T,key:`query`,value:e})},useCursor(r){if(!t||!n||!o)return;E?.destroy(),E=null,X(),t.dataset.totalItems=String(g),t.dataset.itemSize=String(this.props.rowHeight),o.setAttribute(`data-ui-virtualizer-spacer`,``),h.forEach(({element:e})=>e.setAttribute(`data-ui-virtualizer-block`,``)),D=r.query;let i=t.hasAttribute(`data-query`)?this.props.query:D;O=c(i);let a=te(e,{cursor:{...r,query:i}});E=a,Object.assign(a,{$el:t}),a.init()},setUrl(e,n={}){w=!0,this.props.fetchUrl=String(e),t&&s({el:t,schema:T,key:`fetchUrl`,value:String(e)}),w=!1,n.reset??!0?this.reset():this.reload()},reset(e={}){if(E){E.reset({scrollTop:e.scrollTop??0});return}this.reload({scrollTop:e.scrollTop??0})},reload(e={}){if(E){E.reload(e);return}let t=e.scrollTop??n?.scrollTop??0;X(),n&&(n.scrollTop=Math.max(0,t)),Y(t)},resizeColumn(e,t){let n=m.find(t=>t.key===e);n&&Te(n,Number(t),`end`)},reorderColumn(e,n){let r=m.findIndex(t=>t.key===e),i=le(m,e,P(n));if(!i)return;m=i,A=k(m);let a=t?.querySelector(`[data-ui-data-grid-header-row]`),o=a?.querySelector(`[data-ui-data-grid-column-indicator]`)??null;m.forEach(e=>a?.insertBefore(e.element,o)),G(),H(`ui:data-grid-column-reorder`,{column:e,from:r,to:P(n),columns:m.map(({key:e})=>e)})},selectRow(e){Q(String(e),!0)},deselectRow(e){Q(String(e),!1)},toggleRow(e){Q(String(e))},setSelection(e){Z(e)},selectQuery(e,t,n=[]){Z({mode:`query`,token:String(e),total:P(t),except:n.map(String)})},clearSelection(){Z({mode:`ids`,ids:[]})}};return $},I=e=>{f(`UiDataGrid`,()=>F(e))(e)},L=new WeakSet,R=t=>{L.has(t)||(L.add(t),_(t),e(t),m(t),I(t))};export{F as n,R as t};
|
|
2
|
+
//# sourceMappingURL=entry2.generated-D1X0sDop.js.map
|