@goliapkg/gds 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/dist/{avatar-l3SaMCmU.js → avatar-Ct8OOGx6.js} +5 -5
  2. package/dist/avatar-Ct8OOGx6.js.map +1 -0
  3. package/dist/{badge-DTJq6AXr.js → badge-BCvi5RVF.js} +4 -4
  4. package/dist/badge-BCvi5RVF.js.map +1 -0
  5. package/dist/{button-avu-rQU4.js → button-BD3VHhwq.js} +2 -2
  6. package/dist/button-BD3VHhwq.js.map +1 -0
  7. package/dist/fonts.css +77 -11
  8. package/dist/gesture-I79dlTuS.js.map +1 -1
  9. package/dist/highlight-BAGZc-4h.js.map +1 -1
  10. package/dist/hooks-BE-_EmDI.js.map +1 -1
  11. package/dist/{icon-button-YatlVZnz.js → icon-button-Bns79124.js} +3 -3
  12. package/dist/icon-button-Bns79124.js.map +1 -0
  13. package/dist/index.d.ts +3 -3
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +21 -21
  16. package/dist/l0-tokens/color-derive.d.ts.map +1 -1
  17. package/dist/l0-tokens/color-health.d.ts.map +1 -1
  18. package/dist/l0-tokens/color-math.d.ts.map +1 -1
  19. package/dist/l0-tokens/deps.d.ts.map +1 -1
  20. package/dist/l0-tokens/font-system.d.ts.map +1 -1
  21. package/dist/l0-tokens/generate-defaults.d.ts.map +1 -1
  22. package/dist/l0-tokens/glass-system.d.ts.map +1 -1
  23. package/dist/l0-tokens/index.d.ts +12 -12
  24. package/dist/l0-tokens/index.d.ts.map +1 -1
  25. package/dist/l0-tokens/motion-system.d.ts.map +1 -1
  26. package/dist/l0-tokens/shadow-system.d.ts.map +1 -1
  27. package/dist/l0-tokens/size-system.d.ts.map +1 -1
  28. package/dist/l0-tokens-DZkyVlac.js.map +1 -1
  29. package/dist/l1-systems/index.d.ts +2 -2
  30. package/dist/l1-systems/index.d.ts.map +1 -1
  31. package/dist/l1-systems/index.js +9 -9
  32. package/dist/l1-systems/theme.d.ts +2 -2
  33. package/dist/l1-systems/theme.d.ts.map +1 -1
  34. package/dist/l1-systems/use-theme.d.ts.map +1 -1
  35. package/dist/l2-primitives/aspect-ratio.d.ts.map +1 -1
  36. package/dist/l2-primitives/badge-dot.d.ts.map +1 -1
  37. package/dist/l2-primitives/badge.d.ts.map +1 -1
  38. package/dist/l2-primitives/button.d.ts.map +1 -1
  39. package/dist/l2-primitives/divider.d.ts.map +1 -1
  40. package/dist/l2-primitives/dot.d.ts.map +1 -1
  41. package/dist/l2-primitives/focus-ring.d.ts.map +1 -1
  42. package/dist/l2-primitives/glow-effect.d.ts.map +1 -1
  43. package/dist/l2-primitives/gradient-border.d.ts.map +1 -1
  44. package/dist/l2-primitives/highlight.d.ts.map +1 -1
  45. package/dist/l2-primitives/index.js +8 -8
  46. package/dist/l2-primitives/input.d.ts.map +1 -1
  47. package/dist/l2-primitives/kbd.d.ts.map +1 -1
  48. package/dist/l2-primitives/label.d.ts.map +1 -1
  49. package/dist/l2-primitives/loading.d.ts.map +1 -1
  50. package/dist/l2-primitives/number-input.d.ts.map +1 -1
  51. package/dist/l2-primitives/number-stepper.d.ts.map +1 -1
  52. package/dist/l2-primitives/progress.d.ts.map +1 -1
  53. package/dist/l2-primitives/scroll-area.d.ts.map +1 -1
  54. package/dist/l2-primitives/separator.d.ts.map +1 -1
  55. package/dist/l2-primitives/shimmer.d.ts.map +1 -1
  56. package/dist/l2-primitives/skeleton.d.ts.map +1 -1
  57. package/dist/l2-primitives/slider.d.ts.map +1 -1
  58. package/dist/l2-primitives/spinner.d.ts.map +1 -1
  59. package/dist/l2-primitives/truncate.d.ts.map +1 -1
  60. package/dist/l2-primitives/visually-hidden.d.ts.map +1 -1
  61. package/dist/{l2-primitives-DdQHMJRE.js → l2-primitives-Cn0KNxbB.js} +31 -31
  62. package/dist/l2-primitives-Cn0KNxbB.js.map +1 -0
  63. package/dist/l3-atoms/animated-border.d.ts +1 -1
  64. package/dist/l3-atoms/animated-border.d.ts.map +1 -1
  65. package/dist/l3-atoms/animated-counter.d.ts.map +1 -1
  66. package/dist/l3-atoms/animated-number.d.ts.map +1 -1
  67. package/dist/l3-atoms/avatar-badge.d.ts.map +1 -1
  68. package/dist/l3-atoms/avatar.d.ts.map +1 -1
  69. package/dist/l3-atoms/barcode.d.ts.map +1 -1
  70. package/dist/l3-atoms/blinking.d.ts.map +1 -1
  71. package/dist/l3-atoms/bounce-dot.d.ts.map +1 -1
  72. package/dist/l3-atoms/checkbox-group.d.ts.map +1 -1
  73. package/dist/l3-atoms/checkbox.d.ts.map +1 -1
  74. package/dist/l3-atoms/chip.d.ts.map +1 -1
  75. package/dist/l3-atoms/color-swatch.d.ts.map +1 -1
  76. package/dist/l3-atoms/copy-button.d.ts.map +1 -1
  77. package/dist/l3-atoms/count-badge.d.ts.map +1 -1
  78. package/dist/l3-atoms/count-up.d.ts.map +1 -1
  79. package/dist/l3-atoms/countdown-badge.d.ts.map +1 -1
  80. package/dist/l3-atoms/countdown.d.ts.map +1 -1
  81. package/dist/l3-atoms/cursor-follow.d.ts.map +1 -1
  82. package/dist/l3-atoms/diff-indicator.d.ts.map +1 -1
  83. package/dist/l3-atoms/glow-dot.d.ts.map +1 -1
  84. package/dist/l3-atoms/gradient-text.d.ts.map +1 -1
  85. package/dist/l3-atoms/heat-cell.d.ts.map +1 -1
  86. package/dist/l3-atoms/hotkey.d.ts.map +1 -1
  87. package/dist/l3-atoms/index.d.ts +4 -4
  88. package/dist/l3-atoms/index.d.ts.map +1 -1
  89. package/dist/l3-atoms/index.js +5 -5
  90. package/dist/l3-atoms/info-tip.d.ts.map +1 -1
  91. package/dist/l3-atoms/key-value.d.ts.map +1 -1
  92. package/dist/l3-atoms/keyboard-shortcut.d.ts.map +1 -1
  93. package/dist/l3-atoms/live-dot.d.ts.map +1 -1
  94. package/dist/l3-atoms/loading-dots.d.ts.map +1 -1
  95. package/dist/l3-atoms/magnetic-button.d.ts.map +1 -1
  96. package/dist/l3-atoms/marquee.d.ts.map +1 -1
  97. package/dist/l3-atoms/meter.d.ts.map +1 -1
  98. package/dist/l3-atoms/number-flow.d.ts.map +1 -1
  99. package/dist/l3-atoms/online-indicator.d.ts.map +1 -1
  100. package/dist/l3-atoms/orbit.d.ts +1 -1
  101. package/dist/l3-atoms/orbit.d.ts.map +1 -1
  102. package/dist/l3-atoms/percentage-circle.d.ts.map +1 -1
  103. package/dist/l3-atoms/percentage.d.ts.map +1 -1
  104. package/dist/l3-atoms/price.d.ts.map +1 -1
  105. package/dist/l3-atoms/progress-circle.d.ts.map +1 -1
  106. package/dist/l3-atoms/progress-ring.d.ts.map +1 -1
  107. package/dist/l3-atoms/pulse-indicator.d.ts.map +1 -1
  108. package/dist/l3-atoms/pulse-ring.d.ts.map +1 -1
  109. package/dist/l3-atoms/qr-code.d.ts.map +1 -1
  110. package/dist/l3-atoms/quick-action.d.ts.map +1 -1
  111. package/dist/l3-atoms/radio-group.d.ts.map +1 -1
  112. package/dist/l3-atoms/range-slider.d.ts.map +1 -1
  113. package/dist/l3-atoms/rating.d.ts.map +1 -1
  114. package/dist/l3-atoms/ribbon-banner.d.ts.map +1 -1
  115. package/dist/l3-atoms/ribbon.d.ts.map +1 -1
  116. package/dist/l3-atoms/ripple-effect.d.ts.map +1 -1
  117. package/dist/l3-atoms/scroll-to-top.d.ts.map +1 -1
  118. package/dist/l3-atoms/segmented-control.d.ts +1 -1
  119. package/dist/l3-atoms/segmented-control.d.ts.map +1 -1
  120. package/dist/l3-atoms/shortcut-display.d.ts.map +1 -1
  121. package/dist/l3-atoms/skeleton-group.d.ts.map +1 -1
  122. package/dist/l3-atoms/sparkle.d.ts.map +1 -1
  123. package/dist/l3-atoms/stagger.d.ts +1 -1
  124. package/dist/l3-atoms/stagger.d.ts.map +1 -1
  125. package/dist/l3-atoms/star-rating.d.ts.map +1 -1
  126. package/dist/l3-atoms/status-badge.d.ts.map +1 -1
  127. package/dist/l3-atoms/status-dot.d.ts.map +1 -1
  128. package/dist/l3-atoms/switch-group.d.ts.map +1 -1
  129. package/dist/l3-atoms/switch.d.ts.map +1 -1
  130. package/dist/l3-atoms/text-badge.d.ts.map +1 -1
  131. package/dist/l3-atoms/text-effect.d.ts.map +1 -1
  132. package/dist/l3-atoms/textarea-counter.d.ts.map +1 -1
  133. package/dist/l3-atoms/theme-toggle.d.ts.map +1 -1
  134. package/dist/l3-atoms/toggle-group.d.ts.map +1 -1
  135. package/dist/l3-atoms/tooltip.d.ts.map +1 -1
  136. package/dist/l3-atoms/trend-arrow.d.ts.map +1 -1
  137. package/dist/l3-atoms/trend-indicator.d.ts +1 -1
  138. package/dist/l3-atoms/trend-indicator.d.ts.map +1 -1
  139. package/dist/l3-atoms/truncated-list.d.ts.map +1 -1
  140. package/dist/l3-atoms/verified-badge.d.ts.map +1 -1
  141. package/dist/l3-atoms/visual-counter.d.ts.map +1 -1
  142. package/dist/l3-atoms/volume-slider.d.ts +1 -1
  143. package/dist/l3-atoms/volume-slider.d.ts.map +1 -1
  144. package/dist/l3-atoms/zoom-on-hover.d.ts.map +1 -1
  145. package/dist/{l3-atoms-BGwlQvjl.js → l3-atoms-BCJNqPHk.js} +57 -57
  146. package/dist/l3-atoms-BCJNqPHk.js.map +1 -0
  147. package/dist/l4-molecules/accordion.d.ts +2 -2
  148. package/dist/l4-molecules/accordion.d.ts.map +1 -1
  149. package/dist/l4-molecules/action-card.d.ts.map +1 -1
  150. package/dist/l4-molecules/action-menu.d.ts.map +1 -1
  151. package/dist/l4-molecules/activity-log.d.ts.map +1 -1
  152. package/dist/l4-molecules/alert.d.ts.map +1 -1
  153. package/dist/l4-molecules/audit-entry.d.ts.map +1 -1
  154. package/dist/l4-molecules/banner.d.ts.map +1 -1
  155. package/dist/l4-molecules/before-after.d.ts.map +1 -1
  156. package/dist/l4-molecules/breadcrumb.d.ts.map +1 -1
  157. package/dist/l4-molecules/bulk-action-bar.d.ts.map +1 -1
  158. package/dist/l4-molecules/callout.d.ts.map +1 -1
  159. package/dist/l4-molecules/card.d.ts +1 -1
  160. package/dist/l4-molecules/card.d.ts.map +1 -1
  161. package/dist/l4-molecules/category-tag.d.ts.map +1 -1
  162. package/dist/l4-molecules/cert-badge.d.ts.map +1 -1
  163. package/dist/l4-molecules/chip-group.d.ts.map +1 -1
  164. package/dist/l4-molecules/circular-menu.d.ts.map +1 -1
  165. package/dist/l4-molecules/code-block.d.ts.map +1 -1
  166. package/dist/l4-molecules/code-snippet.d.ts.map +1 -1
  167. package/dist/l4-molecules/collapsible.d.ts +1 -1
  168. package/dist/l4-molecules/collapsible.d.ts.map +1 -1
  169. package/dist/l4-molecules/color-picker.d.ts.map +1 -1
  170. package/dist/l4-molecules/combobox-list.d.ts.map +1 -1
  171. package/dist/l4-molecules/combobox.d.ts.map +1 -1
  172. package/dist/l4-molecules/command-bar-float.d.ts.map +1 -1
  173. package/dist/l4-molecules/command-bar.d.ts.map +1 -1
  174. package/dist/l4-molecules/command-menu.d.ts.map +1 -1
  175. package/dist/l4-molecules/comparison-bar.d.ts.map +1 -1
  176. package/dist/l4-molecules/confirm-dialog.d.ts.map +1 -1
  177. package/dist/l4-molecules/context-menu.d.ts +1 -1
  178. package/dist/l4-molecules/context-menu.d.ts.map +1 -1
  179. package/dist/l4-molecules/copy-field.d.ts.map +1 -1
  180. package/dist/l4-molecules/copy-to-clipboard.d.ts.map +1 -1
  181. package/dist/l4-molecules/countdown-timer.d.ts.map +1 -1
  182. package/dist/l4-molecules/currency-display.d.ts.map +1 -1
  183. package/dist/l4-molecules/currency-input.d.ts.map +1 -1
  184. package/dist/l4-molecules/data-card.d.ts.map +1 -1
  185. package/dist/l4-molecules/date-display.d.ts.map +1 -1
  186. package/dist/l4-molecules/date-range-input.d.ts.map +1 -1
  187. package/dist/l4-molecules/description.d.ts.map +1 -1
  188. package/dist/l4-molecules/dialog.d.ts.map +1 -1
  189. package/dist/l4-molecules/dock.d.ts.map +1 -1
  190. package/dist/l4-molecules/download-button.d.ts.map +1 -1
  191. package/dist/l4-molecules/drawer.d.ts.map +1 -1
  192. package/dist/l4-molecules/drop-zone.d.ts.map +1 -1
  193. package/dist/l4-molecules/dropdown.d.ts +1 -1
  194. package/dist/l4-molecules/dropdown.d.ts.map +1 -1
  195. package/dist/l4-molecules/editable.d.ts.map +1 -1
  196. package/dist/l4-molecules/email-composer-field.d.ts.map +1 -1
  197. package/dist/l4-molecules/emoji-picker.d.ts.map +1 -1
  198. package/dist/l4-molecules/empty-placeholder.d.ts.map +1 -1
  199. package/dist/l4-molecules/empty-search.d.ts.map +1 -1
  200. package/dist/l4-molecules/environment-badge.d.ts.map +1 -1
  201. package/dist/l4-molecules/feature-flag.d.ts.map +1 -1
  202. package/dist/l4-molecules/field-group.d.ts.map +1 -1
  203. package/dist/l4-molecules/file-upload.d.ts.map +1 -1
  204. package/dist/l4-molecules/filter-bar.d.ts.map +1 -1
  205. package/dist/l4-molecules/flip-card.d.ts.map +1 -1
  206. package/dist/l4-molecules/form-actions.d.ts.map +1 -1
  207. package/dist/l4-molecules/form-field.d.ts.map +1 -1
  208. package/dist/l4-molecules/glass-button.d.ts.map +1 -1
  209. package/dist/l4-molecules/glass-card.d.ts.map +1 -1
  210. package/dist/l4-molecules/glitch-text.d.ts.map +1 -1
  211. package/dist/l4-molecules/hover-card.d.ts.map +1 -1
  212. package/dist/l4-molecules/index.d.ts +6 -6
  213. package/dist/l4-molecules/index.d.ts.map +1 -1
  214. package/dist/l4-molecules/index.js +3 -3
  215. package/dist/l4-molecules/info-row.d.ts.map +1 -1
  216. package/dist/l4-molecules/inline-edit.d.ts.map +1 -1
  217. package/dist/l4-molecules/input-group.d.ts.map +1 -1
  218. package/dist/l4-molecules/input-with-button.d.ts.map +1 -1
  219. package/dist/l4-molecules/key-value-list.d.ts.map +1 -1
  220. package/dist/l4-molecules/kv-table.d.ts.map +1 -1
  221. package/dist/l4-molecules/link-preview.d.ts.map +1 -1
  222. package/dist/l4-molecules/list-item.d.ts.map +1 -1
  223. package/dist/l4-molecules/live-metric.d.ts.map +1 -1
  224. package/dist/l4-molecules/matrix-rain.d.ts.map +1 -1
  225. package/dist/l4-molecules/media-container.d.ts.map +1 -1
  226. package/dist/l4-molecules/media-object.d.ts.map +1 -1
  227. package/dist/l4-molecules/mention-input.d.ts.map +1 -1
  228. package/dist/l4-molecules/mention-list.d.ts +1 -1
  229. package/dist/l4-molecules/mention-list.d.ts.map +1 -1
  230. package/dist/l4-molecules/metric-row.d.ts.map +1 -1
  231. package/dist/l4-molecules/metric-tile.d.ts.map +1 -1
  232. package/dist/l4-molecules/morphing-shape.d.ts.map +1 -1
  233. package/dist/l4-molecules/multi-select-list.d.ts.map +1 -1
  234. package/dist/l4-molecules/multi-select.d.ts.map +1 -1
  235. package/dist/l4-molecules/nav-item.d.ts.map +1 -1
  236. package/dist/l4-molecules/network-status.d.ts.map +1 -1
  237. package/dist/l4-molecules/noise-overlay.d.ts.map +1 -1
  238. package/dist/l4-molecules/notification-bell.d.ts.map +1 -1
  239. package/dist/l4-molecules/notification-dot.d.ts.map +1 -1
  240. package/dist/l4-molecules/notification.d.ts.map +1 -1
  241. package/dist/l4-molecules/num-table.d.ts.map +1 -1
  242. package/dist/l4-molecules/otp-input.d.ts.map +1 -1
  243. package/dist/l4-molecules/overflow-menu.d.ts.map +1 -1
  244. package/dist/l4-molecules/page-nav.d.ts.map +1 -1
  245. package/dist/l4-molecules/pagination.d.ts.map +1 -1
  246. package/dist/l4-molecules/panel.d.ts.map +1 -1
  247. package/dist/l4-molecules/particle-field.d.ts.map +1 -1
  248. package/dist/l4-molecules/password-input.d.ts.map +1 -1
  249. package/dist/l4-molecules/phone-input.d.ts.map +1 -1
  250. package/dist/l4-molecules/pin-input.d.ts.map +1 -1
  251. package/dist/l4-molecules/popover.d.ts.map +1 -1
  252. package/dist/l4-molecules/progress-steps.d.ts.map +1 -1
  253. package/dist/l4-molecules/quick-stat.d.ts.map +1 -1
  254. package/dist/l4-molecules/radio-card.d.ts.map +1 -1
  255. package/dist/l4-molecules/reveal.d.ts.map +1 -1
  256. package/dist/l4-molecules/scoreboard.d.ts.map +1 -1
  257. package/dist/l4-molecules/search-input.d.ts.map +1 -1
  258. package/dist/l4-molecules/select.d.ts.map +1 -1
  259. package/dist/l4-molecules/sheet.d.ts.map +1 -1
  260. package/dist/l4-molecules/slider-field.d.ts.map +1 -1
  261. package/dist/l4-molecules/sortable-header.d.ts.map +1 -1
  262. package/dist/l4-molecules/split-button.d.ts +1 -1
  263. package/dist/l4-molecules/split-button.d.ts.map +1 -1
  264. package/dist/l4-molecules/stacked-progress.d.ts.map +1 -1
  265. package/dist/l4-molecules/stat-comparison.d.ts.map +1 -1
  266. package/dist/l4-molecules/stat-trend.d.ts.map +1 -1
  267. package/dist/l4-molecules/status-bar-component.d.ts.map +1 -1
  268. package/dist/l4-molecules/stepper.d.ts.map +1 -1
  269. package/dist/l4-molecules/tab-group.d.ts +1 -1
  270. package/dist/l4-molecules/tab-group.d.ts.map +1 -1
  271. package/dist/l4-molecules/tabs.d.ts +1 -1
  272. package/dist/l4-molecules/tabs.d.ts.map +1 -1
  273. package/dist/l4-molecules/tag-input.d.ts.map +1 -1
  274. package/dist/l4-molecules/task-item.d.ts.map +1 -1
  275. package/dist/l4-molecules/text-reveal.d.ts.map +1 -1
  276. package/dist/l4-molecules/text-scramble.d.ts.map +1 -1
  277. package/dist/l4-molecules/tilt-card.d.ts.map +1 -1
  278. package/dist/l4-molecules/time-picker-grid.d.ts.map +1 -1
  279. package/dist/l4-molecules/time-picker.d.ts.map +1 -1
  280. package/dist/l4-molecules/timeline-item.d.ts.map +1 -1
  281. package/dist/l4-molecules/toast-provider.d.ts.map +1 -1
  282. package/dist/l4-molecules/toast-store.d.ts.map +1 -1
  283. package/dist/l4-molecules/toast.d.ts.map +1 -1
  284. package/dist/l4-molecules/toggle-field.d.ts.map +1 -1
  285. package/dist/l4-molecules/toolbar-generic.d.ts.map +1 -1
  286. package/dist/l4-molecules/upload-progress.d.ts.map +1 -1
  287. package/dist/l4-molecules/user-card.d.ts.map +1 -1
  288. package/dist/l4-molecules/user-info.d.ts.map +1 -1
  289. package/dist/l4-molecules/user-menu.d.ts.map +1 -1
  290. package/dist/l4-molecules/version-badge.d.ts.map +1 -1
  291. package/dist/l4-molecules/watermark.d.ts.map +1 -1
  292. package/dist/l4-molecules/wizard.d.ts.map +1 -1
  293. package/dist/{l4-molecules-HRbUopGS.js → l4-molecules-DtNnQaFU.js} +347 -346
  294. package/dist/l4-molecules-DtNnQaFU.js.map +1 -0
  295. package/dist/l5-organisms/activity-feed.d.ts.map +1 -1
  296. package/dist/l5-organisms/animate-presence.d.ts.map +1 -1
  297. package/dist/l5-organisms/audio-player.d.ts.map +1 -1
  298. package/dist/l5-organisms/audit-log.d.ts.map +1 -1
  299. package/dist/l5-organisms/avatar-list.d.ts.map +1 -1
  300. package/dist/l5-organisms/calendar-utils.d.ts.map +1 -1
  301. package/dist/l5-organisms/calendar.d.ts.map +1 -1
  302. package/dist/l5-organisms/carousel.d.ts.map +1 -1
  303. package/dist/l5-organisms/changelog.d.ts.map +1 -1
  304. package/dist/l5-organisms/command-palette-list.d.ts.map +1 -1
  305. package/dist/l5-organisms/command-palette.d.ts.map +1 -1
  306. package/dist/l5-organisms/comment-thread.d.ts.map +1 -1
  307. package/dist/l5-organisms/confetti.d.ts.map +1 -1
  308. package/dist/l5-organisms/contact-card.d.ts.map +1 -1
  309. package/dist/l5-organisms/container-list.d.ts.map +1 -1
  310. package/dist/l5-organisms/cookie-banner.d.ts.map +1 -1
  311. package/dist/l5-organisms/cron-schedule.d.ts.map +1 -1
  312. package/dist/l5-organisms/data-grid.d.ts.map +1 -1
  313. package/dist/l5-organisms/data-list.d.ts.map +1 -1
  314. package/dist/l5-organisms/data-table/data-table-body.d.ts.map +1 -1
  315. package/dist/l5-organisms/data-table/data-table-head.d.ts.map +1 -1
  316. package/dist/l5-organisms/data-table/data-table-pagination.d.ts.map +1 -1
  317. package/dist/l5-organisms/data-table/data-table-toolbar.d.ts.map +1 -1
  318. package/dist/l5-organisms/data-table/data-table-types.d.ts +1 -1
  319. package/dist/l5-organisms/data-table/data-table-types.d.ts.map +1 -1
  320. package/dist/l5-organisms/data-table/data-table.d.ts.map +1 -1
  321. package/dist/l5-organisms/data-table/index.d.ts +1 -1
  322. package/dist/l5-organisms/data-table/index.d.ts.map +1 -1
  323. package/dist/l5-organisms/date-picker.d.ts.map +1 -1
  324. package/dist/l5-organisms/deploy-log.d.ts.map +1 -1
  325. package/dist/l5-organisms/description-list.d.ts.map +1 -1
  326. package/dist/l5-organisms/diff-algorithm.d.ts.map +1 -1
  327. package/dist/l5-organisms/diff-viewer.d.ts.map +1 -1
  328. package/dist/l5-organisms/email-composer.d.ts.map +1 -1
  329. package/dist/l5-organisms/email-list-item.d.ts.map +1 -1
  330. package/dist/l5-organisms/email-thread.d.ts.map +1 -1
  331. package/dist/l5-organisms/embed.d.ts.map +1 -1
  332. package/dist/l5-organisms/employee-card.d.ts.map +1 -1
  333. package/dist/l5-organisms/error-boundary.d.ts.map +1 -1
  334. package/dist/l5-organisms/file-browser.d.ts.map +1 -1
  335. package/dist/l5-organisms/file-card.d.ts.map +1 -1
  336. package/dist/l5-organisms/form-builder.d.ts.map +1 -1
  337. package/dist/l5-organisms/gantt-chart/gantt-chart-utils.d.ts.map +1 -1
  338. package/dist/l5-organisms/gantt-chart/gantt-chart.d.ts.map +1 -1
  339. package/dist/l5-organisms/gantt-chart/index.d.ts +1 -1
  340. package/dist/l5-organisms/gantt-chart/index.d.ts.map +1 -1
  341. package/dist/l5-organisms/heatmap-table.d.ts.map +1 -1
  342. package/dist/l5-organisms/image-preview.d.ts.map +1 -1
  343. package/dist/l5-organisms/index.d.ts +15 -15
  344. package/dist/l5-organisms/index.d.ts.map +1 -1
  345. package/dist/l5-organisms/index.js +1 -1
  346. package/dist/l5-organisms/infinite-scroll.d.ts.map +1 -1
  347. package/dist/l5-organisms/json-node.d.ts +1 -1
  348. package/dist/l5-organisms/json-node.d.ts.map +1 -1
  349. package/dist/l5-organisms/kanban.d.ts +2 -2
  350. package/dist/l5-organisms/kanban.d.ts.map +1 -1
  351. package/dist/l5-organisms/markdown-editor.d.ts.map +1 -1
  352. package/dist/l5-organisms/markdown-parser.d.ts.map +1 -1
  353. package/dist/l5-organisms/markdown-preview.d.ts.map +1 -1
  354. package/dist/l5-organisms/notification-center.d.ts.map +1 -1
  355. package/dist/l5-organisms/notification-toast.d.ts.map +1 -1
  356. package/dist/l5-organisms/parallax.d.ts.map +1 -1
  357. package/dist/l5-organisms/payslip-card.d.ts.map +1 -1
  358. package/dist/l5-organisms/permission-matrix.d.ts.map +1 -1
  359. package/dist/l5-organisms/progress-timeline.d.ts.map +1 -1
  360. package/dist/l5-organisms/property-editor.d.ts.map +1 -1
  361. package/dist/l5-organisms/quick-links.d.ts.map +1 -1
  362. package/dist/l5-organisms/recent-activity.d.ts.map +1 -1
  363. package/dist/l5-organisms/responsive-stack.d.ts.map +1 -1
  364. package/dist/l5-organisms/responsive-table.d.ts.map +1 -1
  365. package/dist/l5-organisms/rich-select-list.d.ts +1 -1
  366. package/dist/l5-organisms/rich-select-list.d.ts.map +1 -1
  367. package/dist/l5-organisms/rich-select.d.ts.map +1 -1
  368. package/dist/l5-organisms/rich-text-editor.d.ts.map +1 -1
  369. package/dist/l5-organisms/search-results.d.ts.map +1 -1
  370. package/dist/l5-organisms/service-card.d.ts.map +1 -1
  371. package/dist/l5-organisms/signature-drawing.d.ts +1 -1
  372. package/dist/l5-organisms/signature-drawing.d.ts.map +1 -1
  373. package/dist/l5-organisms/signature-pad.d.ts.map +1 -1
  374. package/dist/l5-organisms/sortable-table.d.ts.map +1 -1
  375. package/dist/l5-organisms/spotlight.d.ts.map +1 -1
  376. package/dist/l5-organisms/stacked-list.d.ts.map +1 -1
  377. package/dist/l5-organisms/step-form.d.ts.map +1 -1
  378. package/dist/l5-organisms/system-health.d.ts.map +1 -1
  379. package/dist/l5-organisms/table.d.ts.map +1 -1
  380. package/dist/l5-organisms/task-board.d.ts.map +1 -1
  381. package/dist/l5-organisms/timeline.d.ts +1 -1
  382. package/dist/l5-organisms/timeline.d.ts.map +1 -1
  383. package/dist/l5-organisms/tour.d.ts.map +1 -1
  384. package/dist/l5-organisms/transaction-list.d.ts.map +1 -1
  385. package/dist/l5-organisms/tree.d.ts.map +1 -1
  386. package/dist/l5-organisms/video-controls.d.ts.map +1 -1
  387. package/dist/l5-organisms/video-player.d.ts.map +1 -1
  388. package/dist/l5-organisms/virtual-list.d.ts.map +1 -1
  389. package/dist/l5-organisms/weather-widget.d.ts.map +1 -1
  390. package/dist/{l5-organisms-BA62NsFK.js → l5-organisms-Bu2Z8LSj.js} +1826 -1822
  391. package/dist/l5-organisms-Bu2Z8LSj.js.map +1 -0
  392. package/dist/l6-charts/annotated-chart.d.ts +1 -1
  393. package/dist/l6-charts/annotated-chart.d.ts.map +1 -1
  394. package/dist/l6-charts/area-chart.d.ts.map +1 -1
  395. package/dist/l6-charts/bar-chart.d.ts.map +1 -1
  396. package/dist/l6-charts/box-plot.d.ts.map +1 -1
  397. package/dist/l6-charts/bullet-chart.d.ts.map +1 -1
  398. package/dist/l6-charts/bump-chart.d.ts.map +1 -1
  399. package/dist/l6-charts/calendar-heatmap.d.ts.map +1 -1
  400. package/dist/l6-charts/candlestick-chart.d.ts.map +1 -1
  401. package/dist/l6-charts/chord-diagram.d.ts.map +1 -1
  402. package/dist/l6-charts/chord-math.d.ts.map +1 -1
  403. package/dist/l6-charts/choropleth-map.d.ts +1 -1
  404. package/dist/l6-charts/choropleth-map.d.ts.map +1 -1
  405. package/dist/l6-charts/combo-chart.d.ts.map +1 -1
  406. package/dist/l6-charts/donut-gauge.d.ts.map +1 -1
  407. package/dist/l6-charts/flame-chart.d.ts.map +1 -1
  408. package/dist/l6-charts/flow-chart.d.ts.map +1 -1
  409. package/dist/l6-charts/funnel-chart.d.ts.map +1 -1
  410. package/dist/l6-charts/gauge.d.ts.map +1 -1
  411. package/dist/l6-charts/heatmap-chart.d.ts.map +1 -1
  412. package/dist/l6-charts/heatmap-utils.d.ts.map +1 -1
  413. package/dist/l6-charts/histogram.d.ts.map +1 -1
  414. package/dist/l6-charts/index.d.ts +1 -1
  415. package/dist/l6-charts/index.d.ts.map +1 -1
  416. package/dist/l6-charts/index.js +1 -1
  417. package/dist/l6-charts/line-chart.d.ts.map +1 -1
  418. package/dist/l6-charts/network-graph.d.ts.map +1 -1
  419. package/dist/l6-charts/order-book-chart.d.ts.map +1 -1
  420. package/dist/l6-charts/pie-chart.d.ts.map +1 -1
  421. package/dist/l6-charts/polar-area-chart.d.ts +1 -1
  422. package/dist/l6-charts/polar-area-chart.d.ts.map +1 -1
  423. package/dist/l6-charts/radar-chart.d.ts.map +1 -1
  424. package/dist/l6-charts/radial-bar-chart.d.ts.map +1 -1
  425. package/dist/l6-charts/realtime-chart.d.ts.map +1 -1
  426. package/dist/l6-charts/sankey-chart.d.ts.map +1 -1
  427. package/dist/l6-charts/scatter-chart.d.ts.map +1 -1
  428. package/dist/l6-charts/sparkline.d.ts.map +1 -1
  429. package/dist/l6-charts/stock-ticker.d.ts.map +1 -1
  430. package/dist/l6-charts/stream-chart.d.ts.map +1 -1
  431. package/dist/l6-charts/sunburst-chart.d.ts.map +1 -1
  432. package/dist/l6-charts/sunburst-math.d.ts.map +1 -1
  433. package/dist/l6-charts/timeline-chart.d.ts.map +1 -1
  434. package/dist/l6-charts/treemap-chart.d.ts.map +1 -1
  435. package/dist/l6-charts/violin-plot.d.ts.map +1 -1
  436. package/dist/l6-charts/waffle-chart.d.ts.map +1 -1
  437. package/dist/l6-charts/waterfall-chart.d.ts.map +1 -1
  438. package/dist/l6-charts/word-cloud.d.ts.map +1 -1
  439. package/dist/{l6-charts-DzRRfX8J.js → l6-charts-ngP5gbBh.js} +51 -51
  440. package/dist/l6-charts-ngP5gbBh.js.map +1 -0
  441. package/dist/l7-patterns/admin-layout.d.ts.map +1 -1
  442. package/dist/l7-patterns/analytics-dashboard.d.ts.map +1 -1
  443. package/dist/l7-patterns/app-shell.d.ts.map +1 -1
  444. package/dist/l7-patterns/bento-grid.d.ts.map +1 -1
  445. package/dist/l7-patterns/calendar-view.d.ts.map +1 -1
  446. package/dist/l7-patterns/comparison-table.d.ts.map +1 -1
  447. package/dist/l7-patterns/composition-pattern.d.ts.map +1 -1
  448. package/dist/l7-patterns/cta-banner.d.ts.map +1 -1
  449. package/dist/l7-patterns/dashboard-layout.d.ts.map +1 -1
  450. package/dist/l7-patterns/data-export-card.d.ts.map +1 -1
  451. package/dist/l7-patterns/devops-layout.d.ts.map +1 -1
  452. package/dist/l7-patterns/empty-state.d.ts.map +1 -1
  453. package/dist/l7-patterns/faq.d.ts.map +1 -1
  454. package/dist/l7-patterns/feature-card.d.ts.map +1 -1
  455. package/dist/l7-patterns/footer.d.ts.map +1 -1
  456. package/dist/l7-patterns/form-layout.d.ts.map +1 -1
  457. package/dist/l7-patterns/form-pattern.d.ts.map +1 -1
  458. package/dist/l7-patterns/glass-panel.d.ts.map +1 -1
  459. package/dist/l7-patterns/grid-layout.d.ts.map +1 -1
  460. package/dist/l7-patterns/hero.d.ts.map +1 -1
  461. package/dist/l7-patterns/hr-dashboard.d.ts.map +1 -1
  462. package/dist/l7-patterns/inbox-layout.d.ts.map +1 -1
  463. package/dist/l7-patterns/index.d.ts +2 -2
  464. package/dist/l7-patterns/index.d.ts.map +1 -1
  465. package/dist/l7-patterns/index.js +1 -1
  466. package/dist/l7-patterns/kpi-dashboard.d.ts.map +1 -1
  467. package/dist/l7-patterns/loading-states.d.ts.map +1 -1
  468. package/dist/l7-patterns/login-form.d.ts.map +1 -1
  469. package/dist/l7-patterns/mail-composer.d.ts.map +1 -1
  470. package/dist/l7-patterns/masonry.d.ts.map +1 -1
  471. package/dist/l7-patterns/media-grid.d.ts.map +1 -1
  472. package/dist/l7-patterns/metric-card.d.ts.map +1 -1
  473. package/dist/l7-patterns/nav-bar.d.ts.map +1 -1
  474. package/dist/l7-patterns/notification-list.d.ts.map +1 -1
  475. package/dist/l7-patterns/onboarding-card.d.ts.map +1 -1
  476. package/dist/l7-patterns/page-header.d.ts.map +1 -1
  477. package/dist/l7-patterns/panel-group.d.ts.map +1 -1
  478. package/dist/l7-patterns/payroll-dashboard.d.ts.map +1 -1
  479. package/dist/l7-patterns/pricing-card.d.ts.map +1 -1
  480. package/dist/l7-patterns/profile-card.d.ts.map +1 -1
  481. package/dist/l7-patterns/project-dashboard.d.ts.map +1 -1
  482. package/dist/l7-patterns/responsive-container.d.ts.map +1 -1
  483. package/dist/l7-patterns/server-overview.d.ts.map +1 -1
  484. package/dist/l7-patterns/settings-layout.d.ts.map +1 -1
  485. package/dist/l7-patterns/sidebar.d.ts +1 -1
  486. package/dist/l7-patterns/sidebar.d.ts.map +1 -1
  487. package/dist/l7-patterns/skeleton-pattern.d.ts.map +1 -1
  488. package/dist/l7-patterns/splash-screen.d.ts.map +1 -1
  489. package/dist/l7-patterns/split-view.d.ts.map +1 -1
  490. package/dist/l7-patterns/stat.d.ts.map +1 -1
  491. package/dist/l7-patterns/stats-card.d.ts.map +1 -1
  492. package/dist/l7-patterns/status-page.d.ts.map +1 -1
  493. package/dist/l7-patterns/stepper-form.d.ts.map +1 -1
  494. package/dist/l7-patterns/sticky-header.d.ts.map +1 -1
  495. package/dist/l7-patterns/testimonial.d.ts.map +1 -1
  496. package/dist/l7-patterns/timeline-steps.d.ts.map +1 -1
  497. package/dist/l7-patterns/toolbar.d.ts.map +1 -1
  498. package/dist/l7-patterns/wizard-layout.d.ts.map +1 -1
  499. package/dist/{l7-patterns-Dn7X2pQC.js → l7-patterns-CwonNW9o.js} +198 -198
  500. package/dist/l7-patterns-CwonNW9o.js.map +1 -0
  501. package/dist/{loading-dots-Dz79qOGY.js → loading-dots-C1LPHGa0.js} +3 -3
  502. package/dist/loading-dots-C1LPHGa0.js.map +1 -0
  503. package/dist/motion-DUPegem-.js.map +1 -1
  504. package/dist/portal-Bbl6F_Wj.js.map +1 -1
  505. package/dist/{progress-wAKN3Czz.js → progress-dZIQEiTw.js} +5 -5
  506. package/dist/progress-dZIQEiTw.js.map +1 -0
  507. package/dist/{resize-handle-ilSc7QRM.js → resize-handle-BjSNhgJK.js} +5 -5
  508. package/dist/resize-handle-BjSNhgJK.js.map +1 -0
  509. package/dist/sanitize-BF45M9xp.js.map +1 -1
  510. package/dist/scales-DlVrSOA2.js.map +1 -1
  511. package/dist/{separator-Dqs23A9D.js → separator-CRll1Ycp.js} +5 -5
  512. package/dist/separator-CRll1Ycp.js.map +1 -0
  513. package/dist/skeleton-C9FFZSYN.js.map +1 -1
  514. package/dist/{spinner-DyrwL4JQ.js → spinner-C15eER04.js} +13 -13
  515. package/dist/spinner-C15eER04.js.map +1 -0
  516. package/dist/{stepper-DKJuH1ws.js → stepper-DJ8pn-9D.js} +16 -16
  517. package/dist/stepper-DJ8pn-9D.js.map +1 -0
  518. package/dist/{switch-DC85Os9r.js → switch-BAS-GXJV.js} +6 -6
  519. package/dist/switch-BAS-GXJV.js.map +1 -0
  520. package/dist/{textarea-BJCl_aH2.js → textarea-Btdu41rY.js} +4 -4
  521. package/dist/textarea-Btdu41rY.js.map +1 -0
  522. package/dist/{toast-DTuqMdrj.js → toast-QxCZG0Oy.js} +35 -35
  523. package/dist/toast-QxCZG0Oy.js.map +1 -0
  524. package/dist/tokens.css +464 -104
  525. package/dist/{use-theme-BI1t0nvJ.js → use-theme-D_THp_K2.js} +72 -76
  526. package/dist/use-theme-D_THp_K2.js.map +1 -0
  527. package/dist/utils/gesture.d.ts.map +1 -1
  528. package/dist/utils/hooks.d.ts.map +1 -1
  529. package/dist/utils/index.d.ts.map +1 -1
  530. package/dist/utils/sanitize.d.ts.map +1 -1
  531. package/dist/utils/tiptap.d.ts +1 -1
  532. package/dist/utils/tiptap.d.ts.map +1 -1
  533. package/dist/utils/types.d.ts.map +1 -1
  534. package/package.json +64 -37
  535. package/dist/avatar-l3SaMCmU.js.map +0 -1
  536. package/dist/badge-DTJq6AXr.js.map +0 -1
  537. package/dist/button-avu-rQU4.js.map +0 -1
  538. package/dist/icon-button-YatlVZnz.js.map +0 -1
  539. package/dist/l2-primitives-DdQHMJRE.js.map +0 -1
  540. package/dist/l3-atoms-BGwlQvjl.js.map +0 -1
  541. package/dist/l4-molecules-HRbUopGS.js.map +0 -1
  542. package/dist/l5-organisms-BA62NsFK.js.map +0 -1
  543. package/dist/l6-charts-DzRRfX8J.js.map +0 -1
  544. package/dist/l7-patterns-Dn7X2pQC.js.map +0 -1
  545. package/dist/loading-dots-Dz79qOGY.js.map +0 -1
  546. package/dist/progress-wAKN3Czz.js.map +0 -1
  547. package/dist/resize-handle-ilSc7QRM.js.map +0 -1
  548. package/dist/separator-Dqs23A9D.js.map +0 -1
  549. package/dist/spinner-DyrwL4JQ.js.map +0 -1
  550. package/dist/stepper-DKJuH1ws.js.map +0 -1
  551. package/dist/switch-DC85Os9r.js.map +0 -1
  552. package/dist/textarea-BJCl_aH2.js.map +0 -1
  553. package/dist/toast-DTuqMdrj.js.map +0 -1
  554. package/dist/use-theme-BI1t0nvJ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"stepper-DKJuH1ws.js","names":[],"sources":["../src/l4-molecules/accordion.tsx","../src/l4-molecules/progress-steps.tsx","../src/l4-molecules/sheet.tsx","../src/l4-molecules/stepper.tsx"],"sourcesContent":["// accordion — expandable sections with single/multiple mode\nimport type { KeyboardEvent, ReactNode } from 'react'\nimport { createContext, useContext, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype AccordionType = 'multiple' | 'single'\n\ntype AccordionContextValue = {\n expanded: string[]\n toggle: (id: string) => void\n}\n\nconst AccordionContext = createContext<AccordionContextValue>({\n expanded: [],\n toggle: () => {},\n})\n\nexport type AccordionProps = {\n children: ReactNode\n type?: AccordionType\n defaultExpanded?: string[]\n className?: string\n}\n\nexport function Accordion({ children, type = 'single', defaultExpanded = [], className }: AccordionProps) {\n const [expanded, setExpanded] = useState<string[]>(defaultExpanded)\n\n const toggle = (id: string) => {\n setExpanded((prev) => {\n const isOpen = prev.includes(id)\n if (isOpen) return prev.filter((x) => x !== id)\n if (type === 'single') return [id]\n return [...prev, id]\n })\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLDivElement>) {\n if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown' && e.key !== 'Home' && e.key !== 'End') {\n return\n }\n const triggers = Array.from(\n e.currentTarget.querySelectorAll<HTMLButtonElement>('button[aria-expanded]'),\n )\n const current = triggers.indexOf(e.target as HTMLButtonElement)\n if (current < 0) return\n\n e.preventDefault()\n let nextIndex = current\n if (e.key === 'ArrowDown') {\n nextIndex = (current + 1) % triggers.length\n } else if (e.key === 'ArrowUp') {\n nextIndex = (current - 1 + triggers.length) % triggers.length\n } else if (e.key === 'Home') {\n nextIndex = 0\n } else if (e.key === 'End') {\n nextIndex = triggers.length - 1\n }\n triggers[nextIndex]?.focus()\n }\n\n return (\n <div className={cx('divide-y divide-border', className)} data-component=\"accordion\" onKeyDown={handleKeyDown}>\n <AccordionContext.Provider value={{ expanded, toggle }}>\n {children}\n </AccordionContext.Provider>\n </div>\n )\n}\n\nexport type AccordionItemProps = {\n id: string\n title: string\n children: ReactNode\n disabled?: boolean\n className?: string\n}\n\nexport function AccordionItem({ id, title, children, disabled, className }: AccordionItemProps) {\n const { expanded, toggle } = useContext(AccordionContext)\n const isOpen = expanded.includes(id)\n\n return (\n <div className={cx(className)} data-state={isOpen ? 'open' : 'closed'}>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => toggle(id)}\n className={cx(\n 'flex w-full items-center justify-between gds-pad-y-lg text-left text-sm font-medium text-fg transition-colors',\n focusCls,\n disabled === true && 'pointer-events-none opacity-40',\n )}\n aria-expanded={isOpen}\n >\n <span>{title}</span>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n className={cx('shrink-0 transition-transform duration-200', isOpen && 'rotate-180')}\n >\n <path d=\"M3.5 5.5l3.5 3 3.5-3\" />\n </svg>\n </button>\n {isOpen && (\n <div className=\"pb-3 gds-text-body text-fg-muted\">{children}</div>\n )}\n </div>\n )\n}\n","// progress-steps — linear progress indicator with labeled steps\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ProgressStepsProps = {\n className?: string\n current: number\n steps: string[]\n}\n\nexport const ProgressSteps = forwardRef<HTMLDivElement, ProgressStepsProps>(\n function ProgressSteps({ className, current, steps }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex items-center', className)}\n data-component=\"progress-steps\"\n role=\"list\"\n >\n {steps.map((label, i) => {\n const isCompleted = i < current\n const isCurrent = i === current\n\n return (\n <div key={`${label}-${i}`} className=\"flex flex-1 items-center\" role=\"listitem\">\n <div className=\"flex flex-col items-center gap-1\">\n <div\n className={cx(\n 'flex h-7 w-7 items-center justify-center rounded-full text-xs font-medium',\n isCompleted && 'bg-accent text-accent-fg',\n isCurrent && 'border-2 border-accent bg-accent/10 text-accent',\n !isCompleted && !isCurrent && 'border border-border bg-bg-secondary text-fg-muted',\n )}\n >\n {isCompleted ? (\n <svg className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : (\n i + 1\n )}\n </div>\n <span className={cx(\n 'text-center gds-text-caption',\n isCurrent ? 'font-medium text-fg' : 'text-fg-muted',\n )}>\n {label}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div className={cx(\n 'mx-2 h-px flex-1',\n isCompleted ? 'bg-accent' : 'bg-border',\n )} />\n )}\n </div>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { ProgressStepsProps }\n","// sheet — side panel overlay with slide transition\nimport type { CSSProperties, ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { mergeRefs } from '../utils/dom'\nimport { glassClass } from '../utils/glass'\nimport { useEscapeKey, useFocusTrap, useScrollLock } from '../utils/hooks'\n\ntype SheetSide = 'left' | 'right'\n\nexport type SheetProps = {\n open: boolean\n onClose: () => void\n children: ReactNode\n side?: SheetSide\n title?: string\n description?: string\n glass?: boolean\n width?: number | string\n className?: string\n}\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(\n function Sheet({ open, onClose, children, side = 'right', title, description, glass, width = 320, className }, ref) {\n const trapRef = useFocusTrap(open)\n useScrollLock(open)\n useEscapeKey(open, onClose)\n\n if (!open) return null\n\n const isRight = side === 'right'\n const style: CSSProperties = { width: typeof width === 'number' ? `${width}px` : width }\n\n return (\n <div\n className=\"fixed inset-0 z-50 bg-black/50\"\n onClick={(e) => { if (e.target === e.currentTarget) onClose() }}\n data-component=\"sheet\"\n data-state=\"open\"\n >\n <div\n ref={mergeRefs(ref, trapRef)}\n style={style}\n className={cx(\n 'gds-ctx fixed bottom-0 top-0 flex flex-col border gds-shadow-xl transition-transform duration-200',\n isRight ? 'right-0 border-l' : 'left-0 border-r',\n glass ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'border-border bg-surface',\n className,\n )}\n >\n {(title !== undefined || description !== undefined) && (\n <div className=\"flex items-start justify-between gds-gap border-b border-border gds-pad-x-lg gds-pad-y-lg\">\n <div className=\"min-w-0\">\n {title !== undefined && <h2 className=\"text-sm font-semibold text-fg\">{title}</h2>}\n {description !== undefined && <p className=\"mt-0.5 gds-text-body text-fg-muted\">{description}</p>}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-1 text-fg-muted hover:text-fg', focusCls)}\n aria-label=\"Close\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M3 3l8 8M11 3l-8 8\" />\n </svg>\n </button>\n </div>\n )}\n <div className=\"flex-1 overflow-y-auto gds-pad-x-lg gds-pad-y-lg\">{children}</div>\n </div>\n </div>\n )\n },\n)\n","// stepper — multi-step progress indicator with connecting lines\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type StepDef = {\n label: string\n description?: string\n}\n\nexport type StepperProps = React.HTMLAttributes<HTMLDivElement> & {\n steps: StepDef[]\n current: number\n orientation?: 'horizontal' | 'vertical'\n}\n\nconst checkSvg = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 7.5l3 3 5-6\" />\n </svg>\n)\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(\n function Stepper({ steps, current, orientation = 'horizontal', className, ...props }, ref) {\n const isHoriz = orientation === 'horizontal'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex',\n isHoriz ? 'items-start' : 'flex-col',\n className,\n )}\n data-component=\"stepper\"\n role=\"list\"\n {...props}\n >\n {steps.map((step, i) => {\n const completed = i < current\n const active = i === current\n\n return (\n <div\n key={`${step.label}-${i}`}\n className={cx(\n 'flex',\n isHoriz ? 'flex-1 items-center' : 'items-start',\n )}\n role=\"listitem\"\n >\n <div className={cx('flex', isHoriz ? 'flex-col items-center' : 'items-start gds-gap')}>\n <div className=\"flex items-center\">\n {/* step circle */}\n <div\n className={cx(\n 'flex gds-sq-sm shrink-0 items-center justify-center gds-radius-badge gds-text-body font-medium transition-colors',\n completed && 'bg-accent text-accent-fg',\n active && 'border-2 border-accent bg-transparent text-accent ring-2 ring-accent/20',\n !completed && !active && 'bg-bg-tertiary text-fg-muted',\n )}\n >\n {completed ? checkSvg : i + 1}\n </div>\n </div>\n {/* label + description */}\n <div className={cx(isHoriz ? 'mt-2 text-center' : '')}>\n <p className={cx('gds-text-body font-medium', active ? 'text-fg' : 'text-fg-muted')}>{step.label}</p>\n {step.description !== undefined && (\n <p className=\"mt-0.5 gds-text-caption text-fg-muted\">{step.description}</p>\n )}\n </div>\n </div>\n\n {/* connecting line */}\n {i < steps.length - 1 && (\n isHoriz ? (\n <div className={cx(\n 'mx-2 mt-3.5 h-px flex-1',\n completed ? 'bg-accent' : 'bg-border',\n )} />\n ) : (\n <div className={cx(\n 'ml-3.5 mt-1 mb-1 w-px',\n 'min-h-6',\n completed ? 'bg-accent' : 'bg-border',\n )} />\n )\n )}\n </div>\n )\n })}\n </div>\n )\n },\n)\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch-DC85Os9r.js","names":[],"sources":["../src/l3-atoms/chip.tsx","../src/l3-atoms/range-slider.tsx","../src/l3-atoms/switch.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nconst chipVariants = cva(\n 'inline-flex select-none items-center gds-gap-xs gds-radius-badge gds-pad-x-sm gds-pad-y-sm gds-text-label font-medium',\n {\n defaultVariants: { variant: 'default' },\n variants: {\n variant: {\n accent: 'bg-accent/10 text-accent',\n danger: 'bg-danger/10 text-danger',\n default: 'bg-fg-muted/10 text-fg-muted',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n },\n },\n },\n)\n\ntype ChipProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof chipVariants> & {\n glass?: boolean\n icon?: ReactNode\n label: string\n onRemove?: () => void\n removeIcon?: ReactNode\n }\n\n// default X SVG\nfunction DefaultRemoveIcon() {\n return (\n <svg className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} viewBox=\"0 0 24 24\">\n <path d=\"M18 6L6 18M6 6l12 12\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport const Chip = forwardRef<HTMLSpanElement, ChipProps>(\n function Chip(\n { className, glass, icon, label, onRemove, removeIcon, variant, ...props },\n ref,\n ) {\n return (\n <span\n className={cx(\n chipVariants({ variant }),\n glassClass(glass),\n glass === true && 'border border-white/10 bg-white/5',\n className,\n )}\n data-component=\"chip\"\n data-variant={variant ?? 'default'}\n ref={ref}\n {...props}\n >\n {icon !== undefined && (\n <span className=\"gds-icon-child-sm\">{icon}</span>\n )}\n {label}\n {onRemove !== undefined && (\n <button\n className={cx(\n 'ml-0.5 gds-radius-badge p-0.5 transition-colors hover:bg-current/10',\n focusCls,\n )}\n onClick={onRemove}\n tabIndex={-1}\n type=\"button\"\n >\n {removeIcon ?? <DefaultRemoveIcon />}\n </button>\n )}\n </span>\n )\n },\n)\n\nexport { chipVariants }\nexport type { ChipProps }\n","// range-slider — styled native range input with optional value label\nimport { forwardRef, useMemo } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype RangeSliderProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'type' | 'value'> & {\n disabled?: boolean\n max?: number\n min?: number\n onChange: (value: number) => void\n showValue?: boolean\n step?: number\n value: number\n}\n\nexport const RangeSlider = forwardRef<HTMLInputElement, RangeSliderProps>(\n function RangeSlider(\n {\n className,\n disabled = false,\n max = 100,\n min = 0,\n onChange,\n showValue = false,\n step = 1,\n value,\n ...props\n },\n ref,\n ) {\n const percent = useMemo(() => {\n const range = max - min\n if (range <= 0) return 0\n return ((value - min) / range) * 100\n }, [value, min, max])\n\n return (\n <div\n className={cx(\n 'relative flex items-center select-none',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n data-component=\"range-slider\"\n data-state={disabled ? 'disabled' : 'enabled'}\n >\n {showValue && (\n <span\n className=\"absolute -top-5 text-[10px] font-medium text-fg-muted transition-[left]\"\n style={{ left: `${percent}%`, transform: 'translateX(-50%)' }}\n >\n {value}\n </span>\n )}\n <input\n className={cx(\n 'gds-range-slider h-1.5 w-full cursor-pointer appearance-none rounded-full bg-bg-tertiary',\n focusCls,\n disabled && 'pointer-events-none',\n )}\n disabled={disabled}\n max={max}\n min={min}\n onChange={(e) => onChange(Number(e.target.value))}\n ref={ref}\n step={step}\n style={{\n background: `linear-gradient(to right, var(--gds-accent) 0%, var(--gds-accent) ${percent}%, var(--gds-bg-tertiary) ${percent}%, var(--gds-bg-tertiary) 100%)`,\n }}\n type=\"range\"\n value={value}\n {...props}\n />\n </div>\n )\n },\n)\n\nexport type { RangeSliderProps }\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst switchVariants = cva(\n 'relative inline-flex shrink-0 cursor-pointer select-none items-center gds-radius-badge transition-colors ' +\n focusCls,\n {\n defaultVariants: { size: 'default' },\n variants: {\n size: {\n default: 'h-5 w-9',\n sm: 'h-4 w-7',\n },\n },\n },\n)\n\nconst thumbSizeMap = {\n default: 'gds-icon',\n sm: 'h-3 w-3',\n}\n\nconst thumbTranslateMap = {\n default: { off: 'translate-x-0.5', on: 'translate-x-4' },\n sm: { off: 'translate-x-0.5', on: 'translate-x-3.5' },\n}\n\ntype SwitchProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> &\n VariantProps<typeof switchVariants> & {\n checked?: boolean\n label?: string\n onChange?: (checked: boolean) => void\n }\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n function Switch(\n { checked = false, className, disabled = false, label, onChange, size = 'default', ...props },\n ref,\n ) {\n const sizeKey = size ?? 'default'\n\n return (\n <label\n className={cx(\n 'inline-flex select-none items-center gds-gap-sm',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n data-component=\"switch\"\n data-state={checked ? 'on' : 'off'}\n >\n <button\n aria-checked={checked}\n className={cx(\n switchVariants({ size }),\n checked ? 'bg-accent' : 'bg-bg-tertiary',\n disabled && 'cursor-not-allowed',\n )}\n disabled={disabled}\n onClick={() => onChange?.(!checked)}\n ref={ref}\n role=\"switch\"\n type=\"button\"\n {...props}\n >\n <span\n className={cx(\n 'gds-radius-badge bg-fg gds-shadow-sm transition-transform',\n thumbSizeMap[sizeKey],\n checked ? thumbTranslateMap[sizeKey].on : thumbTranslateMap[sizeKey].off,\n )}\n />\n </button>\n {label !== undefined && (\n <span className=\"gds-text-body text-fg\">{label}</span>\n )}\n </label>\n )\n },\n)\n\nexport { switchVariants }\nexport type { SwitchProps }\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"textarea-BJCl_aH2.js","names":[],"sources":["../src/l2-primitives/kbd.tsx","../src/l2-primitives/textarea.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype KbdProps = React.HTMLAttributes<HTMLElement> & {\n children: ReactNode\n glass?: boolean\n}\n\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(\n function Kbd({ children, className, glass, ...props }, ref) {\n return (\n <kbd\n className={cx(\n 'inline-flex select-none items-center gds-radius-button border border-border/60 bg-bg-tertiary gds-pad-x-sm gds-pad-y-sm font-mono gds-text-label text-fg-muted',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n className,\n )}\n data-component=\"kbd\"\n ref={ref}\n {...props}\n >\n {children}\n </kbd>\n )\n },\n)\n\nexport type { KbdProps }\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\ntype TextareaResize = 'both' | 'none' | 'vertical'\n\nconst textareaVariants = cva(\n 'w-full gds-radius-input border bg-bg gds-pad-x gds-pad-y text-fg gds-text-body placeholder:text-fg-muted/50 outline-none disabled:cursor-not-allowed disabled:opacity-50 ' +\n focusCls,\n {\n compoundVariants: [\n {\n error: true,\n className: 'focus-visible:ring-danger',\n },\n ],\n defaultVariants: {\n error: false,\n },\n variants: {\n error: {\n false: 'border-border hover:border-border-strong',\n true: 'border-danger',\n },\n },\n },\n)\n\nconst resizeClasses: Record<TextareaResize, string> = {\n both: 'resize',\n none: 'resize-none',\n vertical: 'resize-y',\n}\n\ntype TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement> &\n VariantProps<typeof textareaVariants> & {\n autoGrow?: boolean\n glass?: boolean\n resize?: TextareaResize\n }\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n autoGrow = false,\n className,\n error,\n glass,\n resize = 'vertical',\n ...props\n },\n ref,\n ) {\n return (\n <textarea\n className={cx(\n textareaVariants({ error }),\n resizeClasses[resize],\n autoGrow && '[field-sizing:content] overflow-hidden',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n className,\n )}\n data-component=\"textarea\"\n ref={ref}\n {...props}\n />\n )\n },\n)\n\nexport { textareaVariants }\nexport type { TextareaProps, TextareaResize }\n"],"mappings":";;;;;;AAWA,IAAa,IAAM,EACjB,SAAa,EAAE,aAAU,cAAW,UAAO,GAAG,KAAS,GAAK;AAC1D,QACE,kBAAC,OAAD;EACE,WAAW,EACT,kKACA,EAAW,EAAM,EACjB,MAAU,MAAQ,4BAClB,EACD;EACD,kBAAe;EACV;EACL,GAAI;EAEH;EACG,CAAA;EAGX,ECnBK,IAAmB,EACvB,8KACE,GACF;CACE,kBAAkB,CAChB;EACE,OAAO;EACP,WAAW;EACZ,CACF;CACD,iBAAiB,EACf,OAAO,IACR;CACD,UAAU,EACR,OAAO;EACL,OAAO;EACP,MAAM;EACP,EACF;CACF,CACF,EAEK,IAAgD;CACpD,MAAM;CACN,MAAM;CACN,UAAU;CACX,EASY,IAAW,EACtB,SACE,EACE,cAAW,IACX,cACA,UACA,UACA,YAAS,YACT,GAAG,KAEL,GACA;AACA,QACE,kBAAC,YAAD;EACE,WAAW,EACT,EAAiB,EAAE,UAAO,CAAC,EAC3B,EAAc,IACd,KAAY,0CACZ,EAAW,EAAM,EACjB,MAAU,MAAQ,4BAClB,EACD;EACD,kBAAe;EACV;EACL,GAAI;EACJ,CAAA;EAGP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toast-DTuqMdrj.js","names":[],"sources":["../src/l4-molecules/audit-entry.tsx","../src/l4-molecules/email-composer-field.tsx","../src/l4-molecules/inline-edit.tsx","../src/l4-molecules/list-item.tsx","../src/l4-molecules/notification.tsx","../src/l4-molecules/task-item.tsx","../src/l4-molecules/toast.tsx"],"sourcesContent":["import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AuditEntryVariant = 'danger' | 'default' | 'success' | 'warning'\n\ntype AuditEntryProps = React.HTMLAttributes<HTMLDivElement> & {\n action: string\n target?: string\n timestamp: string\n user: string\n variant?: AuditEntryVariant\n}\n\nconst variantCls: Record<AuditEntryVariant, string> = {\n default: 'text-fg',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n}\n\nexport const AuditEntry = forwardRef<HTMLDivElement, AuditEntryProps>(\n function AuditEntry({ action, className, target, timestamp, user, variant = 'default', ...props }, ref) {\n return (\n <div\n className={cx('flex items-center justify-between gds-gap gds-text', className)}\n data-component=\"audit-entry\"\n ref={ref}\n {...props}\n >\n <span className=\"shrink-0 text-xs text-fg-muted\">{timestamp}</span>\n <span className=\"flex-1 truncate\">\n <span className=\"font-medium text-fg\">{user}</span>\n {' '}\n <span className={variantCls[variant]}>{action}</span>\n {target !== undefined && <span className=\"text-fg-muted\"> {target}</span>}\n </span>\n </div>\n )\n },\n)\n\nexport type { AuditEntryProps, AuditEntryVariant }\n","// email-composer-field — recipient input with contact chips and autocomplete\n// used by EmailComposer for To/Cc/Bcc fields\n// based on TagInput + Combobox patterns\n\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\n// ---- types ----\n\nexport type EmailContact = {\n email: string\n name?: string\n avatar?: string\n}\n\nexport type EmailComposerFieldProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n /** current recipient list */\n value: EmailContact[]\n /** update recipient list */\n onChange: (contacts: EmailContact[]) => void\n\n /** async search for contacts */\n onSearch: (query: string) => Promise<EmailContact[]>\n /** static suggestion list */\n suggestions?: EmailContact[]\n\n /** field label: \"To\", \"Cc\", \"Bcc\" */\n label: string\n placeholder?: string\n\n /** frosted glass effect */\n glass?: boolean\n className?: string\n}\n\n// simple email validation (RFC 5322 basic)\nfunction isValidEmail(email: string): boolean {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)\n}\n\n// generate initials color from email (same algorithm as Avatar)\nfunction emailColor(email: string): string {\n let hash = 0\n for (let i = 0; i < email.length; i++) {\n hash = email.charCodeAt(i) + ((hash << 5) - hash)\n }\n const colors = [\n 'bg-palette-0/20 text-palette-0',\n 'bg-palette-1/20 text-palette-1',\n 'bg-palette-2/20 text-palette-2',\n 'bg-palette-3/20 text-palette-3',\n 'bg-palette-4/20 text-palette-4',\n 'bg-palette-5/20 text-palette-5',\n 'bg-palette-6/20 text-palette-6',\n 'bg-palette-7/20 text-palette-7',\n ]\n return colors[Math.abs(hash) % colors.length]\n}\n\n// ---- chip ----\n\nfunction ContactChip({\n contact,\n onRemove,\n}: {\n contact: EmailContact\n onRemove: () => void\n}) {\n const displayName = contact.name ?? contact.email\n return (\n <span\n className={cx(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 gds-text-label select-none',\n emailColor(contact.email),\n )}\n data-component=\"contact-chip\"\n >\n <span className=\"truncate max-w-[160px]\">{displayName}</span>\n <button\n type=\"button\"\n className=\"shrink-0 rounded-full p-0.5 hover:bg-white/10 transition-colors\"\n onClick={onRemove}\n aria-label={`Remove ${displayName}`}\n tabIndex={-1}\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M2 2l6 6M8 2l-6 6\" />\n </svg>\n </button>\n </span>\n )\n}\n\n// ---- dropdown ----\n\nfunction SuggestionDropdown({\n results,\n activeIndex,\n onSelect,\n}: {\n results: EmailContact[]\n activeIndex: number\n onSelect: (contact: EmailContact) => void\n}) {\n if (results.length === 0) return null\n\n return (\n <div className=\"absolute left-0 right-0 top-full mt-1 z-50 rounded-lg border border-border bg-bg-secondary shadow-lg overflow-hidden max-h-48 overflow-y-auto\" role=\"listbox\" id=\"email-composer-suggestions\">\n {results.map((contact, i) => (\n <button\n key={contact.email}\n type=\"button\"\n className={cx(\n 'flex w-full items-center gap-2 px-3 py-2 text-left gds-text-body transition-colors',\n i === activeIndex ? 'bg-accent/10 text-accent' : 'text-fg hover:bg-white/[0.04]',\n )}\n onClick={() => onSelect(contact)}\n data-active={i === activeIndex}\n role=\"option\"\n aria-selected={i === activeIndex}\n >\n <span className={cx('flex h-6 w-6 shrink-0 items-center justify-center rounded-full gds-text-caption font-medium', emailColor(contact.email))}>\n {(contact.name ?? contact.email).charAt(0).toUpperCase()}\n </span>\n <div className=\"min-w-0 flex-1\">\n {contact.name !== undefined && (\n <div className=\"truncate text-fg\">{contact.name}</div>\n )}\n <div className=\"truncate text-fg-muted gds-text-label\">{contact.email}</div>\n </div>\n </button>\n ))}\n </div>\n )\n}\n\n// ---- main component ----\n\nexport const EmailComposerField = forwardRef<HTMLDivElement, EmailComposerFieldProps>(\n function EmailComposerField({\n value,\n onChange,\n onSearch,\n suggestions,\n label,\n placeholder,\n glass,\n className,\n ...props\n }, ref) {\n const [query, setQuery] = useState('')\n const [results, setResults] = useState<EmailContact[]>([])\n const [activeIndex, setActiveIndex] = useState(0)\n const [showDropdown, setShowDropdown] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined)\n const searchSeqRef = useRef(0)\n const blurTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined)\n\n // cleanup blur timer on unmount\n useEffect(() => {\n return () => {\n if (blurTimerRef.current !== undefined) {\n clearTimeout(blurTimerRef.current)\n }\n }\n }, [])\n\n // async search with debounce\n useEffect(() => {\n if (query.length < 1) {\n setResults(suggestions ?? [])\n return\n }\n\n if (debounceRef.current !== undefined) {\n clearTimeout(debounceRef.current)\n }\n\n const seq = ++searchSeqRef.current\n\n debounceRef.current = setTimeout(async () => {\n const searchResults = await onSearch(query)\n // discard stale responses from out-of-order async completions\n if (seq !== searchSeqRef.current) return\n // filter out already-selected contacts\n const filtered = searchResults.filter(\n r => !value.some(v => v.email === r.email),\n )\n setResults(filtered)\n setActiveIndex(0)\n }, 200)\n\n return () => {\n if (debounceRef.current !== undefined) {\n clearTimeout(debounceRef.current)\n }\n }\n }, [query, onSearch, suggestions, value])\n\n const addContact = useCallback((contact: EmailContact) => {\n if (value.some(v => v.email === contact.email)) return\n onChange([...value, contact])\n setQuery('')\n setResults([])\n setShowDropdown(false)\n inputRef.current?.focus()\n }, [value, onChange])\n\n const addEmailFromText = useCallback((text: string) => {\n const trimmed = text.trim()\n if (trimmed === '') return\n // handle paste with commas\n const emails = trimmed.split(/[,;\\n]+/).map(e => e.trim()).filter(e => e !== '')\n const newContacts: EmailContact[] = []\n for (const email of emails) {\n if (isValidEmail(email) && !value.some(v => v.email === email)) {\n newContacts.push({ email })\n }\n }\n if (newContacts.length > 0) {\n onChange([...value, ...newContacts])\n setQuery('')\n }\n }, [value, onChange])\n\n const removeContact = useCallback((index: number) => {\n const next = [...value]\n next.splice(index, 1)\n onChange(next)\n }, [value, onChange])\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown' && showDropdown) {\n e.preventDefault()\n setActiveIndex(prev => (prev + 1) % Math.max(results.length, 1))\n } else if (e.key === 'ArrowUp' && showDropdown) {\n e.preventDefault()\n setActiveIndex(prev => (prev - 1 + results.length) % Math.max(results.length, 1))\n } else if (e.key === 'Enter' && showDropdown && results[activeIndex] !== undefined) {\n e.preventDefault()\n addContact(results[activeIndex])\n } else if (e.key === 'Enter' || e.key === 'Tab' || e.key === ',') {\n if (query.trim() !== '') {\n e.preventDefault()\n addEmailFromText(query)\n }\n } else if (e.key === 'Backspace' && query === '' && value.length > 0) {\n removeContact(value.length - 1)\n }\n }, [showDropdown, results, activeIndex, query, value, addContact, addEmailFromText, removeContact])\n\n const handlePaste = useCallback((e: React.ClipboardEvent) => {\n const text = e.clipboardData.getData('text')\n if (text.includes(',') || text.includes(';') || text.includes('\\n')) {\n e.preventDefault()\n addEmailFromText(text)\n }\n }, [addEmailFromText])\n\n return (\n <div\n {...props}\n ref={ref}\n className={cx('relative', className)}\n data-component=\"email-composer-field\"\n >\n <div\n className={cx(\n 'flex flex-wrap items-center gap-1 min-h-[36px] px-2 py-1 border border-border gds-radius-input bg-bg transition-colors',\n 'focus-within:ring-2 focus-within:ring-accent/30',\n glass === true && glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n )}\n onClick={() => inputRef.current?.focus()}\n >\n <span className=\"shrink-0 gds-text-label text-fg-muted select-none w-6\">{label}</span>\n\n {value.map((contact, i) => (\n <ContactChip\n key={contact.email}\n contact={contact}\n onRemove={() => removeContact(i)}\n />\n ))}\n\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => {\n setQuery(e.target.value)\n setShowDropdown(true)\n }}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={() => setShowDropdown(true)}\n role=\"combobox\"\n aria-expanded={showDropdown && results.length > 0}\n aria-autocomplete=\"list\"\n aria-controls=\"email-composer-suggestions\"\n aria-label={`${label} recipients`}\n onBlur={() => {\n // delay to allow dropdown click to fire\n if (blurTimerRef.current !== undefined) {\n clearTimeout(blurTimerRef.current)\n }\n blurTimerRef.current = setTimeout(() => {\n blurTimerRef.current = undefined\n setShowDropdown(false)\n if (query.trim() !== '') addEmailFromText(query)\n }, 200)\n }}\n placeholder={value.length === 0 ? (placeholder ?? `${label.toLowerCase()}@example.com`) : ''}\n className=\"flex-1 min-w-[120px] bg-transparent gds-text-body text-fg placeholder:text-fg-muted/30 outline-none\"\n />\n </div>\n\n {showDropdown && results.length > 0 && (\n <SuggestionDropdown\n results={results}\n activeIndex={activeIndex}\n onSelect={addContact}\n />\n )}\n </div>\n )\n },\n)\n","// inline-edit — editable text with confirm/cancel buttons and validation\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type InlineEditProps = {\n value: string\n onSave: (value: string) => void\n onCancel?: () => void\n validate?: (value: string) => string | null\n placeholder?: string\n disabled?: boolean\n className?: string\n}\n\nconst checkIcon = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2.5 7.5l3 3 6-6.5\" />\n </svg>\n)\n\nconst cancelIcon = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M3 3l8 8M11 3l-8 8\" />\n </svg>\n)\n\nconst editIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7 2l3 3-7 7H0V9z\" />\n </svg>\n)\n\nexport const InlineEdit = forwardRef<HTMLDivElement, InlineEditProps>(\n function InlineEdit({ value, onSave, onCancel, validate, placeholder = 'Click to edit', disabled, className }, ref) {\n const [editing, setEditing] = useState(false)\n const [editValue, setEditValue] = useState(value)\n const [error, setError] = useState<string | null>(null)\n\n const startEditing = useCallback(() => {\n if (disabled === true) return\n setEditValue(value)\n setError(null)\n setEditing(true)\n }, [disabled, value])\n\n const save = useCallback(() => {\n if (validate !== undefined) {\n const err = validate(editValue)\n if (err !== null) {\n setError(err)\n return\n }\n }\n setEditing(false)\n setError(null)\n onSave(editValue)\n }, [editValue, onSave, validate])\n\n const cancel = useCallback(() => {\n setEditing(false)\n setEditValue(value)\n setError(null)\n if (onCancel !== undefined) {\n onCancel()\n }\n }, [onCancel, value])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n save()\n }\n if (e.key === 'Escape') {\n cancel()\n }\n },\n [save, cancel],\n )\n\n if (editing) {\n return (\n <div ref={ref} className={cx('inline-flex flex-col', className)} data-component=\"inline-edit\" data-state=\"editing\">\n <div className=\"flex items-center gap-1\">\n <input\n autoFocus\n className={cx(\n 'bg-transparent gds-text-body text-fg outline-none border-b border-accent/50 px-0.5',\n error !== null && 'border-danger/50',\n focusCls,\n )}\n onChange={(e) => { setEditValue(e.target.value); setError(null) }}\n onKeyDown={handleKeyDown}\n type=\"text\"\n value={editValue}\n />\n <button type=\"button\" onClick={save} className={cx('shrink-0 p-0.5 text-success hover:text-success/80', focusCls)} aria-label=\"Save\">\n {checkIcon}\n </button>\n <button type=\"button\" onClick={cancel} className={cx('shrink-0 p-0.5 text-fg-muted hover:text-fg', focusCls)} aria-label=\"Cancel\">\n {cancelIcon}\n </button>\n </div>\n {error !== null && <span className=\"mt-0.5 text-[10px] text-danger\">{error}</span>}\n </div>\n )\n }\n\n const isEmpty = value === ''\n\n return (\n <div\n ref={ref}\n className={cx('group inline-flex cursor-pointer items-center gap-1', disabled === true && 'pointer-events-none opacity-50', className)}\n data-component=\"inline-edit\"\n data-state=\"display\"\n onClick={startEditing}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') startEditing() }}\n role=\"button\"\n tabIndex={disabled === true ? -1 : 0}\n >\n <span className={cx('gds-text-body', isEmpty ? 'text-fg-muted' : 'text-fg', focusCls)}>\n {isEmpty ? placeholder : value}\n </span>\n <span className=\"text-fg-muted/0 transition-colors group-hover:text-fg-muted/60\">{editIcon}</span>\n </div>\n )\n },\n)\n","// list-item — structured list row with icon, title, description, and trailing element\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type ListItemProps = {\n icon?: ReactNode\n title: string\n description?: string\n trailing?: ReactNode\n onClick?: () => void\n active?: boolean\n disabled?: boolean\n className?: string\n}\n\nexport const ListItem = forwardRef<HTMLDivElement, ListItemProps>(\n function ListItem({ icon, title, description, trailing, onClick, active, disabled, className }, ref) {\n const isClickable = onClick !== undefined && disabled !== true\n\n return (\n <div\n ref={ref}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onClick={isClickable ? onClick : undefined}\n onKeyDown={isClickable ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick()\n }\n } : undefined}\n className={cx(\n 'flex items-center gap-3 gds-pad-x gds-pad-y-sm gds-text-body select-none',\n isClickable && 'cursor-pointer hover:bg-bg-tertiary',\n active === true && 'border-l-2 border-l-accent bg-accent/5',\n disabled === true && 'pointer-events-none opacity-50',\n className,\n )}\n data-component=\"list-item\"\n data-state={active === true ? 'active' : undefined}\n >\n {icon !== undefined && <span className=\"shrink-0 text-fg-muted\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-medium text-fg\">{title}</div>\n {description !== undefined && (\n <div className=\"mt-0.5 text-fg-muted gds-text-caption\">{description}</div>\n )}\n </div>\n {trailing !== undefined && <span className=\"shrink-0\">{trailing}</span>}\n </div>\n )\n },\n)\n","// notification — persistent banner with variant, title, description, and action\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype NotificationVariant = 'danger' | 'info' | 'success' | 'warning'\n\nconst borderColorMap: Record<NotificationVariant, string> = {\n info: 'border-l-accent',\n success: 'border-l-success',\n warning: 'border-l-warning',\n danger: 'border-l-danger',\n}\n\nconst bgColorMap: Record<NotificationVariant, string> = {\n info: 'bg-accent/5',\n success: 'bg-success/5',\n warning: 'bg-warning/5',\n danger: 'bg-danger/5',\n}\n\nconst iconColorMap: Record<NotificationVariant, string> = {\n info: 'text-accent',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n}\n\nconst iconMap: Record<NotificationVariant, ReactNode> = {\n info: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M8 5.5h.01M8 7.5v3\" />\n </svg>\n ),\n success: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 8l2 2 3-3.5\" />\n </svg>\n ),\n warning: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <path d=\"M7.13 2.5l-5.5 10h11l-5.5-10z\" /><path d=\"M7.63 6.5v2.5M7.63 11h.01\" />\n </svg>\n ),\n danger: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 5.5l5 5M10.5 5.5l-5 5\" />\n </svg>\n ),\n}\n\ntype NotificationProps = React.HTMLAttributes<HTMLDivElement> & {\n title: string\n description?: string\n variant?: NotificationVariant\n action?: ReactNode\n onClose?: () => void\n glass?: boolean\n}\n\nconst Notification = forwardRef<HTMLDivElement, NotificationProps>(\n function Notification({ title, description, variant = 'info', action, onClose, glass, className, ...props }, ref) {\n const v = variant ?? 'info'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex w-full items-start gds-gap gds-radius-popover border border-border border-l-2 gds-pad-x gds-pad-y',\n borderColorMap[v],\n bgColorMap[v],\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"notification\"\n data-variant={v}\n role=\"alert\"\n {...props}\n >\n <span className={cx('mt-px shrink-0', iconColorMap[v])}>{iconMap[v]}</span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"gds-text-body font-medium text-fg\">{title}</p>\n {description !== undefined && <p className=\"mt-0.5 gds-text-label text-fg-muted\">{description}</p>}\n </div>\n {action !== undefined && <div className=\"shrink-0\">{action}</div>}\n {onClose !== undefined && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-0.5 text-fg-muted opacity-60 hover:opacity-100', focusCls)}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M2 2l8 8M10 2l-8 8\" />\n </svg>\n </button>\n )}\n </div>\n )\n },\n)\n\nexport { Notification }\nexport type { NotificationProps, NotificationVariant }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TaskItemPriority = 'low' | 'medium' | 'high' | 'critical'\n\ntype TaskItemProps = React.HTMLAttributes<HTMLDivElement> & {\n completed?: boolean\n dueDate?: string\n onToggle?: () => void\n priority?: TaskItemPriority\n title: string\n}\n\nconst priorityCls: Record<TaskItemPriority, string> = {\n low: 'bg-success/15 text-success',\n medium: 'bg-warning/15 text-warning',\n high: 'bg-danger/15 text-danger',\n critical: 'bg-danger text-white',\n}\n\nconst TaskItem = forwardRef<HTMLDivElement, TaskItemProps>(\n function TaskItem({ className, completed = false, dueDate, onToggle, priority, title, ...props }, ref) {\n return (\n <div\n className={cx('flex items-center gap-2 rounded px-2 py-1.5 text-sm', className)}\n data-component=\"task-item\"\n data-completed={completed}\n ref={ref}\n {...props}\n >\n <input\n checked={completed}\n className=\"shrink-0 accent-accent\"\n onChange={onToggle}\n type=\"checkbox\"\n />\n <span className={cx('flex-1 truncate', completed && 'line-through text-fg-muted')}>{title}</span>\n {priority !== undefined && (\n <span className={cx('rounded px-1.5 py-0.5 text-[10px] font-medium uppercase', priorityCls[priority])}>{priority}</span>\n )}\n {dueDate !== undefined && (\n <span className=\"shrink-0 text-xs text-fg-muted\">{dueDate}</span>\n )}\n </div>\n )\n },\n)\n\nexport { TaskItem }\nexport type { TaskItemPriority, TaskItemProps }\n","// toast — notification card with variant, title, description, and action\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type ToastVariant = 'danger' | 'default' | 'success' | 'warning'\n\nconst borderColorMap: Record<ToastVariant, string> = {\n default: 'border-l-accent',\n success: 'border-l-success',\n warning: 'border-l-warning',\n danger: 'border-l-danger',\n}\n\nconst iconMap: Record<ToastVariant, ReactNode> = {\n default: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M8 5.5h.01M8 7.5v3\" />\n </svg>\n ),\n success: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 8l2 2 3-3.5\" />\n </svg>\n ),\n warning: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <path d=\"M7.13 2.5l-5.5 10h11l-5.5-10z\" /><path d=\"M7.63 6.5v2.5M7.63 11h.01\" />\n </svg>\n ),\n danger: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 5.5l5 5M10.5 5.5l-5 5\" />\n </svg>\n ),\n}\n\nconst iconColorMap: Record<ToastVariant, string> = {\n default: 'text-accent',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n}\n\nexport type ToastProps = React.HTMLAttributes<HTMLDivElement> & {\n title: string\n description?: string\n variant?: ToastVariant\n onClose?: () => void\n action?: ReactNode\n}\n\nexport const Toast = forwardRef<HTMLDivElement, ToastProps>(\n function Toast({ title, description, variant = 'default', onClose, action, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-start gds-gap gds-radius-popover border border-border border-l-4 bg-surface gds-pad-x gds-pad-y gds-shadow-lg',\n borderColorMap[variant],\n className,\n )}\n data-component=\"toast\"\n data-variant={variant}\n role=\"status\"\n {...props}\n >\n <span className={cx('mt-px shrink-0', iconColorMap[variant])}>{iconMap[variant]}</span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"gds-text-body font-medium text-fg\">{title}</p>\n {description !== undefined && <p className=\"mt-0.5 gds-text-label text-fg-muted\">{description}</p>}\n </div>\n {action !== undefined && <div className=\"shrink-0\">{action}</div>}\n {onClose !== undefined && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-0.5 text-fg-muted opacity-60 hover:opacity-100', focusCls)}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M2 2l8 8M10 2l-8 8\" />\n </svg>\n </button>\n )}\n </div>\n )\n },\n)\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-theme-BI1t0nvJ.js","names":[],"sources":["../src/l1-systems/theme.ts","../src/l1-systems/use-theme.ts"],"sourcesContent":["// L1 — Theme System\n// manages color preset + 5 dimensional axes + dark/light mode\n// applies CSS variable overrides to document root\n// persists to localStorage, syncs across tabs\n\nimport { atom } from 'jotai'\n\nimport { deriveDarkPalette, deriveLightPalette, paletteToVars } from '../l0-tokens/color-derive'\nimport { fontToCssVars } from '../l0-tokens/font-system'\nimport { DEFAULT_PRIMARY } from '../l0-tokens/generate-defaults'\nimport type {\n ThemeDensity,\n ThemeElevation,\n ThemeGlass,\n ThemeMotion,\n ThemeShape,\n} from '../l0-tokens/scales'\nimport { resolveAxesToCssVars } from '../l0-tokens/scales'\n\n// color overrides — per-token overrides for advanced users\nexport type ThemeColorOverrides = {\n '--gds-accent': string\n '--gds-accent-fg': string\n '--gds-accent-hover': string\n '--gds-danger': string\n '--gds-success': string\n '--gds-warning': string\n}\n\nexport type ThemeMode = 'dark' | 'light' | 'system'\n\n// full theme state — what the user has configured\nexport type ThemeState = {\n mode: ThemeMode\n primaryColor: string // single source — everything derived from this\n presetId: string // for UI display only (\"default\", \"teal\", \"amber\"...)\n // dimensional axes — each constrained to L0 scale options\n shape: ThemeShape\n density: ThemeDensity\n elevation: ThemeElevation\n glass: ThemeGlass\n motion: ThemeMotion\n // optional per-token color overrides (advanced — overrides derivation)\n colorOverrides: Partial<ThemeColorOverrides> | null\n}\n\n// default theme — beautiful out of the box\nexport const DEFAULT_THEME: ThemeState = {\n mode: 'system',\n primaryColor: DEFAULT_PRIMARY,\n presetId: 'default',\n shape: 'default',\n density: 'default',\n elevation: 'raised',\n glass: 'full',\n motion: 'full',\n colorOverrides: null,\n}\n\n// jotai atoms — reactive theme state\nexport const themeAtom = atom<ThemeState>(DEFAULT_THEME)\n\nexport const resolvedModeAtom = atom<'dark' | 'light'>((get) => {\n const { mode } = get(themeAtom)\n if (mode !== 'system') return mode\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n})\n\n// resolve theme state → flat CSS variable overrides\n// all colors derived from primaryColor via L0 functions — no manual color presets\nexport function resolveThemeCssVars(\n state: ThemeState,\n resolvedMode: 'dark' | 'light',\n): Record<string, string> {\n // 1. derive colors from primaryColor\n const palette = resolvedMode === 'dark'\n ? deriveDarkPalette(state.primaryColor)\n : deriveLightPalette(state.primaryColor)\n const vars: Record<string, string> = { ...paletteToVars(palette, resolvedMode) }\n\n // 2. font stacks + weights\n Object.assign(vars, fontToCssVars())\n\n // 3. dimensional axes — computed by L0 system functions\n Object.assign(vars, resolveAxesToCssVars(\n state.shape, state.density, state.elevation,\n state.glass, state.motion, resolvedMode,\n ))\n\n // 4. per-token color overrides (highest priority — advanced users)\n if (state.colorOverrides !== null) {\n for (const [key, val] of Object.entries(state.colorOverrides)) {\n if (val !== undefined) {\n vars[key] = val\n }\n }\n }\n\n return vars\n}\n\n// apply resolved vars to document\nexport function applyThemeToDocument(\n vars: Record<string, string>,\n resolvedMode: 'dark' | 'light',\n previousKeys?: string[],\n): string[] {\n const root = document.documentElement\n\n // clear previous overrides\n if (previousKeys !== undefined) {\n for (const key of previousKeys) {\n root.style.removeProperty(key)\n }\n }\n\n // set mode attribute\n const mode = root.getAttribute('data-theme-mode')\n if (mode !== resolvedMode) {\n root.setAttribute('data-theme-mode', resolvedMode)\n }\n\n // apply new overrides\n const keys = Object.keys(vars)\n for (const [key, val] of Object.entries(vars)) {\n root.style.setProperty(key, val)\n }\n\n return keys\n}\n\n// named theme presets — optimized axis combinations for specific application types\nexport type ThemePreset = Omit<ThemeState, 'mode' | 'presetId' | 'colorOverrides'>\n\nexport const themePresets = {\n // default: balanced for general-purpose dashboards\n default: {\n primaryColor: DEFAULT_PRIMARY,\n shape: 'default' as const,\n density: 'default' as const,\n elevation: 'raised' as const,\n glass: 'full' as const,\n motion: 'full' as const,\n },\n // email: optimized for email/productivity apps (mailrs-proven)\n // comfortable density for readable 14px base, subtle elevation for clean modern look\n email: {\n primaryColor: '#3b7ddd', // slightly desaturated blue, validated in production\n shape: 'default' as const,\n density: 'comfortable' as const,\n elevation: 'subtle' as const,\n glass: 'subtle' as const,\n motion: 'full' as const,\n },\n // dashboard: data-dense monitoring/analytics\n dashboard: {\n primaryColor: DEFAULT_PRIMARY,\n shape: 'default' as const,\n density: 'compact' as const,\n elevation: 'subtle' as const,\n glass: 'off' as const,\n motion: 'full' as const,\n },\n} as const satisfies Record<string, ThemePreset>\n\nexport type ThemePresetId = keyof typeof themePresets\n\n// persistence keys\nconst STORAGE_KEY = 'gds-theme'\n\nexport function persistTheme(state: ThemeState): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(state))\n } catch {\n // storage full or unavailable\n }\n}\n\nexport function loadPersistedTheme(): ThemeState | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY)\n if (raw === null) return null\n const parsed = JSON.parse(raw) as Partial<ThemeState>\n // validate and merge with defaults to handle schema evolution\n return {\n ...DEFAULT_THEME,\n ...parsed,\n // validate primaryColor is a hex string\n primaryColor: typeof parsed.primaryColor === 'string' && /^#[0-9a-fA-F]{6}$/.test(parsed.primaryColor)\n ? parsed.primaryColor : DEFAULT_THEME.primaryColor,\n // ensure constrained values are valid\n shape: validateOption(parsed.shape, ['sharp', 'default', 'rounded'], DEFAULT_THEME.shape),\n density: validateOption(parsed.density, ['compact', 'default', 'comfortable'], DEFAULT_THEME.density),\n elevation: validateOption(parsed.elevation, ['flat', 'subtle', 'raised'], DEFAULT_THEME.elevation),\n glass: validateOption(parsed.glass, ['off', 'subtle', 'full'], DEFAULT_THEME.glass),\n motion: validateOption(parsed.motion, ['off', 'reduced', 'full'], DEFAULT_THEME.motion),\n mode: validateOption(parsed.mode, ['light', 'dark', 'system'], DEFAULT_THEME.mode),\n }\n } catch {\n return null\n }\n}\n\nfunction validateOption<T extends string>(\n value: unknown,\n options: T[],\n fallback: T,\n): T {\n if (typeof value === 'string' && options.includes(value as T)) {\n return value as T\n }\n return fallback\n}\n","// L1 — theme hooks\n// components use these to read/write theme state\n// all changes go through constrained API — no raw CSS manipulation\n\nimport { useAtom, useAtomValue } from 'jotai'\nimport { useCallback, useEffect, useRef } from 'react'\n\nimport type { ThemeDensity, ThemeElevation, ThemeGlass, ThemeMotion, ThemeShape } from '../l0-tokens/scales'\nimport type { ThemeColorOverrides, ThemeMode, ThemeState } from './theme'\nimport {\n applyThemeToDocument,\n DEFAULT_THEME,\n loadPersistedTheme,\n persistTheme,\n resolvedModeAtom,\n resolveThemeCssVars,\n themeAtom,\n} from './theme'\n\n// color presets — app registers named presets, each is just a primaryColor\ntype ThemeConfig = {\n colorPresets: Record<string, { primaryColor: string }>\n}\n\nlet themeConfig: ThemeConfig = { colorPresets: {} }\n\n// called once at app init — register named color presets\nexport function configureTheme(config: ThemeConfig): void {\n themeConfig = config\n}\n\n// read current theme state (reactive)\nexport function useTheme(): ThemeState {\n return useAtomValue(themeAtom)\n}\n\n// read resolved dark/light mode (reactive)\nexport function useResolvedMode(): 'dark' | 'light' {\n return useAtomValue(resolvedModeAtom)\n}\n\n// theme mutation hooks — each returns a setter for one axis\nexport function useSetThemeMode(): (mode: ThemeMode) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((mode: ThemeMode) => {\n setTheme((prev) => ({ ...prev, mode }))\n }, [setTheme])\n}\n\nexport function useSetThemePreset(): (presetId: string) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((presetId: string) => {\n const preset = themeConfig.colorPresets[presetId]\n const primaryColor = preset?.primaryColor ?? DEFAULT_THEME.primaryColor\n setTheme((prev) => ({ ...prev, presetId, primaryColor, colorOverrides: null }))\n }, [setTheme])\n}\n\nexport function useSetThemePrimaryColor(): (color: string) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((primaryColor: string) => {\n setTheme((prev) => ({ ...prev, primaryColor, colorOverrides: null }))\n }, [setTheme])\n}\n\nexport function useSetThemeShape(): (shape: ThemeShape) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((shape: ThemeShape) => {\n setTheme((prev) => ({ ...prev, shape }))\n }, [setTheme])\n}\n\nexport function useSetThemeDensity(): (density: ThemeDensity) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((density: ThemeDensity) => {\n setTheme((prev) => ({ ...prev, density }))\n }, [setTheme])\n}\n\nexport function useSetThemeElevation(): (elevation: ThemeElevation) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((elevation: ThemeElevation) => {\n setTheme((prev) => ({ ...prev, elevation }))\n }, [setTheme])\n}\n\nexport function useSetThemeGlass(): (glass: ThemeGlass) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((glass: ThemeGlass) => {\n setTheme((prev) => ({ ...prev, glass }))\n }, [setTheme])\n}\n\nexport function useSetThemeMotion(): (motion: ThemeMotion) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((motion: ThemeMotion) => {\n setTheme((prev) => ({ ...prev, motion }))\n }, [setTheme])\n}\n\nexport function useSetThemeColors(): (overrides: Partial<ThemeColorOverrides> | null) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((colorOverrides: Partial<ThemeColorOverrides> | null) => {\n setTheme((prev) => ({ ...prev, colorOverrides }))\n }, [setTheme])\n}\n\nexport function useResetTheme(): () => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback(() => {\n setTheme(DEFAULT_THEME)\n }, [setTheme])\n}\n\n// side-effect hook: apply theme to DOM + persist + listen to system changes\n// call this ONCE in the app root\nexport function useThemeEffect(): void {\n const theme = useAtomValue(themeAtom)\n const resolvedMode = useAtomValue(resolvedModeAtom)\n const prevKeysRef = useRef<string[]>([])\n\n // apply to DOM whenever theme changes\n useEffect(() => {\n const vars = resolveThemeCssVars(theme, resolvedMode)\n prevKeysRef.current = applyThemeToDocument(vars, resolvedMode, prevKeysRef.current)\n persistTheme(theme)\n }, [theme, resolvedMode])\n\n // listen for system theme preference changes\n useEffect(() => {\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => {\n // trigger re-render via resolvedModeAtom re-evaluation\n // jotai derived atoms auto-recompute, but we need to force it\n // by touching the base atom (no-op write)\n }\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [])\n\n // restore from localStorage on mount\n useEffect(() => {\n const persisted = loadPersistedTheme()\n if (persisted !== null) {\n // apply directly without going through atom to avoid flash\n const vars = resolveThemeCssVars(persisted, resolvedMode)\n prevKeysRef.current = applyThemeToDocument(vars, resolvedMode)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n"],"mappings":"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"}