@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,307 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import {
|
|
3
|
+
ScheduleAgenda,
|
|
4
|
+
ScheduleGrid,
|
|
5
|
+
ScheduleToolbar,
|
|
6
|
+
ScheduleView,
|
|
7
|
+
type ScheduleItem,
|
|
8
|
+
type ScheduleRange,
|
|
9
|
+
type ScheduleViewMode,
|
|
10
|
+
} from '@open-mercato/ui/backend/schedule'
|
|
11
|
+
import type { GalleryEntry } from '../types'
|
|
12
|
+
|
|
13
|
+
// Component titles and variant names are proper nouns from the codebase and
|
|
14
|
+
// are deliberately not translated. `code` MUST contain the entry's importPath
|
|
15
|
+
// (enforced by the registry-integrity test) and is always reviewed alongside
|
|
16
|
+
// its sibling `render`.
|
|
17
|
+
|
|
18
|
+
// Fixed sample dates (June 2026) — previews must not depend on "today" so the
|
|
19
|
+
// gallery renders identically on any day.
|
|
20
|
+
const weekRange: ScheduleRange = {
|
|
21
|
+
start: new Date(2026, 5, 7),
|
|
22
|
+
end: new Date(2026, 5, 13, 23, 59, 59, 999),
|
|
23
|
+
}
|
|
24
|
+
const monthRange: ScheduleRange = {
|
|
25
|
+
start: new Date(2026, 5, 1),
|
|
26
|
+
end: new Date(2026, 5, 30, 23, 59, 59, 999),
|
|
27
|
+
}
|
|
28
|
+
const boardRange: ScheduleRange = {
|
|
29
|
+
start: new Date(2026, 5, 8),
|
|
30
|
+
end: new Date(2026, 5, 10, 23, 59, 59, 999),
|
|
31
|
+
}
|
|
32
|
+
const emptyDayRange: ScheduleRange = {
|
|
33
|
+
start: new Date(2026, 5, 11),
|
|
34
|
+
end: new Date(2026, 5, 11, 23, 59, 59, 999),
|
|
35
|
+
}
|
|
36
|
+
const agendaRange: ScheduleRange = {
|
|
37
|
+
start: new Date(2026, 5, 8),
|
|
38
|
+
end: new Date(2026, 5, 9, 23, 59, 59, 999),
|
|
39
|
+
}
|
|
40
|
+
const draftDayRange: ScheduleRange = {
|
|
41
|
+
start: new Date(2026, 5, 12),
|
|
42
|
+
end: new Date(2026, 5, 12, 23, 59, 59, 999),
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const sampleItems: ScheduleItem[] = [
|
|
46
|
+
{
|
|
47
|
+
id: 'availability-1',
|
|
48
|
+
kind: 'availability',
|
|
49
|
+
title: 'Open studio hours',
|
|
50
|
+
startsAt: new Date(2026, 5, 8, 9, 0),
|
|
51
|
+
endsAt: new Date(2026, 5, 8, 12, 0),
|
|
52
|
+
status: 'confirmed',
|
|
53
|
+
subjectType: 'member',
|
|
54
|
+
subjectId: 'member-1',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'event-1',
|
|
58
|
+
kind: 'event',
|
|
59
|
+
title: 'Fitting — Anna Nowak',
|
|
60
|
+
startsAt: new Date(2026, 5, 8, 13, 0),
|
|
61
|
+
endsAt: new Date(2026, 5, 8, 14, 0),
|
|
62
|
+
status: 'negotiation',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'event-2',
|
|
66
|
+
kind: 'event',
|
|
67
|
+
title: 'Delivery walkthrough',
|
|
68
|
+
startsAt: new Date(2026, 5, 9, 10, 0),
|
|
69
|
+
endsAt: new Date(2026, 5, 9, 11, 30),
|
|
70
|
+
status: 'confirmed',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'exception-1',
|
|
74
|
+
kind: 'exception',
|
|
75
|
+
title: 'Studio closed',
|
|
76
|
+
startsAt: new Date(2026, 5, 10, 0, 0),
|
|
77
|
+
endsAt: new Date(2026, 5, 10, 23, 59),
|
|
78
|
+
status: 'cancelled',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'event-3',
|
|
82
|
+
kind: 'event',
|
|
83
|
+
title: 'Quarterly review',
|
|
84
|
+
startsAt: new Date(2026, 5, 12, 15, 0),
|
|
85
|
+
endsAt: new Date(2026, 5, 12, 16, 0),
|
|
86
|
+
status: 'draft',
|
|
87
|
+
},
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
function initialRangeFor(view: ScheduleViewMode): ScheduleRange {
|
|
91
|
+
return view === 'month' ? monthRange : weekRange
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function DemoScheduleView({ initialView }: { initialView: ScheduleViewMode }) {
|
|
95
|
+
const [view, setView] = React.useState<ScheduleViewMode>(initialView)
|
|
96
|
+
const [range, setRange] = React.useState<ScheduleRange>(initialRangeFor(initialView))
|
|
97
|
+
const [timezone, setTimezone] = React.useState('Europe/Warsaw')
|
|
98
|
+
return (
|
|
99
|
+
<ScheduleView
|
|
100
|
+
items={sampleItems}
|
|
101
|
+
view={view}
|
|
102
|
+
range={range}
|
|
103
|
+
timezone={timezone}
|
|
104
|
+
onViewChange={setView}
|
|
105
|
+
onRangeChange={setRange}
|
|
106
|
+
onTimezoneChange={setTimezone}
|
|
107
|
+
className="w-full"
|
|
108
|
+
/>
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function DemoScheduleToolbar({ initialView }: { initialView: ScheduleViewMode }) {
|
|
113
|
+
const [view, setView] = React.useState<ScheduleViewMode>(initialView)
|
|
114
|
+
const [range, setRange] = React.useState<ScheduleRange>(initialRangeFor(initialView))
|
|
115
|
+
const [timezone, setTimezone] = React.useState('Europe/Warsaw')
|
|
116
|
+
return (
|
|
117
|
+
<ScheduleToolbar
|
|
118
|
+
view={view}
|
|
119
|
+
range={range}
|
|
120
|
+
timezone={timezone}
|
|
121
|
+
onViewChange={setView}
|
|
122
|
+
onRangeChange={setRange}
|
|
123
|
+
onTimezoneChange={setTimezone}
|
|
124
|
+
className="w-full"
|
|
125
|
+
/>
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const scheduleViewEntry: GalleryEntry = {
|
|
130
|
+
id: 'schedule-view',
|
|
131
|
+
title: 'ScheduleView',
|
|
132
|
+
importPath: '@open-mercato/ui/backend/schedule',
|
|
133
|
+
variants: [
|
|
134
|
+
{
|
|
135
|
+
id: 'week',
|
|
136
|
+
title: 'Week (controlled)',
|
|
137
|
+
render: () => <DemoScheduleView initialView="week" />,
|
|
138
|
+
code: `import { ScheduleView, type ScheduleItem, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'
|
|
139
|
+
|
|
140
|
+
const [view, setView] = React.useState<ScheduleViewMode>('week')
|
|
141
|
+
const [range, setRange] = React.useState<ScheduleRange>({
|
|
142
|
+
start: new Date(2026, 5, 7),
|
|
143
|
+
end: new Date(2026, 5, 13, 23, 59, 59, 999),
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
<ScheduleView
|
|
147
|
+
items={items /* ScheduleItem[] mapped from your domain records */}
|
|
148
|
+
view={view}
|
|
149
|
+
range={range}
|
|
150
|
+
timezone="Europe/Warsaw"
|
|
151
|
+
onViewChange={setView}
|
|
152
|
+
onRangeChange={setRange}
|
|
153
|
+
/>`,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: 'month',
|
|
157
|
+
title: 'Month (controlled)',
|
|
158
|
+
render: () => <DemoScheduleView initialView="month" />,
|
|
159
|
+
code: `import { ScheduleView, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'
|
|
160
|
+
|
|
161
|
+
const [view, setView] = React.useState<ScheduleViewMode>('month')
|
|
162
|
+
const [range, setRange] = React.useState<ScheduleRange>({
|
|
163
|
+
start: new Date(2026, 5, 1),
|
|
164
|
+
end: new Date(2026, 5, 30, 23, 59, 59, 999),
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
<ScheduleView items={items} view={view} range={range} onViewChange={setView} onRangeChange={setRange} />`,
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const scheduleToolbarEntry: GalleryEntry = {
|
|
173
|
+
id: 'schedule-toolbar',
|
|
174
|
+
title: 'ScheduleToolbar',
|
|
175
|
+
importPath: '@open-mercato/ui/backend/schedule',
|
|
176
|
+
variants: [
|
|
177
|
+
{
|
|
178
|
+
id: 'week-with-timezone',
|
|
179
|
+
title: 'Week range with timezone',
|
|
180
|
+
render: () => <DemoScheduleToolbar initialView="week" />,
|
|
181
|
+
code: `import { ScheduleToolbar, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'
|
|
182
|
+
|
|
183
|
+
const [view, setView] = React.useState<ScheduleViewMode>('week')
|
|
184
|
+
const [range, setRange] = React.useState<ScheduleRange>({
|
|
185
|
+
start: new Date(2026, 5, 7),
|
|
186
|
+
end: new Date(2026, 5, 13, 23, 59, 59, 999),
|
|
187
|
+
})
|
|
188
|
+
const [timezone, setTimezone] = React.useState('Europe/Warsaw')
|
|
189
|
+
|
|
190
|
+
<ScheduleToolbar
|
|
191
|
+
view={view}
|
|
192
|
+
range={range}
|
|
193
|
+
timezone={timezone}
|
|
194
|
+
onViewChange={setView}
|
|
195
|
+
onRangeChange={setRange}
|
|
196
|
+
onTimezoneChange={setTimezone}
|
|
197
|
+
/>`,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
id: 'month-range',
|
|
201
|
+
title: 'Month range',
|
|
202
|
+
render: () => <DemoScheduleToolbar initialView="month" />,
|
|
203
|
+
code: `import { ScheduleToolbar, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'
|
|
204
|
+
|
|
205
|
+
const [view, setView] = React.useState<ScheduleViewMode>('month')
|
|
206
|
+
const [range, setRange] = React.useState<ScheduleRange>({
|
|
207
|
+
start: new Date(2026, 5, 1),
|
|
208
|
+
end: new Date(2026, 5, 30, 23, 59, 59, 999),
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
<ScheduleToolbar view={view} range={range} onViewChange={setView} onRangeChange={setRange} />`,
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const scheduleGridEntry: GalleryEntry = {
|
|
217
|
+
id: 'schedule-grid',
|
|
218
|
+
title: 'ScheduleGrid',
|
|
219
|
+
importPath: '@open-mercato/ui/backend/schedule',
|
|
220
|
+
variants: [
|
|
221
|
+
{
|
|
222
|
+
id: 'three-day-board',
|
|
223
|
+
title: 'Three-day board',
|
|
224
|
+
render: () => (
|
|
225
|
+
<ScheduleGrid
|
|
226
|
+
items={sampleItems}
|
|
227
|
+
range={boardRange}
|
|
228
|
+
timezone="Europe/Warsaw"
|
|
229
|
+
onItemClick={() => {}}
|
|
230
|
+
onSlotClick={() => {}}
|
|
231
|
+
className="w-full"
|
|
232
|
+
/>
|
|
233
|
+
),
|
|
234
|
+
code: `import { ScheduleGrid, type ScheduleItem } from '@open-mercato/ui/backend/schedule'
|
|
235
|
+
|
|
236
|
+
<ScheduleGrid
|
|
237
|
+
items={items /* ScheduleItem[] */}
|
|
238
|
+
range={{ start: new Date(2026, 5, 8), end: new Date(2026, 5, 10, 23, 59, 59, 999) }}
|
|
239
|
+
timezone="Europe/Warsaw"
|
|
240
|
+
onItemClick={(item) => openItem(item)}
|
|
241
|
+
onSlotClick={(slot) => createDraft(slot)}
|
|
242
|
+
/>`,
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
id: 'read-only-empty',
|
|
246
|
+
title: 'Read-only empty day',
|
|
247
|
+
render: () => <ScheduleGrid items={[]} range={emptyDayRange} className="w-full" />,
|
|
248
|
+
code: `import { ScheduleGrid } from '@open-mercato/ui/backend/schedule'
|
|
249
|
+
|
|
250
|
+
<ScheduleGrid
|
|
251
|
+
items={[]}
|
|
252
|
+
range={{ start: new Date(2026, 5, 11), end: new Date(2026, 5, 11, 23, 59, 59, 999) }}
|
|
253
|
+
/>`,
|
|
254
|
+
},
|
|
255
|
+
],
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const scheduleAgendaEntry: GalleryEntry = {
|
|
259
|
+
id: 'schedule-agenda',
|
|
260
|
+
title: 'ScheduleAgenda',
|
|
261
|
+
importPath: '@open-mercato/ui/backend/schedule',
|
|
262
|
+
variants: [
|
|
263
|
+
{
|
|
264
|
+
id: 'two-days',
|
|
265
|
+
title: 'Two days with statuses',
|
|
266
|
+
render: () => (
|
|
267
|
+
<ScheduleAgenda
|
|
268
|
+
items={sampleItems}
|
|
269
|
+
range={agendaRange}
|
|
270
|
+
timezone="Europe/Warsaw"
|
|
271
|
+
onItemClick={() => {}}
|
|
272
|
+
onSlotClick={() => {}}
|
|
273
|
+
className="w-full"
|
|
274
|
+
/>
|
|
275
|
+
),
|
|
276
|
+
code: `import { ScheduleAgenda, type ScheduleItem } from '@open-mercato/ui/backend/schedule'
|
|
277
|
+
|
|
278
|
+
<ScheduleAgenda
|
|
279
|
+
items={items /* ScheduleItem[] */}
|
|
280
|
+
range={{ start: new Date(2026, 5, 8), end: new Date(2026, 5, 9, 23, 59, 59, 999) }}
|
|
281
|
+
timezone="Europe/Warsaw"
|
|
282
|
+
onItemClick={(item) => openItem(item)}
|
|
283
|
+
onSlotClick={(slot) => createDraft(slot)}
|
|
284
|
+
/>`,
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
id: 'read-only-day',
|
|
288
|
+
title: 'Read-only day (draft item)',
|
|
289
|
+
render: () => (
|
|
290
|
+
<ScheduleAgenda items={sampleItems} range={draftDayRange} className="w-full" />
|
|
291
|
+
),
|
|
292
|
+
code: `import { ScheduleAgenda } from '@open-mercato/ui/backend/schedule'
|
|
293
|
+
|
|
294
|
+
<ScheduleAgenda
|
|
295
|
+
items={items}
|
|
296
|
+
range={{ start: new Date(2026, 5, 12), end: new Date(2026, 5, 12, 23, 59, 59, 999) }}
|
|
297
|
+
/>`,
|
|
298
|
+
},
|
|
299
|
+
],
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export const entries: GalleryEntry[] = [
|
|
303
|
+
scheduleViewEntry,
|
|
304
|
+
scheduleToolbarEntry,
|
|
305
|
+
scheduleGridEntry,
|
|
306
|
+
scheduleAgendaEntry,
|
|
307
|
+
]
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import {
|
|
3
|
+
Palette,
|
|
4
|
+
Shapes,
|
|
5
|
+
MousePointerClick,
|
|
6
|
+
TextCursorInput,
|
|
7
|
+
CalendarDays,
|
|
8
|
+
BellRing,
|
|
9
|
+
Layers,
|
|
10
|
+
Compass,
|
|
11
|
+
Table2,
|
|
12
|
+
BarChart3,
|
|
13
|
+
Filter,
|
|
14
|
+
PanelsTopLeft,
|
|
15
|
+
LayoutTemplate,
|
|
16
|
+
Megaphone,
|
|
17
|
+
Bell,
|
|
18
|
+
CalendarClock,
|
|
19
|
+
Mail,
|
|
20
|
+
} from 'lucide-react'
|
|
21
|
+
import type { GalleryFamily } from './types'
|
|
22
|
+
|
|
23
|
+
const familyIcon = (Icon: typeof Palette) => React.createElement(Icon, { className: 'size-4', 'aria-hidden': true })
|
|
24
|
+
|
|
25
|
+
/** The DS Figma file id — every `figmaNodeId` in gallery entries points into this file. */
|
|
26
|
+
export const DS_FIGMA_FILE = 'qCq9z6q1if0mpoRstV5OEA'
|
|
27
|
+
|
|
28
|
+
/** Base of the deep links into the monorepo DS docs (`.ai/ui-components.md`). */
|
|
29
|
+
export const DS_DOCS_URL = 'https://github.com/open-mercato/open-mercato/blob/main/.ai/ui-components.md'
|
|
30
|
+
|
|
31
|
+
/** Route of the gallery backend page; used for section-nav hrefs and deep links. */
|
|
32
|
+
export const GALLERY_BASE_PATH = '/backend/design-system'
|
|
33
|
+
|
|
34
|
+
/** Builds a Figma deep link for a `nodeId` in `<page>:<node>` format. */
|
|
35
|
+
export function figmaNodeUrl(nodeId: string): string {
|
|
36
|
+
return `https://www.figma.com/design/${DS_FIGMA_FILE}/?node-id=${nodeId.replace(':', '-')}`
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Family manifest. Each family's entries live in `entries/<family>.tsx` and are
|
|
41
|
+
* loaded lazily via a dynamic import so a family's primitives (and their
|
|
42
|
+
* dependencies) only load when its section is opened.
|
|
43
|
+
*
|
|
44
|
+
* Adding a family: add the manifest row here and create `entries/<id>.tsx`
|
|
45
|
+
* exporting `entries: GalleryEntry[]`. The coverage-guard test
|
|
46
|
+
* (`__tests__/gallery-coverage.test.ts`) will tell you which primitives the
|
|
47
|
+
* new file must cover.
|
|
48
|
+
*/
|
|
49
|
+
export const galleryFamilies: GalleryFamily[] = [
|
|
50
|
+
{
|
|
51
|
+
id: 'foundations',
|
|
52
|
+
labelKey: 'design_system.families.foundations',
|
|
53
|
+
icon: familyIcon(Palette),
|
|
54
|
+
load: () => import('./entries/foundations'),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'icons',
|
|
58
|
+
labelKey: 'design_system.families.icons',
|
|
59
|
+
icon: familyIcon(Shapes),
|
|
60
|
+
load: () => import('./entries/icons'),
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'buttons',
|
|
64
|
+
labelKey: 'design_system.families.buttons',
|
|
65
|
+
icon: familyIcon(MousePointerClick),
|
|
66
|
+
load: () => import('./entries/buttons'),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'inputs',
|
|
70
|
+
labelKey: 'design_system.families.inputs',
|
|
71
|
+
icon: familyIcon(TextCursorInput),
|
|
72
|
+
load: () => import('./entries/inputs'),
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'dates',
|
|
76
|
+
labelKey: 'design_system.families.dates',
|
|
77
|
+
icon: familyIcon(CalendarDays),
|
|
78
|
+
load: () => import('./entries/dates'),
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'feedback',
|
|
82
|
+
labelKey: 'design_system.families.feedback',
|
|
83
|
+
icon: familyIcon(BellRing),
|
|
84
|
+
load: () => import('./entries/feedback'),
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: 'overlays',
|
|
88
|
+
labelKey: 'design_system.families.overlays',
|
|
89
|
+
icon: familyIcon(Layers),
|
|
90
|
+
load: () => import('./entries/overlays'),
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'navigation',
|
|
94
|
+
labelKey: 'design_system.families.navigation',
|
|
95
|
+
icon: familyIcon(Compass),
|
|
96
|
+
load: () => import('./entries/navigation'),
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: 'display',
|
|
100
|
+
labelKey: 'design_system.families.display',
|
|
101
|
+
icon: familyIcon(Table2),
|
|
102
|
+
load: () => import('./entries/display'),
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: 'charts',
|
|
106
|
+
labelKey: 'design_system.families.charts',
|
|
107
|
+
icon: familyIcon(BarChart3),
|
|
108
|
+
load: () => import('./entries/charts'),
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: 'filters',
|
|
112
|
+
labelKey: 'design_system.families.filters',
|
|
113
|
+
icon: familyIcon(Filter),
|
|
114
|
+
load: () => import('./entries/filters'),
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: 'detail',
|
|
118
|
+
labelKey: 'design_system.families.detail',
|
|
119
|
+
icon: familyIcon(PanelsTopLeft),
|
|
120
|
+
load: () => import('./entries/detail'),
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 'scaffolding',
|
|
124
|
+
labelKey: 'design_system.families.scaffolding',
|
|
125
|
+
icon: familyIcon(LayoutTemplate),
|
|
126
|
+
load: () => import('./entries/scaffolding'),
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
id: 'banners',
|
|
130
|
+
labelKey: 'design_system.families.banners',
|
|
131
|
+
icon: familyIcon(Megaphone),
|
|
132
|
+
load: () => import('./entries/banners'),
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
id: 'notifications',
|
|
136
|
+
labelKey: 'design_system.families.notifications',
|
|
137
|
+
icon: familyIcon(Bell),
|
|
138
|
+
load: () => import('./entries/notifications'),
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
id: 'schedule',
|
|
142
|
+
labelKey: 'design_system.families.schedule',
|
|
143
|
+
icon: familyIcon(CalendarClock),
|
|
144
|
+
load: () => import('./entries/schedule'),
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'messages',
|
|
148
|
+
labelKey: 'design_system.families.messages',
|
|
149
|
+
icon: familyIcon(Mail),
|
|
150
|
+
load: () => import('./entries/messages'),
|
|
151
|
+
},
|
|
152
|
+
]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type React from 'react'
|
|
2
|
+
|
|
3
|
+
export type GalleryVariant = {
|
|
4
|
+
id: string // 'destructive-soft'
|
|
5
|
+
title: string // human label; component/variant names are not translated
|
|
6
|
+
render: () => React.ReactNode // live preview, real primitives only
|
|
7
|
+
code: string // the snippet the copy button yields
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type GalleryUsage = {
|
|
11
|
+
do?: string[] // when/how to use — developer-facing docs prose (English, like ui-components.md)
|
|
12
|
+
dont?: string[] // anti-patterns for this component
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type GalleryEntry = {
|
|
16
|
+
usage?: GalleryUsage
|
|
17
|
+
keywords?: string[] // extra search aliases (e.g. 'radiobutton' for Radio)
|
|
18
|
+
id: string // 'button' — unique across the whole gallery
|
|
19
|
+
title: string // 'Button'
|
|
20
|
+
importPath: string // '@open-mercato/ui/primitives/button'
|
|
21
|
+
descriptionKey?: string // i18n key for the one-line summary
|
|
22
|
+
docsAnchor?: string // '#button' into .ai/ui-components.md (monorepo) — hidden when docs are absent
|
|
23
|
+
figmaNodeId?: string // node in file qCq9z6q1if0mpoRstV5OEA
|
|
24
|
+
variants: GalleryVariant[]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type GalleryFamily = {
|
|
28
|
+
id: string // 'charts'
|
|
29
|
+
labelKey: string // i18n key for the family label
|
|
30
|
+
icon?: React.ReactNode // section-nav icon (lucide, size-4)
|
|
31
|
+
load: () => Promise<{ entries: GalleryEntry[] }> // next/dynamic-compatible loader
|
|
32
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"file": "gallery/components/GalleryShell.tsx",
|
|
6
|
+
"kind": "jsx-attr",
|
|
7
|
+
"match": "Design system",
|
|
8
|
+
"reason": "English fallback for titleKey='design_system.nav.title'; the translated value comes from the module i18n files."
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"file": "gallery/entries/banners.tsx",
|
|
12
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"file": "gallery/entries/buttons.tsx",
|
|
16
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"file": "gallery/entries/charts.tsx",
|
|
20
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"file": "gallery/entries/dates.tsx",
|
|
24
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"file": "gallery/entries/detail.tsx",
|
|
28
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"file": "gallery/entries/display.tsx",
|
|
32
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"file": "gallery/entries/feedback.tsx",
|
|
36
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"file": "gallery/entries/filters.tsx",
|
|
40
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"file": "gallery/entries/inputs.tsx",
|
|
44
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"file": "gallery/entries/messages.tsx",
|
|
48
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"file": "gallery/entries/navigation.tsx",
|
|
52
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"file": "gallery/entries/notifications.tsx",
|
|
56
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"file": "gallery/entries/overlays.tsx",
|
|
60
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"file": "gallery/entries/scaffolding.tsx",
|
|
64
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"file": "gallery/entries/schedule.tsx",
|
|
68
|
+
"reason": "Gallery demo content: live previews and their copyable code snippets are developer-facing technical content, deliberately untranslated (spec 2026-07-05-ds-live-component-gallery.md)."
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"design_system.entries.button.description": "Primärer Aktions-Button mit der vollen DS-Varianten- und Größenskala.",
|
|
3
|
+
"design_system.entries.buttonGroup.description": "Verbundene Gruppe zusammengehöriger Aktions-Buttons mit gemeinsamem Rahmen.",
|
|
4
|
+
"design_system.entries.fancyButton.description": "Marketing-Button mit Verlauf für hervorgehobene Aktionen.",
|
|
5
|
+
"design_system.entries.iconButton.description": "Quadratischer Button nur mit Icon; erfordert immer ein aria-label.",
|
|
6
|
+
"design_system.entries.linkButton.description": "Textlink im Stil eines DS-Bedienelements.",
|
|
7
|
+
"design_system.entries.socialButton.description": "Authentifizierungs-Button in Markenfarben für Social Sign-in.",
|
|
8
|
+
"design_system.families.banners": "Banner & Hinweise",
|
|
9
|
+
"design_system.families.buttons": "Buttons",
|
|
10
|
+
"design_system.families.charts": "Diagramme",
|
|
11
|
+
"design_system.families.dates": "Datum & Uhrzeit",
|
|
12
|
+
"design_system.families.detail": "Detailabschnitte",
|
|
13
|
+
"design_system.families.display": "Datenanzeige",
|
|
14
|
+
"design_system.families.feedback": "Rückmeldungen",
|
|
15
|
+
"design_system.families.filters": "Filter",
|
|
16
|
+
"design_system.families.foundations": "Grundlagen",
|
|
17
|
+
"design_system.families.icons": "Icons",
|
|
18
|
+
"design_system.families.inputs": "Eingabefelder",
|
|
19
|
+
"design_system.families.messages": "Nachrichten",
|
|
20
|
+
"design_system.families.navigation": "Navigation",
|
|
21
|
+
"design_system.families.notifications": "Benachrichtigungen",
|
|
22
|
+
"design_system.families.overlays": "Overlays",
|
|
23
|
+
"design_system.families.scaffolding": "Seitengerüst",
|
|
24
|
+
"design_system.families.schedule": "Zeitplan",
|
|
25
|
+
"design_system.gallery.copied": "Snippet in die Zwischenablage kopiert",
|
|
26
|
+
"design_system.gallery.copy": "Code kopieren",
|
|
27
|
+
"design_system.gallery.copyFailed": "Snippet konnte nicht kopiert werden",
|
|
28
|
+
"design_system.gallery.familiesGroup": "Familien",
|
|
29
|
+
"design_system.gallery.familyContents": "Komponenten dieser Familie",
|
|
30
|
+
"design_system.gallery.iconCopied": "Kopiert: {snippet}",
|
|
31
|
+
"design_system.gallery.iconCopyJsx": "JSX kopieren (lucide-react)",
|
|
32
|
+
"design_system.gallery.iconCopyMeta": "Namen für page.meta icon kopieren",
|
|
33
|
+
"design_system.gallery.iconCountAll": "{total} Icons",
|
|
34
|
+
"design_system.gallery.iconCountFiltered": "{visible} von {total} Icons",
|
|
35
|
+
"design_system.gallery.iconSearchPlaceholder": "Icons filtern…",
|
|
36
|
+
"design_system.gallery.loadFailed": "Diese Familie konnte nicht geladen werden",
|
|
37
|
+
"design_system.gallery.noResults": "Keine Komponenten entsprechen der Suche",
|
|
38
|
+
"design_system.gallery.openInFigma": "In Figma öffnen",
|
|
39
|
+
"design_system.gallery.retry": "Erneut versuchen",
|
|
40
|
+
"design_system.gallery.searchPlaceholder": "Komponenten suchen…",
|
|
41
|
+
"design_system.gallery.usageDo": "Tun",
|
|
42
|
+
"design_system.gallery.usageDont": "Vermeiden",
|
|
43
|
+
"design_system.gallery.viewDocs": "Dokumentation ansehen",
|
|
44
|
+
"design_system.nav.group": "Entwickler",
|
|
45
|
+
"design_system.nav.title": "Designsystem"
|
|
46
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"design_system.entries.button.description": "Primary action trigger with the full DS variant and size scale.",
|
|
3
|
+
"design_system.entries.buttonGroup.description": "Joined group of related action buttons sharing one border.",
|
|
4
|
+
"design_system.entries.fancyButton.description": "Gradient, marketing-grade button for standout actions.",
|
|
5
|
+
"design_system.entries.iconButton.description": "Square icon-only button; always requires an aria-label.",
|
|
6
|
+
"design_system.entries.linkButton.description": "Inline text link styled as a DS control.",
|
|
7
|
+
"design_system.entries.socialButton.description": "Brand-colored authentication button for social sign-in.",
|
|
8
|
+
"design_system.families.banners": "Banners & callouts",
|
|
9
|
+
"design_system.families.buttons": "Buttons",
|
|
10
|
+
"design_system.families.charts": "Charts",
|
|
11
|
+
"design_system.families.dates": "Dates & time",
|
|
12
|
+
"design_system.families.detail": "Detail sections",
|
|
13
|
+
"design_system.families.display": "Data display",
|
|
14
|
+
"design_system.families.feedback": "Feedback",
|
|
15
|
+
"design_system.families.filters": "Filters",
|
|
16
|
+
"design_system.families.foundations": "Foundations",
|
|
17
|
+
"design_system.families.icons": "Icons",
|
|
18
|
+
"design_system.families.inputs": "Inputs",
|
|
19
|
+
"design_system.families.messages": "Messages",
|
|
20
|
+
"design_system.families.navigation": "Navigation",
|
|
21
|
+
"design_system.families.notifications": "Notifications",
|
|
22
|
+
"design_system.families.overlays": "Overlays",
|
|
23
|
+
"design_system.families.scaffolding": "Page scaffolding",
|
|
24
|
+
"design_system.families.schedule": "Schedule",
|
|
25
|
+
"design_system.gallery.copied": "Snippet copied to clipboard",
|
|
26
|
+
"design_system.gallery.copy": "Copy code",
|
|
27
|
+
"design_system.gallery.copyFailed": "Could not copy the snippet",
|
|
28
|
+
"design_system.gallery.familiesGroup": "Families",
|
|
29
|
+
"design_system.gallery.familyContents": "Components in this family",
|
|
30
|
+
"design_system.gallery.iconCopied": "Copied: {snippet}",
|
|
31
|
+
"design_system.gallery.iconCopyJsx": "Copy JSX (lucide-react)",
|
|
32
|
+
"design_system.gallery.iconCopyMeta": "Copy name for page.meta icon",
|
|
33
|
+
"design_system.gallery.iconCountAll": "{total} icons",
|
|
34
|
+
"design_system.gallery.iconCountFiltered": "{visible} of {total} icons",
|
|
35
|
+
"design_system.gallery.iconSearchPlaceholder": "Filter icons…",
|
|
36
|
+
"design_system.gallery.loadFailed": "Could not load this family",
|
|
37
|
+
"design_system.gallery.noResults": "No components match your search",
|
|
38
|
+
"design_system.gallery.openInFigma": "Open in Figma",
|
|
39
|
+
"design_system.gallery.retry": "Retry",
|
|
40
|
+
"design_system.gallery.searchPlaceholder": "Search components…",
|
|
41
|
+
"design_system.gallery.usageDo": "Do",
|
|
42
|
+
"design_system.gallery.usageDont": "Don't",
|
|
43
|
+
"design_system.gallery.viewDocs": "View docs",
|
|
44
|
+
"design_system.nav.group": "Developer",
|
|
45
|
+
"design_system.nav.title": "Design system"
|
|
46
|
+
}
|