@open-mercato/core 0.6.7-develop.6785.1.1dd7cfac55 → 0.6.7-develop.6795.1.8a3f27921c

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 (196) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities.ids.generated.js +1 -0
  3. package/dist/generated/entities.ids.generated.js.map +2 -2
  4. package/dist/modules/auth/backend/settings/page.js +14 -9
  5. package/dist/modules/auth/backend/settings/page.js.map +2 -2
  6. package/dist/modules/customers/cli.js +17 -7
  7. package/dist/modules/customers/cli.js.map +2 -2
  8. package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +229 -216
  9. package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +2 -2
  10. package/dist/modules/customers/search.js +50 -29
  11. package/dist/modules/customers/search.js.map +2 -2
  12. package/dist/modules/data_sync/api/mappings/[id]/route.js +22 -9
  13. package/dist/modules/data_sync/api/mappings/[id]/route.js.map +2 -2
  14. package/dist/modules/data_sync/api/mappings/route.js +13 -4
  15. package/dist/modules/data_sync/api/mappings/route.js.map +2 -2
  16. package/dist/modules/data_sync/api/options.js +7 -2
  17. package/dist/modules/data_sync/api/options.js.map +2 -2
  18. package/dist/modules/data_sync/api/run.js +7 -2
  19. package/dist/modules/data_sync/api/run.js.map +2 -2
  20. package/dist/modules/data_sync/api/runs/[id]/cancel.js +8 -3
  21. package/dist/modules/data_sync/api/runs/[id]/cancel.js.map +2 -2
  22. package/dist/modules/data_sync/api/runs/[id]/retry.js +7 -2
  23. package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
  24. package/dist/modules/data_sync/api/runs/[id]/route.js +8 -3
  25. package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
  26. package/dist/modules/data_sync/api/runs.js +7 -2
  27. package/dist/modules/data_sync/api/runs.js.map +2 -2
  28. package/dist/modules/data_sync/api/schedules/[id]/route.js +19 -6
  29. package/dist/modules/data_sync/api/schedules/[id]/route.js.map +2 -2
  30. package/dist/modules/data_sync/api/schedules/route.js +13 -4
  31. package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
  32. package/dist/modules/data_sync/api/validate.js +9 -4
  33. package/dist/modules/data_sync/api/validate.js.map +2 -2
  34. package/dist/modules/design_system/acl.js +9 -0
  35. package/dist/modules/design_system/acl.js.map +7 -0
  36. package/dist/modules/design_system/backend/design-system/page.js +11 -0
  37. package/dist/modules/design_system/backend/design-system/page.js.map +7 -0
  38. package/dist/modules/design_system/backend/design-system/page.meta.js +15 -0
  39. package/dist/modules/design_system/backend/design-system/page.meta.js.map +7 -0
  40. package/dist/modules/design_system/gallery/components/CodeSnippet.js +52 -0
  41. package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +7 -0
  42. package/dist/modules/design_system/gallery/components/EntryCard.js +63 -0
  43. package/dist/modules/design_system/gallery/components/EntryCard.js.map +7 -0
  44. package/dist/modules/design_system/gallery/components/GalleryShell.js +163 -0
  45. package/dist/modules/design_system/gallery/components/GalleryShell.js.map +7 -0
  46. package/dist/modules/design_system/gallery/components/VariantPreview.js +9 -0
  47. package/dist/modules/design_system/gallery/components/VariantPreview.js.map +7 -0
  48. package/dist/modules/design_system/gallery/entries/banners.js +186 -0
  49. package/dist/modules/design_system/gallery/entries/banners.js.map +7 -0
  50. package/dist/modules/design_system/gallery/entries/buttons.js +361 -0
  51. package/dist/modules/design_system/gallery/entries/buttons.js.map +7 -0
  52. package/dist/modules/design_system/gallery/entries/charts.js +457 -0
  53. package/dist/modules/design_system/gallery/entries/charts.js.map +7 -0
  54. package/dist/modules/design_system/gallery/entries/dates.js +306 -0
  55. package/dist/modules/design_system/gallery/entries/dates.js.map +7 -0
  56. package/dist/modules/design_system/gallery/entries/detail.js +358 -0
  57. package/dist/modules/design_system/gallery/entries/detail.js.map +7 -0
  58. package/dist/modules/design_system/gallery/entries/display.js +785 -0
  59. package/dist/modules/design_system/gallery/entries/display.js.map +7 -0
  60. package/dist/modules/design_system/gallery/entries/feedback.js +658 -0
  61. package/dist/modules/design_system/gallery/entries/feedback.js.map +7 -0
  62. package/dist/modules/design_system/gallery/entries/filters.js +505 -0
  63. package/dist/modules/design_system/gallery/entries/filters.js.map +7 -0
  64. package/dist/modules/design_system/gallery/entries/foundations.js +453 -0
  65. package/dist/modules/design_system/gallery/entries/foundations.js.map +7 -0
  66. package/dist/modules/design_system/gallery/entries/icons.js +140 -0
  67. package/dist/modules/design_system/gallery/entries/icons.js.map +7 -0
  68. package/dist/modules/design_system/gallery/entries/inputs.js +1217 -0
  69. package/dist/modules/design_system/gallery/entries/inputs.js.map +7 -0
  70. package/dist/modules/design_system/gallery/entries/messages.js +334 -0
  71. package/dist/modules/design_system/gallery/entries/messages.js.map +7 -0
  72. package/dist/modules/design_system/gallery/entries/navigation.js +475 -0
  73. package/dist/modules/design_system/gallery/entries/navigation.js.map +7 -0
  74. package/dist/modules/design_system/gallery/entries/notifications.js +257 -0
  75. package/dist/modules/design_system/gallery/entries/notifications.js.map +7 -0
  76. package/dist/modules/design_system/gallery/entries/overlays.js +576 -0
  77. package/dist/modules/design_system/gallery/entries/overlays.js.map +7 -0
  78. package/dist/modules/design_system/gallery/entries/scaffolding.js +378 -0
  79. package/dist/modules/design_system/gallery/entries/scaffolding.js.map +7 -0
  80. package/dist/modules/design_system/gallery/entries/schedule.js +297 -0
  81. package/dist/modules/design_system/gallery/entries/schedule.js.map +7 -0
  82. package/dist/modules/design_system/gallery/registry.js +139 -0
  83. package/dist/modules/design_system/gallery/registry.js.map +7 -0
  84. package/dist/modules/design_system/gallery/types.js +1 -0
  85. package/dist/modules/design_system/gallery/types.js.map +7 -0
  86. package/dist/modules/design_system/index.js +9 -0
  87. package/dist/modules/design_system/index.js.map +7 -0
  88. package/dist/modules/design_system/setup.js +14 -0
  89. package/dist/modules/design_system/setup.js.map +7 -0
  90. package/dist/modules/inbox_ops/search.js +15 -4
  91. package/dist/modules/inbox_ops/search.js.map +2 -2
  92. package/dist/modules/integrations/api/[id]/credentials/route.js +11 -5
  93. package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
  94. package/dist/modules/integrations/api/[id]/health/route.js +6 -3
  95. package/dist/modules/integrations/api/[id]/health/route.js.map +2 -2
  96. package/dist/modules/integrations/api/[id]/route.js +6 -3
  97. package/dist/modules/integrations/api/[id]/route.js.map +2 -2
  98. package/dist/modules/integrations/api/[id]/state/route.js +6 -3
  99. package/dist/modules/integrations/api/[id]/state/route.js.map +2 -2
  100. package/dist/modules/integrations/api/[id]/version/route.js +6 -3
  101. package/dist/modules/integrations/api/[id]/version/route.js.map +2 -2
  102. package/dist/modules/integrations/api/logs/route.js +6 -3
  103. package/dist/modules/integrations/api/logs/route.js.map +2 -2
  104. package/dist/modules/integrations/api/route.js +6 -3
  105. package/dist/modules/integrations/api/route.js.map +2 -2
  106. package/dist/modules/integrations/api/umes-read.js +2 -2
  107. package/dist/modules/integrations/api/umes-read.js.map +2 -2
  108. package/dist/modules/integrations/lib/organization-scope.js +2 -9
  109. package/dist/modules/integrations/lib/organization-scope.js.map +2 -2
  110. package/dist/modules/messages/search.js +10 -5
  111. package/dist/modules/messages/search.js.map +2 -2
  112. package/dist/modules/query_index/data/entities.js +2 -1
  113. package/dist/modules/query_index/data/entities.js.map +2 -2
  114. package/dist/modules/query_index/lib/engine.js +32 -50
  115. package/dist/modules/query_index/lib/engine.js.map +2 -2
  116. package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js +17 -0
  117. package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js.map +7 -0
  118. package/generated/entities.ids.generated.ts +1 -0
  119. package/package.json +16 -16
  120. package/src/modules/auth/backend/settings/page.tsx +17 -8
  121. package/src/modules/customers/cli.ts +17 -7
  122. package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +24 -13
  123. package/src/modules/customers/i18n/de.json +17 -0
  124. package/src/modules/customers/i18n/en.json +17 -0
  125. package/src/modules/customers/i18n/es.json +17 -0
  126. package/src/modules/customers/i18n/pl.json +17 -0
  127. package/src/modules/customers/search.ts +59 -27
  128. package/src/modules/data_sync/AGENTS.md +1 -0
  129. package/src/modules/data_sync/api/mappings/[id]/route.ts +22 -9
  130. package/src/modules/data_sync/api/mappings/route.ts +13 -4
  131. package/src/modules/data_sync/api/options.ts +7 -2
  132. package/src/modules/data_sync/api/run.ts +7 -2
  133. package/src/modules/data_sync/api/runs/[id]/cancel.ts +8 -3
  134. package/src/modules/data_sync/api/runs/[id]/retry.ts +7 -2
  135. package/src/modules/data_sync/api/runs/[id]/route.ts +8 -3
  136. package/src/modules/data_sync/api/runs.ts +7 -2
  137. package/src/modules/data_sync/api/schedules/[id]/route.ts +19 -6
  138. package/src/modules/data_sync/api/schedules/route.ts +13 -4
  139. package/src/modules/data_sync/api/validate.ts +9 -4
  140. package/src/modules/design_system/AGENTS.md +34 -0
  141. package/src/modules/design_system/acl.ts +5 -0
  142. package/src/modules/design_system/backend/design-system/page.meta.ts +11 -0
  143. package/src/modules/design_system/backend/design-system/page.tsx +14 -0
  144. package/src/modules/design_system/gallery/components/CodeSnippet.tsx +55 -0
  145. package/src/modules/design_system/gallery/components/EntryCard.tsx +95 -0
  146. package/src/modules/design_system/gallery/components/GalleryShell.tsx +206 -0
  147. package/src/modules/design_system/gallery/components/VariantPreview.tsx +15 -0
  148. package/src/modules/design_system/gallery/entries/banners.tsx +226 -0
  149. package/src/modules/design_system/gallery/entries/buttons.tsx +422 -0
  150. package/src/modules/design_system/gallery/entries/charts.tsx +518 -0
  151. package/src/modules/design_system/gallery/entries/dates.tsx +325 -0
  152. package/src/modules/design_system/gallery/entries/detail.tsx +403 -0
  153. package/src/modules/design_system/gallery/entries/display.tsx +893 -0
  154. package/src/modules/design_system/gallery/entries/feedback.tsx +746 -0
  155. package/src/modules/design_system/gallery/entries/filters.tsx +570 -0
  156. package/src/modules/design_system/gallery/entries/foundations.tsx +529 -0
  157. package/src/modules/design_system/gallery/entries/icons.tsx +168 -0
  158. package/src/modules/design_system/gallery/entries/inputs.tsx +1516 -0
  159. package/src/modules/design_system/gallery/entries/messages.tsx +339 -0
  160. package/src/modules/design_system/gallery/entries/navigation.tsx +573 -0
  161. package/src/modules/design_system/gallery/entries/notifications.tsx +285 -0
  162. package/src/modules/design_system/gallery/entries/overlays.tsx +677 -0
  163. package/src/modules/design_system/gallery/entries/scaffolding.tsx +430 -0
  164. package/src/modules/design_system/gallery/entries/schedule.tsx +307 -0
  165. package/src/modules/design_system/gallery/registry.ts +152 -0
  166. package/src/modules/design_system/gallery/types.ts +32 -0
  167. package/src/modules/design_system/i18n/.hardcoded-allowlist.json +71 -0
  168. package/src/modules/design_system/i18n/de.json +46 -0
  169. package/src/modules/design_system/i18n/en.json +46 -0
  170. package/src/modules/design_system/i18n/es.json +46 -0
  171. package/src/modules/design_system/i18n/pl.json +46 -0
  172. package/src/modules/design_system/index.ts +7 -0
  173. package/src/modules/design_system/setup.ts +12 -0
  174. package/src/modules/inbox_ops/i18n/de.json +3 -0
  175. package/src/modules/inbox_ops/i18n/en.json +3 -0
  176. package/src/modules/inbox_ops/i18n/es.json +3 -0
  177. package/src/modules/inbox_ops/i18n/pl.json +3 -0
  178. package/src/modules/inbox_ops/search.ts +20 -4
  179. package/src/modules/integrations/api/[id]/credentials/route.ts +11 -5
  180. package/src/modules/integrations/api/[id]/health/route.ts +6 -3
  181. package/src/modules/integrations/api/[id]/route.ts +6 -3
  182. package/src/modules/integrations/api/[id]/state/route.ts +6 -3
  183. package/src/modules/integrations/api/[id]/version/route.ts +6 -3
  184. package/src/modules/integrations/api/logs/route.ts +6 -3
  185. package/src/modules/integrations/api/route.ts +6 -3
  186. package/src/modules/integrations/api/umes-read.ts +2 -2
  187. package/src/modules/integrations/lib/organization-scope.ts +5 -25
  188. package/src/modules/messages/i18n/de.json +2 -0
  189. package/src/modules/messages/i18n/en.json +2 -0
  190. package/src/modules/messages/i18n/es.json +2 -0
  191. package/src/modules/messages/i18n/pl.json +2 -0
  192. package/src/modules/messages/search.ts +11 -5
  193. package/src/modules/query_index/data/entities.ts +7 -0
  194. package/src/modules/query_index/lib/engine.ts +40 -63
  195. package/src/modules/query_index/migrations/.snapshot-open-mercato.json +12 -0
  196. package/src/modules/query_index/migrations/Migration20260731105052_query_index.ts +35 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/entries/inputs.tsx"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport { Copy, Globe, Info, Link2, Send, User } from 'lucide-react'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectTriggerLeading,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { CompactSelectTrigger } from '@open-mercato/ui/primitives/compact-select'\nimport { InlineSelectTrigger } from '@open-mercato/ui/primitives/inline-select'\nimport { InlineInput } from '@open-mercato/ui/primitives/inline-input'\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\nimport { CheckboxField } from '@open-mercato/ui/primitives/checkbox-field'\nimport { Radio, RadioGroup } from '@open-mercato/ui/primitives/radio'\nimport { RadioField } from '@open-mercato/ui/primitives/radio-field'\nimport { Switch } from '@open-mercato/ui/primitives/switch'\nimport { SwitchField } from '@open-mercato/ui/primitives/switch-field'\nimport { Slider } from '@open-mercato/ui/primitives/slider'\nimport { FormField } from '@open-mercato/ui/primitives/form-field'\nimport { SearchInput } from '@open-mercato/ui/primitives/search-input'\nimport { EmailInput } from '@open-mercato/ui/primitives/email-input'\nimport { PasswordInput } from '@open-mercato/ui/primitives/password-input'\nimport { WebsiteInput } from '@open-mercato/ui/primitives/website-input'\nimport { AmountInput, type AmountValue } from '@open-mercato/ui/primitives/amount-input'\nimport { CounterInput } from '@open-mercato/ui/primitives/counter-input'\nimport { DigitInput } from '@open-mercato/ui/primitives/digit-input'\nimport { CardInput } from '@open-mercato/ui/primitives/card-input'\nimport { ButtonInput } from '@open-mercato/ui/primitives/button-input'\nimport {\n ColorPicker,\n COLOR_PICKER_DEFAULT_SWATCHES,\n} from '@open-mercato/ui/primitives/color-picker'\nimport { TagInput } from '@open-mercato/ui/primitives/tag-input'\nimport { RichEditor } from '@open-mercato/ui/primitives/rich-editor'\nimport { IconButton } from '@open-mercato/ui/primitives/icon-button'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// ---------------------------------------------------------------------------\n// Demo wrappers \u2014 controlled primitives need local state to be interactive in\n// the gallery. The `code` snippets show the essential consumer usage, not\n// these wrappers.\n// ---------------------------------------------------------------------------\n\nfunction DemoSearchInput({ size }: { size?: 'sm' | 'default' | 'lg' }) {\n const [value, setValue] = React.useState('open orders')\n return (\n <div className=\"w-72\">\n <SearchInput value={value} onChange={setValue} size={size} />\n </div>\n )\n}\n\nfunction DemoAmountInput({ showCurrency }: { showCurrency?: boolean }) {\n const [value, setValue] = React.useState<AmountValue>({ amount: '1250.00', currency: 'EUR' })\n return (\n <div className=\"w-72\">\n <AmountInput value={value} onChange={setValue} showCurrency={showCurrency} />\n </div>\n )\n}\n\nfunction DemoCounterInput({\n initial = 2,\n step,\n precision,\n min,\n max,\n}: {\n initial?: number\n step?: number\n precision?: number\n min?: number\n max?: number\n}) {\n const [value, setValue] = React.useState<number | null>(initial)\n return (\n <div className=\"w-36\">\n <CounterInput\n value={value}\n onChange={setValue}\n step={step}\n precision={precision}\n min={min}\n max={max}\n />\n </div>\n )\n}\n\nfunction DemoCardInput({ initial = '' }: { initial?: string }) {\n const [value, setValue] = React.useState(initial)\n return (\n <div className=\"w-80\">\n <CardInput value={value} onChange={setValue} />\n </div>\n )\n}\n\nfunction DemoColorPicker({\n allowCustom,\n swatches,\n}: {\n allowCustom?: boolean\n swatches?: readonly string[]\n}) {\n const [color, setColor] = React.useState('#6366F1')\n return (\n <ColorPicker\n value={color}\n onChange={setColor}\n allowCustom={allowCustom}\n swatches={swatches}\n aria-label=\"Pick color\"\n />\n )\n}\n\nfunction DemoTagInput({\n initial = [],\n maxTags,\n placeholder,\n}: {\n initial?: string[]\n maxTags?: number\n placeholder?: string\n}) {\n const [tags, setTags] = React.useState<string[]>(initial)\n return (\n <div className=\"w-72\">\n <TagInput value={tags} onChange={setTags} maxTags={maxTags} placeholder={placeholder} />\n </div>\n )\n}\n\nfunction DemoRichEditor({ variant }: { variant: 'minimal' | 'standard' }) {\n const [html, setHtml] = React.useState(\n '<p>Ship the <strong>Q3 release notes</strong> before Friday.</p>',\n )\n return (\n <div className=\"w-full max-w-xl\">\n <RichEditor value={html} onChange={setHtml} variant={variant} />\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Entries\n// ---------------------------------------------------------------------------\n\nconst inputEntry: GalleryEntry = {\n id: 'input',\n title: 'Input',\n importPath: '@open-mercato/ui/primitives/input',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <div className=\"w-72\">\n <Input placeholder=\"Product name\" />\n </div>\n ),\n code: `import { Input } from '@open-mercato/ui/primitives/input'\n\n<Input placeholder=\"Product name\" />`,\n },\n {\n id: 'icon-slots',\n title: 'Icon slots',\n render: () => (\n <>\n <div className=\"w-56\">\n <Input leftIcon={<User />} placeholder=\"Assignee\" />\n </div>\n <div className=\"w-56\">\n <Input rightIcon={<Info />} placeholder=\"SKU\" />\n </div>\n </>\n ),\n code: `import { Info, User } from 'lucide-react'\nimport { Input } from '@open-mercato/ui/primitives/input'\n\n<Input leftIcon={<User />} placeholder=\"Assignee\" />\n<Input rightIcon={<Info />} placeholder=\"SKU\" />`,\n },\n {\n id: 'sizes',\n title: 'Sizes',\n render: () => (\n <>\n <div className=\"w-44\">\n <Input size=\"lg\" placeholder=\"Large\" />\n </div>\n <div className=\"w-44\">\n <Input size=\"default\" placeholder=\"Default\" />\n </div>\n <div className=\"w-44\">\n <Input size=\"sm\" placeholder=\"Small\" />\n </div>\n </>\n ),\n code: `import { Input } from '@open-mercato/ui/primitives/input'\n\n<Input size=\"lg\" placeholder=\"Large\" />\n<Input size=\"default\" placeholder=\"Default\" />\n<Input size=\"sm\" placeholder=\"Small\" />`,\n },\n {\n id: 'states',\n title: 'States',\n render: () => (\n <>\n <div className=\"w-56\">\n <Input aria-invalid defaultValue=\"not-a-number\" />\n </div>\n <div className=\"w-56\">\n <Input disabled placeholder=\"Disabled\" />\n </div>\n </>\n ),\n code: `import { Input } from '@open-mercato/ui/primitives/input'\n\n<Input aria-invalid defaultValue=\"not-a-number\" />\n<Input disabled placeholder=\"Disabled\" />`,\n },\n ],\n}\n\nconst textareaEntry: GalleryEntry = {\n id: 'textarea',\n title: 'Textarea',\n importPath: '@open-mercato/ui/primitives/textarea',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <div className=\"w-80\">\n <Textarea placeholder=\"Internal note for the fulfillment team\" />\n </div>\n ),\n code: `import { Textarea } from '@open-mercato/ui/primitives/textarea'\n\n<Textarea placeholder=\"Internal note for the fulfillment team\" />`,\n },\n {\n id: 'character-count',\n title: 'Character counter',\n render: () => (\n <div className=\"w-80\">\n <Textarea\n showCount\n maxLength={200}\n defaultValue=\"Customer prefers delivery after 4 PM.\"\n />\n </div>\n ),\n code: `import { Textarea } from '@open-mercato/ui/primitives/textarea'\n\n<Textarea showCount maxLength={200} defaultValue=\"Customer prefers delivery after 4 PM.\" />`,\n },\n {\n id: 'states',\n title: 'States',\n render: () => (\n <>\n <div className=\"w-72\">\n <Textarea aria-invalid defaultValue=\"Too short\" />\n </div>\n <div className=\"w-72\">\n <Textarea disabled placeholder=\"Disabled\" />\n </div>\n </>\n ),\n code: `import { Textarea } from '@open-mercato/ui/primitives/textarea'\n\n<Textarea aria-invalid defaultValue=\"Too short\" />\n<Textarea disabled placeholder=\"Disabled\" />`,\n },\n ],\n}\n\nconst selectEntry: GalleryEntry = {\n id: 'select',\n title: 'Select',\n importPath: '@open-mercato/ui/primitives/select',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <div className=\"w-56\">\n <Select defaultValue=\"pln\">\n <SelectTrigger>\n <SelectValue placeholder=\"Choose currency\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"eur\">Euro (EUR)</SelectItem>\n <SelectItem value=\"pln\">Polish Z\u0142oty (PLN)</SelectItem>\n <SelectItem value=\"usd\">US Dollar (USD)</SelectItem>\n </SelectContent>\n </Select>\n </div>\n ),\n code: `import {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\n\n<Select defaultValue=\"pln\">\n <SelectTrigger>\n <SelectValue placeholder=\"Choose currency\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"eur\">Euro (EUR)</SelectItem>\n <SelectItem value=\"pln\">Polish Z\u0142oty (PLN)</SelectItem>\n <SelectItem value=\"usd\">US Dollar (USD)</SelectItem>\n </SelectContent>\n</Select>`,\n },\n {\n id: 'groups-leading',\n title: 'Groups + leading slot',\n render: () => (\n <div className=\"w-56\">\n <Select>\n <SelectTrigger>\n <SelectTriggerLeading>\n <Globe />\n </SelectTriggerLeading>\n <SelectValue placeholder=\"Sales channel\" />\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n <SelectLabel>Online</SelectLabel>\n <SelectItem value=\"webstore\">Webstore</SelectItem>\n <SelectItem value=\"marketplace\">Marketplace</SelectItem>\n </SelectGroup>\n <SelectSeparator />\n <SelectGroup>\n <SelectLabel>Offline</SelectLabel>\n <SelectItem value=\"retail\">Retail store</SelectItem>\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n ),\n code: `import { Globe } from 'lucide-react'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectTriggerLeading,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\n\n<Select>\n <SelectTrigger>\n <SelectTriggerLeading><Globe /></SelectTriggerLeading>\n <SelectValue placeholder=\"Sales channel\" />\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n <SelectLabel>Online</SelectLabel>\n <SelectItem value=\"webstore\">Webstore</SelectItem>\n <SelectItem value=\"marketplace\">Marketplace</SelectItem>\n </SelectGroup>\n <SelectSeparator />\n <SelectGroup>\n <SelectLabel>Offline</SelectLabel>\n <SelectItem value=\"retail\">Retail store</SelectItem>\n </SelectGroup>\n </SelectContent>\n</Select>`,\n },\n {\n id: 'sizes',\n title: 'Sizes',\n render: () => (\n <>\n {(['lg', 'default', 'sm', 'xs'] as const).map((size) => (\n <div key={size} className=\"w-40\">\n <Select defaultValue=\"active\">\n <SelectTrigger size={size}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"active\">Active</SelectItem>\n <SelectItem value=\"archived\">Archived</SelectItem>\n </SelectContent>\n </Select>\n </div>\n ))}\n </>\n ),\n code: `import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@open-mercato/ui/primitives/select'\n\n<SelectTrigger size=\"lg\" />\n<SelectTrigger size=\"default\" />\n<SelectTrigger size=\"sm\" />\n<SelectTrigger size=\"xs\" />`,\n },\n {\n id: 'states',\n title: 'States',\n render: () => (\n <>\n <div className=\"w-48\">\n <Select>\n <SelectTrigger aria-invalid=\"true\">\n <SelectValue placeholder=\"Required\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"a\">Option A</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"w-48\">\n <Select>\n <SelectTrigger disabled>\n <SelectValue placeholder=\"Disabled\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"a\">Option A</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </>\n ),\n code: `import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@open-mercato/ui/primitives/select'\n\n<SelectTrigger aria-invalid=\"true\"><SelectValue placeholder=\"Required\" /></SelectTrigger>\n<SelectTrigger disabled><SelectValue placeholder=\"Disabled\" /></SelectTrigger>`,\n },\n ],\n}\n\nconst compactSelectEntry: GalleryEntry = {\n id: 'compact-select',\n title: 'CompactSelectTrigger',\n importPath: '@open-mercato/ui/primitives/compact-select',\n variants: [\n {\n id: 'trigger-label',\n title: 'With trigger label',\n render: () => (\n <div className=\"w-44\">\n <Select defaultValue=\"newest\">\n <CompactSelectTrigger triggerLabel=\"Sort:\">\n <SelectValue />\n </CompactSelectTrigger>\n <SelectContent>\n <SelectItem value=\"newest\">Newest</SelectItem>\n <SelectItem value=\"oldest\">Oldest</SelectItem>\n <SelectItem value=\"value\">Highest value</SelectItem>\n </SelectContent>\n </Select>\n </div>\n ),\n code: `import {\n CompactSelectTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectValue,\n} from '@open-mercato/ui/primitives/compact-select'\n\n<Select defaultValue=\"newest\">\n <CompactSelectTrigger triggerLabel=\"Sort:\">\n <SelectValue />\n </CompactSelectTrigger>\n <SelectContent>\n <SelectItem value=\"newest\">Newest</SelectItem>\n <SelectItem value=\"oldest\">Oldest</SelectItem>\n <SelectItem value=\"value\">Highest value</SelectItem>\n </SelectContent>\n</Select>`,\n },\n {\n id: 'plain',\n title: 'Without label',\n render: () => (\n <div className=\"w-36\">\n <Select defaultValue=\"table\">\n <CompactSelectTrigger>\n <SelectValue />\n </CompactSelectTrigger>\n <SelectContent>\n <SelectItem value=\"table\">Table</SelectItem>\n <SelectItem value=\"board\">Board</SelectItem>\n </SelectContent>\n </Select>\n </div>\n ),\n code: `import {\n CompactSelectTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectValue,\n} from '@open-mercato/ui/primitives/compact-select'\n\n<Select defaultValue=\"table\">\n <CompactSelectTrigger>\n <SelectValue />\n </CompactSelectTrigger>\n <SelectContent>\n <SelectItem value=\"table\">Table</SelectItem>\n <SelectItem value=\"board\">Board</SelectItem>\n </SelectContent>\n</Select>`,\n },\n ],\n}\n\nconst inlineSelectEntry: GalleryEntry = {\n id: 'inline-select',\n title: 'InlineSelectTrigger',\n importPath: '@open-mercato/ui/primitives/inline-select',\n variants: [\n {\n id: 'default',\n title: 'default (border on hover)',\n render: () => (\n <div className=\"w-40\">\n <Select defaultValue=\"high\">\n <InlineSelectTrigger>\n <SelectValue />\n </InlineSelectTrigger>\n <SelectContent>\n <SelectItem value=\"low\">Low</SelectItem>\n <SelectItem value=\"medium\">Medium</SelectItem>\n <SelectItem value=\"high\">High</SelectItem>\n </SelectContent>\n </Select>\n </div>\n ),\n code: `import {\n InlineSelectTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectValue,\n} from '@open-mercato/ui/primitives/inline-select'\n\n<Select defaultValue=\"high\">\n <InlineSelectTrigger>\n <SelectValue />\n </InlineSelectTrigger>\n <SelectContent>\n <SelectItem value=\"low\">Low</SelectItem>\n <SelectItem value=\"medium\">Medium</SelectItem>\n <SelectItem value=\"high\">High</SelectItem>\n </SelectContent>\n</Select>`,\n },\n {\n id: 'invisible',\n title: 'Invisible until focus',\n render: () => (\n <div className=\"w-40\">\n <Select defaultValue=\"draft\">\n <InlineSelectTrigger showBorderOnHover={false}>\n <SelectValue />\n </InlineSelectTrigger>\n <SelectContent>\n <SelectItem value=\"draft\">Draft</SelectItem>\n <SelectItem value=\"published\">Published</SelectItem>\n </SelectContent>\n </Select>\n </div>\n ),\n code: `import {\n InlineSelectTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectValue,\n} from '@open-mercato/ui/primitives/inline-select'\n\n<InlineSelectTrigger showBorderOnHover={false}>\n <SelectValue />\n</InlineSelectTrigger>`,\n },\n ],\n}\n\nconst inlineInputEntry: GalleryEntry = {\n id: 'inline-input',\n title: 'InlineInput',\n importPath: '@open-mercato/ui/primitives/inline-input',\n variants: [\n {\n id: 'default',\n title: 'default (border on hover)',\n render: () => (\n <div className=\"w-56\">\n <InlineInput defaultValue=\"Aurora desk lamp\" aria-label=\"Product name\" />\n </div>\n ),\n code: `import { InlineInput } from '@open-mercato/ui/primitives/inline-input'\n\n<InlineInput defaultValue=\"Aurora desk lamp\" aria-label=\"Product name\" onBlur={save} />`,\n },\n {\n id: 'invisible',\n title: 'Invisible until focus',\n render: () => (\n <div className=\"w-56\">\n <InlineInput\n showBorderOnHover={false}\n defaultValue=\"SKU-2041\"\n aria-label=\"SKU\"\n />\n </div>\n ),\n code: `import { InlineInput } from '@open-mercato/ui/primitives/inline-input'\n\n<InlineInput showBorderOnHover={false} defaultValue=\"SKU-2041\" aria-label=\"SKU\" />`,\n },\n ],\n}\n\nconst checkboxEntry: GalleryEntry = {\n id: 'checkbox',\n title: 'Checkbox',\n importPath: '@open-mercato/ui/primitives/checkbox',\n variants: [\n {\n id: 'states',\n title: 'States',\n render: () => (\n <>\n <Checkbox aria-label=\"Unchecked\" />\n <Checkbox defaultChecked aria-label=\"Checked\" />\n <Checkbox checked=\"indeterminate\" aria-label=\"Indeterminate\" />\n </>\n ),\n code: `import { Checkbox } from '@open-mercato/ui/primitives/checkbox'\n\n<Checkbox />\n<Checkbox defaultChecked />\n<Checkbox checked=\"indeterminate\" />`,\n },\n {\n id: 'sizes',\n title: 'Sizes',\n render: () => (\n <>\n <Checkbox size=\"sm\" defaultChecked aria-label=\"Small\" />\n <Checkbox size=\"md\" defaultChecked aria-label=\"Medium\" />\n </>\n ),\n code: `import { Checkbox } from '@open-mercato/ui/primitives/checkbox'\n\n<Checkbox size=\"sm\" defaultChecked />\n<Checkbox size=\"md\" defaultChecked />`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => (\n <>\n <Checkbox disabled aria-label=\"Disabled\" />\n <Checkbox disabled defaultChecked aria-label=\"Disabled checked\" />\n </>\n ),\n code: `import { Checkbox } from '@open-mercato/ui/primitives/checkbox'\n\n<Checkbox disabled />\n<Checkbox disabled defaultChecked />`,\n },\n ],\n}\n\nconst checkboxFieldEntry: GalleryEntry = {\n id: 'checkbox-field',\n title: 'CheckboxField',\n importPath: '@open-mercato/ui/primitives/checkbox-field',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <CheckboxField label=\"Email notifications\" defaultChecked />\n ),\n code: `import { CheckboxField } from '@open-mercato/ui/primitives/checkbox-field'\n\n<CheckboxField label=\"Email notifications\" defaultChecked />`,\n },\n {\n id: 'with-description',\n title: 'With sublabel + description',\n render: () => (\n <div className=\"w-80\">\n <CheckboxField\n label=\"Auto-archive\"\n sublabel=\"(recommended)\"\n description=\"Closed conversations move to the archive after 30 days.\"\n />\n </div>\n ),\n code: `import { CheckboxField } from '@open-mercato/ui/primitives/checkbox-field'\n\n<CheckboxField\n label=\"Auto-archive\"\n sublabel=\"(recommended)\"\n description=\"Closed conversations move to the archive after 30 days.\"\n/>`,\n },\n {\n id: 'flip',\n title: 'Flipped (checkbox right)',\n render: () => (\n <div className=\"w-72\">\n <CheckboxField flip label=\"Include shipping costs\" defaultChecked />\n </div>\n ),\n code: `import { CheckboxField } from '@open-mercato/ui/primitives/checkbox-field'\n\n<CheckboxField flip label=\"Include shipping costs\" defaultChecked />`,\n },\n ],\n}\n\nconst radioEntry: GalleryEntry = {\n id: 'radio',\n title: 'Radio',\n importPath: '@open-mercato/ui/primitives/radio',\n keywords: ['radiobutton', 'radio button', 'option group'],\n variants: [\n {\n id: 'group',\n title: 'RadioGroup',\n render: () => (\n <RadioGroup defaultValue=\"card\" className=\"flex-row gap-3\" aria-label=\"Payment method\">\n <Radio value=\"card\" aria-label=\"Card\" />\n <Radio value=\"transfer\" aria-label=\"Bank transfer\" />\n <Radio value=\"cash\" aria-label=\"Cash\" />\n </RadioGroup>\n ),\n code: `import { Radio, RadioGroup } from '@open-mercato/ui/primitives/radio'\n\n<RadioGroup defaultValue=\"card\" aria-label=\"Payment method\">\n <Radio value=\"card\" aria-label=\"Card\" />\n <Radio value=\"transfer\" aria-label=\"Bank transfer\" />\n <Radio value=\"cash\" aria-label=\"Cash\" />\n</RadioGroup>`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => (\n <RadioGroup defaultValue=\"a\" disabled className=\"flex-row gap-3\" aria-label=\"Disabled group\">\n <Radio value=\"a\" aria-label=\"Selected disabled\" />\n <Radio value=\"b\" aria-label=\"Unselected disabled\" />\n </RadioGroup>\n ),\n code: `import { Radio, RadioGroup } from '@open-mercato/ui/primitives/radio'\n\n<RadioGroup defaultValue=\"a\" disabled>\n <Radio value=\"a\" />\n <Radio value=\"b\" />\n</RadioGroup>`,\n },\n ],\n}\n\nconst radioFieldEntry: GalleryEntry = {\n keywords: ['radiobutton', 'radio button'],\n id: 'radio-field',\n title: 'RadioField',\n importPath: '@open-mercato/ui/primitives/radio-field',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <RadioGroup defaultValue=\"standard\" aria-label=\"Shipping speed\">\n <RadioField value=\"standard\" label=\"Standard\" />\n <RadioField value=\"express\" label=\"Express\" />\n </RadioGroup>\n ),\n code: `import { RadioGroup } from '@open-mercato/ui/primitives/radio'\nimport { RadioField } from '@open-mercato/ui/primitives/radio-field'\n\n<RadioGroup defaultValue=\"standard\" aria-label=\"Shipping speed\">\n <RadioField value=\"standard\" label=\"Standard\" />\n <RadioField value=\"express\" label=\"Express\" />\n</RadioGroup>`,\n },\n {\n id: 'with-description',\n title: 'With description',\n render: () => (\n <div className=\"w-80\">\n <RadioGroup defaultValue=\"invoice\" aria-label=\"Billing\">\n <RadioField\n value=\"invoice\"\n label=\"Invoice\"\n description=\"Pay within 14 days of delivery.\"\n />\n <RadioField\n value=\"prepaid\"\n label=\"Prepaid\"\n description=\"Order ships after payment clears.\"\n />\n </RadioGroup>\n </div>\n ),\n code: `import { RadioGroup } from '@open-mercato/ui/primitives/radio'\nimport { RadioField } from '@open-mercato/ui/primitives/radio-field'\n\n<RadioGroup defaultValue=\"invoice\" aria-label=\"Billing\">\n <RadioField value=\"invoice\" label=\"Invoice\" description=\"Pay within 14 days of delivery.\" />\n <RadioField value=\"prepaid\" label=\"Prepaid\" description=\"Order ships after payment clears.\" />\n</RadioGroup>`,\n },\n ],\n}\n\nconst switchEntry: GalleryEntry = {\n id: 'switch',\n title: 'Switch',\n importPath: '@open-mercato/ui/primitives/switch',\n variants: [\n {\n id: 'states',\n title: 'States',\n render: () => (\n <>\n <Switch aria-label=\"Off\" />\n <Switch defaultChecked aria-label=\"On\" />\n </>\n ),\n code: `import { Switch } from '@open-mercato/ui/primitives/switch'\n\n<Switch />\n<Switch defaultChecked />`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => (\n <>\n <Switch disabled aria-label=\"Disabled off\" />\n <Switch disabled defaultChecked aria-label=\"Disabled on\" />\n </>\n ),\n code: `import { Switch } from '@open-mercato/ui/primitives/switch'\n\n<Switch disabled />\n<Switch disabled defaultChecked />`,\n },\n ],\n}\n\nconst switchFieldEntry: GalleryEntry = {\n id: 'switch-field',\n title: 'SwitchField',\n importPath: '@open-mercato/ui/primitives/switch-field',\n variants: [\n {\n id: 'default',\n title: 'default (switch right)',\n render: () => (\n <div className=\"w-72\">\n <SwitchField label=\"Two-factor authentication\" defaultChecked />\n </div>\n ),\n code: `import { SwitchField } from '@open-mercato/ui/primitives/switch-field'\n\n<SwitchField label=\"Two-factor authentication\" defaultChecked />`,\n },\n {\n id: 'with-description',\n title: 'With description',\n render: () => (\n <div className=\"w-80\">\n <SwitchField\n label=\"Low-stock alerts\"\n description=\"Notify purchasing when stock drops below the reorder point.\"\n />\n </div>\n ),\n code: `import { SwitchField } from '@open-mercato/ui/primitives/switch-field'\n\n<SwitchField\n label=\"Low-stock alerts\"\n description=\"Notify purchasing when stock drops below the reorder point.\"\n/>`,\n },\n {\n id: 'flip',\n title: 'Flipped (switch left)',\n render: () => (\n <div className=\"w-72\">\n <SwitchField flip label=\"Sync inventory nightly\" defaultChecked />\n </div>\n ),\n code: `import { SwitchField } from '@open-mercato/ui/primitives/switch-field'\n\n<SwitchField flip label=\"Sync inventory nightly\" defaultChecked />`,\n },\n ],\n}\n\nconst sliderEntry: GalleryEntry = {\n id: 'slider',\n title: 'Slider',\n importPath: '@open-mercato/ui/primitives/slider',\n variants: [\n {\n id: 'single',\n title: 'Single value',\n render: () => (\n <div className=\"w-72\">\n <Slider defaultValue={[40]} min={0} max={100} step={5} aria-label=\"Discount\" />\n </div>\n ),\n code: `import { Slider } from '@open-mercato/ui/primitives/slider'\n\n<Slider defaultValue={[40]} min={0} max={100} step={5} aria-label=\"Discount\" />`,\n },\n {\n id: 'range',\n title: 'Range (two thumbs)',\n render: () => (\n <div className=\"w-72\">\n <Slider defaultValue={[20, 60]} min={0} max={100} aria-label=\"Price range\" />\n </div>\n ),\n code: `import { Slider } from '@open-mercato/ui/primitives/slider'\n\n<Slider defaultValue={[20, 60]} min={0} max={100} aria-label=\"Price range\" />`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => (\n <div className=\"w-72\">\n <Slider defaultValue={[45]} disabled aria-label=\"Disabled slider\" />\n </div>\n ),\n code: `import { Slider } from '@open-mercato/ui/primitives/slider'\n\n<Slider defaultValue={[45]} disabled />`,\n },\n ],\n}\n\nconst formFieldEntry: GalleryEntry = {\n id: 'form-field',\n title: 'FormField',\n importPath: '@open-mercato/ui/primitives/form-field',\n variants: [\n {\n id: 'default',\n title: 'Label + description',\n render: () => (\n <div className=\"w-72\">\n <FormField label=\"Warehouse code\" description=\"Short identifier used on labels.\">\n <Input placeholder=\"WAW-01\" />\n </FormField>\n </div>\n ),\n code: `import { FormField } from '@open-mercato/ui/primitives/form-field'\nimport { Input } from '@open-mercato/ui/primitives/input'\n\n<FormField label=\"Warehouse code\" description=\"Short identifier used on labels.\">\n <Input placeholder=\"WAW-01\" />\n</FormField>`,\n },\n {\n id: 'required',\n title: 'Required',\n render: () => (\n <div className=\"w-72\">\n <FormField label=\"Company name\" required>\n <Input placeholder=\"Acme sp. z o.o.\" />\n </FormField>\n </div>\n ),\n code: `import { FormField } from '@open-mercato/ui/primitives/form-field'\nimport { Input } from '@open-mercato/ui/primitives/input'\n\n<FormField label=\"Company name\" required>\n <Input placeholder=\"Acme sp. z o.o.\" />\n</FormField>`,\n },\n {\n id: 'error',\n title: 'Error',\n render: () => (\n <div className=\"w-72\">\n <FormField label=\"VAT ID\" error=\"VAT ID must have 10 digits.\">\n <Input defaultValue=\"52601\" />\n </FormField>\n </div>\n ),\n code: `import { FormField } from '@open-mercato/ui/primitives/form-field'\nimport { Input } from '@open-mercato/ui/primitives/input'\n\n<FormField label=\"VAT ID\" error=\"VAT ID must have 10 digits.\">\n <Input defaultValue=\"52601\" />\n</FormField>`,\n },\n {\n id: 'horizontal',\n title: 'Horizontal',\n render: () => (\n <div className=\"w-72\">\n <FormField label=\"Enable webhooks\" orientation=\"horizontal\">\n <Switch defaultChecked />\n </FormField>\n </div>\n ),\n code: `import { FormField } from '@open-mercato/ui/primitives/form-field'\nimport { Switch } from '@open-mercato/ui/primitives/switch'\n\n<FormField label=\"Enable webhooks\" orientation=\"horizontal\">\n <Switch defaultChecked />\n</FormField>`,\n },\n ],\n}\n\nconst searchInputEntry: GalleryEntry = {\n id: 'search-input',\n title: 'SearchInput',\n importPath: '@open-mercato/ui/primitives/search-input',\n variants: [\n {\n id: 'default',\n title: 'default (clearable)',\n render: () => <DemoSearchInput />,\n code: `import { SearchInput } from '@open-mercato/ui/primitives/search-input'\n\nconst [query, setQuery] = React.useState('')\n\n<SearchInput value={query} onChange={setQuery} />`,\n },\n {\n id: 'small',\n title: 'Small',\n render: () => <DemoSearchInput size=\"sm\" />,\n code: `import { SearchInput } from '@open-mercato/ui/primitives/search-input'\n\n<SearchInput size=\"sm\" value={query} onChange={setQuery} />`,\n },\n ],\n}\n\nconst emailInputEntry: GalleryEntry = {\n id: 'email-input',\n title: 'EmailInput',\n importPath: '@open-mercato/ui/primitives/email-input',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <div className=\"w-72\">\n <EmailInput />\n </div>\n ),\n code: `import { EmailInput } from '@open-mercato/ui/primitives/email-input'\n\n<EmailInput />`,\n },\n {\n id: 'no-icon',\n title: 'Without icon',\n render: () => (\n <div className=\"w-72\">\n <EmailInput showIcon={false} />\n </div>\n ),\n code: `import { EmailInput } from '@open-mercato/ui/primitives/email-input'\n\n<EmailInput showIcon={false} />`,\n },\n {\n id: 'invalid',\n title: 'Invalid',\n render: () => (\n <div className=\"w-72\">\n <EmailInput aria-invalid defaultValue=\"not-an-email\" />\n </div>\n ),\n code: `import { EmailInput } from '@open-mercato/ui/primitives/email-input'\n\n<EmailInput aria-invalid defaultValue=\"not-an-email\" />`,\n },\n ],\n}\n\nconst passwordInputEntry: GalleryEntry = {\n id: 'password-input',\n title: 'PasswordInput',\n importPath: '@open-mercato/ui/primitives/password-input',\n variants: [\n {\n id: 'default',\n title: 'default (reveal toggle)',\n render: () => (\n <div className=\"w-72\">\n <PasswordInput defaultValue=\"correct-horse-battery\" autoComplete=\"off\" />\n </div>\n ),\n code: `import { PasswordInput } from '@open-mercato/ui/primitives/password-input'\n\n<PasswordInput autoComplete=\"current-password\" />`,\n },\n {\n id: 'no-lock',\n title: 'Without lock icon',\n render: () => (\n <div className=\"w-72\">\n <PasswordInput showLockIcon={false} autoComplete=\"off\" />\n </div>\n ),\n code: `import { PasswordInput } from '@open-mercato/ui/primitives/password-input'\n\n<PasswordInput showLockIcon={false} />`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => (\n <div className=\"w-72\">\n <PasswordInput disabled autoComplete=\"off\" />\n </div>\n ),\n code: `import { PasswordInput } from '@open-mercato/ui/primitives/password-input'\n\n<PasswordInput disabled />`,\n },\n ],\n}\n\nconst websiteInputEntry: GalleryEntry = {\n id: 'website-input',\n title: 'WebsiteInput',\n importPath: '@open-mercato/ui/primitives/website-input',\n variants: [\n {\n id: 'default',\n title: 'default (https:// prefix)',\n render: () => (\n <div className=\"w-72\">\n <WebsiteInput />\n </div>\n ),\n code: `import { WebsiteInput } from '@open-mercato/ui/primitives/website-input'\n\n<WebsiteInput />`,\n },\n {\n id: 'custom-prefix',\n title: 'Custom prefix',\n render: () => (\n <div className=\"w-72\">\n <WebsiteInput prefix=\"http://\" />\n </div>\n ),\n code: `import { WebsiteInput } from '@open-mercato/ui/primitives/website-input'\n\n<WebsiteInput prefix=\"http://\" />`,\n },\n {\n id: 'no-prefix',\n title: 'Without prefix',\n render: () => (\n <div className=\"w-72\">\n <WebsiteInput showPrefix={false} />\n </div>\n ),\n code: `import { WebsiteInput } from '@open-mercato/ui/primitives/website-input'\n\n<WebsiteInput showPrefix={false} />`,\n },\n ],\n}\n\nconst amountInputEntry: GalleryEntry = {\n id: 'amount-input',\n title: 'AmountInput',\n importPath: '@open-mercato/ui/primitives/amount-input',\n variants: [\n {\n id: 'default',\n title: 'default (currency picker)',\n render: () => <DemoAmountInput />,\n code: `import { AmountInput, type AmountValue } from '@open-mercato/ui/primitives/amount-input'\n\nconst [value, setValue] = React.useState<AmountValue>({ amount: '', currency: 'EUR' })\n\n<AmountInput value={value} onChange={setValue} />`,\n },\n {\n id: 'no-currency',\n title: 'Without currency picker',\n render: () => <DemoAmountInput showCurrency={false} />,\n code: `import { AmountInput } from '@open-mercato/ui/primitives/amount-input'\n\n<AmountInput value={value} onChange={setValue} showCurrency={false} />`,\n },\n ],\n}\n\nconst counterInputEntry: GalleryEntry = {\n id: 'counter-input',\n title: 'CounterInput',\n importPath: '@open-mercato/ui/primitives/counter-input',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => <DemoCounterInput min={0} max={10} />,\n code: `import { CounterInput } from '@open-mercato/ui/primitives/counter-input'\n\nconst [qty, setQty] = React.useState<number | null>(2)\n\n<CounterInput value={qty} onChange={setQty} min={0} max={10} />`,\n },\n {\n id: 'step-precision',\n title: 'Step + precision',\n render: () => <DemoCounterInput initial={2.5} step={0.5} precision={1} min={0} />,\n code: `import { CounterInput } from '@open-mercato/ui/primitives/counter-input'\n\n<CounterInput value={weight} onChange={setWeight} step={0.5} precision={1} min={0} />`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => (\n <div className=\"w-36\">\n <CounterInput value={5} disabled />\n </div>\n ),\n code: `import { CounterInput } from '@open-mercato/ui/primitives/counter-input'\n\n<CounterInput value={5} disabled />`,\n },\n ],\n}\n\nconst digitInputEntry: GalleryEntry = {\n id: 'digit-input',\n title: 'DigitInput',\n importPath: '@open-mercato/ui/primitives/digit-input',\n variants: [\n {\n id: 'default',\n title: 'default (6 cells)',\n render: () => <DigitInput aria-label=\"Verification code\" />,\n code: `import { DigitInput } from '@open-mercato/ui/primitives/digit-input'\n\n<DigitInput onComplete={(code) => verify(code)} />`,\n },\n {\n id: 'masked',\n title: 'Masked (4 cells)',\n render: () => <DigitInput length={4} mask value=\"1234\" aria-label=\"PIN\" />,\n code: `import { DigitInput } from '@open-mercato/ui/primitives/digit-input'\n\n<DigitInput length={4} mask aria-label=\"PIN\" />`,\n },\n {\n id: 'states',\n title: 'States',\n render: () => (\n <div className=\"flex flex-col gap-3\">\n <DigitInput length={4} value=\"4921\" aria-invalid aria-label=\"Invalid code\" />\n <DigitInput length={4} disabled aria-label=\"Disabled code\" />\n </div>\n ),\n code: `import { DigitInput } from '@open-mercato/ui/primitives/digit-input'\n\n<DigitInput length={4} aria-invalid />\n<DigitInput length={4} disabled />`,\n },\n ],\n}\n\nconst cardInputEntry: GalleryEntry = {\n id: 'card-input',\n title: 'CardInput',\n importPath: '@open-mercato/ui/primitives/card-input',\n variants: [\n {\n id: 'default',\n title: 'default (empty)',\n render: () => <DemoCardInput />,\n code: `import { CardInput } from '@open-mercato/ui/primitives/card-input'\n\nconst [digits, setDigits] = React.useState('')\n\n<CardInput value={digits} onChange={setDigits} />`,\n },\n {\n id: 'brand-detected',\n title: 'Brand detected',\n render: () => <DemoCardInput initial=\"4242424242424242\" />,\n code: `import { CardInput } from '@open-mercato/ui/primitives/card-input'\n\n<CardInput value={digits} onChange={setDigits} onBrandChange={setBrand} />`,\n },\n ],\n}\n\nconst buttonInputEntry: GalleryEntry = {\n id: 'button-input',\n title: 'ButtonInput',\n importPath: '@open-mercato/ui/primitives/button-input',\n variants: [\n {\n id: 'copy-link',\n title: 'Copy link',\n render: () => (\n <div className=\"w-80\">\n <ButtonInput\n readOnly\n defaultValue=\"https://app.example.com/i/8f2c\"\n leftIcon={<Link2 />}\n trailingAction={\n <IconButton variant=\"ghost\" aria-label=\"Copy link\">\n <Copy />\n </IconButton>\n }\n />\n </div>\n ),\n code: `import { Copy, Link2 } from 'lucide-react'\nimport { ButtonInput } from '@open-mercato/ui/primitives/button-input'\nimport { IconButton } from '@open-mercato/ui/primitives/icon-button'\n\n<ButtonInput\n readOnly\n defaultValue=\"https://app.example.com/i/8f2c\"\n leftIcon={<Link2 />}\n trailingAction={\n <IconButton variant=\"ghost\" aria-label=\"Copy link\"><Copy /></IconButton>\n }\n/>`,\n },\n {\n id: 'send',\n title: 'Send action',\n render: () => (\n <div className=\"w-80\">\n <ButtonInput\n placeholder=\"Invite by email\"\n trailingAction={\n <IconButton variant=\"ghost\" aria-label=\"Send invite\">\n <Send />\n </IconButton>\n }\n />\n </div>\n ),\n code: `import { Send } from 'lucide-react'\nimport { ButtonInput } from '@open-mercato/ui/primitives/button-input'\nimport { IconButton } from '@open-mercato/ui/primitives/icon-button'\n\n<ButtonInput\n placeholder=\"Invite by email\"\n trailingAction={\n <IconButton variant=\"ghost\" aria-label=\"Send invite\"><Send /></IconButton>\n }\n/>`,\n },\n ],\n}\n\nconst colorPickerEntry: GalleryEntry = {\n id: 'color-picker',\n title: 'ColorPicker',\n importPath: '@open-mercato/ui/primitives/color-picker',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => <DemoColorPicker />,\n code: `import { ColorPicker } from '@open-mercato/ui/primitives/color-picker'\n\nconst [color, setColor] = React.useState('#6366F1')\n\n<ColorPicker value={color} onChange={setColor} />`,\n },\n {\n id: 'locked-palette',\n title: 'Locked palette',\n render: () => (\n <DemoColorPicker\n allowCustom={false}\n swatches={COLOR_PICKER_DEFAULT_SWATCHES.slice(0, 5)}\n />\n ),\n code: `import { ColorPicker, COLOR_PICKER_DEFAULT_SWATCHES } from '@open-mercato/ui/primitives/color-picker'\n\n<ColorPicker\n value={color}\n onChange={setColor}\n swatches={COLOR_PICKER_DEFAULT_SWATCHES.slice(0, 5)}\n allowCustom={false}\n/>`,\n },\n ],\n}\n\nconst tagInputEntry: GalleryEntry = {\n id: 'tag-input',\n title: 'TagInput',\n importPath: '@open-mercato/ui/primitives/tag-input',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <DemoTagInput initial={['wholesale', 'priority', 'eu']} placeholder=\"Add tag\" />\n ),\n code: `import { TagInput } from '@open-mercato/ui/primitives/tag-input'\n\nconst [tags, setTags] = React.useState<string[]>(['wholesale', 'priority', 'eu'])\n\n<TagInput value={tags} onChange={setTags} placeholder=\"Add tag\" />`,\n },\n {\n id: 'max-tags',\n title: 'Max tags reached',\n render: () => (\n <DemoTagInput initial={['red', 'green', 'blue']} maxTags={3} placeholder=\"Add tag\" />\n ),\n code: `import { TagInput } from '@open-mercato/ui/primitives/tag-input'\n\n<TagInput value={tags} onChange={setTags} maxTags={3} />`,\n },\n ],\n}\n\nconst richEditorEntry: GalleryEntry = {\n id: 'rich-editor',\n title: 'RichEditor',\n importPath: '@open-mercato/ui/primitives/rich-editor',\n variants: [\n {\n id: 'minimal',\n title: 'minimal',\n render: () => <DemoRichEditor variant=\"minimal\" />,\n code: `import { RichEditor } from '@open-mercato/ui/primitives/rich-editor'\n\nconst [html, setHtml] = React.useState('')\n\n<RichEditor value={html} onChange={setHtml} variant=\"minimal\" />`,\n },\n {\n id: 'standard',\n title: 'standard',\n render: () => <DemoRichEditor variant=\"standard\" />,\n code: `import { RichEditor } from '@open-mercato/ui/primitives/rich-editor'\n\n<RichEditor value={html} onChange={setHtml} variant=\"standard\" />`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n inputEntry,\n textareaEntry,\n selectEntry,\n compactSelectEntry,\n inlineSelectEntry,\n inlineInputEntry,\n checkboxEntry,\n checkboxFieldEntry,\n radioEntry,\n radioFieldEntry,\n switchEntry,\n switchFieldEntry,\n sliderEntry,\n formFieldEntry,\n searchInputEntry,\n emailInputEntry,\n passwordInputEntry,\n websiteInputEntry,\n amountInputEntry,\n counterInputEntry,\n digitInputEntry,\n cardInputEntry,\n buttonInputEntry,\n colorPickerEntry,\n tagInputEntry,\n richEditorEntry,\n]\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,334 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import {
4
+ EmailThreadsPanel,
5
+ MessageObjectPreview
6
+ } from "@open-mercato/ui/backend/messages";
7
+ import { MessagePrioritySelector } from "@open-mercato/ui/backend/messages/MessagePrioritySelector";
8
+ const sampleThreads = [
9
+ {
10
+ threadKey: "thread-fitting",
11
+ subject: "Fitting appointment \u2014 June 12",
12
+ preview: "Great, see you Friday at 10:00.",
13
+ participants: ["anna.nowak@example.com"],
14
+ lastMessageAt: "2026-06-10T14:05:00.000Z",
15
+ messageCount: 2,
16
+ providerKey: "gmail",
17
+ lastDirection: "inbound",
18
+ messages: [
19
+ {
20
+ id: "msg-fitting-1",
21
+ messageId: null,
22
+ rfcMessageId: "<fitting-1@example.com>",
23
+ references: [],
24
+ direction: "outbound",
25
+ fromName: "Studio Team",
26
+ fromEmail: "studio@example.com",
27
+ to: ["anna.nowak@example.com"],
28
+ cc: [],
29
+ subject: "Fitting appointment \u2014 June 12",
30
+ bodyText: "Hi Anna, we can offer Friday June 12 at 10:00. Does that work for you?",
31
+ sentAt: "2026-06-10T09:24:00.000Z",
32
+ providerKey: "gmail"
33
+ },
34
+ {
35
+ id: "msg-fitting-2",
36
+ messageId: null,
37
+ rfcMessageId: "<fitting-2@example.com>",
38
+ references: ["<fitting-1@example.com>"],
39
+ direction: "inbound",
40
+ fromName: "Anna Nowak",
41
+ fromEmail: "anna.nowak@example.com",
42
+ to: ["studio@example.com"],
43
+ cc: [],
44
+ subject: "Re: Fitting appointment \u2014 June 12",
45
+ bodyText: "Great, see you Friday at 10:00.",
46
+ sentAt: "2026-06-10T14:05:00.000Z",
47
+ providerKey: "gmail"
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ threadKey: "thread-invoice",
53
+ subject: "Invoice 2026-118",
54
+ preview: "Attached is the corrected invoice for May.",
55
+ participants: ["billing@acme.example.com"],
56
+ lastMessageAt: "2026-06-08T08:12:00.000Z",
57
+ messageCount: 1,
58
+ providerKey: "gmail",
59
+ lastDirection: "inbound",
60
+ messages: [
61
+ {
62
+ id: "msg-invoice-1",
63
+ messageId: null,
64
+ rfcMessageId: "<invoice-1@example.com>",
65
+ references: [],
66
+ direction: "inbound",
67
+ fromName: "Acme Billing",
68
+ fromEmail: "billing@acme.example.com",
69
+ to: ["studio@example.com"],
70
+ cc: ["accounting@example.com"],
71
+ subject: "Invoice 2026-118",
72
+ bodyText: "Attached is the corrected invoice for May.",
73
+ sentAt: "2026-06-08T08:12:00.000Z",
74
+ providerKey: "gmail"
75
+ }
76
+ ]
77
+ }
78
+ ];
79
+ const optimisticThread = [
80
+ {
81
+ threadKey: "thread-optimistic",
82
+ subject: "Order 10241 \u2014 delivery update",
83
+ preview: "Your order ships tomorrow.",
84
+ participants: ["jan.kowalski@example.com"],
85
+ lastMessageAt: "2026-06-11T16:40:00.000Z",
86
+ messageCount: 3,
87
+ providerKey: "gmail",
88
+ lastDirection: "outbound",
89
+ messages: [
90
+ {
91
+ id: "msg-opt-1",
92
+ messageId: null,
93
+ rfcMessageId: null,
94
+ references: [],
95
+ direction: "outbound",
96
+ fromName: "Studio Team",
97
+ fromEmail: "studio@example.com",
98
+ to: ["jan.kowalski@example.com"],
99
+ cc: [],
100
+ subject: "Order 10241 \u2014 delivery update",
101
+ bodyText: "Your order ships tomorrow.",
102
+ sentAt: "2026-06-11T16:38:00.000Z",
103
+ providerKey: "gmail",
104
+ status: "sent"
105
+ },
106
+ {
107
+ id: "msg-opt-2",
108
+ messageId: null,
109
+ rfcMessageId: null,
110
+ references: [],
111
+ direction: "outbound",
112
+ fromName: "Studio Team",
113
+ fromEmail: "studio@example.com",
114
+ to: ["jan.kowalski@example.com"],
115
+ cc: [],
116
+ subject: "Re: Order 10241 \u2014 delivery update",
117
+ bodyText: "Tracking number follows in a separate email.",
118
+ sentAt: "2026-06-11T16:39:00.000Z",
119
+ providerKey: "gmail",
120
+ status: "sending"
121
+ },
122
+ {
123
+ id: "msg-opt-3",
124
+ messageId: null,
125
+ rfcMessageId: null,
126
+ references: [],
127
+ direction: "outbound",
128
+ fromName: "Studio Team",
129
+ fromEmail: "studio@example.com",
130
+ to: ["jan.kowalski@example.com"],
131
+ cc: [],
132
+ subject: "Re: Order 10241 \u2014 delivery update",
133
+ bodyText: "Here is the tracking link.",
134
+ sentAt: "2026-06-11T16:40:00.000Z",
135
+ providerKey: "gmail",
136
+ status: "failed",
137
+ statusError: "Mailbox temporarily unavailable."
138
+ }
139
+ ]
140
+ }
141
+ ];
142
+ const emailThreadsPanelEntry = {
143
+ id: "email-threads-panel",
144
+ title: "EmailThreadsPanel",
145
+ importPath: "@open-mercato/ui/backend/messages",
146
+ variants: [
147
+ {
148
+ id: "conversations",
149
+ title: "Conversations",
150
+ render: () => /* @__PURE__ */ jsx(
151
+ EmailThreadsPanel,
152
+ {
153
+ threads: sampleThreads,
154
+ canCompose: true,
155
+ onComposeNew: () => {
156
+ },
157
+ onReply: () => {
158
+ },
159
+ onRefresh: () => {
160
+ },
161
+ className: "w-full"
162
+ }
163
+ ),
164
+ code: `import { EmailThreadsPanel, type EmailThread } from '@open-mercato/ui/backend/messages'
165
+
166
+ <EmailThreadsPanel
167
+ threads={threads /* EmailThread[] fetched by the host page */}
168
+ canCompose
169
+ onComposeNew={() => openComposer()}
170
+ onReply={(thread) => openReply(thread)}
171
+ onRefresh={() => refetch()}
172
+ />`
173
+ },
174
+ {
175
+ id: "optimistic-status",
176
+ title: "Optimistic send status",
177
+ render: () => /* @__PURE__ */ jsx(
178
+ EmailThreadsPanel,
179
+ {
180
+ threads: optimisticThread,
181
+ canCompose: true,
182
+ onComposeNew: () => {
183
+ },
184
+ onReply: () => {
185
+ },
186
+ onRetry: () => {
187
+ },
188
+ className: "w-full"
189
+ }
190
+ ),
191
+ code: `import { EmailThreadsPanel } from '@open-mercato/ui/backend/messages'
192
+
193
+ // Messages carry status: 'sending' | 'sent' | 'failed' via mergeOptimisticEmailThreads
194
+ <EmailThreadsPanel
195
+ threads={threads}
196
+ canCompose
197
+ onComposeNew={() => openComposer()}
198
+ onReply={(thread) => openReply(thread)}
199
+ onRetry={(message) => resend(message)}
200
+ />`
201
+ },
202
+ {
203
+ id: "empty",
204
+ title: "Empty state",
205
+ render: () => /* @__PURE__ */ jsx(EmailThreadsPanel, { threads: [], canCompose: true, onComposeNew: () => {
206
+ }, className: "w-full" }),
207
+ code: `import { EmailThreadsPanel } from '@open-mercato/ui/backend/messages'
208
+
209
+ <EmailThreadsPanel threads={[]} canCompose onComposeNew={() => openComposer()} />`
210
+ },
211
+ {
212
+ id: "read-only",
213
+ title: "Read-only (compose disabled)",
214
+ render: () => /* @__PURE__ */ jsx(
215
+ EmailThreadsPanel,
216
+ {
217
+ threads: sampleThreads,
218
+ canCompose: false,
219
+ composeDisabledHint: /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "Connect an email provider to reply from here." }),
220
+ onRefresh: () => {
221
+ },
222
+ className: "w-full"
223
+ }
224
+ ),
225
+ code: `import { EmailThreadsPanel } from '@open-mercato/ui/backend/messages'
226
+
227
+ <EmailThreadsPanel
228
+ threads={threads}
229
+ canCompose={false}
230
+ composeDisabledHint={<span className="text-sm text-muted-foreground">Connect an email provider to reply from here.</span>}
231
+ onRefresh={() => refetch()}
232
+ />`
233
+ }
234
+ ]
235
+ };
236
+ const galleryT = (key, fallback) => fallback ?? key;
237
+ function DemoMessagePrioritySelector() {
238
+ const [value, setValue] = React.useState("high");
239
+ return /* @__PURE__ */ jsx(MessagePrioritySelector, { value, onChange: setValue, t: galleryT });
240
+ }
241
+ const messagePrioritySelectorEntry = {
242
+ id: "message-priority-selector",
243
+ title: "MessagePrioritySelector",
244
+ importPath: "@open-mercato/ui/backend/messages/MessagePrioritySelector",
245
+ variants: [
246
+ {
247
+ id: "interactive",
248
+ title: "Interactive (presentational core of the API-wired MessageComposer)",
249
+ render: () => /* @__PURE__ */ jsx(DemoMessagePrioritySelector, {}),
250
+ code: `import { MessagePrioritySelector } from '@open-mercato/ui/backend/messages/MessagePrioritySelector'
251
+ import type { MessagePriority } from '@open-mercato/ui/backend/messages/message-priority'
252
+
253
+ const [value, setValue] = React.useState<MessagePriority>('high')
254
+
255
+ // Inside MessageComposer priorities come through defaultValues.priority;
256
+ // standalone usage is fully controlled.
257
+ <MessagePrioritySelector value={value} onChange={setValue} t={t} />`
258
+ }
259
+ ]
260
+ };
261
+ const messageObjectPreviewEntry = {
262
+ id: "message-object-preview",
263
+ title: "MessageObjectPreview",
264
+ importPath: "@open-mercato/ui/backend/messages",
265
+ variants: [
266
+ {
267
+ id: "preview-data",
268
+ title: "Preview data",
269
+ render: () => /* @__PURE__ */ jsx(
270
+ MessageObjectPreview,
271
+ {
272
+ entityId: "order-10241",
273
+ entityModule: "sales",
274
+ entityType: "order",
275
+ previewData: {
276
+ title: "Order #10241",
277
+ subtitle: "Anna Nowak \u2014 3 items",
278
+ status: "processing"
279
+ }
280
+ }
281
+ ),
282
+ code: `import { MessageObjectPreview } from '@open-mercato/ui/backend/messages'
283
+
284
+ <MessageObjectPreview
285
+ entityId="order-10241"
286
+ entityModule="sales"
287
+ entityType="order"
288
+ previewData={{ title: 'Order #10241', subtitle: 'Anna Nowak \u2014 3 items', status: 'processing' }}
289
+ />`
290
+ },
291
+ {
292
+ id: "action-required",
293
+ title: "Action required with metadata",
294
+ render: () => /* @__PURE__ */ jsx(
295
+ MessageObjectPreview,
296
+ {
297
+ entityId: "return-1182",
298
+ entityModule: "sales",
299
+ entityType: "return",
300
+ actionRequired: true,
301
+ actionLabel: "Approve return",
302
+ previewData: {
303
+ title: "Return request #1182",
304
+ subtitle: "Order #10241 \u2014 Anna Nowak",
305
+ metadata: { total: "EUR 412.00", due: "Jun 15, 2026" }
306
+ }
307
+ }
308
+ ),
309
+ code: `import { MessageObjectPreview } from '@open-mercato/ui/backend/messages'
310
+
311
+ <MessageObjectPreview
312
+ entityId="return-1182"
313
+ entityModule="sales"
314
+ entityType="return"
315
+ actionRequired
316
+ actionLabel="Approve return"
317
+ previewData={{
318
+ title: 'Return request #1182',
319
+ subtitle: 'Order #10241 \u2014 Anna Nowak',
320
+ metadata: { total: 'EUR 412.00', due: 'Jun 15, 2026' },
321
+ }}
322
+ />`
323
+ }
324
+ ]
325
+ };
326
+ const entries = [
327
+ emailThreadsPanelEntry,
328
+ messagePrioritySelectorEntry,
329
+ messageObjectPreviewEntry
330
+ ];
331
+ export {
332
+ entries
333
+ };
334
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/entries/messages.tsx"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport {\n EmailThreadsPanel,\n MessageObjectPreview,\n type EmailThread,\n} from '@open-mercato/ui/backend/messages'\nimport { MessagePrioritySelector } from '@open-mercato/ui/backend/messages/MessagePrioritySelector'\nimport type { MessagePriority } from '@open-mercato/ui/backend/messages/message-priority'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// Fixed sample timestamps (June 2026) \u2014 previews must not depend on \"today\".\nconst sampleThreads: EmailThread[] = [\n {\n threadKey: 'thread-fitting',\n subject: 'Fitting appointment \u2014 June 12',\n preview: 'Great, see you Friday at 10:00.',\n participants: ['anna.nowak@example.com'],\n lastMessageAt: '2026-06-10T14:05:00.000Z',\n messageCount: 2,\n providerKey: 'gmail',\n lastDirection: 'inbound',\n messages: [\n {\n id: 'msg-fitting-1',\n messageId: null,\n rfcMessageId: '<fitting-1@example.com>',\n references: [],\n direction: 'outbound',\n fromName: 'Studio Team',\n fromEmail: 'studio@example.com',\n to: ['anna.nowak@example.com'],\n cc: [],\n subject: 'Fitting appointment \u2014 June 12',\n bodyText: 'Hi Anna, we can offer Friday June 12 at 10:00. Does that work for you?',\n sentAt: '2026-06-10T09:24:00.000Z',\n providerKey: 'gmail',\n },\n {\n id: 'msg-fitting-2',\n messageId: null,\n rfcMessageId: '<fitting-2@example.com>',\n references: ['<fitting-1@example.com>'],\n direction: 'inbound',\n fromName: 'Anna Nowak',\n fromEmail: 'anna.nowak@example.com',\n to: ['studio@example.com'],\n cc: [],\n subject: 'Re: Fitting appointment \u2014 June 12',\n bodyText: 'Great, see you Friday at 10:00.',\n sentAt: '2026-06-10T14:05:00.000Z',\n providerKey: 'gmail',\n },\n ],\n },\n {\n threadKey: 'thread-invoice',\n subject: 'Invoice 2026-118',\n preview: 'Attached is the corrected invoice for May.',\n participants: ['billing@acme.example.com'],\n lastMessageAt: '2026-06-08T08:12:00.000Z',\n messageCount: 1,\n providerKey: 'gmail',\n lastDirection: 'inbound',\n messages: [\n {\n id: 'msg-invoice-1',\n messageId: null,\n rfcMessageId: '<invoice-1@example.com>',\n references: [],\n direction: 'inbound',\n fromName: 'Acme Billing',\n fromEmail: 'billing@acme.example.com',\n to: ['studio@example.com'],\n cc: ['accounting@example.com'],\n subject: 'Invoice 2026-118',\n bodyText: 'Attached is the corrected invoice for May.',\n sentAt: '2026-06-08T08:12:00.000Z',\n providerKey: 'gmail',\n },\n ],\n },\n]\n\nconst optimisticThread: EmailThread[] = [\n {\n threadKey: 'thread-optimistic',\n subject: 'Order 10241 \u2014 delivery update',\n preview: 'Your order ships tomorrow.',\n participants: ['jan.kowalski@example.com'],\n lastMessageAt: '2026-06-11T16:40:00.000Z',\n messageCount: 3,\n providerKey: 'gmail',\n lastDirection: 'outbound',\n messages: [\n {\n id: 'msg-opt-1',\n messageId: null,\n rfcMessageId: null,\n references: [],\n direction: 'outbound',\n fromName: 'Studio Team',\n fromEmail: 'studio@example.com',\n to: ['jan.kowalski@example.com'],\n cc: [],\n subject: 'Order 10241 \u2014 delivery update',\n bodyText: 'Your order ships tomorrow.',\n sentAt: '2026-06-11T16:38:00.000Z',\n providerKey: 'gmail',\n status: 'sent',\n },\n {\n id: 'msg-opt-2',\n messageId: null,\n rfcMessageId: null,\n references: [],\n direction: 'outbound',\n fromName: 'Studio Team',\n fromEmail: 'studio@example.com',\n to: ['jan.kowalski@example.com'],\n cc: [],\n subject: 'Re: Order 10241 \u2014 delivery update',\n bodyText: 'Tracking number follows in a separate email.',\n sentAt: '2026-06-11T16:39:00.000Z',\n providerKey: 'gmail',\n status: 'sending',\n },\n {\n id: 'msg-opt-3',\n messageId: null,\n rfcMessageId: null,\n references: [],\n direction: 'outbound',\n fromName: 'Studio Team',\n fromEmail: 'studio@example.com',\n to: ['jan.kowalski@example.com'],\n cc: [],\n subject: 'Re: Order 10241 \u2014 delivery update',\n bodyText: 'Here is the tracking link.',\n sentAt: '2026-06-11T16:40:00.000Z',\n providerKey: 'gmail',\n status: 'failed',\n statusError: 'Mailbox temporarily unavailable.',\n },\n ],\n },\n]\n\nconst emailThreadsPanelEntry: GalleryEntry = {\n id: 'email-threads-panel',\n title: 'EmailThreadsPanel',\n importPath: '@open-mercato/ui/backend/messages',\n variants: [\n {\n id: 'conversations',\n title: 'Conversations',\n render: () => (\n <EmailThreadsPanel\n threads={sampleThreads}\n canCompose\n onComposeNew={() => {}}\n onReply={() => {}}\n onRefresh={() => {}}\n className=\"w-full\"\n />\n ),\n code: `import { EmailThreadsPanel, type EmailThread } from '@open-mercato/ui/backend/messages'\n\n<EmailThreadsPanel\n threads={threads /* EmailThread[] fetched by the host page */}\n canCompose\n onComposeNew={() => openComposer()}\n onReply={(thread) => openReply(thread)}\n onRefresh={() => refetch()}\n/>`,\n },\n {\n id: 'optimistic-status',\n title: 'Optimistic send status',\n render: () => (\n <EmailThreadsPanel\n threads={optimisticThread}\n canCompose\n onComposeNew={() => {}}\n onReply={() => {}}\n onRetry={() => {}}\n className=\"w-full\"\n />\n ),\n code: `import { EmailThreadsPanel } from '@open-mercato/ui/backend/messages'\n\n// Messages carry status: 'sending' | 'sent' | 'failed' via mergeOptimisticEmailThreads\n<EmailThreadsPanel\n threads={threads}\n canCompose\n onComposeNew={() => openComposer()}\n onReply={(thread) => openReply(thread)}\n onRetry={(message) => resend(message)}\n/>`,\n },\n {\n id: 'empty',\n title: 'Empty state',\n render: () => (\n <EmailThreadsPanel threads={[]} canCompose onComposeNew={() => {}} className=\"w-full\" />\n ),\n code: `import { EmailThreadsPanel } from '@open-mercato/ui/backend/messages'\n\n<EmailThreadsPanel threads={[]} canCompose onComposeNew={() => openComposer()} />`,\n },\n {\n id: 'read-only',\n title: 'Read-only (compose disabled)',\n render: () => (\n <EmailThreadsPanel\n threads={sampleThreads}\n canCompose={false}\n composeDisabledHint={\n <span className=\"text-sm text-muted-foreground\">\n Connect an email provider to reply from here.\n </span>\n }\n onRefresh={() => {}}\n className=\"w-full\"\n />\n ),\n code: `import { EmailThreadsPanel } from '@open-mercato/ui/backend/messages'\n\n<EmailThreadsPanel\n threads={threads}\n canCompose={false}\n composeDisabledHint={<span className=\"text-sm text-muted-foreground\">Connect an email provider to reply from here.</span>}\n onRefresh={() => refetch()}\n/>`,\n },\n ],\n}\n\nconst galleryT = (key: string, fallback?: string) => fallback ?? key\n\nfunction DemoMessagePrioritySelector() {\n const [value, setValue] = React.useState<MessagePriority>('high')\n return <MessagePrioritySelector value={value} onChange={setValue} t={galleryT} />\n}\n\nconst messagePrioritySelectorEntry: GalleryEntry = {\n id: 'message-priority-selector',\n title: 'MessagePrioritySelector',\n importPath: '@open-mercato/ui/backend/messages/MessagePrioritySelector',\n variants: [\n {\n id: 'interactive',\n title: 'Interactive (presentational core of the API-wired MessageComposer)',\n render: () => <DemoMessagePrioritySelector />,\n code: `import { MessagePrioritySelector } from '@open-mercato/ui/backend/messages/MessagePrioritySelector'\nimport type { MessagePriority } from '@open-mercato/ui/backend/messages/message-priority'\n\nconst [value, setValue] = React.useState<MessagePriority>('high')\n\n// Inside MessageComposer priorities come through defaultValues.priority;\n// standalone usage is fully controlled.\n<MessagePrioritySelector value={value} onChange={setValue} t={t} />`,\n },\n ],\n}\n\nconst messageObjectPreviewEntry: GalleryEntry = {\n id: 'message-object-preview',\n title: 'MessageObjectPreview',\n importPath: '@open-mercato/ui/backend/messages',\n variants: [\n {\n id: 'preview-data',\n title: 'Preview data',\n render: () => (\n <MessageObjectPreview\n entityId=\"order-10241\"\n entityModule=\"sales\"\n entityType=\"order\"\n previewData={{\n title: 'Order #10241',\n subtitle: 'Anna Nowak \u2014 3 items',\n status: 'processing',\n }}\n />\n ),\n code: `import { MessageObjectPreview } from '@open-mercato/ui/backend/messages'\n\n<MessageObjectPreview\n entityId=\"order-10241\"\n entityModule=\"sales\"\n entityType=\"order\"\n previewData={{ title: 'Order #10241', subtitle: 'Anna Nowak \u2014 3 items', status: 'processing' }}\n/>`,\n },\n {\n id: 'action-required',\n title: 'Action required with metadata',\n render: () => (\n <MessageObjectPreview\n entityId=\"return-1182\"\n entityModule=\"sales\"\n entityType=\"return\"\n actionRequired\n actionLabel=\"Approve return\"\n previewData={{\n title: 'Return request #1182',\n subtitle: 'Order #10241 \u2014 Anna Nowak',\n metadata: { total: 'EUR 412.00', due: 'Jun 15, 2026' },\n }}\n />\n ),\n code: `import { MessageObjectPreview } from '@open-mercato/ui/backend/messages'\n\n<MessageObjectPreview\n entityId=\"return-1182\"\n entityModule=\"sales\"\n entityType=\"return\"\n actionRequired\n actionLabel=\"Approve return\"\n previewData={{\n title: 'Return request #1182',\n subtitle: 'Order #10241 \u2014 Anna Nowak',\n metadata: { total: 'EUR 412.00', due: 'Jun 15, 2026' },\n }}\n/>`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n emailThreadsPanelEntry,\n messagePrioritySelectorEntry,\n messageObjectPreviewEntry,\n]\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }