@urbicon-ui/blocks 6.8.1 → 6.10.1

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.
@@ -0,0 +1,329 @@
1
+ import { tv } from '../../utils/variants.js';
2
+ export const journeyTimelineVariants = tv({
3
+ slots: {
4
+ // Root wrapper. Hosts the rail and — in panel mode — the shared readout.
5
+ base: 'w-full',
6
+ // The ordered list of nodes. `flex-col` vertical, `flex-row` horizontal.
7
+ rail: 'flex list-none m-0 p-0',
8
+ // A single node <li>. Vertical: grid of [meta?] [marker column] [content];
9
+ // horizontal: flex row of trigger + connector group.
10
+ node: 'group/node',
11
+ // Chronicle-axis column (vertical): right-aligned, tabular — times, dates,
12
+ // versions. Rendered only when any node provides `meta` (or a meta snippet).
13
+ metaColumn: 'shrink-0 text-right',
14
+ meta: [
15
+ 'font-mono tabular-nums leading-tight text-text-tertiary',
16
+ 'transition-colors duration-[var(--blocks-duration-fast)]'
17
+ ],
18
+ // The spine: marker + connector line. Vertical: a narrow column the line
19
+ // grows down inside; horizontal: a full-width row the line grows right in.
20
+ markerColumn: 'flex items-center',
21
+ // The status dot. Deliberately small — the line is the protagonist, the
22
+ // dots are punctuation (contrast: Stepper's large glyph discs).
23
+ marker: [
24
+ 'box-border shrink-0 rounded-commit border-2',
25
+ 'transition-[background-color,border-color,box-shadow] duration-[var(--blocks-duration-fast)]'
26
+ ],
27
+ // The connecting line. Drawn with borders so `connectorStyle` can switch
28
+ // solid/dashed/dotted — the connector carries meaning, not just geometry.
29
+ connector: [
30
+ 'border-border-default',
31
+ 'transition-[border-color] duration-[var(--blocks-duration-normal)]'
32
+ ],
33
+ // Content cell (vertical): card + segment label.
34
+ content: 'min-w-0',
35
+ // The focus surface around header + inline detail. Transparent at rest,
36
+ // elevated card when focused inline, selected tint when focused in panel
37
+ // mode — never a bare full-width grey block.
38
+ card: [
39
+ 'rounded-contain border border-transparent',
40
+ 'transition-[background-color,border-color,box-shadow] duration-[var(--blocks-duration-normal)] ease-[var(--blocks-ease-gentle)]'
41
+ ],
42
+ // The interactive header — title + subtitle. A <button> for focusable
43
+ // nodes, a plain <div> for pure waypoints (focusable === false).
44
+ trigger: [
45
+ 'flex w-full appearance-none flex-col items-start gap-0.5 border-0 bg-transparent p-0 text-left',
46
+ 'rounded-contain',
47
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base'
48
+ ],
49
+ labelGroup: 'flex min-w-0 flex-col',
50
+ title: [
51
+ 'font-medium leading-tight',
52
+ 'transition-colors duration-[var(--blocks-duration-fast)]'
53
+ ],
54
+ subtitle: 'text-text-tertiary leading-tight mt-0.5',
55
+ // Label for the stretch between two nodes (duration, transport, gap…).
56
+ segment: 'text-text-quaternary leading-tight',
57
+ // Grid-rows collapse wrapper (0fr → 1fr). Reduced-motion safe: the duration
58
+ // token collapses to 1ms under prefers-reduced-motion (interaction.css).
59
+ detail: [
60
+ 'grid',
61
+ 'transition-[grid-template-rows] duration-[var(--blocks-duration-normal)] ease-[var(--blocks-ease-smooth)]'
62
+ ],
63
+ detailInner: 'min-h-0 overflow-hidden',
64
+ detailContent: 'text-text-secondary',
65
+ // The stable readout (detail="panel" and every horizontal timeline).
66
+ panel: [
67
+ 'text-text-secondary border border-border-default bg-surface-elevated rounded-contain',
68
+ 'shadow-[var(--blocks-shadow-md)]'
69
+ ]
70
+ },
71
+ variants: {
72
+ orientation: {
73
+ vertical: {
74
+ rail: 'flex-col',
75
+ node: 'grid',
76
+ markerColumn: 'flex-col',
77
+ connector: 'my-1 w-0 min-h-3 flex-1 border-l-2',
78
+ segment: 'flex items-center'
79
+ },
80
+ horizontal: {
81
+ // Column layout so the shared panel sits below the rail.
82
+ base: 'flex flex-col',
83
+ rail: 'flex-row items-start',
84
+ // Stacked station: meta row above the spine, label pill below. Every
85
+ // node but the last stretches so the spine distributes the stations.
86
+ node: 'flex flex-col [&:not(:last-child)]:flex-1',
87
+ // Visual order is meta → spine → labels, but the DOM keeps the trigger
88
+ // before the spine so a segment label is read *after* its node.
89
+ metaColumn: 'order-1 text-left',
90
+ markerColumn: 'order-2 w-full flex-row',
91
+ // Shrink-to-fit pill around the labels only — the marker sits on the
92
+ // spine above, so the whole rail reads as stations on one line.
93
+ trigger: 'order-3 w-auto self-start',
94
+ connector: 'h-0 min-w-3 flex-1 border-t-2',
95
+ // Segment labels sit *in* the line (line — label — line); they widen
96
+ // the gap instead of overlapping the next station's marker.
97
+ segment: 'shrink-0 whitespace-nowrap',
98
+ panel: 'mt-4 w-full'
99
+ }
100
+ },
101
+ size: {
102
+ sm: {
103
+ meta: 'text-[11px]',
104
+ marker: 'size-2.5',
105
+ node: 'gap-x-2.5',
106
+ card: '-mx-1.5 px-1.5 py-1.5',
107
+ title: 'text-xs',
108
+ subtitle: 'text-[11px]',
109
+ segment: 'text-[11px]',
110
+ content: 'pb-4',
111
+ detailContent: 'text-xs pt-2',
112
+ panel: 'p-3 text-xs'
113
+ },
114
+ md: {
115
+ meta: 'text-xs',
116
+ marker: 'size-3',
117
+ node: 'gap-x-3',
118
+ card: '-mx-2 px-2 py-2',
119
+ title: 'text-sm',
120
+ subtitle: 'text-xs',
121
+ segment: 'text-xs',
122
+ content: 'pb-5',
123
+ detailContent: 'text-sm pt-2.5',
124
+ panel: 'p-4 text-sm'
125
+ },
126
+ lg: {
127
+ meta: 'text-sm',
128
+ marker: 'size-3.5',
129
+ node: 'gap-x-3.5',
130
+ card: '-mx-2.5 px-2.5 py-2.5',
131
+ title: 'text-base',
132
+ subtitle: 'text-sm',
133
+ segment: 'text-sm',
134
+ content: 'pb-6',
135
+ detailContent: 'text-base pt-3',
136
+ panel: 'p-5 text-base'
137
+ }
138
+ },
139
+ // Marker colour + title tone per journey status. Mirrors the semantic intent
140
+ // palette (success / primary / danger / neutral) used across Badge, Alert,
141
+ // Progress and Stepper.
142
+ status: {
143
+ complete: {
144
+ marker: 'bg-success border-success',
145
+ title: 'text-text-primary'
146
+ },
147
+ active: {
148
+ marker: 'bg-primary border-primary ring-4 ring-primary/15',
149
+ title: 'text-text-primary'
150
+ },
151
+ pending: {
152
+ marker: 'bg-surface-base border-border-strong',
153
+ title: 'text-text-secondary'
154
+ },
155
+ blocked: {
156
+ marker: 'bg-danger border-danger',
157
+ title: 'text-danger'
158
+ },
159
+ skipped: {
160
+ marker: 'bg-surface-subtle border-border-subtle opacity-80',
161
+ title: 'text-text-tertiary'
162
+ }
163
+ },
164
+ // The currently focused node. Distinct from DOM focus (focus-visible ring).
165
+ focused: {
166
+ true: {
167
+ meta: 'text-text-primary',
168
+ title: 'font-semibold text-text-primary'
169
+ },
170
+ false: {}
171
+ },
172
+ // Focusable nodes react to hover + show a pointer; pure waypoints do not.
173
+ interactive: {
174
+ true: {
175
+ trigger: 'cursor-pointer'
176
+ },
177
+ false: {
178
+ trigger: 'cursor-default'
179
+ }
180
+ },
181
+ // The connector leaving a completed node reads as "travelled".
182
+ travelled: {
183
+ true: {
184
+ connector: 'border-success'
185
+ },
186
+ false: {}
187
+ },
188
+ // Per-node line style — solid ride, dashed/dotted transfer or gap.
189
+ connectorStyle: {
190
+ solid: { connector: 'border-solid' },
191
+ dashed: { connector: 'border-dashed' },
192
+ dotted: { connector: 'border-dotted' }
193
+ },
194
+ // Where the focused detail lives (vertical only; horizontal is always panel).
195
+ detail: {
196
+ inline: {},
197
+ panel: {}
198
+ },
199
+ // Whether the chronicle axis (meta rail) is rendered — adds the grid column.
200
+ withMeta: {
201
+ true: { node: 'grid-cols-[auto_auto_minmax(0,1fr)]' },
202
+ false: { node: 'grid-cols-[auto_minmax(0,1fr)]' }
203
+ }
204
+ },
205
+ compoundVariants: [
206
+ // Size geometry that only applies to one orientation. Vertical: fixed
207
+ // meta/marker column widths + baseline offsets that align dot and title;
208
+ // horizontal: spine gaps + the label pill's optical left edge (-mx
209
+ // compensates px so title, marker and meta share one left line).
210
+ {
211
+ orientation: 'vertical',
212
+ size: 'sm',
213
+ class: {
214
+ metaColumn: 'w-10 pt-1.5',
215
+ markerColumn: 'w-3.5',
216
+ marker: 'mt-2',
217
+ segment: 'mt-1.5 gap-1'
218
+ }
219
+ },
220
+ {
221
+ orientation: 'vertical',
222
+ size: 'md',
223
+ class: {
224
+ metaColumn: 'w-12 pt-2',
225
+ markerColumn: 'w-4',
226
+ marker: 'mt-2.5',
227
+ segment: 'mt-2 gap-1.5'
228
+ }
229
+ },
230
+ {
231
+ orientation: 'vertical',
232
+ size: 'lg',
233
+ class: {
234
+ metaColumn: 'w-14 pt-2.5',
235
+ markerColumn: 'w-5',
236
+ marker: 'mt-3',
237
+ segment: 'mt-2.5 gap-2'
238
+ }
239
+ },
240
+ // The fixed spine height keeps every marker on one line whether or not the
241
+ // station's outgoing segment carries a (taller) text label. The metaColumn
242
+ // min-height is the same guarantee for the chronicle row: it holds even
243
+ // when a consumer `meta` snippet renders nothing for some stations.
244
+ {
245
+ orientation: 'horizontal',
246
+ size: 'sm',
247
+ class: {
248
+ node: 'gap-y-0.5',
249
+ metaColumn: 'min-h-3.5',
250
+ markerColumn: 'h-4 gap-1 pr-1',
251
+ trigger: '-mx-1.5 px-1.5 py-1'
252
+ }
253
+ },
254
+ {
255
+ orientation: 'horizontal',
256
+ size: 'md',
257
+ class: {
258
+ node: 'gap-y-1',
259
+ metaColumn: 'min-h-4',
260
+ markerColumn: 'h-4 gap-1.5 pr-1.5',
261
+ trigger: '-mx-2 px-2 py-1.5'
262
+ }
263
+ },
264
+ {
265
+ orientation: 'horizontal',
266
+ size: 'lg',
267
+ class: {
268
+ node: 'gap-y-1',
269
+ metaColumn: 'min-h-4.5',
270
+ markerColumn: 'h-5 gap-2 pr-2',
271
+ trigger: '-mx-2.5 px-2.5 py-2'
272
+ }
273
+ },
274
+ // Vertical + panel: two-column layout on wide viewports; on narrow ones the
275
+ // readout docks to the viewport bottom while the rail scrolls behind it.
276
+ {
277
+ orientation: 'vertical',
278
+ detail: 'panel',
279
+ class: {
280
+ base: 'sm:grid sm:grid-cols-[minmax(0,1fr)_minmax(16rem,20rem)] sm:items-start sm:gap-x-6',
281
+ panel: 'max-sm:sticky max-sm:bottom-4 max-sm:z-[var(--z-docked)] max-sm:mt-4 sm:sticky sm:top-4'
282
+ }
283
+ },
284
+ // Focused inline node: the elevated card — the focus IS a surface change,
285
+ // not a grey backdrop.
286
+ {
287
+ detail: 'inline',
288
+ focused: true,
289
+ class: {
290
+ card: 'border-border-default bg-surface-elevated shadow-[var(--blocks-shadow-md)]'
291
+ }
292
+ },
293
+ // Focused row while the detail lives in the panel: quiet selected tint.
294
+ {
295
+ orientation: 'vertical',
296
+ detail: 'panel',
297
+ focused: true,
298
+ class: {
299
+ card: 'bg-surface-selected'
300
+ }
301
+ },
302
+ { orientation: 'horizontal', focused: true, class: { trigger: 'bg-surface-selected' } },
303
+ // Hover affordance only on non-focused interactive nodes (a focused inline
304
+ // card must not flicker back to the hover tint).
305
+ {
306
+ orientation: 'vertical',
307
+ interactive: true,
308
+ focused: false,
309
+ class: { card: 'hover:bg-surface-hover' }
310
+ },
311
+ {
312
+ orientation: 'horizontal',
313
+ interactive: true,
314
+ focused: false,
315
+ class: { trigger: 'hover:bg-surface-hover' }
316
+ }
317
+ ],
318
+ defaultVariants: {
319
+ orientation: 'vertical',
320
+ size: 'md',
321
+ status: 'pending',
322
+ focused: false,
323
+ interactive: true,
324
+ travelled: false,
325
+ connectorStyle: 'solid',
326
+ detail: 'inline',
327
+ withMeta: false
328
+ }
329
+ });
@@ -21,6 +21,7 @@ export interface StepperContext {
21
21
  *
22
22
  * @tag navigation
23
23
  * @related Tab
24
+ * @related JourneyTimeline
24
25
  *
25
26
  * @example
26
27
  * ```svelte
@@ -62,7 +62,7 @@ export declare const tabVariants: (props?: import("../../utils/variants.js").TVP
62
62
  };
63
63
  }> | undefined) => {
64
64
  base: (props?: ({
65
- variant?: "line" | "pills" | "enclosed" | "solid" | undefined;
65
+ variant?: "line" | "solid" | "pills" | "enclosed" | undefined;
66
66
  orientation?: "horizontal" | "vertical" | undefined;
67
67
  size?: "sm" | "md" | "lg" | undefined;
68
68
  fullWidth?: boolean | undefined;
@@ -72,7 +72,7 @@ export declare const tabVariants: (props?: import("../../utils/variants.js").TVP
72
72
  className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
73
73
  }) | undefined) => string;
74
74
  list: (props?: ({
75
- variant?: "line" | "pills" | "enclosed" | "solid" | undefined;
75
+ variant?: "line" | "solid" | "pills" | "enclosed" | undefined;
76
76
  orientation?: "horizontal" | "vertical" | undefined;
77
77
  size?: "sm" | "md" | "lg" | undefined;
78
78
  fullWidth?: boolean | undefined;
@@ -82,7 +82,7 @@ export declare const tabVariants: (props?: import("../../utils/variants.js").TVP
82
82
  className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
83
83
  }) | undefined) => string;
84
84
  trigger: (props?: ({
85
- variant?: "line" | "pills" | "enclosed" | "solid" | undefined;
85
+ variant?: "line" | "solid" | "pills" | "enclosed" | undefined;
86
86
  orientation?: "horizontal" | "vertical" | undefined;
87
87
  size?: "sm" | "md" | "lg" | undefined;
88
88
  fullWidth?: boolean | undefined;
@@ -92,7 +92,7 @@ export declare const tabVariants: (props?: import("../../utils/variants.js").TVP
92
92
  className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
93
93
  }) | undefined) => string;
94
94
  icon: (props?: ({
95
- variant?: "line" | "pills" | "enclosed" | "solid" | undefined;
95
+ variant?: "line" | "solid" | "pills" | "enclosed" | undefined;
96
96
  orientation?: "horizontal" | "vertical" | undefined;
97
97
  size?: "sm" | "md" | "lg" | undefined;
98
98
  fullWidth?: boolean | undefined;
@@ -102,7 +102,7 @@ export declare const tabVariants: (props?: import("../../utils/variants.js").TVP
102
102
  className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
103
103
  }) | undefined) => string;
104
104
  label: (props?: ({
105
- variant?: "line" | "pills" | "enclosed" | "solid" | undefined;
105
+ variant?: "line" | "solid" | "pills" | "enclosed" | undefined;
106
106
  orientation?: "horizontal" | "vertical" | undefined;
107
107
  size?: "sm" | "md" | "lg" | undefined;
108
108
  fullWidth?: boolean | undefined;
@@ -112,7 +112,7 @@ export declare const tabVariants: (props?: import("../../utils/variants.js").TVP
112
112
  className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
113
113
  }) | undefined) => string;
114
114
  badge: (props?: ({
115
- variant?: "line" | "pills" | "enclosed" | "solid" | undefined;
115
+ variant?: "line" | "solid" | "pills" | "enclosed" | undefined;
116
116
  orientation?: "horizontal" | "vertical" | undefined;
117
117
  size?: "sm" | "md" | "lg" | undefined;
118
118
  fullWidth?: boolean | undefined;
@@ -122,7 +122,7 @@ export declare const tabVariants: (props?: import("../../utils/variants.js").TVP
122
122
  className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
123
123
  }) | undefined) => string;
124
124
  panel: (props?: ({
125
- variant?: "line" | "pills" | "enclosed" | "solid" | undefined;
125
+ variant?: "line" | "solid" | "pills" | "enclosed" | undefined;
126
126
  orientation?: "horizontal" | "vertical" | undefined;
127
127
  size?: "sm" | "md" | "lg" | undefined;
128
128
  fullWidth?: boolean | undefined;
@@ -132,7 +132,7 @@ export declare const tabVariants: (props?: import("../../utils/variants.js").TVP
132
132
  className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
133
133
  }) | undefined) => string;
134
134
  indicator: (props?: ({
135
- variant?: "line" | "pills" | "enclosed" | "solid" | undefined;
135
+ variant?: "line" | "solid" | "pills" | "enclosed" | undefined;
136
136
  orientation?: "horizontal" | "vertical" | undefined;
137
137
  size?: "sm" | "md" | "lg" | undefined;
138
138
  fullWidth?: boolean | undefined;
@@ -30,6 +30,8 @@ export type { FormFieldProps, FormFieldSlotContext } from './FormField/index.js'
30
30
  export * from './FormField/index.js';
31
31
  export type { InputProps } from './Input/index.js';
32
32
  export * from './Input/index.js';
33
+ export type { JourneyNode, JourneyStatus, JourneyTimelineProps } from './JourneyTimeline/index.js';
34
+ export * from './JourneyTimeline/index.js';
33
35
  export type { MenuContext, MenuCustomSlots, MenuItemType, MenuObjectOption, MenuOption, MenuProps, MenuSectionHeader } from './Menu/index.js';
34
36
  export * from './Menu/index.js';
35
37
  export type { PaginationItemProps, PaginationProps } from './Pagination/index.js';
@@ -16,6 +16,7 @@ export * from './Dialog/index.js';
16
16
  export * from './Drawer/index.js';
17
17
  export * from './FormField/index.js';
18
18
  export * from './Input/index.js';
19
+ export * from './JourneyTimeline/index.js';
19
20
  export * from './Menu/index.js';
20
21
  export * from './Pagination/index.js';
21
22
  export * from './Popover/index.js';
@@ -129,6 +129,16 @@ declare const _default: {
129
129
  readonly filterPlaceholder: "Themen filtern…";
130
130
  readonly noResults: "Keine passenden Themen";
131
131
  };
132
+ readonly journeyTimeline: {
133
+ readonly label: "Verlauf";
134
+ readonly status: {
135
+ readonly complete: "Abgeschlossen";
136
+ readonly active: "In Bearbeitung";
137
+ readonly pending: "Ausstehend";
138
+ readonly blocked: "Blockiert";
139
+ readonly skipped: "Übersprungen";
140
+ };
141
+ };
132
142
  readonly datepicker: {
133
143
  readonly placeholder: "Datum wählen...";
134
144
  readonly rangePlaceholder: "Zeitraum wählen...";
@@ -129,6 +129,16 @@ export default {
129
129
  filterPlaceholder: 'Themen filtern…',
130
130
  noResults: 'Keine passenden Themen'
131
131
  },
132
+ journeyTimeline: {
133
+ label: 'Verlauf',
134
+ status: {
135
+ complete: 'Abgeschlossen',
136
+ active: 'In Bearbeitung',
137
+ pending: 'Ausstehend',
138
+ blocked: 'Blockiert',
139
+ skipped: 'Übersprungen'
140
+ }
141
+ },
132
142
  datepicker: {
133
143
  placeholder: 'Datum wählen...',
134
144
  rangePlaceholder: 'Zeitraum wählen...',
@@ -129,6 +129,16 @@ declare const _default: {
129
129
  readonly filterPlaceholder: "Filter topics…";
130
130
  readonly noResults: "No matching topics";
131
131
  };
132
+ readonly journeyTimeline: {
133
+ readonly label: "Journey";
134
+ readonly status: {
135
+ readonly complete: "Completed";
136
+ readonly active: "In progress";
137
+ readonly pending: "Pending";
138
+ readonly blocked: "Blocked";
139
+ readonly skipped: "Skipped";
140
+ };
141
+ };
132
142
  readonly datepicker: {
133
143
  readonly placeholder: "Select a date...";
134
144
  readonly rangePlaceholder: "Select a date range...";
@@ -129,6 +129,16 @@ export default {
129
129
  filterPlaceholder: 'Filter topics…',
130
130
  noResults: 'No matching topics'
131
131
  },
132
+ journeyTimeline: {
133
+ label: 'Journey',
134
+ status: {
135
+ complete: 'Completed',
136
+ active: 'In progress',
137
+ pending: 'Pending',
138
+ blocked: 'Blocked',
139
+ skipped: 'Skipped'
140
+ }
141
+ },
132
142
  datepicker: {
133
143
  placeholder: 'Select a date...',
134
144
  rangePlaceholder: 'Select a date range...',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@urbicon-ui/blocks",
3
- "version": "6.8.1",
3
+ "version": "6.10.1",
4
4
  "description": "Svelte 5 UI component library with Tailwind CSS 4, OKLCH design tokens and zero runtime dependencies",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -91,8 +91,8 @@
91
91
  "@sveltejs/package": "^2.5.8",
92
92
  "@sveltejs/vite-plugin-svelte": "^7.0.0",
93
93
  "@tailwindcss/vite": "^4.3.1",
94
- "@urbicon-ui/i18n": "6.8.1",
95
- "@urbicon-ui/shared-types": "6.8.1",
94
+ "@urbicon-ui/i18n": "6.10.1",
95
+ "@urbicon-ui/shared-types": "6.10.1",
96
96
  "prettier": "^3.8.4",
97
97
  "prettier-plugin-svelte": "^4.1.1",
98
98
  "prettier-plugin-tailwindcss": "^0.8.0",