@namroodinc/liquid-editorial 0.0.0-stage → 0.1.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 (354) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -2
  3. package/dist/chunks/Icon-CGY1FNXT.js +77 -0
  4. package/dist/chunks/Icon-CGY1FNXT.js.map +1 -0
  5. package/dist/chunks/Icon-CWsA1W83.cjs +2 -0
  6. package/dist/chunks/Icon-CWsA1W83.cjs.map +1 -0
  7. package/dist/components/AssetGrid/index.cjs +2 -0
  8. package/dist/components/AssetGrid/index.cjs.map +1 -0
  9. package/dist/components/AssetGrid/index.d.cts +54 -0
  10. package/dist/components/AssetGrid/index.d.cts.map +1 -0
  11. package/dist/components/AssetGrid/index.d.ts +54 -0
  12. package/dist/components/AssetGrid/index.d.ts.map +1 -0
  13. package/dist/components/AssetGrid/index.js +137 -0
  14. package/dist/components/AssetGrid/index.js.map +1 -0
  15. package/dist/components/AssetGrid/style.css +196 -0
  16. package/dist/components/Avatar/index.cjs +2 -0
  17. package/dist/components/Avatar/index.cjs.map +1 -0
  18. package/dist/components/Avatar/index.d.cts +24 -0
  19. package/dist/components/Avatar/index.d.cts.map +1 -0
  20. package/dist/components/Avatar/index.d.ts +24 -0
  21. package/dist/components/Avatar/index.d.ts.map +1 -0
  22. package/dist/components/Avatar/index.js +43 -0
  23. package/dist/components/Avatar/index.js.map +1 -0
  24. package/dist/components/Avatar/style.css +70 -0
  25. package/dist/components/Badge/index.cjs +2 -0
  26. package/dist/components/Badge/index.cjs.map +1 -0
  27. package/dist/components/Badge/index.d.cts +25 -0
  28. package/dist/components/Badge/index.d.cts.map +1 -0
  29. package/dist/components/Badge/index.d.ts +25 -0
  30. package/dist/components/Badge/index.d.ts.map +1 -0
  31. package/dist/components/Badge/index.js +28 -0
  32. package/dist/components/Badge/index.js.map +1 -0
  33. package/dist/components/Badge/style.css +103 -0
  34. package/dist/components/Board/index.cjs +2 -0
  35. package/dist/components/Board/index.cjs.map +1 -0
  36. package/dist/components/Board/index.d.cts +62 -0
  37. package/dist/components/Board/index.d.cts.map +1 -0
  38. package/dist/components/Board/index.d.ts +62 -0
  39. package/dist/components/Board/index.d.ts.map +1 -0
  40. package/dist/components/Board/index.js +227 -0
  41. package/dist/components/Board/index.js.map +1 -0
  42. package/dist/components/Board/style.css +145 -0
  43. package/dist/components/Button/index.cjs +2 -0
  44. package/dist/components/Button/index.cjs.map +1 -0
  45. package/dist/components/Button/index.d.cts +22 -0
  46. package/dist/components/Button/index.d.cts.map +1 -0
  47. package/dist/components/Button/index.d.ts +22 -0
  48. package/dist/components/Button/index.d.ts.map +1 -0
  49. package/dist/components/Button/index.js +37 -0
  50. package/dist/components/Button/index.js.map +1 -0
  51. package/dist/components/Button/style.css +139 -0
  52. package/dist/components/ButtonGroup/index.cjs +2 -0
  53. package/dist/components/ButtonGroup/index.cjs.map +1 -0
  54. package/dist/components/ButtonGroup/index.d.cts +17 -0
  55. package/dist/components/ButtonGroup/index.d.cts.map +1 -0
  56. package/dist/components/ButtonGroup/index.d.ts +17 -0
  57. package/dist/components/ButtonGroup/index.d.ts.map +1 -0
  58. package/dist/components/ButtonGroup/index.js +18 -0
  59. package/dist/components/ButtonGroup/index.js.map +1 -0
  60. package/dist/components/ButtonGroup/style.css +66 -0
  61. package/dist/components/Choice/index.cjs +2 -0
  62. package/dist/components/Choice/index.cjs.map +1 -0
  63. package/dist/components/Choice/index.d.cts +25 -0
  64. package/dist/components/Choice/index.d.cts.map +1 -0
  65. package/dist/components/Choice/index.d.ts +25 -0
  66. package/dist/components/Choice/index.d.ts.map +1 -0
  67. package/dist/components/Choice/index.js +58 -0
  68. package/dist/components/Choice/index.js.map +1 -0
  69. package/dist/components/Choice/style.css +96 -0
  70. package/dist/components/Container/index.cjs +2 -0
  71. package/dist/components/Container/index.cjs.map +1 -0
  72. package/dist/components/Container/index.d.cts +19 -0
  73. package/dist/components/Container/index.d.cts.map +1 -0
  74. package/dist/components/Container/index.d.ts +19 -0
  75. package/dist/components/Container/index.d.ts.map +1 -0
  76. package/dist/components/Container/index.js +20 -0
  77. package/dist/components/Container/index.js.map +1 -0
  78. package/dist/components/Container/style.css +41 -0
  79. package/dist/components/DatePicker/index.cjs +2 -0
  80. package/dist/components/DatePicker/index.cjs.map +1 -0
  81. package/dist/components/DatePicker/index.d.cts +57 -0
  82. package/dist/components/DatePicker/index.d.cts.map +1 -0
  83. package/dist/components/DatePicker/index.d.ts +57 -0
  84. package/dist/components/DatePicker/index.d.ts.map +1 -0
  85. package/dist/components/DatePicker/index.js +248 -0
  86. package/dist/components/DatePicker/index.js.map +1 -0
  87. package/dist/components/DatePicker/style.css +149 -0
  88. package/dist/components/Drawer/index.cjs +2 -0
  89. package/dist/components/Drawer/index.cjs.map +1 -0
  90. package/dist/components/Drawer/index.d.cts +23 -0
  91. package/dist/components/Drawer/index.d.cts.map +1 -0
  92. package/dist/components/Drawer/index.d.ts +23 -0
  93. package/dist/components/Drawer/index.d.ts.map +1 -0
  94. package/dist/components/Drawer/index.js +85 -0
  95. package/dist/components/Drawer/index.js.map +1 -0
  96. package/dist/components/Drawer/style.css +147 -0
  97. package/dist/components/EntryPicker/index.cjs +2 -0
  98. package/dist/components/EntryPicker/index.cjs.map +1 -0
  99. package/dist/components/EntryPicker/index.d.cts +36 -0
  100. package/dist/components/EntryPicker/index.d.cts.map +1 -0
  101. package/dist/components/EntryPicker/index.d.ts +36 -0
  102. package/dist/components/EntryPicker/index.d.ts.map +1 -0
  103. package/dist/components/EntryPicker/index.js +178 -0
  104. package/dist/components/EntryPicker/index.js.map +1 -0
  105. package/dist/components/EntryPicker/style.css +162 -0
  106. package/dist/components/Field/index.cjs +2 -0
  107. package/dist/components/Field/index.cjs.map +1 -0
  108. package/dist/components/Field/index.d.cts +19 -0
  109. package/dist/components/Field/index.d.cts.map +1 -0
  110. package/dist/components/Field/index.d.ts +19 -0
  111. package/dist/components/Field/index.d.ts.map +1 -0
  112. package/dist/components/Field/index.js +41 -0
  113. package/dist/components/Field/index.js.map +1 -0
  114. package/dist/components/Field/style.css +100 -0
  115. package/dist/components/FieldAffix/index.cjs +2 -0
  116. package/dist/components/FieldAffix/index.cjs.map +1 -0
  117. package/dist/components/FieldAffix/index.d.cts +19 -0
  118. package/dist/components/FieldAffix/index.d.cts.map +1 -0
  119. package/dist/components/FieldAffix/index.d.ts +19 -0
  120. package/dist/components/FieldAffix/index.d.ts.map +1 -0
  121. package/dist/components/FieldAffix/index.js +45 -0
  122. package/dist/components/FieldAffix/index.js.map +1 -0
  123. package/dist/components/FieldAffix/style.css +54 -0
  124. package/dist/components/Grid/index.cjs +2 -0
  125. package/dist/components/Grid/index.cjs.map +1 -0
  126. package/dist/components/Grid/index.d.cts +44 -0
  127. package/dist/components/Grid/index.d.cts.map +1 -0
  128. package/dist/components/Grid/index.d.ts +44 -0
  129. package/dist/components/Grid/index.d.ts.map +1 -0
  130. package/dist/components/Grid/index.js +49 -0
  131. package/dist/components/Grid/index.js.map +1 -0
  132. package/dist/components/Grid/style.css +226 -0
  133. package/dist/components/Icon/icons.d.cts +64 -0
  134. package/dist/components/Icon/icons.d.cts.map +1 -0
  135. package/dist/components/Icon/icons.d.ts +64 -0
  136. package/dist/components/Icon/icons.d.ts.map +1 -0
  137. package/dist/components/Icon/index.cjs +1 -0
  138. package/dist/components/Icon/index.d.cts +15 -0
  139. package/dist/components/Icon/index.d.cts.map +1 -0
  140. package/dist/components/Icon/index.d.ts +15 -0
  141. package/dist/components/Icon/index.d.ts.map +1 -0
  142. package/dist/components/Icon/index.js +1 -0
  143. package/dist/components/Icon/style.css +10 -0
  144. package/dist/components/ImageCropper/index.cjs +2 -0
  145. package/dist/components/ImageCropper/index.cjs.map +1 -0
  146. package/dist/components/ImageCropper/index.d.cts +66 -0
  147. package/dist/components/ImageCropper/index.d.cts.map +1 -0
  148. package/dist/components/ImageCropper/index.d.ts +66 -0
  149. package/dist/components/ImageCropper/index.d.ts.map +1 -0
  150. package/dist/components/ImageCropper/index.js +263 -0
  151. package/dist/components/ImageCropper/index.js.map +1 -0
  152. package/dist/components/ImageCropper/style.css +160 -0
  153. package/dist/components/Menu/index.cjs +2 -0
  154. package/dist/components/Menu/index.cjs.map +1 -0
  155. package/dist/components/Menu/index.d.cts +35 -0
  156. package/dist/components/Menu/index.d.cts.map +1 -0
  157. package/dist/components/Menu/index.d.ts +35 -0
  158. package/dist/components/Menu/index.d.ts.map +1 -0
  159. package/dist/components/Menu/index.js +110 -0
  160. package/dist/components/Menu/index.js.map +1 -0
  161. package/dist/components/Menu/style.css +87 -0
  162. package/dist/components/Modal/index.cjs +2 -0
  163. package/dist/components/Modal/index.cjs.map +1 -0
  164. package/dist/components/Modal/index.d.cts +19 -0
  165. package/dist/components/Modal/index.d.cts.map +1 -0
  166. package/dist/components/Modal/index.d.ts +19 -0
  167. package/dist/components/Modal/index.d.ts.map +1 -0
  168. package/dist/components/Modal/index.js +84 -0
  169. package/dist/components/Modal/index.js.map +1 -0
  170. package/dist/components/Modal/style.css +106 -0
  171. package/dist/components/NumberField/index.cjs +2 -0
  172. package/dist/components/NumberField/index.cjs.map +1 -0
  173. package/dist/components/NumberField/index.d.cts +50 -0
  174. package/dist/components/NumberField/index.d.cts.map +1 -0
  175. package/dist/components/NumberField/index.d.ts +50 -0
  176. package/dist/components/NumberField/index.d.ts.map +1 -0
  177. package/dist/components/NumberField/index.js +124 -0
  178. package/dist/components/NumberField/index.js.map +1 -0
  179. package/dist/components/NumberField/style.css +85 -0
  180. package/dist/components/Popover/index.cjs +2 -0
  181. package/dist/components/Popover/index.cjs.map +1 -0
  182. package/dist/components/Popover/index.d.cts +28 -0
  183. package/dist/components/Popover/index.d.cts.map +1 -0
  184. package/dist/components/Popover/index.d.ts +28 -0
  185. package/dist/components/Popover/index.d.ts.map +1 -0
  186. package/dist/components/Popover/index.js +52 -0
  187. package/dist/components/Popover/index.js.map +1 -0
  188. package/dist/components/Popover/style.css +23 -0
  189. package/dist/components/RichTextEditor/index.cjs +2 -0
  190. package/dist/components/RichTextEditor/index.cjs.map +1 -0
  191. package/dist/components/RichTextEditor/index.d.cts +23 -0
  192. package/dist/components/RichTextEditor/index.d.cts.map +1 -0
  193. package/dist/components/RichTextEditor/index.d.ts +23 -0
  194. package/dist/components/RichTextEditor/index.d.ts.map +1 -0
  195. package/dist/components/RichTextEditor/index.js +175 -0
  196. package/dist/components/RichTextEditor/index.js.map +1 -0
  197. package/dist/components/RichTextEditor/style.css +136 -0
  198. package/dist/components/SearchField/index.cjs +2 -0
  199. package/dist/components/SearchField/index.cjs.map +1 -0
  200. package/dist/components/SearchField/index.d.cts +11 -0
  201. package/dist/components/SearchField/index.d.cts.map +1 -0
  202. package/dist/components/SearchField/index.d.ts +11 -0
  203. package/dist/components/SearchField/index.d.ts.map +1 -0
  204. package/dist/components/SearchField/index.js +49 -0
  205. package/dist/components/SearchField/index.js.map +1 -0
  206. package/dist/components/SearchField/style.css +27 -0
  207. package/dist/components/Select/index.cjs +2 -0
  208. package/dist/components/Select/index.cjs.map +1 -0
  209. package/dist/components/Select/index.d.cts +26 -0
  210. package/dist/components/Select/index.d.cts.map +1 -0
  211. package/dist/components/Select/index.d.ts +26 -0
  212. package/dist/components/Select/index.d.ts.map +1 -0
  213. package/dist/components/Select/index.js +129 -0
  214. package/dist/components/Select/index.js.map +1 -0
  215. package/dist/components/Select/style.css +88 -0
  216. package/dist/components/SelectionCard/index.cjs +2 -0
  217. package/dist/components/SelectionCard/index.cjs.map +1 -0
  218. package/dist/components/SelectionCard/index.d.cts +32 -0
  219. package/dist/components/SelectionCard/index.d.cts.map +1 -0
  220. package/dist/components/SelectionCard/index.d.ts +32 -0
  221. package/dist/components/SelectionCard/index.d.ts.map +1 -0
  222. package/dist/components/SelectionCard/index.js +71 -0
  223. package/dist/components/SelectionCard/index.js.map +1 -0
  224. package/dist/components/SelectionCard/style.css +133 -0
  225. package/dist/components/SideNav/index.cjs +2 -0
  226. package/dist/components/SideNav/index.cjs.map +1 -0
  227. package/dist/components/SideNav/index.d.cts +58 -0
  228. package/dist/components/SideNav/index.d.cts.map +1 -0
  229. package/dist/components/SideNav/index.d.ts +58 -0
  230. package/dist/components/SideNav/index.d.ts.map +1 -0
  231. package/dist/components/SideNav/index.js +113 -0
  232. package/dist/components/SideNav/index.js.map +1 -0
  233. package/dist/components/SideNav/style.css +184 -0
  234. package/dist/components/Skeleton/index.cjs +2 -0
  235. package/dist/components/Skeleton/index.cjs.map +1 -0
  236. package/dist/components/Skeleton/index.d.cts +21 -0
  237. package/dist/components/Skeleton/index.d.cts.map +1 -0
  238. package/dist/components/Skeleton/index.d.ts +21 -0
  239. package/dist/components/Skeleton/index.d.ts.map +1 -0
  240. package/dist/components/Skeleton/index.js +31 -0
  241. package/dist/components/Skeleton/index.js.map +1 -0
  242. package/dist/components/Skeleton/style.css +55 -0
  243. package/dist/components/Slider/index.cjs +2 -0
  244. package/dist/components/Slider/index.cjs.map +1 -0
  245. package/dist/components/Slider/index.d.cts +40 -0
  246. package/dist/components/Slider/index.d.cts.map +1 -0
  247. package/dist/components/Slider/index.d.ts +40 -0
  248. package/dist/components/Slider/index.d.ts.map +1 -0
  249. package/dist/components/Slider/index.js +117 -0
  250. package/dist/components/Slider/index.js.map +1 -0
  251. package/dist/components/Slider/style.css +156 -0
  252. package/dist/components/SortableList/index.cjs +2 -0
  253. package/dist/components/SortableList/index.cjs.map +1 -0
  254. package/dist/components/SortableList/index.d.cts +27 -0
  255. package/dist/components/SortableList/index.d.cts.map +1 -0
  256. package/dist/components/SortableList/index.d.ts +27 -0
  257. package/dist/components/SortableList/index.d.ts.map +1 -0
  258. package/dist/components/SortableList/index.js +85 -0
  259. package/dist/components/SortableList/index.js.map +1 -0
  260. package/dist/components/SortableList/style.css +71 -0
  261. package/dist/components/Stepper/index.cjs +2 -0
  262. package/dist/components/Stepper/index.cjs.map +1 -0
  263. package/dist/components/Stepper/index.d.cts +32 -0
  264. package/dist/components/Stepper/index.d.cts.map +1 -0
  265. package/dist/components/Stepper/index.d.ts +32 -0
  266. package/dist/components/Stepper/index.d.ts.map +1 -0
  267. package/dist/components/Stepper/index.js +69 -0
  268. package/dist/components/Stepper/index.js.map +1 -0
  269. package/dist/components/Stepper/style.css +154 -0
  270. package/dist/components/SubNav/index.cjs +2 -0
  271. package/dist/components/SubNav/index.cjs.map +1 -0
  272. package/dist/components/SubNav/index.d.cts +31 -0
  273. package/dist/components/SubNav/index.d.cts.map +1 -0
  274. package/dist/components/SubNav/index.d.ts +31 -0
  275. package/dist/components/SubNav/index.d.ts.map +1 -0
  276. package/dist/components/SubNav/index.js +62 -0
  277. package/dist/components/SubNav/index.js.map +1 -0
  278. package/dist/components/SubNav/style.css +86 -0
  279. package/dist/components/Switch/index.cjs +2 -0
  280. package/dist/components/Switch/index.cjs.map +1 -0
  281. package/dist/components/Switch/index.d.cts +12 -0
  282. package/dist/components/Switch/index.d.cts.map +1 -0
  283. package/dist/components/Switch/index.d.ts +12 -0
  284. package/dist/components/Switch/index.d.ts.map +1 -0
  285. package/dist/components/Switch/index.js +37 -0
  286. package/dist/components/Switch/index.js.map +1 -0
  287. package/dist/components/Switch/style.css +65 -0
  288. package/dist/components/Table/index.cjs +2 -0
  289. package/dist/components/Table/index.cjs.map +1 -0
  290. package/dist/components/Table/index.d.cts +54 -0
  291. package/dist/components/Table/index.d.cts.map +1 -0
  292. package/dist/components/Table/index.d.ts +54 -0
  293. package/dist/components/Table/index.d.ts.map +1 -0
  294. package/dist/components/Table/index.js +102 -0
  295. package/dist/components/Table/index.js.map +1 -0
  296. package/dist/components/Table/style.css +122 -0
  297. package/dist/components/TagsInput/index.cjs +2 -0
  298. package/dist/components/TagsInput/index.cjs.map +1 -0
  299. package/dist/components/TagsInput/index.d.cts +22 -0
  300. package/dist/components/TagsInput/index.d.cts.map +1 -0
  301. package/dist/components/TagsInput/index.d.ts +22 -0
  302. package/dist/components/TagsInput/index.d.ts.map +1 -0
  303. package/dist/components/TagsInput/index.js +60 -0
  304. package/dist/components/TagsInput/index.js.map +1 -0
  305. package/dist/components/TagsInput/style.css +83 -0
  306. package/dist/components/TextField/index.cjs +2 -0
  307. package/dist/components/TextField/index.cjs.map +1 -0
  308. package/dist/components/TextField/index.d.cts +11 -0
  309. package/dist/components/TextField/index.d.cts.map +1 -0
  310. package/dist/components/TextField/index.d.ts +11 -0
  311. package/dist/components/TextField/index.d.ts.map +1 -0
  312. package/dist/components/TextField/index.js +29 -0
  313. package/dist/components/TextField/index.js.map +1 -0
  314. package/dist/components/TextField/style.css +1 -0
  315. package/dist/components/Time/index.cjs +2 -0
  316. package/dist/components/Time/index.cjs.map +1 -0
  317. package/dist/components/Time/index.d.cts +35 -0
  318. package/dist/components/Time/index.d.cts.map +1 -0
  319. package/dist/components/Time/index.d.ts +35 -0
  320. package/dist/components/Time/index.d.ts.map +1 -0
  321. package/dist/components/Time/index.js +98 -0
  322. package/dist/components/Time/index.js.map +1 -0
  323. package/dist/components/Time/style.css +30 -0
  324. package/dist/components/Toast/index.cjs +2 -0
  325. package/dist/components/Toast/index.cjs.map +1 -0
  326. package/dist/components/Toast/index.d.cts +30 -0
  327. package/dist/components/Toast/index.d.cts.map +1 -0
  328. package/dist/components/Toast/index.d.ts +30 -0
  329. package/dist/components/Toast/index.d.ts.map +1 -0
  330. package/dist/components/Toast/index.js +96 -0
  331. package/dist/components/Toast/index.js.map +1 -0
  332. package/dist/components/Toast/style.css +80 -0
  333. package/dist/components/TopNav/index.cjs +2 -0
  334. package/dist/components/TopNav/index.cjs.map +1 -0
  335. package/dist/components/TopNav/index.d.cts +28 -0
  336. package/dist/components/TopNav/index.d.cts.map +1 -0
  337. package/dist/components/TopNav/index.d.ts +28 -0
  338. package/dist/components/TopNav/index.d.ts.map +1 -0
  339. package/dist/components/TopNav/index.js +45 -0
  340. package/dist/components/TopNav/index.js.map +1 -0
  341. package/dist/components/TopNav/style.css +80 -0
  342. package/dist/index.cjs +1 -0
  343. package/dist/index.d.cts +77 -0
  344. package/dist/index.d.cts.map +1 -0
  345. package/dist/index.d.ts +77 -0
  346. package/dist/index.d.ts.map +1 -0
  347. package/dist/index.js +38 -0
  348. package/dist/reset.css +15 -0
  349. package/dist/reset.css.d.ts +2 -0
  350. package/dist/styles.css +39 -0
  351. package/dist/styles.css.d.ts +2 -0
  352. package/dist/tokens.css +457 -0
  353. package/dist/tokens.css.d.ts +2 -0
  354. package/package.json +130 -4
@@ -0,0 +1,21 @@
1
+ import { type HTMLAttributes } from "react";
2
+ export type SkeletonShape = "text" | "heading" | "block" | "circle";
3
+ export interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {
4
+ shape?: SkeletonShape;
5
+ /** Any CSS length or percentage. Defaults to filling its container. */
6
+ width?: string;
7
+ /** Only for `circle`, where width and height are the same value. */
8
+ size?: string;
9
+ }
10
+ /**
11
+ * A placeholder with the shape of the thing that is loading. Never a spinner
12
+ * over a blank panel — the layout must not move when the content arrives.
13
+ */
14
+ export declare const Skeleton: import("react").ForwardRefExoticComponent<SkeletonProps & import("react").RefAttributes<HTMLSpanElement>>;
15
+ export interface SkeletonTextProps extends HTMLAttributes<HTMLDivElement> {
16
+ /** Number of lines; the last one renders short. */
17
+ lines?: number;
18
+ }
19
+ /** A paragraph-shaped placeholder. Announced once, as busy, to screen readers. */
20
+ export declare const SkeletonText: import("react").ForwardRefExoticComponent<SkeletonTextProps & import("react").RefAttributes<HTMLDivElement>>;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Skeleton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,eAAe,CAAC;IACpE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,2GAkBnB,CAAC;AAEH,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACvE,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,kFAAkF;AAClF,eAAO,MAAM,YAAY,8GAoBxB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { forwardRef as e } from "react";
2
+ import { jsx as t } from "react/jsx-runtime";
3
+ //#region src/components/Skeleton/index.tsx
4
+ var n = e(function({ shape: e = "text", width: n, size: r, className: i, style: a, ...o }, s) {
5
+ return /* @__PURE__ */ t("span", {
6
+ ref: s,
7
+ "aria-hidden": "true",
8
+ "data-shape": e,
9
+ className: ["ds-skeleton", i].filter(Boolean).join(" "),
10
+ style: {
11
+ inlineSize: e === "circle" ? r : n ?? "100%",
12
+ blockSize: e === "circle" ? r : void 0,
13
+ ...a
14
+ },
15
+ ...o
16
+ });
17
+ }), r = e(function({ lines: e = 3, className: r, ...i }, a) {
18
+ return /* @__PURE__ */ t("div", {
19
+ ref: a,
20
+ role: "status",
21
+ "aria-busy": "true",
22
+ "aria-label": "Loading",
23
+ className: ["ds-skeleton-lines", r].filter(Boolean).join(" "),
24
+ ...i,
25
+ children: Array.from({ length: e }, (e, r) => /* @__PURE__ */ t(n, { style: { animationDelay: `calc(var(--skeleton-stagger) * ${r})` } }, r))
26
+ });
27
+ });
28
+ //#endregion
29
+ export { n as Skeleton, r as SkeletonText };
30
+
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Skeleton","forwardRef","rest","shape","className","size","width","style","SkeletonText","lines","i"],"sources":["../../../src/components/Skeleton/index.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport \"./style.css\";\n\nexport type SkeletonShape = \"text\" | \"heading\" | \"block\" | \"circle\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n shape?: SkeletonShape;\n /** Any CSS length or percentage. Defaults to filling its container. */\n width?: string;\n /** Only for `circle`, where width and height are the same value. */\n size?: string;\n}\n\n/**\n * A placeholder with the shape of the thing that is loading. Never a spinner\n * over a blank panel — the layout must not move when the content arrives.\n */\nexport const Skeleton = forwardRef<HTMLSpanElement, SkeletonProps>(function Skeleton(\n { shape = \"text\", width, size, className, style, ...rest },\n ref,\n) {\n return (\n <span\n ref={ref}\n aria-hidden=\"true\"\n data-shape={shape}\n className={[\"ds-skeleton\", className].filter(Boolean).join(\" \")}\n style={{\n inlineSize: shape === \"circle\" ? size : (width ?? \"100%\"),\n blockSize: shape === \"circle\" ? size : undefined,\n ...style,\n }}\n {...rest}\n />\n );\n});\n\nexport interface SkeletonTextProps extends HTMLAttributes<HTMLDivElement> {\n /** Number of lines; the last one renders short. */\n lines?: number;\n}\n\n/** A paragraph-shaped placeholder. Announced once, as busy, to screen readers. */\nexport const SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(\n function SkeletonText({ lines = 3, className, ...rest }, ref) {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading\"\n className={[\"ds-skeleton-lines\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {Array.from({ length: lines }, (_, i) => (\n <Skeleton\n key={i}\n style={{ animationDelay: `calc(var(--skeleton-stagger) * ${i})` }}\n />\n ))}\n </div>\n );\n },\n);\n"],"mappings":";;;AAiBA,IAAaA,IAAWC,EAA2C,SACjE,EAAE,WAAQ,QAAQ,UAAO,SAAM,cAAW,UAAO,GAAGC,KACpD,GACA;CACA,OACE,kBAAC,QAAD;EACO;EACL,eAAY;EACZ,cAAYC;EACZ,WAAW,CAAC,eAAeC,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAC9D,OAAO;GACL,YAAYD,MAAU,WAAWE,IAAQC,KAAS;GAClD,WAAWH,MAAU,WAAWE,IAAO,KAAA;GACvC,GAAGE;EACL;EACA,GAAIL;CACL,CAAA;AAEL,CAAC,GAQYM,IAAeP,EAC1B,SAAsB,EAAE,WAAQ,GAAG,cAAW,GAAGC,KAAQ,GAAK;CAC5D,OACE,kBAAC,OAAD;EACO;EACL,MAAK;EACL,aAAU;EACV,cAAW;EACX,WAAW,CAAC,qBAAqBE,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EACpE,GAAIF;EAEH,UAAA,MAAM,KAAK,EAAE,QAAQO,EAAM,IAAI,GAAG,MACjC,kBAACT,GAAD,EAEE,OAAO,EAAE,gBAAgB,kCAAkCU,EAAE,GAAG,EACjE,GAFMA,CAEN,CACF;CACE,CAAA;AAET,CACF"}
@@ -0,0 +1,55 @@
1
+ @layer components {
2
+ .ds-skeleton {
3
+ display: block;
4
+ background: color-mix(in srgb, var(--color-text) 9%, var(--color-surface));
5
+ border-radius: var(--field-radius);
6
+ animation: ds-skeleton-pulse var(--skeleton-duration) var(--skeleton-easing) infinite;
7
+ }
8
+
9
+ .ds-skeleton[data-shape="text"] {
10
+ block-size: var(--space-4);
11
+ }
12
+
13
+ .ds-skeleton[data-shape="heading"] {
14
+ block-size: var(--space-6);
15
+ border-radius: var(--radius-sm);
16
+ }
17
+
18
+ .ds-skeleton[data-shape="block"] {
19
+ block-size: var(--space-12);
20
+ border-radius: var(--radius-md);
21
+ }
22
+
23
+ .ds-skeleton[data-shape="circle"] {
24
+ border-radius: var(--radius-pill);
25
+ aspect-ratio: 1;
26
+ }
27
+
28
+ .ds-skeleton-lines {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: var(--space-2);
32
+ }
33
+
34
+ /* Last line is short, the way real text ends. */
35
+ .ds-skeleton-lines > .ds-skeleton:last-child:not(:only-child) {
36
+ inline-size: 62%;
37
+ }
38
+
39
+ @keyframes ds-skeleton-pulse {
40
+ 0%,
41
+ 100% {
42
+ opacity: 100%;
43
+ }
44
+
45
+ 50% {
46
+ opacity: 45%;
47
+ }
48
+ }
49
+
50
+ @media (prefers-reduced-motion: reduce) {
51
+ .ds-skeleton {
52
+ animation: none;
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react"),t=require("react/jsx-runtime");function n(...e){return e.filter(Boolean).join(` `)}function r(e,t,n){return n===t?0:(e-t)/(n-t)*100}var i=(0,e.forwardRef)(function({value:i,defaultValue:a=0,onValueChange:o,min:s=0,max:c=100,step:l=1,hasValueLabel:u=!0,suffix:d,isDisabled:f=!1,className:p,disabled:m,...h},g){let[_,v]=(0,e.useState)(a),y=i??_;return(0,t.jsxs)(`div`,{className:n(`ds-slider`,p),"data-disabled":f||m||void 0,children:[(0,t.jsxs)(`div`,{className:`ds-slider__track`,"data-thumbs":`1`,"data-disabled":f||m||void 0,"data-at-min":y<=s||void 0,"data-at-max":y>=c||void 0,style:{"--slider-from":`0%`,"--slider-to":`${r(y,s,c)}%`},children:[(0,t.jsx)(`span`,{className:`ds-slider__rail`}),(0,t.jsx)(`span`,{className:`ds-slider__fill`}),(0,t.jsx)(`input`,{ref:g,type:`range`,className:`ds-slider__input`,min:s,max:c,step:l,value:y,disabled:f||m,onChange:e=>{let t=Number(e.target.value);i===void 0&&v(t),o?.(t)},...h})]}),u&&(0,t.jsxs)(`output`,{className:`ds-slider__value`,children:[y,d]})]})});function a({value:i,defaultValue:a={min:20,max:80},onValueChange:o,min:s=0,max:c=100,step:l=1,hasValueLabel:u=!0,suffix:d,isDisabled:f=!1,minLabel:p=`Minimum`,maxLabel:m=`Maximum`,className:h}){let[g,_]=(0,e.useState)(a),v=i??g,y=e=>{i===void 0&&_(e),o?.(e)};return(0,t.jsxs)(`div`,{className:n(`ds-slider`,h),"data-disabled":f||void 0,children:[(0,t.jsxs)(`div`,{className:`ds-slider__track`,"data-thumbs":`2`,"data-disabled":f||void 0,"data-at-min":v.min<=s||void 0,"data-at-max":v.max>=c||void 0,style:{"--slider-from":`${r(v.min,s,c)}%`,"--slider-to":`${r(v.max,s,c)}%`},children:[(0,t.jsx)(`span`,{className:`ds-slider__rail`}),(0,t.jsx)(`span`,{className:`ds-slider__fill`}),(0,t.jsx)(`input`,{type:`range`,"aria-label":p,className:`ds-slider__input`,min:s,max:c,step:l,value:v.min,disabled:f,onChange:e=>y({...v,min:Math.min(Number(e.target.value),v.max-l)})}),(0,t.jsx)(`input`,{type:`range`,"aria-label":m,className:`ds-slider__input`,min:s,max:c,step:l,value:v.max,disabled:f,onChange:e=>y({...v,max:Math.max(Number(e.target.value),v.min+l)})})]}),u&&(0,t.jsxs)(`output`,{className:`ds-slider__value`,children:[v.min,d,` – `,v.max,d]})]})}exports.RangeSlider=a,exports.Slider=i;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["forwardRef","useState","react","react_jsx_runtime","cx","parts","percent","max","min","value","Slider","rest","internal","setInternal","defaultValue","current","className","isDisabled","disabled","next","event","onValueChange","hasValueLabel","suffix","RangeSlider","commit","minLabel","step","maxLabel"],"sources":["../../../src/components/Slider/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useState,\n type InputHTMLAttributes,\n} from \"react\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction percent(value: number, min: number, max: number) {\n if (max === min) return 0;\n return ((value - min) / (max - min)) * 100;\n}\n\nexport interface SliderProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"value\" | \"defaultValue\" | \"onChange\"> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n /** Print the current value, in the system's mono, beside the track. */\n hasValueLabel?: boolean;\n /** Appended to the printed value — \"%\", \"px\", \"s\". */\n suffix?: string;\n isDisabled?: boolean;\n}\n\n/** One value on a continuous scale. The filled part of the track is the value. */\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n value,\n defaultValue = 0,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n hasValueLabel = true,\n suffix,\n isDisabled = false,\n className,\n disabled,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState(defaultValue);\n const current = value ?? internal;\n\n return (\n <div className={cx(\"ds-slider\", className)} data-disabled={isDisabled || disabled || undefined}>\n <div\n className=\"ds-slider__track\"\n data-thumbs=\"1\"\n data-disabled={isDisabled || disabled || undefined}\n data-at-min={current <= min || undefined}\n data-at-max={current >= max || undefined}\n style={{\n [\"--slider-from\" as string]: \"0%\",\n [\"--slider-to\" as string]: `${percent(current, min, max)}%`,\n }}\n >\n <span className=\"ds-slider__rail\" />\n <span className=\"ds-slider__fill\" />\n <input\n ref={ref}\n type=\"range\"\n className=\"ds-slider__input\"\n min={min}\n max={max}\n step={step}\n value={current}\n disabled={isDisabled || disabled}\n onChange={(event) => {\n const next = Number(event.target.value);\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n }}\n {...rest}\n />\n </div>\n {hasValueLabel && (\n <output className=\"ds-slider__value\">\n {current}\n {suffix}\n </output>\n )}\n </div>\n );\n});\n\nexport interface RangeSliderValue {\n min: number;\n max: number;\n}\n\nexport interface RangeSliderProps {\n value?: RangeSliderValue;\n defaultValue?: RangeSliderValue;\n onValueChange?: (value: RangeSliderValue) => void;\n min?: number;\n max?: number;\n step?: number;\n hasValueLabel?: boolean;\n suffix?: string;\n isDisabled?: boolean;\n minLabel?: string;\n maxLabel?: string;\n className?: string;\n}\n\n/**\n * A span on a scale — two thumbs on one track. The thumbs cannot cross; each\n * one stops a `step` short of the other.\n */\nexport function RangeSlider({\n value,\n defaultValue = { min: 20, max: 80 },\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n hasValueLabel = true,\n suffix,\n isDisabled = false,\n minLabel = \"Minimum\",\n maxLabel = \"Maximum\",\n className,\n}: RangeSliderProps) {\n const [internal, setInternal] = useState<RangeSliderValue>(defaultValue);\n const current = value ?? internal;\n\n const commit = (next: RangeSliderValue) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n return (\n <div className={cx(\"ds-slider\", className)} data-disabled={isDisabled || undefined}>\n <div\n className=\"ds-slider__track\"\n data-thumbs=\"2\"\n data-disabled={isDisabled || undefined}\n data-at-min={current.min <= min || undefined}\n data-at-max={current.max >= max || undefined}\n style={{\n [\"--slider-from\" as string]: `${percent(current.min, min, max)}%`,\n [\"--slider-to\" as string]: `${percent(current.max, min, max)}%`,\n }}\n >\n <span className=\"ds-slider__rail\" />\n <span className=\"ds-slider__fill\" />\n <input\n type=\"range\"\n aria-label={minLabel}\n className=\"ds-slider__input\"\n min={min}\n max={max}\n step={step}\n value={current.min}\n disabled={isDisabled}\n onChange={(event) =>\n commit({ ...current, min: Math.min(Number(event.target.value), current.max - step) })\n }\n />\n <input\n type=\"range\"\n aria-label={maxLabel}\n className=\"ds-slider__input\"\n min={min}\n max={max}\n step={step}\n value={current.max}\n disabled={isDisabled}\n onChange={(event) =>\n commit({ ...current, max: Math.max(Number(event.target.value), current.min + step) })\n }\n />\n </div>\n {hasValueLabel && (\n <output className=\"ds-slider__value\">\n {current.min}\n {suffix} – {current.max}\n {suffix}\n </output>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type InputHTMLAttributes } from "react";
2
+ export interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "defaultValue" | "onChange"> {
3
+ value?: number;
4
+ defaultValue?: number;
5
+ onValueChange?: (value: number) => void;
6
+ min?: number;
7
+ max?: number;
8
+ step?: number;
9
+ /** Print the current value, in the system's mono, beside the track. */
10
+ hasValueLabel?: boolean;
11
+ /** Appended to the printed value — "%", "px", "s". */
12
+ suffix?: string;
13
+ isDisabled?: boolean;
14
+ }
15
+ /** One value on a continuous scale. The filled part of the track is the value. */
16
+ export declare const Slider: import("react").ForwardRefExoticComponent<SliderProps & import("react").RefAttributes<HTMLInputElement>>;
17
+ export interface RangeSliderValue {
18
+ min: number;
19
+ max: number;
20
+ }
21
+ export interface RangeSliderProps {
22
+ value?: RangeSliderValue;
23
+ defaultValue?: RangeSliderValue;
24
+ onValueChange?: (value: RangeSliderValue) => void;
25
+ min?: number;
26
+ max?: number;
27
+ step?: number;
28
+ hasValueLabel?: boolean;
29
+ suffix?: string;
30
+ isDisabled?: boolean;
31
+ minLabel?: string;
32
+ maxLabel?: string;
33
+ className?: string;
34
+ }
35
+ /**
36
+ * A span on a scale — two thumbs on one track. The thumbs cannot cross; each
37
+ * one stops a `step` short of the other.
38
+ */
39
+ export declare function RangeSlider({ value, defaultValue, onValueChange, min, max, step, hasValueLabel, suffix, isDisabled, minLabel, maxLabel, className, }: RangeSliderProps): import("react").JSX.Element;
40
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/Slider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,OAAO,CAAC;AACf,OAAO,aAAa,CAAC;AAWrB,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,kFAAkF;AAClF,eAAO,MAAM,MAAM,0GA4DjB,CAAC;AAEH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,YAAmC,EACnC,aAAa,EACb,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAoB,EACpB,MAAM,EACN,UAAkB,EAClB,QAAoB,EACpB,QAAoB,EACpB,SAAS,GACV,EAAE,gBAAgB,+BA4DlB"}
@@ -0,0 +1,40 @@
1
+ import { type InputHTMLAttributes } from "react";
2
+ export interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "defaultValue" | "onChange"> {
3
+ value?: number;
4
+ defaultValue?: number;
5
+ onValueChange?: (value: number) => void;
6
+ min?: number;
7
+ max?: number;
8
+ step?: number;
9
+ /** Print the current value, in the system's mono, beside the track. */
10
+ hasValueLabel?: boolean;
11
+ /** Appended to the printed value — "%", "px", "s". */
12
+ suffix?: string;
13
+ isDisabled?: boolean;
14
+ }
15
+ /** One value on a continuous scale. The filled part of the track is the value. */
16
+ export declare const Slider: import("react").ForwardRefExoticComponent<SliderProps & import("react").RefAttributes<HTMLInputElement>>;
17
+ export interface RangeSliderValue {
18
+ min: number;
19
+ max: number;
20
+ }
21
+ export interface RangeSliderProps {
22
+ value?: RangeSliderValue;
23
+ defaultValue?: RangeSliderValue;
24
+ onValueChange?: (value: RangeSliderValue) => void;
25
+ min?: number;
26
+ max?: number;
27
+ step?: number;
28
+ hasValueLabel?: boolean;
29
+ suffix?: string;
30
+ isDisabled?: boolean;
31
+ minLabel?: string;
32
+ maxLabel?: string;
33
+ className?: string;
34
+ }
35
+ /**
36
+ * A span on a scale — two thumbs on one track. The thumbs cannot cross; each
37
+ * one stops a `step` short of the other.
38
+ */
39
+ export declare function RangeSlider({ value, defaultValue, onValueChange, min, max, step, hasValueLabel, suffix, isDisabled, minLabel, maxLabel, className, }: RangeSliderProps): import("react").JSX.Element;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Slider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,OAAO,CAAC;AACf,OAAO,aAAa,CAAC;AAWrB,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,kFAAkF;AAClF,eAAO,MAAM,MAAM,0GA4DjB,CAAC;AAEH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,YAAmC,EACnC,aAAa,EACb,GAAO,EACP,GAAS,EACT,IAAQ,EACR,aAAoB,EACpB,MAAM,EACN,UAAkB,EAClB,QAAoB,EACpB,QAAoB,EACpB,SAAS,GACV,EAAE,gBAAgB,+BA4DlB"}
@@ -0,0 +1,117 @@
1
+ import { forwardRef as e, useState as t } from "react";
2
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
3
+ //#region src/components/Slider/index.tsx
4
+ function i(...e) {
5
+ return e.filter(Boolean).join(" ");
6
+ }
7
+ function a(e, t, n) {
8
+ return n === t ? 0 : (e - t) / (n - t) * 100;
9
+ }
10
+ var o = e(function({ value: e, defaultValue: o = 0, onValueChange: s, min: c = 0, max: l = 100, step: u = 1, hasValueLabel: d = !0, suffix: f, isDisabled: p = !1, className: m, disabled: h, ...g }, _) {
11
+ let [v, y] = t(o), b = e ?? v;
12
+ return /* @__PURE__ */ r("div", {
13
+ className: i("ds-slider", m),
14
+ "data-disabled": p || h || void 0,
15
+ children: [/* @__PURE__ */ r("div", {
16
+ className: "ds-slider__track",
17
+ "data-thumbs": "1",
18
+ "data-disabled": p || h || void 0,
19
+ "data-at-min": b <= c || void 0,
20
+ "data-at-max": b >= l || void 0,
21
+ style: {
22
+ "--slider-from": "0%",
23
+ "--slider-to": `${a(b, c, l)}%`
24
+ },
25
+ children: [
26
+ /* @__PURE__ */ n("span", { className: "ds-slider__rail" }),
27
+ /* @__PURE__ */ n("span", { className: "ds-slider__fill" }),
28
+ /* @__PURE__ */ n("input", {
29
+ ref: _,
30
+ type: "range",
31
+ className: "ds-slider__input",
32
+ min: c,
33
+ max: l,
34
+ step: u,
35
+ value: b,
36
+ disabled: p || h,
37
+ onChange: (t) => {
38
+ let n = Number(t.target.value);
39
+ e === void 0 && y(n), s?.(n);
40
+ },
41
+ ...g
42
+ })
43
+ ]
44
+ }), d && /* @__PURE__ */ r("output", {
45
+ className: "ds-slider__value",
46
+ children: [b, f]
47
+ })]
48
+ });
49
+ });
50
+ function s({ value: e, defaultValue: o = {
51
+ min: 20,
52
+ max: 80
53
+ }, onValueChange: s, min: c = 0, max: l = 100, step: u = 1, hasValueLabel: d = !0, suffix: f, isDisabled: p = !1, minLabel: m = "Minimum", maxLabel: h = "Maximum", className: g }) {
54
+ let [_, v] = t(o), y = e ?? _, b = (t) => {
55
+ e === void 0 && v(t), s?.(t);
56
+ };
57
+ return /* @__PURE__ */ r("div", {
58
+ className: i("ds-slider", g),
59
+ "data-disabled": p || void 0,
60
+ children: [/* @__PURE__ */ r("div", {
61
+ className: "ds-slider__track",
62
+ "data-thumbs": "2",
63
+ "data-disabled": p || void 0,
64
+ "data-at-min": y.min <= c || void 0,
65
+ "data-at-max": y.max >= l || void 0,
66
+ style: {
67
+ "--slider-from": `${a(y.min, c, l)}%`,
68
+ "--slider-to": `${a(y.max, c, l)}%`
69
+ },
70
+ children: [
71
+ /* @__PURE__ */ n("span", { className: "ds-slider__rail" }),
72
+ /* @__PURE__ */ n("span", { className: "ds-slider__fill" }),
73
+ /* @__PURE__ */ n("input", {
74
+ type: "range",
75
+ "aria-label": m,
76
+ className: "ds-slider__input",
77
+ min: c,
78
+ max: l,
79
+ step: u,
80
+ value: y.min,
81
+ disabled: p,
82
+ onChange: (e) => b({
83
+ ...y,
84
+ min: Math.min(Number(e.target.value), y.max - u)
85
+ })
86
+ }),
87
+ /* @__PURE__ */ n("input", {
88
+ type: "range",
89
+ "aria-label": h,
90
+ className: "ds-slider__input",
91
+ min: c,
92
+ max: l,
93
+ step: u,
94
+ value: y.max,
95
+ disabled: p,
96
+ onChange: (e) => b({
97
+ ...y,
98
+ max: Math.max(Number(e.target.value), y.min + u)
99
+ })
100
+ })
101
+ ]
102
+ }), d && /* @__PURE__ */ r("output", {
103
+ className: "ds-slider__value",
104
+ children: [
105
+ y.min,
106
+ f,
107
+ " – ",
108
+ y.max,
109
+ f
110
+ ]
111
+ })]
112
+ });
113
+ }
114
+ //#endregion
115
+ export { s as RangeSlider, o as Slider };
116
+
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["cx","parts","percent","max","min","value","Slider","forwardRef","rest","internal","setInternal","useState","defaultValue","current","className","isDisabled","disabled","next","event","onValueChange","hasValueLabel","suffix","RangeSlider","commit","minLabel","step","maxLabel"],"sources":["../../../src/components/Slider/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useState,\n type InputHTMLAttributes,\n} from \"react\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nfunction percent(value: number, min: number, max: number) {\n if (max === min) return 0;\n return ((value - min) / (max - min)) * 100;\n}\n\nexport interface SliderProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"value\" | \"defaultValue\" | \"onChange\"> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n /** Print the current value, in the system's mono, beside the track. */\n hasValueLabel?: boolean;\n /** Appended to the printed value — \"%\", \"px\", \"s\". */\n suffix?: string;\n isDisabled?: boolean;\n}\n\n/** One value on a continuous scale. The filled part of the track is the value. */\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n value,\n defaultValue = 0,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n hasValueLabel = true,\n suffix,\n isDisabled = false,\n className,\n disabled,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState(defaultValue);\n const current = value ?? internal;\n\n return (\n <div className={cx(\"ds-slider\", className)} data-disabled={isDisabled || disabled || undefined}>\n <div\n className=\"ds-slider__track\"\n data-thumbs=\"1\"\n data-disabled={isDisabled || disabled || undefined}\n data-at-min={current <= min || undefined}\n data-at-max={current >= max || undefined}\n style={{\n [\"--slider-from\" as string]: \"0%\",\n [\"--slider-to\" as string]: `${percent(current, min, max)}%`,\n }}\n >\n <span className=\"ds-slider__rail\" />\n <span className=\"ds-slider__fill\" />\n <input\n ref={ref}\n type=\"range\"\n className=\"ds-slider__input\"\n min={min}\n max={max}\n step={step}\n value={current}\n disabled={isDisabled || disabled}\n onChange={(event) => {\n const next = Number(event.target.value);\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n }}\n {...rest}\n />\n </div>\n {hasValueLabel && (\n <output className=\"ds-slider__value\">\n {current}\n {suffix}\n </output>\n )}\n </div>\n );\n});\n\nexport interface RangeSliderValue {\n min: number;\n max: number;\n}\n\nexport interface RangeSliderProps {\n value?: RangeSliderValue;\n defaultValue?: RangeSliderValue;\n onValueChange?: (value: RangeSliderValue) => void;\n min?: number;\n max?: number;\n step?: number;\n hasValueLabel?: boolean;\n suffix?: string;\n isDisabled?: boolean;\n minLabel?: string;\n maxLabel?: string;\n className?: string;\n}\n\n/**\n * A span on a scale — two thumbs on one track. The thumbs cannot cross; each\n * one stops a `step` short of the other.\n */\nexport function RangeSlider({\n value,\n defaultValue = { min: 20, max: 80 },\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n hasValueLabel = true,\n suffix,\n isDisabled = false,\n minLabel = \"Minimum\",\n maxLabel = \"Maximum\",\n className,\n}: RangeSliderProps) {\n const [internal, setInternal] = useState<RangeSliderValue>(defaultValue);\n const current = value ?? internal;\n\n const commit = (next: RangeSliderValue) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n return (\n <div className={cx(\"ds-slider\", className)} data-disabled={isDisabled || undefined}>\n <div\n className=\"ds-slider__track\"\n data-thumbs=\"2\"\n data-disabled={isDisabled || undefined}\n data-at-min={current.min <= min || undefined}\n data-at-max={current.max >= max || undefined}\n style={{\n [\"--slider-from\" as string]: `${percent(current.min, min, max)}%`,\n [\"--slider-to\" as string]: `${percent(current.max, min, max)}%`,\n }}\n >\n <span className=\"ds-slider__rail\" />\n <span className=\"ds-slider__fill\" />\n <input\n type=\"range\"\n aria-label={minLabel}\n className=\"ds-slider__input\"\n min={min}\n max={max}\n step={step}\n value={current.min}\n disabled={isDisabled}\n onChange={(event) =>\n commit({ ...current, min: Math.min(Number(event.target.value), current.max - step) })\n }\n />\n <input\n type=\"range\"\n aria-label={maxLabel}\n className=\"ds-slider__input\"\n min={min}\n max={max}\n step={step}\n value={current.max}\n disabled={isDisabled}\n onChange={(event) =>\n commit({ ...current, max: Math.max(Number(event.target.value), current.min + step) })\n }\n />\n </div>\n {hasValueLabel && (\n <output className=\"ds-slider__value\">\n {current.min}\n {suffix} – {current.max}\n {suffix}\n </output>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ @layer components {
2
+ .ds-slider {
3
+ display: flex;
4
+ align-items: center;
5
+ gap: var(--space-4);
6
+ inline-size: 100%;
7
+ }
8
+
9
+ .ds-slider__value {
10
+ flex: none;
11
+ min-inline-size: 4.5rem;
12
+ color: var(--color-text-muted);
13
+ font-family: var(--font-mono);
14
+ font-size: var(--font-size-xs);
15
+ text-align: end;
16
+ }
17
+
18
+ /* One painted track, one or two thumbs. The rail spans the whole width; the
19
+ * fill lives inside the thumb travel, so a thumb always sits on its end of
20
+ * the fill and the left end reaches the edge. */
21
+ .ds-slider__track {
22
+ position: relative;
23
+ flex: 1;
24
+ min-inline-size: 0;
25
+ block-size: var(--slider-thumb-size);
26
+ }
27
+
28
+ .ds-slider__rail,
29
+ .ds-slider__fill::before {
30
+ position: absolute;
31
+ inset-block-start: calc((var(--slider-thumb-size) - var(--slider-track-height)) / 2);
32
+ block-size: var(--slider-track-height);
33
+ border-radius: var(--radius-pill);
34
+ }
35
+
36
+ .ds-slider__rail {
37
+ inset-inline: 0;
38
+ background: var(--field-rest);
39
+ }
40
+
41
+ .ds-slider__fill {
42
+ position: absolute;
43
+ inset-block: 0;
44
+ inset-inline: calc(var(--slider-thumb-size) / 2);
45
+ }
46
+
47
+ .ds-slider__fill::before {
48
+ content: "";
49
+ inset-inline-start: var(--slider-from, 0%);
50
+ inset-inline-end: calc(100% - var(--slider-to, 0%));
51
+ background: var(--color-primary);
52
+ }
53
+
54
+ /* At either endpoint the paint reaches the rail edge; between endpoints it
55
+ * terminates under the centre of the thumb. */
56
+ .ds-slider__track[data-thumbs="1"] .ds-slider__fill::before,
57
+ .ds-slider__track[data-at-min] .ds-slider__fill::before {
58
+ inset-inline-start: calc(var(--slider-thumb-size) / -2);
59
+ }
60
+
61
+ .ds-slider__track[data-at-max] .ds-slider__fill::before {
62
+ inset-inline-end: calc(var(--slider-thumb-size) / -2);
63
+ }
64
+
65
+ .ds-slider__input {
66
+ position: absolute;
67
+ inset: 0;
68
+ inline-size: 100%;
69
+ block-size: var(--slider-thumb-size);
70
+ margin: 0;
71
+ appearance: none;
72
+ background: transparent;
73
+ cursor: pointer;
74
+ }
75
+
76
+ /* Stacked inputs on a range: only the thumbs take the pointer, so either
77
+ * end can always be grabbed. */
78
+ .ds-slider__track[data-thumbs="2"] .ds-slider__input {
79
+ pointer-events: none;
80
+ }
81
+
82
+ .ds-slider__input::-webkit-slider-runnable-track {
83
+ block-size: var(--slider-thumb-size);
84
+ background: transparent;
85
+ }
86
+
87
+ .ds-slider__input::-moz-range-track {
88
+ block-size: var(--slider-thumb-size);
89
+ background: transparent;
90
+ }
91
+
92
+ .ds-slider__input::-webkit-slider-thumb {
93
+ appearance: none;
94
+ inline-size: var(--slider-thumb-size);
95
+ block-size: var(--slider-thumb-size);
96
+ margin: 0;
97
+ border: var(--control-border-width) solid var(--control-border-color);
98
+ border-radius: var(--radius-pill);
99
+ background: var(--color-surface);
100
+ pointer-events: auto;
101
+ transition: background-color var(--duration-fast) var(--ease-standard);
102
+ }
103
+
104
+ .ds-slider__input::-moz-range-thumb {
105
+ inline-size: var(--slider-thumb-size);
106
+ block-size: var(--slider-thumb-size);
107
+ box-sizing: border-box;
108
+ border: var(--control-border-width) solid var(--control-border-color);
109
+ border-radius: var(--radius-pill);
110
+ background: var(--color-surface);
111
+ pointer-events: auto;
112
+ }
113
+
114
+ .ds-slider__input:hover:not(:disabled)::-webkit-slider-thumb {
115
+ background: var(--field-hover);
116
+ }
117
+
118
+ .ds-slider__input:hover:not(:disabled)::-moz-range-thumb {
119
+ background: var(--field-hover);
120
+ }
121
+
122
+ .ds-slider__input:focus-visible {
123
+ outline: var(--control-border-width) solid var(--color-focus);
124
+ outline-offset: 2px;
125
+ border-radius: var(--radius-pill);
126
+ }
127
+
128
+ /* Disabled reads on the whole track, not just the thumb: the fill drops to a
129
+ * muted tint and the thumb goes translucent so the fill shows through it. */
130
+ .ds-slider__track[data-disabled] .ds-slider__rail {
131
+ background: color-mix(in srgb, var(--color-text) 6%, var(--field-bg));
132
+ }
133
+
134
+ .ds-slider__track[data-disabled] .ds-slider__fill::before {
135
+ background: color-mix(in srgb, var(--color-primary) 28%, var(--field-rest));
136
+ }
137
+
138
+ .ds-slider__input:disabled {
139
+ cursor: not-allowed;
140
+ }
141
+
142
+ .ds-slider__input:disabled::-webkit-slider-thumb {
143
+ border-color: color-mix(in srgb, var(--control-border-color) 45%, transparent);
144
+ background: color-mix(in srgb, var(--color-surface) 55%, transparent);
145
+ }
146
+
147
+ .ds-slider__input:disabled::-moz-range-thumb {
148
+ border-color: color-mix(in srgb, var(--control-border-color) 45%, transparent);
149
+ background: color-mix(in srgb, var(--color-surface) 55%, transparent);
150
+ }
151
+
152
+ .ds-slider[data-disabled] .ds-slider__value {
153
+ opacity: 55%;
154
+ }
155
+
156
+ }
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/Icon-CWsA1W83.cjs");let t=require("react"),n=require("react/jsx-runtime"),r=require("@dnd-kit/core"),i=require("@dnd-kit/sortable"),a=require("@dnd-kit/utilities"),o=require("@dnd-kit/modifiers");var s=(0,t.forwardRef)(function({items:a,onReorder:s,renderDragOverlay:c,className:l,children:u,...d},f){let p=(0,t.useId)(),[m,h]=(0,t.useState)(null),g=(0,r.useSensors)((0,r.useSensor)(r.PointerSensor,{activationConstraint:{distance:4}}),(0,r.useSensor)(r.KeyboardSensor,{coordinateGetter:i.sortableKeyboardCoordinates})),_=(0,t.useCallback)(e=>{h(String(e.active.id))},[]),v=(0,t.useCallback)(e=>{h(null);let{active:t,over:n}=e;if(!n||t.id===n.id)return;let r=a.indexOf(String(t.id)),o=a.indexOf(String(n.id));r<0||o<0||s?.((0,i.arrayMove)(a,r,o))},[a,s]);return(0,n.jsxs)(r.DndContext,{id:`ds-sortable-list-${p}`,sensors:g,collisionDetection:r.closestCenter,modifiers:[o.restrictToVerticalAxis],onDragStart:_,onDragEnd:v,onDragCancel:()=>h(null),children:[(0,n.jsx)(i.SortableContext,{items:a,strategy:i.verticalListSortingStrategy,children:(0,n.jsx)(`ul`,{ref:f,className:[`ds-sortable-list`,l].filter(Boolean).join(` `),...d,children:u})}),(0,n.jsx)(r.DragOverlay,{children:m?(0,n.jsxs)(`div`,{className:`ds-sortable-item`,"data-overlay":!0,children:[(0,n.jsx)(`span`,{className:`ds-sortable-item__handle`,"aria-hidden":`true`,children:(0,n.jsx)(e.t,{name:`grip-vertical`})}),(0,n.jsx)(`div`,{className:`ds-sortable-item__content`,children:c?.(m)})]}):null})]})}),c=(0,t.forwardRef)(function({id:t,label:r,action:o,className:s,children:c,...l},u){let{attributes:d,listeners:f,setNodeRef:p,transform:m,transition:h,isDragging:g}=(0,i.useSortable)({id:t});return(0,n.jsxs)(`li`,{ref:e=>{p(e),typeof u==`function`?u(e):u&&(u.current=e)},style:{transform:a.CSS.Translate.toString(m),transition:h},className:[`ds-sortable-item`,s].filter(Boolean).join(` `),"data-dragging":g||void 0,...l,children:[(0,n.jsx)(`button`,{type:`button`,className:`ds-sortable-item__handle`,"aria-label":r?`Move ${r}`:`Move item`,...d,...f,children:(0,n.jsx)(e.t,{name:`grip-vertical`})}),(0,n.jsx)(`div`,{className:`ds-sortable-item__content`,children:c}),o&&(0,n.jsx)(`div`,{className:`ds-sortable-item__action`,children:o})]})});exports.SortableList=s,exports.SortableListItem=c;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["forwardRef","useId","useState","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","useCallback","arrayMove","DndContext","closestCenter","restrictToVerticalAxis","SortableContext","verticalListSortingStrategy","DragOverlay","Icon","useSortable","CSS","require_Icon","react","react_jsx_runtime","_dnd_kit_core","_dnd_kit_sortable","_dnd_kit_utilities","_dnd_kit_modifiers","SortableList","rest","dndId","activeId","setActiveId","sensors","handleStart","event","handleEnd","over","active","from","items","to","onReorder","className","renderDragOverlay","SortableListItem","setNodeRef","node","ref","transform","isDragging","label","attributes","listeners","action"],"sources":["../../../src/components/SortableList/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useId,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport {\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n} from \"@dnd-kit/core\";\nimport { restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Icon } from \"../Icon\";\nimport \"./style.css\";\n\nexport interface SortableListProps extends Omit<HTMLAttributes<HTMLUListElement>, \"onDragEnd\"> {\n /** Item ids in render order. */\n items: string[];\n /** Fired with the whole list in its new order. Apply it to your own state. */\n onReorder?: (items: string[]) => void;\n /** Rendered inside the drag overlay while a row is in the air. */\n renderDragOverlay?: (id: string) => ReactNode;\n children?: ReactNode;\n}\n\n/**\n * A single vertical list you can re-order — the board's mechanics without the\n * lanes. Each row carries a grip on the left; the list owns dragging only, the\n * data stays yours: react to `onReorder`.\n */\nexport const SortableList = forwardRef<HTMLUListElement, SortableListProps>(\n function SortableList({ items, onReorder, renderDragOverlay, className, children, ...rest }, ref) {\n const dndId = useId();\n const [activeId, setActiveId] = useState<string | null>(null);\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n\n const handleStart = useCallback((event: DragStartEvent) => {\n setActiveId(String(event.active.id));\n }, []);\n\n const handleEnd = useCallback(\n (event: DragEndEvent) => {\n setActiveId(null);\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const from = items.indexOf(String(active.id));\n const to = items.indexOf(String(over.id));\n if (from < 0 || to < 0) return;\n onReorder?.(arrayMove(items, from, to));\n },\n [items, onReorder],\n );\n\n return (\n <DndContext\n id={`ds-sortable-list-${dndId}`}\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToVerticalAxis]}\n onDragStart={handleStart}\n onDragEnd={handleEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n <ul\n ref={ref}\n className={[\"ds-sortable-list\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </ul>\n </SortableContext>\n <DragOverlay>\n {activeId ? (\n <div className=\"ds-sortable-item\" data-overlay>\n <span className=\"ds-sortable-item__handle\" aria-hidden=\"true\">\n <Icon name=\"grip-vertical\" />\n </span>\n <div className=\"ds-sortable-item__content\">{renderDragOverlay?.(activeId)}</div>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n },\n);\n\nexport interface SortableListItemProps extends HTMLAttributes<HTMLLIElement> {\n id: string;\n /** Accessible name announced when the row is picked up. */\n label?: string;\n /** A control at the end of the row, e.g. a menu or a delete button. */\n action?: ReactNode;\n children?: ReactNode;\n}\n\n/** One row of a `SortableList`. The grip on the left is the only handle. */\nexport const SortableListItem = forwardRef<HTMLLIElement, SortableListItemProps>(\n function SortableListItem({ id, label, action, className, children, ...rest }, ref) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id,\n });\n\n return (\n <li\n ref={(node) => {\n setNodeRef(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n style={{ transform: CSS.Translate.toString(transform), transition }}\n className={[\"ds-sortable-item\", className].filter(Boolean).join(\" \")}\n data-dragging={isDragging || undefined}\n {...rest}\n >\n <button\n type=\"button\"\n className=\"ds-sortable-item__handle\"\n aria-label={label ? `Move ${label}` : \"Move item\"}\n {...attributes}\n {...listeners}\n >\n <Icon name=\"grip-vertical\" />\n </button>\n <div className=\"ds-sortable-item__content\">{children}</div>\n {action && <div className=\"ds-sortable-item__action\">{action}</div>}\n </li>\n );\n },\n);\n"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ export interface SortableListProps extends Omit<HTMLAttributes<HTMLUListElement>, "onDragEnd"> {
3
+ /** Item ids in render order. */
4
+ items: string[];
5
+ /** Fired with the whole list in its new order. Apply it to your own state. */
6
+ onReorder?: (items: string[]) => void;
7
+ /** Rendered inside the drag overlay while a row is in the air. */
8
+ renderDragOverlay?: (id: string) => ReactNode;
9
+ children?: ReactNode;
10
+ }
11
+ /**
12
+ * A single vertical list you can re-order — the board's mechanics without the
13
+ * lanes. Each row carries a grip on the left; the list owns dragging only, the
14
+ * data stays yours: react to `onReorder`.
15
+ */
16
+ export declare const SortableList: import("react").ForwardRefExoticComponent<SortableListProps & import("react").RefAttributes<HTMLUListElement>>;
17
+ export interface SortableListItemProps extends HTMLAttributes<HTMLLIElement> {
18
+ id: string;
19
+ /** Accessible name announced when the row is picked up. */
20
+ label?: string;
21
+ /** A control at the end of the row, e.g. a menu or a delete button. */
22
+ action?: ReactNode;
23
+ children?: ReactNode;
24
+ }
25
+ /** One row of a `SortableList`. The grip on the left is the only handle. */
26
+ export declare const SortableListItem: import("react").ForwardRefExoticComponent<SortableListItemProps & import("react").RefAttributes<HTMLLIElement>>;
27
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/SortableList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAsBf,OAAO,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC5F,gCAAgC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,gHA0DxB,CAAC;AAEF,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,aAAa,CAAC;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,iHAgC5B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ export interface SortableListProps extends Omit<HTMLAttributes<HTMLUListElement>, "onDragEnd"> {
3
+ /** Item ids in render order. */
4
+ items: string[];
5
+ /** Fired with the whole list in its new order. Apply it to your own state. */
6
+ onReorder?: (items: string[]) => void;
7
+ /** Rendered inside the drag overlay while a row is in the air. */
8
+ renderDragOverlay?: (id: string) => ReactNode;
9
+ children?: ReactNode;
10
+ }
11
+ /**
12
+ * A single vertical list you can re-order — the board's mechanics without the
13
+ * lanes. Each row carries a grip on the left; the list owns dragging only, the
14
+ * data stays yours: react to `onReorder`.
15
+ */
16
+ export declare const SortableList: import("react").ForwardRefExoticComponent<SortableListProps & import("react").RefAttributes<HTMLUListElement>>;
17
+ export interface SortableListItemProps extends HTMLAttributes<HTMLLIElement> {
18
+ id: string;
19
+ /** Accessible name announced when the row is picked up. */
20
+ label?: string;
21
+ /** A control at the end of the row, e.g. a menu or a delete button. */
22
+ action?: ReactNode;
23
+ children?: ReactNode;
24
+ }
25
+ /** One row of a `SortableList`. The grip on the left is the only handle. */
26
+ export declare const SortableListItem: import("react").ForwardRefExoticComponent<SortableListItemProps & import("react").RefAttributes<HTMLLIElement>>;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SortableList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAsBf,OAAO,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC5F,gCAAgC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,gHA0DxB,CAAC;AAEF,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,aAAa,CAAC;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,iHAgC5B,CAAC"}