@urbicon-ui/blocks 6.9.0 → 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.
@@ -1,95 +1,139 @@
1
1
  import { tv } from '../../utils/variants.js';
2
2
  export const journeyTimelineVariants = tv({
3
3
  slots: {
4
- // Root wrapper. Always a <div> so the same element hosts the marker rail
5
- // AND (horizontal only) the shared detail panel beneath it. The last node's
6
- // connector is hidden in both orientations — nothing to connect onward to.
7
- base: 'w-full [&_[data-journey-node]:last-child_[data-journey-connector]]:hidden',
4
+ // Root wrapper. Hosts the rail and in panel mode the shared readout.
5
+ base: 'w-full',
8
6
  // The ordered list of nodes. `flex-col` vertical, `flex-row` horizontal.
9
7
  rail: 'flex list-none m-0 p-0',
10
- // A single node <li>.
8
+ // A single node <li>. Vertical: grid of [meta?] [marker column] [content];
9
+ // horizontal: flex row of trigger + connector group.
11
10
  node: 'group/node',
12
- // The interactive header marker + title/subtitle. A <button> for focusable
13
- // nodes, a plain <div> for pure waypoints (focusable === false).
14
- trigger: [
15
- 'flex items-center text-left w-full bg-transparent border-0 appearance-none p-1 -m-1',
16
- 'rounded-contain',
17
- 'transition-[color,background-color] duration-[var(--blocks-duration-fast)]',
18
- 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base'
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)]'
19
17
  ],
20
- // The status-coloured circle.
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).
21
23
  marker: [
22
- 'flex items-center justify-center shrink-0 font-semibold rounded-commit border-2 box-border',
23
- 'transition-[color,background-color,border-color,box-shadow] duration-[var(--blocks-duration-fast)]'
24
+ 'box-border shrink-0 rounded-commit border-2',
25
+ 'transition-[background-color,border-color,box-shadow] duration-[var(--blocks-duration-fast)]'
24
26
  ],
25
- // Column (marker width) that carries the vertical connector below a marker.
26
- // `flex-col` is essential: it makes the connector's `flex-1` grow *down* the
27
- // column (a thin vertical line) instead of *across* it (a fat block).
28
- connectorColumn: 'flex flex-col shrink-0 items-center',
29
- // The connecting line between markers.
27
+ // The connecting line. Drawn with borders so `connectorStyle` can switch
28
+ // solid/dashed/dotted the connector carries meaning, not just geometry.
30
29
  connector: [
31
- 'bg-border-subtle',
32
- 'transition-[background-color] duration-[var(--blocks-duration-normal)]'
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)]'
33
41
  ],
34
- // Title + subtitle wrapper.
35
- labelGroup: 'flex flex-col min-w-0',
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',
36
50
  title: [
37
- 'font-medium leading-tight truncate',
51
+ 'font-medium leading-tight',
38
52
  'transition-colors duration-[var(--blocks-duration-fast)]'
39
53
  ],
40
- subtitle: 'text-text-tertiary leading-tight mt-0.5 truncate',
41
- // Lower row (vertical only): connector column + inline detail region.
42
- body: 'flex',
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',
43
57
  // Grid-rows collapse wrapper (0fr → 1fr). Reduced-motion safe: the duration
44
58
  // token collapses to 1ms under prefers-reduced-motion (interaction.css).
45
59
  detail: [
46
60
  'grid',
47
61
  'transition-[grid-template-rows] duration-[var(--blocks-duration-normal)] ease-[var(--blocks-ease-smooth)]'
48
62
  ],
49
- detailInner: 'overflow-hidden min-h-0',
63
+ detailInner: 'min-h-0 overflow-hidden',
50
64
  detailContent: 'text-text-secondary',
51
- // Shared detail panel (horizontal only) rendered beneath the rail.
52
- panel: 'text-text-secondary border border-border-subtle rounded-contain bg-surface-quiet'
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
+ ]
53
70
  },
54
71
  variants: {
55
72
  orientation: {
56
73
  vertical: {
57
- rail: 'flex-col'
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'
58
79
  },
59
80
  horizontal: {
60
- // Column layout so the shared detail panel sits below the rail.
81
+ // Column layout so the shared panel sits below the rail.
61
82
  base: 'flex flex-col',
62
83
  rail: 'flex-row items-start',
63
- // Each node grows to spread markers evenly; the last one hugs its content.
64
- node: 'flex items-center [&:not(:last-child)]:flex-1',
65
- // Compact header (marker + label side by side) so the connector can grow.
66
- trigger: 'w-auto shrink-0'
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'
67
99
  }
68
100
  },
69
101
  size: {
70
102
  sm: {
71
- marker: 'size-7 text-xs',
72
- connectorColumn: 'w-7',
73
- trigger: 'gap-2',
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',
74
107
  title: 'text-xs',
75
108
  subtitle: 'text-[11px]',
76
- detailContent: 'text-sm pl-2'
109
+ segment: 'text-[11px]',
110
+ content: 'pb-4',
111
+ detailContent: 'text-xs pt-2',
112
+ panel: 'p-3 text-xs'
77
113
  },
78
114
  md: {
79
- marker: 'size-9 text-sm',
80
- connectorColumn: 'w-9',
81
- trigger: 'gap-2.5',
115
+ meta: 'text-xs',
116
+ marker: 'size-3',
117
+ node: 'gap-x-3',
118
+ card: '-mx-2 px-2 py-2',
82
119
  title: 'text-sm',
83
120
  subtitle: 'text-xs',
84
- detailContent: 'text-sm pl-2.5'
121
+ segment: 'text-xs',
122
+ content: 'pb-5',
123
+ detailContent: 'text-sm pt-2.5',
124
+ panel: 'p-4 text-sm'
85
125
  },
86
126
  lg: {
87
- marker: 'size-11 text-base',
88
- connectorColumn: 'w-11',
89
- trigger: 'gap-3',
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',
90
131
  title: 'text-base',
91
132
  subtitle: 'text-sm',
92
- detailContent: 'text-base pl-3'
133
+ segment: 'text-sm',
134
+ content: 'pb-6',
135
+ detailContent: 'text-base pt-3',
136
+ panel: 'p-5 text-base'
93
137
  }
94
138
  },
95
139
  // Marker colour + title tone per journey status. Mirrors the semantic intent
@@ -97,71 +141,178 @@ export const journeyTimelineVariants = tv({
97
141
  // Progress and Stepper.
98
142
  status: {
99
143
  complete: {
100
- marker: 'border-success bg-success text-text-on-primary'
144
+ marker: 'bg-success border-success',
145
+ title: 'text-text-primary'
101
146
  },
102
147
  active: {
103
- marker: 'border-primary bg-primary text-text-on-primary shadow-[var(--blocks-shadow-sm)]',
148
+ marker: 'bg-primary border-primary ring-4 ring-primary/15',
104
149
  title: 'text-text-primary'
105
150
  },
106
151
  pending: {
107
- marker: 'border-border-default bg-surface-base text-text-tertiary'
152
+ marker: 'bg-surface-base border-border-strong',
153
+ title: 'text-text-secondary'
108
154
  },
109
155
  blocked: {
110
- marker: 'border-danger bg-danger text-text-on-primary',
156
+ marker: 'bg-danger border-danger',
111
157
  title: 'text-danger'
112
158
  },
113
159
  skipped: {
114
- marker: 'border-border-subtle bg-surface-subtle text-text-tertiary opacity-70',
160
+ marker: 'bg-surface-subtle border-border-subtle opacity-80',
115
161
  title: 'text-text-tertiary'
116
162
  }
117
163
  },
118
- // The currently expanded node. Distinct from DOM focus (focus-visible ring).
164
+ // The currently focused node. Distinct from DOM focus (focus-visible ring).
119
165
  focused: {
120
166
  true: {
121
- trigger: 'bg-surface-subtle',
122
- title: 'text-text-primary font-semibold'
167
+ meta: 'text-text-primary',
168
+ title: 'font-semibold text-text-primary'
123
169
  },
124
170
  false: {}
125
171
  },
126
172
  // Focusable nodes react to hover + show a pointer; pure waypoints do not.
127
173
  interactive: {
128
174
  true: {
129
- trigger: 'cursor-pointer hover:bg-surface-hover'
175
+ trigger: 'cursor-pointer'
130
176
  },
131
177
  false: {
132
178
  trigger: 'cursor-default'
133
179
  }
134
180
  },
135
- // The connector segment leading out of a completed node reads as "travelled".
136
- connectorComplete: {
181
+ // The connector leaving a completed node reads as "travelled".
182
+ travelled: {
137
183
  true: {
138
- connector: 'bg-success'
184
+ connector: 'border-success'
139
185
  },
140
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)]' }
141
203
  }
142
204
  },
143
205
  compoundVariants: [
144
- // Vertical connector geometry: a thin line that grows down the marker column.
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
+ },
145
220
  {
146
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',
147
247
  class: {
148
- connector: 'w-0.5 flex-1 my-1 min-h-4 rounded-commit'
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'
149
252
  }
150
253
  },
151
- // Horizontal connector geometry: a thin line filling the gap to the next marker.
152
254
  {
153
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',
154
279
  class: {
155
- connector: 'h-0.5 flex-1 mx-2 self-center rounded-commit'
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'
156
282
  }
157
283
  },
158
- // A focused pure waypoint keeps a bold title but gains no hover surface.
284
+ // Focused inline node: the elevated card the focus IS a surface change,
285
+ // not a grey backdrop.
159
286
  {
160
- interactive: false,
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',
161
297
  focused: true,
162
298
  class: {
163
- trigger: 'bg-transparent'
299
+ card: 'bg-surface-selected'
164
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' }
165
316
  }
166
317
  ],
167
318
  defaultVariants: {
@@ -170,6 +321,9 @@ export const journeyTimelineVariants = tv({
170
321
  status: 'pending',
171
322
  focused: false,
172
323
  interactive: true,
173
- connectorComplete: false
324
+ travelled: false,
325
+ connectorStyle: 'solid',
326
+ detail: 'inline',
327
+ withMeta: false
174
328
  }
175
329
  });
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@urbicon-ui/blocks",
3
- "version": "6.9.0",
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.9.0",
95
- "@urbicon-ui/shared-types": "6.9.0",
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",