@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 { Button as e } from "../components/Button/index.js";
2
+ import { ButtonGroup as t } from "../components/ButtonGroup/index.js";
3
+ /* empty css */
4
+ import { forwardRef as n, useCallback as r, useEffect as i, useId as a, useMemo as o, useState as s } from "react";
5
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
+ import { EditorContent as u, createDocument as d, getSchema as f, useEditor as p, useEditorState as m } from "@tiptap/react";
7
+ import { Placeholder as h } from "@tiptap/extension-placeholder";
8
+ import { StarterKit as g } from "@tiptap/starter-kit";
9
+ import { Link as _ } from "@tiptap/extension-link";
10
+ //#region src/components/RichTextEditor/document.ts
11
+ var v = {
12
+ type: "doc",
13
+ content: [{ type: "paragraph" }]
14
+ };
15
+ function y() {
16
+ return [g.configure({ link: !1 }), _.configure({
17
+ openOnClick: !1,
18
+ autolink: !0
19
+ })];
20
+ }
21
+ var b = f(y());
22
+ function x(e) {
23
+ return e.content?.length ? e : {
24
+ ...e,
25
+ content: v.content
26
+ };
27
+ }
28
+ function S(e) {
29
+ try {
30
+ if (!e || typeof e != "object" || !("type" in e) || e.type !== "doc") throw Error();
31
+ let t = (e) => {
32
+ let n = b.nodes[e.type ?? ""];
33
+ if (!n || Object.keys(e).some((e) => ![
34
+ "type",
35
+ "attrs",
36
+ "content",
37
+ "marks",
38
+ "text"
39
+ ].includes(e)) || e.text !== void 0 && e.type !== "text" || e.attrs && Object.keys(e.attrs).some((e) => !Object.hasOwn(n.spec.attrs ?? {}, e))) throw Error();
40
+ for (let t of e.marks ?? []) {
41
+ let e = b.marks[t.type];
42
+ if (!e || Object.keys(t).some((e) => !["type", "attrs"].includes(e)) || Object.keys(t.attrs ?? {}).some((t) => !Object.hasOwn(e.spec.attrs ?? {}, t))) throw Error();
43
+ }
44
+ e.content?.forEach(t);
45
+ }, n = e;
46
+ t(n), b.nodeFromJSON(x(n)).check();
47
+ } catch {
48
+ return "Unsupported or invalid rich-text document.";
49
+ }
50
+ }
51
+ //#endregion
52
+ //#region src/components/RichTextEditor/index.tsx
53
+ var C = [
54
+ [
55
+ {
56
+ id: "bold",
57
+ icon: "bold",
58
+ label: "Bold",
59
+ run: (e) => e.chain().focus().toggleBold().run(),
60
+ active: (e) => e.isActive("bold")
61
+ },
62
+ {
63
+ id: "italic",
64
+ icon: "italic",
65
+ label: "Italic",
66
+ run: (e) => e.chain().focus().toggleItalic().run(),
67
+ active: (e) => e.isActive("italic")
68
+ },
69
+ {
70
+ id: "strike",
71
+ icon: "strikethrough",
72
+ label: "Strikethrough",
73
+ run: (e) => e.chain().focus().toggleStrike().run(),
74
+ active: (e) => e.isActive("strike")
75
+ },
76
+ {
77
+ id: "code",
78
+ icon: "code",
79
+ label: "Inline code",
80
+ run: (e) => e.chain().focus().toggleCode().run(),
81
+ active: (e) => e.isActive("code")
82
+ }
83
+ ],
84
+ [
85
+ {
86
+ id: "h2",
87
+ icon: "heading-2",
88
+ label: "Heading",
89
+ run: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),
90
+ active: (e) => e.isActive("heading", { level: 2 })
91
+ },
92
+ {
93
+ id: "h3",
94
+ icon: "heading-3",
95
+ label: "Subheading",
96
+ run: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),
97
+ active: (e) => e.isActive("heading", { level: 3 })
98
+ },
99
+ {
100
+ id: "quote",
101
+ icon: "quote",
102
+ label: "Quote",
103
+ run: (e) => e.chain().focus().toggleBlockquote().run(),
104
+ active: (e) => e.isActive("blockquote")
105
+ }
106
+ ],
107
+ [{
108
+ id: "ul",
109
+ icon: "list",
110
+ label: "Bulleted list",
111
+ run: (e) => e.chain().focus().toggleBulletList().run(),
112
+ active: (e) => e.isActive("bulletList")
113
+ }, {
114
+ id: "ol",
115
+ icon: "list-ordered",
116
+ label: "Numbered list",
117
+ run: (e) => e.chain().focus().toggleOrderedList().run(),
118
+ active: (e) => e.isActive("orderedList")
119
+ }],
120
+ [{
121
+ id: "undo",
122
+ icon: "undo",
123
+ label: "Undo",
124
+ run: (e) => e.chain().focus().undo().run()
125
+ }, {
126
+ id: "redo",
127
+ icon: "redo",
128
+ label: "Redo",
129
+ run: (e) => e.chain().focus().redo().run()
130
+ }]
131
+ ], w = n(function(n, f) {
132
+ let { placeholder: g = "Write something…", size: _ = "md", isDisabled: b = !1, isInvalid: w = !1, label: T = "Rich text editor", className: E, toolbarExtra: D, id: O, isRequired: k, "aria-labelledby": A, "aria-describedby": j, "aria-invalid": M } = n, [N, P] = s(!1), [F] = s(() => n.defaultValue ?? (n.format === "json" ? v : "")), I = n.value === void 0 ? F : n.value, L = o(() => n.format === "json" ? S(I) : void 0, [n.format, I]), R = a(), z = w || !!L || M, B = b || !!L, V = o(() => ({
133
+ role: "textbox",
134
+ "aria-label": T,
135
+ "aria-multiline": "true",
136
+ ...O ? { id: O } : {},
137
+ ...A ? { "aria-labelledby": A } : {},
138
+ ...j ? { "aria-describedby": j } : {},
139
+ ...z ? { "aria-invalid": String(z) } : {},
140
+ ...k ? { "aria-required": "true" } : {}
141
+ }), [
142
+ T,
143
+ O,
144
+ A,
145
+ j,
146
+ z,
147
+ k
148
+ ]), H = p({
149
+ immediatelyRender: !1,
150
+ editable: !B,
151
+ content: L ? v : typeof I == "string" ? I : x(I),
152
+ extensions: [...y(), h.configure({ placeholder: g })],
153
+ editorProps: { attributes: V },
154
+ onFocus: () => P(!0),
155
+ onBlur: () => P(!1),
156
+ onUpdate: ({ editor: e }) => {
157
+ B || (n.format === "json" ? n.onChange?.(e.getJSON()) : n.onChange?.(e.getHTML()));
158
+ }
159
+ });
160
+ i(() => {
161
+ H && (H.setEditable(!B, !1), H.setOptions({ editorProps: { attributes: V } }));
162
+ }, [
163
+ H,
164
+ B,
165
+ V
166
+ ]), i(() => {
167
+ if (!H || n.value === void 0 || L) return;
168
+ let e = typeof n.value == "string" ? d(n.value, H.schema) : H.schema.nodeFromJSON(x(n.value));
169
+ e.eq(H.state.doc) || H.commands.setContent(e, { emitUpdate: !1 });
170
+ }, [
171
+ H,
172
+ n.value,
173
+ L
174
+ ]);
175
+ let U = m({
176
+ editor: H,
177
+ selector: ({ editor: e }) => e ? {
178
+ active: Object.fromEntries(C.flat().map((t) => [t.id, t.active?.(e) ?? !1])),
179
+ linkActive: e.isActive("link")
180
+ } : null
181
+ }), W = r(() => {
182
+ if (!H) return;
183
+ if (H.isActive("link")) {
184
+ H.chain().focus().unsetLink().run();
185
+ return;
186
+ }
187
+ let e = window.prompt("Link to");
188
+ e && H.chain().focus().extendMarkRange("link").setLink({ href: e }).run();
189
+ }, [H]);
190
+ return /* @__PURE__ */ l("div", {
191
+ ref: f,
192
+ className: ["ds-rte", E].filter(Boolean).join(" "),
193
+ "data-focused": N || void 0,
194
+ "data-disabled": B || void 0,
195
+ "aria-invalid": z || void 0,
196
+ children: [L && /* @__PURE__ */ c("p", {
197
+ id: R,
198
+ role: "alert",
199
+ className: "ds-field__error",
200
+ children: L
201
+ }), /* @__PURE__ */ l("div", {
202
+ hidden: !!L,
203
+ children: [/* @__PURE__ */ l("div", {
204
+ className: "ds-rte__toolbar",
205
+ role: "toolbar",
206
+ "aria-label": `${T} formatting`,
207
+ children: [
208
+ C.map((n, r) => /* @__PURE__ */ c(t, {
209
+ "aria-label": `Formatting ${r + 1}`,
210
+ children: n.map((t) => /* @__PURE__ */ c(e, {
211
+ size: "sm",
212
+ isIconOnly: !0,
213
+ iconStart: t.icon,
214
+ "aria-label": t.label,
215
+ title: t.label,
216
+ "aria-pressed": t.active ? U?.active[t.id] : void 0,
217
+ variant: U?.active[t.id] ? "active" : "neutral",
218
+ isDisabled: B || !H,
219
+ onClick: () => H && t.run(H)
220
+ }, t.id))
221
+ }, r)),
222
+ /* @__PURE__ */ c(t, {
223
+ "aria-label": "Link",
224
+ children: /* @__PURE__ */ c(e, {
225
+ size: "sm",
226
+ isIconOnly: !0,
227
+ iconStart: U?.linkActive ? "link-off" : "link",
228
+ "aria-label": U?.linkActive ? "Remove link" : "Add link",
229
+ title: U?.linkActive ? "Remove link" : "Add link",
230
+ variant: U?.linkActive ? "active" : "neutral",
231
+ isDisabled: B || !H,
232
+ onClick: W
233
+ })
234
+ }),
235
+ D
236
+ ]
237
+ }), /* @__PURE__ */ c("div", {
238
+ className: "ds-rte__content",
239
+ "data-size": _,
240
+ children: /* @__PURE__ */ c(u, { editor: H })
241
+ })]
242
+ })]
243
+ });
244
+ });
245
+ //#endregion
246
+ export { S as n, v as r, w as t };
247
+
248
+ //# sourceMappingURL=RichTextEditor-DRt-kibg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichTextEditor-DRt-kibg.js","names":["emptyDocument","richTextExtensions","StarterKit","Link","schema","getSchema","normalizeDocument","document","documentError","value","check","type","node","key","mark","markType","GROUPS","RichTextEditor","forwardRef","labelledBy","describedBy","ariaInvalid","props","isFocused","setIsFocused","useState","initialValue","content","contentError","useMemo","errorId","useId","invalid","isInvalid","disabled","isDisabled","attributes","label","id","isRequired","editor","useEditor","Placeholder","useEffect","next","createDocument","state","useEditorState","toggleLink","useCallback","href","className","ButtonGroup","i","group","Button","tool","toolbarExtra","size","EditorContent"],"sources":["../../src/components/RichTextEditor/document.ts","../../src/components/RichTextEditor/index.tsx"],"sourcesContent":["import { getSchema, type JSONContent } from \"@tiptap/react\";\nimport { StarterKit } from \"@tiptap/starter-kit\";\nimport { Link } from \"@tiptap/extension-link\";\n\nexport type RichTextDocument = JSONContent & { type: \"doc\" };\n\nexport const emptyDocument: RichTextDocument = { type: \"doc\", content: [{ type: \"paragraph\" }] };\n\nexport function richTextExtensions() {\n return [StarterKit.configure({ link: false }), Link.configure({ openOnClick: false, autolink: true })];\n}\n\nconst schema = getSchema(richTextExtensions());\n\n/** ProseMirror represents an empty writing surface with one empty paragraph. */\nexport function normalizeDocument(document: RichTextDocument): RichTextDocument {\n return !document.content?.length ? { ...document, content: emptyDocument.content } : document;\n}\n\nexport function documentError(value: unknown): string | undefined {\n try {\n if (!value || typeof value !== \"object\" || !(\"type\" in value) || value.type !== \"doc\") throw new Error();\n const check = (node: JSONContent) => {\n const type = schema.nodes[node.type ?? \"\"];\n if (!type || Object.keys(node).some((key) => ![\"type\", \"attrs\", \"content\", \"marks\", \"text\"].includes(key)) ||\n (node.text !== undefined && node.type !== \"text\") ||\n (node.attrs && Object.keys(node.attrs).some((key) => !Object.hasOwn(type.spec.attrs ?? {}, key)))) {\n throw new Error();\n }\n for (const mark of node.marks ?? []) {\n const markType = schema.marks[mark.type];\n if (!markType || Object.keys(mark).some((key) => ![\"type\", \"attrs\"].includes(key)) ||\n Object.keys(mark.attrs ?? {}).some((key) => !Object.hasOwn(markType.spec.attrs ?? {}, key))) {\n throw new Error();\n }\n }\n node.content?.forEach(check);\n };\n const document = value as RichTextDocument;\n check(document);\n schema.nodeFromJSON(normalizeDocument(document)).check();\n } catch {\n return \"Unsupported or invalid rich-text document.\";\n }\n}\n","import { forwardRef, useCallback, useEffect, useId, useMemo, useState, type AriaAttributes, type ReactNode } from \"react\";\nimport { createDocument, EditorContent, useEditor, useEditorState, type Editor } from \"@tiptap/react\";\nimport { Placeholder } from \"@tiptap/extension-placeholder\";\nimport { Button } from \"../Button\";\nimport { ButtonGroup } from \"../ButtonGroup\";\nimport type { IconName } from \"../Icon/icons\";\nimport { documentError, emptyDocument, normalizeDocument, richTextExtensions, type RichTextDocument } from \"./document\";\nimport \"../Field/style.css\";\nimport \"./style.css\";\n\nexport type RichTextEditorSize = \"sm\" | \"md\" | \"lg\";\n\nexport type { RichTextDocument } from \"./document\";\n\ninterface RichTextEditorCommonProps {\n placeholder?: string;\n size?: RichTextEditorSize;\n isDisabled?: boolean;\n isInvalid?: boolean;\n /** Accessible name for the editing surface. */\n label?: string;\n className?: string;\n /** Extra controls appended to the toolbar, e.g. a word count. */\n toolbarExtra?: ReactNode;\n /** Applied to the editable surface. */\n id?: string;\n isRequired?: boolean;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: AriaAttributes[\"aria-invalid\"];\n}\n\nexport type RichTextEditorProps = RichTextEditorCommonProps & (\n | { format?: \"html\"; value?: string; defaultValue?: string; onChange?: (html: string) => void }\n | { format: \"json\"; value?: RichTextDocument; defaultValue?: RichTextDocument; onChange?: (document: RichTextDocument) => void }\n);\n\ninterface ToolItem {\n id: string;\n icon: IconName;\n label: string;\n run: (editor: Editor) => void;\n active?: (editor: Editor) => boolean;\n}\n\nconst GROUPS: ToolItem[][] = [\n [\n {\n id: \"bold\",\n icon: \"bold\",\n label: \"Bold\",\n run: (e) => e.chain().focus().toggleBold().run(),\n active: (e) => e.isActive(\"bold\"),\n },\n {\n id: \"italic\",\n icon: \"italic\",\n label: \"Italic\",\n run: (e) => e.chain().focus().toggleItalic().run(),\n active: (e) => e.isActive(\"italic\"),\n },\n {\n id: \"strike\",\n icon: \"strikethrough\",\n label: \"Strikethrough\",\n run: (e) => e.chain().focus().toggleStrike().run(),\n active: (e) => e.isActive(\"strike\"),\n },\n {\n id: \"code\",\n icon: \"code\",\n label: \"Inline code\",\n run: (e) => e.chain().focus().toggleCode().run(),\n active: (e) => e.isActive(\"code\"),\n },\n ],\n [\n {\n id: \"h2\",\n icon: \"heading-2\",\n label: \"Heading\",\n run: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),\n active: (e) => e.isActive(\"heading\", { level: 2 }),\n },\n {\n id: \"h3\",\n icon: \"heading-3\",\n label: \"Subheading\",\n run: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),\n active: (e) => e.isActive(\"heading\", { level: 3 }),\n },\n {\n id: \"quote\",\n icon: \"quote\",\n label: \"Quote\",\n run: (e) => e.chain().focus().toggleBlockquote().run(),\n active: (e) => e.isActive(\"blockquote\"),\n },\n ],\n [\n {\n id: \"ul\",\n icon: \"list\",\n label: \"Bulleted list\",\n run: (e) => e.chain().focus().toggleBulletList().run(),\n active: (e) => e.isActive(\"bulletList\"),\n },\n {\n id: \"ol\",\n icon: \"list-ordered\",\n label: \"Numbered list\",\n run: (e) => e.chain().focus().toggleOrderedList().run(),\n active: (e) => e.isActive(\"orderedList\"),\n },\n ],\n [\n {\n id: \"undo\",\n icon: \"undo\",\n label: \"Undo\",\n run: (e) => e.chain().focus().undo().run(),\n },\n {\n id: \"redo\",\n icon: \"redo\",\n label: \"Redo\",\n run: (e) => e.chain().focus().redo().run(),\n },\n ],\n];\n\n/**\n * The editorial writing surface. Rich text plus links — the same field skin,\n * radius and states as `TextField`, with the toolbar inside the frame.\n */\nexport const RichTextEditor = forwardRef<HTMLDivElement, RichTextEditorProps>(\n function RichTextEditor(\n props,\n ref,\n ) {\n const {\n placeholder = \"Write something…\",\n size = \"md\",\n isDisabled = false,\n isInvalid = false,\n label = \"Rich text editor\",\n className,\n toolbarExtra,\n id,\n isRequired,\n \"aria-labelledby\": labelledBy,\n \"aria-describedby\": describedBy,\n \"aria-invalid\": ariaInvalid,\n } = props;\n const [isFocused, setIsFocused] = useState(false);\n const [initialValue] = useState(() => props.defaultValue ?? (props.format === \"json\" ? emptyDocument : \"\"));\n const content = props.value !== undefined ? props.value : initialValue;\n const contentError = useMemo(() => props.format === \"json\" ? documentError(content) : undefined, [props.format, content]);\n const errorId = useId();\n const invalid = isInvalid || !!contentError || ariaInvalid;\n const disabled = isDisabled || !!contentError;\n const attributes = useMemo(() => ({\n role: \"textbox\",\n \"aria-label\": label,\n \"aria-multiline\": \"true\",\n ...(id ? { id } : {}),\n ...(labelledBy ? { \"aria-labelledby\": labelledBy } : {}),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n ...(invalid ? { \"aria-invalid\": String(invalid) } : {}),\n ...(isRequired ? { \"aria-required\": \"true\" } : {}),\n }), [label, id, labelledBy, describedBy, invalid, isRequired]);\n\n const editor = useEditor({\n immediatelyRender: false,\n editable: !disabled,\n content: contentError ? emptyDocument : typeof content === \"string\" ? content : normalizeDocument(content),\n extensions: [\n ...richTextExtensions(),\n Placeholder.configure({ placeholder }),\n ],\n editorProps: {\n attributes,\n },\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false),\n onUpdate: ({ editor: e }) => {\n if (disabled) return;\n if (props.format === \"json\") props.onChange?.(e.getJSON() as RichTextDocument);\n else props.onChange?.(e.getHTML());\n },\n });\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!disabled, false);\n editor.setOptions({ editorProps: { attributes } });\n }, [editor, disabled, attributes]);\n\n useEffect(() => {\n if (!editor || props.value === undefined || contentError) return;\n const next = typeof props.value === \"string\"\n ? createDocument(props.value, editor.schema)\n : editor.schema.nodeFromJSON(normalizeDocument(props.value));\n // Parent echoes should preserve the current selection and undo history.\n if (!next.eq(editor.state.doc)) editor.commands.setContent(next, { emitUpdate: false });\n }, [editor, props.value, contentError]);\n\n const state = useEditorState({\n editor,\n selector: ({ editor: e }) =>\n e\n ? {\n active: Object.fromEntries(\n GROUPS.flat().map((t) => [t.id, t.active?.(e) ?? false]),\n ),\n linkActive: e.isActive(\"link\"),\n }\n : null,\n });\n\n const toggleLink = useCallback(() => {\n if (!editor) return;\n if (editor.isActive(\"link\")) {\n editor.chain().focus().unsetLink().run();\n return;\n }\n const href = window.prompt(\"Link to\");\n if (!href) return;\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href }).run();\n }, [editor]);\n\n return (\n <div\n ref={ref}\n className={[\"ds-rte\", className].filter(Boolean).join(\" \")}\n data-focused={isFocused || undefined}\n data-disabled={disabled || undefined}\n aria-invalid={invalid || undefined}\n >\n {contentError && <p id={errorId} role=\"alert\" className=\"ds-field__error\">{contentError}</p>}\n <div hidden={!!contentError}>\n <div className=\"ds-rte__toolbar\" role=\"toolbar\" aria-label={`${label} formatting`}>\n {GROUPS.map((group, i) => (\n <ButtonGroup key={i} aria-label={`Formatting ${i + 1}`}>\n {group.map((tool) => (\n <Button\n key={tool.id}\n size=\"sm\"\n isIconOnly\n iconStart={tool.icon}\n aria-label={tool.label}\n title={tool.label}\n aria-pressed={tool.active ? state?.active[tool.id] : undefined}\n variant={state?.active[tool.id] ? \"active\" : \"neutral\"}\n isDisabled={disabled || !editor}\n onClick={() => editor && tool.run(editor)}\n />\n ))}\n </ButtonGroup>\n ))}\n <ButtonGroup aria-label=\"Link\">\n <Button\n size=\"sm\"\n isIconOnly\n iconStart={state?.linkActive ? \"link-off\" : \"link\"}\n aria-label={state?.linkActive ? \"Remove link\" : \"Add link\"}\n title={state?.linkActive ? \"Remove link\" : \"Add link\"}\n variant={state?.linkActive ? \"active\" : \"neutral\"}\n isDisabled={disabled || !editor}\n onClick={toggleLink}\n />\n </ButtonGroup>\n {toolbarExtra}\n </div>\n <div className=\"ds-rte__content\" data-size={size}>\n <EditorContent editor={editor} />\n </div>\n </div>\n </div>\n );\n },\n);\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("../components/Button/index.cjs"),t=require("../components/ButtonGroup/index.cjs");;/* empty css */let n=require("react"),r=require("react/jsx-runtime"),i=require("@tiptap/react"),a=require("@tiptap/extension-placeholder"),o=require("@tiptap/starter-kit"),s=require("@tiptap/extension-link");var c={type:`doc`,content:[{type:`paragraph`}]};function l(){return[o.StarterKit.configure({link:!1}),s.Link.configure({openOnClick:!1,autolink:!0})]}var u=(0,i.getSchema)(l());function d(e){return e.content?.length?e:{...e,content:c.content}}function f(e){try{if(!e||typeof e!=`object`||!(`type`in e)||e.type!==`doc`)throw Error();let t=e=>{let n=u.nodes[e.type??``];if(!n||Object.keys(e).some(e=>![`type`,`attrs`,`content`,`marks`,`text`].includes(e))||e.text!==void 0&&e.type!==`text`||e.attrs&&Object.keys(e.attrs).some(e=>!Object.hasOwn(n.spec.attrs??{},e)))throw Error();for(let t of e.marks??[]){let e=u.marks[t.type];if(!e||Object.keys(t).some(e=>![`type`,`attrs`].includes(e))||Object.keys(t.attrs??{}).some(t=>!Object.hasOwn(e.spec.attrs??{},t)))throw Error()}e.content?.forEach(t)},n=e;t(n),u.nodeFromJSON(d(n)).check()}catch{return`Unsupported or invalid rich-text document.`}}var p=[[{id:`bold`,icon:`bold`,label:`Bold`,run:e=>e.chain().focus().toggleBold().run(),active:e=>e.isActive(`bold`)},{id:`italic`,icon:`italic`,label:`Italic`,run:e=>e.chain().focus().toggleItalic().run(),active:e=>e.isActive(`italic`)},{id:`strike`,icon:`strikethrough`,label:`Strikethrough`,run:e=>e.chain().focus().toggleStrike().run(),active:e=>e.isActive(`strike`)},{id:`code`,icon:`code`,label:`Inline code`,run:e=>e.chain().focus().toggleCode().run(),active:e=>e.isActive(`code`)}],[{id:`h2`,icon:`heading-2`,label:`Heading`,run:e=>e.chain().focus().toggleHeading({level:2}).run(),active:e=>e.isActive(`heading`,{level:2})},{id:`h3`,icon:`heading-3`,label:`Subheading`,run:e=>e.chain().focus().toggleHeading({level:3}).run(),active:e=>e.isActive(`heading`,{level:3})},{id:`quote`,icon:`quote`,label:`Quote`,run:e=>e.chain().focus().toggleBlockquote().run(),active:e=>e.isActive(`blockquote`)}],[{id:`ul`,icon:`list`,label:`Bulleted list`,run:e=>e.chain().focus().toggleBulletList().run(),active:e=>e.isActive(`bulletList`)},{id:`ol`,icon:`list-ordered`,label:`Numbered list`,run:e=>e.chain().focus().toggleOrderedList().run(),active:e=>e.isActive(`orderedList`)}],[{id:`undo`,icon:`undo`,label:`Undo`,run:e=>e.chain().focus().undo().run()},{id:`redo`,icon:`redo`,label:`Redo`,run:e=>e.chain().focus().redo().run()}]],m=(0,n.forwardRef)(function(o,s){let{placeholder:u=`Write something…`,size:m=`md`,isDisabled:h=!1,isInvalid:g=!1,label:_=`Rich text editor`,className:v,toolbarExtra:y,id:b,isRequired:x,"aria-labelledby":S,"aria-describedby":C,"aria-invalid":w}=o,[T,E]=(0,n.useState)(!1),[D]=(0,n.useState)(()=>o.defaultValue??(o.format===`json`?c:``)),O=o.value===void 0?D:o.value,k=(0,n.useMemo)(()=>o.format===`json`?f(O):void 0,[o.format,O]),A=(0,n.useId)(),j=g||!!k||w,M=h||!!k,N=(0,n.useMemo)(()=>({role:`textbox`,"aria-label":_,"aria-multiline":`true`,...b?{id:b}:{},...S?{"aria-labelledby":S}:{},...C?{"aria-describedby":C}:{},...j?{"aria-invalid":String(j)}:{},...x?{"aria-required":`true`}:{}}),[_,b,S,C,j,x]),P=(0,i.useEditor)({immediatelyRender:!1,editable:!M,content:k?c:typeof O==`string`?O:d(O),extensions:[...l(),a.Placeholder.configure({placeholder:u})],editorProps:{attributes:N},onFocus:()=>E(!0),onBlur:()=>E(!1),onUpdate:({editor:e})=>{M||(o.format===`json`?o.onChange?.(e.getJSON()):o.onChange?.(e.getHTML()))}});(0,n.useEffect)(()=>{P&&(P.setEditable(!M,!1),P.setOptions({editorProps:{attributes:N}}))},[P,M,N]),(0,n.useEffect)(()=>{if(!P||o.value===void 0||k)return;let e=typeof o.value==`string`?(0,i.createDocument)(o.value,P.schema):P.schema.nodeFromJSON(d(o.value));e.eq(P.state.doc)||P.commands.setContent(e,{emitUpdate:!1})},[P,o.value,k]);let F=(0,i.useEditorState)({editor:P,selector:({editor:e})=>e?{active:Object.fromEntries(p.flat().map(t=>[t.id,t.active?.(e)??!1])),linkActive:e.isActive(`link`)}:null}),I=(0,n.useCallback)(()=>{if(!P)return;if(P.isActive(`link`)){P.chain().focus().unsetLink().run();return}let e=window.prompt(`Link to`);e&&P.chain().focus().extendMarkRange(`link`).setLink({href:e}).run()},[P]);return(0,r.jsxs)(`div`,{ref:s,className:[`ds-rte`,v].filter(Boolean).join(` `),"data-focused":T||void 0,"data-disabled":M||void 0,"aria-invalid":j||void 0,children:[k&&(0,r.jsx)(`p`,{id:A,role:`alert`,className:`ds-field__error`,children:k}),(0,r.jsxs)(`div`,{hidden:!!k,children:[(0,r.jsxs)(`div`,{className:`ds-rte__toolbar`,role:`toolbar`,"aria-label":`${_} formatting`,children:[p.map((n,i)=>(0,r.jsx)(t.ButtonGroup,{"aria-label":`Formatting ${i+1}`,children:n.map(t=>(0,r.jsx)(e.Button,{size:`sm`,isIconOnly:!0,iconStart:t.icon,"aria-label":t.label,title:t.label,"aria-pressed":t.active?F?.active[t.id]:void 0,variant:F?.active[t.id]?`active`:`neutral`,isDisabled:M||!P,onClick:()=>P&&t.run(P)},t.id))},i)),(0,r.jsx)(t.ButtonGroup,{"aria-label":`Link`,children:(0,r.jsx)(e.Button,{size:`sm`,isIconOnly:!0,iconStart:F?.linkActive?`link-off`:`link`,"aria-label":F?.linkActive?`Remove link`:`Add link`,title:F?.linkActive?`Remove link`:`Add link`,variant:F?.linkActive?`active`:`neutral`,isDisabled:M||!P,onClick:I})}),y]}),(0,r.jsx)(`div`,{className:`ds-rte__content`,"data-size":m,children:(0,r.jsx)(i.EditorContent,{editor:P})})]})]})});Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return m}});
2
+ //# sourceMappingURL=RichTextEditor-tFkISOvq.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichTextEditor-tFkISOvq.cjs","names":["StarterKit","Link","getSchema","forwardRef","useState","useMemo","useId","useEditor","Placeholder","createDocument","useEditorState","useCallback","ButtonGroup","Button","EditorContent","require_components_Button_index","require_components_ButtonGroup_index","react","react_jsx_runtime","_tiptap_react","_tiptap_extension_placeholder","_tiptap_starter_kit","_tiptap_extension_link","emptyDocument","richTextExtensions","schema","normalizeDocument","document","documentError","value","check","type","node","key","mark","markType","GROUPS","RichTextEditor","labelledBy","describedBy","ariaInvalid","props","isFocused","setIsFocused","initialValue","content","contentError","errorId","invalid","isInvalid","disabled","isDisabled","attributes","label","id","isRequired","editor","next","state","toggleLink","href","className","group","tool","toolbarExtra","size"],"sources":["../../src/components/RichTextEditor/document.ts","../../src/components/RichTextEditor/index.tsx"],"sourcesContent":["import { getSchema, type JSONContent } from \"@tiptap/react\";\nimport { StarterKit } from \"@tiptap/starter-kit\";\nimport { Link } from \"@tiptap/extension-link\";\n\nexport type RichTextDocument = JSONContent & { type: \"doc\" };\n\nexport const emptyDocument: RichTextDocument = { type: \"doc\", content: [{ type: \"paragraph\" }] };\n\nexport function richTextExtensions() {\n return [StarterKit.configure({ link: false }), Link.configure({ openOnClick: false, autolink: true })];\n}\n\nconst schema = getSchema(richTextExtensions());\n\n/** ProseMirror represents an empty writing surface with one empty paragraph. */\nexport function normalizeDocument(document: RichTextDocument): RichTextDocument {\n return !document.content?.length ? { ...document, content: emptyDocument.content } : document;\n}\n\nexport function documentError(value: unknown): string | undefined {\n try {\n if (!value || typeof value !== \"object\" || !(\"type\" in value) || value.type !== \"doc\") throw new Error();\n const check = (node: JSONContent) => {\n const type = schema.nodes[node.type ?? \"\"];\n if (!type || Object.keys(node).some((key) => ![\"type\", \"attrs\", \"content\", \"marks\", \"text\"].includes(key)) ||\n (node.text !== undefined && node.type !== \"text\") ||\n (node.attrs && Object.keys(node.attrs).some((key) => !Object.hasOwn(type.spec.attrs ?? {}, key)))) {\n throw new Error();\n }\n for (const mark of node.marks ?? []) {\n const markType = schema.marks[mark.type];\n if (!markType || Object.keys(mark).some((key) => ![\"type\", \"attrs\"].includes(key)) ||\n Object.keys(mark.attrs ?? {}).some((key) => !Object.hasOwn(markType.spec.attrs ?? {}, key))) {\n throw new Error();\n }\n }\n node.content?.forEach(check);\n };\n const document = value as RichTextDocument;\n check(document);\n schema.nodeFromJSON(normalizeDocument(document)).check();\n } catch {\n return \"Unsupported or invalid rich-text document.\";\n }\n}\n","import { forwardRef, useCallback, useEffect, useId, useMemo, useState, type AriaAttributes, type ReactNode } from \"react\";\nimport { createDocument, EditorContent, useEditor, useEditorState, type Editor } from \"@tiptap/react\";\nimport { Placeholder } from \"@tiptap/extension-placeholder\";\nimport { Button } from \"../Button\";\nimport { ButtonGroup } from \"../ButtonGroup\";\nimport type { IconName } from \"../Icon/icons\";\nimport { documentError, emptyDocument, normalizeDocument, richTextExtensions, type RichTextDocument } from \"./document\";\nimport \"../Field/style.css\";\nimport \"./style.css\";\n\nexport type RichTextEditorSize = \"sm\" | \"md\" | \"lg\";\n\nexport type { RichTextDocument } from \"./document\";\n\ninterface RichTextEditorCommonProps {\n placeholder?: string;\n size?: RichTextEditorSize;\n isDisabled?: boolean;\n isInvalid?: boolean;\n /** Accessible name for the editing surface. */\n label?: string;\n className?: string;\n /** Extra controls appended to the toolbar, e.g. a word count. */\n toolbarExtra?: ReactNode;\n /** Applied to the editable surface. */\n id?: string;\n isRequired?: boolean;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: AriaAttributes[\"aria-invalid\"];\n}\n\nexport type RichTextEditorProps = RichTextEditorCommonProps & (\n | { format?: \"html\"; value?: string; defaultValue?: string; onChange?: (html: string) => void }\n | { format: \"json\"; value?: RichTextDocument; defaultValue?: RichTextDocument; onChange?: (document: RichTextDocument) => void }\n);\n\ninterface ToolItem {\n id: string;\n icon: IconName;\n label: string;\n run: (editor: Editor) => void;\n active?: (editor: Editor) => boolean;\n}\n\nconst GROUPS: ToolItem[][] = [\n [\n {\n id: \"bold\",\n icon: \"bold\",\n label: \"Bold\",\n run: (e) => e.chain().focus().toggleBold().run(),\n active: (e) => e.isActive(\"bold\"),\n },\n {\n id: \"italic\",\n icon: \"italic\",\n label: \"Italic\",\n run: (e) => e.chain().focus().toggleItalic().run(),\n active: (e) => e.isActive(\"italic\"),\n },\n {\n id: \"strike\",\n icon: \"strikethrough\",\n label: \"Strikethrough\",\n run: (e) => e.chain().focus().toggleStrike().run(),\n active: (e) => e.isActive(\"strike\"),\n },\n {\n id: \"code\",\n icon: \"code\",\n label: \"Inline code\",\n run: (e) => e.chain().focus().toggleCode().run(),\n active: (e) => e.isActive(\"code\"),\n },\n ],\n [\n {\n id: \"h2\",\n icon: \"heading-2\",\n label: \"Heading\",\n run: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),\n active: (e) => e.isActive(\"heading\", { level: 2 }),\n },\n {\n id: \"h3\",\n icon: \"heading-3\",\n label: \"Subheading\",\n run: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),\n active: (e) => e.isActive(\"heading\", { level: 3 }),\n },\n {\n id: \"quote\",\n icon: \"quote\",\n label: \"Quote\",\n run: (e) => e.chain().focus().toggleBlockquote().run(),\n active: (e) => e.isActive(\"blockquote\"),\n },\n ],\n [\n {\n id: \"ul\",\n icon: \"list\",\n label: \"Bulleted list\",\n run: (e) => e.chain().focus().toggleBulletList().run(),\n active: (e) => e.isActive(\"bulletList\"),\n },\n {\n id: \"ol\",\n icon: \"list-ordered\",\n label: \"Numbered list\",\n run: (e) => e.chain().focus().toggleOrderedList().run(),\n active: (e) => e.isActive(\"orderedList\"),\n },\n ],\n [\n {\n id: \"undo\",\n icon: \"undo\",\n label: \"Undo\",\n run: (e) => e.chain().focus().undo().run(),\n },\n {\n id: \"redo\",\n icon: \"redo\",\n label: \"Redo\",\n run: (e) => e.chain().focus().redo().run(),\n },\n ],\n];\n\n/**\n * The editorial writing surface. Rich text plus links — the same field skin,\n * radius and states as `TextField`, with the toolbar inside the frame.\n */\nexport const RichTextEditor = forwardRef<HTMLDivElement, RichTextEditorProps>(\n function RichTextEditor(\n props,\n ref,\n ) {\n const {\n placeholder = \"Write something…\",\n size = \"md\",\n isDisabled = false,\n isInvalid = false,\n label = \"Rich text editor\",\n className,\n toolbarExtra,\n id,\n isRequired,\n \"aria-labelledby\": labelledBy,\n \"aria-describedby\": describedBy,\n \"aria-invalid\": ariaInvalid,\n } = props;\n const [isFocused, setIsFocused] = useState(false);\n const [initialValue] = useState(() => props.defaultValue ?? (props.format === \"json\" ? emptyDocument : \"\"));\n const content = props.value !== undefined ? props.value : initialValue;\n const contentError = useMemo(() => props.format === \"json\" ? documentError(content) : undefined, [props.format, content]);\n const errorId = useId();\n const invalid = isInvalid || !!contentError || ariaInvalid;\n const disabled = isDisabled || !!contentError;\n const attributes = useMemo(() => ({\n role: \"textbox\",\n \"aria-label\": label,\n \"aria-multiline\": \"true\",\n ...(id ? { id } : {}),\n ...(labelledBy ? { \"aria-labelledby\": labelledBy } : {}),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n ...(invalid ? { \"aria-invalid\": String(invalid) } : {}),\n ...(isRequired ? { \"aria-required\": \"true\" } : {}),\n }), [label, id, labelledBy, describedBy, invalid, isRequired]);\n\n const editor = useEditor({\n immediatelyRender: false,\n editable: !disabled,\n content: contentError ? emptyDocument : typeof content === \"string\" ? content : normalizeDocument(content),\n extensions: [\n ...richTextExtensions(),\n Placeholder.configure({ placeholder }),\n ],\n editorProps: {\n attributes,\n },\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false),\n onUpdate: ({ editor: e }) => {\n if (disabled) return;\n if (props.format === \"json\") props.onChange?.(e.getJSON() as RichTextDocument);\n else props.onChange?.(e.getHTML());\n },\n });\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!disabled, false);\n editor.setOptions({ editorProps: { attributes } });\n }, [editor, disabled, attributes]);\n\n useEffect(() => {\n if (!editor || props.value === undefined || contentError) return;\n const next = typeof props.value === \"string\"\n ? createDocument(props.value, editor.schema)\n : editor.schema.nodeFromJSON(normalizeDocument(props.value));\n // Parent echoes should preserve the current selection and undo history.\n if (!next.eq(editor.state.doc)) editor.commands.setContent(next, { emitUpdate: false });\n }, [editor, props.value, contentError]);\n\n const state = useEditorState({\n editor,\n selector: ({ editor: e }) =>\n e\n ? {\n active: Object.fromEntries(\n GROUPS.flat().map((t) => [t.id, t.active?.(e) ?? false]),\n ),\n linkActive: e.isActive(\"link\"),\n }\n : null,\n });\n\n const toggleLink = useCallback(() => {\n if (!editor) return;\n if (editor.isActive(\"link\")) {\n editor.chain().focus().unsetLink().run();\n return;\n }\n const href = window.prompt(\"Link to\");\n if (!href) return;\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href }).run();\n }, [editor]);\n\n return (\n <div\n ref={ref}\n className={[\"ds-rte\", className].filter(Boolean).join(\" \")}\n data-focused={isFocused || undefined}\n data-disabled={disabled || undefined}\n aria-invalid={invalid || undefined}\n >\n {contentError && <p id={errorId} role=\"alert\" className=\"ds-field__error\">{contentError}</p>}\n <div hidden={!!contentError}>\n <div className=\"ds-rte__toolbar\" role=\"toolbar\" aria-label={`${label} formatting`}>\n {GROUPS.map((group, i) => (\n <ButtonGroup key={i} aria-label={`Formatting ${i + 1}`}>\n {group.map((tool) => (\n <Button\n key={tool.id}\n size=\"sm\"\n isIconOnly\n iconStart={tool.icon}\n aria-label={tool.label}\n title={tool.label}\n aria-pressed={tool.active ? state?.active[tool.id] : undefined}\n variant={state?.active[tool.id] ? \"active\" : \"neutral\"}\n isDisabled={disabled || !editor}\n onClick={() => editor && tool.run(editor)}\n />\n ))}\n </ButtonGroup>\n ))}\n <ButtonGroup aria-label=\"Link\">\n <Button\n size=\"sm\"\n isIconOnly\n iconStart={state?.linkActive ? \"link-off\" : \"link\"}\n aria-label={state?.linkActive ? \"Remove link\" : \"Add link\"}\n title={state?.linkActive ? \"Remove link\" : \"Add link\"}\n variant={state?.linkActive ? \"active\" : \"neutral\"}\n isDisabled={disabled || !editor}\n onClick={toggleLink}\n />\n </ButtonGroup>\n {toolbarExtra}\n </div>\n <div className=\"ds-rte__content\" data-size={size}>\n <EditorContent editor={editor} />\n </div>\n </div>\n </div>\n );\n },\n);\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/Icon-CWsA1W83.cjs"),t=require("../Grid/index.cjs"),n=require("../Skeleton/index.cjs");let r=require("react"),i=require("react/jsx-runtime");function a(...e){return e.filter(Boolean).join(` `)}var o=(0,r.forwardRef)(function({isLoading:e=!1,loadingCount:n=8,className:r,children:o,...c},l){return(0,i.jsx)(t.Grid,{ref:l,columns:`auto`,gap:`md`,minColumnWidth:`var(--asset-tile-min-width)`,className:a(`ds-asset-grid`,r),"aria-busy":e||void 0,...c,children:e?Array.from({length:n},(e,t)=>(0,i.jsx)(s,{index:t},t)):o})});function s({index:e=0}){let t={animationDelay:`calc(var(--skeleton-stagger) * ${e})`};return(0,i.jsxs)(`div`,{className:`ds-asset-tile`,"data-loading":`true`,"aria-hidden":`true`,children:[(0,i.jsx)(n.Skeleton,{shape:`block`,className:`ds-asset-tile__thumb`,style:t}),(0,i.jsxs)(`div`,{className:`ds-asset-tile__text`,children:[(0,i.jsx)(n.Skeleton,{shape:`text`,width:`80%`,style:t}),(0,i.jsx)(n.Skeleton,{shape:`text`,width:`45%`,style:t})]})]})}var c=(0,r.forwardRef)(function({name:t,src:o,icon:s=`image`,meta:c,isSelected:l=!1,isPending:u=!1,onSelect:d,actions:f,className:p,...m},h){let[g,_]=(0,r.useState)(!1),[v,y]=(0,r.useState)(!1),b=!!o&&!g;return(0,i.jsxs)(`div`,{ref:h,className:a(`ds-asset-tile`,p),"data-selected":l||void 0,"data-pending":u||void 0,...m,children:[(0,i.jsxs)(`div`,{className:`ds-asset-tile__thumb`,children:[b?(0,i.jsxs)(i.Fragment,{children:[!v&&(0,i.jsx)(n.Skeleton,{shape:`block`,className:`ds-asset-tile__thumb-skeleton`}),(0,i.jsx)(`img`,{src:o,alt:``,loading:`lazy`,"data-loaded":v||void 0,onLoad:()=>y(!0),onError:()=>_(!0)})]}):(0,i.jsx)(`span`,{className:`ds-asset-tile__placeholder`,children:(0,i.jsx)(e.t,{name:g?`alert-triangle`:s,size:24})}),u&&(0,i.jsxs)(`span`,{className:`ds-asset-tile__pending`,role:`status`,children:[(0,i.jsx)(e.t,{name:`spinner`,size:20,className:`ds-asset-tile__spinner`}),(0,i.jsx)(`span`,{className:`ds-asset-tile__pending-label`,children:`Uploading`})]}),f&&(0,i.jsx)(`div`,{className:`ds-asset-tile__actions`,children:f}),d&&(0,i.jsx)(`button`,{type:`button`,className:`ds-asset-tile__hit`,"aria-pressed":l,disabled:u,onClick:d,children:(0,i.jsx)(`span`,{className:`ds-asset-tile__hit-label`,children:t})})]}),(0,i.jsxs)(`div`,{className:`ds-asset-tile__text`,children:[(0,i.jsx)(`span`,{className:`ds-asset-tile__name`,children:t}),c&&(0,i.jsx)(`span`,{className:`ds-asset-tile__meta`,children:c})]})]})});function l({title:t,description:n,action:r}){return(0,i.jsxs)(`div`,{className:`ds-asset-empty`,children:[(0,i.jsx)(e.t,{name:`image`,size:24}),(0,i.jsx)(`span`,{className:`ds-asset-empty__title`,children:t}),n&&(0,i.jsx)(`span`,{className:`ds-asset-empty__description`,children:n}),r]})}exports.AssetGrid=o,exports.AssetGridEmpty=l,exports.AssetTile=c,exports.AssetTileSkeleton=s;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["forwardRef","Grid","Skeleton","useState","_Fragment","Icon","require_Icon","require_components_Grid_index","require_components_Skeleton_index","react","react_jsx_runtime","cx","parts","AssetGrid","rest","className","isLoading","loadingCount","AssetTileSkeleton","i","children","delay","index","AssetTile","hasFailed","setHasFailed","isLoaded","setIsLoaded","showImage","src","isSelected","isPending","icon","actions","onSelect","name","meta","AssetGridEmpty","title","description","action"],"sources":["../../../src/components/AssetGrid/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Grid } from \"../Grid\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../Icon/icons\";\nimport { Skeleton } from \"../Skeleton\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport interface AssetGridProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Renders placeholder tiles instead of children. The grid keeps its\n * geometry, so nothing moves when the real assets arrive.\n */\n isLoading?: boolean;\n /** How many placeholder tiles to show while loading. */\n loadingCount?: number;\n children?: ReactNode;\n}\n\n/**\n * The media library surface: an auto-filling grid of asset tiles. Sits inside\n * a `TableFrame` when it is the page's collection, bare inside a drawer.\n */\nexport const AssetGrid = forwardRef<HTMLDivElement, AssetGridProps>(function AssetGrid(\n { isLoading = false, loadingCount = 8, className, children, ...rest },\n ref,\n) {\n return (\n <Grid\n ref={ref}\n columns=\"auto\"\n gap=\"md\"\n minColumnWidth=\"var(--asset-tile-min-width)\"\n className={cx(\"ds-asset-grid\", className)}\n aria-busy={isLoading || undefined}\n {...rest}\n >\n {isLoading\n ? Array.from({ length: loadingCount }, (_, i) => <AssetTileSkeleton key={i} index={i} />)\n : children}\n </Grid>\n );\n});\n\nexport interface AssetTileSkeletonProps {\n /** Position in the grid — drives the stagger, nothing else. */\n index?: number;\n}\n\n/** One loading tile: thumbnail block, name line, meta line. */\nexport function AssetTileSkeleton({ index = 0 }: AssetTileSkeletonProps) {\n const delay = { animationDelay: `calc(var(--skeleton-stagger) * ${index})` };\n return (\n <div className=\"ds-asset-tile\" data-loading=\"true\" aria-hidden=\"true\">\n <Skeleton shape=\"block\" className=\"ds-asset-tile__thumb\" style={delay} />\n <div className=\"ds-asset-tile__text\">\n <Skeleton shape=\"text\" width=\"80%\" style={delay} />\n <Skeleton shape=\"text\" width=\"45%\" style={delay} />\n </div>\n </div>\n );\n}\n\nexport interface AssetTileProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\" | \"title\"> {\n /** File name, shown in full — asset names are how people find things again. */\n name: string;\n /** Thumbnail source. Omit for a non-image asset and pass an `icon` instead. */\n src?: string;\n /** Glyph shown when there is no thumbnail, or while one fails to load. */\n icon?: IconName;\n /** Second line: dimensions, size, date — whatever the library sorts by. */\n meta?: ReactNode;\n /** Paints the soft fill and the solid rail. Never changes the tile's size. */\n isSelected?: boolean;\n /** The asset is still uploading or processing: dimmed, with a spinner. */\n isPending?: boolean;\n /** Makes the whole tile a selection target. */\n onSelect?: () => void;\n /** Badges or a menu, pinned to the top of the thumbnail. */\n actions?: ReactNode;\n}\n\n/**\n * One asset in the library. Selection paints a fill and a rail exactly like a\n * table row, so a grid and a list read as the same collection in two shapes.\n */\nexport const AssetTile = forwardRef<HTMLDivElement, AssetTileProps>(function AssetTile(\n {\n name,\n src,\n icon = \"image\",\n meta,\n isSelected = false,\n isPending = false,\n onSelect,\n actions,\n className,\n ...rest\n },\n ref,\n) {\n const [hasFailed, setHasFailed] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n const showImage = Boolean(src) && !hasFailed;\n\n return (\n <div\n ref={ref}\n className={cx(\"ds-asset-tile\", className)}\n data-selected={isSelected || undefined}\n data-pending={isPending || undefined}\n {...rest}\n >\n <div className=\"ds-asset-tile__thumb\">\n {showImage ? (\n <>\n {!isLoaded && <Skeleton shape=\"block\" className=\"ds-asset-tile__thumb-skeleton\" />}\n <img\n src={src}\n alt=\"\"\n loading=\"lazy\"\n data-loaded={isLoaded || undefined}\n onLoad={() => setIsLoaded(true)}\n onError={() => setHasFailed(true)}\n />\n </>\n ) : (\n <span className=\"ds-asset-tile__placeholder\">\n <Icon name={hasFailed ? \"alert-triangle\" : icon} size={24} />\n </span>\n )}\n\n {isPending && (\n <span className=\"ds-asset-tile__pending\" role=\"status\">\n <Icon name=\"spinner\" size={20} className=\"ds-asset-tile__spinner\" />\n <span className=\"ds-asset-tile__pending-label\">Uploading</span>\n </span>\n )}\n\n {actions && <div className=\"ds-asset-tile__actions\">{actions}</div>}\n\n {onSelect && (\n <button\n type=\"button\"\n className=\"ds-asset-tile__hit\"\n aria-pressed={isSelected}\n disabled={isPending}\n onClick={onSelect}\n >\n <span className=\"ds-asset-tile__hit-label\">{name}</span>\n </button>\n )}\n </div>\n\n <div className=\"ds-asset-tile__text\">\n <span className=\"ds-asset-tile__name\">{name}</span>\n {meta && <span className=\"ds-asset-tile__meta\">{meta}</span>}\n </div>\n </div>\n );\n});\n\nexport interface AssetGridEmptyProps {\n title: string;\n description?: ReactNode;\n action?: ReactNode;\n}\n\n/** Nothing in the library yet — one action, the one that fills it. */\nexport function AssetGridEmpty({ title, description, action }: AssetGridEmptyProps) {\n return (\n <div className=\"ds-asset-empty\">\n <Icon name=\"image\" size={24} />\n <span className=\"ds-asset-empty__title\">{title}</span>\n {description && <span className=\"ds-asset-empty__description\">{description}</span>}\n {action}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ import type { IconName } from "../Icon/icons.cjs";
3
+ export interface AssetGridProps extends HTMLAttributes<HTMLDivElement> {
4
+ /**
5
+ * Renders placeholder tiles instead of children. The grid keeps its
6
+ * geometry, so nothing moves when the real assets arrive.
7
+ */
8
+ isLoading?: boolean;
9
+ /** How many placeholder tiles to show while loading. */
10
+ loadingCount?: number;
11
+ children?: ReactNode;
12
+ }
13
+ /**
14
+ * The media library surface: an auto-filling grid of asset tiles. Sits inside
15
+ * a `TableFrame` when it is the page's collection, bare inside a drawer.
16
+ */
17
+ export declare const AssetGrid: import("react").ForwardRefExoticComponent<AssetGridProps & import("react").RefAttributes<HTMLDivElement>>;
18
+ export interface AssetTileSkeletonProps {
19
+ /** Position in the grid — drives the stagger, nothing else. */
20
+ index?: number;
21
+ }
22
+ /** One loading tile: thumbnail block, name line, meta line. */
23
+ export declare function AssetTileSkeleton({ index }: AssetTileSkeletonProps): import("react").JSX.Element;
24
+ export interface AssetTileProps extends Omit<HTMLAttributes<HTMLDivElement>, "onSelect" | "title"> {
25
+ /** File name, shown in full — asset names are how people find things again. */
26
+ name: string;
27
+ /** Thumbnail source. Omit for a non-image asset and pass an `icon` instead. */
28
+ src?: string;
29
+ /** Glyph shown when there is no thumbnail, or while one fails to load. */
30
+ icon?: IconName;
31
+ /** Second line: dimensions, size, date — whatever the library sorts by. */
32
+ meta?: ReactNode;
33
+ /** Paints the soft fill and the solid rail. Never changes the tile's size. */
34
+ isSelected?: boolean;
35
+ /** The asset is still uploading or processing: dimmed, with a spinner. */
36
+ isPending?: boolean;
37
+ /** Makes the whole tile a selection target. */
38
+ onSelect?: () => void;
39
+ /** Badges or a menu, pinned to the top of the thumbnail. */
40
+ actions?: ReactNode;
41
+ }
42
+ /**
43
+ * One asset in the library. Selection paints a fill and a rail exactly like a
44
+ * table row, so a grid and a list read as the same collection in two shapes.
45
+ */
46
+ export declare const AssetTile: import("react").ForwardRefExoticComponent<AssetTileProps & import("react").RefAttributes<HTMLDivElement>>;
47
+ export interface AssetGridEmptyProps {
48
+ title: string;
49
+ description?: ReactNode;
50
+ action?: ReactNode;
51
+ }
52
+ /** Nothing in the library yet — one action, the one that fills it. */
53
+ export declare function AssetGridEmpty({ title, description, action }: AssetGridEmptyProps): import("react").JSX.Element;
54
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/AssetGrid/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,aAAa,CAAC;AAMrB,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,cAAc,CAAC;IACpE;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,2GAmBpB,CAAC;AAEH,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,EAAE,KAAS,EAAE,EAAE,sBAAsB,+BAWtE;AAED,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAClE,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,2GA0EpB,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,mBAAmB,+BASjF"}
@@ -0,0 +1,54 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ import type { IconName } from "../Icon/icons.js";
3
+ export interface AssetGridProps extends HTMLAttributes<HTMLDivElement> {
4
+ /**
5
+ * Renders placeholder tiles instead of children. The grid keeps its
6
+ * geometry, so nothing moves when the real assets arrive.
7
+ */
8
+ isLoading?: boolean;
9
+ /** How many placeholder tiles to show while loading. */
10
+ loadingCount?: number;
11
+ children?: ReactNode;
12
+ }
13
+ /**
14
+ * The media library surface: an auto-filling grid of asset tiles. Sits inside
15
+ * a `TableFrame` when it is the page's collection, bare inside a drawer.
16
+ */
17
+ export declare const AssetGrid: import("react").ForwardRefExoticComponent<AssetGridProps & import("react").RefAttributes<HTMLDivElement>>;
18
+ export interface AssetTileSkeletonProps {
19
+ /** Position in the grid — drives the stagger, nothing else. */
20
+ index?: number;
21
+ }
22
+ /** One loading tile: thumbnail block, name line, meta line. */
23
+ export declare function AssetTileSkeleton({ index }: AssetTileSkeletonProps): import("react").JSX.Element;
24
+ export interface AssetTileProps extends Omit<HTMLAttributes<HTMLDivElement>, "onSelect" | "title"> {
25
+ /** File name, shown in full — asset names are how people find things again. */
26
+ name: string;
27
+ /** Thumbnail source. Omit for a non-image asset and pass an `icon` instead. */
28
+ src?: string;
29
+ /** Glyph shown when there is no thumbnail, or while one fails to load. */
30
+ icon?: IconName;
31
+ /** Second line: dimensions, size, date — whatever the library sorts by. */
32
+ meta?: ReactNode;
33
+ /** Paints the soft fill and the solid rail. Never changes the tile's size. */
34
+ isSelected?: boolean;
35
+ /** The asset is still uploading or processing: dimmed, with a spinner. */
36
+ isPending?: boolean;
37
+ /** Makes the whole tile a selection target. */
38
+ onSelect?: () => void;
39
+ /** Badges or a menu, pinned to the top of the thumbnail. */
40
+ actions?: ReactNode;
41
+ }
42
+ /**
43
+ * One asset in the library. Selection paints a fill and a rail exactly like a
44
+ * table row, so a grid and a list read as the same collection in two shapes.
45
+ */
46
+ export declare const AssetTile: import("react").ForwardRefExoticComponent<AssetTileProps & import("react").RefAttributes<HTMLDivElement>>;
47
+ export interface AssetGridEmptyProps {
48
+ title: string;
49
+ description?: ReactNode;
50
+ action?: ReactNode;
51
+ }
52
+ /** Nothing in the library yet — one action, the one that fills it. */
53
+ export declare function AssetGridEmpty({ title, description, action }: AssetGridEmptyProps): import("react").JSX.Element;
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AssetGrid/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,aAAa,CAAC;AAMrB,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,cAAc,CAAC;IACpE;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,2GAmBpB,CAAC;AAEH,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,EAAE,KAAS,EAAE,EAAE,sBAAsB,+BAWtE;AAED,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAClE,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,2GA0EpB,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,mBAAmB,+BASjF"}