@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,178 @@
1
+ import { t as e } from "../../chunks/Icon-CGY1FNXT.js";
2
+ import { Button as t } from "../Button/index.js";
3
+ import { SortableList as n, SortableListItem as r } from "../SortableList/index.js";
4
+ import { Badge as i } from "../Badge/index.js";
5
+ import { Modal as a } from "../Modal/index.js";
6
+ import { SearchField as o } from "../SearchField/index.js";
7
+ import { useMemo as s, useState as c } from "react";
8
+ import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
9
+ //#region src/components/EntryPicker/index.tsx
10
+ function f(...e) {
11
+ return e.filter(Boolean).join(" ");
12
+ }
13
+ function p(e, t) {
14
+ return !t || [
15
+ e.title,
16
+ e.subtitle,
17
+ ...e.keywords ?? []
18
+ ].filter(Boolean).join(" ").toLowerCase().includes(t.toLowerCase());
19
+ }
20
+ function m({ item: t }) {
21
+ return /* @__PURE__ */ u("span", {
22
+ className: "ds-entry__thumb",
23
+ children: t.imageUrl ? /* @__PURE__ */ u("img", {
24
+ src: t.imageUrl,
25
+ alt: "",
26
+ loading: "lazy"
27
+ }) : /* @__PURE__ */ u(e, {
28
+ name: "file-text",
29
+ size: 20
30
+ })
31
+ });
32
+ }
33
+ function h({ items: h, value: g, defaultValue: _ = [], onValueChange: v, mode: y = "multiple", max: b, label: x = "Entries", emptyLabel: S = "Nothing selected yet.", addLabel: C = "Choose entries", isReorderable: w = !0, isDisabled: T = !1, className: E }) {
34
+ let [D, O] = c(_), k = g ?? D, [A, j] = c(!1), [M, N] = c(""), P = s(() => new Map(h.map((e) => [e.id, e])), [h]), F = s(() => h.filter((e) => p(e, M)), [h, M]), I = y === "multiple" && b !== void 0 && k.length >= b, L = (e) => {
35
+ g === void 0 && O(e), v?.(e);
36
+ }, R = (e) => {
37
+ y === "single" ? (L(k[0] === e ? [] : [e]), j(!1)) : k.includes(e) ? L(k.filter((t) => t !== e)) : I || L([...k, e]);
38
+ }, z = k.map((e) => P.get(e)).filter(Boolean), B = w && y === "multiple" && z.length > 1, V = (e) => /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u(m, { item: e }), /* @__PURE__ */ d("span", {
39
+ className: "ds-entry__body",
40
+ children: [/* @__PURE__ */ u("span", {
41
+ className: "ds-entry__title",
42
+ children: e.title
43
+ }), e.subtitle && /* @__PURE__ */ u("span", {
44
+ className: "ds-entry__subtitle",
45
+ children: e.subtitle
46
+ })]
47
+ })] });
48
+ return /* @__PURE__ */ d("div", {
49
+ className: f("ds-entry-picker", E),
50
+ children: [
51
+ /* @__PURE__ */ d("div", {
52
+ className: "ds-entry-picker__head",
53
+ children: [/* @__PURE__ */ u("span", {
54
+ className: "ds-entry-picker__label",
55
+ children: x
56
+ }), /* @__PURE__ */ u(i, {
57
+ shape: "count",
58
+ children: k.length
59
+ })]
60
+ }),
61
+ z.length === 0 ? /* @__PURE__ */ u("p", {
62
+ className: "ds-entry-picker__empty",
63
+ children: S
64
+ }) : B ? /* @__PURE__ */ u(n, {
65
+ items: k,
66
+ onReorder: L,
67
+ renderDragOverlay: (e) => {
68
+ let t = P.get(e);
69
+ return t ? /* @__PURE__ */ u("div", {
70
+ className: "ds-entry",
71
+ children: V(t)
72
+ }) : null;
73
+ },
74
+ children: z.map((e) => /* @__PURE__ */ u(r, {
75
+ id: e.id,
76
+ label: e.title,
77
+ action: /* @__PURE__ */ u(t, {
78
+ variant: "simple",
79
+ size: "sm",
80
+ isIconOnly: !0,
81
+ iconStart: "x",
82
+ "aria-label": `Remove ${e.title}`,
83
+ isDisabled: T,
84
+ onClick: () => L(k.filter((t) => t !== e.id))
85
+ }),
86
+ children: /* @__PURE__ */ u("div", {
87
+ className: "ds-entry",
88
+ children: V(e)
89
+ })
90
+ }, e.id))
91
+ }) : /* @__PURE__ */ u("ul", {
92
+ className: "ds-entry-picker__list",
93
+ children: z.map((e) => /* @__PURE__ */ d("li", {
94
+ className: "ds-entry-picker__row",
95
+ children: [/* @__PURE__ */ u("div", {
96
+ className: "ds-entry",
97
+ children: V(e)
98
+ }), /* @__PURE__ */ u(t, {
99
+ variant: "simple",
100
+ size: "sm",
101
+ isIconOnly: !0,
102
+ iconStart: "x",
103
+ "aria-label": `Remove ${e.title}`,
104
+ isDisabled: T,
105
+ onClick: () => L(k.filter((t) => t !== e.id))
106
+ })]
107
+ }, e.id))
108
+ }),
109
+ /* @__PURE__ */ d("div", {
110
+ className: "ds-entry-picker__actions",
111
+ children: [/* @__PURE__ */ u(t, {
112
+ variant: "neutral",
113
+ size: "sm",
114
+ iconStart: "plus",
115
+ isDisabled: T,
116
+ onClick: () => j(!0),
117
+ children: C
118
+ }), k.length > 0 && /* @__PURE__ */ u(t, {
119
+ variant: "simple",
120
+ size: "sm",
121
+ isDisabled: T,
122
+ onClick: () => L([]),
123
+ children: "Clear"
124
+ })]
125
+ }),
126
+ /* @__PURE__ */ d(a, {
127
+ isOpen: A,
128
+ onClose: () => j(!1),
129
+ title: C,
130
+ description: y === "single" ? "Choose one entry." : b === void 0 ? "Choose as many entries as you need." : `Choose up to ${b} entries.`,
131
+ footer: /* @__PURE__ */ u(t, {
132
+ variant: "primary",
133
+ onClick: () => j(!1),
134
+ children: "Done"
135
+ }),
136
+ children: [/* @__PURE__ */ u("div", {
137
+ className: "ds-entry-picker__search",
138
+ children: /* @__PURE__ */ u(o, {
139
+ value: M,
140
+ placeholder: "Search entries",
141
+ onChange: (e) => N(e.target.value),
142
+ onClear: () => N("")
143
+ })
144
+ }), /* @__PURE__ */ d("ul", {
145
+ className: "ds-entry-picker__results",
146
+ children: [F.map((t) => {
147
+ let n = k.includes(t.id), r = t.isDisabled || !n && I;
148
+ return /* @__PURE__ */ u("li", { children: /* @__PURE__ */ d("button", {
149
+ type: "button",
150
+ className: "ds-entry-picker__result",
151
+ "aria-pressed": n,
152
+ disabled: r || void 0,
153
+ onClick: () => R(t.id),
154
+ children: [/* @__PURE__ */ u("div", {
155
+ className: "ds-entry",
156
+ children: V(t)
157
+ }), n && /* @__PURE__ */ u(e, {
158
+ name: "check",
159
+ size: 20
160
+ })]
161
+ }) }, t.id);
162
+ }), F.length === 0 && /* @__PURE__ */ d("li", {
163
+ className: "ds-entry-picker__no-results",
164
+ children: [
165
+ "No entries match “",
166
+ M,
167
+ "”."
168
+ ]
169
+ })]
170
+ })]
171
+ })
172
+ ]
173
+ });
174
+ }
175
+ //#endregion
176
+ export { h as EntryPicker };
177
+
178
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_Fragment","Icon","cx","parts","matches","query","item","Thumb","EntryPicker","internal","setInternal","useState","defaultValue","selected","value","isOpen","setOpen","setQuery","byId","useMemo","items","results","atMax","mode","max","commit","next","onValueChange","toggle","id","chosen","canReorder","isReorderable","row","Fragment","className","label","Badge","emptyLabel","SortableList","SortableListItem","Button","addLabel","Modal","SearchField","event","isSelected","isBlocked"],"sources":["../../../src/components/EntryPicker/index.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { Badge } from \"../Badge\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { Modal } from \"../Modal\";\nimport { SearchField } from \"../SearchField\";\nimport { SortableList, SortableListItem } from \"../SortableList\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport interface EntryItem {\n id: string;\n title: string;\n /** Second line — a content type, a path, a file size. */\n subtitle?: string;\n /** Main image: an asset thumbnail, or the entry's hero. */\n imageUrl?: string;\n /** Words the search matches on top of the title and subtitle. */\n keywords?: string[];\n isDisabled?: boolean;\n}\n\nexport type EntryPickerMode = \"single\" | \"multiple\";\n\nexport interface EntryPickerProps {\n items: EntryItem[];\n /** Selected ids, in the order they will be stored. */\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n mode?: EntryPickerMode;\n /** Cap a multiple selection. Reaching it disables the unpicked rows. */\n max?: number;\n label?: string;\n /** Copy shown when nothing is picked yet. */\n emptyLabel?: string;\n addLabel?: string;\n /** Multiple selections are reorderable by default — the stored order is the shown order. */\n isReorderable?: boolean;\n isDisabled?: boolean;\n className?: string;\n}\n\nfunction matches(item: EntryItem, query: string) {\n if (!query) return true;\n const haystack = [item.title, item.subtitle, ...(item.keywords ?? [])]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n return haystack.includes(query.toLowerCase());\n}\n\nfunction Thumb({ item }: { item: EntryItem }) {\n return (\n <span className=\"ds-entry__thumb\">\n {item.imageUrl ? (\n <img src={item.imageUrl} alt=\"\" loading=\"lazy\" />\n ) : (\n <Icon name=\"file-text\" size={20} />\n )}\n </span>\n );\n}\n\n/**\n * Pick entries or assets out of a list. Search narrows it, a row toggles,\n * and a multiple selection keeps — and reorders — the order you chose.\n */\nexport function EntryPicker({\n items,\n value,\n defaultValue = [],\n onValueChange,\n mode = \"multiple\",\n max,\n label = \"Entries\",\n emptyLabel = \"Nothing selected yet.\",\n addLabel = \"Choose entries\",\n isReorderable = true,\n isDisabled = false,\n className,\n}: EntryPickerProps) {\n const [internal, setInternal] = useState<string[]>(defaultValue);\n const selected = value ?? internal;\n const [isOpen, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n\n const byId = useMemo(() => new Map(items.map((item) => [item.id, item])), [items]);\n const results = useMemo(() => items.filter((item) => matches(item, query)), [items, query]);\n const atMax = mode === \"multiple\" && max !== undefined && selected.length >= max;\n\n const commit = (next: string[]) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n const toggle = (id: string) => {\n if (mode === \"single\") {\n commit(selected[0] === id ? [] : [id]);\n setOpen(false);\n return;\n }\n if (selected.includes(id)) commit(selected.filter((item) => item !== id));\n else if (!atMax) commit([...selected, id]);\n };\n\n const chosen = selected.map((id) => byId.get(id)).filter(Boolean) as EntryItem[];\n const canReorder = isReorderable && mode === \"multiple\" && chosen.length > 1;\n\n const row = (item: EntryItem): ReactNode => (\n <>\n <Thumb item={item} />\n <span className=\"ds-entry__body\">\n <span className=\"ds-entry__title\">{item.title}</span>\n {item.subtitle && <span className=\"ds-entry__subtitle\">{item.subtitle}</span>}\n </span>\n </>\n );\n\n return (\n <div className={cx(\"ds-entry-picker\", className)}>\n <div className=\"ds-entry-picker__head\">\n <span className=\"ds-entry-picker__label\">{label}</span>\n <Badge shape=\"count\">{selected.length}</Badge>\n </div>\n\n {chosen.length === 0 ? (\n <p className=\"ds-entry-picker__empty\">{emptyLabel}</p>\n ) : canReorder ? (\n <SortableList\n items={selected}\n onReorder={commit}\n renderDragOverlay={(id) => {\n const item = byId.get(id);\n return item ? <div className=\"ds-entry\">{row(item)}</div> : null;\n }}\n >\n {chosen.map((item) => (\n <SortableListItem\n key={item.id}\n id={item.id}\n label={item.title}\n action={\n <Button\n variant=\"simple\"\n size=\"sm\"\n isIconOnly\n iconStart=\"x\"\n aria-label={`Remove ${item.title}`}\n isDisabled={isDisabled}\n onClick={() => commit(selected.filter((id) => id !== item.id))}\n />\n }\n >\n <div className=\"ds-entry\">{row(item)}</div>\n </SortableListItem>\n ))}\n </SortableList>\n ) : (\n <ul className=\"ds-entry-picker__list\">\n {chosen.map((item) => (\n <li key={item.id} className=\"ds-entry-picker__row\">\n <div className=\"ds-entry\">{row(item)}</div>\n <Button\n variant=\"simple\"\n size=\"sm\"\n isIconOnly\n iconStart=\"x\"\n aria-label={`Remove ${item.title}`}\n isDisabled={isDisabled}\n onClick={() => commit(selected.filter((id) => id !== item.id))}\n />\n </li>\n ))}\n </ul>\n )}\n\n <div className=\"ds-entry-picker__actions\">\n <Button\n variant=\"neutral\"\n size=\"sm\"\n iconStart=\"plus\"\n isDisabled={isDisabled}\n onClick={() => setOpen(true)}\n >\n {addLabel}\n </Button>\n {selected.length > 0 && (\n <Button variant=\"simple\" size=\"sm\" isDisabled={isDisabled} onClick={() => commit([])}>\n Clear\n </Button>\n )}\n </div>\n\n <Modal\n isOpen={isOpen}\n onClose={() => setOpen(false)}\n title={addLabel}\n description={\n mode === \"single\"\n ? \"Choose one entry.\"\n : max !== undefined\n ? `Choose up to ${max} entries.`\n : \"Choose as many entries as you need.\"\n }\n footer={\n <Button variant=\"primary\" onClick={() => setOpen(false)}>\n Done\n </Button>\n }\n >\n <div className=\"ds-entry-picker__search\">\n <SearchField\n value={query}\n placeholder=\"Search entries\"\n onChange={(event) => setQuery(event.target.value)}\n onClear={() => setQuery(\"\")}\n />\n </div>\n <ul className=\"ds-entry-picker__results\">\n {results.map((item) => {\n const isSelected = selected.includes(item.id);\n const isBlocked = item.isDisabled || (!isSelected && atMax);\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n className=\"ds-entry-picker__result\"\n aria-pressed={isSelected}\n disabled={isBlocked || undefined}\n onClick={() => toggle(item.id)}\n >\n <div className=\"ds-entry\">{row(item)}</div>\n {isSelected && <Icon name=\"check\" size={20} />}\n </button>\n </li>\n );\n })}\n {results.length === 0 && (\n <li className=\"ds-entry-picker__no-results\">No entries match “{query}”.</li>\n )}\n </ul>\n </Modal>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ @layer components {
2
+ .ds-entry-picker {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: var(--space-3);
6
+ inline-size: 100%;
7
+ }
8
+
9
+ .ds-entry-picker__head {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: var(--space-2);
13
+ }
14
+
15
+ .ds-entry-picker__label {
16
+ font-size: var(--font-size-sm);
17
+ font-weight: var(--font-weight-semibold);
18
+ }
19
+
20
+ .ds-entry-picker__empty {
21
+ margin: 0;
22
+ padding: var(--space-4);
23
+ border: var(--rule-width) dashed var(--color-border-strong);
24
+ border-radius: var(--radius-md);
25
+ color: var(--color-text-muted);
26
+ font-size: var(--font-size-sm);
27
+ }
28
+
29
+ .ds-entry-picker__list {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: var(--space-2);
33
+ margin: 0;
34
+ padding: 0;
35
+ list-style: none;
36
+ }
37
+
38
+ .ds-entry-picker__row {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: var(--space-3);
42
+ padding: var(--space-2) var(--space-3);
43
+ border: var(--control-border-width) solid var(--control-border-color);
44
+ border-radius: var(--radius-md);
45
+ background: var(--color-surface);
46
+ }
47
+
48
+ .ds-entry-picker__row .ds-entry {
49
+ flex: 1;
50
+ min-inline-size: 0;
51
+ }
52
+
53
+ .ds-entry-picker__actions {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: var(--space-2);
57
+ }
58
+
59
+ /* One entry row: thumbnail, title, subtitle. Shared by the value list,
60
+ * the drag overlay and the picker results, so they never drift apart. */
61
+ .ds-entry {
62
+ display: flex;
63
+ align-items: center;
64
+ gap: var(--space-3);
65
+ min-inline-size: 0;
66
+ }
67
+
68
+ .ds-entry__thumb {
69
+ display: grid;
70
+ place-items: center;
71
+ flex: none;
72
+ inline-size: var(--entry-thumb-size);
73
+ block-size: var(--entry-thumb-size);
74
+ overflow: hidden;
75
+ border: var(--rule-width) solid var(--rule-color);
76
+ border-radius: var(--field-radius);
77
+ background: var(--color-surface-subtle);
78
+ color: var(--color-text-muted);
79
+ }
80
+
81
+ .ds-entry__thumb img {
82
+ inline-size: 100%;
83
+ block-size: 100%;
84
+ object-fit: cover;
85
+ }
86
+
87
+ .ds-entry__body {
88
+ display: flex;
89
+ flex-direction: column;
90
+ gap: 2px;
91
+ min-inline-size: 0;
92
+ }
93
+
94
+ .ds-entry__title {
95
+ overflow: hidden;
96
+ font-size: var(--font-size-sm);
97
+ font-weight: var(--font-weight-semibold);
98
+ text-overflow: ellipsis;
99
+ white-space: nowrap;
100
+ }
101
+
102
+ .ds-entry__subtitle {
103
+ color: var(--color-text-muted);
104
+ font-size: var(--font-size-xs);
105
+ }
106
+
107
+ .ds-entry-picker__search {
108
+ margin-block-end: var(--space-4);
109
+ }
110
+
111
+ .ds-entry-picker__results {
112
+ display: flex;
113
+ flex-direction: column;
114
+ gap: var(--space-1);
115
+ max-block-size: var(--entry-list-max-height);
116
+ overflow-y: auto;
117
+ margin: 0;
118
+ padding: 0;
119
+ list-style: none;
120
+ }
121
+
122
+ .ds-entry-picker__result {
123
+ display: flex;
124
+ align-items: center;
125
+ justify-content: space-between;
126
+ gap: var(--space-3);
127
+ inline-size: 100%;
128
+ padding: var(--space-2) var(--space-3);
129
+ border: var(--control-border-width) solid transparent;
130
+ border-radius: var(--radius-md);
131
+ background: transparent;
132
+ color: var(--color-text);
133
+ text-align: start;
134
+ cursor: pointer;
135
+ transition: background-color var(--duration-fast) var(--ease-standard);
136
+ }
137
+
138
+ .ds-entry-picker__result:hover:not(:disabled) {
139
+ background: var(--field-hover);
140
+ }
141
+
142
+ .ds-entry-picker__result:focus-visible {
143
+ outline: var(--control-border-width) solid var(--color-focus);
144
+ outline-offset: 2px;
145
+ }
146
+
147
+ .ds-entry-picker__result[aria-pressed="true"] {
148
+ background: var(--color-primary-soft);
149
+ box-shadow: inset var(--rail-width) 0 0 0 var(--rail-color);
150
+ }
151
+
152
+ .ds-entry-picker__result:disabled {
153
+ opacity: 45%;
154
+ cursor: not-allowed;
155
+ }
156
+
157
+ .ds-entry-picker__no-results {
158
+ padding: var(--space-4);
159
+ color: var(--color-text-muted);
160
+ font-size: var(--font-size-sm);
161
+ }
162
+ }
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});/* empty css */let e=require("react"),t=require("react/jsx-runtime");function n({label:n,hint:r,error:i,isRequired:a,children:o}){let s=(0,e.useId)(),c=`${s}-hint`,l=`${s}-error`;return(0,t.jsxs)(`div`,{className:`ds-field`,children:[(0,t.jsxs)(`label`,{className:`ds-field__label`,htmlFor:s,children:[n,a&&(0,t.jsx)(`span`,{className:`ds-field__required`,"aria-hidden":`true`,children:`*`})]}),o({id:s,"aria-describedby":i?l:r?c:void 0,"aria-invalid":i?!0:void 0,required:a}),r&&!i&&(0,t.jsx)(`span`,{className:`ds-field__hint`,id:c,children:r}),i&&(0,t.jsx)(`span`,{className:`ds-field__error`,id:l,children:i})]})}exports.Field=n;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["useId","react","react_jsx_runtime","Field","id","hintId","errorId","label","isRequired","children","error","hint"],"sources":["../../../src/components/Field/index.tsx"],"sourcesContent":["import { useId, type ReactNode } from \"react\";\nimport \"../Field/style.css\";\n\nexport type FieldSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface FieldProps {\n label: string;\n hint?: string;\n /** Present means invalid: the message renders and the control is marked. */\n error?: string;\n isRequired?: boolean;\n /** Receives the ids and invalid flag the control must carry. */\n children: (props: {\n id: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: true;\n required?: boolean;\n }) => ReactNode;\n}\n\n/** Label, hint, error and required marker around any control wearing the field skin. */\nexport function Field({ label, hint, error, isRequired, children }: FieldProps) {\n const id = useId();\n const hintId = `${id}-hint`;\n const errorId = `${id}-error`;\n const describedBy = error ? errorId : hint ? hintId : undefined;\n\n return (\n <div className=\"ds-field\">\n <label className=\"ds-field__label\" htmlFor={id}>\n {label}\n {isRequired && (\n <span className=\"ds-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n {children({\n id,\n \"aria-describedby\": describedBy,\n \"aria-invalid\": error ? true : undefined,\n required: isRequired,\n })}\n {hint && !error && (\n <span className=\"ds-field__hint\" id={hintId}>\n {hint}\n </span>\n )}\n {error && (\n <span className=\"ds-field__error\" id={errorId}>\n {error}\n </span>\n )}\n </div>\n );\n}\n"],"mappings":"A,oKAqBA,SAAgBG,EAAM,CAAE,QAAO,OAAM,QAAO,aAAY,YAAwB,CAC9E,IAAMC,GAAA,EAAKJ,EAAAA,MAAAA,CAAM,EACXK,EAAS,GAAGD,EAAG,OACfE,EAAU,GAAGF,EAAG,QAGtB,OACE,EAAAF,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,WAAf,SAAA,EACE,EAAAA,EAAA,KAAA,CAAC,QAAD,CAAO,UAAU,kBAAkB,QAASE,EAA5C,SAAA,CACGG,EACAC,IACC,EAAAN,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,qBAAqB,cAAY,OAAO,SAAA,GAElD,CAAA,CAEH,C,GACNO,EAAS,CACR,KACA,mBAdcC,EAAQJ,EAAUK,EAAON,EAAS,IAAA,GAehD,eAAgBK,EAAQ,GAAO,IAAA,GAC/B,SAAUF,CACZ,CAAC,EACAG,GAAQ,CAACD,IACR,EAAAR,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,iBAAiB,GAAIG,EAClC,SAAAM,CACG,CAAA,EAEPD,IACC,EAAAR,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,kBAAkB,GAAII,EACnC,SAAAI,CACG,CAAA,CAEL,C,EAET,C"}
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from "react";
2
+ export type FieldSize = "sm" | "md" | "lg";
3
+ export interface FieldProps {
4
+ label: string;
5
+ hint?: string;
6
+ /** Present means invalid: the message renders and the control is marked. */
7
+ error?: string;
8
+ isRequired?: boolean;
9
+ /** Receives the ids and invalid flag the control must carry. */
10
+ children: (props: {
11
+ id: string;
12
+ "aria-describedby"?: string;
13
+ "aria-invalid"?: true;
14
+ required?: boolean;
15
+ }) => ReactNode;
16
+ }
17
+ /** Label, hint, error and required marker around any control wearing the field skin. */
18
+ export declare function Field({ label, hint, error, isRequired, children }: FieldProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/Field/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,oBAAoB,CAAC;AAE5B,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,cAAc,CAAC,EAAE,IAAI,CAAC;QACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,KAAK,SAAS,CAAC;CACjB;AAED,wFAAwF;AACxF,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,UAAU,+BAkC7E"}
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from "react";
2
+ export type FieldSize = "sm" | "md" | "lg";
3
+ export interface FieldProps {
4
+ label: string;
5
+ hint?: string;
6
+ /** Present means invalid: the message renders and the control is marked. */
7
+ error?: string;
8
+ isRequired?: boolean;
9
+ /** Receives the ids and invalid flag the control must carry. */
10
+ children: (props: {
11
+ id: string;
12
+ "aria-describedby"?: string;
13
+ "aria-invalid"?: true;
14
+ required?: boolean;
15
+ }) => ReactNode;
16
+ }
17
+ /** Label, hint, error and required marker around any control wearing the field skin. */
18
+ export declare function Field({ label, hint, error, isRequired, children }: FieldProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Field/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,oBAAoB,CAAC;AAE5B,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,cAAc,CAAC,EAAE,IAAI,CAAC;QACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,KAAK,SAAS,CAAC;CACjB;AAED,wFAAwF;AACxF,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,UAAU,+BAkC7E"}
@@ -0,0 +1,41 @@
1
+ /* empty css */
2
+ import { useId as e } from "react";
3
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
4
+ //#region src/components/Field/index.tsx
5
+ function r({ label: r, hint: i, error: a, isRequired: o, children: s }) {
6
+ let c = e(), l = `${c}-hint`, u = `${c}-error`;
7
+ return /* @__PURE__ */ n("div", {
8
+ className: "ds-field",
9
+ children: [
10
+ /* @__PURE__ */ n("label", {
11
+ className: "ds-field__label",
12
+ htmlFor: c,
13
+ children: [r, o && /* @__PURE__ */ t("span", {
14
+ className: "ds-field__required",
15
+ "aria-hidden": "true",
16
+ children: "*"
17
+ })]
18
+ }),
19
+ s({
20
+ id: c,
21
+ "aria-describedby": a ? u : i ? l : void 0,
22
+ "aria-invalid": a ? !0 : void 0,
23
+ required: o
24
+ }),
25
+ i && !a && /* @__PURE__ */ t("span", {
26
+ className: "ds-field__hint",
27
+ id: l,
28
+ children: i
29
+ }),
30
+ a && /* @__PURE__ */ t("span", {
31
+ className: "ds-field__error",
32
+ id: u,
33
+ children: a
34
+ })
35
+ ]
36
+ });
37
+ }
38
+ //#endregion
39
+ export { r as Field };
40
+
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Field","id","useId","hintId","errorId","label","isRequired","children","error","hint"],"sources":["../../../src/components/Field/index.tsx"],"sourcesContent":["import { useId, type ReactNode } from \"react\";\nimport \"../Field/style.css\";\n\nexport type FieldSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface FieldProps {\n label: string;\n hint?: string;\n /** Present means invalid: the message renders and the control is marked. */\n error?: string;\n isRequired?: boolean;\n /** Receives the ids and invalid flag the control must carry. */\n children: (props: {\n id: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: true;\n required?: boolean;\n }) => ReactNode;\n}\n\n/** Label, hint, error and required marker around any control wearing the field skin. */\nexport function Field({ label, hint, error, isRequired, children }: FieldProps) {\n const id = useId();\n const hintId = `${id}-hint`;\n const errorId = `${id}-error`;\n const describedBy = error ? errorId : hint ? hintId : undefined;\n\n return (\n <div className=\"ds-field\">\n <label className=\"ds-field__label\" htmlFor={id}>\n {label}\n {isRequired && (\n <span className=\"ds-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n {children({\n id,\n \"aria-describedby\": describedBy,\n \"aria-invalid\": error ? true : undefined,\n required: isRequired,\n })}\n {hint && !error && (\n <span className=\"ds-field__hint\" id={hintId}>\n {hint}\n </span>\n )}\n {error && (\n <span className=\"ds-field__error\" id={errorId}>\n {error}\n </span>\n )}\n </div>\n );\n}\n"],"mappings":";;;;AAqBA,SAAgBA,EAAM,EAAE,UAAO,SAAM,UAAO,eAAY,eAAwB;CAC9E,IAAMC,IAAKC,EAAM,GACXC,IAAS,GAAGF,EAAG,QACfG,IAAU,GAAGH,EAAG;CAGtB,OACE,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,kBAAC,SAAD;IAAO,WAAU;IAAkB,SAASA;IAA5C,UAAA,CACGI,GACAC,KACC,kBAAC,QAAD;KAAM,WAAU;KAAqB,eAAY;KAAO,UAAA;IAElD,CAAA,CAEH;;GACNC,EAAS;IACR;IACA,oBAdcC,IAAQJ,IAAUK,IAAON,IAAS,KAAA;IAehD,gBAAgBK,IAAQ,KAAO,KAAA;IAC/B,UAAUF;GACZ,CAAC;GACAG,KAAQ,CAACD,KACR,kBAAC,QAAD;IAAM,WAAU;IAAiB,IAAIL;IAClC,UAAAM;GACG,CAAA;GAEPD,KACC,kBAAC,QAAD;IAAM,WAAU;IAAkB,IAAIJ;IACnC,UAAAI;GACG,CAAA;EAEL;;AAET"}
@@ -0,0 +1,100 @@
1
+ @layer components {
2
+ /* The one input surface. Everything the user can type into or choose from
3
+ * wears it. State moves on the fill; the stroke never changes width. */
4
+ .ds-field-skin {
5
+ inline-size: 100%;
6
+ border: var(--control-border-width) solid var(--control-border-color);
7
+ border-radius: var(--field-radius);
8
+ background: var(--field-rest);
9
+ color: var(--color-text);
10
+ font-family: var(--font-sans);
11
+ transition: background-color var(--duration-fast) var(--ease-standard);
12
+ }
13
+
14
+ .ds-field-skin::placeholder {
15
+ color: var(--color-text-muted);
16
+ }
17
+
18
+ .ds-field-skin:hover:not(:disabled):not([readonly]) {
19
+ background: var(--field-hover);
20
+ }
21
+
22
+ .ds-field-skin:focus-visible {
23
+ background: var(--field-focus);
24
+ outline: var(--control-border-width) solid var(--color-focus);
25
+ outline-offset: 2px;
26
+ }
27
+
28
+ .ds-field-skin[aria-invalid="true"] {
29
+ border-color: var(--color-danger);
30
+ background: var(--field-invalid);
31
+ }
32
+
33
+ .ds-field-skin[aria-invalid="true"]:focus-visible {
34
+ background: var(--field-invalid-focus);
35
+ }
36
+
37
+ .ds-field-skin:disabled {
38
+ opacity: 45%;
39
+ cursor: not-allowed;
40
+ }
41
+
42
+ .ds-field-skin[readonly] {
43
+ cursor: default;
44
+ }
45
+
46
+ input.ds-field-skin[data-size="sm"] {
47
+ block-size: var(--field-height-sm);
48
+ padding: 0 10px;
49
+ font-size: var(--field-font-size-sm);
50
+ }
51
+
52
+ input.ds-field-skin[data-size="md"] {
53
+ block-size: var(--field-height-md);
54
+ padding: 0 10px;
55
+ font-size: var(--field-font-size-md);
56
+ }
57
+
58
+ input.ds-field-skin[data-size="lg"] {
59
+ block-size: var(--field-height-lg);
60
+ padding: 0 10px;
61
+ font-size: var(--field-font-size-md);
62
+ }
63
+
64
+ textarea.ds-field-skin {
65
+ display: block;
66
+ padding: var(--space-2) 10px;
67
+ font-size: var(--field-font-size-md);
68
+ line-height: var(--line-height-body);
69
+ resize: none;
70
+ overflow: hidden;
71
+ }
72
+
73
+ /* Field wrapper — label, hint, error, required marker. */
74
+ .ds-field {
75
+ display: flex;
76
+ flex-direction: column;
77
+ gap: var(--space-2);
78
+ }
79
+
80
+ .ds-field__label {
81
+ font-size: var(--font-size-sm);
82
+ font-weight: var(--font-weight-semibold);
83
+ }
84
+
85
+ .ds-field__required {
86
+ margin-inline-start: var(--space-1);
87
+ color: var(--color-danger);
88
+ }
89
+
90
+ .ds-field__hint {
91
+ color: var(--color-text-muted);
92
+ font-size: var(--font-size-xs);
93
+ }
94
+
95
+ .ds-field__error {
96
+ color: var(--color-danger-text);
97
+ font-size: var(--font-size-xs);
98
+ font-weight: var(--font-weight-medium);
99
+ }
100
+ }
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});/* empty css */let e=require("react"),t=require("react/jsx-runtime");function n(...e){return e.filter(Boolean).join(` `)}function r({lead:r,trail:i,isTrailInteractive:a=!1,className:o,children:s}){let c=(0,e.useRef)(null),l=(0,e.useRef)(null),[u,d]=(0,e.useState)({start:0,end:0});(0,e.useLayoutEffect)(()=>{let e=()=>d({start:c.current?.offsetWidth??0,end:l.current?.offsetWidth??0});if(e(),typeof ResizeObserver>`u`)return;let t=new ResizeObserver(e);return c.current&&t.observe(c.current),l.current&&t.observe(l.current),()=>t.disconnect()},[r,i]);let f={};return r&&(f[`--field-pad-start`]=`calc(${u.start}px + var(--field-affix-gap) * 2)`),i&&(f[`--field-pad-end`]=`calc(${u.end}px + var(--field-affix-gap) * 2)`),(0,t.jsxs)(`span`,{className:n(`ds-field-affix`,o),style:f,children:[r&&(0,t.jsx)(`span`,{className:`ds-field-affix__lead`,ref:c,children:r}),s,i&&(0,t.jsx)(`span`,{className:`ds-field-affix__trail`,ref:l,"data-interactive":a||void 0,children:i})]})}exports.FieldAffix=r;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["useRef","useState","react","react_jsx_runtime","cx","parts","FieldAffix","leadRef","trailRef","pad","setPad","measure","observer","lead","trail","style","className","children","isTrailInteractive"],"sources":["../../../src/components/FieldAffix/index.tsx"],"sourcesContent":["import {\n useLayoutEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport \"../Field/style.css\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport interface FieldAffixProps {\n /** Node pinned to the start of the field — a glyph, a currency mark. */\n lead?: ReactNode;\n /** Node pinned to the end of the field — a unit, a clear button. */\n trail?: ReactNode;\n /** Set when the trailing node is interactive, so it can take the pointer. */\n isTrailInteractive?: boolean;\n className?: string;\n /** The field itself — one `.ds-field-skin` control. */\n children: ReactNode;\n}\n\n/**\n * The one way a field carries something beside its text. Both affixes are\n * measured, and the control's inline padding is reserved from that measurement\n * — so content never runs under a glyph, whatever the affix holds.\n */\nexport function FieldAffix({\n lead,\n trail,\n isTrailInteractive = false,\n className,\n children,\n}: FieldAffixProps) {\n const leadRef = useRef<HTMLSpanElement | null>(null);\n const trailRef = useRef<HTMLSpanElement | null>(null);\n const [pad, setPad] = useState<{ start: number; end: number }>({ start: 0, end: 0 });\n\n useLayoutEffect(() => {\n const measure = () =>\n setPad({\n start: leadRef.current?.offsetWidth ?? 0,\n end: trailRef.current?.offsetWidth ?? 0,\n });\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(measure);\n if (leadRef.current) observer.observe(leadRef.current);\n if (trailRef.current) observer.observe(trailRef.current);\n return () => observer.disconnect();\n }, [lead, trail]);\n\n const style: Record<string, string> = {};\n if (lead) style[\"--field-pad-start\"] = `calc(${pad.start}px + var(--field-affix-gap) * 2)`;\n if (trail) style[\"--field-pad-end\"] = `calc(${pad.end}px + var(--field-affix-gap) * 2)`;\n\n return (\n <span className={cx(\"ds-field-affix\", className)} style={style}>\n {lead && (\n <span className=\"ds-field-affix__lead\" ref={leadRef}>\n {lead}\n </span>\n )}\n {children}\n {trail && (\n <span\n className=\"ds-field-affix__trail\"\n ref={trailRef}\n data-interactive={isTrailInteractive || undefined}\n >\n {trail}\n </span>\n )}\n </span>\n );\n}\n"],"mappings":"A,oKASA,SAASI,EAAG,GAAGC,EAAuC,CACpD,OAAOA,EAAM,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CACvC,CAmBA,SAAgBC,EAAW,CACzB,OACA,QACA,qBAAqB,GACrB,YACA,YACkB,CAClB,IAAMC,GAAA,EAAUP,EAAAA,OAAAA,CAA+B,IAAI,EAC7CQ,GAAA,EAAWR,EAAAA,OAAAA,CAA+B,IAAI,EAC9C,CAACS,EAAKC,IAAA,EAAUT,EAAAA,SAAAA,CAAyC,CAAE,MAAO,EAAG,IAAK,CAAE,CAAC,GAEnF,EAAAC,EAAA,gBAAA,KAAsB,CACpB,IAAMS,MACJD,EAAO,CACL,MAAOH,EAAQ,SAAS,aAAe,EACvC,IAAKC,EAAS,SAAS,aAAe,CACxC,CAAC,EAEH,GADAG,EAAQ,EACJ,OAAO,eAAmB,IAAa,OAC3C,IAAMC,EAAW,IAAI,eAAeD,CAAO,EAG3C,OAFIJ,EAAQ,SAASK,EAAS,QAAQL,EAAQ,OAAO,EACjDC,EAAS,SAASI,EAAS,QAAQJ,EAAS,OAAO,MAC1CI,EAAS,WAAW,CACnC,EAAG,CAACC,EAAMC,CAAK,CAAC,EAEhB,IAAMC,EAAgC,CAAC,EAIvC,OAHIF,IAAM,EAAM,qBAAuB,QAAQJ,EAAI,MAAM,mCACrDK,IAAO,EAAM,mBAAqB,QAAQL,EAAI,IAAI,oCAGpD,EAAAN,EAAA,KAAA,CAAC,OAAD,CAAM,UAAWC,EAAG,iBAAkBY,CAAS,EAAU,QAAzD,SAAA,CACGH,IACC,EAAAV,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,uBAAuB,IAAKI,EACzC,SAAAM,CACG,CAAA,EAEPI,EACAH,IACC,EAAAX,EAAA,IAAA,CAAC,OAAD,CACE,UAAU,wBACV,IAAKK,EACL,mBAAkBU,GAAsB,IAAA,GAEvC,SAAAJ,CACG,CAAA,CAEJ,C,EAEV,C"}
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from "react";
2
+ export interface FieldAffixProps {
3
+ /** Node pinned to the start of the field — a glyph, a currency mark. */
4
+ lead?: ReactNode;
5
+ /** Node pinned to the end of the field — a unit, a clear button. */
6
+ trail?: ReactNode;
7
+ /** Set when the trailing node is interactive, so it can take the pointer. */
8
+ isTrailInteractive?: boolean;
9
+ className?: string;
10
+ /** The field itself — one `.ds-field-skin` control. */
11
+ children: ReactNode;
12
+ }
13
+ /**
14
+ * The one way a field carries something beside its text. Both affixes are
15
+ * measured, and the control's inline padding is reserved from that measurement
16
+ * — so content never runs under a glyph, whatever the affix holds.
17
+ */
18
+ export declare function FieldAffix({ lead, trail, isTrailInteractive, className, children, }: FieldAffixProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/FieldAffix/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,oBAAoB,CAAC;AAC5B,OAAO,aAAa,CAAC;AAMrB,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oEAAoE;IACpE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,kBAA0B,EAC1B,SAAS,EACT,QAAQ,GACT,EAAE,eAAe,+BA0CjB"}
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from "react";
2
+ export interface FieldAffixProps {
3
+ /** Node pinned to the start of the field — a glyph, a currency mark. */
4
+ lead?: ReactNode;
5
+ /** Node pinned to the end of the field — a unit, a clear button. */
6
+ trail?: ReactNode;
7
+ /** Set when the trailing node is interactive, so it can take the pointer. */
8
+ isTrailInteractive?: boolean;
9
+ className?: string;
10
+ /** The field itself — one `.ds-field-skin` control. */
11
+ children: ReactNode;
12
+ }
13
+ /**
14
+ * The one way a field carries something beside its text. Both affixes are
15
+ * measured, and the control's inline padding is reserved from that measurement
16
+ * — so content never runs under a glyph, whatever the affix holds.
17
+ */
18
+ export declare function FieldAffix({ lead, trail, isTrailInteractive, className, children, }: FieldAffixProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FieldAffix/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,oBAAoB,CAAC;AAC5B,OAAO,aAAa,CAAC;AAMrB,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oEAAoE;IACpE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,kBAA0B,EAC1B,SAAS,EACT,QAAQ,GACT,EAAE,eAAe,+BA0CjB"}