@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,133 @@
1
+ @layer components {
2
+ .ds-selection-card {
3
+ display: flex;
4
+ align-items: start;
5
+ gap: var(--space-3);
6
+ padding: var(--space-4);
7
+ min-inline-size: var(--choice-card-min-width);
8
+ background: var(--color-surface);
9
+ border: var(--control-border-width) solid var(--control-border-color);
10
+ border-radius: var(--field-radius);
11
+ cursor: pointer;
12
+ transition:
13
+ background-color var(--duration-fast) var(--ease-standard),
14
+ border-color var(--duration-fast) var(--ease-standard);
15
+ }
16
+
17
+ .ds-selection-card:hover:not(:has(:disabled)) {
18
+ background: var(--field-hover);
19
+ }
20
+
21
+ .ds-selection-card:has(.ds-selection-card__control:checked) {
22
+ background: var(--color-primary-soft);
23
+ border-color: var(--color-primary);
24
+ }
25
+
26
+ .ds-selection-card:has(.ds-selection-card__control:focus-visible) {
27
+ outline: var(--control-border-width) solid var(--color-focus);
28
+ outline-offset: 2px;
29
+ }
30
+
31
+ .ds-selection-card:has(.ds-selection-card__control[aria-invalid="true"]) {
32
+ border-color: var(--color-danger);
33
+ }
34
+
35
+ .ds-selection-card:has(.ds-selection-card__control:disabled) {
36
+ cursor: not-allowed;
37
+ opacity: 45%;
38
+ }
39
+
40
+ /* Same control geometry as the bare checkbox and radio. */
41
+ .ds-selection-card__control {
42
+ appearance: none;
43
+ flex: none;
44
+ inline-size: var(--icon-md);
45
+ block-size: var(--icon-md);
46
+ margin: 0;
47
+ margin-block-start: calc((1lh - var(--icon-md)) / 2);
48
+ border: var(--control-border-width) solid var(--control-border-color);
49
+ background: var(--color-surface);
50
+ cursor: inherit;
51
+ display: grid;
52
+ place-content: center;
53
+ }
54
+
55
+ .ds-selection-card__control[data-kind="checkbox"] {
56
+ border-radius: var(--field-radius);
57
+ }
58
+
59
+ .ds-selection-card__control[data-kind="radio"] {
60
+ border-radius: var(--radius-pill);
61
+ }
62
+
63
+ .ds-selection-card__control[data-kind="checkbox"]:checked {
64
+ background: var(--color-primary);
65
+ }
66
+
67
+ .ds-selection-card__control[data-kind="checkbox"]:checked::before {
68
+ content: "";
69
+ inline-size: 13px;
70
+ block-size: 13px;
71
+ background: var(--color-text-on-solid);
72
+ clip-path: polygon(14% 47%, 0 61%, 40% 100%, 100% 22%, 85% 10%, 38% 71%);
73
+ }
74
+
75
+ .ds-selection-card__control[data-kind="radio"]:checked::before {
76
+ content: "";
77
+ inline-size: var(--space-2);
78
+ block-size: var(--space-2);
79
+ border-radius: var(--radius-pill);
80
+ background: var(--color-primary);
81
+ }
82
+
83
+
84
+
85
+
86
+ .ds-selection-card__text {
87
+ display: flex;
88
+ flex-direction: column;
89
+ gap: var(--space-1);
90
+ min-inline-size: 0;
91
+ }
92
+
93
+ .ds-selection-card__title {
94
+ font-size: var(--font-size-md);
95
+ font-weight: var(--font-weight-bold);
96
+ line-height: var(--line-height-body);
97
+ }
98
+
99
+ .ds-selection-card__description {
100
+ color: var(--color-text-muted);
101
+ font-size: var(--font-size-sm);
102
+ line-height: var(--line-height-body);
103
+ }
104
+
105
+ .ds-selection-card__extra {
106
+ margin-block-start: var(--space-1);
107
+ display: flex;
108
+ flex-wrap: wrap;
109
+ align-items: center;
110
+ gap: var(--space-2);
111
+ }
112
+
113
+ .ds-selection-card-group {
114
+ border: 0;
115
+ margin: 0;
116
+ padding: 0;
117
+ min-inline-size: 0;
118
+ }
119
+
120
+ .ds-selection-card-group__label {
121
+ padding: 0;
122
+ margin-block-end: var(--space-3);
123
+ font-size: var(--font-size-sm);
124
+ font-weight: var(--font-weight-bold);
125
+ }
126
+
127
+
128
+ @media (prefers-reduced-motion: reduce) {
129
+ .ds-selection-card {
130
+ transition: none;
131
+ }
132
+ }
133
+ }
@@ -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");var r=(0,t.createContext)({isCollapsed:!1});function i(){return(0,t.useContext)(r).isCollapsed}var a=(0,t.forwardRef)(function({isCollapsed:e,defaultCollapsed:i=!1,onCollapsedChange:a,label:s=`Main`,className:c,children:l,...u},d){let[f,p]=(0,t.useState)(i),m=e??f,h=(0,t.useCallback)(()=>{let t=!m;e===void 0&&p(t),a?.(t)},[e,m,a]),g=(0,t.useMemo)(()=>({isCollapsed:m}),[m]);return(0,n.jsx)(r.Provider,{value:g,children:(0,n.jsx)(o.Provider,{value:h,children:(0,n.jsx)(`nav`,{ref:d,"aria-label":s,"data-collapsed":m||void 0,className:[`ds-sidenav`,c].filter(Boolean).join(` `),...u,children:l})})})}),o=(0,t.createContext)(()=>{}),s=(0,t.forwardRef)(function({title:i,mark:a,isCollapsible:s=!0,className:c,children:l,...u},d){let{isCollapsed:f}=(0,t.useContext)(r),p=(0,t.useContext)(o);return(0,n.jsxs)(`div`,{ref:d,className:[`ds-sidenav__header`,c].filter(Boolean).join(` `),...u,children:[a&&(0,n.jsx)(`span`,{className:`ds-sidenav__mark`,children:a}),!f&&(i||l)&&(0,n.jsx)(`span`,{className:`ds-sidenav__title`,children:i??l}),s&&(0,n.jsx)(`button`,{type:`button`,className:`ds-sidenav__toggle`,"aria-label":f?`Expand navigation`:`Collapse navigation`,"aria-expanded":!f,title:f?`Expand navigation`:`Collapse navigation`,onClick:p,children:(0,n.jsx)(e.t,{name:f?`chevrons-right`:`chevrons-left`})})]})}),c=(0,t.forwardRef)(function({label:e,className:i,children:a,...o},s){let{isCollapsed:c}=(0,t.useContext)(r);return(0,n.jsxs)(`div`,{ref:s,className:[`ds-sidenav__section`,i].filter(Boolean).join(` `),"aria-label":e,role:e?`group`:void 0,...o,children:[e&&!c&&(0,n.jsx)(`span`,{className:`ds-sidenav__section-label`,children:e}),(0,n.jsx)(`ul`,{className:`ds-sidenav__list`,children:a})]})}),l=(0,t.forwardRef)(function({icon:i,label:a,isActive:o,badge:s,className:c,...l},u){let{isCollapsed:d}=(0,t.useContext)(r);return(0,n.jsx)(`li`,{className:`ds-sidenav__row`,children:(0,n.jsxs)(`a`,{ref:u,className:[`ds-sidenav__item`,c].filter(Boolean).join(` `),"data-active":o||void 0,"aria-current":o?`page`:void 0,title:d?a:void 0,...l,children:[(0,n.jsx)(e.t,{name:i}),!d&&(0,n.jsx)(`span`,{className:`ds-sidenav__label`,children:a}),!d&&s&&(0,n.jsx)(`span`,{className:`ds-sidenav__badge`,children:s}),d&&(0,n.jsx)(`span`,{className:`ds-sidenav__sr`,children:a})]})})}),u=(0,t.forwardRef)(function({className:e,children:t,...r},i){return(0,n.jsx)(`div`,{ref:i,className:[`ds-sidenav__footer`,e].filter(Boolean).join(` `),...r,children:t})});exports.SideNav=a,exports.SideNavFooter=u,exports.SideNavHeader=s,exports.SideNavItem=l,exports.SideNavSection=c,exports.useSideNavCollapsed=i;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["createContext","useContext","forwardRef","useState","useCallback","useMemo","Icon","require_Icon","react","react_jsx_runtime","SideNavContext","useSideNavCollapsed","SideNav","controlled","rest","uncontrolled","setUncontrolled","defaultCollapsed","isCollapsed","toggle","next","onCollapsedChange","value","SideNavToggleContext","label","className","SideNavHeader","mark","title","children","isCollapsible","SideNavSection","SideNavItem","isActive","icon","badge","SideNavFooter"],"sources":["../../../src/components/SideNav/index.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useState,\n type AnchorHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../Icon/icons\";\nimport \"./style.css\";\n\ninterface SideNavContextValue {\n isCollapsed: boolean;\n}\n\nconst SideNavContext = createContext<SideNavContextValue>({ isCollapsed: false });\n\n/** Read the rail's collapsed state from anything rendered inside it. */\nexport function useSideNavCollapsed(): boolean {\n return useContext(SideNavContext).isCollapsed;\n}\n\nexport interface SideNavProps extends HTMLAttributes<HTMLElement> {\n /** Controlled collapsed state. Omit to let the rail own it. */\n isCollapsed?: boolean;\n /** Initial state when uncontrolled. */\n defaultCollapsed?: boolean;\n /** Fired by the header's collapse toggle. */\n onCollapsedChange?: (isCollapsed: boolean) => void;\n /** Accessible name for the landmark. */\n label?: string;\n children?: ReactNode;\n}\n\n/**\n * The primary rail: one heavy edge against the page, hairline rules between\n * sections. Collapsed it keeps the icons and drops the words — the width is a\n * token, so every rail in the product collapses to the same measure.\n */\nexport const SideNav = forwardRef<HTMLElement, SideNavProps>(function SideNav(\n {\n isCollapsed: controlled,\n defaultCollapsed = false,\n onCollapsedChange,\n label = \"Main\",\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [uncontrolled, setUncontrolled] = useState(defaultCollapsed);\n const isCollapsed = controlled ?? uncontrolled;\n\n const toggle = useCallback(() => {\n const next = !isCollapsed;\n if (controlled === undefined) setUncontrolled(next);\n onCollapsedChange?.(next);\n }, [controlled, isCollapsed, onCollapsedChange]);\n\n const value = useMemo(() => ({ isCollapsed }), [isCollapsed]);\n\n return (\n <SideNavContext.Provider value={value}>\n <SideNavToggleContext.Provider value={toggle}>\n <nav\n ref={ref}\n aria-label={label}\n data-collapsed={isCollapsed || undefined}\n className={[\"ds-sidenav\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </nav>\n </SideNavToggleContext.Provider>\n </SideNavContext.Provider>\n );\n});\n\nconst SideNavToggleContext = createContext<() => void>(() => {});\n\nexport interface SideNavHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Shown when the rail is open; hidden when it collapses. */\n title?: ReactNode;\n /** A mark that survives the collapse — a logo, a monogram. */\n mark?: ReactNode;\n /** Set false when the rail is permanently open. */\n isCollapsible?: boolean;\n children?: ReactNode;\n}\n\n/** Brand block plus the collapse toggle, above the first hairline rule. */\nexport const SideNavHeader = forwardRef<HTMLDivElement, SideNavHeaderProps>(\n function SideNavHeader({ title, mark, isCollapsible = true, className, children, ...rest }, ref) {\n const { isCollapsed } = useContext(SideNavContext);\n const toggle = useContext(SideNavToggleContext);\n\n return (\n <div\n ref={ref}\n className={[\"ds-sidenav__header\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {mark && <span className=\"ds-sidenav__mark\">{mark}</span>}\n {!isCollapsed && (title || children) && (\n <span className=\"ds-sidenav__title\">{title ?? children}</span>\n )}\n {isCollapsible && (\n <button\n type=\"button\"\n className=\"ds-sidenav__toggle\"\n aria-label={isCollapsed ? \"Expand navigation\" : \"Collapse navigation\"}\n aria-expanded={!isCollapsed}\n title={isCollapsed ? \"Expand navigation\" : \"Collapse navigation\"}\n onClick={toggle}\n >\n <Icon name={isCollapsed ? \"chevrons-right\" : \"chevrons-left\"} />\n </button>\n )}\n </div>\n );\n },\n);\n\nexport interface SideNavSectionProps extends HTMLAttributes<HTMLDivElement> {\n /** Section label. Hidden — but still announced — when collapsed. */\n label?: string;\n children?: ReactNode;\n}\n\n/** A group of items under one label, separated by a hairline rule. */\nexport const SideNavSection = forwardRef<HTMLDivElement, SideNavSectionProps>(\n function SideNavSection({ label, className, children, ...rest }, ref) {\n const { isCollapsed } = useContext(SideNavContext);\n\n return (\n <div\n ref={ref}\n className={[\"ds-sidenav__section\", className].filter(Boolean).join(\" \")}\n aria-label={label}\n role={label ? \"group\" : undefined}\n {...rest}\n >\n {label && !isCollapsed && <span className=\"ds-sidenav__section-label\">{label}</span>}\n <ul className=\"ds-sidenav__list\">{children}</ul>\n </div>\n );\n },\n);\n\nexport interface SideNavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n icon: IconName;\n /** The words. Kept in the accessible name even when the rail is collapsed. */\n label: string;\n isActive?: boolean;\n /** A count or status pill at the end of the row. Hidden when collapsed. */\n badge?: ReactNode;\n}\n\n/**\n * One destination. The active row carries the solid rail on its leading edge —\n * the same rail as a selected table row, so selection reads the same anywhere.\n */\nexport const SideNavItem = forwardRef<HTMLAnchorElement, SideNavItemProps>(\n function SideNavItem({ icon, label, isActive, badge, className, ...rest }, ref) {\n const { isCollapsed } = useContext(SideNavContext);\n\n return (\n <li className=\"ds-sidenav__row\">\n <a\n ref={ref}\n className={[\"ds-sidenav__item\", className].filter(Boolean).join(\" \")}\n data-active={isActive || undefined}\n aria-current={isActive ? \"page\" : undefined}\n title={isCollapsed ? label : undefined}\n {...rest}\n >\n <Icon name={icon} />\n {!isCollapsed && <span className=\"ds-sidenav__label\">{label}</span>}\n {!isCollapsed && badge && <span className=\"ds-sidenav__badge\">{badge}</span>}\n {isCollapsed && <span className=\"ds-sidenav__sr\">{label}</span>}\n </a>\n </li>\n );\n },\n);\n\nexport interface SideNavFooterProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\n/** The bottom band — account, theme, help. Above the page edge, under a rule. */\nexport const SideNavFooter = forwardRef<HTMLDivElement, SideNavFooterProps>(\n function SideNavFooter({ className, children, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={[\"ds-sidenav__footer\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n"],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type AnchorHTMLAttributes, type HTMLAttributes, type ReactNode } from "react";
2
+ import type { IconName } from "../Icon/icons.cjs";
3
+ /** Read the rail's collapsed state from anything rendered inside it. */
4
+ export declare function useSideNavCollapsed(): boolean;
5
+ export interface SideNavProps extends HTMLAttributes<HTMLElement> {
6
+ /** Controlled collapsed state. Omit to let the rail own it. */
7
+ isCollapsed?: boolean;
8
+ /** Initial state when uncontrolled. */
9
+ defaultCollapsed?: boolean;
10
+ /** Fired by the header's collapse toggle. */
11
+ onCollapsedChange?: (isCollapsed: boolean) => void;
12
+ /** Accessible name for the landmark. */
13
+ label?: string;
14
+ children?: ReactNode;
15
+ }
16
+ /**
17
+ * The primary rail: one heavy edge against the page, hairline rules between
18
+ * sections. Collapsed it keeps the icons and drops the words — the width is a
19
+ * token, so every rail in the product collapses to the same measure.
20
+ */
21
+ export declare const SideNav: import("react").ForwardRefExoticComponent<SideNavProps & import("react").RefAttributes<HTMLElement>>;
22
+ export interface SideNavHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
23
+ /** Shown when the rail is open; hidden when it collapses. */
24
+ title?: ReactNode;
25
+ /** A mark that survives the collapse — a logo, a monogram. */
26
+ mark?: ReactNode;
27
+ /** Set false when the rail is permanently open. */
28
+ isCollapsible?: boolean;
29
+ children?: ReactNode;
30
+ }
31
+ /** Brand block plus the collapse toggle, above the first hairline rule. */
32
+ export declare const SideNavHeader: import("react").ForwardRefExoticComponent<SideNavHeaderProps & import("react").RefAttributes<HTMLDivElement>>;
33
+ export interface SideNavSectionProps extends HTMLAttributes<HTMLDivElement> {
34
+ /** Section label. Hidden — but still announced — when collapsed. */
35
+ label?: string;
36
+ children?: ReactNode;
37
+ }
38
+ /** A group of items under one label, separated by a hairline rule. */
39
+ export declare const SideNavSection: import("react").ForwardRefExoticComponent<SideNavSectionProps & import("react").RefAttributes<HTMLDivElement>>;
40
+ export interface SideNavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
41
+ icon: IconName;
42
+ /** The words. Kept in the accessible name even when the rail is collapsed. */
43
+ label: string;
44
+ isActive?: boolean;
45
+ /** A count or status pill at the end of the row. Hidden when collapsed. */
46
+ badge?: ReactNode;
47
+ }
48
+ /**
49
+ * One destination. The active row carries the solid rail on its leading edge —
50
+ * the same rail as a selected table row, so selection reads the same anywhere.
51
+ */
52
+ export declare const SideNavItem: import("react").ForwardRefExoticComponent<SideNavItemProps & import("react").RefAttributes<HTMLAnchorElement>>;
53
+ export interface SideNavFooterProps extends HTMLAttributes<HTMLDivElement> {
54
+ children?: ReactNode;
55
+ }
56
+ /** The bottom band — account, theme, help. Above the page edge, under a rule. */
57
+ export declare const SideNavFooter: import("react").ForwardRefExoticComponent<SideNavFooterProps & import("react").RefAttributes<HTMLDivElement>>;
58
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/SideNav/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,aAAa,CAAC;AAQrB,wEAAwE;AACxE,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC/D,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,sGAsClB,CAAC;AAIH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACvF,6DAA6D;IAC7D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,2EAA2E;AAC3E,eAAO,MAAM,aAAa,+GA8BzB,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACzE,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,sEAAsE;AACtE,eAAO,MAAM,cAAc,gHAiB1B,CAAC;AAEF,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC/E,IAAI,EAAE,QAAQ,CAAC;IACf,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,gHAsBvB,CAAC;AAEF,MAAM,WAAW,kBAAmB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACxE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,iFAAiF;AACjF,eAAO,MAAM,aAAa,+GAYzB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { type AnchorHTMLAttributes, type HTMLAttributes, type ReactNode } from "react";
2
+ import type { IconName } from "../Icon/icons.js";
3
+ /** Read the rail's collapsed state from anything rendered inside it. */
4
+ export declare function useSideNavCollapsed(): boolean;
5
+ export interface SideNavProps extends HTMLAttributes<HTMLElement> {
6
+ /** Controlled collapsed state. Omit to let the rail own it. */
7
+ isCollapsed?: boolean;
8
+ /** Initial state when uncontrolled. */
9
+ defaultCollapsed?: boolean;
10
+ /** Fired by the header's collapse toggle. */
11
+ onCollapsedChange?: (isCollapsed: boolean) => void;
12
+ /** Accessible name for the landmark. */
13
+ label?: string;
14
+ children?: ReactNode;
15
+ }
16
+ /**
17
+ * The primary rail: one heavy edge against the page, hairline rules between
18
+ * sections. Collapsed it keeps the icons and drops the words — the width is a
19
+ * token, so every rail in the product collapses to the same measure.
20
+ */
21
+ export declare const SideNav: import("react").ForwardRefExoticComponent<SideNavProps & import("react").RefAttributes<HTMLElement>>;
22
+ export interface SideNavHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
23
+ /** Shown when the rail is open; hidden when it collapses. */
24
+ title?: ReactNode;
25
+ /** A mark that survives the collapse — a logo, a monogram. */
26
+ mark?: ReactNode;
27
+ /** Set false when the rail is permanently open. */
28
+ isCollapsible?: boolean;
29
+ children?: ReactNode;
30
+ }
31
+ /** Brand block plus the collapse toggle, above the first hairline rule. */
32
+ export declare const SideNavHeader: import("react").ForwardRefExoticComponent<SideNavHeaderProps & import("react").RefAttributes<HTMLDivElement>>;
33
+ export interface SideNavSectionProps extends HTMLAttributes<HTMLDivElement> {
34
+ /** Section label. Hidden — but still announced — when collapsed. */
35
+ label?: string;
36
+ children?: ReactNode;
37
+ }
38
+ /** A group of items under one label, separated by a hairline rule. */
39
+ export declare const SideNavSection: import("react").ForwardRefExoticComponent<SideNavSectionProps & import("react").RefAttributes<HTMLDivElement>>;
40
+ export interface SideNavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
41
+ icon: IconName;
42
+ /** The words. Kept in the accessible name even when the rail is collapsed. */
43
+ label: string;
44
+ isActive?: boolean;
45
+ /** A count or status pill at the end of the row. Hidden when collapsed. */
46
+ badge?: ReactNode;
47
+ }
48
+ /**
49
+ * One destination. The active row carries the solid rail on its leading edge —
50
+ * the same rail as a selected table row, so selection reads the same anywhere.
51
+ */
52
+ export declare const SideNavItem: import("react").ForwardRefExoticComponent<SideNavItemProps & import("react").RefAttributes<HTMLAnchorElement>>;
53
+ export interface SideNavFooterProps extends HTMLAttributes<HTMLDivElement> {
54
+ children?: ReactNode;
55
+ }
56
+ /** The bottom band — account, theme, help. Above the page edge, under a rule. */
57
+ export declare const SideNavFooter: import("react").ForwardRefExoticComponent<SideNavFooterProps & import("react").RefAttributes<HTMLDivElement>>;
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SideNav/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,aAAa,CAAC;AAQrB,wEAAwE;AACxE,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC/D,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,sGAsClB,CAAC;AAIH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACvF,6DAA6D;IAC7D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,2EAA2E;AAC3E,eAAO,MAAM,aAAa,+GA8BzB,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACzE,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,sEAAsE;AACtE,eAAO,MAAM,cAAc,gHAiB1B,CAAC;AAEF,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC/E,IAAI,EAAE,QAAQ,CAAC;IACf,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,gHAsBvB,CAAC;AAEF,MAAM,WAAW,kBAAmB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACxE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,iFAAiF;AACjF,eAAO,MAAM,aAAa,+GAYzB,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { t as e } from "../../chunks/Icon-CGY1FNXT.js";
2
+ import { createContext as t, forwardRef as n, useCallback as r, useContext as i, useMemo as a, useState as o } from "react";
3
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
+ //#region src/components/SideNav/index.tsx
5
+ var l = t({ isCollapsed: !1 });
6
+ function u() {
7
+ return i(l).isCollapsed;
8
+ }
9
+ var d = n(function({ isCollapsed: e, defaultCollapsed: t = !1, onCollapsedChange: n, label: i = "Main", className: c, children: u, ...d }, p) {
10
+ let [m, h] = o(t), g = e ?? m, _ = r(() => {
11
+ let t = !g;
12
+ e === void 0 && h(t), n?.(t);
13
+ }, [
14
+ e,
15
+ g,
16
+ n
17
+ ]), v = a(() => ({ isCollapsed: g }), [g]);
18
+ return /* @__PURE__ */ s(l.Provider, {
19
+ value: v,
20
+ children: /* @__PURE__ */ s(f.Provider, {
21
+ value: _,
22
+ children: /* @__PURE__ */ s("nav", {
23
+ ref: p,
24
+ "aria-label": i,
25
+ "data-collapsed": g || void 0,
26
+ className: ["ds-sidenav", c].filter(Boolean).join(" "),
27
+ ...d,
28
+ children: u
29
+ })
30
+ })
31
+ });
32
+ }), f = t(() => {}), p = n(function({ title: t, mark: n, isCollapsible: r = !0, className: a, children: o, ...u }, d) {
33
+ let { isCollapsed: p } = i(l), m = i(f);
34
+ return /* @__PURE__ */ c("div", {
35
+ ref: d,
36
+ className: ["ds-sidenav__header", a].filter(Boolean).join(" "),
37
+ ...u,
38
+ children: [
39
+ n && /* @__PURE__ */ s("span", {
40
+ className: "ds-sidenav__mark",
41
+ children: n
42
+ }),
43
+ !p && (t || o) && /* @__PURE__ */ s("span", {
44
+ className: "ds-sidenav__title",
45
+ children: t ?? o
46
+ }),
47
+ r && /* @__PURE__ */ s("button", {
48
+ type: "button",
49
+ className: "ds-sidenav__toggle",
50
+ "aria-label": p ? "Expand navigation" : "Collapse navigation",
51
+ "aria-expanded": !p,
52
+ title: p ? "Expand navigation" : "Collapse navigation",
53
+ onClick: m,
54
+ children: /* @__PURE__ */ s(e, { name: p ? "chevrons-right" : "chevrons-left" })
55
+ })
56
+ ]
57
+ });
58
+ }), m = n(function({ label: e, className: t, children: n, ...r }, a) {
59
+ let { isCollapsed: o } = i(l);
60
+ return /* @__PURE__ */ c("div", {
61
+ ref: a,
62
+ className: ["ds-sidenav__section", t].filter(Boolean).join(" "),
63
+ "aria-label": e,
64
+ role: e ? "group" : void 0,
65
+ ...r,
66
+ children: [e && !o && /* @__PURE__ */ s("span", {
67
+ className: "ds-sidenav__section-label",
68
+ children: e
69
+ }), /* @__PURE__ */ s("ul", {
70
+ className: "ds-sidenav__list",
71
+ children: n
72
+ })]
73
+ });
74
+ }), h = n(function({ icon: t, label: n, isActive: r, badge: a, className: o, ...u }, d) {
75
+ let { isCollapsed: f } = i(l);
76
+ return /* @__PURE__ */ s("li", {
77
+ className: "ds-sidenav__row",
78
+ children: /* @__PURE__ */ c("a", {
79
+ ref: d,
80
+ className: ["ds-sidenav__item", o].filter(Boolean).join(" "),
81
+ "data-active": r || void 0,
82
+ "aria-current": r ? "page" : void 0,
83
+ title: f ? n : void 0,
84
+ ...u,
85
+ children: [
86
+ /* @__PURE__ */ s(e, { name: t }),
87
+ !f && /* @__PURE__ */ s("span", {
88
+ className: "ds-sidenav__label",
89
+ children: n
90
+ }),
91
+ !f && a && /* @__PURE__ */ s("span", {
92
+ className: "ds-sidenav__badge",
93
+ children: a
94
+ }),
95
+ f && /* @__PURE__ */ s("span", {
96
+ className: "ds-sidenav__sr",
97
+ children: n
98
+ })
99
+ ]
100
+ })
101
+ });
102
+ }), g = n(function({ className: e, children: t, ...n }, r) {
103
+ return /* @__PURE__ */ s("div", {
104
+ ref: r,
105
+ className: ["ds-sidenav__footer", e].filter(Boolean).join(" "),
106
+ ...n,
107
+ children: t
108
+ });
109
+ });
110
+ //#endregion
111
+ export { d as SideNav, g as SideNavFooter, p as SideNavHeader, h as SideNavItem, m as SideNavSection, u as useSideNavCollapsed };
112
+
113
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Icon","SideNavContext","createContext","useSideNavCollapsed","useContext","SideNav","forwardRef","controlled","rest","uncontrolled","setUncontrolled","useState","defaultCollapsed","isCollapsed","toggle","useCallback","next","onCollapsedChange","value","useMemo","SideNavToggleContext","label","className","SideNavHeader","mark","title","children","isCollapsible","SideNavSection","SideNavItem","isActive","icon","badge","SideNavFooter"],"sources":["../../../src/components/SideNav/index.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useState,\n type AnchorHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../Icon/icons\";\nimport \"./style.css\";\n\ninterface SideNavContextValue {\n isCollapsed: boolean;\n}\n\nconst SideNavContext = createContext<SideNavContextValue>({ isCollapsed: false });\n\n/** Read the rail's collapsed state from anything rendered inside it. */\nexport function useSideNavCollapsed(): boolean {\n return useContext(SideNavContext).isCollapsed;\n}\n\nexport interface SideNavProps extends HTMLAttributes<HTMLElement> {\n /** Controlled collapsed state. Omit to let the rail own it. */\n isCollapsed?: boolean;\n /** Initial state when uncontrolled. */\n defaultCollapsed?: boolean;\n /** Fired by the header's collapse toggle. */\n onCollapsedChange?: (isCollapsed: boolean) => void;\n /** Accessible name for the landmark. */\n label?: string;\n children?: ReactNode;\n}\n\n/**\n * The primary rail: one heavy edge against the page, hairline rules between\n * sections. Collapsed it keeps the icons and drops the words — the width is a\n * token, so every rail in the product collapses to the same measure.\n */\nexport const SideNav = forwardRef<HTMLElement, SideNavProps>(function SideNav(\n {\n isCollapsed: controlled,\n defaultCollapsed = false,\n onCollapsedChange,\n label = \"Main\",\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [uncontrolled, setUncontrolled] = useState(defaultCollapsed);\n const isCollapsed = controlled ?? uncontrolled;\n\n const toggle = useCallback(() => {\n const next = !isCollapsed;\n if (controlled === undefined) setUncontrolled(next);\n onCollapsedChange?.(next);\n }, [controlled, isCollapsed, onCollapsedChange]);\n\n const value = useMemo(() => ({ isCollapsed }), [isCollapsed]);\n\n return (\n <SideNavContext.Provider value={value}>\n <SideNavToggleContext.Provider value={toggle}>\n <nav\n ref={ref}\n aria-label={label}\n data-collapsed={isCollapsed || undefined}\n className={[\"ds-sidenav\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </nav>\n </SideNavToggleContext.Provider>\n </SideNavContext.Provider>\n );\n});\n\nconst SideNavToggleContext = createContext<() => void>(() => {});\n\nexport interface SideNavHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Shown when the rail is open; hidden when it collapses. */\n title?: ReactNode;\n /** A mark that survives the collapse — a logo, a monogram. */\n mark?: ReactNode;\n /** Set false when the rail is permanently open. */\n isCollapsible?: boolean;\n children?: ReactNode;\n}\n\n/** Brand block plus the collapse toggle, above the first hairline rule. */\nexport const SideNavHeader = forwardRef<HTMLDivElement, SideNavHeaderProps>(\n function SideNavHeader({ title, mark, isCollapsible = true, className, children, ...rest }, ref) {\n const { isCollapsed } = useContext(SideNavContext);\n const toggle = useContext(SideNavToggleContext);\n\n return (\n <div\n ref={ref}\n className={[\"ds-sidenav__header\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {mark && <span className=\"ds-sidenav__mark\">{mark}</span>}\n {!isCollapsed && (title || children) && (\n <span className=\"ds-sidenav__title\">{title ?? children}</span>\n )}\n {isCollapsible && (\n <button\n type=\"button\"\n className=\"ds-sidenav__toggle\"\n aria-label={isCollapsed ? \"Expand navigation\" : \"Collapse navigation\"}\n aria-expanded={!isCollapsed}\n title={isCollapsed ? \"Expand navigation\" : \"Collapse navigation\"}\n onClick={toggle}\n >\n <Icon name={isCollapsed ? \"chevrons-right\" : \"chevrons-left\"} />\n </button>\n )}\n </div>\n );\n },\n);\n\nexport interface SideNavSectionProps extends HTMLAttributes<HTMLDivElement> {\n /** Section label. Hidden — but still announced — when collapsed. */\n label?: string;\n children?: ReactNode;\n}\n\n/** A group of items under one label, separated by a hairline rule. */\nexport const SideNavSection = forwardRef<HTMLDivElement, SideNavSectionProps>(\n function SideNavSection({ label, className, children, ...rest }, ref) {\n const { isCollapsed } = useContext(SideNavContext);\n\n return (\n <div\n ref={ref}\n className={[\"ds-sidenav__section\", className].filter(Boolean).join(\" \")}\n aria-label={label}\n role={label ? \"group\" : undefined}\n {...rest}\n >\n {label && !isCollapsed && <span className=\"ds-sidenav__section-label\">{label}</span>}\n <ul className=\"ds-sidenav__list\">{children}</ul>\n </div>\n );\n },\n);\n\nexport interface SideNavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n icon: IconName;\n /** The words. Kept in the accessible name even when the rail is collapsed. */\n label: string;\n isActive?: boolean;\n /** A count or status pill at the end of the row. Hidden when collapsed. */\n badge?: ReactNode;\n}\n\n/**\n * One destination. The active row carries the solid rail on its leading edge —\n * the same rail as a selected table row, so selection reads the same anywhere.\n */\nexport const SideNavItem = forwardRef<HTMLAnchorElement, SideNavItemProps>(\n function SideNavItem({ icon, label, isActive, badge, className, ...rest }, ref) {\n const { isCollapsed } = useContext(SideNavContext);\n\n return (\n <li className=\"ds-sidenav__row\">\n <a\n ref={ref}\n className={[\"ds-sidenav__item\", className].filter(Boolean).join(\" \")}\n data-active={isActive || undefined}\n aria-current={isActive ? \"page\" : undefined}\n title={isCollapsed ? label : undefined}\n {...rest}\n >\n <Icon name={icon} />\n {!isCollapsed && <span className=\"ds-sidenav__label\">{label}</span>}\n {!isCollapsed && badge && <span className=\"ds-sidenav__badge\">{badge}</span>}\n {isCollapsed && <span className=\"ds-sidenav__sr\">{label}</span>}\n </a>\n </li>\n );\n },\n);\n\nexport interface SideNavFooterProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\n/** The bottom band — account, theme, help. Above the page edge, under a rule. */\nexport const SideNavFooter = forwardRef<HTMLDivElement, SideNavFooterProps>(\n function SideNavFooter({ className, children, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={[\"ds-sidenav__footer\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n"],"mappings":";;;;AAmBA,IAAMC,IAAiBC,EAAmC,EAAE,aAAa,GAAM,CAAC;AAGhF,SAAgBC,IAA+B;CAC7C,OAAOC,EAAWH,CAAc,CAAC,CAAC;AACpC;AAmBA,IAAaI,IAAUC,EAAsC,SAC3D,EACE,aAAaC,GACb,sBAAmB,IACnB,sBACA,WAAQ,QACR,cACA,aACA,GAAGC,KAEL,GACA;CACA,IAAM,CAACC,GAAcC,KAAmBC,EAASC,CAAgB,GAC3DC,IAAcN,KAAcE,GAE5BK,IAASC,QAAkB;EAC/B,IAAMC,IAAO,CAACH;EAEd,AADIN,MAAe,KAAA,KAAWG,EAAgBM,CAAI,GAClDC,IAAoBD,CAAI;CAC1B,GAAG;EAACT;EAAYM;EAAaI;CAAiB,CAAC,GAEzCC,IAAQC,SAAe,EAAE,eAAY,IAAI,CAACN,CAAW,CAAC;CAE5D,OACE,kBAACZ,EAAe,UAAhB;EAAgC;EAC9B,UAAA,kBAACmB,EAAqB,UAAtB;GAA+B,OAAON;GACpC,UAAA,kBAAC,OAAD;IACO;IACL,cAAYO;IACZ,kBAAgBR,KAAe,KAAA;IAC/B,WAAW,CAAC,cAAcS,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;IAC7D,GAAId;IAEH;GACE,CAAA;EACwB,CAAA;CACR,CAAA;AAE7B,CAAC,GAEKY,IAAuBlB,QAAgC,CAAC,CAAC,GAalDqB,IAAgBjB,EAC3B,SAAuB,EAAE,UAAO,SAAM,mBAAgB,IAAM,cAAW,aAAU,GAAGE,KAAQ,GAAK;CAC/F,IAAM,EAAE,mBAAgBJ,EAAWH,CAAc,GAC3Ca,IAASV,EAAWgB,CAAoB;CAE9C,OACE,kBAAC,OAAD;EACO;EACL,WAAW,CAAC,sBAAsBE,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EACrE,GAAId;EAHN,UAAA;GAKGgB,KAAQ,kBAAC,QAAD;IAAM,WAAU;IAAoB,UAAAA;GAAW,CAAA;GACvD,CAACX,MAAgBY,KAASC,MACzB,kBAAC,QAAD;IAAM,WAAU;IAAqB,UAAAD,KAASC;GAAe,CAAA;GAE9DC,KACC,kBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,cAAYd,IAAc,sBAAsB;IAChD,iBAAe,CAACA;IAChB,OAAOA,IAAc,sBAAsB;IAC3C,SAASC;IAET,UAAA,kBAACd,GAAD,EAAM,MAAMa,IAAc,mBAAmB,gBAAkB,CAAA;GACzD,CAAA;EAEP;;AAET,CACF,GASae,IAAiBtB,EAC5B,SAAwB,EAAE,UAAO,cAAW,aAAU,GAAGE,KAAQ,GAAK;CACpE,IAAM,EAAE,mBAAgBJ,EAAWH,CAAc;CAEjD,OACE,kBAAC,OAAD;EACO;EACL,WAAW,CAAC,uBAAuBqB,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EACtE,cAAYD;EACZ,MAAMA,IAAQ,UAAU,KAAA;EACxB,GAAIb;EALN,UAAA,CAOGa,KAAS,CAACR,KAAe,kBAAC,QAAD;GAAM,WAAU;GAA6B,UAAAQ;EAAY,CAAA,GACnF,kBAAC,MAAD;GAAI,WAAU;GAAoB;EAAa,CAAA,CAC5C;;AAET,CACF,GAeaQ,IAAcvB,EACzB,SAAqB,EAAE,SAAM,UAAO,aAAU,UAAO,cAAW,GAAGE,KAAQ,GAAK;CAC9E,IAAM,EAAE,mBAAgBJ,EAAWH,CAAc;CAEjD,OACE,kBAAC,MAAD;EAAI,WAAU;EACZ,UAAA,kBAAC,KAAD;GACO;GACL,WAAW,CAAC,oBAAoBqB,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GACnE,eAAaQ,KAAY,KAAA;GACzB,gBAAcA,IAAW,SAAS,KAAA;GAClC,OAAOjB,IAAcQ,IAAQ,KAAA;GAC7B,GAAIb;GANN,UAAA;IAQE,kBAACR,GAAD,EAAM,MAAM+B,EAAO,CAAA;IAClB,CAAClB,KAAe,kBAAC,QAAD;KAAM,WAAU;KAAqB,UAAAQ;IAAY,CAAA;IACjE,CAACR,KAAemB,KAAS,kBAAC,QAAD;KAAM,WAAU;KAAqB,UAAAA;IAAY,CAAA;IAC1EnB,KAAe,kBAAC,QAAD;KAAM,WAAU;KAAkB,UAAAQ;IAAY,CAAA;GAC7D;;CACD,CAAA;AAER,CACF,GAOaY,IAAgB3B,EAC3B,SAAuB,EAAE,cAAW,aAAU,GAAGE,KAAQ,GAAK;CAC5D,OACE,kBAAC,OAAD;EACO;EACL,WAAW,CAAC,sBAAsBc,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EACrE,GAAId;EAEH;CACE,CAAA;AAET,CACF"}
@@ -0,0 +1,184 @@
1
+ @layer components {
2
+ .ds-sidenav {
3
+ display: flex;
4
+ flex-direction: column;
5
+ flex: none;
6
+ inline-size: var(--sidenav-width);
7
+ background: var(--color-surface);
8
+ border-inline-end: var(--frame-width) solid var(--frame-color);
9
+ overflow: hidden;
10
+ transition: inline-size var(--duration-panel) var(--ease-panel);
11
+ }
12
+
13
+ .ds-sidenav[data-collapsed] {
14
+ inline-size: var(--sidenav-width-collapsed);
15
+ }
16
+
17
+ .ds-sidenav__header {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: var(--space-3);
21
+ min-block-size: var(--topnav-height);
22
+ padding: var(--space-3) var(--space-4);
23
+ border-block-end: var(--rule-width) solid var(--rule-color);
24
+ }
25
+
26
+ .ds-sidenav[data-collapsed] .ds-sidenav__header {
27
+ justify-content: center;
28
+ padding-inline: var(--space-2);
29
+ }
30
+
31
+ .ds-sidenav__mark {
32
+ display: flex;
33
+ align-items: center;
34
+ flex: none;
35
+ }
36
+
37
+ .ds-sidenav__title {
38
+ font-weight: var(--font-weight-bold);
39
+ font-size: var(--font-size-md);
40
+ white-space: nowrap;
41
+ overflow: hidden;
42
+ text-overflow: ellipsis;
43
+ }
44
+
45
+ .ds-sidenav__toggle {
46
+ margin-inline-start: auto;
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ inline-size: var(--space-8);
51
+ block-size: var(--space-8);
52
+ border: 0;
53
+ border-radius: var(--field-radius);
54
+ background: none;
55
+ color: var(--color-text-muted);
56
+ cursor: pointer;
57
+ }
58
+
59
+ .ds-sidenav[data-collapsed] .ds-sidenav__toggle {
60
+ margin-inline-start: 0;
61
+ }
62
+
63
+ .ds-sidenav__toggle:hover {
64
+ background: var(--field-hover);
65
+ color: var(--color-text);
66
+ }
67
+
68
+ .ds-sidenav__toggle:focus-visible {
69
+ outline: var(--control-border-width) solid var(--color-focus);
70
+ outline-offset: 2px;
71
+ }
72
+
73
+ .ds-sidenav__section {
74
+ padding-block: var(--space-3);
75
+ }
76
+
77
+ .ds-sidenav__section + .ds-sidenav__section {
78
+ border-block-start: var(--rule-width) solid var(--rule-color);
79
+ }
80
+
81
+ .ds-sidenav__section-label {
82
+ display: block;
83
+ padding: var(--space-1) var(--space-4) var(--space-2);
84
+ color: var(--color-text-muted);
85
+ font-size: var(--font-size-xs);
86
+ font-weight: var(--font-weight-bold);
87
+ letter-spacing: var(--table-head-tracking);
88
+ text-transform: uppercase;
89
+ }
90
+
91
+ .ds-sidenav__list {
92
+ display: flex;
93
+ flex-direction: column;
94
+ gap: var(--space-1);
95
+ list-style: none;
96
+ margin: 0;
97
+ padding: 0;
98
+ }
99
+
100
+ .ds-sidenav__row {
101
+ display: block;
102
+ }
103
+
104
+ /* The rail is inset, so the active row never changes width. */
105
+ .ds-sidenav__item {
106
+ display: flex;
107
+ align-items: center;
108
+ gap: var(--space-3);
109
+ min-block-size: var(--nav-item-height);
110
+ padding-inline: var(--space-4);
111
+ color: var(--color-text);
112
+ font-size: var(--font-size-sm);
113
+ font-weight: var(--font-weight-medium);
114
+ text-decoration: none;
115
+ cursor: pointer;
116
+ box-shadow: inset var(--rail-width) 0 0 0 transparent;
117
+ transition:
118
+ background-color var(--duration-fast) var(--ease-standard),
119
+ box-shadow var(--duration-fast) var(--ease-standard);
120
+ }
121
+
122
+ .ds-sidenav[data-collapsed] .ds-sidenav__item {
123
+ justify-content: center;
124
+ padding-inline: 0;
125
+ }
126
+
127
+ .ds-sidenav__item:hover {
128
+ background: var(--field-hover);
129
+ }
130
+
131
+ .ds-sidenav__item:focus-visible {
132
+ outline: var(--control-border-width) solid var(--color-focus);
133
+ outline-offset: -2px;
134
+ }
135
+
136
+ .ds-sidenav__item[data-active] {
137
+ background: var(--color-primary-soft);
138
+ color: var(--color-primary-text);
139
+ font-weight: var(--font-weight-bold);
140
+ box-shadow: inset var(--rail-width) 0 0 0 var(--rail-color);
141
+ }
142
+
143
+ .ds-sidenav__label {
144
+ white-space: nowrap;
145
+ overflow: hidden;
146
+ text-overflow: ellipsis;
147
+ }
148
+
149
+ .ds-sidenav__badge {
150
+ margin-inline-start: auto;
151
+ display: flex;
152
+ align-items: center;
153
+ }
154
+
155
+ .ds-sidenav__sr {
156
+ position: absolute;
157
+ inline-size: 1px;
158
+ block-size: 1px;
159
+ overflow: hidden;
160
+ clip-path: inset(50%);
161
+ white-space: nowrap;
162
+ }
163
+
164
+ .ds-sidenav__footer {
165
+ margin-block-start: auto;
166
+ display: flex;
167
+ align-items: center;
168
+ gap: var(--space-3);
169
+ padding: var(--space-3) var(--space-4);
170
+ border-block-start: var(--rule-width) solid var(--rule-color);
171
+ }
172
+
173
+ .ds-sidenav[data-collapsed] .ds-sidenav__footer {
174
+ justify-content: center;
175
+ padding-inline: var(--space-2);
176
+ }
177
+
178
+ @media (prefers-reduced-motion: reduce) {
179
+ .ds-sidenav,
180
+ .ds-sidenav__item {
181
+ transition: none;
182
+ }
183
+ }
184
+ }
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react"),t=require("react/jsx-runtime");var n=(0,e.forwardRef)(function({shape:e=`text`,width:n,size:r,className:i,style:a,...o},s){return(0,t.jsx)(`span`,{ref:s,"aria-hidden":`true`,"data-shape":e,className:[`ds-skeleton`,i].filter(Boolean).join(` `),style:{inlineSize:e===`circle`?r:n??`100%`,blockSize:e===`circle`?r:void 0,...a},...o})}),r=(0,e.forwardRef)(function({lines:e=3,className:r,...i},a){return(0,t.jsx)(`div`,{ref:a,role:`status`,"aria-busy":`true`,"aria-label":`Loading`,className:[`ds-skeleton-lines`,r].filter(Boolean).join(` `),...i,children:Array.from({length:e},(e,r)=>(0,t.jsx)(n,{style:{animationDelay:`calc(var(--skeleton-stagger) * ${r})`}},r))})});exports.Skeleton=n,exports.SkeletonText=r;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["forwardRef","react","react_jsx_runtime","Skeleton","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":"A,yHAiBA,IAAaG,GAAA,EAAWH,EAAAA,WAAAA,CAA2C,SACjE,CAAE,QAAQ,OAAQ,QAAO,OAAM,YAAW,QAAO,GAAGI,GACpD,EACA,CACA,OACE,EAAAF,EAAA,IAAA,CAAC,OAAD,CACO,MACL,cAAY,OACZ,aAAYG,EACZ,UAAW,CAAC,cAAeC,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,EAC9D,MAAO,CACL,WAAYD,IAAU,SAAWE,EAAQC,GAAS,OAClD,UAAWH,IAAU,SAAWE,EAAO,IAAA,GACvC,GAAGE,CACL,EACA,GAAIL,CACL,CAAA,CAEL,CAAC,EAQYM,GAAA,EAAeV,EAAAA,WAAAA,CAC1B,SAAsB,CAAE,QAAQ,EAAG,YAAW,GAAGI,GAAQ,EAAK,CAC5D,OACE,EAAAF,EAAA,IAAA,CAAC,MAAD,CACO,MACL,KAAK,SACL,YAAU,OACV,aAAW,UACX,UAAW,CAAC,oBAAqBI,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,EACpE,GAAIF,EAEH,SAAA,MAAM,KAAK,CAAE,OAAQO,CAAM,GAAI,EAAG,KACjC,EAAAT,EAAA,IAAA,CAACC,EAAD,CAEE,MAAO,CAAE,eAAgB,kCAAkCS,EAAE,EAAG,CACjE,EAFMA,CAEN,CACF,CACE,CAAA,CAET,CACF,E"}
@@ -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.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","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"}