@ctrl-ui/react 0.8.1 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) 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/blocks/chat.d.ts +3 -4
  7. package/dist/blocks/chat.js +6 -3
  8. package/dist/blocks/coding-agent.d.ts +11 -12
  9. package/dist/blocks/coding-agent.js +10 -9
  10. package/dist/blocks/file-explorer-data.d.ts +11 -12
  11. package/dist/blocks/file-explorer.d.ts +3 -3
  12. package/dist/blocks/settings-data.d.ts +8 -9
  13. package/dist/blocks/settings.d.ts +4 -4
  14. package/dist/blocks/theme-toggle.d.ts +11 -12
  15. package/dist/blocks/theme-toggle.js +14 -4
  16. package/dist/chat-composer-attachment.d.ts +20 -21
  17. package/dist/chat-composer-attachment.js +24 -20
  18. package/dist/chat-composer-editor/extensions/mention.d.ts +5 -6
  19. package/dist/chat-composer-editor/ghost.d.ts +3 -4
  20. package/dist/chat-composer-editor/schema.d.ts +2 -3
  21. package/dist/chat-composer-editor/serialize.d.ts +3 -4
  22. package/dist/chat-composer-editor/types.d.ts +5 -6
  23. package/dist/chat-composer-editor.d.ts +2 -3
  24. package/dist/chat-composer-editor.js +18 -4
  25. package/dist/chat-composer.d.ts +17 -18
  26. package/dist/chat-composer.js +14 -8
  27. package/dist/chat-layout.d.ts +12 -21
  28. package/dist/chat-layout.js +28 -83
  29. package/dist/chat-message.d.ts +14 -15
  30. package/dist/context-model.d.ts +7 -8
  31. package/dist/context.d.ts +21 -22
  32. package/dist/control-props.d.ts +10 -11
  33. package/dist/control-variants.d.ts +6 -7
  34. package/dist/dynamic-notification-glass.d.ts +3 -4
  35. package/dist/dynamic-notification-liquid.d.ts +3 -4
  36. package/dist/dynamic-notification-siri-wave.d.ts +2 -3
  37. package/dist/dynamic-notification.d.ts +28 -29
  38. package/dist/email/email.d.ts +6 -7
  39. package/dist/email/email.js +12 -3
  40. package/dist/email/length.d.ts +3 -0
  41. package/dist/email/length.js +34 -0
  42. package/dist/email/templates.d.ts +7 -8
  43. package/dist/email/templates.js +5 -5
  44. package/dist/email/theme.d.ts +16 -5
  45. package/dist/email/theme.js +21 -6
  46. package/dist/environment-variables.d.ts +35 -36
  47. package/dist/extensions/create-track-highlight.d.ts +3 -4
  48. package/dist/extensions/supports-anchor-transitions.d.ts +2 -3
  49. package/dist/extensions/track-highlight.d.ts +3 -4
  50. package/dist/hooks/use-audio-recorder.d.ts +14 -15
  51. package/dist/hooks/use-chat-composer.d.ts +5 -6
  52. package/dist/hooks/use-chat-message.d.ts +7 -8
  53. package/dist/hooks/use-color-area.d.ts +5 -6
  54. package/dist/hooks/use-copy-to-clipboard.d.ts +7 -8
  55. package/dist/hooks/use-dropzone.d.ts +11 -12
  56. package/dist/hooks/use-dynamic-notification.d.ts +6 -7
  57. package/dist/hooks/use-environment-variables.d.ts +9 -10
  58. package/dist/hooks/use-keyboard-navigation.d.ts +3 -0
  59. package/dist/hooks/use-keyboard-navigation.js +22 -0
  60. package/dist/hooks/use-mobile.d.ts +2 -3
  61. package/dist/hooks/use-textarea-trigger-menu.d.ts +2 -3
  62. package/dist/hooks/use-trigger-menu.d.ts +7 -8
  63. package/dist/hooks/use-user-ask.d.ts +6 -7
  64. package/dist/inline-attachment.d.ts +16 -17
  65. package/dist/inline-citation.d.ts +22 -23
  66. package/dist/knob-contracts/accordion-knobs.d.ts +3 -4
  67. package/dist/knob-contracts/accordion-knobs.js +1 -0
  68. package/dist/knob-contracts/action-bar-knobs.d.ts +3 -4
  69. package/dist/knob-contracts/activity-knobs.d.ts +3 -4
  70. package/dist/knob-contracts/alert-knobs.d.ts +3 -4
  71. package/dist/knob-contracts/alert-knobs.js +12 -1
  72. package/dist/knob-contracts/audio-recorder-knobs.d.ts +3 -4
  73. package/dist/knob-contracts/audio-visualizer-knobs.d.ts +3 -4
  74. package/dist/knob-contracts/avatar-knobs.d.ts +3 -4
  75. package/dist/knob-contracts/avatar-knobs.js +2 -1
  76. package/dist/knob-contracts/badge-knobs.d.ts +3 -4
  77. package/dist/knob-contracts/button-group-knobs.d.ts +3 -4
  78. package/dist/knob-contracts/button-knobs.d.ts +3 -4
  79. package/dist/knob-contracts/button-knobs.js +1 -0
  80. package/dist/knob-contracts/calendar-knobs.d.ts +3 -4
  81. package/dist/knob-contracts/card-knobs.d.ts +3 -4
  82. package/dist/knob-contracts/chat-composer-attachment-knobs.d.ts +3 -4
  83. package/dist/knob-contracts/chat-composer-attachment-knobs.js +3 -1
  84. package/dist/knob-contracts/chat-composer-knobs.d.ts +3 -4
  85. package/dist/knob-contracts/chat-composer-knobs.js +1 -0
  86. package/dist/knob-contracts/chat-layout-knobs.d.ts +3 -4
  87. package/dist/knob-contracts/chat-layout-knobs.js +2 -3
  88. package/dist/knob-contracts/chat-message-knobs.d.ts +3 -4
  89. package/dist/knob-contracts/choice-knobs.d.ts +3 -4
  90. package/dist/knob-contracts/choice-knobs.js +2 -1
  91. package/dist/knob-contracts/code-diff-knobs.d.ts +3 -4
  92. package/dist/knob-contracts/code-diff-knobs.js +1 -0
  93. package/dist/knob-contracts/code-knobs.d.ts +3 -4
  94. package/dist/knob-contracts/code-knobs.js +3 -1
  95. package/dist/knob-contracts/collapsible-knobs.d.ts +3 -4
  96. package/dist/knob-contracts/color-picker-knobs.d.ts +3 -4
  97. package/dist/knob-contracts/context-knobs.d.ts +3 -4
  98. package/dist/knob-contracts/dockable-panel-knobs.d.ts +3 -4
  99. package/dist/knob-contracts/dockable-panel-knobs.js +1 -0
  100. package/dist/knob-contracts/dropzone-knobs.d.ts +3 -4
  101. package/dist/knob-contracts/dropzone-knobs.js +1 -0
  102. package/dist/knob-contracts/dynamic-notification-knobs.d.ts +3 -4
  103. package/dist/knob-contracts/empty-knobs.d.ts +3 -4
  104. package/dist/knob-contracts/empty-knobs.js +14 -1
  105. package/dist/knob-contracts/environment-variables-knobs.d.ts +3 -4
  106. package/dist/knob-contracts/environment-variables-knobs.js +2 -1
  107. package/dist/knob-contracts/field-knobs.d.ts +3 -4
  108. package/dist/knob-contracts/gradient-editor-knobs.d.ts +3 -4
  109. package/dist/knob-contracts/gradient-editor-knobs.js +3 -1
  110. package/dist/knob-contracts/infinite-canvas-knobs.d.ts +3 -4
  111. package/dist/knob-contracts/inline-attachment-knobs.d.ts +3 -4
  112. package/dist/knob-contracts/inline-attachment-knobs.js +2 -1
  113. package/dist/knob-contracts/inline-citation-knobs.d.ts +3 -4
  114. package/dist/knob-contracts/inline-citation-knobs.js +1 -0
  115. package/dist/knob-contracts/item-knobs.d.ts +3 -4
  116. package/dist/knob-contracts/kbd-knobs.d.ts +3 -4
  117. package/dist/knob-contracts/markdown-block-knobs.d.ts +3 -4
  118. package/dist/knob-contracts/markdown-block-knobs.js +2 -0
  119. package/dist/knob-contracts/markdown-knobs.d.ts +3 -4
  120. package/dist/knob-contracts/markdown-knobs.js +1 -0
  121. package/dist/knob-contracts/morphing-panel-knobs.d.ts +3 -4
  122. package/dist/knob-contracts/pagination-knobs.d.ts +3 -4
  123. package/dist/knob-contracts/phone-input-knobs.d.ts +3 -4
  124. package/dist/knob-contracts/phone-input-knobs.js +1 -0
  125. package/dist/knob-contracts/popup-knobs.d.ts +3 -4
  126. package/dist/knob-contracts/progressive-blur-knobs.d.ts +3 -4
  127. package/dist/knob-contracts/progressive-blur-knobs.js +1 -0
  128. package/dist/knob-contracts/range-knobs.d.ts +3 -4
  129. package/dist/knob-contracts/resizable-knobs.d.ts +3 -4
  130. package/dist/knob-contracts/resizable-knobs.js +1 -0
  131. package/dist/knob-contracts/rich-tooltip-knobs.d.ts +3 -4
  132. package/dist/knob-contracts/scroll-area-knobs.d.ts +3 -4
  133. package/dist/knob-contracts/separator-knobs.d.ts +3 -4
  134. package/dist/knob-contracts/sidebar-knobs.d.ts +3 -4
  135. package/dist/knob-contracts/sidebar-knobs.js +1 -0
  136. package/dist/knob-contracts/skeleton-knobs.d.ts +3 -4
  137. package/dist/knob-contracts/skeleton-knobs.js +9 -1
  138. package/dist/knob-contracts/source-badge-knobs.d.ts +3 -4
  139. package/dist/knob-contracts/spinner-knobs.d.ts +3 -4
  140. package/dist/knob-contracts/stepper-knobs.d.ts +3 -4
  141. package/dist/knob-contracts/stepper-knobs.js +1 -0
  142. package/dist/knob-contracts/switch-knobs.d.ts +3 -4
  143. package/dist/knob-contracts/switch-knobs.js +7 -1
  144. package/dist/knob-contracts/table-knobs.d.ts +3 -4
  145. package/dist/knob-contracts/table-of-contents-knobs.d.ts +3 -4
  146. package/dist/knob-contracts/table-of-contents-knobs.js +25 -0
  147. package/dist/knob-contracts/tabs-knobs.d.ts +3 -4
  148. package/dist/knob-contracts/tabs-knobs.js +2 -1
  149. package/dist/knob-contracts/task-list-knobs.d.ts +3 -4
  150. package/dist/knob-contracts/task-list-knobs.js +1 -0
  151. package/dist/knob-contracts/thread-rail-knobs.d.ts +3 -4
  152. package/dist/knob-contracts/timeline-knobs.d.ts +3 -4
  153. package/dist/knob-contracts/toolbar-knobs.d.ts +3 -4
  154. package/dist/knob-contracts/toolbar-knobs.js +1 -0
  155. package/dist/knob-contracts/track-highlight-knobs.d.ts +3 -4
  156. package/dist/knob-contracts/transcript-divider-knobs.d.ts +3 -4
  157. package/dist/knob-contracts/tree-knobs.d.ts +3 -4
  158. package/dist/knob-contracts/user-ask-knobs.d.ts +3 -4
  159. package/dist/knob-contracts/user-ask-knobs.js +1 -0
  160. package/dist/lib/cn.d.ts +2 -3
  161. package/dist/lib/code-tokens.d.ts +12 -13
  162. package/dist/lib/color.d.ts +26 -27
  163. package/dist/lib/contrast.d.ts +12 -13
  164. package/dist/lib/diff.d.ts +14 -15
  165. package/dist/lib/dropzone-validation.d.ts +25 -26
  166. package/dist/lib/env-file.d.ts +12 -13
  167. package/dist/lib/format-audio-recorder-duration.d.ts +2 -3
  168. package/dist/lib/liquid-glass-optics.d.ts +2 -3
  169. package/dist/lib/phone-input-format.d.ts +3 -4
  170. package/dist/lib/phone-input-format.js +1 -1
  171. package/dist/lib/phone-number.d.ts +8 -9
  172. package/dist/lib/trigger-detect.d.ts +4 -5
  173. package/dist/markdown-block.d.ts +11 -12
  174. package/dist/scripts/contrast-eval.d.ts +16 -17
  175. package/dist/scripts/contrast-eval.js +13 -7
  176. package/dist/skin-provider.d.ts +14 -0
  177. package/dist/skin-provider.js +21 -0
  178. package/dist/skin.d.ts +14 -33
  179. package/dist/skin.js +3 -46
  180. package/dist/source-badge.d.ts +7 -8
  181. package/dist/styles/index.css +2 -4
  182. package/dist/styles/recipes/accordion.css +8 -2
  183. package/dist/styles/recipes/action-bar.css +5 -2
  184. package/dist/styles/recipes/alert.css +95 -16
  185. package/dist/styles/recipes/avatar.css +17 -1
  186. package/dist/styles/recipes/badge.css +0 -1
  187. package/dist/styles/recipes/button.css +34 -8
  188. package/dist/styles/recipes/calendar.css +0 -6
  189. package/dist/styles/recipes/chat-composer-attachment.css +51 -53
  190. package/dist/styles/recipes/chat-composer.css +26 -21
  191. package/dist/styles/recipes/chat-layout.css +21 -62
  192. package/dist/styles/recipes/chat-message.css +11 -5
  193. package/dist/styles/recipes/choice.css +9 -2
  194. package/dist/styles/recipes/code-diff.css +8 -1
  195. package/dist/styles/recipes/code.css +39 -17
  196. package/dist/styles/recipes/collapsible.css +0 -3
  197. package/dist/styles/recipes/color-picker-details.css +1 -2
  198. package/dist/styles/recipes/color-picker-values.css +0 -4
  199. package/dist/styles/recipes/dockable-panel.css +8 -1
  200. package/dist/styles/recipes/dropzone.css +9 -2
  201. package/dist/styles/recipes/empty.css +118 -17
  202. package/dist/styles/recipes/environment-variables.css +8 -1
  203. package/dist/styles/recipes/field-parts.css +1 -6
  204. package/dist/styles/recipes/field.css +9 -5
  205. package/dist/styles/recipes/gradient-editor.css +16 -5
  206. package/dist/styles/recipes/inline-attachment.css +13 -8
  207. package/dist/styles/recipes/inline-citation.css +8 -4
  208. package/dist/styles/recipes/item.css +1 -1
  209. package/dist/styles/recipes/kbd.css +8 -0
  210. package/dist/styles/recipes/markdown-block.css +16 -2
  211. package/dist/styles/recipes/markdown.css +12 -0
  212. package/dist/styles/recipes/morphing-panel.css +1 -1
  213. package/dist/styles/recipes/pagination.css +0 -4
  214. package/dist/styles/recipes/phone-input.css +8 -4
  215. package/dist/styles/recipes/popup-lists.css +11 -0
  216. package/dist/styles/recipes/popup-toast.css +1 -29
  217. package/dist/styles/recipes/popup.css +2 -2
  218. package/dist/styles/recipes/progressive-blur.css +28 -7
  219. package/dist/styles/recipes/range.css +50 -1
  220. package/dist/styles/recipes/resizable.css +8 -10
  221. package/dist/styles/recipes/rich-tooltip.css +0 -4
  222. package/dist/styles/recipes/scroll-area.css +8 -2
  223. package/dist/styles/recipes/sidebar-menu.css +150 -0
  224. package/dist/styles/recipes/sidebar.css +56 -110
  225. package/dist/styles/recipes/skeleton.css +85 -3
  226. package/dist/styles/recipes/source-badge.css +0 -3
  227. package/dist/styles/recipes/stepper.css +8 -1
  228. package/dist/styles/recipes/switch.css +89 -17
  229. package/dist/styles/recipes/table-of-contents.css +211 -45
  230. package/dist/styles/recipes/table.css +0 -1
  231. package/dist/styles/recipes/tabs.css +19 -2
  232. package/dist/styles/recipes/task-list.css +8 -2
  233. package/dist/styles/recipes/thread-rail.css +0 -4
  234. package/dist/styles/recipes/toolbar.css +18 -4
  235. package/dist/styles/recipes/track-highlight.css +63 -5
  236. package/dist/styles/recipes/tree.css +2 -0
  237. package/dist/styles/recipes/user-ask.css +8 -4
  238. package/dist/styles/theme.css +130 -138
  239. package/dist/surface-variants.d.ts +4 -5
  240. package/dist/task-list.d.ts +16 -17
  241. package/dist/thread-rail.d.ts +21 -22
  242. package/dist/transcript-divider.d.ts +6 -7
  243. package/dist/ui/accordion.d.ts +10 -11
  244. package/dist/ui/alert-dialog.d.ts +11 -12
  245. package/dist/ui/alert-dialog.js +8 -6
  246. package/dist/ui/alert.d.ts +9 -10
  247. package/dist/ui/alert.js +3 -3
  248. package/dist/ui/aspect-ratio.d.ts +3 -4
  249. package/dist/ui/autocomplete.d.ts +19 -20
  250. package/dist/ui/autocomplete.js +5 -3
  251. package/dist/ui/avatar.d.ts +9 -10
  252. package/dist/ui/badge.d.ts +9 -10
  253. package/dist/ui/button-group.d.ts +7 -8
  254. package/dist/ui/button-group.js +3 -2
  255. package/dist/ui/button.d.ts +17 -18
  256. package/dist/ui/button.js +20 -5
  257. package/dist/ui/calendar.d.ts +3 -4
  258. package/dist/ui/card.d.ts +16 -17
  259. package/dist/ui/checkbox-group.d.ts +4 -5
  260. package/dist/ui/checkbox-group.js +3 -2
  261. package/dist/ui/checkbox.d.ts +3 -4
  262. package/dist/ui/code-diff.d.ts +8 -9
  263. package/dist/ui/code.d.ts +32 -23
  264. package/dist/ui/code.js +41 -20
  265. package/dist/ui/collapsible.d.ts +7 -8
  266. package/dist/ui/color-picker.d.ts +40 -41
  267. package/dist/ui/color-picker.js +5 -3
  268. package/dist/ui/combobox-disabled-selection.d.ts +3 -4
  269. package/dist/ui/combobox.d.ts +21 -20
  270. package/dist/ui/combobox.js +5 -3
  271. package/dist/ui/command.d.ts +19 -18
  272. package/dist/ui/command.js +38 -12
  273. package/dist/ui/context-menu.d.ts +30 -31
  274. package/dist/ui/context-menu.js +8 -5
  275. package/dist/ui/dialog.d.ts +13 -13
  276. package/dist/ui/dialog.js +10 -8
  277. package/dist/ui/dockable-panel-geometry.d.ts +7 -8
  278. package/dist/ui/dockable-panel.d.ts +21 -22
  279. package/dist/ui/drawer.d.ts +17 -18
  280. package/dist/ui/drawer.js +7 -6
  281. package/dist/ui/dropdown-menu.d.ts +36 -29
  282. package/dist/ui/dropdown-menu.js +116 -9
  283. package/dist/ui/dropzone.d.ts +24 -24
  284. package/dist/ui/empty.d.ts +14 -14
  285. package/dist/ui/empty.js +3 -3
  286. package/dist/ui/field.d.ts +26 -27
  287. package/dist/ui/form.d.ts +4 -5
  288. package/dist/ui/gradient-editor.d.ts +16 -17
  289. package/dist/ui/hover-card.d.ts +6 -7
  290. package/dist/ui/hover-card.js +5 -3
  291. package/dist/ui/infinite-canvas.d.ts +11 -12
  292. package/dist/ui/input-group.d.ts +6 -7
  293. package/dist/ui/input-otp.d.ts +7 -8
  294. package/dist/ui/input.d.ts +3 -4
  295. package/dist/ui/item.d.ts +20 -21
  296. package/dist/ui/kbd.d.ts +7 -5
  297. package/dist/ui/kbd.js +4 -2
  298. package/dist/ui/markdown-elements.d.ts +20 -21
  299. package/dist/ui/markdown.d.ts +5 -6
  300. package/dist/ui/menubar.d.ts +25 -26
  301. package/dist/ui/menubar.js +8 -5
  302. package/dist/ui/meter.d.ts +11 -12
  303. package/dist/ui/morphing-panel.d.ts +8 -9
  304. package/dist/ui/native-select.d.ts +3 -4
  305. package/dist/ui/native-select.js +1 -1
  306. package/dist/ui/navigation-menu.d.ts +17 -18
  307. package/dist/ui/navigation-menu.js +5 -3
  308. package/dist/ui/number-field.d.ts +15 -16
  309. package/dist/ui/pagination.d.ts +10 -11
  310. package/dist/ui/phone-input.d.ts +5 -6
  311. package/dist/ui/phone-input.js +40 -37
  312. package/dist/ui/popover.d.ts +11 -12
  313. package/dist/ui/popover.js +5 -3
  314. package/dist/ui/progress.d.ts +11 -12
  315. package/dist/ui/progressive-blur.d.ts +4 -5
  316. package/dist/ui/radio-group.d.ts +5 -6
  317. package/dist/ui/resizable.d.ts +12 -13
  318. package/dist/ui/responsive-dialog.d.ts +11 -12
  319. package/dist/ui/rich-tooltip-tour.d.ts +5 -6
  320. package/dist/ui/rich-tooltip.d.ts +21 -23
  321. package/dist/ui/rich-tooltip.js +5 -5
  322. package/dist/ui/scroll-area.d.ts +7 -8
  323. package/dist/ui/scroll-area.js +9 -6
  324. package/dist/ui/select.d.ts +21 -14
  325. package/dist/ui/select.js +7 -4
  326. package/dist/ui/separator.d.ts +2 -3
  327. package/dist/ui/sheet.d.ts +8 -9
  328. package/dist/ui/sheet.js +7 -5
  329. package/dist/ui/sidebar-menu.d.ts +24 -15
  330. package/dist/ui/sidebar-menu.js +30 -4
  331. package/dist/ui/sidebar-provider.d.ts +32 -7
  332. package/dist/ui/sidebar-provider.js +82 -22
  333. package/dist/ui/sidebar-resize-rail.d.ts +8 -0
  334. package/dist/ui/sidebar-resize-rail.js +192 -0
  335. package/dist/ui/sidebar.d.ts +20 -14
  336. package/dist/ui/sidebar.js +122 -57
  337. package/dist/ui/skeleton.d.ts +7 -4
  338. package/dist/ui/skeleton.js +9 -2
  339. package/dist/ui/slider.d.ts +6 -5
  340. package/dist/ui/slider.js +16 -13
  341. package/dist/ui/spinner.d.ts +3 -4
  342. package/dist/ui/stepper.d.ts +22 -23
  343. package/dist/ui/switch.d.ts +3 -4
  344. package/dist/ui/switch.js +12 -1
  345. package/dist/ui/table-of-contents.d.ts +7 -8
  346. package/dist/ui/table-of-contents.js +4 -2
  347. package/dist/ui/table.d.ts +17 -18
  348. package/dist/ui/tabs.d.ts +14 -11
  349. package/dist/ui/textarea.d.ts +3 -4
  350. package/dist/ui/timeline.d.ts +18 -19
  351. package/dist/ui/toast.d.ts +9 -9
  352. package/dist/ui/toast.js +21 -14
  353. package/dist/ui/toggle.d.ts +5 -6
  354. package/dist/ui/toggle.js +3 -2
  355. package/dist/ui/toolbar.d.ts +15 -16
  356. package/dist/ui/toolbar.js +15 -4
  357. package/dist/ui/tooltip.d.ts +6 -13
  358. package/dist/ui/tooltip.js +7 -8
  359. package/dist/ui/tree.d.ts +18 -19
  360. package/dist/ui/tree.js +3 -2
  361. package/dist/ui/trigger-menu.d.ts +15 -16
  362. package/dist/ui/trigger-menu.js +5 -3
  363. package/dist/ui/use-switch-drag.d.ts +7 -0
  364. package/dist/ui/use-switch-drag.js +104 -0
  365. package/dist/user-ask.d.ts +24 -25
  366. package/package.json +15 -15
  367. package/dist/code-block-editor.d.ts +0 -59
  368. package/dist/code-block-editor.js +0 -250
  369. package/dist/knob-contracts/code-block-editor-knobs.d.ts +0 -5
  370. package/dist/knob-contracts/code-block-editor-knobs.js +0 -11
  371. package/dist/lib/code-block-shiki.d.ts +0 -9
  372. package/dist/lib/code-block-shiki.js +0 -6
  373. package/dist/skin.config.d.ts +0 -5
  374. package/dist/skin.config.js +0 -12
  375. package/dist/styles/recipes/code-block-editor.css +0 -136
  376. package/dist/styles/skin-theme.css +0 -137
  377. package/dist/styles/skin.css +0 -143
package/dist/ui/toast.js CHANGED
@@ -1,6 +1,8 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { skinEffects, skinId } from "../skin.js";
3
+ import { controlEffectsAttribute } from "../skin.js";
4
+ import { useSkin } from "../skin-provider.js";
5
+ import { Button } from "./button.js";
4
6
  import { jsx, jsxs } from "react/jsx-runtime";
5
7
  import { Toast } from "@base-ui/react/toast";
6
8
  //#region src/ui/toast.tsx
@@ -73,24 +75,28 @@ function ToastList({ rootStyle, indicatorStyle, actionStyle, closeStyle }) {
73
75
  }) : null]
74
76
  }),
75
77
  entry.actionProps ? /* @__PURE__ */ jsx(Toast.Action, {
76
- "data-control-ui": "toast",
77
- "data-control-family": "popup",
78
- "data-popup-kind": "toast",
79
- "data-slot": "action",
80
78
  style: actionStyle,
81
- className: "shrink-0 cursor-pointer"
79
+ render: (renderProps) => /* @__PURE__ */ jsx(Button, {
80
+ ...renderProps,
81
+ "data-popup-kind": "toast",
82
+ "data-popup-part": "action",
83
+ variant: "surface",
84
+ size: "xs"
85
+ })
82
86
  }) : null,
83
87
  /* @__PURE__ */ jsx(Toast.Close, {
84
- "data-control-ui": "toast",
85
- "data-control-family": "popup",
86
- "data-popup-kind": "toast",
87
- "data-slot": "close",
88
88
  style: closeStyle,
89
89
  "aria-label": "Close",
90
- className: "shrink-0 cursor-pointer",
90
+ render: (renderProps) => /* @__PURE__ */ jsx(Button, {
91
+ ...renderProps,
92
+ "data-popup-kind": "toast",
93
+ "data-popup-part": "close",
94
+ variant: "quiet",
95
+ size: "xs",
96
+ iconOnly: true
97
+ }),
91
98
  children: /* @__PURE__ */ jsx("svg", {
92
99
  viewBox: "0 0 16 16",
93
- className: "size-4",
94
100
  "aria-hidden": "true",
95
101
  fill: "none",
96
102
  children: /* @__PURE__ */ jsx("path", {
@@ -107,6 +113,7 @@ function ToastList({ rootStyle, indicatorStyle, actionStyle, closeStyle }) {
107
113
  });
108
114
  }
109
115
  function Toaster({ className, timeout, limit, rootStyle, indicatorStyle, actionStyle, closeStyle }) {
116
+ const skin = useSkin();
110
117
  return /* @__PURE__ */ jsx(Toast.Provider, {
111
118
  toastManager,
112
119
  timeout,
@@ -116,8 +123,8 @@ function Toaster({ className, timeout, limit, rootStyle, indicatorStyle, actionS
116
123
  "data-control-family": "popup",
117
124
  "data-popup-kind": "toast",
118
125
  "data-slot": "viewport",
119
- "data-skin": skinId(),
120
- "data-effects": skinEffects(),
126
+ "data-skin": skin.id,
127
+ "data-effects": controlEffectsAttribute(skin.effects),
121
128
  className: cn("fixed right-4 bottom-4 z-[95] mx-auto w-[calc(100vw-2rem)] sm:right-6 sm:bottom-6 sm:w-[22.5rem]", className),
122
129
  children: /* @__PURE__ */ jsx(ToastList, {
123
130
  rootStyle,
@@ -2,20 +2,19 @@ import { ControlledMultiChoice, HoverIndicator } from "../control-props.js";
2
2
  import { ButtonProps } from "./button.js";
3
3
  import { ComponentProps } from "react";
4
4
  //#region src/ui/toggle.d.ts
5
- type ToggleProps = Omit<ButtonProps, "render" | "nativeButton" | "value"> & {
5
+ export type ToggleProps = Omit<ButtonProps, "render" | "nativeButton" | "value"> & {
6
6
  pressed?: boolean;
7
7
  defaultPressed?: boolean;
8
8
  onPressedChange?: (pressed: boolean) => void;
9
9
  value?: string;
10
10
  showCheck?: boolean;
11
11
  };
12
- type ToggleGroupProps<TValue extends string = string> = Omit<ComponentProps<"div">, "defaultValue" | "onChange"> & ControlledMultiChoice<TValue> & {
12
+ export type ToggleGroupProps<TValue extends string = string> = Omit<ComponentProps<"div">, "defaultValue" | "onChange"> & ControlledMultiChoice<TValue> & {
13
13
  multiple?: boolean;
14
14
  disabled?: boolean;
15
15
  orientation?: "horizontal" | "vertical";
16
16
  indicator?: HoverIndicator;
17
17
  };
18
- declare function Toggle({ variant, size, tone, active, showCheck, className, pressed, defaultPressed, onPressedChange, value, disabled, children, ...props }: ToggleProps): import("react").JSX.Element;
19
- declare function ToggleGroup<TValue extends string = string>({ className, orientation, indicator, children, ...props }: ToggleGroupProps<TValue>): import("react").JSX.Element;
20
- //#endregion
21
- export { Toggle, ToggleGroup, ToggleGroupProps, ToggleProps };
18
+ export declare function Toggle({ variant, size, tone, active, showCheck, className, pressed, defaultPressed, onPressedChange, value, disabled, children, ...props }: ToggleProps): import("react").JSX.Element;
19
+ export declare function ToggleGroup<TValue extends string = string>({ className, orientation, indicator, children, ...props }: ToggleGroupProps<TValue>): import("react").JSX.Element;
20
+ //#endregion
package/dist/ui/toggle.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { skinIndicator } from "../skin.js";
3
+ import { useSkin } from "../skin-provider.js";
4
4
  import { ButtonTrackContext, buttonContentClasses, buttonStructureClasses, buttonTrackStructureClasses } from "./button.js";
5
5
  import { TrackHighlight } from "../extensions/track-highlight.js";
6
6
  import { useContext } from "react";
@@ -62,7 +62,8 @@ function Toggle({ variant = "surface", size = "sm", tone = "neutral", active, sh
62
62
  });
63
63
  }
64
64
  function ToggleGroup({ className, orientation = "horizontal", indicator, children, ...props }) {
65
- const resolvedIndicator = indicator ?? skinIndicator("toggle-group") ?? "none";
65
+ const skin = useSkin();
66
+ const resolvedIndicator = indicator ?? skin.indicators?.["toggle-group"] ?? "none";
66
67
  const tracksHover = resolvedIndicator === "hover";
67
68
  return /* @__PURE__ */ jsx(ButtonTrackContext, {
68
69
  value: tracksHover,
@@ -2,39 +2,38 @@ import { ToolbarKnobStyle } from "../knob-contracts/toolbar-knobs.js";
2
2
  import { CSSProperties, ComponentProps } from "react";
3
3
  import { Toolbar as Toolbar$1 } from "@base-ui/react/toolbar";
4
4
  //#region src/ui/toolbar.d.ts
5
- type ToolbarVariant = "default" | "inverse";
6
- type ToolbarLinkVariant = "default" | "track";
7
- type ToolbarProps = Omit<ComponentProps<"div">, "style"> & {
5
+ export type ToolbarVariant = "default" | "inverse" | "floating";
6
+ export type ToolbarLinkVariant = "default" | "track";
7
+ export type ToolbarProps = Omit<ComponentProps<"div">, "style"> & {
8
8
  orientation?: "horizontal" | "vertical";
9
9
  variant?: ToolbarVariant;
10
10
  style?: CSSProperties & ToolbarKnobStyle;
11
11
  };
12
- type ToolbarButtonProps = Omit<ComponentProps<"button">, "style"> & {
12
+ export type ToolbarButtonProps = Omit<ComponentProps<"button">, "style"> & {
13
13
  iconOnly?: boolean;
14
14
  style?: CSSProperties & ToolbarKnobStyle;
15
15
  };
16
- type ToolbarLinkProps = Omit<ComponentProps<"a">, "style"> & {
16
+ export type ToolbarLinkProps = Omit<ComponentProps<"a">, "style"> & {
17
17
  variant?: ToolbarLinkVariant;
18
18
  style?: CSSProperties & ToolbarKnobStyle;
19
19
  };
20
- type ToolbarGroupProps = ComponentProps<"div"> & {
20
+ export type ToolbarGroupProps = ComponentProps<"div"> & {
21
21
  style?: CSSProperties & ToolbarKnobStyle;
22
22
  };
23
- type ToolbarSeparatorProps = Omit<ComponentProps<"div">, "style"> & {
23
+ export type ToolbarSeparatorProps = Omit<ComponentProps<"div">, "style"> & {
24
24
  orientation?: "horizontal" | "vertical";
25
25
  style?: CSSProperties & ToolbarKnobStyle;
26
26
  };
27
- type ToolbarInputProps = Omit<ComponentProps<"input">, "style"> & {
27
+ export type ToolbarInputProps = Omit<ComponentProps<"input">, "style"> & {
28
28
  style?: CSSProperties & ToolbarKnobStyle;
29
29
  };
30
- declare function Toolbar({ orientation, variant, className, ...props }: ToolbarProps): import("react").JSX.Element;
30
+ export declare function Toolbar({ orientation, variant, className, children, ...props }: ToolbarProps): import("react").JSX.Element;
31
31
  type RefinedToolbarButtonProps = ToolbarButtonProps & Pick<ComponentProps<typeof Toolbar$1.Button>, "render">;
32
- declare function ToolbarButton({ iconOnly, className, ...props }: RefinedToolbarButtonProps): import("react").JSX.Element;
32
+ export declare function ToolbarButton({ iconOnly, className, ...props }: RefinedToolbarButtonProps): import("react").JSX.Element;
33
33
  type RefinedToolbarLinkProps = ToolbarLinkProps & Pick<ComponentProps<typeof Toolbar$1.Link>, "render">;
34
- declare function ToolbarLink({ variant, className, ...props }: RefinedToolbarLinkProps): import("react").JSX.Element;
35
- declare function ToolbarGroup({ className, ...props }: ToolbarGroupProps): import("react").JSX.Element;
36
- declare function ToolbarSeparator({ orientation, className, ...props }: ToolbarSeparatorProps): import("react").JSX.Element;
34
+ export declare function ToolbarLink({ variant, className, ...props }: RefinedToolbarLinkProps): import("react").JSX.Element;
35
+ export declare function ToolbarGroup({ className, ...props }: ToolbarGroupProps): import("react").JSX.Element;
36
+ export declare function ToolbarSeparator({ orientation, className, ...props }: ToolbarSeparatorProps): import("react").JSX.Element;
37
37
  type RefinedToolbarInputProps = ToolbarInputProps & Pick<ComponentProps<typeof Toolbar$1.Input>, "render">;
38
- declare function ToolbarInput({ className, ...props }: RefinedToolbarInputProps): import("react").JSX.Element;
39
- //#endregion
40
- export { Toolbar, ToolbarButton, ToolbarButtonProps, ToolbarGroup, ToolbarGroupProps, ToolbarInput, ToolbarInputProps, ToolbarLink, ToolbarLinkProps, ToolbarLinkVariant, ToolbarProps, ToolbarSeparator, ToolbarSeparatorProps, ToolbarVariant };
38
+ export declare function ToolbarInput({ className, ...props }: RefinedToolbarInputProps): import("react").JSX.Element;
39
+ //#endregion
@@ -1,17 +1,28 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { jsx } from "react/jsx-runtime";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Toolbar as Toolbar$1 } from "@base-ui/react/toolbar";
5
5
  //#region src/ui/toolbar.tsx
6
- function Toolbar({ orientation = "horizontal", variant = "default", className, ...props }) {
7
- return /* @__PURE__ */ jsx(Toolbar$1.Root, {
6
+ function Toolbar({ orientation = "horizontal", variant = "default", className, children, ...props }) {
7
+ return /* @__PURE__ */ jsxs(Toolbar$1.Root, {
8
8
  orientation,
9
9
  "data-control-ui": "toolbar",
10
10
  "data-control-family": "toolbar",
11
11
  "data-slot": "root",
12
12
  "data-variant": variant,
13
13
  className: cn("group/toolbar inline-flex", orientation === "vertical" ? "flex-col items-stretch" : "items-center", className),
14
- ...props
14
+ ...props,
15
+ children: [variant === "floating" && /* @__PURE__ */ jsx("div", {
16
+ "aria-hidden": "true",
17
+ "data-control-ui": "toolbar",
18
+ "data-control-family": "popup",
19
+ "data-popup-kind": "toolbar",
20
+ "data-popup-part": "surface",
21
+ "data-popup-static": "",
22
+ "data-surface": "floating",
23
+ "data-slot": "surface",
24
+ className: "pointer-events-none absolute inset-0 -z-1"
25
+ }), children]
15
26
  });
16
27
  }
17
28
  function ToolbarButton({ iconOnly = false, className, ...props }) {
@@ -2,26 +2,19 @@ import { PopupKnobStyle } from "../knob-contracts/popup-knobs.js";
2
2
  import { CSSProperties, ComponentProps, Ref } from "react";
3
3
  import { Tooltip as Tooltip$1, TooltipPopupProps, TooltipPositionerProps } from "@base-ui/react/tooltip";
4
4
  //#region src/ui/tooltip.d.ts
5
- type TooltipProviderProps = Omit<ComponentProps<typeof Tooltip$1.Provider>, "delay" | "timeout"> & {
6
- delay?: number;
7
- timeout?: number;
8
- delayDuration?: number;
9
- skipDelayDuration?: number;
10
- };
11
- declare function TooltipProvider({ delay, delayDuration, timeout, skipDelayDuration, ...props }: TooltipProviderProps): import("react").JSX.Element;
12
- declare function Tooltip(props: ComponentProps<typeof Tooltip$1.Root>): import("react").JSX.Element;
5
+ export declare function TooltipProvider({ delay, ...props }: ComponentProps<typeof Tooltip$1.Provider>): import("react").JSX.Element;
6
+ export declare function Tooltip(props: ComponentProps<typeof Tooltip$1.Root>): import("react").JSX.Element;
13
7
  type TooltipTriggerProps = ComponentProps<typeof Tooltip$1.Trigger> & {
14
8
  ref?: Ref<HTMLButtonElement>;
15
9
  };
16
- declare function TooltipTrigger({ render, children, ref, ...props }: TooltipTriggerProps): import("react").JSX.Element;
10
+ export declare function TooltipTrigger({ render, children, ref, ...props }: TooltipTriggerProps): import("react").JSX.Element;
17
11
  type TooltipContentPositionerProps = Omit<TooltipPositionerProps, keyof TooltipPopupProps>;
18
- type TooltipContentProps = Omit<TooltipPopupProps & Omit<TooltipContentPositionerProps, "style">, "style"> & {
12
+ export type TooltipContentProps = Omit<TooltipPopupProps & Omit<TooltipContentPositionerProps, "style">, "style"> & {
19
13
  style?: CSSProperties & PopupKnobStyle;
20
14
  } & {
21
15
  arrow?: boolean;
22
16
  hidden?: boolean;
23
17
  ref?: Ref<HTMLDivElement>;
24
18
  };
25
- declare function TooltipContent({ className, children, side, sideOffset, align, alignOffset, arrowPadding, anchor, positionMethod, collisionBoundary, collisionPadding, sticky, disableAnchorTracking, collisionAvoidance, arrow, hidden, ref, ...props }: TooltipContentProps): import("react").JSX.Element | null;
26
- //#endregion
27
- export { Tooltip, TooltipContent, TooltipContentProps, TooltipProvider, TooltipTrigger };
19
+ export declare function TooltipContent({ className, children, side, sideOffset, align, alignOffset, arrowPadding, anchor, positionMethod, collisionBoundary, collisionPadding, sticky, disableAnchorTracking, collisionAvoidance, arrow, hidden, ref, ...props }: TooltipContentProps): import("react").JSX.Element | null;
20
+ //#endregion
@@ -1,15 +1,13 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { skinEffects, skinId } from "../skin.js";
3
+ import { controlEffectsAttribute } from "../skin.js";
4
+ import { useSkin } from "../skin-provider.js";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
6
7
  //#region src/ui/tooltip.tsx
7
- function TooltipProvider({ delay, delayDuration, timeout, skipDelayDuration, ...props }) {
8
- const resolvedDelay = delay ?? delayDuration;
9
- const resolvedTimeout = timeout ?? skipDelayDuration;
8
+ function TooltipProvider({ delay = 500, ...props }) {
10
9
  return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
11
- ...resolvedDelay !== void 0 ? { delay: resolvedDelay } : {},
12
- ...resolvedTimeout !== void 0 ? { timeout: resolvedTimeout } : {},
10
+ delay,
13
11
  ...props
14
12
  });
15
13
  }
@@ -25,6 +23,7 @@ function TooltipTrigger({ render, children, ref, ...props }) {
25
23
  });
26
24
  }
27
25
  function TooltipContent({ className, children, side = "top", sideOffset = 8, align = "center", alignOffset = 0, arrowPadding = 10, anchor, positionMethod, collisionBoundary, collisionPadding, sticky, disableAnchorTracking, collisionAvoidance, arrow = true, hidden = false, ref, ...props }) {
26
+ const skin = useSkin();
28
27
  if (hidden) return null;
29
28
  const positionerProps = {
30
29
  side,
@@ -45,8 +44,8 @@ function TooltipContent({ className, children, side = "top", sideOffset = 8, ali
45
44
  "data-popup-kind": "tooltip",
46
45
  "data-control-family": "popup",
47
46
  "data-slot": "positioner",
48
- "data-skin": skinId(),
49
- "data-effects": skinEffects(),
47
+ "data-skin": skin.id,
48
+ "data-effects": controlEffectsAttribute(skin.effects),
50
49
  className: "z-[90]",
51
50
  ...positionerProps,
52
51
  children: /* @__PURE__ */ jsxs(Tooltip$1.Popup, {
package/dist/ui/tree.d.ts CHANGED
@@ -2,19 +2,19 @@ import { RenderProp, SelectionIndicator } from "../control-props.js";
2
2
  import { TreeKnobStyle } from "../knob-contracts/tree-knobs.js";
3
3
  import { CSSProperties, ComponentProps, ReactNode } from "react";
4
4
  //#region src/ui/tree.d.ts
5
- type TreeSelectionMode = "none" | "single" | "multiple";
6
- type TreeInteractionReason = "pointer" | "keyboard" | "imperative";
7
- type TreeSelectionChangeDetails = {
5
+ export type TreeSelectionMode = "none" | "single" | "multiple";
6
+ export type TreeInteractionReason = "pointer" | "keyboard" | "imperative";
7
+ export type TreeSelectionChangeDetails = {
8
8
  value: string;
9
9
  reason: TreeInteractionReason;
10
10
  };
11
- type TreeExpandedChangeDetails = {
11
+ export type TreeExpandedChangeDetails = {
12
12
  value: string;
13
13
  expanded: boolean;
14
14
  reason: TreeInteractionReason;
15
15
  };
16
- type TreeSelectionIndicator = SelectionIndicator;
17
- type TreeProps = Omit<Omit<ComponentProps<"ul">, "onChange" | "defaultValue">, "style"> & {
16
+ export type TreeSelectionIndicator = SelectionIndicator;
17
+ export type TreeProps = Omit<Omit<ComponentProps<"ul">, "onChange" | "defaultValue">, "style"> & {
18
18
  style?: CSSProperties & TreeKnobStyle;
19
19
  } & {
20
20
  selectionMode?: TreeSelectionMode;
@@ -26,31 +26,30 @@ type TreeProps = Omit<Omit<ComponentProps<"ul">, "onChange" | "defaultValue">, "
26
26
  onExpandedChange?: (expanded: string[], details: TreeExpandedChangeDetails) => void;
27
27
  indicator?: TreeSelectionIndicator;
28
28
  };
29
- type TreeItemProps = Omit<ComponentProps<"li">, "value"> & {
29
+ export type TreeItemProps = Omit<ComponentProps<"li">, "value"> & {
30
30
  value: string;
31
31
  disabled?: boolean;
32
32
  label?: string;
33
33
  children?: ReactNode;
34
34
  };
35
- type TreeItemTriggerProps = Omit<ComponentProps<"div">, "style"> & {
35
+ export type TreeItemTriggerProps = Omit<ComponentProps<"div">, "style"> & {
36
36
  style?: CSSProperties & TreeKnobStyle;
37
37
  } & {
38
38
  render?: RenderProp<ComponentProps<"div">>;
39
39
  };
40
- type TreeItemIndicatorProps = Omit<ComponentProps<"span">, "style"> & {
40
+ export type TreeItemIndicatorProps = Omit<ComponentProps<"span">, "style"> & {
41
41
  style?: CSSProperties & TreeKnobStyle;
42
42
  };
43
- type TreeItemLabelProps = ComponentProps<"span"> & {
43
+ export type TreeItemLabelProps = ComponentProps<"span"> & {
44
44
  render?: RenderProp<ComponentProps<"span">>;
45
45
  };
46
- type TreeItemContentProps = ComponentProps<"div"> & {
46
+ export type TreeItemContentProps = ComponentProps<"div"> & {
47
47
  style?: CSSProperties & TreeKnobStyle;
48
48
  };
49
- declare function Tree({ selectionMode, indicator, value, defaultValue, onValueChange, expandedValue, defaultExpandedValue, onExpandedChange, className, style, children, onKeyDown, onFocusCapture, ...props }: TreeProps): import("react").JSX.Element;
50
- declare function TreeItem({ value, disabled, label, className, style, children, ref, ...props }: TreeItemProps): import("react").JSX.Element;
51
- declare function TreeItemTrigger({ className, children, onClick, render, ...props }: TreeItemTriggerProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
52
- declare function TreeItemIndicator({ className, children, ...props }: TreeItemIndicatorProps): import("react").JSX.Element;
53
- declare function TreeItemLabel({ className, children, render, ref, ...props }: TreeItemLabelProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
54
- declare function TreeItemContent({ className, children, ...props }: TreeItemContentProps): import("react").JSX.Element;
55
- //#endregion
56
- export { Tree, TreeExpandedChangeDetails, TreeInteractionReason, TreeItem, TreeItemContent, TreeItemContentProps, TreeItemIndicator, TreeItemIndicatorProps, TreeItemLabel, TreeItemLabelProps, TreeItemProps, TreeItemTrigger, TreeItemTriggerProps, TreeProps, TreeSelectionChangeDetails, TreeSelectionIndicator, TreeSelectionMode };
49
+ export declare function Tree({ selectionMode, indicator, value, defaultValue, onValueChange, expandedValue, defaultExpandedValue, onExpandedChange, className, style, children, onKeyDown, onFocusCapture, ...props }: TreeProps): import("react").JSX.Element;
50
+ export declare function TreeItem({ value, disabled, label, className, style, children, ref, ...props }: TreeItemProps): import("react").JSX.Element;
51
+ export declare function TreeItemTrigger({ className, children, onClick, render, ...props }: TreeItemTriggerProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
52
+ export declare function TreeItemIndicator({ className, children, ...props }: TreeItemIndicatorProps): import("react").JSX.Element;
53
+ export declare function TreeItemLabel({ className, children, render, ref, ...props }: TreeItemLabelProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
54
+ export declare function TreeItemContent({ className, children, ...props }: TreeItemContentProps): import("react").JSX.Element;
55
+ //#endregion
package/dist/ui/tree.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { skinIndicator } from "../skin.js";
3
+ import { useSkin } from "../skin-provider.js";
4
4
  import { TrackHighlight } from "../extensions/track-highlight.js";
5
5
  import { Children, createContext, isValidElement, useContext, useRef, useState } from "react";
6
6
  import { useRender } from "@base-ui/react/use-render";
@@ -128,6 +128,7 @@ function handleTreeKeyDown(event, ctx, typeahead) {
128
128
  }
129
129
  }
130
130
  function Tree({ selectionMode = "single", indicator, value, defaultValue, onValueChange, expandedValue, defaultExpandedValue, onExpandedChange, className, style, children, onKeyDown, onFocusCapture, ...props }) {
131
+ const skin = useSkin();
131
132
  const [selectedState, setSelectedState] = useState(() => new Set(defaultValue));
132
133
  const [expandedState, setExpandedState] = useState(() => new Set(defaultExpandedValue));
133
134
  const [focusedValue, setFocusedValue] = useState(null);
@@ -194,7 +195,7 @@ function Tree({ selectionMode = "single", indicator, value, defaultValue, onValu
194
195
  reason
195
196
  });
196
197
  };
197
- const resolvedIndicator = indicator ?? skinIndicator("tree") ?? "none";
198
+ const resolvedIndicator = indicator ?? skin.indicators?.tree ?? "none";
198
199
  const contextValue = {
199
200
  selectionMode,
200
201
  indicator: resolvedIndicator,
@@ -2,7 +2,7 @@ import { OpenChangeEventDetails } from "../control-props.js";
2
2
  import { PopupKnobStyle } from "../knob-contracts/popup-knobs.js";
3
3
  import { CSSProperties, ComponentProps, ReactNode } from "react";
4
4
  //#region src/ui/trigger-menu.d.ts
5
- type TriggerMenuProps = {
5
+ export type TriggerMenuProps = {
6
6
  open: boolean;
7
7
  onOpenChange?: (open: boolean, eventDetails: OpenChangeEventDetails) => void;
8
8
  anchorRect: DOMRect | null;
@@ -14,33 +14,32 @@ type TriggerMenuProps = {
14
14
  } & {
15
15
  style?: CSSProperties & PopupKnobStyle;
16
16
  };
17
- type TriggerMenuListProps = ComponentProps<"div"> & {
17
+ export type TriggerMenuListProps = ComponentProps<"div"> & {
18
18
  style?: CSSProperties & PopupKnobStyle;
19
19
  };
20
- type TriggerMenuItemProps = Omit<Omit<ComponentProps<"div">, "onSelect"> & {
20
+ export type TriggerMenuItemProps = Omit<Omit<ComponentProps<"div">, "onSelect"> & {
21
21
  active?: boolean;
22
22
  disabled?: boolean;
23
23
  }, "style"> & {
24
24
  style?: CSSProperties & PopupKnobStyle;
25
25
  };
26
- type TriggerMenuEmptyProps = Omit<ComponentProps<"div">, "style"> & {
26
+ export type TriggerMenuEmptyProps = Omit<ComponentProps<"div">, "style"> & {
27
27
  style?: CSSProperties & PopupKnobStyle;
28
28
  };
29
- type TriggerMenuGroupProps = ComponentProps<"div"> & {
29
+ export type TriggerMenuGroupProps = ComponentProps<"div"> & {
30
30
  style?: CSSProperties & PopupKnobStyle;
31
31
  };
32
- type TriggerMenuGroupLabelProps = Omit<ComponentProps<"div">, "style"> & {
32
+ export type TriggerMenuGroupLabelProps = Omit<ComponentProps<"div">, "style"> & {
33
33
  style?: CSSProperties & PopupKnobStyle;
34
34
  };
35
- type TriggerMenuIconProps = Omit<ComponentProps<"span">, "style"> & {
35
+ export type TriggerMenuIconProps = Omit<ComponentProps<"span">, "style"> & {
36
36
  style?: CSSProperties & PopupKnobStyle;
37
37
  };
38
- declare function TriggerMenu({ open, onOpenChange, anchorRect, side, align, sideOffset, className, children }: TriggerMenuProps): import("react").JSX.Element;
39
- declare function TriggerMenuList({ className, ...props }: TriggerMenuListProps): import("react").JSX.Element;
40
- declare function TriggerMenuItem({ className, active, disabled, onMouseDown, ...props }: TriggerMenuItemProps): import("react").JSX.Element;
41
- declare function TriggerMenuIcon({ className, ...props }: TriggerMenuIconProps): import("react").JSX.Element;
42
- declare function TriggerMenuEmpty({ className, ...props }: TriggerMenuEmptyProps): import("react").JSX.Element;
43
- declare function TriggerMenuGroup({ className, ...props }: TriggerMenuGroupProps): import("react").JSX.Element;
44
- declare function TriggerMenuGroupLabel({ className, ...props }: TriggerMenuGroupLabelProps): import("react").JSX.Element;
45
- //#endregion
46
- export { TriggerMenu, TriggerMenuEmpty, TriggerMenuEmptyProps, TriggerMenuGroup, TriggerMenuGroupLabel, TriggerMenuGroupLabelProps, TriggerMenuGroupProps, TriggerMenuIcon, TriggerMenuIconProps, TriggerMenuItem, TriggerMenuItemProps, TriggerMenuList, TriggerMenuListProps, TriggerMenuProps };
38
+ export declare function TriggerMenu({ open, onOpenChange, anchorRect, side, align, sideOffset, className, children }: TriggerMenuProps): import("react").JSX.Element;
39
+ export declare function TriggerMenuList({ className, ...props }: TriggerMenuListProps): import("react").JSX.Element;
40
+ export declare function TriggerMenuItem({ className, active, disabled, onMouseDown, ...props }: TriggerMenuItemProps): import("react").JSX.Element;
41
+ export declare function TriggerMenuIcon({ className, ...props }: TriggerMenuIconProps): import("react").JSX.Element;
42
+ export declare function TriggerMenuEmpty({ className, ...props }: TriggerMenuEmptyProps): import("react").JSX.Element;
43
+ export declare function TriggerMenuGroup({ className, ...props }: TriggerMenuGroupProps): import("react").JSX.Element;
44
+ export declare function TriggerMenuGroupLabel({ className, ...props }: TriggerMenuGroupLabelProps): import("react").JSX.Element;
45
+ //#endregion
@@ -1,11 +1,13 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { skinEffects, skinId } from "../skin.js";
3
+ import { controlEffectsAttribute } from "../skin.js";
4
+ import { useSkin } from "../skin-provider.js";
4
5
  import { popupItemStructureClasses } from "../surface-variants.js";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
  import { Popover } from "@base-ui/react/popover";
7
8
  //#region src/ui/trigger-menu.tsx
8
9
  function TriggerMenu({ open, onOpenChange, anchorRect, side = "top", align = "start", sideOffset = 8, className, children }) {
10
+ const skin = useSkin();
9
11
  return /* @__PURE__ */ jsx(Popover.Root, {
10
12
  open,
11
13
  onOpenChange: (next, eventDetails) => onOpenChange?.(next, eventDetails),
@@ -15,8 +17,8 @@ function TriggerMenu({ open, onOpenChange, anchorRect, side = "top", align = "st
15
17
  "data-popup-kind": "trigger-menu",
16
18
  "data-control-family": "popup",
17
19
  "data-slot": "positioner",
18
- "data-skin": skinId(),
19
- "data-effects": skinEffects(),
20
+ "data-skin": skin.id,
21
+ "data-effects": controlEffectsAttribute(skin.effects),
20
22
  anchor: anchorRect === null ? void 0 : () => ({ getBoundingClientRect: () => anchorRect }),
21
23
  side,
22
24
  align,
@@ -0,0 +1,7 @@
1
+ //#region src/ui/use-switch-drag.d.ts
2
+ export declare function useSwitchDrag(): {
3
+ thumbRef: import("react").RefObject<HTMLSpanElement | null>;
4
+ dragProps: Pick<import("@base-ui/react").SwitchRootProps, "onClick" | "onKeyDown" | "onLostPointerCapture" | "onPointerCancel" | "onPointerDown" | "onPointerMove" | "onPointerUp">;
5
+ dragProgress: number | null;
6
+ };
7
+ //#endregion
@@ -0,0 +1,104 @@
1
+ "use client";
2
+ import { useRef, useState } from "react";
3
+ //#region src/ui/use-switch-drag.ts
4
+ const dragThresholdPx = 3;
5
+ function switchDragProgress(gesture, clientX) {
6
+ const deltaX = (clientX - gesture.startX) * gesture.direction;
7
+ return Math.max(0, Math.min(1, gesture.startProgress + deltaX / gesture.travel));
8
+ }
9
+ function isSwitchLocked(root) {
10
+ return root.hasAttribute("data-disabled") || root.hasAttribute("data-readonly");
11
+ }
12
+ function useSwitchDrag() {
13
+ const thumbRef = useRef(null);
14
+ const [dragProgress, setDragProgress] = useState(null);
15
+ const gestureRef = useRef(null);
16
+ function cancelDrag(gesture) {
17
+ gesture.canceled = true;
18
+ setDragProgress(null);
19
+ }
20
+ return {
21
+ thumbRef,
22
+ dragProps: {
23
+ onPointerDown(event) {
24
+ const root = event.currentTarget;
25
+ if (!(event.isPrimary && event.button === 0 && !isSwitchLocked(root)) || !thumbRef.current) return;
26
+ setDragProgress(null);
27
+ const styles = getComputedStyle(root);
28
+ const travel = root.clientWidth - Number.parseFloat(styles.paddingLeft) - Number.parseFloat(styles.paddingRight) - thumbRef.current.offsetWidth;
29
+ if (travel <= 0) return;
30
+ const progress = root.hasAttribute("data-checked") ? 1 : 0;
31
+ gestureRef.current = {
32
+ pointerId: event.pointerId,
33
+ startX: event.clientX,
34
+ startY: event.clientY,
35
+ startProgress: progress,
36
+ travel,
37
+ direction: styles.direction === "rtl" ? -1 : 1,
38
+ dragged: false,
39
+ released: false,
40
+ canceled: false
41
+ };
42
+ root.setPointerCapture(event.pointerId);
43
+ },
44
+ onPointerMove(event) {
45
+ const gesture = gestureRef.current;
46
+ if (!gesture || gesture.pointerId !== event.pointerId || gesture.released) return;
47
+ const root = event.currentTarget;
48
+ if (gesture.canceled || isSwitchLocked(root)) {
49
+ cancelDrag(gesture);
50
+ return;
51
+ }
52
+ const deltaX = event.clientX - gesture.startX;
53
+ const deltaY = event.clientY - gesture.startY;
54
+ if (!gesture.dragged) {
55
+ if (Math.abs(deltaY) > Math.max(dragThresholdPx, Math.abs(deltaX))) {
56
+ cancelDrag(gesture);
57
+ return;
58
+ }
59
+ if (Math.abs(deltaX) < dragThresholdPx) return;
60
+ gesture.dragged = true;
61
+ }
62
+ setDragProgress(switchDragProgress(gesture, event.clientX));
63
+ },
64
+ onPointerUp(event) {
65
+ const gesture = gestureRef.current;
66
+ if (!gesture || gesture.pointerId !== event.pointerId) return;
67
+ gesture.released = true;
68
+ setDragProgress(null);
69
+ if (!gesture.dragged || gesture.canceled) return;
70
+ const root = event.currentTarget;
71
+ const shouldToggle = switchDragProgress(gesture, event.clientX) >= .5 !== root.hasAttribute("data-checked") && !isSwitchLocked(root);
72
+ gesture.canceled = true;
73
+ if (shouldToggle) root.click();
74
+ },
75
+ onPointerCancel(event) {
76
+ const gesture = gestureRef.current;
77
+ if (!gesture || gesture.pointerId !== event.pointerId) return;
78
+ cancelDrag(gesture);
79
+ },
80
+ onLostPointerCapture(event) {
81
+ const gesture = gestureRef.current;
82
+ if (!gesture || gesture.pointerId !== event.pointerId || gesture.released) return;
83
+ cancelDrag(gesture);
84
+ },
85
+ onKeyDown(event) {
86
+ if (event.key !== "Escape" || !gestureRef.current) return;
87
+ cancelDrag(gestureRef.current);
88
+ },
89
+ onClick(event) {
90
+ if (event.detail === 0) return;
91
+ const gesture = gestureRef.current;
92
+ gestureRef.current = null;
93
+ if (gesture?.canceled) {
94
+ event.preventDefault();
95
+ event.stopPropagation();
96
+ event.preventBaseUIHandler();
97
+ }
98
+ }
99
+ },
100
+ dragProgress
101
+ };
102
+ }
103
+ //#endregion
104
+ export { useSwitchDrag };