@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,105 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { PromotionRule } from '@endora-commerce/contracts';
3
+ /**
4
+ * Feature 045 — generic, controlled rule builder for a typed rule AST
5
+ * (`all` | `condition` | `group`). Extracted as a shared admin component so it
6
+ * can be reused beyond promotions.
7
+ *
8
+ * Feature 067 made the **built-in field catalogue a prop**. It was hard-coded
9
+ * to the promotion cart context (`cartTotal`, `paymentMethod`, …), which the
10
+ * product feed criteria panel cannot use: its criteria are about products, not
11
+ * carts. Forking the file would have made this the admin's *third* rule builder
12
+ * and forked its accessibility and bug fixes with it (Principle IX).
13
+ *
14
+ * The generalisation is deliberately conservative. Every new prop is optional
15
+ * and every default reproduces the promotion behaviour **exactly** — the same
16
+ * catalogue in the same order, the same operators, the same seed condition
17
+ * (`cartTotal >= 0`) and the same copy. `admin/test/components/RuleBuilder.test.tsx`
18
+ * pins all of it, because the incumbent callers (`PromotionRulesPage`,
19
+ * `PromotionEditPage`) are live screens that must not shift under this feature.
20
+ */
21
+ export interface RuleAttributeField {
22
+ attributeKey: string;
23
+ label: string;
24
+ }
25
+ /**
26
+ * The structural rule tree the component actually manipulates. Every concrete
27
+ * AST it edits (`PromotionRule`, the feed's `ProductSelectionRule`) is a
28
+ * narrowing of this: same three node kinds, different field catalogue and
29
+ * operator enum. Typing against the structure rather than one module's contract
30
+ * is what lets a second caller reuse the component without either contract
31
+ * learning about the other.
32
+ */
33
+ export type StructuralRuleField = {
34
+ kind: 'builtin';
35
+ key: string;
36
+ } | {
37
+ kind: 'attribute';
38
+ attributeKey: string;
39
+ } | {
40
+ kind: 'customField';
41
+ fieldKey: string;
42
+ };
43
+ export type StructuralRuleValue = string | number | boolean;
44
+ export interface StructuralRuleCondition {
45
+ kind: 'condition';
46
+ field: StructuralRuleField;
47
+ op: string;
48
+ values: StructuralRuleValue[];
49
+ }
50
+ export type StructuralRule = {
51
+ kind: 'all';
52
+ } | StructuralRuleCondition | {
53
+ kind: 'group';
54
+ op: 'AND' | 'OR';
55
+ children: StructuralRule[];
56
+ };
57
+ export interface RuleBuilderBuiltinField {
58
+ key: string;
59
+ kind: 'number' | 'string' | 'set';
60
+ ops: string[];
61
+ /** Shown in the picker. Defaults to `key`, which is what promotions renders. */
62
+ label?: string;
63
+ /**
64
+ * The operator and values used when this field seeds a brand-new condition.
65
+ * Only the first field of a catalogue ever needs it; it exists so the
66
+ * promotion default (`cartTotal >= 0`) survives the generalisation verbatim
67
+ * instead of silently becoming `cartTotal = ∅`.
68
+ */
69
+ seed?: {
70
+ op: string;
71
+ values: StructuralRuleValue[];
72
+ };
73
+ }
74
+ /** Copy the component cannot know, because it depends on what is being filtered. */
75
+ export interface RuleBuilderLabels {
76
+ /** Heading of the built-in `optgroup`. */
77
+ builtinGroup?: string;
78
+ /** Heading of the attribute `optgroup`. */
79
+ attributeGroup?: string;
80
+ /** The sentence shown on the `all` node. */
81
+ matchAll?: string;
82
+ /** Trigger text for the value picker while nothing is chosen. */
83
+ valuesPlaceholder?: string;
84
+ /** Accessible name for the value picker's trigger. */
85
+ valuesLabel?: string;
86
+ /** Placeholder inside the value picker's search box. */
87
+ valuesSearchPlaceholder?: string;
88
+ }
89
+ /** Option lists for fields that should render a value picker, keyed by field key. */
90
+ export type RuleFieldOptions = Partial<Record<string, Array<{
91
+ value: string;
92
+ label: string;
93
+ }>>>;
94
+ export interface RuleBuilderProps<T extends StructuralRule = PromotionRule> {
95
+ value: T;
96
+ onChange: (next: T) => void;
97
+ /** Defaults to the promotion cart catalogue — see the file header. */
98
+ builtinFields?: RuleBuilderBuiltinField[];
99
+ attributeFields?: RuleAttributeField[];
100
+ fieldOptions?: RuleFieldOptions;
101
+ labels?: RuleBuilderLabels;
102
+ disabled?: boolean;
103
+ }
104
+ export declare function RuleBuilder<T extends StructuralRule = PromotionRule>({ value, onChange, builtinFields, attributeFields, fieldOptions, labels, disabled, }: RuleBuilderProps<T>): ReactNode;
105
+ //# sourceMappingURL=RuleBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuleBuilder.d.ts","sourceRoot":"","sources":["../../../src/components/rule-builder/RuleBuilder.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import {} from 'react';
3
+ import { Plus, Trash2 } from 'lucide-react';
4
+ import { Button } from '../../ui/button.js';
5
+ import { Input } from '../../ui/input.js';
6
+ import { MultiSelect } from '../../ui/multi-select.js';
7
+ import { Select } from '../../ui/select.js';
8
+ const BUILTIN_FIELDS = [
9
+ {
10
+ key: 'cartTotal',
11
+ kind: 'number',
12
+ ops: ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'between'],
13
+ seed: { op: 'gte', values: [0] },
14
+ },
15
+ { key: 'paymentMethod', kind: 'string', ops: ['eq', 'neq', 'in', 'notIn'] },
16
+ { key: 'deliveryMethod', kind: 'string', ops: ['eq', 'neq', 'in', 'notIn'] },
17
+ { key: 'deliveryCountry', kind: 'string', ops: ['eq', 'neq', 'in', 'notIn'] },
18
+ { key: 'deliveryPostalCode', kind: 'string', ops: ['eq', 'neq', 'contains', 'startsWith'] },
19
+ { key: 'organization', kind: 'string', ops: ['eq', 'neq', 'in', 'notIn'] },
20
+ { key: 'customerGroup', kind: 'string', ops: ['eq', 'neq', 'in', 'notIn'] },
21
+ { key: 'category', kind: 'set', ops: ['in', 'notIn'] },
22
+ ];
23
+ const DEFAULT_LABELS = {
24
+ builtinGroup: 'Cart & relationship',
25
+ attributeGroup: 'Attributes',
26
+ matchAll: 'Matches all carts.',
27
+ valuesPlaceholder: 'Any value',
28
+ valuesLabel: 'Value',
29
+ valuesSearchPlaceholder: 'Search…',
30
+ };
31
+ const ATTRIBUTE_OPS = ['eq', 'neq', 'in', 'notIn', 'between'];
32
+ function defaultCondition(fields) {
33
+ const first = fields[0];
34
+ if (!first)
35
+ return { kind: 'condition', field: { kind: 'attribute', attributeKey: '' }, op: 'eq', values: [] };
36
+ return {
37
+ kind: 'condition',
38
+ field: { kind: 'builtin', key: first.key },
39
+ op: first.seed?.op ?? first.ops[0] ?? 'eq',
40
+ values: first.seed?.values ?? [],
41
+ };
42
+ }
43
+ function fieldKey(field) {
44
+ if (field.kind === 'builtin')
45
+ return `builtin:${field.key}`;
46
+ if (field.kind === 'attribute')
47
+ return `attribute:${field.attributeKey}`;
48
+ return `attribute:${field.fieldKey}`;
49
+ }
50
+ function builtinDef(field, fields) {
51
+ if (field.kind !== 'builtin')
52
+ return null;
53
+ return fields.find((f) => f.key === field.key) ?? null;
54
+ }
55
+ function opsForField(field, fields) {
56
+ const def = builtinDef(field, fields);
57
+ return def ? def.ops : ATTRIBUTE_OPS;
58
+ }
59
+ function isNumericField(field, fields) {
60
+ return builtinDef(field, fields)?.kind === 'number';
61
+ }
62
+ function valuesToText(values) {
63
+ return values.map((v) => String(v)).join(', ');
64
+ }
65
+ function textToValues(text, numeric) {
66
+ return text
67
+ .split(',')
68
+ .map((s) => s.trim())
69
+ .filter((s) => s.length > 0)
70
+ .map((s) => (numeric ? Number(s) : s));
71
+ }
72
+ export function RuleBuilder({ value, onChange, builtinFields = BUILTIN_FIELDS, attributeFields = [], fieldOptions = {}, labels, disabled = false, }) {
73
+ const copy = { ...DEFAULT_LABELS, ...labels };
74
+ return (_jsx("div", { className: "rounded-md border border-line p-3", children: _jsx(RuleNode, { node: value,
75
+ // The editor produces structural nodes; the caller owns the concrete
76
+ // AST. Every node this component can build is valid in `T` because the
77
+ // caller supplied the field catalogue and the operator lists it uses.
78
+ onChange: (next) => onChange(next), builtinFields: builtinFields, attributeFields: attributeFields, fieldOptions: fieldOptions, labels: copy, disabled: disabled, depth: 0 }) }));
79
+ }
80
+ function RuleNode({ node, onChange, builtinFields, attributeFields, fieldOptions, labels, disabled, depth, }) {
81
+ if (node.kind === 'all') {
82
+ return (_jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx("span", { children: labels.matchAll }), _jsxs(Button, { type: "button", size: "sm", variant: "outline", disabled: disabled, onClick: () => onChange(defaultCondition(builtinFields)), children: [_jsx(Plus, { className: "mr-1 h-3 w-3" }), " Add condition"] }), _jsxs(Button, { type: "button", size: "sm", variant: "outline", disabled: disabled, onClick: () => onChange({ kind: 'group', op: 'AND', children: [defaultCondition(builtinFields)] }), children: [_jsx(Plus, { className: "mr-1 h-3 w-3" }), " Add group"] })] }));
83
+ }
84
+ if (node.kind === 'condition') {
85
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ConditionRow, { condition: node, onChange: onChange, builtinFields: builtinFields, attributeFields: attributeFields, fieldOptions: fieldOptions, labels: labels, disabled: disabled, onRemove: () => onChange({ kind: 'all' }) }), _jsx("div", { children: _jsxs(Button, { type: "button", size: "sm", variant: "ghost", disabled: disabled, onClick: () => onChange({
86
+ kind: 'group',
87
+ op: 'AND',
88
+ children: [node, defaultCondition(builtinFields)],
89
+ }), children: [_jsx(Plus, { className: "mr-1 h-3 w-3" }), " Combine with\u2026"] }) })] }));
90
+ }
91
+ // group
92
+ const setChild = (idx, child) => {
93
+ onChange({ ...node, children: node.children.map((c, i) => (i === idx ? child : c)) });
94
+ };
95
+ const removeChild = (idx) => {
96
+ const next = node.children.filter((_, i) => i !== idx);
97
+ if (next.length === 0)
98
+ onChange({ kind: 'all' });
99
+ else if (next.length === 1 && next[0])
100
+ onChange(next[0]);
101
+ else
102
+ onChange({ ...node, children: next });
103
+ };
104
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Select, { className: "w-24", value: node.op, disabled: disabled, onChange: (e) => onChange({ ...node, op: e.target.value }), children: [_jsx("option", { value: "AND", children: "ALL of" }), _jsx("option", { value: "OR", children: "ANY of" })] }), _jsx("span", { className: "text-xs text-muted-foreground", children: "the following conditions:" })] }), _jsxs("div", { className: "flex flex-col gap-2 border-l-2 border-line pl-3", children: [node.children.map((child, idx) => (_jsxs("div", { className: "flex items-start gap-2", children: [_jsx("div", { className: "flex-1", children: _jsx(RuleNode, { node: child, onChange: (c) => setChild(idx, c), builtinFields: builtinFields, attributeFields: attributeFields, fieldOptions: fieldOptions, labels: labels, disabled: disabled, depth: depth + 1 }) }), _jsx(Button, { type: "button", size: "icon", variant: "ghost", disabled: disabled, onClick: () => removeChild(idx), children: _jsx(Trash2, { className: "h-3 w-3" }) })] }, idx))), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { type: "button", size: "sm", variant: "outline", disabled: disabled, onClick: () => onChange({
105
+ ...node,
106
+ children: [...node.children, defaultCondition(builtinFields)],
107
+ }), children: [_jsx(Plus, { className: "mr-1 h-3 w-3" }), " Condition"] }), depth < 4 ? (_jsxs(Button, { type: "button", size: "sm", variant: "outline", disabled: disabled, onClick: () => onChange({
108
+ ...node,
109
+ children: [
110
+ ...node.children,
111
+ { kind: 'group', op: 'AND', children: [defaultCondition(builtinFields)] },
112
+ ],
113
+ }), children: [_jsx(Plus, { className: "mr-1 h-3 w-3" }), " Group"] })) : null] })] })] }));
114
+ }
115
+ function ConditionRow({ condition, onChange, builtinFields, attributeFields, fieldOptions, labels, disabled, onRemove, }) {
116
+ const numeric = isNumericField(condition.field, builtinFields);
117
+ const ops = opsForField(condition.field, builtinFields);
118
+ const options = condition.field.kind === 'builtin' ? fieldOptions[condition.field.key] : undefined;
119
+ const onFieldChange = (selected) => {
120
+ const field = selected.startsWith('attribute:')
121
+ ? { kind: 'attribute', attributeKey: selected.slice('attribute:'.length) }
122
+ : { kind: 'builtin', key: selected.slice('builtin:'.length) };
123
+ const nextOps = opsForField(field, builtinFields);
124
+ const op = nextOps.includes(condition.op) ? condition.op : (nextOps[0] ?? condition.op);
125
+ onChange({ ...condition, field, op, values: [] });
126
+ };
127
+ return (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(Select, { className: "w-44", value: fieldKey(condition.field), disabled: disabled, onChange: (e) => onFieldChange(e.target.value), children: [_jsx("optgroup", { label: labels.builtinGroup, children: builtinFields.map((f) => (_jsx("option", { value: `builtin:${f.key}`, children: f.label ?? f.key }, f.key))) }), attributeFields.length > 0 ? (_jsx("optgroup", { label: labels.attributeGroup, children: attributeFields.map((a) => (_jsx("option", { value: `attribute:${a.attributeKey}`, children: a.label }, a.attributeKey))) })) : null] }), _jsx(Select, { className: "w-28", value: condition.op, disabled: disabled, onChange: (e) => onChange({ ...condition, op: e.target.value }), children: ops.map((op) => (_jsx("option", { value: op, children: op }, op))) }), options ? (
128
+ // Not a native `<select multiple>`: its only way to pick a second
129
+ // option is ctrl-click, which most people have never been taught, and
130
+ // one stray click silently drops everything already selected. It also
131
+ // has no search — and categories, the field this is used for most, are
132
+ // exactly the long list that makes worst. `MultiSelect` is the same
133
+ // control every other filter surface in the admin uses (Principle IX).
134
+ _jsx(MultiSelect, { className: "w-48", options: options, selected: condition.values.map(String), onChange: (next) => onChange({ ...condition, values: next }), placeholder: labels.valuesPlaceholder, ariaLabel: labels.valuesLabel, disabled: disabled,
135
+ // Worth it wherever the set can be long; harmless when it is short.
136
+ searchable: true, searchPlaceholder: labels.valuesSearchPlaceholder })) : (_jsx(Input, { className: "w-48", value: valuesToText(condition.values), disabled: disabled, placeholder: numeric ? '0' : 'value(s), comma-separated', onChange: (e) => onChange({ ...condition, values: textToValues(e.target.value, numeric) }) })), _jsx(Button, { type: "button", size: "icon", variant: "ghost", disabled: disabled, onClick: onRemove, children: _jsx(Trash2, { className: "h-3 w-3" }) })] }));
137
+ }
138
+ //# sourceMappingURL=RuleBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuleBuilder.js","sourceRoot":"","sources":["../../../src/components/rule-builder/RuleBuilder.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface SalesChannelPickerProps {
3
+ value: string | null;
4
+ onChange: (salesChannelId: string | null) => void;
5
+ activeOnly?: boolean;
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 SalesChannelPicker(props: SalesChannelPickerProps): ReactNode;
15
+ //# sourceMappingURL=SalesChannelPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SalesChannelPicker.d.ts","sourceRoot":"","sources":["../../../src/components/sales-channel-picker/SalesChannelPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA4CrE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,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,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,SAAS,CA0D5E"}
@@ -0,0 +1,79 @@
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`, which is what the kit's five older
5
+ // data-fetching components do. `vi.mock` keys on a resolved module id, so the
6
+ // barrel is the only spelling an admin test can name: it resolves to the same
7
+ // file as `@endora-commerce/admin-kit/lib`, the seam every packaged screen's
8
+ // test already mocks. A deep import is unreachable from outside the package —
9
+ // the `exports` map declares no such subpath — which is why the five older ones
10
+ // have no tests. Nothing else changes: it is the same module record either way,
11
+ // which `admin/test/kit/admin-kit-identity.test.ts` asserts by reference.
12
+ import { ApiError, apiClient } from '../../lib/index.js';
13
+ import { useAppLanguage } from '../../i18n/app-language-context.js';
14
+ import { Combobox } from '../../ui/combobox.js';
15
+ /**
16
+ * Single-select sales-channel picker.
17
+ *
18
+ * Channels are few and unpaged in practice, so the first (large) page is
19
+ * fetched on mount and the <Combobox> filters client-side. The committed
20
+ * value is the channel `id` (UUID) — the identifier persisted on
21
+ * channel-scoped records. Labels are locale-aware; the channel `code` is
22
+ * shown as the secondary line.
23
+ *
24
+ * **The request is built here** (feature 091, P2). Until this component moved
25
+ * into the kit it called `sales_channels`' own admin API client, which is a
26
+ * reach out of the platform's frontend into a module's admin code — one of the
27
+ * ten keys `backend/scripts/ledgers/cross-module-imports/host.ts` opened with.
28
+ * The exit is the one batches three and five took for a module screen: name the
29
+ * endpoint and the published response type, which both sides already compile,
30
+ * and depend on no module's code. `SalesChannelListResponse` is
31
+ * `@endora-commerce/contracts`', so nothing about the shape is duplicated —
32
+ * only the one `GET` the picker needs out of that client's ten methods.
33
+ */
34
+ const PICKER_PAGE_SIZE = 200;
35
+ function listSalesChannels(activeOnly) {
36
+ const qs = new URLSearchParams();
37
+ qs.set('pageSize', String(PICKER_PAGE_SIZE));
38
+ qs.set('activeOnly', String(activeOnly));
39
+ return apiClient.get(`/api/v1/admin/sales-channels?${qs.toString()}`);
40
+ }
41
+ export function SalesChannelPicker(props) {
42
+ const { language } = useAppLanguage();
43
+ const [options, setOptions] = useState([]);
44
+ const [loading, setLoading] = useState(true);
45
+ const [error, setError] = useState(null);
46
+ const activeOnly = props.activeOnly ?? false;
47
+ useEffect(() => {
48
+ let alive = true;
49
+ setLoading(true);
50
+ listSalesChannels(activeOnly)
51
+ .then((res) => {
52
+ if (!alive)
53
+ return;
54
+ setOptions(res.items.map((ch) => {
55
+ const name = ch.name[language] ?? ch.name['en-US'] ?? Object.values(ch.name)[0] ?? ch.code;
56
+ return {
57
+ value: ch.id,
58
+ label: name,
59
+ description: ch.active ? ch.code : `${ch.code} · inactive`,
60
+ };
61
+ }));
62
+ })
63
+ .catch((err) => {
64
+ if (!alive)
65
+ return;
66
+ setError(err instanceof ApiError ? err.envelope.error.message : 'Failed to load channels.');
67
+ })
68
+ .finally(() => {
69
+ if (alive)
70
+ setLoading(false);
71
+ });
72
+ return () => {
73
+ alive = false;
74
+ };
75
+ }, [activeOnly, language]);
76
+ const emptyMessage = useMemo(() => props.emptyMessage ?? error ?? 'No sales channels.', [props.emptyMessage, error]);
77
+ 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 sales channel…', emptyMessage: emptyMessage, ariaLabel: props.ariaLabel ?? 'Select sales channel', id: props.id ?? '', className: props.className ?? '' }));
78
+ }
79
+ //# sourceMappingURL=SalesChannelPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SalesChannelPicker.js","sourceRoot":"","sources":["../../../src/components/sales-channel-picker/SalesChannelPicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ScopeNoticeCode } from '@endora-commerce/contracts';
3
+ /**
4
+ * Why a listing is empty, when "empty" and "there is nothing" are different
5
+ * statements (feature 087, owner decision of 2026-08-29).
6
+ *
7
+ * A viewer whose access is limited to particular organizations is shown none of
8
+ * the records in a table that carries no organization at all. The refusal is
9
+ * correct; the silence was not — an operator reading zero rows concludes
10
+ * something false about the **data**, and there is no way for them to find out
11
+ * otherwise. The server says which of the two it meant (`meta.scopeNotice`) and
12
+ * this renders the sentence.
13
+ *
14
+ * **One component rather than three strings.** The three screens it serves
15
+ * today (`/comparisons`, `/newsletter/subscribers`,
16
+ * `/inventory/availability-notifications`) are all of the surfaces in this
17
+ * state, and feature 087's Group B adds four more when its columns land in the
18
+ * opposite direction. A per-screen sentence is seven copies of one paragraph,
19
+ * which is seven places to correct it and seven chances for one of them to keep
20
+ * saying something that has stopped being true. The copy lives in the `core`
21
+ * bundle for the same reason: it belongs to no module.
22
+ *
23
+ * It renders **nothing** when there is no notice, so a screen may mount it
24
+ * unconditionally in its empty branch. That is deliberate — the caller does not
25
+ * have to know when the sentence applies, and an unrestricted viewer, whose
26
+ * responses never carry the code, never sees it.
27
+ */
28
+ export interface ScopeNoticeProps {
29
+ /** The code from the response envelope, or `null` when it carried none. */
30
+ notice: ScopeNoticeCode | null | undefined;
31
+ }
32
+ export declare function ScopeNotice({ notice }: ScopeNoticeProps): ReactNode;
33
+ //# sourceMappingURL=ScopeNotice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopeNotice.d.ts","sourceRoot":"","sources":["../../../src/components/scope-notice/ScopeNotice.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,MAAM,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAYnE"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Info } from 'lucide-react';
3
+ import { Alert, AlertDescription, AlertTitle } from '../../ui/alert.js';
4
+ import { useTranslation } from '../../i18n/useTranslation.js';
5
+ export function ScopeNotice({ notice }) {
6
+ const t = useTranslation('core');
7
+ if (notice !== 'ORGANIZATION_ATTRIBUTION_PENDING')
8
+ return null;
9
+ return (_jsxs(Alert, { children: [_jsx(Info, { className: "size-4" }), _jsx(AlertTitle, { children: t('scopeNotice.organizationAttributionPending.title') }), _jsx(AlertDescription, { children: t('scopeNotice.organizationAttributionPending.body') })] }));
10
+ }
11
+ //# sourceMappingURL=ScopeNotice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopeNotice.js","sourceRoot":"","sources":["../../../src/components/scope-notice/ScopeNotice.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAgC9D,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAoB;IACtD,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,kCAAkC;QAAE,OAAO,IAAI,CAAC;IAC/D,OAAO,CACL,MAAC,KAAK,eACJ,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,GAAG,EAC3B,KAAC,UAAU,cAAE,CAAC,CAAC,kDAAkD,CAAC,GAAc,EAChF,KAAC,gBAAgB,cACd,CAAC,CAAC,iDAAiD,CAAC,GACpC,IACb,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type ReactNode } from 'react';
2
+ /**
3
+ * The sales channels a piece of content is scoped to, and the content languages
4
+ * inside them. The caller passes a value in and gets one back.
5
+ *
6
+ * **Published by feature 091, P8.** It sat under `cms`' admin directory and was
7
+ * rendered by `blog`'s two editors as well as by `cms`' own three, which is
8
+ * `admin-component-contribution.md` Z1 question 1: the consumer decides that it
9
+ * appears, so it is a published component and not a zone contribution.
10
+ *
11
+ * **The requests are built here**, in `./sales-channels-api.js` — the client
12
+ * exit P2 established, which is what makes the move legal under
13
+ * `admin-kit-surface.md` R6 rather than putting `sales_channels`' admin client
14
+ * inside the kit.
15
+ *
16
+ * **Its copy is `core`'s, not `cms`'** (R-1). All four keys it reads had no
17
+ * other reader in the tree and moved to `core` under `scopePicker.*`.
18
+ */
19
+ export interface ScopePickerValue {
20
+ salesChannelIds: string[];
21
+ languages: string[];
22
+ }
23
+ export interface ScopePickerProps {
24
+ value: ScopePickerValue;
25
+ onChange: (value: ScopePickerValue) => void;
26
+ }
27
+ export declare function ScopePicker({ value, onChange }: ScopePickerProps): ReactNode;
28
+ //# sourceMappingURL=ScopePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopePicker.d.ts","sourceRoot":"","sources":["../../../src/components/scope-picker/ScopePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAUlF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC7C;AAWD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAwK5E"}
@@ -0,0 +1,114 @@
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 { Badge } from '../../ui/badge.js';
5
+ import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
6
+ import { Checkbox } from '../../ui/checkbox.js';
7
+ import { Label } from '../../ui/label.js';
8
+ import { useTranslation } from '../../i18n/useTranslation.js';
9
+ import { fetchScopeSalesChannel, listScopeSalesChannels } from './sales-channels-api.js';
10
+ function languagesForChannel(channel, detailsByCode) {
11
+ const detail = detailsByCode[channel.code];
12
+ if (detail?.languages?.length)
13
+ return detail.languages;
14
+ return channel.defaultLanguage ? [channel.defaultLanguage] : [];
15
+ }
16
+ export function ScopePicker({ value, onChange }) {
17
+ const t = useTranslation('core');
18
+ const [channels, setChannels] = useState([]);
19
+ const [detailsByCode, setDetailsByCode] = useState({});
20
+ const [error, setError] = useState(null);
21
+ useEffect(() => {
22
+ let live = true;
23
+ listScopeSalesChannels()
24
+ .then((res) => {
25
+ if (live)
26
+ setChannels(res.items);
27
+ })
28
+ .catch((err) => {
29
+ if (live)
30
+ setError(err instanceof Error ? err.message : String(err));
31
+ });
32
+ return () => {
33
+ live = false;
34
+ };
35
+ }, []);
36
+ useEffect(() => {
37
+ let cancelled = false;
38
+ const missing = channels.filter((channel) => value.salesChannelIds.includes(channel.id) && !detailsByCode[channel.code]);
39
+ if (missing.length === 0)
40
+ return;
41
+ void Promise.all(missing.map((channel) => fetchScopeSalesChannel(channel.code)))
42
+ .then((rows) => {
43
+ if (cancelled)
44
+ return;
45
+ setDetailsByCode((current) => ({
46
+ ...current,
47
+ ...Object.fromEntries(rows.map((row) => [row.code, row])),
48
+ }));
49
+ })
50
+ .catch((err) => {
51
+ if (!cancelled)
52
+ setError(err instanceof Error ? err.message : String(err));
53
+ });
54
+ return () => {
55
+ cancelled = true;
56
+ };
57
+ }, [channels, detailsByCode, value.salesChannelIds]);
58
+ const selectedChannels = useMemo(() => channels.filter((channel) => value.salesChannelIds.includes(channel.id)), [channels, value.salesChannelIds]);
59
+ const allowedLanguages = useMemo(() => {
60
+ const out = new Set();
61
+ for (const channel of selectedChannels) {
62
+ for (const language of languagesForChannel(channel, detailsByCode)) {
63
+ out.add(language);
64
+ }
65
+ }
66
+ return Array.from(out).sort();
67
+ }, [detailsByCode, selectedChannels]);
68
+ useEffect(() => {
69
+ if (value.salesChannelIds.length === 0 || allowedLanguages.length === 0)
70
+ return;
71
+ const allowed = new Set(allowedLanguages);
72
+ const pruned = value.languages.filter((language) => allowed.has(language));
73
+ if (pruned.length === value.languages.length)
74
+ return;
75
+ onChange({
76
+ salesChannelIds: value.salesChannelIds,
77
+ languages: pruned,
78
+ });
79
+ }, [allowedLanguages, onChange, value.languages, value.salesChannelIds]);
80
+ const setChannel = useCallback((channelId, checked) => {
81
+ const channel = channels.find((item) => item.id === channelId);
82
+ const nextChannels = checked
83
+ ? Array.from(new Set([...value.salesChannelIds, channelId]))
84
+ : value.salesChannelIds.filter((id) => id !== channelId);
85
+ const nextAllowed = new Set();
86
+ for (const selected of channels) {
87
+ if (!nextChannels.includes(selected.id))
88
+ continue;
89
+ for (const language of languagesForChannel(selected, detailsByCode)) {
90
+ nextAllowed.add(language);
91
+ }
92
+ }
93
+ let nextLanguages = nextChannels.length === 0
94
+ ? []
95
+ : value.languages.filter((language) => nextAllowed.has(language));
96
+ if (checked && channel && nextLanguages.length === 0) {
97
+ const defaults = languagesForChannel(channel, detailsByCode);
98
+ if (defaults[0])
99
+ nextLanguages = [defaults[0]];
100
+ }
101
+ onChange({ salesChannelIds: nextChannels, languages: nextLanguages });
102
+ }, [channels, detailsByCode, onChange, value.languages, value.salesChannelIds]);
103
+ const setLanguage = useCallback((language, checked) => {
104
+ onChange({
105
+ ...value,
106
+ languages: checked
107
+ ? Array.from(new Set([...value.languages, language]))
108
+ : value.languages.filter((item) => item !== language),
109
+ });
110
+ }, [onChange, value]);
111
+ const hasSelectedChannels = value.salesChannelIds.length > 0;
112
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { className: "text-base", children: t('scopePicker.title') }) }), _jsxs(CardContent, { className: "space-y-4", children: [error ? (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: error }) })) : null, _jsx("div", { className: "grid gap-2", children: channels.map((channel) => (_jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: value.salesChannelIds.includes(channel.id), onChange: (event) => setChannel(channel.id, event.target.checked) }), _jsx("span", { children: channel.name['en-US'] ?? channel.code }), _jsx(Badge, { variant: "outline", className: "font-mono text-[10px]", children: channel.code })] }, channel.id))) }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: t('scopePicker.languages') }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [allowedLanguages.map((language) => (_jsxs("label", { className: "flex items-center gap-2 rounded border px-3 py-2 text-sm", children: [_jsx(Checkbox, { checked: value.languages.includes(language), onChange: (event) => setLanguage(language, event.target.checked) }), _jsx("span", { children: language })] }, language))), !hasSelectedChannels ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('scopePicker.selectChannel') })) : allowedLanguages.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('scopePicker.loadingLanguages') })) : null] })] })] })] }));
113
+ }
114
+ //# sourceMappingURL=ScopePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopePicker.js","sourceRoot":"","sources":["../../../src/components/scope-picker/ScopePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAElF,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AA6BzF,SAAS,mBAAmB,CAC1B,OAA4B,EAC5B,aAAiD;IAEjD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,MAAM,EAAE,SAAS,EAAE,MAAM;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC;IACvD,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAoB;IAC/D,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAqC,EAAE,CAAC,CAAC;IAC3F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,sBAAsB,EAAE;aACrB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,IAAI;gBAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,IAAI;gBAAE,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,KAAK,CAAC;QACf,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAC7B,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CACxF,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEjC,KAAK,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7E,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,IAAI,SAAS;gBAAE,OAAO;YACtB,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC7B,GAAG,OAAO;gBACV,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;aAC1D,CAAC,CAAC,CAAC;QACN,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,CAAC,SAAS;gBAAE,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAErD,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAC9E,CAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,CAClC,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,KAAK,MAAM,QAAQ,IAAI,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO;QAErD,QAAQ,CAAC;YACP,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAEzE,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,SAAiB,EAAE,OAAgB,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,OAAO;YAC1B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAE3D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,SAAS;YAClD,KAAK,MAAM,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;gBACpE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,aAAa,GACf,YAAY,CAAC,MAAM,KAAK,CAAC;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEtE,IAAI,OAAO,IAAI,OAAO,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC7D,IAAI,QAAQ,CAAC,CAAC,CAAC;gBAAE,aAAa,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,QAAQ,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IACxE,CAAC,EACD,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,CAC5E,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,QAAgB,EAAE,OAAgB,EAAE,EAAE;QACrC,QAAQ,CAAC;YACP,GAAG,KAAK;YACR,SAAS,EAAE,OAAO;gBAChB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACrD,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC;SACxD,CAAC,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,EAAE,KAAK,CAAC,CAClB,CAAC;IAEF,MAAM,mBAAmB,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7D,OAAO,CACL,MAAC,IAAI,eACH,KAAC,UAAU,cACT,KAAC,SAAS,IAAC,SAAS,EAAC,WAAW,YAAE,CAAC,CAAC,mBAAmB,CAAC,GAAa,GAC1D,EACb,MAAC,WAAW,IAAC,SAAS,EAAC,WAAW,aAC/B,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,KAAK,IAAC,OAAO,EAAC,aAAa,YAC1B,KAAC,gBAAgB,cAAE,KAAK,GAAoB,GACtC,CACT,CAAC,CAAC,CAAC,IAAI,EAER,cAAK,SAAS,EAAC,YAAY,YACxB,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,iBAAwB,SAAS,EAAC,iCAAiC,aACjE,KAAC,QAAQ,IACP,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GACjE,EACF,yBAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,GAAQ,EACpD,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,uBAAuB,YACvD,OAAO,CAAC,IAAI,GACP,KARE,OAAO,CAAC,EAAE,CASd,CACT,CAAC,GACE,EAEN,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,KAAK,cAAE,CAAC,CAAC,uBAAuB,CAAC,GAAS,EAC3C,eAAK,SAAS,EAAC,sBAAsB,aAClC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAClC,iBAEE,SAAS,EAAC,0DAA0D,aAEpE,KAAC,QAAQ,IACP,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAChE,EACF,yBAAO,QAAQ,GAAQ,KAPlB,QAAQ,CAQP,CACT,CAAC,EACD,CAAC,mBAAmB,CAAC,CAAC,CAAC,CACtB,YAAG,SAAS,EAAC,+BAA+B,YAAE,CAAC,CAAC,2BAA2B,CAAC,GAAK,CAClF,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAClC,YAAG,SAAS,EAAC,+BAA+B,YAAE,CAAC,CAAC,8BAA8B,CAAC,GAAK,CACrF,CAAC,CAAC,CAAC,IAAI,IACJ,IACF,IACM,IACT,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { SalesChannelDetail, SalesChannelListResponse } from '@endora-commerce/contracts';
2
+ /**
3
+ * The two sales-channel reads `ScopePicker` needs, built here (feature 091, P8).
4
+ *
5
+ * Until this component moved into the kit it called `sales_channels`' own admin
6
+ * API client, which is a reach out of the platform's frontend into a module's
7
+ * admin code — the one entry
8
+ * `backend/scripts/ledgers/cross-module-imports/cms.ts` held. The exit is the
9
+ * one P2 established for the three data-fetching pickers: name the endpoint and
10
+ * the published response type, which both sides already compile, and depend on
11
+ * no module's code. Both shapes are `@endora-commerce/contracts`', so nothing
12
+ * about them is duplicated — only the two `GET`s the picker needs out of that
13
+ * client's fifteen methods.
14
+ */
15
+ /** Active channels, one large page — channels are few and unpaged in practice. */
16
+ export declare function listScopeSalesChannels(pageSize?: number): Promise<SalesChannelListResponse>;
17
+ /** One channel by its code, for the language list a summary does not carry. */
18
+ export declare function fetchScopeSalesChannel(code: string): Promise<SalesChannelDetail>;
19
+ //# sourceMappingURL=sales-channels-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sales-channels-api.d.ts","sourceRoot":"","sources":["../../../src/components/scope-picker/sales-channels-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAO/F;;;;;;;;;;;;GAYG;AAEH,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,QAAQ,SAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAKxF;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIhF"}