@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.
- package/.turbo/turbo-build.log +1 -1
- package/dist/generated/entities.ids.generated.js +1 -0
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/modules/auth/backend/settings/page.js +14 -9
- package/dist/modules/auth/backend/settings/page.js.map +2 -2
- package/dist/modules/customers/cli.js +17 -7
- package/dist/modules/customers/cli.js.map +2 -2
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +229 -216
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +2 -2
- package/dist/modules/customers/search.js +50 -29
- package/dist/modules/customers/search.js.map +2 -2
- package/dist/modules/data_sync/api/mappings/[id]/route.js +22 -9
- package/dist/modules/data_sync/api/mappings/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/mappings/route.js +13 -4
- package/dist/modules/data_sync/api/mappings/route.js.map +2 -2
- package/dist/modules/data_sync/api/options.js +7 -2
- package/dist/modules/data_sync/api/options.js.map +2 -2
- package/dist/modules/data_sync/api/run.js +7 -2
- package/dist/modules/data_sync/api/run.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/cancel.js +8 -3
- package/dist/modules/data_sync/api/runs/[id]/cancel.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/retry.js +7 -2
- package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/route.js +8 -3
- package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/runs.js +7 -2
- package/dist/modules/data_sync/api/runs.js.map +2 -2
- package/dist/modules/data_sync/api/schedules/[id]/route.js +19 -6
- package/dist/modules/data_sync/api/schedules/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/schedules/route.js +13 -4
- package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
- package/dist/modules/data_sync/api/validate.js +9 -4
- package/dist/modules/data_sync/api/validate.js.map +2 -2
- package/dist/modules/design_system/acl.js +9 -0
- package/dist/modules/design_system/acl.js.map +7 -0
- package/dist/modules/design_system/backend/design-system/page.js +11 -0
- package/dist/modules/design_system/backend/design-system/page.js.map +7 -0
- package/dist/modules/design_system/backend/design-system/page.meta.js +15 -0
- package/dist/modules/design_system/backend/design-system/page.meta.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CodeSnippet.js +52 -0
- package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +7 -0
- package/dist/modules/design_system/gallery/components/EntryCard.js +63 -0
- package/dist/modules/design_system/gallery/components/EntryCard.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryShell.js +163 -0
- package/dist/modules/design_system/gallery/components/GalleryShell.js.map +7 -0
- package/dist/modules/design_system/gallery/components/VariantPreview.js +9 -0
- package/dist/modules/design_system/gallery/components/VariantPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/banners.js +186 -0
- package/dist/modules/design_system/gallery/entries/banners.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/buttons.js +361 -0
- package/dist/modules/design_system/gallery/entries/buttons.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/charts.js +457 -0
- package/dist/modules/design_system/gallery/entries/charts.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/dates.js +306 -0
- package/dist/modules/design_system/gallery/entries/dates.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/detail.js +358 -0
- package/dist/modules/design_system/gallery/entries/detail.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/display.js +785 -0
- package/dist/modules/design_system/gallery/entries/display.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/feedback.js +658 -0
- package/dist/modules/design_system/gallery/entries/feedback.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/filters.js +505 -0
- package/dist/modules/design_system/gallery/entries/filters.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/foundations.js +453 -0
- package/dist/modules/design_system/gallery/entries/foundations.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/icons.js +140 -0
- package/dist/modules/design_system/gallery/entries/icons.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/inputs.js +1217 -0
- package/dist/modules/design_system/gallery/entries/inputs.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/messages.js +334 -0
- package/dist/modules/design_system/gallery/entries/messages.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/navigation.js +475 -0
- package/dist/modules/design_system/gallery/entries/navigation.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/notifications.js +257 -0
- package/dist/modules/design_system/gallery/entries/notifications.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/overlays.js +576 -0
- package/dist/modules/design_system/gallery/entries/overlays.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/scaffolding.js +378 -0
- package/dist/modules/design_system/gallery/entries/scaffolding.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/schedule.js +297 -0
- package/dist/modules/design_system/gallery/entries/schedule.js.map +7 -0
- package/dist/modules/design_system/gallery/registry.js +139 -0
- package/dist/modules/design_system/gallery/registry.js.map +7 -0
- package/dist/modules/design_system/gallery/types.js +1 -0
- package/dist/modules/design_system/gallery/types.js.map +7 -0
- package/dist/modules/design_system/index.js +9 -0
- package/dist/modules/design_system/index.js.map +7 -0
- package/dist/modules/design_system/setup.js +14 -0
- package/dist/modules/design_system/setup.js.map +7 -0
- package/dist/modules/inbox_ops/search.js +15 -4
- package/dist/modules/inbox_ops/search.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +11 -5
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/health/route.js +6 -3
- package/dist/modules/integrations/api/[id]/health/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/route.js +6 -3
- package/dist/modules/integrations/api/[id]/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/state/route.js +6 -3
- package/dist/modules/integrations/api/[id]/state/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/version/route.js +6 -3
- package/dist/modules/integrations/api/[id]/version/route.js.map +2 -2
- package/dist/modules/integrations/api/logs/route.js +6 -3
- package/dist/modules/integrations/api/logs/route.js.map +2 -2
- package/dist/modules/integrations/api/route.js +6 -3
- package/dist/modules/integrations/api/route.js.map +2 -2
- package/dist/modules/integrations/api/umes-read.js +2 -2
- package/dist/modules/integrations/api/umes-read.js.map +2 -2
- package/dist/modules/integrations/lib/organization-scope.js +2 -9
- package/dist/modules/integrations/lib/organization-scope.js.map +2 -2
- package/dist/modules/messages/search.js +10 -5
- package/dist/modules/messages/search.js.map +2 -2
- package/dist/modules/query_index/data/entities.js +2 -1
- package/dist/modules/query_index/data/entities.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +32 -50
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js +17 -0
- package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js.map +7 -0
- package/generated/entities.ids.generated.ts +1 -0
- package/package.json +16 -16
- package/src/modules/auth/backend/settings/page.tsx +17 -8
- package/src/modules/customers/cli.ts +17 -7
- package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +24 -13
- package/src/modules/customers/i18n/de.json +17 -0
- package/src/modules/customers/i18n/en.json +17 -0
- package/src/modules/customers/i18n/es.json +17 -0
- package/src/modules/customers/i18n/pl.json +17 -0
- package/src/modules/customers/search.ts +59 -27
- package/src/modules/data_sync/AGENTS.md +1 -0
- package/src/modules/data_sync/api/mappings/[id]/route.ts +22 -9
- package/src/modules/data_sync/api/mappings/route.ts +13 -4
- package/src/modules/data_sync/api/options.ts +7 -2
- package/src/modules/data_sync/api/run.ts +7 -2
- package/src/modules/data_sync/api/runs/[id]/cancel.ts +8 -3
- package/src/modules/data_sync/api/runs/[id]/retry.ts +7 -2
- package/src/modules/data_sync/api/runs/[id]/route.ts +8 -3
- package/src/modules/data_sync/api/runs.ts +7 -2
- package/src/modules/data_sync/api/schedules/[id]/route.ts +19 -6
- package/src/modules/data_sync/api/schedules/route.ts +13 -4
- package/src/modules/data_sync/api/validate.ts +9 -4
- package/src/modules/design_system/AGENTS.md +34 -0
- package/src/modules/design_system/acl.ts +5 -0
- package/src/modules/design_system/backend/design-system/page.meta.ts +11 -0
- package/src/modules/design_system/backend/design-system/page.tsx +14 -0
- package/src/modules/design_system/gallery/components/CodeSnippet.tsx +55 -0
- package/src/modules/design_system/gallery/components/EntryCard.tsx +95 -0
- package/src/modules/design_system/gallery/components/GalleryShell.tsx +206 -0
- package/src/modules/design_system/gallery/components/VariantPreview.tsx +15 -0
- package/src/modules/design_system/gallery/entries/banners.tsx +226 -0
- package/src/modules/design_system/gallery/entries/buttons.tsx +422 -0
- package/src/modules/design_system/gallery/entries/charts.tsx +518 -0
- package/src/modules/design_system/gallery/entries/dates.tsx +325 -0
- package/src/modules/design_system/gallery/entries/detail.tsx +403 -0
- package/src/modules/design_system/gallery/entries/display.tsx +893 -0
- package/src/modules/design_system/gallery/entries/feedback.tsx +746 -0
- package/src/modules/design_system/gallery/entries/filters.tsx +570 -0
- package/src/modules/design_system/gallery/entries/foundations.tsx +529 -0
- package/src/modules/design_system/gallery/entries/icons.tsx +168 -0
- package/src/modules/design_system/gallery/entries/inputs.tsx +1516 -0
- package/src/modules/design_system/gallery/entries/messages.tsx +339 -0
- package/src/modules/design_system/gallery/entries/navigation.tsx +573 -0
- package/src/modules/design_system/gallery/entries/notifications.tsx +285 -0
- package/src/modules/design_system/gallery/entries/overlays.tsx +677 -0
- package/src/modules/design_system/gallery/entries/scaffolding.tsx +430 -0
- package/src/modules/design_system/gallery/entries/schedule.tsx +307 -0
- package/src/modules/design_system/gallery/registry.ts +152 -0
- package/src/modules/design_system/gallery/types.ts +32 -0
- package/src/modules/design_system/i18n/.hardcoded-allowlist.json +71 -0
- package/src/modules/design_system/i18n/de.json +46 -0
- package/src/modules/design_system/i18n/en.json +46 -0
- package/src/modules/design_system/i18n/es.json +46 -0
- package/src/modules/design_system/i18n/pl.json +46 -0
- package/src/modules/design_system/index.ts +7 -0
- package/src/modules/design_system/setup.ts +12 -0
- package/src/modules/inbox_ops/i18n/de.json +3 -0
- package/src/modules/inbox_ops/i18n/en.json +3 -0
- package/src/modules/inbox_ops/i18n/es.json +3 -0
- package/src/modules/inbox_ops/i18n/pl.json +3 -0
- package/src/modules/inbox_ops/search.ts +20 -4
- package/src/modules/integrations/api/[id]/credentials/route.ts +11 -5
- package/src/modules/integrations/api/[id]/health/route.ts +6 -3
- package/src/modules/integrations/api/[id]/route.ts +6 -3
- package/src/modules/integrations/api/[id]/state/route.ts +6 -3
- package/src/modules/integrations/api/[id]/version/route.ts +6 -3
- package/src/modules/integrations/api/logs/route.ts +6 -3
- package/src/modules/integrations/api/route.ts +6 -3
- package/src/modules/integrations/api/umes-read.ts +2 -2
- package/src/modules/integrations/lib/organization-scope.ts +5 -25
- package/src/modules/messages/i18n/de.json +2 -0
- package/src/modules/messages/i18n/en.json +2 -0
- package/src/modules/messages/i18n/es.json +2 -0
- package/src/modules/messages/i18n/pl.json +2 -0
- package/src/modules/messages/search.ts +11 -5
- package/src/modules/query_index/data/entities.ts +7 -0
- package/src/modules/query_index/lib/engine.ts +40 -63
- package/src/modules/query_index/migrations/.snapshot-open-mercato.json +12 -0
- package/src/modules/query_index/migrations/Migration20260731105052_query_index.ts +35 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { CircleCheck, Rocket, Sparkles } from 'lucide-react'
|
|
3
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
4
|
+
import { flash } from '@open-mercato/ui/backend/FlashMessages'
|
|
5
|
+
import { NextStepCallout } from '@open-mercato/ui/backend/NextStepCallout'
|
|
6
|
+
import { ContextHelp } from '@open-mercato/ui/backend/ContextHelp'
|
|
7
|
+
import type { GalleryEntry } from '../types'
|
|
8
|
+
|
|
9
|
+
// Component titles and variant names are proper nouns from the codebase and
|
|
10
|
+
// are deliberately not translated. `code` MUST contain the entry's importPath
|
|
11
|
+
// (enforced by the registry-integrity test) and is always reviewed alongside
|
|
12
|
+
// its sibling `render`.
|
|
13
|
+
|
|
14
|
+
// `FlashMessages` itself is a singleton mounted by AppShell — the gallery only
|
|
15
|
+
// demonstrates the imperative `flash()` API; the triggered toast renders
|
|
16
|
+
// through the already-mounted singleton.
|
|
17
|
+
const flashMessagesEntry: GalleryEntry = {
|
|
18
|
+
id: 'flash-messages',
|
|
19
|
+
title: 'FlashMessages',
|
|
20
|
+
importPath: '@open-mercato/ui/backend/FlashMessages',
|
|
21
|
+
variants: [
|
|
22
|
+
{
|
|
23
|
+
id: 'kinds',
|
|
24
|
+
title: 'flash() kinds (toast via the AppShell singleton)',
|
|
25
|
+
render: () => (
|
|
26
|
+
<>
|
|
27
|
+
<Button variant="outline" onClick={() => flash('Changes saved', 'success')}>
|
|
28
|
+
Fire success
|
|
29
|
+
</Button>
|
|
30
|
+
<Button variant="outline" onClick={() => flash('Sync scheduled', 'info')}>
|
|
31
|
+
Fire info
|
|
32
|
+
</Button>
|
|
33
|
+
<Button variant="outline" onClick={() => flash('Quota almost reached', 'warning')}>
|
|
34
|
+
Fire warning
|
|
35
|
+
</Button>
|
|
36
|
+
<Button variant="outline" onClick={() => flash('Save failed', 'error')}>
|
|
37
|
+
Fire error
|
|
38
|
+
</Button>
|
|
39
|
+
</>
|
|
40
|
+
),
|
|
41
|
+
code: `import { flash } from '@open-mercato/ui/backend/FlashMessages'
|
|
42
|
+
|
|
43
|
+
// FlashMessages is mounted once by AppShell — never mount your own.
|
|
44
|
+
flash('Changes saved', 'success')
|
|
45
|
+
flash('Sync scheduled', 'info')
|
|
46
|
+
flash('Quota almost reached', 'warning')
|
|
47
|
+
flash('Save failed', 'error')`,
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const nextStepCalloutEntry: GalleryEntry = {
|
|
53
|
+
id: 'next-step-callout',
|
|
54
|
+
title: 'NextStepCallout',
|
|
55
|
+
importPath: '@open-mercato/ui/backend/NextStepCallout',
|
|
56
|
+
variants: [
|
|
57
|
+
{
|
|
58
|
+
id: 'basic',
|
|
59
|
+
title: 'Basic',
|
|
60
|
+
render: () => (
|
|
61
|
+
<div className="w-full">
|
|
62
|
+
<NextStepCallout
|
|
63
|
+
icon={<Rocket className="size-6" />}
|
|
64
|
+
title="Publish your catalog"
|
|
65
|
+
description="Products are imported and priced. Publishing makes them visible on every sales channel."
|
|
66
|
+
actionLabel="Publish catalog"
|
|
67
|
+
actionIcon={<Sparkles className="mr-2 size-4" />}
|
|
68
|
+
onAction={() => {}}
|
|
69
|
+
/>
|
|
70
|
+
</div>
|
|
71
|
+
),
|
|
72
|
+
code: `import { Rocket, Sparkles } from 'lucide-react'
|
|
73
|
+
import { NextStepCallout } from '@open-mercato/ui/backend/NextStepCallout'
|
|
74
|
+
|
|
75
|
+
<NextStepCallout
|
|
76
|
+
icon={<Rocket className="size-6" />}
|
|
77
|
+
title="Publish your catalog"
|
|
78
|
+
description="Products are imported and priced. Publishing makes them visible on every sales channel."
|
|
79
|
+
actionLabel="Publish catalog"
|
|
80
|
+
actionIcon={<Sparkles className="mr-2 size-4" />}
|
|
81
|
+
onAction={handlePublish}
|
|
82
|
+
/>`,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'with-steps',
|
|
86
|
+
title: 'With steps',
|
|
87
|
+
render: () => (
|
|
88
|
+
<div className="w-full">
|
|
89
|
+
<NextStepCallout
|
|
90
|
+
title="Finish store setup"
|
|
91
|
+
description="Two steps are done — connect a payment provider to start selling."
|
|
92
|
+
steps={[
|
|
93
|
+
{ id: 'import', label: 'Import products', state: 'completed' },
|
|
94
|
+
{ id: 'pricing', label: 'Set pricing', state: 'completed' },
|
|
95
|
+
{ id: 'payments', label: 'Connect payments', state: 'active' },
|
|
96
|
+
{ id: 'launch', label: 'Launch', state: 'pending' },
|
|
97
|
+
]}
|
|
98
|
+
actionLabel="Connect payments"
|
|
99
|
+
onAction={() => {}}
|
|
100
|
+
/>
|
|
101
|
+
</div>
|
|
102
|
+
),
|
|
103
|
+
code: `import { NextStepCallout } from '@open-mercato/ui/backend/NextStepCallout'
|
|
104
|
+
|
|
105
|
+
<NextStepCallout
|
|
106
|
+
title="Finish store setup"
|
|
107
|
+
description="Two steps are done — connect a payment provider to start selling."
|
|
108
|
+
steps={[
|
|
109
|
+
{ id: 'import', label: 'Import products', state: 'completed' },
|
|
110
|
+
{ id: 'pricing', label: 'Set pricing', state: 'completed' },
|
|
111
|
+
{ id: 'payments', label: 'Connect payments', state: 'active' },
|
|
112
|
+
{ id: 'launch', label: 'Launch', state: 'pending' },
|
|
113
|
+
]}
|
|
114
|
+
actionLabel="Connect payments"
|
|
115
|
+
onAction={handleConnect}
|
|
116
|
+
/>`,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: 'with-status',
|
|
120
|
+
title: 'With status progress',
|
|
121
|
+
render: () => (
|
|
122
|
+
<div className="w-full">
|
|
123
|
+
<NextStepCallout
|
|
124
|
+
title="Index your products"
|
|
125
|
+
description="Search stays disabled until the first indexing run completes."
|
|
126
|
+
actionLabel="Re-run indexing"
|
|
127
|
+
onAction={() => {}}
|
|
128
|
+
busy
|
|
129
|
+
status={{
|
|
130
|
+
tone: 'info',
|
|
131
|
+
icon: <CircleCheck className="size-4" />,
|
|
132
|
+
label: 'Indexing in progress',
|
|
133
|
+
progressValue: 64,
|
|
134
|
+
progressDescription: '1,280 of 2,000 products indexed',
|
|
135
|
+
}}
|
|
136
|
+
/>
|
|
137
|
+
</div>
|
|
138
|
+
),
|
|
139
|
+
code: `import { CircleCheck } from 'lucide-react'
|
|
140
|
+
import { NextStepCallout } from '@open-mercato/ui/backend/NextStepCallout'
|
|
141
|
+
|
|
142
|
+
<NextStepCallout
|
|
143
|
+
title="Index your products"
|
|
144
|
+
description="Search stays disabled until the first indexing run completes."
|
|
145
|
+
actionLabel="Re-run indexing"
|
|
146
|
+
onAction={handleReindex}
|
|
147
|
+
busy
|
|
148
|
+
status={{
|
|
149
|
+
tone: 'info',
|
|
150
|
+
icon: <CircleCheck className="size-4" />,
|
|
151
|
+
label: 'Indexing in progress',
|
|
152
|
+
progressValue: 64,
|
|
153
|
+
progressDescription: '1,280 of 2,000 products indexed',
|
|
154
|
+
}}
|
|
155
|
+
/>`,
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const contextHelpEntry: GalleryEntry = {
|
|
161
|
+
id: 'context-help',
|
|
162
|
+
title: 'ContextHelp',
|
|
163
|
+
importPath: '@open-mercato/ui/backend/ContextHelp',
|
|
164
|
+
variants: [
|
|
165
|
+
{
|
|
166
|
+
id: 'default',
|
|
167
|
+
title: 'default (collapsed)',
|
|
168
|
+
render: () => (
|
|
169
|
+
<div className="w-full max-w-md">
|
|
170
|
+
<ContextHelp title="How do exchange rates work?">
|
|
171
|
+
Rates refresh nightly from the configured provider. Manual overrides
|
|
172
|
+
stay pinned until you clear them.
|
|
173
|
+
</ContextHelp>
|
|
174
|
+
</div>
|
|
175
|
+
),
|
|
176
|
+
code: `import { ContextHelp } from '@open-mercato/ui/backend/ContextHelp'
|
|
177
|
+
|
|
178
|
+
<ContextHelp title="How do exchange rates work?">
|
|
179
|
+
Rates refresh nightly from the configured provider. Manual overrides
|
|
180
|
+
stay pinned until you clear them.
|
|
181
|
+
</ContextHelp>`,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
id: 'default-open',
|
|
185
|
+
title: 'defaultOpen',
|
|
186
|
+
render: () => (
|
|
187
|
+
<div className="w-full max-w-md">
|
|
188
|
+
<ContextHelp title="Why is this field required?" defaultOpen>
|
|
189
|
+
The tax office identifier is mandatory for invoices issued to
|
|
190
|
+
companies registered in the EU.
|
|
191
|
+
</ContextHelp>
|
|
192
|
+
</div>
|
|
193
|
+
),
|
|
194
|
+
code: `import { ContextHelp } from '@open-mercato/ui/backend/ContextHelp'
|
|
195
|
+
|
|
196
|
+
<ContextHelp title="Why is this field required?" defaultOpen>
|
|
197
|
+
The tax office identifier is mandatory for invoices issued to
|
|
198
|
+
companies registered in the EU.
|
|
199
|
+
</ContextHelp>`,
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
id: 'info-icon',
|
|
203
|
+
title: 'Info icon (bulb={false})',
|
|
204
|
+
render: () => (
|
|
205
|
+
<div className="w-full max-w-md">
|
|
206
|
+
<ContextHelp title="About draft orders" bulb={false} defaultOpen>
|
|
207
|
+
Draft orders are invisible to customers and skip stock reservation
|
|
208
|
+
until they are confirmed.
|
|
209
|
+
</ContextHelp>
|
|
210
|
+
</div>
|
|
211
|
+
),
|
|
212
|
+
code: `import { ContextHelp } from '@open-mercato/ui/backend/ContextHelp'
|
|
213
|
+
|
|
214
|
+
<ContextHelp title="About draft orders" bulb={false} defaultOpen>
|
|
215
|
+
Draft orders are invisible to customers and skip stock reservation
|
|
216
|
+
until they are confirmed.
|
|
217
|
+
</ContextHelp>`,
|
|
218
|
+
},
|
|
219
|
+
],
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export const entries: GalleryEntry[] = [
|
|
223
|
+
flashMessagesEntry,
|
|
224
|
+
nextStepCalloutEntry,
|
|
225
|
+
contextHelpEntry,
|
|
226
|
+
]
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { MoreHorizontal, Pencil, Plus, Trash2 } from 'lucide-react'
|
|
3
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
4
|
+
import { IconButton } from '@open-mercato/ui/primitives/icon-button'
|
|
5
|
+
import { LinkButton } from '@open-mercato/ui/primitives/link-button'
|
|
6
|
+
import { SocialButton } from '@open-mercato/ui/primitives/social-button'
|
|
7
|
+
import { FancyButton } from '@open-mercato/ui/primitives/fancy-button'
|
|
8
|
+
import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
|
|
9
|
+
import type { GalleryEntry } from '../types'
|
|
10
|
+
|
|
11
|
+
// Component titles and variant names are proper nouns from the codebase and
|
|
12
|
+
// are deliberately not translated. `code` MUST contain the entry's importPath
|
|
13
|
+
// (enforced by the registry-integrity test) and is always reviewed alongside
|
|
14
|
+
// its sibling `render`.
|
|
15
|
+
|
|
16
|
+
const buttonEntry: GalleryEntry = {
|
|
17
|
+
id: 'button',
|
|
18
|
+
title: 'Button',
|
|
19
|
+
importPath: '@open-mercato/ui/primitives/button',
|
|
20
|
+
usage: {
|
|
21
|
+
do: [
|
|
22
|
+
'One default (primary) Button per view; remaining actions step down to outline, ghost or muted.',
|
|
23
|
+
'Destructive actions use the destructive family; -outline/-soft/-ghost lower the emphasis without losing the semantics.',
|
|
24
|
+
'Default height is h-9; sm (h-8) in dense toolbars, 2xs only inside table rows.',
|
|
25
|
+
],
|
|
26
|
+
dont: [
|
|
27
|
+
'Never Button size="icon" for icon-only actions — use IconButton (correct sizing + aria-label contract).',
|
|
28
|
+
'Never style a raw <button> or <Link> to look like a Button.',
|
|
29
|
+
'The link variant is for navigation-like actions, not for mutations.',
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
descriptionKey: 'design_system.entries.button.description',
|
|
33
|
+
variants: [
|
|
34
|
+
{
|
|
35
|
+
id: 'default',
|
|
36
|
+
title: 'default',
|
|
37
|
+
render: () => <Button>Save changes</Button>,
|
|
38
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
39
|
+
|
|
40
|
+
<Button>Save changes</Button>`,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 'destructive',
|
|
44
|
+
title: 'destructive',
|
|
45
|
+
render: () => <Button variant="destructive">Delete</Button>,
|
|
46
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
47
|
+
|
|
48
|
+
<Button variant="destructive">Delete</Button>`,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'destructive-outline',
|
|
52
|
+
title: 'destructive-outline',
|
|
53
|
+
render: () => <Button variant="destructive-outline">Delete</Button>,
|
|
54
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
55
|
+
|
|
56
|
+
<Button variant="destructive-outline">Delete</Button>`,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'destructive-soft',
|
|
60
|
+
title: 'destructive-soft',
|
|
61
|
+
render: () => <Button variant="destructive-soft">Delete draft</Button>,
|
|
62
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
63
|
+
|
|
64
|
+
<Button variant="destructive-soft">Delete draft</Button>`,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'destructive-ghost',
|
|
68
|
+
title: 'destructive-ghost',
|
|
69
|
+
render: () => <Button variant="destructive-ghost">Remove</Button>,
|
|
70
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
71
|
+
|
|
72
|
+
<Button variant="destructive-ghost">Remove</Button>`,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'outline',
|
|
76
|
+
title: 'outline',
|
|
77
|
+
render: () => <Button variant="outline">Cancel</Button>,
|
|
78
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
79
|
+
|
|
80
|
+
<Button variant="outline">Cancel</Button>`,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'secondary',
|
|
84
|
+
title: 'secondary',
|
|
85
|
+
render: () => <Button variant="secondary">Duplicate</Button>,
|
|
86
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
87
|
+
|
|
88
|
+
<Button variant="secondary">Duplicate</Button>`,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: 'ghost',
|
|
92
|
+
title: 'ghost',
|
|
93
|
+
render: () => <Button variant="ghost">Dismiss</Button>,
|
|
94
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
95
|
+
|
|
96
|
+
<Button variant="ghost">Dismiss</Button>`,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: 'muted',
|
|
100
|
+
title: 'muted',
|
|
101
|
+
render: () => <Button variant="muted">Show more</Button>,
|
|
102
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
103
|
+
|
|
104
|
+
<Button variant="muted">Show more</Button>`,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'link',
|
|
108
|
+
title: 'link',
|
|
109
|
+
render: () => <Button variant="link">View details</Button>,
|
|
110
|
+
code: `import { Button } from '@open-mercato/ui/primitives/button'
|
|
111
|
+
|
|
112
|
+
<Button variant="link">View details</Button>`,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: 'sizes',
|
|
116
|
+
title: 'Sizes',
|
|
117
|
+
render: () => (
|
|
118
|
+
<>
|
|
119
|
+
<Button size="lg">Large</Button>
|
|
120
|
+
<Button size="default">Default</Button>
|
|
121
|
+
<Button size="sm">Small</Button>
|
|
122
|
+
<Button size="2xs">2X-Small</Button>
|
|
123
|
+
<Button size="icon" aria-label="Add">
|
|
124
|
+
<Plus />
|
|
125
|
+
</Button>
|
|
126
|
+
</>
|
|
127
|
+
),
|
|
128
|
+
code: `import { Plus } from 'lucide-react'
|
|
129
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
130
|
+
|
|
131
|
+
<Button size="lg">Large</Button>
|
|
132
|
+
<Button size="default">Default</Button>
|
|
133
|
+
<Button size="sm">Small</Button>
|
|
134
|
+
<Button size="2xs">2X-Small</Button>
|
|
135
|
+
<Button size="icon" aria-label="Add"><Plus /></Button>`,
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const iconButtonEntry: GalleryEntry = {
|
|
141
|
+
id: 'icon-button',
|
|
142
|
+
title: 'IconButton',
|
|
143
|
+
importPath: '@open-mercato/ui/primitives/icon-button',
|
|
144
|
+
usage: {
|
|
145
|
+
do: [
|
|
146
|
+
'Always pass aria-label — the icon is the only content.',
|
|
147
|
+
'size="default" is h-8, one step smaller than Button; use size="lg" (h-9) to align inside a Button row.',
|
|
148
|
+
],
|
|
149
|
+
dont: ['Never fake it with Button size="icon".'],
|
|
150
|
+
},
|
|
151
|
+
descriptionKey: 'design_system.entries.iconButton.description',
|
|
152
|
+
variants: [
|
|
153
|
+
{
|
|
154
|
+
id: 'variants',
|
|
155
|
+
title: 'Variants',
|
|
156
|
+
render: () => (
|
|
157
|
+
<>
|
|
158
|
+
<IconButton variant="primary" aria-label="Add">
|
|
159
|
+
<Plus />
|
|
160
|
+
</IconButton>
|
|
161
|
+
<IconButton variant="outline" aria-label="Edit">
|
|
162
|
+
<Pencil />
|
|
163
|
+
</IconButton>
|
|
164
|
+
<IconButton variant="ghost" aria-label="More">
|
|
165
|
+
<MoreHorizontal />
|
|
166
|
+
</IconButton>
|
|
167
|
+
<IconButton variant="white" aria-label="Edit">
|
|
168
|
+
<Pencil />
|
|
169
|
+
</IconButton>
|
|
170
|
+
<IconButton variant="destructive" aria-label="Delete">
|
|
171
|
+
<Trash2 />
|
|
172
|
+
</IconButton>
|
|
173
|
+
</>
|
|
174
|
+
),
|
|
175
|
+
code: `import { Pencil } from 'lucide-react'
|
|
176
|
+
import { IconButton } from '@open-mercato/ui/primitives/icon-button'
|
|
177
|
+
|
|
178
|
+
<IconButton variant="primary" aria-label="Add"><Plus /></IconButton>
|
|
179
|
+
<IconButton variant="outline" aria-label="Edit"><Pencil /></IconButton>
|
|
180
|
+
<IconButton variant="ghost" aria-label="More"><MoreHorizontal /></IconButton>
|
|
181
|
+
<IconButton variant="white" aria-label="Edit"><Pencil /></IconButton>
|
|
182
|
+
<IconButton variant="destructive" aria-label="Delete"><Trash2 /></IconButton>`,
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
id: 'sizes',
|
|
186
|
+
title: 'Sizes',
|
|
187
|
+
render: () => (
|
|
188
|
+
<>
|
|
189
|
+
<IconButton size="lg" aria-label="Edit">
|
|
190
|
+
<Pencil />
|
|
191
|
+
</IconButton>
|
|
192
|
+
<IconButton size="default" aria-label="Edit">
|
|
193
|
+
<Pencil />
|
|
194
|
+
</IconButton>
|
|
195
|
+
<IconButton size="sm" aria-label="Edit">
|
|
196
|
+
<Pencil />
|
|
197
|
+
</IconButton>
|
|
198
|
+
<IconButton size="xs" aria-label="Edit">
|
|
199
|
+
<Pencil />
|
|
200
|
+
</IconButton>
|
|
201
|
+
</>
|
|
202
|
+
),
|
|
203
|
+
code: `import { Pencil } from 'lucide-react'
|
|
204
|
+
import { IconButton } from '@open-mercato/ui/primitives/icon-button'
|
|
205
|
+
|
|
206
|
+
<IconButton size="lg" aria-label="Edit"><Pencil /></IconButton>
|
|
207
|
+
<IconButton size="default" aria-label="Edit"><Pencil /></IconButton>
|
|
208
|
+
<IconButton size="sm" aria-label="Edit"><Pencil /></IconButton>
|
|
209
|
+
<IconButton size="xs" aria-label="Edit"><Pencil /></IconButton>`,
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: 'full-radius',
|
|
213
|
+
title: 'fullRadius',
|
|
214
|
+
render: () => (
|
|
215
|
+
<IconButton fullRadius aria-label="Add">
|
|
216
|
+
<Plus />
|
|
217
|
+
</IconButton>
|
|
218
|
+
),
|
|
219
|
+
code: `import { Plus } from 'lucide-react'
|
|
220
|
+
import { IconButton } from '@open-mercato/ui/primitives/icon-button'
|
|
221
|
+
|
|
222
|
+
<IconButton fullRadius aria-label="Add"><Plus /></IconButton>`,
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const linkButtonEntry: GalleryEntry = {
|
|
228
|
+
id: 'link-button',
|
|
229
|
+
title: 'LinkButton',
|
|
230
|
+
importPath: '@open-mercato/ui/primitives/link-button',
|
|
231
|
+
descriptionKey: 'design_system.entries.linkButton.description',
|
|
232
|
+
variants: [
|
|
233
|
+
{
|
|
234
|
+
id: 'variants',
|
|
235
|
+
title: 'Variants',
|
|
236
|
+
render: () => (
|
|
237
|
+
<>
|
|
238
|
+
<LinkButton>primary</LinkButton>
|
|
239
|
+
<LinkButton variant="gray">gray</LinkButton>
|
|
240
|
+
<LinkButton variant="black">black</LinkButton>
|
|
241
|
+
<LinkButton variant="error">error</LinkButton>
|
|
242
|
+
</>
|
|
243
|
+
),
|
|
244
|
+
code: `import { LinkButton } from '@open-mercato/ui/primitives/link-button'
|
|
245
|
+
|
|
246
|
+
<LinkButton>primary</LinkButton>
|
|
247
|
+
<LinkButton variant="gray">gray</LinkButton>
|
|
248
|
+
<LinkButton variant="black">black</LinkButton>
|
|
249
|
+
<LinkButton variant="error">error</LinkButton>`,
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
id: 'underline',
|
|
253
|
+
title: 'Underline',
|
|
254
|
+
render: () => (
|
|
255
|
+
<>
|
|
256
|
+
<LinkButton underline="always">always</LinkButton>
|
|
257
|
+
<LinkButton underline="hover">hover</LinkButton>
|
|
258
|
+
<LinkButton underline="none">none</LinkButton>
|
|
259
|
+
</>
|
|
260
|
+
),
|
|
261
|
+
code: `import { LinkButton } from '@open-mercato/ui/primitives/link-button'
|
|
262
|
+
|
|
263
|
+
<LinkButton underline="always">always</LinkButton>
|
|
264
|
+
<LinkButton underline="hover">hover</LinkButton>
|
|
265
|
+
<LinkButton underline="none">none</LinkButton>`,
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
id: 'as-anchor',
|
|
269
|
+
title: 'As anchor (asChild)',
|
|
270
|
+
render: () => (
|
|
271
|
+
<LinkButton asChild>
|
|
272
|
+
<a href="#gallery-entry-link-button">Open link</a>
|
|
273
|
+
</LinkButton>
|
|
274
|
+
),
|
|
275
|
+
code: `import { LinkButton } from '@open-mercato/ui/primitives/link-button'
|
|
276
|
+
|
|
277
|
+
<LinkButton asChild>
|
|
278
|
+
<a href="/backend/docs">Open link</a>
|
|
279
|
+
</LinkButton>`,
|
|
280
|
+
},
|
|
281
|
+
],
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const socialButtonEntry: GalleryEntry = {
|
|
285
|
+
id: 'social-button',
|
|
286
|
+
title: 'SocialButton',
|
|
287
|
+
importPath: '@open-mercato/ui/primitives/social-button',
|
|
288
|
+
descriptionKey: 'design_system.entries.socialButton.description',
|
|
289
|
+
variants: [
|
|
290
|
+
{
|
|
291
|
+
id: 'filled',
|
|
292
|
+
title: 'filled',
|
|
293
|
+
render: () => (
|
|
294
|
+
<>
|
|
295
|
+
<SocialButton brand="github">Continue with GitHub</SocialButton>
|
|
296
|
+
<SocialButton brand="google">Continue with Google</SocialButton>
|
|
297
|
+
</>
|
|
298
|
+
),
|
|
299
|
+
code: `import { SocialButton } from '@open-mercato/ui/primitives/social-button'
|
|
300
|
+
|
|
301
|
+
<SocialButton brand="github">Continue with GitHub</SocialButton>
|
|
302
|
+
<SocialButton brand="google">Continue with Google</SocialButton>`,
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
id: 'stroke',
|
|
306
|
+
title: 'stroke',
|
|
307
|
+
render: () => (
|
|
308
|
+
<>
|
|
309
|
+
<SocialButton brand="github" appearance="stroke">Continue with GitHub</SocialButton>
|
|
310
|
+
<SocialButton brand="linkedin" appearance="stroke">Continue with LinkedIn</SocialButton>
|
|
311
|
+
</>
|
|
312
|
+
),
|
|
313
|
+
code: `import { SocialButton } from '@open-mercato/ui/primitives/social-button'
|
|
314
|
+
|
|
315
|
+
<SocialButton brand="github" appearance="stroke">Continue with GitHub</SocialButton>
|
|
316
|
+
<SocialButton brand="linkedin" appearance="stroke">Continue with LinkedIn</SocialButton>`,
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const fancyButtonEntry: GalleryEntry = {
|
|
322
|
+
id: 'fancy-button',
|
|
323
|
+
title: 'FancyButton',
|
|
324
|
+
importPath: '@open-mercato/ui/primitives/fancy-button',
|
|
325
|
+
descriptionKey: 'design_system.entries.fancyButton.description',
|
|
326
|
+
variants: [
|
|
327
|
+
{
|
|
328
|
+
id: 'intents',
|
|
329
|
+
title: 'Intents',
|
|
330
|
+
render: () => (
|
|
331
|
+
<>
|
|
332
|
+
<FancyButton intent="neutral">Neutral</FancyButton>
|
|
333
|
+
<FancyButton intent="basic">Basic</FancyButton>
|
|
334
|
+
<FancyButton intent="primary">Primary</FancyButton>
|
|
335
|
+
<FancyButton intent="destructive">Destructive</FancyButton>
|
|
336
|
+
</>
|
|
337
|
+
),
|
|
338
|
+
code: `import { FancyButton } from '@open-mercato/ui/primitives/fancy-button'
|
|
339
|
+
|
|
340
|
+
<FancyButton intent="neutral">Neutral</FancyButton>
|
|
341
|
+
<FancyButton intent="basic">Basic</FancyButton>
|
|
342
|
+
<FancyButton intent="primary">Primary</FancyButton>
|
|
343
|
+
<FancyButton intent="destructive">Destructive</FancyButton>`,
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
id: 'sizes',
|
|
347
|
+
title: 'Sizes',
|
|
348
|
+
render: () => (
|
|
349
|
+
<>
|
|
350
|
+
<FancyButton size="default">Default</FancyButton>
|
|
351
|
+
<FancyButton size="sm">Small</FancyButton>
|
|
352
|
+
<FancyButton size="xs">X-Small</FancyButton>
|
|
353
|
+
</>
|
|
354
|
+
),
|
|
355
|
+
code: `import { FancyButton } from '@open-mercato/ui/primitives/fancy-button'
|
|
356
|
+
|
|
357
|
+
<FancyButton size="default">Default</FancyButton>
|
|
358
|
+
<FancyButton size="sm">Small</FancyButton>
|
|
359
|
+
<FancyButton size="xs">X-Small</FancyButton>`,
|
|
360
|
+
},
|
|
361
|
+
],
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
const buttonGroupEntry: GalleryEntry = {
|
|
365
|
+
id: 'button-group',
|
|
366
|
+
title: 'ButtonGroup',
|
|
367
|
+
importPath: '@open-mercato/ui/primitives/button-group',
|
|
368
|
+
descriptionKey: 'design_system.entries.buttonGroup.description',
|
|
369
|
+
variants: [
|
|
370
|
+
{
|
|
371
|
+
id: 'horizontal',
|
|
372
|
+
title: 'Horizontal',
|
|
373
|
+
render: () => (
|
|
374
|
+
<ButtonGroup>
|
|
375
|
+
<Button variant="outline">Save</Button>
|
|
376
|
+
<Button variant="outline">Save & New</Button>
|
|
377
|
+
<IconButton aria-label="More">
|
|
378
|
+
<MoreHorizontal />
|
|
379
|
+
</IconButton>
|
|
380
|
+
</ButtonGroup>
|
|
381
|
+
),
|
|
382
|
+
code: `import { MoreHorizontal } from 'lucide-react'
|
|
383
|
+
import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
|
|
384
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
385
|
+
import { IconButton } from '@open-mercato/ui/primitives/icon-button'
|
|
386
|
+
|
|
387
|
+
<ButtonGroup>
|
|
388
|
+
<Button variant="outline">Save</Button>
|
|
389
|
+
<Button variant="outline">Save & New</Button>
|
|
390
|
+
<IconButton aria-label="More"><MoreHorizontal /></IconButton>
|
|
391
|
+
</ButtonGroup>`,
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
id: 'vertical',
|
|
395
|
+
title: 'Vertical',
|
|
396
|
+
render: () => (
|
|
397
|
+
<ButtonGroup orientation="vertical" size="sm">
|
|
398
|
+
<Button variant="outline" size="sm">Top</Button>
|
|
399
|
+
<Button variant="outline" size="sm">Middle</Button>
|
|
400
|
+
<Button variant="outline" size="sm">Bottom</Button>
|
|
401
|
+
</ButtonGroup>
|
|
402
|
+
),
|
|
403
|
+
code: `import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
|
|
404
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
405
|
+
|
|
406
|
+
<ButtonGroup orientation="vertical" size="sm">
|
|
407
|
+
<Button variant="outline" size="sm">Top</Button>
|
|
408
|
+
<Button variant="outline" size="sm">Middle</Button>
|
|
409
|
+
<Button variant="outline" size="sm">Bottom</Button>
|
|
410
|
+
</ButtonGroup>`,
|
|
411
|
+
},
|
|
412
|
+
],
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
export const entries: GalleryEntry[] = [
|
|
416
|
+
buttonEntry,
|
|
417
|
+
iconButtonEntry,
|
|
418
|
+
linkButtonEntry,
|
|
419
|
+
socialButtonEntry,
|
|
420
|
+
fancyButtonEntry,
|
|
421
|
+
buttonGroupEntry,
|
|
422
|
+
]
|