@alfadocs/ui-kit-debug 0.18.0 → 0.18.1
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/dist/_chunks/date-range-picker-9gANFNG9.js.map +1 -1
- package/dist/_chunks/freemium-paywall-DXc7XlGE.js.map +1 -1
- package/dist/_chunks/list-BdvDctBz.js.map +1 -1
- package/dist/agent-catalog.json +1 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
- package/dist/components/list/list.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker-9gANFNG9.js","sources":["../../node_modules/date-fns/subDays.js","../../node_modules/date-fns/subWeeks.js","../../src/components/date-range-picker/date-range-picker.agent.ts","../../src/components/date-range-picker/date-range-picker.tsx"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { addWeeks } from \"./addWeeks.js\";\n\n/**\n * The {@link subWeeks} function options.\n */\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the weeks subtracted\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * const result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport function subWeeks(date, amount, options) {\n return addWeeks(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subWeeks;\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — DateRangePicker. */\n/* */\n/* DateRangePicker wraps react-day-picker (range mode) inside a Radix */\n/* Popover. The agent surface curates the trigger + popover into a small */\n/* set of range operations — set / clear / open / close. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` §15. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { DateRangePickerHandle } from './date-range-picker';\n\nexport const dateRangePickerAgent: AgentAdapter<DateRangePickerHandle> = {\n id: 'date-range-picker',\n capabilities: ['range_pick', 'open', 'close'],\n state: {\n range: {\n type: '{ from: iso-date | null, to: iso-date | null }',\n descriptionKey: 'ui.agent.dateRangePicker.state.range',\n description:\n 'Currently-selected ISO date range endpoints, each possibly null.',\n read: (handle) => {\n const range = handle.getRange();\n return {\n from: range.from?.toISOString() ?? null,\n to: range.to?.toISOString() ?? null,\n };\n },\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.dateRangePicker.state.isOpen',\n description: 'Whether the range calendar popover is open.',\n read: (handle) => handle.isOpen(),\n },\n },\n actions: {\n set_range: {\n safety: 'write',\n argsType: '{ from: string, to: string }',\n descriptionKey: 'ui.agent.dateRangePicker.actions.setRange',\n description: 'Replace the selected range with the given ISO endpoints.',\n invoke: (handle, args: { from: string; to: string }) => {\n handle.setRange({ from: new Date(args.from), to: new Date(args.to) });\n },\n },\n clear: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.dateRangePicker.actions.clear',\n description: 'Clear the selected range.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n descriptionKey: 'ui.agent.dateRangePicker.actions.open',\n description: 'Open the range calendar popover.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n descriptionKey: 'ui.agent.dateRangePicker.actions.close',\n description: 'Close the range calendar popover.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'date-range-picker',\n description: 'Marks the DateRangePicker wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport * as Popover from '@radix-ui/react-popover';\nimport { DayPicker, type DateRange } from 'react-day-picker';\nimport {\n format as fnsFormat,\n differenceInCalendarDays,\n startOfWeek,\n endOfWeek,\n startOfMonth,\n endOfMonth,\n subDays,\n subWeeks,\n} from 'date-fns';\nimport { Calendar } from 'lucide-react';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useFormField } from '../form-field/form-field-context';\nimport {\n getDateFnsLocale,\n buildDisabledMatcher,\n CalendarChevron,\n triggerVariants,\n calendarIconVariants,\n popoverContentVariants,\n presetButtonVariants,\n} from '../_shared';\nimport { useAgentRegistration } from '../../agent';\nimport { dateRangePickerAgent } from './date-range-picker.agent';\nimport '../../tokens/themes/bridges/react-day-picker.css';\n\n/* -------------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------------- */\n\nexport interface DateRangePreset {\n label: string;\n range: () => { from: Date; to: Date };\n}\n\nexport interface DateRangeValue {\n from?: Date;\n to?: Date;\n}\n\n/** Curated imperative handle exposed via `ref` — also consumed by the agent adapter. */\nexport interface DateRangePickerHandle {\n /** Get the current selected range. */\n getRange: () => DateRangeValue;\n /** Replace the selected range. */\n setRange: (range: DateRangeValue) => void;\n /** Clear the selected range. */\n clear: () => void;\n /** Whether the popover is open. */\n isOpen: () => boolean;\n /** Open the range calendar popover. */\n open: () => void;\n /** Close the range calendar popover. */\n close: () => void;\n}\n\nexport interface DateRangePickerProps extends Pick<\n VariantProps<typeof triggerVariants>,\n 'size'\n> {\n /** Current range — controlled. */\n value?: DateRangeValue;\n /** Default range — uncontrolled. */\n defaultValue?: DateRangeValue;\n /** Called when the range changes. */\n onChange?: (range: DateRangeValue) => void;\n /** Minimum selectable date. */\n minDate?: Date;\n /** Maximum selectable date. */\n maxDate?: Date;\n /** Custom presets. Replaces defaults unless mergePresets is true. */\n presets?: DateRangePreset[];\n /** Merge custom presets with defaults instead of replacing. */\n mergePresets?: boolean;\n /** Component size. */\n size?: 'sm' | 'md' | 'lg';\n /** Disabled state. */\n disabled?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /** Additional class names. */\n className?: string;\n /** id override. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\nexport const DateRangePicker = forwardRef<\n DateRangePickerHandle,\n DateRangePickerProps\n>(\n (\n {\n value,\n defaultValue,\n onChange,\n minDate,\n maxDate,\n presets: presetsProp,\n mergePresets = false,\n size = 'md',\n disabled,\n placeholder,\n className,\n id,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n const effectiveId = id ?? ctx.id;\n const effectiveDisabled = ctx.disabled || disabled;\n const effectiveTone = ctx.invalid ? 'error' : 'default';\n\n const locale = getDateFnsLocale(i18n.language);\n const placeholderText =\n placeholder ??\n t('inputs.dateRangePicker.placeholder', 'Select date range');\n\n const [currentValueRaw, setDateRangeValue] = useControllableState<\n DateRangeValue\n >({\n value,\n defaultValue: defaultValue ?? {},\n onChange,\n });\n const currentValue: DateRangeValue = currentValueRaw ?? {};\n\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date>(currentValue.from ?? new Date());\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const emit = useCallback(\n (range: DateRangeValue) => {\n setDateRangeValue(range);\n },\n [setDateRangeValue],\n );\n\n const disabledMatcher = buildDisabledMatcher(minDate, maxDate);\n\n // Default presets\n const defaultPresets: DateRangePreset[] = [\n {\n label: t('inputs.dateRangePicker.presets.today', 'Today'),\n range: () => {\n const today = new Date();\n return { from: today, to: today };\n },\n },\n {\n label: t('inputs.dateRangePicker.presets.yesterday', 'Yesterday'),\n range: () => {\n const yesterday = subDays(new Date(), 1);\n return { from: yesterday, to: yesterday };\n },\n },\n {\n label: t('inputs.dateRangePicker.presets.last7', 'Last 7 days'),\n range: () => ({\n from: subDays(new Date(), 6),\n to: new Date(),\n }),\n },\n {\n label: t('inputs.dateRangePicker.presets.thisWeek', 'This week'),\n range: () => ({\n from: startOfWeek(new Date(), { locale }),\n to: endOfWeek(new Date(), { locale }),\n }),\n },\n {\n label: t('inputs.dateRangePicker.presets.lastWeek', 'Last week'),\n range: () => {\n const lastWeekDay = subWeeks(new Date(), 1);\n return {\n from: startOfWeek(lastWeekDay, { locale }),\n to: endOfWeek(lastWeekDay, { locale }),\n };\n },\n },\n {\n label: t('inputs.dateRangePicker.presets.thisMonth', 'This month'),\n range: () => ({\n from: startOfMonth(new Date()),\n to: endOfMonth(new Date()),\n }),\n },\n {\n label: t('inputs.dateRangePicker.presets.last30', 'Last 30 days'),\n range: () => ({\n from: subDays(new Date(), 29),\n to: new Date(),\n }),\n },\n ];\n\n const effectivePresets = presetsProp\n ? mergePresets\n ? [...defaultPresets, ...presetsProp]\n : presetsProp\n : defaultPresets;\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n if (range) {\n emit({ from: range.from, to: range.to });\n } else {\n emit({});\n }\n };\n\n const handlePresetClick = (preset: DateRangePreset) => {\n const range = preset.range();\n emit(range);\n setMonth(range.from);\n setOpen(false);\n };\n\n // Format display text\n const displayText = (() => {\n if (currentValue.from && currentValue.to) {\n const fromStr = fnsFormat(currentValue.from, 'MMM d, yyyy', { locale });\n const toStr = fnsFormat(currentValue.to, 'MMM d, yyyy', { locale });\n return `${fromStr} – ${toStr}`;\n }\n if (currentValue.from) {\n return fnsFormat(currentValue.from, 'MMM d, yyyy', { locale });\n }\n return '';\n })();\n\n // Range summary for screen readers\n const rangeSummary = (() => {\n if (currentValue.from && currentValue.to) {\n const days =\n differenceInCalendarDays(currentValue.to, currentValue.from) + 1;\n return t('inputs.dateRangePicker.days', '{{count}} days', {\n count: days,\n });\n }\n return '';\n })();\n\n const handle = useMemo<DateRangePickerHandle>(\n () => ({\n getRange: () => currentValue,\n setRange: (range) => emit(range),\n clear: () => emit({}),\n isOpen: () => open,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [currentValue, emit, open],\n );\n\n useImperativeHandle(ref, () => handle, [handle]);\n useAgentRegistration(dateRangePickerAgent, handle, effectiveId);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <div\n className={className}\n data-component=\"date-range-picker\"\n data-component-id={effectiveId}\n >\n <Popover.Trigger asChild disabled={effectiveDisabled}>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props -- FormField propagates invalid state to its trigger; users rely on this for validation announcements */}\n <button\n ref={triggerRef}\n id={effectiveId}\n type=\"button\"\n disabled={effectiveDisabled}\n aria-describedby={ctx.describedBy || undefined}\n aria-invalid={ctx.invalid || undefined}\n // `aria-required` is not valid on `<button>` per ARIA 1.2 — the\n // FormField label's visible asterisk + `aria-describedby` link\n // communicate the required state instead.\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={triggerVariants({ size, tone: effectiveTone })}\n >\n <span\n className={\n displayText\n ? 'ds:text-foreground'\n : 'ds:text-muted-foreground'\n }\n >\n {displayText || placeholderText}\n </span>\n <span\n aria-hidden=\"true\"\n className={calendarIconVariants({ size })}\n >\n <Calendar />\n </span>\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n sideOffset={4}\n align=\"start\"\n className={popoverContentVariants()}\n >\n <div className=\"ds:flex ds:gap-[var(--spacing-md)]\">\n {/* Presets column */}\n {effectivePresets.length > 0 ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-[8rem] ds:border-e ds:border-border ds:pe-[var(--spacing-md)]\">\n {effectivePresets.map((preset) => (\n <button\n key={preset.label}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={presetButtonVariants()}\n >\n {preset.label}\n </button>\n ))}\n </div>\n ) : null}\n\n {/* Dual calendar */}\n <div>\n <DayPicker\n mode=\"range\"\n selected={\n currentValue.from\n ? { from: currentValue.from, to: currentValue.to }\n : undefined\n }\n onSelect={handleRangeSelect}\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={2}\n disabled={disabledMatcher}\n locale={locale}\n showOutsideDays\n fixedWeeks\n pagedNavigation\n components={{ Chevron: CalendarChevron }}\n />\n\n {/* Range summary live region */}\n {rangeSummary ? (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"type-body-sm ds:text-muted-foreground ds:mt-[var(--spacing-sm)] ds:text-center\"\n >\n {rangeSummary}\n </div>\n ) : null}\n </div>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n );\n },\n);\n\nDateRangePicker.displayName = 'DateRangePicker';\n"],"names":["subDays","date","amount","options","addDays","subWeeks","addWeeks","dateRangePickerAgent","handle","range","_a","_b","args","DateRangePicker","forwardRef","value","defaultValue","onChange","minDate","maxDate","presetsProp","mergePresets","size","disabled","placeholder","className","id","ref","t","i18n","useTranslation","ctx","useFormField","effectiveId","effectiveDisabled","effectiveTone","locale","getDateFnsLocale","placeholderText","currentValueRaw","setDateRangeValue","useControllableState","currentValue","open","setOpen","useState","month","setMonth","triggerRef","useRef","emit","useCallback","disabledMatcher","buildDisabledMatcher","defaultPresets","today","yesterday","startOfWeek","endOfWeek","lastWeekDay","startOfMonth","endOfMonth","effectivePresets","handleRangeSelect","handlePresetClick","preset","displayText","fromStr","fnsFormat","toStr","rangeSummary","days","differenceInCalendarDays","useMemo","useImperativeHandle","useAgentRegistration","Popover","jsxs","jsx","triggerVariants","calendarIconVariants","Calendar","popoverContentVariants","presetButtonVariants","DayPicker","CalendarChevron"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"date-range-picker-9gANFNG9.js","sources":["../../node_modules/date-fns/subDays.js","../../node_modules/date-fns/subWeeks.js","../../src/components/date-range-picker/date-range-picker.agent.ts","../../src/components/date-range-picker/date-range-picker.tsx"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { addWeeks } from \"./addWeeks.js\";\n\n/**\n * The {@link subWeeks} function options.\n */\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the weeks subtracted\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * const result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport function subWeeks(date, amount, options) {\n return addWeeks(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subWeeks;\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — DateRangePicker. */\n/* */\n/* DateRangePicker wraps react-day-picker (range mode) inside a Radix */\n/* Popover. The agent surface curates the trigger + popover into a small */\n/* set of range operations — set / clear / open / close. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` §15. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { DateRangePickerHandle } from './date-range-picker';\n\nexport const dateRangePickerAgent: AgentAdapter<DateRangePickerHandle> = {\n id: 'date-range-picker',\n capabilities: ['range_pick', 'open', 'close'],\n state: {\n range: {\n type: '{ from: iso-date | null, to: iso-date | null }',\n descriptionKey: 'ui.agent.dateRangePicker.state.range',\n description:\n 'Currently-selected ISO date range endpoints, each possibly null.',\n read: (handle) => {\n const range = handle.getRange();\n return {\n from: range.from?.toISOString() ?? null,\n to: range.to?.toISOString() ?? null,\n };\n },\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.dateRangePicker.state.isOpen',\n description: 'Whether the range calendar popover is open.',\n read: (handle) => handle.isOpen(),\n },\n },\n actions: {\n set_range: {\n safety: 'write',\n argsType: '{ from: string, to: string }',\n descriptionKey: 'ui.agent.dateRangePicker.actions.setRange',\n description: 'Replace the selected range with the given ISO endpoints.',\n invoke: (handle, args: { from: string; to: string }) => {\n handle.setRange({ from: new Date(args.from), to: new Date(args.to) });\n },\n },\n clear: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.dateRangePicker.actions.clear',\n description: 'Clear the selected range.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n descriptionKey: 'ui.agent.dateRangePicker.actions.open',\n description: 'Open the range calendar popover.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n descriptionKey: 'ui.agent.dateRangePicker.actions.close',\n description: 'Close the range calendar popover.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'date-range-picker',\n description: 'Marks the DateRangePicker wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport * as Popover from '@radix-ui/react-popover';\nimport { DayPicker, type DateRange } from 'react-day-picker';\nimport {\n format as fnsFormat,\n differenceInCalendarDays,\n startOfWeek,\n endOfWeek,\n startOfMonth,\n endOfMonth,\n subDays,\n subWeeks,\n} from 'date-fns';\nimport { Calendar } from 'lucide-react';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useFormField } from '../form-field/form-field-context';\nimport {\n getDateFnsLocale,\n buildDisabledMatcher,\n CalendarChevron,\n triggerVariants,\n calendarIconVariants,\n popoverContentVariants,\n presetButtonVariants,\n} from '../_shared';\nimport { useAgentRegistration } from '../../agent';\nimport { dateRangePickerAgent } from './date-range-picker.agent';\nimport '../../tokens/themes/bridges/react-day-picker.css';\n\n/* -------------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------------- */\n\nexport interface DateRangePreset {\n label: string;\n range: () => { from: Date; to: Date };\n}\n\nexport interface DateRangeValue {\n from?: Date;\n to?: Date;\n}\n\n/** Curated imperative handle exposed via `ref` — also consumed by the agent adapter. */\nexport interface DateRangePickerHandle {\n /** Get the current selected range. */\n getRange: () => DateRangeValue;\n /** Replace the selected range. */\n setRange: (range: DateRangeValue) => void;\n /** Clear the selected range. */\n clear: () => void;\n /** Whether the popover is open. */\n isOpen: () => boolean;\n /** Open the range calendar popover. */\n open: () => void;\n /** Close the range calendar popover. */\n close: () => void;\n}\n\nexport interface DateRangePickerProps extends Pick<\n VariantProps<typeof triggerVariants>,\n 'size'\n> {\n /** Current range — controlled. */\n value?: DateRangeValue;\n /** Default range — uncontrolled. */\n defaultValue?: DateRangeValue;\n /** Called when the range changes. */\n onChange?: (range: DateRangeValue) => void;\n /** Minimum selectable date. */\n minDate?: Date;\n /** Maximum selectable date. */\n maxDate?: Date;\n /** Custom presets. Replaces defaults unless mergePresets is true. */\n presets?: DateRangePreset[];\n /** Merge custom presets with defaults instead of replacing. */\n mergePresets?: boolean;\n /** Component size. */\n size?: 'sm' | 'md' | 'lg';\n /** Disabled state. */\n disabled?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /** Additional class names. */\n className?: string;\n /** id override. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\nexport const DateRangePicker = forwardRef<\n DateRangePickerHandle,\n DateRangePickerProps\n>(\n (\n {\n value,\n defaultValue,\n onChange,\n minDate,\n maxDate,\n presets: presetsProp,\n mergePresets = false,\n size = 'md',\n disabled,\n placeholder,\n className,\n id,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n const effectiveId = id ?? ctx.id;\n const effectiveDisabled = ctx.disabled || disabled;\n const effectiveTone = ctx.invalid ? 'error' : 'default';\n\n const locale = getDateFnsLocale(i18n.language);\n const placeholderText =\n placeholder ??\n t('inputs.dateRangePicker.placeholder', 'Select date range');\n\n const [currentValueRaw, setDateRangeValue] =\n useControllableState<DateRangeValue>({\n value,\n defaultValue: defaultValue ?? {},\n onChange,\n });\n const currentValue: DateRangeValue = currentValueRaw ?? {};\n\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date>(currentValue.from ?? new Date());\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const emit = useCallback(\n (range: DateRangeValue) => {\n setDateRangeValue(range);\n },\n [setDateRangeValue],\n );\n\n const disabledMatcher = buildDisabledMatcher(minDate, maxDate);\n\n // Default presets\n const defaultPresets: DateRangePreset[] = [\n {\n label: t('inputs.dateRangePicker.presets.today', 'Today'),\n range: () => {\n const today = new Date();\n return { from: today, to: today };\n },\n },\n {\n label: t('inputs.dateRangePicker.presets.yesterday', 'Yesterday'),\n range: () => {\n const yesterday = subDays(new Date(), 1);\n return { from: yesterday, to: yesterday };\n },\n },\n {\n label: t('inputs.dateRangePicker.presets.last7', 'Last 7 days'),\n range: () => ({\n from: subDays(new Date(), 6),\n to: new Date(),\n }),\n },\n {\n label: t('inputs.dateRangePicker.presets.thisWeek', 'This week'),\n range: () => ({\n from: startOfWeek(new Date(), { locale }),\n to: endOfWeek(new Date(), { locale }),\n }),\n },\n {\n label: t('inputs.dateRangePicker.presets.lastWeek', 'Last week'),\n range: () => {\n const lastWeekDay = subWeeks(new Date(), 1);\n return {\n from: startOfWeek(lastWeekDay, { locale }),\n to: endOfWeek(lastWeekDay, { locale }),\n };\n },\n },\n {\n label: t('inputs.dateRangePicker.presets.thisMonth', 'This month'),\n range: () => ({\n from: startOfMonth(new Date()),\n to: endOfMonth(new Date()),\n }),\n },\n {\n label: t('inputs.dateRangePicker.presets.last30', 'Last 30 days'),\n range: () => ({\n from: subDays(new Date(), 29),\n to: new Date(),\n }),\n },\n ];\n\n const effectivePresets = presetsProp\n ? mergePresets\n ? [...defaultPresets, ...presetsProp]\n : presetsProp\n : defaultPresets;\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n if (range) {\n emit({ from: range.from, to: range.to });\n } else {\n emit({});\n }\n };\n\n const handlePresetClick = (preset: DateRangePreset) => {\n const range = preset.range();\n emit(range);\n setMonth(range.from);\n setOpen(false);\n };\n\n // Format display text\n const displayText = (() => {\n if (currentValue.from && currentValue.to) {\n const fromStr = fnsFormat(currentValue.from, 'MMM d, yyyy', { locale });\n const toStr = fnsFormat(currentValue.to, 'MMM d, yyyy', { locale });\n return `${fromStr} – ${toStr}`;\n }\n if (currentValue.from) {\n return fnsFormat(currentValue.from, 'MMM d, yyyy', { locale });\n }\n return '';\n })();\n\n // Range summary for screen readers\n const rangeSummary = (() => {\n if (currentValue.from && currentValue.to) {\n const days =\n differenceInCalendarDays(currentValue.to, currentValue.from) + 1;\n return t('inputs.dateRangePicker.days', '{{count}} days', {\n count: days,\n });\n }\n return '';\n })();\n\n const handle = useMemo<DateRangePickerHandle>(\n () => ({\n getRange: () => currentValue,\n setRange: (range) => emit(range),\n clear: () => emit({}),\n isOpen: () => open,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [currentValue, emit, open],\n );\n\n useImperativeHandle(ref, () => handle, [handle]);\n useAgentRegistration(dateRangePickerAgent, handle, effectiveId);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <div\n className={className}\n data-component=\"date-range-picker\"\n data-component-id={effectiveId}\n >\n <Popover.Trigger asChild disabled={effectiveDisabled}>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props -- FormField propagates invalid state to its trigger; users rely on this for validation announcements */}\n <button\n ref={triggerRef}\n id={effectiveId}\n type=\"button\"\n disabled={effectiveDisabled}\n aria-describedby={ctx.describedBy || undefined}\n aria-invalid={ctx.invalid || undefined}\n // `aria-required` is not valid on `<button>` per ARIA 1.2 — the\n // FormField label's visible asterisk + `aria-describedby` link\n // communicate the required state instead.\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={triggerVariants({ size, tone: effectiveTone })}\n >\n <span\n className={\n displayText\n ? 'ds:text-foreground'\n : 'ds:text-muted-foreground'\n }\n >\n {displayText || placeholderText}\n </span>\n <span\n aria-hidden=\"true\"\n className={calendarIconVariants({ size })}\n >\n <Calendar />\n </span>\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n sideOffset={4}\n align=\"start\"\n className={popoverContentVariants()}\n >\n <div className=\"ds:flex ds:gap-[var(--spacing-md)]\">\n {/* Presets column */}\n {effectivePresets.length > 0 ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-[8rem] ds:border-e ds:border-border ds:pe-[var(--spacing-md)]\">\n {effectivePresets.map((preset) => (\n <button\n key={preset.label}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={presetButtonVariants()}\n >\n {preset.label}\n </button>\n ))}\n </div>\n ) : null}\n\n {/* Dual calendar */}\n <div>\n <DayPicker\n mode=\"range\"\n selected={\n currentValue.from\n ? { from: currentValue.from, to: currentValue.to }\n : undefined\n }\n onSelect={handleRangeSelect}\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={2}\n disabled={disabledMatcher}\n locale={locale}\n showOutsideDays\n fixedWeeks\n pagedNavigation\n components={{ Chevron: CalendarChevron }}\n />\n\n {/* Range summary live region */}\n {rangeSummary ? (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"type-body-sm ds:text-muted-foreground ds:mt-[var(--spacing-sm)] ds:text-center\"\n >\n {rangeSummary}\n </div>\n ) : null}\n </div>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n );\n },\n);\n\nDateRangePicker.displayName = 'DateRangePicker';\n"],"names":["subDays","date","amount","options","addDays","subWeeks","addWeeks","dateRangePickerAgent","handle","range","_a","_b","args","DateRangePicker","forwardRef","value","defaultValue","onChange","minDate","maxDate","presetsProp","mergePresets","size","disabled","placeholder","className","id","ref","t","i18n","useTranslation","ctx","useFormField","effectiveId","effectiveDisabled","effectiveTone","locale","getDateFnsLocale","placeholderText","currentValueRaw","setDateRangeValue","useControllableState","currentValue","open","setOpen","useState","month","setMonth","triggerRef","useRef","emit","useCallback","disabledMatcher","buildDisabledMatcher","defaultPresets","today","yesterday","startOfWeek","endOfWeek","lastWeekDay","startOfMonth","endOfMonth","effectivePresets","handleRangeSelect","handlePresetClick","preset","displayText","fromStr","fnsFormat","toStr","rangeSummary","days","differenceInCalendarDays","useMemo","useImperativeHandle","useAgentRegistration","Popover","jsxs","jsx","triggerVariants","calendarIconVariants","Calendar","popoverContentVariants","presetButtonVariants","DayPicker","CalendarChevron"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freemium-paywall-DXc7XlGE.js","sources":["../../src/components/freemium-paywall/freemium-paywall.agent.ts","../../src/components/freemium-paywall/freemium-paywall.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — FreemiumPaywall. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { FreemiumPaywallHandle } from './freemium-paywall';\n\nexport const freemiumPaywallAgent: AgentAdapter<FreemiumPaywallHandle> = {\n id: 'freemium-paywall',\n capabilities: ['submit', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.freemiumPaywall.state.isOpen',\n description: 'True when the paywall dialog is open.',\n read: (handle) => handle.isOpen(),\n },\n selectedPlanId: {\n type: 'string | null',\n descriptionKey: 'ui.agent.freemiumPaywall.state.selectedPlanId',\n description: 'Opaque id of the currently-selected plan.',\n read: (handle) => handle.getSelectedPlanId(),\n },\n },\n actions: {\n upgrade: {\n safety: 'write',\n descriptionKey: 'ui.agent.freemiumPaywall.actions.upgrade',\n description: 'Fire onUpgrade with the currently-selected plan id.',\n invoke: (handle) => {\n handle.upgrade();\n },\n },\n dismiss: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.freemiumPaywall.actions.dismiss',\n description:\n 'Dismiss the paywall via the Not Now action. Irreversible from the same UI.',\n invoke: (handle) => {\n handle.dismiss();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'freemium-paywall',\n description: 'Marks the FreemiumPaywall dialog content.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport * as RadixAlertDialog from '@radix-ui/react-alert-dialog';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { freemiumPaywallAgent } from './freemium-paywall.agent';\nimport { AlertTriangle, Check } from 'lucide-react';\nimport { Button } from '../button';\nimport { Progress } from '../progress';\nimport { formatPaymentAmount } from '../payment-form';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface FreemiumPlan {\n id: string;\n /** Translation key for the plan name (e.g. `app.paywall.plans.pro`). */\n nameKey: string;\n /** Amount in minor units (cents, centesimi). */\n priceAmount: number;\n /** ISO 4217 currency code. */\n currency: string;\n /** Translation key for the cadence suffix (e.g. `app.paywall.period.month`). */\n perKey?: string;\n /** Per-line feature translation keys. */\n featuresKeys?: string[];\n}\n\nconst contentVariants = cva(\n [\n 'ds:fixed ds:z-[var(--z-modal)] ds:overflow-auto',\n 'ds:bg-[color:var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:border ds:border-border ds:shadow-[var(--shadow-lg)]',\n // forced-colors: keep the dialog boundary visible under Windows High\n // Contrast, where `var(--border)` may collapse to system colours.\n 'ds:forced-colors:border-[CanvasText]',\n 'ds:focus:outline-none',\n ].join(' '),\n {\n variants: {\n layout: {\n centered:\n 'ds:start-1/2 ds:top-1/2 ds:-translate-x-1/2 ds:-translate-y-1/2 ds:rtl:translate-x-1/2 ds:rounded-[var(--radius-md)] ds:max-w-[var(--dialog-width-xl)] ds:w-[calc(100vw-2rem)] ds:max-h-[90vh]',\n sheet:\n 'ds:inset-inline-0 ds:bottom-0 ds:w-full ds:max-h-[90vh] ds:rounded-t-[var(--radius-md)]',\n },\n density: {\n compact:\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n full: 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:pt-[var(--spacing-lg)] ds:pb-[var(--spacing-lg)]',\n },\n },\n defaultVariants: { layout: 'centered', density: 'full' },\n },\n);\n\n/** Curated imperative handle for agent / external automation. */\nexport interface FreemiumPaywallHandle {\n isOpen: () => boolean;\n getSelectedPlanId: () => string | null;\n upgrade: () => void;\n dismiss: () => void;\n}\n\nexport interface FreemiumPaywallProps extends VariantProps<\n typeof contentVariants\n> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n plans: FreemiumPlan[];\n /** Currently-selected plan id (controlled) or default. */\n selectedPlanId?: string;\n defaultSelectedPlanId?: string;\n onSelectedPlanChange?: (id: string) => void;\n /** Usage indicator values — omit the object to hide the bar. */\n usage?: { used: number; limit: number };\n /** Fires on upgrade. */\n onUpgrade: (planId: string) => void;\n /** Fires when the user dismisses via Not Now. */\n onCancel?: () => void;\n /** Title override; defaults to t('paywall.title'). */\n title?: ReactNode;\n /** Description override; defaults to t('paywall.description'). */\n description?: ReactNode;\n className?: string;\n}\n\nexport const FreemiumPaywall = forwardRef<HTMLDivElement, FreemiumPaywallProps>(\n (\n {\n open,\n onOpenChange,\n plans,\n selectedPlanId,\n defaultSelectedPlanId,\n onSelectedPlanChange,\n usage,\n onUpgrade,\n onCancel,\n title,\n description,\n layout = 'centered',\n density = 'full',\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const titleId = useId();\n const descId = useId();\n\n const [currentSelectedRaw, handleSelectedChange] = useControllableState<\n string\n >({\n value: selectedPlanId,\n defaultValue: defaultSelectedPlanId ?? plans[0]?.id ?? '',\n onChange: onSelectedPlanChange,\n });\n const currentSelected = currentSelectedRaw ?? '';\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleUpgrade = () => {\n if (!currentSelected) return;\n onUpgrade(currentSelected);\n };\n\n const openRef = useRef(open);\n openRef.current = open;\n const selectedRef = useRef<string>(currentSelected);\n selectedRef.current = currentSelected;\n\n const contentRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => contentRef.current as HTMLDivElement, []);\n\n const agentHandle = useMemo<FreemiumPaywallHandle>(\n () => ({\n isOpen: () => openRef.current,\n getSelectedPlanId: () => selectedRef.current || null,\n upgrade: () => handleUpgrade(),\n dismiss: () => handleCancel(),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n useAgentRegistration(freemiumPaywallAgent, agentHandle, undefined);\n\n const usagePercent = usage\n ? Math.min(\n 100,\n Math.max(0, (usage.used / Math.max(1, usage.limit)) * 100),\n )\n : 0;\n const usageFull = usage ? usage.used >= usage.limit : false;\n\n return (\n <RadixAlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixAlertDialog.Portal>\n <RadixAlertDialog.Overlay\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[color:var(--foreground)]/40',\n 'ds:motion-safe:data-[state=open]:animate-in ds:motion-safe:data-[state=closed]:animate-out',\n 'ds:[.theme-accessible_&]:animate-none',\n ].join(' ')}\n />\n <RadixAlertDialog.Content\n ref={contentRef}\n aria-labelledby={titleId}\n aria-describedby={descId}\n className={contentVariants({ layout, density, className })}\n data-component=\"freemium-paywall\"\n >\n <RadixAlertDialog.Title id={titleId} asChild>\n <h2 className=\"type-title-card\">{title ?? t('paywall.title')}</h2>\n </RadixAlertDialog.Title>\n <RadixAlertDialog.Description id={descId} asChild>\n <p className=\"ds:mt-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]\">\n {description ?? t('paywall.description')}\n </p>\n </RadixAlertDialog.Description>\n\n {usage ? (\n <div className=\"ds:mt-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:mb-[var(--spacing-xs)]\">\n {usageFull ? (\n <AlertTriangle\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-[color:var(--destructive)]\"\n />\n ) : null}\n <span\n className={[\n 'type-body-sm',\n usageFull\n ? 'ds:text-[color:var(--destructive)]'\n : 'ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {usageFull\n ? t('paywall.usageFull')\n : t('paywall.usageLabel', {\n used: usage.used,\n limit: usage.limit,\n })}\n </span>\n </div>\n <Progress\n value={usagePercent}\n max={100}\n ariaLabel={t('paywall.usageLabel', {\n used: usage.used,\n limit: usage.limit,\n })}\n className={\n usageFull\n ? 'ds:[&_[role=progressbar]>*]:bg-[color:var(--destructive)]'\n : ''\n }\n />\n </div>\n ) : null}\n\n <RadixRadioGroup.Root\n value={currentSelected}\n onValueChange={handleSelectedChange}\n aria-label={t('paywall.title')}\n className=\"ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n {plans.map((plan) => {\n // Reuse the payment-form helper — it knows about\n // zero-decimal currencies (JPY, KRW, VND …) and applies\n // the right divisor. Raw `/ 100` would 100× the price in\n // those currencies.\n const formattedPrice = formatPaymentAmount(\n plan.priceAmount,\n plan.currency,\n i18n.language,\n );\n const period = plan.perKey ? t(plan.perKey) : undefined;\n const priceLine = period\n ? t('paywall.pricePer', { price: formattedPrice, period })\n : formattedPrice;\n const planName = t(plan.nameKey);\n return (\n <RadixRadioGroup.Item\n key={plan.id}\n value={plan.id}\n className={[\n 'ds:group ds:relative ds:flex ds:flex-col ds:items-stretch',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:text-start ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:data-[state=checked]:border-[color:var(--primary)]',\n 'ds:data-[state=checked]:bg-[color:var(--primary)]/5',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' ')}\n >\n <span className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span className=\"ds:font-semibold\">{planName}</span>\n <span className=\"ds:tabular-nums\">{priceLine}</span>\n </span>\n {plan.featuresKeys && plan.featuresKeys.length > 0 ? (\n <ul\n aria-label={t('paywall.features')}\n className=\"ds:mt-[var(--spacing-xs)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n {plan.featuresKeys.map((key, i) => (\n <li\n key={i}\n className=\"ds:flex ds:items-start ds:gap-[var(--spacing-xs)] type-body-sm\"\n >\n <Check\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-[color:var(--primary)] ds:mt-[1px]\"\n />\n <span>{t(key)}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </RadixRadioGroup.Item>\n );\n })}\n </RadixRadioGroup.Root>\n\n <div className=\"ds:mt-[var(--spacing-lg)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:justify-end\">\n <RadixAlertDialog.Cancel asChild>\n <Button intent=\"outline\" onClick={handleCancel}>\n {t('paywall.notNow')}\n </Button>\n </RadixAlertDialog.Cancel>\n <RadixAlertDialog.Action asChild>\n <Button intent=\"primary\" onClick={handleUpgrade}>\n {t('paywall.upgrade')}\n </Button>\n </RadixAlertDialog.Action>\n </div>\n </RadixAlertDialog.Content>\n </RadixAlertDialog.Portal>\n </RadixAlertDialog.Root>\n );\n },\n);\n\nFreemiumPaywall.displayName = 'FreemiumPaywall';\n"],"names":["freemiumPaywallAgent","handle","contentVariants","cva","FreemiumPaywall","forwardRef","open","onOpenChange","plans","selectedPlanId","defaultSelectedPlanId","onSelectedPlanChange","usage","onUpgrade","onCancel","title","description","layout","density","className","ref","t","i18n","useTranslation","titleId","useId","descId","currentSelectedRaw","handleSelectedChange","useControllableState","_a","currentSelected","handleCancel","handleUpgrade","openRef","useRef","selectedRef","contentRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","usagePercent","usageFull","jsx","RadixAlertDialog","jsxs","AlertTriangle","Progress","RadixRadioGroup","plan","formattedPrice","formatPaymentAmount","period","priceLine","planName","key","i","Check","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"freemium-paywall-DXc7XlGE.js","sources":["../../src/components/freemium-paywall/freemium-paywall.agent.ts","../../src/components/freemium-paywall/freemium-paywall.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — FreemiumPaywall. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { FreemiumPaywallHandle } from './freemium-paywall';\n\nexport const freemiumPaywallAgent: AgentAdapter<FreemiumPaywallHandle> = {\n id: 'freemium-paywall',\n capabilities: ['submit', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.freemiumPaywall.state.isOpen',\n description: 'True when the paywall dialog is open.',\n read: (handle) => handle.isOpen(),\n },\n selectedPlanId: {\n type: 'string | null',\n descriptionKey: 'ui.agent.freemiumPaywall.state.selectedPlanId',\n description: 'Opaque id of the currently-selected plan.',\n read: (handle) => handle.getSelectedPlanId(),\n },\n },\n actions: {\n upgrade: {\n safety: 'write',\n descriptionKey: 'ui.agent.freemiumPaywall.actions.upgrade',\n description: 'Fire onUpgrade with the currently-selected plan id.',\n invoke: (handle) => {\n handle.upgrade();\n },\n },\n dismiss: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.freemiumPaywall.actions.dismiss',\n description:\n 'Dismiss the paywall via the Not Now action. Irreversible from the same UI.',\n invoke: (handle) => {\n handle.dismiss();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'freemium-paywall',\n description: 'Marks the FreemiumPaywall dialog content.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport * as RadixAlertDialog from '@radix-ui/react-alert-dialog';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { freemiumPaywallAgent } from './freemium-paywall.agent';\nimport { AlertTriangle, Check } from 'lucide-react';\nimport { Button } from '../button';\nimport { Progress } from '../progress';\nimport { formatPaymentAmount } from '../payment-form';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface FreemiumPlan {\n id: string;\n /** Translation key for the plan name (e.g. `app.paywall.plans.pro`). */\n nameKey: string;\n /** Amount in minor units (cents, centesimi). */\n priceAmount: number;\n /** ISO 4217 currency code. */\n currency: string;\n /** Translation key for the cadence suffix (e.g. `app.paywall.period.month`). */\n perKey?: string;\n /** Per-line feature translation keys. */\n featuresKeys?: string[];\n}\n\nconst contentVariants = cva(\n [\n 'ds:fixed ds:z-[var(--z-modal)] ds:overflow-auto',\n 'ds:bg-[color:var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:border ds:border-border ds:shadow-[var(--shadow-lg)]',\n // forced-colors: keep the dialog boundary visible under Windows High\n // Contrast, where `var(--border)` may collapse to system colours.\n 'ds:forced-colors:border-[CanvasText]',\n 'ds:focus:outline-none',\n ].join(' '),\n {\n variants: {\n layout: {\n centered:\n 'ds:start-1/2 ds:top-1/2 ds:-translate-x-1/2 ds:-translate-y-1/2 ds:rtl:translate-x-1/2 ds:rounded-[var(--radius-md)] ds:max-w-[var(--dialog-width-xl)] ds:w-[calc(100vw-2rem)] ds:max-h-[90vh]',\n sheet:\n 'ds:inset-inline-0 ds:bottom-0 ds:w-full ds:max-h-[90vh] ds:rounded-t-[var(--radius-md)]',\n },\n density: {\n compact:\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n full: 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:pt-[var(--spacing-lg)] ds:pb-[var(--spacing-lg)]',\n },\n },\n defaultVariants: { layout: 'centered', density: 'full' },\n },\n);\n\n/** Curated imperative handle for agent / external automation. */\nexport interface FreemiumPaywallHandle {\n isOpen: () => boolean;\n getSelectedPlanId: () => string | null;\n upgrade: () => void;\n dismiss: () => void;\n}\n\nexport interface FreemiumPaywallProps extends VariantProps<\n typeof contentVariants\n> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n plans: FreemiumPlan[];\n /** Currently-selected plan id (controlled) or default. */\n selectedPlanId?: string;\n defaultSelectedPlanId?: string;\n onSelectedPlanChange?: (id: string) => void;\n /** Usage indicator values — omit the object to hide the bar. */\n usage?: { used: number; limit: number };\n /** Fires on upgrade. */\n onUpgrade: (planId: string) => void;\n /** Fires when the user dismisses via Not Now. */\n onCancel?: () => void;\n /** Title override; defaults to t('paywall.title'). */\n title?: ReactNode;\n /** Description override; defaults to t('paywall.description'). */\n description?: ReactNode;\n className?: string;\n}\n\nexport const FreemiumPaywall = forwardRef<HTMLDivElement, FreemiumPaywallProps>(\n (\n {\n open,\n onOpenChange,\n plans,\n selectedPlanId,\n defaultSelectedPlanId,\n onSelectedPlanChange,\n usage,\n onUpgrade,\n onCancel,\n title,\n description,\n layout = 'centered',\n density = 'full',\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const titleId = useId();\n const descId = useId();\n\n const [currentSelectedRaw, handleSelectedChange] =\n useControllableState<string>({\n value: selectedPlanId,\n defaultValue: defaultSelectedPlanId ?? plans[0]?.id ?? '',\n onChange: onSelectedPlanChange,\n });\n const currentSelected = currentSelectedRaw ?? '';\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleUpgrade = () => {\n if (!currentSelected) return;\n onUpgrade(currentSelected);\n };\n\n const openRef = useRef(open);\n openRef.current = open;\n const selectedRef = useRef<string>(currentSelected);\n selectedRef.current = currentSelected;\n\n const contentRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => contentRef.current as HTMLDivElement, []);\n\n const agentHandle = useMemo<FreemiumPaywallHandle>(\n () => ({\n isOpen: () => openRef.current,\n getSelectedPlanId: () => selectedRef.current || null,\n upgrade: () => handleUpgrade(),\n dismiss: () => handleCancel(),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n useAgentRegistration(freemiumPaywallAgent, agentHandle, undefined);\n\n const usagePercent = usage\n ? Math.min(\n 100,\n Math.max(0, (usage.used / Math.max(1, usage.limit)) * 100),\n )\n : 0;\n const usageFull = usage ? usage.used >= usage.limit : false;\n\n return (\n <RadixAlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixAlertDialog.Portal>\n <RadixAlertDialog.Overlay\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[color:var(--foreground)]/40',\n 'ds:motion-safe:data-[state=open]:animate-in ds:motion-safe:data-[state=closed]:animate-out',\n 'ds:[.theme-accessible_&]:animate-none',\n ].join(' ')}\n />\n <RadixAlertDialog.Content\n ref={contentRef}\n aria-labelledby={titleId}\n aria-describedby={descId}\n className={contentVariants({ layout, density, className })}\n data-component=\"freemium-paywall\"\n >\n <RadixAlertDialog.Title id={titleId} asChild>\n <h2 className=\"type-title-card\">{title ?? t('paywall.title')}</h2>\n </RadixAlertDialog.Title>\n <RadixAlertDialog.Description id={descId} asChild>\n <p className=\"ds:mt-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]\">\n {description ?? t('paywall.description')}\n </p>\n </RadixAlertDialog.Description>\n\n {usage ? (\n <div className=\"ds:mt-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:mb-[var(--spacing-xs)]\">\n {usageFull ? (\n <AlertTriangle\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-[color:var(--destructive)]\"\n />\n ) : null}\n <span\n className={[\n 'type-body-sm',\n usageFull\n ? 'ds:text-[color:var(--destructive)]'\n : 'ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {usageFull\n ? t('paywall.usageFull')\n : t('paywall.usageLabel', {\n used: usage.used,\n limit: usage.limit,\n })}\n </span>\n </div>\n <Progress\n value={usagePercent}\n max={100}\n ariaLabel={t('paywall.usageLabel', {\n used: usage.used,\n limit: usage.limit,\n })}\n className={\n usageFull\n ? 'ds:[&_[role=progressbar]>*]:bg-[color:var(--destructive)]'\n : ''\n }\n />\n </div>\n ) : null}\n\n <RadixRadioGroup.Root\n value={currentSelected}\n onValueChange={handleSelectedChange}\n aria-label={t('paywall.title')}\n className=\"ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n {plans.map((plan) => {\n // Reuse the payment-form helper — it knows about\n // zero-decimal currencies (JPY, KRW, VND …) and applies\n // the right divisor. Raw `/ 100` would 100× the price in\n // those currencies.\n const formattedPrice = formatPaymentAmount(\n plan.priceAmount,\n plan.currency,\n i18n.language,\n );\n const period = plan.perKey ? t(plan.perKey) : undefined;\n const priceLine = period\n ? t('paywall.pricePer', { price: formattedPrice, period })\n : formattedPrice;\n const planName = t(plan.nameKey);\n return (\n <RadixRadioGroup.Item\n key={plan.id}\n value={plan.id}\n className={[\n 'ds:group ds:relative ds:flex ds:flex-col ds:items-stretch',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:text-start ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:data-[state=checked]:border-[color:var(--primary)]',\n 'ds:data-[state=checked]:bg-[color:var(--primary)]/5',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' ')}\n >\n <span className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span className=\"ds:font-semibold\">{planName}</span>\n <span className=\"ds:tabular-nums\">{priceLine}</span>\n </span>\n {plan.featuresKeys && plan.featuresKeys.length > 0 ? (\n <ul\n aria-label={t('paywall.features')}\n className=\"ds:mt-[var(--spacing-xs)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n {plan.featuresKeys.map((key, i) => (\n <li\n key={i}\n className=\"ds:flex ds:items-start ds:gap-[var(--spacing-xs)] type-body-sm\"\n >\n <Check\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-[color:var(--primary)] ds:mt-[1px]\"\n />\n <span>{t(key)}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </RadixRadioGroup.Item>\n );\n })}\n </RadixRadioGroup.Root>\n\n <div className=\"ds:mt-[var(--spacing-lg)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:justify-end\">\n <RadixAlertDialog.Cancel asChild>\n <Button intent=\"outline\" onClick={handleCancel}>\n {t('paywall.notNow')}\n </Button>\n </RadixAlertDialog.Cancel>\n <RadixAlertDialog.Action asChild>\n <Button intent=\"primary\" onClick={handleUpgrade}>\n {t('paywall.upgrade')}\n </Button>\n </RadixAlertDialog.Action>\n </div>\n </RadixAlertDialog.Content>\n </RadixAlertDialog.Portal>\n </RadixAlertDialog.Root>\n );\n },\n);\n\nFreemiumPaywall.displayName = 'FreemiumPaywall';\n"],"names":["freemiumPaywallAgent","handle","contentVariants","cva","FreemiumPaywall","forwardRef","open","onOpenChange","plans","selectedPlanId","defaultSelectedPlanId","onSelectedPlanChange","usage","onUpgrade","onCancel","title","description","layout","density","className","ref","t","i18n","useTranslation","titleId","useId","descId","currentSelectedRaw","handleSelectedChange","useControllableState","_a","currentSelected","handleCancel","handleUpgrade","openRef","useRef","selectedRef","contentRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","usagePercent","usageFull","jsx","RadixAlertDialog","jsxs","AlertTriangle","Progress","RadixRadioGroup","plan","formattedPrice","formatPaymentAmount","period","priceLine","planName","key","i","Check","Button"],"mappings":";;;;;;;;;;;;;AAOO,MAAMA,KAA4D;AAAA,EACvE,IAAI;AAAA,EACJ,cAAc,CAAC,UAAU,SAAS;AAAA,EAClC,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACC,MAAWA,EAAO,OAAA;AAAA,IAAO;AAAA,IAElC,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,kBAAA;AAAA,IAAkB;AAAA,EAC7C;AAAA,EAEF,SAAS;AAAA,IACP,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,QAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,QAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GCjBMC,KAAkBC;AAAA,EACtB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,QAAQ;AAAA,QACN,UACE;AAAA,QACF,OACE;AAAA,MAAA;AAAA,MAEJ,SAAS;AAAA,QACP,SACE;AAAA,QACF,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB,EAAE,QAAQ,YAAY,SAAS,OAAA;AAAA,EAAO;AAE3D,GAiCaC,KAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,MAAAC;AAAA,IACA,cAAAC;AAAA,IACA,OAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,aAAAC;AAAA,IACA,QAAAC,IAAS;AAAA,IACT,SAAAC,IAAU;AAAA,IACV,WAAAC;AAAA,EAAA,GAEFC,MACG;;AACH,UAAM,EAAE,GAAAC,GAAG,MAAAC,EAAA,IAASC,EAAA,GACdC,IAAUC,EAAA,GACVC,IAASD,EAAA,GAET,CAACE,GAAoBC,CAAoB,IAC7CC,EAA6B;AAAA,MAC3B,OAAOpB;AAAA,MACP,cAAcC,OAAyBoB,IAAAtB,EAAM,CAAC,MAAP,gBAAAsB,EAAU,OAAM;AAAA,MACvD,UAAUnB;AAAA,IAAA,CACX,GACGoB,IAAkBJ,KAAsB,IAExCK,IAAe,MAAM;AACzB,MAAAlB,KAAA,QAAAA,KACAP,EAAa,EAAK;AAAA,IACpB,GAEM0B,IAAgB,MAAM;AAC1B,MAAKF,KACLlB,EAAUkB,CAAe;AAAA,IAC3B,GAEMG,IAAUC,EAAO7B,CAAI;AAC3B,IAAA4B,EAAQ,UAAU5B;AAClB,UAAM8B,IAAcD,EAAeJ,CAAe;AAClD,IAAAK,EAAY,UAAUL;AAEtB,UAAMM,IAAaF,EAAuB,IAAI;AAC9C,IAAAG,EAAoBlB,GAAK,MAAMiB,EAAW,SAA2B,CAAA,CAAE;AAEvE,UAAME,IAAcC;AAAA,MAClB,OAAO;AAAA,QACL,QAAQ,MAAMN,EAAQ;AAAA,QACtB,mBAAmB,MAAME,EAAY,WAAW;AAAA,QAChD,SAAS,MAAMH,EAAA;AAAA,QACf,SAAS,MAAMD,EAAA;AAAA,MAAa;AAAA;AAAA,MAG9B,CAAA;AAAA,IAAC;AAEH,IAAAS,EAAqBzC,IAAsBuC,GAAa,MAAS;AAEjE,UAAMG,IAAe9B,IACjB,KAAK;AAAA,MACH;AAAA,MACA,KAAK,IAAI,GAAIA,EAAM,OAAO,KAAK,IAAI,GAAGA,EAAM,KAAK,IAAK,GAAG;AAAA,IAAA,IAE3D,GACE+B,IAAY/B,IAAQA,EAAM,QAAQA,EAAM,QAAQ;AAEtD,WACE,gBAAAgC,EAACC,EAAiB,MAAjB,EAAsB,MAAAvC,GAAY,cAAAC,GACjC,UAAA,gBAAAuC,EAACD,EAAiB,QAAjB,EACC,UAAA;AAAA,MAAA,gBAAAD;AAAA,QAACC,EAAiB;AAAA,QAAjB;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA,EACA,KAAK,GAAG;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,gBAAAC;AAAA,QAACD,EAAiB;AAAA,QAAjB;AAAA,UACC,KAAKR;AAAA,UACL,mBAAiBb;AAAA,UACjB,oBAAkBE;AAAA,UAClB,WAAWxB,GAAgB,EAAE,QAAAe,GAAQ,SAAAC,GAAS,WAAAC,GAAW;AAAA,UACzD,kBAAe;AAAA,UAEf,UAAA;AAAA,YAAA,gBAAAyB,EAACC,EAAiB,OAAjB,EAAuB,IAAIrB,GAAS,SAAO,IAC1C,UAAA,gBAAAoB,EAAC,MAAA,EAAG,WAAU,mBAAmB,UAAA7B,KAASM,EAAE,eAAe,GAAE,GAC/D;AAAA,8BACCwB,EAAiB,aAAjB,EAA6B,IAAInB,GAAQ,SAAO,IAC/C,UAAA,gBAAAkB,EAAC,KAAA,EAAE,WAAU,qEACV,UAAA5B,KAAeK,EAAE,qBAAqB,GACzC,GACF;AAAA,YAECT,IACC,gBAAAkC,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gFACZ,UAAA;AAAA,gBAAAH,IACC,gBAAAC;AAAA,kBAACG;AAAAA,kBAAA;AAAA,oBACC,eAAY;AAAA,oBACZ,WAAU;AAAA,kBAAA;AAAA,gBAAA,IAEV;AAAA,gBACJ,gBAAAH;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAW;AAAA,sBACT;AAAA,sBACAD,IACI,uCACA;AAAA,oBAAA,EACJ,KAAK,GAAG;AAAA,oBAET,UAAAA,IACGtB,EAAE,mBAAmB,IACrBA,EAAE,sBAAsB;AAAA,sBACtB,MAAMT,EAAM;AAAA,sBACZ,OAAOA,EAAM;AAAA,oBAAA,CACd;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACP,GACF;AAAA,cACA,gBAAAgC;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACC,OAAON;AAAA,kBACP,KAAK;AAAA,kBACL,WAAWrB,EAAE,sBAAsB;AAAA,oBACjC,MAAMT,EAAM;AAAA,oBACZ,OAAOA,EAAM;AAAA,kBAAA,CACd;AAAA,kBACD,WACE+B,IACI,8DACA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAER,EAAA,CACF,IACE;AAAA,YAEJ,gBAAAC;AAAA,cAACK,EAAgB;AAAA,cAAhB;AAAA,gBACC,OAAOlB;AAAA,gBACP,eAAeH;AAAA,gBACf,cAAYP,EAAE,eAAe;AAAA,gBAC7B,WAAU;AAAA,gBAET,UAAAb,EAAM,IAAI,CAAC0C,MAAS;AAKnB,wBAAMC,IAAiBC;AAAA,oBACrBF,EAAK;AAAA,oBACLA,EAAK;AAAA,oBACL5B,EAAK;AAAA,kBAAA,GAED+B,IAASH,EAAK,SAAS7B,EAAE6B,EAAK,MAAM,IAAI,QACxCI,IAAYD,IACdhC,EAAE,oBAAoB,EAAE,OAAO8B,GAAgB,QAAAE,EAAA,CAAQ,IACvDF,GACEI,IAAWlC,EAAE6B,EAAK,OAAO;AAC/B,yBACE,gBAAAJ;AAAA,oBAACG,EAAgB;AAAA,oBAAhB;AAAA,sBAEC,OAAOC,EAAK;AAAA,sBACZ,WAAW;AAAA,wBACT;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,sBAAA,EACA,KAAK,GAAG;AAAA,sBAEV,UAAA;AAAA,wBAAA,gBAAAJ,EAAC,QAAA,EAAK,WAAU,yEACd,UAAA;AAAA,0BAAA,gBAAAF,EAAC,QAAA,EAAK,WAAU,oBAAoB,UAAAW,GAAS;AAAA,0BAC7C,gBAAAX,EAAC,QAAA,EAAK,WAAU,mBAAmB,UAAAU,EAAA,CAAU;AAAA,wBAAA,GAC/C;AAAA,wBACCJ,EAAK,gBAAgBA,EAAK,aAAa,SAAS,IAC/C,gBAAAN;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,cAAYvB,EAAE,kBAAkB;AAAA,4BAChC,WAAU;AAAA,4BAET,UAAA6B,EAAK,aAAa,IAAI,CAACM,GAAKC,MAC3B,gBAAAX;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCAEC,WAAU;AAAA,gCAEV,UAAA;AAAA,kCAAA,gBAAAF;AAAA,oCAACc;AAAA,oCAAA;AAAA,sCACC,eAAY;AAAA,sCACZ,WAAU;AAAA,oCAAA;AAAA,kCAAA;AAAA,kCAEZ,gBAAAd,EAAC,QAAA,EAAM,UAAAvB,EAAEmC,CAAG,EAAA,CAAE;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAPTC;AAAA,4BAAA,CASR;AAAA,0BAAA;AAAA,wBAAA,IAED;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAnCCP,EAAK;AAAA,kBAAA;AAAA,gBAsChB,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,YAGH,gBAAAJ,EAAC,OAAA,EAAI,WAAU,+FACb,UAAA;AAAA,cAAA,gBAAAF,EAACC,EAAiB,QAAjB,EAAwB,SAAO,IAC9B,UAAA,gBAAAD,EAACe,GAAA,EAAO,QAAO,WAAU,SAAS3B,GAC/B,UAAAX,EAAE,gBAAgB,GACrB,GACF;AAAA,cACA,gBAAAuB,EAACC,EAAiB,QAAjB,EAAwB,SAAO,IAC9B,UAAA,gBAAAD,EAACe,GAAA,EAAO,QAAO,WAAU,SAAS1B,GAC/B,UAAAZ,EAAE,iBAAiB,GACtB,EAAA,CACF;AAAA,YAAA,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,EAAA,CACF,EAAA,CACF;AAAA,EAEJ;AACF;AAEAjB,GAAgB,cAAc;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-BdvDctBz.js","sources":["../../src/components/list/list.agent.ts","../../src/components/list/list.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — List. */\n/* */\n/* The agent surface is only meaningful for selectable lists (`selection` */\n/* prop set to `single` or `multiple`). Presentational lists still emit */\n/* the root + item DOM hooks so the registry can address them, but the */\n/* state and actions are no-ops when selection is `none`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ListHandle } from './list';\n\nexport const listAgent: AgentAdapter<ListHandle> = {\n id: 'list',\n capabilities: ['select_single', 'select_multiple'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.list.state.selection',\n description:\n 'Ids of currently-selected list items. Empty array when none selected or list is presentational.',\n read: (handle) => handle.getSelection(),\n },\n },\n actions: {\n set_selection: {\n safety: 'read',\n argsType: '{ ids: string[] }',\n descriptionKey: 'ui.agent.list.actions.setSelection',\n description:\n 'Replace the current selection with the given item ids. No-op on presentational lists.',\n invoke: (handle, args: { ids: string[] }) => {\n handle.setSelection(args.ids);\n },\n },\n clear_selection: {\n safety: 'read',\n descriptionKey: 'ui.agent.list.actions.clearSelection',\n description: 'Deselect all items.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'list',\n description: 'Marks the List root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-item-id',\n description:\n 'Opaque item id; sourced from each ListItem `value` prop. Emitted only when `value` is set.',\n },\n },\n};\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { listAgent } from './list.agent';\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface ListContextValue {\n selection: 'none' | 'single' | 'multiple';\n selectedValues: Set<string>;\n focusedValue: string | null;\n disabled: boolean;\n enabledItemValues: string[];\n onItemSelect: (value: string) => void;\n onItemFocus: (value: string) => void;\n onItemKeyDown: (e: KeyboardEvent<HTMLElement>, value: string) => void;\n registerItemRef: (value: string, el: HTMLElement | null) => void;\n divider: 'spaced' | 'divided' | 'bordered';\n}\n\nconst ListContext = createContext<ListContextValue>({\n selection: 'none',\n selectedValues: new Set(),\n focusedValue: null,\n disabled: false,\n enabledItemValues: [],\n onItemSelect: () => {},\n onItemFocus: () => {},\n onItemKeyDown: () => {},\n registerItemRef: () => {},\n divider: 'spaced',\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nconst listVariants = cva('ds:flex ds:flex-col ds:p-0 ds:m-0', {\n variants: {\n divider: {\n spaced: '',\n divided: '',\n bordered:\n 'ds:border ds:border-[color:var(--border)] ds:rounded-[var(--radius-md)] ds:overflow-hidden',\n },\n density: {\n compact: 'ds:gap-[var(--spacing-xs)]',\n default: 'ds:gap-[var(--spacing-sm)]',\n relaxed: 'ds:gap-[var(--spacing-md)]',\n },\n ordered: {\n true: 'ds:list-decimal ds:ps-[var(--spacing-lg)]',\n false: 'ds:list-none',\n },\n },\n defaultVariants: {\n divider: 'spaced',\n density: 'default',\n ordered: false,\n },\n});\n\nconst listItemVariants = cva(\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n {\n variants: {\n divider: {\n spaced: '',\n divided:\n 'ds:[&:not(:last-child)]:[border-block-end:1px_solid_var(--border)]',\n bordered:\n 'ds:[&:not(:last-child)]:[border-block-end:1px_solid_var(--border)]',\n },\n interactive: {\n // flex lives on the outer <div role=\"option\"> so it doesn't suppress ::marker on <li>\n true: [\n 'ds:flex ds:items-center ds:gap-x-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)] ds:cursor-pointer ds:select-none',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n // no flex here — <li> keeps display:list-item so ::marker renders correctly\n false: '',\n },\n selected: {\n true: '',\n false: '',\n },\n disabled: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n interactive: true,\n selected: false,\n disabled: false,\n className: 'ds:hover:bg-[color:var(--muted)]/20',\n },\n {\n interactive: true,\n selected: true,\n className: 'ds:bg-[color:var(--primary)]/10',\n },\n {\n interactive: true,\n disabled: true,\n className: 'ds:opacity-50 ds:cursor-not-allowed ds:pointer-events-none',\n },\n ],\n defaultVariants: {\n divider: 'spaced',\n interactive: false,\n selected: false,\n disabled: false,\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/** Curated imperative handle for agent / external automation. */\nexport interface ListHandle {\n getSelection: () => string[];\n setSelection: (ids: string[]) => void;\n clearSelection: () => void;\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLElement> {\n as?: 'ul' | 'ol';\n start?: number;\n divider?: 'spaced' | 'divided' | 'bordered';\n density?: 'compact' | 'default' | 'relaxed';\n selection?: 'none' | 'single' | 'multiple';\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n disabled?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport interface ListItemProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n value?: string;\n leading?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n trailing?: ReactNode;\n lineClamp?: number;\n disabled?: boolean;\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction collectItemInfo(\n children: ReactNode,\n): Array<{ value: string; disabled: boolean }> {\n const items: Array<{ value: string; disabled: boolean }> = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n const props = child.props as { value?: unknown; disabled?: unknown };\n if (typeof props.value === 'string') {\n items.push({ value: props.value, disabled: Boolean(props.disabled) });\n }\n });\n return items;\n}\n\n/* ------------------------------------------------------------------ */\n/* ListRoot */\n/* ------------------------------------------------------------------ */\n\nconst ListRoot = forwardRef<ListHandle, ListProps>(\n (\n {\n as = 'ul',\n start,\n divider = 'spaced',\n density = 'default',\n selection = 'none',\n value: controlledValue,\n defaultValue,\n onValueChange,\n disabled = false,\n className,\n children,\n 'aria-label': ariaLabel,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const isSelectable = selection !== 'none';\n const isMultiple = selection === 'multiple';\n\n // Normalize the array of selected values onto the canonical `string[]`\n // shape that the rest of the component renders against. The hook owns\n // state in both modes; the consumer-facing `onValueChange` is invoked\n // with either a single string or the array, depending on `selection`.\n const controlledArray = useMemo<string[] | undefined>(() => {\n if (controlledValue === undefined) return undefined;\n return Array.isArray(controlledValue) ? controlledValue : [controlledValue];\n }, [controlledValue]);\n\n const initialArray = useMemo<string[]>(() => {\n if (defaultValue === undefined) return [];\n return Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n // Default value is read once at mount.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [internalArray, setInternalArray] = useControllableState<string[]>({\n value: controlledArray,\n defaultValue: initialArray,\n });\n\n const selectedValues = useMemo<Set<string>>(\n () => new Set(internalArray ?? []),\n [internalArray],\n );\n\n const allItemInfo = useMemo(() => collectItemInfo(children), [children]);\n const enabledItemValues = useMemo(\n () =>\n allItemInfo.filter((i) => !i.disabled && !disabled).map((i) => i.value),\n [allItemInfo, disabled],\n );\n\n const [focusedValue, setFocusedValue] = useState<string | null>(null);\n\n const itemRefs = useRef<Map<string, HTMLElement>>(new Map());\n\n const registerItemRef = useCallback(\n (value: string, el: HTMLElement | null) => {\n if (el) {\n itemRefs.current.set(value, el);\n } else {\n itemRefs.current.delete(value);\n }\n },\n [],\n );\n\n const focusItem = useCallback((value: string) => {\n setFocusedValue(value);\n requestAnimationFrame(() => {\n itemRefs.current.get(value)?.focus();\n });\n }, []);\n\n const commit = useCallback(\n (next: string[]) => {\n setInternalArray(next);\n if (isMultiple) {\n onValueChange?.(next);\n } else {\n onValueChange?.(next[0] ?? '');\n }\n },\n [setInternalArray, isMultiple, onValueChange],\n );\n\n const handleItemSelect = useCallback(\n (itemValue: string) => {\n if (disabled) return;\n if (!isSelectable) return;\n if (isMultiple) {\n const current = [...selectedValues];\n if (selectedValues.has(itemValue)) {\n commit(current.filter((v) => v !== itemValue));\n } else {\n commit([...current, itemValue]);\n }\n } else {\n if (selectedValues.has(itemValue)) {\n commit([]);\n } else {\n commit([itemValue]);\n }\n }\n },\n [disabled, isSelectable, isMultiple, selectedValues, commit],\n );\n\n const handleItemFocus = useCallback((value: string) => {\n setFocusedValue(value);\n }, []);\n\n const handleItemKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>, itemValue: string) => {\n if (!isSelectable) return;\n const currentIndex = enabledItemValues.indexOf(itemValue);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = enabledItemValues[currentIndex + 1];\n if (next !== undefined) focusItem(next);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = enabledItemValues[currentIndex - 1];\n if (prev !== undefined) focusItem(prev);\n break;\n }\n case 'Home': {\n e.preventDefault();\n const first = enabledItemValues[0];\n if (first !== undefined) focusItem(first);\n break;\n }\n case 'End': {\n e.preventDefault();\n const last = enabledItemValues[enabledItemValues.length - 1];\n if (last !== undefined) focusItem(last);\n break;\n }\n case ' ':\n case 'Enter': {\n e.preventDefault();\n handleItemSelect(itemValue);\n break;\n }\n }\n },\n [isSelectable, enabledItemValues, focusItem, handleItemSelect],\n );\n\n const ctxValue: ListContextValue = {\n selection,\n selectedValues,\n focusedValue,\n disabled,\n enabledItemValues,\n onItemSelect: handleItemSelect,\n onItemFocus: handleItemFocus,\n onItemKeyDown: handleItemKeyDown,\n registerItemRef,\n divider,\n };\n\n const classes = listVariants({\n divider,\n density,\n ordered: as === 'ol',\n className,\n });\n\n const rootRef = useRef<HTMLElement>(null);\n\n const agentHandle = useMemo<ListHandle>(\n () => ({\n getSelection: () => Array.from(selectedValues),\n setSelection: (ids: string[]) => {\n if (!isSelectable) return;\n commit(isMultiple ? ids : ids.slice(0, 1));\n },\n clearSelection: () => {\n if (!isSelectable) return;\n commit([]);\n },\n }),\n [selectedValues, isSelectable, isMultiple, commit],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(listAgent, agentHandle, props.id);\n\n if (isSelectable) {\n if (import.meta.env.DEV && !ariaLabel && !props['aria-labelledby']) {\n console.warn(\n 'List: a selectable list (role=\"listbox\") should have an accessible name. ' +\n 'Pass aria-label or aria-labelledby to satisfy WCAG 4.1.2.',\n );\n }\n const resolvedAriaLabel = ariaLabel ?? t('list.label', 'List');\n return (\n <ListContext.Provider value={ctxValue}>\n <div\n ref={rootRef as Ref<HTMLDivElement>}\n role=\"listbox\"\n aria-label={resolvedAriaLabel}\n aria-multiselectable={isMultiple ? true : undefined}\n aria-disabled={disabled ? true : undefined}\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...props}\n >\n {children}\n </div>\n </ListContext.Provider>\n );\n }\n\n if (as === 'ol') {\n return (\n <ListContext.Provider value={ctxValue}>\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- Safari strips the implicit list role on <ol>/<ul> with list-style:none; this guard puts it back in the accessibility tree */}\n <ol\n ref={rootRef as Ref<HTMLOListElement>}\n start={start}\n role=\"list\"\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...(props as HTMLAttributes<HTMLOListElement>)}\n >\n {children}\n </ol>\n </ListContext.Provider>\n );\n }\n\n return (\n <ListContext.Provider value={ctxValue}>\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- Safari strips the implicit list role on <ol>/<ul> with list-style:none; this guard puts it back in the accessibility tree */}\n <ul\n ref={rootRef as Ref<HTMLUListElement>}\n role=\"list\"\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...(props as HTMLAttributes<HTMLUListElement>)}\n >\n {children}\n </ul>\n </ListContext.Provider>\n );\n },\n);\nListRoot.displayName = 'List';\n\n/* ------------------------------------------------------------------ */\n/* ListItem */\n/* ------------------------------------------------------------------ */\n\nconst ListItem = forwardRef<HTMLElement, ListItemProps>(\n (\n {\n value,\n leading,\n title,\n description,\n trailing,\n lineClamp,\n disabled: itemDisabled = false,\n className,\n onClick,\n onFocus,\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const {\n selection,\n selectedValues,\n focusedValue,\n disabled: groupDisabled,\n enabledItemValues,\n onItemSelect,\n onItemFocus,\n onItemKeyDown,\n registerItemRef,\n divider,\n } = useContext(ListContext);\n\n const isSelectable = selection !== 'none';\n const isDisabled = groupDisabled || itemDisabled;\n const isSelected = value !== undefined ? selectedValues.has(value) : false;\n const isFocused = value !== undefined && focusedValue === value;\n const isFirstEnabled =\n value !== undefined && enabledItemValues[0] === value;\n const tabIndex = isSelectable\n ? focusedValue !== null\n ? isFocused && !isDisabled\n ? 0\n : -1\n : isFirstEnabled && !isDisabled\n ? 0\n : -1\n : undefined;\n\n const descRef = useRef<HTMLSpanElement>(null);\n useLayoutEffect(() => {\n const el = descRef.current;\n if (!el) return;\n if (lineClamp != null) {\n el.style.setProperty('--list-item-clamp', String(lineClamp));\n } else {\n el.style.removeProperty('--list-item-clamp');\n }\n }, [lineClamp]);\n\n const internalRef = useCallback(\n (el: HTMLElement | null) => {\n if (value) registerItemRef(value, el);\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }\n },\n [value, registerItemRef, ref],\n );\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n if (isSelectable && value && !isDisabled) {\n onItemSelect(value);\n }\n (onClick as React.MouseEventHandler<HTMLElement> | undefined)?.(e);\n },\n [isSelectable, value, isDisabled, onItemSelect, onClick],\n );\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n if (value) onItemFocus(value);\n (onFocus as React.FocusEventHandler<HTMLElement> | undefined)?.(e);\n },\n [value, onItemFocus, onFocus],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n if (value) onItemKeyDown(e, value);\n (onKeyDown as React.KeyboardEventHandler<HTMLElement> | undefined)?.(e);\n },\n [value, onItemKeyDown, onKeyDown],\n );\n\n const itemClasses = listItemVariants({\n divider,\n interactive: isSelectable,\n selected: isSelected,\n disabled: isDisabled,\n className,\n });\n\n const content = (\n <>\n {leading && (\n <span className=\"ds:shrink-0 ds:flex ds:items-center ds:justify-center\">\n {leading}\n </span>\n )}\n <div className=\"ds:flex-1 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-0\">\n <span className=\"ds:text-[color:var(--foreground)] ds:text-[length:var(--font-size-sm)] ds:font-medium ds:leading-[var(--line-height-base)] ds:[overflow-wrap:anywhere]\">\n {title}\n </span>\n {description && (\n <span\n ref={descRef}\n className={[\n 'ds:text-[color:var(--muted-foreground)] ds:text-[length:var(--font-size-xs)] ds:leading-[var(--line-height-base)]',\n lineClamp != null\n ? 'ds:[overflow:hidden] ds:[display:-webkit-box] ds:[-webkit-box-orient:vertical] ds:[-webkit-line-clamp:var(--list-item-clamp)]'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {description}\n </span>\n )}\n </div>\n {trailing && (\n <span className=\"ds:shrink-0 ds:flex ds:items-center ds:justify-center\">\n {trailing}\n </span>\n )}\n </>\n );\n\n if (isSelectable) {\n return (\n <div\n ref={internalRef as React.Ref<HTMLDivElement>}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled ? true : undefined}\n tabIndex={tabIndex}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={itemClasses}\n data-item-id={value}\n {...props}\n >\n {content}\n </div>\n );\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- non-interactive list items still surface click/keyboard handlers when selection mode is enabled (handlers no-op when selection==='none')\n <li\n ref={internalRef as React.Ref<HTMLLIElement>}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={itemClasses}\n data-item-id={value}\n {...props}\n >\n {/* Inner flex wrapper keeps <li> as display:list-item so ::marker renders */}\n <div className=\"ds:flex ds:items-center ds:gap-x-[var(--spacing-sm)]\">\n {content}\n </div>\n </li>\n );\n },\n);\nListItem.displayName = 'List.Item';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const List = Object.assign(ListRoot, {\n Root: ListRoot,\n Item: ListItem,\n});\n\nexport type { ListContextValue };\n"],"names":["listAgent","handle","args","ListContext","createContext","listVariants","cva","listItemVariants","collectItemInfo","children","items","Children","child","isValidElement","props","ListRoot","forwardRef","as","start","divider","density","selection","controlledValue","defaultValue","onValueChange","disabled","className","ariaLabel","ref","t","useTranslation","isSelectable","isMultiple","controlledArray","useMemo","initialArray","internalArray","setInternalArray","useControllableState","selectedValues","allItemInfo","enabledItemValues","i","focusedValue","setFocusedValue","useState","itemRefs","useRef","registerItemRef","useCallback","value","el","focusItem","_a","commit","next","handleItemSelect","itemValue","current","v","handleItemFocus","handleItemKeyDown","currentIndex","prev","first","last","ctxValue","classes","rootRef","agentHandle","ids","useImperativeHandle","useAgentRegistration","resolvedAriaLabel","jsx","ListItem","leading","title","description","trailing","lineClamp","itemDisabled","onClick","onFocus","onKeyDown","groupDisabled","onItemSelect","onItemFocus","onItemKeyDown","useContext","isDisabled","isSelected","isFocused","isFirstEnabled","tabIndex","descRef","useLayoutEffect","internalRef","handleClick","e","handleFocus","handleKeyDown","itemClasses","content","jsxs","Fragment","List"],"mappings":";;;;;;AAYO,MAAMA,KAAsC;AAAA,EACjD,IAAI;AAAA,EACJ,cAAc,CAAC,iBAAiB,iBAAiB;AAAA,EACjD,OAAO;AAAA,IACL,WAAW;AAAA,MACT,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,aAAA;AAAA,IAAa;AAAA,EACxC;AAAA,EAEF,SAAS;AAAA,IACP,eAAe;AAAA,MACb,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,GAAQC,MAA4B;AAC3C,QAAAD,EAAO,aAAaC,EAAK,GAAG;AAAA,MAC9B;AAAA,IAAA;AAAA,IAEF,iBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACD,MAAW;AAClB,QAAAA,EAAO,eAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,IAEf,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GCrBME,IAAcC,GAAgC;AAAA,EAClD,WAAW;AAAA,EACX,oCAAoB,IAAA;AAAA,EACpB,cAAc;AAAA,EACd,UAAU;AAAA,EACV,mBAAmB,CAAA;AAAA,EACnB,cAAc,MAAM;AAAA,EAAC;AAAA,EACrB,aAAa,MAAM;AAAA,EAAC;AAAA,EACpB,eAAe,MAAM;AAAA,EAAC;AAAA,EACtB,iBAAiB,MAAM;AAAA,EAAC;AAAA,EACxB,SAAS;AACX,CAAC,GAMKC,KAAeC,EAAI,qCAAqC;AAAA,EAC5D,UAAU;AAAA,IACR,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UACE;AAAA,IAAA;AAAA,IAEJ,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEb,CAAC,GAEKC,KAAmBD;AAAA,EACvB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,SACE;AAAA,QACF,UACE;AAAA,MAAA;AAAA,MAEJ,aAAa;AAAA;AAAA,QAEX,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA;AAAA,QAEV,OAAO;AAAA,MAAA;AAAA,MAET,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,kBAAkB;AAAA,MAChB;AAAA,QACE,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,QACV,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,IAAA;AAAA,EACZ;AAEJ;AA6CA,SAASE,GACPC,GAC6C;AAC7C,QAAMC,IAAqD,CAAA;AAC3D,SAAAC,GAAS,QAAQF,GAAU,CAACG,MAAU;AACpC,QAAI,CAACC,GAAeD,CAAK,EAAG;AAC5B,UAAME,IAAQF,EAAM;AACpB,IAAI,OAAOE,EAAM,SAAU,YACzBJ,EAAM,KAAK,EAAE,OAAOI,EAAM,OAAO,UAAU,EAAQA,EAAM,UAAW;AAAA,EAExE,CAAC,GACMJ;AACT;AAMA,MAAMK,IAAWC;AAAA,EACf,CACE;AAAA,IACE,IAAAC,IAAK;AAAA,IACL,OAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,SAAAC,IAAU;AAAA,IACV,WAAAC,IAAY;AAAA,IACZ,OAAOC;AAAA,IACP,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,WAAAC;AAAA,IACA,UAAAjB;AAAA,IACA,cAAckB;AAAA,IACd,GAAGb;AAAA,EAAA,GAELc,MACG;AACH,UAAM,EAAE,GAAAC,EAAA,IAAMC,GAAA,GACRC,IAAeV,MAAc,QAC7BW,IAAaX,MAAc,YAM3BY,IAAkBC,EAA8B,MAAM;AAC1D,UAAIZ,MAAoB;AACxB,eAAO,MAAM,QAAQA,CAAe,IAAIA,IAAkB,CAACA,CAAe;AAAA,IAC5E,GAAG,CAACA,CAAe,CAAC,GAEda,IAAeD,EAAkB,MACjCX,MAAiB,SAAkB,CAAA,IAChC,MAAM,QAAQA,CAAY,IAAIA,IAAe,CAACA,CAAY,GAGhE,CAAA,CAAE,GAEC,CAACa,GAAeC,CAAgB,IAAIC,GAA+B;AAAA,MACvE,OAAOL;AAAA,MACP,cAAcE;AAAA,IAAA,CACf,GAEKI,IAAiBL;AAAA,MACrB,MAAM,IAAI,IAAIE,KAAiB,EAAE;AAAA,MACjC,CAACA,CAAa;AAAA,IAAA,GAGVI,IAAcN,EAAQ,MAAM1B,GAAgBC,CAAQ,GAAG,CAACA,CAAQ,CAAC,GACjEgC,IAAoBP;AAAA,MACxB,MACEM,EAAY,OAAO,CAACE,MAAM,CAACA,EAAE,YAAY,CAACjB,CAAQ,EAAE,IAAI,CAACiB,MAAMA,EAAE,KAAK;AAAA,MACxE,CAACF,GAAaf,CAAQ;AAAA,IAAA,GAGlB,CAACkB,GAAcC,CAAe,IAAIC,EAAwB,IAAI,GAE9DC,IAAWC,EAAiC,oBAAI,KAAK,GAErDC,IAAkBC;AAAA,MACtB,CAACC,GAAeC,MAA2B;AACzC,QAAIA,IACFL,EAAS,QAAQ,IAAII,GAAOC,CAAE,IAE9BL,EAAS,QAAQ,OAAOI,CAAK;AAAA,MAEjC;AAAA,MACA,CAAA;AAAA,IAAC,GAGGE,IAAYH,EAAY,CAACC,MAAkB;AAC/C,MAAAN,EAAgBM,CAAK,GACrB,sBAAsB,MAAM;;AAC1B,SAAAG,IAAAP,EAAS,QAAQ,IAAII,CAAK,MAA1B,QAAAG,EAA6B;AAAA,MAC/B,CAAC;AAAA,IACH,GAAG,CAAA,CAAE,GAECC,IAASL;AAAA,MACb,CAACM,MAAmB;AAClB,QAAAlB,EAAiBkB,CAAI,GACjBvB,IACFR,KAAA,QAAAA,EAAgB+B,KAEhB/B,KAAA,QAAAA,EAAgB+B,EAAK,CAAC,KAAK;AAAA,MAE/B;AAAA,MACA,CAAClB,GAAkBL,GAAYR,CAAa;AAAA,IAAA,GAGxCgC,IAAmBP;AAAA,MACvB,CAACQ,MAAsB;AACrB,YAAI,CAAAhC,KACCM;AACL,cAAIC,GAAY;AACd,kBAAM0B,IAAU,CAAC,GAAGnB,CAAc;AAClC,YAAIA,EAAe,IAAIkB,CAAS,IAC9BH,EAAOI,EAAQ,OAAO,CAACC,MAAMA,MAAMF,CAAS,CAAC,IAE7CH,EAAO,CAAC,GAAGI,GAASD,CAAS,CAAC;AAAA,UAElC;AACE,YAAIlB,EAAe,IAAIkB,CAAS,IAC9BH,EAAO,CAAA,CAAE,IAETA,EAAO,CAACG,CAAS,CAAC;AAAA,MAGxB;AAAA,MACA,CAAChC,GAAUM,GAAcC,GAAYO,GAAgBe,CAAM;AAAA,IAAA,GAGvDM,IAAkBX,EAAY,CAACC,MAAkB;AACrD,MAAAN,EAAgBM,CAAK;AAAA,IACvB,GAAG,CAAA,CAAE,GAECW,IAAoBZ;AAAA,MACxB,CAAC,GAA+BQ,MAAsB;AACpD,YAAI,CAAC1B,EAAc;AACnB,cAAM+B,IAAerB,EAAkB,QAAQgB,CAAS;AAExD,gBAAQ,EAAE,KAAA;AAAA,UACR,KAAK,aAAa;AAChB,cAAE,eAAA;AACF,kBAAMF,IAAOd,EAAkBqB,IAAe,CAAC;AAC/C,YAAIP,MAAS,UAAWH,EAAUG,CAAI;AACtC;AAAA,UACF;AAAA,UACA,KAAK,WAAW;AACd,cAAE,eAAA;AACF,kBAAMQ,IAAOtB,EAAkBqB,IAAe,CAAC;AAC/C,YAAIC,MAAS,UAAWX,EAAUW,CAAI;AACtC;AAAA,UACF;AAAA,UACA,KAAK,QAAQ;AACX,cAAE,eAAA;AACF,kBAAMC,IAAQvB,EAAkB,CAAC;AACjC,YAAIuB,MAAU,UAAWZ,EAAUY,CAAK;AACxC;AAAA,UACF;AAAA,UACA,KAAK,OAAO;AACV,cAAE,eAAA;AACF,kBAAMC,IAAOxB,EAAkBA,EAAkB,SAAS,CAAC;AAC3D,YAAIwB,MAAS,UAAWb,EAAUa,CAAI;AACtC;AAAA,UACF;AAAA,UACA,KAAK;AAAA,UACL,KAAK,SAAS;AACZ,cAAE,eAAA,GACFT,EAAiBC,CAAS;AAC1B;AAAA,UACF;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA,CAAC1B,GAAcU,GAAmBW,GAAWI,CAAgB;AAAA,IAAA,GAGzDU,IAA6B;AAAA,MACjC,WAAA7C;AAAA,MACA,gBAAAkB;AAAA,MACA,cAAAI;AAAA,MACA,UAAAlB;AAAA,MACA,mBAAAgB;AAAA,MACA,cAAce;AAAA,MACd,aAAaI;AAAA,MACb,eAAeC;AAAA,MACf,iBAAAb;AAAA,MACA,SAAA7B;AAAA,IAAA,GAGIgD,IAAU9D,GAAa;AAAA,MAC3B,SAAAc;AAAA,MACA,SAAAC;AAAA,MACA,SAASH,MAAO;AAAA,MAChB,WAAAS;AAAA,IAAA,CACD,GAEK0C,IAAUrB,EAAoB,IAAI,GAElCsB,IAAcnC;AAAA,MAClB,OAAO;AAAA,QACL,cAAc,MAAM,MAAM,KAAKK,CAAc;AAAA,QAC7C,cAAc,CAAC+B,MAAkB;AAC/B,UAAKvC,KACLuB,EAAOtB,IAAasC,IAAMA,EAAI,MAAM,GAAG,CAAC,CAAC;AAAA,QAC3C;AAAA,QACA,gBAAgB,MAAM;AACpB,UAAKvC,KACLuB,EAAO,CAAA,CAAE;AAAA,QACX;AAAA,MAAA;AAAA,MAEF,CAACf,GAAgBR,GAAcC,GAAYsB,CAAM;AAAA,IAAA;AAKnD,QAHAiB,EAAoB3C,GAAK,MAAMyC,GAAa,CAACA,CAAW,CAAC,GACzDG,GAAqBxE,IAAWqE,GAAavD,EAAM,EAAE,GAEjDiB,GAAc;AAOhB,YAAM0C,IAAoB9C,KAAaE,EAAE,cAAc,MAAM;AAC7D,+BACG1B,EAAY,UAAZ,EAAqB,OAAO+D,GAC3B,UAAA,gBAAAQ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKN;AAAA,UACL,MAAK;AAAA,UACL,cAAYK;AAAA,UACZ,wBAAsBzC,IAAa,KAAO;AAAA,UAC1C,iBAAeP,IAAW,KAAO;AAAA,UACjC,WAAW0C;AAAA,UACX,kBAAe;AAAA,UACf,qBAAmBrD,EAAM;AAAA,UACxB,GAAGA;AAAA,UAEH,UAAAL;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,IAEJ;AAEA,WAAIQ,MAAO,yBAENd,EAAY,UAAZ,EAAqB,OAAO+D,GAE3B,UAAA,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKN;AAAA,QACL,OAAAlD;AAAA,QACA,MAAK;AAAA,QACL,WAAWiD;AAAA,QACX,kBAAe;AAAA,QACf,qBAAmBrD,EAAM;AAAA,QACxB,GAAIA;AAAA,QAEJ,UAAAL;AAAA,MAAA;AAAA,IAAA,GAEL,sBAKDN,EAAY,UAAZ,EAAqB,OAAO+D,GAE3B,UAAA,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKN;AAAA,QACL,MAAK;AAAA,QACL,WAAWD;AAAA,QACX,kBAAe;AAAA,QACf,qBAAmBrD,EAAM;AAAA,QACxB,GAAIA;AAAA,QAEJ,UAAAL;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,EAEJ;AACF;AACAM,EAAS,cAAc;AAMvB,MAAM4D,IAAW3D;AAAA,EACf,CACE;AAAA,IACE,OAAAkC;AAAA,IACA,SAAA0B;AAAA,IACA,OAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAUC,IAAe;AAAA,IACzB,WAAAvD;AAAA,IACA,SAAAwD;AAAA,IACA,SAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGtE;AAAA,EAAA,GAELc,MACG;AACH,UAAM;AAAA,MACJ,WAAAP;AAAA,MACA,gBAAAkB;AAAA,MACA,cAAAI;AAAA,MACA,UAAU0C;AAAA,MACV,mBAAA5C;AAAA,MACA,cAAA6C;AAAA,MACA,aAAAC;AAAA,MACA,eAAAC;AAAA,MACA,iBAAAxC;AAAA,MACA,SAAA7B;AAAA,IAAA,IACEsE,GAAWtF,CAAW,GAEpB4B,IAAeV,MAAc,QAC7BqE,IAAaL,KAAiBJ,GAC9BU,IAAazC,MAAU,SAAYX,EAAe,IAAIW,CAAK,IAAI,IAC/D0C,IAAY1C,MAAU,UAAaP,MAAiBO,GACpD2C,IACJ3C,MAAU,UAAaT,EAAkB,CAAC,MAAMS,GAC5C4C,IAAW/D,IACbY,MAAiB,OACfiD,KAAa,CAACF,IACZ,IACA,KACFG,KAAkB,CAACH,IACjB,IACA,KACJ,QAEEK,IAAUhD,EAAwB,IAAI;AAC5C,IAAAiD,GAAgB,MAAM;AACpB,YAAM7C,IAAK4C,EAAQ;AACnB,MAAK5C,MACD6B,KAAa,OACf7B,EAAG,MAAM,YAAY,qBAAqB,OAAO6B,CAAS,CAAC,IAE3D7B,EAAG,MAAM,eAAe,mBAAmB;AAAA,IAE/C,GAAG,CAAC6B,CAAS,CAAC;AAEd,UAAMiB,IAAchD;AAAA,MAClB,CAACE,MAA2B;AAC1B,QAAID,KAAOF,EAAgBE,GAAOC,CAAE,GAChC,OAAOvB,KAAQ,aACjBA,EAAIuB,CAAE,IACGvB,MACRA,EAAmD,UAAUuB;AAAA,MAElE;AAAA,MACA,CAACD,GAAOF,GAAiBpB,CAAG;AAAA,IAAA,GAGxBsE,IAAcjD;AAAA,MAClB,CAACkD,MAAqC;AACpC,QAAIpE,KAAgBmB,KAAS,CAACwC,KAC5BJ,EAAapC,CAAK,GAEnBgC,KAAA,QAAAA,EAA+DiB;AAAA,MAClE;AAAA,MACA,CAACpE,GAAcmB,GAAOwC,GAAYJ,GAAcJ,CAAO;AAAA,IAAA,GAGnDkB,IAAcnD;AAAA,MAClB,CAACkD,MAAqC;AACpC,QAAIjD,OAAmBA,CAAK,GAC3BiC,KAAA,QAAAA,EAA+DgB;AAAA,MAClE;AAAA,MACA,CAACjD,GAAOqC,GAAaJ,CAAO;AAAA,IAAA,GAGxBkB,IAAgBpD;AAAA,MACpB,CAACkD,MAAkC;AACjC,QAAIjD,KAAOsC,EAAcW,GAAGjD,CAAK,GAChCkC,KAAA,QAAAA,EAAoEe;AAAA,MACvE;AAAA,MACA,CAACjD,GAAOsC,GAAeJ,CAAS;AAAA,IAAA,GAG5BkB,IAAc/F,GAAiB;AAAA,MACnC,SAAAY;AAAA,MACA,aAAaY;AAAA,MACb,UAAU4D;AAAA,MACV,UAAUD;AAAA,MACV,WAAAhE;AAAA,IAAA,CACD,GAEK6E,IACJ,gBAAAC,EAAAC,GAAA,EACG,UAAA;AAAA,MAAA7B,uBACE,QAAA,EAAK,WAAU,yDACb,UAAAA,GACH;AAAA,MAEF,gBAAA4B,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,0BAAC,QAAA,EAAK,WAAU,0JACb,UAAA3B,GACH;AAAA,QACCC,KACC,gBAAAJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKqB;AAAA,YACL,WAAW;AAAA,cACT;AAAA,cACAf,KAAa,OACT,kIACA;AAAA,YAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YAEV,UAAAF;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,GAEJ;AAAA,MACCC,uBACE,QAAA,EAAK,WAAU,yDACb,UAAAA,GACH;AAAA,IAAA,GAEJ;AAGF,WAAIhD,IAEA,gBAAA2C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKuB;AAAA,QACL,MAAK;AAAA,QACL,iBAAeN;AAAA,QACf,iBAAeD,IAAa,KAAO;AAAA,QACnC,UAAAI;AAAA,QACA,SAASI;AAAA,QACT,SAASE;AAAA,QACT,WAAWC;AAAA,QACX,WAAWC;AAAA,QACX,gBAAcpD;AAAA,QACb,GAAGpC;AAAA,QAEH,UAAAyF;AAAA,MAAA;AAAA,IAAA;AAAA;AAAA,MAOL,gBAAA7B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKuB;AAAA,UACL,SAASC;AAAA,UACT,SAASE;AAAA,UACT,WAAWC;AAAA,UACX,WAAWC;AAAA,UACX,gBAAcpD;AAAA,UACb,GAAGpC;AAAA,UAGJ,4BAAC,OAAA,EAAI,WAAU,wDACZ,UAAAyF,GACH;AAAA,QAAA;AAAA,MAAA;AAAA;AAAA,EAGN;AACF;AACA5B,EAAS,cAAc;AAMhB,MAAM+B,KAAO,OAAO,OAAO3F,GAAU;AAAA,EAC1C,MAAMA;AAAA,EACN,MAAM4D;AACR,CAAC;"}
|
|
1
|
+
{"version":3,"file":"list-BdvDctBz.js","sources":["../../src/components/list/list.agent.ts","../../src/components/list/list.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — List. */\n/* */\n/* The agent surface is only meaningful for selectable lists (`selection` */\n/* prop set to `single` or `multiple`). Presentational lists still emit */\n/* the root + item DOM hooks so the registry can address them, but the */\n/* state and actions are no-ops when selection is `none`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ListHandle } from './list';\n\nexport const listAgent: AgentAdapter<ListHandle> = {\n id: 'list',\n capabilities: ['select_single', 'select_multiple'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.list.state.selection',\n description:\n 'Ids of currently-selected list items. Empty array when none selected or list is presentational.',\n read: (handle) => handle.getSelection(),\n },\n },\n actions: {\n set_selection: {\n safety: 'read',\n argsType: '{ ids: string[] }',\n descriptionKey: 'ui.agent.list.actions.setSelection',\n description:\n 'Replace the current selection with the given item ids. No-op on presentational lists.',\n invoke: (handle, args: { ids: string[] }) => {\n handle.setSelection(args.ids);\n },\n },\n clear_selection: {\n safety: 'read',\n descriptionKey: 'ui.agent.list.actions.clearSelection',\n description: 'Deselect all items.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'list',\n description: 'Marks the List root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-item-id',\n description:\n 'Opaque item id; sourced from each ListItem `value` prop. Emitted only when `value` is set.',\n },\n },\n};\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { listAgent } from './list.agent';\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface ListContextValue {\n selection: 'none' | 'single' | 'multiple';\n selectedValues: Set<string>;\n focusedValue: string | null;\n disabled: boolean;\n enabledItemValues: string[];\n onItemSelect: (value: string) => void;\n onItemFocus: (value: string) => void;\n onItemKeyDown: (e: KeyboardEvent<HTMLElement>, value: string) => void;\n registerItemRef: (value: string, el: HTMLElement | null) => void;\n divider: 'spaced' | 'divided' | 'bordered';\n}\n\nconst ListContext = createContext<ListContextValue>({\n selection: 'none',\n selectedValues: new Set(),\n focusedValue: null,\n disabled: false,\n enabledItemValues: [],\n onItemSelect: () => {},\n onItemFocus: () => {},\n onItemKeyDown: () => {},\n registerItemRef: () => {},\n divider: 'spaced',\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nconst listVariants = cva('ds:flex ds:flex-col ds:p-0 ds:m-0', {\n variants: {\n divider: {\n spaced: '',\n divided: '',\n bordered:\n 'ds:border ds:border-[color:var(--border)] ds:rounded-[var(--radius-md)] ds:overflow-hidden',\n },\n density: {\n compact: 'ds:gap-[var(--spacing-xs)]',\n default: 'ds:gap-[var(--spacing-sm)]',\n relaxed: 'ds:gap-[var(--spacing-md)]',\n },\n ordered: {\n true: 'ds:list-decimal ds:ps-[var(--spacing-lg)]',\n false: 'ds:list-none',\n },\n },\n defaultVariants: {\n divider: 'spaced',\n density: 'default',\n ordered: false,\n },\n});\n\nconst listItemVariants = cva(\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n {\n variants: {\n divider: {\n spaced: '',\n divided:\n 'ds:[&:not(:last-child)]:[border-block-end:1px_solid_var(--border)]',\n bordered:\n 'ds:[&:not(:last-child)]:[border-block-end:1px_solid_var(--border)]',\n },\n interactive: {\n // flex lives on the outer <div role=\"option\"> so it doesn't suppress ::marker on <li>\n true: [\n 'ds:flex ds:items-center ds:gap-x-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)] ds:cursor-pointer ds:select-none',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n // no flex here — <li> keeps display:list-item so ::marker renders correctly\n false: '',\n },\n selected: {\n true: '',\n false: '',\n },\n disabled: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n interactive: true,\n selected: false,\n disabled: false,\n className: 'ds:hover:bg-[color:var(--muted)]/20',\n },\n {\n interactive: true,\n selected: true,\n className: 'ds:bg-[color:var(--primary)]/10',\n },\n {\n interactive: true,\n disabled: true,\n className: 'ds:opacity-50 ds:cursor-not-allowed ds:pointer-events-none',\n },\n ],\n defaultVariants: {\n divider: 'spaced',\n interactive: false,\n selected: false,\n disabled: false,\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/** Curated imperative handle for agent / external automation. */\nexport interface ListHandle {\n getSelection: () => string[];\n setSelection: (ids: string[]) => void;\n clearSelection: () => void;\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLElement> {\n as?: 'ul' | 'ol';\n start?: number;\n divider?: 'spaced' | 'divided' | 'bordered';\n density?: 'compact' | 'default' | 'relaxed';\n selection?: 'none' | 'single' | 'multiple';\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n disabled?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport interface ListItemProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n value?: string;\n leading?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n trailing?: ReactNode;\n lineClamp?: number;\n disabled?: boolean;\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction collectItemInfo(\n children: ReactNode,\n): Array<{ value: string; disabled: boolean }> {\n const items: Array<{ value: string; disabled: boolean }> = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n const props = child.props as { value?: unknown; disabled?: unknown };\n if (typeof props.value === 'string') {\n items.push({ value: props.value, disabled: Boolean(props.disabled) });\n }\n });\n return items;\n}\n\n/* ------------------------------------------------------------------ */\n/* ListRoot */\n/* ------------------------------------------------------------------ */\n\nconst ListRoot = forwardRef<ListHandle, ListProps>(\n (\n {\n as = 'ul',\n start,\n divider = 'spaced',\n density = 'default',\n selection = 'none',\n value: controlledValue,\n defaultValue,\n onValueChange,\n disabled = false,\n className,\n children,\n 'aria-label': ariaLabel,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const isSelectable = selection !== 'none';\n const isMultiple = selection === 'multiple';\n\n // Normalize the array of selected values onto the canonical `string[]`\n // shape that the rest of the component renders against. The hook owns\n // state in both modes; the consumer-facing `onValueChange` is invoked\n // with either a single string or the array, depending on `selection`.\n const controlledArray = useMemo<string[] | undefined>(() => {\n if (controlledValue === undefined) return undefined;\n return Array.isArray(controlledValue)\n ? controlledValue\n : [controlledValue];\n }, [controlledValue]);\n\n const initialArray = useMemo<string[]>(() => {\n if (defaultValue === undefined) return [];\n return Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n // Default value is read once at mount.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [internalArray, setInternalArray] = useControllableState<string[]>({\n value: controlledArray,\n defaultValue: initialArray,\n });\n\n const selectedValues = useMemo<Set<string>>(\n () => new Set(internalArray ?? []),\n [internalArray],\n );\n\n const allItemInfo = useMemo(() => collectItemInfo(children), [children]);\n const enabledItemValues = useMemo(\n () =>\n allItemInfo.filter((i) => !i.disabled && !disabled).map((i) => i.value),\n [allItemInfo, disabled],\n );\n\n const [focusedValue, setFocusedValue] = useState<string | null>(null);\n\n const itemRefs = useRef<Map<string, HTMLElement>>(new Map());\n\n const registerItemRef = useCallback(\n (value: string, el: HTMLElement | null) => {\n if (el) {\n itemRefs.current.set(value, el);\n } else {\n itemRefs.current.delete(value);\n }\n },\n [],\n );\n\n const focusItem = useCallback((value: string) => {\n setFocusedValue(value);\n requestAnimationFrame(() => {\n itemRefs.current.get(value)?.focus();\n });\n }, []);\n\n const commit = useCallback(\n (next: string[]) => {\n setInternalArray(next);\n if (isMultiple) {\n onValueChange?.(next);\n } else {\n onValueChange?.(next[0] ?? '');\n }\n },\n [setInternalArray, isMultiple, onValueChange],\n );\n\n const handleItemSelect = useCallback(\n (itemValue: string) => {\n if (disabled) return;\n if (!isSelectable) return;\n if (isMultiple) {\n const current = [...selectedValues];\n if (selectedValues.has(itemValue)) {\n commit(current.filter((v) => v !== itemValue));\n } else {\n commit([...current, itemValue]);\n }\n } else {\n if (selectedValues.has(itemValue)) {\n commit([]);\n } else {\n commit([itemValue]);\n }\n }\n },\n [disabled, isSelectable, isMultiple, selectedValues, commit],\n );\n\n const handleItemFocus = useCallback((value: string) => {\n setFocusedValue(value);\n }, []);\n\n const handleItemKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>, itemValue: string) => {\n if (!isSelectable) return;\n const currentIndex = enabledItemValues.indexOf(itemValue);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = enabledItemValues[currentIndex + 1];\n if (next !== undefined) focusItem(next);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = enabledItemValues[currentIndex - 1];\n if (prev !== undefined) focusItem(prev);\n break;\n }\n case 'Home': {\n e.preventDefault();\n const first = enabledItemValues[0];\n if (first !== undefined) focusItem(first);\n break;\n }\n case 'End': {\n e.preventDefault();\n const last = enabledItemValues[enabledItemValues.length - 1];\n if (last !== undefined) focusItem(last);\n break;\n }\n case ' ':\n case 'Enter': {\n e.preventDefault();\n handleItemSelect(itemValue);\n break;\n }\n }\n },\n [isSelectable, enabledItemValues, focusItem, handleItemSelect],\n );\n\n const ctxValue: ListContextValue = {\n selection,\n selectedValues,\n focusedValue,\n disabled,\n enabledItemValues,\n onItemSelect: handleItemSelect,\n onItemFocus: handleItemFocus,\n onItemKeyDown: handleItemKeyDown,\n registerItemRef,\n divider,\n };\n\n const classes = listVariants({\n divider,\n density,\n ordered: as === 'ol',\n className,\n });\n\n const rootRef = useRef<HTMLElement>(null);\n\n const agentHandle = useMemo<ListHandle>(\n () => ({\n getSelection: () => Array.from(selectedValues),\n setSelection: (ids: string[]) => {\n if (!isSelectable) return;\n commit(isMultiple ? ids : ids.slice(0, 1));\n },\n clearSelection: () => {\n if (!isSelectable) return;\n commit([]);\n },\n }),\n [selectedValues, isSelectable, isMultiple, commit],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(listAgent, agentHandle, props.id);\n\n if (isSelectable) {\n if (import.meta.env.DEV && !ariaLabel && !props['aria-labelledby']) {\n console.warn(\n 'List: a selectable list (role=\"listbox\") should have an accessible name. ' +\n 'Pass aria-label or aria-labelledby to satisfy WCAG 4.1.2.',\n );\n }\n const resolvedAriaLabel = ariaLabel ?? t('list.label', 'List');\n return (\n <ListContext.Provider value={ctxValue}>\n <div\n ref={rootRef as Ref<HTMLDivElement>}\n role=\"listbox\"\n aria-label={resolvedAriaLabel}\n aria-multiselectable={isMultiple ? true : undefined}\n aria-disabled={disabled ? true : undefined}\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...props}\n >\n {children}\n </div>\n </ListContext.Provider>\n );\n }\n\n if (as === 'ol') {\n return (\n <ListContext.Provider value={ctxValue}>\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- Safari strips the implicit list role on <ol>/<ul> with list-style:none; this guard puts it back in the accessibility tree */}\n <ol\n ref={rootRef as Ref<HTMLOListElement>}\n start={start}\n role=\"list\"\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...(props as HTMLAttributes<HTMLOListElement>)}\n >\n {children}\n </ol>\n </ListContext.Provider>\n );\n }\n\n return (\n <ListContext.Provider value={ctxValue}>\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- Safari strips the implicit list role on <ol>/<ul> with list-style:none; this guard puts it back in the accessibility tree */}\n <ul\n ref={rootRef as Ref<HTMLUListElement>}\n role=\"list\"\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...(props as HTMLAttributes<HTMLUListElement>)}\n >\n {children}\n </ul>\n </ListContext.Provider>\n );\n },\n);\nListRoot.displayName = 'List';\n\n/* ------------------------------------------------------------------ */\n/* ListItem */\n/* ------------------------------------------------------------------ */\n\nconst ListItem = forwardRef<HTMLElement, ListItemProps>(\n (\n {\n value,\n leading,\n title,\n description,\n trailing,\n lineClamp,\n disabled: itemDisabled = false,\n className,\n onClick,\n onFocus,\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const {\n selection,\n selectedValues,\n focusedValue,\n disabled: groupDisabled,\n enabledItemValues,\n onItemSelect,\n onItemFocus,\n onItemKeyDown,\n registerItemRef,\n divider,\n } = useContext(ListContext);\n\n const isSelectable = selection !== 'none';\n const isDisabled = groupDisabled || itemDisabled;\n const isSelected = value !== undefined ? selectedValues.has(value) : false;\n const isFocused = value !== undefined && focusedValue === value;\n const isFirstEnabled =\n value !== undefined && enabledItemValues[0] === value;\n const tabIndex = isSelectable\n ? focusedValue !== null\n ? isFocused && !isDisabled\n ? 0\n : -1\n : isFirstEnabled && !isDisabled\n ? 0\n : -1\n : undefined;\n\n const descRef = useRef<HTMLSpanElement>(null);\n useLayoutEffect(() => {\n const el = descRef.current;\n if (!el) return;\n if (lineClamp != null) {\n el.style.setProperty('--list-item-clamp', String(lineClamp));\n } else {\n el.style.removeProperty('--list-item-clamp');\n }\n }, [lineClamp]);\n\n const internalRef = useCallback(\n (el: HTMLElement | null) => {\n if (value) registerItemRef(value, el);\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }\n },\n [value, registerItemRef, ref],\n );\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n if (isSelectable && value && !isDisabled) {\n onItemSelect(value);\n }\n (onClick as React.MouseEventHandler<HTMLElement> | undefined)?.(e);\n },\n [isSelectable, value, isDisabled, onItemSelect, onClick],\n );\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n if (value) onItemFocus(value);\n (onFocus as React.FocusEventHandler<HTMLElement> | undefined)?.(e);\n },\n [value, onItemFocus, onFocus],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n if (value) onItemKeyDown(e, value);\n (onKeyDown as React.KeyboardEventHandler<HTMLElement> | undefined)?.(e);\n },\n [value, onItemKeyDown, onKeyDown],\n );\n\n const itemClasses = listItemVariants({\n divider,\n interactive: isSelectable,\n selected: isSelected,\n disabled: isDisabled,\n className,\n });\n\n const content = (\n <>\n {leading && (\n <span className=\"ds:shrink-0 ds:flex ds:items-center ds:justify-center\">\n {leading}\n </span>\n )}\n <div className=\"ds:flex-1 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-0\">\n <span className=\"ds:text-[color:var(--foreground)] ds:text-[length:var(--font-size-sm)] ds:font-medium ds:leading-[var(--line-height-base)] ds:[overflow-wrap:anywhere]\">\n {title}\n </span>\n {description && (\n <span\n ref={descRef}\n className={[\n 'ds:text-[color:var(--muted-foreground)] ds:text-[length:var(--font-size-xs)] ds:leading-[var(--line-height-base)]',\n lineClamp != null\n ? 'ds:[overflow:hidden] ds:[display:-webkit-box] ds:[-webkit-box-orient:vertical] ds:[-webkit-line-clamp:var(--list-item-clamp)]'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {description}\n </span>\n )}\n </div>\n {trailing && (\n <span className=\"ds:shrink-0 ds:flex ds:items-center ds:justify-center\">\n {trailing}\n </span>\n )}\n </>\n );\n\n if (isSelectable) {\n return (\n <div\n ref={internalRef as React.Ref<HTMLDivElement>}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled ? true : undefined}\n tabIndex={tabIndex}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={itemClasses}\n data-item-id={value}\n {...props}\n >\n {content}\n </div>\n );\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- non-interactive list items still surface click/keyboard handlers when selection mode is enabled (handlers no-op when selection==='none')\n <li\n ref={internalRef as React.Ref<HTMLLIElement>}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={itemClasses}\n data-item-id={value}\n {...props}\n >\n {/* Inner flex wrapper keeps <li> as display:list-item so ::marker renders */}\n <div className=\"ds:flex ds:items-center ds:gap-x-[var(--spacing-sm)]\">\n {content}\n </div>\n </li>\n );\n },\n);\nListItem.displayName = 'List.Item';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const List = Object.assign(ListRoot, {\n Root: ListRoot,\n Item: ListItem,\n});\n\nexport type { ListContextValue };\n"],"names":["listAgent","handle","args","ListContext","createContext","listVariants","cva","listItemVariants","collectItemInfo","children","items","Children","child","isValidElement","props","ListRoot","forwardRef","as","start","divider","density","selection","controlledValue","defaultValue","onValueChange","disabled","className","ariaLabel","ref","t","useTranslation","isSelectable","isMultiple","controlledArray","useMemo","initialArray","internalArray","setInternalArray","useControllableState","selectedValues","allItemInfo","enabledItemValues","i","focusedValue","setFocusedValue","useState","itemRefs","useRef","registerItemRef","useCallback","value","el","focusItem","_a","commit","next","handleItemSelect","itemValue","current","v","handleItemFocus","handleItemKeyDown","currentIndex","prev","first","last","ctxValue","classes","rootRef","agentHandle","ids","useImperativeHandle","useAgentRegistration","resolvedAriaLabel","jsx","ListItem","leading","title","description","trailing","lineClamp","itemDisabled","onClick","onFocus","onKeyDown","groupDisabled","onItemSelect","onItemFocus","onItemKeyDown","useContext","isDisabled","isSelected","isFocused","isFirstEnabled","tabIndex","descRef","useLayoutEffect","internalRef","handleClick","e","handleFocus","handleKeyDown","itemClasses","content","jsxs","Fragment","List"],"mappings":"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"}
|
package/dist/agent-catalog.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker.d.ts","sourceRoot":"","sources":["../../../src/components/date-range-picker/date-range-picker.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiB7D,OAAO,EAIL,eAAe,EAIhB,MAAM,YAAY,CAAC;AAGpB,OAAO,kDAAkD,CAAC;AAM1D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,EAAE,CAAC,EAAE,IAAI,CAAC;CACX;AAED,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,QAAQ,EAAE,MAAM,cAAc,CAAC;IAC/B,kCAAkC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,gCAAgC;IAChC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,uCAAuC;IACvC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,wCAAwC;IACxC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,YAAY,CAAC,OAAO,eAAe,CAAC,EACpC,MAAM,CACP;IACC,kCAAkC;IAClC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,oCAAoC;IACpC,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,+BAA+B;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,+DAA+D;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"date-range-picker.d.ts","sourceRoot":"","sources":["../../../src/components/date-range-picker/date-range-picker.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiB7D,OAAO,EAIL,eAAe,EAIhB,MAAM,YAAY,CAAC;AAGpB,OAAO,kDAAkD,CAAC;AAM1D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,EAAE,CAAC,EAAE,IAAI,CAAC;CACX;AAED,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,QAAQ,EAAE,MAAM,cAAc,CAAC;IAC/B,kCAAkC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,gCAAgC;IAChC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,uCAAuC;IACvC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,wCAAwC;IACxC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,YAAY,CAAC,OAAO,eAAe,CAAC,EACpC,MAAM,CACP;IACC,kCAAkC;IAClC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,oCAAoC;IACpC,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,+BAA+B;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,+DAA+D;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD,eAAO,MAAM,eAAe,wHAkR3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freemium-paywall.d.ts","sourceRoot":"","sources":["../../../src/components/freemium-paywall/freemium-paywall.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAclE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,QAAA,MAAM,eAAe;;;8EA0BpB,CAAC;AAEF,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,iBAAiB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY,CACxD,OAAO,eAAe,CACvB;IACC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,gEAAgE;IAChE,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,wBAAwB;IACxB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kEAAkE;IAClE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"freemium-paywall.d.ts","sourceRoot":"","sources":["../../../src/components/freemium-paywall/freemium-paywall.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAclE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,QAAA,MAAM,eAAe;;;8EA0BpB,CAAC;AAEF,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,iBAAiB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY,CACxD,OAAO,eAAe,CACvB;IACC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,gEAAgE;IAChE,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,wBAAwB;IACxB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kEAAkE;IAClE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,iHA2N3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/components/list/list.tsx"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAWf,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC1C,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CAC5C;AA4GD,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtC,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC5D,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5C,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,cAAc,CAAC,WAAW,CAAC,EAC3B,OAAO,CACR;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/components/list/list.tsx"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAWf,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC1C,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CAC5C;AA4GD,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtC,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC5D,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5C,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,cAAc,CAAC,WAAW,CAAC,EAC3B,OAAO,CACR;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2dD,eAAO,MAAM,IAAI;;;CAGf,CAAC;AAEH,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alfadocs/ui-kit-debug",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe. (debug build — identical runtime to @alfadocs/ui-kit, ships source maps for symbolication).",
|
|
6
6
|
"license": "BUSL-1.1",
|