@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
@@ -4,6 +4,13 @@ import * as React from 'react'
4
4
  import Link from 'next/link'
5
5
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
6
6
  import { Page, PageBody } from '@open-mercato/ui/backend/Page'
7
+ import {
8
+ Select,
9
+ SelectContent,
10
+ SelectItem,
11
+ SelectTrigger,
12
+ SelectValue,
13
+ } from '@open-mercato/ui/primitives/select'
7
14
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
8
15
  import { ErrorNotice } from '@open-mercato/ui/primitives/ErrorNotice'
9
16
  import { apiCallOrThrow, readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'
@@ -399,9 +406,8 @@ export default function SalesPipelinePage(): React.ReactElement {
399
406
  event.stopPropagation()
400
407
  }, [])
401
408
 
402
- const handleSortChange = React.useCallback((event: React.ChangeEvent<HTMLSelectElement>) => {
403
- const value = event.target.value as SortOption
404
- if (sortOptions.includes(value)) setSortBy(value)
409
+ const handleSortChange = React.useCallback((value: string) => {
410
+ if (sortOptions.includes(value as SortOption)) setSortBy(value as SortOption)
405
411
  }, [])
406
412
 
407
413
  const handleDragStart = React.useCallback((dealId: string) => {
@@ -478,15 +484,19 @@ export default function SalesPipelinePage(): React.ReactElement {
478
484
  {pipelinesQuery.data && pipelinesQuery.data.length > 0 ? (
479
485
  <label className="flex items-center gap-2 text-sm font-medium text-muted-foreground">
480
486
  <span>{translate('customers.deals.pipeline.switch.label', 'Pipeline')}</span>
481
- <select
482
- className="h-9 rounded-md border border-border bg-background px-3 text-sm text-foreground shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40"
483
- value={selectedPipelineId ?? ''}
484
- onChange={(e) => setSelectedPipelineId(e.target.value || null)}
487
+ <Select
488
+ value={selectedPipelineId || undefined}
489
+ onValueChange={(value) => setSelectedPipelineId(value || null)}
485
490
  >
486
- {pipelinesQuery.data.map((p) => (
487
- <option key={p.id} value={p.id}>{p.name}</option>
488
- ))}
489
- </select>
491
+ <SelectTrigger className="w-auto min-w-[12rem]">
492
+ <SelectValue />
493
+ </SelectTrigger>
494
+ <SelectContent>
495
+ {pipelinesQuery.data.map((p) => (
496
+ <SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>
497
+ ))}
498
+ </SelectContent>
499
+ </Select>
490
500
  </label>
491
501
  ) : null}
492
502
  <Link
@@ -497,21 +507,22 @@ export default function SalesPipelinePage(): React.ReactElement {
497
507
  </Link>
498
508
  <label className="flex items-center gap-2 text-sm font-medium text-muted-foreground">
499
509
  <span>{translate('customers.deals.pipeline.sort.label', 'Sort by')}</span>
500
- <select
501
- className="h-9 rounded-md border border-border bg-background px-3 text-sm text-foreground shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40"
502
- value={sortBy}
503
- onChange={handleSortChange}
504
- >
505
- <option value="probability">
506
- {translate('customers.deals.pipeline.sort.probability', 'Probability (high to low)')}
507
- </option>
508
- <option value="createdAt">
509
- {translate('customers.deals.pipeline.sort.createdAt', 'Created (newest first)')}
510
- </option>
511
- <option value="expectedCloseAt">
512
- {translate('customers.deals.pipeline.sort.expectedCloseAt', 'Expected close (soonest first)')}
513
- </option>
514
- </select>
510
+ <Select value={sortBy} onValueChange={handleSortChange}>
511
+ <SelectTrigger className="w-auto min-w-[14rem]">
512
+ <SelectValue />
513
+ </SelectTrigger>
514
+ <SelectContent>
515
+ <SelectItem value="probability">
516
+ {translate('customers.deals.pipeline.sort.probability', 'Probability (high to low)')}
517
+ </SelectItem>
518
+ <SelectItem value="createdAt">
519
+ {translate('customers.deals.pipeline.sort.createdAt', 'Created (newest first)')}
520
+ </SelectItem>
521
+ <SelectItem value="expectedCloseAt">
522
+ {translate('customers.deals.pipeline.sort.expectedCloseAt', 'Expected close (soonest first)')}
523
+ </SelectItem>
524
+ </SelectContent>
525
+ </Select>
515
526
  </label>
516
527
  </div>
517
528
  </div>
@@ -6,6 +6,13 @@ import { usePathname, useSearchParams } from 'next/navigation'
6
6
  import { Plus, Settings } from 'lucide-react'
7
7
  import { Button } from '@open-mercato/ui/primitives/button'
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 {
10
17
  Dialog,
11
18
  DialogContent,
@@ -168,24 +175,31 @@ export function AddressEditor({
168
175
  aria-invalid={errors.name ? 'true' : undefined}
169
176
  />
170
177
  <div className="flex gap-2">
171
- <select
172
- className={inputClass('purpose')}
173
- value={current.purpose}
174
- onChange={(evt) => update('purpose', evt.target.value)}
178
+ <Select
179
+ value={current.purpose || undefined}
180
+ onValueChange={(next) => update('purpose', next ?? '')}
175
181
  disabled={disabled}
176
- aria-invalid={errors.purpose ? 'true' : undefined}
177
182
  >
178
- <option value="">
179
- {addressTypesLoading
180
- ? t('customers.people.detail.addresses.types.loading', 'Loading…')
181
- : t('customers.people.detail.addresses.types.placeholder', 'Address type')}
182
- </option>
183
- {addressTypes.map((entry) => (
184
- <option key={entry.value} value={entry.value}>
185
- {entry.label}
186
- </option>
187
- ))}
188
- </select>
183
+ <SelectTrigger
184
+ className={errors.purpose ? 'border-destructive' : undefined}
185
+ aria-invalid={errors.purpose ? 'true' : undefined}
186
+ >
187
+ <SelectValue
188
+ placeholder={
189
+ addressTypesLoading
190
+ ? t('customers.people.detail.addresses.types.loading', 'Loading…')
191
+ : t('customers.people.detail.addresses.types.placeholder', 'Address type')
192
+ }
193
+ />
194
+ </SelectTrigger>
195
+ <SelectContent>
196
+ {addressTypes.map((entry) => (
197
+ <SelectItem key={entry.value} value={entry.value}>
198
+ {entry.label}
199
+ </SelectItem>
200
+ ))}
201
+ </SelectContent>
202
+ </Select>
189
203
  <Dialog open={typeDialogOpen} onOpenChange={setTypeDialogOpen}>
190
204
  <DialogTrigger asChild>
191
205
  <Button type="button" variant="outline" size="icon" className="shrink-0" disabled={disabled}>
@@ -2,6 +2,7 @@
2
2
 
3
3
  import * as React from 'react'
4
4
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
5
+ import { RadioGroup, Radio } from '@open-mercato/ui/primitives/radio'
5
6
  import { flash } from '@open-mercato/ui/backend/FlashMessages'
6
7
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
7
8
  import { useT } from '@open-mercato/shared/lib/i18n/context'
@@ -139,24 +140,29 @@ export function AddressFormatSettings() {
139
140
  {t('customers.config.addressFormat.loading', 'Loading current preference…')}
140
141
  </div>
141
142
  ) : (
142
- <div className="space-y-3">
143
- {options.map((option) => (
144
- <label key={option.id} className="flex cursor-pointer items-start gap-3 rounded border p-3">
145
- <input
146
- type="radio"
147
- name="address-format"
148
- className="mt-1"
149
- value={option.id}
150
- checked={format === option.id}
151
- disabled={pending !== null && pending !== option.id}
152
- onChange={() => handleChange(option.id)}
153
- />
154
- <span className="space-y-1">
155
- <span className="block text-sm font-medium">{option.title}</span>
156
- <span className="block text-xs text-muted-foreground">{option.description}</span>
157
- </span>
158
- </label>
159
- ))}
143
+ <RadioGroup
144
+ className="space-y-3"
145
+ value={format}
146
+ onValueChange={(next) => handleChange(next as AddressFormatStrategy)}
147
+ name="address-format"
148
+ >
149
+ {options.map((option) => {
150
+ const inputId = `address-format-${option.id}`
151
+ return (
152
+ <label key={option.id} htmlFor={inputId} className="flex cursor-pointer items-start gap-3 rounded border p-3">
153
+ <Radio
154
+ id={inputId}
155
+ className="mt-1"
156
+ value={option.id}
157
+ disabled={pending !== null && pending !== option.id}
158
+ />
159
+ <span className="space-y-1">
160
+ <span className="block text-sm font-medium">{option.title}</span>
161
+ <span className="block text-xs text-muted-foreground">{option.description}</span>
162
+ </span>
163
+ </label>
164
+ )
165
+ })}
160
166
  {error ? <p className="text-sm text-status-error-text">{error}</p> : null}
161
167
  {pending ? (
162
168
  <div className="inline-flex items-center gap-2 rounded border border-dashed px-3 py-1 text-xs text-muted-foreground">
@@ -164,7 +170,7 @@ export function AddressFormatSettings() {
164
170
  {t('customers.config.addressFormat.updating', 'Saving preference…')}
165
171
  </div>
166
172
  ) : null}
167
- </div>
173
+ </RadioGroup>
168
174
  )}
169
175
  </section>
170
176
  )
@@ -5,6 +5,13 @@ import { z } from 'zod'
5
5
  import { useT } from '@open-mercato/shared/lib/i18n/context'
6
6
  import { CrudForm, type CrudField, type CrudFormGroup } from '@open-mercato/ui/backend/CrudForm'
7
7
  import { Button } from '@open-mercato/ui/primitives/button'
8
+ import {
9
+ Select,
10
+ SelectContent,
11
+ SelectItem,
12
+ SelectTrigger,
13
+ SelectValue,
14
+ } from '@open-mercato/ui/primitives/select'
8
15
  import { collectCustomFieldValues } from '@open-mercato/ui/backend/utils/customFieldValues'
9
16
  import { createCrudFormError } from '@open-mercato/ui/backend/utils/serverErrors'
10
17
  import { DictionaryEntrySelect, type DictionarySelectLabels } from '@open-mercato/core/modules/dictionaries/components/DictionaryEntrySelect'
@@ -150,17 +157,21 @@ export function ActivityForm({
150
157
  const currentValue =
151
158
  typeof value === 'string' && value.length ? value : normalizedEntityOptions[0]?.id ?? ''
152
159
  return (
153
- <select
154
- className="h-9 w-full rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
155
- value={currentValue}
156
- onChange={(event) => setValue(event.target.value)}
160
+ <Select
161
+ value={currentValue || undefined}
162
+ onValueChange={(next) => setValue(next ?? '')}
157
163
  >
158
- {normalizedEntityOptions.map((option) => (
159
- <option key={option.id} value={option.id}>
160
- {option.label}
161
- </option>
162
- ))}
163
- </select>
164
+ <SelectTrigger>
165
+ <SelectValue />
166
+ </SelectTrigger>
167
+ <SelectContent>
168
+ {normalizedEntityOptions.map((option) => (
169
+ <SelectItem key={option.id} value={option.id}>
170
+ {option.label}
171
+ </SelectItem>
172
+ ))}
173
+ </SelectContent>
174
+ </Select>
164
175
  )
165
176
  },
166
177
  } as CrudField)
@@ -175,20 +186,21 @@ export function ActivityForm({
175
186
  component: ({ value, setValue }) => {
176
187
  const currentValue = typeof value === 'string' ? value : ''
177
188
  return (
178
- <select
179
- className="h-9 w-full rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
180
- value={currentValue}
181
- onChange={(event) => setValue(event.target.value)}
189
+ <Select
190
+ value={currentValue || undefined}
191
+ onValueChange={(next) => setValue(next ?? '')}
182
192
  >
183
- <option value="">
184
- {t('customers.people.detail.activities.fields.dealPlaceholder', 'No linked deal')}
185
- </option>
186
- {normalizedDealOptions.map((option) => (
187
- <option key={option.id} value={option.id}>
188
- {option.label}
189
- </option>
190
- ))}
191
- </select>
193
+ <SelectTrigger>
194
+ <SelectValue placeholder={t('customers.people.detail.activities.fields.dealPlaceholder', 'No linked deal')} />
195
+ </SelectTrigger>
196
+ <SelectContent>
197
+ {normalizedDealOptions.map((option) => (
198
+ <SelectItem key={option.id} value={option.id}>
199
+ {option.label}
200
+ </SelectItem>
201
+ ))}
202
+ </SelectContent>
203
+ </Select>
192
204
  )
193
205
  },
194
206
  } as CrudField)
@@ -3,6 +3,7 @@
3
3
  import * as React from 'react'
4
4
  import { Loader2, Pencil, X } from 'lucide-react'
5
5
  import { Button } from '@open-mercato/ui/primitives/button'
6
+ import { Input } from '@open-mercato/ui/primitives/input'
6
7
  import { DictionaryEntrySelect } from '@open-mercato/core/modules/dictionaries/components/DictionaryEntrySelect'
7
8
  import { useT } from '@open-mercato/shared/lib/i18n/context'
8
9
  import { cn } from '@open-mercato/shared/lib/utils'
@@ -223,8 +224,7 @@ export function AnnualRevenueField({
223
224
  <label className="text-xs font-medium uppercase tracking-wide text-muted-foreground">
224
225
  {t('customers.companies.detail.fields.annualRevenuePlaceholder', 'Enter amount')}
225
226
  </label>
226
- <input
227
- className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
227
+ <Input
228
228
  value={draftAmount}
229
229
  onChange={(event) => {
230
230
  setDraftAmount(event.target.value)
@@ -6,6 +6,13 @@ import { useT } from '@open-mercato/shared/lib/i18n/context'
6
6
  import { CrudForm, type CrudField, type CrudFormGroup } from '@open-mercato/ui/backend/CrudForm'
7
7
  import { Button } from '@open-mercato/ui/primitives/button'
8
8
  import { IconButton } from '@open-mercato/ui/primitives/icon-button'
9
+ import {
10
+ Select,
11
+ SelectContent,
12
+ SelectItem,
13
+ SelectTrigger,
14
+ SelectValue,
15
+ } from '@open-mercato/ui/primitives/select'
9
16
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
10
17
  import { createCrudFormError } from '@open-mercato/ui/backend/utils/serverErrors'
11
18
  import { DictionarySelectField } from '../formConfig'
@@ -797,20 +804,23 @@ export function DealForm({
797
804
  type: 'custom',
798
805
  layout: 'half',
799
806
  component: ({ value, setValue }) => (
800
- <select
801
- className="w-full rounded border px-2 py-1.5 text-sm"
802
- value={typeof value === 'string' ? value : ''}
803
- onChange={(e) => {
804
- setValue(e.target.value)
805
- loadStagesForPipeline(e.target.value).catch(() => {})
807
+ <Select
808
+ value={typeof value === 'string' && value ? value : undefined}
809
+ onValueChange={(next) => {
810
+ setValue(next ?? '')
811
+ loadStagesForPipeline(next ?? '').catch(() => {})
806
812
  }}
807
813
  disabled={disabled}
808
814
  >
809
- <option value="">{t('customers.deals.form.pipeline.placeholder', 'Select pipeline…')}</option>
810
- {pipelines.map((p) => (
811
- <option key={p.id} value={p.id}>{p.name}</option>
812
- ))}
813
- </select>
815
+ <SelectTrigger>
816
+ <SelectValue placeholder={t('customers.deals.form.pipeline.placeholder', 'Select pipeline…')} />
817
+ </SelectTrigger>
818
+ <SelectContent>
819
+ {pipelines.map((p) => (
820
+ <SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>
821
+ ))}
822
+ </SelectContent>
823
+ </Select>
814
824
  ),
815
825
  } as CrudField,
816
826
  {
@@ -819,17 +829,20 @@ export function DealForm({
819
829
  type: 'custom',
820
830
  layout: 'half',
821
831
  component: ({ value, setValue }) => (
822
- <select
823
- className="w-full rounded border px-2 py-1.5 text-sm"
824
- value={typeof value === 'string' ? value : ''}
825
- onChange={(e) => setValue(e.target.value)}
832
+ <Select
833
+ value={typeof value === 'string' && value ? value : undefined}
834
+ onValueChange={(next) => setValue(next ?? '')}
826
835
  disabled={disabled || !pipelineStages.length}
827
836
  >
828
- <option value="">{t('customers.deals.form.pipelineStage.placeholder', 'Select stage…')}</option>
829
- {pipelineStages.map((s) => (
830
- <option key={s.id} value={s.id}>{s.label}</option>
831
- ))}
832
- </select>
837
+ <SelectTrigger>
838
+ <SelectValue placeholder={t('customers.deals.form.pipelineStage.placeholder', 'Select stage…')} />
839
+ </SelectTrigger>
840
+ <SelectContent>
841
+ {pipelineStages.map((s) => (
842
+ <SelectItem key={s.id} value={s.id}>{s.label}</SelectItem>
843
+ ))}
844
+ </SelectContent>
845
+ </Select>
833
846
  ),
834
847
  } as CrudField,
835
848
  {
@@ -7,6 +7,14 @@ import { Check, Pencil, Plus, Settings } from 'lucide-react'
7
7
  import { useT } from '@open-mercato/shared/lib/i18n/context'
8
8
  import { useOrganizationScopeVersion } from '@open-mercato/shared/lib/frontend/useOrganizationScope'
9
9
  import { Button } from '@open-mercato/ui/primitives/button'
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'
10
18
  import { deriveDisplayName, isDerivedDisplayName } from '../lib/displayName'
11
19
  import {
12
20
  Dialog,
@@ -255,9 +263,8 @@ const createPrimaryEmailField = (t: Translator): CrudField => ({
255
263
 
256
264
  return (
257
265
  <div className="space-y-2">
258
- <input
266
+ <Input
259
267
  type="email"
260
- className="w-full h-9 rounded border px-2 text-sm"
261
268
  value={inputValue}
262
269
  onChange={(event) => {
263
270
  const nextValue = event.target.value
@@ -561,19 +568,22 @@ export function CompanySelectField({ value, onChange, labels }: CompanySelectFie
561
568
  return (
562
569
  <div className="space-y-2">
563
570
  <div className="flex items-center gap-2">
564
- <select
565
- className="w-full h-9 rounded border px-2 text-sm"
566
- value={value ?? ''}
567
- onChange={(event) => onChange(event.target.value ? event.target.value : undefined)}
571
+ <Select
572
+ value={value || undefined}
573
+ onValueChange={(next) => onChange(next || undefined)}
568
574
  disabled={loading}
569
575
  >
570
- <option value="">{labels.placeholder}</option>
571
- {options.map((option) => (
572
- <option key={option.value} value={option.value}>
573
- {option.label}
574
- </option>
575
- ))}
576
- </select>
576
+ <SelectTrigger>
577
+ <SelectValue placeholder={labels.placeholder} />
578
+ </SelectTrigger>
579
+ <SelectContent>
580
+ {options.map((option) => (
581
+ <SelectItem key={option.value} value={option.value}>
582
+ {option.label}
583
+ </SelectItem>
584
+ ))}
585
+ </SelectContent>
586
+ </Select>
577
587
  <Dialog open={dialogOpen} onOpenChange={handleDialogChange}>
578
588
  <DialogTrigger asChild>
579
589
  <Button
@@ -595,8 +605,7 @@ export function CompanySelectField({ value, onChange, labels }: CompanySelectFie
595
605
  <div className="space-y-4">
596
606
  <div className="space-y-1">
597
607
  <label className="text-sm font-medium">{labels.inputLabel}</label>
598
- <input
599
- className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
608
+ <Input
600
609
  placeholder={labels.inputPlaceholder}
601
610
  value={newCompany}
602
611
  onChange={(event) => {
@@ -760,8 +769,7 @@ export const createDisplayNameSection = (t: Translator) =>
760
769
  </div>
761
770
  {editing ? (
762
771
  <div className="mt-2 space-y-2">
763
- <input
764
- className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
772
+ <Input
765
773
  value={currentValue}
766
774
  onChange={handleChange}
767
775
  placeholder={t('customers.people.form.displayName.placeholder')}
@@ -4,6 +4,7 @@ import * as React from 'react'
4
4
  import Link from 'next/link'
5
5
  import type { DashboardWidgetComponentProps } from '@open-mercato/shared/modules/dashboard/widgets'
6
6
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
7
+ import { Input } from '@open-mercato/ui/primitives/input'
7
8
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
8
9
  import { useT } from '@open-mercato/shared/lib/i18n/context'
9
10
  import { DEFAULT_SETTINGS, hydrateCustomerTodoSettings, type CustomerTodoWidgetSettings } from './config'
@@ -132,12 +133,12 @@ const CustomerTodosWidget: React.FC<DashboardWidgetComponentProps<CustomerTodoWi
132
133
  <label htmlFor="customer-todos-page-size" className="text-xs font-semibold uppercase text-muted-foreground">
133
134
  {t('customers.widgets.todos.settings.pageSize')}
134
135
  </label>
135
- <input
136
+ <Input
136
137
  id="customer-todos-page-size"
137
138
  type="number"
138
139
  min={1}
139
140
  max={20}
140
- className="w-24 rounded-md border px-2 py-1 text-sm focus-visible:border-ring focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
141
+ className="w-24"
141
142
  value={hydrated.pageSize}
142
143
  onChange={(event) => {
143
144
  const next = Number(event.target.value)
@@ -4,6 +4,14 @@ import * as React from 'react'
4
4
  import Link from 'next/link'
5
5
  import type { DashboardWidgetComponentProps } from '@open-mercato/shared/modules/dashboard/widgets'
6
6
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
7
+ import { Input } from '@open-mercato/ui/primitives/input'
8
+ import {
9
+ Select,
10
+ SelectContent,
11
+ SelectItem,
12
+ SelectTrigger,
13
+ SelectValue,
14
+ } from '@open-mercato/ui/primitives/select'
7
15
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
8
16
  import { useT } from '@open-mercato/shared/lib/i18n/context'
9
17
  import {
@@ -121,12 +129,12 @@ const CustomerNewCustomersWidget: React.FC<DashboardWidgetComponentProps<Custome
121
129
  <label htmlFor="customer-new-customers-page-size" className="text-xs font-semibold uppercase text-muted-foreground">
122
130
  {t('customers.widgets.newCustomers.settings.pageSize')}
123
131
  </label>
124
- <input
132
+ <Input
125
133
  id="customer-new-customers-page-size"
126
134
  type="number"
127
135
  min={1}
128
136
  max={20}
129
- className="w-24 rounded-md border px-2 py-1 text-sm focus-visible:border-ring focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
137
+ className="w-24"
130
138
  value={hydrated.pageSize}
131
139
  onChange={(event) => {
132
140
  const next = Number(event.target.value)
@@ -138,21 +146,23 @@ const CustomerNewCustomersWidget: React.FC<DashboardWidgetComponentProps<Custome
138
146
  <label htmlFor="customer-new-customers-kind" className="text-xs font-semibold uppercase text-muted-foreground">
139
147
  {t('customers.widgets.newCustomers.settings.kind')}
140
148
  </label>
141
- <select
142
- id="customer-new-customers-kind"
143
- className="w-full rounded-md border px-2 py-1 text-sm focus-visible:border-ring focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
149
+ <Select
144
150
  value={hydrated.kind}
145
- onChange={(event) => {
146
- const value = event.target.value
151
+ onValueChange={(value) => {
147
152
  if (value === 'person' || value === 'company' || value === 'all') {
148
153
  onSettingsChange({ ...hydrated, kind: value })
149
154
  }
150
155
  }}
151
156
  >
152
- <option value="all">{t('customers.widgets.newCustomers.filters.all')}</option>
153
- <option value="person">{t('customers.widgets.newCustomers.filters.person')}</option>
154
- <option value="company">{t('customers.widgets.newCustomers.filters.company')}</option>
155
- </select>
157
+ <SelectTrigger id="customer-new-customers-kind" size="sm">
158
+ <SelectValue />
159
+ </SelectTrigger>
160
+ <SelectContent>
161
+ <SelectItem value="all">{t('customers.widgets.newCustomers.filters.all')}</SelectItem>
162
+ <SelectItem value="person">{t('customers.widgets.newCustomers.filters.person')}</SelectItem>
163
+ <SelectItem value="company">{t('customers.widgets.newCustomers.filters.company')}</SelectItem>
164
+ </SelectContent>
165
+ </Select>
156
166
  </div>
157
167
  </div>
158
168
  )
@@ -4,6 +4,7 @@ import * as React from 'react'
4
4
  import Link from 'next/link'
5
5
  import type { DashboardWidgetComponentProps } from '@open-mercato/shared/modules/dashboard/widgets'
6
6
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
7
+ import { Input } from '@open-mercato/ui/primitives/input'
7
8
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
8
9
  import { useT } from '@open-mercato/shared/lib/i18n/context'
9
10
  import { DEFAULT_SETTINGS, hydrateNewDealsSettings, type CustomerNewDealsSettings } from './config'
@@ -104,12 +105,12 @@ const CustomerNewDealsWidget: React.FC<DashboardWidgetComponentProps<CustomerNew
104
105
  <label htmlFor="customer-new-deals-page-size" className="text-xs font-semibold uppercase text-muted-foreground">
105
106
  {t('customers.widgets.newDeals.settings.pageSize')}
106
107
  </label>
107
- <input
108
+ <Input
108
109
  id="customer-new-deals-page-size"
109
110
  type="number"
110
111
  min={1}
111
112
  max={20}
112
- className="w-24 rounded-md border px-2 py-1 text-sm focus-visible:border-ring focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
113
+ className="w-24"
113
114
  value={hydrated.pageSize}
114
115
  onChange={(event) => {
115
116
  const next = Number(event.target.value)
@@ -5,6 +5,7 @@ import Link from 'next/link'
5
5
  import type { DashboardWidgetComponentProps } from '@open-mercato/shared/modules/dashboard/widgets'
6
6
  import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
7
7
  import { formatRelativeTime } from '@open-mercato/shared/lib/time'
8
+ import { Input } from '@open-mercato/ui/primitives/input'
8
9
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
9
10
  import { useT } from '@open-mercato/shared/lib/i18n/context'
10
11
  import {
@@ -136,12 +137,12 @@ const CustomerNextInteractionsWidget: React.FC<DashboardWidgetComponentProps<Cus
136
137
  <label htmlFor="customer-next-interactions-page-size" className="text-xs font-semibold uppercase text-muted-foreground">
137
138
  {t('customers.widgets.nextInteractions.settings.pageSize')}
138
139
  </label>
139
- <input
140
+ <Input
140
141
  id="customer-next-interactions-page-size"
141
142
  type="number"
142
143
  min={1}
143
144
  max={20}
144
- className="w-24 rounded-md border px-2 py-1 text-sm focus-visible:border-ring focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
145
+ className="w-24"
145
146
  value={hydrated.pageSize}
146
147
  onChange={(event) => {
147
148
  const next = Number(event.target.value)