@entifix/react-controls 0.1.0-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 (471) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/i18n/catalog/en.d.ts +10 -0
  4. package/dist/i18n/catalog/en.d.ts.map +1 -0
  5. package/dist/i18n/catalog/en.js +211 -0
  6. package/dist/i18n/catalog/en.js.map +1 -0
  7. package/dist/i18n/catalog/es.d.ts +275 -0
  8. package/dist/i18n/catalog/es.d.ts.map +1 -0
  9. package/dist/i18n/catalog/es.js +261 -0
  10. package/dist/i18n/catalog/es.js.map +1 -0
  11. package/dist/i18n/catalog/index.d.ts +403 -0
  12. package/dist/i18n/catalog/index.d.ts.map +1 -0
  13. package/dist/i18n/catalog/index.js +23 -0
  14. package/dist/i18n/catalog/index.js.map +1 -0
  15. package/dist/i18n/entity-labels.d.ts +29 -0
  16. package/dist/i18n/entity-labels.d.ts.map +1 -0
  17. package/dist/i18n/entity-labels.js +49 -0
  18. package/dist/i18n/entity-labels.js.map +1 -0
  19. package/dist/i18n/fallback-catalogs.d.ts +5 -0
  20. package/dist/i18n/fallback-catalogs.d.ts.map +1 -0
  21. package/dist/i18n/fallback-catalogs.js +34 -0
  22. package/dist/i18n/fallback-catalogs.js.map +1 -0
  23. package/dist/i18n/i18n-context.d.ts +62 -0
  24. package/dist/i18n/i18n-context.d.ts.map +1 -0
  25. package/dist/i18n/i18n-context.js +128 -0
  26. package/dist/i18n/i18n-context.js.map +1 -0
  27. package/dist/i18n/index.d.ts +5 -0
  28. package/dist/i18n/index.d.ts.map +1 -0
  29. package/dist/i18n/index.js +6 -0
  30. package/dist/i18n/index.js.map +1 -0
  31. package/dist/i18n/spec-support/catalogs.d.ts +2 -0
  32. package/dist/i18n/spec-support/catalogs.d.ts.map +1 -0
  33. package/dist/i18n/spec-support/catalogs.js +142 -0
  34. package/dist/i18n/spec-support/catalogs.js.map +1 -0
  35. package/dist/i18next/index.d.ts +20 -0
  36. package/dist/i18next/index.d.ts.map +1 -0
  37. package/dist/i18next/index.js +60 -0
  38. package/dist/i18next/index.js.map +1 -0
  39. package/dist/index.d.ts +46 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +47 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/preferences/index.d.ts +7 -0
  44. package/dist/preferences/index.d.ts.map +1 -0
  45. package/dist/preferences/index.js +8 -0
  46. package/dist/preferences/index.js.map +1 -0
  47. package/dist/preferences/indexeddb-ui-preferences-state.d.ts +16 -0
  48. package/dist/preferences/indexeddb-ui-preferences-state.d.ts.map +1 -0
  49. package/dist/preferences/indexeddb-ui-preferences-state.js +50 -0
  50. package/dist/preferences/indexeddb-ui-preferences-state.js.map +1 -0
  51. package/dist/preferences/local-storage-ui-preferences-state.d.ts +16 -0
  52. package/dist/preferences/local-storage-ui-preferences-state.d.ts.map +1 -0
  53. package/dist/preferences/local-storage-ui-preferences-state.js +51 -0
  54. package/dist/preferences/local-storage-ui-preferences-state.js.map +1 -0
  55. package/dist/preferences/ui-preferences-context.d.ts +16 -0
  56. package/dist/preferences/ui-preferences-context.d.ts.map +1 -0
  57. package/dist/preferences/ui-preferences-context.js +31 -0
  58. package/dist/preferences/ui-preferences-context.js.map +1 -0
  59. package/dist/preferences/ui-preferences-state.d.ts +23 -0
  60. package/dist/preferences/ui-preferences-state.d.ts.map +1 -0
  61. package/dist/preferences/ui-preferences-state.js +5 -0
  62. package/dist/preferences/ui-preferences-state.js.map +1 -0
  63. package/dist/preferences/use-ui-preference.d.ts +20 -0
  64. package/dist/preferences/use-ui-preference.d.ts.map +1 -0
  65. package/dist/preferences/use-ui-preference.js +72 -0
  66. package/dist/preferences/use-ui-preference.js.map +1 -0
  67. package/dist/preferences/use-viewport-mode.d.ts +33 -0
  68. package/dist/preferences/use-viewport-mode.d.ts.map +1 -0
  69. package/dist/preferences/use-viewport-mode.js +53 -0
  70. package/dist/preferences/use-viewport-mode.js.map +1 -0
  71. package/dist/primitives.d.ts +25 -0
  72. package/dist/primitives.d.ts.map +1 -0
  73. package/dist/primitives.js +54 -0
  74. package/dist/primitives.js.map +1 -0
  75. package/dist/theme/index.d.ts +3 -0
  76. package/dist/theme/index.d.ts.map +1 -0
  77. package/dist/theme/index.js +4 -0
  78. package/dist/theme/index.js.map +1 -0
  79. package/dist/theme/theme-context.d.ts +26 -0
  80. package/dist/theme/theme-context.d.ts.map +1 -0
  81. package/dist/theme/theme-context.js +79 -0
  82. package/dist/theme/theme-context.js.map +1 -0
  83. package/dist/theme/types.d.ts +22 -0
  84. package/dist/theme/types.d.ts.map +1 -0
  85. package/dist/theme/types.js +6 -0
  86. package/dist/theme/types.js.map +1 -0
  87. package/dist/ui/actions/action-surfaces.d.ts +59 -0
  88. package/dist/ui/actions/action-surfaces.d.ts.map +1 -0
  89. package/dist/ui/actions/action-surfaces.js +109 -0
  90. package/dist/ui/actions/action-surfaces.js.map +1 -0
  91. package/dist/ui/actions/index.d.ts +2 -0
  92. package/dist/ui/actions/index.d.ts.map +1 -0
  93. package/dist/ui/actions/index.js +3 -0
  94. package/dist/ui/actions/index.js.map +1 -0
  95. package/dist/ui/atoms/button/button-link.d.ts +27 -0
  96. package/dist/ui/atoms/button/button-link.d.ts.map +1 -0
  97. package/dist/ui/atoms/button/button-link.js +23 -0
  98. package/dist/ui/atoms/button/button-link.js.map +1 -0
  99. package/dist/ui/atoms/button/button-recipe.d.ts +19 -0
  100. package/dist/ui/atoms/button/button-recipe.d.ts.map +1 -0
  101. package/dist/ui/atoms/button/button-recipe.js +42 -0
  102. package/dist/ui/atoms/button/button-recipe.js.map +1 -0
  103. package/dist/ui/atoms/button/button.d.ts +7 -0
  104. package/dist/ui/atoms/button/button.d.ts.map +1 -0
  105. package/dist/ui/atoms/button/button.js +22 -0
  106. package/dist/ui/atoms/button/button.js.map +1 -0
  107. package/dist/ui/atoms/button/index.d.ts +4 -0
  108. package/dist/ui/atoms/button/index.d.ts.map +1 -0
  109. package/dist/ui/atoms/button/index.js +5 -0
  110. package/dist/ui/atoms/button/index.js.map +1 -0
  111. package/dist/ui/atoms/cell-value/cell-value.d.ts +12 -0
  112. package/dist/ui/atoms/cell-value/cell-value.d.ts.map +1 -0
  113. package/dist/ui/atoms/cell-value/cell-value.js +101 -0
  114. package/dist/ui/atoms/cell-value/cell-value.js.map +1 -0
  115. package/dist/ui/atoms/cell-value/index.d.ts +2 -0
  116. package/dist/ui/atoms/cell-value/index.d.ts.map +1 -0
  117. package/dist/ui/atoms/cell-value/index.js +3 -0
  118. package/dist/ui/atoms/cell-value/index.js.map +1 -0
  119. package/dist/ui/atoms/field/checkbox.d.ts +35 -0
  120. package/dist/ui/atoms/field/checkbox.d.ts.map +1 -0
  121. package/dist/ui/atoms/field/checkbox.js +46 -0
  122. package/dist/ui/atoms/field/checkbox.js.map +1 -0
  123. package/dist/ui/atoms/field/field.d.ts +4 -0
  124. package/dist/ui/atoms/field/field.d.ts.map +1 -0
  125. package/dist/ui/atoms/field/field.js +29 -0
  126. package/dist/ui/atoms/field/field.js.map +1 -0
  127. package/dist/ui/atoms/field/index.d.ts +3 -0
  128. package/dist/ui/atoms/field/index.d.ts.map +1 -0
  129. package/dist/ui/atoms/field/index.js +4 -0
  130. package/dist/ui/atoms/field/index.js.map +1 -0
  131. package/dist/ui/atoms/field-control/field-control.d.ts +50 -0
  132. package/dist/ui/atoms/field-control/field-control.d.ts.map +1 -0
  133. package/dist/ui/atoms/field-control/field-control.js +82 -0
  134. package/dist/ui/atoms/field-control/field-control.js.map +1 -0
  135. package/dist/ui/atoms/field-control/index.d.ts +2 -0
  136. package/dist/ui/atoms/field-control/index.d.ts.map +1 -0
  137. package/dist/ui/atoms/field-control/index.js +3 -0
  138. package/dist/ui/atoms/field-control/index.js.map +1 -0
  139. package/dist/ui/atoms/skeleton/index.d.ts +2 -0
  140. package/dist/ui/atoms/skeleton/index.d.ts.map +1 -0
  141. package/dist/ui/atoms/skeleton/index.js +3 -0
  142. package/dist/ui/atoms/skeleton/index.js.map +1 -0
  143. package/dist/ui/atoms/skeleton/skeleton.d.ts +21 -0
  144. package/dist/ui/atoms/skeleton/skeleton.d.ts.map +1 -0
  145. package/dist/ui/atoms/skeleton/skeleton.js +33 -0
  146. package/dist/ui/atoms/skeleton/skeleton.js.map +1 -0
  147. package/dist/ui/atoms/table/index.d.ts +2 -0
  148. package/dist/ui/atoms/table/index.d.ts.map +1 -0
  149. package/dist/ui/atoms/table/index.js +3 -0
  150. package/dist/ui/atoms/table/index.js.map +1 -0
  151. package/dist/ui/atoms/table/table.d.ts +30 -0
  152. package/dist/ui/atoms/table/table.d.ts.map +1 -0
  153. package/dist/ui/atoms/table/table.js +84 -0
  154. package/dist/ui/atoms/table/table.js.map +1 -0
  155. package/dist/ui/atoms/text/index.d.ts +2 -0
  156. package/dist/ui/atoms/text/index.d.ts.map +1 -0
  157. package/dist/ui/atoms/text/index.js +3 -0
  158. package/dist/ui/atoms/text/index.js.map +1 -0
  159. package/dist/ui/atoms/text/text.d.ts +86 -0
  160. package/dist/ui/atoms/text/text.d.ts.map +1 -0
  161. package/dist/ui/atoms/text/text.js +221 -0
  162. package/dist/ui/atoms/text/text.js.map +1 -0
  163. package/dist/ui/layout/_demo.d.ts +6 -0
  164. package/dist/ui/layout/_demo.d.ts.map +1 -0
  165. package/dist/ui/layout/_demo.js +11 -0
  166. package/dist/ui/layout/_demo.js.map +1 -0
  167. package/dist/ui/layout/_shared.d.ts +9 -0
  168. package/dist/ui/layout/_shared.d.ts.map +1 -0
  169. package/dist/ui/layout/_shared.js +30 -0
  170. package/dist/ui/layout/_shared.js.map +1 -0
  171. package/dist/ui/layout/box/box.d.ts +10 -0
  172. package/dist/ui/layout/box/box.d.ts.map +1 -0
  173. package/dist/ui/layout/box/box.js +28 -0
  174. package/dist/ui/layout/box/box.js.map +1 -0
  175. package/dist/ui/layout/box/index.d.ts +2 -0
  176. package/dist/ui/layout/box/index.d.ts.map +1 -0
  177. package/dist/ui/layout/box/index.js +3 -0
  178. package/dist/ui/layout/box/index.js.map +1 -0
  179. package/dist/ui/layout/center/center.d.ts +13 -0
  180. package/dist/ui/layout/center/center.d.ts.map +1 -0
  181. package/dist/ui/layout/center/center.js +22 -0
  182. package/dist/ui/layout/center/center.js.map +1 -0
  183. package/dist/ui/layout/center/index.d.ts +2 -0
  184. package/dist/ui/layout/center/index.d.ts.map +1 -0
  185. package/dist/ui/layout/center/index.js +3 -0
  186. package/dist/ui/layout/center/index.js.map +1 -0
  187. package/dist/ui/layout/cluster/cluster.d.ts +11 -0
  188. package/dist/ui/layout/cluster/cluster.d.ts.map +1 -0
  189. package/dist/ui/layout/cluster/cluster.js +19 -0
  190. package/dist/ui/layout/cluster/cluster.js.map +1 -0
  191. package/dist/ui/layout/cluster/index.d.ts +2 -0
  192. package/dist/ui/layout/cluster/index.d.ts.map +1 -0
  193. package/dist/ui/layout/cluster/index.js +3 -0
  194. package/dist/ui/layout/cluster/index.js.map +1 -0
  195. package/dist/ui/layout/cover/cover.d.ts +26 -0
  196. package/dist/ui/layout/cover/cover.d.ts.map +1 -0
  197. package/dist/ui/layout/cover/cover.js +57 -0
  198. package/dist/ui/layout/cover/cover.js.map +1 -0
  199. package/dist/ui/layout/cover/index.d.ts +2 -0
  200. package/dist/ui/layout/cover/index.d.ts.map +1 -0
  201. package/dist/ui/layout/cover/index.js +3 -0
  202. package/dist/ui/layout/cover/index.js.map +1 -0
  203. package/dist/ui/layout/grid/grid.d.ts +14 -0
  204. package/dist/ui/layout/grid/grid.d.ts.map +1 -0
  205. package/dist/ui/layout/grid/grid.js +25 -0
  206. package/dist/ui/layout/grid/grid.js.map +1 -0
  207. package/dist/ui/layout/grid/index.d.ts +2 -0
  208. package/dist/ui/layout/grid/index.d.ts.map +1 -0
  209. package/dist/ui/layout/grid/index.js +3 -0
  210. package/dist/ui/layout/grid/index.js.map +1 -0
  211. package/dist/ui/layout/sidebar/index.d.ts +2 -0
  212. package/dist/ui/layout/sidebar/index.d.ts.map +1 -0
  213. package/dist/ui/layout/sidebar/index.js +3 -0
  214. package/dist/ui/layout/sidebar/index.js.map +1 -0
  215. package/dist/ui/layout/sidebar/sidebar.d.ts +33 -0
  216. package/dist/ui/layout/sidebar/sidebar.d.ts.map +1 -0
  217. package/dist/ui/layout/sidebar/sidebar.js +54 -0
  218. package/dist/ui/layout/sidebar/sidebar.js.map +1 -0
  219. package/dist/ui/layout/switcher/index.d.ts +2 -0
  220. package/dist/ui/layout/switcher/index.d.ts.map +1 -0
  221. package/dist/ui/layout/switcher/index.js +3 -0
  222. package/dist/ui/layout/switcher/index.js.map +1 -0
  223. package/dist/ui/layout/switcher/switcher.d.ts +15 -0
  224. package/dist/ui/layout/switcher/switcher.d.ts.map +1 -0
  225. package/dist/ui/layout/switcher/switcher.js +26 -0
  226. package/dist/ui/layout/switcher/switcher.js.map +1 -0
  227. package/dist/ui/molecules/breadcrumbs/breadcrumbs.d.ts +27 -0
  228. package/dist/ui/molecules/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  229. package/dist/ui/molecules/breadcrumbs/breadcrumbs.js +50 -0
  230. package/dist/ui/molecules/breadcrumbs/breadcrumbs.js.map +1 -0
  231. package/dist/ui/molecules/breadcrumbs/index.d.ts +2 -0
  232. package/dist/ui/molecules/breadcrumbs/index.d.ts.map +1 -0
  233. package/dist/ui/molecules/breadcrumbs/index.js +3 -0
  234. package/dist/ui/molecules/breadcrumbs/index.js.map +1 -0
  235. package/dist/ui/molecules/bulk-action-bar/bulk-action-bar.d.ts +47 -0
  236. package/dist/ui/molecules/bulk-action-bar/bulk-action-bar.d.ts.map +1 -0
  237. package/dist/ui/molecules/bulk-action-bar/bulk-action-bar.js +63 -0
  238. package/dist/ui/molecules/bulk-action-bar/bulk-action-bar.js.map +1 -0
  239. package/dist/ui/molecules/bulk-action-bar/index.d.ts +2 -0
  240. package/dist/ui/molecules/bulk-action-bar/index.d.ts.map +1 -0
  241. package/dist/ui/molecules/bulk-action-bar/index.js +3 -0
  242. package/dist/ui/molecules/bulk-action-bar/index.js.map +1 -0
  243. package/dist/ui/molecules/bulk-result/bulk-result.d.ts +31 -0
  244. package/dist/ui/molecules/bulk-result/bulk-result.d.ts.map +1 -0
  245. package/dist/ui/molecules/bulk-result/bulk-result.js +86 -0
  246. package/dist/ui/molecules/bulk-result/bulk-result.js.map +1 -0
  247. package/dist/ui/molecules/bulk-result/index.d.ts +2 -0
  248. package/dist/ui/molecules/bulk-result/index.d.ts.map +1 -0
  249. package/dist/ui/molecules/bulk-result/index.js +3 -0
  250. package/dist/ui/molecules/bulk-result/index.js.map +1 -0
  251. package/dist/ui/molecules/card/card.d.ts +5 -0
  252. package/dist/ui/molecules/card/card.d.ts.map +1 -0
  253. package/dist/ui/molecules/card/card.js +14 -0
  254. package/dist/ui/molecules/card/card.js.map +1 -0
  255. package/dist/ui/molecules/card/index.d.ts +2 -0
  256. package/dist/ui/molecules/card/index.d.ts.map +1 -0
  257. package/dist/ui/molecules/card/index.js +3 -0
  258. package/dist/ui/molecules/card/index.js.map +1 -0
  259. package/dist/ui/molecules/column-settings/column-settings.d.ts +29 -0
  260. package/dist/ui/molecules/column-settings/column-settings.d.ts.map +1 -0
  261. package/dist/ui/molecules/column-settings/column-settings.js +117 -0
  262. package/dist/ui/molecules/column-settings/column-settings.js.map +1 -0
  263. package/dist/ui/molecules/column-settings/index.d.ts +2 -0
  264. package/dist/ui/molecules/column-settings/index.d.ts.map +1 -0
  265. package/dist/ui/molecules/column-settings/index.js +3 -0
  266. package/dist/ui/molecules/column-settings/index.js.map +1 -0
  267. package/dist/ui/molecules/confirm-dialog/confirm-dialog.d.ts +31 -0
  268. package/dist/ui/molecules/confirm-dialog/confirm-dialog.d.ts.map +1 -0
  269. package/dist/ui/molecules/confirm-dialog/confirm-dialog.js +68 -0
  270. package/dist/ui/molecules/confirm-dialog/confirm-dialog.js.map +1 -0
  271. package/dist/ui/molecules/confirm-dialog/index.d.ts +2 -0
  272. package/dist/ui/molecules/confirm-dialog/index.d.ts.map +1 -0
  273. package/dist/ui/molecules/confirm-dialog/index.js +3 -0
  274. package/dist/ui/molecules/confirm-dialog/index.js.map +1 -0
  275. package/dist/ui/molecules/drawer/drawer.d.ts +25 -0
  276. package/dist/ui/molecules/drawer/drawer.d.ts.map +1 -0
  277. package/dist/ui/molecules/drawer/drawer.js +60 -0
  278. package/dist/ui/molecules/drawer/drawer.js.map +1 -0
  279. package/dist/ui/molecules/drawer/index.d.ts +2 -0
  280. package/dist/ui/molecules/drawer/index.d.ts.map +1 -0
  281. package/dist/ui/molecules/drawer/index.js +3 -0
  282. package/dist/ui/molecules/drawer/index.js.map +1 -0
  283. package/dist/ui/molecules/entity-link-input/entity-link-input.d.ts +36 -0
  284. package/dist/ui/molecules/entity-link-input/entity-link-input.d.ts.map +1 -0
  285. package/dist/ui/molecules/entity-link-input/entity-link-input.js +191 -0
  286. package/dist/ui/molecules/entity-link-input/entity-link-input.js.map +1 -0
  287. package/dist/ui/molecules/entity-link-input/index.d.ts +2 -0
  288. package/dist/ui/molecules/entity-link-input/index.d.ts.map +1 -0
  289. package/dist/ui/molecules/entity-link-input/index.js +3 -0
  290. package/dist/ui/molecules/entity-link-input/index.js.map +1 -0
  291. package/dist/ui/molecules/entity-link-picker/entity-link-picker.d.ts +19 -0
  292. package/dist/ui/molecules/entity-link-picker/entity-link-picker.d.ts.map +1 -0
  293. package/dist/ui/molecules/entity-link-picker/entity-link-picker.js +78 -0
  294. package/dist/ui/molecules/entity-link-picker/entity-link-picker.js.map +1 -0
  295. package/dist/ui/molecules/entity-link-picker/index.d.ts +2 -0
  296. package/dist/ui/molecules/entity-link-picker/index.d.ts.map +1 -0
  297. package/dist/ui/molecules/entity-link-picker/index.js +3 -0
  298. package/dist/ui/molecules/entity-link-picker/index.js.map +1 -0
  299. package/dist/ui/molecules/entity-record-card/entity-record-card.d.ts +30 -0
  300. package/dist/ui/molecules/entity-record-card/entity-record-card.d.ts.map +1 -0
  301. package/dist/ui/molecules/entity-record-card/entity-record-card.js +39 -0
  302. package/dist/ui/molecules/entity-record-card/entity-record-card.js.map +1 -0
  303. package/dist/ui/molecules/entity-record-card/index.d.ts +2 -0
  304. package/dist/ui/molecules/entity-record-card/index.d.ts.map +1 -0
  305. package/dist/ui/molecules/entity-record-card/index.js +3 -0
  306. package/dist/ui/molecules/entity-record-card/index.js.map +1 -0
  307. package/dist/ui/molecules/filter-builder/filter-builder.d.ts +19 -0
  308. package/dist/ui/molecules/filter-builder/filter-builder.d.ts.map +1 -0
  309. package/dist/ui/molecules/filter-builder/filter-builder.js +333 -0
  310. package/dist/ui/molecules/filter-builder/filter-builder.js.map +1 -0
  311. package/dist/ui/molecules/filter-builder/filter-operators.d.ts +20 -0
  312. package/dist/ui/molecules/filter-builder/filter-operators.d.ts.map +1 -0
  313. package/dist/ui/molecules/filter-builder/filter-operators.js +56 -0
  314. package/dist/ui/molecules/filter-builder/filter-operators.js.map +1 -0
  315. package/dist/ui/molecules/filter-builder/index.d.ts +3 -0
  316. package/dist/ui/molecules/filter-builder/index.d.ts.map +1 -0
  317. package/dist/ui/molecules/filter-builder/index.js +4 -0
  318. package/dist/ui/molecules/filter-builder/index.js.map +1 -0
  319. package/dist/ui/molecules/loading-boundary/index.d.ts +2 -0
  320. package/dist/ui/molecules/loading-boundary/index.d.ts.map +1 -0
  321. package/dist/ui/molecules/loading-boundary/index.js +3 -0
  322. package/dist/ui/molecules/loading-boundary/index.js.map +1 -0
  323. package/dist/ui/molecules/loading-boundary/loading-boundary.d.ts +27 -0
  324. package/dist/ui/molecules/loading-boundary/loading-boundary.d.ts.map +1 -0
  325. package/dist/ui/molecules/loading-boundary/loading-boundary.js +42 -0
  326. package/dist/ui/molecules/loading-boundary/loading-boundary.js.map +1 -0
  327. package/dist/ui/molecules/menu/index.d.ts +2 -0
  328. package/dist/ui/molecules/menu/index.d.ts.map +1 -0
  329. package/dist/ui/molecules/menu/index.js +3 -0
  330. package/dist/ui/molecules/menu/index.js.map +1 -0
  331. package/dist/ui/molecules/menu/menu.d.ts +37 -0
  332. package/dist/ui/molecules/menu/menu.d.ts.map +1 -0
  333. package/dist/ui/molecules/menu/menu.js +71 -0
  334. package/dist/ui/molecules/menu/menu.js.map +1 -0
  335. package/dist/ui/molecules/pagination/index.d.ts +2 -0
  336. package/dist/ui/molecules/pagination/index.d.ts.map +1 -0
  337. package/dist/ui/molecules/pagination/index.js +3 -0
  338. package/dist/ui/molecules/pagination/index.js.map +1 -0
  339. package/dist/ui/molecules/pagination/pagination.d.ts +13 -0
  340. package/dist/ui/molecules/pagination/pagination.d.ts.map +1 -0
  341. package/dist/ui/molecules/pagination/pagination.js +68 -0
  342. package/dist/ui/molecules/pagination/pagination.js.map +1 -0
  343. package/dist/ui/molecules/sort-builder/index.d.ts +2 -0
  344. package/dist/ui/molecules/sort-builder/index.d.ts.map +1 -0
  345. package/dist/ui/molecules/sort-builder/index.js +3 -0
  346. package/dist/ui/molecules/sort-builder/index.js.map +1 -0
  347. package/dist/ui/molecules/sort-builder/sort-builder.d.ts +18 -0
  348. package/dist/ui/molecules/sort-builder/sort-builder.d.ts.map +1 -0
  349. package/dist/ui/molecules/sort-builder/sort-builder.js +185 -0
  350. package/dist/ui/molecules/sort-builder/sort-builder.js.map +1 -0
  351. package/dist/ui/molecules/stack/index.d.ts +2 -0
  352. package/dist/ui/molecules/stack/index.d.ts.map +1 -0
  353. package/dist/ui/molecules/stack/index.js +3 -0
  354. package/dist/ui/molecules/stack/index.js.map +1 -0
  355. package/dist/ui/molecules/stack/stack.d.ts +12 -0
  356. package/dist/ui/molecules/stack/stack.d.ts.map +1 -0
  357. package/dist/ui/molecules/stack/stack.js +36 -0
  358. package/dist/ui/molecules/stack/stack.js.map +1 -0
  359. package/dist/ui/molecules/tab-strip/index.d.ts +2 -0
  360. package/dist/ui/molecules/tab-strip/index.d.ts.map +1 -0
  361. package/dist/ui/molecules/tab-strip/index.js +3 -0
  362. package/dist/ui/molecules/tab-strip/index.js.map +1 -0
  363. package/dist/ui/molecules/tab-strip/tab-strip.d.ts +29 -0
  364. package/dist/ui/molecules/tab-strip/tab-strip.d.ts.map +1 -0
  365. package/dist/ui/molecules/tab-strip/tab-strip.js +82 -0
  366. package/dist/ui/molecules/tab-strip/tab-strip.js.map +1 -0
  367. package/dist/ui/molecules/table-toolbar/index.d.ts +2 -0
  368. package/dist/ui/molecules/table-toolbar/index.d.ts.map +1 -0
  369. package/dist/ui/molecules/table-toolbar/index.js +3 -0
  370. package/dist/ui/molecules/table-toolbar/index.js.map +1 -0
  371. package/dist/ui/molecules/table-toolbar/table-toolbar.d.ts +13 -0
  372. package/dist/ui/molecules/table-toolbar/table-toolbar.d.ts.map +1 -0
  373. package/dist/ui/molecules/table-toolbar/table-toolbar.js +28 -0
  374. package/dist/ui/molecules/table-toolbar/table-toolbar.js.map +1 -0
  375. package/dist/ui/molecules/theme-switcher/index.d.ts +2 -0
  376. package/dist/ui/molecules/theme-switcher/index.d.ts.map +1 -0
  377. package/dist/ui/molecules/theme-switcher/index.js +3 -0
  378. package/dist/ui/molecules/theme-switcher/index.js.map +1 -0
  379. package/dist/ui/molecules/theme-switcher/theme-switcher.d.ts +6 -0
  380. package/dist/ui/molecules/theme-switcher/theme-switcher.d.ts.map +1 -0
  381. package/dist/ui/molecules/theme-switcher/theme-switcher.js +24 -0
  382. package/dist/ui/molecules/theme-switcher/theme-switcher.js.map +1 -0
  383. package/dist/ui/organisms/command-palette/command-palette.d.ts +67 -0
  384. package/dist/ui/organisms/command-palette/command-palette.d.ts.map +1 -0
  385. package/dist/ui/organisms/command-palette/command-palette.js +226 -0
  386. package/dist/ui/organisms/command-palette/command-palette.js.map +1 -0
  387. package/dist/ui/organisms/command-palette/index.d.ts +2 -0
  388. package/dist/ui/organisms/command-palette/index.d.ts.map +1 -0
  389. package/dist/ui/organisms/command-palette/index.js +3 -0
  390. package/dist/ui/organisms/command-palette/index.js.map +1 -0
  391. package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.d.ts +43 -0
  392. package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.d.ts.map +1 -0
  393. package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.js +281 -0
  394. package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.js.map +1 -0
  395. package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.types.d.ts +49 -0
  396. package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.types.d.ts.map +1 -0
  397. package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.types.js +3 -0
  398. package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.types.js.map +1 -0
  399. package/dist/ui/organisms/entity-detail-grid/index.d.ts +3 -0
  400. package/dist/ui/organisms/entity-detail-grid/index.d.ts.map +1 -0
  401. package/dist/ui/organisms/entity-detail-grid/index.js +4 -0
  402. package/dist/ui/organisms/entity-detail-grid/index.js.map +1 -0
  403. package/dist/ui/organisms/entity-form/entity-form-slots.d.ts +53 -0
  404. package/dist/ui/organisms/entity-form/entity-form-slots.d.ts.map +1 -0
  405. package/dist/ui/organisms/entity-form/entity-form-slots.js +44 -0
  406. package/dist/ui/organisms/entity-form/entity-form-slots.js.map +1 -0
  407. package/dist/ui/organisms/entity-form/entity-form.d.ts +4 -0
  408. package/dist/ui/organisms/entity-form/entity-form.d.ts.map +1 -0
  409. package/dist/ui/organisms/entity-form/entity-form.js +494 -0
  410. package/dist/ui/organisms/entity-form/entity-form.js.map +1 -0
  411. package/dist/ui/organisms/entity-form/entity-form.types.d.ts +151 -0
  412. package/dist/ui/organisms/entity-form/entity-form.types.d.ts.map +1 -0
  413. package/dist/ui/organisms/entity-form/entity-form.types.js +3 -0
  414. package/dist/ui/organisms/entity-form/entity-form.types.js.map +1 -0
  415. package/dist/ui/organisms/entity-form/index.d.ts +5 -0
  416. package/dist/ui/organisms/entity-form/index.d.ts.map +1 -0
  417. package/dist/ui/organisms/entity-form/index.js +6 -0
  418. package/dist/ui/organisms/entity-form/index.js.map +1 -0
  419. package/dist/ui/organisms/entity-form/use-entity-form-fields.d.ts +13 -0
  420. package/dist/ui/organisms/entity-form/use-entity-form-fields.d.ts.map +1 -0
  421. package/dist/ui/organisms/entity-form/use-entity-form-fields.js +50 -0
  422. package/dist/ui/organisms/entity-form/use-entity-form-fields.js.map +1 -0
  423. package/dist/ui/organisms/entity-table/entity-table-slots.d.ts +55 -0
  424. package/dist/ui/organisms/entity-table/entity-table-slots.d.ts.map +1 -0
  425. package/dist/ui/organisms/entity-table/entity-table-slots.js +50 -0
  426. package/dist/ui/organisms/entity-table/entity-table-slots.js.map +1 -0
  427. package/dist/ui/organisms/entity-table/entity-table.d.ts +4 -0
  428. package/dist/ui/organisms/entity-table/entity-table.d.ts.map +1 -0
  429. package/dist/ui/organisms/entity-table/entity-table.js +529 -0
  430. package/dist/ui/organisms/entity-table/entity-table.js.map +1 -0
  431. package/dist/ui/organisms/entity-table/entity-table.types.d.ts +126 -0
  432. package/dist/ui/organisms/entity-table/entity-table.types.d.ts.map +1 -0
  433. package/dist/ui/organisms/entity-table/entity-table.types.js +3 -0
  434. package/dist/ui/organisms/entity-table/entity-table.types.js.map +1 -0
  435. package/dist/ui/organisms/entity-table/index.d.ts +5 -0
  436. package/dist/ui/organisms/entity-table/index.d.ts.map +1 -0
  437. package/dist/ui/organisms/entity-table/index.js +6 -0
  438. package/dist/ui/organisms/entity-table/index.js.map +1 -0
  439. package/dist/ui/organisms/entity-table/use-entity-table-columns.d.ts +29 -0
  440. package/dist/ui/organisms/entity-table/use-entity-table-columns.d.ts.map +1 -0
  441. package/dist/ui/organisms/entity-table/use-entity-table-columns.js +103 -0
  442. package/dist/ui/organisms/entity-table/use-entity-table-columns.js.map +1 -0
  443. package/dist/ui/organisms/top-bar/index.d.ts +2 -0
  444. package/dist/ui/organisms/top-bar/index.d.ts.map +1 -0
  445. package/dist/ui/organisms/top-bar/index.js +3 -0
  446. package/dist/ui/organisms/top-bar/index.js.map +1 -0
  447. package/dist/ui/organisms/top-bar/top-bar.d.ts +20 -0
  448. package/dist/ui/organisms/top-bar/top-bar.d.ts.map +1 -0
  449. package/dist/ui/organisms/top-bar/top-bar.js +43 -0
  450. package/dist/ui/organisms/top-bar/top-bar.js.map +1 -0
  451. package/dist/ui/organisms/wizard/index.d.ts +3 -0
  452. package/dist/ui/organisms/wizard/index.d.ts.map +1 -0
  453. package/dist/ui/organisms/wizard/index.js +4 -0
  454. package/dist/ui/organisms/wizard/index.js.map +1 -0
  455. package/dist/ui/organisms/wizard/wizard.d.ts +21 -0
  456. package/dist/ui/organisms/wizard/wizard.d.ts.map +1 -0
  457. package/dist/ui/organisms/wizard/wizard.js +260 -0
  458. package/dist/ui/organisms/wizard/wizard.js.map +1 -0
  459. package/dist/ui/organisms/wizard/wizard.types.d.ts +83 -0
  460. package/dist/ui/organisms/wizard/wizard.types.d.ts.map +1 -0
  461. package/dist/ui/organisms/wizard/wizard.types.js +3 -0
  462. package/dist/ui/organisms/wizard/wizard.types.js.map +1 -0
  463. package/dist/ui/utils/cn.d.ts +4 -0
  464. package/dist/ui/utils/cn.d.ts.map +1 -0
  465. package/dist/ui/utils/cn.js +5 -0
  466. package/dist/ui/utils/cn.js.map +1 -0
  467. package/dist/ui/utils/use-hotkey.d.ts +31 -0
  468. package/dist/ui/utils/use-hotkey.d.ts.map +1 -0
  469. package/dist/ui/utils/use-hotkey.js +69 -0
  470. package/dist/ui/utils/use-hotkey.js.map +1 -0
  471. package/package.json +118 -0
@@ -0,0 +1,86 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { failedIds, succeededCount } from '@entifix/core';
4
+ import { useT, useTranslateKey } from '../../../i18n/index.js';
5
+ import { Button } from '../../atoms/button/index.js';
6
+ import { cn } from '../../utils/cn.js';
7
+ /**
8
+ * What a bulk action actually did, per row.
9
+ *
10
+ * The requirement this exists for: 40 selected, 3 fail. A single notice lies
11
+ * whichever way it is written — as a failure it hides the 37 rows that were
12
+ * written, and as a success it hides the 3 that were not, which is worse
13
+ * because the user walks away believing the work is done. So both counts are
14
+ * always stated, and every failure is named with its own reason.
15
+ *
16
+ * `role="status"`, not `role="alert"`: a partial failure is an outcome to read,
17
+ * not an interruption, and `alert` on a list this long is hostile. The region
18
+ * is `tabIndex={-1}` so the caller can move focus to it once the run ends,
19
+ * which is the only reliable way a keyboard user learns the result arrived.
20
+ */ export function BulkResult({ outcomes, labelFor, onRetryFailed, onDismiss, busy = false, className }) {
21
+ const t = useT();
22
+ const translateKey = useTranslateKey();
23
+ const failed = outcomes.filter((outcome)=>!outcome.ok);
24
+ const succeeded = succeededCount(outcomes);
25
+ return /*#__PURE__*/ _jsxs("div", {
26
+ role: "status",
27
+ tabIndex: -1,
28
+ "aria-label": t('bulk.resultLabel'),
29
+ "data-testid": "bulk-result",
30
+ className: cn('flex flex-col gap-2xs rounded-lg border border-border bg-surface-elevated px-s py-2xs', className),
31
+ children: [
32
+ /*#__PURE__*/ _jsxs("div", {
33
+ className: "flex flex-wrap items-center gap-2xs",
34
+ children: [
35
+ /*#__PURE__*/ _jsx("span", {
36
+ className: "text-step-sm text-content",
37
+ children: t('bulk.succeeded', {
38
+ count: succeeded
39
+ })
40
+ }),
41
+ failed.length > 0 && /*#__PURE__*/ _jsx("span", {
42
+ className: "text-step-sm text-danger",
43
+ children: t('bulk.failed', {
44
+ count: failed.length
45
+ })
46
+ }),
47
+ failed.length > 0 && onRetryFailed && /*#__PURE__*/ _jsx(Button, {
48
+ type: "button",
49
+ variant: "secondary",
50
+ size: "sm",
51
+ disabled: busy,
52
+ onClick: ()=>onRetryFailed(failedIds(outcomes)),
53
+ children: t('bulk.retryFailed')
54
+ }),
55
+ /*#__PURE__*/ _jsx(Button, {
56
+ type: "button",
57
+ variant: "ghost",
58
+ size: "sm",
59
+ disabled: busy,
60
+ onClick: onDismiss,
61
+ children: t('bulk.dismiss')
62
+ })
63
+ ]
64
+ }),
65
+ failed.length > 0 && /*#__PURE__*/ _jsx("ul", {
66
+ className: "flex flex-col gap-3xs",
67
+ children: failed.map((outcome)=>{
68
+ var _ref, _outcome_code;
69
+ return /*#__PURE__*/ _jsxs("li", {
70
+ className: "text-step-sm text-content-muted",
71
+ children: [
72
+ /*#__PURE__*/ _jsx("span", {
73
+ className: "text-content",
74
+ children: (_ref = labelFor == null ? void 0 : labelFor(outcome.id)) != null ? _ref : String(outcome.id)
75
+ }),
76
+ ' — ',
77
+ translateKey(`errors:${(_outcome_code = outcome.code) != null ? _outcome_code : 'unexpected'}`)
78
+ ]
79
+ }, String(outcome.id));
80
+ })
81
+ })
82
+ ]
83
+ });
84
+ }
85
+
86
+ //# sourceMappingURL=bulk-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/bulk-result/bulk-result.tsx"],"sourcesContent":["'use client';\n\nimport {\n type BulkOutcome,\n type EntityId,\n failedIds,\n succeededCount,\n} from '@entifix/core';\n\nimport { useT, useTranslateKey } from '../../../i18n/index.js';\nimport { Button } from '../../atoms/button/index.js';\nimport { cn } from '../../utils/cn.js';\n\nexport interface BulkResultProps {\n outcomes: readonly BulkOutcome[];\n /**\n * How a failed row is named to the user. An id is not an answer to \"which\n * ones failed\" — the caller holds the rows and can render the same label the\n * table shows. Falls back to the id when the row is no longer on the page.\n */\n labelFor?: (id: EntityId) => string | undefined;\n /** Re-runs the failures **only**. Absent hides the affordance. */\n onRetryFailed?: (ids: EntityId[]) => void;\n onDismiss: () => void;\n busy?: boolean;\n className?: string;\n}\n\n/**\n * What a bulk action actually did, per row.\n *\n * The requirement this exists for: 40 selected, 3 fail. A single notice lies\n * whichever way it is written — as a failure it hides the 37 rows that were\n * written, and as a success it hides the 3 that were not, which is worse\n * because the user walks away believing the work is done. So both counts are\n * always stated, and every failure is named with its own reason.\n *\n * `role=\"status\"`, not `role=\"alert\"`: a partial failure is an outcome to read,\n * not an interruption, and `alert` on a list this long is hostile. The region\n * is `tabIndex={-1}` so the caller can move focus to it once the run ends,\n * which is the only reliable way a keyboard user learns the result arrived.\n */\nexport function BulkResult({\n outcomes,\n labelFor,\n onRetryFailed,\n onDismiss,\n busy = false,\n className,\n}: BulkResultProps) {\n const t = useT();\n const translateKey = useTranslateKey();\n\n const failed = outcomes.filter(outcome => !outcome.ok);\n const succeeded = succeededCount(outcomes);\n\n return (\n <div\n role=\"status\"\n tabIndex={-1}\n aria-label={t('bulk.resultLabel')}\n data-testid=\"bulk-result\"\n className={cn(\n 'flex flex-col gap-2xs rounded-lg border border-border bg-surface-elevated px-s py-2xs',\n className,\n )}\n >\n <div className=\"flex flex-wrap items-center gap-2xs\">\n <span className=\"text-step-sm text-content\">\n {t('bulk.succeeded', { count: succeeded })}\n </span>\n {failed.length > 0 && (\n <span className=\"text-step-sm text-danger\">\n {t('bulk.failed', { count: failed.length })}\n </span>\n )}\n {failed.length > 0 && onRetryFailed && (\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n disabled={busy}\n onClick={() => onRetryFailed(failedIds(outcomes))}\n >\n {t('bulk.retryFailed')}\n </Button>\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={busy}\n onClick={onDismiss}\n >\n {t('bulk.dismiss')}\n </Button>\n </div>\n\n {failed.length > 0 && (\n <ul className=\"flex flex-col gap-3xs\">\n {failed.map(outcome => (\n <li\n key={String(outcome.id)}\n className=\"text-step-sm text-content-muted\"\n >\n <span className=\"text-content\">\n {labelFor?.(outcome.id) ?? String(outcome.id)}\n </span>\n {' — '}\n {/* The reason is a *code*, resolved through the shared `errors`\n catalog — the same vocabulary a service's `{ error, code }`\n body is rendered from, so a new failure reason is\n translatable rather than English, and `@r10c/i18n-check`\n fails the build on one the catalog lacks. `unexpected` is the\n browser-side fallback the catalog already carries. */}\n {translateKey(`errors:${outcome.code ?? 'unexpected'}`)}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"],"names":["failedIds","succeededCount","useT","useTranslateKey","Button","cn","BulkResult","outcomes","labelFor","onRetryFailed","onDismiss","busy","className","t","translateKey","failed","filter","outcome","ok","succeeded","div","role","tabIndex","aria-label","data-testid","span","count","length","type","variant","size","disabled","onClick","ul","map","li","id","String","code"],"mappings":"AAAA;;AAEA,SAGEA,SAAS,EACTC,cAAc,QACT,gBAAgB;AAEvB,SAASC,IAAI,EAAEC,eAAe,QAAQ,yBAAyB;AAC/D,SAASC,MAAM,QAAQ,8BAA8B;AACrD,SAASC,EAAE,QAAQ,oBAAoB;AAiBvC;;;;;;;;;;;;;CAaC,GACD,OAAO,SAASC,WAAW,EACzBC,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,SAAS,EACTC,OAAO,KAAK,EACZC,SAAS,EACO;IAChB,MAAMC,IAAIX;IACV,MAAMY,eAAeX;IAErB,MAAMY,SAASR,SAASS,MAAM,CAACC,CAAAA,UAAW,CAACA,QAAQC,EAAE;IACrD,MAAMC,YAAYlB,eAAeM;IAEjC,qBACE,MAACa;QACCC,MAAK;QACLC,UAAU,CAAC;QACXC,cAAYV,EAAE;QACdW,eAAY;QACZZ,WAAWP,GACT,yFACAO;;0BAGF,MAACQ;gBAAIR,WAAU;;kCACb,KAACa;wBAAKb,WAAU;kCACbC,EAAE,kBAAkB;4BAAEa,OAAOP;wBAAU;;oBAEzCJ,OAAOY,MAAM,GAAG,mBACf,KAACF;wBAAKb,WAAU;kCACbC,EAAE,eAAe;4BAAEa,OAAOX,OAAOY,MAAM;wBAAC;;oBAG5CZ,OAAOY,MAAM,GAAG,KAAKlB,+BACpB,KAACL;wBACCwB,MAAK;wBACLC,SAAQ;wBACRC,MAAK;wBACLC,UAAUpB;wBACVqB,SAAS,IAAMvB,cAAcT,UAAUO;kCAEtCM,EAAE;;kCAGP,KAACT;wBACCwB,MAAK;wBACLC,SAAQ;wBACRC,MAAK;wBACLC,UAAUpB;wBACVqB,SAAStB;kCAERG,EAAE;;;;YAINE,OAAOY,MAAM,GAAG,mBACf,KAACM;gBAAGrB,WAAU;0BACXG,OAAOmB,GAAG,CAACjB,CAAAA;8BAegBA;yCAd1B,MAACkB;wBAECvB,WAAU;;0CAEV,KAACa;gCAAKb,WAAU;kDACbJ,4BAAAA,SAAWS,QAAQmB,EAAE,oBAAKC,OAAOpB,QAAQmB,EAAE;;4BAE7C;4BAOAtB,aAAa,CAAC,OAAO,GAAEG,gBAAAA,QAAQqB,IAAI,YAAZrB,gBAAgB,cAAc;;uBAbjDoB,OAAOpB,QAAQmB,EAAE;;;;;AAoBpC"}
@@ -0,0 +1,2 @@
1
+ export * from './bulk-result.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/bulk-result/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './bulk-result.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/bulk-result/index.ts"],"sourcesContent":["export * from './bulk-result.js';\n"],"names":[],"mappings":"AAAA,cAAc,mBAAmB"}
@@ -0,0 +1,5 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export type CardProps = ComponentPropsWithoutRef<'div'>;
3
+ /** Elevated surface with themed border and fluid padding. */
4
+ export declare function Card({ className, ...props }: CardProps): import("react").JSX.Element;
5
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/card/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAItD,MAAM,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAExD,6DAA6D;AAC7D,wBAAgB,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,+BAWtD"}
@@ -0,0 +1,14 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ import { cn } from '../../utils/cn.js';
5
+ /** Elevated surface with themed border and fluid padding. */ export function Card(_0) {
6
+ let { className } = _0, props = _object_without_properties_loose(_0, [
7
+ "className"
8
+ ]);
9
+ return /*#__PURE__*/ _jsx("div", _extends({
10
+ className: cn('rounded-2xl border border-border bg-surface-elevated p-m text-content', 'shadow-card transition-shadow duration-200 hover:shadow-overlay', className)
11
+ }, props));
12
+ }
13
+
14
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/card/card.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '../../utils/cn.js';\n\nexport type CardProps = ComponentPropsWithoutRef<'div'>;\n\n/** Elevated surface with themed border and fluid padding. */\nexport function Card({ className, ...props }: CardProps) {\n return (\n <div\n className={cn(\n 'rounded-2xl border border-border bg-surface-elevated p-m text-content',\n 'shadow-card transition-shadow duration-200 hover:shadow-overlay',\n className,\n )}\n {...props}\n />\n );\n}\n"],"names":["cn","Card","className","props","div"],"mappings":";;;AAEA,SAASA,EAAE,QAAQ,oBAAoB;AAIvC,2DAA2D,GAC3D,OAAO,SAASC,KAAK,EAAkC;QAAlC,EAAEC,SAAS,EAAuB,OAAlBC;;;IACnC,qBACE,KAACC;QACCF,WAAWF,GACT,yEACA,mEACAE;OAEEC;AAGV"}
@@ -0,0 +1,2 @@
1
+ export * from './card.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/card/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './card.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/card/index.ts"],"sourcesContent":["export * from './card.js';\n"],"names":[],"mappings":"AAAA,cAAc,YAAY"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The user's column layout for one table. Stored through the UI-preferences
3
+ * port, so it is deliberately plain JSON: names only, no descriptors — a column
4
+ * that disappears from the entity simply stops matching.
5
+ */
6
+ export interface ColumnPersonalization {
7
+ /** Column names, most-significant first. Unlisted columns keep their default
8
+ * position at the end, so a new entity member never breaks a saved layout. */
9
+ order?: string[];
10
+ /** Column names the user hid. */
11
+ hidden?: string[];
12
+ }
13
+ export interface ColumnSettingsColumn {
14
+ name: string;
15
+ label: string;
16
+ }
17
+ export interface ColumnSettingsProps {
18
+ /** Columns in their currently resolved order. */
19
+ columns: readonly ColumnSettingsColumn[];
20
+ hidden: readonly string[];
21
+ onChange: (next: ColumnPersonalization) => void;
22
+ }
23
+ /**
24
+ * Popover for reordering and hiding columns. Reordering uses explicit up/down
25
+ * buttons rather than drag-and-drop: it needs no dependency, works on touch, and
26
+ * is keyboard-operable for free.
27
+ */
28
+ export declare function ColumnSettings({ columns, hidden, onChange, }: ColumnSettingsProps): import("react").JSX.Element;
29
+ //# sourceMappingURL=column-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-settings.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/column-settings/column-settings.tsx"],"names":[],"mappings":"AASA;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;mFAC+E;IAC/E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACzC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACjD;AASD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE,mBAAmB,+BAmFrB"}
@@ -0,0 +1,117 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Popover, PopoverButton, PopoverPanel } from '@headlessui/react';
4
+ import { useT } from '../../../i18n/index.js';
5
+ import { Button } from '../../atoms/button/index.js';
6
+ import { Checkbox } from '../../atoms/field/index.js';
7
+ import { Text } from '../../atoms/text/index.js';
8
+ function move(names, from, to) {
9
+ const next = [
10
+ ...names
11
+ ];
12
+ const [moved] = next.splice(from, 1);
13
+ next.splice(to, 0, moved);
14
+ return next;
15
+ }
16
+ /**
17
+ * Popover for reordering and hiding columns. Reordering uses explicit up/down
18
+ * buttons rather than drag-and-drop: it needs no dependency, works on touch, and
19
+ * is keyboard-operable for free.
20
+ */ export function ColumnSettings({ columns, hidden, onChange }) {
21
+ const order = columns.map((column)=>column.name);
22
+ const toggle = (name)=>onChange({
23
+ order,
24
+ hidden: hidden.includes(name) ? hidden.filter((entry)=>entry !== name) : [
25
+ ...hidden,
26
+ name
27
+ ]
28
+ });
29
+ const t = useT();
30
+ const shift = (index, delta)=>{
31
+ const target = index + delta;
32
+ // Defence in depth: the buttons are already disabled at both ends, so this
33
+ // is unreachable through the UI — but an out-of-range splice would silently
34
+ // corrupt the order rather than no-op.
35
+ /* v8 ignore next */ if (target < 0 || target >= order.length) return;
36
+ onChange({
37
+ order: move(order, index, target),
38
+ hidden: [
39
+ ...hidden
40
+ ]
41
+ });
42
+ };
43
+ return /*#__PURE__*/ _jsxs(Popover, {
44
+ className: "relative",
45
+ children: [
46
+ /*#__PURE__*/ _jsx(PopoverButton, {
47
+ as: Button,
48
+ type: "button",
49
+ variant: "secondary",
50
+ size: "sm",
51
+ children: t('columns.title')
52
+ }),
53
+ /*#__PURE__*/ _jsxs(PopoverPanel, {
54
+ anchor: "bottom end",
55
+ className: "w-64 z-10 mt-3xs rounded-xl border border-border bg-surface-elevated p-2xs shadow-card",
56
+ children: [
57
+ /*#__PURE__*/ _jsx(Text, {
58
+ step: -2,
59
+ tone: "muted",
60
+ className: "px-3xs pb-3xs",
61
+ children: t('columns.subtitle')
62
+ }),
63
+ /*#__PURE__*/ _jsx("ul", {
64
+ className: "flex flex-col gap-3xs",
65
+ children: columns.map((column, index)=>/*#__PURE__*/ _jsxs("li", {
66
+ className: "flex items-center justify-between gap-2xs px-3xs",
67
+ children: [
68
+ /*#__PURE__*/ _jsx(Checkbox, {
69
+ label: column.label,
70
+ checked: !hidden.includes(column.name),
71
+ onChange: ()=>toggle(column.name)
72
+ }),
73
+ /*#__PURE__*/ _jsxs("span", {
74
+ className: "flex gap-3xs",
75
+ children: [
76
+ /*#__PURE__*/ _jsx(Button, {
77
+ type: "button",
78
+ variant: "ghost",
79
+ size: "sm",
80
+ "aria-label": t('columns.moveUp', {
81
+ column: column.label
82
+ }),
83
+ disabled: index === 0,
84
+ onClick: ()=>shift(index, -1),
85
+ children: "↑"
86
+ }),
87
+ /*#__PURE__*/ _jsx(Button, {
88
+ type: "button",
89
+ variant: "ghost",
90
+ size: "sm",
91
+ "aria-label": t('columns.moveDown', {
92
+ column: column.label
93
+ }),
94
+ disabled: index === columns.length - 1,
95
+ onClick: ()=>shift(index, 1),
96
+ children: "↓"
97
+ })
98
+ ]
99
+ })
100
+ ]
101
+ }, column.name))
102
+ }),
103
+ /*#__PURE__*/ _jsx(Button, {
104
+ type: "button",
105
+ variant: "ghost",
106
+ size: "sm",
107
+ className: "mt-2xs w-full",
108
+ onClick: ()=>onChange({}),
109
+ children: t('columns.reset')
110
+ })
111
+ ]
112
+ })
113
+ ]
114
+ });
115
+ }
116
+
117
+ //# sourceMappingURL=column-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/column-settings/column-settings.tsx"],"sourcesContent":["'use client';\n\nimport { Popover, PopoverButton, PopoverPanel } from '@headlessui/react';\n\nimport { useT } from '../../../i18n/index.js';\nimport { Button } from '../../atoms/button/index.js';\nimport { Checkbox } from '../../atoms/field/index.js';\nimport { Text } from '../../atoms/text/index.js';\n\n/**\n * The user's column layout for one table. Stored through the UI-preferences\n * port, so it is deliberately plain JSON: names only, no descriptors — a column\n * that disappears from the entity simply stops matching.\n */\nexport interface ColumnPersonalization {\n /** Column names, most-significant first. Unlisted columns keep their default\n * position at the end, so a new entity member never breaks a saved layout. */\n order?: string[];\n /** Column names the user hid. */\n hidden?: string[];\n}\n\nexport interface ColumnSettingsColumn {\n name: string;\n label: string;\n}\n\nexport interface ColumnSettingsProps {\n /** Columns in their currently resolved order. */\n columns: readonly ColumnSettingsColumn[];\n hidden: readonly string[];\n onChange: (next: ColumnPersonalization) => void;\n}\n\nfunction move(names: readonly string[], from: number, to: number): string[] {\n const next = [...names];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n return next;\n}\n\n/**\n * Popover for reordering and hiding columns. Reordering uses explicit up/down\n * buttons rather than drag-and-drop: it needs no dependency, works on touch, and\n * is keyboard-operable for free.\n */\nexport function ColumnSettings({\n columns,\n hidden,\n onChange,\n}: ColumnSettingsProps) {\n const order = columns.map(column => column.name);\n\n const toggle = (name: string) =>\n onChange({\n order,\n hidden: hidden.includes(name)\n ? hidden.filter(entry => entry !== name)\n : [...hidden, name],\n });\n\n const t = useT();\n\n const shift = (index: number, delta: number) => {\n const target = index + delta;\n // Defence in depth: the buttons are already disabled at both ends, so this\n // is unreachable through the UI — but an out-of-range splice would silently\n // corrupt the order rather than no-op.\n /* v8 ignore next */\n if (target < 0 || target >= order.length) return;\n onChange({ order: move(order, index, target), hidden: [...hidden] });\n };\n\n return (\n <Popover className=\"relative\">\n <PopoverButton as={Button} type=\"button\" variant=\"secondary\" size=\"sm\">\n {t('columns.title')}\n </PopoverButton>\n <PopoverPanel\n anchor=\"bottom end\"\n className=\"w-64 z-10 mt-3xs rounded-xl border border-border bg-surface-elevated p-2xs shadow-card\"\n >\n <Text step={-2} tone=\"muted\" className=\"px-3xs pb-3xs\">\n {t('columns.subtitle')}\n </Text>\n <ul className=\"flex flex-col gap-3xs\">\n {columns.map((column, index) => (\n <li\n key={column.name}\n className=\"flex items-center justify-between gap-2xs px-3xs\"\n >\n <Checkbox\n label={column.label}\n checked={!hidden.includes(column.name)}\n onChange={() => toggle(column.name)}\n />\n <span className=\"flex gap-3xs\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={t('columns.moveUp', { column: column.label })}\n disabled={index === 0}\n onClick={() => shift(index, -1)}\n >\n ↑\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={t('columns.moveDown', { column: column.label })}\n disabled={index === columns.length - 1}\n onClick={() => shift(index, 1)}\n >\n ↓\n </Button>\n </span>\n </li>\n ))}\n </ul>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-2xs w-full\"\n onClick={() => onChange({})}\n >\n {t('columns.reset')}\n </Button>\n </PopoverPanel>\n </Popover>\n );\n}\n"],"names":["Popover","PopoverButton","PopoverPanel","useT","Button","Checkbox","Text","move","names","from","to","next","moved","splice","ColumnSettings","columns","hidden","onChange","order","map","column","name","toggle","includes","filter","entry","t","shift","index","delta","target","length","className","as","type","variant","size","anchor","step","tone","ul","li","label","checked","span","aria-label","disabled","onClick"],"mappings":"AAAA;;AAEA,SAASA,OAAO,EAAEC,aAAa,EAAEC,YAAY,QAAQ,oBAAoB;AAEzE,SAASC,IAAI,QAAQ,yBAAyB;AAC9C,SAASC,MAAM,QAAQ,8BAA8B;AACrD,SAASC,QAAQ,QAAQ,6BAA6B;AACtD,SAASC,IAAI,QAAQ,4BAA4B;AA2BjD,SAASC,KAAKC,KAAwB,EAAEC,IAAY,EAAEC,EAAU;IAC9D,MAAMC,OAAO;WAAIH;KAAM;IACvB,MAAM,CAACI,MAAM,GAAGD,KAAKE,MAAM,CAACJ,MAAM;IAClCE,KAAKE,MAAM,CAACH,IAAI,GAAGE;IACnB,OAAOD;AACT;AAEA;;;;CAIC,GACD,OAAO,SAASG,eAAe,EAC7BC,OAAO,EACPC,MAAM,EACNC,QAAQ,EACY;IACpB,MAAMC,QAAQH,QAAQI,GAAG,CAACC,CAAAA,SAAUA,OAAOC,IAAI;IAE/C,MAAMC,SAAS,CAACD,OACdJ,SAAS;YACPC;YACAF,QAAQA,OAAOO,QAAQ,CAACF,QACpBL,OAAOQ,MAAM,CAACC,CAAAA,QAASA,UAAUJ,QACjC;mBAAIL;gBAAQK;aAAK;QACvB;IAEF,MAAMK,IAAIvB;IAEV,MAAMwB,QAAQ,CAACC,OAAeC;QAC5B,MAAMC,SAASF,QAAQC;QACvB,2EAA2E;QAC3E,4EAA4E;QAC5E,uCAAuC;QACvC,kBAAkB,GAClB,IAAIC,SAAS,KAAKA,UAAUZ,MAAMa,MAAM,EAAE;QAC1Cd,SAAS;YAAEC,OAAOX,KAAKW,OAAOU,OAAOE;YAASd,QAAQ;mBAAIA;aAAO;QAAC;IACpE;IAEA,qBACE,MAAChB;QAAQgC,WAAU;;0BACjB,KAAC/B;gBAAcgC,IAAI7B;gBAAQ8B,MAAK;gBAASC,SAAQ;gBAAYC,MAAK;0BAC/DV,EAAE;;0BAEL,MAACxB;gBACCmC,QAAO;gBACPL,WAAU;;kCAEV,KAAC1B;wBAAKgC,MAAM,CAAC;wBAAGC,MAAK;wBAAQP,WAAU;kCACpCN,EAAE;;kCAEL,KAACc;wBAAGR,WAAU;kCACXjB,QAAQI,GAAG,CAAC,CAACC,QAAQQ,sBACpB,MAACa;gCAECT,WAAU;;kDAEV,KAAC3B;wCACCqC,OAAOtB,OAAOsB,KAAK;wCACnBC,SAAS,CAAC3B,OAAOO,QAAQ,CAACH,OAAOC,IAAI;wCACrCJ,UAAU,IAAMK,OAAOF,OAAOC,IAAI;;kDAEpC,MAACuB;wCAAKZ,WAAU;;0DACd,KAAC5B;gDACC8B,MAAK;gDACLC,SAAQ;gDACRC,MAAK;gDACLS,cAAYnB,EAAE,kBAAkB;oDAAEN,QAAQA,OAAOsB,KAAK;gDAAC;gDACvDI,UAAUlB,UAAU;gDACpBmB,SAAS,IAAMpB,MAAMC,OAAO,CAAC;0DAC9B;;0DAGD,KAACxB;gDACC8B,MAAK;gDACLC,SAAQ;gDACRC,MAAK;gDACLS,cAAYnB,EAAE,oBAAoB;oDAAEN,QAAQA,OAAOsB,KAAK;gDAAC;gDACzDI,UAAUlB,UAAUb,QAAQgB,MAAM,GAAG;gDACrCgB,SAAS,IAAMpB,MAAMC,OAAO;0DAC7B;;;;;+BA1BER,OAAOC,IAAI;;kCAiCtB,KAACjB;wBACC8B,MAAK;wBACLC,SAAQ;wBACRC,MAAK;wBACLJ,WAAU;wBACVe,SAAS,IAAM9B,SAAS,CAAC;kCAExBS,EAAE;;;;;;AAKb"}
@@ -0,0 +1,2 @@
1
+ export * from './column-settings.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/column-settings/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './column-settings.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/column-settings/index.ts"],"sourcesContent":["export * from './column-settings.js';\n"],"names":[],"mappings":"AAAA,cAAc,uBAAuB"}
@@ -0,0 +1,31 @@
1
+ export type ConfirmTone = 'destructive' | 'neutral';
2
+ export interface ConfirmDialogProps {
3
+ open: boolean;
4
+ /** Already-resolved copy — this control renders text, it does not translate. */
5
+ title: string;
6
+ message: string;
7
+ /** `destructive` paints the confirm button in the danger tokens. */
8
+ tone?: ConfirmTone;
9
+ confirmLabel?: string;
10
+ cancelLabel?: string;
11
+ busy?: boolean;
12
+ onConfirm: () => void;
13
+ onCancel: () => void;
14
+ }
15
+ /**
16
+ * Asks before an irreversible act.
17
+ *
18
+ * It exists because a use-case descriptor may carry
19
+ * `confirm: { tone, messageKey }`, and a surface that renders such a descriptor
20
+ * without asking would fire the act on the first click — `revoke-sessions` ends
21
+ * every session a user holds. The descriptor names the tone and the message key;
22
+ * resolving that key is the caller's job, so this control stays copy-free apart
23
+ * from its own two buttons.
24
+ *
25
+ * The dialog element fills the viewport rather than wrapping a `fixed` child in
26
+ * a `relative` box, for the reason `EntityLinkPicker` records: a zero-sized
27
+ * dialog is invisible to anything that measures it — assistive tech and
28
+ * Playwright alike — even with a painted panel inside.
29
+ */
30
+ export declare function ConfirmDialog({ open, title, message, tone, confirmLabel, cancelLabel, busy, onConfirm, onCancel, }: ConfirmDialogProps): import("react").JSX.Element;
31
+ //# sourceMappingURL=confirm-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-dialog.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/confirm-dialog/confirm-dialog.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,OAAO,EACP,IAAgB,EAChB,YAAY,EACZ,WAAW,EACX,IAAY,EACZ,SAAS,EACT,QAAQ,GACT,EAAE,kBAAkB,+BAuCpB"}
@@ -0,0 +1,68 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Dialog, DialogPanel, DialogTitle } from '@headlessui/react';
4
+ import { useT } from '../../../i18n/index.js';
5
+ import { Button } from '../../atoms/button/index.js';
6
+ /**
7
+ * Asks before an irreversible act.
8
+ *
9
+ * It exists because a use-case descriptor may carry
10
+ * `confirm: { tone, messageKey }`, and a surface that renders such a descriptor
11
+ * without asking would fire the act on the first click — `revoke-sessions` ends
12
+ * every session a user holds. The descriptor names the tone and the message key;
13
+ * resolving that key is the caller's job, so this control stays copy-free apart
14
+ * from its own two buttons.
15
+ *
16
+ * The dialog element fills the viewport rather than wrapping a `fixed` child in
17
+ * a `relative` box, for the reason `EntityLinkPicker` records: a zero-sized
18
+ * dialog is invisible to anything that measures it — assistive tech and
19
+ * Playwright alike — even with a painted panel inside.
20
+ */ export function ConfirmDialog({ open, title, message, tone = 'neutral', confirmLabel, cancelLabel, busy = false, onConfirm, onCancel }) {
21
+ const t = useT();
22
+ return /*#__PURE__*/ _jsxs(Dialog, {
23
+ open: open,
24
+ onClose: onCancel,
25
+ className: "inset-0 fixed z-50 flex items-center justify-center overflow-y-auto p-s",
26
+ children: [
27
+ /*#__PURE__*/ _jsx("div", {
28
+ "aria-hidden": true,
29
+ className: "inset-0 bg-black/40 fixed"
30
+ }),
31
+ /*#__PURE__*/ _jsxs(DialogPanel, {
32
+ "data-testid": "confirm-dialog",
33
+ className: "max-w-md relative w-full rounded-lg border border-border bg-surface p-s shadow-overlay",
34
+ children: [
35
+ /*#__PURE__*/ _jsx(DialogTitle, {
36
+ className: "text-step-1 font-semibold text-content",
37
+ children: title
38
+ }),
39
+ /*#__PURE__*/ _jsx("p", {
40
+ className: "mt-2xs text-step-sm text-content-muted",
41
+ children: message
42
+ }),
43
+ /*#__PURE__*/ _jsxs("div", {
44
+ className: "mt-s flex justify-end gap-xs",
45
+ children: [
46
+ /*#__PURE__*/ _jsx(Button, {
47
+ type: "button",
48
+ variant: "ghost",
49
+ onClick: onCancel,
50
+ disabled: busy,
51
+ children: cancelLabel != null ? cancelLabel : t('confirm.cancel')
52
+ }),
53
+ /*#__PURE__*/ _jsx(Button, {
54
+ type: "button",
55
+ variant: tone === 'destructive' ? 'destructive' : 'primary',
56
+ onClick: onConfirm,
57
+ disabled: busy,
58
+ children: confirmLabel != null ? confirmLabel : t('confirm.confirm')
59
+ })
60
+ ]
61
+ })
62
+ ]
63
+ })
64
+ ]
65
+ });
66
+ }
67
+
68
+ //# sourceMappingURL=confirm-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/confirm-dialog/confirm-dialog.tsx"],"sourcesContent":["'use client';\n\nimport { Dialog, DialogPanel, DialogTitle } from '@headlessui/react';\n\nimport { useT } from '../../../i18n/index.js';\nimport { Button } from '../../atoms/button/index.js';\n\nexport type ConfirmTone = 'destructive' | 'neutral';\n\nexport interface ConfirmDialogProps {\n open: boolean;\n /** Already-resolved copy — this control renders text, it does not translate. */\n title: string;\n message: string;\n /** `destructive` paints the confirm button in the danger tokens. */\n tone?: ConfirmTone;\n confirmLabel?: string;\n cancelLabel?: string;\n busy?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n}\n\n/**\n * Asks before an irreversible act.\n *\n * It exists because a use-case descriptor may carry\n * `confirm: { tone, messageKey }`, and a surface that renders such a descriptor\n * without asking would fire the act on the first click — `revoke-sessions` ends\n * every session a user holds. The descriptor names the tone and the message key;\n * resolving that key is the caller's job, so this control stays copy-free apart\n * from its own two buttons.\n *\n * The dialog element fills the viewport rather than wrapping a `fixed` child in\n * a `relative` box, for the reason `EntityLinkPicker` records: a zero-sized\n * dialog is invisible to anything that measures it — assistive tech and\n * Playwright alike — even with a painted panel inside.\n */\nexport function ConfirmDialog({\n open,\n title,\n message,\n tone = 'neutral',\n confirmLabel,\n cancelLabel,\n busy = false,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const t = useT();\n\n return (\n <Dialog\n open={open}\n onClose={onCancel}\n className=\"inset-0 fixed z-50 flex items-center justify-center overflow-y-auto p-s\"\n >\n <div aria-hidden className=\"inset-0 bg-black/40 fixed\" />\n <DialogPanel\n data-testid=\"confirm-dialog\"\n className=\"max-w-md relative w-full rounded-lg border border-border bg-surface p-s shadow-overlay\"\n >\n <DialogTitle className=\"text-step-1 font-semibold text-content\">\n {title}\n </DialogTitle>\n <p className=\"mt-2xs text-step-sm text-content-muted\">{message}</p>\n <div className=\"mt-s flex justify-end gap-xs\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onCancel}\n disabled={busy}\n >\n {cancelLabel ?? t('confirm.cancel')}\n </Button>\n <Button\n type=\"button\"\n variant={tone === 'destructive' ? 'destructive' : 'primary'}\n onClick={onConfirm}\n disabled={busy}\n >\n {confirmLabel ?? t('confirm.confirm')}\n </Button>\n </div>\n </DialogPanel>\n </Dialog>\n );\n}\n"],"names":["Dialog","DialogPanel","DialogTitle","useT","Button","ConfirmDialog","open","title","message","tone","confirmLabel","cancelLabel","busy","onConfirm","onCancel","t","onClose","className","div","aria-hidden","data-testid","p","type","variant","onClick","disabled"],"mappings":"AAAA;;AAEA,SAASA,MAAM,EAAEC,WAAW,EAAEC,WAAW,QAAQ,oBAAoB;AAErE,SAASC,IAAI,QAAQ,yBAAyB;AAC9C,SAASC,MAAM,QAAQ,8BAA8B;AAkBrD;;;;;;;;;;;;;;CAcC,GACD,OAAO,SAASC,cAAc,EAC5BC,IAAI,EACJC,KAAK,EACLC,OAAO,EACPC,OAAO,SAAS,EAChBC,YAAY,EACZC,WAAW,EACXC,OAAO,KAAK,EACZC,SAAS,EACTC,QAAQ,EACW;IACnB,MAAMC,IAAIZ;IAEV,qBACE,MAACH;QACCM,MAAMA;QACNU,SAASF;QACTG,WAAU;;0BAEV,KAACC;gBAAIC,aAAW;gBAACF,WAAU;;0BAC3B,MAAChB;gBACCmB,eAAY;gBACZH,WAAU;;kCAEV,KAACf;wBAAYe,WAAU;kCACpBV;;kCAEH,KAACc;wBAAEJ,WAAU;kCAA0CT;;kCACvD,MAACU;wBAAID,WAAU;;0CACb,KAACb;gCACCkB,MAAK;gCACLC,SAAQ;gCACRC,SAASV;gCACTW,UAAUb;0CAETD,sBAAAA,cAAeI,EAAE;;0CAEpB,KAACX;gCACCkB,MAAK;gCACLC,SAASd,SAAS,gBAAgB,gBAAgB;gCAClDe,SAASX;gCACTY,UAAUb;0CAETF,uBAAAA,eAAgBK,EAAE;;;;;;;;AAM/B"}
@@ -0,0 +1,2 @@
1
+ export * from './confirm-dialog.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/confirm-dialog/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './confirm-dialog.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/confirm-dialog/index.ts"],"sourcesContent":["export * from './confirm-dialog.js';\n"],"names":[],"mappings":"AAAA,cAAc,sBAAsB"}
@@ -0,0 +1,25 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface DrawerProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ /** Names the dialog. A dialog with no accessible name is announced as "dialog". */
6
+ title: ReactNode;
7
+ /** Accessible name for the close control. */
8
+ closeLabel: string;
9
+ children: ReactNode;
10
+ className?: string;
11
+ }
12
+ /**
13
+ * An off-canvas panel anchored to the inline start of the viewport.
14
+ *
15
+ * Built on Headless UI's `Dialog`, like {@link ConfirmDialog} and the entity link
16
+ * picker, so the focus trap, `Escape`, the backdrop click and focus restoration
17
+ * to the trigger are the library's rather than four hand-written behaviours that
18
+ * each have to be got right — and a drawer that traps focus badly is worse than
19
+ * no drawer, because a keyboard visitor cannot leave it.
20
+ *
21
+ * It carries no viewport logic. *When* a drawer is the right shape is the page
22
+ * shell's decision (`useViewportMode`); this is only the shape.
23
+ */
24
+ export declare function Drawer({ open, onClose, title, closeLabel, children, className, }: DrawerProps): import("react").JSX.Element;
25
+ //# sourceMappingURL=drawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/drawer/drawer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mFAAmF;IACnF,KAAK,EAAE,SAAS,CAAC;IACjB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,GACV,EAAE,WAAW,+BA+Bb"}
@@ -0,0 +1,60 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Dialog, DialogPanel, DialogTitle } from '@headlessui/react';
4
+ import { Button } from '../../atoms/button/index.js';
5
+ import { cn } from '../../utils/cn.js';
6
+ /**
7
+ * An off-canvas panel anchored to the inline start of the viewport.
8
+ *
9
+ * Built on Headless UI's `Dialog`, like {@link ConfirmDialog} and the entity link
10
+ * picker, so the focus trap, `Escape`, the backdrop click and focus restoration
11
+ * to the trigger are the library's rather than four hand-written behaviours that
12
+ * each have to be got right — and a drawer that traps focus badly is worse than
13
+ * no drawer, because a keyboard visitor cannot leave it.
14
+ *
15
+ * It carries no viewport logic. *When* a drawer is the right shape is the page
16
+ * shell's decision (`useViewportMode`); this is only the shape.
17
+ */ export function Drawer({ open, onClose, title, closeLabel, children, className }) {
18
+ return /*#__PURE__*/ _jsxs(Dialog, {
19
+ open: open,
20
+ onClose: onClose,
21
+ className: "relative z-50",
22
+ children: [
23
+ /*#__PURE__*/ _jsx("div", {
24
+ "aria-hidden": true,
25
+ className: "inset-0 bg-black/40 fixed"
26
+ }),
27
+ /*#__PURE__*/ _jsx("div", {
28
+ className: "inset-0 fixed flex",
29
+ children: /*#__PURE__*/ _jsxs(DialogPanel, {
30
+ "data-testid": "drawer",
31
+ className: cn(// 200ms is `--default-transition-duration`, the beat every other
32
+ // transition in the system already uses.
33
+ 'w-72 flex max-w-[85vw] flex-col gap-m overflow-y-auto border-r border-border bg-surface-elevated p-s transition duration-200', className),
34
+ children: [
35
+ /*#__PURE__*/ _jsxs(DialogTitle, {
36
+ className: "flex items-center justify-between gap-2xs text-step-1 font-semibold text-content",
37
+ children: [
38
+ title,
39
+ /*#__PURE__*/ _jsx(Button, {
40
+ type: "button",
41
+ variant: "ghost",
42
+ size: "sm",
43
+ "aria-label": closeLabel,
44
+ onClick: onClose,
45
+ children: /*#__PURE__*/ _jsx("span", {
46
+ "aria-hidden": "true",
47
+ children: "✕"
48
+ })
49
+ })
50
+ ]
51
+ }),
52
+ children
53
+ ]
54
+ })
55
+ })
56
+ ]
57
+ });
58
+ }
59
+
60
+ //# sourceMappingURL=drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/drawer/drawer.tsx"],"sourcesContent":["'use client';\n\nimport { Dialog, DialogPanel, DialogTitle } from '@headlessui/react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../../atoms/button/index.js';\nimport { cn } from '../../utils/cn.js';\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n /** Names the dialog. A dialog with no accessible name is announced as \"dialog\". */\n title: ReactNode;\n /** Accessible name for the close control. */\n closeLabel: string;\n children: ReactNode;\n className?: string;\n}\n\n/**\n * An off-canvas panel anchored to the inline start of the viewport.\n *\n * Built on Headless UI's `Dialog`, like {@link ConfirmDialog} and the entity link\n * picker, so the focus trap, `Escape`, the backdrop click and focus restoration\n * to the trigger are the library's rather than four hand-written behaviours that\n * each have to be got right — and a drawer that traps focus badly is worse than\n * no drawer, because a keyboard visitor cannot leave it.\n *\n * It carries no viewport logic. *When* a drawer is the right shape is the page\n * shell's decision (`useViewportMode`); this is only the shape.\n */\nexport function Drawer({\n open,\n onClose,\n title,\n closeLabel,\n children,\n className,\n}: DrawerProps) {\n return (\n <Dialog open={open} onClose={onClose} className=\"relative z-50\">\n <div aria-hidden className=\"inset-0 bg-black/40 fixed\" />\n <div className=\"inset-0 fixed flex\">\n <DialogPanel\n data-testid=\"drawer\"\n className={cn(\n // 200ms is `--default-transition-duration`, the beat every other\n // transition in the system already uses.\n 'w-72 flex max-w-[85vw] flex-col gap-m overflow-y-auto border-r border-border bg-surface-elevated p-s transition duration-200',\n className,\n )}\n >\n <DialogTitle className=\"flex items-center justify-between gap-2xs text-step-1 font-semibold text-content\">\n {title}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={closeLabel}\n onClick={onClose}\n >\n <span aria-hidden=\"true\">✕</span>\n </Button>\n </DialogTitle>\n {children}\n </DialogPanel>\n </div>\n </Dialog>\n );\n}\n"],"names":["Dialog","DialogPanel","DialogTitle","Button","cn","Drawer","open","onClose","title","closeLabel","children","className","div","aria-hidden","data-testid","type","variant","size","aria-label","onClick","span"],"mappings":"AAAA;;AAEA,SAASA,MAAM,EAAEC,WAAW,EAAEC,WAAW,QAAQ,oBAAoB;AAGrE,SAASC,MAAM,QAAQ,8BAA8B;AACrD,SAASC,EAAE,QAAQ,oBAAoB;AAavC;;;;;;;;;;;CAWC,GACD,OAAO,SAASC,OAAO,EACrBC,IAAI,EACJC,OAAO,EACPC,KAAK,EACLC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACG;IACZ,qBACE,MAACX;QAAOM,MAAMA;QAAMC,SAASA;QAASI,WAAU;;0BAC9C,KAACC;gBAAIC,aAAW;gBAACF,WAAU;;0BAC3B,KAACC;gBAAID,WAAU;0BACb,cAAA,MAACV;oBACCa,eAAY;oBACZH,WAAWP,GACT,iEAAiE;oBACjE,yCAAyC;oBACzC,gIACAO;;sCAGF,MAACT;4BAAYS,WAAU;;gCACpBH;8CACD,KAACL;oCACCY,MAAK;oCACLC,SAAQ;oCACRC,MAAK;oCACLC,cAAYT;oCACZU,SAASZ;8CAET,cAAA,KAACa;wCAAKP,eAAY;kDAAO;;;;;wBAG5BH;;;;;;AAKX"}
@@ -0,0 +1,2 @@
1
+ export * from './drawer.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/drawer/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './drawer.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/molecules/drawer/index.ts"],"sourcesContent":["export * from './drawer.js';\n"],"names":[],"mappings":"AAAA,cAAc,cAAc"}