@open-mercato/core 0.5.1-develop.2949.009dcdd2d5 → 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 (229) 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/api/users/route.js +63 -23
  10. package/dist/modules/auth/api/users/route.js.map +2 -2
  11. package/dist/modules/auth/backend/users/create/page.js +26 -26
  12. package/dist/modules/auth/backend/users/create/page.js.map +2 -2
  13. package/dist/modules/business_rules/components/ActionRow.js +36 -25
  14. package/dist/modules/business_rules/components/ActionRow.js.map +2 -2
  15. package/dist/modules/business_rules/components/ConditionGroup.js +14 -5
  16. package/dist/modules/business_rules/components/ConditionGroup.js.map +2 -2
  17. package/dist/modules/business_rules/components/ConditionRow.js +19 -10
  18. package/dist/modules/business_rules/components/ConditionRow.js.map +2 -2
  19. package/dist/modules/business_rules/components/RuleSetMembers.js +16 -10
  20. package/dist/modules/business_rules/components/RuleSetMembers.js.map +2 -2
  21. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +30 -34
  22. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  23. package/dist/modules/catalog/backend/catalog/products/create/page.js +220 -223
  24. package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
  25. package/dist/modules/catalog/components/PriceKindSettings.js +20 -19
  26. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  27. package/dist/modules/catalog/components/products/ProductUomSection.js +42 -37
  28. package/dist/modules/catalog/components/products/ProductUomSection.js.map +2 -2
  29. package/dist/modules/catalog/components/products/VariantBuilder.js +22 -18
  30. package/dist/modules/catalog/components/products/VariantBuilder.js.map +2 -2
  31. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +18 -26
  32. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
  33. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +4 -6
  34. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  35. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +5 -4
  36. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +2 -2
  37. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js +19 -7
  38. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js.map +2 -2
  39. package/dist/modules/customers/backend/customers/deals/pipeline/page.js +24 -21
  40. package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +2 -2
  41. package/dist/modules/customers/components/AddressEditor.js +24 -7
  42. package/dist/modules/customers/components/AddressEditor.js.map +2 -2
  43. package/dist/modules/customers/components/AddressFormatSettings.js +35 -25
  44. package/dist/modules/customers/components/AddressFormatSettings.js.map +2 -2
  45. package/dist/modules/customers/components/detail/ActivityForm.js +20 -12
  46. package/dist/modules/customers/components/detail/ActivityForm.js.map +2 -2
  47. package/dist/modules/customers/components/detail/AnnualRevenueField.js +2 -2
  48. package/dist/modules/customers/components/detail/AnnualRevenueField.js.map +2 -2
  49. package/dist/modules/customers/components/detail/DealForm.js +19 -14
  50. package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
  51. package/dist/modules/customers/components/formConfig.js +16 -12
  52. package/dist/modules/customers/components/formConfig.js.map +2 -2
  53. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js +3 -2
  54. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js.map +2 -2
  55. package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js +18 -10
  56. package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js.map +2 -2
  57. package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js +3 -2
  58. package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js.map +2 -2
  59. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js +3 -2
  60. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js.map +2 -2
  61. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +27 -28
  62. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +2 -2
  63. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js +14 -6
  64. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js.map +2 -2
  65. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js +14 -6
  66. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js.map +2 -2
  67. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js +3 -2
  68. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js.map +2 -2
  69. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js +3 -2
  70. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js.map +2 -2
  71. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js +17 -8
  72. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js.map +2 -2
  73. package/dist/modules/data_sync/backend/data-sync/page.js +40 -23
  74. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  75. package/dist/modules/data_sync/components/IntegrationScheduleTab.js +15 -6
  76. package/dist/modules/data_sync/components/IntegrationScheduleTab.js.map +2 -2
  77. package/dist/modules/dictionaries/components/AppearanceSelector.js +4 -4
  78. package/dist/modules/dictionaries/components/AppearanceSelector.js.map +2 -2
  79. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +4 -5
  80. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
  81. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +22 -14
  82. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +2 -2
  83. package/dist/modules/dictionaries/fields/dictionary.js +18 -13
  84. package/dist/modules/dictionaries/fields/dictionary.js.map +2 -2
  85. package/dist/modules/entities/components/EncryptionManager.js +23 -19
  86. package/dist/modules/entities/components/EncryptionManager.js.map +2 -2
  87. package/dist/modules/feature_toggles/components/formConfig.js +17 -9
  88. package/dist/modules/feature_toggles/components/formConfig.js.map +2 -2
  89. package/dist/modules/feature_toggles/components/overrideFormConfig.js +17 -9
  90. package/dist/modules/feature_toggles/components/overrideFormConfig.js.map +2 -2
  91. package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js +15 -8
  92. package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js.map +2 -2
  93. package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js +37 -22
  94. package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js.map +2 -2
  95. package/dist/modules/integrations/backend/integrations/[id]/page.js +22 -17
  96. package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
  97. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +12 -6
  98. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
  99. package/dist/modules/planner/components/AvailabilityRulesEditor.js +19 -12
  100. package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
  101. package/dist/modules/resources/components/ResourceCrudForm.js +15 -10
  102. package/dist/modules/resources/components/ResourceCrudForm.js.map +3 -3
  103. package/dist/modules/sales/backend/sales/documents/[id]/page.js +15 -18
  104. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  105. package/dist/modules/sales/components/ProviderFieldInput.js +23 -20
  106. package/dist/modules/sales/components/ProviderFieldInput.js.map +2 -2
  107. package/dist/modules/sales/components/ShippingMethodsSettings.js +25 -17
  108. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +3 -3
  109. package/dist/modules/sales/components/channels/ChannelOfferForm.js +35 -42
  110. package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +2 -2
  111. package/dist/modules/sales/components/documents/AddressesSection.js +87 -90
  112. package/dist/modules/sales/components/documents/AddressesSection.js.map +2 -2
  113. package/dist/modules/sales/components/documents/AdjustmentDialog.js +17 -6
  114. package/dist/modules/sales/components/documents/AdjustmentDialog.js.map +3 -3
  115. package/dist/modules/sales/components/documents/LineItemDialog.js +42 -25
  116. package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
  117. package/dist/modules/sales/components/documents/SalesDocumentForm.js +96 -87
  118. package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
  119. package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js +20 -11
  120. package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js.map +2 -2
  121. package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js +20 -11
  122. package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js.map +2 -2
  123. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js +36 -22
  124. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js.map +2 -2
  125. package/dist/modules/staff/components/TeamMemberForm.js +14 -9
  126. package/dist/modules/staff/components/TeamMemberForm.js.map +3 -3
  127. package/dist/modules/workflows/backend/tasks/[id]/page.js +42 -21
  128. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
  129. package/dist/modules/workflows/components/ActivitiesEditor.js +14 -6
  130. package/dist/modules/workflows/components/ActivitiesEditor.js.map +3 -3
  131. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +25 -17
  132. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +3 -3
  133. package/dist/modules/workflows/components/EdgeEditDialog.js +48 -45
  134. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  135. package/dist/modules/workflows/components/NodeEditDialog.js +90 -90
  136. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  137. package/dist/modules/workflows/components/StepsEditor.js +14 -6
  138. package/dist/modules/workflows/components/StepsEditor.js.map +3 -3
  139. package/dist/modules/workflows/components/TransitionsEditor.js +31 -26
  140. package/dist/modules/workflows/components/TransitionsEditor.js.map +3 -3
  141. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +19 -11
  142. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +3 -3
  143. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +12 -14
  144. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
  145. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +24 -16
  146. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +3 -3
  147. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +12 -13
  148. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
  149. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +12 -8
  150. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  151. package/dist/modules/workflows/frontend/checkout-demo/page.js +43 -46
  152. package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
  153. package/package.json +3 -3
  154. package/src/helpers/integration/salesUi.ts +40 -30
  155. package/src/modules/api_docs/frontend/docs/api/Explorer.tsx +25 -19
  156. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +21 -11
  157. package/src/modules/attachments/fields/attachment.tsx +4 -6
  158. package/src/modules/auth/api/users/route.ts +75 -25
  159. package/src/modules/auth/backend/users/create/page.tsx +16 -20
  160. package/src/modules/business_rules/components/ActionRow.tsx +51 -32
  161. package/src/modules/business_rules/components/ConditionGroup.tsx +20 -9
  162. package/src/modules/business_rules/components/ConditionRow.tsx +24 -15
  163. package/src/modules/business_rules/components/RuleSetMembers.tsx +23 -13
  164. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +47 -53
  165. package/src/modules/catalog/backend/catalog/products/create/page.tsx +84 -87
  166. package/src/modules/catalog/components/PriceKindSettings.tsx +9 -9
  167. package/src/modules/catalog/components/products/ProductUomSection.tsx +85 -83
  168. package/src/modules/catalog/components/products/VariantBuilder.tsx +49 -33
  169. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +12 -27
  170. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +4 -6
  171. package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +5 -4
  172. package/src/modules/customers/backend/config/customers/pipeline-stages/page.tsx +28 -15
  173. package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +37 -26
  174. package/src/modules/customers/components/AddressEditor.tsx +30 -16
  175. package/src/modules/customers/components/AddressFormatSettings.tsx +25 -19
  176. package/src/modules/customers/components/detail/ActivityForm.tsx +35 -23
  177. package/src/modules/customers/components/detail/AnnualRevenueField.tsx +2 -2
  178. package/src/modules/customers/components/detail/DealForm.tsx +33 -20
  179. package/src/modules/customers/components/formConfig.tsx +25 -17
  180. package/src/modules/customers/widgets/dashboard/customer-todos/widget.client.tsx +3 -2
  181. package/src/modules/customers/widgets/dashboard/new-customers/widget.client.tsx +21 -11
  182. package/src/modules/customers/widgets/dashboard/new-deals/widget.client.tsx +3 -2
  183. package/src/modules/customers/widgets/dashboard/next-interactions/widget.client.tsx +3 -2
  184. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +17 -22
  185. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.tsx +17 -7
  186. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.tsx +20 -10
  187. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.tsx +3 -2
  188. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.client.tsx +3 -2
  189. package/src/modules/dashboards/widgets/dashboard/top-products/widget.client.tsx +20 -9
  190. package/src/modules/data_sync/backend/data-sync/page.tsx +64 -38
  191. package/src/modules/data_sync/components/IntegrationScheduleTab.tsx +18 -7
  192. package/src/modules/dictionaries/components/AppearanceSelector.tsx +4 -4
  193. package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +3 -4
  194. package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +27 -21
  195. package/src/modules/dictionaries/fields/dictionary.tsx +36 -23
  196. package/src/modules/entities/components/EncryptionManager.tsx +49 -33
  197. package/src/modules/feature_toggles/components/formConfig.tsx +20 -10
  198. package/src/modules/feature_toggles/components/overrideFormConfig.tsx +20 -10
  199. package/src/modules/inbox_ops/backend/inbox-ops/settings/page.tsx +19 -10
  200. package/src/modules/inbox_ops/components/proposals/EditActionDialog.tsx +49 -26
  201. package/src/modules/integrations/backend/integrations/[id]/page.tsx +20 -11
  202. package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +19 -9
  203. package/src/modules/planner/components/AvailabilityRulesEditor.tsx +34 -21
  204. package/src/modules/resources/components/ResourceCrudForm.tsx +24 -15
  205. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +12 -15
  206. package/src/modules/sales/components/ProviderFieldInput.tsx +26 -17
  207. package/src/modules/sales/components/ShippingMethodsSettings.tsx +28 -20
  208. package/src/modules/sales/components/channels/ChannelOfferForm.tsx +51 -46
  209. package/src/modules/sales/components/documents/AddressesSection.tsx +78 -76
  210. package/src/modules/sales/components/documents/AdjustmentDialog.tsx +27 -15
  211. package/src/modules/sales/components/documents/LineItemDialog.tsx +69 -51
  212. package/src/modules/sales/components/documents/SalesDocumentForm.tsx +98 -87
  213. package/src/modules/sales/widgets/dashboard/new-orders/widget.client.tsx +23 -12
  214. package/src/modules/sales/widgets/dashboard/new-quotes/widget.client.tsx +23 -12
  215. package/src/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.tsx +35 -19
  216. package/src/modules/staff/components/TeamMemberForm.tsx +23 -14
  217. package/src/modules/workflows/backend/tasks/[id]/page.tsx +51 -23
  218. package/src/modules/workflows/components/ActivitiesEditor.tsx +20 -10
  219. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +28 -18
  220. package/src/modules/workflows/components/EdgeEditDialog.tsx +51 -40
  221. package/src/modules/workflows/components/NodeEditDialog.tsx +81 -77
  222. package/src/modules/workflows/components/StepsEditor.tsx +20 -10
  223. package/src/modules/workflows/components/TransitionsEditor.tsx +61 -44
  224. package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +22 -12
  225. package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +9 -13
  226. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +27 -17
  227. package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +9 -12
  228. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +19 -11
  229. package/src/modules/workflows/frontend/checkout-demo/page.tsx +71 -60
@@ -1,6 +1,14 @@
1
1
  "use client"
2
2
  import { CrudFormGroup, CrudCustomFieldRenderProps, CrudField } from "@open-mercato/ui/backend/CrudForm";
3
3
  import { JsonBuilder } from "@open-mercato/ui/backend/JsonBuilder";
4
+ import { Input } from "@open-mercato/ui/primitives/input";
5
+ import {
6
+ Select,
7
+ SelectContent,
8
+ SelectItem,
9
+ SelectTrigger,
10
+ SelectValue,
11
+ } from "@open-mercato/ui/primitives/select";
4
12
  import { useT } from '@open-mercato/shared/lib/i18n/context'
5
13
 
6
14
  export function renderOverrideValueComponent(props: CrudCustomFieldRenderProps) {
@@ -21,15 +29,19 @@ export function renderOverrideValueComponent(props: CrudCustomFieldRenderProps)
21
29
  return (
22
30
  <div>
23
31
  <label className="block text-sm font-medium mb-2">{t('feature_toggles.override.fields.value.boolean.label', 'Override Value (Boolean)')}</label>
24
- <select
32
+ <Select
25
33
  value={props.value as string || 'false'}
26
- onChange={(e) => props.setValue(e.target.value === 'true')}
27
- className="w-full h-9 rounded border px-2 text-sm"
34
+ onValueChange={(value) => props.setValue(value === 'true')}
28
35
  disabled={props.disabled}
29
36
  >
30
- <option value="true">{t('feature_toggles.values.true', 'True')}</option>
31
- <option value="false">{t('feature_toggles.values.false', 'False')}</option>
32
- </select>
37
+ <SelectTrigger>
38
+ <SelectValue />
39
+ </SelectTrigger>
40
+ <SelectContent>
41
+ <SelectItem value="true">{t('feature_toggles.values.true', 'True')}</SelectItem>
42
+ <SelectItem value="false">{t('feature_toggles.values.false', 'False')}</SelectItem>
43
+ </SelectContent>
44
+ </Select>
33
45
  </div>
34
46
  );
35
47
 
@@ -37,12 +49,11 @@ export function renderOverrideValueComponent(props: CrudCustomFieldRenderProps)
37
49
  return (
38
50
  <div>
39
51
  <label className="block text-sm font-medium mb-2">{t('feature_toggles.override.fields.value.string.label', 'Override Value (String)')}</label>
40
- <input
52
+ <Input
41
53
  type="text"
42
54
  value={props.value as string || ''}
43
55
  onChange={(e) => props.setValue(e.target.value)}
44
56
  placeholder={t('feature_toggles.override.fields.value.string.placeholder', 'Enter override string value')}
45
- className="w-full h-9 rounded border px-2 text-sm"
46
57
  disabled={props.disabled}
47
58
  autoFocus={props.autoFocus}
48
59
  />
@@ -53,11 +64,10 @@ export function renderOverrideValueComponent(props: CrudCustomFieldRenderProps)
53
64
  return (
54
65
  <div>
55
66
  <label className="block text-sm font-medium mb-2">{t('feature_toggles.override.fields.value.number.label', 'Override Value (Number)')}</label>
56
- <input
67
+ <Input
57
68
  type="number"
58
69
  value={props.value as number || 0}
59
70
  onChange={(e) => props.setValue(Number(e.target.value) || 0)}
60
- className="w-full h-9 rounded border px-2 text-sm"
61
71
  disabled={props.disabled}
62
72
  autoFocus={props.autoFocus}
63
73
  />
@@ -4,6 +4,13 @@ import * as React from 'react'
4
4
  import Link from 'next/link'
5
5
  import { Page, PageBody } from '@open-mercato/ui/backend/Page'
6
6
  import { Button } from '@open-mercato/ui/primitives/button'
7
+ import {
8
+ Select,
9
+ SelectContent,
10
+ SelectItem,
11
+ SelectTrigger,
12
+ SelectValue,
13
+ } from '@open-mercato/ui/primitives/select'
7
14
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
8
15
  import { flash } from '@open-mercato/ui/backend/FlashMessages'
9
16
  import { LoadingMessage, ErrorMessage } from '@open-mercato/ui/backend/detail'
@@ -61,8 +68,7 @@ export default function InboxSettingsPage() {
61
68
  }
62
69
  }, [settings])
63
70
 
64
- const handleLanguageChange = React.useCallback(async (event: React.ChangeEvent<HTMLSelectElement>) => {
65
- const workingLanguage = event.target.value
71
+ const handleLanguageChange = React.useCallback(async (workingLanguage: string) => {
66
72
  setIsSavingLanguage(true)
67
73
  const result = await runMutation({
68
74
  operation: () => apiCall<{ ok: boolean; settings: { workingLanguage: string } }>('/api/inbox_ops/settings', {
@@ -133,17 +139,20 @@ export default function InboxSettingsPage() {
133
139
  <p className="text-xs text-muted-foreground mt-1">
134
140
  {t('inbox_ops.settings.working_language_hint', 'AI summaries and action descriptions will be generated in this language')}
135
141
  </p>
136
- <select
137
- id="working-language"
138
- className="mt-2 block w-full sm:w-[200px] h-11 md:h-9 rounded-md border border-input bg-background px-3 text-sm"
142
+ <Select
139
143
  value={settings.workingLanguage || 'en'}
140
- onChange={handleLanguageChange}
144
+ onValueChange={(value) => handleLanguageChange(value)}
141
145
  disabled={isSavingLanguage}
142
146
  >
143
- {languageOptions.map((opt) => (
144
- <option key={opt.value} value={opt.value}>{opt.label}</option>
145
- ))}
146
- </select>
147
+ <SelectTrigger id="working-language" className="mt-2 sm:w-[200px]">
148
+ <SelectValue />
149
+ </SelectTrigger>
150
+ <SelectContent>
151
+ {languageOptions.map((opt) => (
152
+ <SelectItem key={opt.value} value={opt.value}>{opt.label}</SelectItem>
153
+ ))}
154
+ </SelectContent>
155
+ </Select>
147
156
  </div>
148
157
  </div>
149
158
  ) : (
@@ -2,6 +2,13 @@
2
2
 
3
3
  import * as React from 'react'
4
4
  import { Button } from '@open-mercato/ui/primitives/button'
5
+ import {
6
+ Select,
7
+ SelectContent,
8
+ SelectItem,
9
+ SelectTrigger,
10
+ SelectValue,
11
+ } from '@open-mercato/ui/primitives/select'
5
12
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
6
13
  import { useGuardedMutation } from '@open-mercato/ui/backend/injection/useGuardedMutation'
7
14
  import { flash } from '@open-mercato/ui/backend/FlashMessages'
@@ -130,14 +137,18 @@ function ContactPayloadEditor({
130
137
  )}
131
138
  <div>
132
139
  <Label>{t('inbox_ops.edit_dialog.type', 'Type')}</Label>
133
- <select
134
- className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm"
140
+ <Select
135
141
  value={type}
136
- onChange={(event) => updateField('type', event.target.value)}
142
+ onValueChange={(value) => updateField('type', value)}
137
143
  >
138
- <option value="person">{t('inbox_ops.contact_type.person', 'Person')}</option>
139
- <option value="company">{t('inbox_ops.contact_type.company', 'Company')}</option>
140
- </select>
144
+ <SelectTrigger>
145
+ <SelectValue />
146
+ </SelectTrigger>
147
+ <SelectContent>
148
+ <SelectItem value="person">{t('inbox_ops.contact_type.person', 'Person')}</SelectItem>
149
+ <SelectItem value="company">{t('inbox_ops.contact_type.company', 'Company')}</SelectItem>
150
+ </SelectContent>
151
+ </Select>
141
152
  </div>
142
153
  </div>
143
154
  <div className="grid grid-cols-2 gap-3">
@@ -187,14 +198,18 @@ function LinkContactPayloadEditor({
187
198
  <div className="grid grid-cols-2 gap-3">
188
199
  <div>
189
200
  <Label>{t('inbox_ops.edit_dialog.contact_type', 'Contact Type')}</Label>
190
- <select
191
- className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm"
201
+ <Select
192
202
  value={(payload.contactType as string) || 'person'}
193
- onChange={(event) => updateField('contactType', event.target.value)}
203
+ onValueChange={(value) => updateField('contactType', value)}
194
204
  >
195
- <option value="person">{t('inbox_ops.contact_type.person', 'Person')}</option>
196
- <option value="company">{t('inbox_ops.contact_type.company', 'Company')}</option>
197
- </select>
205
+ <SelectTrigger>
206
+ <SelectValue />
207
+ </SelectTrigger>
208
+ <SelectContent>
209
+ <SelectItem value="person">{t('inbox_ops.contact_type.person', 'Person')}</SelectItem>
210
+ <SelectItem value="company">{t('inbox_ops.contact_type.company', 'Company')}</SelectItem>
211
+ </SelectContent>
212
+ </Select>
198
213
  </div>
199
214
  <div>
200
215
  <Label>{t('inbox_ops.edit_dialog.contact_name', 'Contact Name')}</Label>
@@ -366,28 +381,36 @@ function LogActivityPayloadEditor({
366
381
  </div>
367
382
  <div>
368
383
  <Label>{t('inbox_ops.edit_dialog.contact_type', 'Contact Type')}</Label>
369
- <select
370
- className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm"
384
+ <Select
371
385
  value={(payload.contactType as string) || 'person'}
372
- onChange={(event) => updateField('contactType', event.target.value)}
386
+ onValueChange={(value) => updateField('contactType', value)}
373
387
  >
374
- <option value="person">{t('inbox_ops.contact_type.person', 'Person')}</option>
375
- <option value="company">{t('inbox_ops.contact_type.company', 'Company')}</option>
376
- </select>
388
+ <SelectTrigger>
389
+ <SelectValue />
390
+ </SelectTrigger>
391
+ <SelectContent>
392
+ <SelectItem value="person">{t('inbox_ops.contact_type.person', 'Person')}</SelectItem>
393
+ <SelectItem value="company">{t('inbox_ops.contact_type.company', 'Company')}</SelectItem>
394
+ </SelectContent>
395
+ </Select>
377
396
  </div>
378
397
  </div>
379
398
  <div>
380
399
  <Label>{t('inbox_ops.edit_dialog.activity_type', 'Activity Type')}</Label>
381
- <select
382
- className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm"
400
+ <Select
383
401
  value={(payload.activityType as string) || 'email'}
384
- onChange={(event) => updateField('activityType', event.target.value)}
402
+ onValueChange={(value) => updateField('activityType', value)}
385
403
  >
386
- <option value="email">{t('inbox_ops.activity_type.email', 'Email')}</option>
387
- <option value="call">{t('inbox_ops.activity_type.call', 'Call')}</option>
388
- <option value="meeting">{t('inbox_ops.activity_type.meeting', 'Meeting')}</option>
389
- <option value="note">{t('inbox_ops.activity_type.note', 'Note')}</option>
390
- </select>
404
+ <SelectTrigger>
405
+ <SelectValue />
406
+ </SelectTrigger>
407
+ <SelectContent>
408
+ <SelectItem value="email">{t('inbox_ops.activity_type.email', 'Email')}</SelectItem>
409
+ <SelectItem value="call">{t('inbox_ops.activity_type.call', 'Call')}</SelectItem>
410
+ <SelectItem value="meeting">{t('inbox_ops.activity_type.meeting', 'Meeting')}</SelectItem>
411
+ <SelectItem value="note">{t('inbox_ops.activity_type.note', 'Note')}</SelectItem>
412
+ </SelectContent>
413
+ </Select>
391
414
  </div>
392
415
  <div>
393
416
  <Label>{t('inbox_ops.edit_dialog.subject', 'Subject')}</Label>
@@ -11,6 +11,13 @@ import { FormHeader } from '@open-mercato/ui/backend/forms'
11
11
  import { Card, CardHeader, CardTitle, CardContent } from '@open-mercato/ui/primitives/card'
12
12
  import { Badge } from '@open-mercato/ui/primitives/badge'
13
13
  import { Button } from '@open-mercato/ui/primitives/button'
14
+ import {
15
+ Select,
16
+ SelectContent,
17
+ SelectItem,
18
+ SelectTrigger,
19
+ SelectValue,
20
+ } from '@open-mercato/ui/primitives/select'
14
21
  import { Switch } from '@open-mercato/ui/primitives/switch'
15
22
  import { Input } from '@open-mercato/ui/primitives/input'
16
23
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
@@ -1185,18 +1192,20 @@ export default function IntegrationDetailPage({ params }: IntegrationDetailPageP
1185
1192
  {showLogsTab ? (
1186
1193
  <TabsContent value="logs" className="mt-0 space-y-4">
1187
1194
  <div className="flex items-center gap-3">
1188
- <div className="relative inline-flex">
1189
- <select
1190
- className="h-11 min-w-40 appearance-none rounded-xl border border-border bg-card pl-4 pr-11 text-sm font-medium text-foreground shadow-sm transition-colors focus-visible:border-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30"
1191
- value={logLevel}
1192
- onChange={(event) => setLogLevel(event.target.value)}
1195
+ <div className="inline-flex">
1196
+ <Select
1197
+ value={logLevel || undefined}
1198
+ onValueChange={(value) => setLogLevel(value ?? '')}
1193
1199
  >
1194
- <option value="">{t('integrations.detail.logs.level.all')}</option>
1195
- <option value="info">{t('integrations.detail.logs.level.info')}</option>
1196
- <option value="warn">{t('integrations.detail.logs.level.warn')}</option>
1197
- <option value="error">{t('integrations.detail.logs.level.error')}</option>
1198
- </select>
1199
- <ChevronDown className="pointer-events-none absolute right-4 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
1200
+ <SelectTrigger size="lg" className="min-w-40">
1201
+ <SelectValue placeholder={t('integrations.detail.logs.level.all')} />
1202
+ </SelectTrigger>
1203
+ <SelectContent>
1204
+ <SelectItem value="info">{t('integrations.detail.logs.level.info')}</SelectItem>
1205
+ <SelectItem value="warn">{t('integrations.detail.logs.level.warn')}</SelectItem>
1206
+ <SelectItem value="error">{t('integrations.detail.logs.level.error')}</SelectItem>
1207
+ </SelectContent>
1208
+ </Select>
1200
1209
  </div>
1201
1210
  </div>
1202
1211
  {isLoadingLogs ? (
@@ -8,6 +8,13 @@ import { Badge } from '@open-mercato/ui/primitives/badge'
8
8
  import { Button } from '@open-mercato/ui/primitives/button'
9
9
  import { Switch } from '@open-mercato/ui/primitives/switch'
10
10
  import { Input } from '@open-mercato/ui/primitives/input'
11
+ import {
12
+ Select,
13
+ SelectContent,
14
+ SelectItem,
15
+ SelectTrigger,
16
+ SelectValue,
17
+ } from '@open-mercato/ui/primitives/select'
11
18
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
12
19
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
13
20
  import { flash } from '@open-mercato/ui/backend/FlashMessages'
@@ -201,16 +208,19 @@ export default function BundleConfigPage({ params }: BundleConfigPageProps) {
201
208
  {field.label}{field.required && <span className="text-red-500 ml-0.5">*</span>}
202
209
  </label>
203
210
  {field.type === 'select' && field.options ? (
204
- <select
205
- className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm"
206
- value={(credValues[field.key] as string) ?? ''}
207
- onChange={(e) => setCredValues((prev) => ({ ...prev, [field.key]: e.target.value }))}
211
+ <Select
212
+ value={(credValues[field.key] as string) || undefined}
213
+ onValueChange={(value) => setCredValues((prev) => ({ ...prev, [field.key]: value ?? '' }))}
208
214
  >
209
- <option value="">—</option>
210
- {field.options.map((opt) => (
211
- <option key={opt.value} value={opt.value}>{opt.label}</option>
212
- ))}
213
- </select>
215
+ <SelectTrigger>
216
+ <SelectValue placeholder="—" />
217
+ </SelectTrigger>
218
+ <SelectContent>
219
+ {field.options.map((opt) => (
220
+ <SelectItem key={opt.value} value={opt.value}>{opt.label}</SelectItem>
221
+ ))}
222
+ </SelectContent>
223
+ </Select>
214
224
  ) : field.type === 'boolean' ? (
215
225
  <Switch
216
226
  checked={Boolean(credValues[field.key])}
@@ -6,6 +6,13 @@ import { ScheduleView, type ScheduleItem, type ScheduleRange, type ScheduleSlot,
6
6
  import { Button } from '@open-mercato/ui/primitives/button'
7
7
  import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@open-mercato/ui/primitives/dialog'
8
8
  import { Input } from '@open-mercato/ui/primitives/input'
9
+ import {
10
+ Select,
11
+ SelectContent,
12
+ SelectItem,
13
+ SelectTrigger,
14
+ SelectValue,
15
+ } from '@open-mercato/ui/primitives/select'
9
16
  import { LoadingMessage, ErrorMessage } from '@open-mercato/ui/backend/detail'
10
17
  import { apiCall, apiCallOrThrow } from '@open-mercato/ui/backend/utils/apiCall'
11
18
  import { createCrud, deleteCrud, updateCrud } from '@open-mercato/ui/backend/utils/crud'
@@ -1308,22 +1315,24 @@ export function AvailabilityRulesEditor({
1308
1315
  {ruleSetsLoading ? (
1309
1316
  <span className="text-xs text-muted-foreground">{listLabels.ruleSetLoading}</span>
1310
1317
  ) : (
1311
- <select
1312
- className="h-9 rounded border bg-background px-2 text-sm"
1313
- value={rulesetId ?? ''}
1314
- onChange={(event) => {
1315
- const value = event.target.value
1318
+ <Select
1319
+ value={rulesetId || undefined}
1320
+ onValueChange={(value) => {
1316
1321
  void handleRuleSetChange(value ? value : null)
1317
1322
  }}
1318
1323
  disabled={isReadOnly}
1319
1324
  >
1320
- <option value="">{listLabels.ruleSetPlaceholder}</option>
1321
- {ruleSets.map((ruleSet) => (
1322
- <option key={ruleSet.id} value={ruleSet.id}>
1323
- {ruleSet.name}
1324
- </option>
1325
- ))}
1326
- </select>
1325
+ <SelectTrigger size="sm" className="w-auto min-w-[10rem]">
1326
+ <SelectValue placeholder={listLabels.ruleSetPlaceholder} />
1327
+ </SelectTrigger>
1328
+ <SelectContent>
1329
+ {ruleSets.map((ruleSet) => (
1330
+ <SelectItem key={ruleSet.id} value={ruleSet.id}>
1331
+ {ruleSet.name}
1332
+ </SelectItem>
1333
+ ))}
1334
+ </SelectContent>
1335
+ </Select>
1327
1336
  )}
1328
1337
  <Button type="button" variant="outline" size="sm" onClick={() => setCreateRuleSetOpen(true)} disabled={isReadOnly}>
1329
1338
  <Plus className="size-4 mr-2" aria-hidden />
@@ -1717,17 +1726,21 @@ export function AvailabilityRulesEditor({
1717
1726
  ) : (
1718
1727
  <div className="space-y-2">
1719
1728
  <label className="text-xs text-muted-foreground">{listLabels.applyScopeWeekday}</label>
1720
- <select
1721
- className="h-9 rounded border bg-background pl-2 pr-8 text-sm"
1729
+ <Select
1722
1730
  value={String(editorWeekday)}
1723
- onChange={(event) => setEditorWeekday(Number(event.target.value))}
1731
+ onValueChange={(value) => setEditorWeekday(Number(value))}
1724
1732
  >
1725
- {DAY_LABELS.map((day, index) => (
1726
- <option key={day.code} value={index}>
1727
- {t(day.nameKey, day.fallback)}
1728
- </option>
1729
- ))}
1730
- </select>
1733
+ <SelectTrigger size="sm" className="w-auto min-w-[8rem]">
1734
+ <SelectValue />
1735
+ </SelectTrigger>
1736
+ <SelectContent>
1737
+ {DAY_LABELS.map((day, index) => (
1738
+ <SelectItem key={day.code} value={String(index)}>
1739
+ {t(day.nameKey, day.fallback)}
1740
+ </SelectItem>
1741
+ ))}
1742
+ </SelectContent>
1743
+ </Select>
1731
1744
  </div>
1732
1745
  )}
1733
1746
 
@@ -7,6 +7,13 @@ import { DictionarySelectControl } from '@open-mercato/core/modules/dictionaries
7
7
  import { AppearanceSelector } from '@open-mercato/core/modules/dictionaries/components/AppearanceSelector'
8
8
  import { AttachmentsSection, TagsSection, type TagOption, type TagsSectionLabels } from '@open-mercato/ui/backend/detail'
9
9
  import { Button } from '@open-mercato/ui/primitives/button'
10
+ import {
11
+ Select,
12
+ SelectContent,
13
+ SelectItem,
14
+ SelectTrigger,
15
+ SelectValue,
16
+ } from '@open-mercato/ui/primitives/select'
10
17
  import { E } from '#generated/entities.ids.generated'
11
18
  import { useT } from '@open-mercato/shared/lib/i18n/context'
12
19
  import { useOrganizationScopeVersion } from '@open-mercato/shared/lib/frontend/useOrganizationScope'
@@ -132,26 +139,28 @@ export function useResourcesResourceFormConfig(options: {
132
139
  type: 'custom',
133
140
  component: ({ value, setValue, setFormValue, disabled }) => (
134
141
  <div className="flex items-center gap-2">
135
- <select
136
- className="h-9 w-full rounded border px-2 text-sm"
137
- value={typeof value === 'string' ? value : ''}
138
- onChange={(event) => {
139
- const next = event.target.value || ''
140
- setValue(next)
142
+ <Select
143
+ value={typeof value === 'string' && value ? value : undefined}
144
+ onValueChange={(next) => {
145
+ const value = next || ''
146
+ setValue(value)
141
147
  if (setFormValue) {
142
- setFormValue('customFieldsetCode', resolveFieldsetCode(next || null))
148
+ setFormValue('customFieldsetCode', resolveFieldsetCode(value || null))
143
149
  }
144
150
  }}
145
- data-crud-focus-target=""
146
151
  disabled={disabled}
147
152
  >
148
- <option value="">{t('ui.forms.select.emptyOption', '—')}</option>
149
- {resourceTypes.map((type) => (
150
- <option key={type.id} value={type.id}>
151
- {type.name}
152
- </option>
153
- ))}
154
- </select>
153
+ <SelectTrigger data-crud-focus-target="">
154
+ <SelectValue placeholder={t('ui.forms.select.emptyOption', '—')} />
155
+ </SelectTrigger>
156
+ <SelectContent>
157
+ {resourceTypes.map((type) => (
158
+ <SelectItem key={type.id} value={type.id}>
159
+ {type.name}
160
+ </SelectItem>
161
+ ))}
162
+ </SelectContent>
163
+ </Select>
155
164
  <Button
156
165
  asChild
157
166
  type="button"
@@ -1139,21 +1139,18 @@ function ContactEmailInlineEditor({
1139
1139
  }
1140
1140
  }}
1141
1141
  >
1142
- <div className="relative">
1143
- <Mail className="pointer-events-none absolute left-2 top-2.5 h-4 w-4 text-muted-foreground" />
1144
- <input
1145
- className="w-full rounded-md border pl-8 pr-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1146
- value={draft}
1147
- onChange={(event) => {
1148
- if (error) setError(null)
1149
- setDraft(event.target.value)
1150
- }}
1151
- placeholder={placeholder}
1152
- type="email"
1153
- autoFocus
1154
- spellCheck={false}
1155
- />
1156
- </div>
1142
+ <Input
1143
+ leftIcon={<Mail />}
1144
+ value={draft}
1145
+ onChange={(event) => {
1146
+ if (error) setError(null)
1147
+ setDraft(event.target.value)
1148
+ }}
1149
+ placeholder={placeholder}
1150
+ type="email"
1151
+ autoFocus
1152
+ spellCheck={false}
1153
+ />
1157
1154
  {error ? <p className="text-xs text-destructive">{error}</p> : null}
1158
1155
  {!error && duplicate ? (
1159
1156
  <p className="text-xs text-muted-foreground">
@@ -1,6 +1,12 @@
1
1
  import { Input } from '@open-mercato/ui/primitives/input'
2
- import { Label } from '@open-mercato/ui/primitives/label'
3
- import { Switch } from '@open-mercato/ui/primitives/switch'
2
+ import {
3
+ Select,
4
+ SelectContent,
5
+ SelectItem,
6
+ SelectTrigger,
7
+ SelectValue,
8
+ } from '@open-mercato/ui/primitives/select'
9
+ import { SwitchField } from '@open-mercato/ui/primitives/switch-field'
4
10
  import { Textarea } from '@open-mercato/ui/primitives/textarea'
5
11
  import { isRecord } from '@open-mercato/shared/lib/utils'
6
12
  import type { ProviderSettingField } from '../lib/providers'
@@ -34,30 +40,33 @@ export function renderProviderFieldInput(opts: {
34
40
  )
35
41
  case 'boolean':
36
42
  return (
37
- <div className="flex items-center gap-2 py-1">
38
- <Switch
43
+ <div className="py-1">
44
+ <SwitchField
39
45
  id={field.key}
46
+ label={field.placeholder ?? ''}
47
+ flip
40
48
  checked={Boolean(value)}
41
49
  onCheckedChange={(checked) => onChange(checked)}
42
50
  />
43
- <Label htmlFor={field.key}>{field.placeholder ?? ''}</Label>
44
51
  </div>
45
52
  )
46
53
  case 'select':
47
54
  return (
48
- <select
49
- {...common}
50
- className="w-full rounded-md border border-input bg-background px-3 py-2 text-sm"
51
- value={typeof value === 'string' ? value : ''}
52
- onChange={(evt) => onChange(evt.target.value)}
55
+ <Select
56
+ value={typeof value === 'string' && value ? value : undefined}
57
+ onValueChange={(next) => onChange(next ?? '')}
53
58
  >
54
- <option value="">—</option>
55
- {(field.options ?? []).map((opt) => (
56
- <option key={opt.value} value={opt.value}>
57
- {opt.label}
58
- </option>
59
- ))}
60
- </select>
59
+ <SelectTrigger {...common}>
60
+ <SelectValue placeholder="—" />
61
+ </SelectTrigger>
62
+ <SelectContent>
63
+ {(field.options ?? []).map((opt) => (
64
+ <SelectItem key={opt.value} value={opt.value}>
65
+ {opt.label}
66
+ </SelectItem>
67
+ ))}
68
+ </SelectContent>
69
+ </Select>
61
70
  )
62
71
  case 'secret':
63
72
  return (