@bettercms-ai/kit 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (947) hide show
  1. package/_virtual/_rolldown/runtime.js +13 -0
  2. package/adapters/icons.d.ts +15 -0
  3. package/adapters/icons.js +27 -0
  4. package/adapters/icons.js.map +1 -0
  5. package/adapters/lossy.d.ts +267 -0
  6. package/adapters/lossy.js +233 -0
  7. package/adapters/lossy.js.map +1 -0
  8. package/adapters/prod-types.d.ts +468 -0
  9. package/adapters/prod-types.js +646 -0
  10. package/adapters/prod-types.js.map +1 -0
  11. package/adapters/schema.d.ts +115 -0
  12. package/adapters/schema.js +2203 -0
  13. package/adapters/schema.js.map +1 -0
  14. package/adapters/values.d.ts +200 -0
  15. package/adapters/values.js +553 -0
  16. package/adapters/values.js.map +1 -0
  17. package/brand/logo.d.ts +17 -0
  18. package/brand/logo.js +9 -0
  19. package/brand/logo.js.map +1 -0
  20. package/context.d.ts +269 -0
  21. package/context.js +214 -0
  22. package/context.js.map +1 -0
  23. package/controls/button.d.ts +58 -0
  24. package/controls/button.js +507 -0
  25. package/controls/button.js.map +1 -0
  26. package/controls/c1.d.ts +11 -0
  27. package/controls/c1.js +24 -0
  28. package/controls/c1.js.map +1 -0
  29. package/controls/c2.d.ts +10 -0
  30. package/controls/c2.js +19 -0
  31. package/controls/c2.js.map +1 -0
  32. package/controls/choice.d.ts +39 -0
  33. package/controls/choice.js +410 -0
  34. package/controls/choice.js.map +1 -0
  35. package/controls/code-register.d.ts +1 -0
  36. package/controls/code-register.js +8 -0
  37. package/controls/code-register.js.map +1 -0
  38. package/controls/code.d.ts +42 -0
  39. package/controls/code.js +396 -0
  40. package/controls/code.js.map +1 -0
  41. package/controls/color.d.ts +5 -0
  42. package/controls/color.js +130 -0
  43. package/controls/color.js.map +1 -0
  44. package/controls/component-services.d.ts +114 -0
  45. package/controls/date-register.d.ts +1 -0
  46. package/controls/date-register.js +9 -0
  47. package/controls/date-register.js.map +1 -0
  48. package/controls/date-zone.d.ts +104 -0
  49. package/controls/date-zone.js +272 -0
  50. package/controls/date-zone.js.map +1 -0
  51. package/controls/date.d.ts +7 -0
  52. package/controls/date.js +458 -0
  53. package/controls/date.js.map +1 -0
  54. package/controls/form-picker-register.d.ts +1 -0
  55. package/controls/form-picker-register.js +19 -0
  56. package/controls/form-picker-register.js.map +1 -0
  57. package/controls/form-picker.d.ts +43 -0
  58. package/controls/form-picker.js +83 -0
  59. package/controls/form-picker.js.map +1 -0
  60. package/controls/icon-register.d.ts +1 -0
  61. package/controls/icon-register.js +8 -0
  62. package/controls/icon-register.js.map +1 -0
  63. package/controls/icon.d.ts +38 -0
  64. package/controls/icon.js +355 -0
  65. package/controls/icon.js.map +1 -0
  66. package/controls/index.d.ts +5 -0
  67. package/controls/index.js +37 -0
  68. package/controls/index.js.map +1 -0
  69. package/controls/json-register.d.ts +1 -0
  70. package/controls/json-register.js +8 -0
  71. package/controls/json-register.js.map +1 -0
  72. package/controls/json.d.ts +2 -0
  73. package/controls/json.js +72 -0
  74. package/controls/json.js.map +1 -0
  75. package/controls/link.d.ts +260 -0
  76. package/controls/link.js +1186 -0
  77. package/controls/link.js.map +1 -0
  78. package/controls/location-register.d.ts +1 -0
  79. package/controls/location-register.js +8 -0
  80. package/controls/location-register.js.map +1 -0
  81. package/controls/location.d.ts +16 -0
  82. package/controls/location.js +197 -0
  83. package/controls/location.js.map +1 -0
  84. package/controls/media-register.d.ts +1 -0
  85. package/controls/media-register.js +12 -0
  86. package/controls/media-register.js.map +1 -0
  87. package/controls/media-services.d.ts +40 -0
  88. package/controls/media.d.ts +73 -0
  89. package/controls/media.js +1076 -0
  90. package/controls/media.js.map +1 -0
  91. package/controls/number.d.ts +22 -0
  92. package/controls/number.js +195 -0
  93. package/controls/number.js.map +1 -0
  94. package/controls/reference-register.d.ts +1 -0
  95. package/controls/reference-register.js +10 -0
  96. package/controls/reference-register.js.map +1 -0
  97. package/controls/reference-services.d.ts +54 -0
  98. package/controls/reference.d.ts +23 -0
  99. package/controls/reference.js +761 -0
  100. package/controls/reference.js.map +1 -0
  101. package/controls/rich-text/blocks.d.ts +28 -0
  102. package/controls/rich-text/blocks.js +1532 -0
  103. package/controls/rich-text/blocks.js.map +1 -0
  104. package/controls/rich-text/catalog.d.ts +98 -0
  105. package/controls/rich-text/catalog.js +613 -0
  106. package/controls/rich-text/catalog.js.map +1 -0
  107. package/controls/rich-text/codec.d.ts +56 -0
  108. package/controls/rich-text/codec.js +32 -0
  109. package/controls/rich-text/codec.js.map +1 -0
  110. package/controls/rich-text/component-card.d.ts +14 -0
  111. package/controls/rich-text/component-card.js +706 -0
  112. package/controls/rich-text/component-card.js.map +1 -0
  113. package/controls/rich-text/control.d.ts +21 -0
  114. package/controls/rich-text/control.js +254 -0
  115. package/controls/rich-text/control.js.map +1 -0
  116. package/controls/rich-text/dom.d.ts +190 -0
  117. package/controls/rich-text/dom.js +690 -0
  118. package/controls/rich-text/dom.js.map +1 -0
  119. package/controls/rich-text/editor.d.ts +50 -0
  120. package/controls/rich-text/editor.js +1530 -0
  121. package/controls/rich-text/editor.js.map +1 -0
  122. package/controls/rich-text/floating.d.ts +23 -0
  123. package/controls/rich-text/floating.js +137 -0
  124. package/controls/rich-text/floating.js.map +1 -0
  125. package/controls/rich-text/index.d.ts +1 -0
  126. package/controls/rich-text/index.js +12 -0
  127. package/controls/rich-text/index.js.map +1 -0
  128. package/controls/rich-text/link-form.d.ts +13 -0
  129. package/controls/rich-text/link-form.js +111 -0
  130. package/controls/rich-text/link-form.js.map +1 -0
  131. package/controls/rich-text/markdown.d.ts +6 -0
  132. package/controls/rich-text/markdown.js +179 -0
  133. package/controls/rich-text/markdown.js.map +1 -0
  134. package/controls/rich-text/ops.d.ts +35 -0
  135. package/controls/rich-text/ops.js +314 -0
  136. package/controls/rich-text/ops.js.map +1 -0
  137. package/controls/rich-text/toolbar.d.ts +85 -0
  138. package/controls/rich-text/toolbar.js +338 -0
  139. package/controls/rich-text/toolbar.js.map +1 -0
  140. package/controls/scale.d.ts +56 -0
  141. package/controls/scale.js +563 -0
  142. package/controls/scale.js.map +1 -0
  143. package/controls/slot-register.d.ts +1 -0
  144. package/controls/slot-register.js +16 -0
  145. package/controls/slot-register.js.map +1 -0
  146. package/controls/slot-services.d.ts +97 -0
  147. package/controls/slot-services.js +38 -0
  148. package/controls/slot-services.js.map +1 -0
  149. package/controls/slot.d.ts +33 -0
  150. package/controls/slot.js +348 -0
  151. package/controls/slot.js.map +1 -0
  152. package/controls/table/index.d.ts +1 -0
  153. package/controls/table/index.js +12 -0
  154. package/controls/table/index.js.map +1 -0
  155. package/controls/table/prod.d.ts +21 -0
  156. package/controls/table/prod.js +79 -0
  157. package/controls/table/prod.js.map +1 -0
  158. package/controls/table/refs.d.ts +50 -0
  159. package/controls/table/refs.js +68 -0
  160. package/controls/table/refs.js.map +1 -0
  161. package/controls/table/stored.d.ts +15 -0
  162. package/controls/table/stored.js +44 -0
  163. package/controls/table/stored.js.map +1 -0
  164. package/controls/table/table-editor.d.ts +103 -0
  165. package/controls/table/table-editor.js +2722 -0
  166. package/controls/table/table-editor.js.map +1 -0
  167. package/controls/table/table-link.d.ts +24 -0
  168. package/controls/table/table-link.js +180 -0
  169. package/controls/table/table-link.js.map +1 -0
  170. package/controls/table/table.d.ts +9 -0
  171. package/controls/table/table.js +103 -0
  172. package/controls/table/table.js.map +1 -0
  173. package/controls/text.d.ts +17 -0
  174. package/controls/text.js +287 -0
  175. package/controls/text.js.map +1 -0
  176. package/engine/array.d.ts +101 -0
  177. package/engine/array.js +893 -0
  178. package/engine/array.js.map +1 -0
  179. package/engine/bits.d.ts +24 -0
  180. package/engine/bits.js +60 -0
  181. package/engine/bits.js.map +1 -0
  182. package/engine/breadcrumb.d.ts +45 -0
  183. package/engine/breadcrumb.js +87 -0
  184. package/engine/breadcrumb.js.map +1 -0
  185. package/engine/expand.d.ts +68 -0
  186. package/engine/expand.js +170 -0
  187. package/engine/expand.js.map +1 -0
  188. package/engine/field-list.d.ts +20 -0
  189. package/engine/field-list.js +19 -0
  190. package/engine/field-list.js.map +1 -0
  191. package/engine/field-shell.d.ts +49 -0
  192. package/engine/field-shell.js +860 -0
  193. package/engine/field-shell.js.map +1 -0
  194. package/engine/frame.d.ts +120 -0
  195. package/engine/frame.js +599 -0
  196. package/engine/frame.js.map +1 -0
  197. package/engine/group-summary.d.ts +4 -0
  198. package/engine/group-summary.js +66 -0
  199. package/engine/group-summary.js.map +1 -0
  200. package/engine/grouping.d.ts +224 -0
  201. package/engine/grouping.js +824 -0
  202. package/engine/grouping.js.map +1 -0
  203. package/engine/item-list.d.ts +89 -0
  204. package/engine/item-list.js +703 -0
  205. package/engine/item-list.js.map +1 -0
  206. package/engine/kit-field.d.ts +72 -0
  207. package/engine/kit-field.js +523 -0
  208. package/engine/kit-field.js.map +1 -0
  209. package/engine/schema-form.d.ts +91 -0
  210. package/engine/schema-form.js +320 -0
  211. package/engine/schema-form.js.map +1 -0
  212. package/engine/slot.d.ts +13 -0
  213. package/engine/slot.js +226 -0
  214. package/engine/slot.js.map +1 -0
  215. package/index.d.ts +46 -0
  216. package/index.js +55 -0
  217. package/index.js.map +1 -0
  218. package/kit.css +56 -0
  219. package/lib/cn.d.ts +4 -0
  220. package/lib/cn.js +53 -0
  221. package/lib/cn.js.map +1 -0
  222. package/lib/columns.d.ts +14 -0
  223. package/lib/columns.js +27 -0
  224. package/lib/columns.js.map +1 -0
  225. package/lib/frames.d.ts +36 -0
  226. package/lib/frames.js +214 -0
  227. package/lib/frames.js.map +1 -0
  228. package/lib/icons.d.ts +16 -0
  229. package/lib/icons.js +172 -0
  230. package/lib/icons.js.map +1 -0
  231. package/lib/path.d.ts +29 -0
  232. package/lib/path.js +64 -0
  233. package/lib/path.js.map +1 -0
  234. package/lib/schema.d.ts +49 -0
  235. package/lib/schema.js +287 -0
  236. package/lib/schema.js.map +1 -0
  237. package/lib/utils.d.ts +7 -0
  238. package/lib/utils.js +37 -0
  239. package/lib/utils.js.map +1 -0
  240. package/lib/validate.d.ts +20 -0
  241. package/lib/validate.js +150 -0
  242. package/lib/validate.js.map +1 -0
  243. package/package.json +31 -59
  244. package/schema/adapters.d.ts +28 -0
  245. package/schema/adapters.js +493 -0
  246. package/schema/adapters.js.map +1 -0
  247. package/schema/help.d.ts +25 -0
  248. package/schema/help.js +54 -0
  249. package/schema/help.js.map +1 -0
  250. package/schema/scale.d.ts +69 -0
  251. package/schema/scale.js +250 -0
  252. package/schema/scale.js.map +1 -0
  253. package/schema/sources.d.ts +103 -0
  254. package/schema/sources.js +65 -0
  255. package/schema/sources.js.map +1 -0
  256. package/schema/table.d.ts +319 -0
  257. package/schema/table.js +1198 -0
  258. package/schema/table.js.map +1 -0
  259. package/schema/types.d.ts +269 -0
  260. package/schema/types.js +14 -0
  261. package/schema/types.js.map +1 -0
  262. package/types.d.ts +17 -0
  263. package/ui/action-tray.d.ts +54 -0
  264. package/ui/action-tray.js +153 -0
  265. package/ui/action-tray.js.map +1 -0
  266. package/ui/button.d.ts +57 -0
  267. package/ui/button.js +202 -0
  268. package/ui/button.js.map +1 -0
  269. package/ui/choice-switch.d.ts +36 -0
  270. package/ui/choice-switch.js +57 -0
  271. package/ui/choice-switch.js.map +1 -0
  272. package/ui/controls.d.ts +83 -0
  273. package/ui/controls.js +319 -0
  274. package/ui/controls.js.map +1 -0
  275. package/ui/display.d.ts +156 -0
  276. package/ui/display.js +444 -0
  277. package/ui/display.js.map +1 -0
  278. package/ui/expanded-editor-modal.d.ts +26 -0
  279. package/ui/expanded-editor-modal.js +140 -0
  280. package/ui/expanded-editor-modal.js.map +1 -0
  281. package/ui/field-context.d.ts +12 -0
  282. package/ui/field-context.js +23 -0
  283. package/ui/field-context.js.map +1 -0
  284. package/ui/floating-panel.d.ts +152 -0
  285. package/ui/floating-panel.js +912 -0
  286. package/ui/floating-panel.js.map +1 -0
  287. package/ui/index.d.ts +12 -0
  288. package/ui/index.js +13 -0
  289. package/ui/input.d.ts +78 -0
  290. package/ui/input.js +250 -0
  291. package/ui/input.js.map +1 -0
  292. package/ui/mode-bar.d.ts +31 -0
  293. package/ui/mode-bar.js +65 -0
  294. package/ui/mode-bar.js.map +1 -0
  295. package/ui/overlay.d.ts +123 -0
  296. package/ui/overlay.js +378 -0
  297. package/ui/overlay.js.map +1 -0
  298. package/ui/path-crumbs.d.ts +90 -0
  299. package/ui/path-crumbs.js +532 -0
  300. package/ui/path-crumbs.js.map +1 -0
  301. package/ui/presence.d.ts +16 -0
  302. package/ui/presence.js +65 -0
  303. package/ui/presence.js.map +1 -0
  304. package/ui/select.d.ts +66 -0
  305. package/ui/select.js +405 -0
  306. package/ui/select.js.map +1 -0
  307. package/ui/shortcut-hint.d.ts +14 -0
  308. package/ui/shortcut-hint.js +35 -0
  309. package/ui/shortcut-hint.js.map +1 -0
  310. package/ui/surfaces.d.ts +23 -0
  311. package/ui/surfaces.js +26 -0
  312. package/ui/surfaces.js.map +1 -0
  313. package/ui/tooltip-root.d.ts +12 -0
  314. package/ui/tooltip-root.js +76 -0
  315. package/ui/tooltip-root.js.map +1 -0
  316. package/ui/variants.d.ts +15 -0
  317. package/ui/variants.js +14 -0
  318. package/ui/variants.js.map +1 -0
  319. package/LICENSE +0 -21
  320. package/README.md +0 -27
  321. package/dist/_chunks-cjs/_visual-editing.js +0 -5898
  322. package/dist/_chunks-cjs/refractor.js +0 -22
  323. package/dist/_chunks-es/_visual-editing.mjs +0 -5904
  324. package/dist/_chunks-es/refractor.mjs +0 -25
  325. package/dist/_color.d.mts +0 -119
  326. package/dist/_color.d.ts +0 -119
  327. package/dist/_color.js +0 -1412
  328. package/dist/_color.mjs +0 -1411
  329. package/dist/_visual-editing.d.mts +0 -1126
  330. package/dist/_visual-editing.d.ts +0 -1126
  331. package/dist/_visual-editing.js +0 -30
  332. package/dist/_visual-editing.mjs +0 -30
  333. package/dist/index.d.mts +0 -3140
  334. package/dist/index.d.ts +0 -3140
  335. package/dist/index.js +0 -2036
  336. package/dist/index.mjs +0 -2044
  337. package/dist/theme.d.mts +0 -1506
  338. package/dist/theme.d.ts +0 -1506
  339. package/dist/theme.js +0 -4126
  340. package/dist/theme.mjs +0 -4126
  341. package/exports/_visual-editing.ts +0 -31
  342. package/exports/index.ts +0 -1
  343. package/exports/theme.ts +0 -1
  344. package/src/color/index.d.mts +0 -119
  345. package/src/color/index.mjs +0 -1411
  346. package/src/core/__workshop__/constants.ts +0 -293
  347. package/src/core/_compat.ts +0 -264
  348. package/src/core/components/autocomplete/__mocks__/apiStore.ts +0 -49
  349. package/src/core/components/autocomplete/__mocks__/countries.ts +0 -245
  350. package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
  351. package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -137
  352. package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -89
  353. package/src/core/components/autocomplete/__workshop__/example.tsx +0 -79
  354. package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
  355. package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -294
  356. package/src/core/components/autocomplete/__workshop__/index.ts +0 -39
  357. package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
  358. package/src/core/components/autocomplete/autocomplete.styles.tsx +0 -39
  359. package/src/core/components/autocomplete/autocomplete.tsx +0 -767
  360. package/src/core/components/autocomplete/autocompleteOption.tsx +0 -45
  361. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  362. package/src/core/components/autocomplete/constants.ts +0 -28
  363. package/src/core/components/autocomplete/index.ts +0 -2
  364. package/src/core/components/autocomplete/types.ts +0 -108
  365. package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -62
  366. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -14
  367. package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +0 -18
  368. package/src/core/components/breadcrumbs/breadcrumbs.test.tsx +0 -51
  369. package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -133
  370. package/src/core/components/breadcrumbs/index.ts +0 -1
  371. package/src/core/components/dialog/__workshop__/activate.tsx +0 -134
  372. package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
  373. package/src/core/components/dialog/__workshop__/index.ts +0 -19
  374. package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
  375. package/src/core/components/dialog/__workshop__/nested.tsx +0 -72
  376. package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -39
  377. package/src/core/components/dialog/__workshop__/panes.tsx +0 -82
  378. package/src/core/components/dialog/__workshop__/position.tsx +0 -30
  379. package/src/core/components/dialog/__workshop__/props.tsx +0 -75
  380. package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
  381. package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
  382. package/src/core/components/dialog/dialog.tsx +0 -430
  383. package/src/core/components/dialog/dialogContext.ts +0 -20
  384. package/src/core/components/dialog/dialogProvider.tsx +0 -35
  385. package/src/core/components/dialog/index.ts +0 -4
  386. package/src/core/components/dialog/styles.ts +0 -77
  387. package/src/core/components/dialog/useDialog.ts +0 -11
  388. package/src/core/components/hotkeys/__workshop__/index.ts +0 -14
  389. package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
  390. package/src/core/components/hotkeys/hotkeys.test.tsx +0 -42
  391. package/src/core/components/hotkeys/hotkeys.tsx +0 -66
  392. package/src/core/components/hotkeys/index.ts +0 -1
  393. package/src/core/components/index.ts +0 -9
  394. package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
  395. package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -51
  396. package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -46
  397. package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -134
  398. package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
  399. package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -39
  400. package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
  401. package/src/core/components/menu/__workshop__/groups.tsx +0 -156
  402. package/src/core/components/menu/__workshop__/index.ts +0 -89
  403. package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
  404. package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -58
  405. package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
  406. package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -41
  407. package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
  408. package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -47
  409. package/src/core/components/menu/__workshop__/tones.tsx +0 -25
  410. package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
  411. package/src/core/components/menu/helpers.ts +0 -82
  412. package/src/core/components/menu/index.ts +0 -5
  413. package/src/core/components/menu/menu.spacing.test.tsx +0 -63
  414. package/src/core/components/menu/menu.test.tsx +0 -125
  415. package/src/core/components/menu/menu.tsx +0 -178
  416. package/src/core/components/menu/menuButton.tsx +0 -268
  417. package/src/core/components/menu/menuContext.ts +0 -18
  418. package/src/core/components/menu/menuDivider.ts +0 -23
  419. package/src/core/components/menu/menuGroup.spacing.test.tsx +0 -63
  420. package/src/core/components/menu/menuGroup.tsx +0 -233
  421. package/src/core/components/menu/menuItem.spacing.test.tsx +0 -59
  422. package/src/core/components/menu/menuItem.tsx +0 -197
  423. package/src/core/components/menu/useMenu.ts +0 -21
  424. package/src/core/components/menu/useMenuController.ts +0 -231
  425. package/src/core/components/skeleton/__workshop__/delay.tsx +0 -70
  426. package/src/core/components/skeleton/__workshop__/index.ts +0 -11
  427. package/src/core/components/skeleton/__workshop__/skeleton.tsx +0 -64
  428. package/src/core/components/skeleton/index.ts +0 -2
  429. package/src/core/components/skeleton/skeleton.tsx +0 -57
  430. package/src/core/components/skeleton/styles.ts +0 -50
  431. package/src/core/components/skeleton/textSkeleton.tsx +0 -122
  432. package/src/core/components/tab/__workshop__/example.tsx +0 -79
  433. package/src/core/components/tab/__workshop__/index.ts +0 -14
  434. package/src/core/components/tab/index.ts +0 -3
  435. package/src/core/components/tab/tab.tsx +0 -101
  436. package/src/core/components/tab/tabList.test.tsx +0 -48
  437. package/src/core/components/tab/tabList.tsx +0 -70
  438. package/src/core/components/tab/tabPanel.tsx +0 -39
  439. package/src/core/components/toast/__workshop__/hook.tsx +0 -71
  440. package/src/core/components/toast/__workshop__/index.ts +0 -19
  441. package/src/core/components/toast/__workshop__/toast.tsx +0 -26
  442. package/src/core/components/toast/index.ts +0 -4
  443. package/src/core/components/toast/styles.ts +0 -77
  444. package/src/core/components/toast/toast.test.tsx +0 -101
  445. package/src/core/components/toast/toast.tsx +0 -198
  446. package/src/core/components/toast/toastContext.ts +0 -7
  447. package/src/core/components/toast/toastLayer.tsx +0 -51
  448. package/src/core/components/toast/toastProvider.tsx +0 -113
  449. package/src/core/components/toast/toastState.ts +0 -6
  450. package/src/core/components/toast/types.ts +0 -26
  451. package/src/core/components/toast/useToast.ts +0 -25
  452. package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
  453. package/src/core/components/tree/__workshop__/basic.tsx +0 -105
  454. package/src/core/components/tree/__workshop__/index.ts +0 -21
  455. package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
  456. package/src/core/components/tree/helpers.ts +0 -105
  457. package/src/core/components/tree/index.ts +0 -4
  458. package/src/core/components/tree/style.ts +0 -105
  459. package/src/core/components/tree/tree.test.tsx +0 -55
  460. package/src/core/components/tree/tree.tsx +0 -240
  461. package/src/core/components/tree/treeContext.ts +0 -10
  462. package/src/core/components/tree/treeGroup.tsx +0 -28
  463. package/src/core/components/tree/treeItem.test.tsx +0 -65
  464. package/src/core/components/tree/treeItem.tsx +0 -224
  465. package/src/core/components/tree/types.ts +0 -25
  466. package/src/core/components/tree/useTree.ts +0 -17
  467. package/src/core/constants.ts +0 -79
  468. package/src/core/helpers/animation.ts +0 -27
  469. package/src/core/helpers/element.ts +0 -55
  470. package/src/core/helpers/focus.ts +0 -100
  471. package/src/core/helpers/index.ts +0 -4
  472. package/src/core/helpers/scroll.ts +0 -15
  473. package/src/core/hooks/index.ts +0 -12
  474. package/src/core/hooks/useArrayProp.ts +0 -17
  475. package/src/core/hooks/useClickOutside.test.tsx +0 -482
  476. package/src/core/hooks/useClickOutside.ts +0 -118
  477. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -115
  478. package/src/core/hooks/useClickOutsideEvent.ts +0 -73
  479. package/src/core/hooks/useCustomValidity.ts +0 -13
  480. package/src/core/hooks/useDelayed.test.ts +0 -88
  481. package/src/core/hooks/useDelayedState.ts +0 -36
  482. package/src/core/hooks/useElementRect/__workshop__/example.tsx +0 -32
  483. package/src/core/hooks/useElementRect/__workshop__/index.ts +0 -14
  484. package/src/core/hooks/useElementRect/index.ts +0 -1
  485. package/src/core/hooks/useElementRect/useElementRect.ts +0 -13
  486. package/src/core/hooks/useElementSize.ts +0 -19
  487. package/src/core/hooks/useForwardedRef.ts +0 -19
  488. package/src/core/hooks/useGlobalKeyDown.ts +0 -24
  489. package/src/core/hooks/useIsomorphicEffect.ts +0 -7
  490. package/src/core/hooks/useMatchMedia.ts +0 -28
  491. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -14
  492. package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
  493. package/src/core/hooks/useMediaIndex/index.ts +0 -1
  494. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -36
  495. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -102
  496. package/src/core/hooks/useMounted.ts +0 -15
  497. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
  498. package/src/core/hooks/usePrefersDark.test.tsx +0 -19
  499. package/src/core/hooks/usePrefersDark.ts +0 -16
  500. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  501. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -19
  502. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  503. package/src/core/index.ts +0 -10
  504. package/src/core/lib/createGlobalScopedContext.ts +0 -36
  505. package/src/core/lib/globalScope.ts +0 -19
  506. package/src/core/lib/isRecord.ts +0 -3
  507. package/src/core/middleware/origin.ts +0 -47
  508. package/src/core/observers/elementSizeObserver.ts +0 -116
  509. package/src/core/observers/index.ts +0 -2
  510. package/src/core/observers/resizeObserver.ts +0 -9
  511. package/src/core/primitives/_selectable/index.ts +0 -1
  512. package/src/core/primitives/_selectable/selectable.tsx +0 -15
  513. package/src/core/primitives/_selectable/style.ts +0 -115
  514. package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
  515. package/src/core/primitives/avatar/__workshop__/index.ts +0 -29
  516. package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
  517. package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -63
  518. package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -70
  519. package/src/core/primitives/avatar/avatar.tsx +0 -200
  520. package/src/core/primitives/avatar/avatarCounter.tsx +0 -91
  521. package/src/core/primitives/avatar/avatarStack.tsx +0 -100
  522. package/src/core/primitives/avatar/index.ts +0 -4
  523. package/src/core/primitives/avatar/styles.ts +0 -167
  524. package/src/core/primitives/avatar/types.ts +0 -17
  525. package/src/core/primitives/badge/__workshop__/index.ts +0 -19
  526. package/src/core/primitives/badge/__workshop__/props.tsx +0 -30
  527. package/src/core/primitives/badge/__workshop__/tones.tsx +0 -21
  528. package/src/core/primitives/badge/badge.test.tsx +0 -16
  529. package/src/core/primitives/badge/badge.tsx +0 -70
  530. package/src/core/primitives/badge/index.ts +0 -1
  531. package/src/core/primitives/badge/styles.ts +0 -20
  532. package/src/core/primitives/badge/types.ts +0 -8
  533. package/src/core/primitives/box/__workshop__/asComponent.tsx +0 -31
  534. package/src/core/primitives/box/__workshop__/index.ts +0 -24
  535. package/src/core/primitives/box/__workshop__/props.tsx +0 -20
  536. package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
  537. package/src/core/primitives/box/box.test.tsx +0 -142
  538. package/src/core/primitives/box/box.tsx +0 -154
  539. package/src/core/primitives/box/index.ts +0 -1
  540. package/src/core/primitives/button/__workshop__/custom.tsx +0 -51
  541. package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
  542. package/src/core/primitives/button/__workshop__/disabled.tsx +0 -74
  543. package/src/core/primitives/button/__workshop__/index.ts +0 -59
  544. package/src/core/primitives/button/__workshop__/labelUploadButton.tsx +0 -36
  545. package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
  546. package/src/core/primitives/button/__workshop__/props.tsx +0 -55
  547. package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
  548. package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
  549. package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
  550. package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -28
  551. package/src/core/primitives/button/button.test.tsx +0 -82
  552. package/src/core/primitives/button/button.tsx +0 -210
  553. package/src/core/primitives/button/index.ts +0 -1
  554. package/src/core/primitives/button/styles.ts +0 -117
  555. package/src/core/primitives/card/__workshop__/allTones.tsx +0 -25
  556. package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
  557. package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
  558. package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
  559. package/src/core/primitives/card/__workshop__/index.ts +0 -18
  560. package/src/core/primitives/card/__workshop__/interactive.tsx +0 -30
  561. package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -80
  562. package/src/core/primitives/card/__workshop__/props.tsx +0 -53
  563. package/src/core/primitives/card/__workshop__/selected.tsx +0 -94
  564. package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
  565. package/src/core/primitives/card/card.tsx +0 -128
  566. package/src/core/primitives/card/index.ts +0 -2
  567. package/src/core/primitives/card/styles.ts +0 -147
  568. package/src/core/primitives/card/types.ts +0 -11
  569. package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
  570. package/src/core/primitives/checkbox/__workshop__/index.ts +0 -13
  571. package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -33
  572. package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
  573. package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -28
  574. package/src/core/primitives/checkbox/checkbox.tsx +0 -73
  575. package/src/core/primitives/checkbox/index.ts +0 -1
  576. package/src/core/primitives/checkbox/styles.ts +0 -128
  577. package/src/core/primitives/code/__workshop__/index.ts +0 -19
  578. package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -48
  579. package/src/core/primitives/code/__workshop__/props.tsx +0 -21
  580. package/src/core/primitives/code/code.tsx +0 -55
  581. package/src/core/primitives/code/index.ts +0 -1
  582. package/src/core/primitives/code/refractor.tsx +0 -20
  583. package/src/core/primitives/code/styles.ts +0 -77
  584. package/src/core/primitives/container/__workshop__/example.tsx +0 -20
  585. package/src/core/primitives/container/__workshop__/index.ts +0 -8
  586. package/src/core/primitives/container/container.tsx +0 -54
  587. package/src/core/primitives/container/index.ts +0 -2
  588. package/src/core/primitives/container/styles.ts +0 -23
  589. package/src/core/primitives/container/types.ts +0 -6
  590. package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
  591. package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
  592. package/src/core/primitives/flex/__workshop__/index.ts +0 -11
  593. package/src/core/primitives/flex/flex.tsx +0 -64
  594. package/src/core/primitives/flex/index.ts +0 -1
  595. package/src/core/primitives/grid/__workshop__/index.ts +0 -10
  596. package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
  597. package/src/core/primitives/grid/grid.test.tsx +0 -80
  598. package/src/core/primitives/grid/grid.tsx +0 -74
  599. package/src/core/primitives/grid/index.ts +0 -1
  600. package/src/core/primitives/heading/__workshop__/index.ts +0 -19
  601. package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
  602. package/src/core/primitives/heading/__workshop__/plain.tsx +0 -32
  603. package/src/core/primitives/heading/heading.tsx +0 -88
  604. package/src/core/primitives/heading/index.ts +0 -1
  605. package/src/core/primitives/heading/styles.ts +0 -64
  606. package/src/core/primitives/heading/types.ts +0 -7
  607. package/src/core/primitives/index.ts +0 -27
  608. package/src/core/primitives/inline/__workshop__/index.ts +0 -8
  609. package/src/core/primitives/inline/__workshop__/plain.tsx +0 -27
  610. package/src/core/primitives/inline/index.ts +0 -1
  611. package/src/core/primitives/inline/inline.test.tsx +0 -51
  612. package/src/core/primitives/inline/inline.tsx +0 -63
  613. package/src/core/primitives/inline/styles.ts +0 -32
  614. package/src/core/primitives/inline/types.ts +0 -6
  615. package/src/core/primitives/kbd/__workshop__/index.ts +0 -8
  616. package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
  617. package/src/core/primitives/kbd/index.ts +0 -1
  618. package/src/core/primitives/kbd/kbd.tsx +0 -69
  619. package/src/core/primitives/label/__workshop__/index.ts +0 -19
  620. package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -48
  621. package/src/core/primitives/label/__workshop__/plain.tsx +0 -24
  622. package/src/core/primitives/label/index.ts +0 -1
  623. package/src/core/primitives/label/label.tsx +0 -87
  624. package/src/core/primitives/label/styles.ts +0 -45
  625. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
  626. package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  627. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  628. package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  629. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
  630. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
  631. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -89
  632. package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -97
  633. package/src/core/primitives/popover/__workshop__/index.ts +0 -49
  634. package/src/core/primitives/popover/constants.ts +0 -22
  635. package/src/core/primitives/popover/floating-ui/size.ts +0 -99
  636. package/src/core/primitives/popover/helpers.ts +0 -31
  637. package/src/core/primitives/popover/index.ts +0 -2
  638. package/src/core/primitives/popover/popover.tsx +0 -511
  639. package/src/core/primitives/popover/popoverCard.tsx +0 -166
  640. package/src/core/primitives/popover/types.ts +0 -7
  641. package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
  642. package/src/core/primitives/radio/__workshop__/index.ts +0 -11
  643. package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
  644. package/src/core/primitives/radio/index.ts +0 -1
  645. package/src/core/primitives/radio/radio.tsx +0 -51
  646. package/src/core/primitives/radio/styles.ts +0 -117
  647. package/src/core/primitives/select/__workshop__/index.ts +0 -11
  648. package/src/core/primitives/select/__workshop__/plain.tsx +0 -27
  649. package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
  650. package/src/core/primitives/select/index.ts +0 -1
  651. package/src/core/primitives/select/select.test.tsx +0 -52
  652. package/src/core/primitives/select/select.tsx +0 -94
  653. package/src/core/primitives/select/styles.ts +0 -166
  654. package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
  655. package/src/core/primitives/spinner/__workshop__/index.ts +0 -14
  656. package/src/core/primitives/spinner/index.ts +0 -1
  657. package/src/core/primitives/spinner/spinner.tsx +0 -46
  658. package/src/core/primitives/stack/__workshop__/index.ts +0 -14
  659. package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
  660. package/src/core/primitives/stack/index.ts +0 -1
  661. package/src/core/primitives/stack/stack.test.tsx +0 -57
  662. package/src/core/primitives/stack/stack.tsx +0 -57
  663. package/src/core/primitives/stack/styles.ts +0 -32
  664. package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
  665. package/src/core/primitives/switch/__workshop__/index.ts +0 -11
  666. package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
  667. package/src/core/primitives/switch/index.ts +0 -1
  668. package/src/core/primitives/switch/styles.ts +0 -173
  669. package/src/core/primitives/switch/switch.tsx +0 -68
  670. package/src/core/primitives/text/__workshop__/colored.tsx +0 -30
  671. package/src/core/primitives/text/__workshop__/example.tsx +0 -39
  672. package/src/core/primitives/text/__workshop__/index.ts +0 -24
  673. package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -48
  674. package/src/core/primitives/text/index.ts +0 -1
  675. package/src/core/primitives/text/styles.ts +0 -74
  676. package/src/core/primitives/text/text.tsx +0 -89
  677. package/src/core/primitives/textArea/__workshop__/index.ts +0 -14
  678. package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -50
  679. package/src/core/primitives/textArea/index.ts +0 -1
  680. package/src/core/primitives/textArea/textArea.tsx +0 -120
  681. package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
  682. package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
  683. package/src/core/primitives/textInput/__workshop__/index.ts +0 -44
  684. package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -98
  685. package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
  686. package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
  687. package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
  688. package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
  689. package/src/core/primitives/textInput/index.ts +0 -1
  690. package/src/core/primitives/textInput/textInput.test.tsx +0 -48
  691. package/src/core/primitives/textInput/textInput.tsx +0 -395
  692. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
  693. package/src/core/primitives/tooltip/__workshop__/index.ts +0 -29
  694. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
  695. package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -107
  696. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
  697. package/src/core/primitives/tooltip/constants.ts +0 -23
  698. package/src/core/primitives/tooltip/index.ts +0 -2
  699. package/src/core/primitives/tooltip/tooltip.test.tsx +0 -452
  700. package/src/core/primitives/tooltip/tooltip.tsx +0 -495
  701. package/src/core/primitives/tooltip/tooltipCard.tsx +0 -109
  702. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  703. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -11
  704. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -57
  705. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
  706. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  707. package/src/core/primitives/types.ts +0 -179
  708. package/src/core/styles/border/borderStyle.ts +0 -56
  709. package/src/core/styles/border/index.ts +0 -2
  710. package/src/core/styles/border/types.ts +0 -10
  711. package/src/core/styles/box/boxStyle.ts +0 -69
  712. package/src/core/styles/box/index.ts +0 -2
  713. package/src/core/styles/box/types.ts +0 -11
  714. package/src/core/styles/card/_cardColorStyle.ts +0 -108
  715. package/src/core/styles/card/index.ts +0 -1
  716. package/src/core/styles/flex/flexItemStyle.ts +0 -27
  717. package/src/core/styles/flex/flexStyle.ts +0 -70
  718. package/src/core/styles/flex/index.ts +0 -3
  719. package/src/core/styles/flex/types.ts +0 -25
  720. package/src/core/styles/focusRing/index.ts +0 -25
  721. package/src/core/styles/font/codeFontStyle.ts +0 -13
  722. package/src/core/styles/font/headingFontStyle.ts +0 -13
  723. package/src/core/styles/font/index.ts +0 -6
  724. package/src/core/styles/font/labelFontStyle.ts +0 -13
  725. package/src/core/styles/font/responsiveFont.ts +0 -103
  726. package/src/core/styles/font/textAlignStyle.ts +0 -19
  727. package/src/core/styles/font/textFontStyle.ts +0 -13
  728. package/src/core/styles/font/types.ts +0 -35
  729. package/src/core/styles/grid/gridItemStyle.ts +0 -82
  730. package/src/core/styles/grid/gridStyle.ts +0 -108
  731. package/src/core/styles/grid/index.ts +0 -3
  732. package/src/core/styles/grid/types.ts +0 -37
  733. package/src/core/styles/helpers.ts +0 -72
  734. package/src/core/styles/index.ts +0 -5
  735. package/src/core/styles/input/index.ts +0 -2
  736. package/src/core/styles/input/responsiveInputPaddingStyle.ts +0 -78
  737. package/src/core/styles/input/textInputStyle.ts +0 -263
  738. package/src/core/styles/internal.ts +0 -12
  739. package/src/core/styles/margin/index.ts +0 -2
  740. package/src/core/styles/margin/marginStyle.ts +0 -21
  741. package/src/core/styles/margin/marginsStyle.test.ts +0 -33
  742. package/src/core/styles/margin/types.ts +0 -9
  743. package/src/core/styles/padding/index.ts +0 -2
  744. package/src/core/styles/padding/paddingStyle.test.ts +0 -33
  745. package/src/core/styles/padding/paddingStyle.ts +0 -21
  746. package/src/core/styles/padding/types.ts +0 -12
  747. package/src/core/styles/radius/index.ts +0 -2
  748. package/src/core/styles/radius/radiusStyle.ts +0 -23
  749. package/src/core/styles/radius/types.ts +0 -8
  750. package/src/core/styles/shadow/index.ts +0 -2
  751. package/src/core/styles/shadow/shadowStyle.ts +0 -29
  752. package/src/core/styles/shadow/types.ts +0 -6
  753. package/src/core/styles/types.ts +0 -8
  754. package/src/core/theme/__workshop__/build/Root.tsx +0 -367
  755. package/src/core/theme/__workshop__/build/helpers.ts +0 -46
  756. package/src/core/theme/__workshop__/build/story.tsx +0 -465
  757. package/src/core/theme/__workshop__/canvas.tsx +0 -352
  758. package/src/core/theme/__workshop__/color.tsx +0 -62
  759. package/src/core/theme/__workshop__/debug/story.tsx +0 -408
  760. package/src/core/theme/__workshop__/index.ts +0 -39
  761. package/src/core/theme/__workshop__/layer.tsx +0 -78
  762. package/src/core/theme/__workshop__/nestedProvider.tsx +0 -15
  763. package/src/core/theme/index.ts +0 -5
  764. package/src/core/theme/theme.test.tsx +0 -73
  765. package/src/core/theme/themeColorProvider.tsx +0 -29
  766. package/src/core/theme/themeContext.ts +0 -10
  767. package/src/core/theme/themeProvider.tsx +0 -62
  768. package/src/core/theme/types.ts +0 -12
  769. package/src/core/theme/useRootTheme.ts +0 -17
  770. package/src/core/theme/useTheme.ts +0 -16
  771. package/src/core/types/avatar.ts +0 -14
  772. package/src/core/types/badge.ts +0 -12
  773. package/src/core/types/box.ts +0 -19
  774. package/src/core/types/button.ts +0 -21
  775. package/src/core/types/card.ts +0 -6
  776. package/src/core/types/component.ts +0 -32
  777. package/src/core/types/dialog.ts +0 -4
  778. package/src/core/types/flex.ts +0 -30
  779. package/src/core/types/grid.ts +0 -14
  780. package/src/core/types/gridItem.ts +0 -29
  781. package/src/core/types/index.ts +0 -15
  782. package/src/core/types/placement.ts +0 -18
  783. package/src/core/types/popover.ts +0 -4
  784. package/src/core/types/radius.ts +0 -4
  785. package/src/core/types/selectable.ts +0 -6
  786. package/src/core/types/text.ts +0 -4
  787. package/src/core/utils/arrow/arrow.tsx +0 -123
  788. package/src/core/utils/arrow/cmds.ts +0 -91
  789. package/src/core/utils/arrow/index.ts +0 -1
  790. package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -14
  791. package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
  792. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -100
  793. package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -7
  794. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -24
  795. package/src/core/utils/boundaryElement/index.ts +0 -3
  796. package/src/core/utils/boundaryElement/types.ts +0 -7
  797. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -26
  798. package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +0 -21
  799. package/src/core/utils/conditionalWrapper/index.ts +0 -1
  800. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -30
  801. package/src/core/utils/elementQuery/__workshop__/index.ts +0 -14
  802. package/src/core/utils/elementQuery/elementQuery.tsx +0 -53
  803. package/src/core/utils/elementQuery/helpers.ts +0 -27
  804. package/src/core/utils/elementQuery/index.ts +0 -1
  805. package/src/core/utils/errorBoundary.tsx +0 -48
  806. package/src/core/utils/getElementRef.ts +0 -26
  807. package/src/core/utils/index.ts +0 -9
  808. package/src/core/utils/layer/__workshop__/_debug.tsx +0 -17
  809. package/src/core/utils/layer/__workshop__/index.ts +0 -24
  810. package/src/core/utils/layer/__workshop__/multipleRoots.tsx +0 -49
  811. package/src/core/utils/layer/__workshop__/nested.tsx +0 -98
  812. package/src/core/utils/layer/__workshop__/responsiveZOffset.tsx +0 -13
  813. package/src/core/utils/layer/getLayerContext.test.ts +0 -30
  814. package/src/core/utils/layer/getLayerContext.ts +0 -21
  815. package/src/core/utils/layer/index.ts +0 -4
  816. package/src/core/utils/layer/layer.test.tsx +0 -108
  817. package/src/core/utils/layer/layer.tsx +0 -98
  818. package/src/core/utils/layer/layerContext.ts +0 -7
  819. package/src/core/utils/layer/layerProvider.tsx +0 -111
  820. package/src/core/utils/layer/types.ts +0 -9
  821. package/src/core/utils/layer/useLayer.ts +0 -26
  822. package/src/core/utils/portal/__workshop__/index.ts +0 -14
  823. package/src/core/utils/portal/__workshop__/named.tsx +0 -63
  824. package/src/core/utils/portal/index.ts +0 -4
  825. package/src/core/utils/portal/portal.test.tsx +0 -103
  826. package/src/core/utils/portal/portal.ts +0 -32
  827. package/src/core/utils/portal/portalContext.ts +0 -31
  828. package/src/core/utils/portal/portalProvider.tsx +0 -47
  829. package/src/core/utils/portal/types.ts +0 -9
  830. package/src/core/utils/portal/usePortal.ts +0 -25
  831. package/src/core/utils/spanWithTextOverflow.tsx +0 -10
  832. package/src/core/utils/srOnly/index.ts +0 -1
  833. package/src/core/utils/srOnly/srOnly.tsx +0 -36
  834. package/src/core/utils/virtualList/__workshop__/changingProps.tsx +0 -36
  835. package/src/core/utils/virtualList/__workshop__/elementScroll.tsx +0 -24
  836. package/src/core/utils/virtualList/__workshop__/index.ts +0 -29
  837. package/src/core/utils/virtualList/__workshop__/infiniteList.tsx +0 -48
  838. package/src/core/utils/virtualList/__workshop__/windowScrolll.tsx +0 -22
  839. package/src/core/utils/virtualList/index.ts +0 -1
  840. package/src/core/utils/virtualList/virtualList.tsx +0 -200
  841. package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +0 -76
  842. package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +0 -54
  843. package/src/theme/build/_deprecated/color/button/createButtonModes.ts +0 -22
  844. package/src/theme/build/_deprecated/color/button/createButtonTones.ts +0 -55
  845. package/src/theme/build/_deprecated/color/card/createCardStates.ts +0 -60
  846. package/src/theme/build/_deprecated/color/color.test.ts +0 -63
  847. package/src/theme/build/_deprecated/color/defaults.ts +0 -390
  848. package/src/theme/build/_deprecated/color/factory.ts +0 -142
  849. package/src/theme/build/_deprecated/color/index.ts +0 -1
  850. package/src/theme/build/_deprecated/color/input/createInputModes.ts +0 -81
  851. package/src/theme/build/_deprecated/color/muted/createMuted.ts +0 -54
  852. package/src/theme/build/_deprecated/color/spot/createSpot.ts +0 -20
  853. package/src/theme/build/buildColorTheme.test.ts +0 -183
  854. package/src/theme/build/buildColorTheme.ts +0 -499
  855. package/src/theme/build/buildTheme.test.ts +0 -87
  856. package/src/theme/build/buildTheme.ts +0 -36
  857. package/src/theme/build/colorToken/colorToken.ts +0 -19
  858. package/src/theme/build/colorToken/compileColorToken.ts +0 -21
  859. package/src/theme/build/colorToken/index.ts +0 -2
  860. package/src/theme/build/colorToken/types.ts +0 -6
  861. package/src/theme/build/index.ts +0 -3
  862. package/src/theme/build/lib/color-fns/blend/index.ts +0 -3
  863. package/src/theme/build/lib/color-fns/blend/mix.ts +0 -21
  864. package/src/theme/build/lib/color-fns/blend/multiply.ts +0 -18
  865. package/src/theme/build/lib/color-fns/blend/screen.ts +0 -18
  866. package/src/theme/build/lib/color-fns/color-fns.test.ts +0 -68
  867. package/src/theme/build/lib/color-fns/contrastRatio.ts +0 -31
  868. package/src/theme/build/lib/color-fns/convert.ts +0 -150
  869. package/src/theme/build/lib/color-fns/index.ts +0 -6
  870. package/src/theme/build/lib/color-fns/parse.ts +0 -60
  871. package/src/theme/build/lib/color-fns/rgba.ts +0 -10
  872. package/src/theme/build/lib/color-fns/types.ts +0 -28
  873. package/src/theme/build/lib/isRecord.ts +0 -3
  874. package/src/theme/build/lib/lazy.ts +0 -30
  875. package/src/theme/build/lib/utils.ts +0 -19
  876. package/src/theme/build/merge.ts +0 -26
  877. package/src/theme/build/mixThemeColor.test.ts +0 -21
  878. package/src/theme/build/mixThemeColor.ts +0 -53
  879. package/src/theme/build/renderColorTheme.ts +0 -532
  880. package/src/theme/build/renderColorValue.ts +0 -85
  881. package/src/theme/build/resolveColorTokens.ts +0 -268
  882. package/src/theme/build/theme.test.ts +0 -27
  883. package/src/theme/config/helpers.ts +0 -55
  884. package/src/theme/config/index.ts +0 -4
  885. package/src/theme/config/system.ts +0 -115
  886. package/src/theme/config/tokens/color/index.ts +0 -1
  887. package/src/theme/config/tokens/color/types.ts +0 -133
  888. package/src/theme/config/tokens/index.ts +0 -4
  889. package/src/theme/config/tokens/parseTokenKey.test.ts +0 -64
  890. package/src/theme/config/tokens/parseTokenKey.ts +0 -67
  891. package/src/theme/config/tokens/parseTokenValue.test.ts +0 -42
  892. package/src/theme/config/tokens/parseTokenValue.ts +0 -133
  893. package/src/theme/config/tokens/types.ts +0 -53
  894. package/src/theme/config/types.ts +0 -46
  895. package/src/theme/defaults/colorPalette.ts +0 -5
  896. package/src/theme/defaults/colorTokens.ts +0 -648
  897. package/src/theme/defaults/config.ts +0 -84
  898. package/src/theme/defaults/fonts.ts +0 -227
  899. package/src/theme/getScopedTheme.ts +0 -98
  900. package/src/theme/index.ts +0 -5
  901. package/src/theme/system/avatar.ts +0 -14
  902. package/src/theme/system/color/_constants.ts +0 -45
  903. package/src/theme/system/color/_helpers.ts +0 -24
  904. package/src/theme/system/color/_system.ts +0 -40
  905. package/src/theme/system/color/avatar.ts +0 -15
  906. package/src/theme/system/color/badge.ts +0 -16
  907. package/src/theme/system/color/button.ts +0 -17
  908. package/src/theme/system/color/color.ts +0 -34
  909. package/src/theme/system/color/index.ts +0 -13
  910. package/src/theme/system/color/input.ts +0 -25
  911. package/src/theme/system/color/kbd.ts +0 -8
  912. package/src/theme/system/color/selectable.ts +0 -12
  913. package/src/theme/system/color/shadow.ts +0 -7
  914. package/src/theme/system/color/state.ts +0 -43
  915. package/src/theme/system/color/syntax.ts +0 -41
  916. package/src/theme/system/css.ts +0 -14
  917. package/src/theme/system/focusRing.ts +0 -7
  918. package/src/theme/system/font.ts +0 -52
  919. package/src/theme/system/index.ts +0 -11
  920. package/src/theme/system/input.ts +0 -33
  921. package/src/theme/system/layer.ts +0 -8
  922. package/src/theme/system/shadow.ts +0 -19
  923. package/src/theme/system/styles.ts +0 -13
  924. package/src/theme/system/theme.ts +0 -138
  925. package/src/theme/system/v0/avatar.ts +0 -10
  926. package/src/theme/system/v0/color/_generic.ts +0 -35
  927. package/src/theme/system/v0/color/_system.ts +0 -17
  928. package/src/theme/system/v0/color/base.ts +0 -21
  929. package/src/theme/system/v0/color/button.ts +0 -42
  930. package/src/theme/system/v0/color/card.ts +0 -19
  931. package/src/theme/system/v0/color/color.ts +0 -40
  932. package/src/theme/system/v0/color/index.ts +0 -11
  933. package/src/theme/system/v0/color/input.ts +0 -34
  934. package/src/theme/system/v0/color/muted.ts +0 -26
  935. package/src/theme/system/v0/color/selectable.ts +0 -31
  936. package/src/theme/system/v0/color/solid.ts +0 -26
  937. package/src/theme/system/v0/color/spot.ts +0 -13
  938. package/src/theme/system/v0/index.ts +0 -3
  939. package/src/theme/system/v0/input.ts +0 -23
  940. package/src/theme/versioning/getTheme_v2.ts +0 -57
  941. package/src/theme/versioning/index.ts +0 -5
  942. package/src/theme/versioning/is_v0.ts +0 -6
  943. package/src/theme/versioning/is_v2.ts +0 -6
  944. package/src/theme/versioning/themeColor_v0_v2.ts +0 -243
  945. package/src/theme/versioning/themeColor_v2_v2_9.ts +0 -49
  946. package/src/theme/versioning/v0_v2.ts +0 -94
  947. package/src/theme/versioning/v2_v0.ts +0 -135
@@ -0,0 +1,563 @@
1
+ import { cn } from "../lib/cn.js";
2
+ import { TooltipLayer, TooltipRoot } from "../ui/tooltip-root.js";
3
+ import { Tooltip as Tooltip$1 } from "../ui/overlay.js";
4
+ import { UNIT_NAMES, customPx, customRules, defaultUnit, fieldScale, formatNumber, isCustomValue, isTokenScale, nearestTokenIndex, parseScaleInput, rangeOf, resolveScale, roundTo, scaleHint, validateCustom } from "../schema/scale.js";
5
+ import * as React from "react";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Tooltip } from "@base-ui/react/tooltip";
8
+ //#region src/kit/controls/scale.tsx
9
+ /**
10
+ * SCALE — one control, two modes (CPO D41), in the designer's CAPSULE: a muted 32px capsule, a soft fill to the value,
11
+ * a 3px bar thumb at the fill's end (always right of the label), the label inside on the left (panels) and the value
12
+ * inside on the right. Drag anywhere to slide (always snaps to the steps), ←→ / Home / End / PageUp / PageDown.
13
+ * · Fixed only (default): steps snap; the readout shows the token ("Large"), its tooltip the size (88px); scrub it sideways.
14
+ * · Fixed + custom (`allowCustom`): DIRECT edit, no mode switch — one click on the value puts the caret there with the
15
+ * value selected; double-click anywhere or just start typing on the focused capsule does the same. "24", "24px", "5%",
16
+ * "xl" apply live; Enter / Tab / blur commit, Esc reverts. The unit is plain suffix text (parsed from what you type;
17
+ * with several units, clicking it cycles them). While typing, token chips under the capsule pick a step in one click;
18
+ * ↑↓ step the tokens. A custom value shows a small accent dot and sits proportionally between its tokens.
19
+ * Used by the Block Kit number control (`field.scale`, or the legacy `layout: "slider"`) and by the Visuals panels.
20
+ *
21
+ * Port of V2 HEAD 9829bf1 kit/controls/scale.tsx. V2 tokens map to the kit's (bg-muted → bg-kit-muted, --ring-focus →
22
+ * the kit focus ring). V2's native `title=` hints become kit tooltips (the dashboard bans native title tooltips); the
23
+ * custom value keeps ONE tooltip mounted and closes it while typing, so the input never remounts mid-edit.
24
+ * Values are stored as they are (adapters/values.ts scaleToProd): a number, a token step's string, or { value, unit }.
25
+ */
26
+ var clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
27
+ /** Horizontal scrubbing (Figma-style) on any element: drag → whole steps; click without moving → onClick. */
28
+ function useScrub(onSteps, pxPerStep, onClick) {
29
+ const st = React.useRef(null);
30
+ return {
31
+ onPointerDown(e) {
32
+ if (e.button !== 0) return;
33
+ e.preventDefault();
34
+ e.currentTarget.setPointerCapture(e.pointerId);
35
+ st.current = {
36
+ x: e.clientX,
37
+ moved: false,
38
+ last: 0
39
+ };
40
+ },
41
+ onPointerMove(e) {
42
+ const s = st.current;
43
+ if (!s) return;
44
+ const dx = e.clientX - s.x;
45
+ if (!s.moved && Math.abs(dx) < 3) return;
46
+ s.moved = true;
47
+ const steps = Math.trunc(dx / pxPerStep);
48
+ if (steps !== s.last) {
49
+ onSteps(steps - s.last, e);
50
+ s.last = steps;
51
+ }
52
+ },
53
+ onPointerUp() {
54
+ const s = st.current;
55
+ st.current = null;
56
+ if (s && !s.moved) onClick?.();
57
+ },
58
+ onPointerCancel() {
59
+ st.current = null;
60
+ }
61
+ };
62
+ }
63
+ function ScaleSlider({ scale, value, onChange, label, id, disabled, readOnly, invalid, error: externalError, inlineLabel, icon, labelClassName, suffix, format, onBlur, onEnter, autoEdit, onTab, className }) {
64
+ const errId = `scale-err-${React.useId()}`;
65
+ const tokens = isTokenScale(scale) ? scale.steps : null;
66
+ const range = rangeOf(scale);
67
+ const custom = customRules(scale);
68
+ const r = resolveScale(scale, value, suffix);
69
+ const isCustom = isCustomValue(value);
70
+ const inert = disabled || readOnly;
71
+ const count = tokens ? tokens.length : 0;
72
+ const nearest = isCustom ? tokens ? nearestTokenIndex(scale, value) : -1 : -1;
73
+ let pos;
74
+ if (tokens) {
75
+ const i = isCustom ? nearest : r.index ?? 0;
76
+ pos = i < 0 ? -1 : count > 1 ? i / (count - 1) : 0;
77
+ } else {
78
+ const lo = range.min;
79
+ const hi = range.max;
80
+ const n = isCustom ? value.unit === defaultUnit(scale) ? value.value : NaN : typeof value === "number" ? value : lo;
81
+ pos = Number.isNaN(n) ? -1 : (clamp(n, lo, hi) - lo) / (hi - lo || 1);
82
+ }
83
+ const step = range?.step ?? 1;
84
+ const tokenAt = (i) => tokens[clamp(i, 0, count - 1)].value;
85
+ const currentIndex = () => isCustom ? Math.max(0, nearest) : r.index ?? 0;
86
+ const numAt = (n) => roundTo(clamp(n, range.min, range.max), step);
87
+ const currentNum = () => typeof value === "number" ? value : isCustom && pos >= 0 ? value.value : range.min;
88
+ const fromFraction = (f) => tokens ? tokenAt(Math.round(f * (count - 1))) : numAt(range.min + f * (range.max - range.min));
89
+ const nudgeScale = (d) => tokens ? tokenAt(currentIndex() + d) : numAt(currentNum() + d * step);
90
+ const backToScale = () => tokens ? tokenAt(nearest >= 0 ? nearest : Math.floor((count - 1) / 2)) : numAt(currentNum());
91
+ const commit = (v) => {
92
+ if (inert) return;
93
+ if (JSON.stringify(v) !== JSON.stringify(value)) onChange(v);
94
+ };
95
+ let between = null;
96
+ if (tokens && isCustom) {
97
+ const px = customPx(value);
98
+ const pts = tokens.map((t, i) => ({
99
+ i,
100
+ px: t.px
101
+ })).filter((t) => t.px != null);
102
+ if (px != null && pts.length >= 2) {
103
+ let f = -1;
104
+ if (px <= pts[0].px) f = pts[0].i;
105
+ else if (px >= pts[pts.length - 1].px) f = pts[pts.length - 1].i;
106
+ else for (let k = 0; k < pts.length - 1; k++) {
107
+ const a = pts[k];
108
+ const b = pts[k + 1];
109
+ if (px >= a.px && px <= b.px) {
110
+ f = a.i + (px - a.px) / Math.max(1, b.px - a.px) * (b.i - a.i);
111
+ between = [a.i, b.i];
112
+ break;
113
+ }
114
+ }
115
+ pos = f < 0 ? -1 : count > 1 ? f / (count - 1) : 0;
116
+ }
117
+ }
118
+ const trackRef = React.useRef(null);
119
+ const thumbRef = React.useRef(null);
120
+ const labelRef = React.useRef(null);
121
+ const [labelW, setLabelW] = React.useState(28);
122
+ const valueRef = React.useRef(null);
123
+ const [valueW, setValueW] = React.useState(40);
124
+ React.useLayoutEffect(() => {
125
+ const el = valueRef.current;
126
+ if (!el) return;
127
+ const measure = () => setValueW(Math.ceil(el.getBoundingClientRect().width));
128
+ measure();
129
+ const ro = new ResizeObserver(measure);
130
+ ro.observe(el);
131
+ return () => ro.disconnect();
132
+ }, [custom]);
133
+ React.useLayoutEffect(() => {
134
+ const el = labelRef.current;
135
+ if (!el) return setLabelW(28);
136
+ const measure = () => setLabelW(Math.max(28, Math.ceil(el.getBoundingClientRect().width) + 4));
137
+ measure();
138
+ const ro = new ResizeObserver(measure);
139
+ ro.observe(el);
140
+ return () => ro.disconnect();
141
+ }, [inlineLabel, label]);
142
+ const [dragging, setDragging] = React.useState(false);
143
+ const [kbFocus, setKbFocus] = React.useState(false);
144
+ const fracFromX = (x) => {
145
+ const rect = trackRef.current.getBoundingClientRect();
146
+ return clamp((x - rect.left - labelW) / Math.max(1, rect.width - labelW), 0, 1);
147
+ };
148
+ const inputRef = React.useRef(null);
149
+ const [draft, setDraft] = React.useState(null);
150
+ const [typedError, setError] = React.useState(null);
151
+ const error = typedError ?? externalError ?? null;
152
+ const [unitHint, setUnitHint] = React.useState(void 0);
153
+ const [editing, setEditing] = React.useState(false);
154
+ const editStart = React.useRef(value);
155
+ const justBegan = React.useRef(false);
156
+ const shownUnit = unitHint ?? (isCustom ? value.unit : defaultUnit(scale) ?? custom?.units[0]);
157
+ const fixedText = r.kind === "number" && format && typeof value === "number" ? format(value) : r.label;
158
+ const valueText = isCustom ? formatNumber(value.value) : r.kind === "token" ? r.label : r.kind === "number" ? formatNumber(value) : "";
159
+ const inputText = draft ?? valueText;
160
+ const tokenOnly = !isCustom && r.kind === "token";
161
+ const beginEdit = (seed) => {
162
+ if (inert || !custom) return;
163
+ if (!editing) editStart.current = value;
164
+ setEditing(true);
165
+ setError(null);
166
+ const el = inputRef.current;
167
+ if (!el) return;
168
+ el.focus({ preventScroll: true });
169
+ if (seed != null) {
170
+ setDraft(seed);
171
+ applyText(seed);
172
+ requestAnimationFrame(() => inputRef.current?.setSelectionRange(seed.length, seed.length));
173
+ } else {
174
+ el.select();
175
+ justBegan.current = true;
176
+ }
177
+ };
178
+ const endEdit = (how, focusThumb) => {
179
+ if (how === "revert") commit(editStart.current);
180
+ setDraft(null);
181
+ setError(null);
182
+ setUnitHint(void 0);
183
+ setEditing(false);
184
+ if (focusThumb) thumbRef.current?.focus({ preventScroll: true });
185
+ };
186
+ /** Applies what's typed LIVE when it parses; otherwise shows the reason and keeps the last good value. */
187
+ function applyText(text, showError = false) {
188
+ if (!text.trim()) return setError(null);
189
+ const res = parseScaleInput(scale, text, unitHint);
190
+ if (res.ok) {
191
+ setError(null);
192
+ commit(res.value);
193
+ return true;
194
+ }
195
+ setError(showError ? res.error : null);
196
+ return false;
197
+ }
198
+ /** ↑↓ while editing: step the tokens (from a custom value, the next token in that direction). */
199
+ const stepTokens = (dir, e) => {
200
+ if (tokens && isCustom) {
201
+ const lo = between ? between[0] : nearest;
202
+ const hi = between ? between[1] : nearest;
203
+ commit(tokenAt(dir > 0 ? between ? hi : nearest + 1 : between ? lo : nearest - 1));
204
+ } else commit(nudgeScale(dir * (!tokens && e.shiftKey ? 10 : 1)));
205
+ setDraft(null);
206
+ setError(null);
207
+ };
208
+ const valueKey = JSON.stringify(value ?? null);
209
+ const [seenValue, setSeenValue] = React.useState(valueKey);
210
+ if (seenValue !== valueKey) {
211
+ setSeenValue(valueKey);
212
+ if (draft == null && !externalError && typedError !== null) setError(null);
213
+ }
214
+ const unitsList = custom?.units ?? [];
215
+ const cycleUnit = () => {
216
+ if (inert || unitsList.length < 2) return;
217
+ const cur = shownUnit && unitsList.includes(shownUnit) ? shownUnit : unitsList[0];
218
+ const next = unitsList[(unitsList.indexOf(cur) + 1) % unitsList.length];
219
+ setUnitHint(next);
220
+ if (isCustom) {
221
+ const cv = {
222
+ value: value.value,
223
+ unit: next
224
+ };
225
+ if (validateCustom(scale, cv)) beginEdit();
226
+ else {
227
+ setError(null);
228
+ commit(cv);
229
+ }
230
+ } else beginEdit();
231
+ };
232
+ const onTrackKey = (e) => {
233
+ if (inert) return;
234
+ if (custom && !e.metaKey && !e.ctrlKey && !e.altKey && e.key.length === 1 && /[0-9.a-z%]/i.test(e.key)) {
235
+ e.preventDefault();
236
+ beginEdit(e.key);
237
+ return;
238
+ }
239
+ if (e.key === "Enter" && onEnter) {
240
+ e.preventDefault();
241
+ onEnter();
242
+ return;
243
+ }
244
+ const big = tokens ? 2 : Math.max(1, Math.round((range.max - range.min) / step / 10));
245
+ const mult = e.shiftKey && !tokens ? 10 : 1;
246
+ let next = null;
247
+ if (e.key === "ArrowRight" || e.key === "ArrowUp") next = isCustom ? tokens ? tokenAt(between ? between[1] : nearest + 1) : backToScale() : nudgeScale(mult);
248
+ else if (e.key === "ArrowLeft" || e.key === "ArrowDown") next = isCustom ? tokens ? tokenAt(between ? between[0] : nearest - 1) : backToScale() : nudgeScale(-mult);
249
+ else if (e.key === "PageUp") next = nudgeScale(big);
250
+ else if (e.key === "PageDown") next = nudgeScale(-big);
251
+ else if (e.key === "Home") next = tokens ? tokenAt(0) : range.min;
252
+ else if (e.key === "End") next = tokens ? tokenAt(count - 1) : range.max;
253
+ if (next == null) return;
254
+ e.preventDefault();
255
+ commit(next);
256
+ };
257
+ React.useEffect(() => {
258
+ for (const el of [inputRef.current, thumbRef.current]) {
259
+ if (!el) continue;
260
+ const own = (el.getAttribute("aria-describedby") ?? "").split(" ").filter((t) => t && t !== errId);
261
+ const next = error ? [...own, errId] : own;
262
+ if (next.length) el.setAttribute("aria-describedby", next.join(" "));
263
+ else el.removeAttribute("aria-describedby");
264
+ }
265
+ }, [
266
+ error,
267
+ errId,
268
+ editing
269
+ ]);
270
+ React.useEffect(() => {
271
+ if (autoEdit) beginEdit();
272
+ }, []);
273
+ const readoutScrub = useScrub((delta, e) => !inert && commit(nudgeScale(delta * (!tokens && e.shiftKey ? 10 : 1))), tokens ? 16 : Math.max(3, Math.min(12, 160 / ((range.max - range.min) / step))));
274
+ const betweenText = isCustom ? tokens && between ? `Custom value · between ${tokens[between[0]].label} and ${tokens[between[1]].label}` : tokens && nearest >= 0 ? `Custom value · near ${tokens[nearest].label}` : "Custom value" : void 0;
275
+ const fillW = `calc(${labelW}px + (100% - ${labelW}px) * ${Math.max(0, pos)})`;
276
+ const tooltip = r.kind === "token" && r.css ? scaleHint(r) : betweenText;
277
+ const presets = custom ? scale.presets ?? [] : [];
278
+ const showChips = editing && (!!tokens && count <= 9 || presets.length > 0);
279
+ return /* @__PURE__ */ jsxs("div", {
280
+ className: cn("min-w-0", className),
281
+ "data-scale-mode": custom ? "custom" : "fixed",
282
+ children: [
283
+ /* @__PURE__ */ jsxs("div", {
284
+ ref: trackRef,
285
+ onPointerDown: (e) => {
286
+ if (inert || e.button !== 0) return;
287
+ if (e.target.closest("[data-scale-value]")) return;
288
+ e.preventDefault();
289
+ e.currentTarget.setPointerCapture(e.pointerId);
290
+ setDragging(true);
291
+ setKbFocus(false);
292
+ if (editing) endEdit("commit", false);
293
+ commit(fromFraction(fracFromX(e.clientX)));
294
+ thumbRef.current?.focus({ preventScroll: true });
295
+ },
296
+ onPointerMove: (e) => dragging && commit(fromFraction(fracFromX(e.clientX))),
297
+ onPointerUp: () => setDragging(false),
298
+ onPointerCancel: () => setDragging(false),
299
+ onDoubleClick: () => beginEdit(),
300
+ className: cn("group/cap relative flex h-8 w-full touch-none select-none items-center overflow-hidden rounded-kit-md bg-kit-muted transition-[background-color,box-shadow]", inert ? "cursor-not-allowed" : "cursor-ew-resize hover:bg-kit-hover", disabled && "opacity-50", kbFocus && !editing && !error && "shadow-[0_0_0_2px_var(--kit-surface),0_0_0_4px_var(--kit-focus-ring)]", editing && !error && "shadow-[inset_0_0_0_1px_var(--kit-line-strong)]", error && "shadow-[inset_0_0_0_1px_var(--kit-danger)]"),
301
+ children: [
302
+ pos >= 0 ? /* @__PURE__ */ jsx("div", {
303
+ "aria-hidden": true,
304
+ className: cn("absolute inset-y-0 left-0 rounded-l-kit-md bg-[color-mix(in_oklab,var(--kit-fg)_9%,transparent)]", !dragging && "motion-safe:transition-[width] motion-safe:duration-75"),
305
+ style: { width: fillW }
306
+ }) : null,
307
+ /* @__PURE__ */ jsx("div", {
308
+ ref: thumbRef,
309
+ id: custom ? void 0 : id,
310
+ role: "slider",
311
+ tabIndex: disabled ? -1 : 0,
312
+ "aria-label": label,
313
+ "aria-valuemin": tokens ? 0 : range.min,
314
+ "aria-valuemax": tokens ? count - 1 : range.max,
315
+ "aria-valuenow": tokens ? currentIndex() : clamp(currentNum(), range.min, range.max),
316
+ "aria-valuetext": r.spoken,
317
+ "aria-disabled": disabled || void 0,
318
+ "aria-readonly": readOnly || void 0,
319
+ "aria-invalid": !custom && invalid || void 0,
320
+ "aria-orientation": "horizontal",
321
+ onKeyDown: (e) => {
322
+ setKbFocus(true);
323
+ onTrackKey(e);
324
+ },
325
+ onFocus: () => setKbFocus(document.documentElement.dataset.inputModality === "keyboard"),
326
+ onBlur: () => {
327
+ setKbFocus(false);
328
+ onBlur?.();
329
+ },
330
+ className: cn("absolute top-1/2 z-[1] h-4 w-[3px] -translate-x-full -translate-y-1/2 rounded-full bg-kit-fg-3 opacity-0 outline-none focus-visible:!shadow-none focus-visible:!outline-none", !inert && "group-hover/cap:opacity-100", "focus-visible:opacity-100", dragging && "opacity-100", (pos < 0 || editing) && "!opacity-0", !dragging && "motion-safe:transition-[left,opacity] motion-safe:duration-75"),
331
+ style: { left: `min(calc(${fillW} - 4px), calc(100% - ${valueW}px - 2px))` }
332
+ }),
333
+ inlineLabel ? /* @__PURE__ */ jsxs("span", {
334
+ ref: labelRef,
335
+ className: cn("pointer-events-none relative z-[2] flex min-w-0 shrink items-center gap-1.5 pl-3 pr-1 text-kit-xs text-kit-fg-2 [&_svg]:size-3.5", labelClassName),
336
+ children: [icon, /* @__PURE__ */ jsx("span", {
337
+ className: "truncate",
338
+ children: label
339
+ })]
340
+ }) : null,
341
+ /* @__PURE__ */ jsx("span", { className: "flex-1" }),
342
+ custom ? /* @__PURE__ */ jsx(StableTip, {
343
+ content: tooltip,
344
+ off: editing,
345
+ children: /* @__PURE__ */ jsxs("span", {
346
+ ref: valueRef,
347
+ "data-scale-value": true,
348
+ onPointerDown: (e) => {
349
+ if (inert || e.button !== 0) return;
350
+ e.stopPropagation();
351
+ if (!editing) {
352
+ e.preventDefault();
353
+ beginEdit();
354
+ }
355
+ },
356
+ onMouseUp: (e) => {
357
+ if (!justBegan.current) return;
358
+ justBegan.current = false;
359
+ e.preventDefault();
360
+ inputRef.current?.select();
361
+ },
362
+ onMouseDown: (e) => {
363
+ if (!editing || e.target !== inputRef.current) e.preventDefault();
364
+ },
365
+ className: cn("relative z-[2] flex h-full shrink-0 items-center gap-1 pl-2 pr-3", !inert && "cursor-text"),
366
+ children: [
367
+ isCustom && !editing ? /* @__PURE__ */ jsx("span", {
368
+ "aria-hidden": true,
369
+ className: "size-1.5 shrink-0 rounded-full bg-kit-accent"
370
+ }) : null,
371
+ /* @__PURE__ */ jsx("input", {
372
+ ref: inputRef,
373
+ id,
374
+ inputMode: "text",
375
+ autoComplete: "off",
376
+ spellCheck: false,
377
+ "aria-label": `${label} value`,
378
+ "aria-description": betweenText,
379
+ "aria-invalid": !!error || invalid || void 0,
380
+ readOnly,
381
+ disabled,
382
+ tabIndex: -1,
383
+ value: inputText,
384
+ size: 1,
385
+ style: { width: `${Math.max(1, inputText.length) + .5}ch` },
386
+ onFocus: () => {
387
+ if (!editing) beginEdit();
388
+ },
389
+ onBlur: () => {
390
+ if (!editing) return;
391
+ if (draft != null && draft.trim() && !parseScaleInput(scale, draft, unitHint).ok) endEdit("revert", false);
392
+ else endEdit("commit", false);
393
+ onBlur?.();
394
+ },
395
+ onChange: (e) => {
396
+ setDraft(e.target.value);
397
+ applyText(e.target.value);
398
+ },
399
+ onWheel: (e) => e.currentTarget.blur(),
400
+ onKeyDown: (e) => {
401
+ e.stopPropagation();
402
+ if (e.key === "Tab" && onTab) {
403
+ e.preventDefault();
404
+ if (draft != null && !applyText(draft, true)) return;
405
+ endEdit("commit", false);
406
+ onTab(e.shiftKey ? -1 : 1);
407
+ } else if (e.key === "Enter") {
408
+ e.preventDefault();
409
+ if (draft != null && !applyText(draft, true)) return;
410
+ endEdit("commit", true);
411
+ onEnter?.();
412
+ } else if (e.key === "Escape") {
413
+ e.preventDefault();
414
+ endEdit("revert", true);
415
+ } else if (e.key === "ArrowUp" || e.key === "ArrowDown") {
416
+ e.preventDefault();
417
+ stepTokens(e.key === "ArrowUp" ? 1 : -1, e);
418
+ }
419
+ },
420
+ className: cn("h-6 min-w-0 bg-transparent p-0 text-right text-kit-xs tabular-nums text-kit-fg outline-none placeholder:text-kit-fg-4 focus:shadow-none focus-visible:shadow-none focus-visible:outline-none selection:bg-kit-selected", isCustom || editing ? "font-normal" : "font-medium", !editing && "pointer-events-none")
421
+ }),
422
+ !tokenOnly || editing ? unitsList.length > 1 ? /* @__PURE__ */ jsx(Tooltip$1, {
423
+ content: `Units: ${unitsList.join(", ")} — click to switch, or type one (24%)`,
424
+ children: /* @__PURE__ */ jsx("button", {
425
+ type: "button",
426
+ tabIndex: -1,
427
+ disabled: inert,
428
+ onPointerDown: (e) => {
429
+ e.stopPropagation();
430
+ e.preventDefault();
431
+ },
432
+ onClick: cycleUnit,
433
+ "aria-label": `Unit: ${shownUnit ? UNIT_NAMES[shownUnit] : "none"}. Switch unit`,
434
+ className: "rounded-kit-xs text-kit-xs text-kit-fg-3 transition-colors hover:text-kit-fg",
435
+ children: shownUnit
436
+ })
437
+ }) : /* @__PURE__ */ jsx("span", {
438
+ "aria-hidden": true,
439
+ className: "text-kit-xs text-kit-fg-3",
440
+ children: shownUnit
441
+ }) : null
442
+ ]
443
+ })
444
+ }) : /* @__PURE__ */ jsx(Tooltip$1, {
445
+ content: tooltip,
446
+ children: /* @__PURE__ */ jsx("span", {
447
+ ref: valueRef,
448
+ "aria-hidden": true,
449
+ ...inert ? {} : readoutScrub,
450
+ className: cn("relative z-[2] whitespace-nowrap pl-2 pr-3 text-kit-xs font-medium tabular-nums text-kit-fg", !inert && "cursor-ew-resize"),
451
+ children: fixedText
452
+ })
453
+ })
454
+ ]
455
+ }),
456
+ showChips ? /* @__PURE__ */ jsxs("div", {
457
+ role: "group",
458
+ "aria-label": `${label} steps`,
459
+ className: "mt-1 flex flex-wrap items-center gap-0.5",
460
+ children: [(tokens && count <= 9 ? tokens : []).map((t, i) => {
461
+ const on = !isCustom && r.index === i;
462
+ return /* @__PURE__ */ jsx(Tooltip$1, {
463
+ content: t.px != null ? `${t.title ?? t.label} · ${t.px}px` : t.css ? `${t.title ?? t.label} · ${t.css}` : t.title,
464
+ children: /* @__PURE__ */ jsx("button", {
465
+ type: "button",
466
+ tabIndex: -1,
467
+ "aria-pressed": on,
468
+ onPointerDown: (e) => e.preventDefault(),
469
+ onClick: () => {
470
+ commit(t.value);
471
+ endEdit("commit", true);
472
+ },
473
+ className: cn("h-5 rounded-kit-sm px-1.5 text-kit-2xs transition-colors", on ? "bg-kit-selected font-medium text-kit-fg" : "text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg"),
474
+ children: shortToken(t.label)
475
+ })
476
+ }, t.value);
477
+ }), presets.length ? /* @__PURE__ */ jsxs(Fragment, { children: [tokens && count <= 9 ? /* @__PURE__ */ jsx("span", {
478
+ "aria-hidden": true,
479
+ className: "mx-1 h-3 w-px bg-kit-line-strong"
480
+ }) : null, presets.map((p, i) => {
481
+ const pr = resolveScale(scale, p.value, suffix);
482
+ const on = JSON.stringify(p.value) === JSON.stringify(value);
483
+ return /* @__PURE__ */ jsx(Tooltip$1, {
484
+ content: p.label ? `${p.label} · ${pr.label}` : pr.label,
485
+ children: /* @__PURE__ */ jsx("button", {
486
+ type: "button",
487
+ tabIndex: -1,
488
+ "aria-pressed": on,
489
+ onPointerDown: (e) => e.preventDefault(),
490
+ onClick: () => {
491
+ commit(p.value);
492
+ endEdit("commit", true);
493
+ },
494
+ className: cn("h-5 rounded-kit-sm px-1.5 text-kit-2xs tabular-nums transition-colors", on ? "bg-kit-selected font-medium text-kit-fg" : "text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg"),
495
+ children: pr.label
496
+ })
497
+ }, `preset-${i}`);
498
+ })] }) : null]
499
+ }) : null,
500
+ error ? /* @__PURE__ */ jsx("p", {
501
+ id: errId,
502
+ role: "status",
503
+ "aria-live": "polite",
504
+ className: "mt-1 text-kit-xs text-kit-danger-fg",
505
+ children: error
506
+ }) : null
507
+ ]
508
+ });
509
+ }
510
+ /**
511
+ * A tooltip whose trigger never changes tree shape: `off` (typing) or no content keeps it closed instead of unwrapping
512
+ * the child, which would remount the input inside it and drop the caret.
513
+ */
514
+ function StableTip({ content, off, children }) {
515
+ return /* @__PURE__ */ jsxs(TooltipRoot, {
516
+ open: off || !content ? false : void 0,
517
+ children: [/* @__PURE__ */ jsx(Tooltip.Trigger, {
518
+ delay: 350,
519
+ render: children
520
+ }), /* @__PURE__ */ jsx(TooltipLayer, { children: /* @__PURE__ */ jsx("span", {
521
+ className: "line-clamp-[8] min-w-0 whitespace-normal [overflow-wrap:anywhere]",
522
+ children: content
523
+ }) })]
524
+ });
525
+ }
526
+ /** "Medium" → "M", "Extra large"/"XL" → "XL", "Full bleed" stays readable. */
527
+ function shortToken(label) {
528
+ return {
529
+ None: "0",
530
+ Small: "S",
531
+ Medium: "M",
532
+ Large: "L"
533
+ }[label] ?? label;
534
+ }
535
+ /** Block Kit adapter: `field.scale` (or legacy `layout: "slider"` + numeric). */
536
+ function ScaleControl({ field, value, onChange, readOnly, id, invalid, onBlur }) {
537
+ const scale = fieldScale(field);
538
+ const unit = field.numeric?.unit;
539
+ const suffix = unit && ![
540
+ "px",
541
+ "%",
542
+ "rem",
543
+ "em",
544
+ "vw",
545
+ "vh"
546
+ ].includes(unit) ? unit : void 0;
547
+ return /* @__PURE__ */ jsx(ScaleSlider, {
548
+ scale,
549
+ value: value ?? field.initialValue,
550
+ onChange: (v) => onChange(v),
551
+ label: field.title,
552
+ id,
553
+ readOnly,
554
+ invalid,
555
+ suffix,
556
+ onBlur,
557
+ density: "form"
558
+ });
559
+ }
560
+ //#endregion
561
+ export { ScaleControl };
562
+
563
+ //# sourceMappingURL=scale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scale.js","names":[],"sources":["../../src/kit/controls/scale.tsx"],"sourcesContent":["/**\n * SCALE — one control, two modes (CPO D41), in the designer's CAPSULE: a muted 32px capsule, a soft fill to the value,\n * a 3px bar thumb at the fill's end (always right of the label), the label inside on the left (panels) and the value\n * inside on the right. Drag anywhere to slide (always snaps to the steps), ←→ / Home / End / PageUp / PageDown.\n * · Fixed only (default): steps snap; the readout shows the token (\"Large\"), its tooltip the size (88px); scrub it sideways.\n * · Fixed + custom (`allowCustom`): DIRECT edit, no mode switch — one click on the value puts the caret there with the\n * value selected; double-click anywhere or just start typing on the focused capsule does the same. \"24\", \"24px\", \"5%\",\n * \"xl\" apply live; Enter / Tab / blur commit, Esc reverts. The unit is plain suffix text (parsed from what you type;\n * with several units, clicking it cycles them). While typing, token chips under the capsule pick a step in one click;\n * ↑↓ step the tokens. A custom value shows a small accent dot and sits proportionally between its tokens.\n * Used by the Block Kit number control (`field.scale`, or the legacy `layout: \"slider\"`) and by the Visuals panels.\n *\n * Port of V2 HEAD 9829bf1 kit/controls/scale.tsx. V2 tokens map to the kit's (bg-muted → bg-kit-muted, --ring-focus →\n * the kit focus ring). V2's native `title=` hints become kit tooltips (the dashboard bans native title tooltips); the\n * custom value keeps ONE tooltip mounted and closes it while typing, so the input never remounts mid-edit.\n * Values are stored as they are (adapters/values.ts scaleToProd): a number, a token step's string, or { value, unit }.\n */\nimport * as React from \"react\";\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\nimport { Tooltip } from \"../ui/overlay\";\nimport { TooltipLayer, TooltipRoot } from \"../ui/tooltip-root\";\nimport { cn } from \"../lib/cn\";\nimport {\n customPx, customRules, defaultUnit, formatNumber, isCustomValue, isTokenScale, nearestTokenIndex, parseScaleInput, rangeOf, resolveScale, roundTo,\n scaleHint, UNIT_NAMES, validateCustom, fieldScale,\n} from \"../schema/scale\";\nimport type { ScaleCustomValue, ScaleSchema, ScaleUnit, ScaleValue } from \"../schema/types\";\nimport type { ControlProps } from \"../types\";\n\nexport interface ScaleSliderProps {\n scale: ScaleSchema;\n value: unknown;\n onChange: (v: ScaleValue) => void;\n /** Accessible name (the field title). */\n label: string;\n /** id for the primary control: the input when custom is allowed, otherwise the slider thumb. */\n id?: string;\n disabled?: boolean;\n readOnly?: boolean;\n invalid?: boolean;\n /** an error from outside (schema validation, a design-system demo); a parse error from typing wins */\n error?: string;\n /** \"form\" (Block Kit: label above, tick labels under the track) · \"panel\" (inspector row: inline scrub label). */\n density?: \"form\" | \"panel\";\n /** panel: show the label inline on the left (it scrubs). */\n inlineLabel?: boolean;\n icon?: React.ReactNode;\n /** panel: extra classes for the inline label. */\n labelClassName?: string;\n /** a unit word that isn't a CSS unit (\"items\", \"s\") — shown after numbers */\n suffix?: string;\n /** readout for range values (legacy `format`) */\n format?: (n: number) => string;\n onBlur?: () => void;\n /** Enter committed a typed value (custom fields) or was pressed on a fixed capsule — hosts like the canvas popover close on it */\n onEnter?: () => void;\n /** start in edit mode with the value selected (the canvas badge → in-place edit) */\n autoEdit?: boolean;\n /** Tab / Shift+Tab while typing: commit, then the host moves to the next / previous size (canvas popover sides) */\n onTab?: (dir: 1 | -1) => void;\n className?: string;\n}\n\nconst clamp = (n: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, n));\n\n/** Horizontal scrubbing (Figma-style) on any element: drag → whole steps; click without moving → onClick. */\nfunction useScrub(onSteps: (delta: number, e: PointerEvent | React.PointerEvent) => void, pxPerStep: number, onClick?: () => void) {\n const st = React.useRef<{ x: number; moved: boolean; last: number } | null>(null);\n return {\n onPointerDown(e: React.PointerEvent) {\n if (e.button !== 0) return;\n e.preventDefault();\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n st.current = { x: e.clientX, moved: false, last: 0 };\n },\n onPointerMove(e: React.PointerEvent) {\n const s = st.current;\n if (!s) return;\n const dx = e.clientX - s.x;\n if (!s.moved && Math.abs(dx) < 3) return;\n s.moved = true;\n const steps = Math.trunc(dx / pxPerStep);\n if (steps !== s.last) {\n onSteps(steps - s.last, e);\n s.last = steps;\n }\n },\n onPointerUp() {\n const s = st.current;\n st.current = null;\n if (s && !s.moved) onClick?.();\n },\n onPointerCancel() {\n st.current = null;\n },\n };\n}\n\nexport function ScaleSlider({\n scale,\n value,\n onChange,\n label,\n id,\n disabled,\n readOnly,\n invalid,\n error: externalError,\n inlineLabel,\n icon,\n labelClassName,\n suffix,\n format,\n onBlur,\n onEnter,\n autoEdit,\n onTab,\n className,\n}: ScaleSliderProps) {\n const uid = React.useId();\n const errId = `scale-err-${uid}`; // must NOT start with the field id: FieldShell strips its own `${id}-…` ids\n const tokens = isTokenScale(scale) ? scale.steps : null;\n const range = rangeOf(scale);\n const custom = customRules(scale);\n const r = resolveScale(scale, value, suffix);\n const isCustom = isCustomValue(value);\n const inert = disabled || readOnly;\n\n /* ── position on the track (0..1); -1 = can't place (custom % on a px scale) ── */\n const count = tokens ? tokens.length : 0;\n const nearest = isCustom ? (tokens ? nearestTokenIndex(scale, value as ScaleCustomValue) : -1) : -1;\n let pos: number;\n if (tokens) {\n const i = isCustom ? nearest : r.index ?? 0;\n pos = i < 0 ? -1 : count > 1 ? i / (count - 1) : 0;\n } else {\n const lo = range!.min;\n const hi = range!.max;\n const n = isCustom\n ? (value as ScaleCustomValue).unit === defaultUnit(scale)\n ? (value as ScaleCustomValue).value\n : NaN\n : typeof value === \"number\"\n ? value\n : lo;\n pos = Number.isNaN(n) ? -1 : (clamp(n, lo, hi) - lo) / (hi - lo || 1);\n }\n const step = range?.step ?? 1;\n\n /* ── value moves ── */\n const tokenAt = (i: number) => tokens![clamp(i, 0, count - 1)].value;\n const currentIndex = () => (isCustom ? Math.max(0, nearest) : r.index ?? 0);\n const numAt = (n: number) => roundTo(clamp(n, range!.min, range!.max), step);\n const currentNum = () => (typeof value === \"number\" ? value : isCustom && pos >= 0 ? (value as ScaleCustomValue).value : range!.min);\n const fromFraction = (f: number): ScaleValue => (tokens ? tokenAt(Math.round(f * (count - 1))) : numAt(range!.min + f * (range!.max - range!.min)));\n const nudgeScale = (d: number): ScaleValue => (tokens ? tokenAt(currentIndex() + d) : numAt(currentNum() + d * step));\n const backToScale = (): ScaleValue => (tokens ? tokenAt(nearest >= 0 ? nearest : Math.floor((count - 1) / 2)) : numAt(currentNum()));\n const commit = (v: ScaleValue) => {\n if (inert) return;\n if (JSON.stringify(v) !== JSON.stringify(value)) onChange(v);\n };\n\n /* ── custom values sit proportionally between the tokens they fall between (px interpolation) ── */\n let between: [number, number] | null = null;\n if (tokens && isCustom) {\n const px = customPx(value as ScaleCustomValue);\n const pts = tokens.map((t, i) => ({ i, px: t.px })).filter((t): t is { i: number; px: number } => t.px != null);\n if (px != null && pts.length >= 2) {\n let f = -1;\n if (px <= pts[0].px) f = pts[0].i;\n else if (px >= pts[pts.length - 1].px) f = pts[pts.length - 1].i;\n else\n for (let k = 0; k < pts.length - 1; k++) {\n const a = pts[k];\n const b = pts[k + 1];\n if (px >= a.px && px <= b.px) {\n f = a.i + ((px - a.px) / Math.max(1, b.px - a.px)) * (b.i - a.i);\n between = [a.i, b.i];\n break;\n }\n }\n pos = f < 0 ? -1 : count > 1 ? f / (count - 1) : 0;\n }\n }\n\n /* ── geometry: the fill starts AFTER the inline label, so the thumb never sits on the label ── */\n const trackRef = React.useRef<HTMLDivElement>(null);\n const thumbRef = React.useRef<HTMLDivElement>(null);\n const labelRef = React.useRef<HTMLSpanElement>(null);\n const [labelW, setLabelW] = React.useState(28);\n const valueRef = React.useRef<HTMLSpanElement>(null);\n const [valueW, setValueW] = React.useState(40);\n React.useLayoutEffect(() => {\n const el = valueRef.current;\n if (!el) return;\n const measure = () => setValueW(Math.ceil(el.getBoundingClientRect().width));\n measure();\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n return () => ro.disconnect();\n }, [custom]);\n React.useLayoutEffect(() => {\n const el = labelRef.current;\n if (!el) return setLabelW(28);\n const measure = () => setLabelW(Math.max(28, Math.ceil(el.getBoundingClientRect().width) + 4));\n measure();\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n return () => ro.disconnect();\n }, [inlineLabel, label]);\n const [dragging, setDragging] = React.useState(false);\n /* keyboard-only ring: follows the app's data-input-modality (D29), never after a click */\n const [kbFocus, setKbFocus] = React.useState(false);\n const fracFromX = (x: number) => {\n const rect = trackRef.current!.getBoundingClientRect();\n return clamp((x - rect.left - labelW) / Math.max(1, rect.width - labelW), 0, 1);\n };\n\n /* ── direct edit (custom fields): click the value, double-click anywhere, or just type ── */\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [draft, setDraft] = React.useState<string | null>(null);\n const [typedError, setError] = React.useState<string | null>(null);\n const error = typedError ?? externalError ?? null;\n const [unitHint, setUnitHint] = React.useState<ScaleUnit | undefined>(undefined);\n const [editing, setEditing] = React.useState(false);\n const editStart = React.useRef<unknown>(value);\n const justBegan = React.useRef(false); // the click that opened editing must not drop a caret over the selection\n const shownUnit: ScaleUnit | undefined = unitHint ?? (isCustom ? (value as ScaleCustomValue).unit : defaultUnit(scale) ?? custom?.units[0]);\n const fixedText = r.kind === \"number\" && format && typeof value === \"number\" ? format(value) : r.label;\n const valueText = isCustom ? formatNumber((value as ScaleCustomValue).value) : r.kind === \"token\" ? r.label : r.kind === \"number\" ? formatNumber(value as number) : \"\";\n const inputText = draft ?? valueText;\n const tokenOnly = !isCustom && r.kind === \"token\"; // unit suffix is meaningless next to \"Medium\"\n\n const beginEdit = (seed?: string) => {\n if (inert || !custom) return;\n if (!editing) editStart.current = value;\n setEditing(true);\n setError(null);\n const el = inputRef.current;\n if (!el) return;\n el.focus({ preventScroll: true }); // synchronous: the next keystrokes land in the input\n if (seed != null) {\n setDraft(seed);\n applyText(seed);\n requestAnimationFrame(() => inputRef.current?.setSelectionRange(seed.length, seed.length));\n } else {\n el.select();\n justBegan.current = true;\n }\n };\n const endEdit = (how: \"commit\" | \"revert\", focusThumb: boolean) => {\n if (how === \"revert\") commit(editStart.current as ScaleValue);\n setDraft(null);\n setError(null);\n setUnitHint(undefined);\n setEditing(false);\n if (focusThumb) thumbRef.current?.focus({ preventScroll: true });\n };\n /** Applies what's typed LIVE when it parses; otherwise shows the reason and keeps the last good value. */\n function applyText(text: string, showError = false) {\n if (!text.trim()) return setError(null);\n const res = parseScaleInput(scale, text, unitHint);\n if (res.ok) {\n setError(null);\n commit(res.value);\n return true;\n }\n // half-typed (\"x\" on the way to \"xl\") stays quiet; the reason shows when you try to commit\n setError(showError ? res.error : null);\n return false;\n }\n /** ↑↓ while editing: step the tokens (from a custom value, the next token in that direction). */\n const stepTokens = (dir: 1 | -1, e: { shiftKey: boolean }) => {\n if (tokens && isCustom) {\n const lo = between ? between[0] : nearest;\n const hi = between ? between[1] : nearest;\n commit(tokenAt(dir > 0 ? (between ? hi : nearest + 1) : between ? lo : nearest - 1));\n } else commit(nudgeScale(dir * (!tokens && e.shiftKey ? 10 : 1)));\n setDraft(null);\n setError(null);\n };\n /* keep the field's text in sync with outside changes (drag, undo) while not typing: adjusted during render when the\n value changes (V2 did this in an effect keyed on `value`) */\n const valueKey = JSON.stringify(value ?? null);\n const [seenValue, setSeenValue] = React.useState(valueKey);\n if (seenValue !== valueKey) {\n setSeenValue(valueKey);\n if (draft == null && !externalError && typedError !== null) setError(null);\n }\n\n const unitsList = custom?.units ?? [];\n const cycleUnit = () => {\n if (inert || unitsList.length < 2) return;\n const cur = shownUnit && unitsList.includes(shownUnit) ? shownUnit : unitsList[0];\n const next = unitsList[(unitsList.indexOf(cur) + 1) % unitsList.length];\n setUnitHint(next);\n if (isCustom) {\n const cv: ScaleCustomValue = { value: (value as ScaleCustomValue).value, unit: next };\n // 720px → % would be out of range: keep the value, select the number and let the next keystrokes be in the new unit\n if (validateCustom(scale, cv)) beginEdit();\n else {\n setError(null);\n commit(cv);\n }\n } else beginEdit();\n };\n\n const onTrackKey = (e: React.KeyboardEvent) => {\n if (inert) return;\n /* just start typing: a digit, a dot or a letter opens the value with that character */\n if (custom && !e.metaKey && !e.ctrlKey && !e.altKey && e.key.length === 1 && /[0-9.a-z%]/i.test(e.key)) {\n e.preventDefault();\n beginEdit(e.key);\n return;\n }\n if (e.key === \"Enter\" && onEnter) {\n e.preventDefault();\n onEnter();\n return;\n }\n const big = tokens ? 2 : Math.max(1, Math.round((range!.max - range!.min) / step / 10));\n const mult = e.shiftKey && !tokens ? 10 : 1;\n let next: ScaleValue | null = null;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowUp\") next = isCustom ? (tokens ? tokenAt(between ? between[1] : nearest + 1) : backToScale()) : nudgeScale(mult);\n else if (e.key === \"ArrowLeft\" || e.key === \"ArrowDown\") next = isCustom ? (tokens ? tokenAt(between ? between[0] : nearest - 1) : backToScale()) : nudgeScale(-mult);\n else if (e.key === \"PageUp\") next = nudgeScale(big);\n else if (e.key === \"PageDown\") next = nudgeScale(-big);\n else if (e.key === \"Home\") next = tokens ? tokenAt(0) : range!.min;\n else if (e.key === \"End\") next = tokens ? tokenAt(count - 1) : range!.max;\n if (next == null) return;\n e.preventDefault();\n commit(next);\n };\n\n /* aria-describedby: add/remove our error id without clobbering the ids FieldShell wires (help, ⓘ, issue). */\n React.useEffect(() => {\n for (const el of [inputRef.current, thumbRef.current]) {\n if (!el) continue;\n const own = (el.getAttribute(\"aria-describedby\") ?? \"\").split(\" \").filter((t) => t && t !== errId);\n const next = error ? [...own, errId] : own;\n if (next.length) el.setAttribute(\"aria-describedby\", next.join(\" \"));\n else el.removeAttribute(\"aria-describedby\");\n }\n }, [error, errId, editing]);\n\n React.useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect -- autoEdit focuses the input on mount (a DOM sync), once\n if (autoEdit) beginEdit();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /* fixed fields: scrub the readout sideways (Figma-style) */\n const scrubPx = tokens ? 16 : Math.max(3, Math.min(12, 160 / ((range!.max - range!.min) / step)));\n const readoutScrub = useScrub((delta, e) => !inert && commit(nudgeScale(delta * (!tokens && e.shiftKey ? 10 : 1))), scrubPx);\n\n const betweenText = isCustom\n ? tokens && between\n ? `Custom value · between ${tokens[between[0]].label} and ${tokens[between[1]].label}`\n : tokens && nearest >= 0\n ? `Custom value · near ${tokens[nearest].label}`\n : \"Custom value\"\n : undefined;\n const pct = Math.max(0, pos);\n const fillW = `calc(${labelW}px + (100% - ${labelW}px) * ${pct})`;\n const tooltip = r.kind === \"token\" && r.css ? scaleHint(r) : betweenText;\n const presets = custom ? scale.presets ?? [] : [];\n const showChips = editing && ((!!tokens && count <= 9) || presets.length > 0);\n\n return (\n <div className={cn(\"min-w-0\", className)} data-scale-mode={custom ? \"custom\" : \"fixed\"}>\n <div\n ref={trackRef}\n onPointerDown={(e) => {\n if (inert || e.button !== 0) return;\n if ((e.target as HTMLElement).closest(\"[data-scale-value]\")) return; // the value area edits, it doesn't scrub\n e.preventDefault();\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n setDragging(true);\n setKbFocus(false);\n if (editing) endEdit(\"commit\", false);\n commit(fromFraction(fracFromX(e.clientX)));\n thumbRef.current?.focus({ preventScroll: true });\n }}\n onPointerMove={(e) => dragging && commit(fromFraction(fracFromX(e.clientX)))}\n onPointerUp={() => setDragging(false)}\n onPointerCancel={() => setDragging(false)}\n onDoubleClick={() => beginEdit()}\n className={cn(\n \"group/cap relative flex h-8 w-full touch-none select-none items-center overflow-hidden rounded-kit-md bg-kit-muted transition-[background-color,box-shadow]\",\n inert ? \"cursor-not-allowed\" : \"cursor-ew-resize hover:bg-kit-hover\",\n disabled && \"opacity-50\",\n /* neutral, keyboard-only ring (never after a click); a quiet 1px inner line while typing; red only for an error */\n kbFocus && !editing && !error && \"shadow-[0_0_0_2px_var(--kit-surface),0_0_0_4px_var(--kit-focus-ring)]\",\n editing && !error && \"shadow-[inset_0_0_0_1px_var(--kit-line-strong)]\",\n error && \"shadow-[inset_0_0_0_1px_var(--kit-danger)]\",\n )}\n >\n {pos >= 0 ? (\n <div\n aria-hidden\n className={cn(\n \"absolute inset-y-0 left-0 rounded-l-kit-md bg-[color-mix(in_oklab,var(--kit-fg)_9%,transparent)]\",\n !dragging && \"motion-safe:transition-[width] motion-safe:duration-75\",\n )}\n style={{ width: fillW }}\n />\n ) : null}\n {/* thumb = the designer's 3px bar at the fill's end — always right of the label; it is the focusable slider */}\n <div\n ref={thumbRef}\n id={custom ? undefined : id}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={label}\n aria-valuemin={tokens ? 0 : range!.min}\n aria-valuemax={tokens ? count - 1 : range!.max}\n aria-valuenow={tokens ? currentIndex() : clamp(currentNum(), range!.min, range!.max)}\n aria-valuetext={r.spoken}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n aria-invalid={(!custom && invalid) || undefined}\n aria-orientation=\"horizontal\"\n onKeyDown={(e) => {\n setKbFocus(true);\n onTrackKey(e);\n }}\n onFocus={() => setKbFocus(document.documentElement.dataset.inputModality === \"keyboard\")}\n onBlur={() => {\n setKbFocus(false);\n onBlur?.();\n }}\n className={cn(\n \"absolute top-1/2 z-[1] h-4 w-[3px] -translate-x-full -translate-y-1/2 rounded-full bg-kit-fg-3 opacity-0 outline-none focus-visible:!shadow-none focus-visible:!outline-none\",\n !inert && \"group-hover/cap:opacity-100\",\n \"focus-visible:opacity-100\",\n dragging && \"opacity-100\",\n (pos < 0 || editing) && \"!opacity-0\",\n !dragging && \"motion-safe:transition-[left,opacity] motion-safe:duration-75\",\n )}\n style={{ left: `min(calc(${fillW} - 4px), calc(100% - ${valueW}px - 2px))` /* never on the label, never on the value */ }}\n />\n {inlineLabel ? (\n <span ref={labelRef} className={cn(\"pointer-events-none relative z-[2] flex min-w-0 shrink items-center gap-1.5 pl-3 pr-1 text-kit-xs text-kit-fg-2 [&_svg]:size-3.5\", labelClassName)}>\n {icon}\n <span className=\"truncate\">{label}</span>\n </span>\n ) : null}\n <span className=\"flex-1\" />\n\n {/* value — inside the capsule on the right */}\n {custom ? (\n /* one tooltip stays mounted and closes while typing, so the input never remounts mid-edit */\n <StableTip content={tooltip} off={editing}>\n <span\n ref={valueRef}\n data-scale-value\n onPointerDown={(e) => {\n if (inert || e.button !== 0) return;\n e.stopPropagation();\n if (!editing) {\n e.preventDefault();\n beginEdit(); // one click: caret in place, the value selected\n }\n }}\n onMouseUp={(e) => {\n if (!justBegan.current) return;\n justBegan.current = false;\n e.preventDefault();\n inputRef.current?.select();\n }}\n onMouseDown={(e) => {\n // the browser's own mousedown focus would pull focus back off the input we just focused\n if (!editing || e.target !== inputRef.current) e.preventDefault();\n }}\n className={cn(\"relative z-[2] flex h-full shrink-0 items-center gap-1 pl-2 pr-3\", !inert && \"cursor-text\")}\n >\n {isCustom && !editing ? <span aria-hidden className=\"size-1.5 shrink-0 rounded-full bg-kit-accent\" /> : null}\n <input\n ref={inputRef}\n id={id}\n inputMode=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n aria-label={`${label} value`}\n aria-description={betweenText}\n aria-invalid={!!error || invalid || undefined}\n readOnly={readOnly}\n disabled={disabled}\n tabIndex={-1}\n value={inputText}\n size={1}\n style={{ width: `${Math.max(1, inputText.length) + 0.5}ch` }}\n onFocus={() => {\n if (!editing) beginEdit();\n }}\n onBlur={() => {\n if (!editing) return;\n if (draft != null && draft.trim() && !parseScaleInput(scale, draft, unitHint).ok) endEdit(\"revert\", false);\n else endEdit(\"commit\", false);\n onBlur?.();\n }}\n onChange={(e) => {\n setDraft(e.target.value);\n applyText(e.target.value);\n }}\n onWheel={(e) => e.currentTarget.blur()}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Tab\" && onTab) {\n e.preventDefault();\n if (draft != null && !applyText(draft, true)) return; // stay and fix it\n endEdit(\"commit\", false);\n onTab(e.shiftKey ? -1 : 1);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (draft != null && !applyText(draft, true)) return; // stay and fix it\n endEdit(\"commit\", true);\n onEnter?.();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n endEdit(\"revert\", true);\n } else if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n stepTokens(e.key === \"ArrowUp\" ? 1 : -1, e);\n }\n }}\n className={cn(\n \"h-6 min-w-0 bg-transparent p-0 text-right text-kit-xs tabular-nums text-kit-fg outline-none placeholder:text-kit-fg-4 focus:shadow-none focus-visible:shadow-none focus-visible:outline-none selection:bg-kit-selected\",\n isCustom || editing ? \"font-normal\" : \"font-medium\",\n !editing && \"pointer-events-none\",\n )}\n />\n {!tokenOnly || editing ? (\n unitsList.length > 1 ? (\n <Tooltip content={`Units: ${unitsList.join(\", \")} — click to switch, or type one (24%)`}>\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={inert}\n onPointerDown={(e) => {\n e.stopPropagation();\n e.preventDefault(); // keep the caret in the value\n }}\n onClick={cycleUnit}\n aria-label={`Unit: ${shownUnit ? UNIT_NAMES[shownUnit] : \"none\"}. Switch unit`}\n className=\"rounded-kit-xs text-kit-xs text-kit-fg-3 transition-colors hover:text-kit-fg\"\n >\n {shownUnit}\n </button>\n </Tooltip>\n ) : (\n <span aria-hidden className=\"text-kit-xs text-kit-fg-3\">{shownUnit}</span>\n )\n ) : null}\n </span>\n </StableTip>\n ) : (\n <Tooltip content={tooltip}>\n <span\n ref={valueRef}\n aria-hidden\n {...(inert ? {} : readoutScrub)}\n className={cn(\"relative z-[2] whitespace-nowrap pl-2 pr-3 text-kit-xs font-medium tabular-nums text-kit-fg\", !inert && \"cursor-ew-resize\")}\n >\n {fixedText}\n </span>\n </Tooltip>\n )}\n </div>\n\n {/* quick tokens while typing — one click picks a step and leaves edit mode */}\n {showChips ? (\n <div role=\"group\" aria-label={`${label} steps`} className=\"mt-1 flex flex-wrap items-center gap-0.5\">\n {(tokens && count <= 9 ? tokens : []).map((t, i) => {\n const on = !isCustom && r.index === i;\n return (\n <Tooltip key={t.value} content={t.px != null ? `${t.title ?? t.label} · ${t.px}px` : t.css ? `${t.title ?? t.label} · ${t.css}` : t.title}>\n <button\n type=\"button\"\n tabIndex={-1}\n aria-pressed={on}\n onPointerDown={(e) => e.preventDefault() /* keep the caret until the click lands */}\n onClick={() => {\n commit(t.value);\n endEdit(\"commit\", true);\n }}\n className={cn(\n \"h-5 rounded-kit-sm px-1.5 text-kit-2xs transition-colors\",\n on ? \"bg-kit-selected font-medium text-kit-fg\" : \"text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg\",\n )}\n >\n {shortToken(t.label)}\n </button>\n </Tooltip>\n );\n })}\n {/* developer presets: extra quick picks after the steps, behind a hairline */}\n {presets.length ? (\n <>\n {tokens && count <= 9 ? <span aria-hidden className=\"mx-1 h-3 w-px bg-kit-line-strong\" /> : null}\n {presets.map((p, i) => {\n const pr = resolveScale(scale, p.value, suffix);\n const on = JSON.stringify(p.value) === JSON.stringify(value);\n return (\n <Tooltip key={`preset-${i}`} content={p.label ? `${p.label} · ${pr.label}` : pr.label}>\n <button\n type=\"button\"\n tabIndex={-1}\n aria-pressed={on}\n onPointerDown={(e) => e.preventDefault()}\n onClick={() => {\n commit(p.value);\n endEdit(\"commit\", true);\n }}\n className={cn(\"h-5 rounded-kit-sm px-1.5 text-kit-2xs tabular-nums transition-colors\", on ? \"bg-kit-selected font-medium text-kit-fg\" : \"text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg\")}\n >\n {pr.label}\n </button>\n </Tooltip>\n );\n })}\n </>\n ) : null}\n </div>\n ) : null}\n {error ? (\n <p id={errId} role=\"status\" aria-live=\"polite\" className=\"mt-1 text-kit-xs text-kit-danger-fg\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/**\n * A tooltip whose trigger never changes tree shape: `off` (typing) or no content keeps it closed instead of unwrapping\n * the child, which would remount the input inside it and drop the caret.\n */\nfunction StableTip({ content, off, children }: { content?: string; off?: boolean; children: React.ReactElement }) {\n const closed = off || !content;\n return (\n <TooltipRoot open={closed ? false : undefined}>\n <TooltipPrimitive.Trigger delay={350} render={children} />\n <TooltipLayer>\n <span className=\"line-clamp-[8] min-w-0 whitespace-normal [overflow-wrap:anywhere]\">{content}</span>\n </TooltipLayer>\n </TooltipRoot>\n );\n}\n\n/** \"Medium\" → \"M\", \"Extra large\"/\"XL\" → \"XL\", \"Full bleed\" stays readable. */\nfunction shortToken(label: string) {\n const map: Record<string, string> = { None: \"0\", Small: \"S\", Medium: \"M\", Large: \"L\" };\n return map[label] ?? label;\n}\n\n/** Block Kit adapter: `field.scale` (or legacy `layout: \"slider\"` + numeric). */\nexport function ScaleControl({ field, value, onChange, readOnly, id, invalid, onBlur }: ControlProps) {\n const scale = fieldScale(field)!;\n const unit = field.numeric?.unit;\n const suffix = unit && ![\"px\", \"%\", \"rem\", \"em\", \"vw\", \"vh\"].includes(unit) ? unit : undefined;\n return (\n <ScaleSlider\n scale={scale}\n value={value ?? field.initialValue}\n onChange={(v) => onChange(v)}\n label={field.title}\n id={id}\n readOnly={readOnly}\n invalid={invalid}\n suffix={suffix}\n onBlur={onBlur}\n density=\"form\"\n />\n );\n}\n"],"mappings":"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"}