@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,30 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * A tab strip over content language codes: the caller passes the codes and the
4
+ * active one in, and gets the chosen one back.
5
+ *
6
+ * **Published by feature 091, P8.** The component sat under `cms`' admin
7
+ * directory and was rendered by `blog`'s two editors as well as by `cms`' own
8
+ * three — four `cross-module-imports` keys over a strip that holds nothing of
9
+ * `cms`: `admin-component-contribution.md` Z1 question 1 (value in, value back)
10
+ * settles that the **consumer** decides it appears, which is a published
11
+ * component and not a zone contribution.
12
+ *
13
+ * **Its copy is `core`'s, not `cms`'** (R-1, `admin-kit-surface.md` R6). A
14
+ * translation namespace is module knowledge: the bundle behind one ships in a
15
+ * module package the kit does not and may not depend on, it is resolved at
16
+ * runtime by string, and a key the namespace does not carry renders
17
+ * `core.<key>` at the operator rather than failing to compile. Both of this
18
+ * component's keys had no other reader anywhere in the tree, so they moved to
19
+ * `core` under `contentLanguageTabs.*` rather than being copied.
20
+ */
21
+ export interface ContentLanguageTabsProps {
22
+ /** The content language codes to offer, in the order they should read. */
23
+ languages: string[];
24
+ /** The code currently selected, or `null` while nothing is. */
25
+ activeLanguage: string | null;
26
+ /** The caller commits the chosen code. */
27
+ onChange: (language: string) => void;
28
+ }
29
+ export declare function ContentLanguageTabs({ languages, activeLanguage, onChange, }: ContentLanguageTabsProps): ReactNode;
30
+ //# sourceMappingURL=ContentLanguageTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentLanguageTabs.d.ts","sourceRoot":"","sources":["../../../src/components/content-language-tabs/ContentLanguageTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,0CAA0C;IAC1C,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,cAAc,EACd,QAAQ,GACT,EAAE,wBAAwB,GAAG,SAAS,CA+BtC"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button } from '../../ui/button.js';
3
+ import { useTranslation } from '../../i18n/useTranslation.js';
4
+ export function ContentLanguageTabs({ languages, activeLanguage, onChange, }) {
5
+ const t = useTranslation('core');
6
+ if (languages.length === 0) {
7
+ return _jsx("p", { className: "text-sm text-muted-foreground", children: t('contentLanguageTabs.empty') });
8
+ }
9
+ return (_jsx("div", { className: "flex flex-wrap gap-2", role: "tablist", "aria-label": t('contentLanguageTabs.ariaLabel'), children: languages.map((language) => {
10
+ const active = language === activeLanguage;
11
+ return (_jsx(Button, { type: "button", variant: active ? 'default' : 'outline', size: "sm", onClick: () => onChange(language), role: "tab", "aria-selected": active, children: language }, language));
12
+ }) }));
13
+ }
14
+ //# sourceMappingURL=ContentLanguageTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentLanguageTabs.js","sourceRoot":"","sources":["../../../src/components/content-language-tabs/ContentLanguageTabs.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AA8B9D,MAAM,UAAU,mBAAmB,CAAC,EAClC,SAAS,EACT,cAAc,EACd,QAAQ,GACiB;IACzB,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAG,SAAS,EAAC,+BAA+B,YAAE,CAAC,CAAC,2BAA2B,CAAC,GAAK,CAAC;IAC3F,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAC,sBAAsB,EAChC,IAAI,EAAC,SAAS,gBACF,CAAC,CAAC,+BAA+B,CAAC,YAE7C,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,QAAQ,KAAK,cAAc,CAAC;YAC3C,OAAO,CACL,KAAC,MAAM,IAEL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACvC,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACjC,IAAI,EAAC,KAAK,mBACK,MAAM,YAEpB,QAAQ,IARJ,QAAQ,CASN,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface CountrySelectProps {
3
+ /** Selected ISO 3166-1 alpha-2 country code (e.g. "PL"), or null when empty. */
4
+ value: string | null;
5
+ /** Fires with the new alpha-2 code, or null when cleared. */
6
+ onChange: (code: string | null) => void;
7
+ id?: string;
8
+ ariaLabel?: string;
9
+ className?: string;
10
+ disabled?: boolean;
11
+ /** Hide the clear button (e.g. when the field is required). Defaults to false. */
12
+ clearable?: boolean;
13
+ placeholder?: string;
14
+ emptyMessage?: string;
15
+ }
16
+ /**
17
+ * CountrySelect — a searchable country dropdown for any Admin UI form.
18
+ *
19
+ * Wraps the design-system <Combobox /> over the dictionary's active country
20
+ * list (locale-resolved labels, served by the public dictionary facade and
21
+ * shared across instances via {@link useCountriesQuery}). The committed value
22
+ * is the ISO 3166-1 alpha-2 code, matching what address payloads expect.
23
+ *
24
+ * Drop it in wherever a country needs picking instead of a free-text field:
25
+ *
26
+ * <CountrySelect value={code} onChange={setCode} ariaLabel="country" />
27
+ */
28
+ export declare function CountrySelect(props: CountrySelectProps): ReactNode;
29
+ //# sourceMappingURL=CountrySelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CountrySelect.d.ts","sourceRoot":"","sources":["../../../src/components/country-select/CountrySelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMhD,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CA4ClE"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { Combobox } from '../../ui/combobox.js';
4
+ import { useTranslation } from '../../i18n/useTranslation.js';
5
+ import { useAppLanguage } from '../../i18n/app-language-context.js';
6
+ import { useCountriesQuery } from './useCountriesQuery.js';
7
+ /**
8
+ * CountrySelect — a searchable country dropdown for any Admin UI form.
9
+ *
10
+ * Wraps the design-system <Combobox /> over the dictionary's active country
11
+ * list (locale-resolved labels, served by the public dictionary facade and
12
+ * shared across instances via {@link useCountriesQuery}). The committed value
13
+ * is the ISO 3166-1 alpha-2 code, matching what address payloads expect.
14
+ *
15
+ * Drop it in wherever a country needs picking instead of a free-text field:
16
+ *
17
+ * <CountrySelect value={code} onChange={setCode} ariaLabel="country" />
18
+ */
19
+ export function CountrySelect(props) {
20
+ const t = useTranslation('core');
21
+ const { language } = useAppLanguage();
22
+ const { countries, loading, error } = useCountriesQuery(language);
23
+ const options = useMemo(() => countries.map((c) => ({
24
+ value: c.code,
25
+ label: `${c.label} (${c.code})`,
26
+ })), [countries]);
27
+ // Keep the selected code visible even before the list resolves, or if the
28
+ // stored code is no longer an active country (archived dictionary entry).
29
+ const selected = props.value
30
+ ? (countries.find((c) => c.code === props.value)?.label ?? props.value)
31
+ : '';
32
+ const emptyMessage = props.emptyMessage ??
33
+ (loading
34
+ ? t('countrySelect.loading')
35
+ : error
36
+ ? t('countrySelect.error')
37
+ : t('countrySelect.empty'));
38
+ return (_jsx(Combobox, { ...(props.id ? { id: props.id } : {}), ...(props.ariaLabel ? { ariaLabel: props.ariaLabel } : {}), ...(props.className ? { className: props.className } : {}), options: options, value: props.value && props.value !== '' ? props.value : null, selectedLabel: props.value ? `${selected}${selected === props.value ? '' : ` (${props.value})`}` : '', onChange: (next) => props.onChange(next), disabled: props.disabled ?? false, loading: loading, clearable: props.clearable ?? false, placeholder: props.placeholder ?? t('countrySelect.placeholder'), emptyMessage: emptyMessage }));
39
+ }
40
+ //# sourceMappingURL=CountrySelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CountrySelect.js","sourceRoot":"","sources":["../../../src/components/country-select/CountrySelect.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { CountrySelect, type CountrySelectProps } from './CountrySelect.js';
2
+ export { useCountriesQuery, type UseCountriesQueryResult } from './useCountriesQuery.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/country-select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { CountrySelect } from './CountrySelect.js';
2
+ export { useCountriesQuery } from './useCountriesQuery.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/country-select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAgC,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ResolvedCountry } from '@endora-commerce/contracts';
2
+ export interface UseCountriesQueryResult {
3
+ countries: ResolvedCountry[];
4
+ loading: boolean;
5
+ error: boolean;
6
+ }
7
+ /**
8
+ * Returns the active dictionary countries (locale-resolved labels, sorted by
9
+ * the dictionary `sortOrder`). Shared/memoised across instances per locale.
10
+ */
11
+ export declare function useCountriesQuery(locale: string): UseCountriesQueryResult;
12
+ //# sourceMappingURL=useCountriesQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCountriesQuery.d.ts","sourceRoot":"","sources":["../../../src/components/country-select/useCountriesQuery.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAA8B,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAuB9F,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CA4BzE"}
@@ -0,0 +1,69 @@
1
+ // Shared loader for the dictionary country list.
2
+ //
3
+ // The active country set is small (~250 rows) and effectively static for
4
+ // the lifetime of a session, so we fetch it once per locale and memoise the
5
+ // in-flight promise at module scope. Multiple <CountrySelect /> instances on
6
+ // the same screen (e.g. delivery + billing address) therefore share a single
7
+ // network request instead of each firing their own.
8
+ //
9
+ // Reads the PUBLIC dictionary facade (`GET /api/v1/dictionary`), which is not
10
+ // gated behind the `dictionary.write` admin permission — so any admin who can
11
+ // reach a form (orders, customers, organizations…) can populate the dropdown
12
+ // regardless of their dictionary access.
13
+ import { useEffect, useState } from 'react';
14
+ import { apiClient } from '../../lib/api-client.js';
15
+ const cache = new Map();
16
+ function load(locale) {
17
+ const cached = cache.get(locale);
18
+ if (cached)
19
+ return cached;
20
+ const params = new URLSearchParams();
21
+ if (locale)
22
+ params.set('locale', locale);
23
+ const query = params.toString();
24
+ const promise = apiClient
25
+ .get(`/api/v1/dictionary${query ? `?${query}` : ''}`)
26
+ .then((res) => res.data.countries)
27
+ .catch((err) => {
28
+ // Don't poison the cache on a transient failure — let the next mount retry.
29
+ cache.delete(locale);
30
+ throw err;
31
+ });
32
+ cache.set(locale, promise);
33
+ return promise;
34
+ }
35
+ /**
36
+ * Returns the active dictionary countries (locale-resolved labels, sorted by
37
+ * the dictionary `sortOrder`). Shared/memoised across instances per locale.
38
+ */
39
+ export function useCountriesQuery(locale) {
40
+ const [countries, setCountries] = useState([]);
41
+ const [loading, setLoading] = useState(true);
42
+ const [error, setError] = useState(false);
43
+ useEffect(() => {
44
+ let alive = true;
45
+ setLoading(true);
46
+ setError(false);
47
+ void load(locale)
48
+ .then((rows) => {
49
+ if (!alive)
50
+ return;
51
+ setCountries(rows);
52
+ })
53
+ .catch(() => {
54
+ if (!alive)
55
+ return;
56
+ setError(true);
57
+ setCountries([]);
58
+ })
59
+ .finally(() => {
60
+ if (alive)
61
+ setLoading(false);
62
+ });
63
+ return () => {
64
+ alive = false;
65
+ };
66
+ }, [locale]);
67
+ return { countries, loading, error };
68
+ }
69
+ //# sourceMappingURL=useCountriesQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCountriesQuery.js","sourceRoot":"","sources":["../../../src/components/country-select/useCountriesQuery.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,oDAAoD;AACpD,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,yCAAyC;AAEzC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsC,CAAC;AAE5D,SAAS,IAAI,CAAC,MAAc;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,SAAS;SACtB,GAAG,CAA6B,qBAAqB,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SAChF,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;SACjC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,4EAA4E;QAC5E,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IACL,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,YAAY,CAAC,EAAE,CAAC,CAAC;QACnB,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,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { SupportedEntityType } from '@endora-commerce/contracts';
3
+ export interface CustomFieldValuesPanelProps {
4
+ entityType: SupportedEntityType;
5
+ /** Current stored values for the host record. */
6
+ values: Record<string, unknown>;
7
+ /** Persist the edited bag. Host owns the write (its own endpoint). */
8
+ save: (values: Record<string, unknown>) => Promise<void>;
9
+ }
10
+ /**
11
+ * Reusable admin panel that renders custom-field value inputs for one host
12
+ * record (feature 055). Fetches the entity type's definitions and maps each
13
+ * `valueType` to a design-system input; the host page supplies `save`.
14
+ *
15
+ * **It is a published component, not a zone contribution** (feature 091, P4e;
16
+ * `admin-component-contribution.md` §9.1). Its props are
17
+ * `(entityType, values, save)` — data in, edited data back — so each of its four
18
+ * call sites hands it the **host's own** stored bag and the host's own writer:
19
+ * `customFieldValues` is a column on the host's row and the host owns the
20
+ * endpoint that writes it, `quote_requests`' optimistic-concurrency header
21
+ * included. Principle XIV working as designed is what puts it there. So the
22
+ * reach was never *"the owner mounts its screen fragment in the consumer's
23
+ * screen"* — nothing here is the owner's code.
24
+ *
25
+ * **The request is built here**, on P2's terms: one `GET` for the definitions,
26
+ * off the published `apiClient` and the owner's contract types, which both sides
27
+ * already compile. No admin API client of another module's crosses the seam, and
28
+ * the two strings come out of `core`, so R6 (as R-1 reads it) is satisfied by
29
+ * construction rather than by exception.
30
+ *
31
+ * **A failed definitions load is not an empty entity type.** The
32
+ * `defs.length === 0` return below used to sit **above** the error `Alert`, so
33
+ * the panel rendered nothing either way and an operator could not tell a broken
34
+ * request from "no custom fields are defined for this entity type". The empty
35
+ * return is now conditional on the load having actually answered.
36
+ *
37
+ * The old ordering was argued to be accidentally right for one case — a 503
38
+ * from a switched-off `custom_fields` — and that case does not exist.
39
+ * `custom_fields` declares `activation.nonDeactivatable`, which since issue #258
40
+ * makes it a **required** module: `requiredModulesFrom` puts it in the
41
+ * composition's required set, `composeModules` refuses a composition that would
42
+ * reach its boot phase without it, and D-69 refuses every disable and every
43
+ * uninstall. A platform that cannot serve this endpoint does not boot, so
44
+ * `MODULE_DISABLED` is unreachable here and there is no branch to preserve for
45
+ * it.
46
+ */
47
+ export declare function CustomFieldValuesPanel({ entityType, values, save, }: CustomFieldValuesPanelProps): ReactNode;
48
+ //# sourceMappingURL=CustomFieldValuesPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomFieldValuesPanel.d.ts","sourceRoot":"","sources":["../../../src/components/custom-field-values/CustomFieldValuesPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAA4B,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAahG,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,mBAAmB,CAAC;IAChC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,sEAAsE;IACtE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,MAAM,EACN,IAAI,GACL,EAAE,2BAA2B,GAAG,SAAS,CA8EzC"}
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, 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 { Alert, AlertDescription } from '../../ui/alert.js';
9
+ import { Button } from '../../ui/button.js';
10
+ import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
11
+ import { Label } from '../../ui/label.js';
12
+ import { Select } from '../../ui/select.js';
13
+ import { useTranslation } from '../../i18n/useTranslation.js';
14
+ /**
15
+ * Reusable admin panel that renders custom-field value inputs for one host
16
+ * record (feature 055). Fetches the entity type's definitions and maps each
17
+ * `valueType` to a design-system input; the host page supplies `save`.
18
+ *
19
+ * **It is a published component, not a zone contribution** (feature 091, P4e;
20
+ * `admin-component-contribution.md` §9.1). Its props are
21
+ * `(entityType, values, save)` — data in, edited data back — so each of its four
22
+ * call sites hands it the **host's own** stored bag and the host's own writer:
23
+ * `customFieldValues` is a column on the host's row and the host owns the
24
+ * endpoint that writes it, `quote_requests`' optimistic-concurrency header
25
+ * included. Principle XIV working as designed is what puts it there. So the
26
+ * reach was never *"the owner mounts its screen fragment in the consumer's
27
+ * screen"* — nothing here is the owner's code.
28
+ *
29
+ * **The request is built here**, on P2's terms: one `GET` for the definitions,
30
+ * off the published `apiClient` and the owner's contract types, which both sides
31
+ * already compile. No admin API client of another module's crosses the seam, and
32
+ * the two strings come out of `core`, so R6 (as R-1 reads it) is satisfied by
33
+ * construction rather than by exception.
34
+ *
35
+ * **A failed definitions load is not an empty entity type.** The
36
+ * `defs.length === 0` return below used to sit **above** the error `Alert`, so
37
+ * the panel rendered nothing either way and an operator could not tell a broken
38
+ * request from "no custom fields are defined for this entity type". The empty
39
+ * return is now conditional on the load having actually answered.
40
+ *
41
+ * The old ordering was argued to be accidentally right for one case — a 503
42
+ * from a switched-off `custom_fields` — and that case does not exist.
43
+ * `custom_fields` declares `activation.nonDeactivatable`, which since issue #258
44
+ * makes it a **required** module: `requiredModulesFrom` puts it in the
45
+ * composition's required set, `composeModules` refuses a composition that would
46
+ * reach its boot phase without it, and D-69 refuses every disable and every
47
+ * uninstall. A platform that cannot serve this endpoint does not boot, so
48
+ * `MODULE_DISABLED` is unreachable here and there is no branch to preserve for
49
+ * it.
50
+ */
51
+ export function CustomFieldValuesPanel({ entityType, values, save, }) {
52
+ const t = useTranslation('core');
53
+ const [defs, setDefs] = useState([]);
54
+ const [draft, setDraft] = useState(values);
55
+ const [error, setError] = useState(null);
56
+ const [saving, setSaving] = useState(false);
57
+ useEffect(() => {
58
+ let live = true;
59
+ void (async () => {
60
+ try {
61
+ const res = await apiClient.get(`/api/v1/admin/custom-fields/definitions?entityType=${entityType}`);
62
+ if (live) {
63
+ setDefs(res.data);
64
+ // A previous entity type's failure must not outlive the read that
65
+ // succeeded — it is now the thing that decides the empty branch below.
66
+ setError(null);
67
+ }
68
+ }
69
+ catch (err) {
70
+ if (live)
71
+ setError(err instanceof ApiError ? err.envelope.error.message : 'Failed to load.');
72
+ }
73
+ })();
74
+ return () => {
75
+ live = false;
76
+ };
77
+ }, [entityType]);
78
+ const set = useCallback((key, value) => {
79
+ setDraft((prev) => ({ ...prev, [key]: value }));
80
+ }, []);
81
+ const onSave = useCallback(async () => {
82
+ setError(null);
83
+ setSaving(true);
84
+ try {
85
+ await save(draft);
86
+ }
87
+ catch (err) {
88
+ setError(err instanceof ApiError ? err.envelope.error.message : 'Save failed.');
89
+ }
90
+ finally {
91
+ setSaving(false);
92
+ }
93
+ }, [draft, save]);
94
+ // Nothing defined for this entity type — but only once the load has answered.
95
+ // With `error` set, the same empty `defs` means the load failed, and the panel
96
+ // owes the operator the message rather than an absence.
97
+ if (defs.length === 0 && error === null)
98
+ return null;
99
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('customFields.title') }) }), _jsxs(CardContent, { className: "space-y-3", children: [error && (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: error }) })), defs.map((d) => (_jsxs("div", { className: "space-y-1", children: [_jsxs(Label, { htmlFor: `cf-${d.key}`, children: [d.label['en'] ?? d.labelDefault, d.required && _jsx("span", { className: "text-destructive", children: " *" })] }), renderInput(d, draft[d.key], (v) => set(d.key, v))] }, d.id))), defs.length > 0 && (_jsx(Button, { size: "sm", disabled: saving, onClick: () => void onSave(), children: t('customFields.save') }))] })] }));
100
+ }
101
+ const inputClass = 'h-9 rounded-md border border-input bg-background px-3 text-sm';
102
+ function renderInput(def, value, onChange) {
103
+ switch (def.valueType) {
104
+ case 'boolean':
105
+ return (_jsx("input", { id: `cf-${def.key}`, type: "checkbox", checked: value === true, onChange: (e) => onChange(e.target.checked) }));
106
+ case 'number':
107
+ return (_jsx("input", { id: `cf-${def.key}`, type: "number", className: inputClass, value: value === undefined || value === null ? '' : String(value), onChange: (e) => onChange(e.target.value === '' ? undefined : Number(e.target.value)) }));
108
+ case 'date':
109
+ return (_jsx("input", { id: `cf-${def.key}`, type: "date", className: inputClass, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value || undefined) }));
110
+ case 'select':
111
+ return (_jsxs(Select, { id: `cf-${def.key}`, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value || undefined), children: [_jsx("option", { value: "", children: "\u2014" }), def.options.map((o) => (_jsx("option", { value: o.value, children: o.label['en'] ?? o.labelDefault }, o.id ?? o.value)))] }));
112
+ case 'multiselect': {
113
+ const selected = Array.isArray(value) ? value : [];
114
+ return (_jsx("div", { className: "flex flex-wrap gap-2", children: def.options.map((o) => (_jsxs("label", { className: "flex items-center gap-1 text-sm", children: [_jsx("input", { type: "checkbox", checked: selected.includes(o.value), onChange: (e) => onChange(e.target.checked
115
+ ? [...selected, o.value]
116
+ : selected.filter((v) => v !== o.value)) }), o.label['en'] ?? o.labelDefault] }, o.id ?? o.value))) }));
117
+ }
118
+ default:
119
+ return (_jsx("input", { id: `cf-${def.key}`, className: inputClass, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value) }));
120
+ }
121
+ }
122
+ //# sourceMappingURL=CustomFieldValuesPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomFieldValuesPanel.js","sourceRoot":"","sources":["../../../src/components/custom-field-values/CustomFieldValuesPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface CustomerGroupPickerProps {
3
+ value: string | null;
4
+ onChange: (customerGroupId: 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 CustomerGroupPicker(props: CustomerGroupPickerProps): ReactNode;
14
+ //# sourceMappingURL=CustomerGroupPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomerGroupPicker.d.ts","sourceRoot":"","sources":["../../../src/components/customer-group-picker/CustomerGroupPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBrE,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,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,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,SAAS,CAgD9E"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import { ApiError, apiClient } from '../../lib/api-client.js';
4
+ import { Combobox } from '../../ui/combobox.js';
5
+ export function CustomerGroupPicker(props) {
6
+ const [groups, setGroups] = useState([]);
7
+ const [loading, setLoading] = useState(true);
8
+ const [error, setError] = useState(null);
9
+ useEffect(() => {
10
+ let alive = true;
11
+ setLoading(true);
12
+ apiClient
13
+ .get('/api/v1/admin/customer-groups')
14
+ .then((res) => {
15
+ if (!alive)
16
+ return;
17
+ setGroups(res.data);
18
+ })
19
+ .catch((err) => {
20
+ if (!alive)
21
+ return;
22
+ setError(err instanceof ApiError ? err.envelope.error.message : 'Failed to load groups.');
23
+ })
24
+ .finally(() => {
25
+ if (alive)
26
+ setLoading(false);
27
+ });
28
+ return () => {
29
+ alive = false;
30
+ };
31
+ }, []);
32
+ const options = useMemo(() => groups.map((g) => ({ value: g.id, label: g.name, description: g.code })), [groups]);
33
+ const emptyMessage = props.emptyMessage ?? error ?? 'No customer groups.';
34
+ 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 customer group…', emptyMessage: emptyMessage, ariaLabel: props.ariaLabel ?? 'Select customer group', id: props.id ?? '', className: props.className ?? '' }));
35
+ }
36
+ //# sourceMappingURL=CustomerGroupPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomerGroupPicker.js","sourceRoot":"","sources":["../../../src/components/customer-group-picker/CustomerGroupPicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAuB,MAAM,sBAAsB,CAAC;AA4BrE,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAyB,EAAE,CAAC,CAAC;IACjE,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,CAAmC,+BAA+B,CAAC;aACtE,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,qBAAqB,CAAC;IAE1E,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,0BAA0B,EAC5D,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,uBAAuB,EACrD,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAClB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,GAChC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface CustomerPickerProps {
3
+ value: string | null;
4
+ onChange: (customerAccountId: string | null) => void;
5
+ status?: 'active' | 'blocked' | 'deleted';
6
+ /** When set, only accounts belonging to this organization are searched
7
+ * (feature 062 — distributor-binding service-account picker). */
8
+ organizationId?: string;
9
+ placeholder?: string;
10
+ emptyMessage?: string;
11
+ clearable?: boolean;
12
+ disabled?: boolean;
13
+ ariaLabel?: string;
14
+ id?: string;
15
+ className?: string;
16
+ }
17
+ export declare function CustomerPicker(props: CustomerPickerProps): ReactNode;
18
+ //# sourceMappingURL=CustomerPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomerPicker.d.ts","sourceRoot":"","sources":["../../../src/components/customer-picker/CustomerPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAwC1F,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C;sEACkE;IAClE,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,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAsFpE"}
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { ApiError, apiClient } from '../../lib/api-client.js';
4
+ import { Combobox } from '../../ui/combobox.js';
5
+ function customerLabel(c) {
6
+ const name = `${c.firstName} ${c.lastName}`.trim();
7
+ return name.length > 0 ? name : c.email;
8
+ }
9
+ function customerDescription(c) {
10
+ const name = `${c.firstName} ${c.lastName}`.trim();
11
+ // When the label already shows the name, lead the description with the email.
12
+ return name.length > 0
13
+ ? c.organizationName
14
+ ? `${c.email} · ${c.organizationName}`
15
+ : c.email
16
+ : (c.organizationName ?? '');
17
+ }
18
+ const SEARCH_DEBOUNCE_MS = 250;
19
+ const DEFAULT_PAGE_SIZE = 20;
20
+ export function CustomerPicker(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 params = new URLSearchParams();
36
+ params.set('pageSize', String(DEFAULT_PAGE_SIZE));
37
+ if (props.status)
38
+ params.set('status', props.status);
39
+ if (props.organizationId)
40
+ params.set('organizationId', props.organizationId);
41
+ const trimmed = query.trim();
42
+ if (trimmed.length > 0)
43
+ params.set('q', trimmed);
44
+ const res = await apiClient.get(`/api/v1/admin/customers?${params.toString()}`);
45
+ if (seq !== seqRef.current)
46
+ return;
47
+ setCache((prev) => {
48
+ const next = new Map(prev);
49
+ for (const c of res.data)
50
+ next.set(c.id, c);
51
+ return next;
52
+ });
53
+ setOptions(res.data.map((c) => ({
54
+ value: c.id,
55
+ label: customerLabel(c),
56
+ description: customerDescription(c),
57
+ })));
58
+ }
59
+ catch (err) {
60
+ if (seq !== seqRef.current)
61
+ return;
62
+ setError(err instanceof ApiError ? err.envelope.error.message : 'Search failed.');
63
+ setOptions([]);
64
+ }
65
+ finally {
66
+ if (seq === seqRef.current)
67
+ setSearching(false);
68
+ }
69
+ }, [props.status, props.organizationId]);
70
+ const handleSearchChange = useCallback((query) => {
71
+ if (timerRef.current !== null)
72
+ clearTimeout(timerRef.current);
73
+ const seq = ++seqRef.current;
74
+ timerRef.current = setTimeout(() => void runSearch(query, seq), SEARCH_DEBOUNCE_MS);
75
+ }, [runSearch]);
76
+ const selectedLabel = useMemo(() => {
77
+ if (!props.value)
78
+ return '';
79
+ const c = cache.get(props.value);
80
+ return c ? customerLabel(c) : '';
81
+ }, [props.value, cache]);
82
+ const emptyMessage = props.emptyMessage ?? error ?? (searching ? 'Searching…' : 'No matching customers.');
83
+ 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 customers by name or email…', emptyMessage: emptyMessage, ariaLabel: props.ariaLabel ?? 'Select customer', id: props.id ?? '', className: props.className ?? '', selectedLabel: selectedLabel }));
84
+ }
85
+ //# sourceMappingURL=CustomerPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomerPicker.js","sourceRoot":"","sources":["../../../src/components/customer-picker/CustomerPicker.tsx"],"names":[],"mappings":"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"}