@devalok/shilp-sutra 0.49.2 → 0.49.4

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 (315) hide show
  1. package/dist/_chunks/badge-group.js.map +1 -1
  2. package/dist/_chunks/block-shell.js.map +1 -1
  3. package/dist/_chunks/chart-container.js.map +1 -1
  4. package/dist/_chunks/chat.js.map +1 -1
  5. package/dist/_chunks/colors.js.map +1 -1
  6. package/dist/_chunks/document-preview.js.map +1 -1
  7. package/dist/_chunks/emoji-suggestion.js.map +1 -1
  8. package/dist/_chunks/emoji.js +2 -2
  9. package/dist/_chunks/emoji.js.map +1 -1
  10. package/dist/_chunks/field-state.js.map +1 -1
  11. package/dist/_chunks/grid-lines.js.map +1 -1
  12. package/dist/_chunks/image-preview.js.map +1 -1
  13. package/dist/_chunks/keybinding.js.map +1 -1
  14. package/dist/_chunks/link-context.js.map +1 -1
  15. package/dist/_chunks/mention-suggestion.js.map +1 -1
  16. package/dist/_chunks/motion-provider.js.map +1 -1
  17. package/dist/_chunks/normalize-icon.js.map +1 -1
  18. package/dist/_chunks/oauth-button.js.map +1 -1
  19. package/dist/_chunks/popover.js.map +1 -1
  20. package/dist/_chunks/primitives.js +1129 -1162
  21. package/dist/_chunks/primitives.js.map +1 -1
  22. package/dist/_chunks/shared.js.map +1 -1
  23. package/dist/_chunks/success.js.map +1 -1
  24. package/dist/_chunks/tiptap.js +4283 -3460
  25. package/dist/_chunks/tiptap.js.map +1 -1
  26. package/dist/_chunks/tooltip.js.map +1 -1
  27. package/dist/_chunks/tree-view.js +1 -1
  28. package/dist/_chunks/tree-view.js.map +1 -1
  29. package/dist/_chunks/use-calendar.js.map +1 -1
  30. package/dist/_chunks/use-controllable-open.js.map +1 -1
  31. package/dist/_chunks/vendor-client.js +86 -59
  32. package/dist/_chunks/vendor-client.js.map +1 -1
  33. package/dist/_chunks/vendor-utils.js +555 -513
  34. package/dist/_chunks/vendor-utils.js.map +1 -1
  35. package/dist/ai/ai-command-provider.d.ts +1 -1
  36. package/dist/ai/ai-command-provider.d.ts.map +1 -1
  37. package/dist/ai/ai-command-provider.js.map +1 -1
  38. package/dist/ai/block-renderer.js.map +1 -1
  39. package/dist/ai/blocks/block-shell.d.ts +1 -1
  40. package/dist/ai/blocks/block-shell.d.ts.map +1 -1
  41. package/dist/ai/blocks/block-table.d.ts +1 -1
  42. package/dist/ai/blocks/block-table.d.ts.map +1 -1
  43. package/dist/ai/blocks/confirm.d.ts +1 -1
  44. package/dist/ai/blocks/confirm.d.ts.map +1 -1
  45. package/dist/ai/blocks/divider.d.ts +1 -1
  46. package/dist/ai/blocks/divider.d.ts.map +1 -1
  47. package/dist/ai/blocks/error.d.ts +1 -1
  48. package/dist/ai/blocks/error.d.ts.map +1 -1
  49. package/dist/ai/blocks/error.js.map +1 -1
  50. package/dist/ai/blocks/info.d.ts +1 -1
  51. package/dist/ai/blocks/info.d.ts.map +1 -1
  52. package/dist/ai/blocks/loading.d.ts +1 -1
  53. package/dist/ai/blocks/loading.d.ts.map +1 -1
  54. package/dist/ai/blocks/stat-row.d.ts +1 -1
  55. package/dist/ai/blocks/stat-row.d.ts.map +1 -1
  56. package/dist/ai/blocks/success.d.ts +1 -1
  57. package/dist/ai/blocks/success.d.ts.map +1 -1
  58. package/dist/ai/blocks/text.d.ts +1 -1
  59. package/dist/ai/blocks/text.d.ts.map +1 -1
  60. package/dist/ai/blocks/text.js.map +1 -1
  61. package/dist/ai/command-bar.js.map +1 -1
  62. package/dist/ai/conversation.js.map +1 -1
  63. package/dist/ai/devadoot-icon.d.ts +1 -1
  64. package/dist/ai/devadoot-icon.d.ts.map +1 -1
  65. package/dist/ai/index.js.map +1 -1
  66. package/dist/composed/activity-feed.js.map +1 -1
  67. package/dist/composed/avatar-group.js.map +1 -1
  68. package/dist/composed/bulk-action-bar.js.map +1 -1
  69. package/dist/composed/command-palette.js.map +1 -1
  70. package/dist/composed/confirm-dialog.js.map +1 -1
  71. package/dist/composed/content-card.js.map +1 -1
  72. package/dist/composed/date-picker/index.js.map +1 -1
  73. package/dist/composed/deadline-indicator.js.map +1 -1
  74. package/dist/composed/emoji-picker.d.ts +2 -2
  75. package/dist/composed/emoji-picker.d.ts.map +1 -1
  76. package/dist/composed/emoji-picker.js.map +1 -1
  77. package/dist/composed/empty-state.js.map +1 -1
  78. package/dist/composed/error-boundary.d.ts +1 -1
  79. package/dist/composed/error-boundary.js.map +1 -1
  80. package/dist/composed/extensions/emoji-node.js.map +1 -1
  81. package/dist/composed/file-preview/audio-preview.d.ts +2 -1
  82. package/dist/composed/file-preview/audio-preview.d.ts.map +1 -1
  83. package/dist/composed/file-preview/document-preview.d.ts +2 -1
  84. package/dist/composed/file-preview/document-preview.d.ts.map +1 -1
  85. package/dist/composed/file-preview/embed-preview.d.ts +2 -1
  86. package/dist/composed/file-preview/embed-preview.d.ts.map +1 -1
  87. package/dist/composed/file-preview/image-preview.d.ts +2 -1
  88. package/dist/composed/file-preview/image-preview.d.ts.map +1 -1
  89. package/dist/composed/file-preview/shared.d.ts +5 -5
  90. package/dist/composed/file-preview/shared.d.ts.map +1 -1
  91. package/dist/composed/file-preview/video-preview.d.ts +2 -1
  92. package/dist/composed/file-preview/video-preview.d.ts.map +1 -1
  93. package/dist/composed/file-preview.d.ts +1 -1
  94. package/dist/composed/file-preview.d.ts.map +1 -1
  95. package/dist/composed/file-preview.js.map +1 -1
  96. package/dist/composed/filter-bar.d.ts +2 -2
  97. package/dist/composed/filter-bar.d.ts.map +1 -1
  98. package/dist/composed/filter-bar.js.map +1 -1
  99. package/dist/composed/form-section.js.map +1 -1
  100. package/dist/composed/global-loading.js.map +1 -1
  101. package/dist/composed/inline-edit.js.map +1 -1
  102. package/dist/composed/lib/string-utils.js.map +1 -1
  103. package/dist/composed/loading-skeleton.js.map +1 -1
  104. package/dist/composed/markdown-viewer.js.map +1 -1
  105. package/dist/composed/master-detail.d.ts +3 -3
  106. package/dist/composed/master-detail.d.ts.map +1 -1
  107. package/dist/composed/master-detail.js.map +1 -1
  108. package/dist/composed/member-picker.js.map +1 -1
  109. package/dist/composed/multi-select-popover.js.map +1 -1
  110. package/dist/composed/page-header.js.map +1 -1
  111. package/dist/composed/page-skeletons.js.map +1 -1
  112. package/dist/composed/priority-indicator.js.map +1 -1
  113. package/dist/composed/responsive-modal.js +8 -4
  114. package/dist/composed/responsive-modal.js.map +1 -1
  115. package/dist/composed/rich-chat-input/attachment-strip.d.ts +2 -1
  116. package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -1
  117. package/dist/composed/rich-chat-input/chat-toolbar.d.ts +17 -17
  118. package/dist/composed/rich-chat-input/chat-toolbar.d.ts.map +1 -1
  119. package/dist/composed/rich-chat-input/recording-overlay.d.ts +2 -1
  120. package/dist/composed/rich-chat-input/recording-overlay.d.ts.map +1 -1
  121. package/dist/composed/rich-chat-input/reply-banner.d.ts +2 -1
  122. package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -1
  123. package/dist/composed/rich-chat-input/schedule-send.d.ts +4 -3
  124. package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -1
  125. package/dist/composed/rich-chat-input.js +2 -1
  126. package/dist/composed/rich-chat-input.js.map +1 -1
  127. package/dist/composed/rich-text-editor.js +2 -1
  128. package/dist/composed/rich-text-editor.js.map +1 -1
  129. package/dist/composed/schedule-view.js.map +1 -1
  130. package/dist/composed/simple-tooltip.js.map +1 -1
  131. package/dist/composed/status-badge.js.map +1 -1
  132. package/dist/hooks/use-color-mode.js +2 -1
  133. package/dist/hooks/use-color-mode.js.map +1 -1
  134. package/dist/hooks/use-mobile.js.map +1 -1
  135. package/dist/hooks/use-touch-device.js.map +1 -1
  136. package/dist/hooks/use-viewport-height.js.map +1 -1
  137. package/dist/motion/index.js.map +1 -1
  138. package/dist/motion/motion-provider.d.ts +1 -1
  139. package/dist/motion/motion-provider.d.ts.map +1 -1
  140. package/dist/motion/primitives-index.js.map +1 -1
  141. package/dist/primitives/_internal/react-dismissable-layer.d.ts.map +1 -1
  142. package/dist/primitives/_internal/react-focus-scope.d.ts.map +1 -1
  143. package/dist/shell/app-command-palette.js.map +1 -1
  144. package/dist/shell/bottom-navbar.js.map +1 -1
  145. package/dist/shell/command-registry.d.ts +1 -1
  146. package/dist/shell/command-registry.d.ts.map +1 -1
  147. package/dist/shell/command-registry.js.map +1 -1
  148. package/dist/shell/notification-center.js.map +1 -1
  149. package/dist/shell/notification-preferences.js.map +1 -1
  150. package/dist/shell/sidebar.js.map +1 -1
  151. package/dist/shell/top-bar.js.map +1 -1
  152. package/dist/ui/accordion.js.map +1 -1
  153. package/dist/ui/alert-dialog.js.map +1 -1
  154. package/dist/ui/alert.js.map +1 -1
  155. package/dist/ui/aspect-ratio.js.map +1 -1
  156. package/dist/ui/autocomplete.js.map +1 -1
  157. package/dist/ui/avatar.d.ts +1 -1
  158. package/dist/ui/avatar.js.map +1 -1
  159. package/dist/ui/badge-group.d.ts +1 -1
  160. package/dist/ui/badge-group.d.ts.map +1 -1
  161. package/dist/ui/badge-indicator.d.ts +1 -1
  162. package/dist/ui/badge-indicator.d.ts.map +1 -1
  163. package/dist/ui/badge-indicator.js.map +1 -1
  164. package/dist/ui/banner.js.map +1 -1
  165. package/dist/ui/breadcrumb.d.ts +2 -2
  166. package/dist/ui/breadcrumb.js.map +1 -1
  167. package/dist/ui/button-group.js.map +1 -1
  168. package/dist/ui/button-processing.d.ts +2 -1
  169. package/dist/ui/button-processing.d.ts.map +1 -1
  170. package/dist/ui/button-processing.js.map +1 -1
  171. package/dist/ui/button.js.map +1 -1
  172. package/dist/ui/card.js +1 -1
  173. package/dist/ui/card.js.map +1 -1
  174. package/dist/ui/charts/_internal/axes.d.ts +2 -1
  175. package/dist/ui/charts/_internal/axes.d.ts.map +1 -1
  176. package/dist/ui/charts/_internal/grid-lines.d.ts +2 -1
  177. package/dist/ui/charts/_internal/grid-lines.d.ts.map +1 -1
  178. package/dist/ui/charts/_internal/legend.d.ts +2 -1
  179. package/dist/ui/charts/_internal/legend.d.ts.map +1 -1
  180. package/dist/ui/charts/_internal/tooltip.d.ts +1 -1
  181. package/dist/ui/charts/_internal/tooltip.d.ts.map +1 -1
  182. package/dist/ui/charts/area-chart.js.map +1 -1
  183. package/dist/ui/charts/bar-chart.js.map +1 -1
  184. package/dist/ui/charts/gauge-chart.js.map +1 -1
  185. package/dist/ui/charts/line-chart.js.map +1 -1
  186. package/dist/ui/charts/pie-chart.js.map +1 -1
  187. package/dist/ui/charts/radar-chart.js.map +1 -1
  188. package/dist/ui/charts/sparkline.js +2 -2
  189. package/dist/ui/charts/sparkline.js.map +1 -1
  190. package/dist/ui/chat/date-separator.d.ts +2 -1
  191. package/dist/ui/chat/date-separator.d.ts.map +1 -1
  192. package/dist/ui/chat/message.d.ts +8 -8
  193. package/dist/ui/chat/message.d.ts.map +1 -1
  194. package/dist/ui/chat/typing-indicator.d.ts +2 -1
  195. package/dist/ui/chat/typing-indicator.d.ts.map +1 -1
  196. package/dist/ui/chat/unread-separator.d.ts +2 -1
  197. package/dist/ui/chat/unread-separator.d.ts.map +1 -1
  198. package/dist/ui/checkbox.js.map +1 -1
  199. package/dist/ui/code.js.map +1 -1
  200. package/dist/ui/collapsible.js.map +1 -1
  201. package/dist/ui/color-input.js.map +1 -1
  202. package/dist/ui/color-swatch.js.map +1 -1
  203. package/dist/ui/combobox.js +15 -6
  204. package/dist/ui/combobox.js.map +1 -1
  205. package/dist/ui/container.js.map +1 -1
  206. package/dist/ui/context-menu.d.ts +2 -2
  207. package/dist/ui/context-menu.js.map +1 -1
  208. package/dist/ui/data-table-body.d.ts +1 -1
  209. package/dist/ui/data-table-body.d.ts.map +1 -1
  210. package/dist/ui/data-table-body.js +1 -1
  211. package/dist/ui/data-table-body.js.map +1 -1
  212. package/dist/ui/data-table-bulk-actions.d.ts +2 -1
  213. package/dist/ui/data-table-bulk-actions.d.ts.map +1 -1
  214. package/dist/ui/data-table-bulk-actions.js.map +1 -1
  215. package/dist/ui/data-table-card.d.ts +1 -1
  216. package/dist/ui/data-table-card.d.ts.map +1 -1
  217. package/dist/ui/data-table-card.js.map +1 -1
  218. package/dist/ui/data-table-context.d.ts +1 -1
  219. package/dist/ui/data-table-context.d.ts.map +1 -1
  220. package/dist/ui/data-table-context.js.map +1 -1
  221. package/dist/ui/data-table-header.d.ts +2 -1
  222. package/dist/ui/data-table-header.d.ts.map +1 -1
  223. package/dist/ui/data-table-header.js.map +1 -1
  224. package/dist/ui/data-table-pagination.d.ts +2 -1
  225. package/dist/ui/data-table-pagination.d.ts.map +1 -1
  226. package/dist/ui/data-table-pagination.js.map +1 -1
  227. package/dist/ui/data-table-toolbar.d.ts +1 -1
  228. package/dist/ui/data-table-toolbar.d.ts.map +1 -1
  229. package/dist/ui/data-table-toolbar.js.map +1 -1
  230. package/dist/ui/data-table.d.ts +1 -1
  231. package/dist/ui/data-table.d.ts.map +1 -1
  232. package/dist/ui/data-table.js.map +1 -1
  233. package/dist/ui/devalok-grain.d.ts +2 -1
  234. package/dist/ui/devalok-grain.d.ts.map +1 -1
  235. package/dist/ui/devalok-grain.js.map +1 -1
  236. package/dist/ui/dialog.js.map +1 -1
  237. package/dist/ui/dot.js +1 -1
  238. package/dist/ui/dot.js.map +1 -1
  239. package/dist/ui/dropdown-menu.d.ts +1 -1
  240. package/dist/ui/dropdown-menu.js.map +1 -1
  241. package/dist/ui/file-upload.js.map +1 -1
  242. package/dist/ui/form.js.map +1 -1
  243. package/dist/ui/hover-card.js.map +1 -1
  244. package/dist/ui/icon-button.js.map +1 -1
  245. package/dist/ui/icon-context.d.ts +1 -1
  246. package/dist/ui/icon-context.d.ts.map +1 -1
  247. package/dist/ui/icon-context.js.map +1 -1
  248. package/dist/ui/icon-group.js.map +1 -1
  249. package/dist/ui/icon.js.map +1 -1
  250. package/dist/ui/index.js.map +1 -1
  251. package/dist/ui/input-otp.js.map +1 -1
  252. package/dist/ui/input.js.map +1 -1
  253. package/dist/ui/label.js.map +1 -1
  254. package/dist/ui/lib/bottom-sheet.d.ts +1 -1
  255. package/dist/ui/lib/bottom-sheet.d.ts.map +1 -1
  256. package/dist/ui/lib/date-utils.js.map +1 -1
  257. package/dist/ui/lib/link-context.d.ts +1 -1
  258. package/dist/ui/lib/link-context.d.ts.map +1 -1
  259. package/dist/ui/lib/motion.js.map +1 -1
  260. package/dist/ui/lib/utils.js.map +1 -1
  261. package/dist/ui/link.js.map +1 -1
  262. package/dist/ui/menubar.d.ts +1 -1
  263. package/dist/ui/menubar.js.map +1 -1
  264. package/dist/ui/navigation-menu.js +14 -9
  265. package/dist/ui/navigation-menu.js.map +1 -1
  266. package/dist/ui/number-input.js.map +1 -1
  267. package/dist/ui/pagination.js.map +1 -1
  268. package/dist/ui/progress-ring.js.map +1 -1
  269. package/dist/ui/progress.js.map +1 -1
  270. package/dist/ui/radio.js.map +1 -1
  271. package/dist/ui/search-input.js.map +1 -1
  272. package/dist/ui/segmented-control.js.map +1 -1
  273. package/dist/ui/select.js.map +1 -1
  274. package/dist/ui/separator.js.map +1 -1
  275. package/dist/ui/sheet.js.map +1 -1
  276. package/dist/ui/sidebar.js +1 -1
  277. package/dist/ui/sidebar.js.map +1 -1
  278. package/dist/ui/skeleton.js.map +1 -1
  279. package/dist/ui/slider.js.map +1 -1
  280. package/dist/ui/spinner.js.map +1 -1
  281. package/dist/ui/split-button.js.map +1 -1
  282. package/dist/ui/stack.js.map +1 -1
  283. package/dist/ui/stat-card.js.map +1 -1
  284. package/dist/ui/stat-flash.d.ts +2 -1
  285. package/dist/ui/stat-flash.d.ts.map +1 -1
  286. package/dist/ui/stat-flash.js +1 -1
  287. package/dist/ui/stat-flash.js.map +1 -1
  288. package/dist/ui/stepper.d.ts +1 -1
  289. package/dist/ui/stepper.d.ts.map +1 -1
  290. package/dist/ui/stepper.js +1 -1
  291. package/dist/ui/stepper.js.map +1 -1
  292. package/dist/ui/surface.js.map +1 -1
  293. package/dist/ui/switch.d.ts +1 -1
  294. package/dist/ui/switch.js.map +1 -1
  295. package/dist/ui/table-row-link.js.map +1 -1
  296. package/dist/ui/table.js.map +1 -1
  297. package/dist/ui/tabs.js.map +1 -1
  298. package/dist/ui/text.js.map +1 -1
  299. package/dist/ui/textarea.js.map +1 -1
  300. package/dist/ui/toast-registry.js.map +1 -1
  301. package/dist/ui/toast.d.ts +4 -4
  302. package/dist/ui/toast.d.ts.map +1 -1
  303. package/dist/ui/toast.js +5 -3
  304. package/dist/ui/toast.js.map +1 -1
  305. package/dist/ui/toaster.js.map +1 -1
  306. package/dist/ui/toggle-group.js.map +1 -1
  307. package/dist/ui/toggle.js.map +1 -1
  308. package/dist/ui/tooltip.js.map +1 -1
  309. package/dist/ui/truncated-text.js.map +1 -1
  310. package/dist/ui/visually-hidden.js.map +1 -1
  311. package/llms.txt +1 -1
  312. package/mcp-manifest.json +1 -1
  313. package/package.json +21 -21
  314. package/skill/SKILL.md +1 -1
  315. package/skill/references/components.md +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","names":[],"sources":["../../src/ui/charts/_internal/legend.tsx","../../src/ui/charts/_internal/tooltip.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '../../lib/utils'\n\ninterface LegendItem {\n label: string\n color: string // CSS color value or var() reference\n}\n\ninterface LegendProps {\n items: LegendItem[]\n position?: 'top' | 'bottom' | 'left' | 'right'\n className?: string\n}\n\nexport function Legend({ items, position = 'bottom', className }: LegendProps) {\n const isVertical = position === 'left' || position === 'right'\n\n return (\n <div\n className={cn(\n 'flex gap-ds-04 text-ds-sm text-surface-fg-muted',\n isVertical ? 'flex-col' : 'flex-row flex-wrap justify-center',\n className,\n )}\n >\n {items.map((item) => (\n <div key={item.label} className=\"flex items-center gap-ds-02\">\n <span\n className=\"inline-block h-3 w-3 shrink-0 rounded-control-inner\"\n style={{ backgroundColor: item.color }}\n />\n <span>{item.label}</span>\n </div>\n ))}\n </div>\n )\n}\nLegend.displayName = 'Legend'\n\nexport type { LegendItem, LegendProps }\n","'use client'\n\nimport * as React from 'react'\nimport { useCallback,useState } from 'react'\n\nimport { cn } from '../../lib/utils'\n\ninterface TooltipState {\n visible: boolean\n x: number\n y: number\n content: React.ReactNode\n}\n\ninterface ChartTooltipProps {\n state: TooltipState\n className?: string\n}\n\nexport function ChartTooltip({ state, className }: ChartTooltipProps) {\n if (!state.visible) return null\n\n return (\n <div\n className={cn(\n 'pointer-events-none absolute z-tooltip',\n 'rounded-overlay-sm border border-surface-border-strong',\n 'bg-surface-overlay px-ds-03 py-ds-02',\n 'shadow-raised-hover',\n 'text-ds-sm text-surface-fg',\n className,\n )}\n style={{ left: state.x + 12, top: state.y - 12 }}\n >\n {state.content}\n </div>\n )\n}\nChartTooltip.displayName = 'ChartTooltip'\n\n/** Hook to manage chart tooltip state */\nexport function useChartTooltip() {\n const [tooltip, setTooltip] = useState<TooltipState>({\n visible: false,\n x: 0,\n y: 0,\n content: null,\n })\n\n const show = useCallback((x: number, y: number, content: React.ReactNode) => {\n setTooltip({ visible: true, x, y, content })\n }, [])\n\n const hide = useCallback(() => {\n setTooltip((prev) => ({ ...prev, visible: false }))\n }, [])\n\n return { tooltip, show, hide }\n}\n\nexport type { ChartTooltipProps,TooltipState }\n"],"mappings":";;;;AAeA,SAAgB,EAAO,EAAE,UAAO,cAAW,UAAU,gBAA0B;AAG7E,QACE,kBAAC,OAAD;EACE,WAAW,EACT,mDALa,MAAa,UAAU,MAAa,UAMpC,aAAa,qCAC1B,EACD;YAEA,EAAM,KAAK,MACV,kBAAC,OAAD;GAAsB,WAAU;aAAhC,CACE,kBAAC,QAAD;IACE,WAAU;IACV,OAAO,EAAE,iBAAiB,EAAK,OAAO;IACtC,CAAA,EACF,kBAAC,QAAD,EAAA,UAAO,EAAK,OAAa,CAAA,CACrB;KANI,EAAK,MAMT,CACN;EACE,CAAA;;AAGV,EAAO,cAAc;;;ACnBrB,SAAgB,EAAa,EAAE,UAAO,gBAAgC;AAGpE,QAFK,EAAM,UAGT,kBAAC,OAAD;EACE,WAAW,EACT,0CACA,0DACA,wCACA,uBACA,8BACA,EACD;EACD,OAAO;GAAE,MAAM,EAAM,IAAI;GAAI,KAAK,EAAM,IAAI;GAAI;YAE/C,EAAM;EACH,CAAA,GAfmB;;AAkB7B,EAAa,cAAc;AAG3B,SAAgB,IAAkB;CAChC,IAAM,CAAC,GAAS,KAAc,EAAuB;EACnD,SAAS;EACT,GAAG;EACH,GAAG;EACH,SAAS;EACV,CAAC;AAUF,QAAO;EAAE;EAAS,MARL,GAAa,GAAW,GAAW,MAA6B;AAC3E,KAAW;IAAE,SAAS;IAAM;IAAG;IAAG;IAAS,CAAC;KAC3C,EAAE,CAAC;EAMkB,MAJX,QAAkB;AAC7B,MAAY,OAAU;IAAE,GAAG;IAAM,SAAS;IAAO,EAAE;KAClD,EAAE,CAAC;EAEwB"}
1
+ {"version":3,"file":"tooltip.js","names":[],"sources":["../../src/ui/charts/_internal/legend.tsx","../../src/ui/charts/_internal/tooltip.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '../../lib/utils'\n\ninterface LegendItem {\n label: string\n color: string // CSS color value or var() reference\n}\n\ninterface LegendProps {\n items: LegendItem[]\n position?: 'top' | 'bottom' | 'left' | 'right'\n className?: string\n}\n\nexport function Legend({ items, position = 'bottom', className }: LegendProps) {\n const isVertical = position === 'left' || position === 'right'\n\n return (\n <div\n className={cn(\n 'flex gap-ds-04 text-ds-sm text-surface-fg-muted',\n isVertical ? 'flex-col' : 'flex-row flex-wrap justify-center',\n className,\n )}\n >\n {items.map((item) => (\n <div key={item.label} className=\"flex items-center gap-ds-02\">\n <span\n className=\"inline-block h-3 w-3 shrink-0 rounded-control-inner\"\n style={{ backgroundColor: item.color }}\n />\n <span>{item.label}</span>\n </div>\n ))}\n </div>\n )\n}\nLegend.displayName = 'Legend'\n\nexport type { LegendItem, LegendProps }\n","'use client'\n\nimport * as React from 'react'\nimport { useCallback,useState } from 'react'\n\nimport { cn } from '../../lib/utils'\n\ninterface TooltipState {\n visible: boolean\n x: number\n y: number\n content: React.ReactNode\n}\n\ninterface ChartTooltipProps {\n state: TooltipState\n className?: string\n}\n\nexport function ChartTooltip({ state, className }: ChartTooltipProps) {\n if (!state.visible) return null\n\n return (\n <div\n className={cn(\n 'pointer-events-none absolute z-tooltip',\n 'rounded-overlay-sm border border-surface-border-strong',\n 'bg-surface-overlay px-ds-03 py-ds-02',\n 'shadow-raised-hover',\n 'text-ds-sm text-surface-fg',\n className,\n )}\n style={{ left: state.x + 12, top: state.y - 12 }}\n >\n {state.content}\n </div>\n )\n}\nChartTooltip.displayName = 'ChartTooltip'\n\n/** Hook to manage chart tooltip state */\nexport function useChartTooltip() {\n const [tooltip, setTooltip] = useState<TooltipState>({\n visible: false,\n x: 0,\n y: 0,\n content: null,\n })\n\n const show = useCallback((x: number, y: number, content: React.ReactNode) => {\n setTooltip({ visible: true, x, y, content })\n }, [])\n\n const hide = useCallback(() => {\n setTooltip((prev) => ({ ...prev, visible: false }))\n }, [])\n\n return { tooltip, show, hide }\n}\n\nexport type { ChartTooltipProps,TooltipState }\n"],"mappings":";;;;AAeA,SAAgB,EAAO,EAAE,UAAO,cAAW,UAAU,gBAA0B;CAG7E,OACE,kBAAC,OAAD;EACE,WAAW,EACT,mDALa,MAAa,UAAU,MAAa,UAMpC,aAAa,qCAC1B,CACF;YAEC,EAAM,KAAK,MACV,kBAAC,OAAD;GAAsB,WAAU;aAAhC,CACE,kBAAC,QAAD;IACE,WAAU;IACV,OAAO,EAAE,iBAAiB,EAAK,MAAM;GACtC,CAAA,GACD,kBAAC,QAAD,EAAA,UAAO,EAAK,MAAY,CAAA,CACrB;KANK,EAAK,KAMV,CACN;CACE,CAAA;AAET;AACA,EAAO,cAAc;;;ACnBrB,SAAgB,EAAa,EAAE,UAAO,gBAAgC;CAGpE,OAFK,EAAM,UAGT,kBAAC,OAAD;EACE,WAAW,EACT,0CACA,0DACA,wCACA,uBACA,8BACA,CACF;EACA,OAAO;GAAE,MAAM,EAAM,IAAI;GAAI,KAAK,EAAM,IAAI;EAAG;YAE9C,EAAM;CACJ,CAAA,IAfoB;AAiB7B;AACA,EAAa,cAAc;AAG3B,SAAgB,IAAkB;CAChC,IAAM,CAAC,GAAS,KAAc,EAAuB;EACnD,SAAS;EACT,GAAG;EACH,GAAG;EACH,SAAS;CACX,CAAC;CAUD,OAAO;EAAE;EAAS,MARL,GAAa,GAAW,GAAW,MAA6B;GAC3E,EAAW;IAAE,SAAS;IAAM;IAAG;IAAG;GAAQ,CAAC;EAC7C,GAAG,CAAC,CAMc;EAAM,MAJX,QAAkB;GAC7B,GAAY,OAAU;IAAE,GAAG;IAAM,SAAS;GAAM,EAAE;EACpD,GAAG,CAAC,CAEoB;CAAK;AAC/B"}
@@ -23,7 +23,7 @@ function d(e = {}) {
23
23
  select: o((e, t) => {
24
24
  d((n) => {
25
25
  let a;
26
- return r && t?.ctrlKey ? (a = new Set(n), a.has(e) ? a.delete(e) : a.add(e)) : a = new Set([e]), i?.(Array.from(a)), a;
26
+ return r && t?.ctrlKey ? (a = new Set(n), a.has(e) ? a.delete(e) : a.add(e)) : a = /* @__PURE__ */ new Set([e]), i?.(Array.from(a)), a;
27
27
  });
28
28
  }, [r, i]),
29
29
  isExpanded: (e) => c.has(e),
@@ -1 +1 @@
1
- {"version":3,"file":"tree-view.js","names":[],"sources":["../../src/ui/tree-view/use-tree.ts","../../src/ui/tree-view/tree-view.tsx","../../src/ui/tree-view/tree-item.tsx"],"sourcesContent":["import { useCallback,useState } from 'react'\n\nimport type { IconInput } from '../lib/icon-input'\n\nexport interface TreeNode {\n id: string\n label: string\n icon?: IconInput\n children?: TreeNode[]\n disabled?: boolean\n}\n\ninterface UseTreeOptions {\n defaultExpanded?: string[]\n defaultSelected?: string[]\n multiSelect?: boolean\n onSelect?: (selectedIds: string[]) => void\n onExpand?: (expandedIds: string[]) => void\n}\n\nexport function useTree(options: UseTreeOptions = {}) {\n const { defaultExpanded, defaultSelected, multiSelect, onSelect, onExpand } = options\n\n const [expanded, setExpanded] = useState<Set<string>>(\n new Set(defaultExpanded ?? []),\n )\n const [selected, setSelected] = useState<Set<string>>(\n new Set(defaultSelected ?? []),\n )\n\n const toggle = useCallback(\n (id: string) => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n onExpand?.(Array.from(next))\n return next\n })\n },\n [onExpand],\n )\n\n const select = useCallback(\n (id: string, event?: React.MouseEvent) => {\n setSelected((prev) => {\n let next: Set<string>\n if (multiSelect && event?.ctrlKey) {\n next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n } else {\n next = new Set([id])\n }\n onSelect?.(Array.from(next))\n return next\n })\n },\n [multiSelect, onSelect],\n )\n\n return {\n expanded,\n selected,\n toggle,\n select,\n isExpanded: (id: string) => expanded.has(id),\n isSelected: (id: string) => selected.has(id),\n expandAll: (ids: string[]) => setExpanded(new Set(ids)),\n collapseAll: () => setExpanded(new Set()),\n }\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\nimport { TreeItem } from './tree-item'\nimport { type TreeNode,useTree } from './use-tree'\n\n// ─── Context ────────────────────────────────────────────────────────\ninterface TreeContextValue {\n tree: ReturnType<typeof useTree>\n checkboxes: boolean\n}\n\nconst TreeContext = React.createContext<TreeContextValue | null>(null)\n\nexport function useTreeContext() {\n const ctx = React.useContext(TreeContext)\n if (!ctx) {\n throw new Error('TreeItem must be used within a <TreeView>')\n }\n return ctx\n}\n\n// ─── Props ──────────────────────────────────────────────────────────\nexport interface TreeViewProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n /** Data-driven mode: pass items array */\n items?: TreeNode[]\n /** Initially expanded node IDs */\n defaultExpanded?: string[]\n /** Initially selected node IDs */\n defaultSelected?: string[]\n /** Enable multi-select */\n multiSelect?: boolean\n /** Show checkboxes before each item */\n checkboxes?: boolean\n /** Called when selection changes */\n onSelect?: (ids: string[]) => void\n /** Called when expansion changes */\n onExpand?: (ids: string[]) => void\n className?: string\n /** Declarative mode: render TreeItem children directly */\n children?: React.ReactNode\n}\n\n// ─── Render nodes recursively (data-driven mode) ───────────────────\nfunction renderNodes(nodes: TreeNode[], depth: number = 0): React.ReactNode {\n return nodes.map((node) => (\n <TreeItem\n key={node.id}\n itemId={node.id}\n label={node.label}\n icon={node.icon}\n disabled={node.disabled}\n depth={depth}\n >\n {node.children && node.children.length > 0\n ? renderNodes(node.children, depth + 1)\n : undefined}\n </TreeItem>\n ))\n}\n\n// ─── Helper: collect all visible item IDs ───────────────────────────\nfunction getVisibleItemElements(container: HTMLElement): HTMLElement[] {\n return Array.from(\n container.querySelectorAll<HTMLElement>('[data-tree-item]'),\n ).filter((el) => {\n // Items inside collapsed groups should not be focusable\n let parent = el.parentElement\n while (parent && parent !== container) {\n if (parent.getAttribute('role') === 'group') {\n const grid = parent.parentElement\n if (grid && grid.classList.contains('grid-rows-[0fr]')) {\n return false\n }\n }\n parent = parent.parentElement\n }\n return true\n })\n}\n\n// ─── Component ──────────────────────────────────────────────────────\nconst TreeView = React.forwardRef<HTMLUListElement, TreeViewProps>(\n (\n {\n items,\n defaultExpanded,\n defaultSelected,\n multiSelect = false,\n checkboxes = false,\n onSelect,\n onExpand,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const tree = useTree({\n defaultExpanded,\n defaultSelected,\n multiSelect,\n onSelect,\n onExpand,\n })\n\n const innerRef = React.useRef<HTMLUListElement>(null)\n const containerRef = (ref as React.RefObject<HTMLUListElement>) ?? innerRef\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\n const container = containerRef.current\n if (!container) return\n\n const visibleItems = getVisibleItemElements(container)\n const currentIndex = visibleItems.findIndex(\n (el) => el === document.activeElement,\n )\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = visibleItems[currentIndex + 1]\n next?.focus()\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = visibleItems[currentIndex - 1]\n prev?.focus()\n break\n }\n case 'ArrowRight': {\n // Handled in TreeItem for expand; if already expanded, move to first child\n const current = visibleItems[currentIndex]\n if (current) {\n const itemId = current.getAttribute('data-tree-item')\n if (itemId && tree.isExpanded(itemId)) {\n e.preventDefault()\n const nextItem = visibleItems[currentIndex + 1]\n nextItem?.focus()\n }\n }\n break\n }\n case 'ArrowLeft': {\n // Handled in TreeItem for collapse; if already collapsed or leaf, move to parent\n const current = visibleItems[currentIndex]\n if (current) {\n const itemId = current.getAttribute('data-tree-item')\n const treeItem = current.closest('[role=\"treeitem\"]')\n const parentGroup = treeItem?.parentElement?.closest(\n '[role=\"treeitem\"]',\n )\n if (itemId && !tree.isExpanded(itemId) && parentGroup) {\n e.preventDefault()\n const parentRow = parentGroup.querySelector<HTMLElement>(\n '[data-tree-item]',\n )\n parentRow?.focus()\n }\n }\n break\n }\n case 'Home': {\n e.preventDefault()\n visibleItems[0]?.focus()\n break\n }\n case 'End': {\n e.preventDefault()\n visibleItems[visibleItems.length - 1]?.focus()\n break\n }\n }\n }\n\n const ctxValue = React.useMemo<TreeContextValue>(\n () => ({ tree, checkboxes }),\n [tree, checkboxes],\n )\n\n const content = items ? renderNodes(items) : children\n\n return (\n <TreeContext.Provider value={ctxValue}>\n <ul\n ref={containerRef}\n role=\"tree\"\n aria-multiselectable={multiSelect || undefined}\n onKeyDown={handleKeyDown}\n className={cn('m-0 list-none p-0', className)}\n {...props}\n >\n {content}\n </ul>\n </TreeContext.Provider>\n )\n },\n)\nTreeView.displayName = 'TreeView'\n\nexport { TreeView }\n","'use client'\n\nimport { IconChevronRight } from '@tabler/icons-react'\nimport * as React from 'react'\n\nimport { Checkbox } from '../checkbox'\nimport { Icon } from '../icon'\nimport { IconProvider } from '../icon-context'\nimport type { IconInput } from '../lib/icon-input'\nimport { normalizeIcon } from '../lib/normalize-icon'\nimport { cn } from '../lib/utils'\nimport { useTreeContext } from './tree-view'\n\nexport interface TreeItemProps {\n /** Unique identifier for this tree item */\n itemId: string\n /** Primary label content */\n label: React.ReactNode\n /** Optional icon rendered before the label. Accepts any `IconInput`. */\n icon?: IconInput\n /** Secondary label rendered after the primary label */\n secondaryLabel?: React.ReactNode\n /** Action buttons rendered at the end of the row */\n actions?: React.ReactNode\n /** Whether this item is disabled */\n disabled?: boolean\n /** Nested tree items */\n children?: React.ReactNode\n /** Depth level (used internally) */\n depth?: number\n /** Additional CSS class names */\n className?: string\n}\n\nconst TreeItem = React.forwardRef<HTMLLIElement, TreeItemProps>(\n (\n {\n itemId,\n label,\n icon,\n secondaryLabel,\n actions,\n disabled = false,\n children,\n depth = 0,\n className,\n },\n ref,\n ) => {\n const ctx = useTreeContext()\n const hasChildren = React.Children.count(children) > 0\n const isExpanded = ctx.tree.isExpanded(itemId)\n const isSelected = ctx.tree.isSelected(itemId)\n\n const handleRowClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n ctx.tree.select(itemId, e)\n }\n\n const handleChevronClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n if (disabled) return\n ctx.tree.toggle(itemId)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n ctx.tree.select(itemId)\n }\n if (e.key === 'ArrowRight' && hasChildren && !isExpanded) {\n e.preventDefault()\n e.stopPropagation()\n ctx.tree.toggle(itemId)\n }\n if (e.key === 'ArrowLeft' && hasChildren && isExpanded) {\n e.preventDefault()\n e.stopPropagation()\n ctx.tree.toggle(itemId)\n }\n }\n\n // Compute indeterminate state for checkbox mode\n const checkboxState = React.useMemo(() => {\n if (!ctx.checkboxes || !hasChildren) {\n return { checked: isSelected, indeterminate: false }\n }\n // Collect all descendant IDs\n const descendants: string[] = []\n const collectIds = (nodes: React.ReactNode) => {\n React.Children.forEach(nodes, (child) => {\n if (React.isValidElement<TreeItemProps>(child) && child.props.itemId) {\n descendants.push(child.props.itemId)\n if (child.props.children) {\n collectIds(child.props.children)\n }\n }\n })\n }\n collectIds(children)\n const selectedCount = descendants.filter((id) =>\n ctx.tree.isSelected(id),\n ).length\n if (selectedCount === 0 && !isSelected) {\n return { checked: false, indeterminate: false }\n }\n if (selectedCount === descendants.length) {\n return { checked: true, indeterminate: false }\n }\n return { checked: false, indeterminate: true }\n }, [ctx.checkboxes, hasChildren, children, isSelected, ctx.tree])\n\n return (\n <li\n ref={ref}\n role=\"treeitem\"\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={isSelected}\n aria-level={depth + 1}\n aria-disabled={disabled || undefined}\n className=\"list-none\"\n >\n {/* Row */}\n <div\n role=\"presentation\"\n data-tree-item={itemId}\n tabIndex={disabled ? -1 : 0}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n style={{ paddingLeft: `calc(${depth} * var(--spacing-ds-05b) + var(--spacing-ds-03))` }}\n className={cn(\n 'flex items-center gap-ds-02 py-ds-02 px-ds-02 rounded-control cursor-pointer transition-colors duration-fast-01',\n 'hover:bg-surface-raised',\n 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9',\n isSelected &&\n 'bg-accent-3 text-accent-11',\n disabled && 'opacity-action-disabled cursor-not-allowed pointer-events-none',\n className,\n )}\n >\n {/* Expand chevron */}\n {hasChildren ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-hidden=\"true\"\n onClick={handleChevronClick}\n className=\"flex shrink-0 items-center justify-center p-0 border-0 bg-transparent cursor-pointer\"\n >\n <Icon\n icon={IconChevronRight}\n size=\"sm\"\n className={cn(\n 'transition-transform duration-moderate-02',\n isExpanded && 'rotate-90',\n )}\n />\n </button>\n ) : (\n <span className=\"inline-block w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n\n {/* Checkbox (optional) */}\n {ctx.checkboxes && (\n <Checkbox\n checked={checkboxState.checked}\n indeterminate={checkboxState.indeterminate}\n disabled={disabled}\n tabIndex={-1}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={() => {\n if (!disabled) ctx.tree.select(itemId)\n }}\n className=\"shrink-0\"\n />\n )}\n\n {/* Icon */}\n {icon && (\n <span className=\"flex shrink-0 items-center text-surface-fg-subtle\">\n <IconProvider size=\"sm\">{normalizeIcon(icon)}</IconProvider>\n </span>\n )}\n\n {/* Label */}\n <span className=\"min-w-0 truncate text-ds-sm\">{label}</span>\n\n {/* Secondary label */}\n {secondaryLabel && (\n <span className=\"ml-auto truncate text-ds-xs text-surface-fg-muted\">\n {secondaryLabel}\n </span>\n )}\n\n {/* Actions */}\n {actions && (\n <span\n className=\"ml-auto flex shrink-0 items-center gap-ds-01\"\n onClick={(e) => e.stopPropagation()}\n role=\"presentation\"\n >\n {actions}\n </span>\n )}\n </div>\n\n {/* Children (collapsible) */}\n {hasChildren && (\n <div\n role=\"group\"\n className={cn(\n 'grid transition-[grid-template-rows] duration-moderate-02 ease-productive-standard',\n isExpanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n >\n <ul role=\"group\" className=\"overflow-hidden m-0 p-0\">\n {React.Children.map(children, (child) => {\n if (React.isValidElement<TreeItemProps>(child)) {\n return React.cloneElement(child, {\n depth: depth + 1,\n })\n }\n return child\n })}\n </ul>\n </div>\n )}\n </li>\n )\n },\n)\nTreeItem.displayName = 'TreeItem'\n\nexport { TreeItem }\n"],"mappings":"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"}
1
+ {"version":3,"file":"tree-view.js","names":[],"sources":["../../src/ui/tree-view/use-tree.ts","../../src/ui/tree-view/tree-view.tsx","../../src/ui/tree-view/tree-item.tsx"],"sourcesContent":["import { useCallback,useState } from 'react'\n\nimport type { IconInput } from '../lib/icon-input'\n\nexport interface TreeNode {\n id: string\n label: string\n icon?: IconInput\n children?: TreeNode[]\n disabled?: boolean\n}\n\ninterface UseTreeOptions {\n defaultExpanded?: string[]\n defaultSelected?: string[]\n multiSelect?: boolean\n onSelect?: (selectedIds: string[]) => void\n onExpand?: (expandedIds: string[]) => void\n}\n\nexport function useTree(options: UseTreeOptions = {}) {\n const { defaultExpanded, defaultSelected, multiSelect, onSelect, onExpand } = options\n\n const [expanded, setExpanded] = useState<Set<string>>(\n new Set(defaultExpanded ?? []),\n )\n const [selected, setSelected] = useState<Set<string>>(\n new Set(defaultSelected ?? []),\n )\n\n const toggle = useCallback(\n (id: string) => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n onExpand?.(Array.from(next))\n return next\n })\n },\n [onExpand],\n )\n\n const select = useCallback(\n (id: string, event?: React.MouseEvent) => {\n setSelected((prev) => {\n let next: Set<string>\n if (multiSelect && event?.ctrlKey) {\n next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n } else {\n next = new Set([id])\n }\n onSelect?.(Array.from(next))\n return next\n })\n },\n [multiSelect, onSelect],\n )\n\n return {\n expanded,\n selected,\n toggle,\n select,\n isExpanded: (id: string) => expanded.has(id),\n isSelected: (id: string) => selected.has(id),\n expandAll: (ids: string[]) => setExpanded(new Set(ids)),\n collapseAll: () => setExpanded(new Set()),\n }\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\nimport { TreeItem } from './tree-item'\nimport { type TreeNode,useTree } from './use-tree'\n\n// ─── Context ────────────────────────────────────────────────────────\ninterface TreeContextValue {\n tree: ReturnType<typeof useTree>\n checkboxes: boolean\n}\n\nconst TreeContext = React.createContext<TreeContextValue | null>(null)\n\nexport function useTreeContext() {\n const ctx = React.useContext(TreeContext)\n if (!ctx) {\n throw new Error('TreeItem must be used within a <TreeView>')\n }\n return ctx\n}\n\n// ─── Props ──────────────────────────────────────────────────────────\nexport interface TreeViewProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n /** Data-driven mode: pass items array */\n items?: TreeNode[]\n /** Initially expanded node IDs */\n defaultExpanded?: string[]\n /** Initially selected node IDs */\n defaultSelected?: string[]\n /** Enable multi-select */\n multiSelect?: boolean\n /** Show checkboxes before each item */\n checkboxes?: boolean\n /** Called when selection changes */\n onSelect?: (ids: string[]) => void\n /** Called when expansion changes */\n onExpand?: (ids: string[]) => void\n className?: string\n /** Declarative mode: render TreeItem children directly */\n children?: React.ReactNode\n}\n\n// ─── Render nodes recursively (data-driven mode) ───────────────────\nfunction renderNodes(nodes: TreeNode[], depth: number = 0): React.ReactNode {\n return nodes.map((node) => (\n <TreeItem\n key={node.id}\n itemId={node.id}\n label={node.label}\n icon={node.icon}\n disabled={node.disabled}\n depth={depth}\n >\n {node.children && node.children.length > 0\n ? renderNodes(node.children, depth + 1)\n : undefined}\n </TreeItem>\n ))\n}\n\n// ─── Helper: collect all visible item IDs ───────────────────────────\nfunction getVisibleItemElements(container: HTMLElement): HTMLElement[] {\n return Array.from(\n container.querySelectorAll<HTMLElement>('[data-tree-item]'),\n ).filter((el) => {\n // Items inside collapsed groups should not be focusable\n let parent = el.parentElement\n while (parent && parent !== container) {\n if (parent.getAttribute('role') === 'group') {\n const grid = parent.parentElement\n if (grid && grid.classList.contains('grid-rows-[0fr]')) {\n return false\n }\n }\n parent = parent.parentElement\n }\n return true\n })\n}\n\n// ─── Component ──────────────────────────────────────────────────────\nconst TreeView = React.forwardRef<HTMLUListElement, TreeViewProps>(\n (\n {\n items,\n defaultExpanded,\n defaultSelected,\n multiSelect = false,\n checkboxes = false,\n onSelect,\n onExpand,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const tree = useTree({\n defaultExpanded,\n defaultSelected,\n multiSelect,\n onSelect,\n onExpand,\n })\n\n const innerRef = React.useRef<HTMLUListElement>(null)\n const containerRef = (ref as React.RefObject<HTMLUListElement>) ?? innerRef\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\n const container = containerRef.current\n if (!container) return\n\n const visibleItems = getVisibleItemElements(container)\n const currentIndex = visibleItems.findIndex(\n (el) => el === document.activeElement,\n )\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = visibleItems[currentIndex + 1]\n next?.focus()\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = visibleItems[currentIndex - 1]\n prev?.focus()\n break\n }\n case 'ArrowRight': {\n // Handled in TreeItem for expand; if already expanded, move to first child\n const current = visibleItems[currentIndex]\n if (current) {\n const itemId = current.getAttribute('data-tree-item')\n if (itemId && tree.isExpanded(itemId)) {\n e.preventDefault()\n const nextItem = visibleItems[currentIndex + 1]\n nextItem?.focus()\n }\n }\n break\n }\n case 'ArrowLeft': {\n // Handled in TreeItem for collapse; if already collapsed or leaf, move to parent\n const current = visibleItems[currentIndex]\n if (current) {\n const itemId = current.getAttribute('data-tree-item')\n const treeItem = current.closest('[role=\"treeitem\"]')\n const parentGroup = treeItem?.parentElement?.closest(\n '[role=\"treeitem\"]',\n )\n if (itemId && !tree.isExpanded(itemId) && parentGroup) {\n e.preventDefault()\n const parentRow = parentGroup.querySelector<HTMLElement>(\n '[data-tree-item]',\n )\n parentRow?.focus()\n }\n }\n break\n }\n case 'Home': {\n e.preventDefault()\n visibleItems[0]?.focus()\n break\n }\n case 'End': {\n e.preventDefault()\n visibleItems[visibleItems.length - 1]?.focus()\n break\n }\n }\n }\n\n const ctxValue = React.useMemo<TreeContextValue>(\n () => ({ tree, checkboxes }),\n [tree, checkboxes],\n )\n\n const content = items ? renderNodes(items) : children\n\n return (\n <TreeContext.Provider value={ctxValue}>\n <ul\n ref={containerRef}\n role=\"tree\"\n aria-multiselectable={multiSelect || undefined}\n onKeyDown={handleKeyDown}\n className={cn('m-0 list-none p-0', className)}\n {...props}\n >\n {content}\n </ul>\n </TreeContext.Provider>\n )\n },\n)\nTreeView.displayName = 'TreeView'\n\nexport { TreeView }\n","'use client'\n\nimport { IconChevronRight } from '@tabler/icons-react'\nimport * as React from 'react'\n\nimport { Checkbox } from '../checkbox'\nimport { Icon } from '../icon'\nimport { IconProvider } from '../icon-context'\nimport type { IconInput } from '../lib/icon-input'\nimport { normalizeIcon } from '../lib/normalize-icon'\nimport { cn } from '../lib/utils'\nimport { useTreeContext } from './tree-view'\n\nexport interface TreeItemProps {\n /** Unique identifier for this tree item */\n itemId: string\n /** Primary label content */\n label: React.ReactNode\n /** Optional icon rendered before the label. Accepts any `IconInput`. */\n icon?: IconInput\n /** Secondary label rendered after the primary label */\n secondaryLabel?: React.ReactNode\n /** Action buttons rendered at the end of the row */\n actions?: React.ReactNode\n /** Whether this item is disabled */\n disabled?: boolean\n /** Nested tree items */\n children?: React.ReactNode\n /** Depth level (used internally) */\n depth?: number\n /** Additional CSS class names */\n className?: string\n}\n\nconst TreeItem = React.forwardRef<HTMLLIElement, TreeItemProps>(\n (\n {\n itemId,\n label,\n icon,\n secondaryLabel,\n actions,\n disabled = false,\n children,\n depth = 0,\n className,\n },\n ref,\n ) => {\n const ctx = useTreeContext()\n const hasChildren = React.Children.count(children) > 0\n const isExpanded = ctx.tree.isExpanded(itemId)\n const isSelected = ctx.tree.isSelected(itemId)\n\n const handleRowClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n ctx.tree.select(itemId, e)\n }\n\n const handleChevronClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n if (disabled) return\n ctx.tree.toggle(itemId)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n ctx.tree.select(itemId)\n }\n if (e.key === 'ArrowRight' && hasChildren && !isExpanded) {\n e.preventDefault()\n e.stopPropagation()\n ctx.tree.toggle(itemId)\n }\n if (e.key === 'ArrowLeft' && hasChildren && isExpanded) {\n e.preventDefault()\n e.stopPropagation()\n ctx.tree.toggle(itemId)\n }\n }\n\n // Compute indeterminate state for checkbox mode\n const checkboxState = React.useMemo(() => {\n if (!ctx.checkboxes || !hasChildren) {\n return { checked: isSelected, indeterminate: false }\n }\n // Collect all descendant IDs\n const descendants: string[] = []\n const collectIds = (nodes: React.ReactNode) => {\n React.Children.forEach(nodes, (child) => {\n if (React.isValidElement<TreeItemProps>(child) && child.props.itemId) {\n descendants.push(child.props.itemId)\n if (child.props.children) {\n collectIds(child.props.children)\n }\n }\n })\n }\n collectIds(children)\n const selectedCount = descendants.filter((id) =>\n ctx.tree.isSelected(id),\n ).length\n if (selectedCount === 0 && !isSelected) {\n return { checked: false, indeterminate: false }\n }\n if (selectedCount === descendants.length) {\n return { checked: true, indeterminate: false }\n }\n return { checked: false, indeterminate: true }\n }, [ctx.checkboxes, hasChildren, children, isSelected, ctx.tree])\n\n return (\n <li\n ref={ref}\n role=\"treeitem\"\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={isSelected}\n aria-level={depth + 1}\n aria-disabled={disabled || undefined}\n className=\"list-none\"\n >\n {/* Row */}\n <div\n role=\"presentation\"\n data-tree-item={itemId}\n tabIndex={disabled ? -1 : 0}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n style={{ paddingLeft: `calc(${depth} * var(--spacing-ds-05b) + var(--spacing-ds-03))` }}\n className={cn(\n 'flex items-center gap-ds-02 py-ds-02 px-ds-02 rounded-control cursor-pointer transition-colors duration-fast-01',\n 'hover:bg-surface-raised',\n 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9',\n isSelected &&\n 'bg-accent-3 text-accent-11',\n disabled && 'opacity-action-disabled cursor-not-allowed pointer-events-none',\n className,\n )}\n >\n {/* Expand chevron */}\n {hasChildren ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-hidden=\"true\"\n onClick={handleChevronClick}\n className=\"flex shrink-0 items-center justify-center p-0 border-0 bg-transparent cursor-pointer\"\n >\n <Icon\n icon={IconChevronRight}\n size=\"sm\"\n className={cn(\n 'transition-transform duration-moderate-02',\n isExpanded && 'rotate-90',\n )}\n />\n </button>\n ) : (\n <span className=\"inline-block w-4 shrink-0\" aria-hidden=\"true\" />\n )}\n\n {/* Checkbox (optional) */}\n {ctx.checkboxes && (\n <Checkbox\n checked={checkboxState.checked}\n indeterminate={checkboxState.indeterminate}\n disabled={disabled}\n tabIndex={-1}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={() => {\n if (!disabled) ctx.tree.select(itemId)\n }}\n className=\"shrink-0\"\n />\n )}\n\n {/* Icon */}\n {icon && (\n <span className=\"flex shrink-0 items-center text-surface-fg-subtle\">\n <IconProvider size=\"sm\">{normalizeIcon(icon)}</IconProvider>\n </span>\n )}\n\n {/* Label */}\n <span className=\"min-w-0 truncate text-ds-sm\">{label}</span>\n\n {/* Secondary label */}\n {secondaryLabel && (\n <span className=\"ml-auto truncate text-ds-xs text-surface-fg-muted\">\n {secondaryLabel}\n </span>\n )}\n\n {/* Actions */}\n {actions && (\n <span\n className=\"ml-auto flex shrink-0 items-center gap-ds-01\"\n onClick={(e) => e.stopPropagation()}\n role=\"presentation\"\n >\n {actions}\n </span>\n )}\n </div>\n\n {/* Children (collapsible) */}\n {hasChildren && (\n <div\n role=\"group\"\n className={cn(\n 'grid transition-[grid-template-rows] duration-moderate-02 ease-productive-standard',\n isExpanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n >\n <ul role=\"group\" className=\"overflow-hidden m-0 p-0\">\n {React.Children.map(children, (child) => {\n if (React.isValidElement<TreeItemProps>(child)) {\n return React.cloneElement(child, {\n depth: depth + 1,\n })\n }\n return child\n })}\n </ul>\n </div>\n )}\n </li>\n )\n },\n)\nTreeItem.displayName = 'TreeItem'\n\nexport { TreeItem }\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-calendar.js","names":[],"sources":["../../src/composed/date-picker/calendar-grid.tsx","../../src/composed/date-picker/use-calendar.ts"],"sourcesContent":["'use client'\n\nimport { IconChevronLeft, IconChevronRight } from '@tabler/icons-react'\nimport {\n addDays,\n addMonths,\n endOfMonth,\n endOfWeek,\n format,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isWithinInterval,\n lastDayOfMonth,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from 'date-fns'\nimport * as React from 'react'\n\nimport { Icon } from '../../ui/icon'\nimport { cn } from '../../ui/lib/utils'\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n\nexport interface CalendarEvent {\n date: Date\n color?: string\n label?: string\n}\n\nexport interface CalendarGridProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onSelect'> {\n currentMonth: Date\n selected?: Date | null\n rangeStart?: Date | null\n rangeEnd?: Date | null\n hoverDate?: Date | null\n onSelect: (date: Date) => void\n onHover?: (date: Date | null) => void\n onMonthChange: (date: Date) => void\n onHeaderClick?: () => void\n disabledDates?: (date: Date) => boolean\n minDate?: Date\n maxDate?: Date\n /** Hide the previous-month navigation arrow */\n hidePrevNav?: boolean\n /** Hide the next-month navigation arrow */\n hideNextNav?: boolean\n /** Events to display as dot indicators on dates */\n events?: CalendarEvent[]\n}\n\nexport const CalendarGrid = React.forwardRef<HTMLDivElement, CalendarGridProps>(\n function CalendarGrid({\n currentMonth,\n selected,\n rangeStart,\n rangeEnd,\n hoverDate,\n onSelect,\n onHover,\n onMonthChange,\n onHeaderClick,\n disabledDates,\n minDate,\n maxDate,\n hidePrevNav,\n hideNextNav,\n events,\n className,\n ...props\n}, forwardedRef) {\n const gridRef = React.useRef<HTMLDivElement>(null)\n\n const eventsByDate = React.useMemo(() => {\n const map = new Map<string, CalendarEvent[]>()\n if (!events) return map\n for (const evt of events) {\n const key = format(evt.date, 'yyyy-MM-dd')\n const arr = map.get(key) ?? []\n arr.push(evt)\n map.set(key, arr)\n }\n return map\n }, [events])\n\n const monthStart = startOfMonth(currentMonth)\n const monthEnd = endOfMonth(currentMonth)\n const calendarStart = startOfWeek(monthStart)\n const calendarEnd = endOfWeek(monthEnd)\n\n const days: Date[] = []\n let day = calendarStart\n while (day <= calendarEnd) {\n days.push(day)\n day = addDays(day, 1)\n }\n\n const isDateDisabled = (date: Date): boolean => {\n if (disabledDates?.(date)) return true\n if (minDate && isBefore(date, startOfDay(minDate))) return true\n if (maxDate && isAfter(date, startOfDay(maxDate))) return true\n return false\n }\n\n const isInRange = (date: Date) => {\n if (rangeStart && rangeEnd) {\n const start = isBefore(rangeStart, rangeEnd) ? rangeStart : rangeEnd\n const end = isAfter(rangeEnd, rangeStart) ? rangeEnd : rangeStart\n return isWithinInterval(date, { start, end })\n }\n if (rangeStart && hoverDate) {\n const start = isBefore(rangeStart, hoverDate) ? rangeStart : hoverDate\n const end = isAfter(hoverDate, rangeStart) ? hoverDate : rangeStart\n return isWithinInterval(date, { start, end })\n }\n return false\n }\n\n const isRangeEdge = (date: Date) => {\n if (rangeStart && isSameDay(date, rangeStart)) return true\n if (rangeEnd && isSameDay(date, rangeEnd)) return true\n return false\n }\n\n const focusDate = (target: Date) => {\n if (!gridRef.current) return\n const dateStr = format(target, 'yyyy-MM-dd')\n const btn = gridRef.current.querySelector<HTMLButtonElement>(\n `[data-date=\"${dateStr}\"]`,\n )\n if (btn) {\n btn.focus()\n } else {\n // Date is in a different month — navigate there and focus after render\n onMonthChange(startOfMonth(target))\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement\n const dateStr = target.getAttribute('data-date')\n if (!dateStr) return\n\n const current = new Date(dateStr + 'T00:00:00')\n let next: Date | null = null\n\n switch (e.key) {\n case 'ArrowLeft':\n next = addDays(current, -1)\n break\n case 'ArrowRight':\n next = addDays(current, 1)\n break\n case 'ArrowUp':\n next = addDays(current, -7)\n break\n case 'ArrowDown':\n next = addDays(current, 7)\n break\n case 'Home':\n next = startOfMonth(current)\n break\n case 'End':\n next = lastDayOfMonth(current)\n break\n case 'Enter':\n case ' ': {\n e.preventDefault()\n if (!isDateDisabled(current) && isSameMonth(current, currentMonth)) {\n onSelect(current)\n }\n return\n }\n default:\n return\n }\n\n if (next) {\n e.preventDefault()\n focusDate(next)\n }\n }\n\n return (\n <div ref={forwardedRef} {...props} className={cn(\"w-[252px]\", className)}>\n <div className=\"flex items-center justify-between px-ds-02 pb-ds-04\">\n {hidePrevNav ? (\n <span className=\"h-ds-xs-plus w-ds-xs-plus\" />\n ) : (\n <button\n type=\"button\"\n onClick={() => onMonthChange(subMonths(currentMonth, 1))}\n className=\"inline-flex h-ds-xs-plus w-ds-xs-plus items-center justify-center rounded-control text-surface-fg-subtle transition-colors duration-fast-01 ease-productive-standard hover:bg-surface-raised-hover hover:text-surface-fg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9\"\n aria-label=\"Previous month\"\n >\n <Icon icon={IconChevronLeft} size=\"sm\" stroke=\"light\" />\n </button>\n )}\n <button\n type=\"button\"\n onClick={onHeaderClick}\n className={cn(\n 'text-ds-md font-semibold text-surface-fg',\n onHeaderClick &&\n 'cursor-pointer rounded-control px-ds-02 transition-colors duration-fast-01 ease-productive-standard hover:bg-surface-raised-hover',\n )}\n aria-label=\"Switch to month/year view\"\n >\n {format(currentMonth, 'MMMM yyyy')}\n </button>\n {hideNextNav ? (\n <span className=\"h-ds-xs-plus w-ds-xs-plus\" />\n ) : (\n <button\n type=\"button\"\n onClick={() => onMonthChange(addMonths(currentMonth, 1))}\n className=\"inline-flex h-ds-xs-plus w-ds-xs-plus items-center justify-center rounded-control text-surface-fg-subtle transition-colors duration-fast-01 ease-productive-standard hover:bg-surface-raised-hover hover:text-surface-fg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9\"\n aria-label=\"Next month\"\n >\n <Icon icon={IconChevronRight} size=\"sm\" stroke=\"light\" />\n </button>\n )}\n </div>\n\n <div\n ref={gridRef}\n className=\"grid grid-cols-7 gap-0\"\n role=\"grid\"\n tabIndex={0}\n aria-label=\"Calendar\"\n onKeyDown={handleKeyDown}\n >\n {WEEKDAYS.map((wd) => (\n <div\n key={wd}\n role=\"columnheader\"\n className=\"flex h-ds-sm items-center justify-center text-ds-xs font-semibold uppercase tracking-wider text-surface-fg-subtle\"\n >\n {wd}\n </div>\n ))}\n\n {days.map((d, i) => {\n const inMonth = isSameMonth(d, currentMonth)\n const disabled = isDateDisabled(d)\n const isSelected = selected && isSameDay(d, selected)\n const inRange = isInRange(d)\n const edge = isRangeEdge(d)\n const isToday = isSameDay(d, new Date())\n const dateKey = format(d, 'yyyy-MM-dd')\n const dayEvents = eventsByDate.get(dateKey) ?? []\n\n return (\n <button\n key={i}\n type=\"button\"\n role=\"gridcell\"\n data-date={dateKey}\n tabIndex={inMonth && !disabled ? 0 : -1}\n disabled={!inMonth || disabled}\n onClick={() => {\n if (inMonth && !disabled) onSelect(d)\n }}\n onMouseEnter={() => onHover?.(d)}\n onMouseLeave={() => onHover?.(null)}\n aria-label={format(d, 'EEEE, MMMM d, yyyy')}\n aria-selected={isSelected || edge || undefined}\n aria-disabled={!inMonth || disabled || undefined}\n className={cn(\n 'relative flex h-ds-sm w-ds-sm-plus items-center justify-center rounded-control text-ds-md font-body transition-colors duration-fast-01 ease-productive-standard',\n !inMonth && 'pointer-events-none opacity-0',\n inMonth && disabled && 'opacity-action-disabled pointer-events-none cursor-not-allowed',\n inMonth && !disabled && !isSelected && !edge && !inRange &&\n 'text-surface-fg hover:bg-surface-raised-hover',\n inRange && !edge &&\n 'rounded-none bg-surface-raised-hover text-surface-fg',\n (isSelected || edge) &&\n 'bg-accent-9 text-accent-fg hover:bg-accent-10',\n isToday && !isSelected && !edge && !disabled &&\n 'font-semibold text-accent-11',\n )}\n >\n {format(d, 'd')}\n {dayEvents.length > 0 && (\n <span className=\"flex gap-px justify-center absolute bottom-[2px] left-0 right-0\">\n {dayEvents.slice(0, 3).map((evt, idx) => (\n <span\n key={idx}\n data-event-dot\n className=\"h-ds-02 w-ds-02 rounded-pill\"\n style={{ backgroundColor: evt.color ?? 'var(--color-accent-9)' }}\n />\n ))}\n </span>\n )}\n </button>\n )\n })}\n </div>\n </div>\n )\n},\n)\n\nCalendarGrid.displayName = 'CalendarGrid'\n","'use client'\n\nimport { addMonths, setMonth, setYear,subMonths } from 'date-fns'\nimport { useState } from 'react'\n\nexport function useCalendar(initialMonth?: Date) {\n const [currentMonth, setCurrentMonth] = useState(initialMonth ?? new Date())\n\n const goToPreviousMonth = () => setCurrentMonth((prev) => subMonths(prev, 1))\n const goToNextMonth = () => setCurrentMonth((prev) => addMonths(prev, 1))\n const goToMonth = (month: number) =>\n setCurrentMonth((prev) => setMonth(prev, month))\n const goToYear = (year: number) =>\n setCurrentMonth((prev) => setYear(prev, year))\n\n return {\n currentMonth,\n setCurrentMonth,\n goToPreviousMonth,\n goToNextMonth,\n goToMonth,\n goToYear,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-calendar.js","names":[],"sources":["../../src/composed/date-picker/calendar-grid.tsx","../../src/composed/date-picker/use-calendar.ts"],"sourcesContent":["'use client'\n\nimport { IconChevronLeft, IconChevronRight } from '@tabler/icons-react'\nimport {\n addDays,\n addMonths,\n endOfMonth,\n endOfWeek,\n format,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isWithinInterval,\n lastDayOfMonth,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from 'date-fns'\nimport * as React from 'react'\n\nimport { Icon } from '../../ui/icon'\nimport { cn } from '../../ui/lib/utils'\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n\nexport interface CalendarEvent {\n date: Date\n color?: string\n label?: string\n}\n\nexport interface CalendarGridProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onSelect'> {\n currentMonth: Date\n selected?: Date | null\n rangeStart?: Date | null\n rangeEnd?: Date | null\n hoverDate?: Date | null\n onSelect: (date: Date) => void\n onHover?: (date: Date | null) => void\n onMonthChange: (date: Date) => void\n onHeaderClick?: () => void\n disabledDates?: (date: Date) => boolean\n minDate?: Date\n maxDate?: Date\n /** Hide the previous-month navigation arrow */\n hidePrevNav?: boolean\n /** Hide the next-month navigation arrow */\n hideNextNav?: boolean\n /** Events to display as dot indicators on dates */\n events?: CalendarEvent[]\n}\n\nexport const CalendarGrid = React.forwardRef<HTMLDivElement, CalendarGridProps>(\n function CalendarGrid({\n currentMonth,\n selected,\n rangeStart,\n rangeEnd,\n hoverDate,\n onSelect,\n onHover,\n onMonthChange,\n onHeaderClick,\n disabledDates,\n minDate,\n maxDate,\n hidePrevNav,\n hideNextNav,\n events,\n className,\n ...props\n}, forwardedRef) {\n const gridRef = React.useRef<HTMLDivElement>(null)\n\n const eventsByDate = React.useMemo(() => {\n const map = new Map<string, CalendarEvent[]>()\n if (!events) return map\n for (const evt of events) {\n const key = format(evt.date, 'yyyy-MM-dd')\n const arr = map.get(key) ?? []\n arr.push(evt)\n map.set(key, arr)\n }\n return map\n }, [events])\n\n const monthStart = startOfMonth(currentMonth)\n const monthEnd = endOfMonth(currentMonth)\n const calendarStart = startOfWeek(monthStart)\n const calendarEnd = endOfWeek(monthEnd)\n\n const days: Date[] = []\n let day = calendarStart\n while (day <= calendarEnd) {\n days.push(day)\n day = addDays(day, 1)\n }\n\n const isDateDisabled = (date: Date): boolean => {\n if (disabledDates?.(date)) return true\n if (minDate && isBefore(date, startOfDay(minDate))) return true\n if (maxDate && isAfter(date, startOfDay(maxDate))) return true\n return false\n }\n\n const isInRange = (date: Date) => {\n if (rangeStart && rangeEnd) {\n const start = isBefore(rangeStart, rangeEnd) ? rangeStart : rangeEnd\n const end = isAfter(rangeEnd, rangeStart) ? rangeEnd : rangeStart\n return isWithinInterval(date, { start, end })\n }\n if (rangeStart && hoverDate) {\n const start = isBefore(rangeStart, hoverDate) ? rangeStart : hoverDate\n const end = isAfter(hoverDate, rangeStart) ? hoverDate : rangeStart\n return isWithinInterval(date, { start, end })\n }\n return false\n }\n\n const isRangeEdge = (date: Date) => {\n if (rangeStart && isSameDay(date, rangeStart)) return true\n if (rangeEnd && isSameDay(date, rangeEnd)) return true\n return false\n }\n\n const focusDate = (target: Date) => {\n if (!gridRef.current) return\n const dateStr = format(target, 'yyyy-MM-dd')\n const btn = gridRef.current.querySelector<HTMLButtonElement>(\n `[data-date=\"${dateStr}\"]`,\n )\n if (btn) {\n btn.focus()\n } else {\n // Date is in a different month — navigate there and focus after render\n onMonthChange(startOfMonth(target))\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement\n const dateStr = target.getAttribute('data-date')\n if (!dateStr) return\n\n const current = new Date(dateStr + 'T00:00:00')\n let next: Date | null = null\n\n switch (e.key) {\n case 'ArrowLeft':\n next = addDays(current, -1)\n break\n case 'ArrowRight':\n next = addDays(current, 1)\n break\n case 'ArrowUp':\n next = addDays(current, -7)\n break\n case 'ArrowDown':\n next = addDays(current, 7)\n break\n case 'Home':\n next = startOfMonth(current)\n break\n case 'End':\n next = lastDayOfMonth(current)\n break\n case 'Enter':\n case ' ': {\n e.preventDefault()\n if (!isDateDisabled(current) && isSameMonth(current, currentMonth)) {\n onSelect(current)\n }\n return\n }\n default:\n return\n }\n\n if (next) {\n e.preventDefault()\n focusDate(next)\n }\n }\n\n return (\n <div ref={forwardedRef} {...props} className={cn(\"w-[252px]\", className)}>\n <div className=\"flex items-center justify-between px-ds-02 pb-ds-04\">\n {hidePrevNav ? (\n <span className=\"h-ds-xs-plus w-ds-xs-plus\" />\n ) : (\n <button\n type=\"button\"\n onClick={() => onMonthChange(subMonths(currentMonth, 1))}\n className=\"inline-flex h-ds-xs-plus w-ds-xs-plus items-center justify-center rounded-control text-surface-fg-subtle transition-colors duration-fast-01 ease-productive-standard hover:bg-surface-raised-hover hover:text-surface-fg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9\"\n aria-label=\"Previous month\"\n >\n <Icon icon={IconChevronLeft} size=\"sm\" stroke=\"light\" />\n </button>\n )}\n <button\n type=\"button\"\n onClick={onHeaderClick}\n className={cn(\n 'text-ds-md font-semibold text-surface-fg',\n onHeaderClick &&\n 'cursor-pointer rounded-control px-ds-02 transition-colors duration-fast-01 ease-productive-standard hover:bg-surface-raised-hover',\n )}\n aria-label=\"Switch to month/year view\"\n >\n {format(currentMonth, 'MMMM yyyy')}\n </button>\n {hideNextNav ? (\n <span className=\"h-ds-xs-plus w-ds-xs-plus\" />\n ) : (\n <button\n type=\"button\"\n onClick={() => onMonthChange(addMonths(currentMonth, 1))}\n className=\"inline-flex h-ds-xs-plus w-ds-xs-plus items-center justify-center rounded-control text-surface-fg-subtle transition-colors duration-fast-01 ease-productive-standard hover:bg-surface-raised-hover hover:text-surface-fg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9\"\n aria-label=\"Next month\"\n >\n <Icon icon={IconChevronRight} size=\"sm\" stroke=\"light\" />\n </button>\n )}\n </div>\n\n <div\n ref={gridRef}\n className=\"grid grid-cols-7 gap-0\"\n role=\"grid\"\n tabIndex={0}\n aria-label=\"Calendar\"\n onKeyDown={handleKeyDown}\n >\n {WEEKDAYS.map((wd) => (\n <div\n key={wd}\n role=\"columnheader\"\n className=\"flex h-ds-sm items-center justify-center text-ds-xs font-semibold uppercase tracking-wider text-surface-fg-subtle\"\n >\n {wd}\n </div>\n ))}\n\n {days.map((d, i) => {\n const inMonth = isSameMonth(d, currentMonth)\n const disabled = isDateDisabled(d)\n const isSelected = selected && isSameDay(d, selected)\n const inRange = isInRange(d)\n const edge = isRangeEdge(d)\n const isToday = isSameDay(d, new Date())\n const dateKey = format(d, 'yyyy-MM-dd')\n const dayEvents = eventsByDate.get(dateKey) ?? []\n\n return (\n <button\n key={i}\n type=\"button\"\n role=\"gridcell\"\n data-date={dateKey}\n tabIndex={inMonth && !disabled ? 0 : -1}\n disabled={!inMonth || disabled}\n onClick={() => {\n if (inMonth && !disabled) onSelect(d)\n }}\n onMouseEnter={() => onHover?.(d)}\n onMouseLeave={() => onHover?.(null)}\n aria-label={format(d, 'EEEE, MMMM d, yyyy')}\n aria-selected={isSelected || edge || undefined}\n aria-disabled={!inMonth || disabled || undefined}\n className={cn(\n 'relative flex h-ds-sm w-ds-sm-plus items-center justify-center rounded-control text-ds-md font-body transition-colors duration-fast-01 ease-productive-standard',\n !inMonth && 'pointer-events-none opacity-0',\n inMonth && disabled && 'opacity-action-disabled pointer-events-none cursor-not-allowed',\n inMonth && !disabled && !isSelected && !edge && !inRange &&\n 'text-surface-fg hover:bg-surface-raised-hover',\n inRange && !edge &&\n 'rounded-none bg-surface-raised-hover text-surface-fg',\n (isSelected || edge) &&\n 'bg-accent-9 text-accent-fg hover:bg-accent-10',\n isToday && !isSelected && !edge && !disabled &&\n 'font-semibold text-accent-11',\n )}\n >\n {format(d, 'd')}\n {dayEvents.length > 0 && (\n <span className=\"flex gap-px justify-center absolute bottom-[2px] left-0 right-0\">\n {dayEvents.slice(0, 3).map((evt, idx) => (\n <span\n key={idx}\n data-event-dot\n className=\"h-ds-02 w-ds-02 rounded-pill\"\n style={{ backgroundColor: evt.color ?? 'var(--color-accent-9)' }}\n />\n ))}\n </span>\n )}\n </button>\n )\n })}\n </div>\n </div>\n )\n},\n)\n\nCalendarGrid.displayName = 'CalendarGrid'\n","'use client'\n\nimport { addMonths, setMonth, setYear,subMonths } from 'date-fns'\nimport { useState } from 'react'\n\nexport function useCalendar(initialMonth?: Date) {\n const [currentMonth, setCurrentMonth] = useState(initialMonth ?? new Date())\n\n const goToPreviousMonth = () => setCurrentMonth((prev) => subMonths(prev, 1))\n const goToNextMonth = () => setCurrentMonth((prev) => addMonths(prev, 1))\n const goToMonth = (month: number) =>\n setCurrentMonth((prev) => setMonth(prev, month))\n const goToYear = (year: number) =>\n setCurrentMonth((prev) => setYear(prev, year))\n\n return {\n currentMonth,\n setCurrentMonth,\n goToPreviousMonth,\n goToNextMonth,\n goToMonth,\n goToYear,\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-controllable-open.js","names":[],"sources":["../../src/ui/lib/use-controllable-open.ts"],"sourcesContent":["import * as React from 'react'\n\n/**\n * Options for {@link useControllableOpen}. Mirrors the standard Radix open-state\n * prop trio so a component can spread its own props straight in.\n */\nexport interface UseControllableOpenOptions {\n /** Controlled open value. When defined, the hook is in controlled mode. */\n open?: boolean\n /** Initial open value in uncontrolled mode. @default false */\n defaultOpen?: boolean\n /** Called on every open/close request (both modes). */\n onOpenChange?: (open: boolean) => void\n}\n\nexport interface ControllableOpen {\n /** The effective open state (controlled value, or internal state). */\n open: boolean\n /** Request a new open state — updates internal state (uncontrolled) and always fires `onOpenChange`. */\n setOpen: (next: boolean) => void\n /** Convenience: `setOpen(false)`. Stable across renders. */\n close: () => void\n}\n\n/**\n * Controlled/uncontrolled open-state machine shared by every overlay\n * (Dialog, Popover, Sheet, Tooltip, DropdownMenu, …). The effective `open` is\n * kept in React state even in controlled mode so overlays can drive\n * `AnimatePresence` exit animations from it.\n *\n * Extracted so the identical block isn't hand-copied per overlay — one fix\n * site instead of six.\n */\nexport function useControllableOpen({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n}: UseControllableOpenOptions): ControllableOpen {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : uncontrolledOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next)\n onOpenChange?.(next)\n },\n [isControlled, onOpenChange],\n )\n\n const close = React.useCallback(() => setOpen(false), [setOpen])\n\n return { open, setOpen, close }\n}\n"],"mappings":";;AAiCA,SAAgB,EAAoB,EAClC,MAAM,GACN,iBAAc,IACd,mBAC+C;CAC/C,IAAM,CAAC,GAAkB,KAAuB,EAAM,SAAS,EAAY,EACrE,IAAe,MAAmB,KAAA,GAClC,IAAO,IAAe,IAAiB,GAEvC,IAAU,EAAM,aACnB,MAAkB;AAEjB,EADK,KAAc,EAAoB,EAAK,EAC5C,IAAe,EAAK;IAEtB,CAAC,GAAc,EAAa,CAC7B;AAID,QAAO;EAAE;EAAM;EAAS,OAFV,EAAM,kBAAkB,EAAQ,GAAM,EAAE,CAAC,EAAQ,CAAC;EAEjC"}
1
+ {"version":3,"file":"use-controllable-open.js","names":[],"sources":["../../src/ui/lib/use-controllable-open.ts"],"sourcesContent":["import * as React from 'react'\n\n/**\n * Options for {@link useControllableOpen}. Mirrors the standard Radix open-state\n * prop trio so a component can spread its own props straight in.\n */\nexport interface UseControllableOpenOptions {\n /** Controlled open value. When defined, the hook is in controlled mode. */\n open?: boolean\n /** Initial open value in uncontrolled mode. @default false */\n defaultOpen?: boolean\n /** Called on every open/close request (both modes). */\n onOpenChange?: (open: boolean) => void\n}\n\nexport interface ControllableOpen {\n /** The effective open state (controlled value, or internal state). */\n open: boolean\n /** Request a new open state — updates internal state (uncontrolled) and always fires `onOpenChange`. */\n setOpen: (next: boolean) => void\n /** Convenience: `setOpen(false)`. Stable across renders. */\n close: () => void\n}\n\n/**\n * Controlled/uncontrolled open-state machine shared by every overlay\n * (Dialog, Popover, Sheet, Tooltip, DropdownMenu, …). The effective `open` is\n * kept in React state even in controlled mode so overlays can drive\n * `AnimatePresence` exit animations from it.\n *\n * Extracted so the identical block isn't hand-copied per overlay — one fix\n * site instead of six.\n */\nexport function useControllableOpen({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n}: UseControllableOpenOptions): ControllableOpen {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : uncontrolledOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next)\n onOpenChange?.(next)\n },\n [isControlled, onOpenChange],\n )\n\n const close = React.useCallback(() => setOpen(false), [setOpen])\n\n return { open, setOpen, close }\n}\n"],"mappings":";;AAiCA,SAAgB,EAAoB,EAClC,MAAM,GACN,iBAAc,IACd,mBAC+C;CAC/C,IAAM,CAAC,GAAkB,KAAuB,EAAM,SAAS,CAAW,GACpE,IAAe,MAAmB,KAAA,GAClC,IAAO,IAAe,IAAiB,GAEvC,IAAU,EAAM,aACnB,MAAkB;EAEjB,AADK,KAAc,EAAoB,CAAI,GAC3C,IAAe,CAAI;CACrB,GACA,CAAC,GAAc,CAAY,CAC7B;CAIA,OAAO;EAAE;EAAM;EAAS,OAFV,EAAM,kBAAkB,EAAQ,EAAK,GAAG,CAAC,CAAO,CAEtC;CAAM;AAChC"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import e, { useCallback as t, useEffect as n, useLayoutEffect as r, useMemo as i, useRef as a, useState as o } from "react";
3
- //#region ../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/react-colorful/dist/index.mjs
3
+ //#region ../../node_modules/.pnpm/react-colorful@5.8.0_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/react-colorful/dist/index.mjs
4
4
  function s() {
5
5
  return (s = Object.assign || function(e) {
6
6
  for (var t = 1; t < arguments.length; t++) {
@@ -40,48 +40,61 @@ var u = function(e, t, n) {
40
40
  }, m = function(e) {
41
41
  !d(e) && e.preventDefault();
42
42
  }, h = e.memo(function(t) {
43
- var r = t.onMove, o = t.onKey, u = c(t, ["onMove", "onKey"]), h = a(null), g = l(r), _ = l(o), v = a(null), y = a(!1), b = i(function() {
43
+ var r = t.onMove, o = t.onKey, u = t.onEnd, h = c(t, [
44
+ "onMove",
45
+ "onKey",
46
+ "onEnd"
47
+ ]), g = a(null), _ = l(r), v = l(o), y = l(u), b = a(null), x = a(!1), S = i(function() {
44
48
  var e = function(e) {
45
- m(e), (d(e) ? e.touches.length > 0 : e.buttons > 0) && h.current ? g(p(h.current, e, v.current)) : n(!1);
49
+ m(e), (d(e) ? e.touches.length > 0 : e.buttons > 0) && g.current ? _(p(g.current, e, b.current)) : (n(!1), y());
46
50
  }, t = function() {
47
- return n(!1);
51
+ n(!1), y();
48
52
  };
49
53
  function n(n) {
50
- var r = y.current, i = f(h.current), a = n ? i.addEventListener : i.removeEventListener;
54
+ var r = x.current, i = f(g.current), a = n ? i.addEventListener : i.removeEventListener;
51
55
  a(r ? "touchmove" : "mousemove", e), a(r ? "touchend" : "mouseup", t);
52
56
  }
53
57
  return [
54
58
  function(e) {
55
- var t = e.nativeEvent, r = h.current;
59
+ var t = e.nativeEvent, r = g.current;
56
60
  if (r && (m(t), !function(e, t) {
57
61
  return t && !d(e);
58
- }(t, y.current) && r)) {
62
+ }(t, x.current) && r)) {
59
63
  if (d(t)) {
60
- y.current = !0;
64
+ x.current = !0;
61
65
  var i = t.changedTouches || [];
62
- i.length && (v.current = i[0].identifier);
66
+ i.length && (b.current = i[0].identifier);
63
67
  }
64
- r.focus(), g(p(r, t, v.current)), n(!0);
68
+ r.focus(), _(p(r, t, b.current)), n(!0);
65
69
  }
66
70
  },
67
71
  function(e) {
68
72
  var t = e.which || e.keyCode;
69
- t < 37 || t > 40 || (e.preventDefault(), _({
73
+ t < 37 || t > 40 || (e.preventDefault(), v({
70
74
  left: t === 39 ? .05 : t === 37 ? -.05 : 0,
71
75
  top: t === 40 ? .05 : t === 38 ? -.05 : 0
72
76
  }));
73
77
  },
78
+ function(e) {
79
+ var t = e.which || e.keyCode;
80
+ t >= 37 && t <= 40 && y();
81
+ },
74
82
  n
75
83
  ];
76
- }, [_, g]), x = b[0], S = b[1], C = b[2];
84
+ }, [
85
+ v,
86
+ _,
87
+ y
88
+ ]), C = S[0], w = S[1], T = S[2], E = S[3];
77
89
  return n(function() {
78
- return C;
79
- }, [C]), e.createElement("div", s({}, u, {
80
- onTouchStart: x,
81
- onMouseDown: x,
90
+ return E;
91
+ }, [E]), e.createElement("div", s({}, h, {
92
+ onTouchStart: C,
93
+ onMouseDown: C,
82
94
  className: "react-colorful__interactive",
83
- ref: h,
84
- onKeyDown: S,
95
+ ref: g,
96
+ onKeyDown: w,
97
+ onKeyUp: T,
85
98
  tabIndex: 0,
86
99
  role: "slider"
87
100
  }));
@@ -176,14 +189,15 @@ var y = function(e) {
176
189
  a: i
177
190
  };
178
191
  }, O = e.memo(function(t) {
179
- var n = t.hue, r = t.onChange, i = g(["react-colorful__hue", t.className]);
180
- return e.createElement("div", { className: i }, e.createElement(h, {
192
+ var n = t.hue, r = t.onChange, i = t.onChangeEnd, a = g(["react-colorful__hue", t.className]);
193
+ return e.createElement("div", { className: a }, e.createElement(h, {
181
194
  onMove: function(e) {
182
195
  r({ h: 360 * e.left });
183
196
  },
184
197
  onKey: function(e) {
185
198
  r({ h: u(n + 360 * e.left, 0, 360) });
186
199
  },
200
+ onEnd: i,
187
201
  "aria-label": "Hue",
188
202
  "aria-valuenow": v(n),
189
203
  "aria-valuemax": "360",
@@ -199,7 +213,7 @@ var y = function(e) {
199
213
  })
200
214
  })));
201
215
  }), k = e.memo(function(t) {
202
- var n = t.hsva, r = t.onChange, i = { backgroundColor: C({
216
+ var n = t.hsva, r = t.onChange, i = t.onChangeEnd, a = { backgroundColor: C({
203
217
  h: n.h,
204
218
  s: 100,
205
219
  v: 100,
@@ -207,7 +221,7 @@ var y = function(e) {
207
221
  }) };
208
222
  return e.createElement("div", {
209
223
  className: "react-colorful__saturation",
210
- style: i
224
+ style: a
211
225
  }, e.createElement(h, {
212
226
  onMove: function(e) {
213
227
  r({
@@ -221,6 +235,7 @@ var y = function(e) {
221
235
  v: u(n.v - 100 * e.top, 0, 100)
222
236
  });
223
237
  },
238
+ onEnd: i,
224
239
  "aria-label": "Color",
225
240
  "aria-valuetext": "Saturation " + v(n.s) + "%, Brightness " + v(n.v) + "%"
226
241
  }, e.createElement(_, {
@@ -236,67 +251,79 @@ var y = function(e) {
236
251
  }, j = function(e, t) {
237
252
  return e.toLowerCase() === t.toLowerCase() || A(b(e), b(t));
238
253
  };
239
- function M(e, r, i) {
240
- var s = l(i), c = o(function() {
254
+ function M(e, r, i, s) {
255
+ var c = l(i), u = l(s), d = o(function() {
241
256
  return e.toHsva(r);
242
- }), u = c[0], d = c[1], f = a({
257
+ }), f = d[0], p = d[1], m = a({
243
258
  color: r,
244
- hsva: u
245
- });
259
+ hsva: f
260
+ }), h = a(!1);
246
261
  return n(function() {
247
- if (!e.equal(r, f.current.color)) {
262
+ if (!e.equal(r, m.current.color)) {
248
263
  var t = e.toHsva(r);
249
- f.current = {
264
+ m.current = {
250
265
  hsva: t,
251
266
  color: r
252
- }, d(t);
267
+ }, p(t), h.current = !1;
253
268
  }
254
269
  }, [r, e]), n(function() {
255
270
  var t;
256
- A(u, f.current.hsva) || e.equal(t = e.fromHsva(u), f.current.color) || (f.current = {
257
- hsva: u,
271
+ A(f, m.current.hsva) || e.equal(t = e.fromHsva(f), m.current.color) || (m.current = {
272
+ hsva: f,
258
273
  color: t
259
- }, s(t));
274
+ }, c(t), h.current = !0);
260
275
  }, [
261
- u,
276
+ f,
262
277
  e,
263
- s
264
- ]), [u, t(function(e) {
265
- d(function(t) {
266
- return Object.assign({}, t, e);
267
- });
268
- }, [])];
278
+ c
279
+ ]), [
280
+ f,
281
+ t(function(e) {
282
+ p(function(t) {
283
+ return Object.assign({}, t, e);
284
+ });
285
+ }, []),
286
+ t(function() {
287
+ h.current && (h.current = !1, u(m.current.color));
288
+ }, [u])
289
+ ];
269
290
  }
270
291
  var N, P = typeof window < "u" ? r : n, F = function() {
271
292
  return N || (typeof __webpack_nonce__ < "u" ? __webpack_nonce__ : void 0);
272
- }, I = /* @__PURE__ */ new Map(), L = function(e) {
293
+ }, I = /* @__PURE__ */ new WeakMap(), L = function(e) {
273
294
  P(function() {
274
- var t = e.current ? e.current.ownerDocument : document;
275
- if (t !== void 0 && !I.has(t)) {
276
- var n = t.createElement("style");
277
- n.innerHTML = ".react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:\"\";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><path d=\"M8 0h8v8H8zM0 8h8v8H0z\"/></svg>')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}", I.set(t, n);
278
- var r = F();
279
- r && n.setAttribute("nonce", r), t.head.appendChild(n);
295
+ var t = e.current;
296
+ if (typeof document < "u" && t) {
297
+ var n = t.getRootNode ? t.getRootNode() : t.ownerDocument, r = n && ("head" in n || "host" in n) ? n : t.ownerDocument;
298
+ if (!I.has(r)) {
299
+ var i = "head" in r ? r.head : r, a = (i.ownerDocument || document).createElement("style");
300
+ a.innerHTML = ".react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:\"\";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><path d=\"M8 0h8v8H8zM0 8h8v8H0z\"/></svg>')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}";
301
+ var o = F();
302
+ o && a.setAttribute("nonce", o), I.set(r, a), i.appendChild(a);
303
+ }
280
304
  }
281
305
  }, []);
282
306
  }, R = function(t) {
283
- var n = t.className, r = t.colorModel, i = t.color, o = i === void 0 ? r.defaultColor : i, l = t.onChange, u = c(t, [
307
+ var n = t.className, r = t.colorModel, i = t.color, o = i === void 0 ? r.defaultColor : i, l = t.onChange, u = t.onChangeEnd, d = c(t, [
284
308
  "className",
285
309
  "colorModel",
286
310
  "color",
287
- "onChange"
288
- ]), d = a(null);
289
- L(d);
290
- var f = M(r, o, l), p = f[0], m = f[1], h = g(["react-colorful", n]);
291
- return e.createElement("div", s({}, u, {
292
- ref: d,
293
- className: h
311
+ "onChange",
312
+ "onChangeEnd"
313
+ ]), f = a(null);
314
+ L(f);
315
+ var p = M(r, o, l, u), m = p[0], h = p[1], _ = p[2], v = g(["react-colorful", n]);
316
+ return e.createElement("div", s({}, d, {
317
+ ref: f,
318
+ className: v
294
319
  }), e.createElement(k, {
295
- hsva: p,
296
- onChange: m
320
+ hsva: m,
321
+ onChange: h,
322
+ onChangeEnd: _
297
323
  }), e.createElement(O, {
298
- hue: p.h,
299
- onChange: m,
324
+ hue: m.h,
325
+ onChange: h,
326
+ onChangeEnd: _,
300
327
  className: "react-colorful__last-control"
301
328
  }));
302
329
  }, z = {
@@ -1 +1 @@
1
- {"version":3,"file":"vendor-client.js","names":["r","e","t","n","o","a","l"],"sources":["../../../../node_modules/.pnpm/react-colorful@5.6.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/react-colorful/dist/index.mjs"],"sourcesContent":["import e,{useRef as r,useMemo as t,useEffect as n,useState as o,useCallback as a,useLayoutEffect as l}from\"react\";function u(){return(u=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}function c(e,r){if(null==e)return{};var t,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r.indexOf(t=a[n])>=0||(o[t]=e[t]);return o}function i(e){var t=r(e),n=r(function(e){t.current&&t.current(e)});return t.current=e,n.current}var s=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=1),e>t?t:e<r?r:e},f=function(e){return\"touches\"in e},v=function(e){return e&&e.ownerDocument.defaultView||self},d=function(e,r,t){var n=e.getBoundingClientRect(),o=f(r)?function(e,r){for(var t=0;t<e.length;t++)if(e[t].identifier===r)return e[t];return e[0]}(r.touches,t):r;return{left:s((o.pageX-(n.left+v(e).pageXOffset))/n.width),top:s((o.pageY-(n.top+v(e).pageYOffset))/n.height)}},h=function(e){!f(e)&&e.preventDefault()},m=e.memo(function(o){var a=o.onMove,l=o.onKey,s=c(o,[\"onMove\",\"onKey\"]),m=r(null),g=i(a),p=i(l),b=r(null),_=r(!1),x=t(function(){var e=function(e){h(e),(f(e)?e.touches.length>0:e.buttons>0)&&m.current?g(d(m.current,e,b.current)):t(!1)},r=function(){return t(!1)};function t(t){var n=_.current,o=v(m.current),a=t?o.addEventListener:o.removeEventListener;a(n?\"touchmove\":\"mousemove\",e),a(n?\"touchend\":\"mouseup\",r)}return[function(e){var r=e.nativeEvent,n=m.current;if(n&&(h(r),!function(e,r){return r&&!f(e)}(r,_.current)&&n)){if(f(r)){_.current=!0;var o=r.changedTouches||[];o.length&&(b.current=o[0].identifier)}n.focus(),g(d(n,r,b.current)),t(!0)}},function(e){var r=e.which||e.keyCode;r<37||r>40||(e.preventDefault(),p({left:39===r?.05:37===r?-.05:0,top:40===r?.05:38===r?-.05:0}))},t]},[p,g]),C=x[0],E=x[1],H=x[2];return n(function(){return H},[H]),e.createElement(\"div\",u({},s,{onTouchStart:C,onMouseDown:C,className:\"react-colorful__interactive\",ref:m,onKeyDown:E,tabIndex:0,role:\"slider\"}))}),g=function(e){return e.filter(Boolean).join(\" \")},p=function(r){var t=r.color,n=r.left,o=r.top,a=void 0===o?.5:o,l=g([\"react-colorful__pointer\",r.className]);return e.createElement(\"div\",{className:l,style:{top:100*a+\"%\",left:100*n+\"%\"}},e.createElement(\"div\",{className:\"react-colorful__pointer-fill\",style:{backgroundColor:t}}))},b=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=Math.pow(10,r)),Math.round(t*e)/t},_={grad:.9,turn:360,rad:360/(2*Math.PI)},x=function(e){return L(C(e))},C=function(e){return\"#\"===e[0]&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?b(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:8===e.length?b(parseInt(e.substring(6,8),16)/255,2):1}},E=function(e,r){return void 0===r&&(r=\"deg\"),Number(e)*(_[r]||1)},H=function(e){var r=/hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?N({h:E(r[1],r[2]),s:Number(r[3]),l:Number(r[4]),a:void 0===r[5]?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},M=H,N=function(e){var r=e.s,t=e.l;return{h:e.h,s:(r*=(t<50?t:100-t)/100)>0?2*r/(t+r)*100:0,v:t+r,a:e.a}},w=function(e){return K(I(e))},y=function(e){var r=e.s,t=e.v,n=e.a,o=(200-r)*t/100;return{h:b(e.h),s:b(o>0&&o<200?r*t/100/(o<=100?o:200-o)*100:0),l:b(o/2),a:b(n,2)}},q=function(e){var r=y(e);return\"hsl(\"+r.h+\", \"+r.s+\"%, \"+r.l+\"%)\"},k=function(e){var r=y(e);return\"hsla(\"+r.h+\", \"+r.s+\"%, \"+r.l+\"%, \"+r.a+\")\"},I=function(e){var r=e.h,t=e.s,n=e.v,o=e.a;r=r/360*6,t/=100,n/=100;var a=Math.floor(r),l=n*(1-t),u=n*(1-(r-a)*t),c=n*(1-(1-r+a)*t),i=a%6;return{r:b(255*[n,u,l,l,c,n][i]),g:b(255*[c,n,n,u,l,l][i]),b:b(255*[l,l,c,n,n,u][i]),a:b(o,2)}},O=function(e){var r=/hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?A({h:E(r[1],r[2]),s:Number(r[3]),v:Number(r[4]),a:void 0===r[5]?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},j=O,z=function(e){var r=/rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?L({r:Number(r[1])/(r[2]?100/255:1),g:Number(r[3])/(r[4]?100/255:1),b:Number(r[5])/(r[6]?100/255:1),a:void 0===r[7]?1:Number(r[7])/(r[8]?100:1)}):{h:0,s:0,v:0,a:1}},B=z,D=function(e){var r=e.toString(16);return r.length<2?\"0\"+r:r},K=function(e){var r=e.r,t=e.g,n=e.b,o=e.a,a=o<1?D(b(255*o)):\"\";return\"#\"+D(r)+D(t)+D(n)+a},L=function(e){var r=e.r,t=e.g,n=e.b,o=e.a,a=Math.max(r,t,n),l=a-Math.min(r,t,n),u=l?a===r?(t-n)/l:a===t?2+(n-r)/l:4+(r-t)/l:0;return{h:b(60*(u<0?u+6:u)),s:b(a?l/a*100:0),v:b(a/255*100),a:o}},A=function(e){return{h:b(e.h),s:b(e.s),v:b(e.v),a:b(e.a,2)}},S=e.memo(function(r){var t=r.hue,n=r.onChange,o=g([\"react-colorful__hue\",r.className]);return e.createElement(\"div\",{className:o},e.createElement(m,{onMove:function(e){n({h:360*e.left})},onKey:function(e){n({h:s(t+360*e.left,0,360)})},\"aria-label\":\"Hue\",\"aria-valuenow\":b(t),\"aria-valuemax\":\"360\",\"aria-valuemin\":\"0\"},e.createElement(p,{className:\"react-colorful__hue-pointer\",left:t/360,color:q({h:t,s:100,v:100,a:1})})))}),T=e.memo(function(r){var t=r.hsva,n=r.onChange,o={backgroundColor:q({h:t.h,s:100,v:100,a:1})};return e.createElement(\"div\",{className:\"react-colorful__saturation\",style:o},e.createElement(m,{onMove:function(e){n({s:100*e.left,v:100-100*e.top})},onKey:function(e){n({s:s(t.s+100*e.left,0,100),v:s(t.v-100*e.top,0,100)})},\"aria-label\":\"Color\",\"aria-valuetext\":\"Saturation \"+b(t.s)+\"%, Brightness \"+b(t.v)+\"%\"},e.createElement(p,{className:\"react-colorful__saturation-pointer\",top:1-t.v/100,left:t.s/100,color:q(t)})))}),F=function(e,r){if(e===r)return!0;for(var t in e)if(e[t]!==r[t])return!1;return!0},P=function(e,r){return e.replace(/\\s/g,\"\")===r.replace(/\\s/g,\"\")},X=function(e,r){return e.toLowerCase()===r.toLowerCase()||F(C(e),C(r))};function Y(e,t,l){var u=i(l),c=o(function(){return e.toHsva(t)}),s=c[0],f=c[1],v=r({color:t,hsva:s});n(function(){if(!e.equal(t,v.current.color)){var r=e.toHsva(t);v.current={hsva:r,color:t},f(r)}},[t,e]),n(function(){var r;F(s,v.current.hsva)||e.equal(r=e.fromHsva(s),v.current.color)||(v.current={hsva:s,color:r},u(r))},[s,e,u]);var d=a(function(e){f(function(r){return Object.assign({},r,e)})},[]);return[s,d]}var R,V=\"undefined\"!=typeof window?l:n,$=function(){return R||(\"undefined\"!=typeof __webpack_nonce__?__webpack_nonce__:void 0)},G=function(e){R=e},J=new Map,Q=function(e){V(function(){var r=e.current?e.current.ownerDocument:document;if(void 0!==r&&!J.has(r)){var t=r.createElement(\"style\");t.innerHTML='.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:\"\";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\\'data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><path d=\"M8 0h8v8H8zM0 8h8v8H0z\"/></svg>\\')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}',J.set(r,t);var n=$();n&&t.setAttribute(\"nonce\",n),r.head.appendChild(t)}},[])},U=function(t){var n=t.className,o=t.colorModel,a=t.color,l=void 0===a?o.defaultColor:a,i=t.onChange,s=c(t,[\"className\",\"colorModel\",\"color\",\"onChange\"]),f=r(null);Q(f);var v=Y(o,l,i),d=v[0],h=v[1],m=g([\"react-colorful\",n]);return e.createElement(\"div\",u({},s,{ref:f,className:m}),e.createElement(T,{hsva:d,onChange:h}),e.createElement(S,{hue:d.h,onChange:h,className:\"react-colorful__last-control\"}))},W={defaultColor:\"000\",toHsva:x,fromHsva:function(e){return w({h:e.h,s:e.s,v:e.v,a:1})},equal:X},Z=function(r){return e.createElement(U,u({},r,{colorModel:W}))},ee=function(r){var t=r.className,n=r.hsva,o=r.onChange,a={backgroundImage:\"linear-gradient(90deg, \"+k(Object.assign({},n,{a:0}))+\", \"+k(Object.assign({},n,{a:1}))+\")\"},l=g([\"react-colorful__alpha\",t]),u=b(100*n.a);return e.createElement(\"div\",{className:l},e.createElement(\"div\",{className:\"react-colorful__alpha-gradient\",style:a}),e.createElement(m,{onMove:function(e){o({a:e.left})},onKey:function(e){o({a:s(n.a+e.left)})},\"aria-label\":\"Alpha\",\"aria-valuetext\":u+\"%\",\"aria-valuenow\":u,\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\"},e.createElement(p,{className:\"react-colorful__alpha-pointer\",left:n.a,color:k(n)})))},re=function(t){var n=t.className,o=t.colorModel,a=t.color,l=void 0===a?o.defaultColor:a,i=t.onChange,s=c(t,[\"className\",\"colorModel\",\"color\",\"onChange\"]),f=r(null);Q(f);var v=Y(o,l,i),d=v[0],h=v[1],m=g([\"react-colorful\",n]);return e.createElement(\"div\",u({},s,{ref:f,className:m}),e.createElement(T,{hsva:d,onChange:h}),e.createElement(S,{hue:d.h,onChange:h}),e.createElement(ee,{hsva:d,onChange:h,className:\"react-colorful__last-control\"}))},te={defaultColor:\"0001\",toHsva:x,fromHsva:w,equal:X},ne=function(r){return e.createElement(re,u({},r,{colorModel:te}))},oe={defaultColor:{h:0,s:0,l:0,a:1},toHsva:N,fromHsva:y,equal:F},ae=function(r){return e.createElement(re,u({},r,{colorModel:oe}))},le={defaultColor:\"hsla(0, 0%, 0%, 1)\",toHsva:H,fromHsva:k,equal:P},ue=function(r){return e.createElement(re,u({},r,{colorModel:le}))},ce={defaultColor:{h:0,s:0,l:0},toHsva:function(e){return N({h:e.h,s:e.s,l:e.l,a:1})},fromHsva:function(e){return{h:(r=y(e)).h,s:r.s,l:r.l};var r},equal:F},ie=function(r){return e.createElement(U,u({},r,{colorModel:ce}))},se={defaultColor:\"hsl(0, 0%, 0%)\",toHsva:M,fromHsva:q,equal:P},fe=function(r){return e.createElement(U,u({},r,{colorModel:se}))},ve={defaultColor:{h:0,s:0,v:0,a:1},toHsva:function(e){return e},fromHsva:A,equal:F},de=function(r){return e.createElement(re,u({},r,{colorModel:ve}))},he={defaultColor:\"hsva(0, 0%, 0%, 1)\",toHsva:O,fromHsva:function(e){var r=A(e);return\"hsva(\"+r.h+\", \"+r.s+\"%, \"+r.v+\"%, \"+r.a+\")\"},equal:P},me=function(r){return e.createElement(re,u({},r,{colorModel:he}))},ge={defaultColor:{h:0,s:0,v:0},toHsva:function(e){return{h:e.h,s:e.s,v:e.v,a:1}},fromHsva:function(e){var r=A(e);return{h:r.h,s:r.s,v:r.v}},equal:F},pe=function(r){return e.createElement(U,u({},r,{colorModel:ge}))},be={defaultColor:\"hsv(0, 0%, 0%)\",toHsva:j,fromHsva:function(e){var r=A(e);return\"hsv(\"+r.h+\", \"+r.s+\"%, \"+r.v+\"%)\"},equal:P},_e=function(r){return e.createElement(U,u({},r,{colorModel:be}))},xe={defaultColor:{r:0,g:0,b:0,a:1},toHsva:L,fromHsva:I,equal:F},Ce=function(r){return e.createElement(re,u({},r,{colorModel:xe}))},Ee={defaultColor:\"rgba(0, 0, 0, 1)\",toHsva:z,fromHsva:function(e){var r=I(e);return\"rgba(\"+r.r+\", \"+r.g+\", \"+r.b+\", \"+r.a+\")\"},equal:P},He=function(r){return e.createElement(re,u({},r,{colorModel:Ee}))},Me={defaultColor:{r:0,g:0,b:0},toHsva:function(e){return L({r:e.r,g:e.g,b:e.b,a:1})},fromHsva:function(e){return{r:(r=I(e)).r,g:r.g,b:r.b};var r},equal:F},Ne=function(r){return e.createElement(U,u({},r,{colorModel:Me}))},we={defaultColor:\"rgb(0, 0, 0)\",toHsva:B,fromHsva:function(e){var r=I(e);return\"rgb(\"+r.r+\", \"+r.g+\", \"+r.b+\")\"},equal:P},ye=function(r){return e.createElement(U,u({},r,{colorModel:we}))},qe=/^#?([0-9A-F]{3,8})$/i,ke=function(r){var t=r.color,l=void 0===t?\"\":t,s=r.onChange,f=r.onBlur,v=r.escape,d=r.validate,h=r.format,m=r.process,g=c(r,[\"color\",\"onChange\",\"onBlur\",\"escape\",\"validate\",\"format\",\"process\"]),p=o(function(){return v(l)}),b=p[0],_=p[1],x=i(s),C=i(f),E=a(function(e){var r=v(e.target.value);_(r),d(r)&&x(m?m(r):r)},[v,m,d,x]),H=a(function(e){d(e.target.value)||_(v(l)),C(e)},[l,v,d,C]);return n(function(){_(v(l))},[l,v]),e.createElement(\"input\",u({},g,{value:h?h(b):b,spellCheck:\"false\",onChange:E,onBlur:H}))},Ie=function(e){return\"#\"+e},Oe=function(r){var t=r.prefixed,n=r.alpha,o=c(r,[\"prefixed\",\"alpha\"]),l=a(function(e){return e.replace(/([^0-9A-F]+)/gi,\"\").substring(0,n?8:6)},[n]),i=a(function(e){return function(e,r){var t=qe.exec(e),n=t?t[1].length:0;return 3===n||6===n||!!r&&4===n||!!r&&8===n}(e,n)},[n]);return e.createElement(ke,u({},o,{escape:l,format:t?Ie:void 0,process:Ie,validate:i}))};export{ne as HexAlphaColorPicker,Oe as HexColorInput,Z as HexColorPicker,ie as HslColorPicker,fe as HslStringColorPicker,ae as HslaColorPicker,ue as HslaStringColorPicker,pe as HsvColorPicker,_e as HsvStringColorPicker,de as HsvaColorPicker,me as HsvaStringColorPicker,Ne as RgbColorPicker,ye as RgbStringColorPicker,Ce as RgbaColorPicker,He as RgbaStringColorPicker,G as setNonce};\n//# sourceMappingURL=index.module.js.map\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"vendor-client.js","names":["r","e","n","t","o","a","u"],"sources":["../../../../node_modules/.pnpm/react-colorful@5.8.0_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/react-colorful/dist/index.mjs"],"sourcesContent":["import e,{useRef as r,useMemo as n,useEffect as t,useState as o,useCallback as a,useLayoutEffect as u}from\"react\";function l(){return(l=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e}).apply(this,arguments)}function c(e,r){if(null==e)return{};var n,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)r.indexOf(n=a[t])>=0||(o[n]=e[n]);return o}function i(e){var n=r(e),t=r(function(e){n.current&&n.current(e)});return n.current=e,t.current}var s=function(e,r,n){return void 0===r&&(r=0),void 0===n&&(n=1),e>n?n:e<r?r:e},f=function(e){return\"touches\"in e},d=function(e){return e&&e.ownerDocument.defaultView||self},v=function(e,r,n){var t=e.getBoundingClientRect(),o=f(r)?function(e,r){for(var n=0;n<e.length;n++)if(e[n].identifier===r)return e[n];return e[0]}(r.touches,n):r;return{left:s((o.pageX-(t.left+d(e).pageXOffset))/t.width),top:s((o.pageY-(t.top+d(e).pageYOffset))/t.height)}},h=function(e){!f(e)&&e.preventDefault()},g=e.memo(function(o){var a=o.onMove,u=o.onKey,s=o.onEnd,g=c(o,[\"onMove\",\"onKey\",\"onEnd\"]),m=r(null),p=i(a),b=i(u),_=i(s),E=r(null),C=r(!1),x=n(function(){var e=function(e){h(e),(f(e)?e.touches.length>0:e.buttons>0)&&m.current?p(v(m.current,e,E.current)):(n(!1),_())},r=function(){n(!1),_()};function n(n){var t=C.current,o=d(m.current),a=n?o.addEventListener:o.removeEventListener;a(t?\"touchmove\":\"mousemove\",e),a(t?\"touchend\":\"mouseup\",r)}return[function(e){var r=e.nativeEvent,t=m.current;if(t&&(h(r),!function(e,r){return r&&!f(e)}(r,C.current)&&t)){if(f(r)){C.current=!0;var o=r.changedTouches||[];o.length&&(E.current=o[0].identifier)}t.focus(),p(v(t,r,E.current)),n(!0)}},function(e){var r=e.which||e.keyCode;r<37||r>40||(e.preventDefault(),b({left:39===r?.05:37===r?-.05:0,top:40===r?.05:38===r?-.05:0}))},function(e){var r=e.which||e.keyCode;r>=37&&r<=40&&_()},n]},[b,p,_]),H=x[0],M=x[1],N=x[2],w=x[3];return t(function(){return w},[w]),e.createElement(\"div\",l({},g,{onTouchStart:H,onMouseDown:H,className:\"react-colorful__interactive\",ref:m,onKeyDown:M,onKeyUp:N,tabIndex:0,role:\"slider\"}))}),m=function(e){return e.filter(Boolean).join(\" \")},p=function(r){var n=r.color,t=r.left,o=r.top,a=void 0===o?.5:o,u=m([\"react-colorful__pointer\",r.className]);return e.createElement(\"div\",{className:u,style:{top:100*a+\"%\",left:100*t+\"%\"}},e.createElement(\"div\",{className:\"react-colorful__pointer-fill\",style:{backgroundColor:n}}))},b=function(e,r,n){return void 0===r&&(r=0),void 0===n&&(n=Math.pow(10,r)),Math.round(n*e)/n},_={grad:.9,turn:360,rad:360/(2*Math.PI)},E=function(e){return L(C(e))},C=function(e){return\"#\"===e[0]&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?b(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:8===e.length?b(parseInt(e.substring(6,8),16)/255,2):1}},x=function(e,r){return void 0===r&&(r=\"deg\"),Number(e)*(_[r]||1)},H=function(e){var r=/hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?N({h:x(r[1],r[2]),s:Number(r[3]),l:Number(r[4]),a:void 0===r[5]?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},M=H,N=function(e){var r=e.s,n=e.l;return{h:e.h,s:(r*=(n<50?n:100-n)/100)>0?2*r/(n+r)*100:0,v:n+r,a:e.a}},w=function(e){return B(I(e))},y=function(e){var r=e.s,n=e.v,t=e.a,o=(200-r)*n/100;return{h:b(e.h),s:b(o>0&&o<200?r*n/100/(o<=100?o:200-o)*100:0),l:b(o/2),a:b(t,2)}},k=function(e){var r=y(e);return\"hsl(\"+r.h+\", \"+r.s+\"%, \"+r.l+\"%)\"},q=function(e){var r=y(e);return\"hsla(\"+r.h+\", \"+r.s+\"%, \"+r.l+\"%, \"+r.a+\")\"},I=function(e){var r=e.h,n=e.s,t=e.v,o=e.a;r=r/360*6,n/=100,t/=100;var a=Math.floor(r),u=t*(1-n),l=t*(1-(r-a)*n),c=t*(1-(1-r+a)*n),i=a%6;return{r:b(255*[t,l,u,u,c,t][i]),g:b(255*[c,t,t,l,u,u][i]),b:b(255*[u,u,c,t,t,l][i]),a:b(o,2)}},O=function(e){var r=/hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?A({h:x(r[1],r[2]),s:Number(r[3]),v:Number(r[4]),a:void 0===r[5]?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},D=O,j=function(e){var r=/rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?L({r:Number(r[1])/(r[2]?100/255:1),g:Number(r[3])/(r[4]?100/255:1),b:Number(r[5])/(r[6]?100/255:1),a:void 0===r[7]?1:Number(r[7])/(r[8]?100:1)}):{h:0,s:0,v:0,a:1}},z=j,K=function(e){var r=e.toString(16);return r.length<2?\"0\"+r:r},B=function(e){var r=e.r,n=e.g,t=e.b,o=e.a,a=o<1?K(b(255*o)):\"\";return\"#\"+K(r)+K(n)+K(t)+a},L=function(e){var r=e.r,n=e.g,t=e.b,o=e.a,a=Math.max(r,n,t),u=a-Math.min(r,n,t),l=u?a===r?(n-t)/u:a===n?2+(t-r)/u:4+(r-n)/u:0;return{h:b(60*(l<0?l+6:l)),s:b(a?u/a*100:0),v:b(a/255*100),a:o}},A=function(e){return{h:b(e.h),s:b(e.s),v:b(e.v),a:b(e.a,2)}},R=e.memo(function(r){var n=r.hue,t=r.onChange,o=r.onChangeEnd,a=m([\"react-colorful__hue\",r.className]);return e.createElement(\"div\",{className:a},e.createElement(g,{onMove:function(e){t({h:360*e.left})},onKey:function(e){t({h:s(n+360*e.left,0,360)})},onEnd:o,\"aria-label\":\"Hue\",\"aria-valuenow\":b(n),\"aria-valuemax\":\"360\",\"aria-valuemin\":\"0\"},e.createElement(p,{className:\"react-colorful__hue-pointer\",left:n/360,color:k({h:n,s:100,v:100,a:1})})))}),S=e.memo(function(r){var n=r.hsva,t=r.onChange,o=r.onChangeEnd,a={backgroundColor:k({h:n.h,s:100,v:100,a:1})};return e.createElement(\"div\",{className:\"react-colorful__saturation\",style:a},e.createElement(g,{onMove:function(e){t({s:100*e.left,v:100-100*e.top})},onKey:function(e){t({s:s(n.s+100*e.left,0,100),v:s(n.v-100*e.top,0,100)})},onEnd:o,\"aria-label\":\"Color\",\"aria-valuetext\":\"Saturation \"+b(n.s)+\"%, Brightness \"+b(n.v)+\"%\"},e.createElement(p,{className:\"react-colorful__saturation-pointer\",top:1-n.v/100,left:n.s/100,color:k(n)})))}),T=function(e,r){if(e===r)return!0;for(var n in e)if(e[n]!==r[n])return!1;return!0},F=function(e,r){return e.replace(/\\s/g,\"\")===r.replace(/\\s/g,\"\")},P=function(e,r){return e.toLowerCase()===r.toLowerCase()||T(C(e),C(r))};function X(e,n,u,l){var c=i(u),s=i(l),f=o(function(){return e.toHsva(n)}),d=f[0],v=f[1],h=r({color:n,hsva:d}),g=r(!1);t(function(){if(!e.equal(n,h.current.color)){var r=e.toHsva(n);h.current={hsva:r,color:n},v(r),g.current=!1}},[n,e]),t(function(){var r;T(d,h.current.hsva)||e.equal(r=e.fromHsva(d),h.current.color)||(h.current={hsva:d,color:r},c(r),g.current=!0)},[d,e,c]);var m=a(function(e){v(function(r){return Object.assign({},r,e)})},[]),p=a(function(){g.current&&(g.current=!1,s(h.current.color))},[s]);return[d,m,p]}var Y,U=\"undefined\"!=typeof window?u:t,V=function(){return Y||(\"undefined\"!=typeof __webpack_nonce__?__webpack_nonce__:void 0)},W=function(e){Y=e},$=new WeakMap,G=function(e){U(function(){var r=e.current;if(\"undefined\"!=typeof document&&r){var n=r.getRootNode?r.getRootNode():r.ownerDocument,t=n&&(\"head\"in n||\"host\"in n)?n:r.ownerDocument;if(!$.has(t)){var o=\"head\"in t?t.head:t,a=(o.ownerDocument||document).createElement(\"style\");a.innerHTML='.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:\"\";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\\'data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><path d=\"M8 0h8v8H8zM0 8h8v8H0z\"/></svg>\\')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}';var u=V();u&&a.setAttribute(\"nonce\",u),$.set(t,a),o.appendChild(a)}}},[])},J=function(n){var t=n.className,o=n.colorModel,a=n.color,u=void 0===a?o.defaultColor:a,i=n.onChange,s=n.onChangeEnd,f=c(n,[\"className\",\"colorModel\",\"color\",\"onChange\",\"onChangeEnd\"]),d=r(null);G(d);var v=X(o,u,i,s),h=v[0],g=v[1],p=v[2],b=m([\"react-colorful\",t]);return e.createElement(\"div\",l({},f,{ref:d,className:b}),e.createElement(S,{hsva:h,onChange:g,onChangeEnd:p}),e.createElement(R,{hue:h.h,onChange:g,onChangeEnd:p,className:\"react-colorful__last-control\"}))},Q={defaultColor:\"000\",toHsva:E,fromHsva:function(e){return w({h:e.h,s:e.s,v:e.v,a:1})},equal:P},Z=function(r){return e.createElement(J,l({},r,{colorModel:Q}))},ee=function(r){var n=r.className,t=r.hsva,o=r.onChange,a=r.onChangeEnd,u={backgroundImage:\"linear-gradient(90deg, \"+q(Object.assign({},t,{a:0}))+\", \"+q(Object.assign({},t,{a:1}))+\")\"},l=m([\"react-colorful__alpha\",n]),c=b(100*t.a);return e.createElement(\"div\",{className:l},e.createElement(\"div\",{className:\"react-colorful__alpha-gradient\",style:u}),e.createElement(g,{onMove:function(e){o({a:e.left})},onKey:function(e){o({a:s(t.a+e.left)})},onEnd:a,\"aria-label\":\"Alpha\",\"aria-valuetext\":c+\"%\",\"aria-valuenow\":c,\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\"},e.createElement(p,{className:\"react-colorful__alpha-pointer\",left:t.a,color:q(t)})))},re=function(n){var t=n.className,o=n.colorModel,a=n.color,u=void 0===a?o.defaultColor:a,i=n.onChange,s=n.onChangeEnd,f=c(n,[\"className\",\"colorModel\",\"color\",\"onChange\",\"onChangeEnd\"]),d=r(null);G(d);var v=X(o,u,i,s),h=v[0],g=v[1],p=v[2],b=m([\"react-colorful\",t]);return e.createElement(\"div\",l({},f,{ref:d,className:b}),e.createElement(S,{hsva:h,onChange:g,onChangeEnd:p}),e.createElement(R,{hue:h.h,onChange:g,onChangeEnd:p}),e.createElement(ee,{hsva:h,onChange:g,onChangeEnd:p,className:\"react-colorful__last-control\"}))},ne={defaultColor:\"0001\",toHsva:E,fromHsva:w,equal:P},te=function(r){return e.createElement(re,l({},r,{colorModel:ne}))},oe={defaultColor:{h:0,s:0,l:0,a:1},toHsva:N,fromHsva:y,equal:T},ae=function(r){return e.createElement(re,l({},r,{colorModel:oe}))},ue={defaultColor:\"hsla(0, 0%, 0%, 1)\",toHsva:H,fromHsva:q,equal:F},le=function(r){return e.createElement(re,l({},r,{colorModel:ue}))},ce={defaultColor:{h:0,s:0,l:0},toHsva:function(e){return N({h:e.h,s:e.s,l:e.l,a:1})},fromHsva:function(e){return{h:(r=y(e)).h,s:r.s,l:r.l};var r},equal:T},ie=function(r){return e.createElement(J,l({},r,{colorModel:ce}))},se={defaultColor:\"hsl(0, 0%, 0%)\",toHsva:M,fromHsva:k,equal:F},fe=function(r){return e.createElement(J,l({},r,{colorModel:se}))},de={defaultColor:{h:0,s:0,v:0,a:1},toHsva:function(e){return e},fromHsva:A,equal:T},ve=function(r){return e.createElement(re,l({},r,{colorModel:de}))},he={defaultColor:\"hsva(0, 0%, 0%, 1)\",toHsva:O,fromHsva:function(e){var r=A(e);return\"hsva(\"+r.h+\", \"+r.s+\"%, \"+r.v+\"%, \"+r.a+\")\"},equal:F},ge=function(r){return e.createElement(re,l({},r,{colorModel:he}))},me={defaultColor:{h:0,s:0,v:0},toHsva:function(e){return{h:e.h,s:e.s,v:e.v,a:1}},fromHsva:function(e){var r=A(e);return{h:r.h,s:r.s,v:r.v}},equal:T},pe=function(r){return e.createElement(J,l({},r,{colorModel:me}))},be={defaultColor:\"hsv(0, 0%, 0%)\",toHsva:D,fromHsva:function(e){var r=A(e);return\"hsv(\"+r.h+\", \"+r.s+\"%, \"+r.v+\"%)\"},equal:F},_e=function(r){return e.createElement(J,l({},r,{colorModel:be}))},Ee={defaultColor:{r:0,g:0,b:0,a:1},toHsva:L,fromHsva:I,equal:T},Ce=function(r){return e.createElement(re,l({},r,{colorModel:Ee}))},xe={defaultColor:\"rgba(0, 0, 0, 1)\",toHsva:j,fromHsva:function(e){var r=I(e);return\"rgba(\"+r.r+\", \"+r.g+\", \"+r.b+\", \"+r.a+\")\"},equal:F},He=function(r){return e.createElement(re,l({},r,{colorModel:xe}))},Me={defaultColor:{r:0,g:0,b:0},toHsva:function(e){return L({r:e.r,g:e.g,b:e.b,a:1})},fromHsva:function(e){return{r:(r=I(e)).r,g:r.g,b:r.b};var r},equal:T},Ne=function(r){return e.createElement(J,l({},r,{colorModel:Me}))},we={defaultColor:\"rgb(0, 0, 0)\",toHsva:z,fromHsva:function(e){var r=I(e);return\"rgb(\"+r.r+\", \"+r.g+\", \"+r.b+\")\"},equal:F},ye=function(r){return e.createElement(J,l({},r,{colorModel:we}))},ke=/^#?([0-9A-F]{3,8})$/i,qe=function(r){var n=r.color,u=void 0===n?\"\":n,s=r.onChange,f=r.onBlur,d=r.escape,v=r.validate,h=r.format,g=r.process,m=c(r,[\"color\",\"onChange\",\"onBlur\",\"escape\",\"validate\",\"format\",\"process\"]),p=o(function(){return d(u)}),b=p[0],_=p[1],E=i(s),C=i(f),x=a(function(e){var r=d(e.target.value);_(r),v(r)&&E(g?g(r):r)},[d,g,v,E]),H=a(function(e){v(e.target.value)||_(d(u)),C(e)},[u,d,v,C]);return t(function(){_(d(u))},[u,d]),e.createElement(\"input\",l({},m,{value:h?h(b):b,spellCheck:\"false\",onChange:x,onBlur:H}))},Ie=function(e){return\"#\"+e},Oe=function(r){var n=r.prefixed,t=r.alpha,o=c(r,[\"prefixed\",\"alpha\"]),u=a(function(e){return e.replace(/([^0-9A-F]+)/gi,\"\").substring(0,t?8:6)},[t]),i=a(function(e){return function(e,r){var n=ke.exec(e),t=n?n[1].length:0;return 3===t||6===t||!!r&&4===t||!!r&&8===t}(e,t)},[t]);return e.createElement(qe,l({},o,{escape:u,format:n?Ie:void 0,process:Ie,validate:i}))};export{te as HexAlphaColorPicker,Oe as HexColorInput,Z as HexColorPicker,ie as HslColorPicker,fe as HslStringColorPicker,ae as HslaColorPicker,le as HslaStringColorPicker,pe as HsvColorPicker,_e as HsvStringColorPicker,ve as HsvaColorPicker,ge as HsvaStringColorPicker,Ne as RgbColorPicker,ye as RgbStringColorPicker,Ce as RgbaColorPicker,He as RgbaStringColorPicker,W as setNonce};\n//# sourceMappingURL=index.module.js.map\n"],"x_google_ignoreList":[0],"mappings":"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"}