@namroodinc/liquid-editorial 0.0.0-stage → 0.1.1

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 (375) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +128 -2
  3. package/dist/chunks/EntryEditor-BF808OZR.js +181 -0
  4. package/dist/chunks/EntryEditor-BF808OZR.js.map +1 -0
  5. package/dist/chunks/EntryEditor-cjDk4vdH.cjs +2 -0
  6. package/dist/chunks/EntryEditor-cjDk4vdH.cjs.map +1 -0
  7. package/dist/chunks/Icon-CGY1FNXT.js +77 -0
  8. package/dist/chunks/Icon-CGY1FNXT.js.map +1 -0
  9. package/dist/chunks/Icon-CWsA1W83.cjs +2 -0
  10. package/dist/chunks/Icon-CWsA1W83.cjs.map +1 -0
  11. package/dist/chunks/RichTextEditor-DRt-kibg.js +248 -0
  12. package/dist/chunks/RichTextEditor-DRt-kibg.js.map +1 -0
  13. package/dist/chunks/RichTextEditor-tFkISOvq.cjs +2 -0
  14. package/dist/chunks/RichTextEditor-tFkISOvq.cjs.map +1 -0
  15. package/dist/components/AssetGrid/index.cjs +2 -0
  16. package/dist/components/AssetGrid/index.cjs.map +1 -0
  17. package/dist/components/AssetGrid/index.d.cts +54 -0
  18. package/dist/components/AssetGrid/index.d.cts.map +1 -0
  19. package/dist/components/AssetGrid/index.d.ts +54 -0
  20. package/dist/components/AssetGrid/index.d.ts.map +1 -0
  21. package/dist/components/AssetGrid/index.js +137 -0
  22. package/dist/components/AssetGrid/index.js.map +1 -0
  23. package/dist/components/AssetGrid/style.css +196 -0
  24. package/dist/components/Avatar/index.cjs +2 -0
  25. package/dist/components/Avatar/index.cjs.map +1 -0
  26. package/dist/components/Avatar/index.d.cts +24 -0
  27. package/dist/components/Avatar/index.d.cts.map +1 -0
  28. package/dist/components/Avatar/index.d.ts +24 -0
  29. package/dist/components/Avatar/index.d.ts.map +1 -0
  30. package/dist/components/Avatar/index.js +43 -0
  31. package/dist/components/Avatar/index.js.map +1 -0
  32. package/dist/components/Avatar/style.css +70 -0
  33. package/dist/components/Badge/index.cjs +2 -0
  34. package/dist/components/Badge/index.cjs.map +1 -0
  35. package/dist/components/Badge/index.d.cts +25 -0
  36. package/dist/components/Badge/index.d.cts.map +1 -0
  37. package/dist/components/Badge/index.d.ts +25 -0
  38. package/dist/components/Badge/index.d.ts.map +1 -0
  39. package/dist/components/Badge/index.js +28 -0
  40. package/dist/components/Badge/index.js.map +1 -0
  41. package/dist/components/Badge/style.css +103 -0
  42. package/dist/components/Board/index.cjs +2 -0
  43. package/dist/components/Board/index.cjs.map +1 -0
  44. package/dist/components/Board/index.d.cts +62 -0
  45. package/dist/components/Board/index.d.cts.map +1 -0
  46. package/dist/components/Board/index.d.ts +62 -0
  47. package/dist/components/Board/index.d.ts.map +1 -0
  48. package/dist/components/Board/index.js +227 -0
  49. package/dist/components/Board/index.js.map +1 -0
  50. package/dist/components/Board/style.css +145 -0
  51. package/dist/components/Button/index.cjs +2 -0
  52. package/dist/components/Button/index.cjs.map +1 -0
  53. package/dist/components/Button/index.d.cts +22 -0
  54. package/dist/components/Button/index.d.cts.map +1 -0
  55. package/dist/components/Button/index.d.ts +22 -0
  56. package/dist/components/Button/index.d.ts.map +1 -0
  57. package/dist/components/Button/index.js +37 -0
  58. package/dist/components/Button/index.js.map +1 -0
  59. package/dist/components/Button/style.css +139 -0
  60. package/dist/components/ButtonGroup/index.cjs +2 -0
  61. package/dist/components/ButtonGroup/index.cjs.map +1 -0
  62. package/dist/components/ButtonGroup/index.d.cts +17 -0
  63. package/dist/components/ButtonGroup/index.d.cts.map +1 -0
  64. package/dist/components/ButtonGroup/index.d.ts +17 -0
  65. package/dist/components/ButtonGroup/index.d.ts.map +1 -0
  66. package/dist/components/ButtonGroup/index.js +18 -0
  67. package/dist/components/ButtonGroup/index.js.map +1 -0
  68. package/dist/components/ButtonGroup/style.css +66 -0
  69. package/dist/components/Choice/index.cjs +2 -0
  70. package/dist/components/Choice/index.cjs.map +1 -0
  71. package/dist/components/Choice/index.d.cts +25 -0
  72. package/dist/components/Choice/index.d.cts.map +1 -0
  73. package/dist/components/Choice/index.d.ts +25 -0
  74. package/dist/components/Choice/index.d.ts.map +1 -0
  75. package/dist/components/Choice/index.js +58 -0
  76. package/dist/components/Choice/index.js.map +1 -0
  77. package/dist/components/Choice/style.css +96 -0
  78. package/dist/components/Container/index.cjs +2 -0
  79. package/dist/components/Container/index.cjs.map +1 -0
  80. package/dist/components/Container/index.d.cts +19 -0
  81. package/dist/components/Container/index.d.cts.map +1 -0
  82. package/dist/components/Container/index.d.ts +19 -0
  83. package/dist/components/Container/index.d.ts.map +1 -0
  84. package/dist/components/Container/index.js +20 -0
  85. package/dist/components/Container/index.js.map +1 -0
  86. package/dist/components/Container/style.css +41 -0
  87. package/dist/components/DatePicker/index.cjs +2 -0
  88. package/dist/components/DatePicker/index.cjs.map +1 -0
  89. package/dist/components/DatePicker/index.d.cts +57 -0
  90. package/dist/components/DatePicker/index.d.cts.map +1 -0
  91. package/dist/components/DatePicker/index.d.ts +57 -0
  92. package/dist/components/DatePicker/index.d.ts.map +1 -0
  93. package/dist/components/DatePicker/index.js +248 -0
  94. package/dist/components/DatePicker/index.js.map +1 -0
  95. package/dist/components/DatePicker/style.css +149 -0
  96. package/dist/components/Drawer/index.cjs +2 -0
  97. package/dist/components/Drawer/index.cjs.map +1 -0
  98. package/dist/components/Drawer/index.d.cts +23 -0
  99. package/dist/components/Drawer/index.d.cts.map +1 -0
  100. package/dist/components/Drawer/index.d.ts +23 -0
  101. package/dist/components/Drawer/index.d.ts.map +1 -0
  102. package/dist/components/Drawer/index.js +85 -0
  103. package/dist/components/Drawer/index.js.map +1 -0
  104. package/dist/components/Drawer/style.css +147 -0
  105. package/dist/components/EntryEditor/index.cjs +1 -0
  106. package/dist/components/EntryEditor/index.d.cts +21 -0
  107. package/dist/components/EntryEditor/index.d.cts.map +1 -0
  108. package/dist/components/EntryEditor/index.d.ts +21 -0
  109. package/dist/components/EntryEditor/index.d.ts.map +1 -0
  110. package/dist/components/EntryEditor/index.js +6 -0
  111. package/dist/components/EntryEditor/model.d.cts +33 -0
  112. package/dist/components/EntryEditor/model.d.cts.map +1 -0
  113. package/dist/components/EntryEditor/model.d.ts +33 -0
  114. package/dist/components/EntryEditor/model.d.ts.map +1 -0
  115. package/dist/components/EntryEditor/style.css +8 -0
  116. package/dist/components/EntryPicker/index.cjs +2 -0
  117. package/dist/components/EntryPicker/index.cjs.map +1 -0
  118. package/dist/components/EntryPicker/index.d.cts +36 -0
  119. package/dist/components/EntryPicker/index.d.cts.map +1 -0
  120. package/dist/components/EntryPicker/index.d.ts +36 -0
  121. package/dist/components/EntryPicker/index.d.ts.map +1 -0
  122. package/dist/components/EntryPicker/index.js +181 -0
  123. package/dist/components/EntryPicker/index.js.map +1 -0
  124. package/dist/components/EntryPicker/style.css +162 -0
  125. package/dist/components/Field/index.cjs +2 -0
  126. package/dist/components/Field/index.cjs.map +1 -0
  127. package/dist/components/Field/index.d.cts +22 -0
  128. package/dist/components/Field/index.d.cts.map +1 -0
  129. package/dist/components/Field/index.d.ts +22 -0
  130. package/dist/components/Field/index.d.ts.map +1 -0
  131. package/dist/components/Field/index.js +47 -0
  132. package/dist/components/Field/index.js.map +1 -0
  133. package/dist/components/Field/style.css +112 -0
  134. package/dist/components/FieldAffix/index.cjs +2 -0
  135. package/dist/components/FieldAffix/index.cjs.map +1 -0
  136. package/dist/components/FieldAffix/index.d.cts +19 -0
  137. package/dist/components/FieldAffix/index.d.cts.map +1 -0
  138. package/dist/components/FieldAffix/index.d.ts +19 -0
  139. package/dist/components/FieldAffix/index.d.ts.map +1 -0
  140. package/dist/components/FieldAffix/index.js +45 -0
  141. package/dist/components/FieldAffix/index.js.map +1 -0
  142. package/dist/components/FieldAffix/style.css +54 -0
  143. package/dist/components/Grid/index.cjs +2 -0
  144. package/dist/components/Grid/index.cjs.map +1 -0
  145. package/dist/components/Grid/index.d.cts +44 -0
  146. package/dist/components/Grid/index.d.cts.map +1 -0
  147. package/dist/components/Grid/index.d.ts +44 -0
  148. package/dist/components/Grid/index.d.ts.map +1 -0
  149. package/dist/components/Grid/index.js +49 -0
  150. package/dist/components/Grid/index.js.map +1 -0
  151. package/dist/components/Grid/style.css +226 -0
  152. package/dist/components/Icon/icons.d.cts +64 -0
  153. package/dist/components/Icon/icons.d.cts.map +1 -0
  154. package/dist/components/Icon/icons.d.ts +64 -0
  155. package/dist/components/Icon/icons.d.ts.map +1 -0
  156. package/dist/components/Icon/index.cjs +1 -0
  157. package/dist/components/Icon/index.d.cts +15 -0
  158. package/dist/components/Icon/index.d.cts.map +1 -0
  159. package/dist/components/Icon/index.d.ts +15 -0
  160. package/dist/components/Icon/index.d.ts.map +1 -0
  161. package/dist/components/Icon/index.js +1 -0
  162. package/dist/components/Icon/style.css +10 -0
  163. package/dist/components/ImageCropper/index.cjs +2 -0
  164. package/dist/components/ImageCropper/index.cjs.map +1 -0
  165. package/dist/components/ImageCropper/index.d.cts +66 -0
  166. package/dist/components/ImageCropper/index.d.cts.map +1 -0
  167. package/dist/components/ImageCropper/index.d.ts +66 -0
  168. package/dist/components/ImageCropper/index.d.ts.map +1 -0
  169. package/dist/components/ImageCropper/index.js +263 -0
  170. package/dist/components/ImageCropper/index.js.map +1 -0
  171. package/dist/components/ImageCropper/style.css +160 -0
  172. package/dist/components/Menu/index.cjs +2 -0
  173. package/dist/components/Menu/index.cjs.map +1 -0
  174. package/dist/components/Menu/index.d.cts +35 -0
  175. package/dist/components/Menu/index.d.cts.map +1 -0
  176. package/dist/components/Menu/index.d.ts +35 -0
  177. package/dist/components/Menu/index.d.ts.map +1 -0
  178. package/dist/components/Menu/index.js +110 -0
  179. package/dist/components/Menu/index.js.map +1 -0
  180. package/dist/components/Menu/style.css +87 -0
  181. package/dist/components/Modal/index.cjs +2 -0
  182. package/dist/components/Modal/index.cjs.map +1 -0
  183. package/dist/components/Modal/index.d.cts +19 -0
  184. package/dist/components/Modal/index.d.cts.map +1 -0
  185. package/dist/components/Modal/index.d.ts +19 -0
  186. package/dist/components/Modal/index.d.ts.map +1 -0
  187. package/dist/components/Modal/index.js +84 -0
  188. package/dist/components/Modal/index.js.map +1 -0
  189. package/dist/components/Modal/style.css +106 -0
  190. package/dist/components/NumberField/index.cjs +2 -0
  191. package/dist/components/NumberField/index.cjs.map +1 -0
  192. package/dist/components/NumberField/index.d.cts +50 -0
  193. package/dist/components/NumberField/index.d.cts.map +1 -0
  194. package/dist/components/NumberField/index.d.ts +50 -0
  195. package/dist/components/NumberField/index.d.ts.map +1 -0
  196. package/dist/components/NumberField/index.js +124 -0
  197. package/dist/components/NumberField/index.js.map +1 -0
  198. package/dist/components/NumberField/style.css +85 -0
  199. package/dist/components/Popover/index.cjs +2 -0
  200. package/dist/components/Popover/index.cjs.map +1 -0
  201. package/dist/components/Popover/index.d.cts +28 -0
  202. package/dist/components/Popover/index.d.cts.map +1 -0
  203. package/dist/components/Popover/index.d.ts +28 -0
  204. package/dist/components/Popover/index.d.ts.map +1 -0
  205. package/dist/components/Popover/index.js +52 -0
  206. package/dist/components/Popover/index.js.map +1 -0
  207. package/dist/components/Popover/style.css +23 -0
  208. package/dist/components/RichTextEditor/document.d.cts +10 -0
  209. package/dist/components/RichTextEditor/document.d.cts.map +1 -0
  210. package/dist/components/RichTextEditor/document.d.ts +10 -0
  211. package/dist/components/RichTextEditor/document.d.ts.map +1 -0
  212. package/dist/components/RichTextEditor/index.cjs +1 -0
  213. package/dist/components/RichTextEditor/index.d.cts +38 -0
  214. package/dist/components/RichTextEditor/index.d.cts.map +1 -0
  215. package/dist/components/RichTextEditor/index.d.ts +38 -0
  216. package/dist/components/RichTextEditor/index.d.ts.map +1 -0
  217. package/dist/components/RichTextEditor/index.js +1 -0
  218. package/dist/components/RichTextEditor/style.css +136 -0
  219. package/dist/components/SearchField/index.cjs +2 -0
  220. package/dist/components/SearchField/index.cjs.map +1 -0
  221. package/dist/components/SearchField/index.d.cts +11 -0
  222. package/dist/components/SearchField/index.d.cts.map +1 -0
  223. package/dist/components/SearchField/index.d.ts +11 -0
  224. package/dist/components/SearchField/index.d.ts.map +1 -0
  225. package/dist/components/SearchField/index.js +49 -0
  226. package/dist/components/SearchField/index.js.map +1 -0
  227. package/dist/components/SearchField/style.css +27 -0
  228. package/dist/components/Select/index.cjs +2 -0
  229. package/dist/components/Select/index.cjs.map +1 -0
  230. package/dist/components/Select/index.d.cts +26 -0
  231. package/dist/components/Select/index.d.cts.map +1 -0
  232. package/dist/components/Select/index.d.ts +26 -0
  233. package/dist/components/Select/index.d.ts.map +1 -0
  234. package/dist/components/Select/index.js +129 -0
  235. package/dist/components/Select/index.js.map +1 -0
  236. package/dist/components/Select/style.css +88 -0
  237. package/dist/components/SelectionCard/index.cjs +2 -0
  238. package/dist/components/SelectionCard/index.cjs.map +1 -0
  239. package/dist/components/SelectionCard/index.d.cts +32 -0
  240. package/dist/components/SelectionCard/index.d.cts.map +1 -0
  241. package/dist/components/SelectionCard/index.d.ts +32 -0
  242. package/dist/components/SelectionCard/index.d.ts.map +1 -0
  243. package/dist/components/SelectionCard/index.js +71 -0
  244. package/dist/components/SelectionCard/index.js.map +1 -0
  245. package/dist/components/SelectionCard/style.css +133 -0
  246. package/dist/components/SideNav/index.cjs +2 -0
  247. package/dist/components/SideNav/index.cjs.map +1 -0
  248. package/dist/components/SideNav/index.d.cts +58 -0
  249. package/dist/components/SideNav/index.d.cts.map +1 -0
  250. package/dist/components/SideNav/index.d.ts +58 -0
  251. package/dist/components/SideNav/index.d.ts.map +1 -0
  252. package/dist/components/SideNav/index.js +113 -0
  253. package/dist/components/SideNav/index.js.map +1 -0
  254. package/dist/components/SideNav/style.css +184 -0
  255. package/dist/components/Skeleton/index.cjs +2 -0
  256. package/dist/components/Skeleton/index.cjs.map +1 -0
  257. package/dist/components/Skeleton/index.d.cts +21 -0
  258. package/dist/components/Skeleton/index.d.cts.map +1 -0
  259. package/dist/components/Skeleton/index.d.ts +21 -0
  260. package/dist/components/Skeleton/index.d.ts.map +1 -0
  261. package/dist/components/Skeleton/index.js +31 -0
  262. package/dist/components/Skeleton/index.js.map +1 -0
  263. package/dist/components/Skeleton/style.css +55 -0
  264. package/dist/components/Slider/index.cjs +2 -0
  265. package/dist/components/Slider/index.cjs.map +1 -0
  266. package/dist/components/Slider/index.d.cts +40 -0
  267. package/dist/components/Slider/index.d.cts.map +1 -0
  268. package/dist/components/Slider/index.d.ts +40 -0
  269. package/dist/components/Slider/index.d.ts.map +1 -0
  270. package/dist/components/Slider/index.js +117 -0
  271. package/dist/components/Slider/index.js.map +1 -0
  272. package/dist/components/Slider/style.css +156 -0
  273. package/dist/components/SortableList/index.cjs +2 -0
  274. package/dist/components/SortableList/index.cjs.map +1 -0
  275. package/dist/components/SortableList/index.d.cts +27 -0
  276. package/dist/components/SortableList/index.d.cts.map +1 -0
  277. package/dist/components/SortableList/index.d.ts +27 -0
  278. package/dist/components/SortableList/index.d.ts.map +1 -0
  279. package/dist/components/SortableList/index.js +85 -0
  280. package/dist/components/SortableList/index.js.map +1 -0
  281. package/dist/components/SortableList/style.css +71 -0
  282. package/dist/components/Stepper/index.cjs +2 -0
  283. package/dist/components/Stepper/index.cjs.map +1 -0
  284. package/dist/components/Stepper/index.d.cts +32 -0
  285. package/dist/components/Stepper/index.d.cts.map +1 -0
  286. package/dist/components/Stepper/index.d.ts +32 -0
  287. package/dist/components/Stepper/index.d.ts.map +1 -0
  288. package/dist/components/Stepper/index.js +69 -0
  289. package/dist/components/Stepper/index.js.map +1 -0
  290. package/dist/components/Stepper/style.css +154 -0
  291. package/dist/components/SubNav/index.cjs +2 -0
  292. package/dist/components/SubNav/index.cjs.map +1 -0
  293. package/dist/components/SubNav/index.d.cts +31 -0
  294. package/dist/components/SubNav/index.d.cts.map +1 -0
  295. package/dist/components/SubNav/index.d.ts +31 -0
  296. package/dist/components/SubNav/index.d.ts.map +1 -0
  297. package/dist/components/SubNav/index.js +62 -0
  298. package/dist/components/SubNav/index.js.map +1 -0
  299. package/dist/components/SubNav/style.css +86 -0
  300. package/dist/components/Switch/index.cjs +2 -0
  301. package/dist/components/Switch/index.cjs.map +1 -0
  302. package/dist/components/Switch/index.d.cts +12 -0
  303. package/dist/components/Switch/index.d.cts.map +1 -0
  304. package/dist/components/Switch/index.d.ts +12 -0
  305. package/dist/components/Switch/index.d.ts.map +1 -0
  306. package/dist/components/Switch/index.js +37 -0
  307. package/dist/components/Switch/index.js.map +1 -0
  308. package/dist/components/Switch/style.css +65 -0
  309. package/dist/components/Table/index.cjs +2 -0
  310. package/dist/components/Table/index.cjs.map +1 -0
  311. package/dist/components/Table/index.d.cts +54 -0
  312. package/dist/components/Table/index.d.cts.map +1 -0
  313. package/dist/components/Table/index.d.ts +54 -0
  314. package/dist/components/Table/index.d.ts.map +1 -0
  315. package/dist/components/Table/index.js +102 -0
  316. package/dist/components/Table/index.js.map +1 -0
  317. package/dist/components/Table/style.css +122 -0
  318. package/dist/components/TagsInput/index.cjs +2 -0
  319. package/dist/components/TagsInput/index.cjs.map +1 -0
  320. package/dist/components/TagsInput/index.d.cts +22 -0
  321. package/dist/components/TagsInput/index.d.cts.map +1 -0
  322. package/dist/components/TagsInput/index.d.ts +22 -0
  323. package/dist/components/TagsInput/index.d.ts.map +1 -0
  324. package/dist/components/TagsInput/index.js +60 -0
  325. package/dist/components/TagsInput/index.js.map +1 -0
  326. package/dist/components/TagsInput/style.css +83 -0
  327. package/dist/components/TextField/index.cjs +2 -0
  328. package/dist/components/TextField/index.cjs.map +1 -0
  329. package/dist/components/TextField/index.d.cts +11 -0
  330. package/dist/components/TextField/index.d.cts.map +1 -0
  331. package/dist/components/TextField/index.d.ts +11 -0
  332. package/dist/components/TextField/index.d.ts.map +1 -0
  333. package/dist/components/TextField/index.js +29 -0
  334. package/dist/components/TextField/index.js.map +1 -0
  335. package/dist/components/TextField/style.css +1 -0
  336. package/dist/components/Time/index.cjs +2 -0
  337. package/dist/components/Time/index.cjs.map +1 -0
  338. package/dist/components/Time/index.d.cts +35 -0
  339. package/dist/components/Time/index.d.cts.map +1 -0
  340. package/dist/components/Time/index.d.ts +35 -0
  341. package/dist/components/Time/index.d.ts.map +1 -0
  342. package/dist/components/Time/index.js +98 -0
  343. package/dist/components/Time/index.js.map +1 -0
  344. package/dist/components/Time/style.css +30 -0
  345. package/dist/components/Toast/index.cjs +2 -0
  346. package/dist/components/Toast/index.cjs.map +1 -0
  347. package/dist/components/Toast/index.d.cts +30 -0
  348. package/dist/components/Toast/index.d.cts.map +1 -0
  349. package/dist/components/Toast/index.d.ts +30 -0
  350. package/dist/components/Toast/index.d.ts.map +1 -0
  351. package/dist/components/Toast/index.js +96 -0
  352. package/dist/components/Toast/index.js.map +1 -0
  353. package/dist/components/Toast/style.css +80 -0
  354. package/dist/components/TopNav/index.cjs +2 -0
  355. package/dist/components/TopNav/index.cjs.map +1 -0
  356. package/dist/components/TopNav/index.d.cts +28 -0
  357. package/dist/components/TopNav/index.d.cts.map +1 -0
  358. package/dist/components/TopNav/index.d.ts +28 -0
  359. package/dist/components/TopNav/index.d.ts.map +1 -0
  360. package/dist/components/TopNav/index.js +45 -0
  361. package/dist/components/TopNav/index.js.map +1 -0
  362. package/dist/components/TopNav/style.css +80 -0
  363. package/dist/index.cjs +1 -0
  364. package/dist/index.d.cts +79 -0
  365. package/dist/index.d.cts.map +1 -0
  366. package/dist/index.d.ts +79 -0
  367. package/dist/index.d.ts.map +1 -0
  368. package/dist/index.js +39 -0
  369. package/dist/reset.css +15 -0
  370. package/dist/reset.css.d.ts +2 -0
  371. package/dist/styles.css +40 -0
  372. package/dist/styles.css.d.ts +2 -0
  373. package/dist/tokens.css +457 -0
  374. package/dist/tokens.css.d.ts +2 -0
  375. package/package.json +156 -4
@@ -0,0 +1,248 @@
1
+ import { t as e } from "../../chunks/Icon-CGY1FNXT.js";
2
+ import { Button as t } from "../Button/index.js";
3
+ /* empty css */
4
+ import { Popover as n } from "../Popover/index.js";
5
+ import { forwardRef as r, useEffect as i, useId as a, useRef as o, useState as s } from "react";
6
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
+ //#region src/components/DatePicker/index.tsx
8
+ function u(...e) {
9
+ return e.filter(Boolean).join(" ");
10
+ }
11
+ var d = [
12
+ "Mon",
13
+ "Tue",
14
+ "Wed",
15
+ "Thu",
16
+ "Fri",
17
+ "Sat",
18
+ "Sun"
19
+ ];
20
+ function f(e) {
21
+ let t = `${e.getMonth() + 1}`.padStart(2, "0"), n = `${e.getDate()}`.padStart(2, "0");
22
+ return `${e.getFullYear()}-${t}-${n}`;
23
+ }
24
+ function p(e) {
25
+ if (!e || !/^\d{4}-\d{2}-\d{2}$/.test(e)) return null;
26
+ let [t, n, r] = e.split("-").map(Number);
27
+ if (!t || !n || !r) return null;
28
+ let i = new Date(t, n - 1, r);
29
+ return Number.isNaN(i.getTime()) || f(i) !== e ? null : i;
30
+ }
31
+ function m(e) {
32
+ let t = p(e);
33
+ return t ? t.toLocaleDateString("en-GB", {
34
+ day: "numeric",
35
+ month: "long",
36
+ year: "numeric"
37
+ }) : "";
38
+ }
39
+ function h(e) {
40
+ return e.toLocaleDateString("en-GB", {
41
+ month: "long",
42
+ year: "numeric"
43
+ });
44
+ }
45
+ function g(e) {
46
+ let t = new Date(e.getFullYear(), e.getMonth(), 1), n = (t.getDay() + 6) % 7;
47
+ return new Date(t.getFullYear(), t.getMonth(), 1 - n);
48
+ }
49
+ var _ = r(function({ value: e, endValue: n, onSelect: r, min: a, max: _, className: v, ...y }, b) {
50
+ let x = p(e), [S, C] = s(() => x ?? /* @__PURE__ */ new Date()), [w, T] = s(() => e ?? f(/* @__PURE__ */ new Date())), E = o(null), D = o(!1);
51
+ i(() => {
52
+ let t = p(e);
53
+ t && (T(e), C(new Date(t.getFullYear(), t.getMonth(), 1)));
54
+ }, [e]), i(() => {
55
+ D.current && (D.current = !1, E.current?.querySelector("[data-focused]")?.focus());
56
+ }, [w]);
57
+ let O = Array.from({ length: 42 }, (e, t) => {
58
+ let n = g(S);
59
+ return new Date(n.getFullYear(), n.getMonth(), n.getDate() + t);
60
+ }), k = f(/* @__PURE__ */ new Date()), A = (e) => {
61
+ let t = new Date(S.getFullYear(), S.getMonth() + e, 1);
62
+ C(t), T(f(t));
63
+ }, j = (e) => {
64
+ let t = p(w) ?? /* @__PURE__ */ new Date(), n = new Date(t.getFullYear(), t.getMonth(), t.getDate() + e);
65
+ D.current = !0, T(f(n)), C(new Date(n.getFullYear(), n.getMonth(), 1));
66
+ }, M = (e) => {
67
+ let t = {
68
+ ArrowLeft: -1,
69
+ ArrowRight: 1,
70
+ ArrowUp: -7,
71
+ ArrowDown: 7,
72
+ PageUp: -28,
73
+ PageDown: 28
74
+ }[e.key];
75
+ t !== void 0 && (e.preventDefault(), j(t));
76
+ };
77
+ return /* @__PURE__ */ l("div", {
78
+ ref: b,
79
+ className: u("ds-calendar", v),
80
+ ...y,
81
+ children: [
82
+ /* @__PURE__ */ l("div", {
83
+ className: "ds-calendar__head",
84
+ children: [
85
+ /* @__PURE__ */ c(t, {
86
+ variant: "simple",
87
+ size: "sm",
88
+ isIconOnly: !0,
89
+ iconStart: "chevron-left",
90
+ "aria-label": "Previous month",
91
+ onClick: () => A(-1)
92
+ }),
93
+ /* @__PURE__ */ c("span", {
94
+ className: "ds-calendar__month",
95
+ children: h(S)
96
+ }),
97
+ /* @__PURE__ */ c(t, {
98
+ variant: "simple",
99
+ size: "sm",
100
+ isIconOnly: !0,
101
+ iconStart: "chevron-right",
102
+ "aria-label": "Next month",
103
+ onClick: () => A(1)
104
+ })
105
+ ]
106
+ }),
107
+ /* @__PURE__ */ c("div", {
108
+ className: "ds-calendar__weekdays",
109
+ "aria-hidden": "true",
110
+ children: d.map((e) => /* @__PURE__ */ c("span", { children: e.slice(0, 2) }, e))
111
+ }),
112
+ /* @__PURE__ */ c("div", {
113
+ ref: E,
114
+ className: "ds-calendar__grid",
115
+ role: "grid",
116
+ onKeyDown: M,
117
+ children: Array.from({ length: 6 }, (t, i) => /* @__PURE__ */ c("div", {
118
+ role: "row",
119
+ className: "ds-calendar__row",
120
+ children: O.slice(i * 7, i * 7 + 7).map((t) => {
121
+ let i = f(t), o = t.getMonth() !== S.getMonth(), s = a && i < a || _ && i > _, l = !!(e && n && i > e && i < n), u = i === e || i === n;
122
+ return /* @__PURE__ */ c("button", {
123
+ type: "button",
124
+ role: "gridcell",
125
+ "aria-label": m(i),
126
+ tabIndex: i === w ? 0 : -1,
127
+ disabled: s || void 0,
128
+ "aria-selected": u || void 0,
129
+ "data-outside": o || void 0,
130
+ "data-today": i === k || void 0,
131
+ "data-in-range": l || void 0,
132
+ "data-focused": i === w || void 0,
133
+ className: "ds-calendar__day",
134
+ onClick: () => {
135
+ T(i), r?.(i);
136
+ },
137
+ children: t.getDate()
138
+ }, i);
139
+ })
140
+ }, i))
141
+ })
142
+ ]
143
+ });
144
+ });
145
+ function v({ value: t, defaultValue: r = "", onValueChange: d, size: f = "md", placeholder: p = "Pick a date", min: h, max: g, isDisabled: v = !1, isInvalid: y = !1, "aria-invalid": b, id: x, className: S, ...C }) {
146
+ let [w, T] = s(r), E = t ?? w, [D, O] = s(!1), k = o(null), A = o(null), j = o(null), M = a(), N = x ?? M;
147
+ return i(() => {
148
+ if (!D) return;
149
+ let e = (e) => {
150
+ let t = e.target;
151
+ !k.current?.contains(t) && !j.current?.contains(t) && O(!1);
152
+ }, t = (e) => {
153
+ e.key === "Escape" && (O(!1), A.current?.focus());
154
+ };
155
+ return document.addEventListener("mousedown", e), document.addEventListener("keydown", t), () => {
156
+ document.removeEventListener("mousedown", e), document.removeEventListener("keydown", t);
157
+ };
158
+ }, [D]), /* @__PURE__ */ l("div", {
159
+ className: u("ds-datefield", S),
160
+ ref: k,
161
+ children: [/* @__PURE__ */ l("button", {
162
+ ...C,
163
+ ref: A,
164
+ id: N,
165
+ type: "button",
166
+ "aria-haspopup": "dialog",
167
+ "aria-expanded": D,
168
+ "aria-invalid": y || b || void 0,
169
+ disabled: v,
170
+ "data-size": f,
171
+ "data-placeholder": E ? void 0 : "",
172
+ className: "ds-field-skin ds-datefield__control",
173
+ onClick: () => O((e) => !e),
174
+ children: [/* @__PURE__ */ c("span", {
175
+ className: "ds-datefield__value",
176
+ children: E ? m(E) : p
177
+ }), /* @__PURE__ */ c(e, {
178
+ name: "calendar",
179
+ size: 16,
180
+ className: "ds-datefield__glyph"
181
+ })]
182
+ }), /* @__PURE__ */ c(n, {
183
+ anchorRef: A,
184
+ anchorId: N,
185
+ isOpen: D,
186
+ panelRef: j,
187
+ className: "ds-datefield__popover",
188
+ role: "dialog",
189
+ "aria-label": "Choose a date",
190
+ children: /* @__PURE__ */ c(_, {
191
+ value: E,
192
+ min: h,
193
+ max: g,
194
+ onSelect: (e) => {
195
+ t === void 0 && T(e), d?.(e), O(!1), A.current?.focus();
196
+ }
197
+ })
198
+ })]
199
+ });
200
+ }
201
+ function y({ value: e, defaultValue: t = {
202
+ start: "",
203
+ end: ""
204
+ }, onValueChange: n, size: r = "md", min: i, max: a, isDisabled: o = !1, startLabel: d = "Start date", endLabel: f = "End date", className: p }) {
205
+ let [m, h] = s(t), g = e ?? m, _ = (t) => {
206
+ e === void 0 && h(t), n?.(t);
207
+ };
208
+ return /* @__PURE__ */ l("div", {
209
+ className: u("ds-daterange", p),
210
+ children: [
211
+ /* @__PURE__ */ c(v, {
212
+ "aria-label": d,
213
+ size: r,
214
+ value: g.start,
215
+ min: i,
216
+ max: g.end || a,
217
+ isDisabled: o,
218
+ placeholder: d,
219
+ onValueChange: (e) => _({
220
+ ...g,
221
+ start: e
222
+ })
223
+ }),
224
+ /* @__PURE__ */ c("span", {
225
+ className: "ds-daterange__dash",
226
+ "aria-hidden": "true",
227
+ children: "–"
228
+ }),
229
+ /* @__PURE__ */ c(v, {
230
+ "aria-label": f,
231
+ size: r,
232
+ value: g.end,
233
+ min: g.start || i,
234
+ max: a,
235
+ isDisabled: o,
236
+ placeholder: f,
237
+ onValueChange: (e) => _({
238
+ ...g,
239
+ end: e
240
+ })
241
+ })
242
+ ]
243
+ });
244
+ }
245
+ //#endregion
246
+ export { _ as Calendar, v as DateField, y as DateRangeField, m as formatIsoDate };
247
+
248
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Icon","cx","parts","WEEKDAYS","toIso","month","date","day","fromIso","value","year","formatIsoDate","monthLabel","startOfGrid","first","weekday","Calendar","forwardRef","rest","selected","setMonth","useState","focused","setFocused","gridRef","useRef","shouldFocus","useEffect","next","days","start","index","today","changeMonth","delta","move","base","deltaDays","onKeyDown","event","className","Button","rowIndex","iso","isOutside","isDisabled","min","max","inRange","endValue","isEdge","onSelect","DateField","ariaInvalid","internal","setInternal","defaultValue","current","isOpen","setOpen","rootRef","triggerRef","panelRef","generatedId","useId","triggerId","id","onPointerDown","target","isInvalid","size","open","placeholder","Popover","onValueChange","DateRangeField","commit","startLabel","endLabel"],"sources":["../../../src/components/DatePicker/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type AriaAttributes,\n} from \"react\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { Popover } from \"../Popover\";\nimport type { FieldSize } from \"../Field\";\nimport \"../Field/style.css\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\n/** ISO calendar date, \"YYYY-MM-DD\" — the only date shape the system passes around. */\nexport type IsoDate = string;\n\nconst WEEKDAYS = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nfunction toIso(date: Date): IsoDate {\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\n const day = `${date.getDate()}`.padStart(2, \"0\");\n return `${date.getFullYear()}-${month}-${day}`;\n}\n\nfunction fromIso(value: string | undefined): Date | null {\n if (!value || !/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return null;\n const [year, month, day] = value.split(\"-\").map(Number);\n if (!year || !month || !day) return null;\n const date = new Date(year, month - 1, day);\n return Number.isNaN(date.getTime()) || toIso(date) !== value ? null : date;\n}\n\n/** \"12 March 2026\" — the system's one long date format. */\nexport function formatIsoDate(value: string | undefined): string {\n const date = fromIso(value);\n if (!date) return \"\";\n return date.toLocaleDateString(\"en-GB\", { day: \"numeric\", month: \"long\", year: \"numeric\" });\n}\n\nfunction monthLabel(date: Date) {\n return date.toLocaleDateString(\"en-GB\", { month: \"long\", year: \"numeric\" });\n}\n\nfunction startOfGrid(month: Date) {\n const first = new Date(month.getFullYear(), month.getMonth(), 1);\n const weekday = (first.getDay() + 6) % 7; // Monday-first\n return new Date(first.getFullYear(), first.getMonth(), 1 - weekday);\n}\n\nexport interface CalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Selected day, or the start of a selected span. */\n value?: IsoDate;\n /** End of a selected span. Set it to put the calendar in range mode. */\n endValue?: IsoDate;\n onSelect?: (value: IsoDate) => void;\n min?: IsoDate;\n max?: IsoDate;\n}\n\n/**\n * A month of days, Monday first. Arrow keys walk the grid; the month follows\n * the focused day, so a whole year is reachable from the keyboard.\n */\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(function Calendar(\n { value, endValue, onSelect, min, max, className, ...rest },\n ref,\n) {\n const selected = fromIso(value);\n const [month, setMonth] = useState(() => selected ?? new Date());\n const [focused, setFocused] = useState<IsoDate>(() => value ?? toIso(new Date()));\n const gridRef = useRef<HTMLDivElement | null>(null);\n const shouldFocus = useRef(false);\n\n useEffect(() => {\n const next = fromIso(value);\n if (!next) return;\n // Controlled changes intentionally reposition the visible and roving-focus month.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setFocused(value!);\n setMonth(new Date(next.getFullYear(), next.getMonth(), 1));\n }, [value]);\n\n useEffect(() => {\n if (!shouldFocus.current) return;\n shouldFocus.current = false;\n gridRef.current?.querySelector<HTMLButtonElement>(\"[data-focused]\")?.focus();\n }, [focused]);\n\n const days = Array.from({ length: 42 }, (_, index) => {\n const start = startOfGrid(month);\n return new Date(start.getFullYear(), start.getMonth(), start.getDate() + index);\n });\n\n const today = toIso(new Date());\n\n const changeMonth = (delta: number) => {\n const next = new Date(month.getFullYear(), month.getMonth() + delta, 1);\n setMonth(next);\n setFocused(toIso(next));\n };\n\n const move = (deltaDays: number) => {\n const base = fromIso(focused) ?? new Date();\n const next = new Date(base.getFullYear(), base.getMonth(), base.getDate() + deltaDays);\n shouldFocus.current = true;\n setFocused(toIso(next));\n setMonth(new Date(next.getFullYear(), next.getMonth(), 1));\n };\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n const steps: Record<string, number> = {\n ArrowLeft: -1,\n ArrowRight: 1,\n ArrowUp: -7,\n ArrowDown: 7,\n PageUp: -28,\n PageDown: 28,\n };\n const delta = steps[event.key];\n if (delta === undefined) return;\n event.preventDefault();\n move(delta);\n };\n\n return (\n <div ref={ref} className={cx(\"ds-calendar\", className)} {...rest}>\n <div className=\"ds-calendar__head\">\n <Button\n variant=\"simple\"\n size=\"sm\"\n isIconOnly\n iconStart=\"chevron-left\"\n aria-label=\"Previous month\"\n onClick={() => changeMonth(-1)}\n />\n <span className=\"ds-calendar__month\">{monthLabel(month)}</span>\n <Button\n variant=\"simple\"\n size=\"sm\"\n isIconOnly\n iconStart=\"chevron-right\"\n aria-label=\"Next month\"\n onClick={() => changeMonth(1)}\n />\n </div>\n <div className=\"ds-calendar__weekdays\" aria-hidden=\"true\">\n {WEEKDAYS.map((day) => (\n <span key={day}>{day.slice(0, 2)}</span>\n ))}\n </div>\n <div ref={gridRef} className=\"ds-calendar__grid\" role=\"grid\" onKeyDown={onKeyDown}>\n {Array.from({ length: 6 }, (_, rowIndex) => (\n <div role=\"row\" className=\"ds-calendar__row\" key={rowIndex}>\n {days.slice(rowIndex * 7, rowIndex * 7 + 7).map((day) => {\n const iso = toIso(day);\n const isOutside = day.getMonth() !== month.getMonth();\n const isDisabled = (min && iso < min) || (max && iso > max);\n const inRange = Boolean(value && endValue && iso > value && iso < endValue);\n const isEdge = iso === value || iso === endValue;\n return (\n <button\n key={iso}\n type=\"button\"\n role=\"gridcell\"\n aria-label={formatIsoDate(iso)}\n tabIndex={iso === focused ? 0 : -1}\n disabled={isDisabled || undefined}\n aria-selected={isEdge || undefined}\n data-outside={isOutside || undefined}\n data-today={iso === today || undefined}\n data-in-range={inRange || undefined}\n data-focused={iso === focused || undefined}\n className=\"ds-calendar__day\"\n onClick={() => {\n setFocused(iso);\n onSelect?.(iso);\n }}\n >\n {day.getDate()}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n );\n});\n\nexport interface DateFieldProps {\n value?: IsoDate;\n defaultValue?: IsoDate;\n onValueChange?: (value: IsoDate) => void;\n size?: FieldSize;\n placeholder?: string;\n min?: IsoDate;\n max?: IsoDate;\n isDisabled?: boolean;\n isInvalid?: boolean;\n id?: string;\n className?: string;\n \"aria-label\"?: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: AriaAttributes[\"aria-invalid\"];\n}\n\n/** One day, picked from a calendar. The field prints the long date, never a mask. */\nexport function DateField({\n value,\n defaultValue = \"\",\n onValueChange,\n size = \"md\",\n placeholder = \"Pick a date\",\n min,\n max,\n isDisabled = false,\n isInvalid = false,\n \"aria-invalid\": ariaInvalid,\n id,\n className,\n ...rest\n}: DateFieldProps) {\n const [internal, setInternal] = useState<IsoDate>(defaultValue);\n const current = value ?? internal;\n const [isOpen, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const panelRef = useRef<HTMLDivElement | null>(null);\n const generatedId = useId();\n const triggerId = id ?? generatedId;\n\n useEffect(() => {\n if (!isOpen) return;\n const onPointerDown = (event: MouseEvent) => {\n const target = event.target as Node;\n if (!rootRef.current?.contains(target) && !panelRef.current?.contains(target)) setOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen]);\n\n return (\n <div className={cx(\"ds-datefield\", className)} ref={rootRef}>\n <button\n {...rest}\n ref={triggerRef}\n id={triggerId}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-invalid={isInvalid || ariaInvalid || undefined}\n disabled={isDisabled}\n data-size={size}\n data-placeholder={current ? undefined : \"\"}\n className=\"ds-field-skin ds-datefield__control\"\n onClick={() => setOpen((open) => !open)}\n >\n <span className=\"ds-datefield__value\">{current ? formatIsoDate(current) : placeholder}</span>\n <Icon name=\"calendar\" size={16} className=\"ds-datefield__glyph\" />\n </button>\n <Popover\n anchorRef={triggerRef}\n anchorId={triggerId}\n isOpen={isOpen}\n panelRef={panelRef}\n className=\"ds-datefield__popover\"\n role=\"dialog\"\n aria-label=\"Choose a date\"\n >\n <Calendar\n value={current}\n min={min}\n max={max}\n onSelect={(next) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n setOpen(false);\n triggerRef.current?.focus();\n }}\n />\n </Popover>\n </div>\n );\n}\n\nexport interface DateRangeValue {\n start: IsoDate;\n end: IsoDate;\n}\n\nexport interface DateRangeFieldProps {\n value?: DateRangeValue;\n defaultValue?: DateRangeValue;\n onValueChange?: (value: DateRangeValue) => void;\n size?: FieldSize;\n min?: IsoDate;\n max?: IsoDate;\n isDisabled?: boolean;\n startLabel?: string;\n endLabel?: string;\n className?: string;\n}\n\n/** A span of days. The end field never offers a day before the start. */\nexport function DateRangeField({\n value,\n defaultValue = { start: \"\", end: \"\" },\n onValueChange,\n size = \"md\",\n min,\n max,\n isDisabled = false,\n startLabel = \"Start date\",\n endLabel = \"End date\",\n className,\n}: DateRangeFieldProps) {\n const [internal, setInternal] = useState<DateRangeValue>(defaultValue);\n const current = value ?? internal;\n\n const commit = (next: DateRangeValue) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n return (\n <div className={cx(\"ds-daterange\", className)}>\n <DateField\n aria-label={startLabel}\n size={size}\n value={current.start}\n min={min}\n max={current.end || max}\n isDisabled={isDisabled}\n placeholder={startLabel}\n onValueChange={(next) => commit({ ...current, start: next })}\n />\n <span className=\"ds-daterange__dash\" aria-hidden=\"true\">\n –\n </span>\n <DateField\n aria-label={endLabel}\n size={size}\n value={current.end}\n min={current.start || min}\n max={max}\n isDisabled={isDisabled}\n placeholder={endLabel}\n onValueChange={(next) => commit({ ...current, end: next })}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ @layer components {
2
+ .ds-calendar {
3
+ --field-bg: var(--color-surface-raised);
4
+
5
+ inline-size: max-content;
6
+ padding: var(--space-3);
7
+ background: var(--color-surface-raised);
8
+ border: var(--control-border-width) solid var(--control-border-color);
9
+ border-radius: var(--radius-md);
10
+ }
11
+
12
+ .ds-calendar__head {
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: space-between;
16
+ gap: var(--space-2);
17
+ padding-block-end: var(--space-2);
18
+ margin-block-end: var(--space-2);
19
+ border-block-end: var(--rule-width) solid var(--rule-color);
20
+ }
21
+
22
+ .ds-calendar__month {
23
+ font-size: var(--font-size-sm);
24
+ font-weight: var(--font-weight-bold);
25
+ }
26
+
27
+ .ds-calendar__weekdays,
28
+ .ds-calendar__grid {
29
+ display: grid;
30
+ grid-template-columns: repeat(7, var(--calendar-cell-size));
31
+ gap: 2px;
32
+ }
33
+
34
+ .ds-calendar__weekdays span {
35
+ display: grid;
36
+ place-items: center;
37
+ color: var(--color-text-muted);
38
+ font-size: var(--font-size-xs);
39
+ font-weight: var(--font-weight-bold);
40
+ letter-spacing: var(--table-head-tracking);
41
+ text-transform: uppercase;
42
+ }
43
+
44
+ .ds-calendar__row {
45
+ display: contents;
46
+ }
47
+
48
+ .ds-calendar__day {
49
+ display: grid;
50
+ place-items: center;
51
+ inline-size: var(--calendar-cell-size);
52
+ block-size: var(--calendar-cell-size);
53
+ border: var(--control-border-width) solid transparent;
54
+ border-radius: var(--field-radius);
55
+ background: transparent;
56
+ color: var(--color-text);
57
+ font-family: var(--font-sans);
58
+ font-size: var(--font-size-sm);
59
+ cursor: pointer;
60
+ transition: background-color var(--duration-fast) var(--ease-standard);
61
+ }
62
+
63
+ .ds-calendar__day:hover:not(:disabled) {
64
+ background: var(--field-hover);
65
+ }
66
+
67
+ .ds-calendar__day:focus-visible {
68
+ outline: var(--control-border-width) solid var(--color-focus);
69
+ outline-offset: 2px;
70
+ }
71
+
72
+ .ds-calendar__day[data-outside] {
73
+ color: var(--color-text-muted);
74
+ }
75
+
76
+ .ds-calendar__day[data-today] {
77
+ border-color: var(--control-border-color);
78
+ font-weight: var(--font-weight-bold);
79
+ }
80
+
81
+ .ds-calendar__day[data-in-range] {
82
+ background: var(--color-primary-soft);
83
+ }
84
+
85
+ .ds-calendar__day[aria-selected="true"] {
86
+ background: var(--color-primary);
87
+ color: var(--color-text-on-solid);
88
+ font-weight: var(--font-weight-bold);
89
+ }
90
+
91
+ .ds-calendar__day:disabled {
92
+ opacity: 40%;
93
+ cursor: not-allowed;
94
+ }
95
+
96
+ .ds-datefield {
97
+ position: relative;
98
+ inline-size: 100%;
99
+ }
100
+
101
+ .ds-datefield__control {
102
+ display: flex;
103
+ align-items: center;
104
+ justify-content: space-between;
105
+ gap: var(--space-2);
106
+ padding: 0 10px;
107
+ text-align: start;
108
+ cursor: pointer;
109
+ }
110
+
111
+ .ds-datefield__control[data-size="sm"] {
112
+ block-size: var(--field-height-sm);
113
+ font-size: var(--field-font-size-sm);
114
+ }
115
+
116
+ .ds-datefield__control[data-size="md"] {
117
+ block-size: var(--field-height-md);
118
+ font-size: var(--field-font-size-md);
119
+ }
120
+
121
+ .ds-datefield__control[data-size="lg"] {
122
+ block-size: var(--field-height-lg);
123
+ font-size: var(--field-font-size-md);
124
+ }
125
+
126
+ .ds-datefield__control[data-placeholder] .ds-datefield__value {
127
+ color: var(--color-text-muted);
128
+ }
129
+
130
+ .ds-datefield__glyph {
131
+ flex: none;
132
+ color: var(--color-text-muted);
133
+ }
134
+
135
+ .ds-datefield__popover {
136
+ box-shadow: var(--shadow-lg);
137
+ border-radius: var(--radius-md);
138
+ }
139
+
140
+ .ds-daterange {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: var(--space-3);
144
+ }
145
+
146
+ .ds-daterange__dash {
147
+ color: var(--color-text-muted);
148
+ }
149
+ }
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../Button/index.cjs");let t=require("react"),n=require("react/jsx-runtime"),r=require("react-dom");var i=(0,t.forwardRef)(function({isOpen:i,onClose:a,title:o,description:s,side:c=`end`,size:l=`md`,footer:u,className:d,children:f,...p},m){let h=(0,t.useRef)(null),g=(0,t.useRef)(a),_=(0,t.useId)(),v=(0,t.useId)();return(0,t.useEffect)(()=>{g.current=a},[a]),(0,t.useEffect)(()=>{if(!i)return;let e=document.activeElement;(h.current?.querySelector(`button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex='-1'])`)??h.current)?.focus();let t=e=>{if(e.key===`Escape`){g.current();return}if(e.key!==`Tab`)return;let t=Array.from(h.current?.querySelectorAll(`button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex='-1'])`)??[]);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())};document.addEventListener(`keydown`,t);let n=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,t),document.body.style.overflow=n,e?.focus()}},[i]),!i||typeof document>`u`?null:(0,r.createPortal)((0,n.jsx)(`div`,{className:`ds-drawer-scrim`,"data-side":c,onMouseDown:e=>e.target===e.currentTarget&&g.current(),children:(0,n.jsxs)(`div`,{...p,ref:e=>{h.current=e,typeof m==`function`?m(e):m&&(m.current=e)},role:`dialog`,"aria-modal":`true`,"aria-labelledby":_,"aria-describedby":s?v:void 0,tabIndex:-1,"data-side":c,"data-size":l,className:[`ds-drawer`,d].filter(Boolean).join(` `),children:[(0,n.jsxs)(`header`,{className:`ds-drawer__head`,children:[(0,n.jsxs)(`div`,{className:`ds-drawer__titles`,children:[(0,n.jsx)(`h2`,{id:_,className:`ds-drawer__title`,children:o}),s&&(0,n.jsx)(`p`,{id:v,className:`ds-drawer__description`,children:s})]}),(0,n.jsx)(e.Button,{variant:`simple`,size:`sm`,isIconOnly:!0,iconStart:`x`,"aria-label":`Close`,onClick:()=>g.current()})]}),(0,n.jsx)(`div`,{className:`ds-drawer__body`,children:f}),u&&(0,n.jsx)(`footer`,{className:`ds-drawer__footer`,children:u})]})}),document.body)});exports.Drawer=i;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["forwardRef","useRef","useId","createPortal","Button","require_components_Button_index","react","react_jsx_runtime","react_dom","Drawer","rest","panelRef","onCloseRef","onClose","titleId","descriptionId","isOpen","previous","onKeyDown","event","focusable","first","last","overflow","side","node","ref","description","size","className","title","footer"],"sources":["../../../src/components/Drawer/index.tsx"],"sourcesContent":["import { forwardRef, useEffect, useId, useRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Button } from \"../Button\";\nimport \"./style.css\";\n\nexport type DrawerSide = \"end\" | \"start\" | \"bottom\";\nexport type DrawerSize = \"md\" | \"wide\";\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n isOpen: boolean;\n /** Escape, the scrim and the close button all call this. */\n onClose: () => void;\n title: string;\n description?: string;\n /** Which edge the panel is anchored to. */\n side?: DrawerSide;\n size?: DrawerSize;\n /** Actions, right-aligned. The confirming action goes last. */\n footer?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * A side panel for work that belongs beside the page rather than on top of it\n * — editing one record, a filter set, a revision history. Same frame, rules\n * and footer band as `Modal`; focus is trapped while open.\n */\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n title,\n description,\n side = \"end\",\n size = \"md\",\n footer,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const onCloseRef = useRef(onClose);\n const titleId = useId();\n const descriptionId = useId();\n\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n const previous = document.activeElement as HTMLElement | null;\n const initialFocus = panelRef.current?.querySelector<HTMLElement>(\n \"button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex='-1'])\",\n );\n (initialFocus ?? panelRef.current)?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onCloseRef.current();\n return;\n }\n if (event.key !== \"Tab\") return;\n const focusable = Array.from(\n panelRef.current?.querySelectorAll<HTMLElement>(\n \"button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex='-1'])\",\n ) ?? [],\n );\n if (focusable.length === 0) return;\n const first = focusable[0]!;\n const last = focusable[focusable.length - 1]!;\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n const overflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.body.style.overflow = overflow;\n previous?.focus();\n };\n }, [isOpen]);\n\n if (!isOpen || typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className=\"ds-drawer-scrim\"\n data-side={side}\n onMouseDown={(event) => event.target === event.currentTarget && onCloseRef.current()}\n >\n <div\n {...rest}\n ref={(node) => {\n panelRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={-1}\n data-side={side}\n data-size={size}\n className={[\"ds-drawer\", className].filter(Boolean).join(\" \")}\n >\n <header className=\"ds-drawer__head\">\n <div className=\"ds-drawer__titles\">\n <h2 id={titleId} className=\"ds-drawer__title\">\n {title}\n </h2>\n {description && (\n <p id={descriptionId} className=\"ds-drawer__description\">\n {description}\n </p>\n )}\n </div>\n <Button\n variant=\"simple\"\n size=\"sm\"\n isIconOnly\n iconStart=\"x\"\n aria-label=\"Close\"\n onClick={() => onCloseRef.current()}\n />\n </header>\n <div className=\"ds-drawer__body\">{children}</div>\n {footer && <footer className=\"ds-drawer__footer\">{footer}</footer>}\n </div>\n </div>,\n document.body,\n );\n});\n"],"mappings":"A,uLA2BA,IAAaS,GAAA,EAAST,EAAAA,WAAAA,CAAwC,SAC5D,CACE,SACA,UACA,QACA,cACA,OAAO,MACP,OAAO,KACP,SACA,YACA,WACA,GAAGU,GAEL,EACA,CACA,IAAMC,GAAA,EAAWV,EAAAA,OAAAA,CAA8B,IAAI,EAC7CW,GAAA,EAAaX,EAAAA,OAAAA,CAAOY,CAAO,EAC3BC,GAAA,EAAUZ,EAAAA,MAAAA,CAAM,EAChBa,GAAA,EAAgBb,EAAAA,MAAAA,CAAM,EAmD5B,OAjDA,EAAAI,EAAA,UAAA,KAAgB,CACd,EAAW,QAAUO,CACvB,EAAG,CAACA,CAAO,CAAC,GAEZ,EAAAP,EAAA,UAAA,KAAgB,CACd,GAAI,CAACU,EAAQ,OAEb,IAAMC,EAAW,SAAS,eACLN,EAAS,SAAS,cACrC,sIACF,GACiBA,EAAS,QAAA,EAAU,MAAM,EAE1C,IAAMO,EAAa,GAAyB,CAC1C,GAAIC,EAAM,MAAQ,SAAU,CAC1BP,EAAW,QAAQ,EACnB,MACF,CACA,GAAIO,EAAM,MAAQ,MAAO,OACzB,IAAMC,EAAY,MAAM,KACtBT,EAAS,SAAS,iBAChB,sIACF,GAAK,CAAC,CACR,EACA,GAAIS,EAAU,SAAW,EAAG,OAC5B,IAAMC,EAAQD,EAAU,GAClBE,EAAOF,EAAUA,EAAU,OAAS,GACtCD,EAAM,UAAY,SAAS,gBAAkBE,GAC/CF,EAAM,eAAe,EACrBG,EAAK,MAAM,GACF,CAACH,EAAM,UAAY,SAAS,gBAAkBG,IACvDH,EAAM,eAAe,EACrBE,EAAM,MAAM,EAEhB,EAEA,SAAS,iBAAiB,UAAWH,CAAS,EAC9C,IAAMK,EAAW,SAAS,KAAK,MAAM,SAGrC,MAFA,UAAS,KAAK,MAAM,SAAW,aAElB,CACX,SAAS,oBAAoB,UAAWL,CAAS,EACjD,SAAS,KAAK,MAAM,SAAWK,EAC/BN,GAAU,MAAM,CAClB,CACF,EAAG,CAACD,CAAM,CAAC,EAEP,CAACA,GAAU,OAAO,SAAa,IAAoB,MAEvD,EAAOb,EAAAA,aAAAA,EACL,EAAAI,EAAA,IAAA,CAAC,MAAD,CACE,UAAU,kBACV,YAAWiB,EACX,YAAc,GAAUL,EAAM,SAAWA,EAAM,eAAiBP,EAAW,QAAQ,EAEnF,UAAA,EAAAL,EAAA,KAAA,CAAC,MAAD,CACE,GAAIG,EACJ,IAAM,GAAS,CACb,EAAS,QAAUe,EACf,OAAOC,GAAQ,WAAYA,EAAID,CAAI,EAC9BC,IAAK,EAAI,QAAUD,EAC9B,EACA,KAAK,SACL,aAAW,OACX,kBAAiBX,EACjB,mBAAkBa,EAAcZ,EAAgB,IAAA,GAChD,SAAU,GACV,YAAWS,EACX,YAAWI,EACX,UAAW,CAAC,YAAaC,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,EAd9D,SAAA,EAgBE,EAAAtB,EAAA,KAAA,CAAC,SAAD,CAAQ,UAAU,kBAAlB,SAAA,EACE,EAAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,oBAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,KAAD,CAAI,GAAIO,EAAS,UAAU,mBACxB,SAAAgB,CACC,CAAA,EACHH,IACC,EAAApB,EAAA,IAAA,CAAC,IAAD,CAAG,GAAIQ,EAAe,UAAU,yBAC7B,SAAAY,CACA,CAAA,CAEF,CACL,CAAA,GAAA,EAAApB,EAAA,IAAA,CAACH,EAAAA,OAAD,CACE,QAAQ,SACR,KAAK,KACL,WAAA,GACA,UAAU,IACV,aAAW,QACX,YAAeQ,EAAW,QAAQ,CACnC,CAAA,CACK,C,IACR,EAAAL,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,kBAAmB,UAAc,CAAA,EAC/CwB,IAAU,EAAAxB,EAAA,IAAA,CAAC,SAAD,CAAQ,UAAU,oBAAqB,SAAAwB,CAAe,CAAA,CAC9D,C,EACF,CAAA,EACL,SAAS,IACX,CACF,CAAC,E"}
@@ -0,0 +1,23 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ export type DrawerSide = "end" | "start" | "bottom";
3
+ export type DrawerSize = "md" | "wide";
4
+ export interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
5
+ isOpen: boolean;
6
+ /** Escape, the scrim and the close button all call this. */
7
+ onClose: () => void;
8
+ title: string;
9
+ description?: string;
10
+ /** Which edge the panel is anchored to. */
11
+ side?: DrawerSide;
12
+ size?: DrawerSize;
13
+ /** Actions, right-aligned. The confirming action goes last. */
14
+ footer?: ReactNode;
15
+ children?: ReactNode;
16
+ }
17
+ /**
18
+ * A side panel for work that belongs beside the page rather than on top of it
19
+ * — editing one record, a filter set, a revision history. Same frame, rules
20
+ * and footer band as `Modal`; focus is trapped while open.
21
+ */
22
+ export declare const Drawer: import("react").ForwardRefExoticComponent<DrawerProps & import("react").RefAttributes<HTMLDivElement>>;
23
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/Drawer/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlG,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAChF,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,wGAqHjB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ export type DrawerSide = "end" | "start" | "bottom";
3
+ export type DrawerSize = "md" | "wide";
4
+ export interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
5
+ isOpen: boolean;
6
+ /** Escape, the scrim and the close button all call this. */
7
+ onClose: () => void;
8
+ title: string;
9
+ description?: string;
10
+ /** Which edge the panel is anchored to. */
11
+ side?: DrawerSide;
12
+ size?: DrawerSize;
13
+ /** Actions, right-aligned. The confirming action goes last. */
14
+ footer?: ReactNode;
15
+ children?: ReactNode;
16
+ }
17
+ /**
18
+ * A side panel for work that belongs beside the page rather than on top of it
19
+ * — editing one record, a filter set, a revision history. Same frame, rules
20
+ * and footer band as `Modal`; focus is trapped while open.
21
+ */
22
+ export declare const Drawer: import("react").ForwardRefExoticComponent<DrawerProps & import("react").RefAttributes<HTMLDivElement>>;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Drawer/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlG,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAChF,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,wGAqHjB,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { Button as e } from "../Button/index.js";
2
+ import { forwardRef as t, useEffect as n, useId as r, useRef as i } from "react";
3
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
+ import { createPortal as s } from "react-dom";
5
+ //#region src/components/Drawer/index.tsx
6
+ var c = t(function({ isOpen: t, onClose: c, title: l, description: u, side: d = "end", size: f = "md", footer: p, className: m, children: h, ...g }, _) {
7
+ let v = i(null), y = i(c), b = r(), x = r();
8
+ return n(() => {
9
+ y.current = c;
10
+ }, [c]), n(() => {
11
+ if (!t) return;
12
+ let e = document.activeElement;
13
+ (v.current?.querySelector("button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex='-1'])") ?? v.current)?.focus();
14
+ let n = (e) => {
15
+ if (e.key === "Escape") {
16
+ y.current();
17
+ return;
18
+ }
19
+ if (e.key !== "Tab") return;
20
+ let t = Array.from(v.current?.querySelectorAll("button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex='-1'])") ?? []);
21
+ if (t.length === 0) return;
22
+ let n = t[0], r = t[t.length - 1];
23
+ e.shiftKey && document.activeElement === n ? (e.preventDefault(), r.focus()) : !e.shiftKey && document.activeElement === r && (e.preventDefault(), n.focus());
24
+ };
25
+ document.addEventListener("keydown", n);
26
+ let r = document.body.style.overflow;
27
+ return document.body.style.overflow = "hidden", () => {
28
+ document.removeEventListener("keydown", n), document.body.style.overflow = r, e?.focus();
29
+ };
30
+ }, [t]), !t || typeof document > "u" ? null : s(/* @__PURE__ */ a("div", {
31
+ className: "ds-drawer-scrim",
32
+ "data-side": d,
33
+ onMouseDown: (e) => e.target === e.currentTarget && y.current(),
34
+ children: /* @__PURE__ */ o("div", {
35
+ ...g,
36
+ ref: (e) => {
37
+ v.current = e, typeof _ == "function" ? _(e) : _ && (_.current = e);
38
+ },
39
+ role: "dialog",
40
+ "aria-modal": "true",
41
+ "aria-labelledby": b,
42
+ "aria-describedby": u ? x : void 0,
43
+ tabIndex: -1,
44
+ "data-side": d,
45
+ "data-size": f,
46
+ className: ["ds-drawer", m].filter(Boolean).join(" "),
47
+ children: [
48
+ /* @__PURE__ */ o("header", {
49
+ className: "ds-drawer__head",
50
+ children: [/* @__PURE__ */ o("div", {
51
+ className: "ds-drawer__titles",
52
+ children: [/* @__PURE__ */ a("h2", {
53
+ id: b,
54
+ className: "ds-drawer__title",
55
+ children: l
56
+ }), u && /* @__PURE__ */ a("p", {
57
+ id: x,
58
+ className: "ds-drawer__description",
59
+ children: u
60
+ })]
61
+ }), /* @__PURE__ */ a(e, {
62
+ variant: "simple",
63
+ size: "sm",
64
+ isIconOnly: !0,
65
+ iconStart: "x",
66
+ "aria-label": "Close",
67
+ onClick: () => y.current()
68
+ })]
69
+ }),
70
+ /* @__PURE__ */ a("div", {
71
+ className: "ds-drawer__body",
72
+ children: h
73
+ }),
74
+ p && /* @__PURE__ */ a("footer", {
75
+ className: "ds-drawer__footer",
76
+ children: p
77
+ })
78
+ ]
79
+ })
80
+ }), document.body);
81
+ });
82
+ //#endregion
83
+ export { c as Drawer };
84
+
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Drawer","forwardRef","rest","panelRef","useRef","onCloseRef","onClose","titleId","useId","descriptionId","useEffect","isOpen","previous","onKeyDown","event","focusable","first","last","overflow","createPortal","side","node","ref","description","size","className","title","Button","footer"],"sources":["../../../src/components/Drawer/index.tsx"],"sourcesContent":["import { forwardRef, useEffect, useId, useRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Button } from \"../Button\";\nimport \"./style.css\";\n\nexport type DrawerSide = \"end\" | \"start\" | \"bottom\";\nexport type DrawerSize = \"md\" | \"wide\";\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n isOpen: boolean;\n /** Escape, the scrim and the close button all call this. */\n onClose: () => void;\n title: string;\n description?: string;\n /** Which edge the panel is anchored to. */\n side?: DrawerSide;\n size?: DrawerSize;\n /** Actions, right-aligned. The confirming action goes last. */\n footer?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * A side panel for work that belongs beside the page rather than on top of it\n * — editing one record, a filter set, a revision history. Same frame, rules\n * and footer band as `Modal`; focus is trapped while open.\n */\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n title,\n description,\n side = \"end\",\n size = \"md\",\n footer,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const onCloseRef = useRef(onClose);\n const titleId = useId();\n const descriptionId = useId();\n\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n const previous = document.activeElement as HTMLElement | null;\n const initialFocus = panelRef.current?.querySelector<HTMLElement>(\n \"button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex='-1'])\",\n );\n (initialFocus ?? panelRef.current)?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onCloseRef.current();\n return;\n }\n if (event.key !== \"Tab\") return;\n const focusable = Array.from(\n panelRef.current?.querySelectorAll<HTMLElement>(\n \"button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex='-1'])\",\n ) ?? [],\n );\n if (focusable.length === 0) return;\n const first = focusable[0]!;\n const last = focusable[focusable.length - 1]!;\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n const overflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.body.style.overflow = overflow;\n previous?.focus();\n };\n }, [isOpen]);\n\n if (!isOpen || typeof document === \"undefined\") return null;\n\n return createPortal(\n <div\n className=\"ds-drawer-scrim\"\n data-side={side}\n onMouseDown={(event) => event.target === event.currentTarget && onCloseRef.current()}\n >\n <div\n {...rest}\n ref={(node) => {\n panelRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={-1}\n data-side={side}\n data-size={size}\n className={[\"ds-drawer\", className].filter(Boolean).join(\" \")}\n >\n <header className=\"ds-drawer__head\">\n <div className=\"ds-drawer__titles\">\n <h2 id={titleId} className=\"ds-drawer__title\">\n {title}\n </h2>\n {description && (\n <p id={descriptionId} className=\"ds-drawer__description\">\n {description}\n </p>\n )}\n </div>\n <Button\n variant=\"simple\"\n size=\"sm\"\n isIconOnly\n iconStart=\"x\"\n aria-label=\"Close\"\n onClick={() => onCloseRef.current()}\n />\n </header>\n <div className=\"ds-drawer__body\">{children}</div>\n {footer && <footer className=\"ds-drawer__footer\">{footer}</footer>}\n </div>\n </div>,\n document.body,\n );\n});\n"],"mappings":";;;;;AA2BA,IAAaA,IAASC,EAAwC,SAC5D,EACE,WACA,YACA,UACA,gBACA,UAAO,OACP,UAAO,MACP,WACA,cACA,aACA,GAAGC,KAEL,GACA;CACA,IAAMC,IAAWC,EAA8B,IAAI,GAC7CC,IAAaD,EAAOE,CAAO,GAC3BC,IAAUC,EAAM,GAChBC,IAAgBD,EAAM;CAmD5B,OAjDAE,QAAgB;EACd,EAAW,UAAUJ;CACvB,GAAG,CAACA,CAAO,CAAC,GAEZI,QAAgB;EACd,IAAI,CAACC,GAAQ;EAEb,IAAMC,IAAW,SAAS;EAI1B,CAHqBT,EAAS,SAAS,cACrC,sIACF,KACiBA,EAAS,QAAA,EAAU,MAAM;EAE1C,IAAMU,KAAa,MAAyB;GAC1C,IAAIC,EAAM,QAAQ,UAAU;IAC1B,EAAW,QAAQ;IACnB;GACF;GACA,IAAIA,EAAM,QAAQ,OAAO;GACzB,IAAMC,IAAY,MAAM,KACtBZ,EAAS,SAAS,iBAChB,sIACF,KAAK,CAAC,CACR;GACA,IAAIY,EAAU,WAAW,GAAG;GAC5B,IAAMC,IAAQD,EAAU,IAClBE,IAAOF,EAAUA,EAAU,SAAS;GAC1C,AAAID,EAAM,YAAY,SAAS,kBAAkBE,KAC/CF,EAAM,eAAe,GACrBG,EAAK,MAAM,KACF,CAACH,EAAM,YAAY,SAAS,kBAAkBG,MACvDH,EAAM,eAAe,GACrBE,EAAM,MAAM;EAEhB;EAEA,SAAS,iBAAiB,WAAWH,CAAS;EAC9C,IAAMK,IAAW,SAAS,KAAK,MAAM;EAGrC,OAFA,SAAS,KAAK,MAAM,WAAW,gBAElB;GAGX,AAFA,SAAS,oBAAoB,WAAWL,CAAS,GACjD,SAAS,KAAK,MAAM,WAAWK,GAC/BN,GAAU,MAAM;EAClB;CACF,GAAG,CAACD,CAAM,CAAC,GAEP,CAACA,KAAU,OAAO,WAAa,MAAoB,OAEhDQ,EACL,kBAAC,OAAD;EACE,WAAU;EACV,aAAWC;EACX,cAAc,MAAUN,EAAM,WAAWA,EAAM,iBAAiBT,EAAW,QAAQ;EAEnF,UAAA,kBAAC,OAAD;GACE,GAAIH;GACJ,MAAM,MAAS;IAEb,AADA,EAAS,UAAUmB,GACf,OAAOC,KAAQ,aAAYA,EAAID,CAAI,IAC9BC,MAAK,EAAI,UAAUD;GAC9B;GACA,MAAK;GACL,cAAW;GACX,mBAAiBd;GACjB,oBAAkBgB,IAAcd,IAAgB,KAAA;GAChD,UAAU;GACV,aAAWW;GACX,aAAWI;GACX,WAAW,CAAC,aAAaC,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GAd9D,UAAA;IAgBE,kBAAC,UAAD;KAAQ,WAAU;KAAlB,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAAC,MAAD;OAAI,IAAIlB;OAAS,WAAU;OACxB,UAAAmB;MACC,CAAA,GACHH,KACC,kBAAC,KAAD;OAAG,IAAId;OAAe,WAAU;OAC7B,UAAAc;MACA,CAAA,CAEF;KACL,CAAA,GAAA,kBAACI,GAAD;MACE,SAAQ;MACR,MAAK;MACL,YAAA;MACA,WAAU;MACV,cAAW;MACX,eAAetB,EAAW,QAAQ;KACnC,CAAA,CACK;;IACR,kBAAC,OAAD;KAAK,WAAU;KAAmB;IAAc,CAAA;IAC/CuB,KAAU,kBAAC,UAAD;KAAQ,WAAU;KAAqB,UAAAA;IAAe,CAAA;GAC9D;;CACF,CAAA,GACL,SAAS,IACX;AACF,CAAC"}