@open-mercato/core 0.5.1-develop.2953.6647bb2c43 → 0.5.1-develop.2954.610bab2d08

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 (226) hide show
  1. package/dist/helpers/integration/salesUi.js +25 -23
  2. package/dist/helpers/integration/salesUi.js.map +2 -2
  3. package/dist/modules/api_docs/frontend/docs/api/Explorer.js +24 -24
  4. package/dist/modules/api_docs/frontend/docs/api/Explorer.js.map +2 -2
  5. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +15 -7
  6. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
  7. package/dist/modules/attachments/fields/attachment.js +4 -6
  8. package/dist/modules/attachments/fields/attachment.js.map +2 -2
  9. package/dist/modules/auth/backend/users/create/page.js +26 -26
  10. package/dist/modules/auth/backend/users/create/page.js.map +2 -2
  11. package/dist/modules/business_rules/components/ActionRow.js +36 -25
  12. package/dist/modules/business_rules/components/ActionRow.js.map +2 -2
  13. package/dist/modules/business_rules/components/ConditionGroup.js +14 -5
  14. package/dist/modules/business_rules/components/ConditionGroup.js.map +2 -2
  15. package/dist/modules/business_rules/components/ConditionRow.js +19 -10
  16. package/dist/modules/business_rules/components/ConditionRow.js.map +2 -2
  17. package/dist/modules/business_rules/components/RuleSetMembers.js +16 -10
  18. package/dist/modules/business_rules/components/RuleSetMembers.js.map +2 -2
  19. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +30 -34
  20. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  21. package/dist/modules/catalog/backend/catalog/products/create/page.js +220 -223
  22. package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
  23. package/dist/modules/catalog/components/PriceKindSettings.js +20 -19
  24. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  25. package/dist/modules/catalog/components/products/ProductUomSection.js +42 -37
  26. package/dist/modules/catalog/components/products/ProductUomSection.js.map +2 -2
  27. package/dist/modules/catalog/components/products/VariantBuilder.js +22 -18
  28. package/dist/modules/catalog/components/products/VariantBuilder.js.map +2 -2
  29. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +18 -26
  30. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
  31. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +4 -6
  32. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  33. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +5 -4
  34. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +2 -2
  35. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js +19 -7
  36. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js.map +2 -2
  37. package/dist/modules/customers/backend/customers/deals/pipeline/page.js +24 -21
  38. package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +2 -2
  39. package/dist/modules/customers/components/AddressEditor.js +24 -7
  40. package/dist/modules/customers/components/AddressEditor.js.map +2 -2
  41. package/dist/modules/customers/components/AddressFormatSettings.js +35 -25
  42. package/dist/modules/customers/components/AddressFormatSettings.js.map +2 -2
  43. package/dist/modules/customers/components/detail/ActivityForm.js +20 -12
  44. package/dist/modules/customers/components/detail/ActivityForm.js.map +2 -2
  45. package/dist/modules/customers/components/detail/AnnualRevenueField.js +2 -2
  46. package/dist/modules/customers/components/detail/AnnualRevenueField.js.map +2 -2
  47. package/dist/modules/customers/components/detail/DealForm.js +19 -14
  48. package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
  49. package/dist/modules/customers/components/formConfig.js +16 -12
  50. package/dist/modules/customers/components/formConfig.js.map +2 -2
  51. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js +3 -2
  52. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js.map +2 -2
  53. package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js +18 -10
  54. package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js.map +2 -2
  55. package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js +3 -2
  56. package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js.map +2 -2
  57. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js +3 -2
  58. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js.map +2 -2
  59. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +27 -28
  60. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +2 -2
  61. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js +14 -6
  62. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js.map +2 -2
  63. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js +14 -6
  64. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js.map +2 -2
  65. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js +3 -2
  66. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js.map +2 -2
  67. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js +3 -2
  68. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js.map +2 -2
  69. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js +17 -8
  70. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js.map +2 -2
  71. package/dist/modules/data_sync/backend/data-sync/page.js +40 -23
  72. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  73. package/dist/modules/data_sync/components/IntegrationScheduleTab.js +15 -6
  74. package/dist/modules/data_sync/components/IntegrationScheduleTab.js.map +2 -2
  75. package/dist/modules/dictionaries/components/AppearanceSelector.js +4 -4
  76. package/dist/modules/dictionaries/components/AppearanceSelector.js.map +2 -2
  77. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +4 -5
  78. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
  79. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +22 -14
  80. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +2 -2
  81. package/dist/modules/dictionaries/fields/dictionary.js +18 -13
  82. package/dist/modules/dictionaries/fields/dictionary.js.map +2 -2
  83. package/dist/modules/entities/components/EncryptionManager.js +23 -19
  84. package/dist/modules/entities/components/EncryptionManager.js.map +2 -2
  85. package/dist/modules/feature_toggles/components/formConfig.js +17 -9
  86. package/dist/modules/feature_toggles/components/formConfig.js.map +2 -2
  87. package/dist/modules/feature_toggles/components/overrideFormConfig.js +17 -9
  88. package/dist/modules/feature_toggles/components/overrideFormConfig.js.map +2 -2
  89. package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js +15 -8
  90. package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js.map +2 -2
  91. package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js +37 -22
  92. package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js.map +2 -2
  93. package/dist/modules/integrations/backend/integrations/[id]/page.js +22 -17
  94. package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
  95. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +12 -6
  96. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
  97. package/dist/modules/planner/components/AvailabilityRulesEditor.js +19 -12
  98. package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
  99. package/dist/modules/resources/components/ResourceCrudForm.js +15 -10
  100. package/dist/modules/resources/components/ResourceCrudForm.js.map +3 -3
  101. package/dist/modules/sales/backend/sales/documents/[id]/page.js +15 -18
  102. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  103. package/dist/modules/sales/components/ProviderFieldInput.js +23 -20
  104. package/dist/modules/sales/components/ProviderFieldInput.js.map +2 -2
  105. package/dist/modules/sales/components/ShippingMethodsSettings.js +25 -17
  106. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +3 -3
  107. package/dist/modules/sales/components/channels/ChannelOfferForm.js +35 -42
  108. package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +2 -2
  109. package/dist/modules/sales/components/documents/AddressesSection.js +87 -90
  110. package/dist/modules/sales/components/documents/AddressesSection.js.map +2 -2
  111. package/dist/modules/sales/components/documents/AdjustmentDialog.js +17 -6
  112. package/dist/modules/sales/components/documents/AdjustmentDialog.js.map +3 -3
  113. package/dist/modules/sales/components/documents/LineItemDialog.js +42 -25
  114. package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
  115. package/dist/modules/sales/components/documents/SalesDocumentForm.js +96 -87
  116. package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
  117. package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js +20 -11
  118. package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js.map +2 -2
  119. package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js +20 -11
  120. package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js.map +2 -2
  121. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js +36 -22
  122. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js.map +2 -2
  123. package/dist/modules/staff/components/TeamMemberForm.js +14 -9
  124. package/dist/modules/staff/components/TeamMemberForm.js.map +3 -3
  125. package/dist/modules/workflows/backend/tasks/[id]/page.js +42 -21
  126. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
  127. package/dist/modules/workflows/components/ActivitiesEditor.js +14 -6
  128. package/dist/modules/workflows/components/ActivitiesEditor.js.map +3 -3
  129. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +25 -17
  130. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +3 -3
  131. package/dist/modules/workflows/components/EdgeEditDialog.js +48 -45
  132. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  133. package/dist/modules/workflows/components/NodeEditDialog.js +90 -90
  134. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  135. package/dist/modules/workflows/components/StepsEditor.js +14 -6
  136. package/dist/modules/workflows/components/StepsEditor.js.map +3 -3
  137. package/dist/modules/workflows/components/TransitionsEditor.js +31 -26
  138. package/dist/modules/workflows/components/TransitionsEditor.js.map +3 -3
  139. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +19 -11
  140. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +3 -3
  141. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +12 -14
  142. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
  143. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +24 -16
  144. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +3 -3
  145. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +12 -13
  146. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
  147. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +12 -8
  148. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  149. package/dist/modules/workflows/frontend/checkout-demo/page.js +43 -46
  150. package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
  151. package/package.json +3 -3
  152. package/src/helpers/integration/salesUi.ts +40 -30
  153. package/src/modules/api_docs/frontend/docs/api/Explorer.tsx +25 -19
  154. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +21 -11
  155. package/src/modules/attachments/fields/attachment.tsx +4 -6
  156. package/src/modules/auth/backend/users/create/page.tsx +16 -20
  157. package/src/modules/business_rules/components/ActionRow.tsx +51 -32
  158. package/src/modules/business_rules/components/ConditionGroup.tsx +20 -9
  159. package/src/modules/business_rules/components/ConditionRow.tsx +24 -15
  160. package/src/modules/business_rules/components/RuleSetMembers.tsx +23 -13
  161. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +47 -53
  162. package/src/modules/catalog/backend/catalog/products/create/page.tsx +84 -87
  163. package/src/modules/catalog/components/PriceKindSettings.tsx +9 -9
  164. package/src/modules/catalog/components/products/ProductUomSection.tsx +85 -83
  165. package/src/modules/catalog/components/products/VariantBuilder.tsx +49 -33
  166. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +12 -27
  167. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +4 -6
  168. package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +5 -4
  169. package/src/modules/customers/backend/config/customers/pipeline-stages/page.tsx +28 -15
  170. package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +37 -26
  171. package/src/modules/customers/components/AddressEditor.tsx +30 -16
  172. package/src/modules/customers/components/AddressFormatSettings.tsx +25 -19
  173. package/src/modules/customers/components/detail/ActivityForm.tsx +35 -23
  174. package/src/modules/customers/components/detail/AnnualRevenueField.tsx +2 -2
  175. package/src/modules/customers/components/detail/DealForm.tsx +33 -20
  176. package/src/modules/customers/components/formConfig.tsx +25 -17
  177. package/src/modules/customers/widgets/dashboard/customer-todos/widget.client.tsx +3 -2
  178. package/src/modules/customers/widgets/dashboard/new-customers/widget.client.tsx +21 -11
  179. package/src/modules/customers/widgets/dashboard/new-deals/widget.client.tsx +3 -2
  180. package/src/modules/customers/widgets/dashboard/next-interactions/widget.client.tsx +3 -2
  181. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +17 -22
  182. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.tsx +17 -7
  183. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.tsx +20 -10
  184. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.tsx +3 -2
  185. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.client.tsx +3 -2
  186. package/src/modules/dashboards/widgets/dashboard/top-products/widget.client.tsx +20 -9
  187. package/src/modules/data_sync/backend/data-sync/page.tsx +64 -38
  188. package/src/modules/data_sync/components/IntegrationScheduleTab.tsx +18 -7
  189. package/src/modules/dictionaries/components/AppearanceSelector.tsx +4 -4
  190. package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +3 -4
  191. package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +27 -21
  192. package/src/modules/dictionaries/fields/dictionary.tsx +36 -23
  193. package/src/modules/entities/components/EncryptionManager.tsx +49 -33
  194. package/src/modules/feature_toggles/components/formConfig.tsx +20 -10
  195. package/src/modules/feature_toggles/components/overrideFormConfig.tsx +20 -10
  196. package/src/modules/inbox_ops/backend/inbox-ops/settings/page.tsx +19 -10
  197. package/src/modules/inbox_ops/components/proposals/EditActionDialog.tsx +49 -26
  198. package/src/modules/integrations/backend/integrations/[id]/page.tsx +20 -11
  199. package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +19 -9
  200. package/src/modules/planner/components/AvailabilityRulesEditor.tsx +34 -21
  201. package/src/modules/resources/components/ResourceCrudForm.tsx +24 -15
  202. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +12 -15
  203. package/src/modules/sales/components/ProviderFieldInput.tsx +26 -17
  204. package/src/modules/sales/components/ShippingMethodsSettings.tsx +28 -20
  205. package/src/modules/sales/components/channels/ChannelOfferForm.tsx +51 -46
  206. package/src/modules/sales/components/documents/AddressesSection.tsx +78 -76
  207. package/src/modules/sales/components/documents/AdjustmentDialog.tsx +27 -15
  208. package/src/modules/sales/components/documents/LineItemDialog.tsx +69 -51
  209. package/src/modules/sales/components/documents/SalesDocumentForm.tsx +98 -87
  210. package/src/modules/sales/widgets/dashboard/new-orders/widget.client.tsx +23 -12
  211. package/src/modules/sales/widgets/dashboard/new-quotes/widget.client.tsx +23 -12
  212. package/src/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.tsx +35 -19
  213. package/src/modules/staff/components/TeamMemberForm.tsx +23 -14
  214. package/src/modules/workflows/backend/tasks/[id]/page.tsx +51 -23
  215. package/src/modules/workflows/components/ActivitiesEditor.tsx +20 -10
  216. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +28 -18
  217. package/src/modules/workflows/components/EdgeEditDialog.tsx +51 -40
  218. package/src/modules/workflows/components/NodeEditDialog.tsx +81 -77
  219. package/src/modules/workflows/components/StepsEditor.tsx +20 -10
  220. package/src/modules/workflows/components/TransitionsEditor.tsx +61 -44
  221. package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +22 -12
  222. package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +9 -13
  223. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +27 -17
  224. package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +9 -12
  225. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +19 -11
  226. package/src/modules/workflows/frontend/checkout-demo/page.tsx +71 -60
@@ -2,6 +2,14 @@
2
2
 
3
3
  import * as React from 'react'
4
4
  import { Button } from '@open-mercato/ui/primitives/button'
5
+ import { Input } from '@open-mercato/ui/primitives/input'
6
+ import {
7
+ Select,
8
+ SelectContent,
9
+ SelectItem,
10
+ SelectTrigger,
11
+ SelectValue,
12
+ } from '@open-mercato/ui/primitives/select'
5
13
  import { Plus, ChevronUp, ChevronDown, X } from 'lucide-react'
6
14
  import { useQuery } from '@tanstack/react-query'
7
15
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
@@ -168,30 +176,32 @@ export function RuleSetMembers({ members, onAdd, onUpdate, onRemove }: RuleSetMe
168
176
  <label className="block text-sm font-medium text-foreground mb-1">
169
177
  {t('business_rules.sets.members.form.selectRule')}
170
178
  </label>
171
- <select
172
- value={selectedRuleId}
173
- onChange={(e) => setSelectedRuleId(e.target.value)}
174
- className="w-full px-3 py-2 border border-border rounded bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
179
+ <Select
180
+ value={selectedRuleId || undefined}
181
+ onValueChange={(value) => setSelectedRuleId(value ?? '')}
175
182
  >
176
- <option value="">{t('business_rules.sets.members.form.selectRulePlaceholder')}</option>
177
- {rulesNotInSet.map((rule) => (
178
- <option key={rule.id} value={rule.id}>
179
- {rule.ruleName} ({rule.ruleId})
180
- </option>
181
- ))}
182
- </select>
183
+ <SelectTrigger>
184
+ <SelectValue placeholder={t('business_rules.sets.members.form.selectRulePlaceholder')} />
185
+ </SelectTrigger>
186
+ <SelectContent>
187
+ {rulesNotInSet.map((rule) => (
188
+ <SelectItem key={rule.id} value={rule.id}>
189
+ {rule.ruleName} ({rule.ruleId})
190
+ </SelectItem>
191
+ ))}
192
+ </SelectContent>
193
+ </Select>
183
194
  </div>
184
195
 
185
196
  <div className="w-32">
186
197
  <label className="block text-sm font-medium text-foreground mb-1">
187
198
  {t('business_rules.sets.members.form.sequence')}
188
199
  </label>
189
- <input
200
+ <Input
190
201
  type="number"
191
202
  value={sequence}
192
203
  onChange={(e) => setSequence(parseInt(e.target.value) || 0)}
193
204
  min={0}
194
- className="w-full px-3 py-2 border border-border rounded bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
195
205
  />
196
206
  </div>
197
207
  </div>
@@ -21,6 +21,13 @@ import { flash } from "@open-mercato/ui/backend/FlashMessages";
21
21
  import { Button } from "@open-mercato/ui/primitives/button";
22
22
  import { Input } from "@open-mercato/ui/primitives/input";
23
23
  import { Label } from "@open-mercato/ui/primitives/label";
24
+ import {
25
+ Select,
26
+ SelectContent,
27
+ SelectItem,
28
+ SelectTrigger,
29
+ SelectValue,
30
+ } from "@open-mercato/ui/primitives/select";
24
31
  import { TagsInput } from "@open-mercato/ui/backend/inputs/TagsInput";
25
32
  import { Textarea } from "@open-mercato/ui/primitives/textarea";
26
33
  import { DataLoader } from "@open-mercato/ui/primitives/DataLoader";
@@ -2473,44 +2480,34 @@ function ProductMetaSection({
2473
2480
  <Label>
2474
2481
  {t("catalog.products.form.productType", "Product type")}
2475
2482
  </Label>
2476
- <select
2477
- className="w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
2483
+ <Select
2478
2484
  value={values.productType || "simple"}
2479
- onChange={(event) => {
2480
- const nextType = event.target.value;
2485
+ onValueChange={(value) => {
2486
+ const nextType = value;
2481
2487
  setValue("productType", nextType);
2482
- const nextIsConfigurable =
2483
- isConfigurableProductType(nextType);
2488
+ const nextIsConfigurable = isConfigurableProductType(nextType);
2484
2489
  if (nextIsConfigurable && !values.hasVariants) {
2485
2490
  setValue("hasVariants", true);
2486
- } else if (
2487
- !nextIsConfigurable &&
2488
- values.hasVariants
2489
- ) {
2491
+ } else if (!nextIsConfigurable && values.hasVariants) {
2490
2492
  setValue("hasVariants", false);
2491
2493
  }
2492
2494
  }}
2493
2495
  >
2494
- {CATALOG_PRODUCT_TYPES.map((type) => {
2495
- const isDisabled =
2496
- type === "bundle" || type === "grouped";
2497
- return (
2498
- <option
2499
- key={type}
2500
- value={type}
2501
- disabled={isDisabled}
2502
- >
2503
- {t(
2504
- `catalog.products.types.${type}`,
2505
- type,
2506
- )}
2507
- {isDisabled
2508
- ? ` (${t("common.comingSoon", "Coming soon")})`
2509
- : ""}
2510
- </option>
2511
- );
2512
- })}
2513
- </select>
2496
+ <SelectTrigger>
2497
+ <SelectValue />
2498
+ </SelectTrigger>
2499
+ <SelectContent>
2500
+ {CATALOG_PRODUCT_TYPES.map((type) => {
2501
+ const isDisabled = type === "bundle" || type === "grouped";
2502
+ return (
2503
+ <SelectItem key={type} value={type} disabled={isDisabled}>
2504
+ {t(`catalog.products.types.${type}`, type)}
2505
+ {isDisabled ? ` (${t("common.comingSoon", "Coming soon")})` : ""}
2506
+ </SelectItem>
2507
+ );
2508
+ })}
2509
+ </SelectContent>
2510
+ </Select>
2514
2511
  {errors.productType ? (
2515
2512
  <p className="text-xs text-red-600">
2516
2513
  {errors.productType}
@@ -2551,31 +2548,28 @@ function ProductMetaSection({
2551
2548
  </span>
2552
2549
  </Button>
2553
2550
  </div>
2554
- <select
2555
- className="w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
2556
- value={values.taxRateId ?? ""}
2557
- onChange={(event) =>
2558
- setValue("taxRateId", event.target.value || null)
2559
- }
2551
+ <Select
2552
+ value={values.taxRateId || undefined}
2553
+ onValueChange={(value) => setValue("taxRateId", value || null)}
2560
2554
  disabled={!taxRates.length}
2561
2555
  >
2562
- <option value="">
2563
- {taxRates.length
2564
- ? t(
2565
- "catalog.products.create.taxRates.noneSelected",
2566
- "No tax class selected",
2567
- )
2568
- : t(
2569
- "catalog.products.create.taxRates.emptyOption",
2570
- "No tax classes available",
2571
- )}
2572
- </option>
2573
- {taxRates.map((rate) => (
2574
- <option key={rate.id} value={rate.id}>
2575
- {formatTaxRateLabel(rate)}
2576
- </option>
2577
- ))}
2578
- </select>
2556
+ <SelectTrigger>
2557
+ <SelectValue
2558
+ placeholder={
2559
+ taxRates.length
2560
+ ? t("catalog.products.create.taxRates.noneSelected", "No tax class selected")
2561
+ : t("catalog.products.create.taxRates.emptyOption", "No tax classes available")
2562
+ }
2563
+ />
2564
+ </SelectTrigger>
2565
+ <SelectContent>
2566
+ {taxRates.map((rate) => (
2567
+ <SelectItem key={rate.id} value={rate.id}>
2568
+ {formatTaxRateLabel(rate)}
2569
+ </SelectItem>
2570
+ ))}
2571
+ </SelectContent>
2572
+ </Select>
2579
2573
  <p className="text-xs text-muted-foreground">
2580
2574
  {taxRates.length
2581
2575
  ? t(
@@ -17,6 +17,14 @@ import { TagsInput } from "@open-mercato/ui/backend/inputs/TagsInput";
17
17
  import { Button } from "@open-mercato/ui/primitives/button";
18
18
  import { Input } from "@open-mercato/ui/primitives/input";
19
19
  import { Label } from "@open-mercato/ui/primitives/label";
20
+ import { RadioGroup, Radio } from "@open-mercato/ui/primitives/radio";
21
+ import {
22
+ Select,
23
+ SelectContent,
24
+ SelectItem,
25
+ SelectTrigger,
26
+ SelectValue,
27
+ } from "@open-mercato/ui/primitives/select";
20
28
  import { cn } from "@open-mercato/shared/lib/utils";
21
29
  import {
22
30
  Plus,
@@ -1551,6 +1559,12 @@ function ProductBuilder({
1551
1559
  ) : null}
1552
1560
 
1553
1561
  <div className="rounded-lg border">
1562
+ <RadioGroup
1563
+ className="contents"
1564
+ name="defaultVariant"
1565
+ value={(Array.isArray(values.variants) ? values.variants : []).find((v) => v.isDefault)?.id ?? ''}
1566
+ onValueChange={(next) => markDefaultVariant(next)}
1567
+ >
1554
1568
  <div className="w-full overflow-x-auto">
1555
1569
  <table className="w-full min-w-[900px] table-fixed border-collapse text-sm">
1556
1570
  <thead className="bg-muted/50">
@@ -1642,12 +1656,7 @@ function ProductBuilder({
1642
1656
  <tr key={variant.id} className="border-t">
1643
1657
  <td className="px-3 py-2">
1644
1658
  <label className="inline-flex items-center gap-1 text-xs">
1645
- <input
1646
- type="radio"
1647
- name="defaultVariant"
1648
- checked={variant.isDefault}
1649
- onChange={() => markDefaultVariant(variant.id)}
1650
- />
1659
+ <Radio value={variant.id} />
1651
1660
  {variant.isDefault
1652
1661
  ? t(
1653
1662
  "catalog.products.create.variantsBuilder.defaultLabel",
@@ -1697,35 +1706,36 @@ function ProductBuilder({
1697
1706
  />
1698
1707
  </td>
1699
1708
  <td className="px-3 py-2">
1700
- <select
1701
- className="flex h-9 w-full rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
1702
- value={variant.taxRateId ?? ""}
1703
- onChange={(event) =>
1704
- setVariantField(
1705
- variant.id,
1706
- "taxRateId",
1707
- event.target.value || null,
1708
- )
1709
+ <Select
1710
+ value={variant.taxRateId || undefined}
1711
+ onValueChange={(value) =>
1712
+ setVariantField(variant.id, "taxRateId", value || null)
1709
1713
  }
1710
1714
  disabled={!taxRates.length}
1711
1715
  >
1712
- <option value="">
1713
- {defaultTaxRateLabel
1714
- ? t(
1715
- "catalog.products.create.variantsBuilder.vatOptionDefault",
1716
- "Use product tax class ({{label}})",
1717
- ).replace("{{label}}", defaultTaxRateLabel)
1718
- : t(
1719
- "catalog.products.create.variantsBuilder.vatOptionNone",
1720
- "No tax class",
1721
- )}
1722
- </option>
1723
- {taxRates.map((rate) => (
1724
- <option key={rate.id} value={rate.id}>
1725
- {formatTaxRateLabel(rate)}
1726
- </option>
1727
- ))}
1728
- </select>
1716
+ <SelectTrigger>
1717
+ <SelectValue
1718
+ placeholder={
1719
+ defaultTaxRateLabel
1720
+ ? t(
1721
+ "catalog.products.create.variantsBuilder.vatOptionDefault",
1722
+ "Use product tax class ({{label}})",
1723
+ ).replace("{{label}}", defaultTaxRateLabel)
1724
+ : t(
1725
+ "catalog.products.create.variantsBuilder.vatOptionNone",
1726
+ "No tax class",
1727
+ )
1728
+ }
1729
+ />
1730
+ </SelectTrigger>
1731
+ <SelectContent>
1732
+ {taxRates.map((rate) => (
1733
+ <SelectItem key={rate.id} value={rate.id}>
1734
+ {formatTaxRateLabel(rate)}
1735
+ </SelectItem>
1736
+ ))}
1737
+ </SelectContent>
1738
+ </Select>
1729
1739
  </td>
1730
1740
  {priceKinds.map((kind) => (
1731
1741
  <td key={kind.id} className="px-3 py-2">
@@ -1733,9 +1743,8 @@ function ProductBuilder({
1733
1743
  <span className="text-xs text-muted-foreground">
1734
1744
  {kind.currencyCode ?? "—"}
1735
1745
  </span>
1736
- <input
1746
+ <Input
1737
1747
  type="number"
1738
- className="w-full rounded-md border px-2 py-1"
1739
1748
  value={variant.prices?.[kind.id]?.amount ?? ""}
1740
1749
  onChange={(event) =>
1741
1750
  setVariantPrice(
@@ -1803,6 +1812,7 @@ function ProductBuilder({
1803
1812
  </tbody>
1804
1813
  </table>
1805
1814
  </div>
1815
+ </RadioGroup>
1806
1816
  {!priceKinds.length ? (
1807
1817
  <div className="flex items-center gap-2 border-t px-4 py-3 text-sm text-muted-foreground">
1808
1818
  <AlertCircle className="h-4 w-4" />
@@ -1964,44 +1974,34 @@ function ProductMetaSection({
1964
1974
  <Label>
1965
1975
  {t("catalog.products.form.productType", "Product type")}
1966
1976
  </Label>
1967
- <select
1968
- className="w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
1977
+ <Select
1969
1978
  value={values.productType || "simple"}
1970
- onChange={(event) => {
1971
- const nextType = event.target.value;
1979
+ onValueChange={(value) => {
1980
+ const nextType = value;
1972
1981
  setValue("productType", nextType);
1973
- const nextIsConfigurable =
1974
- isConfigurableProductType(nextType);
1982
+ const nextIsConfigurable = isConfigurableProductType(nextType);
1975
1983
  if (nextIsConfigurable && !values.hasVariants) {
1976
1984
  setValue("hasVariants", true);
1977
- } else if (
1978
- !nextIsConfigurable &&
1979
- values.hasVariants
1980
- ) {
1985
+ } else if (!nextIsConfigurable && values.hasVariants) {
1981
1986
  setValue("hasVariants", false);
1982
1987
  }
1983
1988
  }}
1984
1989
  >
1985
- {CATALOG_PRODUCT_TYPES.map((type) => {
1986
- const isDisabled =
1987
- type === "bundle" || type === "grouped";
1988
- return (
1989
- <option
1990
- key={type}
1991
- value={type}
1992
- disabled={isDisabled}
1993
- >
1994
- {t(
1995
- `catalog.products.types.${type}`,
1996
- type,
1997
- )}
1998
- {isDisabled
1999
- ? ` (${t("common.comingSoon", "Coming soon")})`
2000
- : ""}
2001
- </option>
2002
- );
2003
- })}
2004
- </select>
1990
+ <SelectTrigger>
1991
+ <SelectValue />
1992
+ </SelectTrigger>
1993
+ <SelectContent>
1994
+ {CATALOG_PRODUCT_TYPES.map((type) => {
1995
+ const isDisabled = type === "bundle" || type === "grouped";
1996
+ return (
1997
+ <SelectItem key={type} value={type} disabled={isDisabled}>
1998
+ {t(`catalog.products.types.${type}`, type)}
1999
+ {isDisabled ? ` (${t("common.comingSoon", "Coming soon")})` : ""}
2000
+ </SelectItem>
2001
+ );
2002
+ })}
2003
+ </SelectContent>
2004
+ </Select>
2005
2005
  {errors.productType ? (
2006
2006
  <p className="text-xs text-red-600">
2007
2007
  {errors.productType}
@@ -2042,31 +2042,28 @@ function ProductMetaSection({
2042
2042
  </span>
2043
2043
  </Button>
2044
2044
  </div>
2045
- <select
2046
- className="w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
2047
- value={values.taxRateId ?? ""}
2048
- onChange={(event) =>
2049
- setValue("taxRateId", event.target.value || null)
2050
- }
2045
+ <Select
2046
+ value={values.taxRateId || undefined}
2047
+ onValueChange={(value) => setValue("taxRateId", value || null)}
2051
2048
  disabled={!taxRates.length}
2052
2049
  >
2053
- <option value="">
2054
- {taxRates.length
2055
- ? t(
2056
- "catalog.products.create.taxRates.noneSelected",
2057
- "No tax class selected",
2058
- )
2059
- : t(
2060
- "catalog.products.create.taxRates.emptyOption",
2061
- "No tax classes available",
2062
- )}
2063
- </option>
2064
- {taxRates.map((rate) => (
2065
- <option key={rate.id} value={rate.id}>
2066
- {formatTaxRateLabel(rate)}
2067
- </option>
2068
- ))}
2069
- </select>
2050
+ <SelectTrigger>
2051
+ <SelectValue
2052
+ placeholder={
2053
+ taxRates.length
2054
+ ? t("catalog.products.create.taxRates.noneSelected", "No tax class selected")
2055
+ : t("catalog.products.create.taxRates.emptyOption", "No tax classes available")
2056
+ }
2057
+ />
2058
+ </SelectTrigger>
2059
+ <SelectContent>
2060
+ {taxRates.map((rate) => (
2061
+ <SelectItem key={rate.id} value={rate.id}>
2062
+ {formatTaxRateLabel(rate)}
2063
+ </SelectItem>
2064
+ ))}
2065
+ </SelectContent>
2066
+ </Select>
2070
2067
  <p className="text-xs text-muted-foreground">
2071
2068
  {taxRates.length
2072
2069
  ? t(
@@ -7,6 +7,7 @@ import { RowActions } from '@open-mercato/ui/backend/RowActions'
7
7
  import { Button } from '@open-mercato/ui/primitives/button'
8
8
  import { Input } from '@open-mercato/ui/primitives/input'
9
9
  import { Label } from '@open-mercato/ui/primitives/label'
10
+ import { RadioGroup, Radio } from '@open-mercato/ui/primitives/radio'
10
11
  import {
11
12
  Dialog,
12
13
  DialogContent,
@@ -480,7 +481,12 @@ export function PriceKindSettings() {
480
481
  </div>
481
482
  <div className="space-y-2">
482
483
  <Label>{t('catalog.priceKinds.form.displayModeLabel', 'Display mode')}</Label>
483
- <div className="grid gap-2 md:grid-cols-2">
484
+ <RadioGroup
485
+ className="grid gap-2 md:grid-cols-2"
486
+ name="displayMode"
487
+ value={form.displayMode}
488
+ onValueChange={(next) => setForm((prev) => ({ ...prev, displayMode: next as CatalogPriceDisplayMode }))}
489
+ >
484
490
  {displayModeOptions.map((mode) => (
485
491
  <label
486
492
  key={mode.value}
@@ -488,17 +494,11 @@ export function PriceKindSettings() {
488
494
  form.displayMode === mode.value ? 'border-primary bg-primary/5' : 'border-border'
489
495
  }`}
490
496
  >
491
- <input
492
- type="radio"
493
- name="displayMode"
494
- value={mode.value}
495
- checked={form.displayMode === mode.value}
496
- onChange={() => setForm((prev) => ({ ...prev, displayMode: mode.value }))}
497
- />
497
+ <Radio value={mode.value} />
498
498
  <span>{mode.label}</span>
499
499
  </label>
500
500
  ))}
501
- </div>
501
+ </RadioGroup>
502
502
  </div>
503
503
  <div className="space-y-2">
504
504
  <Label>{t('catalog.priceKinds.form.currencyLabel', 'Currency (optional)')}</Label>