@ctrl-ui/react 0.8.2 → 0.8.5

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 (417) hide show
  1. package/README.md +32 -23
  2. package/dist/action-bar.d.ts +11 -12
  3. package/dist/activity.d.ts +24 -25
  4. package/dist/audio-recorder.d.ts +16 -16
  5. package/dist/audio-visualizer.d.ts +3 -4
  6. package/dist/audio-visualizer.js +1 -1
  7. package/dist/blocks/chat.d.ts +3 -4
  8. package/dist/blocks/chat.js +6 -3
  9. package/dist/blocks/coding-agent.d.ts +11 -12
  10. package/dist/blocks/coding-agent.js +10 -9
  11. package/dist/blocks/file-explorer-data.d.ts +11 -12
  12. package/dist/blocks/file-explorer.d.ts +3 -3
  13. package/dist/blocks/settings-data.d.ts +8 -9
  14. package/dist/blocks/settings.d.ts +4 -4
  15. package/dist/blocks/theme-toggle.d.ts +11 -12
  16. package/dist/blocks/theme-toggle.js +14 -4
  17. package/dist/chat-composer-attachment.d.ts +20 -21
  18. package/dist/chat-composer-attachment.js +24 -20
  19. package/dist/chat-composer-editor/extensions/mention.d.ts +5 -6
  20. package/dist/chat-composer-editor/extensions/mention.js +4 -0
  21. package/dist/chat-composer-editor/ghost.d.ts +3 -4
  22. package/dist/chat-composer-editor/schema.d.ts +2 -3
  23. package/dist/chat-composer-editor/serialize.d.ts +3 -4
  24. package/dist/chat-composer-editor/types.d.ts +5 -6
  25. package/dist/chat-composer-editor.d.ts +2 -3
  26. package/dist/chat-composer-editor.js +18 -4
  27. package/dist/chat-composer.d.ts +17 -18
  28. package/dist/chat-composer.js +14 -8
  29. package/dist/chat-layout.d.ts +17 -21
  30. package/dist/chat-layout.js +72 -86
  31. package/dist/chat-message.d.ts +19 -15
  32. package/dist/chat-message.js +19 -2
  33. package/dist/context-model.d.ts +7 -8
  34. package/dist/context.d.ts +21 -22
  35. package/dist/context.js +0 -2
  36. package/dist/control-props.d.ts +10 -11
  37. package/dist/control-variants.d.ts +6 -7
  38. package/dist/dynamic-notification-glass.d.ts +3 -4
  39. package/dist/dynamic-notification-liquid.d.ts +3 -4
  40. package/dist/dynamic-notification-siri-wave.d.ts +2 -3
  41. package/dist/dynamic-notification.d.ts +28 -29
  42. package/dist/email/email-brand.d.ts +60 -0
  43. package/dist/email/email-brand.js +101 -0
  44. package/dist/email/email-code.d.ts +18 -0
  45. package/dist/email/email-code.js +172 -0
  46. package/dist/email/email-footer.d.ts +63 -0
  47. package/dist/email/email-footer.js +98 -0
  48. package/dist/email/email.d.ts +62 -14
  49. package/dist/email/email.js +155 -24
  50. package/dist/email/length.d.ts +2 -3
  51. package/dist/email/templates.d.ts +56 -12
  52. package/dist/email/templates.js +314 -116
  53. package/dist/email/theme.d.ts +15 -8
  54. package/dist/email/theme.js +30 -8
  55. package/dist/environment-variables.d.ts +35 -36
  56. package/dist/extensions/create-track-highlight.d.ts +3 -4
  57. package/dist/extensions/supports-anchor-transitions.d.ts +2 -3
  58. package/dist/extensions/track-highlight.d.ts +3 -4
  59. package/dist/hooks/use-audio-recorder.d.ts +14 -15
  60. package/dist/hooks/use-chat-composer.d.ts +5 -6
  61. package/dist/hooks/use-chat-message.d.ts +8 -8
  62. package/dist/hooks/use-chat-message.js +1 -0
  63. package/dist/hooks/use-chat-thread-scroll.d.ts +8 -0
  64. package/dist/hooks/use-chat-thread-scroll.js +66 -0
  65. package/dist/hooks/use-color-area.d.ts +5 -6
  66. package/dist/hooks/use-copy-to-clipboard.d.ts +7 -8
  67. package/dist/hooks/use-dropzone.d.ts +11 -12
  68. package/dist/hooks/use-dynamic-notification.d.ts +6 -7
  69. package/dist/hooks/use-environment-variables.d.ts +9 -10
  70. package/dist/hooks/use-keyboard-navigation.d.ts +3 -0
  71. package/dist/hooks/use-keyboard-navigation.js +22 -0
  72. package/dist/hooks/use-mobile.d.ts +2 -3
  73. package/dist/hooks/use-textarea-trigger-menu.d.ts +2 -3
  74. package/dist/hooks/use-trigger-menu.d.ts +7 -8
  75. package/dist/hooks/use-user-ask.d.ts +11 -10
  76. package/dist/hooks/use-user-ask.js +56 -17
  77. package/dist/inline-attachment.d.ts +16 -17
  78. package/dist/inline-attachment.js +1 -1
  79. package/dist/inline-citation.d.ts +22 -23
  80. package/dist/knob-contracts/accordion-knobs.d.ts +3 -4
  81. package/dist/knob-contracts/accordion-knobs.js +1 -0
  82. package/dist/knob-contracts/action-bar-knobs.d.ts +3 -4
  83. package/dist/knob-contracts/action-bar-knobs.js +1 -1
  84. package/dist/knob-contracts/activity-knobs.d.ts +3 -4
  85. package/dist/knob-contracts/activity-knobs.js +2 -1
  86. package/dist/knob-contracts/alert-knobs.d.ts +3 -4
  87. package/dist/knob-contracts/alert-knobs.js +12 -1
  88. package/dist/knob-contracts/audio-recorder-knobs.d.ts +3 -4
  89. package/dist/knob-contracts/audio-visualizer-knobs.d.ts +3 -4
  90. package/dist/knob-contracts/audio-visualizer-knobs.js +1 -0
  91. package/dist/knob-contracts/avatar-knobs.d.ts +3 -4
  92. package/dist/knob-contracts/avatar-knobs.js +2 -1
  93. package/dist/knob-contracts/badge-knobs.d.ts +3 -4
  94. package/dist/knob-contracts/button-group-knobs.d.ts +3 -4
  95. package/dist/knob-contracts/button-knobs.d.ts +3 -4
  96. package/dist/knob-contracts/button-knobs.js +1 -0
  97. package/dist/knob-contracts/calendar-knobs.d.ts +3 -4
  98. package/dist/knob-contracts/card-knobs.d.ts +3 -4
  99. package/dist/knob-contracts/chat-composer-attachment-knobs.d.ts +3 -4
  100. package/dist/knob-contracts/chat-composer-attachment-knobs.js +5 -1
  101. package/dist/knob-contracts/chat-composer-knobs.d.ts +3 -4
  102. package/dist/knob-contracts/chat-composer-knobs.js +2 -0
  103. package/dist/knob-contracts/chat-layout-knobs.d.ts +3 -4
  104. package/dist/knob-contracts/chat-layout-knobs.js +2 -2
  105. package/dist/knob-contracts/chat-message-knobs.d.ts +3 -4
  106. package/dist/knob-contracts/chat-message-knobs.js +3 -1
  107. package/dist/knob-contracts/choice-knobs.d.ts +3 -4
  108. package/dist/knob-contracts/choice-knobs.js +2 -1
  109. package/dist/knob-contracts/code-diff-knobs.d.ts +3 -4
  110. package/dist/knob-contracts/code-diff-knobs.js +1 -0
  111. package/dist/knob-contracts/code-knobs.d.ts +3 -4
  112. package/dist/knob-contracts/code-knobs.js +3 -1
  113. package/dist/knob-contracts/collapsible-knobs.d.ts +3 -4
  114. package/dist/knob-contracts/color-picker-knobs.d.ts +3 -4
  115. package/dist/knob-contracts/context-knobs.d.ts +3 -4
  116. package/dist/knob-contracts/context-knobs.js +3 -0
  117. package/dist/knob-contracts/dockable-panel-knobs.d.ts +3 -4
  118. package/dist/knob-contracts/dockable-panel-knobs.js +1 -0
  119. package/dist/knob-contracts/dropzone-knobs.d.ts +3 -4
  120. package/dist/knob-contracts/dropzone-knobs.js +1 -0
  121. package/dist/knob-contracts/dynamic-notification-knobs.d.ts +3 -4
  122. package/dist/knob-contracts/empty-knobs.d.ts +3 -4
  123. package/dist/knob-contracts/empty-knobs.js +14 -1
  124. package/dist/knob-contracts/environment-variables-knobs.d.ts +3 -4
  125. package/dist/knob-contracts/environment-variables-knobs.js +2 -1
  126. package/dist/knob-contracts/field-knobs.d.ts +3 -4
  127. package/dist/knob-contracts/gradient-editor-knobs.d.ts +3 -4
  128. package/dist/knob-contracts/gradient-editor-knobs.js +3 -1
  129. package/dist/knob-contracts/infinite-canvas-knobs.d.ts +3 -4
  130. package/dist/knob-contracts/inline-attachment-knobs.d.ts +3 -4
  131. package/dist/knob-contracts/inline-attachment-knobs.js +6 -1
  132. package/dist/knob-contracts/inline-citation-knobs.d.ts +3 -4
  133. package/dist/knob-contracts/inline-citation-knobs.js +4 -1
  134. package/dist/knob-contracts/item-knobs.d.ts +3 -4
  135. package/dist/knob-contracts/kbd-knobs.d.ts +3 -4
  136. package/dist/knob-contracts/markdown-block-knobs.d.ts +3 -4
  137. package/dist/knob-contracts/markdown-block-knobs.js +2 -0
  138. package/dist/knob-contracts/markdown-knobs.d.ts +3 -4
  139. package/dist/knob-contracts/markdown-knobs.js +1 -0
  140. package/dist/knob-contracts/morphing-panel-knobs.d.ts +3 -4
  141. package/dist/knob-contracts/page-layout-knobs.d.ts +4 -0
  142. package/dist/knob-contracts/page-layout-knobs.js +15 -0
  143. package/dist/knob-contracts/pagination-knobs.d.ts +3 -4
  144. package/dist/knob-contracts/phone-input-knobs.d.ts +3 -4
  145. package/dist/knob-contracts/phone-input-knobs.js +1 -0
  146. package/dist/knob-contracts/popup-knobs.d.ts +3 -4
  147. package/dist/knob-contracts/progressive-blur-knobs.d.ts +3 -4
  148. package/dist/knob-contracts/progressive-blur-knobs.js +1 -0
  149. package/dist/knob-contracts/range-knobs.d.ts +3 -4
  150. package/dist/knob-contracts/resizable-knobs.d.ts +3 -4
  151. package/dist/knob-contracts/resizable-knobs.js +1 -0
  152. package/dist/knob-contracts/rich-tooltip-knobs.d.ts +3 -4
  153. package/dist/knob-contracts/scroll-area-knobs.d.ts +3 -4
  154. package/dist/knob-contracts/separator-knobs.d.ts +3 -4
  155. package/dist/knob-contracts/sidebar-knobs.d.ts +3 -4
  156. package/dist/knob-contracts/sidebar-knobs.js +1 -0
  157. package/dist/knob-contracts/skeleton-knobs.d.ts +3 -4
  158. package/dist/knob-contracts/skeleton-knobs.js +9 -1
  159. package/dist/knob-contracts/source-badge-knobs.d.ts +3 -4
  160. package/dist/knob-contracts/spinner-knobs.d.ts +3 -4
  161. package/dist/knob-contracts/stepper-knobs.d.ts +3 -4
  162. package/dist/knob-contracts/stepper-knobs.js +1 -0
  163. package/dist/knob-contracts/switch-knobs.d.ts +3 -4
  164. package/dist/knob-contracts/switch-knobs.js +7 -1
  165. package/dist/knob-contracts/table-knobs.d.ts +3 -4
  166. package/dist/knob-contracts/table-of-contents-knobs.d.ts +3 -4
  167. package/dist/knob-contracts/table-of-contents-knobs.js +25 -0
  168. package/dist/knob-contracts/tabs-knobs.d.ts +3 -4
  169. package/dist/knob-contracts/tabs-knobs.js +2 -1
  170. package/dist/knob-contracts/task-list-knobs.d.ts +3 -4
  171. package/dist/knob-contracts/task-list-knobs.js +5 -0
  172. package/dist/knob-contracts/thread-rail-knobs.d.ts +3 -4
  173. package/dist/knob-contracts/timeline-knobs.d.ts +3 -4
  174. package/dist/knob-contracts/toolbar-knobs.d.ts +3 -4
  175. package/dist/knob-contracts/toolbar-knobs.js +1 -0
  176. package/dist/knob-contracts/track-highlight-knobs.d.ts +3 -4
  177. package/dist/knob-contracts/transcript-divider-knobs.d.ts +3 -4
  178. package/dist/knob-contracts/tree-knobs.d.ts +3 -4
  179. package/dist/knob-contracts/user-ask-knobs.d.ts +3 -4
  180. package/dist/knob-contracts/user-ask-knobs.js +5 -0
  181. package/dist/lib/cn.d.ts +2 -3
  182. package/dist/lib/code-tokens.d.ts +12 -13
  183. package/dist/lib/color.d.ts +26 -27
  184. package/dist/lib/contrast.d.ts +12 -13
  185. package/dist/lib/diff.d.ts +14 -15
  186. package/dist/lib/dropzone-validation.d.ts +25 -26
  187. package/dist/lib/env-file.d.ts +12 -13
  188. package/dist/lib/format-audio-recorder-duration.d.ts +2 -3
  189. package/dist/lib/liquid-glass-optics.d.ts +2 -3
  190. package/dist/lib/phone-input-format.d.ts +3 -4
  191. package/dist/lib/phone-number.d.ts +8 -9
  192. package/dist/lib/trigger-detect.d.ts +4 -5
  193. package/dist/markdown-block.d.ts +11 -12
  194. package/dist/markdown-block.js +1 -1
  195. package/dist/scripts/contrast-eval.d.ts +16 -17
  196. package/dist/scripts/contrast-eval.js +13 -7
  197. package/dist/skin-provider.d.ts +14 -0
  198. package/dist/skin-provider.js +21 -0
  199. package/dist/skin.d.ts +14 -33
  200. package/dist/skin.js +3 -46
  201. package/dist/source-badge.d.ts +7 -8
  202. package/dist/styles/index.css +3 -5
  203. package/dist/styles/recipes/accordion.css +8 -2
  204. package/dist/styles/recipes/action-bar.css +40 -5
  205. package/dist/styles/recipes/activity.css +36 -3
  206. package/dist/styles/recipes/alert.css +97 -16
  207. package/dist/styles/recipes/audio-visualizer.css +8 -1
  208. package/dist/styles/recipes/avatar.css +17 -1
  209. package/dist/styles/recipes/badge.css +0 -1
  210. package/dist/styles/recipes/button-group.css +8 -0
  211. package/dist/styles/recipes/button.css +49 -8
  212. package/dist/styles/recipes/calendar.css +21 -6
  213. package/dist/styles/recipes/card.css +2 -0
  214. package/dist/styles/recipes/chat-composer-attachment.css +83 -54
  215. package/dist/styles/recipes/chat-composer.css +41 -22
  216. package/dist/styles/recipes/chat-layout.css +37 -54
  217. package/dist/styles/recipes/chat-message.css +78 -5
  218. package/dist/styles/recipes/choice.css +21 -2
  219. package/dist/styles/recipes/code-diff.css +9 -1
  220. package/dist/styles/recipes/code.css +64 -17
  221. package/dist/styles/recipes/collapsible.css +0 -3
  222. package/dist/styles/recipes/color-picker-details.css +1 -2
  223. package/dist/styles/recipes/color-picker-values.css +0 -4
  224. package/dist/styles/recipes/context.css +30 -18
  225. package/dist/styles/recipes/dockable-panel.css +8 -1
  226. package/dist/styles/recipes/dropzone.css +9 -2
  227. package/dist/styles/recipes/dynamic-notification-input.css +6 -0
  228. package/dist/styles/recipes/dynamic-notification.css +1 -0
  229. package/dist/styles/recipes/empty.css +118 -17
  230. package/dist/styles/recipes/environment-variables.css +9 -1
  231. package/dist/styles/recipes/field-parts.css +3 -6
  232. package/dist/styles/recipes/field.css +15 -5
  233. package/dist/styles/recipes/gradient-editor.css +33 -5
  234. package/dist/styles/recipes/inline-attachment.css +68 -20
  235. package/dist/styles/recipes/inline-citation.css +52 -10
  236. package/dist/styles/recipes/item.css +4 -2
  237. package/dist/styles/recipes/kbd.css +8 -0
  238. package/dist/styles/recipes/markdown-block.css +17 -2
  239. package/dist/styles/recipes/markdown.css +19 -0
  240. package/dist/styles/recipes/morphing-panel.css +1 -1
  241. package/dist/styles/recipes/page-layout.css +203 -0
  242. package/dist/styles/recipes/pagination.css +16 -4
  243. package/dist/styles/recipes/phone-input.css +8 -4
  244. package/dist/styles/recipes/popup-drawer.css +3 -1
  245. package/dist/styles/recipes/popup-lists.css +11 -0
  246. package/dist/styles/recipes/popup-toast.css +3 -29
  247. package/dist/styles/recipes/popup.css +10 -14
  248. package/dist/styles/recipes/progressive-blur.css +28 -7
  249. package/dist/styles/recipes/range.css +74 -3
  250. package/dist/styles/recipes/resizable.css +8 -10
  251. package/dist/styles/recipes/rich-tooltip.css +1 -4
  252. package/dist/styles/recipes/scroll-area.css +8 -2
  253. package/dist/styles/recipes/sidebar-menu.css +0 -6
  254. package/dist/styles/recipes/sidebar.css +56 -17
  255. package/dist/styles/recipes/skeleton.css +85 -3
  256. package/dist/styles/recipes/source-badge.css +20 -3
  257. package/dist/styles/recipes/stepper.css +8 -1
  258. package/dist/styles/recipes/switch.css +89 -17
  259. package/dist/styles/recipes/table-of-contents.css +211 -45
  260. package/dist/styles/recipes/table.css +0 -1
  261. package/dist/styles/recipes/tabs.css +35 -2
  262. package/dist/styles/recipes/task-list.css +68 -9
  263. package/dist/styles/recipes/thread-rail.css +19 -17
  264. package/dist/styles/recipes/toolbar.css +39 -4
  265. package/dist/styles/recipes/track-highlight.css +63 -5
  266. package/dist/styles/recipes/transcript-divider.css +1 -0
  267. package/dist/styles/recipes/tree.css +2 -0
  268. package/dist/styles/recipes/user-ask.css +65 -18
  269. package/dist/styles/theme.css +164 -138
  270. package/dist/surface-variants.d.ts +4 -5
  271. package/dist/task-list.d.ts +16 -17
  272. package/dist/thread-rail.d.ts +21 -22
  273. package/dist/thread-rail.js +1 -1
  274. package/dist/transcript-divider.d.ts +6 -7
  275. package/dist/ui/accordion.d.ts +10 -11
  276. package/dist/ui/alert-dialog.d.ts +11 -12
  277. package/dist/ui/alert-dialog.js +9 -7
  278. package/dist/ui/alert.d.ts +9 -10
  279. package/dist/ui/alert.js +3 -3
  280. package/dist/ui/aspect-ratio.d.ts +3 -4
  281. package/dist/ui/autocomplete.d.ts +19 -20
  282. package/dist/ui/autocomplete.js +6 -4
  283. package/dist/ui/avatar.d.ts +9 -10
  284. package/dist/ui/badge.d.ts +9 -10
  285. package/dist/ui/button-group.d.ts +7 -8
  286. package/dist/ui/button-group.js +3 -2
  287. package/dist/ui/button.d.ts +17 -18
  288. package/dist/ui/button.js +20 -5
  289. package/dist/ui/calendar.d.ts +3 -4
  290. package/dist/ui/card.d.ts +16 -17
  291. package/dist/ui/checkbox-group.d.ts +4 -5
  292. package/dist/ui/checkbox-group.js +3 -2
  293. package/dist/ui/checkbox.d.ts +3 -4
  294. package/dist/ui/code-diff.d.ts +8 -9
  295. package/dist/ui/code.d.ts +32 -23
  296. package/dist/ui/code.js +41 -20
  297. package/dist/ui/collapsible.d.ts +7 -8
  298. package/dist/ui/color-picker.d.ts +40 -41
  299. package/dist/ui/color-picker.js +8 -6
  300. package/dist/ui/combobox-disabled-selection.d.ts +3 -4
  301. package/dist/ui/combobox.d.ts +19 -20
  302. package/dist/ui/combobox.js +6 -4
  303. package/dist/ui/command.d.ts +22 -19
  304. package/dist/ui/command.js +63 -13
  305. package/dist/ui/context-menu.d.ts +30 -31
  306. package/dist/ui/context-menu.js +10 -7
  307. package/dist/ui/dialog.d.ts +13 -13
  308. package/dist/ui/dialog.js +11 -9
  309. package/dist/ui/dockable-panel-geometry.d.ts +7 -8
  310. package/dist/ui/dockable-panel.d.ts +21 -22
  311. package/dist/ui/drawer.d.ts +17 -18
  312. package/dist/ui/drawer.js +9 -8
  313. package/dist/ui/dropdown-menu.d.ts +32 -33
  314. package/dist/ui/dropdown-menu.js +6 -4
  315. package/dist/ui/dropzone.d.ts +24 -24
  316. package/dist/ui/dropzone.js +4 -1
  317. package/dist/ui/empty.d.ts +14 -14
  318. package/dist/ui/empty.js +3 -3
  319. package/dist/ui/field.d.ts +26 -27
  320. package/dist/ui/form.d.ts +4 -5
  321. package/dist/ui/gradient-editor.d.ts +16 -17
  322. package/dist/ui/gradient-editor.js +2 -2
  323. package/dist/ui/hover-card.d.ts +6 -7
  324. package/dist/ui/hover-card.js +6 -4
  325. package/dist/ui/infinite-canvas.d.ts +11 -12
  326. package/dist/ui/infinite-canvas.js +1 -0
  327. package/dist/ui/input-group.d.ts +6 -7
  328. package/dist/ui/input-otp.d.ts +7 -8
  329. package/dist/ui/input.d.ts +3 -4
  330. package/dist/ui/item.d.ts +20 -21
  331. package/dist/ui/kbd.d.ts +7 -5
  332. package/dist/ui/kbd.js +4 -2
  333. package/dist/ui/markdown-elements.d.ts +20 -21
  334. package/dist/ui/markdown.d.ts +5 -6
  335. package/dist/ui/menubar.d.ts +25 -26
  336. package/dist/ui/menubar.js +10 -7
  337. package/dist/ui/meter.d.ts +11 -12
  338. package/dist/ui/morphing-panel.d.ts +8 -9
  339. package/dist/ui/native-select.d.ts +3 -4
  340. package/dist/ui/native-select.js +1 -1
  341. package/dist/ui/navigation-menu.d.ts +17 -18
  342. package/dist/ui/navigation-menu.js +6 -4
  343. package/dist/ui/number-field.d.ts +15 -16
  344. package/dist/ui/number-field.js +1 -1
  345. package/dist/ui/page-layout.d.ts +44 -0
  346. package/dist/ui/page-layout.js +108 -0
  347. package/dist/ui/pagination.d.ts +10 -11
  348. package/dist/ui/phone-input.d.ts +5 -6
  349. package/dist/ui/phone-input.js +39 -36
  350. package/dist/ui/popover.d.ts +11 -12
  351. package/dist/ui/popover.js +6 -4
  352. package/dist/ui/progress.d.ts +11 -12
  353. package/dist/ui/progressive-blur.d.ts +4 -5
  354. package/dist/ui/radio-group.d.ts +5 -6
  355. package/dist/ui/resizable.d.ts +12 -13
  356. package/dist/ui/resizable.js +1 -1
  357. package/dist/ui/responsive-dialog.d.ts +11 -12
  358. package/dist/ui/rich-tooltip-tour.d.ts +5 -6
  359. package/dist/ui/rich-tooltip.d.ts +21 -23
  360. package/dist/ui/rich-tooltip.js +6 -6
  361. package/dist/ui/scroll-area.d.ts +7 -8
  362. package/dist/ui/scroll-area.js +9 -6
  363. package/dist/ui/select.d.ts +21 -14
  364. package/dist/ui/select.js +8 -5
  365. package/dist/ui/separator.d.ts +2 -3
  366. package/dist/ui/sheet.d.ts +8 -9
  367. package/dist/ui/sheet.js +9 -7
  368. package/dist/ui/sidebar-menu.d.ts +18 -19
  369. package/dist/ui/sidebar-menu.js +4 -3
  370. package/dist/ui/sidebar-provider.d.ts +32 -7
  371. package/dist/ui/sidebar-provider.js +82 -22
  372. package/dist/ui/sidebar-resize-rail.d.ts +8 -0
  373. package/dist/ui/sidebar-resize-rail.js +192 -0
  374. package/dist/ui/sidebar.d.ts +19 -13
  375. package/dist/ui/sidebar.js +120 -55
  376. package/dist/ui/skeleton.d.ts +7 -4
  377. package/dist/ui/skeleton.js +9 -2
  378. package/dist/ui/slider.d.ts +6 -5
  379. package/dist/ui/slider.js +16 -13
  380. package/dist/ui/spinner.d.ts +3 -4
  381. package/dist/ui/stepper.d.ts +22 -23
  382. package/dist/ui/switch.d.ts +3 -4
  383. package/dist/ui/switch.js +12 -1
  384. package/dist/ui/table-of-contents.d.ts +7 -8
  385. package/dist/ui/table-of-contents.js +4 -2
  386. package/dist/ui/table.d.ts +17 -18
  387. package/dist/ui/tabs.d.ts +14 -11
  388. package/dist/ui/textarea.d.ts +3 -4
  389. package/dist/ui/timeline.d.ts +18 -19
  390. package/dist/ui/toast.d.ts +9 -9
  391. package/dist/ui/toast.js +23 -16
  392. package/dist/ui/toggle.d.ts +5 -6
  393. package/dist/ui/toggle.js +3 -2
  394. package/dist/ui/toolbar.d.ts +15 -16
  395. package/dist/ui/toolbar.js +15 -4
  396. package/dist/ui/tooltip.d.ts +6 -13
  397. package/dist/ui/tooltip.js +8 -9
  398. package/dist/ui/tree.d.ts +18 -19
  399. package/dist/ui/tree.js +3 -2
  400. package/dist/ui/trigger-menu.d.ts +15 -16
  401. package/dist/ui/trigger-menu.js +6 -4
  402. package/dist/ui/use-switch-drag.d.ts +7 -0
  403. package/dist/ui/use-switch-drag.js +104 -0
  404. package/dist/user-ask.d.ts +28 -27
  405. package/dist/user-ask.js +38 -13
  406. package/package.json +17 -16
  407. package/dist/code-block-editor.d.ts +0 -59
  408. package/dist/code-block-editor.js +0 -250
  409. package/dist/knob-contracts/code-block-editor-knobs.d.ts +0 -5
  410. package/dist/knob-contracts/code-block-editor-knobs.js +0 -11
  411. package/dist/lib/code-block-shiki.d.ts +0 -9
  412. package/dist/lib/code-block-shiki.js +0 -6
  413. package/dist/skin.config.d.ts +0 -5
  414. package/dist/skin.config.js +0 -12
  415. package/dist/styles/recipes/code-block-editor.css +0 -136
  416. package/dist/styles/skin-theme.css +0 -137
  417. package/dist/styles/skin.css +0 -143
@@ -1,250 +0,0 @@
1
- "use client";
2
- import { useCopyToClipboard } from "./hooks/use-copy-to-clipboard.js";
3
- import { cn } from "./lib/cn.js";
4
- import { Button } from "./ui/button.js";
5
- import { ScrollArea } from "./ui/scroll-area.js";
6
- import { highlightCodeToTokens } from "./lib/code-block-shiki.js";
7
- import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./ui/tooltip.js";
8
- import { Children, Fragment, createContext, isValidElement, use, useEffect, useState } from "react";
9
- import { jsx, jsxs } from "react/jsx-runtime";
10
- import { CheckIcon, CopyIcon } from "lucide-react";
11
- //#region src/code-block-editor.tsx
12
- const CodeBlockEditorContext = createContext(null);
13
- function useCodeBlockEditorContext() {
14
- const context = use(CodeBlockEditorContext);
15
- if (!context) throw new Error("CodeBlockEditor compound parts must be rendered inside <CodeBlockEditor>.");
16
- return context;
17
- }
18
- function resolveCodeBlockEditorClasses({ overflow, density, variant }) {
19
- const isCommand = variant === "command";
20
- const isCompact = density === "compact" || isCommand;
21
- return {
22
- codeClassName: cn(overflow === "scroll" ? isCommand ? "w-full max-w-full overflow-x-auto whitespace-pre" : "w-max min-w-full whitespace-pre" : "w-full whitespace-pre-wrap break-words"),
23
- editorClassName: cn("w-full max-w-full overflow-auto", overflow === "scroll" ? "whitespace-pre" : "whitespace-pre-wrap break-words"),
24
- scrollable: !isCommand,
25
- maxHeight: isCompact ? "320px" : "520px"
26
- };
27
- }
28
- function hasCodeBlockEditorHeader(children) {
29
- return Children.toArray(children).some((child) => isValidElement(child) && child.type === CodeBlockEditorHeader);
30
- }
31
- function createKeyedTokenLines(lines) {
32
- return lines.reduce((state, line) => {
33
- const tokenState = line.reduce((tokenAccumulator, token) => ({
34
- offset: tokenAccumulator.offset + token.content.length,
35
- tokens: [...tokenAccumulator.tokens, {
36
- key: tokenAccumulator.offset,
37
- content: token.content,
38
- style: token.style
39
- }]
40
- }), {
41
- offset: state.offset,
42
- tokens: []
43
- });
44
- return {
45
- offset: tokenState.offset + 1,
46
- lines: [...state.lines, {
47
- key: state.offset,
48
- tokens: tokenState.tokens
49
- }]
50
- };
51
- }, {
52
- offset: 0,
53
- lines: []
54
- }).lines;
55
- }
56
- function useHighlightedTokens({ code, lang, tokens, highlight }) {
57
- const tokenKey = `${lang ?? ""}\n${code}`;
58
- const [clientTokens, setClientTokens] = useState(null);
59
- useEffect(() => {
60
- if (highlight === "none" || tokens !== void 0 || !lang) return;
61
- let cancelled = false;
62
- const requestKey = `${lang}\n${code}`;
63
- highlightCodeToTokens(code, lang).then((result) => {
64
- if (!cancelled) setClientTokens({
65
- key: requestKey,
66
- tokens: result
67
- });
68
- }).catch(() => {
69
- if (!cancelled) setClientTokens({
70
- key: requestKey,
71
- tokens: null
72
- });
73
- });
74
- return () => {
75
- cancelled = true;
76
- };
77
- }, [
78
- code,
79
- lang,
80
- tokens,
81
- highlight
82
- ]);
83
- if (highlight === "none") return null;
84
- return tokens ?? (clientTokens?.key === tokenKey ? clientTokens.tokens : null);
85
- }
86
- function CodeBlockEditorCode({ code, lang, tokens, highlight, maxHeight, scrollAreaClassName, scrollable, className, ...props }) {
87
- const highlightedTokens = useHighlightedTokens({
88
- code,
89
- lang,
90
- tokens,
91
- highlight
92
- });
93
- const codeNode = highlightedTokens === null || highlightedTokens.length === 0 ? /* @__PURE__ */ jsx("code", { children: code }) : /* @__PURE__ */ jsx("code", { children: createKeyedTokenLines(highlightedTokens).map((line, lineIndex, keyedLines) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", { children: line.tokens.map((token) => /* @__PURE__ */ jsx("span", {
94
- style: token.style,
95
- children: token.content
96
- }, token.key)) }), lineIndex !== keyedLines.length - 1 ? "\n" : null] }, line.key)) });
97
- const block = /* @__PURE__ */ jsx("pre", {
98
- "data-control-ui": "code-block-editor",
99
- "data-control-family": "code-block-editor",
100
- "data-slot": "content",
101
- className,
102
- ...props,
103
- children: codeNode
104
- });
105
- if (!scrollable) return block;
106
- return /* @__PURE__ */ jsx(ScrollArea, {
107
- className: scrollAreaClassName,
108
- maxHeight,
109
- children: block
110
- });
111
- }
112
- function CodeBlockEditor({ overflow, chrome = "standalone", density = "default", variant = "default", className, children, ...props }) {
113
- const resolvedOverflow = overflow ?? (variant === "command" ? "wrap" : "scroll");
114
- const hasHeader = hasCodeBlockEditorHeader(children);
115
- return /* @__PURE__ */ jsx(CodeBlockEditorContext.Provider, {
116
- value: {
117
- overflow: resolvedOverflow,
118
- chrome,
119
- density,
120
- variant,
121
- hasHeader
122
- },
123
- children: /* @__PURE__ */ jsx("figure", {
124
- "data-control-ui": "code-block-editor",
125
- "data-control-family": "code-block-editor",
126
- "data-slot": "root",
127
- "data-surface": "panel",
128
- "data-variant": variant,
129
- "data-chrome": chrome,
130
- "data-density": density,
131
- "data-header": hasHeader ? "true" : void 0,
132
- className: cn("min-w-0 overflow-hidden", !hasHeader && "relative", className),
133
- ...props,
134
- children
135
- })
136
- });
137
- }
138
- function CodeBlockEditorHeader({ className, ...props }) {
139
- return /* @__PURE__ */ jsx("figcaption", {
140
- "data-control-ui": "code-block-editor",
141
- "data-control-family": "code-block-editor",
142
- "data-slot": "header",
143
- className: cn("flex items-center justify-between", className),
144
- ...props
145
- });
146
- }
147
- function CodeBlockEditorTitle({ className, ...props }) {
148
- return /* @__PURE__ */ jsx("span", {
149
- "data-control-ui": "code-block-editor",
150
- "data-control-family": "code-block-editor",
151
- "data-slot": "title",
152
- className: cn("block min-w-0 truncate", className),
153
- ...props
154
- });
155
- }
156
- function CodeBlockEditorActions({ className, ...props }) {
157
- return /* @__PURE__ */ jsx("div", {
158
- "data-control-ui": "code-block-editor",
159
- "data-control-family": "code-block-editor",
160
- "data-slot": "actions",
161
- className: cn("flex shrink-0 items-center", className),
162
- ...props
163
- });
164
- }
165
- function CodeBlockEditorCopy({ value, copiedLabel, copiedAriaLabel = "Copied", children, className, "aria-label": ariaLabel, ...props }) {
166
- const { isCopied, handleCopy } = useCopyToClipboard({ text: value });
167
- const isIconOnly = children === void 0;
168
- const label = ariaLabel ?? (isIconOnly ? "Copy code" : void 0);
169
- const copied = copiedLabel ?? (isIconOnly ? /* @__PURE__ */ jsx(CheckIcon, {
170
- "aria-hidden": "true",
171
- className: "size-3.5"
172
- }) : "Copied");
173
- const button = /* @__PURE__ */ jsx(Button, {
174
- type: "button",
175
- variant: "quiet",
176
- size: "xs",
177
- "aria-live": "polite",
178
- "aria-label": label && isCopied ? copiedAriaLabel : label,
179
- "data-code-block-editor-copy": isIconOnly ? "true" : void 0,
180
- className,
181
- ...props,
182
- onClick: handleCopy,
183
- children: isCopied ? copied : children ?? /* @__PURE__ */ jsx(CopyIcon, {
184
- "aria-hidden": "true",
185
- className: "size-3.5"
186
- })
187
- });
188
- if (!isIconOnly) return button;
189
- return /* @__PURE__ */ jsx(TooltipProvider, {
190
- delay: 0,
191
- children: /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, { render: button }), /* @__PURE__ */ jsx(TooltipContent, {
192
- side: "left",
193
- children: label
194
- })] })
195
- });
196
- }
197
- function CodeBlockEditorFloatingCopy({ className, ...props }) {
198
- return /* @__PURE__ */ jsx(CodeBlockEditorCopy, {
199
- "data-code-block-editor-floating-copy": "true",
200
- className: cn("absolute top-2 right-2 z-10", className),
201
- ...props
202
- });
203
- }
204
- function CodeBlockEditorContent({ code, lang, tokens, highlight = "auto", maxHeight, scrollAreaClassName, className, ...props }) {
205
- const context = useCodeBlockEditorContext();
206
- const classes = resolveCodeBlockEditorClasses(context);
207
- const content = /* @__PURE__ */ jsx(CodeBlockEditorCode, {
208
- code,
209
- lang,
210
- tokens,
211
- highlight,
212
- maxHeight: maxHeight ?? classes.maxHeight,
213
- scrollAreaClassName,
214
- scrollable: classes.scrollable,
215
- className: cn(classes.codeClassName, className),
216
- ...props
217
- });
218
- if (context.hasHeader) return content;
219
- return /* @__PURE__ */ jsxs("div", {
220
- "data-control-ui": "code-block-editor",
221
- "data-control-family": "code-block-editor",
222
- "data-slot": "floating-frame",
223
- className: "relative",
224
- children: [/* @__PURE__ */ jsx(CodeBlockEditorFloatingCopy, { value: code }), content]
225
- });
226
- }
227
- function CodeBlockEditorTextarea({ value, defaultValue = "", onValueChange, onChange, fileName, className, "aria-label": ariaLabel, ...props }) {
228
- const { editorClassName } = resolveCodeBlockEditorClasses(useCodeBlockEditorContext());
229
- const [internalValue, setInternalValue] = useState(defaultValue);
230
- const currentValue = value ?? internalValue;
231
- function handleChange(event) {
232
- const nextValue = event.target.value;
233
- if (value === void 0) setInternalValue(nextValue);
234
- onValueChange?.(nextValue);
235
- onChange?.(event);
236
- }
237
- return /* @__PURE__ */ jsx("textarea", {
238
- "data-control-ui": "code-block-editor",
239
- "data-control-family": "code-block-editor",
240
- "data-slot": "editor",
241
- value: currentValue,
242
- onChange: handleChange,
243
- "aria-label": ariaLabel ?? (fileName ? `${fileName} code` : "Code editor"),
244
- spellCheck: false,
245
- className: cn(editorClassName, "block resize-y", className),
246
- ...props
247
- });
248
- }
249
- //#endregion
250
- export { CodeBlockEditor, CodeBlockEditorActions, CodeBlockEditorContent, CodeBlockEditorCopy, CodeBlockEditorFloatingCopy, CodeBlockEditorHeader, CodeBlockEditorTextarea, CodeBlockEditorTitle };
@@ -1,5 +0,0 @@
1
- //#region src/knob-contracts/code-block-editor-knobs.d.ts
2
- declare const codeBlockEditorKnobs: readonly ["--cui-code-block-editor-radius", "--cui-code-block-editor-background", "--cui-code-block-editor-border-color", "--cui-code-block-editor-shadow", "--cui-code-block-editor-title-foreground", "--cui-code-block-editor-code-background"];
3
- type CodeBlockEditorKnobStyle = Partial<Record<(typeof codeBlockEditorKnobs)[number], string>>;
4
- //#endregion
5
- export { CodeBlockEditorKnobStyle, codeBlockEditorKnobs };
@@ -1,11 +0,0 @@
1
- //#region src/knob-contracts/code-block-editor-knobs.ts
2
- const codeBlockEditorKnobs = [
3
- "--cui-code-block-editor-radius",
4
- "--cui-code-block-editor-background",
5
- "--cui-code-block-editor-border-color",
6
- "--cui-code-block-editor-shadow",
7
- "--cui-code-block-editor-title-foreground",
8
- "--cui-code-block-editor-code-background"
9
- ];
10
- //#endregion
11
- export { codeBlockEditorKnobs };
@@ -1,9 +0,0 @@
1
- import { CodeToken, CodeTokenLines, CodeTokenStyle, highlightToTokens, normalizeLanguage as normalizeLanguage$1 } from "./code-tokens.js";
2
- //#region src/lib/code-block-shiki.d.ts
3
- type CodeBlockEditorToken = CodeToken;
4
- type CodeBlockEditorTokenLines = CodeTokenLines;
5
- type CodeBlockEditorTokenStyle = CodeTokenStyle;
6
- declare const highlightCodeToTokens: typeof highlightToTokens;
7
- declare const normalizeLanguage: typeof normalizeLanguage$1;
8
- //#endregion
9
- export { CodeBlockEditorToken, CodeBlockEditorTokenLines, CodeBlockEditorTokenStyle, highlightCodeToTokens, normalizeLanguage };
@@ -1,6 +0,0 @@
1
- import { highlightToTokens, normalizeLanguage as normalizeLanguage$1 } from "./code-tokens.js";
2
- //#region src/lib/code-block-shiki.ts
3
- const highlightCodeToTokens = highlightToTokens;
4
- const normalizeLanguage = normalizeLanguage$1;
5
- //#endregion
6
- export { highlightCodeToTokens, normalizeLanguage };
@@ -1,5 +0,0 @@
1
- import { ControlUiSkin } from "./skin.js";
2
- //#region src/skin.config.d.ts
3
- declare const skin: ControlUiSkin;
4
- //#endregion
5
- export { skin };
@@ -1,12 +0,0 @@
1
- //#region src/skin.config.tsx
2
- const skin = {
3
- id: "refined",
4
- indicators: {
5
- sidebar: "hover",
6
- "button-group": "hover",
7
- "toggle-group": "hover",
8
- "checkbox-group": "hover"
9
- }
10
- };
11
- //#endregion
12
- export { skin };
@@ -1,136 +0,0 @@
1
- @layer components {
2
- :where([data-control-family="code-block-editor"][data-slot="root"]) {
3
- --cui-code-block-editor-background: var(--background);
4
- --cui-code-block-editor-border-color: var(--border);
5
- --cui-code-block-editor-radius: min(var(--radius-panel), calc(0.5rem * var(--nest-corner-ratio)));
6
- --cui-code-block-editor-shadow: var(--shadow-sm);
7
- --cui-code-block-editor-code-background: var(--background);
8
- --cui-code-block-editor-title-foreground: var(--muted-foreground);
9
- margin-block: calc(var(--spacing) * 4);
10
- border: 1px solid var(--cui-code-block-editor-border-color);
11
- border-radius: var(--cui-code-block-editor-radius);
12
- background: var(--cui-code-block-editor-background);
13
- box-shadow: var(--cui-code-block-editor-shadow);
14
- }
15
-
16
- :where([data-control-family="code-block-editor"][data-slot="root"][data-chrome="embedded"]) {
17
- margin-block: 0;
18
- border-width: 0px;
19
- border-radius: 0px;
20
- background: transparent;
21
- box-shadow: none;
22
- }
23
-
24
- :where([data-control-family="code-block-editor"][data-slot="header"]) {
25
- min-block-size: calc(var(--spacing) * 11);
26
- gap: calc(var(--spacing) * 3);
27
- padding-inline: calc(var(--spacing) * 3);
28
- padding-block: calc(var(--spacing) * 2);
29
- border-bottom: 1px solid var(--border);
30
- }
31
-
32
- :where([data-control-family="code-block-editor"][data-slot="actions"]) {
33
- gap: calc(var(--spacing) * 1);
34
- }
35
-
36
- :where([data-control-family="button"][data-code-block-editor-copy="true"]) {
37
- inline-size: calc(var(--spacing) * 7);
38
- block-size: calc(var(--spacing) * 7);
39
- padding: 0;
40
- }
41
-
42
- :where([data-control-family="code-block-editor"][data-slot="title"]) {
43
- color: var(--cui-code-block-editor-title-foreground);
44
- font-size: var(--text-label);
45
- font-family: var(--font-mono);
46
- }
47
-
48
- :where([data-control-family="code-block-editor"]:is([data-slot="content"], [data-slot="editor"])) {
49
- min-block-size: 160px;
50
- padding: calc(var(--spacing) * 4);
51
- background: var(--cui-code-block-editor-code-background);
52
- color: var(--code-foreground);
53
- font-size: var(--text-label);
54
- }
55
-
56
- :where(
57
- [data-control-family="code-block-editor"][data-slot="root"][data-chrome="embedded"] :is([data-slot="content"], [data-slot="editor"])
58
- ) {
59
- background: transparent;
60
- }
61
-
62
- :where([data-control-family="code-block-editor"][data-slot="editor"]) {
63
- max-block-size: 520px;
64
- border-width: 0px;
65
- outline: none;
66
- }
67
-
68
- :where(
69
- [data-control-family="code-block-editor"][data-slot="root"]:is([data-density="compact"], [data-variant="command"])
70
- :is([data-slot="content"], [data-slot="editor"])
71
- ) {
72
- min-block-size: 0;
73
- padding-inline: calc(var(--spacing) * 3);
74
- padding-block: calc(var(--spacing) * 2);
75
- }
76
-
77
- :where(
78
- [data-control-family="code-block-editor"][data-slot="root"]:is([data-density="compact"], [data-variant="command"]) [data-slot="editor"]
79
- ) {
80
- max-block-size: 320px;
81
- }
82
-
83
- :where([data-control-family="code-block-editor"][data-slot="floating-frame"]) {
84
- padding-block-start: calc(var(--spacing) * 5);
85
- }
86
-
87
- :where(
88
- [data-control-family="code-block-editor"][data-slot="root"]:is([data-density="compact"], [data-variant="command"])
89
- [data-slot="floating-frame"]
90
- ) {
91
- padding-block-start: calc(var(--spacing) * 7);
92
- }
93
-
94
- :where([data-control-family="button"][data-code-block-editor-floating-copy="true"]) {
95
- background: oklch(from var(--background) l c h / 0.85);
96
- box-shadow:
97
- inset 0 0 0 1px var(--border),
98
- var(--shadow-sm);
99
- backdrop-filter: blur(var(--backdrop-blur-popover));
100
- }
101
- }
102
-
103
- @property --cui-code-block-editor-radius {
104
- syntax: "<length>";
105
- inherits: true;
106
- initial-value: 0px;
107
- }
108
-
109
- @property --cui-code-block-editor-background {
110
- syntax: "<color>";
111
- inherits: true;
112
- initial-value: transparent;
113
- }
114
-
115
- @property --cui-code-block-editor-border-color {
116
- syntax: "<color>";
117
- inherits: true;
118
- initial-value: transparent;
119
- }
120
-
121
- @property --cui-code-block-editor-shadow {
122
- syntax: "*";
123
- inherits: true;
124
- }
125
-
126
- @property --cui-code-block-editor-title-foreground {
127
- syntax: "<color>";
128
- inherits: true;
129
- initial-value: transparent;
130
- }
131
-
132
- @property --cui-code-block-editor-code-background {
133
- syntax: "<color>";
134
- inherits: true;
135
- initial-value: transparent;
136
- }
@@ -1,137 +0,0 @@
1
- [data-skin="refined"][data-skin] {
2
- /* Geist via next/font (--font-geist-sans); host without it falls to system stack. */
3
- --font-sans: var(--font-geist-sans, "Geist"), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
4
- --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, "Liberation Mono", monospace;
5
-
6
- --text-label: 0.75rem; /* 12px — form labels + small chrome (nav item, tooltip, shortcut) */
7
-
8
- /* Headings run medium, not bold, and pull tight — Geist at -0.03em is the whole voice. */
9
- --text-heading-4--font-weight: 500;
10
- --text-heading-3--font-weight: 500;
11
- --text-heading-2--font-weight: 500;
12
- --text-heading-1--font-weight: 500;
13
- --text-heading-1--letter-spacing: -0.03em;
14
- --text-display--font-weight: 500;
15
- --text-display--letter-spacing: -0.03em;
16
-
17
- /* shadcn base names, full colors, authored in oklch (wider gamut, matches Tailwind/shadcn v4); any format still works.
18
- Refined brand = four warm-paper neutrals (#FFF / #F5F4F3 / #F4F2F0 / #EEECEA) under a cool ink (#060612), so the
19
- page reads as pressed paper and every edge comes from light, not from a line. */
20
- --background: oklch(0.984 0.0018 68);
21
- --foreground: oklch(0.1304 0.0277 282);
22
- --card: oklch(1 0 0);
23
- --card-foreground: oklch(0.1304 0.0277 282);
24
- --popover: oklch(1 0 0);
25
- --popover-foreground: oklch(0.1304 0.0277 282);
26
- --primary: oklch(0.1304 0.0277 282);
27
- --primary-foreground: oklch(1 0 0);
28
- --muted: oklch(0.9441 0.0034 68);
29
- --muted-foreground: oklch(0.5202 0.0094 294);
30
- --secondary: oklch(0.9621 0.0034 68);
31
- --secondary-foreground: oklch(0.1304 0.0277 282);
32
- --accent: oklch(0.9441 0.0034 68);
33
- --accent-foreground: oklch(0.1304 0.0277 282);
34
- --destructive: oklch(0.568 0.1961 32);
35
- --destructive-foreground: oklch(1 0 0);
36
- --border: oklch(0.915 0.004 68 / var(--ring-opacity));
37
- --input: oklch(0.915 0.004 68);
38
- /* The brand orange only ever lands on the focus ring: white-on-#FF6321 is 2.98:1, so it can never be a fill
39
- that carries text. --focus-ring darkens to their button rim (#CF4E17) to clear 3:1 against the paper. */
40
- --ring: oklch(0.6931 0.2032 40);
41
- --focus-ring: oklch(0.5911 0.1746 40);
42
- --primary-text: oklch(0.48 0.16 40); /* links and primary-tone text: the orange darkened until it clears 4.5:1 on paper */
43
-
44
- /* Page canvas, a level below --background/--card/--popover (all elevated surfaces); GitHub Primer calls this `canvas`.
45
- Keep it clear of --muted (0.9441): when the two match, every muted surface dropped straight onto the page — a
46
- standalone Code block, say — reads as nothing but its ring. Light ladder: muted < secondary < canvas < background < card. */
47
- --canvas: oklch(0.9676 0.0017 68);
48
-
49
- /* popover/dropdown/select/dialog all read bg-popover, so this pair frosts them together. 1 = solid; <1 + blur = glass. */
50
- --popover-opacity: 1;
51
- --backdrop-blur-popover: 0px;
52
-
53
- /* modal overlay (dialog backdrop) — dim and blur are theme-driven; color derives from foreground/background. */
54
- --overlay-opacity: 0.2;
55
- --backdrop-blur-overlay: 1px;
56
-
57
- /* Edge-fade depth shared by scroll-surface masks. 0 = hard edges. */
58
- --scroll-fade-size: 2rem;
59
-
60
- /* elevation controls */
61
- --shadow-color: oklch(0.1304 0.0277 282); /* hue every shadow tints with — the ink itself, cool near-black */
62
- /* Top-light stays at the alpha their raised chrome uses (white 0.08): invisible on a white card, a bare catch on ink.
63
- Recipes scale it by opacity/size knobs too, so --shadow-size:0 extinguishes it with everything else. */
64
- --shadow-highlight: oklch(1 0 0 / 0.08);
65
- --shadow-size: 1; /* global geometry multiplier: 1 = default depth, 0 = flat */
66
- --shadow-opacity: 1; /* global alpha multiplier: 1 = default density, 0 = invisible */
67
-
68
- /* THE radius knob; @theme surface scale + --radius-control both derive from it — squares (0) or rounds whole UI. */
69
- --radius: 0.5rem;
70
- /* Controls sit at THE radius, not a multiple of it: an 8px corner on a 36px button is the rounded rect they use everywhere. */
71
- --radius-control: var(--radius);
72
-
73
- /* Progressive enhancement over border-radius; `round` = current look, squircle/superellipse(2)/scoop reshape Control UI surfaces. */
74
- /* Squircle reads ~half as round as a circular arc at same radius; browsers w/o corner-shape support fall back to
75
- plain round and look over-rounded. This ratio shrinks the fallback radius (squircle only, see @supports not
76
- below) to keep cross-browser look close. 1 = no change, 0.5 = halve. */
77
-
78
- /* Floating-list (select/dropdown) concentric corners: container radius = row radius + padding, so hovered row nests exactly. */
79
- --popover-padding: 0.25rem; /* gap between container edge and rows (also = p-* on the popup) */
80
- --radius-popup-item: calc(var(--radius-control) * 0.6); /* select/menu row corner */
81
- /* Container corner = fitted row radius + padding - 1px: ring-clip nests concentric rows with slack,
82
- 1px tighter hugs snugly (~1.6px clearance); clamp collapses offset to 0 when --radius is 0. */
83
-
84
- /* content density for the rounded surfaces (bubble / composer field) */
85
- --padding-x: 1rem;
86
- --padding-y: 0.625rem;
87
-
88
- /* One base height; xs/sm/md/lg are computed (proportional ramp), shared by button/select/menu/input.
89
- --padding-y stays for content-sized surfaces (bubble/composer). */
90
- --control-h: 2.25rem; /* md — THE base height; ramp derives from it */
91
- /* round() snaps to whole px: unrounded step ceils scrollHeight past clientHeight, Base UI reads as phantom 1px overflow. */
92
-
93
- /* motion — curves are raw vars so they can be swapped live */
94
- --ease-standard: cubic-bezier(0.2, 0, 0, 1);
95
- --ease-emphasized: cubic-bezier(0.16, 1, 0.3, 1);
96
- --duration-fast: 150ms;
97
- --duration-base: 200ms;
98
- --duration-slow: 300ms;
99
- }
100
-
101
- /* Semantic rungs re-declared on the skin root so portal-scoped radius changes resolve locally;
102
- the sm–2xl scale is a derived-tier default in core theme.css. */
103
- [data-skin="refined"][data-skin] {
104
- --radius-field: var(--radius); /* user bubble, composer shell */
105
- /* Kraftbase rounds every content surface the same 8px; only the scene-scale frames go bigger. */
106
- --radius-panel: var(--radius);
107
- --radius-scene: calc(var(--radius) * 2); /* scene frame, large media */
108
- }
109
-
110
- :where(.dark) [data-skin="refined"][data-skin],
111
- .dark[data-skin="refined"][data-skin] {
112
- --background: oklch(0.1852 0.0113 250);
113
- --foreground: oklch(0.9645 0.0033 250);
114
- --card: oklch(0.2153 0.0121 250);
115
- --card-foreground: oklch(0.9645 0.0033 250);
116
- --popover: oklch(0.2153 0.0121 250);
117
- --popover-foreground: oklch(0.9645 0.0033 250);
118
- --primary: oklch(0.9645 0.0033 250);
119
- --primary-foreground: oklch(0.1852 0.0113 250);
120
- --muted: oklch(0.2668 0.0128 250);
121
- --muted-foreground: oklch(0.7405 0.0104 260);
122
- --secondary: oklch(0.2412 0.0124 250);
123
- --secondary-foreground: oklch(0.9645 0.0033 250);
124
- --accent: oklch(0.2864 0.0132 250);
125
- --accent-foreground: oklch(0.9645 0.0033 250);
126
- --destructive: oklch(0.551 0.1799 32);
127
- --destructive-foreground: oklch(0.9645 0.0033 250);
128
- --border: oklch(0.3082 0.0139 250 / var(--ring-opacity));
129
- --input: oklch(0.3082 0.0139 250);
130
- --ring: oklch(0.6931 0.2032 40);
131
- --focus-ring: oklch(0.72 0.19 42);
132
- --primary-text: oklch(0.78 0.16 42);
133
- --canvas: oklch(0.1322 0.0113 250);
134
- --shadow-color: oklch(0 0 0);
135
- /* In dark the inner top light is a faint edge catch, not a glow. */
136
- --shadow-highlight: oklch(1 0 0 / 0.055);
137
- }