@northlight/ui 2.41.0 → 2.42.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 (504) hide show
  1. package/lib/components/accordion/accordion-button.tsx +23 -0
  2. package/lib/components/accordion/accordion-item.tsx +9 -0
  3. package/lib/components/accordion/accordion-panel.tsx +13 -0
  4. package/lib/components/accordion/accordion.tsx +49 -0
  5. package/lib/components/accordion/index.ts +13 -0
  6. package/lib/components/alert/alert.tsx +64 -0
  7. package/lib/components/alert/index.ts +7 -0
  8. package/lib/components/alert/types.ts +7 -0
  9. package/lib/components/alert-dialog/index.ts +9 -0
  10. package/lib/components/aspect-ratio/aspect-ratio.tsx +17 -0
  11. package/lib/components/aspect-ratio/index.ts +2 -0
  12. package/lib/components/async-error/async-error.tsx +33 -0
  13. package/lib/components/async-error/index.ts +2 -0
  14. package/lib/components/async-error/types.ts +5 -0
  15. package/lib/components/avatar/avatar-badge.tsx +26 -0
  16. package/lib/components/avatar/avatar-group.tsx +56 -0
  17. package/lib/components/avatar/avatar.tsx +77 -0
  18. package/lib/components/avatar/index.ts +3 -0
  19. package/lib/components/avatar/types.ts +34 -0
  20. package/lib/components/badge/badge.tsx +69 -0
  21. package/lib/components/badge/index.ts +2 -0
  22. package/lib/components/badge/types.ts +15 -0
  23. package/lib/components/blinker/blinker.tsx +26 -0
  24. package/lib/components/blinker/index.ts +2 -0
  25. package/lib/components/blinker/types.ts +5 -0
  26. package/lib/components/box/index.ts +2 -0
  27. package/lib/components/breadcrumb/index.ts +6 -0
  28. package/lib/components/button/button.tsx +111 -0
  29. package/lib/components/button/index.ts +5 -0
  30. package/lib/components/button/types.ts +20 -0
  31. package/lib/components/card/index.ts +6 -0
  32. package/lib/components/carousel/carousel-arrow.tsx +27 -0
  33. package/lib/components/carousel/carousel-item.tsx +23 -0
  34. package/lib/components/carousel/carousel.tsx +223 -0
  35. package/lib/components/carousel/constants.ts +2 -0
  36. package/lib/components/carousel/index.ts +1 -0
  37. package/lib/components/carousel/types.ts +32 -0
  38. package/lib/components/center/index.ts +4 -0
  39. package/lib/components/checkbox/checkbox-field.tsx +75 -0
  40. package/lib/components/checkbox/checkbox-group-field.tsx +49 -0
  41. package/lib/components/checkbox/checkbox.tsx +54 -0
  42. package/lib/components/checkbox/index.ts +7 -0
  43. package/lib/components/checkbox/types.ts +31 -0
  44. package/lib/components/circle/index.ts +3 -0
  45. package/lib/components/circular-progress/index.ts +4 -0
  46. package/lib/components/clickable/clickable.tsx +56 -0
  47. package/lib/components/clickable/index.ts +2 -0
  48. package/lib/components/clickable/types.ts +7 -0
  49. package/lib/components/clipboard-input/clipboard-input.tsx +65 -0
  50. package/lib/components/clipboard-input/index.ts +2 -0
  51. package/lib/components/clipboard-input/types.ts +6 -0
  52. package/lib/components/close-button/index.ts +3 -0
  53. package/lib/components/code/index.ts +3 -0
  54. package/lib/components/color-picker/color-button.tsx +51 -0
  55. package/lib/components/color-picker/color-picker-field.tsx +37 -0
  56. package/lib/components/color-picker/color-picker.tsx +205 -0
  57. package/lib/components/color-picker/colors-expand-button.tsx +47 -0
  58. package/lib/components/color-picker/constants.ts +5 -0
  59. package/lib/components/color-picker/index.ts +3 -0
  60. package/lib/components/color-picker/types.ts +44 -0
  61. package/lib/components/combo-picker/combo-picker-field.tsx +99 -0
  62. package/lib/components/combo-picker/combo-picker.tsx +165 -0
  63. package/lib/components/combo-picker/index.ts +3 -0
  64. package/lib/components/combo-picker/types.ts +35 -0
  65. package/lib/components/container/index.ts +5 -0
  66. package/lib/components/createable-select-dropdown/createable-select-dropdown.tsx +282 -0
  67. package/lib/components/createable-select-dropdown/custom-components.tsx +44 -0
  68. package/lib/components/createable-select-dropdown/index.ts +1 -0
  69. package/lib/components/createable-select-dropdown/types.ts +76 -0
  70. package/lib/components/date-picker/components/calendar/calendar.tsx +56 -0
  71. package/lib/components/date-picker/components/calendar/components/calendar-cell.tsx +41 -0
  72. package/lib/components/date-picker/components/calendar/components/calendar-grid.tsx +52 -0
  73. package/lib/components/date-picker/components/calendar/components/day-labels.tsx +18 -0
  74. package/lib/components/date-picker/components/calendar/components/get-week-number-start-of-month.ts +68 -0
  75. package/lib/components/date-picker/components/calendar/components/index.ts +3 -0
  76. package/lib/components/date-picker/components/calendar/components/month-button.tsx +21 -0
  77. package/lib/components/date-picker/components/calendar/components/range-cell.tsx +75 -0
  78. package/lib/components/date-picker/components/calendar/components/standalone-calendar-grid.tsx +108 -0
  79. package/lib/components/date-picker/components/calendar/components/types.ts +43 -0
  80. package/lib/components/date-picker/components/calendar/components/utils.ts +5 -0
  81. package/lib/components/date-picker/components/calendar/constants.ts +14 -0
  82. package/lib/components/date-picker/components/calendar/date-select/index.ts +4 -0
  83. package/lib/components/date-picker/components/calendar/date-select/month-select.tsx +36 -0
  84. package/lib/components/date-picker/components/calendar/date-select/types.ts +29 -0
  85. package/lib/components/date-picker/components/calendar/date-select/utils.ts +33 -0
  86. package/lib/components/date-picker/components/calendar/date-select/year-select-calendar.tsx +17 -0
  87. package/lib/components/date-picker/components/calendar/date-select/year-select-range-calendar.tsx +19 -0
  88. package/lib/components/date-picker/components/calendar/date-select/year-select.tsx +31 -0
  89. package/lib/components/date-picker/components/calendar/index.ts +1 -0
  90. package/lib/components/date-picker/components/calendar/quick-navigation/adjust-range.tsx +227 -0
  91. package/lib/components/date-picker/components/calendar/quick-navigation/button-row.tsx +31 -0
  92. package/lib/components/date-picker/components/calendar/quick-navigation/date-button.tsx +32 -0
  93. package/lib/components/date-picker/components/calendar/quick-navigation/get-quick-select-options.ts +319 -0
  94. package/lib/components/date-picker/components/calendar/quick-navigation/index.ts +1 -0
  95. package/lib/components/date-picker/components/calendar/quick-navigation/move-button.tsx +23 -0
  96. package/lib/components/date-picker/components/calendar/quick-navigation/quick-select.tsx +113 -0
  97. package/lib/components/date-picker/components/calendar/quick-navigation/types.ts +59 -0
  98. package/lib/components/date-picker/components/calendar/quick-navigation/utils.ts +8 -0
  99. package/lib/components/date-picker/components/calendar/range-calendar.tsx +153 -0
  100. package/lib/components/date-picker/components/calendar/types.ts +19 -0
  101. package/lib/components/date-picker/components/date-field/date-field.tsx +51 -0
  102. package/lib/components/date-picker/components/date-field/date-segment.tsx +34 -0
  103. package/lib/components/date-picker/components/date-field/index.ts +4 -0
  104. package/lib/components/date-picker/components/date-field/styled-field.tsx +27 -0
  105. package/lib/components/date-picker/components/date-field/trigger.tsx +27 -0
  106. package/lib/components/date-picker/components/date-field/types.ts +25 -0
  107. package/lib/components/date-picker/components/date-field/utils.ts +15 -0
  108. package/lib/components/date-picker/components/index.ts +2 -0
  109. package/lib/components/date-picker/date-picker/date-picker-locale-wrapper.tsx +16 -0
  110. package/lib/components/date-picker/date-picker/date-picker.tsx +145 -0
  111. package/lib/components/date-picker/date-picker/date-range-picker.tsx +325 -0
  112. package/lib/components/date-picker/date-picker/index.ts +3 -0
  113. package/lib/components/date-picker/date-picker-field/date-picker-field.tsx +97 -0
  114. package/lib/components/date-picker/date-picker-field/date-range-picker-field.tsx +81 -0
  115. package/lib/components/date-picker/date-picker-field/index.ts +2 -0
  116. package/lib/components/date-picker/date-picker-field/utils.ts +9 -0
  117. package/lib/components/date-picker/index.ts +3 -0
  118. package/lib/components/date-picker/types.ts +108 -0
  119. package/lib/components/divider/index.ts +3 -0
  120. package/lib/components/drag-and-drop/drag-and-drop.tsx +15 -0
  121. package/lib/components/drag-and-drop/drag-handle.tsx +23 -0
  122. package/lib/components/drag-and-drop/drag-item.tsx +42 -0
  123. package/lib/components/drag-and-drop/draggable.tsx +94 -0
  124. package/lib/components/drag-and-drop/drop-zone.tsx +32 -0
  125. package/lib/components/drag-and-drop/droppable.tsx +58 -0
  126. package/lib/components/drag-and-drop/index.ts +17 -0
  127. package/lib/components/drag-and-drop/multi-sort.tsx +198 -0
  128. package/lib/components/drag-and-drop/sortable-container.tsx +26 -0
  129. package/lib/components/drag-and-drop/sortable-item.tsx +96 -0
  130. package/lib/components/drag-and-drop/sortable-list.tsx +163 -0
  131. package/lib/components/drag-and-drop/sortable.tsx +16 -0
  132. package/lib/components/drag-and-drop/types.ts +105 -0
  133. package/lib/components/drawer/index.ts +9 -0
  134. package/lib/components/editable/index.ts +8 -0
  135. package/lib/components/editable-text/editable-controls.tsx +72 -0
  136. package/lib/components/editable-text/editable-text.tsx +83 -0
  137. package/lib/components/editable-text/index.ts +2 -0
  138. package/lib/components/editable-text/types.ts +17 -0
  139. package/lib/components/fast-grid/fast-grid.tsx +123 -0
  140. package/lib/components/fast-grid/index.ts +2 -0
  141. package/lib/components/fast-grid/types.ts +26 -0
  142. package/lib/components/fast-list/fast-list.tsx +53 -0
  143. package/lib/components/fast-list/index.ts +2 -0
  144. package/lib/components/fast-list/types.ts +17 -0
  145. package/lib/components/file-picker/confirm-delete-modal.tsx +45 -0
  146. package/lib/components/file-picker/constants.ts +7 -0
  147. package/lib/components/file-picker/file-editor-modal.tsx +105 -0
  148. package/lib/components/file-picker/file-icon-button.tsx +14 -0
  149. package/lib/components/file-picker/file-item.tsx +207 -0
  150. package/lib/components/file-picker/file-picker-field.tsx +73 -0
  151. package/lib/components/file-picker/file-picker.tsx +365 -0
  152. package/lib/components/file-picker/index.ts +7 -0
  153. package/lib/components/file-picker/multi-file-list.tsx +88 -0
  154. package/lib/components/file-picker/multi-file-picker-field.tsx +95 -0
  155. package/lib/components/file-picker/multi-file-picker.tsx +95 -0
  156. package/lib/components/file-picker/multi-file-uploader.tsx +189 -0
  157. package/lib/components/file-picker/types.ts +132 -0
  158. package/lib/components/file-picker/utils.ts +283 -0
  159. package/lib/components/flex/index.ts +4 -0
  160. package/lib/components/flip-button/flip-button-group-field.tsx +58 -0
  161. package/lib/components/flip-button/flip-button-group.tsx +70 -0
  162. package/lib/components/flip-button/flip-button.tsx +185 -0
  163. package/lib/components/flip-button/index.ts +4 -0
  164. package/lib/components/flip-button/types.ts +100 -0
  165. package/lib/components/flip-button/utils.ts +45 -0
  166. package/lib/components/form/field.tsx +147 -0
  167. package/lib/components/form/form.tsx +210 -0
  168. package/lib/components/form/index.ts +5 -0
  169. package/lib/components/form/trim-form-values.ts +20 -0
  170. package/lib/components/form/types.ts +99 -0
  171. package/lib/components/form/use-set-value-refreshed.ts +12 -0
  172. package/lib/components/form-control/form-label.tsx +29 -0
  173. package/lib/components/form-control/index.ts +7 -0
  174. package/lib/components/form-control/types.ts +5 -0
  175. package/lib/components/grid/index.ts +4 -0
  176. package/lib/components/heading/index.ts +3 -0
  177. package/lib/components/highlight/index.ts +1 -0
  178. package/lib/components/icon/icon.tsx +38 -0
  179. package/lib/components/icon/index.ts +2 -0
  180. package/lib/components/icon/types.ts +7 -0
  181. package/lib/components/icon-button/icon-button.tsx +45 -0
  182. package/lib/components/icon-button/index.ts +2 -0
  183. package/lib/components/icon-button/types.ts +6 -0
  184. package/lib/components/image/index.ts +5 -0
  185. package/lib/components/index.ts +94 -0
  186. package/lib/components/input/index.ts +19 -0
  187. package/lib/components/intent-button/index.ts +1 -0
  188. package/lib/components/intent-button/intent-button.tsx +118 -0
  189. package/lib/components/intent-button/timeout-progress-circle.tsx +48 -0
  190. package/lib/components/intent-button/types.ts +16 -0
  191. package/lib/components/kbd/index.ts +3 -0
  192. package/lib/components/keyframes/index.ts +3 -0
  193. package/lib/components/link/index.ts +3 -0
  194. package/lib/components/link-overlay/index.ts +4 -0
  195. package/lib/components/list/index.ts +7 -0
  196. package/lib/components/mark/index.ts +1 -0
  197. package/lib/components/mediatool-theme-provider/index.ts +2 -0
  198. package/lib/components/mediatool-theme-provider/mediatool-theme-provider.tsx +28 -0
  199. package/lib/components/mediatool-theme-provider/types.ts +8 -0
  200. package/lib/components/menu/index.ts +13 -0
  201. package/lib/components/menu/menu.tsx +103 -0
  202. package/lib/components/menu/types.ts +7 -0
  203. package/lib/components/modal/index.ts +12 -0
  204. package/lib/components/modal/modal-base.tsx +22 -0
  205. package/lib/components/modal/modal-body.tsx +6 -0
  206. package/lib/components/modal/modal.tsx +18 -0
  207. package/lib/components/modal/types.ts +9 -0
  208. package/lib/components/notification-icon-button/index.ts +2 -0
  209. package/lib/components/notification-icon-button/notification-icon-button.tsx +57 -0
  210. package/lib/components/notification-icon-button/types.ts +8 -0
  211. package/lib/components/number-input/advanced-parse-float.ts +30 -0
  212. package/lib/components/number-input/index.ts +9 -0
  213. package/lib/components/number-input/number-input-field.tsx +74 -0
  214. package/lib/components/number-input/number-input-stepper.tsx +47 -0
  215. package/lib/components/number-input/number-input.tsx +67 -0
  216. package/lib/components/number-input/types.ts +37 -0
  217. package/lib/components/organization-logo/index.ts +2 -0
  218. package/lib/components/organization-logo/organization-logo.tsx +46 -0
  219. package/lib/components/organization-logo/types.ts +8 -0
  220. package/lib/components/overflow-group/index.ts +3 -0
  221. package/lib/components/overflow-group/overflow-group.tsx +189 -0
  222. package/lib/components/overflow-group/types.ts +10 -0
  223. package/lib/components/overflow-group/use-overflow-group.ts +12 -0
  224. package/lib/components/pin-input/index.ts +5 -0
  225. package/lib/components/pin-input/pin-input.tsx +31 -0
  226. package/lib/components/pin-input/types.ts +10 -0
  227. package/lib/components/popover/index.ts +11 -0
  228. package/lib/components/popover/popover.tsx +6 -0
  229. package/lib/components/portal/index.ts +3 -0
  230. package/lib/components/portal/render-in-portal.tsx +17 -0
  231. package/lib/components/progress/constants.ts +2 -0
  232. package/lib/components/progress/index.ts +2 -0
  233. package/lib/components/progress/loading-bar.tsx +93 -0
  234. package/lib/components/progress/progress-bar.tsx +36 -0
  235. package/lib/components/progress/types.ts +8 -0
  236. package/lib/components/progress/utils.ts +17 -0
  237. package/lib/components/radio/index.ts +8 -0
  238. package/lib/components/radio/radio-group-field.tsx +49 -0
  239. package/lib/components/radio/radio-group.tsx +30 -0
  240. package/lib/components/radio/radio.tsx +23 -0
  241. package/lib/components/radio/types.ts +33 -0
  242. package/lib/components/range-slider/index.ts +7 -0
  243. package/lib/components/resize-handle/index.ts +1 -0
  244. package/lib/components/resize-handle/resize-handle.tsx +26 -0
  245. package/lib/components/search-bar/get-components.tsx +76 -0
  246. package/lib/components/search-bar/index.ts +3 -0
  247. package/lib/components/search-bar/search-bar-field.tsx +70 -0
  248. package/lib/components/search-bar/search-bar.tsx +127 -0
  249. package/lib/components/search-bar/styles.ts +49 -0
  250. package/lib/components/search-bar/types.ts +53 -0
  251. package/lib/components/select/get-matching-value.ts +23 -0
  252. package/lib/components/select/index.ts +13 -0
  253. package/lib/components/select/select-field.tsx +89 -0
  254. package/lib/components/select/select.tsx +209 -0
  255. package/lib/components/select/sortable-select-values.tsx +49 -0
  256. package/lib/components/select/sortable-select.tsx +428 -0
  257. package/lib/components/select/types.ts +67 -0
  258. package/lib/components/show/index.ts +4 -0
  259. package/lib/components/simple-grid/index.ts +3 -0
  260. package/lib/components/skeleton/index.ts +5 -0
  261. package/lib/components/slider/index.ts +7 -0
  262. package/lib/components/spinner/index.ts +2 -0
  263. package/lib/components/spinner/spinner.tsx +15 -0
  264. package/lib/components/spinner/types.ts +3 -0
  265. package/lib/components/split-pane/index.ts +4 -0
  266. package/lib/components/split-pane/pane-divider.tsx +25 -0
  267. package/lib/components/split-pane/pane-item.tsx +14 -0
  268. package/lib/components/split-pane/split-pane.tsx +75 -0
  269. package/lib/components/split-pane/types.ts +10 -0
  270. package/lib/components/stack/index.ts +7 -0
  271. package/lib/components/stat/index.ts +8 -0
  272. package/lib/components/status-pin/index.ts +2 -0
  273. package/lib/components/status-pin/pin-size-map.ts +7 -0
  274. package/lib/components/status-pin/pin-variant-map.ts +12 -0
  275. package/lib/components/status-pin/status-pin.tsx +55 -0
  276. package/lib/components/status-pin/types.ts +7 -0
  277. package/lib/components/step-stack/index.ts +1 -0
  278. package/lib/components/step-stack/step-stack.tsx +113 -0
  279. package/lib/components/step-stack/types.ts +17 -0
  280. package/lib/components/steps/index.ts +10 -0
  281. package/lib/components/steps/step-list.tsx +30 -0
  282. package/lib/components/steps/step-panel.tsx +15 -0
  283. package/lib/components/steps/step.tsx +52 -0
  284. package/lib/components/steps/steps.tsx +34 -0
  285. package/lib/components/steps/types.ts +12 -0
  286. package/lib/components/switch/index.ts +3 -0
  287. package/lib/components/switch/switch-field.tsx +74 -0
  288. package/lib/components/switch/switch.tsx +41 -0
  289. package/lib/components/switch/types.ts +18 -0
  290. package/lib/components/table/index.ts +22 -0
  291. package/lib/components/table/table.tsx +31 -0
  292. package/lib/components/table/types.ts +5 -0
  293. package/lib/components/tabs/index.ts +12 -0
  294. package/lib/components/tabs/tab-panel.tsx +14 -0
  295. package/lib/components/tabs/tab.tsx +31 -0
  296. package/lib/components/tabs/tabs.tsx +76 -0
  297. package/lib/components/tabs/types.ts +12 -0
  298. package/lib/components/tag/index.ts +9 -0
  299. package/lib/components/tag/overflow-indicator.tsx +11 -0
  300. package/lib/components/tag/tag-group.tsx +57 -0
  301. package/lib/components/tag/tag.tsx +97 -0
  302. package/lib/components/tag/types.ts +15 -0
  303. package/lib/components/tags-input/index.ts +2 -0
  304. package/lib/components/tags-input/tags-input-styles.ts +35 -0
  305. package/lib/components/tags-input/tags-input.tsx +147 -0
  306. package/lib/components/tags-input/types.ts +20 -0
  307. package/lib/components/text/index.ts +3 -0
  308. package/lib/components/text-field/formatted-number-input-field.tsx +54 -0
  309. package/lib/components/text-field/formatted-number-input.tsx +167 -0
  310. package/lib/components/text-field/index.ts +5 -0
  311. package/lib/components/text-field/masked-text-input.tsx +37 -0
  312. package/lib/components/text-field/round-to-precision.ts +4 -0
  313. package/lib/components/text-field/text-field.tsx +61 -0
  314. package/lib/components/text-field/types.ts +60 -0
  315. package/lib/components/textarea/index.ts +3 -0
  316. package/lib/components/textarea/textarea-field.tsx +34 -0
  317. package/lib/components/textarea/textarea.tsx +27 -0
  318. package/lib/components/textarea/types.ts +22 -0
  319. package/lib/components/toast/index.ts +3 -0
  320. package/lib/components/toast/toast.tsx +75 -0
  321. package/lib/components/toast/types.ts +16 -0
  322. package/lib/components/toast/use-toast.tsx +57 -0
  323. package/lib/components/toolbox/index.ts +5 -0
  324. package/lib/components/toolbox/toolbox-content.tsx +23 -0
  325. package/lib/components/toolbox/toolbox-footer.tsx +18 -0
  326. package/lib/components/toolbox/toolbox-header.tsx +31 -0
  327. package/lib/components/toolbox/toolbox.tsx +132 -0
  328. package/lib/components/toolbox/types.ts +34 -0
  329. package/lib/components/tooltip/index.ts +1 -0
  330. package/lib/components/tooltip/tooltip.tsx +207 -0
  331. package/lib/components/tooltip/types.ts +9 -0
  332. package/lib/components/transitions/collapse.tsx +78 -0
  333. package/lib/components/transitions/constants.ts +2 -0
  334. package/lib/components/transitions/fade.tsx +72 -0
  335. package/lib/components/transitions/index.ts +6 -0
  336. package/lib/components/transitions/scale-fade.tsx +70 -0
  337. package/lib/components/transitions/slide-fade.tsx +43 -0
  338. package/lib/components/transitions/slide.tsx +37 -0
  339. package/lib/components/transitions/types.ts +37 -0
  340. package/lib/components/transitions/utils.ts +103 -0
  341. package/lib/components/types/color/index.ts +24 -0
  342. package/lib/components/types/index.ts +2 -0
  343. package/lib/components/types/toastIconMap/index.ts +20 -0
  344. package/lib/components/types/tooltipIconMap/index.ts +21 -0
  345. package/lib/components/typography/body/index.ts +2 -0
  346. package/lib/components/typography/body/p.tsx +31 -0
  347. package/lib/components/typography/body/types.ts +5 -0
  348. package/lib/components/typography/headings/h1.tsx +29 -0
  349. package/lib/components/typography/headings/h2.tsx +30 -0
  350. package/lib/components/typography/headings/h3.tsx +29 -0
  351. package/lib/components/typography/headings/h4.tsx +29 -0
  352. package/lib/components/typography/headings/h5.tsx +29 -0
  353. package/lib/components/typography/headings/h6.tsx +29 -0
  354. package/lib/components/typography/headings/index.ts +7 -0
  355. package/lib/components/typography/headings/types.ts +3 -0
  356. package/lib/components/typography/index.ts +6 -0
  357. package/lib/components/typography/labels/index.ts +2 -0
  358. package/lib/components/typography/labels/label.tsx +39 -0
  359. package/lib/components/typography/labels/types.ts +6 -0
  360. package/lib/components/typography/numvals/index.ts +1 -0
  361. package/lib/components/typography/numvals/numval.tsx +33 -0
  362. package/lib/components/typography/stylized/blockquote.tsx +32 -0
  363. package/lib/components/typography/stylized/capitalized.tsx +37 -0
  364. package/lib/components/typography/stylized/index.ts +5 -0
  365. package/lib/components/typography/stylized/lead.tsx +37 -0
  366. package/lib/components/typography/stylized/small.tsx +37 -0
  367. package/lib/components/typography/stylized/tiny.tsx +37 -0
  368. package/lib/components/typography/types.ts +11 -0
  369. package/lib/components/visually-hidden/index.ts +4 -0
  370. package/lib/components/wrap/index.ts +4 -0
  371. package/lib/general.d.ts +27 -0
  372. package/lib/hooks/index.ts +26 -0
  373. package/lib/hooks/use-arrow-focus/index.ts +76 -0
  374. package/lib/hooks/use-boolean/index.ts +3 -0
  375. package/lib/hooks/use-breakpoint-value/index.ts +4 -0
  376. package/lib/hooks/use-clipboard/index.ts +3 -0
  377. package/lib/hooks/use-controllable/index.ts +4 -0
  378. package/lib/hooks/use-controller/index.ts +3 -0
  379. package/lib/hooks/use-debounce/index.ts +16 -0
  380. package/lib/hooks/use-did-update-effect/index.ts +12 -0
  381. package/lib/hooks/use-disclosure/index.ts +3 -0
  382. package/lib/hooks/use-field-array/index.ts +3 -0
  383. package/lib/hooks/use-form/index.ts +3 -0
  384. package/lib/hooks/use-form-context/index.ts +3 -0
  385. package/lib/hooks/use-form-state/index.ts +3 -0
  386. package/lib/hooks/use-interval/index.ts +3 -0
  387. package/lib/hooks/use-loading-message/index.ts +15 -0
  388. package/lib/hooks/use-media-query/index.ts +3 -0
  389. package/lib/hooks/use-merge-refs/index.ts +3 -0
  390. package/lib/hooks/use-outside-click/index.ts +3 -0
  391. package/lib/hooks/use-outside-rect-click/index.ts +98 -0
  392. package/lib/hooks/use-prefers-reduced-motion/index.ts +3 -0
  393. package/lib/hooks/use-resize-width/index.ts +44 -0
  394. package/lib/hooks/use-screen-size/index.ts +12 -0
  395. package/lib/hooks/use-scroll-to-bottom/index.ts +18 -0
  396. package/lib/hooks/use-scroll-to-bottom/utils/smooth-scroll-to-bottom.ts +17 -0
  397. package/lib/hooks/use-select-callbacks/index.ts +2 -0
  398. package/lib/hooks/use-select-callbacks/types.ts +25 -0
  399. package/lib/hooks/use-select-callbacks/use-select-callbacks.ts +43 -0
  400. package/lib/hooks/use-theme/index.ts +3 -0
  401. package/lib/hooks/use-token/index.ts +3 -0
  402. package/lib/hooks/use-watch/index.ts +3 -0
  403. package/lib/index.ts +6 -0
  404. package/lib/internal-components/index.ts +1 -0
  405. package/lib/internal-components/input-group-wrapper/index.ts +2 -0
  406. package/lib/internal-components/input-group-wrapper/input-group-wrapper.tsx +24 -0
  407. package/lib/internal-components/input-group-wrapper/types.ts +4 -0
  408. package/lib/theme/components/alert/index.ts +94 -0
  409. package/lib/theme/components/avatar/get-avatar-bg-color.ts +11 -0
  410. package/lib/theme/components/avatar/index.ts +158 -0
  411. package/lib/theme/components/badge/index.ts +80 -0
  412. package/lib/theme/components/blinker/index.ts +67 -0
  413. package/lib/theme/components/breadcrumb/index.ts +22 -0
  414. package/lib/theme/components/button/index.ts +205 -0
  415. package/lib/theme/components/calendar/index.ts +47 -0
  416. package/lib/theme/components/carousel/index.ts +30 -0
  417. package/lib/theme/components/checkbox/index.ts +90 -0
  418. package/lib/theme/components/clipboard-input/index.ts +38 -0
  419. package/lib/theme/components/close-button/index.ts +25 -0
  420. package/lib/theme/components/color-picker/index.ts +58 -0
  421. package/lib/theme/components/date-picker/index.ts +70 -0
  422. package/lib/theme/components/drag-and-drop/index.ts +23 -0
  423. package/lib/theme/components/editable-text/index.ts +82 -0
  424. package/lib/theme/components/file-picker/index.ts +111 -0
  425. package/lib/theme/components/flip-button/index.ts +167 -0
  426. package/lib/theme/components/icon/index.ts +22 -0
  427. package/lib/theme/components/index.ts +40 -0
  428. package/lib/theme/components/input/index.ts +223 -0
  429. package/lib/theme/components/link/index.ts +16 -0
  430. package/lib/theme/components/menu/index.ts +50 -0
  431. package/lib/theme/components/modal/index.ts +49 -0
  432. package/lib/theme/components/notification-icon-button/index.ts +52 -0
  433. package/lib/theme/components/number-input/index.ts +118 -0
  434. package/lib/theme/components/pin-input/index.ts +52 -0
  435. package/lib/theme/components/popover/index.ts +10 -0
  436. package/lib/theme/components/progress-bar/index.ts +12 -0
  437. package/lib/theme/components/radio/index.ts +73 -0
  438. package/lib/theme/components/select/custom-select.ts +44 -0
  439. package/lib/theme/components/select/index.ts +65 -0
  440. package/lib/theme/components/spinner/index.ts +12 -0
  441. package/lib/theme/components/split-pane/index.ts +33 -0
  442. package/lib/theme/components/steps/index.ts +2 -0
  443. package/lib/theme/components/steps/step/index.ts +63 -0
  444. package/lib/theme/components/steps/step-list/index.ts +13 -0
  445. package/lib/theme/components/switch/index.ts +23 -0
  446. package/lib/theme/components/table/index.ts +81 -0
  447. package/lib/theme/components/tabs/index.ts +115 -0
  448. package/lib/theme/components/tag/index.ts +81 -0
  449. package/lib/theme/components/textarea/index.ts +62 -0
  450. package/lib/theme/components/toolbox/index.ts +64 -0
  451. package/lib/theme/components/tooltip/index.ts +68 -0
  452. package/lib/theme/components/typography/body/index.ts +1 -0
  453. package/lib/theme/components/typography/body/p.ts +32 -0
  454. package/lib/theme/components/typography/headings/h1.ts +20 -0
  455. package/lib/theme/components/typography/headings/h2.ts +20 -0
  456. package/lib/theme/components/typography/headings/h3.ts +20 -0
  457. package/lib/theme/components/typography/headings/h4.ts +20 -0
  458. package/lib/theme/components/typography/headings/h5.ts +20 -0
  459. package/lib/theme/components/typography/headings/h6.ts +20 -0
  460. package/lib/theme/components/typography/headings/index.ts +6 -0
  461. package/lib/theme/components/typography/index.ts +5 -0
  462. package/lib/theme/components/typography/labels/index.ts +1 -0
  463. package/lib/theme/components/typography/labels/label.ts +71 -0
  464. package/lib/theme/components/typography/numvals/index.ts +1 -0
  465. package/lib/theme/components/typography/numvals/numval.ts +95 -0
  466. package/lib/theme/components/typography/stylized/blockquote.ts +17 -0
  467. package/lib/theme/components/typography/stylized/capitalized.ts +17 -0
  468. package/lib/theme/components/typography/stylized/index.ts +5 -0
  469. package/lib/theme/components/typography/stylized/lead.ts +17 -0
  470. package/lib/theme/components/typography/stylized/small.ts +17 -0
  471. package/lib/theme/components/typography/stylized/tiny.ts +17 -0
  472. package/lib/theme/global/scrollbar.ts +23 -0
  473. package/lib/theme/index.ts +67 -0
  474. package/lib/theme/process-color-scheme-based-on-theme.ts +24 -0
  475. package/lib/theme/skins/camphouse-light/index.ts +34 -0
  476. package/lib/theme/skins/index.ts +3 -0
  477. package/lib/theme/skins/tott/index.ts +30 -0
  478. package/lib/theme/skins/webapp/index.ts +34 -0
  479. package/lib/types/color/color.ts +24 -0
  480. package/lib/types/color/index.ts +1 -0
  481. package/lib/types/index.ts +2 -0
  482. package/lib/types/input-field/index.ts +1 -0
  483. package/lib/types/input-field/input-field.ts +4 -0
  484. package/lib/utils/add-alpha/index.ts +10 -0
  485. package/lib/utils/clamp/index.ts +2 -0
  486. package/lib/utils/debounce/create-debounce-function-instance.ts +18 -0
  487. package/lib/utils/debounce/index.ts +1 -0
  488. package/lib/utils/get-children-with-props/index.ts +17 -0
  489. package/lib/utils/get-children-with-props/pass-props-to-child.ts +10 -0
  490. package/lib/utils/get-consistent-random-color-from-string/index.ts +26 -0
  491. package/lib/utils/get-contrast-color/index.ts +34 -0
  492. package/lib/utils/get-field-error/index.ts +12 -0
  493. package/lib/utils/get-initials/index.ts +6 -0
  494. package/lib/utils/get-shades/index.ts +31 -0
  495. package/lib/utils/highlight/index.ts +9 -0
  496. package/lib/utils/index.ts +13 -0
  497. package/lib/utils/luminosity/index.ts +21 -0
  498. package/lib/utils/ring/index.ts +10 -0
  499. package/lib/utils/use-current-theme/index.ts +10 -0
  500. package/package.json +6 -4
  501. package/sandbox/lib/types.ts +3 -2
  502. package/sandbox/lib/viewer/sandbox-viewer.css +758 -132
  503. package/sandbox/lib/viewer/sandbox-viewer.tsx +772 -185
  504. package/sandbox/package.json +4 -0
@@ -1,180 +1,563 @@
1
+ /* Design System Variables */
2
+ :root {
3
+ --sandbox-bg: #faf9f7;
4
+ --sandbox-card: #f5f4f0;
5
+ --sandbox-secondary: #edebe5;
6
+ --sandbox-border: #e5e0d5;
7
+ --sandbox-input: #eae5dc;
8
+ --sandbox-accent: #f97316;
9
+ --sandbox-accent-hover: #ea580c;
10
+ --sandbox-accent-light: rgba(249, 115, 22, 0.1);
11
+ --sandbox-text: #1c1917;
12
+ --sandbox-text-muted: #766f65;
13
+ --sandbox-text-secondary: #a8a29e;
14
+ --sandbox-destructive: #dc2626;
15
+ --sandbox-destructive-light: #fef2f2;
16
+ --sandbox-radius-lg: 12px;
17
+ --sandbox-radius-md: 10px;
18
+ --sandbox-radius-sm: 8px;
19
+ }
20
+
1
21
  * {
2
22
  box-sizing: border-box;
3
23
  }
4
24
 
5
25
  body {
6
26
  margin: 0;
7
- background: #f8fafc;
27
+ background: var(--sandbox-bg);
28
+ font-family: Arial, Helvetica, sans-serif;
8
29
  }
9
30
 
31
+ /* Main Layout */
10
32
  .sandbox-viewer {
11
33
  display: flex;
12
34
  height: 100vh;
13
- font-family:
14
- -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
15
- color: #1e293b;
35
+ font-family: Arial, Helvetica, sans-serif;
36
+ color: var(--sandbox-text);
16
37
  }
17
38
 
39
+ /* Sidebar */
18
40
  .sandbox-sidebar {
19
- width: 220px;
20
- background: #ffffff;
21
- border-right: 1px solid #e2e8f0;
22
- padding: 20px 0;
23
- overflow-y: auto;
41
+ width: 256px;
42
+ background: var(--sandbox-bg);
43
+ border-right: 1px solid var(--sandbox-border);
44
+ display: flex;
45
+ flex-direction: column;
24
46
  flex-shrink: 0;
47
+ overflow: hidden;
48
+ }
49
+
50
+ .sandbox-logo {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 8px;
54
+ padding: 16px;
55
+ border-bottom: 1px solid var(--sandbox-border);
56
+ }
57
+
58
+ .sandbox-logo-icon {
59
+ width: 28px;
60
+ height: 28px;
61
+ border-radius: var(--sandbox-radius-sm);
62
+ background: var(--sandbox-text);
63
+ color: var(--sandbox-bg);
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ font-size: 14px;
68
+ font-weight: bold;
69
+ }
70
+
71
+ .sandbox-logo-text {
72
+ font-weight: 600;
73
+ font-size: 15px;
74
+ color: var(--sandbox-text);
75
+ letter-spacing: -0.01em;
25
76
  }
26
77
 
27
- .sandbox-search {
28
- padding: 0 12px 16px;
78
+ /* Sidebar Search */
79
+ .sandbox-sidebar-search {
80
+ padding: 12px;
29
81
  }
30
82
 
31
- .sandbox-search-input {
83
+ .sandbox-sidebar-search-input {
32
84
  width: 100%;
33
- padding: 8px 12px;
85
+ padding: 10px 12px;
34
86
  font-size: 13px;
35
- border: 1px solid #e2e8f0;
36
- border-radius: 6px;
37
- background: #f8fafc;
38
- color: #1e293b;
87
+ border: 1px solid var(--sandbox-border);
88
+ border-radius: var(--sandbox-radius-md);
89
+ background: var(--sandbox-bg);
90
+ color: var(--sandbox-text);
39
91
  outline: none;
40
92
  transition: all 0.15s ease;
41
93
  }
42
94
 
43
- .sandbox-search-input::placeholder {
44
- color: #94a3b8;
95
+ .sandbox-sidebar-search-input::placeholder {
96
+ color: var(--sandbox-text-secondary);
45
97
  }
46
98
 
47
- .sandbox-search-input:focus {
48
- border-color: #7c3aed;
49
- background: #ffffff;
50
- box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.1);
99
+ .sandbox-sidebar-search-input:focus {
100
+ border-color: var(--sandbox-accent);
101
+ box-shadow: 0 0 0 3px var(--sandbox-accent-light);
51
102
  }
52
103
 
53
- .sandbox-title {
54
- font-size: 11px;
104
+ /* Sidebar Navigation */
105
+ .sandbox-nav {
106
+ flex: 1;
107
+ overflow-y: auto;
108
+ padding: 0 12px;
109
+ }
110
+
111
+ .sandbox-nav-section {
112
+ margin-bottom: 16px;
113
+ }
114
+
115
+ .sandbox-nav-title {
116
+ font-size: 10px;
55
117
  font-weight: 600;
56
118
  text-transform: uppercase;
57
- color: #94a3b8;
58
- padding: 0 20px 16px;
119
+ color: var(--sandbox-text-secondary);
120
+ padding: 8px 12px;
59
121
  letter-spacing: 0.08em;
60
122
  }
61
123
 
62
- .sandbox-component {
63
- display: block;
124
+ .sandbox-nav-item {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 12px;
64
128
  width: 100%;
65
- padding: 10px 20px;
129
+ padding: 10px 12px;
66
130
  background: none;
67
131
  border: none;
132
+ border-radius: var(--sandbox-radius-md);
68
133
  text-align: left;
69
134
  cursor: pointer;
70
135
  font-size: 14px;
71
- color: #475569;
136
+ color: var(--sandbox-text-muted);
72
137
  transition: all 0.15s ease;
73
138
  }
74
139
 
75
- .sandbox-component:hover {
76
- background: #f1f5f9;
77
- color: #1e293b;
140
+ .sandbox-nav-item:hover {
141
+ background: var(--sandbox-secondary);
142
+ color: var(--sandbox-text);
78
143
  }
79
144
 
80
- .sandbox-component.selected {
81
- background: linear-gradient(to right, #ede9fe, #f1f5f9);
82
- color: #6d28d9;
145
+ .sandbox-nav-item.selected {
146
+ background: var(--sandbox-secondary);
147
+ color: var(--sandbox-text);
83
148
  font-weight: 500;
84
- border-left: 3px solid #7c3aed;
85
- padding-left: 17px;
86
149
  }
87
150
 
88
- .sandbox-main {
151
+ .sandbox-nav-item-icon {
152
+ width: 16px;
153
+ height: 16px;
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: center;
157
+ font-size: 12px;
158
+ border: 1px dashed var(--sandbox-text-secondary);
159
+ border-radius: 4px;
160
+ color: var(--sandbox-text-secondary);
161
+ }
162
+
163
+ /* Content Area */
164
+ .sandbox-content {
89
165
  flex: 1;
90
166
  display: flex;
91
167
  flex-direction: column;
168
+ min-width: 0;
92
169
  overflow: hidden;
93
- background: #f8fafc;
94
170
  }
95
171
 
96
- .sandbox-tabs {
172
+ /* Main Content */
173
+ .sandbox-main {
174
+ flex: 1;
175
+ overflow-y: auto;
176
+ background: var(--sandbox-bg);
177
+ }
178
+
179
+ /* Hero Section */
180
+ .sandbox-hero {
181
+ padding: 48px 32px;
182
+ text-align: center;
183
+ border-bottom: 1px solid var(--sandbox-border);
184
+ background: linear-gradient(to bottom, var(--sandbox-secondary), transparent);
185
+ }
186
+
187
+ .sandbox-hero-title {
188
+ font-size: 32px;
189
+ font-weight: 700;
190
+ color: var(--sandbox-text);
191
+ letter-spacing: -0.02em;
192
+ margin: 0 0 12px;
193
+ }
194
+
195
+ .sandbox-hero-description {
196
+ font-size: 18px;
197
+ color: var(--sandbox-text-muted);
198
+ margin: 0 auto;
199
+ max-width: 600px;
200
+ }
201
+
202
+ .sandbox-hero-stats {
97
203
  display: flex;
98
204
  align-items: center;
99
- gap: 4px;
100
- padding: 0 24px;
101
- background: #ffffff;
102
- border-bottom: 1px solid #e2e8f0;
103
- min-height: 52px;
104
- overflow-x: auto;
105
- flex-wrap: wrap;
205
+ justify-content: center;
206
+ gap: 32px;
207
+ margin-top: 32px;
106
208
  }
107
209
 
108
- .sandbox-tab {
109
- padding: 14px 16px;
110
- min-width: 100px;
210
+ .sandbox-hero-stat {
111
211
  text-align: center;
112
- background: none;
113
- border: none;
114
- border-bottom: 2px solid transparent;
212
+ }
213
+
214
+ .sandbox-hero-stat-value {
215
+ font-size: 24px;
216
+ font-weight: 700;
217
+ color: var(--sandbox-text);
218
+ }
219
+
220
+ .sandbox-hero-stat-label {
221
+ font-size: 14px;
222
+ color: var(--sandbox-text-muted);
223
+ }
224
+
225
+ .sandbox-hero-divider {
226
+ width: 1px;
227
+ height: 32px;
228
+ background: var(--sandbox-border);
229
+ }
230
+
231
+ /* Component Grid */
232
+ .sandbox-grid {
233
+ display: grid;
234
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
235
+ gap: 24px;
236
+ padding: 32px;
237
+ max-width: 1200px;
238
+ margin: 0 auto;
239
+ }
240
+
241
+ /* Component Card */
242
+ .sandbox-card {
243
+ position: relative;
244
+ border-radius: var(--sandbox-radius-lg);
245
+ border: 1px solid var(--sandbox-border);
246
+ background: var(--sandbox-card);
247
+ overflow: hidden;
115
248
  cursor: pointer;
116
- font-size: 13px;
249
+ transition: all 0.3s ease;
250
+ }
251
+
252
+ .sandbox-card:hover {
253
+ border-color: rgba(249, 115, 22, 0.5);
254
+ box-shadow: 0 8px 24px rgba(249, 115, 22, 0.08);
255
+ }
256
+
257
+ .sandbox-card-preview {
258
+ aspect-ratio: 4 / 3;
259
+ padding: 24px;
260
+ display: flex;
261
+ align-items: center;
262
+ justify-content: center;
263
+ background: #ffffff;
264
+ position: relative;
265
+ }
266
+
267
+ .sandbox-card-actions {
268
+ position: absolute;
269
+ inset: 0;
270
+ background: rgba(28, 25, 23, 0.05);
271
+ backdrop-filter: blur(2px);
272
+ display: flex;
273
+ align-items: center;
274
+ justify-content: center;
275
+ gap: 8px;
276
+ opacity: 0;
277
+ pointer-events: none;
278
+ transition: opacity 0.2s ease;
279
+ }
280
+
281
+ .sandbox-card:hover .sandbox-card-actions {
282
+ opacity: 1;
283
+ pointer-events: auto;
284
+ }
285
+
286
+ .sandbox-card-btn {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 8px;
290
+ padding: 8px 16px;
291
+ border-radius: var(--sandbox-radius-md);
292
+ font-size: 14px;
117
293
  font-weight: 500;
118
- color: #64748b;
119
- margin-bottom: -1px;
294
+ cursor: pointer;
120
295
  transition: all 0.15s ease;
121
- border-radius: 6px 6px 0 0;
122
296
  }
123
297
 
124
- .sandbox-tab:hover {
125
- color: #475569;
126
- background: #f8fafc;
298
+ .sandbox-card-btn-secondary {
299
+ background: rgba(250, 249, 247, 0.95);
300
+ border: 1px solid var(--sandbox-border);
301
+ color: var(--sandbox-text);
127
302
  }
128
303
 
129
- .sandbox-tab.selected {
130
- color: #7c3aed;
131
- border-bottom-color: #7c3aed;
132
- background: none;
304
+ .sandbox-card-btn-secondary:hover {
305
+ background: var(--sandbox-bg);
133
306
  }
134
307
 
135
- .sandbox-play {
136
- margin-left: auto;
137
- padding: 8px 16px;
138
- background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%);
308
+ .sandbox-card-btn-primary {
309
+ background: var(--sandbox-accent);
310
+ border: none;
139
311
  color: white;
312
+ }
313
+
314
+ .sandbox-card-btn-primary:hover {
315
+ background: var(--sandbox-accent-hover);
316
+ }
317
+
318
+ .sandbox-card-info {
319
+ padding: 16px;
320
+ border-top: 1px solid var(--sandbox-border);
321
+ }
322
+
323
+ .sandbox-card-title {
324
+ font-weight: 500;
325
+ color: var(--sandbox-text);
326
+ margin: 0;
327
+ }
328
+
329
+ .sandbox-card-description {
330
+ font-size: 14px;
331
+ color: var(--sandbox-text-muted);
332
+ margin: 4px 0 0;
333
+ overflow: hidden;
334
+ text-overflow: ellipsis;
335
+ white-space: nowrap;
336
+ }
337
+
338
+ /* Component Detail View */
339
+ .sandbox-detail {
340
+ padding: 32px;
341
+ max-width: 900px;
342
+ margin: 0 auto;
343
+ }
344
+
345
+ .sandbox-detail-back {
346
+ display: inline-flex;
347
+ align-items: center;
348
+ gap: 8px;
349
+ padding: 0;
350
+ background: none;
351
+ border: none;
352
+ font-size: 14px;
353
+ color: var(--sandbox-text-muted);
354
+ cursor: pointer;
355
+ margin-bottom: 24px;
356
+ transition: color 0.15s ease;
357
+ }
358
+
359
+ .sandbox-detail-back:hover {
360
+ color: var(--sandbox-text);
361
+ }
362
+
363
+ .sandbox-detail-header {
364
+ display: flex;
365
+ align-items: flex-start;
366
+ justify-content: space-between;
367
+ margin-bottom: 32px;
368
+ }
369
+
370
+ .sandbox-detail-title-row {
371
+ display: flex;
372
+ align-items: center;
373
+ gap: 12px;
374
+ margin-bottom: 8px;
375
+ }
376
+
377
+ .sandbox-detail-title {
378
+ font-size: 28px;
379
+ font-weight: 700;
380
+ color: var(--sandbox-text);
381
+ letter-spacing: -0.02em;
382
+ margin: 0;
383
+ }
384
+
385
+ .sandbox-detail-badge {
386
+ display: inline-flex;
387
+ align-items: center;
388
+ padding: 4px 10px;
389
+ font-size: 12px;
390
+ font-weight: 500;
391
+ color: var(--sandbox-text-muted);
392
+ background: var(--sandbox-secondary);
393
+ border-radius: 9999px;
394
+ }
395
+
396
+ .sandbox-detail-description {
397
+ font-size: 18px;
398
+ color: var(--sandbox-text-muted);
399
+ margin: 0;
400
+ }
401
+
402
+ .sandbox-detail-favorite {
403
+ width: 40px;
404
+ height: 40px;
405
+ display: flex;
406
+ align-items: center;
407
+ justify-content: center;
408
+ background: none;
140
409
  border: none;
141
- border-radius: 6px;
410
+ border-radius: var(--sandbox-radius-md);
411
+ color: var(--sandbox-text-muted);
142
412
  cursor: pointer;
413
+ transition: all 0.15s ease;
414
+ }
415
+
416
+ .sandbox-detail-favorite:hover {
417
+ background: var(--sandbox-secondary);
418
+ color: var(--sandbox-text);
419
+ }
420
+
421
+ .sandbox-detail-favorite.active {
422
+ color: var(--sandbox-accent);
423
+ background: var(--sandbox-accent-light);
424
+ }
425
+
426
+ /* Scenario Cards */
427
+ .sandbox-scenarios {
428
+ display: flex;
429
+ flex-direction: column;
430
+ gap: 24px;
431
+ }
432
+
433
+ .sandbox-scenario-card {
434
+ border-radius: var(--sandbox-radius-lg);
435
+ border: 1px solid var(--sandbox-border);
436
+ background: var(--sandbox-card);
437
+ }
438
+
439
+ .sandbox-scenario-header {
440
+ display: flex;
441
+ align-items: center;
442
+ justify-content: space-between;
443
+ padding: 12px 20px;
444
+ border-bottom: 1px solid var(--sandbox-border);
445
+ background: rgba(237, 235, 229, 0.3);
446
+ }
447
+
448
+ .sandbox-scenario-info h3 {
449
+ font-size: 15px;
450
+ font-weight: 500;
451
+ color: var(--sandbox-text);
452
+ margin: 0;
453
+ }
454
+
455
+ .sandbox-scenario-info p {
456
+ font-size: 13px;
457
+ color: var(--sandbox-text-muted);
458
+ margin: 4px 0 0;
459
+ }
460
+
461
+ .sandbox-scenario-actions {
462
+ display: flex;
463
+ align-items: center;
464
+ gap: 8px;
465
+ }
466
+
467
+ .sandbox-scenario-btn {
468
+ display: inline-flex;
469
+ align-items: center;
470
+ gap: 6px;
471
+ padding: 6px 12px;
472
+ border-radius: var(--sandbox-radius-sm);
143
473
  font-size: 13px;
144
474
  font-weight: 500;
475
+ cursor: pointer;
145
476
  transition: all 0.15s ease;
146
- box-shadow: 0 1px 2px rgba(124, 58, 237, 0.2);
147
477
  }
148
478
 
149
- .sandbox-play:hover {
150
- background: linear-gradient(135deg, #6d28d9 0%, #5b21b6 100%);
151
- box-shadow: 0 2px 4px rgba(124, 58, 237, 0.3);
152
- transform: translateY(-1px);
479
+ .sandbox-scenario-btn-toggle {
480
+ background: var(--sandbox-secondary);
481
+ border: none;
482
+ color: var(--sandbox-text);
153
483
  }
154
484
 
155
- .sandbox-play:disabled {
156
- background: #cbd5e1;
485
+ .sandbox-scenario-btn-toggle:hover {
486
+ background: var(--sandbox-border);
487
+ }
488
+
489
+ .sandbox-scenario-btn-toggle.active {
490
+ background: var(--sandbox-text);
491
+ color: var(--sandbox-bg);
492
+ }
493
+
494
+ .sandbox-scenario-btn-copy {
495
+ background: var(--sandbox-accent);
496
+ border: none;
497
+ color: white;
498
+ }
499
+
500
+ .sandbox-scenario-btn-copy:hover {
501
+ background: var(--sandbox-accent-hover);
502
+ }
503
+
504
+ .sandbox-scenario-btn-play {
505
+ background: var(--sandbox-accent);
506
+ border: none;
507
+ color: white;
508
+ }
509
+
510
+ .sandbox-scenario-btn-play:hover {
511
+ background: var(--sandbox-accent-hover);
512
+ }
513
+
514
+ .sandbox-scenario-btn-play:disabled {
515
+ background: var(--sandbox-border);
516
+ color: var(--sandbox-text-muted);
157
517
  cursor: not-allowed;
158
- box-shadow: none;
159
- transform: none;
160
518
  }
161
519
 
162
- .sandbox-preview {
163
- flex: 1;
520
+ .sandbox-scenario-btn-play.error {
521
+ background: var(--sandbox-destructive);
522
+ }
523
+
524
+ .sandbox-scenario-content {
525
+ padding: 24px;
526
+ }
527
+
528
+ .sandbox-scenario-preview {
164
529
  padding: 32px;
165
- overflow: auto;
530
+ background: #ffffff;
531
+ border-radius: var(--sandbox-radius-md);
532
+ border: 1px solid var(--sandbox-border);
533
+ }
534
+
535
+ .sandbox-scenario-code {
536
+ background: rgba(28, 25, 23, 0.03);
537
+ border-radius: var(--sandbox-radius-md);
538
+ padding: 16px;
539
+ overflow-x: auto;
540
+ }
541
+
542
+ .sandbox-scenario-code pre {
543
+ margin: 0;
544
+ font-family: ui-monospace, monospace;
545
+ font-size: 13px;
546
+ color: rgba(28, 25, 23, 0.8);
547
+ white-space: pre-wrap;
548
+ word-break: break-word;
166
549
  }
167
550
 
551
+ /* Error States */
168
552
  .sandbox-error {
169
- background: #fef2f2;
553
+ background: var(--sandbox-destructive-light);
170
554
  border: 1px solid #fecaca;
171
- border-radius: 8px;
555
+ border-radius: var(--sandbox-radius-md);
172
556
  padding: 20px;
173
- font-family: system-ui, -apple-system, sans-serif;
174
557
  }
175
558
 
176
559
  .sandbox-error-title {
177
- color: #dc2626;
560
+ color: var(--sandbox-destructive);
178
561
  font-weight: 600;
179
562
  font-size: 14px;
180
563
  margin-bottom: 12px;
@@ -186,7 +569,7 @@ body {
186
569
  font-size: 13px;
187
570
  margin: 0 0 12px;
188
571
  padding: 12px;
189
- background: #fff;
572
+ background: white;
190
573
  border-radius: 4px;
191
574
  border: 1px solid #fecaca;
192
575
  white-space: pre-wrap;
@@ -199,15 +582,61 @@ body {
199
582
  font-size: 11px;
200
583
  margin: 0;
201
584
  padding: 12px;
202
- background: #fff;
585
+ background: white;
203
586
  border-radius: 4px;
204
- border: 1px solid #e5e7eb;
587
+ border: 1px solid var(--sandbox-border);
205
588
  white-space: pre-wrap;
206
589
  word-break: break-word;
207
590
  max-height: 300px;
208
591
  overflow: auto;
209
592
  }
210
593
 
594
+ .sandbox-play-error {
595
+ margin-top: 16px;
596
+ background: var(--sandbox-destructive-light);
597
+ border: 1px solid #fecaca;
598
+ border-radius: var(--sandbox-radius-md);
599
+ padding: 16px;
600
+ }
601
+
602
+ .sandbox-play-error-title {
603
+ color: var(--sandbox-destructive);
604
+ font-weight: 600;
605
+ font-size: 13px;
606
+ margin-bottom: 8px;
607
+ display: flex;
608
+ align-items: center;
609
+ gap: 6px;
610
+ }
611
+
612
+ .sandbox-play-error-title::before {
613
+ content: "✕";
614
+ display: inline-flex;
615
+ align-items: center;
616
+ justify-content: center;
617
+ width: 18px;
618
+ height: 18px;
619
+ background: var(--sandbox-destructive);
620
+ color: white;
621
+ border-radius: 50%;
622
+ font-size: 10px;
623
+ font-weight: bold;
624
+ }
625
+
626
+ .sandbox-play-error-message {
627
+ color: #b91c1c;
628
+ font-family: ui-monospace, monospace;
629
+ font-size: 12px;
630
+ margin: 0;
631
+ padding: 10px;
632
+ background: white;
633
+ border-radius: 4px;
634
+ border: 1px solid #fecaca;
635
+ white-space: pre-wrap;
636
+ word-break: break-word;
637
+ }
638
+
639
+ /* Legacy support for inline scenarios */
211
640
  .sandbox-inline {
212
641
  flex: 1;
213
642
  padding: 24px;
@@ -226,7 +655,7 @@ body {
226
655
  .sandbox-inline-label {
227
656
  font-size: 12px;
228
657
  font-weight: 500;
229
- color: #64748b;
658
+ color: var(--sandbox-text-muted);
230
659
  text-transform: uppercase;
231
660
  letter-spacing: 0.05em;
232
661
  width: 100px;
@@ -235,10 +664,10 @@ body {
235
664
 
236
665
  .sandbox-inline-preview {
237
666
  flex: 1;
238
- background: #ffffff;
239
- border-radius: 8px;
667
+ background: var(--sandbox-card);
668
+ border-radius: var(--sandbox-radius-md);
240
669
  padding: 16px;
241
- border: 1px solid #e2e8f0;
670
+ border: 1px solid var(--sandbox-border);
242
671
  }
243
672
 
244
673
  .sandbox-play-slot {
@@ -250,79 +679,276 @@ body {
250
679
  width: 32px;
251
680
  height: 32px;
252
681
  padding: 0;
253
- background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%);
682
+ background: var(--sandbox-accent);
254
683
  color: white;
255
684
  border: none;
256
- border-radius: 6px;
685
+ border-radius: var(--sandbox-radius-sm);
257
686
  cursor: pointer;
258
687
  font-size: 12px;
259
688
  transition: all 0.15s ease;
260
689
  }
261
690
 
262
691
  .sandbox-play-inline:hover {
263
- background: linear-gradient(135deg, #6d28d9 0%, #5b21b6 100%);
692
+ background: var(--sandbox-accent-hover);
264
693
  transform: translateY(-1px);
265
694
  }
266
695
 
267
696
  .sandbox-play-inline:disabled {
268
- background: #cbd5e1;
697
+ background: var(--sandbox-border);
698
+ color: var(--sandbox-text-muted);
269
699
  cursor: not-allowed;
270
700
  transform: none;
271
701
  }
272
702
 
273
703
  .sandbox-play-inline.error {
274
- background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);
704
+ background: var(--sandbox-destructive);
705
+ }
706
+
707
+ /* Legacy Tabs (for backwards compatibility) */
708
+ .sandbox-tabs {
709
+ display: flex;
710
+ align-items: center;
711
+ gap: 4px;
712
+ padding: 0 24px;
713
+ background: var(--sandbox-card);
714
+ border-bottom: 1px solid var(--sandbox-border);
715
+ min-height: 52px;
716
+ overflow-x: auto;
717
+ flex-wrap: wrap;
718
+ }
719
+
720
+ .sandbox-tab {
721
+ padding: 14px 16px;
722
+ min-width: 100px;
723
+ text-align: center;
724
+ background: none;
725
+ border: none;
726
+ border-bottom: 2px solid transparent;
727
+ cursor: pointer;
728
+ font-size: 13px;
729
+ font-weight: 500;
730
+ color: var(--sandbox-text-muted);
731
+ margin-bottom: -1px;
732
+ transition: all 0.15s ease;
733
+ border-radius: var(--sandbox-radius-sm) var(--sandbox-radius-sm) 0 0;
734
+ }
735
+
736
+ .sandbox-tab:hover {
737
+ color: var(--sandbox-text);
738
+ background: var(--sandbox-bg);
739
+ }
740
+
741
+ .sandbox-tab.selected {
742
+ color: var(--sandbox-accent);
743
+ border-bottom-color: var(--sandbox-accent);
744
+ background: none;
745
+ }
746
+
747
+ .sandbox-play {
748
+ margin-left: auto;
749
+ padding: 8px 16px;
750
+ background: var(--sandbox-accent);
751
+ color: white;
752
+ border: none;
753
+ border-radius: var(--sandbox-radius-sm);
754
+ cursor: pointer;
755
+ font-size: 13px;
756
+ font-weight: 500;
757
+ transition: all 0.15s ease;
758
+ }
759
+
760
+ .sandbox-play:hover {
761
+ background: var(--sandbox-accent-hover);
762
+ transform: translateY(-1px);
763
+ }
764
+
765
+ .sandbox-play:disabled {
766
+ background: var(--sandbox-border);
767
+ color: var(--sandbox-text-muted);
768
+ cursor: not-allowed;
769
+ transform: none;
275
770
  }
276
771
 
277
772
  .sandbox-play.error {
278
- background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);
773
+ background: var(--sandbox-destructive);
279
774
  }
280
775
 
281
776
  .sandbox-play.error:hover {
282
- background: linear-gradient(135deg, #b91c1c 0%, #991b1b 100%);
777
+ background: #b91c1c;
283
778
  }
284
779
 
285
- .sandbox-play-error {
286
- margin-top: 16px;
287
- background: #fef2f2;
288
- border: 1px solid #fecaca;
289
- border-radius: 8px;
290
- padding: 16px;
780
+ .sandbox-preview {
781
+ flex: 1;
782
+ padding: 32px;
783
+ overflow: auto;
291
784
  }
292
785
 
293
- .sandbox-play-error-title {
294
- color: #dc2626;
295
- font-weight: 600;
296
- font-size: 13px;
297
- margin-bottom: 8px;
786
+ /* Tabbed Layout */
787
+ .sandbox-detail-tabbed {
788
+ padding: 32px;
789
+ width: 100%;
790
+ }
791
+
792
+ .sandbox-detail-tabbed .sandbox-detail-back {
793
+ margin-bottom: 24px;
794
+ }
795
+
796
+ .sandbox-detail-tabbed .sandbox-detail-header {
797
+ margin-bottom: 24px;
798
+ }
799
+
800
+ .sandbox-tabbed-card {
801
+ border-radius: var(--sandbox-radius-lg);
802
+ border: 1px solid var(--sandbox-border);
803
+ background: var(--sandbox-card);
804
+ overflow: hidden;
805
+ }
806
+
807
+ .sandbox-tabs-bar {
298
808
  display: flex;
299
809
  align-items: center;
300
- gap: 6px;
810
+ justify-content: space-between;
811
+ border-bottom: 1px solid var(--sandbox-border);
812
+ background: rgba(237, 235, 229, 0.3);
301
813
  }
302
814
 
303
- .sandbox-play-error-title::before {
304
- content: "✕";
305
- display: inline-flex;
815
+ .sandbox-tabs-list {
816
+ display: flex;
306
817
  align-items: center;
307
- justify-content: center;
308
- width: 18px;
309
- height: 18px;
310
- background: #dc2626;
311
- color: white;
312
- border-radius: 50%;
313
- font-size: 10px;
314
- font-weight: bold;
818
+ overflow-x: auto;
315
819
  }
316
820
 
317
- .sandbox-play-error-message {
318
- color: #b91c1c;
319
- font-family: ui-monospace, monospace;
320
- font-size: 12px;
821
+ .sandbox-tab-item {
822
+ padding: 14px 20px;
823
+ font-size: 14px;
824
+ font-weight: 500;
825
+ color: var(--sandbox-text-muted);
826
+ background: none;
827
+ border: none;
828
+ cursor: pointer;
829
+ position: relative;
830
+ white-space: nowrap;
831
+ transition: color 0.15s ease;
832
+ }
833
+
834
+ .sandbox-tab-item:hover {
835
+ color: var(--sandbox-text);
836
+ }
837
+
838
+ .sandbox-tab-item.active {
839
+ color: var(--sandbox-text);
840
+ }
841
+
842
+ .sandbox-tab-item.active::after {
843
+ content: '';
844
+ position: absolute;
845
+ bottom: 0;
846
+ left: 0;
847
+ right: 0;
848
+ height: 2px;
849
+ background: var(--sandbox-accent);
850
+ }
851
+
852
+ .sandbox-tabs-actions {
853
+ display: flex;
854
+ align-items: center;
855
+ gap: 8px;
856
+ padding: 0 16px;
857
+ }
858
+
859
+ .sandbox-tab-description {
860
+ padding: 12px 24px;
861
+ border-bottom: 1px solid rgba(229, 224, 213, 0.5);
862
+ background: rgba(237, 235, 229, 0.1);
863
+ }
864
+
865
+ .sandbox-tab-description p {
866
+ font-size: 14px;
867
+ color: var(--sandbox-text-muted);
321
868
  margin: 0;
322
- padding: 10px;
323
- background: #fff;
324
- border-radius: 4px;
325
- border: 1px solid #fecaca;
869
+ }
870
+
871
+ .sandbox-tab-content {
872
+ padding: 32px;
873
+ }
874
+
875
+ .sandbox-tab-preview {
876
+ min-height: 300px;
877
+ padding: 32px;
878
+ background: #ffffff;
879
+ border-radius: var(--sandbox-radius-md);
880
+ border: 1px solid var(--sandbox-border);
881
+ }
882
+
883
+ .sandbox-tab-code {
884
+ background: rgba(28, 25, 23, 0.03);
885
+ border-radius: var(--sandbox-radius-md);
886
+ padding: 24px;
887
+ overflow-x: auto;
888
+ }
889
+
890
+ .sandbox-tab-code pre {
891
+ margin: 0;
892
+ font-family: ui-monospace, monospace;
893
+ font-size: 13px;
894
+ color: rgba(28, 25, 23, 0.8);
326
895
  white-space: pre-wrap;
327
896
  word-break: break-word;
328
897
  }
898
+
899
+ .sandbox-nav-dots {
900
+ display: flex;
901
+ align-items: center;
902
+ justify-content: center;
903
+ gap: 8px;
904
+ margin-top: 24px;
905
+ }
906
+
907
+ .sandbox-nav-dot {
908
+ height: 8px;
909
+ border-radius: 9999px;
910
+ border: none;
911
+ cursor: pointer;
912
+ transition: all 0.2s ease;
913
+ padding: 0;
914
+ }
915
+
916
+ .sandbox-nav-dot.inactive {
917
+ width: 8px;
918
+ background: var(--sandbox-border);
919
+ }
920
+
921
+ .sandbox-nav-dot.inactive:hover {
922
+ background: var(--sandbox-text-muted);
923
+ }
924
+
925
+ .sandbox-nav-dot.active {
926
+ width: 24px;
927
+ background: var(--sandbox-accent);
928
+ }
929
+
930
+ /* Advanced badge */
931
+ .sandbox-badge-advanced {
932
+ display: inline-flex;
933
+ align-items: center;
934
+ padding: 4px 10px;
935
+ font-size: 12px;
936
+ font-weight: 500;
937
+ color: var(--sandbox-accent);
938
+ background: var(--sandbox-accent-light);
939
+ border: 1px solid rgba(249, 115, 22, 0.2);
940
+ border-radius: 9999px;
941
+ }
942
+
943
+ /* Utility classes */
944
+ .sr-only {
945
+ position: absolute;
946
+ width: 1px;
947
+ height: 1px;
948
+ padding: 0;
949
+ margin: -1px;
950
+ overflow: hidden;
951
+ clip: rect(0, 0, 0, 0);
952
+ white-space: nowrap;
953
+ border: 0;
954
+ }