@alfadocs/ui-kit-debug 1.94.0 → 1.95.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/_chunks/{anamnesis-summary-rows-IMohuz0D.js → anamnesis-summary-rows-DTZ3per6.js} +2 -2
  2. package/dist/_chunks/{anamnesis-summary-rows-IMohuz0D.js.map → anamnesis-summary-rows-DTZ3per6.js.map} +1 -1
  3. package/dist/_chunks/{calendar-appointment-editor-dialog-CsVWoRcP.js → calendar-appointment-editor-dialog-WDKc3jMA.js} +3 -3
  4. package/dist/_chunks/{calendar-appointment-editor-dialog-CsVWoRcP.js.map → calendar-appointment-editor-dialog-WDKc3jMA.js.map} +1 -1
  5. package/dist/_chunks/chart-pMkQN-qy.js +1550 -0
  6. package/dist/_chunks/chart-pMkQN-qy.js.map +1 -0
  7. package/dist/_chunks/{date-time-picker-n-yrlMJq.js → date-time-picker-cwsWiB4q.js} +2 -2
  8. package/dist/_chunks/{date-time-picker-n-yrlMJq.js.map → date-time-picker-cwsWiB4q.js.map} +1 -1
  9. package/dist/_chunks/{hcg-doubling-K41Wy7LB.js → hcg-doubling-DQe1ptNB.js} +2 -2
  10. package/dist/_chunks/{hcg-doubling-K41Wy7LB.js.map → hcg-doubling-DQe1ptNB.js.map} +1 -1
  11. package/dist/_chunks/{reserved.agent-XU88crNW.js → reserved.agent-BvwjDyne.js} +2 -2
  12. package/dist/_chunks/{reserved.agent-XU88crNW.js.map → reserved.agent-BvwjDyne.js.map} +1 -1
  13. package/dist/_chunks/{slot-grid-B-IAFX3C.js → slot-grid-BhjaLJ0o.js} +229 -214
  14. package/dist/_chunks/{slot-grid-B-IAFX3C.js.map → slot-grid-BhjaLJ0o.js.map} +1 -1
  15. package/dist/_chunks/{task-editor-BZeSBxwU.js → task-editor-Cv7xSakv.js} +2 -2
  16. package/dist/_chunks/{task-editor-BZeSBxwU.js.map → task-editor-Cv7xSakv.js.map} +1 -1
  17. package/dist/_chunks/time-picker-DSt-ns5F.js +914 -0
  18. package/dist/_chunks/time-picker-DSt-ns5F.js.map +1 -0
  19. package/dist/agent-catalog.json +12 -4
  20. package/dist/agent-i18n/en.json +2 -2
  21. package/dist/apexcharts.css +4 -1
  22. package/dist/components/booking/index.js +1 -1
  23. package/dist/components/chart/chart-axis-scale.d.ts +21 -0
  24. package/dist/components/chart/chart-axis-scale.d.ts.map +1 -0
  25. package/dist/components/chart/chart.agent.d.ts.map +1 -1
  26. package/dist/components/chart/chart.d.ts +55 -0
  27. package/dist/components/chart/chart.d.ts.map +1 -1
  28. package/dist/components/chart/index.d.ts +1 -1
  29. package/dist/components/chart/index.d.ts.map +1 -1
  30. package/dist/components/chart/index.js +1 -1
  31. package/dist/components/date-time-picker/index.js +1 -1
  32. package/dist/components/hcg-doubling/index.js +1 -1
  33. package/dist/components/slot-grid/index.js +1 -1
  34. package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
  35. package/dist/components/task-editor/index.js +1 -1
  36. package/dist/components/time-picker/index.js +1 -1
  37. package/dist/components/time-picker/time-picker.d.ts +15 -8
  38. package/dist/components/time-picker/time-picker.d.ts.map +1 -1
  39. package/dist/i18n/locales/ar.d.ts +4 -1
  40. package/dist/i18n/locales/ar.d.ts.map +1 -1
  41. package/dist/i18n/locales/ar.js +6 -3
  42. package/dist/i18n/locales/ar.js.map +1 -1
  43. package/dist/i18n/locales/de.d.ts +5 -2
  44. package/dist/i18n/locales/de.d.ts.map +1 -1
  45. package/dist/i18n/locales/de.js +7 -4
  46. package/dist/i18n/locales/de.js.map +1 -1
  47. package/dist/i18n/locales/el.d.ts +5 -2
  48. package/dist/i18n/locales/el.d.ts.map +1 -1
  49. package/dist/i18n/locales/el.js +7 -4
  50. package/dist/i18n/locales/el.js.map +1 -1
  51. package/dist/i18n/locales/en.d.ts +5 -2
  52. package/dist/i18n/locales/en.d.ts.map +1 -1
  53. package/dist/i18n/locales/en.js +6 -3
  54. package/dist/i18n/locales/en.js.map +1 -1
  55. package/dist/i18n/locales/es.d.ts +5 -2
  56. package/dist/i18n/locales/es.d.ts.map +1 -1
  57. package/dist/i18n/locales/es.js +7 -4
  58. package/dist/i18n/locales/es.js.map +1 -1
  59. package/dist/i18n/locales/fr.d.ts +4 -1
  60. package/dist/i18n/locales/fr.d.ts.map +1 -1
  61. package/dist/i18n/locales/fr.js +6 -3
  62. package/dist/i18n/locales/fr.js.map +1 -1
  63. package/dist/i18n/locales/hi.d.ts +5 -2
  64. package/dist/i18n/locales/hi.d.ts.map +1 -1
  65. package/dist/i18n/locales/hi.js +7 -4
  66. package/dist/i18n/locales/hi.js.map +1 -1
  67. package/dist/i18n/locales/it.d.ts +5 -2
  68. package/dist/i18n/locales/it.d.ts.map +1 -1
  69. package/dist/i18n/locales/it.js +7 -4
  70. package/dist/i18n/locales/it.js.map +1 -1
  71. package/dist/i18n/locales/ja.d.ts +5 -2
  72. package/dist/i18n/locales/ja.d.ts.map +1 -1
  73. package/dist/i18n/locales/ja.js +7 -4
  74. package/dist/i18n/locales/ja.js.map +1 -1
  75. package/dist/i18n/locales/nl.d.ts +5 -2
  76. package/dist/i18n/locales/nl.d.ts.map +1 -1
  77. package/dist/i18n/locales/nl.js +7 -4
  78. package/dist/i18n/locales/nl.js.map +1 -1
  79. package/dist/i18n/locales/pl.d.ts +5 -2
  80. package/dist/i18n/locales/pl.d.ts.map +1 -1
  81. package/dist/i18n/locales/pl.js +7 -4
  82. package/dist/i18n/locales/pl.js.map +1 -1
  83. package/dist/i18n/locales/pt.d.ts +4 -1
  84. package/dist/i18n/locales/pt.d.ts.map +1 -1
  85. package/dist/i18n/locales/pt.js +6 -3
  86. package/dist/i18n/locales/pt.js.map +1 -1
  87. package/dist/i18n/locales/ro.d.ts +5 -2
  88. package/dist/i18n/locales/ro.d.ts.map +1 -1
  89. package/dist/i18n/locales/ro.js +7 -4
  90. package/dist/i18n/locales/ro.js.map +1 -1
  91. package/dist/i18n/locales/ru.d.ts +5 -2
  92. package/dist/i18n/locales/ru.d.ts.map +1 -1
  93. package/dist/i18n/locales/ru.js +7 -4
  94. package/dist/i18n/locales/ru.js.map +1 -1
  95. package/dist/i18n/locales/sq.d.ts +5 -2
  96. package/dist/i18n/locales/sq.d.ts.map +1 -1
  97. package/dist/i18n/locales/sq.js +7 -4
  98. package/dist/i18n/locales/sq.js.map +1 -1
  99. package/dist/i18n/locales/sv.d.ts +5 -2
  100. package/dist/i18n/locales/sv.d.ts.map +1 -1
  101. package/dist/i18n/locales/sv.js +7 -4
  102. package/dist/i18n/locales/sv.js.map +1 -1
  103. package/dist/i18n/locales/tr.d.ts +5 -2
  104. package/dist/i18n/locales/tr.d.ts.map +1 -1
  105. package/dist/i18n/locales/tr.js +7 -4
  106. package/dist/i18n/locales/tr.js.map +1 -1
  107. package/dist/i18n/locales/zh.d.ts +5 -2
  108. package/dist/i18n/locales/zh.d.ts.map +1 -1
  109. package/dist/i18n/locales/zh.js +7 -4
  110. package/dist/i18n/locales/zh.js.map +1 -1
  111. package/dist/index.js +9 -9
  112. package/dist/locales/ar.json +6 -3
  113. package/dist/locales/de.json +7 -4
  114. package/dist/locales/el.json +7 -4
  115. package/dist/locales/en.json +6 -3
  116. package/dist/locales/es.json +7 -4
  117. package/dist/locales/fr.json +6 -3
  118. package/dist/locales/hi.json +7 -4
  119. package/dist/locales/it.json +7 -4
  120. package/dist/locales/ja.json +7 -4
  121. package/dist/locales/nl.json +7 -4
  122. package/dist/locales/pl.json +7 -4
  123. package/dist/locales/pt.json +6 -3
  124. package/dist/locales/ro.json +7 -4
  125. package/dist/locales/ru.json +7 -4
  126. package/dist/locales/sq.json +7 -4
  127. package/dist/locales/sv.json +7 -4
  128. package/dist/locales/tr.json +7 -4
  129. package/dist/locales/zh.json +7 -4
  130. package/dist/patterns/anamnesis/index.js +1 -1
  131. package/dist/patterns/calendar/index.js +1 -1
  132. package/dist/tokens.css +3 -0
  133. package/package.json +1 -1
  134. package/dist/_chunks/chart-D4huJSru.js +0 -1340
  135. package/dist/_chunks/chart-D4huJSru.js.map +0 -1
  136. package/dist/_chunks/time-picker-DVfyAR81.js +0 -871
  137. package/dist/_chunks/time-picker-DVfyAR81.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-picker-DSt-ns5F.js","sources":["../../src/components/time-picker/time-picker.agent.ts","../../src/components/time-picker/time-picker.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — TimePicker. */\n/* */\n/* TimePicker is a segmented time input. With the `dropdown` prop it also */\n/* has a list to pick from (hour, minute and AM/PM columns), which */\n/* `open` / `close` drive. Without `dropdown` there is no list and they */\n/* resolve to no-ops on the curated handle (kept for shape parity with */\n/* the other pickers, see PRS §26 §15 on curated handles). */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` §15. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { TimePickerHandle } from './time-picker';\n\nexport const timePickerAgent: AgentAdapter<TimePickerHandle> = {\n id: 'time-picker',\n capabilities: ['select_single', 'set_value', 'open', 'close'],\n state: {\n value: {\n type: 'HH:MM | null',\n descriptionKey: 'ui.agent.timePicker.state.value',\n description:\n 'Currently selected time as 24h HH:MM. Null when unset with allowEmpty; otherwise defaults to 00:00.',\n read: (handle) => {\n const value = handle.getValue();\n if (!value) return null;\n const hh = String(value.hours).padStart(2, '0');\n const mm = String(value.minutes).padStart(2, '0');\n return `${hh}:${mm}`;\n },\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.timePicker.state.isOpen',\n description:\n 'Whether the time dropdown is open. Always false unless the picker has the dropdown prop.',\n read: (handle) => handle.isOpen(),\n },\n },\n actions: {\n set_time: {\n safety: 'write',\n argsType: '{ time: string }',\n argsSchema: {\n type: 'object',\n properties: {\n time: { type: 'string', pattern: '^([01][0-9]|2[0-3]):[0-5][0-9]$' },\n },\n required: ['time'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.timePicker.actions.setTime',\n description: 'Set the time using a 24h HH:MM string.',\n examples: [{ args: { time: '14:30' }, note: '2:30 PM in 24h form.' }],\n invoke: (handle, args: { time: string }) => {\n const [hStr, mStr] = args.time.split(':');\n handle.setValue({\n hours: Number.parseInt(hStr ?? '0', 10),\n minutes: Number.parseInt(mStr ?? '0', 10),\n });\n },\n },\n clear: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.timePicker.actions.clear',\n description: 'Clear to null with allowEmpty; otherwise reset to 00:00.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n descriptionKey: 'ui.agent.timePicker.actions.open',\n description:\n 'Open the time dropdown without moving focus. A no-op unless the picker has the dropdown prop and is enabled.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n descriptionKey: 'ui.agent.timePicker.actions.close',\n description:\n 'Close the time dropdown. A no-op unless the picker has the dropdown prop.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'time-picker',\n description: 'Marks the TimePicker 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 useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type MouseEvent,\n type MutableRefObject,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Clock, X } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n useFormFieldControlId,\n} from '../form-field/form-field-context';\nimport type { TimeValue } from '../_shared/time';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useAgentRegistration } from '../../agent';\nimport { timePickerAgent } from './time-picker.agent';\n\n/* -------------------------------------------------------------------------- */\n/* Imperative handle */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Curated imperative handle, registered with the agent registry and consumed\n * by the agent adapter. (The forwarded `ref` is the root element.)\n */\nexport interface TimePickerHandle {\n /** Get the current time value, or null when unset. */\n getValue: () => TimeValue | null;\n /** Set the time value. Hours are kept within 0–23 and minutes within 0–59. */\n setValue: (value: TimeValue) => void;\n /** Clear to null with allowEmpty; otherwise reset to 00:00. */\n clear: () => void;\n /** Whether the time dropdown is open. Always false unless `dropdown` is on. */\n isOpen: () => boolean;\n /** Open the time dropdown without moving focus. A no-op unless `dropdown` is on and the picker is enabled. */\n open: () => void;\n /** Close the time dropdown. A no-op unless `dropdown` is on. */\n close: () => void;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------------- */\n\n/** Detect 12h vs 24h from the browser locale. */\nfunction detectHour12(locale: string): boolean {\n try {\n const resolved = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n }).resolvedOptions();\n return resolved.hourCycle === 'h12' || resolved.hourCycle === 'h11';\n } catch {\n return false;\n }\n}\n\n/** Get localised AM/PM labels via Intl. */\nfunction getLocalePeriodLabels(locale: string): { am: string; pm: string } {\n try {\n const am =\n new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n hour12: true,\n })\n .formatToParts(new Date(2000, 0, 1, 9))\n .find((p) => p.type === 'dayPeriod')?.value ?? 'AM';\n\n const pm =\n new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n hour12: true,\n })\n .formatToParts(new Date(2000, 0, 1, 15))\n .find((p) => p.type === 'dayPeriod')?.value ?? 'PM';\n\n return { am, pm };\n } catch {\n return { am: 'AM', pm: 'PM' };\n }\n}\n\n/** Clamp a number between min and max. */\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\n/** The last minute of the hour on the step grid: 55 for step 5, 30 for step 30. */\nfunction lastMinuteOnGrid(step: number): number {\n return Math.floor(59 / step) * step;\n}\n\n/**\n * Snap a typed minute to the nearest step. Never past the last grid value of\n * the hour: 58 with step 5 is 55, not 60, which a consumer setting minutes on\n * a Date would roll into the next hour (or day, from 23:58).\n */\nfunction snapMinuteToStep(value: number, step: number): number {\n const rounded = Math.round(clamp(value, 0, 59) / step) * step;\n return clamp(rounded, 0, lastMinuteOnGrid(step));\n}\n\n/** The next or previous minute on the step grid, wrapping within the hour. An off-grid value moves to its neighbouring grid value. */\nfunction stepMinute(value: number, step: number, direction: 1 | -1): number {\n const last = lastMinuteOnGrid(step);\n if (direction === 1) {\n const next = Math.floor(value / step) * step + step;\n return next > last ? 0 : next;\n }\n const previous = Math.ceil(value / step) * step - step;\n return previous < 0 ? last : previous;\n}\n\n/** Keep a value from outside (handle, agent) within 00:00–23:59. */\nfunction normaliseTime(value: TimeValue): TimeValue {\n const whole = (n: number) => (Number.isFinite(n) ? Math.trunc(n) : 0);\n return {\n hours: clamp(whole(value.hours), 0, 23),\n minutes: clamp(whole(value.minutes), 0, 59),\n };\n}\n\n/** Convert 24h hour to 12h display hour. */\nfunction to12Hour(h24: number): number {\n if (h24 === 0) return 12;\n if (h24 > 12) return h24 - 12;\n return h24;\n}\n\n/** Convert 12h display hour + period to 24h hour. */\nfunction to24Hour(h12: number, isPM: boolean): number {\n if (isPM) return h12 === 12 ? 12 : h12 + 12;\n return h12 === 12 ? 0 : h12;\n}\n\nconst pad2 = (n: number): string => String(n).padStart(2, '0');\n\n/** See `contentCallbackRef`: keeps a host scroll lock from cancelling the event. */\nfunction stopScrollLockPropagation(event: Event): void {\n event.stopPropagation();\n}\n\n/* -------------------------------------------------------------------------- */\n/* CVA variants */\n/* -------------------------------------------------------------------------- */\n\nconst wrapperVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--control-border)] ds:bg-background',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-within:outline-[length:var(--focus-ring-width)] ds:focus-within:outline-solid',\n 'ds:focus-within:outline-ring ds:focus-within:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-within:outline-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-8 ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:text-[length:var(--font-size-sm)]',\n md: 'ds:h-[var(--min-target-size)] ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:text-[length:var(--font-size-lg)]',\n },\n tone: {\n default: 'ds:border-[color:var(--control-border)]',\n error: 'ds:border-destructive',\n },\n isDisabled: {\n true: 'ds:cursor-not-allowed ds:opacity-50',\n false: '',\n },\n /** `dropdown` on and enabled: a click anywhere on the field opens the list. */\n opensOnClick: {\n true: 'ds:cursor-pointer',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n isDisabled: false,\n opensOnClick: false,\n },\n },\n);\n\nconst segmentVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:rounded-[var(--radius-sm)] ds:text-center ds:tabular-nums',\n 'ds:bg-transparent ds:text-foreground',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:select-none',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:min-w-6 ds:h-6 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:min-w-8 ds:h-8 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:min-w-10 ds:h-10 ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst periodButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:rounded-[var(--radius-sm)] ds:text-center',\n 'ds:bg-transparent ds:text-foreground ds:cursor-pointer',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:select-none',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-muted',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:min-w-8 ds:h-6 ds:text-[length:var(--font-size-sm)] ds:ps-1 ds:pe-1',\n md: 'ds:min-w-10 ds:h-8 ds:text-[length:var(--font-size-base)] ds:ps-1.5 ds:pe-1.5',\n lg: 'ds:min-w-12 ds:h-10 ds:text-[length:var(--font-size-lg)] ds:ps-2 ds:pe-2',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst separatorVariants = cva('ds:text-muted-foreground ds:select-none', {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n/**\n * The clock button: flush with the field's inline-end edge (the negative\n * margin cancels the wrapper's end padding) and stretched to its inner\n * height. The `before:` hit area reaches over the field's 1px border, so\n * the target is the field's full height: 44px in `md`, 48px accessible.\n */\nconst clockButtonVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:shrink-0 ds:self-stretch ds:items-center ds:justify-center',\n 'ds:before:absolute ds:before:inset-x-0 ds:before:-inset-y-px',\n 'ds:bg-transparent ds:text-muted-foreground ds:cursor-pointer',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-muted ds:hover:text-foreground',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring',\n 'ds:focus-visible:[outline-offset:calc(var(--focus-ring-width)*-1)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:cursor-not-allowed ds:disabled:hover:bg-transparent',\n ].join(' '),\n {\n variants: {\n // Only the button that ends the field rounds its inline-end corner.\n trailing: { true: 'ds:rounded-e-[var(--radius-sm)]', false: '' },\n size: {\n sm: 'ds:min-w-8 ds:[&_svg]:size-4',\n md: 'ds:min-w-[var(--min-target-size)] ds:[&_svg]:size-4',\n lg: 'ds:min-w-12 ds:[&_svg]:size-5',\n },\n },\n defaultVariants: { size: 'md', trailing: true },\n compoundVariants: [\n { size: 'sm', trailing: true, className: 'ds:-me-[var(--spacing-sm)]' },\n {\n size: ['md', 'lg'],\n trailing: true,\n className: 'ds:-me-[var(--spacing-md)]',\n },\n ],\n },\n);\n\n/**\n * The dropdown panel. `--time-picker-option-size` is one option's block size:\n * 2rem for `sm` and 3rem for `lg` (the field heights), `--min-target-size`\n * for `md`, so it grows to 48px under `.theme-accessible`.\n */\nconst dropdownContentVariants = cva(\n [\n 'ds:z-[var(--z-popover)] ds:flex ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-border ds:bg-background ds:text-foreground ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:[--time-picker-option-size:var(--spacing-xl)] ds:text-[length:var(--font-size-sm)]',\n md: 'ds:[--time-picker-option-size:var(--min-target-size)] ds:text-[length:var(--font-size-base)]',\n lg: 'ds:[--time-picker-option-size:var(--spacing-2xl)] ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\n/** One column: six and a half options tall, so a part-visible option at the edge shows it scrolls. */\nconst columnVariants = cva(\n [\n 'ds:relative ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]',\n 'ds:max-h-[calc(var(--time-picker-option-size)*6.5)] ds:overflow-y-auto ds:overscroll-contain',\n 'ds:p-[var(--spacing-2xs)]',\n ].join(' '),\n {\n variants: {\n separated: {\n true: 'ds:border-s ds:border-border',\n false: '',\n },\n },\n defaultVariants: { separated: false },\n },\n);\n\nconst optionVariants = cva(\n [\n 'ds:flex ds:shrink-0 ds:items-center ds:justify-center',\n 'ds:h-[var(--time-picker-option-size)] ds:min-w-[var(--time-picker-option-size)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)] ds:tabular-nums ds:whitespace-nowrap',\n 'ds:cursor-pointer ds:select-none',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n // Inset ring: the column scrolls, so an outset ring would be clipped.\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:[outline-offset:calc(var(--focus-ring-width)*-1)]',\n ].join(' '),\n {\n variants: {\n // The kit's selected treatment (the calendar's selected day): solid\n // primary. Paired with aria-selected, so not colour alone.\n selected: {\n true: [\n 'ds:bg-primary ds:text-primary-foreground ds:font-semibold ds:hover:bg-primary-hover',\n 'ds:focus-visible:outline-primary-foreground',\n 'ds:forced-colors:bg-[Highlight] ds:forced-colors:text-[HighlightText]',\n // CanvasText can sit close to Highlight in some contrast themes.\n 'ds:forced-colors:focus-visible:outline-[HighlightText]',\n ].join(' '),\n false: [\n 'ds:text-foreground ds:hover:bg-muted ds:focus-visible:outline-ring',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n },\n },\n defaultVariants: { selected: false },\n },\n);\n\n/* -------------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------------- */\n\ntype MinuteStep = 1 | 5 | 10 | 15 | 30;\n\ninterface TimePickerBaseProps extends Pick<\n VariantProps<typeof wrapperVariants>,\n 'size'\n> {\n /** Force 12h/24h mode. Defaults to locale detection. */\n hour12?: boolean;\n /** Minute increment step. */\n minuteStep?: MinuteStep;\n /** Use full-width colon separator for CJK apps. */\n fullWidthSeparator?: boolean;\n /** Custom AM/PM labels. */\n periodLabels?: { am: string; pm: string };\n /** Component size. */\n size?: 'sm' | 'md' | 'lg';\n /**\n * Adds a list to pick the time from: a clock button at the field's end,\n * and a click anywhere on the field opens a panel with an hour column, a\n * minute column (in `minuteStep` steps) and, in 12h mode, an AM/PM column.\n * Typing still works while it is open. For pointer and touch-first forms\n * such as business hours. Off by default: the typed field is unchanged.\n */\n dropdown?: boolean;\n /** Whether the input is disabled. */\n disabled?: boolean;\n /** Additional class names. */\n className?: string;\n /** id override. */\n id?: string;\n /**\n * Accessible name for the time group when it is NOT in a `FormField`, or\n * to override the field's label (two pickers in one field, say). Without\n * a name of its own the group is called \"Time\". Inside a `FormField` the\n * group takes the field's label.\n */\n 'aria-label'?: string;\n /** Accessible name by reference. Wins over `aria-label` and the FormField label. */\n 'aria-labelledby'?: string;\n}\n\n/** Empty values are opt-in, keeping existing onChange callbacks non-nullable. */\nexport type TimePickerProps = TimePickerBaseProps &\n (\n | {\n allowEmpty?: false;\n value?: TimeValue;\n defaultValue?: TimeValue;\n onChange?: (value: TimeValue) => void;\n }\n | {\n /** Start unset and allow clearing to null, distinct from midnight. */\n allowEmpty: true;\n value?: TimeValue | null;\n defaultValue?: TimeValue | null;\n onChange?: (value: TimeValue | null) => void;\n }\n );\n\n/* -------------------------------------------------------------------------- */\n/* Dropdown columns */\n/* -------------------------------------------------------------------------- */\n\ntype Segment = 'hour' | 'minute' | 'period';\n\ninterface ColumnOption {\n value: number;\n label: string;\n}\n\ninterface DropdownColumn {\n key: Segment;\n label: string;\n options: ColumnOption[];\n /** Index of the selected option, or -1 (a minute off the step grid). */\n selectedIndex: number;\n /** Index of the option that takes focus when the column is entered. */\n anchorIndex: number;\n}\n\ninterface TimePickerDropdownColumnsProps {\n columns: DropdownColumn[];\n columnRefs: MutableRefObject<Partial<Record<Segment, HTMLDivElement | null>>>;\n onPick: (column: Segment, value: number) => void;\n onOptionKeyDown: (\n event: KeyboardEvent<HTMLDivElement>,\n columnIndex: number,\n optionIndex: number,\n ) => void;\n}\n\n/** The listbox columns. Mounted with the panel, so its layout effect runs once the panel is in the DOM. */\nfunction TimePickerDropdownColumns({\n columns,\n columnRefs,\n onPick,\n onOptionKeyDown,\n}: TimePickerDropdownColumnsProps) {\n const selectionKey = columns.map((c) => c.selectedIndex).join(':');\n const hasCentredRef = useRef(false);\n\n // Centre each column's selected option when the panel opens; afterwards\n // (typed values update the columns live) only scroll one that is out of\n // view, so a pointer pick never jumps the list under the pointer.\n useIsomorphicLayoutEffect(() => {\n const centreAll = !hasCentredRef.current;\n hasCentredRef.current = true;\n for (const list of Object.values(columnRefs.current)) {\n if (!list) continue;\n const option =\n list.querySelector<HTMLElement>('[aria-selected=\"true\"]') ??\n list.querySelector<HTMLElement>('[role=\"option\"][tabindex=\"0\"]');\n if (!option) continue;\n const top = option.offsetTop;\n const bottom = top + option.offsetHeight;\n const inView =\n top >= list.scrollTop && bottom <= list.scrollTop + list.clientHeight;\n if (centreAll || !inView) {\n list.scrollTop = top - (list.clientHeight - option.offsetHeight) / 2;\n }\n }\n }, [selectionKey, columnRefs]);\n\n return (\n <>\n {columns.map((column, columnIndex) => (\n <div\n key={column.key}\n ref={(node) => {\n columnRefs.current[column.key] = node;\n }}\n role=\"listbox\"\n aria-label={column.label}\n data-column={column.key}\n className={columnVariants({ separated: columnIndex > 0 })}\n >\n {column.options.map((option, optionIndex) => {\n const selected = optionIndex === column.selectedIndex;\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={selected}\n tabIndex={optionIndex === column.anchorIndex ? 0 : -1}\n data-value={option.value}\n className={optionVariants({ selected })}\n onClick={() => onPick(column.key, option.value)}\n onKeyDown={(event) =>\n onOptionKeyDown(event, columnIndex, optionIndex)\n }\n >\n {option.label}\n </div>\n );\n })}\n </div>\n ))}\n </>\n );\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n (props, ref) => {\n const {\n value,\n allowEmpty = false,\n defaultValue,\n onChange,\n hour12: hour12Prop,\n minuteStep = 1,\n fullWidthSeparator = false,\n periodLabels: periodLabelsProp,\n size = 'md',\n dropdown = false,\n disabled,\n className,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n } = props;\n const onEmptyChange = props.allowEmpty ? props.onChange : undefined;\n const { t, i18n } = useTranslation('ui');\n const ctx = useFormField();\n // Inside a FormField the group is named by the field's label.\n const inFormField = useContext(FormFieldContext) !== null;\n const effectiveId = useFormFieldControlId(ctx, id);\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n const effectiveTone = ctx.invalid ? 'error' : 'default';\n\n const isHour12 =\n hour12Prop !== undefined ? hour12Prop : detectHour12(i18n.language);\n const localePeriods = getLocalePeriodLabels(i18n.language);\n const periods = periodLabelsProp ?? localePeriods;\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<TimeValue | null>(\n value !== undefined\n ? value\n : defaultValue !== undefined\n ? defaultValue\n : allowEmpty\n ? null\n : { hours: 0, minutes: 0 },\n );\n const rawValue = isControlled ? value : internalValue;\n const currentValue = useMemo(\n () => (allowEmpty ? rawValue : (rawValue ?? { hours: 0, minutes: 0 })),\n [allowEmpty, rawValue],\n );\n // An explicit edit starts from midnight; focus and opening never commit it.\n const editBase = () => latestValueRef.current ?? { hours: 0, minutes: 0 };\n\n // The latest value, for timers and blur commits that outlive the render\n // which scheduled them. `emit` moves it ahead of the next render.\n const latestValueRef = useRef(currentValue);\n latestValueRef.current = currentValue;\n\n const emit = useCallback(\n (next: TimeValue | null) => {\n latestValueRef.current = next;\n if (!isControlled) setInternalValue(next);\n if (next === null) onEmptyChange?.(null);\n else onChange?.(next);\n },\n [isControlled, onChange, onEmptyChange],\n );\n\n // Segment refs\n const rootRef = useRef<HTMLDivElement>(null);\n const hourRef = useRef<HTMLSpanElement>(null);\n const minuteRef = useRef<HTMLSpanElement>(null);\n const periodRef = useRef<HTMLSpanElement>(null);\n\n /* ---------------------------------------------------------------- */\n /* Typing: a first digit that could start a two-digit value waits */\n /* for the second. It commits after a second or when the user */\n /* leaves the segment; stepping with the arrows replaces it. */\n /* ---------------------------------------------------------------- */\n\n const hourPendingRef = useRef('');\n const minutePendingRef = useRef('');\n const hourTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const minuteTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelHourPending = () => {\n hourPendingRef.current = '';\n if (hourTimerRef.current) {\n clearTimeout(hourTimerRef.current);\n hourTimerRef.current = null;\n }\n };\n\n const cancelMinutePending = () => {\n minutePendingRef.current = '';\n if (minuteTimerRef.current) {\n clearTimeout(minuteTimerRef.current);\n minuteTimerRef.current = null;\n }\n };\n\n // A parent reset or a disabled field must not be undone by a pending digit.\n useIsomorphicLayoutEffect(() => {\n if (value === null || effectiveDisabled) {\n cancelHourPending();\n cancelMinutePending();\n }\n }, [value, effectiveDisabled]);\n\n const clearValue = useCallback(() => {\n hourPendingRef.current = '';\n minutePendingRef.current = '';\n if (hourTimerRef.current) clearTimeout(hourTimerRef.current);\n if (minuteTimerRef.current) clearTimeout(minuteTimerRef.current);\n hourTimerRef.current = null;\n minuteTimerRef.current = null;\n emit(allowEmpty ? null : { hours: 0, minutes: 0 });\n }, [allowEmpty, emit]);\n\n const clearFromKeyboard = (e: KeyboardEvent<HTMLSpanElement>): boolean => {\n if (!allowEmpty || (e.key !== 'Backspace' && e.key !== 'Delete'))\n return false;\n e.preventDefault();\n clearValue();\n return true;\n };\n\n const commitHourDigits = (digits: string) => {\n const base = editBase();\n const clamped = clamp(\n parseInt(digits, 10),\n isHour12 ? 1 : 0,\n isHour12 ? 12 : 23,\n );\n emit({\n ...base,\n hours: isHour12 ? to24Hour(clamped, base.hours >= 12) : clamped,\n });\n };\n\n const commitMinuteDigits = (digits: string) => {\n emit({\n ...editBase(),\n minutes: snapMinuteToStep(parseInt(digits, 10), minuteStep),\n });\n };\n\n const flushHourPending = () => {\n const pending = hourPendingRef.current;\n cancelHourPending();\n if (pending) commitHourDigits(pending);\n };\n\n const flushMinutePending = () => {\n const pending = minutePendingRef.current;\n cancelMinutePending();\n if (pending) commitMinuteDigits(pending);\n };\n\n // Timers call the latest render's flush, so a commit uses the current\n // `onChange` and 12h/step settings.\n const flushRef = useRef({\n hour: flushHourPending,\n minute: flushMinutePending,\n });\n flushRef.current = { hour: flushHourPending, minute: flushMinutePending };\n\n // Cleanup timers\n useEffect(() => {\n return () => {\n if (hourTimerRef.current) clearTimeout(hourTimerRef.current);\n if (minuteTimerRef.current) clearTimeout(minuteTimerRef.current);\n };\n }, []);\n\n const separator = fullWidthSeparator ? ':' : ':';\n\n // Display values\n const unsetLabel = t('inputs.timePicker.unset', 'No time set');\n const displayHour =\n currentValue === null\n ? '--'\n : isHour12\n ? pad2(to12Hour(currentValue.hours))\n : pad2(currentValue.hours);\n const displayMinute =\n currentValue === null ? '--' : pad2(currentValue.minutes);\n const isPM = (currentValue?.hours ?? 0) >= 12;\n\n /* ---------------------------------------------------------------- */\n /* Dropdown state */\n /* ---------------------------------------------------------------- */\n\n const [open, setOpenState] = useState(false);\n const isOpen = dropdown && open;\n // Read by the handle, so `open()` then `isOpen()` agree before a render.\n const openRef = useRef(open);\n openRef.current = open;\n const setOpen = useCallback((next: boolean) => {\n openRef.current = next;\n setOpenState(next);\n }, []);\n const [dropdownDir, setDropdownDir] = useState<'ltr' | 'rtl'>('ltr');\n /** `keyboard` moves focus into the list on open; `pointer` leaves it where it is. */\n const openModeRef = useRef<'pointer' | 'keyboard'>('pointer');\n const initialColumnRef = useRef<Segment>('hour');\n /** Where Escape (and a close with focus inside the list) sends focus. */\n const returnFocusRef = useRef<HTMLElement | null>(null);\n /** Set when focus moved on by itself (outside click, Tab): leave it there on close. */\n const skipFocusReturnRef = useRef(false);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const clockButtonRef = useRef<HTMLButtonElement>(null);\n const columnRefs = useRef<Partial<Record<Segment, HTMLDivElement | null>>>(\n {},\n );\n\n const focusColumn = useCallback((column: Segment) => {\n columnRefs.current[column]\n ?.querySelector<HTMLElement>('[role=\"option\"][tabindex=\"0\"]')\n ?.focus({ preventScroll: true });\n }, []);\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (next) {\n if (effectiveDisabled) return;\n // Portalled to <body>, so the panel inherits no direction: copy\n // the field's.\n const root = rootRef.current;\n setDropdownDir(\n root && window.getComputedStyle(root).direction === 'rtl'\n ? 'rtl'\n : 'ltr',\n );\n skipFocusReturnRef.current = false;\n }\n setOpen(next);\n },\n [effectiveDisabled, setOpen],\n );\n\n const openDropdown = (\n mode: 'pointer' | 'keyboard',\n column: Segment,\n returnTo: HTMLElement | null,\n ) => {\n if (!dropdown || effectiveDisabled) return;\n openModeRef.current = mode;\n initialColumnRef.current = column;\n returnFocusRef.current = returnTo;\n if (open) {\n if (mode === 'keyboard') focusColumn(column);\n return;\n }\n handleOpenChange(true);\n };\n\n // Turning `dropdown` off, or disabling the picker, closes the list.\n useEffect(() => {\n if (open && (!dropdown || effectiveDisabled)) setOpen(false);\n }, [open, dropdown, effectiveDisabled, setOpen]);\n\n // Alt+ArrowDown on a segment opens the list on that segment's column;\n // with the list open, Alt+ArrowUp closes it, as it does in the list.\n const openFromSegment = (\n e: KeyboardEvent<HTMLSpanElement>,\n column: Segment,\n ): boolean => {\n if (!dropdown || !e.altKey) return false;\n if (e.key === 'ArrowUp' && open) {\n e.preventDefault();\n setOpen(false);\n return true;\n }\n if (e.key !== 'ArrowDown') return false;\n e.preventDefault();\n flushHourPending();\n flushMinutePending();\n openDropdown('keyboard', column, e.currentTarget);\n return true;\n };\n\n // Hour segment keyboard handler\n const handleHourKeyDown = (e: KeyboardEvent<HTMLSpanElement>) => {\n if (effectiveDisabled) return;\n if (clearFromKeyboard(e)) return;\n if (openFromSegment(e, 'hour')) return;\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n cancelHourPending();\n const base = editBase();\n const delta = e.key === 'ArrowUp' ? 1 : -1;\n const maxH = 23;\n let newH = base.hours + delta;\n if (newH < 0) newH = maxH;\n if (newH > maxH) newH = 0;\n emit({ ...base, hours: newH });\n return;\n }\n\n if (e.key === 'Tab' && !e.shiftKey) {\n e.preventDefault();\n // Leaving the segment commits a pending digit (see the blur handler).\n minuteRef.current?.focus();\n return;\n }\n\n if (e.key.length === 1 && e.key >= '0' && e.key <= '9') {\n e.preventDefault();\n if (hourTimerRef.current) clearTimeout(hourTimerRef.current);\n const next = hourPendingRef.current + e.key;\n // A first digit that cannot start a two-digit hour commits now.\n const complete =\n next.length >= 2 || parseInt(next, 10) > (isHour12 ? 1 : 2);\n if (complete) {\n cancelHourPending();\n commitHourDigits(next);\n minuteRef.current?.focus();\n } else {\n hourPendingRef.current = next;\n hourTimerRef.current = setTimeout(\n () => flushRef.current.hour(),\n 1000,\n );\n }\n }\n };\n\n // Minute segment keyboard handler\n const handleMinuteKeyDown = (e: KeyboardEvent<HTMLSpanElement>) => {\n if (effectiveDisabled) return;\n if (clearFromKeyboard(e)) return;\n if (openFromSegment(e, 'minute')) return;\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n cancelMinutePending();\n const base = editBase();\n emit({\n ...base,\n minutes: stepMinute(\n base.minutes,\n minuteStep,\n e.key === 'ArrowUp' ? 1 : -1,\n ),\n });\n return;\n }\n\n if (e.key === 'Tab' && !e.shiftKey && isHour12) {\n e.preventDefault();\n periodRef.current?.focus();\n return;\n }\n\n if (e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n hourRef.current?.focus();\n return;\n }\n\n if (e.key.length === 1 && e.key >= '0' && e.key <= '9') {\n e.preventDefault();\n if (minuteTimerRef.current) clearTimeout(minuteTimerRef.current);\n const next = minutePendingRef.current + e.key;\n // 6–9 cannot start a two-digit minute, so it commits now.\n const complete = next.length >= 2 || parseInt(next, 10) > 5;\n if (complete) {\n cancelMinutePending();\n commitMinuteDigits(next);\n if (isHour12) {\n periodRef.current?.focus();\n }\n } else {\n minutePendingRef.current = next;\n minuteTimerRef.current = setTimeout(\n () => flushRef.current.minute(),\n 1000,\n );\n }\n }\n };\n\n // Period toggle handler\n const handlePeriodKeyDown = (e: KeyboardEvent<HTMLSpanElement>) => {\n if (effectiveDisabled) return;\n if (clearFromKeyboard(e)) return;\n if (openFromSegment(e, 'period')) return;\n const base = editBase();\n const basePM = base.hours >= 12;\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n const newH = basePM ? base.hours - 12 : base.hours + 12;\n emit({ ...base, hours: clamp(newH, 0, 23) });\n return;\n }\n\n if (e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n minuteRef.current?.focus();\n return;\n }\n\n // a/p keys toggle AM/PM\n if (e.key === 'a' || e.key === 'A') {\n e.preventDefault();\n if (latestValueRef.current === null || basePM) {\n emit({ ...base, hours: basePM ? base.hours - 12 : base.hours });\n }\n }\n if (e.key === 'p' || e.key === 'P') {\n e.preventDefault();\n if (!basePM) {\n emit({ ...base, hours: base.hours + 12 });\n }\n }\n };\n\n // Leaving a segment commits a lone typed digit (\"5\" then a click on Save\n // is 05) and rounds nothing else: an untouched 12:58 stays 12:58.\n const handleHourBlur = () => {\n flushHourPending();\n };\n\n const handleMinuteBlur = () => {\n flushMinutePending();\n };\n\n const hourLabel = t('inputs.timePicker.hour', 'Hour');\n const minuteLabel = t('inputs.timePicker.minute', 'Minute');\n const periodLabel = t('inputs.timePicker.period', 'Period');\n const groupLabel = t('inputs.timePicker.groupLabel', 'Time');\n const openDropdownLabel = t(\n 'inputs.timePicker.openDropdown',\n 'Choose time',\n );\n\n // The FormField's label names this picker only while its `for` points\n // here. Several controls can share one field (DateTimePicker's trigger\n // and its own TimePicker): the others keep their own name.\n const formFieldLabelId = `${ctx.id}-label`;\n const hasFormFieldLabel = inFormField && Boolean(ctx.label);\n const [isLabelTarget, setIsLabelTarget] = useState(true);\n\n // Accessible name: an explicit aria-labelledby, then an explicit\n // aria-label, then the FormField's label, then \"Time\".\n const groupLabelledBy =\n ariaLabelledBy ??\n (!ariaLabel && hasFormFieldLabel && isLabelTarget\n ? formFieldLabelId\n : undefined);\n const groupAriaLabel = groupLabelledBy\n ? undefined\n : (ariaLabel ?? groupLabel);\n\n // The clear button names its field when a text label is known.\n const clearFieldLabel =\n ariaLabel ?? (hasFormFieldLabel ? ctx.label : undefined);\n const clearLabel = clearFieldLabel\n ? t('inputs.timePicker.clearNamed', { label: clearFieldLabel })\n : t('inputs.text.clear');\n\n // FormField's `<label for>` points at this group, which is not labelable,\n // so the browser does nothing with a click on it. Focus the hours instead.\n useEffect(() => {\n if (!hasFormFieldLabel) return undefined;\n const scope = rootRef.current?.getRootNode();\n const label =\n scope instanceof Document || scope instanceof ShadowRoot\n ? scope.getElementById(formFieldLabelId)\n : null;\n if (!(label instanceof HTMLLabelElement)) {\n setIsLabelTarget(false);\n return undefined;\n }\n const sync = () => setIsLabelTarget(label.htmlFor === effectiveId);\n sync();\n // The field moves `for` to a control that registers after mount.\n const observer = new MutationObserver(sync);\n observer.observe(label, { attributes: true, attributeFilter: ['for'] });\n const onLabelClick = () => {\n if (label.htmlFor !== effectiveId || effectiveDisabled) return;\n hourRef.current?.focus();\n };\n label.addEventListener('click', onLabelClick);\n return () => {\n observer.disconnect();\n label.removeEventListener('click', onLabelClick);\n };\n }, [hasFormFieldLabel, formFieldLabelId, effectiveId, effectiveDisabled]);\n\n /* ---------------------------------------------------------------- */\n /* Dropdown columns and handlers */\n /* ---------------------------------------------------------------- */\n\n const hourOptions = useMemo<ColumnOption[]>(\n () =>\n Array.from({ length: isHour12 ? 12 : 24 }, (_, i) =>\n isHour12 ? i + 1 : i,\n ).map((hour) => ({ value: hour, label: pad2(hour) })),\n [isHour12],\n );\n const minuteOptions = useMemo<ColumnOption[]>(() => {\n const options: ColumnOption[] = [];\n for (let minute = 0; minute <= 59; minute += minuteStep) {\n options.push({ value: minute, label: pad2(minute) });\n }\n return options;\n }, [minuteStep]);\n\n const columns: DropdownColumn[] = [];\n if (dropdown) {\n const hourSelected = hourOptions.findIndex(\n (o) =>\n o.value ===\n (currentValue === null\n ? undefined\n : isHour12\n ? to12Hour(currentValue.hours)\n : currentValue.hours),\n );\n columns.push({\n key: 'hour',\n label: hourLabel,\n options: hourOptions,\n selectedIndex: hourSelected,\n anchorIndex: Math.max(hourSelected, 0),\n });\n // A minute off the step grid (07 with step 5) selects nothing; focus\n // enters the column at the grid value just before it.\n const minuteSelected = minuteOptions.findIndex(\n (o) => o.value === currentValue?.minutes,\n );\n columns.push({\n key: 'minute',\n label: minuteLabel,\n options: minuteOptions,\n selectedIndex: minuteSelected,\n anchorIndex:\n minuteSelected >= 0\n ? minuteSelected\n : clamp(\n Math.floor((currentValue?.minutes ?? 0) / minuteStep),\n 0,\n minuteOptions.length - 1,\n ),\n });\n if (isHour12) {\n columns.push({\n key: 'period',\n label: periodLabel,\n options: [\n { value: 0, label: periods.am },\n { value: 1, label: periods.pm },\n ],\n selectedIndex: currentValue === null ? -1 : isPM ? 1 : 0,\n anchorIndex: isPM ? 1 : 0,\n });\n }\n }\n\n // An hour or AM/PM pick keeps the list open; a minute pick closes it and\n // returns focus to the minute segment.\n const pickOption = (column: Segment, optionValue: number) => {\n cancelHourPending();\n cancelMinutePending();\n const base = editBase();\n if (column === 'hour') {\n const hours = isHour12\n ? to24Hour(optionValue, base.hours >= 12)\n : optionValue;\n if (latestValueRef.current === null || hours !== base.hours)\n emit({ ...base, hours });\n return;\n }\n if (column === 'period') {\n const wantPM = optionValue === 1;\n if (latestValueRef.current === null || wantPM !== base.hours >= 12) {\n emit({ ...base, hours: (base.hours % 12) + (wantPM ? 12 : 0) });\n }\n return;\n }\n if (latestValueRef.current === null || optionValue !== base.minutes) {\n emit({ ...base, minutes: optionValue });\n }\n minuteRef.current?.focus();\n setOpen(false);\n };\n\n const handleOptionKeyDown = (\n e: KeyboardEvent<HTMLDivElement>,\n columnIndex: number,\n optionIndex: number,\n ) => {\n const column = columns[columnIndex];\n if (!column) return;\n const last = column.options.length - 1;\n const focusOption = (index: number) => {\n columnRefs.current[column.key]\n ?.querySelectorAll<HTMLElement>('[role=\"option\"]')\n [index]?.focus();\n };\n\n if (e.altKey && e.key === 'ArrowUp') {\n e.preventDefault();\n returnFocusRef.current?.focus();\n setOpen(false);\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusOption(Math.min(optionIndex + 1, last));\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusOption(Math.max(optionIndex - 1, 0));\n break;\n case 'Home':\n e.preventDefault();\n focusOption(0);\n break;\n case 'End':\n e.preventDefault();\n focusOption(last);\n break;\n case 'ArrowLeft':\n case 'ArrowRight': {\n e.preventDefault();\n // Columns follow the reading direction: in RTL the hours are on\n // the right, so ArrowLeft moves on to the minutes.\n const forward = (e.key === 'ArrowRight') === (dropdownDir === 'ltr');\n const target = columns[columnIndex + (forward ? 1 : -1)];\n if (target) focusColumn(target.key);\n break;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n const option = column.options[optionIndex];\n if (option) pickOption(column.key, option.value);\n break;\n }\n case 'Tab':\n // Leave the picker in the direction of travel and close. No\n // preventDefault: the browser moves on from the new focus, even\n // out of the page, so the close must not bring it back.\n skipFocusReturnRef.current = true;\n if (e.shiftKey) {\n hourRef.current?.focus();\n } else {\n clockButtonRef.current?.focus();\n }\n setOpen(false);\n break;\n default:\n break;\n }\n };\n\n // A click anywhere on the field opens the list. Focus stays on the\n // segment that was clicked, so typing still works.\n const handleFieldClick = (e: MouseEvent<HTMLDivElement>) => {\n if (!dropdown || effectiveDisabled) return;\n const target = e.target;\n if (!(target instanceof Node)) return;\n // The clock button opens and closes the list itself.\n if (clockButtonRef.current?.contains(target)) return;\n const segments = [hourRef.current, minuteRef.current, periodRef.current];\n let segment = segments.find((s) => s?.contains(target)) ?? null;\n if (!segment) {\n // The padding or the separator: keep a focused segment, else hours.\n const active = target.ownerDocument?.activeElement;\n segment = segments.find((s) => s && s === active) ?? hourRef.current;\n if (segment && segment !== active) segment.focus();\n }\n openDropdown('pointer', 'hour', segment);\n };\n\n // Child handlers run before Radix's toggle, so the mode is set first.\n const handleClockClick = (e: MouseEvent<HTMLButtonElement>) => {\n // Enter and Space reach a button as a click with no pointer detail.\n openModeRef.current = e.detail === 0 ? 'keyboard' : 'pointer';\n initialColumnRef.current = 'hour';\n returnFocusRef.current = e.currentTarget;\n };\n\n const handleContentOpenAutoFocus = (e: Event) => {\n // Never steal focus on a pointer open.\n e.preventDefault();\n if (openModeRef.current === 'keyboard') {\n focusColumn(initialColumnRef.current);\n }\n };\n\n const handleContentCloseAutoFocus = (e: Event) => {\n e.preventDefault();\n const skip = skipFocusReturnRef.current;\n skipFocusReturnRef.current = false;\n if (skip) return;\n // Focus went down with the panel: send it back where it came from.\n const active = document.activeElement;\n if (!active || active === document.body) {\n returnFocusRef.current?.focus();\n }\n };\n\n const handleContentInteractOutside = (e: Event) => {\n const target = e.target;\n // The field is the panel's anchor: clicking or focusing a segment\n // keeps the list open.\n if (target instanceof Node && rootRef.current?.contains(target)) {\n e.preventDefault();\n return;\n }\n skipFocusReturnRef.current = true;\n };\n\n const handleContentEscapeKeyDown = () => {\n if (contentRef.current?.contains(document.activeElement)) {\n returnFocusRef.current?.focus();\n }\n };\n\n // Inside a modal Dialog, its scroll lock cancels every wheel and\n // touchmove that starts outside the dialog's own DOM, and the panel is\n // portalled outside it, so the columns would not scroll by mouse or\n // touch. Stopping the two events at the panel keeps them from the\n // lock's document listener; the column scrolls natively and\n // `overscroll-contain` keeps the page still.\n const contentCallbackRef = useCallback((node: HTMLDivElement | null) => {\n const stop = stopScrollLockPropagation;\n contentRef.current?.removeEventListener('wheel', stop);\n contentRef.current?.removeEventListener('touchmove', stop);\n contentRef.current = node;\n node?.addEventListener('wheel', stop, { passive: true });\n node?.addEventListener('touchmove', stop, { passive: true });\n }, []);\n\n const handleContentMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n // After a pointer open focus stays on the segment, so typing works:\n // a click in the list must not take it.\n if (!contentRef.current?.contains(document.activeElement)) {\n e.preventDefault();\n }\n };\n\n const handle = useMemo<TimePickerHandle>(\n () => ({\n getValue: () => currentValue,\n setValue: (next) => emit(normaliseTime(next)),\n clear: clearValue,\n isOpen: () => dropdown && openRef.current,\n open: () => {\n if (!dropdown || effectiveDisabled) return;\n openModeRef.current = 'pointer';\n handleOpenChange(true);\n },\n close: () => {\n if (dropdown) setOpen(false);\n },\n }),\n [\n currentValue,\n emit,\n clearValue,\n dropdown,\n effectiveDisabled,\n handleOpenChange,\n setOpen,\n ],\n );\n\n useImperativeHandle(ref, () => rootRef.current as HTMLDivElement, []);\n useAgentRegistration(timePickerAgent, handle, effectiveId);\n\n const field = (\n // eslint-disable-next-line jsx-a11y/role-supports-aria-props, jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions -- aria-invalid is a global ARIA state conveying group-level validation; the click is a pointer shortcut to the list, which the keyboard opens with Alt+ArrowDown or the clock button\n <div\n ref={rootRef}\n id={effectiveId}\n role=\"group\"\n aria-label={groupAriaLabel}\n aria-labelledby={groupLabelledBy}\n aria-describedby={ctx.describedBy || undefined}\n aria-invalid={ctx.invalid || undefined}\n // `aria-required` is not valid on `role=\"group\"` per ARIA 1.2 — the\n // FormField label's visible asterisk + `aria-describedby` link\n // communicate the required state instead.\n aria-disabled={effectiveDisabled || undefined}\n data-component=\"time-picker\"\n data-component-id={effectiveId}\n className={wrapperVariants({\n size,\n tone: effectiveTone,\n isDisabled: effectiveDisabled,\n opensOnClick: dropdown && !effectiveDisabled,\n className,\n })}\n onClick={dropdown ? handleFieldClick : undefined}\n >\n {/* Hour segment */}\n <span\n ref={hourRef}\n role=\"spinbutton\"\n aria-disabled={effectiveDisabled || undefined}\n aria-label={hourLabel}\n aria-valuemin={isHour12 ? 1 : 0}\n aria-valuemax={isHour12 ? 12 : 23}\n aria-valuenow={\n currentValue === null\n ? undefined\n : isHour12\n ? to12Hour(currentValue.hours)\n : currentValue.hours\n }\n aria-valuetext={currentValue === null ? unsetLabel : displayHour}\n aria-keyshortcuts={dropdown ? 'Alt+ArrowDown' : undefined}\n tabIndex={effectiveDisabled ? -1 : 0}\n inputMode=\"numeric\"\n onKeyDown={handleHourKeyDown}\n onBlur={handleHourBlur}\n className={segmentVariants({ size })}\n >\n {displayHour}\n </span>\n\n {/* Separator */}\n <span aria-hidden=\"true\" className={separatorVariants({ size })}>\n {separator}\n </span>\n\n {/* Minute segment */}\n <span\n ref={minuteRef}\n role=\"spinbutton\"\n aria-disabled={effectiveDisabled || undefined}\n aria-label={minuteLabel}\n aria-valuemin={0}\n aria-valuemax={59}\n aria-valuenow={currentValue?.minutes}\n aria-valuetext={currentValue === null ? unsetLabel : displayMinute}\n aria-keyshortcuts={dropdown ? 'Alt+ArrowDown' : undefined}\n tabIndex={effectiveDisabled ? -1 : 0}\n inputMode=\"numeric\"\n onKeyDown={handleMinuteKeyDown}\n onBlur={handleMinuteBlur}\n className={segmentVariants({ size })}\n >\n {displayMinute}\n </span>\n\n {/* AM/PM toggle (12h mode only) */}\n {isHour12 ? (\n <span\n ref={periodRef}\n role=\"spinbutton\"\n aria-disabled={effectiveDisabled || undefined}\n aria-label={periodLabel}\n aria-valuemin={0}\n aria-valuemax={1}\n aria-valuenow={currentValue === null ? undefined : isPM ? 1 : 0}\n aria-valuetext={\n currentValue === null\n ? unsetLabel\n : isPM\n ? periods.pm\n : periods.am\n }\n aria-keyshortcuts={dropdown ? 'Alt+ArrowDown' : undefined}\n tabIndex={effectiveDisabled ? -1 : 0}\n onKeyDown={handlePeriodKeyDown}\n className={periodButtonVariants({ size })}\n >\n {currentValue === null ? '--' : isPM ? periods.pm : periods.am}\n </span>\n ) : null}\n\n {allowEmpty ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n disabled={effectiveDisabled || currentValue === null}\n // Prevent blur from committing pending digits before the clear.\n onPointerDown={(event) => {\n event.preventDefault();\n cancelHourPending();\n cancelMinutePending();\n }}\n onClick={(event) => {\n event.stopPropagation();\n clearValue();\n hourRef.current?.focus();\n }}\n // An empty field has nothing to clear: keep the slot, hide the control.\n className={clockButtonVariants({\n size,\n trailing: !dropdown,\n className: currentValue === null ? 'ds:invisible' : undefined,\n })}\n >\n <X aria-hidden=\"true\" />\n </button>\n ) : null}\n\n {/* Clock button: opens the list (dropdown only). Radix adds\n aria-haspopup=\"dialog\", aria-expanded and aria-controls. */}\n {dropdown ? (\n <Popover.Trigger asChild>\n <button\n ref={clockButtonRef}\n type=\"button\"\n aria-label={openDropdownLabel}\n disabled={effectiveDisabled}\n onClick={handleClockClick}\n className={clockButtonVariants({ size })}\n >\n <Clock aria-hidden=\"true\" />\n </button>\n </Popover.Trigger>\n ) : null}\n </div>\n );\n\n if (!dropdown) return field;\n\n return (\n <Popover.Root open={isOpen} onOpenChange={handleOpenChange}>\n {/* The whole field anchors the panel, so it lines up with the\n field's start rather than the clock button. */}\n <Popover.Anchor asChild>{field}</Popover.Anchor>\n <Popover.Portal>\n <Popover.Content\n ref={contentCallbackRef}\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n dir={dropdownDir}\n /* Portalled to <body>, outside the field's [data-component]\n scope: it needs its own marker for the kit's baselines. */\n data-component=\"time-picker-dropdown\"\n aria-label={groupAriaLabel}\n aria-labelledby={groupLabelledBy}\n className={dropdownContentVariants({ size })}\n onOpenAutoFocus={handleContentOpenAutoFocus}\n onCloseAutoFocus={handleContentCloseAutoFocus}\n onInteractOutside={handleContentInteractOutside}\n onEscapeKeyDown={handleContentEscapeKeyDown}\n onMouseDown={handleContentMouseDown}\n >\n <TimePickerDropdownColumns\n columns={columns}\n columnRefs={columnRefs}\n onPick={pickOption}\n onOptionKeyDown={handleOptionKeyDown}\n />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n },\n);\n\nTimePicker.displayName = 'TimePicker';\n"],"names":["timePickerAgent","handle","value","hh","mm","args","hStr","mStr","detectHour12","locale","resolved","getLocalePeriodLabels","am","_a","p","pm","_b","clamp","min","max","lastMinuteOnGrid","step","snapMinuteToStep","rounded","stepMinute","direction","last","next","previous","normaliseTime","whole","n","to12Hour","h24","to24Hour","h12","isPM","pad2","stopScrollLockPropagation","event","wrapperVariants","cva","segmentVariants","periodButtonVariants","separatorVariants","clockButtonVariants","dropdownContentVariants","columnVariants","optionVariants","TimePickerDropdownColumns","columns","columnRefs","onPick","onOptionKeyDown","selectionKey","c","hasCentredRef","useRef","useIsomorphicLayoutEffect","centreAll","list","option","top","bottom","inView","jsx","Fragment","column","columnIndex","node","optionIndex","selected","TimePicker","forwardRef","props","ref","allowEmpty","defaultValue","onChange","hour12Prop","minuteStep","fullWidthSeparator","periodLabelsProp","size","dropdown","disabled","className","id","ariaLabel","ariaLabelledBy","onEmptyChange","t","i18n","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","effectiveId","useFormFieldControlId","effectiveDisabled","effectiveTone","isHour12","localePeriods","periods","isControlled","internalValue","setInternalValue","useState","rawValue","currentValue","useMemo","editBase","latestValueRef","emit","useCallback","rootRef","hourRef","minuteRef","periodRef","hourPendingRef","minutePendingRef","hourTimerRef","minuteTimerRef","cancelHourPending","cancelMinutePending","clearValue","clearFromKeyboard","commitHourDigits","digits","base","clamped","commitMinuteDigits","flushHourPending","pending","flushMinutePending","flushRef","useEffect","separator","unsetLabel","displayHour","displayMinute","open","setOpenState","isOpen","openRef","setOpen","dropdownDir","setDropdownDir","openModeRef","initialColumnRef","returnFocusRef","skipFocusReturnRef","contentRef","clockButtonRef","focusColumn","handleOpenChange","root","openDropdown","mode","returnTo","openFromSegment","handleHourKeyDown","delta","maxH","newH","handleMinuteKeyDown","_c","handlePeriodKeyDown","basePM","handleHourBlur","handleMinuteBlur","hourLabel","minuteLabel","periodLabel","groupLabel","openDropdownLabel","formFieldLabelId","hasFormFieldLabel","isLabelTarget","setIsLabelTarget","groupLabelledBy","groupAriaLabel","clearFieldLabel","clearLabel","scope","label","sync","observer","onLabelClick","hourOptions","_","i","hour","minuteOptions","options","minute","hourSelected","o","minuteSelected","pickOption","optionValue","hours","wantPM","handleOptionKeyDown","focusOption","index","forward","target","handleFieldClick","segments","segment","s","active","handleClockClick","handleContentOpenAutoFocus","handleContentCloseAutoFocus","skip","handleContentInteractOutside","handleContentEscapeKeyDown","contentCallbackRef","stop","handleContentMouseDown","useImperativeHandle","useAgentRegistration","field","jsxs","X","Popover","Clock"],"mappings":";;;;;;;;;;AAeO,MAAMA,KAAkD;AAAA,EAC7D,IAAI;AAAA,EACJ,cAAc,CAAC,iBAAiB,aAAa,QAAQ,OAAO;AAAA,EAC5D,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAW;AAChB,cAAMC,IAAQD,EAAO,SAAA;AACrB,YAAI,CAACC,EAAO,QAAO;AACnB,cAAMC,IAAK,OAAOD,EAAM,KAAK,EAAE,SAAS,GAAG,GAAG,GACxCE,IAAK,OAAOF,EAAM,OAAO,EAAE,SAAS,GAAG,GAAG;AAChD,eAAO,GAAGC,CAAE,IAAIC,CAAE;AAAA,MACpB;AAAA,IAAA;AAAA,IAEF,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACH,MAAWA,EAAO,OAAA;AAAA,IAAO;AAAA,EAClC;AAAA,EAEF,SAAS;AAAA,IACP,UAAU;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM,EAAE,MAAM,UAAU,SAAS,kCAAA;AAAA,QAAkC;AAAA,QAErE,UAAU,CAAC,MAAM;AAAA,MAAA;AAAA,MAEnB,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,WAAW,MAAM,wBAAwB;AAAA,MACpE,QAAQ,CAACA,GAAQI,MAA2B;AAC1C,cAAM,CAACC,GAAMC,CAAI,IAAIF,EAAK,KAAK,MAAM,GAAG;AACxC,QAAAJ,EAAO,SAAS;AAAA,UACd,OAAO,OAAO,SAASK,KAAQ,KAAK,EAAE;AAAA,UACtC,SAAS,OAAO,SAASC,KAAQ,KAAK,EAAE;AAAA,QAAA,CACzC;AAAA,MACH;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACN,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,KAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;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;AChDA,SAASO,GAAaC,GAAyB;AAC7C,MAAI;AACF,UAAMC,IAAW,IAAI,KAAK,eAAeD,GAAQ;AAAA,MAC/C,MAAM;AAAA,IAAA,CACP,EAAE,gBAAA;AACH,WAAOC,EAAS,cAAc,SAASA,EAAS,cAAc;AAAA,EAChE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,SAASC,GAAsBF,GAA4C;;AACzE,MAAI;AACF,UAAMG,MACJC,IAAA,IAAI,KAAK,eAAeJ,GAAQ;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA,CACT,EACE,cAAc,IAAI,KAAK,KAAM,GAAG,GAAG,CAAC,CAAC,EACrC,KAAK,CAACK,MAAMA,EAAE,SAAS,WAAW,MALrC,gBAAAD,EAKwC,UAAS,MAE7CE,MACJC,IAAA,IAAI,KAAK,eAAeP,GAAQ;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA,CACT,EACE,cAAc,IAAI,KAAK,KAAM,GAAG,GAAG,EAAE,CAAC,EACtC,KAAK,CAACK,MAAMA,EAAE,SAAS,WAAW,MALrC,gBAAAE,EAKwC,UAAS;AAEnD,WAAO,EAAE,IAAAJ,GAAI,IAAAG,EAAA;AAAA,EACf,QAAQ;AACN,WAAO,EAAE,IAAI,MAAM,IAAI,KAAA;AAAA,EACzB;AACF;AAGA,SAASE,EAAMf,GAAegB,GAAaC,GAAqB;AAC9D,SAAO,KAAK,IAAIA,GAAK,KAAK,IAAID,GAAKhB,CAAK,CAAC;AAC3C;AAGA,SAASkB,GAAiBC,GAAsB;AAC9C,SAAO,KAAK,MAAM,KAAKA,CAAI,IAAIA;AACjC;AAOA,SAASC,GAAiBpB,GAAemB,GAAsB;AAC7D,QAAME,IAAU,KAAK,MAAMN,EAAMf,GAAO,GAAG,EAAE,IAAImB,CAAI,IAAIA;AACzD,SAAOJ,EAAMM,GAAS,GAAGH,GAAiBC,CAAI,CAAC;AACjD;AAGA,SAASG,GAAWtB,GAAemB,GAAcI,GAA2B;AAC1E,QAAMC,IAAON,GAAiBC,CAAI;AAClC,MAAII,MAAc,GAAG;AACnB,UAAME,IAAO,KAAK,MAAMzB,IAAQmB,CAAI,IAAIA,IAAOA;AAC/C,WAAOM,IAAOD,IAAO,IAAIC;AAAA,EAC3B;AACA,QAAMC,IAAW,KAAK,KAAK1B,IAAQmB,CAAI,IAAIA,IAAOA;AAClD,SAAOO,IAAW,IAAIF,IAAOE;AAC/B;AAGA,SAASC,GAAc3B,GAA6B;AAClD,QAAM4B,IAAQ,CAACC,MAAe,OAAO,SAASA,CAAC,IAAI,KAAK,MAAMA,CAAC,IAAI;AACnE,SAAO;AAAA,IACL,OAAOd,EAAMa,EAAM5B,EAAM,KAAK,GAAG,GAAG,EAAE;AAAA,IACtC,SAASe,EAAMa,EAAM5B,EAAM,OAAO,GAAG,GAAG,EAAE;AAAA,EAAA;AAE9C;AAGA,SAAS8B,GAASC,GAAqB;AACrC,SAAIA,MAAQ,IAAU,KAClBA,IAAM,KAAWA,IAAM,KACpBA;AACT;AAGA,SAASC,GAASC,GAAaC,GAAuB;AACpD,SAAIA,IAAaD,MAAQ,KAAK,KAAKA,IAAM,KAClCA,MAAQ,KAAK,IAAIA;AAC1B;AAEA,MAAME,KAAO,CAACN,MAAsB,OAAOA,CAAC,EAAE,SAAS,GAAG,GAAG;AAG7D,SAASO,GAA0BC,GAAoB;AACrD,EAAAA,EAAM,gBAAA;AACR;AAMA,MAAMC,KAAkBC;AAAA,EACtB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,YAAY;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA;AAAA,MAGT,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,cAAc;AAAA,IAAA;AAAA,EAChB;AAEJ,GAEMC,KAAkBD;AAAA,EACtB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAEME,KAAuBF;AAAA,EAC3B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAEMG,KAAoBH,EAAI,2CAA2C;AAAA,EACvE,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB,EAAE,MAAM,KAAA;AAC3B,CAAC,GAQKI,KAAsBJ;AAAA,EAC1B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA;AAAA,MAER,UAAU,EAAE,MAAM,mCAAmC,OAAO,GAAA;AAAA,MAC5D,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,MAAM,UAAU,GAAA;AAAA,IACzC,kBAAkB;AAAA,MAChB,EAAE,MAAM,MAAM,UAAU,IAAM,WAAW,6BAAA;AAAA,MACzC;AAAA,QACE,MAAM,CAAC,MAAM,IAAI;AAAA,QACjB,UAAU;AAAA,QACV,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EACF;AAEJ,GAOMK,KAA0BL;AAAA,EAC9B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAGMM,KAAiBN;AAAA,EACrB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB,EAAE,WAAW,GAAA;AAAA,EAAM;AAExC,GAEMO,KAAiBP;AAAA,EACrB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA;AAAA;AAAA,MAGR,UAAU;AAAA,QACR,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA;AAAA,UAEA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,OAAO;AAAA,UACL;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,iBAAiB,EAAE,UAAU,GAAA;AAAA,EAAM;AAEvC;AAkGA,SAASQ,GAA0B;AAAA,EACjC,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,iBAAAC;AACF,GAAmC;AACjC,QAAMC,IAAeJ,EAAQ,IAAI,CAACK,MAAMA,EAAE,aAAa,EAAE,KAAK,GAAG,GAC3DC,IAAgBC,EAAO,EAAK;AAKlC,SAAAC,GAA0B,MAAM;AAC9B,UAAMC,IAAY,CAACH,EAAc;AACjC,IAAAA,EAAc,UAAU;AACxB,eAAWI,KAAQ,OAAO,OAAOT,EAAW,OAAO,GAAG;AACpD,UAAI,CAACS,EAAM;AACX,YAAMC,IACJD,EAAK,cAA2B,wBAAwB,KACxDA,EAAK,cAA2B,+BAA+B;AACjE,UAAI,CAACC,EAAQ;AACb,YAAMC,IAAMD,EAAO,WACbE,IAASD,IAAMD,EAAO,cACtBG,IACJF,KAAOF,EAAK,aAAaG,KAAUH,EAAK,YAAYA,EAAK;AAC3D,OAAID,KAAa,CAACK,OAChBJ,EAAK,YAAYE,KAAOF,EAAK,eAAeC,EAAO,gBAAgB;AAAA,IAEvE;AAAA,EACF,GAAG,CAACP,GAAcH,CAAU,CAAC,GAG3B,gBAAAc,EAAAC,IAAA,EACG,UAAAhB,EAAQ,IAAI,CAACiB,GAAQC,MACpB,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,KAAK,CAACI,MAAS;AACb,QAAAlB,EAAW,QAAQgB,EAAO,GAAG,IAAIE;AAAA,MACnC;AAAA,MACA,MAAK;AAAA,MACL,cAAYF,EAAO;AAAA,MACnB,eAAaA,EAAO;AAAA,MACpB,WAAWpB,GAAe,EAAE,WAAWqB,IAAc,GAAG;AAAA,MAEvD,UAAAD,EAAO,QAAQ,IAAI,CAACN,GAAQS,MAAgB;AAC3C,cAAMC,IAAWD,MAAgBH,EAAO;AACxC,eACE,gBAAAF;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,iBAAeM;AAAA,YACf,UAAUD,MAAgBH,EAAO,cAAc,IAAI;AAAA,YACnD,cAAYN,EAAO;AAAA,YACnB,WAAWb,GAAe,EAAE,UAAAuB,GAAU;AAAA,YACtC,SAAS,MAAMnB,EAAOe,EAAO,KAAKN,EAAO,KAAK;AAAA,YAC9C,WAAW,CAACtB,MACVc,EAAgBd,GAAO6B,GAAaE,CAAW;AAAA,YAGhD,UAAAT,EAAO;AAAA,UAAA;AAAA,UAXHA,EAAO;AAAA,QAAA;AAAA,MAclB,CAAC;AAAA,IAAA;AAAA,IA3BIM,EAAO;AAAA,EAAA,CA6Bf,GACH;AAEJ;AAMO,MAAMK,KAAaC;AAAA,EACxB,CAACC,GAAOC,MAAQ;AACd,UAAM;AAAA,MACJ,OAAAzE;AAAA,MACA,YAAA0E,IAAa;AAAA,MACb,cAAAC;AAAA,MACA,UAAAC;AAAA,MACA,QAAQC;AAAA,MACR,YAAAC,IAAa;AAAA,MACb,oBAAAC,IAAqB;AAAA,MACrB,cAAcC;AAAA,MACd,MAAAC,IAAO;AAAA,MACP,UAAAC,IAAW;AAAA,MACX,UAAAC;AAAA,MACA,WAAAC;AAAA,MACA,IAAAC;AAAA,MACA,cAAcC;AAAA,MACd,mBAAmBC;AAAA,IAAA,IACjBf,GACEgB,KAAgBhB,EAAM,aAAaA,EAAM,WAAW,QACpD,EAAE,GAAAiB,GAAG,MAAAC,OAASC,GAAe,IAAI,GACjCC,IAAMC,GAAA,GAENC,KAAcC,GAAWC,EAAgB,MAAM,MAC/CC,IAAcC,GAAsBN,GAAKP,EAAE,GAC3Cc,IAAoB,GAAQP,EAAI,YAAYT,KAC5CiB,KAAgBR,EAAI,UAAU,UAAU,WAExCS,IACJxB,MAAe,SAAYA,IAAavE,GAAaoF,GAAK,QAAQ,GAC9DY,KAAgB7F,GAAsBiF,GAAK,QAAQ,GACnDa,IAAUvB,KAAoBsB,IAE9BE,KAAexG,MAAU,QACzB,CAACyG,IAAeC,EAAgB,IAAIC;AAAA,MACxC3G,MAAU,SACNA,IACA2E,MAAiB,SACfA,IACAD,IACE,OACA,EAAE,OAAO,GAAG,SAAS,EAAA;AAAA,IAAE,GAE3BkC,KAAWJ,KAAexG,IAAQyG,IAClCI,IAAeC;AAAA,MACnB,MAAOpC,IAAakC,KAAYA,MAAY,EAAE,OAAO,GAAG,SAAS,EAAA;AAAA,MACjE,CAAClC,GAAYkC,EAAQ;AAAA,IAAA,GAGjBG,IAAW,MAAMC,EAAe,WAAW,EAAE,OAAO,GAAG,SAAS,EAAA,GAIhEA,IAAiBzD,EAAOsD,CAAY;AAC1C,IAAAG,EAAe,UAAUH;AAEzB,UAAMI,IAAOC;AAAA,MACX,CAACzF,MAA2B;AAC1B,QAAAuF,EAAe,UAAUvF,GACpB+E,MAAcE,GAAiBjF,CAAI,GACpCA,MAAS,OAAM+D,MAAA,QAAAA,GAAgB,uBACnB/D;AAAA,MAClB;AAAA,MACA,CAAC+E,IAAc5B,GAAUY,EAAa;AAAA,IAAA,GAIlC2B,IAAU5D,EAAuB,IAAI,GACrC6D,IAAU7D,EAAwB,IAAI,GACtC8D,IAAY9D,EAAwB,IAAI,GACxC+D,KAAY/D,EAAwB,IAAI,GAQxCgE,IAAiBhE,EAAO,EAAE,GAC1BiE,IAAmBjE,EAAO,EAAE,GAC5BkE,IAAelE,EAA6C,IAAI,GAChEmE,IAAiBnE,EAA6C,IAAI,GAElEoE,IAAoB,MAAM;AAC9B,MAAAJ,EAAe,UAAU,IACrBE,EAAa,YACf,aAAaA,EAAa,OAAO,GACjCA,EAAa,UAAU;AAAA,IAE3B,GAEMG,IAAsB,MAAM;AAChC,MAAAJ,EAAiB,UAAU,IACvBE,EAAe,YACjB,aAAaA,EAAe,OAAO,GACnCA,EAAe,UAAU;AAAA,IAE7B;AAGA,IAAAlE,GAA0B,MAAM;AAC9B,OAAIxD,MAAU,QAAQmG,OACpBwB,EAAA,GACAC,EAAA;AAAA,IAEJ,GAAG,CAAC5H,GAAOmG,CAAiB,CAAC;AAE7B,UAAM0B,KAAaX,EAAY,MAAM;AACnC,MAAAK,EAAe,UAAU,IACzBC,EAAiB,UAAU,IACvBC,EAAa,WAAS,aAAaA,EAAa,OAAO,GACvDC,EAAe,WAAS,aAAaA,EAAe,OAAO,GAC/DD,EAAa,UAAU,MACvBC,EAAe,UAAU,MACzBT,EAAKvC,IAAa,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG;AAAA,IACnD,GAAG,CAACA,GAAYuC,CAAI,CAAC,GAEfa,KAAoB,CAAC,MACrB,CAACpD,KAAe,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAC9C,MACT,EAAE,eAAA,GACFmD,GAAA,GACO,KAGHE,KAAmB,CAACC,MAAmB;AAC3C,YAAMC,IAAOlB,EAAA,GACPmB,IAAUnH;AAAA,QACd,SAASiH,GAAQ,EAAE;AAAA,QACnB3B,IAAW,IAAI;AAAA,QACfA,IAAW,KAAK;AAAA,MAAA;AAElB,MAAAY,EAAK;AAAA,QACH,GAAGgB;AAAA,QACH,OAAO5B,IAAWrE,GAASkG,GAASD,EAAK,SAAS,EAAE,IAAIC;AAAA,MAAA,CACzD;AAAA,IACH,GAEMC,KAAqB,CAACH,MAAmB;AAC7C,MAAAf,EAAK;AAAA,QACH,GAAGF,EAAA;AAAA,QACH,SAAS3F,GAAiB,SAAS4G,GAAQ,EAAE,GAAGlD,CAAU;AAAA,MAAA,CAC3D;AAAA,IACH,GAEMsD,KAAmB,MAAM;AAC7B,YAAMC,IAAUd,EAAe;AAC/B,MAAAI,EAAA,GACIU,QAA0BA,CAAO;AAAA,IACvC,GAEMC,KAAqB,MAAM;AAC/B,YAAMD,IAAUb,EAAiB;AACjC,MAAAI,EAAA,GACIS,QAA4BA,CAAO;AAAA,IACzC,GAIME,KAAWhF,EAAO;AAAA,MACtB,MAAM6E;AAAA,MACN,QAAQE;AAAA,IAAA,CACT;AACD,IAAAC,GAAS,UAAU,EAAE,MAAMH,IAAkB,QAAQE,GAAA,GAGrDE,GAAU,MACD,MAAM;AACX,MAAIf,EAAa,WAAS,aAAaA,EAAa,OAAO,GACvDC,EAAe,WAAS,aAAaA,EAAe,OAAO;AAAA,IACjE,GACC,CAAA,CAAE;AAEL,UAAMe,KAAY1D,IAAqB,MAAM,KAGvC2D,KAAajD,EAAE,2BAA2B,aAAa,GACvDkD,KACJ9B,MAAiB,OACb,OAEE1E,GADFkE,IACOvE,GAAS+E,EAAa,KAAK,IAC3BA,EAAa,KADe,GAEnC+B,KACJ/B,MAAiB,OAAO,OAAO1E,GAAK0E,EAAa,OAAO,GACpD3E,MAAQ2E,KAAA,gBAAAA,EAAc,UAAS,MAAM,IAMrC,CAACgC,GAAMC,EAAY,IAAInC,GAAS,EAAK,GACrCoC,KAAS7D,KAAY2D,GAErBG,KAAUzF,EAAOsF,CAAI;AAC3B,IAAAG,GAAQ,UAAUH;AAClB,UAAMI,IAAU/B,EAAY,CAACzF,MAAkB;AAC7C,MAAAuH,GAAQ,UAAUvH,GAClBqH,GAAarH,CAAI;AAAA,IACnB,GAAG,CAAA,CAAE,GACC,CAACyH,IAAaC,EAAc,IAAIxC,GAAwB,KAAK,GAE7DyC,KAAc7F,EAA+B,SAAS,GACtD8F,KAAmB9F,EAAgB,MAAM,GAEzC+F,IAAiB/F,EAA2B,IAAI,GAEhDgG,IAAqBhG,EAAO,EAAK,GACjCiG,IAAajG,EAA8B,IAAI,GAC/CkG,KAAiBlG,EAA0B,IAAI,GAC/CN,KAAaM;AAAA,MACjB,CAAA;AAAA,IAAC,GAGGmG,KAAcxC,EAAY,CAACjD,MAAoB;;AACnD,OAAAnD,KAAAH,IAAAsC,GAAW,QAAQgB,CAAM,MAAzB,gBAAAtD,EACI,cAA2B,qCAD/B,QAAAG,EAEI,MAAM,EAAE,eAAe;IAC7B,GAAG,CAAA,CAAE,GAEC6I,KAAmBzC;AAAA,MACvB,CAACzF,MAAkB;AACjB,YAAIA,GAAM;AACR,cAAI0E,EAAmB;AAGvB,gBAAMyD,IAAOzC,EAAQ;AACrB,UAAAgC;AAAA,YACES,KAAQ,OAAO,iBAAiBA,CAAI,EAAE,cAAc,QAChD,QACA;AAAA,UAAA,GAENL,EAAmB,UAAU;AAAA,QAC/B;AACA,QAAAN,EAAQxH,CAAI;AAAA,MACd;AAAA,MACA,CAAC0E,GAAmB8C,CAAO;AAAA,IAAA,GAGvBY,KAAe,CACnBC,GACA7F,GACA8F,MACG;AACH,UAAI,GAAC7E,KAAYiB,IAIjB;AAAA,YAHAiD,GAAY,UAAUU,GACtBT,GAAiB,UAAUpF,GAC3BqF,EAAe,UAAUS,GACrBlB,GAAM;AACR,UAAIiB,MAAS,cAAYJ,GAAYzF,CAAM;AAC3C;AAAA,QACF;AACA,QAAA0F,GAAiB,EAAI;AAAA;AAAA,IACvB;AAGA,IAAAnB,GAAU,MAAM;AACd,MAAIK,MAAS,CAAC3D,KAAYiB,QAA4B,EAAK;AAAA,IAC7D,GAAG,CAAC0C,GAAM3D,GAAUiB,GAAmB8C,CAAO,CAAC;AAI/C,UAAMe,KAAkB,CACtB,GACA/F,MAEI,CAACiB,KAAY,CAAC,EAAE,SAAe,KAC/B,EAAE,QAAQ,aAAa2D,KACzB,EAAE,eAAA,GACFI,EAAQ,EAAK,GACN,MAEL,EAAE,QAAQ,cAAoB,MAClC,EAAE,eAAA,GACFb,GAAA,GACAE,GAAA,GACAuB,GAAa,YAAY5F,GAAQ,EAAE,aAAa,GACzC,KAIHgG,KAAoB,CAAC,MAAsC;;AAC/D,UAAI,CAAA9D,KACA,CAAA2B,GAAkB,CAAC,KACnB,CAAAkC,GAAgB,GAAG,MAAM,GAE7B;AAAA,YAAI,EAAE,QAAQ,aAAa,EAAE,QAAQ,aAAa;AAChD,YAAE,eAAA,GACFrC,EAAA;AACA,gBAAMM,IAAOlB,EAAA,GACPmD,IAAQ,EAAE,QAAQ,YAAY,IAAI,IAClCC,IAAO;AACb,cAAIC,IAAOnC,EAAK,QAAQiC;AACxB,UAAIE,IAAO,MAAGA,IAAOD,IACjBC,IAAOD,MAAMC,IAAO,IACxBnD,EAAK,EAAE,GAAGgB,GAAM,OAAOmC,GAAM;AAC7B;AAAA,QACF;AAEA,YAAI,EAAE,QAAQ,SAAS,CAAC,EAAE,UAAU;AAClC,YAAE,eAAA,IAEFzJ,IAAA0G,EAAU,YAAV,QAAA1G,EAAmB;AACnB;AAAA,QACF;AAEA,YAAI,EAAE,IAAI,WAAW,KAAK,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AACtD,YAAE,eAAA,GACE8G,EAAa,WAAS,aAAaA,EAAa,OAAO;AAC3D,gBAAMhG,IAAO8F,EAAe,UAAU,EAAE;AAIxC,UADE9F,EAAK,UAAU,KAAK,SAASA,GAAM,EAAE,KAAK4E,IAAW,IAAI,MAEzDsB,EAAA,GACAI,GAAiBtG,CAAI,IACrBX,IAAAuG,EAAU,YAAV,QAAAvG,EAAmB,YAEnByG,EAAe,UAAU9F,GACzBgG,EAAa,UAAU;AAAA,YACrB,MAAMc,GAAS,QAAQ,KAAA;AAAA,YACvB;AAAA,UAAA;AAAA,QAGN;AAAA;AAAA,IACF,GAGM8B,KAAsB,CAAC,MAAsC;;AACjE,UAAI,CAAAlE,KACA,CAAA2B,GAAkB,CAAC,KACnB,CAAAkC,GAAgB,GAAG,QAAQ,GAE/B;AAAA,YAAI,EAAE,QAAQ,aAAa,EAAE,QAAQ,aAAa;AAChD,YAAE,eAAA,GACFpC,EAAA;AACA,gBAAMK,IAAOlB,EAAA;AACb,UAAAE,EAAK;AAAA,YACH,GAAGgB;AAAA,YACH,SAAS3G;AAAA,cACP2G,EAAK;AAAA,cACLnD;AAAA,cACA,EAAE,QAAQ,YAAY,IAAI;AAAA,YAAA;AAAA,UAC5B,CACD;AACD;AAAA,QACF;AAEA,YAAI,EAAE,QAAQ,SAAS,CAAC,EAAE,YAAYuB,GAAU;AAC9C,YAAE,eAAA,IACF1F,IAAA2G,GAAU,YAAV,QAAA3G,EAAmB;AACnB;AAAA,QACF;AAEA,YAAI,EAAE,QAAQ,SAAS,EAAE,UAAU;AACjC,YAAE,eAAA,IACFG,IAAAsG,EAAQ,YAAR,QAAAtG,EAAiB;AACjB;AAAA,QACF;AAEA,YAAI,EAAE,IAAI,WAAW,KAAK,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AACtD,YAAE,eAAA,GACE4G,EAAe,WAAS,aAAaA,EAAe,OAAO;AAC/D,gBAAMjG,IAAO+F,EAAiB,UAAU,EAAE;AAG1C,UADiB/F,EAAK,UAAU,KAAK,SAASA,GAAM,EAAE,IAAI,KAExDmG,EAAA,GACAO,GAAmB1G,CAAI,GACnB4E,OACFiE,IAAAhD,GAAU,YAAV,QAAAgD,EAAmB,aAGrB9C,EAAiB,UAAU/F,GAC3BiG,EAAe,UAAU;AAAA,YACvB,MAAMa,GAAS,QAAQ,OAAA;AAAA,YACvB;AAAA,UAAA;AAAA,QAGN;AAAA;AAAA,IACF,GAGMgC,KAAsB,CAAC,MAAsC;;AAGjE,UAFIpE,KACA2B,GAAkB,CAAC,KACnBkC,GAAgB,GAAG,QAAQ,EAAG;AAClC,YAAM/B,IAAOlB,EAAA,GACPyD,IAASvC,EAAK,SAAS;AAE7B,UAAI,EAAE,QAAQ,aAAa,EAAE,QAAQ,aAAa;AAChD,UAAE,eAAA;AACF,cAAMmC,IAAOI,IAASvC,EAAK,QAAQ,KAAKA,EAAK,QAAQ;AACrD,QAAAhB,EAAK,EAAE,GAAGgB,GAAM,OAAOlH,EAAMqJ,GAAM,GAAG,EAAE,GAAG;AAC3C;AAAA,MACF;AAEA,UAAI,EAAE,QAAQ,SAAS,EAAE,UAAU;AACjC,UAAE,eAAA,IACFzJ,IAAA0G,EAAU,YAAV,QAAA1G,EAAmB;AACnB;AAAA,MACF;AAGA,OAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,SAC7B,EAAE,eAAA,IACEqG,EAAe,YAAY,QAAQwD,MACrCvD,EAAK,EAAE,GAAGgB,GAAM,OAAOuC,IAASvC,EAAK,QAAQ,KAAKA,EAAK,OAAO,KAG9D,EAAE,QAAQ,OAAO,EAAE,QAAQ,SAC7B,EAAE,eAAA,GACGuC,KACHvD,EAAK,EAAE,GAAGgB,GAAM,OAAOA,EAAK,QAAQ,IAAI;AAAA,IAG9C,GAIMwC,KAAiB,MAAM;AAC3B,MAAArC,GAAA;AAAA,IACF,GAEMsC,KAAmB,MAAM;AAC7B,MAAApC,GAAA;AAAA,IACF,GAEMqC,KAAYlF,EAAE,0BAA0B,MAAM,GAC9CmF,KAAcnF,EAAE,4BAA4B,QAAQ,GACpDoF,KAAcpF,EAAE,4BAA4B,QAAQ,GACpDqF,KAAarF,EAAE,gCAAgC,MAAM,GACrDsF,KAAoBtF;AAAA,MACxB;AAAA,MACA;AAAA,IAAA,GAMIuF,KAAmB,GAAGpF,EAAI,EAAE,UAC5BqF,KAAoBnF,MAAe,EAAQF,EAAI,OAC/C,CAACsF,IAAeC,EAAgB,IAAIxE,GAAS,EAAI,GAIjDyE,KACJ7F,OACC,CAACD,MAAa2F,MAAqBC,KAChCF,KACA,SACAK,KAAiBD,KACnB,SACC9F,MAAawF,IAGZQ,KACJhG,OAAc2F,KAAoBrF,EAAI,QAAQ,SAC1C2F,KAAaD,KACf7F,EAAE,gCAAgC,EAAE,OAAO6F,GAAA,CAAiB,IAC5D7F,EAAE,mBAAmB;AAIzB,IAAA+C,GAAU,MAAM;;AACd,UAAI,CAACyC,GAAmB;AACxB,YAAMO,KAAQ7K,IAAAwG,EAAQ,YAAR,gBAAAxG,EAAiB,eACzB8K,IACJD,aAAiB,YAAYA,aAAiB,aAC1CA,EAAM,eAAeR,EAAgB,IACrC;AACN,UAAI,EAAES,aAAiB,mBAAmB;AACxC,QAAAN,GAAiB,EAAK;AACtB;AAAA,MACF;AACA,YAAMO,IAAO,MAAMP,GAAiBM,EAAM,YAAYxF,CAAW;AACjE,MAAAyF,EAAA;AAEA,YAAMC,IAAW,IAAI,iBAAiBD,CAAI;AAC1C,MAAAC,EAAS,QAAQF,GAAO,EAAE,YAAY,IAAM,iBAAiB,CAAC,KAAK,GAAG;AACtE,YAAMG,IAAe,MAAM;;AACzB,QAAIH,EAAM,YAAYxF,KAAeE,MACrCxF,IAAAyG,EAAQ,YAAR,QAAAzG,EAAiB;AAAA,MACnB;AACA,aAAA8K,EAAM,iBAAiB,SAASG,CAAY,GACrC,MAAM;AACX,QAAAD,EAAS,WAAA,GACTF,EAAM,oBAAoB,SAASG,CAAY;AAAA,MACjD;AAAA,IACF,GAAG,CAACX,IAAmBD,IAAkB/E,GAAaE,CAAiB,CAAC;AAMxE,UAAM0F,KAAc/E;AAAA,MAClB,MACE,MAAM;AAAA,QAAK,EAAE,QAAQT,IAAW,KAAK,GAAA;AAAA,QAAM,CAACyF,GAAGC,MAC7C1F,IAAW0F,IAAI,IAAIA;AAAA,MAAA,EACnB,IAAI,CAACC,OAAU,EAAE,OAAOA,GAAM,OAAO7J,GAAK6J,CAAI,EAAA,EAAI;AAAA,MACtD,CAAC3F,CAAQ;AAAA,IAAA,GAEL4F,KAAgBnF,GAAwB,MAAM;AAClD,YAAMoF,IAA0B,CAAA;AAChC,eAASC,IAAS,GAAGA,KAAU,IAAIA,KAAUrH;AAC3C,QAAAoH,EAAQ,KAAK,EAAE,OAAOC,GAAQ,OAAOhK,GAAKgK,CAAM,GAAG;AAErD,aAAOD;AAAA,IACT,GAAG,CAACpH,CAAU,CAAC,GAET9B,IAA4B,CAAA;AAClC,QAAIkC,GAAU;AACZ,YAAMkH,IAAeP,GAAY;AAAA,QAC/B,CAACQ,MACCA,EAAE,WACDxF,MAAiB,OACd,SACAR,IACEvE,GAAS+E,EAAa,KAAK,IAC3BA,EAAa;AAAA,MAAA;AAEvB,MAAA7D,EAAQ,KAAK;AAAA,QACX,KAAK;AAAA,QACL,OAAO2H;AAAA,QACP,SAASkB;AAAA,QACT,eAAeO;AAAA,QACf,aAAa,KAAK,IAAIA,GAAc,CAAC;AAAA,MAAA,CACtC;AAGD,YAAME,IAAiBL,GAAc;AAAA,QACnC,CAACI,MAAMA,EAAE,WAAUxF,KAAA,gBAAAA,EAAc;AAAA,MAAA;AAEnC,MAAA7D,EAAQ,KAAK;AAAA,QACX,KAAK;AAAA,QACL,OAAO4H;AAAA,QACP,SAASqB;AAAA,QACT,eAAeK;AAAA,QACf,aACEA,KAAkB,IACdA,IACAvL;AAAA,UACE,KAAK,QAAO8F,KAAA,gBAAAA,EAAc,YAAW,KAAK/B,CAAU;AAAA,UACpD;AAAA,UACAmH,GAAc,SAAS;AAAA,QAAA;AAAA,MACzB,CACP,GACG5F,KACFrD,EAAQ,KAAK;AAAA,QACX,KAAK;AAAA,QACL,OAAO6H;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,GAAG,OAAOtE,EAAQ,GAAA;AAAA,UAC3B,EAAE,OAAO,GAAG,OAAOA,EAAQ,GAAA;AAAA,QAAG;AAAA,QAEhC,eAAeM,MAAiB,OAAO,KAAK3E,IAAO,IAAI;AAAA,QACvD,aAAaA,IAAO,IAAI;AAAA,MAAA,CACzB;AAAA,IAEL;AAIA,UAAMqK,KAAa,CAACtI,GAAiBuI,MAAwB;;AAC3D,MAAA7E,EAAA,GACAC,EAAA;AACA,YAAMK,IAAOlB,EAAA;AACb,UAAI9C,MAAW,QAAQ;AACrB,cAAMwI,IAAQpG,IACVrE,GAASwK,GAAavE,EAAK,SAAS,EAAE,IACtCuE;AACJ,SAAIxF,EAAe,YAAY,QAAQyF,MAAUxE,EAAK,UACpDhB,EAAK,EAAE,GAAGgB,GAAM,OAAAwE,GAAO;AACzB;AAAA,MACF;AACA,UAAIxI,MAAW,UAAU;AACvB,cAAMyI,IAASF,MAAgB;AAC/B,SAAIxF,EAAe,YAAY,QAAQ0F,MAAWzE,EAAK,SAAS,OAC9DhB,EAAK,EAAE,GAAGgB,GAAM,OAAQA,EAAK,QAAQ,MAAOyE,IAAS,KAAK,GAAA,CAAI;AAEhE;AAAA,MACF;AACA,OAAI1F,EAAe,YAAY,QAAQwF,MAAgBvE,EAAK,YAC1DhB,EAAK,EAAE,GAAGgB,GAAM,SAASuE,GAAa,IAExC7L,IAAA0G,EAAU,YAAV,QAAA1G,EAAmB,SACnBsI,EAAQ,EAAK;AAAA,IACf,GAEM0D,KAAsB,CAC1B,GACAzI,GACAE,MACG;;AACH,YAAMH,IAASjB,EAAQkB,CAAW;AAClC,UAAI,CAACD,EAAQ;AACb,YAAMzC,IAAOyC,EAAO,QAAQ,SAAS,GAC/B2I,IAAc,CAACC,MAAkB;;AACrC,SAAA/L,MAAAH,IAAAsC,GAAW,QAAQgB,EAAO,GAAG,MAA7B,gBAAAtD,EACI,iBAA8B,mBAC/BkM,OAFH,QAAA/L,GAEW;AAAA,MACb;AAEA,UAAI,EAAE,UAAU,EAAE,QAAQ,WAAW;AACnC,UAAE,eAAA,IACFH,IAAA2I,EAAe,YAAf,QAAA3I,EAAwB,SACxBsI,EAAQ,EAAK;AACb;AAAA,MACF;AAEA,cAAQ,EAAE,KAAA;AAAA,QACR,KAAK;AACH,YAAE,eAAA,GACF2D,EAAY,KAAK,IAAIxI,IAAc,GAAG5C,CAAI,CAAC;AAC3C;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFoL,EAAY,KAAK,IAAIxI,IAAc,GAAG,CAAC,CAAC;AACxC;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFwI,EAAY,CAAC;AACb;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFA,EAAYpL,CAAI;AAChB;AAAA,QACF,KAAK;AAAA,QACL,KAAK,cAAc;AACjB,YAAE,eAAA;AAGF,gBAAMsL,IAAW,EAAE,QAAQ,iBAAmB5D,OAAgB,QACxD6D,IAAS/J,EAAQkB,KAAe4I,IAAU,IAAI,GAAG;AACvD,UAAIC,KAAQrD,GAAYqD,EAAO,GAAG;AAClC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,KAAK;AACR,YAAE,eAAA;AACF,gBAAMpJ,IAASM,EAAO,QAAQG,CAAW;AACzC,UAAIT,KAAQ4I,GAAWtI,EAAO,KAAKN,EAAO,KAAK;AAC/C;AAAA,QACF;AAAA,QACA,KAAK;AAIH,UAAA4F,EAAmB,UAAU,IACzB,EAAE,YACJzI,IAAAsG,EAAQ,YAAR,QAAAtG,EAAiB,WAEjBwJ,KAAAb,GAAe,YAAf,QAAAa,GAAwB,SAE1BrB,EAAQ,EAAK;AACb;AAAA,MAEA;AAAA,IAEN,GAIM+D,KAAmB,CAAC,MAAkC;;AAC1D,UAAI,CAAC9H,KAAYiB,EAAmB;AACpC,YAAM4G,IAAS,EAAE;AAGjB,UAFI,EAAEA,aAAkB,UAEpBpM,IAAA8I,GAAe,YAAf,QAAA9I,EAAwB,SAASoM,GAAS;AAC9C,YAAME,IAAW,CAAC7F,EAAQ,SAASC,EAAU,SAASC,GAAU,OAAO;AACvE,UAAI4F,IAAUD,EAAS,KAAK,CAACE,MAAMA,KAAA,gBAAAA,EAAG,SAASJ,EAAO,KAAK;AAC3D,UAAI,CAACG,GAAS;AAEZ,cAAME,KAAStM,IAAAiM,EAAO,kBAAP,gBAAAjM,EAAsB;AACrC,QAAAoM,IAAUD,EAAS,KAAK,CAACE,MAAMA,KAAKA,MAAMC,CAAM,KAAKhG,EAAQ,SACzD8F,KAAWA,MAAYE,KAAQF,EAAQ,MAAA;AAAA,MAC7C;AACA,MAAArD,GAAa,WAAW,QAAQqD,CAAO;AAAA,IACzC,GAGMG,KAAmB,CAAC,MAAqC;AAE7D,MAAAjE,GAAY,UAAU,EAAE,WAAW,IAAI,aAAa,WACpDC,GAAiB,UAAU,QAC3BC,EAAe,UAAU,EAAE;AAAA,IAC7B,GAEMgE,KAA6B,CAAC,MAAa;AAE/C,QAAE,eAAA,GACElE,GAAY,YAAY,cAC1BM,GAAYL,GAAiB,OAAO;AAAA,IAExC,GAEMkE,KAA8B,CAAC,MAAa;;AAChD,QAAE,eAAA;AACF,YAAMC,IAAOjE,EAAmB;AAEhC,UADAA,EAAmB,UAAU,IACzBiE,EAAM;AAEV,YAAMJ,IAAS,SAAS;AACxB,OAAI,CAACA,KAAUA,MAAW,SAAS,WACjCzM,IAAA2I,EAAe,YAAf,QAAA3I,EAAwB;AAAA,IAE5B,GAEM8M,KAA+B,CAAC,MAAa;;AACjD,YAAMV,IAAS,EAAE;AAGjB,UAAIA,aAAkB,UAAQpM,IAAAwG,EAAQ,YAAR,QAAAxG,EAAiB,SAASoM,KAAS;AAC/D,UAAE,eAAA;AACF;AAAA,MACF;AACA,MAAAxD,EAAmB,UAAU;AAAA,IAC/B,GAEMmE,KAA6B,MAAM;;AACvC,OAAI/M,IAAA6I,EAAW,YAAX,QAAA7I,EAAoB,SAAS,SAAS,oBACxCG,IAAAwI,EAAe,YAAf,QAAAxI,EAAwB;AAAA,IAE5B,GAQM6M,KAAqBzG,EAAY,CAAC/C,MAAgC;;AACtE,YAAMyJ,IAAOxL;AACb,OAAAzB,IAAA6I,EAAW,YAAX,QAAA7I,EAAoB,oBAAoB,SAASiN,KACjD9M,IAAA0I,EAAW,YAAX,QAAA1I,EAAoB,oBAAoB,aAAa8M,IACrDpE,EAAW,UAAUrF,GACrBA,KAAA,QAAAA,EAAM,iBAAiB,SAASyJ,GAAM,EAAE,SAAS,OACjDzJ,KAAA,QAAAA,EAAM,iBAAiB,aAAayJ,GAAM,EAAE,SAAS;IACvD,GAAG,CAAA,CAAE,GAECC,KAAyB,CAAC,MAAkC;;AAGhE,OAAKlN,IAAA6I,EAAW,YAAX,QAAA7I,EAAoB,SAAS,SAAS,kBACzC,EAAE,eAAA;AAAA,IAEN,GAEMZ,KAAS+G;AAAA,MACb,OAAO;AAAA,QACL,UAAU,MAAMD;AAAA,QAChB,UAAU,CAACpF,MAASwF,EAAKtF,GAAcF,CAAI,CAAC;AAAA,QAC5C,OAAOoG;AAAA,QACP,QAAQ,MAAM3C,KAAY8D,GAAQ;AAAA,QAClC,MAAM,MAAM;AACV,UAAI,CAAC9D,KAAYiB,MACjBiD,GAAY,UAAU,WACtBO,GAAiB,EAAI;AAAA,QACvB;AAAA,QACA,OAAO,MAAM;AACX,UAAIzE,OAAkB,EAAK;AAAA,QAC7B;AAAA,MAAA;AAAA,MAEF;AAAA,QACE2B;AAAA,QACAI;AAAA,QACAY;AAAA,QACA3C;AAAA,QACAiB;AAAA,QACAwD;AAAA,QACAV;AAAA,MAAA;AAAA,IACF;AAGF,IAAA6E,GAAoBrJ,GAAK,MAAM0C,EAAQ,SAA2B,CAAA,CAAE,GACpE4G,GAAqBjO,IAAiBC,IAAQkG,CAAW;AAEzD,UAAM+H;AAAA;AAAA,MAEJ,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK9G;AAAA,UACL,IAAIlB;AAAA,UACJ,MAAK;AAAA,UACL,cAAYoF;AAAA,UACZ,mBAAiBD;AAAA,UACjB,oBAAkBxF,EAAI,eAAe;AAAA,UACrC,gBAAcA,EAAI,WAAW;AAAA,UAI7B,iBAAeO,KAAqB;AAAA,UACpC,kBAAe;AAAA,UACf,qBAAmBF;AAAA,UACnB,WAAW3D,GAAgB;AAAA,YACzB,MAAA2C;AAAA,YACA,MAAMmB;AAAA,YACN,YAAYD;AAAA,YACZ,cAAcjB,KAAY,CAACiB;AAAA,YAC3B,WAAAf;AAAA,UAAA,CACD;AAAA,UACD,SAASF,IAAW8H,KAAmB;AAAA,UAGvC,UAAA;AAAA,YAAA,gBAAAjJ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKqD;AAAA,gBACL,MAAK;AAAA,gBACL,iBAAejB,KAAqB;AAAA,gBACpC,cAAYwE;AAAA,gBACZ,iBAAetE,IAAW,IAAI;AAAA,gBAC9B,iBAAeA,IAAW,KAAK;AAAA,gBAC/B,iBACEQ,MAAiB,OACb,SACAR,IACEvE,GAAS+E,EAAa,KAAK,IAC3BA,EAAa;AAAA,gBAErB,kBAAgBA,MAAiB,OAAO6B,KAAaC;AAAA,gBACrD,qBAAmBzD,IAAW,kBAAkB;AAAA,gBAChD,UAAUiB,IAAoB,KAAK;AAAA,gBACnC,WAAU;AAAA,gBACV,WAAW8D;AAAA,gBACX,QAAQQ;AAAA,gBACR,WAAWjI,GAAgB,EAAE,MAAAyC,GAAM;AAAA,gBAElC,UAAA0D;AAAA,cAAA;AAAA,YAAA;AAAA,YAIH,gBAAA5E,EAAC,QAAA,EAAK,eAAY,QAAO,WAAWrB,GAAkB,EAAE,MAAAuC,EAAA,CAAM,GAC3D,UAAAwD,GAAA,CACH;AAAA,YAGA,gBAAA1E;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKsD;AAAA,gBACL,MAAK;AAAA,gBACL,iBAAelB,KAAqB;AAAA,gBACpC,cAAYyE;AAAA,gBACZ,iBAAe;AAAA,gBACf,iBAAe;AAAA,gBACf,iBAAe/D,KAAA,gBAAAA,EAAc;AAAA,gBAC7B,kBAAgBA,MAAiB,OAAO6B,KAAaE;AAAA,gBACrD,qBAAmB1D,IAAW,kBAAkB;AAAA,gBAChD,UAAUiB,IAAoB,KAAK;AAAA,gBACnC,WAAU;AAAA,gBACV,WAAWkE;AAAA,gBACX,QAAQK;AAAA,gBACR,WAAWlI,GAAgB,EAAE,MAAAyC,GAAM;AAAA,gBAElC,UAAA2D;AAAA,cAAA;AAAA,YAAA;AAAA,YAIFvC,IACC,gBAAAtC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKuD;AAAA,gBACL,MAAK;AAAA,gBACL,iBAAenB,KAAqB;AAAA,gBACpC,cAAY0E;AAAA,gBACZ,iBAAe;AAAA,gBACf,iBAAe;AAAA,gBACf,iBAAehE,MAAiB,OAAO,SAAY3E,IAAO,IAAI;AAAA,gBAC9D,kBACE2E,MAAiB,OACb6B,KACAxG,IACEqE,EAAQ,KACRA,EAAQ;AAAA,gBAEhB,qBAAmBrB,IAAW,kBAAkB;AAAA,gBAChD,UAAUiB,IAAoB,KAAK;AAAA,gBACnC,WAAWoE;AAAA,gBACX,WAAW9H,GAAqB,EAAE,MAAAwC,GAAM;AAAA,gBAEvC,gBAAiB,OAAO,OAAO/C,IAAOqE,EAAQ,KAAKA,EAAQ;AAAA,cAAA;AAAA,YAAA,IAE5D;AAAA,YAEH7B,IACC,gBAAAX;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,cAAYwH;AAAA,gBACZ,UAAUpF,KAAqBU,MAAiB;AAAA,gBAEhD,eAAe,CAACxE,MAAU;AACxB,kBAAAA,EAAM,eAAA,GACNsF,EAAA,GACAC,EAAA;AAAA,gBACF;AAAA,gBACA,SAAS,CAACvF,MAAU;;AAClB,kBAAAA,EAAM,gBAAA,GACNwF,GAAA,IACAlH,IAAAyG,EAAQ,YAAR,QAAAzG,EAAiB;AAAA,gBACnB;AAAA,gBAEA,WAAWgC,GAAoB;AAAA,kBAC7B,MAAAsC;AAAA,kBACA,UAAU,CAACC;AAAA,kBACX,WAAW2B,MAAiB,OAAO,iBAAiB;AAAA,gBAAA,CACrD;AAAA,gBAED,UAAA,gBAAA9C,EAACmK,IAAA,EAAE,eAAY,OAAA,CAAO;AAAA,cAAA;AAAA,YAAA,IAEtB;AAAA,YAIHhJ,IACC,gBAAAnB,EAACoK,EAAQ,SAAR,EAAgB,SAAO,IACtB,UAAA,gBAAApK;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAK0F;AAAA,gBACL,MAAK;AAAA,gBACL,cAAYsB;AAAA,gBACZ,UAAU5E;AAAA,gBACV,SAASkH;AAAA,gBACT,WAAW1K,GAAoB,EAAE,MAAAsC,GAAM;AAAA,gBAEvC,UAAA,gBAAAlB,EAACqK,IAAA,EAAM,eAAY,OAAA,CAAO;AAAA,cAAA;AAAA,YAAA,GAE9B,IACE;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA;AAIR,WAAKlJ,uBAGFiJ,EAAQ,MAAR,EAAa,MAAMpF,IAAQ,cAAcY,IAGxC,UAAA;AAAA,MAAA,gBAAA5F,EAACoK,EAAQ,QAAR,EAAe,SAAO,IAAE,UAAAH,IAAM;AAAA,MAC/B,gBAAAjK,EAACoK,EAAQ,QAAR,EACC,UAAA,gBAAApK;AAAA,QAACoK,EAAQ;AAAA,QAAR;AAAA,UACC,KAAKR;AAAA,UACL,MAAK;AAAA,UACL,OAAM;AAAA,UACN,YAAY;AAAA,UACZ,KAAKzE;AAAA,UAGL,kBAAe;AAAA,UACf,cAAYmC;AAAA,UACZ,mBAAiBD;AAAA,UACjB,WAAWxI,GAAwB,EAAE,MAAAqC,GAAM;AAAA,UAC3C,iBAAiBqI;AAAA,UACjB,kBAAkBC;AAAA,UAClB,mBAAmBE;AAAA,UACnB,iBAAiBC;AAAA,UACjB,aAAaG;AAAA,UAEb,UAAA,gBAAA9J;AAAA,YAAChB;AAAA,YAAA;AAAA,cACC,SAAAC;AAAA,cACA,YAAAC;AAAA,cACA,QAAQsJ;AAAA,cACR,iBAAiBI;AAAA,YAAA;AAAA,UAAA;AAAA,QACnB;AAAA,MAAA,EACF,CACF;AAAA,IAAA,GACF,IAlCoBqB;AAAA,EAoCxB;AACF;AAEA1J,GAAW,cAAc;"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.94.0",
3
+ "packageVersion": "1.95.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -2091,6 +2091,14 @@
2091
2091
  "compare"
2092
2092
  ],
2093
2093
  "description": "Optional. 'compare' renders this series as a secondary, colour-blind-safe overlay (e.g. the previous period) — a dotted stroke in its paired primary's colour for line/area, a tinted bar with a dotted outline for bar. Omit for a normal primary series."
2094
+ },
2095
+ "axis": {
2096
+ "type": "string",
2097
+ "enum": [
2098
+ "primary",
2099
+ "secondary"
2100
+ ],
2101
+ "description": "Optional. 'secondary' plots this series on the chart's second value scale; it needs the host to configure secondaryAxis. Omit for the primary scale."
2094
2102
  }
2095
2103
  },
2096
2104
  "required": [
@@ -15115,8 +15123,8 @@
15115
15123
  "state": [
15116
15124
  {
15117
15125
  "name": "value",
15118
- "type": "HH:MM",
15119
- "description": "Currently-selected time as 24h HH:MM (always present — defaults to 00:00 when unset).",
15126
+ "type": "HH:MM | null",
15127
+ "description": "Currently selected time as 24h HH:MM. Null when unset with allowEmpty; otherwise defaults to 00:00.",
15120
15128
  "descriptionKey": "ui.agent.timePicker.state.value"
15121
15129
  },
15122
15130
  {
@@ -15159,7 +15167,7 @@
15159
15167
  "name": "clear",
15160
15168
  "safety": "destructive",
15161
15169
  "idempotent": true,
15162
- "description": "Clear the time (resets to 00:00).",
15170
+ "description": "Clear to null with allowEmpty; otherwise reset to 00:00.",
15163
15171
  "descriptionKey": "ui.agent.timePicker.actions.clear"
15164
15172
  },
15165
15173
  {
@@ -1545,12 +1545,12 @@
1545
1545
  },
1546
1546
  "timePicker": {
1547
1547
  "state": {
1548
- "value": "Currently-selected time as 24h HH:MM (always present — defaults to 00:00 when unset).",
1548
+ "value": "Currently selected time as 24h HH:MM. Null when unset with allowEmpty; otherwise defaults to 00:00.",
1549
1549
  "isOpen": "Whether the time dropdown is open. Always false unless the picker has the dropdown prop."
1550
1550
  },
1551
1551
  "actions": {
1552
1552
  "setTime": "Set the time using a 24h HH:MM string.",
1553
- "clear": "Clear the time (resets to 00:00).",
1553
+ "clear": "Clear to null with allowEmpty; otherwise reset to 00:00.",
1554
1554
  "open": "Open the time dropdown without moving focus. A no-op unless the picker has the dropdown prop and is enabled.",
1555
1555
  "close": "Close the time dropdown. A no-op unless the picker has the dropdown prop."
1556
1556
  }
@@ -37,4 +37,7 @@
37
37
  .apex-theme-alfadocs .apexcharts-toolbar>.apexcharts-pan-icon>svg{scale:.62}
38
38
  .apex-theme-alfadocs .apexcharts-menu-item{display:flex;align-items:center;min-block-size:var(--min-target-size)}
39
39
  .apex-theme-alfadocs .apexcharts-legend-series[role=button]:focus-visible,.apex-theme-alfadocs .apexcharts-toolbar>[role=button]:focus-visible{outline:var(--focus-ring-width) solid var(--ring);outline-offset:var(--focus-ring-offset);border-radius:var(--radius-sm)}
40
- .apex-theme-alfadocs .apexcharts-menu-item:focus-visible{outline:var(--focus-ring-width) solid var(--ring);outline-offset:calc(var(--focus-ring-width) * -1);background:transparent}
40
+ .apex-theme-alfadocs .apexcharts-menu-item:focus-visible{outline:var(--focus-ring-width) solid var(--ring);outline-offset:calc(var(--focus-ring-width) * -1);background:transparent}
41
+ .apex-theme-alfadocs .apexcharts-tooltip:is(.apexcharts-theme-light,.apexcharts-theme-dark){color:var(--popover-foreground);background-color:var(--popover);border-color:var(--border)}
42
+ .apex-theme-alfadocs .apexcharts-tooltip:is(.apexcharts-theme-light,.apexcharts-theme-dark) .apexcharts-tooltip-title{color:var(--foreground);background-color:var(--muted);border-color:var(--border)}
43
+ .apex-theme-alfadocs .apexcharts-yaxis-title-text,.apex-theme-alfadocs .apexcharts-xaxis-title-text{font-family:var(--type-label-family);font-size:var(--type-meta-size);font-weight:var(--type-label-weight)}
@@ -1,4 +1,4 @@
1
- import { B as s, a, C as R, O as g, b as n, c as A } from "../../_chunks/reserved.agent-XU88crNW.js";
1
+ import { B as s, a, C as R, O as g, b as n, c as A } from "../../_chunks/reserved.agent-BvwjDyne.js";
2
2
  export {
3
3
  s as Booking,
4
4
  a as BookingReserved,
@@ -0,0 +1,21 @@
1
+ /** Explicit value-axis bounds that put the zero line at the same height. */
2
+ export interface AlignedScale {
3
+ min: number;
4
+ max: number;
5
+ tickAmount: number;
6
+ }
7
+ interface AxisRange {
8
+ low: number;
9
+ high: number;
10
+ integer: boolean;
11
+ }
12
+ /**
13
+ * Two value axes compute their zero independently, so bars on them would grow
14
+ * from different baselines when either holds negative values. Choose one split
15
+ * of tick segments below and above zero, and give each axis a nice step that
16
+ * fits it, so both zero lines land on the same gridline.
17
+ * Returns `null` when no axis has a negative value (Apex scales them itself).
18
+ */
19
+ export declare function alignZeroScales(ranges: [AxisRange, AxisRange]): [AlignedScale, AlignedScale] | null;
20
+ export {};
21
+ //# sourceMappingURL=chart-axis-scale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-axis-scale.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart-axis-scale.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAoBD,UAAU,SAAS;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,GAC7B,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,IAAI,CA2BrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"chart.agent.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,UAAU,EAAE,YAAY,CAAC,WAAW,CAoIhD,CAAC"}
1
+ {"version":3,"file":"chart.agent.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,UAAU,EAAE,YAAY,CAAC,WAAW,CA0IhD,CAAC"}
@@ -4,6 +4,20 @@ declare const chartVariants: (props?: ({
4
4
  density?: "none" | "comfortable" | "compact" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  export type ChartType = 'line' | 'bar' | 'pie' | 'donut' | 'area' | 'radialBar';
7
+ /** Location in the currently displayed view, including any type-switch adaptation. */
8
+ export interface ChartDataPointContext {
9
+ type: ChartType;
10
+ /** Axis series index; for a slice chart, the slice index. */
11
+ seriesIndex: number;
12
+ /** Point index within an axis series; for a slice chart, the slice index. */
13
+ dataPointIndex: number;
14
+ /** Axis series name, or slice label when present. */
15
+ seriesName?: string;
16
+ /** Category label, or slice label when present. */
17
+ category?: string;
18
+ /** Value axis the series is plotted on. Always `'primary'` unless `secondaryAxis` is set and the series has `axis: 'secondary'`. */
19
+ axis: 'primary' | 'secondary';
20
+ }
7
21
  export interface ChartSeries {
8
22
  name: string;
9
23
  data: number[];
@@ -34,11 +48,30 @@ export interface ChartSeries {
34
48
  * @default 'primary'
35
49
  */
36
50
  role?: 'primary' | 'compare';
51
+ /**
52
+ * Which value scale plots this series on an axis chart. `'secondary'` needs
53
+ * `secondaryAxis` on the Chart; without it the series stays on the primary
54
+ * scale (DEV warning). Travels with the series through `updateSeries`.
55
+ * @default 'primary'
56
+ */
57
+ axis?: 'primary' | 'secondary';
37
58
  }
38
59
  /** Bar orientation. `'horizontal'` renders a ranking sideways. Default `'vertical'`. */
39
60
  export type ChartOrientation = 'vertical' | 'horizontal';
40
61
  /** Line / area stroke interpolation. Default `'smooth'`. */
41
62
  export type ChartCurve = 'smooth' | 'straight' | 'stepline';
63
+ /** A second unit, with its own scale at the inline-end of the chart. */
64
+ export interface ChartSecondaryAxis {
65
+ /** Consumer-translated unit label, for example "#". Also labels table rows. */
66
+ title: string;
67
+ /** Formats this unit in axis ticks, tooltips and the summary table.
68
+ * Defaults to locale-grouped numbers, independently of `valueFormatter`. */
69
+ valueFormatter?: (value: number) => string;
70
+ /** Count axis: ticks that are not whole numbers print as empty text, so
71
+ * small counts never show "0.5" or a repeated label. Tooltip and table keep
72
+ * the real formatter. */
73
+ integer?: boolean;
74
+ }
42
75
  export interface ChartProps extends VariantProps<typeof chartVariants> {
43
76
  /** Required — drives aria-label and sr-only table caption. */
44
77
  title: string;
@@ -127,6 +160,28 @@ export interface ChartProps extends VariantProps<typeof chartVariants> {
127
160
  * and summary table use `radialValueFormatter`.
128
161
  */
129
162
  valueFormatter?: (value: number) => string;
163
+ /** Primary axis ticks only. Falls back to valueFormatter. The secondary axis uses `secondaryAxis.valueFormatter`. Ignored by slice charts. */
164
+ axisValueFormatter?: (value: number) => string;
165
+ /**
166
+ * Plain-text point detail for both the tooltip and screen-reader summary.
167
+ * Receives indices and labels from the displayed view, so equal values can
168
+ * carry different context. Falls back to the series' axis formatter
169
+ * (valueFormatter on the primary axis), also when this
170
+ * throws or returns anything but a non-blank string (a DEV console warning
171
+ * names the failure). Ignored by radialBar.
172
+ */
173
+ dataPointFormatter?: (value: number, context: ChartDataPointContext) => string;
174
+ /** Consumer-translated label for the primary value axis, e.g. "Production (€)". */
175
+ valueAxisTitle?: string;
176
+ /**
177
+ * Options for the independent value scale used by every series with
178
+ * `axis: 'secondary'`. Vertical line/bar/area only; slice/radial types ignore
179
+ * it. While configured on an axis chart, stacking and horizontal orientation
180
+ * are disabled and the type switcher offers only axis types, so unlike units
181
+ * cannot be stacked or added together as slices. The chart type applies to
182
+ * all series: a combined bar and line chart is not supported.
183
+ */
184
+ secondaryAxis?: ChartSecondaryAxis;
130
185
  /**
131
186
  * Opt-in type switcher. Pass two or more of `'line' | 'bar' | 'area' |
132
187
  * 'pie' | 'donut'` to render an icon radiogroup (an `IconButtonGroup`)
@@ -1 +1 @@
1
- {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,OAAO,mCAAmC,CAAC;AAyB3C,QAAA,MAAM,aAAa;;8EAelB,CAAC;AA2CF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9B;AAED,wFAAwF;AACxF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzD,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,MAAM,WAAW,UAAW,SAAQ,YAAY,CAAC,OAAO,aAAa,CAAC;IACpE,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yBAAyB;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;IACjC,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;mFAE+E;IAC/E,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC;IAC9B,oEAAoE;IACpE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;;;;;OAQG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC;IACtC,uFAAuF;IACvF,YAAY,EAAE,MAAM;QAClB,YAAY,EAAE,SAAS,CAAC;QACxB,aAAa,EAAE,SAAS,CAAC;QACzB,cAAc,EAAE,SAAS,EAAE,CAAC;KAC7B,CAAC;CACH;AA2vBD,eAAO,MAAM,KAAK,oGAyoBjB,CAAC;AAQF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,OAAO,mCAAmC,CAAC;AA0B3C,QAAA,MAAM,aAAa;;8EAelB,CAAC;AA2CF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;AAEhF,sFAAsF;AACtF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oIAAoI;IACpI,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CAChC;AAED,wFAAwF;AACxF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzD,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd;gFAC4E;IAC5E,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C;;6BAEyB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY,CAAC,OAAO,aAAa,CAAC;IACpE,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yBAAyB;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;IACjC,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;mFAE+E;IAC/E,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,8IAA8I;IAC9I,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,qBAAqB,KAC3B,MAAM,CAAC;IACZ,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC;IAC9B,oEAAoE;IACpE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;;;;;OAQG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC;IACtC,uFAAuF;IACvF,YAAY,EAAE,MAAM;QAClB,YAAY,EAAE,SAAS,CAAC;QACxB,aAAa,EAAE,SAAS,CAAC;QACzB,cAAc,EAAE,SAAS,EAAE,CAAC;KAC7B,CAAC;CACH;AAq+BD,eAAO,MAAM,KAAK,oGAgvBjB,CAAC;AAQF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { Chart, chartVariants } from './chart';
2
- export type { ChartCurve, ChartHandle, ChartOrientation, ChartProps, ChartSeries, ChartType, } from './chart';
2
+ export type { ChartCurve, ChartDataPointContext, ChartHandle, ChartOrientation, ChartProps, ChartSecondaryAxis, ChartSeries, ChartType, } from './chart';
3
3
  export { chartAgent } from './chart.agent';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/C,YAAY,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/C,YAAY,EACV,UAAU,EACV,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -1,4 +1,4 @@
1
- import { C as t, c as s, a as c } from "../../_chunks/chart-D4huJSru.js";
1
+ import { C as t, c as s, a as c } from "../../_chunks/chart-pMkQN-qy.js";
2
2
  export {
3
3
  t as Chart,
4
4
  s as chartAgent,
@@ -1,4 +1,4 @@
1
- import { D as i, d as r } from "../../_chunks/date-time-picker-n-yrlMJq.js";
1
+ import { D as i, d as r } from "../../_chunks/date-time-picker-cwsWiB4q.js";
2
2
  export {
3
3
  i as DateTimePicker,
4
4
  r as dateTimePickerAgent
@@ -1,4 +1,4 @@
1
- import { H, M as g, a as o } from "../../_chunks/hcg-doubling-K41Wy7LB.js";
1
+ import { H, M as g, a as o } from "../../_chunks/hcg-doubling-DQe1ptNB.js";
2
2
  export {
3
3
  H as HcgDoubling,
4
4
  g as MINIMAL_48H_RISE_PERCENT,
@@ -1,4 +1,4 @@
1
- import { S as i, f as t, i as e, s as r } from "../../_chunks/slot-grid-B-IAFX3C.js";
1
+ import { S as i, f as t, i as e, s as r } from "../../_chunks/slot-grid-BhjaLJ0o.js";
2
2
  export {
3
3
  i as SlotGrid,
4
4
  t as findFirstAvailable,
@@ -1 +1 @@
1
- {"version":3,"file":"slot-grid.d.ts","sourceRoot":"","sources":["../../../src/components/slot-grid/slot-grid.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slot-grid.d.ts","sourceRoot":"","sources":["../../../src/components/slot-grid/slot-grid.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { T as o, t as r } from "../../_chunks/task-editor-BZeSBxwU.js";
1
+ import { T as o, t as r } from "../../_chunks/task-editor-Cv7xSakv.js";
2
2
  export {
3
3
  o as TaskEditor,
4
4
  r as taskEditorAgent
@@ -1,4 +1,4 @@
1
- import { T as r, t } from "../../_chunks/time-picker-DVfyAR81.js";
1
+ import { T as r, t } from "../../_chunks/time-picker-DSt-ns5F.js";
2
2
  export {
3
3
  r as TimePicker,
4
4
  t as timePickerAgent
@@ -9,7 +9,7 @@ export interface TimePickerHandle {
9
9
  getValue: () => TimeValue | null;
10
10
  /** Set the time value. Hours are kept within 0–23 and minutes within 0–59. */
11
11
  setValue: (value: TimeValue) => void;
12
- /** Clear the value (resets to 00:00). */
12
+ /** Clear to null with allowEmpty; otherwise reset to 00:00. */
13
13
  clear: () => void;
14
14
  /** Whether the time dropdown is open. Always false unless `dropdown` is on. */
15
15
  isOpen: () => boolean;
@@ -25,13 +25,7 @@ declare const wrapperVariants: (props?: ({
25
25
  opensOnClick?: boolean | null | undefined;
26
26
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
27
27
  type MinuteStep = 1 | 5 | 10 | 15 | 30;
28
- export interface TimePickerProps extends Pick<VariantProps<typeof wrapperVariants>, 'size'> {
29
- /** Current value — controlled. */
30
- value?: TimeValue;
31
- /** Default value — uncontrolled. */
32
- defaultValue?: TimeValue;
33
- /** Called when the value changes. */
34
- onChange?: (value: TimeValue) => void;
28
+ interface TimePickerBaseProps extends Pick<VariantProps<typeof wrapperVariants>, 'size'> {
35
29
  /** Force 12h/24h mode. Defaults to locale detection. */
36
30
  hour12?: boolean;
37
31
  /** Minute increment step. */
@@ -69,6 +63,19 @@ export interface TimePickerProps extends Pick<VariantProps<typeof wrapperVariant
69
63
  /** Accessible name by reference. Wins over `aria-label` and the FormField label. */
70
64
  'aria-labelledby'?: string;
71
65
  }
66
+ /** Empty values are opt-in, keeping existing onChange callbacks non-nullable. */
67
+ export type TimePickerProps = TimePickerBaseProps & ({
68
+ allowEmpty?: false;
69
+ value?: TimeValue;
70
+ defaultValue?: TimeValue;
71
+ onChange?: (value: TimeValue) => void;
72
+ } | {
73
+ /** Start unset and allow clearing to null, distinct from midnight. */
74
+ allowEmpty: true;
75
+ value?: TimeValue | null;
76
+ defaultValue?: TimeValue | null;
77
+ onChange?: (value: TimeValue | null) => void;
78
+ });
72
79
  export declare const TimePicker: import("react").ForwardRefExoticComponent<TimePickerProps & import("react").RefAttributes<HTMLDivElement>>;
73
80
  export {};
74
81
  //# sourceMappingURL=time-picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"time-picker.d.ts","sourceRoot":"","sources":["../../../src/components/time-picker/time-picker.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AASjD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,QAAQ,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,yCAAyC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,8GAA8G;IAC9G,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,gEAAgE;IAChE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AA2GD,QAAA,MAAM,eAAe;;;;;8EAqCpB,CAAC;AAsKF,KAAK,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEvC,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,YAAY,CAAC,OAAO,eAAe,CAAC,EACpC,MAAM,CACP;IACC,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,oCAAoC;IACpC,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,wDAAwD;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B;IAC3B,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,sBAAsB;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA4GD,eAAO,MAAM,UAAU,4GAi2BtB,CAAC"}
1
+ {"version":3,"file":"time-picker.d.ts","sourceRoot":"","sources":["../../../src/components/time-picker/time-picker.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AASjD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,QAAQ,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,+DAA+D;IAC/D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,8GAA8G;IAC9G,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,gEAAgE;IAChE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AA2GD,QAAA,MAAM,eAAe;;;;;8EAqCpB,CAAC;AAgLF,KAAK,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEvC,UAAU,mBAAoB,SAAQ,IAAI,CACxC,YAAY,CAAC,OAAO,eAAe,CAAC,EACpC,MAAM,CACP;IACC,wDAAwD;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B;IAC3B,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,sBAAsB;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAC/C,CACI;IACE,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACvC,GACD;IACE,sEAAsE;IACtE,UAAU,EAAE,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;CAC9C,CACJ,CAAC;AA4GJ,eAAO,MAAM,UAAU,4GAk8BtB,CAAC"}
@@ -797,11 +797,13 @@ export declare const arUi: {
797
797
  readonly weekNumberHeader: "رقم الأسبوع";
798
798
  };
799
799
  readonly timePicker: {
800
+ readonly unset: "لم يتم تحديد وقت";
800
801
  readonly groupLabel: "الوقت";
801
802
  readonly hour: "الساعة";
802
803
  readonly minute: "الدقيقة";
803
804
  readonly period: "الفترة";
804
805
  readonly openDropdown: "اختر الوقت";
806
+ readonly clearNamed: "مسح {{label}}";
805
807
  };
806
808
  readonly dateTimePicker: {
807
809
  readonly placeholder: "اختر التاريخ والوقت";
@@ -2429,7 +2431,7 @@ export declare const arUi: {
2429
2431
  };
2430
2432
  readonly slotsLoadError: "تعذّر تحميل الأوقات المتاحة. يُرجى المحاولة مرة أخرى.";
2431
2433
  readonly retrySlots: "حاول مرة أخرى";
2432
- readonly emptySlotsDescription: "جرّب مقدم خدمة آخر أو تواصل مع العيادة.";
2434
+ readonly emptySlotsDescription: "لا تجد وقتًا مناسبًا؟ جرّب مقدم خدمة آخر أو تواصل مع العيادة.";
2433
2435
  };
2434
2436
  readonly patientSearch: {
2435
2437
  readonly regionLabel: "ابحث عن موعد";
@@ -3290,6 +3292,7 @@ export declare const arUi: {
3290
3292
  readonly table: {
3291
3293
  readonly series: "سلسلة";
3292
3294
  readonly value: "قيمة";
3295
+ readonly seriesWithUnit: "{{name}} ({{unit}})";
3293
3296
  };
3294
3297
  readonly typeSwitcher: {
3295
3298
  readonly label: "نوع المخطط";