@endora-commerce/admin-kit 0.0.0-stage → 0.100.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 (449) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +212 -2
  3. package/dist/components/FileDropzone.d.ts +13 -0
  4. package/dist/components/FileDropzone.d.ts.map +1 -0
  5. package/dist/components/FileDropzone.js +39 -0
  6. package/dist/components/FileDropzone.js.map +1 -0
  7. package/dist/components/PaginationFooter.d.ts +25 -0
  8. package/dist/components/PaginationFooter.d.ts.map +1 -0
  9. package/dist/components/PaginationFooter.js +33 -0
  10. package/dist/components/PaginationFooter.js.map +1 -0
  11. package/dist/components/ResponsiveTable.d.ts +26 -0
  12. package/dist/components/ResponsiveTable.d.ts.map +1 -0
  13. package/dist/components/ResponsiveTable.js +34 -0
  14. package/dist/components/ResponsiveTable.js.map +1 -0
  15. package/dist/components/RowActionMenu.d.ts +40 -0
  16. package/dist/components/RowActionMenu.d.ts.map +1 -0
  17. package/dist/components/RowActionMenu.js +15 -0
  18. package/dist/components/RowActionMenu.js.map +1 -0
  19. package/dist/components/StickyFormActions.d.ts +10 -0
  20. package/dist/components/StickyFormActions.d.ts.map +1 -0
  21. package/dist/components/StickyFormActions.js +10 -0
  22. package/dist/components/StickyFormActions.js.map +1 -0
  23. package/dist/components/TouchReorderButtons.d.ts +13 -0
  24. package/dist/components/TouchReorderButtons.d.ts.map +1 -0
  25. package/dist/components/TouchReorderButtons.js +12 -0
  26. package/dist/components/TouchReorderButtons.js.map +1 -0
  27. package/dist/components/admin-user-picker/AdminUserPicker.d.ts +14 -0
  28. package/dist/components/admin-user-picker/AdminUserPicker.d.ts.map +1 -0
  29. package/dist/components/admin-user-picker/AdminUserPicker.js +68 -0
  30. package/dist/components/admin-user-picker/AdminUserPicker.js.map +1 -0
  31. package/dist/components/asset-picker/AssetFieldPicker.d.ts +32 -0
  32. package/dist/components/asset-picker/AssetFieldPicker.d.ts.map +1 -0
  33. package/dist/components/asset-picker/AssetFieldPicker.js +42 -0
  34. package/dist/components/asset-picker/AssetFieldPicker.js.map +1 -0
  35. package/dist/components/asset-picker/AssetPicker.d.ts +31 -0
  36. package/dist/components/asset-picker/AssetPicker.d.ts.map +1 -0
  37. package/dist/components/asset-picker/AssetPicker.js +68 -0
  38. package/dist/components/asset-picker/AssetPicker.js.map +1 -0
  39. package/dist/components/asset-picker/AssetUploader.d.ts +15 -0
  40. package/dist/components/asset-picker/AssetUploader.d.ts.map +1 -0
  41. package/dist/components/asset-picker/AssetUploader.js +61 -0
  42. package/dist/components/asset-picker/AssetUploader.js.map +1 -0
  43. package/dist/components/asset-picker/assets-api.d.ts +49 -0
  44. package/dist/components/asset-picker/assets-api.d.ts.map +1 -0
  45. package/dist/components/asset-picker/assets-api.js +67 -0
  46. package/dist/components/asset-picker/assets-api.js.map +1 -0
  47. package/dist/components/category-picker/CategorySelect.d.ts +14 -0
  48. package/dist/components/category-picker/CategorySelect.d.ts.map +1 -0
  49. package/dist/components/category-picker/CategorySelect.js +41 -0
  50. package/dist/components/category-picker/CategorySelect.js.map +1 -0
  51. package/dist/components/category-tree-picker/CategoryTreeNodeRow.d.ts +18 -0
  52. package/dist/components/category-tree-picker/CategoryTreeNodeRow.d.ts.map +1 -0
  53. package/dist/components/category-tree-picker/CategoryTreeNodeRow.js +19 -0
  54. package/dist/components/category-tree-picker/CategoryTreeNodeRow.js.map +1 -0
  55. package/dist/components/category-tree-picker/CategoryTreePicker.d.ts +23 -0
  56. package/dist/components/category-tree-picker/CategoryTreePicker.d.ts.map +1 -0
  57. package/dist/components/category-tree-picker/CategoryTreePicker.js +82 -0
  58. package/dist/components/category-tree-picker/CategoryTreePicker.js.map +1 -0
  59. package/dist/components/category-tree-picker/category-tree-utils.d.ts +35 -0
  60. package/dist/components/category-tree-picker/category-tree-utils.d.ts.map +1 -0
  61. package/dist/components/category-tree-picker/category-tree-utils.js +140 -0
  62. package/dist/components/category-tree-picker/category-tree-utils.js.map +1 -0
  63. package/dist/components/category-tree-picker/index.d.ts +4 -0
  64. package/dist/components/category-tree-picker/index.d.ts.map +1 -0
  65. package/dist/components/category-tree-picker/index.js +2 -0
  66. package/dist/components/category-tree-picker/index.js.map +1 -0
  67. package/dist/components/charts/echart.d.ts +17 -0
  68. package/dist/components/charts/echart.d.ts.map +1 -0
  69. package/dist/components/charts/echart.js +61 -0
  70. package/dist/components/charts/echart.js.map +1 -0
  71. package/dist/components/cms-picker/CmsBlockPicker.d.ts +14 -0
  72. package/dist/components/cms-picker/CmsBlockPicker.d.ts.map +1 -0
  73. package/dist/components/cms-picker/CmsBlockPicker.js +40 -0
  74. package/dist/components/cms-picker/CmsBlockPicker.js.map +1 -0
  75. package/dist/components/cms-picker/CmsPagePicker.d.ts +15 -0
  76. package/dist/components/cms-picker/CmsPagePicker.d.ts.map +1 -0
  77. package/dist/components/cms-picker/CmsPagePicker.js +80 -0
  78. package/dist/components/cms-picker/CmsPagePicker.js.map +1 -0
  79. package/dist/components/content-language-tabs/ContentLanguageTabs.d.ts +30 -0
  80. package/dist/components/content-language-tabs/ContentLanguageTabs.d.ts.map +1 -0
  81. package/dist/components/content-language-tabs/ContentLanguageTabs.js +14 -0
  82. package/dist/components/content-language-tabs/ContentLanguageTabs.js.map +1 -0
  83. package/dist/components/country-select/CountrySelect.d.ts +29 -0
  84. package/dist/components/country-select/CountrySelect.d.ts.map +1 -0
  85. package/dist/components/country-select/CountrySelect.js +40 -0
  86. package/dist/components/country-select/CountrySelect.js.map +1 -0
  87. package/dist/components/country-select/index.d.ts +3 -0
  88. package/dist/components/country-select/index.d.ts.map +1 -0
  89. package/dist/components/country-select/index.js +3 -0
  90. package/dist/components/country-select/index.js.map +1 -0
  91. package/dist/components/country-select/useCountriesQuery.d.ts +12 -0
  92. package/dist/components/country-select/useCountriesQuery.d.ts.map +1 -0
  93. package/dist/components/country-select/useCountriesQuery.js +69 -0
  94. package/dist/components/country-select/useCountriesQuery.js.map +1 -0
  95. package/dist/components/custom-field-values/CustomFieldValuesPanel.d.ts +48 -0
  96. package/dist/components/custom-field-values/CustomFieldValuesPanel.d.ts.map +1 -0
  97. package/dist/components/custom-field-values/CustomFieldValuesPanel.js +122 -0
  98. package/dist/components/custom-field-values/CustomFieldValuesPanel.js.map +1 -0
  99. package/dist/components/customer-group-picker/CustomerGroupPicker.d.ts +14 -0
  100. package/dist/components/customer-group-picker/CustomerGroupPicker.d.ts.map +1 -0
  101. package/dist/components/customer-group-picker/CustomerGroupPicker.js +36 -0
  102. package/dist/components/customer-group-picker/CustomerGroupPicker.js.map +1 -0
  103. package/dist/components/customer-picker/CustomerPicker.d.ts +18 -0
  104. package/dist/components/customer-picker/CustomerPicker.d.ts.map +1 -0
  105. package/dist/components/customer-picker/CustomerPicker.js +85 -0
  106. package/dist/components/customer-picker/CustomerPicker.js.map +1 -0
  107. package/dist/components/dictionary-picker/CountryPicker.d.ts +26 -0
  108. package/dist/components/dictionary-picker/CountryPicker.d.ts.map +1 -0
  109. package/dist/components/dictionary-picker/CountryPicker.js +29 -0
  110. package/dist/components/dictionary-picker/CountryPicker.js.map +1 -0
  111. package/dist/components/dictionary-picker/CurrencyPicker.d.ts +17 -0
  112. package/dist/components/dictionary-picker/CurrencyPicker.d.ts.map +1 -0
  113. package/dist/components/dictionary-picker/CurrencyPicker.js +29 -0
  114. package/dist/components/dictionary-picker/CurrencyPicker.js.map +1 -0
  115. package/dist/components/dictionary-picker/dictionary-api.d.ts +21 -0
  116. package/dist/components/dictionary-picker/dictionary-api.d.ts.map +1 -0
  117. package/dist/components/dictionary-picker/dictionary-api.js +26 -0
  118. package/dist/components/dictionary-picker/dictionary-api.js.map +1 -0
  119. package/dist/components/dictionary-picker/index.d.ts +4 -0
  120. package/dist/components/dictionary-picker/index.d.ts.map +1 -0
  121. package/dist/components/dictionary-picker/index.js +4 -0
  122. package/dist/components/dictionary-picker/index.js.map +1 -0
  123. package/dist/components/fulfilment-strategy-picker/FulfilmentStrategyPicker.d.ts +49 -0
  124. package/dist/components/fulfilment-strategy-picker/FulfilmentStrategyPicker.d.ts.map +1 -0
  125. package/dist/components/fulfilment-strategy-picker/FulfilmentStrategyPicker.js +43 -0
  126. package/dist/components/fulfilment-strategy-picker/FulfilmentStrategyPicker.js.map +1 -0
  127. package/dist/components/hooks/useFocusTrap.d.ts +6 -0
  128. package/dist/components/hooks/useFocusTrap.d.ts.map +1 -0
  129. package/dist/components/hooks/useFocusTrap.js +41 -0
  130. package/dist/components/hooks/useFocusTrap.js.map +1 -0
  131. package/dist/components/hooks/useViewportTier.d.ts +7 -0
  132. package/dist/components/hooks/useViewportTier.d.ts.map +1 -0
  133. package/dist/components/hooks/useViewportTier.js +23 -0
  134. package/dist/components/hooks/useViewportTier.js.map +1 -0
  135. package/dist/components/index.d.ts +101 -0
  136. package/dist/components/index.d.ts.map +1 -0
  137. package/dist/components/index.js +63 -0
  138. package/dist/components/index.js.map +1 -0
  139. package/dist/components/organization-picker/OrganizationPicker.d.ts +28 -0
  140. package/dist/components/organization-picker/OrganizationPicker.d.ts.map +1 -0
  141. package/dist/components/organization-picker/OrganizationPicker.js +35 -0
  142. package/dist/components/organization-picker/OrganizationPicker.js.map +1 -0
  143. package/dist/components/organization-picker/OrganizationPickerMulti.d.ts +32 -0
  144. package/dist/components/organization-picker/OrganizationPickerMulti.d.ts.map +1 -0
  145. package/dist/components/organization-picker/OrganizationPickerMulti.js +55 -0
  146. package/dist/components/organization-picker/OrganizationPickerMulti.js.map +1 -0
  147. package/dist/components/organization-picker/OrganizationStatusBadge.d.ts +7 -0
  148. package/dist/components/organization-picker/OrganizationStatusBadge.d.ts.map +1 -0
  149. package/dist/components/organization-picker/OrganizationStatusBadge.js +33 -0
  150. package/dist/components/organization-picker/OrganizationStatusBadge.js.map +1 -0
  151. package/dist/components/organization-picker/useOrganizationsQuery.d.ts +33 -0
  152. package/dist/components/organization-picker/useOrganizationsQuery.d.ts.map +1 -0
  153. package/dist/components/organization-picker/useOrganizationsQuery.js +92 -0
  154. package/dist/components/organization-picker/useOrganizationsQuery.js.map +1 -0
  155. package/dist/components/payment-method-availability/MethodAvailabilityCell.d.ts +38 -0
  156. package/dist/components/payment-method-availability/MethodAvailabilityCell.d.ts.map +1 -0
  157. package/dist/components/payment-method-availability/MethodAvailabilityCell.js +50 -0
  158. package/dist/components/payment-method-availability/MethodAvailabilityCell.js.map +1 -0
  159. package/dist/components/product-picker/ProductPicker.d.ts +22 -0
  160. package/dist/components/product-picker/ProductPicker.d.ts.map +1 -0
  161. package/dist/components/product-picker/ProductPicker.js +143 -0
  162. package/dist/components/product-picker/ProductPicker.js.map +1 -0
  163. package/dist/components/reorder/ReorderAnnouncer.d.ts +29 -0
  164. package/dist/components/reorder/ReorderAnnouncer.d.ts.map +1 -0
  165. package/dist/components/reorder/ReorderAnnouncer.js +6 -0
  166. package/dist/components/reorder/ReorderAnnouncer.js.map +1 -0
  167. package/dist/components/reorder/useReorderList.d.ts +121 -0
  168. package/dist/components/reorder/useReorderList.d.ts.map +1 -0
  169. package/dist/components/reorder/useReorderList.js +241 -0
  170. package/dist/components/reorder/useReorderList.js.map +1 -0
  171. package/dist/components/rule-builder/RuleBuilder.d.ts +105 -0
  172. package/dist/components/rule-builder/RuleBuilder.d.ts.map +1 -0
  173. package/dist/components/rule-builder/RuleBuilder.js +138 -0
  174. package/dist/components/rule-builder/RuleBuilder.js.map +1 -0
  175. package/dist/components/sales-channel-picker/SalesChannelPicker.d.ts +15 -0
  176. package/dist/components/sales-channel-picker/SalesChannelPicker.d.ts.map +1 -0
  177. package/dist/components/sales-channel-picker/SalesChannelPicker.js +79 -0
  178. package/dist/components/sales-channel-picker/SalesChannelPicker.js.map +1 -0
  179. package/dist/components/scope-notice/ScopeNotice.d.ts +33 -0
  180. package/dist/components/scope-notice/ScopeNotice.d.ts.map +1 -0
  181. package/dist/components/scope-notice/ScopeNotice.js +11 -0
  182. package/dist/components/scope-notice/ScopeNotice.js.map +1 -0
  183. package/dist/components/scope-picker/ScopePicker.d.ts +28 -0
  184. package/dist/components/scope-picker/ScopePicker.d.ts.map +1 -0
  185. package/dist/components/scope-picker/ScopePicker.js +114 -0
  186. package/dist/components/scope-picker/ScopePicker.js.map +1 -0
  187. package/dist/components/scope-picker/sales-channels-api.d.ts +19 -0
  188. package/dist/components/scope-picker/sales-channels-api.d.ts.map +1 -0
  189. package/dist/components/scope-picker/sales-channels-api.js +30 -0
  190. package/dist/components/scope-picker/sales-channels-api.js.map +1 -0
  191. package/dist/components/status-transition-graph/StatusTransitionGraph.d.ts +26 -0
  192. package/dist/components/status-transition-graph/StatusTransitionGraph.d.ts.map +1 -0
  193. package/dist/components/status-transition-graph/StatusTransitionGraph.js +241 -0
  194. package/dist/components/status-transition-graph/StatusTransitionGraph.js.map +1 -0
  195. package/dist/components/status-transition-graph/index.d.ts +3 -0
  196. package/dist/components/status-transition-graph/index.d.ts.map +1 -0
  197. package/dist/components/status-transition-graph/index.js +2 -0
  198. package/dist/components/status-transition-graph/index.js.map +1 -0
  199. package/dist/contributions/index.d.ts +44 -0
  200. package/dist/contributions/index.d.ts.map +1 -0
  201. package/dist/contributions/index.js +42 -0
  202. package/dist/contributions/index.js.map +1 -0
  203. package/dist/contributions/zone-component.d.ts +70 -0
  204. package/dist/contributions/zone-component.d.ts.map +1 -0
  205. package/dist/contributions/zone-component.js +26 -0
  206. package/dist/contributions/zone-component.js.map +1 -0
  207. package/dist/field-protection/FieldProtectionPricePanel.d.ts +26 -0
  208. package/dist/field-protection/FieldProtectionPricePanel.d.ts.map +1 -0
  209. package/dist/field-protection/FieldProtectionPricePanel.js +14 -0
  210. package/dist/field-protection/FieldProtectionPricePanel.js.map +1 -0
  211. package/dist/field-protection/FieldProtectionSummary.d.ts +18 -0
  212. package/dist/field-protection/FieldProtectionSummary.d.ts.map +1 -0
  213. package/dist/field-protection/FieldProtectionSummary.js +18 -0
  214. package/dist/field-protection/FieldProtectionSummary.js.map +1 -0
  215. package/dist/field-protection/FieldProtectionToggle.d.ts +36 -0
  216. package/dist/field-protection/FieldProtectionToggle.d.ts.map +1 -0
  217. package/dist/field-protection/FieldProtectionToggle.js +30 -0
  218. package/dist/field-protection/FieldProtectionToggle.js.map +1 -0
  219. package/dist/field-protection/describe-path.d.ts +27 -0
  220. package/dist/field-protection/describe-path.d.ts.map +1 -0
  221. package/dist/field-protection/describe-path.js +28 -0
  222. package/dist/field-protection/describe-path.js.map +1 -0
  223. package/dist/field-protection/index.d.ts +46 -0
  224. package/dist/field-protection/index.d.ts.map +1 -0
  225. package/dist/field-protection/index.js +41 -0
  226. package/dist/field-protection/index.js.map +1 -0
  227. package/dist/field-protection/types.d.ts +93 -0
  228. package/dist/field-protection/types.d.ts.map +1 -0
  229. package/dist/field-protection/types.js +2 -0
  230. package/dist/field-protection/types.js.map +1 -0
  231. package/dist/field-protection/use-field-protection.d.ts +27 -0
  232. package/dist/field-protection/use-field-protection.d.ts.map +1 -0
  233. package/dist/field-protection/use-field-protection.js +149 -0
  234. package/dist/field-protection/use-field-protection.js.map +1 -0
  235. package/dist/i18n/TranslationProvider.d.ts +27 -0
  236. package/dist/i18n/TranslationProvider.d.ts.map +1 -0
  237. package/dist/i18n/TranslationProvider.js +130 -0
  238. package/dist/i18n/TranslationProvider.js.map +1 -0
  239. package/dist/i18n/app-language-context.d.ts +8 -0
  240. package/dist/i18n/app-language-context.d.ts.map +1 -0
  241. package/dist/i18n/app-language-context.js +13 -0
  242. package/dist/i18n/app-language-context.js.map +1 -0
  243. package/dist/i18n/index.d.ts +29 -0
  244. package/dist/i18n/index.d.ts.map +1 -0
  245. package/dist/i18n/index.js +25 -0
  246. package/dist/i18n/index.js.map +1 -0
  247. package/dist/i18n/interpolate.d.ts +2 -0
  248. package/dist/i18n/interpolate.d.ts.map +1 -0
  249. package/dist/i18n/interpolate.js +10 -0
  250. package/dist/i18n/interpolate.js.map +1 -0
  251. package/dist/i18n/language-storage.d.ts +16 -0
  252. package/dist/i18n/language-storage.d.ts.map +1 -0
  253. package/dist/i18n/language-storage.js +26 -0
  254. package/dist/i18n/language-storage.js.map +1 -0
  255. package/dist/i18n/resolver.d.ts +19 -0
  256. package/dist/i18n/resolver.d.ts.map +1 -0
  257. package/dist/i18n/resolver.js +23 -0
  258. package/dist/i18n/resolver.js.map +1 -0
  259. package/dist/i18n/types.d.ts +12 -0
  260. package/dist/i18n/types.d.ts.map +1 -0
  261. package/dist/i18n/types.js +7 -0
  262. package/dist/i18n/types.js.map +1 -0
  263. package/dist/i18n/useTranslation.d.ts +2 -0
  264. package/dist/i18n/useTranslation.d.ts.map +1 -0
  265. package/dist/i18n/useTranslation.js +16 -0
  266. package/dist/i18n/useTranslation.js.map +1 -0
  267. package/dist/lib/admin-actions/icon-map.d.ts +3 -0
  268. package/dist/lib/admin-actions/icon-map.d.ts.map +1 -0
  269. package/dist/lib/admin-actions/icon-map.js +115 -0
  270. package/dist/lib/admin-actions/icon-map.js.map +1 -0
  271. package/dist/lib/api-client.d.ts +55 -0
  272. package/dist/lib/api-client.d.ts.map +1 -0
  273. package/dist/lib/api-client.js +89 -0
  274. package/dist/lib/api-client.js.map +1 -0
  275. package/dist/lib/asset-url.d.ts +32 -0
  276. package/dist/lib/asset-url.d.ts.map +1 -0
  277. package/dist/lib/asset-url.js +42 -0
  278. package/dist/lib/asset-url.js.map +1 -0
  279. package/dist/lib/auth.d.ts +92 -0
  280. package/dist/lib/auth.d.ts.map +1 -0
  281. package/dist/lib/auth.js +133 -0
  282. package/dist/lib/auth.js.map +1 -0
  283. package/dist/lib/format.d.ts +2 -0
  284. package/dist/lib/format.d.ts.map +1 -0
  285. package/dist/lib/format.js +9 -0
  286. package/dist/lib/format.js.map +1 -0
  287. package/dist/lib/index.d.ts +46 -0
  288. package/dist/lib/index.d.ts.map +1 -0
  289. package/dist/lib/index.js +41 -0
  290. package/dist/lib/index.js.map +1 -0
  291. package/dist/lib/invoice-email-outcome.d.ts +53 -0
  292. package/dist/lib/invoice-email-outcome.d.ts.map +1 -0
  293. package/dist/lib/invoice-email-outcome.js +43 -0
  294. package/dist/lib/invoice-email-outcome.js.map +1 -0
  295. package/dist/lib/module-presence/ModulePresenceProvider.d.ts +49 -0
  296. package/dist/lib/module-presence/ModulePresenceProvider.d.ts.map +1 -0
  297. package/dist/lib/module-presence/ModulePresenceProvider.js +73 -0
  298. package/dist/lib/module-presence/ModulePresenceProvider.js.map +1 -0
  299. package/dist/lib/module-presence/api.d.ts +15 -0
  300. package/dist/lib/module-presence/api.d.ts.map +1 -0
  301. package/dist/lib/module-presence/api.js +25 -0
  302. package/dist/lib/module-presence/api.js.map +1 -0
  303. package/dist/lib/module-presence/index.d.ts +3 -0
  304. package/dist/lib/module-presence/index.d.ts.map +1 -0
  305. package/dist/lib/module-presence/index.js +3 -0
  306. package/dist/lib/module-presence/index.js.map +1 -0
  307. package/dist/lib/money.d.ts +22 -0
  308. package/dist/lib/money.d.ts.map +1 -0
  309. package/dist/lib/money.js +51 -0
  310. package/dist/lib/money.js.map +1 -0
  311. package/dist/lib/page-size-options.d.ts +15 -0
  312. package/dist/lib/page-size-options.d.ts.map +1 -0
  313. package/dist/lib/page-size-options.js +14 -0
  314. package/dist/lib/page-size-options.js.map +1 -0
  315. package/dist/lib/status-color.d.ts +32 -0
  316. package/dist/lib/status-color.d.ts.map +1 -0
  317. package/dist/lib/status-color.js +24 -0
  318. package/dist/lib/status-color.js.map +1 -0
  319. package/dist/lib/surface-visibility.d.ts +70 -0
  320. package/dist/lib/surface-visibility.d.ts.map +1 -0
  321. package/dist/lib/surface-visibility.js +37 -0
  322. package/dist/lib/surface-visibility.js.map +1 -0
  323. package/dist/lib/text-normalization.d.ts +56 -0
  324. package/dist/lib/text-normalization.d.ts.map +1 -0
  325. package/dist/lib/text-normalization.js +59 -0
  326. package/dist/lib/text-normalization.js.map +1 -0
  327. package/dist/lib/use-page-size-preference.d.ts +29 -0
  328. package/dist/lib/use-page-size-preference.d.ts.map +1 -0
  329. package/dist/lib/use-page-size-preference.js +61 -0
  330. package/dist/lib/use-page-size-preference.js.map +1 -0
  331. package/dist/lib/use-unsaved-changes-prompt.d.ts +23 -0
  332. package/dist/lib/use-unsaved-changes-prompt.d.ts.map +1 -0
  333. package/dist/lib/use-unsaved-changes-prompt.js +75 -0
  334. package/dist/lib/use-unsaved-changes-prompt.js.map +1 -0
  335. package/dist/lib/utils.d.ts +9 -0
  336. package/dist/lib/utils.d.ts.map +1 -0
  337. package/dist/lib/utils.js +12 -0
  338. package/dist/lib/utils.js.map +1 -0
  339. package/dist/lib/uuid.d.ts +8 -0
  340. package/dist/lib/uuid.d.ts.map +1 -0
  341. package/dist/lib/uuid.js +18 -0
  342. package/dist/lib/uuid.js.map +1 -0
  343. package/dist/ui/alert.d.ts +12 -0
  344. package/dist/ui/alert.d.ts.map +1 -0
  345. package/dist/ui/alert.js +22 -0
  346. package/dist/ui/alert.js.map +1 -0
  347. package/dist/ui/badge.d.ts +10 -0
  348. package/dist/ui/badge.d.ts.map +1 -0
  349. package/dist/ui/badge.js +21 -0
  350. package/dist/ui/badge.js.map +1 -0
  351. package/dist/ui/button.d.ts +12 -0
  352. package/dist/ui/button.d.ts.map +1 -0
  353. package/dist/ui/button.js +31 -0
  354. package/dist/ui/button.js.map +1 -0
  355. package/dist/ui/card.d.ts +8 -0
  356. package/dist/ui/card.d.ts.map +1 -0
  357. package/dist/ui/card.js +16 -0
  358. package/dist/ui/card.js.map +1 -0
  359. package/dist/ui/checkbox.d.ts +8 -0
  360. package/dist/ui/checkbox.d.ts.map +1 -0
  361. package/dist/ui/checkbox.js +11 -0
  362. package/dist/ui/checkbox.js.map +1 -0
  363. package/dist/ui/color-picker.d.ts +23 -0
  364. package/dist/ui/color-picker.d.ts.map +1 -0
  365. package/dist/ui/color-picker.js +76 -0
  366. package/dist/ui/color-picker.js.map +1 -0
  367. package/dist/ui/combobox.d.ts +68 -0
  368. package/dist/ui/combobox.d.ts.map +1 -0
  369. package/dist/ui/combobox.js +182 -0
  370. package/dist/ui/combobox.js.map +1 -0
  371. package/dist/ui/dropdown-menu.d.ts +26 -0
  372. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  373. package/dist/ui/dropdown-menu.js +38 -0
  374. package/dist/ui/dropdown-menu.js.map +1 -0
  375. package/dist/ui/index.d.ts +47 -0
  376. package/dist/ui/index.d.ts.map +1 -0
  377. package/dist/ui/index.js +38 -0
  378. package/dist/ui/index.js.map +1 -0
  379. package/dist/ui/input.d.ts +3 -0
  380. package/dist/ui/input.d.ts.map +1 -0
  381. package/dist/ui/input.js +8 -0
  382. package/dist/ui/input.js.map +1 -0
  383. package/dist/ui/label.d.ts +4 -0
  384. package/dist/ui/label.d.ts.map +1 -0
  385. package/dist/ui/label.js +9 -0
  386. package/dist/ui/label.js.map +1 -0
  387. package/dist/ui/multi-select.d.ts +32 -0
  388. package/dist/ui/multi-select.d.ts.map +1 -0
  389. package/dist/ui/multi-select.js +63 -0
  390. package/dist/ui/multi-select.js.map +1 -0
  391. package/dist/ui/page-header.d.ts +21 -0
  392. package/dist/ui/page-header.d.ts.map +1 -0
  393. package/dist/ui/page-header.js +9 -0
  394. package/dist/ui/page-header.js.map +1 -0
  395. package/dist/ui/route-tabs.d.ts +58 -0
  396. package/dist/ui/route-tabs.d.ts.map +1 -0
  397. package/dist/ui/route-tabs.js +34 -0
  398. package/dist/ui/route-tabs.js.map +1 -0
  399. package/dist/ui/save-button-group.d.ts +27 -0
  400. package/dist/ui/save-button-group.d.ts.map +1 -0
  401. package/dist/ui/save-button-group.js +44 -0
  402. package/dist/ui/save-button-group.js.map +1 -0
  403. package/dist/ui/section.d.ts +20 -0
  404. package/dist/ui/section.d.ts.map +1 -0
  405. package/dist/ui/section.js +7 -0
  406. package/dist/ui/section.js.map +1 -0
  407. package/dist/ui/select.d.ts +10 -0
  408. package/dist/ui/select.d.ts.map +1 -0
  409. package/dist/ui/select.js +15 -0
  410. package/dist/ui/select.js.map +1 -0
  411. package/dist/ui/separator.d.ts +3 -0
  412. package/dist/ui/separator.d.ts.map +1 -0
  413. package/dist/ui/separator.js +7 -0
  414. package/dist/ui/separator.js.map +1 -0
  415. package/dist/ui/table.d.ts +10 -0
  416. package/dist/ui/table.d.ts.map +1 -0
  417. package/dist/ui/table.js +20 -0
  418. package/dist/ui/table.js.map +1 -0
  419. package/dist/ui/textarea.d.ts +3 -0
  420. package/dist/ui/textarea.d.ts.map +1 -0
  421. package/dist/ui/textarea.js +8 -0
  422. package/dist/ui/textarea.js.map +1 -0
  423. package/dist/zones/AdminContributionsProvider.d.ts +72 -0
  424. package/dist/zones/AdminContributionsProvider.d.ts.map +1 -0
  425. package/dist/zones/AdminContributionsProvider.js +63 -0
  426. package/dist/zones/AdminContributionsProvider.js.map +1 -0
  427. package/dist/zones/AdminZone.d.ts +30 -0
  428. package/dist/zones/AdminZone.d.ts.map +1 -0
  429. package/dist/zones/AdminZone.js +59 -0
  430. package/dist/zones/AdminZone.js.map +1 -0
  431. package/dist/zones/RouteTabsZone.d.ts +62 -0
  432. package/dist/zones/RouteTabsZone.d.ts.map +1 -0
  433. package/dist/zones/RouteTabsZone.js +25 -0
  434. package/dist/zones/RouteTabsZone.js.map +1 -0
  435. package/dist/zones/ZoneErrorBoundary.d.ts +36 -0
  436. package/dist/zones/ZoneErrorBoundary.d.ts.map +1 -0
  437. package/dist/zones/ZoneErrorBoundary.js +44 -0
  438. package/dist/zones/ZoneErrorBoundary.js.map +1 -0
  439. package/dist/zones/index.d.ts +31 -0
  440. package/dist/zones/index.d.ts.map +1 -0
  441. package/dist/zones/index.js +27 -0
  442. package/dist/zones/index.js.map +1 -0
  443. package/dist/zones/use-admin-zone.d.ts +32 -0
  444. package/dist/zones/use-admin-zone.d.ts.map +1 -0
  445. package/dist/zones/use-admin-zone.js +96 -0
  446. package/dist/zones/use-admin-zone.js.map +1 -0
  447. package/package.json +94 -3
  448. package/tailwind.css +14 -0
  449. package/theme.css +2056 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryTreeNodeRow.js","sourceRoot":"","sources":["../../../src/components/category-tree-picker/CategoryTreeNodeRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAyB,MAAM,0BAA0B,CAAC;AAgB1F,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,KAAK,GAAG,uBAAuB,CACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EACxB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EACxB,KAAK,CAAC,MAAM,CACb,CAAC;IACF,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IACrE,MAAM,WAAW,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,WAAW,CAAC,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;QACpD,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnC,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,8CAA8C,EAC9C,aAAa,IAAI,cAAc,CAChC,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,aAEvD,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CACnB,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,sBAAsB,EAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ,mBACT,KAAK,CAAC,QAAQ,gBACjB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EACpE,OAAO,EAAE,KAAK,CAAC,cAAc,YAE5B,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,GACjE,CACV,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,+BAA+B,wBAAe,CAC/D,EACD,KAAC,QAAQ,IACP,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,kBACV,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBACzC,KAAK,EACjB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,GAAS,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,GAC5C,EACF,eACE,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,aAAa,IAAI,6BAA6B,CAAC,EACjF,KAAK,EAAE,KAAK,YAEX,KAAK,GACD,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type CategoryTreePickerCategory } from './category-tree-utils.js';
3
+ export interface CategoryTreePickerProps {
4
+ categories: CategoryTreePickerCategory[];
5
+ selectedIds: string[];
6
+ onChange: (ids: string[]) => void;
7
+ disabled?: boolean;
8
+ loading?: boolean;
9
+ error?: string | null;
10
+ className?: string;
11
+ }
12
+ /**
13
+ * **Its copy is `core`'s, not `catalog`'s** (R-1, 2026-08-31). The component
14
+ * called `useTranslation('catalog')` from Phase 1b, which `admin-kit-surface.md`
15
+ * R6 rules is module knowledge for the same reason an admin API client is: the
16
+ * bundle behind a namespace is shipped by a module package the kit does not and
17
+ * may not depend on, resolved at runtime by string, and a renamed key renders
18
+ * `core.<key>` at the operator rather than failing to compile. All seven
19
+ * `categoryTreePicker.*` keys moved into `core` under the same spelling; none
20
+ * duplicates a concept `core` already carries, so none is reused.
21
+ */
22
+ export declare function CategoryTreePicker(props: CategoryTreePickerProps): ReactNode;
23
+ //# sourceMappingURL=CategoryTreePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryTreePicker.d.ts","sourceRoot":"","sources":["../../../src/components/category-tree-picker/CategoryTreePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMlF,OAAO,EAQL,KAAK,0BAA0B,EAChC,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,0BAA0B,EAAE,CAAC;IACzC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,SAAS,CAgI5E"}
@@ -0,0 +1,82 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from 'react';
3
+ import { Alert, AlertDescription } from '../../ui/alert.js';
4
+ import { Input } from '../../ui/input.js';
5
+ import { useTranslation } from '../../i18n/useTranslation.js';
6
+ import { useTranslationContext } from '../../i18n/TranslationProvider.js';
7
+ import { CategoryTreeNodeRow } from './CategoryTreeNodeRow.js';
8
+ import { adminLanguageToLocale, ancestorIdsForSelected, buildCategoryTree, computeParentIndeterminateIds, expandedIdsForFilteredTree, filterCategoryTree, visibleFlattenedTree, } from './category-tree-utils.js';
9
+ /**
10
+ * **Its copy is `core`'s, not `catalog`'s** (R-1, 2026-08-31). The component
11
+ * called `useTranslation('catalog')` from Phase 1b, which `admin-kit-surface.md`
12
+ * R6 rules is module knowledge for the same reason an admin API client is: the
13
+ * bundle behind a namespace is shipped by a module package the kit does not and
14
+ * may not depend on, resolved at runtime by string, and a renamed key renders
15
+ * `core.<key>` at the operator rather than failing to compile. All seven
16
+ * `categoryTreePicker.*` keys moved into `core` under the same spelling; none
17
+ * duplicates a concept `core` already carries, so none is reused.
18
+ */
19
+ export function CategoryTreePicker(props) {
20
+ const t = useTranslation('core');
21
+ const { language } = useTranslationContext();
22
+ const locale = adminLanguageToLocale(language);
23
+ const [expandedIds, setExpandedIds] = useState(() => new Set());
24
+ const [filterQuery, setFilterQuery] = useState('');
25
+ const tree = useMemo(() => buildCategoryTree(props.categories), [props.categories]);
26
+ const filterActive = filterQuery.trim().length > 0;
27
+ const filteredTree = useMemo(() => (filterActive ? filterCategoryTree(tree, filterQuery, locale) : tree), [tree, filterQuery, filterActive, locale]);
28
+ const effectiveExpanded = useMemo(() => {
29
+ if (filterActive)
30
+ return expandedIdsForFilteredTree(filteredTree);
31
+ return expandedIds;
32
+ }, [filterActive, filteredTree, expandedIds]);
33
+ const visibleRows = useMemo(() => visibleFlattenedTree(filteredTree, effectiveExpanded, filterActive), [filteredTree, effectiveExpanded, filterActive]);
34
+ const selectedSet = useMemo(() => new Set(props.selectedIds), [props.selectedIds]);
35
+ const indeterminateIds = useMemo(() => computeParentIndeterminateIds(tree, selectedSet), [tree, selectedSet]);
36
+ // Keep branches expanded up to each selected category so deep picks are visible.
37
+ useEffect(() => {
38
+ const ancestors = ancestorIdsForSelected(props.categories, selectedSet);
39
+ if (ancestors.size === 0)
40
+ return;
41
+ setExpandedIds((prev) => {
42
+ const next = new Set(prev);
43
+ let changed = false;
44
+ for (const id of ancestors) {
45
+ if (!next.has(id)) {
46
+ next.add(id);
47
+ changed = true;
48
+ }
49
+ }
50
+ return changed ? next : prev;
51
+ });
52
+ }, [props.categories, selectedSet]);
53
+ const toggleExpand = useCallback((id) => {
54
+ setExpandedIds((prev) => {
55
+ const next = new Set(prev);
56
+ if (next.has(id))
57
+ next.delete(id);
58
+ else
59
+ next.add(id);
60
+ return next;
61
+ });
62
+ }, []);
63
+ const toggleSelect = useCallback((id) => {
64
+ if (props.disabled)
65
+ return;
66
+ if (selectedSet.has(id)) {
67
+ props.onChange(props.selectedIds.filter((x) => x !== id));
68
+ }
69
+ else {
70
+ props.onChange([...props.selectedIds, id]);
71
+ }
72
+ }, [props, selectedSet]);
73
+ const wrapperClass = props.className ? `space-y-2 ${props.className}` : 'space-y-2';
74
+ if (props.loading) {
75
+ return _jsx("p", { className: "text-sm text-muted-foreground", children: t('categoryTreePicker.loading') });
76
+ }
77
+ if (props.error) {
78
+ return (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: props.error }) }));
79
+ }
80
+ return (_jsxs("div", { className: wrapperClass, children: [_jsx(Input, { type: "search", value: filterQuery, disabled: props.disabled, placeholder: t('categoryTreePicker.filter.placeholder'), "aria-label": t('categoryTreePicker.filter.placeholder'), onChange: (e) => setFilterQuery(e.target.value) }), _jsx("div", { id: "category-tree-picker-list", role: "tree", "aria-label": t('categoryTreePicker.aria.treeLabel'), className: "max-h-64 overflow-y-auto rounded-md border border-input p-1", children: props.categories.length === 0 ? (_jsx("p", { className: "px-2 py-3 text-sm text-muted-foreground", children: t('categoryTreePicker.empty.noCategories') })) : visibleRows.length === 0 ? (_jsx("p", { className: "px-2 py-3 text-sm text-muted-foreground", children: t('categoryTreePicker.empty.noMatches') })) : (visibleRows.map(({ node, expanded, hasChildren }) => (_jsx(CategoryTreeNodeRow, { node: node, locale: locale, checked: selectedSet.has(node.category.id), indeterminate: indeterminateIds.has(node.category.id), disabled: props.disabled ?? false, hasChildren: hasChildren, expanded: expanded, expandLabel: t('categoryTreePicker.expand'), collapseLabel: t('categoryTreePicker.collapse'), onToggleExpand: () => toggleExpand(node.category.id), onToggleSelect: () => toggleSelect(node.category.id) }, node.category.id)))) })] }));
81
+ }
82
+ //# sourceMappingURL=CategoryTreePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryTreePicker.js","sourceRoot":"","sources":["../../../src/components/category-tree-picker/CategoryTreePicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export interface CategoryTreePickerCategory {
2
+ id: string;
3
+ parentCategoryId: string | null;
4
+ name: Record<string, string>;
5
+ slug: string;
6
+ sortOrder: number;
7
+ }
8
+ export interface CategoryTreeNode {
9
+ category: CategoryTreePickerCategory;
10
+ depth: number;
11
+ children: CategoryTreeNode[];
12
+ }
13
+ export declare function adminLanguageToLocale(language: string): string;
14
+ export declare function pickCategoryDisplayName(name: Record<string, string>, slug: string, locale: string): string;
15
+ export declare function buildCategoryTree(rows: CategoryTreePickerCategory[]): CategoryTreeNode[];
16
+ export declare function flattenCategoryTree(nodes: CategoryTreeNode[]): CategoryTreeNode[];
17
+ /** Returns visible nodes when filter is active (matched nodes + ancestors). */
18
+ export declare function filterCategoryTree(nodes: CategoryTreeNode[], query: string, locale: string): CategoryTreeNode[];
19
+ /** Node ids that must render expanded while a filter is active. */
20
+ export declare function expandedIdsForFilteredTree(nodes: CategoryTreeNode[]): Set<string>;
21
+ /** True when this node or any descendant is in `selected`. */
22
+ export declare function subtreeHasSelection(node: CategoryTreeNode, selected: ReadonlySet<string>): boolean;
23
+ /**
24
+ * Parent nodes that should show indeterminate checkbox: some descendant is
25
+ * selected but the parent itself is not.
26
+ */
27
+ export declare function computeParentIndeterminateIds(nodes: CategoryTreeNode[], selected: ReadonlySet<string>): Set<string>;
28
+ /** Ancestor category ids to expand so deep selections stay visible. */
29
+ export declare function ancestorIdsForSelected(categories: CategoryTreePickerCategory[], selected: ReadonlySet<string>): Set<string>;
30
+ export declare function visibleFlattenedTree(nodes: CategoryTreeNode[], expandedIds: Set<string>, filterActive: boolean): Array<{
31
+ node: CategoryTreeNode;
32
+ expanded: boolean;
33
+ hasChildren: boolean;
34
+ }>;
35
+ //# sourceMappingURL=category-tree-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-tree-utils.d.ts","sourceRoot":"","sources":["../../../src/components/category-tree-picker/category-tree-utils.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,0BAA0B,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAOD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,MAAM,CAQR;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,0BAA0B,EAAE,GAAG,gBAAgB,EAAE,CAoBxF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAOjF;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EAAE,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,gBAAgB,EAAE,CAqBpB;AAED,mEAAmE;AACnE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAYjF;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAGlG;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,gBAAgB,EAAE,EACzB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,GAAG,CAAC,MAAM,CAAC,CAiBb;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,0BAA0B,EAAE,EACxC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,GAAG,CAAC,MAAM,CAAC,CAWb;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,gBAAgB,EAAE,EACzB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,YAAY,EAAE,OAAO,GACpB,KAAK,CAAC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAgB5E"}
@@ -0,0 +1,140 @@
1
+ import { normalize } from '../../lib/text-normalization.js';
2
+ const LOCALE_BY_ADMIN_LANGUAGE = {
3
+ en: 'en-US',
4
+ pl: 'pl-PL',
5
+ };
6
+ export function adminLanguageToLocale(language) {
7
+ return LOCALE_BY_ADMIN_LANGUAGE[language] ?? 'en-US';
8
+ }
9
+ export function pickCategoryDisplayName(name, slug, locale) {
10
+ const direct = name[locale]?.trim();
11
+ if (direct)
12
+ return direct;
13
+ const en = name['en-US']?.trim();
14
+ if (en)
15
+ return en;
16
+ const first = Object.values(name).find((v) => v?.trim());
17
+ if (first?.trim())
18
+ return first.trim();
19
+ return slug;
20
+ }
21
+ export function buildCategoryTree(rows) {
22
+ const byParent = new Map();
23
+ for (const row of rows) {
24
+ const key = row.parentCategoryId;
25
+ const arr = byParent.get(key) ?? [];
26
+ arr.push(row);
27
+ byParent.set(key, arr);
28
+ }
29
+ function build(parentId, depth) {
30
+ return (byParent.get(parentId) ?? [])
31
+ .sort((a, b) => a.sortOrder - b.sortOrder || a.slug.localeCompare(b.slug))
32
+ .map((category) => ({
33
+ category,
34
+ depth,
35
+ children: build(category.id, depth + 1),
36
+ }));
37
+ }
38
+ return build(null, 0);
39
+ }
40
+ export function flattenCategoryTree(nodes) {
41
+ const out = [];
42
+ for (const node of nodes) {
43
+ out.push(node);
44
+ out.push(...flattenCategoryTree(node.children));
45
+ }
46
+ return out;
47
+ }
48
+ /** Returns visible nodes when filter is active (matched nodes + ancestors). */
49
+ export function filterCategoryTree(nodes, query, locale) {
50
+ const q = normalize(query);
51
+ if (!q)
52
+ return nodes;
53
+ function filterList(list) {
54
+ const out = [];
55
+ for (const node of list) {
56
+ const label = pickCategoryDisplayName(node.category.name, node.category.slug, locale);
57
+ const selfMatch = normalize(label).includes(q);
58
+ const filteredChildren = filterList(node.children);
59
+ if (selfMatch || filteredChildren.length > 0) {
60
+ out.push({
61
+ ...node,
62
+ children: filteredChildren,
63
+ });
64
+ }
65
+ }
66
+ return out;
67
+ }
68
+ return filterList(nodes);
69
+ }
70
+ /** Node ids that must render expanded while a filter is active. */
71
+ export function expandedIdsForFilteredTree(nodes) {
72
+ const ids = new Set();
73
+ function walk(list) {
74
+ for (const node of list) {
75
+ if (node.children.length > 0) {
76
+ ids.add(node.category.id);
77
+ walk(node.children);
78
+ }
79
+ }
80
+ }
81
+ walk(nodes);
82
+ return ids;
83
+ }
84
+ /** True when this node or any descendant is in `selected`. */
85
+ export function subtreeHasSelection(node, selected) {
86
+ if (selected.has(node.category.id))
87
+ return true;
88
+ return node.children.some((child) => subtreeHasSelection(child, selected));
89
+ }
90
+ /**
91
+ * Parent nodes that should show indeterminate checkbox: some descendant is
92
+ * selected but the parent itself is not.
93
+ */
94
+ export function computeParentIndeterminateIds(nodes, selected) {
95
+ const indeterminate = new Set();
96
+ function walk(node) {
97
+ let anyBelow = false;
98
+ for (const child of node.children) {
99
+ if (walk(child))
100
+ anyBelow = true;
101
+ }
102
+ const self = selected.has(node.category.id);
103
+ if (anyBelow && !self && node.children.length > 0) {
104
+ indeterminate.add(node.category.id);
105
+ }
106
+ return self || anyBelow;
107
+ }
108
+ for (const root of nodes)
109
+ walk(root);
110
+ return indeterminate;
111
+ }
112
+ /** Ancestor category ids to expand so deep selections stay visible. */
113
+ export function ancestorIdsForSelected(categories, selected) {
114
+ const parentById = new Map(categories.map((c) => [c.id, c.parentCategoryId]));
115
+ const ancestors = new Set();
116
+ for (const id of selected) {
117
+ let parentId = parentById.get(id) ?? null;
118
+ while (parentId) {
119
+ ancestors.add(parentId);
120
+ parentId = parentById.get(parentId) ?? null;
121
+ }
122
+ }
123
+ return ancestors;
124
+ }
125
+ export function visibleFlattenedTree(nodes, expandedIds, filterActive) {
126
+ const rows = [];
127
+ function walk(list) {
128
+ for (const node of list) {
129
+ const hasChildren = node.children.length > 0;
130
+ const expanded = filterActive || expandedIds.has(node.category.id);
131
+ rows.push({ node, expanded, hasChildren });
132
+ if (hasChildren && expanded) {
133
+ walk(node.children);
134
+ }
135
+ }
136
+ }
137
+ walk(nodes);
138
+ return rows;
139
+ }
140
+ //# sourceMappingURL=category-tree-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-tree-utils.js","sourceRoot":"","sources":["../../../src/components/category-tree-picker/category-tree-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { CategoryTreePicker } from './CategoryTreePicker.js';
2
+ export type { CategoryTreePickerProps } from './CategoryTreePicker.js';
3
+ export type { CategoryTreePickerCategory } from './category-tree-utils.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/category-tree-picker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,YAAY,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CategoryTreePicker } from './CategoryTreePicker.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/category-tree-picker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type CSSProperties } from 'react';
2
+ import type { ECElementEvent, EChartsOption, EChartsType } from 'echarts';
3
+ export type EChartEventHandler = (params: ECElementEvent) => void;
4
+ export interface EChartProps {
5
+ /** Full ECharts option object. Replacing it re-renders the chart. */
6
+ option: EChartsOption;
7
+ /** When true (default) the option fully replaces the previous one. */
8
+ notMerge?: boolean;
9
+ /** Map of ECharts event name → handler, e.g. `{ click: fn }`. Memoize it. */
10
+ onEvents?: Record<string, EChartEventHandler>;
11
+ /** Called once with the live instance after init (for dispatchAction, etc.). */
12
+ onReady?: (chart: EChartsType) => void;
13
+ className?: string;
14
+ style?: CSSProperties;
15
+ }
16
+ export declare function EChart({ option, notMerge, onEvents, onReady, className, style, }: EChartProps): React.ReactNode;
17
+ //# sourceMappingURL=echart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echart.d.ts","sourceRoot":"","sources":["../../../src/components/charts/echart.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,MAAM,EAAE,aAAa,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9C,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,QAAe,EACf,QAAQ,EACR,OAAO,EACP,SAAS,EACT,KAAK,GACN,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CA+C/B"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Thin, reusable React wrapper around Apache ECharts.
3
+ //
4
+ // Owns the lifecycle the way React can't: it creates the chart instance once,
5
+ // keeps it sized to its container via a ResizeObserver, pushes new `option`
6
+ // objects on change, and disposes on unmount. Event handlers are (re)bound
7
+ // whenever `onEvents` changes — memoize that map in the caller to avoid churn.
8
+ //
9
+ // Intended as the shared charting primitive for the admin panel (status-graph
10
+ // editor today, analytics module later), so it stays chart-type agnostic: the
11
+ // caller supplies a full `EChartsOption`.
12
+ //
13
+ // <EChart option={option} className="h-96 w-full" onEvents={events} />
14
+ import { useEffect, useRef } from 'react';
15
+ import * as echarts from 'echarts';
16
+ export function EChart({ option, notMerge = true, onEvents, onReady, className, style, }) {
17
+ const containerRef = useRef(null);
18
+ const chartRef = useRef(null);
19
+ const onReadyRef = useRef(onReady);
20
+ onReadyRef.current = onReady;
21
+ // Create the instance once and keep it sized to the container.
22
+ useEffect(() => {
23
+ const el = containerRef.current;
24
+ if (!el)
25
+ return;
26
+ const chart = echarts.init(el);
27
+ chartRef.current = chart;
28
+ onReadyRef.current?.(chart);
29
+ const observer = new ResizeObserver(() => chart.resize());
30
+ observer.observe(el);
31
+ // When the chart mounts inside a flex/grid child, its final width may only
32
+ // be known after the first layout pass — resize on the next frame so the
33
+ // canvas fills the full container width instead of an initial narrow guess.
34
+ const raf = requestAnimationFrame(() => chart.resize());
35
+ return () => {
36
+ cancelAnimationFrame(raf);
37
+ observer.disconnect();
38
+ chart.dispose();
39
+ chartRef.current = null;
40
+ };
41
+ }, []);
42
+ // Push option updates.
43
+ useEffect(() => {
44
+ chartRef.current?.setOption(option, notMerge);
45
+ }, [option, notMerge]);
46
+ // (Re)bind event handlers.
47
+ useEffect(() => {
48
+ const chart = chartRef.current;
49
+ if (!chart || !onEvents)
50
+ return;
51
+ const entries = Object.entries(onEvents);
52
+ for (const [event, handler] of entries)
53
+ chart.on(event, handler);
54
+ return () => {
55
+ for (const [event, handler] of entries)
56
+ chart.off(event, handler);
57
+ };
58
+ }, [onEvents]);
59
+ return _jsx("div", { ref: containerRef, className: className, style: style });
60
+ }
61
+ //# sourceMappingURL=echart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echart.js","sourceRoot":"","sources":["../../../src/components/charts/echart.tsx"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,2EAA2E;AAC3E,+EAA+E;AAC/E,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,0CAA0C;AAC1C,EAAE;AACF,yEAAyE;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAsB,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAkBnC,MAAM,UAAU,MAAM,CAAC,EACrB,MAAM,EACN,QAAQ,GAAG,IAAI,EACf,QAAQ,EACR,OAAO,EACP,SAAS,EACT,KAAK,GACO;IACZ,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,+DAA+D;IAC/D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAE5B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAErB,2EAA2E;QAC3E,yEAAyE;QACzE,4EAA4E;QAC5E,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAExD,OAAO,GAAG,EAAE;YACV,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC1B,QAAQ,CAAC,UAAU,EAAE,CAAC;YACtB,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,uBAAuB;IACvB,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,2BAA2B;IAC3B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAO;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,OAAO;YAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAgB,CAAC,CAAC;QAC1E,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,OAAO;gBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAgB,CAAC,CAAC;QAC7E,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,cAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AACxE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface CmsBlockPickerProps {
3
+ value: string | null;
4
+ onChange: (blockId: string | null) => void;
5
+ placeholder?: string;
6
+ emptyMessage?: string;
7
+ clearable?: boolean;
8
+ disabled?: boolean;
9
+ ariaLabel?: string;
10
+ id?: string;
11
+ className?: string;
12
+ }
13
+ export declare function CmsBlockPicker(props: CmsBlockPickerProps): ReactNode;
14
+ //# sourceMappingURL=CmsBlockPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmsBlockPicker.d.ts","sourceRoot":"","sources":["../../../src/components/cms-picker/CmsBlockPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA4BrE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAgDpE"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ // `apiClient` comes through the kit's published `lib` **barrel** rather than
4
+ // through `../../lib/api-client.js` — see the note in
5
+ // `../sales-channel-picker/SalesChannelPicker.tsx`: the barrel is the only
6
+ // spelling `vi.mock` can name from outside the package.
7
+ import { ApiError, apiClient } from '../../lib/index.js';
8
+ import { Combobox } from '../../ui/combobox.js';
9
+ export function CmsBlockPicker(props) {
10
+ const [blocks, setBlocks] = useState([]);
11
+ const [loading, setLoading] = useState(true);
12
+ const [error, setError] = useState(null);
13
+ useEffect(() => {
14
+ let alive = true;
15
+ setLoading(true);
16
+ apiClient
17
+ .get('/api/v1/admin/cms/blocks')
18
+ .then((res) => {
19
+ if (!alive)
20
+ return;
21
+ setBlocks(res.data);
22
+ })
23
+ .catch((err) => {
24
+ if (!alive)
25
+ return;
26
+ setError(err instanceof ApiError ? err.envelope.error.message : 'Failed to load blocks.');
27
+ })
28
+ .finally(() => {
29
+ if (alive)
30
+ setLoading(false);
31
+ });
32
+ return () => {
33
+ alive = false;
34
+ };
35
+ }, []);
36
+ const options = useMemo(() => blocks.map((b) => ({ value: b.id, label: b.name, description: b.code })), [blocks]);
37
+ const emptyMessage = props.emptyMessage ?? error ?? 'No CMS blocks.';
38
+ return (_jsx(Combobox, { options: options, value: props.value, onChange: props.onChange, loading: loading, clearable: props.clearable ?? true, disabled: props.disabled ?? false, placeholder: props.placeholder ?? 'Select a CMS block…', emptyMessage: emptyMessage, ariaLabel: props.ariaLabel ?? 'Select CMS block', id: props.id ?? '', className: props.className ?? '' }));
39
+ }
40
+ //# sourceMappingURL=CmsBlockPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmsBlockPicker.js","sourceRoot":"","sources":["../../../src/components/cms-picker/CmsBlockPicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAErE,6EAA6E;AAC7E,sDAAsD;AACtD,2EAA2E;AAC3E,wDAAwD;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAuB,MAAM,sBAAsB,CAAC;AAiCrE,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,SAAS;aACN,GAAG,CAAuB,0BAA0B,CAAC;aACrD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,QAAQ,CAAC,GAAG,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;QAC5F,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,KAAK;gBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACL,OAAO,GAAS,EAAE;YAChB,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAC9E,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,IAAI,gBAAgB,CAAC;IAErE,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,EAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,EACjC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,qBAAqB,EACvD,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,kBAAkB,EAChD,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAClB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,GAChC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface CmsPagePickerProps {
3
+ value: string | null;
4
+ onChange: (pageId: string | null) => void;
5
+ salesChannelId?: string;
6
+ placeholder?: string;
7
+ emptyMessage?: string;
8
+ clearable?: boolean;
9
+ disabled?: boolean;
10
+ ariaLabel?: string;
11
+ id?: string;
12
+ className?: string;
13
+ }
14
+ export declare function CmsPagePicker(props: CmsPagePickerProps): ReactNode;
15
+ //# sourceMappingURL=CmsPagePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmsPagePicker.d.ts","sourceRoot":"","sources":["../../../src/components/cms-picker/CmsPagePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAyC1F,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAkFlE"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ // `apiClient` comes through the kit's published `lib` **barrel** rather than
4
+ // through `../../lib/api-client.js` — see the note in
5
+ // `../sales-channel-picker/SalesChannelPicker.tsx`: the barrel is the only
6
+ // spelling `vi.mock` can name from outside the package.
7
+ import { ApiError, apiClient } from '../../lib/index.js';
8
+ import { Combobox } from '../../ui/combobox.js';
9
+ function listCmsPages(query) {
10
+ const params = new URLSearchParams();
11
+ if (query.q)
12
+ params.set('q', query.q);
13
+ if (query.salesChannelId)
14
+ params.set('salesChannelId', query.salesChannelId);
15
+ params.set('limit', String(query.limit));
16
+ return apiClient.get(`/api/v1/admin/cms/pages?${params.toString()}`);
17
+ }
18
+ const SEARCH_DEBOUNCE_MS = 250;
19
+ const DEFAULT_LIMIT = 20;
20
+ export function CmsPagePicker(props) {
21
+ const [cache, setCache] = useState(() => new Map());
22
+ const [options, setOptions] = useState([]);
23
+ const [searching, setSearching] = useState(false);
24
+ const [error, setError] = useState(null);
25
+ const timerRef = useRef(null);
26
+ const seqRef = useRef(0);
27
+ useEffect(() => () => {
28
+ if (timerRef.current !== null)
29
+ clearTimeout(timerRef.current);
30
+ }, []);
31
+ const runSearch = useCallback(async (query, seq) => {
32
+ setSearching(true);
33
+ setError(null);
34
+ try {
35
+ const trimmed = query.trim();
36
+ const res = await listCmsPages({
37
+ limit: DEFAULT_LIMIT,
38
+ ...(trimmed.length > 0 ? { q: trimmed } : {}),
39
+ ...(props.salesChannelId ? { salesChannelId: props.salesChannelId } : {}),
40
+ });
41
+ if (seq !== seqRef.current)
42
+ return;
43
+ setCache((prev) => {
44
+ const next = new Map(prev);
45
+ for (const p of res.data)
46
+ next.set(p.id, p);
47
+ return next;
48
+ });
49
+ setOptions(res.data.map((p) => ({
50
+ value: p.id,
51
+ label: p.name,
52
+ description: `/${p.slug}${p.status === 'published' ? '' : ` · ${p.status}`}`,
53
+ })));
54
+ }
55
+ catch (err) {
56
+ if (seq !== seqRef.current)
57
+ return;
58
+ setError(err instanceof ApiError ? err.envelope.error.message : 'Search failed.');
59
+ setOptions([]);
60
+ }
61
+ finally {
62
+ if (seq === seqRef.current)
63
+ setSearching(false);
64
+ }
65
+ }, [props.salesChannelId]);
66
+ const handleSearchChange = useCallback((query) => {
67
+ if (timerRef.current !== null)
68
+ clearTimeout(timerRef.current);
69
+ const seq = ++seqRef.current;
70
+ timerRef.current = setTimeout(() => void runSearch(query, seq), SEARCH_DEBOUNCE_MS);
71
+ }, [runSearch]);
72
+ const selectedLabel = useMemo(() => {
73
+ if (!props.value)
74
+ return '';
75
+ return cache.get(props.value)?.name ?? '';
76
+ }, [props.value, cache]);
77
+ const emptyMessage = props.emptyMessage ?? error ?? (searching ? 'Searching…' : 'No matching pages.');
78
+ return (_jsx(Combobox, { options: options, value: props.value, onChange: props.onChange, onSearchChange: handleSearchChange, manualFilter: true, loading: searching, clearable: props.clearable ?? true, disabled: props.disabled ?? false, placeholder: props.placeholder ?? 'Search CMS pages…', emptyMessage: emptyMessage, ariaLabel: props.ariaLabel ?? 'Select CMS page', id: props.id ?? '', className: props.className ?? '', selectedLabel: selectedLabel }));
79
+ }
80
+ //# sourceMappingURL=CmsPagePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmsPagePicker.js","sourceRoot":"","sources":["../../../src/components/cms-picker/CmsPagePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAE1F,6EAA6E;AAC7E,sDAAsD;AACtD,2EAA2E;AAC3E,wDAAwD;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAuB,MAAM,sBAAsB,CAAC;AAsBrE,SAAS,YAAY,CAAC,KAIrB;IACC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,cAAc;QAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7E,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC,GAAG,CAAsB,2BAA2B,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5F,CAAC;AAeD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA8B,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACjF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA2B,EAAE,CAAC,CAAC;IACrE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACzB,SAAS,CAAC,GAAG,EAAE,CAAC,GAAS,EAAE;QACzB,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;YAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,WAAW,CAC3B,KAAK,EAAE,KAAa,EAAE,GAAW,EAAiB,EAAE;QAClD,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC;gBAC7B,KAAK,EAAE,aAAa;gBACpB,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E,CAAC,CAAC;YACH,IAAI,GAAG,KAAK,MAAM,CAAC,OAAO;gBAAE,OAAO;YACnC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI;oBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC5C,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,UAAU,CACR,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnB,KAAK,EAAE,CAAC,CAAC,EAAE;gBACX,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;aAC7E,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,KAAK,MAAM,CAAC,OAAO;gBAAE,OAAO;YACnC,QAAQ,CAAC,GAAG,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAClF,UAAU,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,IAAI,GAAG,KAAK,MAAM,CAAC,OAAO;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,cAAc,CAAC,CACvB,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,KAAa,EAAQ,EAAE;QACtB,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;YAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;QAC7B,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACtF,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IAC5C,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzB,MAAM,YAAY,GAChB,KAAK,CAAC,YAAY,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAEnF,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,cAAc,EAAE,kBAAkB,EAClC,YAAY,QACZ,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,EAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,EACjC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,mBAAmB,EACrD,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,iBAAiB,EAC/C,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAClB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,EAChC,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;AACJ,CAAC"}