@godxjp/ui 19.3.1 → 19.4.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.
- package/dist/components/data-display/badge.d.ts +9 -1
- package/dist/components/data-display/badge.js +3 -2
- package/dist/components/data-display/index.d.ts +2 -0
- package/dist/components/data-display/index.js +2 -0
- package/dist/components/data-display/popover.d.ts +13 -1
- package/dist/components/data-display/popover.js +3 -1
- package/dist/components/data-display/table.d.ts +19 -2
- package/dist/components/data-display/table.js +4 -1
- package/dist/components/data-display/timeline-grid.d.ts +18 -0
- package/dist/components/data-display/timeline-grid.js +222 -0
- package/dist/components/data-entry/cascader.js +4 -6
- package/dist/components/data-entry/checkbox.js +1 -1
- package/dist/components/data-entry/search-select.js +5 -7
- package/dist/components/data-entry/select.js +32 -28
- package/dist/components/data-entry/tree-select.js +4 -6
- package/dist/components/general/inert-background.d.ts +5 -0
- package/dist/components/general/inert-background.js +48 -0
- package/dist/components/layout/auth-shell.d.ts +4 -2
- package/dist/components/layout/auth-shell.js +7 -1
- package/dist/components/layout/centered-shell.d.ts +2 -2
- package/dist/components/layout/flex.d.ts +1 -1
- package/dist/components/layout/flex.js +2 -1
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.js +2 -0
- package/dist/components/layout/mobile-shell.d.ts +21 -0
- package/dist/components/layout/mobile-shell.js +43 -0
- package/dist/components/layout/sidebar-link.d.ts +1 -1
- package/dist/components/navigation/context-menu.js +13 -9
- package/dist/components/navigation/dropdown-menu.js +17 -13
- package/dist/inertia/index.d.ts +1 -1
- package/dist/lib/variants.d.ts +3 -3
- package/dist/lib/variants.js +1 -0
- package/dist/props/components/data-display.prop.d.ts +65 -0
- package/dist/props/components/data-entry.prop.d.ts +1 -1
- package/dist/props/components/layout.prop.d.ts +93 -6
- package/dist/props/registry.d.ts +109 -2
- package/dist/props/registry.js +143 -0
- package/dist/props/vocabulary/data.prop.d.ts +6 -0
- package/dist/props/vocabulary/index.d.ts +3 -3
- package/dist/props/vocabulary/layout.prop.d.ts +17 -2
- package/dist/props/vocabulary/shared.prop.d.ts +7 -0
- package/dist/styles/control.css +18 -1
- package/dist/styles/data-display-layout.css +167 -0
- package/dist/styles/layout.css +7 -0
- package/dist/styles/shell-layout.css +148 -0
- package/dist/styles/table-layout.css +23 -4
- package/dist/tokens/components/control.css +1 -0
- package/dist/tokens/components/data-display.css +20 -0
- package/dist/tokens/components/shell.css +22 -0
- package/dist/tokens/components/table.css +2 -0
- package/docs/FRAME-A11Y-CI.md +99 -17
- package/docs/FRAME-COVERAGE-REPORT.md +4 -2
- package/docs/SPACING.md +19 -6
- package/docs/charts/compact-bar-trend.tsx +5 -6
- package/docs/data-display/avatar.tsx +7 -9
- package/docs/data-display/badge.tsx +1 -1
- package/docs/data-display/card/index.tsx +6 -4
- package/docs/data-display/data-table/examples/approval-queue.tsx +1 -1
- package/docs/data-display/data-table/index.tsx +1 -1
- package/docs/data-display/permission-matrix.tsx +2 -2
- package/docs/data-display/popover.tsx +4 -1
- package/docs/data-display/scroll-area.tsx +1 -1
- package/docs/data-display/table.tsx +1 -1
- package/docs/data-display/timeline-grid.tsx +119 -0
- package/docs/data-entry/branch-scope-picker.tsx +1 -1
- package/docs/data-entry/date-picker.tsx +2 -1
- package/docs/data-entry/form-field/index.tsx +2 -2
- package/docs/data-entry/input-otp.tsx +1 -1
- package/docs/data-entry/select-matrix.tsx +2 -1
- package/docs/data-entry/select.tsx +3 -1
- package/docs/data-entry/textarea.tsx +1 -1
- package/docs/data-entry/toggle-count.tsx +1 -1
- package/docs/feedback/alert.tsx +1 -1
- package/docs/feedback/banner.tsx +1 -1
- package/docs/feedback/dialog.tsx +2 -1
- package/docs/feedback/sheet.tsx +2 -1
- package/docs/foundation/email-tokens.tsx +1 -1
- package/docs/general/activity.tsx +1 -1
- package/docs/layout/app-shell.tsx +4 -4
- package/docs/layout/auth-account-summary.tsx +1 -1
- package/docs/layout/auth-recovery/examples/mobile-390.tsx +1 -1
- package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -2
- package/docs/layout/auth-shell-context.tsx +1 -1
- package/docs/layout/auth-shell-device.tsx +2 -2
- package/docs/layout/auth-shell-registration.tsx +1 -1
- package/docs/layout/auth-shell.tsx +1 -1
- package/docs/layout/master-detail.tsx +2 -2
- package/docs/layout/mobile-shell.tsx +101 -0
- package/docs/layout/page-container.tsx +6 -6
- package/docs/layout/responsive-grid.tsx +5 -5
- package/docs/layout/separator.tsx +2 -2
- package/docs/layout/service-role-panel.tsx +1 -1
- package/docs/layout/sidebar.tsx +9 -9
- package/docs/layout/split-pane.tsx +5 -6
- package/docs/layout/topbar.tsx +2 -8
- package/docs/navigation/context-menu.tsx +6 -1
- package/docs/navigation/dropdown-menu.tsx +2 -1
- package/docs/navigation/filter-bar.tsx +2 -2
- package/docs/navigation/pagination.tsx +2 -2
- package/docs/navigation/steps.tsx +1 -1
- package/docs/navigation/tabs.tsx +3 -3
- package/docs/showcase/acme-portal.tsx +11 -12
- package/docs/showcase/acme-website.tsx +7 -7
- package/docs/showcase/case1-warehouse-dashboard.tsx +11 -12
- package/docs/showcase/case2-employee-me.tsx +10 -16
- package/docs/showcase/case4-login.tsx +144 -156
- package/docs/showcase/case5-shift-calendar.tsx +181 -280
- package/docs/showcase/case6-agency-handy.tsx +446 -443
- package/docs/showcase/futurelastic-web.tsx +9 -8
- package/docs/showcase/org-switcher.tsx +18 -11
- package/docs/showcase/permission-matrix.tsx +13 -13
- package/docs/showcase/public-landing.tsx +1 -1
- package/docs/showcase/settings-account-sections.tsx +4 -4
- package/docs/showcase/settings-security-mfa.tsx +3 -3
- package/docs/showcase/table-approval-queue.tsx +1 -1
- package/docs/showcase/table-bulk-actions.tsx +49 -52
- package/docs/showcase/table-conditional-format.tsx +1 -1
- package/docs/showcase/table-crud-list.tsx +1 -1
- package/docs/showcase/table-expandable-rows.tsx +101 -98
- package/docs/showcase/table-filter-chips.tsx +78 -66
- package/docs/showcase/table-footer-totals.tsx +23 -19
- package/docs/showcase/table-grouped-subtotals.tsx +7 -4
- package/docs/showcase/table-master-detail.tsx +13 -15
- package/docs/showcase/table-states.tsx +34 -29
- package/docs/showcase/table-sticky-columns.tsx +3 -2
- package/docs/showcase/table-tree-rows.tsx +22 -15
- package/docs/showcase/table-view-tabs.tsx +12 -14
- package/package.json +7 -6
package/dist/props/registry.d.ts
CHANGED
|
@@ -114,6 +114,11 @@ export declare const VOCABULARY_REGISTRY: {
|
|
|
114
114
|
readonly category: "shared";
|
|
115
115
|
readonly description: "Radix asChild polymorphism";
|
|
116
116
|
};
|
|
117
|
+
readonly FlushProp: {
|
|
118
|
+
readonly file: "vocabulary/shared.prop.ts";
|
|
119
|
+
readonly category: "shared";
|
|
120
|
+
readonly description: "Content owns its own inset — the container drops its padding so the child reaches the frame edge (CardContent/CardFooter flush, TableCell flush, PopoverContent flush)";
|
|
121
|
+
};
|
|
117
122
|
readonly WidthProp: {
|
|
118
123
|
readonly file: "vocabulary/shared.prop.ts";
|
|
119
124
|
readonly category: "shared";
|
|
@@ -209,6 +214,11 @@ export declare const VOCABULARY_REGISTRY: {
|
|
|
209
214
|
readonly category: "layout";
|
|
210
215
|
readonly description: "CenteredShell column block alignment — start (flowing page), center (system surface)";
|
|
211
216
|
};
|
|
217
|
+
readonly MobileShellHeightProp: {
|
|
218
|
+
readonly file: "vocabulary/layout.prop.ts";
|
|
219
|
+
readonly category: "layout";
|
|
220
|
+
readonly description: "MobileShell block-size contract — viewport (100dvh root, the real app) | fill (fills a bounded parent, e.g. a device-frame preview)";
|
|
221
|
+
};
|
|
212
222
|
readonly CenteredShellPresetProp: {
|
|
213
223
|
readonly file: "vocabulary/layout.prop.ts";
|
|
214
224
|
readonly category: "layout";
|
|
@@ -224,6 +234,11 @@ export declare const VOCABULARY_REGISTRY: {
|
|
|
224
234
|
readonly category: "data";
|
|
225
235
|
readonly description: "Table column priority for the action-collection preset — primary | secondary | meta | actions (unset = takes the remaining space)";
|
|
226
236
|
};
|
|
237
|
+
readonly TableCellIndentProp: {
|
|
238
|
+
readonly file: "vocabulary/data.prop.ts";
|
|
239
|
+
readonly category: "data";
|
|
240
|
+
readonly description: "TableCell hierarchy depth — indent = --table-cell-space-x + depth x --table-cell-indent-space-step (tree rows, grouped detail rows)";
|
|
241
|
+
};
|
|
227
242
|
readonly ErrorSurfaceModeProp: {
|
|
228
243
|
readonly file: "vocabulary/layout.prop.ts";
|
|
229
244
|
readonly category: "layout";
|
|
@@ -540,6 +555,10 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
540
555
|
readonly group: "layout";
|
|
541
556
|
readonly file: "components/layout.prop.ts";
|
|
542
557
|
readonly vocabulary: readonly [{
|
|
558
|
+
readonly field: "as";
|
|
559
|
+
readonly local: true;
|
|
560
|
+
readonly reason: "Closed tag seam (div | span) so a Flex stays valid HTML inside a phrasing-only parent such as the <button> a TabsTrigger renders — same shape as ListRow's `as` (gh#354).";
|
|
561
|
+
}, {
|
|
543
562
|
readonly field: "direction";
|
|
544
563
|
readonly local: true;
|
|
545
564
|
readonly reason: "Flex-specific axis control.";
|
|
@@ -648,7 +667,28 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
648
667
|
readonly field: "density";
|
|
649
668
|
readonly local: true;
|
|
650
669
|
readonly reason: "Auth-specific vertical-density scope for card descendants.";
|
|
651
|
-
},
|
|
670
|
+
}, {
|
|
671
|
+
readonly field: "measure";
|
|
672
|
+
readonly local: true;
|
|
673
|
+
readonly reason: "Auth-shell content-slot measure; wide is the split brand-panel login.";
|
|
674
|
+
}, "ActionProp", "AuthShellPresetProp"];
|
|
675
|
+
};
|
|
676
|
+
readonly MobileShellProp: {
|
|
677
|
+
readonly group: "layout";
|
|
678
|
+
readonly file: "components/layout.prop.ts";
|
|
679
|
+
readonly vocabulary: readonly ["ChildrenProp", "ClassNameProp", "ActionProp", "MobileShellHeightProp", {
|
|
680
|
+
readonly field: "header";
|
|
681
|
+
readonly local: true;
|
|
682
|
+
readonly reason: "MobileShell app-bar band — the screen title row; it absorbs the top safe-area inset when no statusBar precedes it.";
|
|
683
|
+
}, {
|
|
684
|
+
readonly field: "statusBar";
|
|
685
|
+
readonly local: true;
|
|
686
|
+
readonly reason: "MobileShell OS status-bar band — standalone/PWA chrome or a device-frame preview; owns the top safe-area inset.";
|
|
687
|
+
}, {
|
|
688
|
+
readonly field: "tabBar";
|
|
689
|
+
readonly local: true;
|
|
690
|
+
readonly reason: "MobileShell bottom navigation band — tiling equal-width destinations; owns the home-indicator inset.";
|
|
691
|
+
}];
|
|
652
692
|
};
|
|
653
693
|
readonly SeparatorProp: {
|
|
654
694
|
readonly group: "layout";
|
|
@@ -1160,7 +1200,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
1160
1200
|
readonly BadgeProp: {
|
|
1161
1201
|
readonly group: "data-display";
|
|
1162
1202
|
readonly file: "components/data-display.prop.ts";
|
|
1163
|
-
readonly vocabulary: readonly [
|
|
1203
|
+
readonly vocabulary: readonly [{
|
|
1204
|
+
readonly field: "as";
|
|
1205
|
+
readonly local: true;
|
|
1206
|
+
readonly reason: "Closed tag seam (div | span) so a chip stays valid HTML inside a phrasing-only parent such as the <button> a TabsTrigger renders — same shape as ListRow's `as` (gh#354).";
|
|
1207
|
+
}, "BadgeVariantProp", "ShapeProp", "ToneProp", "ChildrenProp", "ClassNameProp", {
|
|
1164
1208
|
readonly field: "color";
|
|
1165
1209
|
readonly local: true;
|
|
1166
1210
|
readonly reason: "The entity's OWN colour as a CSS colour string — DATA a person picked in a settings screen (a status, an issue type, a tag), a third axis beside `variant` (structure) and `tone` (meaning). No vocabulary type fits: ToneProp is the closed semantic set, and this value is open by definition. Washed into --badge-tint-surface rather than filled, because no foreground clears WCAG AA against every colour a picker can produce.";
|
|
@@ -1725,6 +1769,69 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
1725
1769
|
readonly file: "components/data-display/timeline.tsx";
|
|
1726
1770
|
readonly vocabulary: readonly ["ClassNameProp"];
|
|
1727
1771
|
};
|
|
1772
|
+
readonly TimelineGridColumnProp: {
|
|
1773
|
+
readonly group: "data-display";
|
|
1774
|
+
readonly file: "components/data-display.prop.ts";
|
|
1775
|
+
readonly vocabulary: readonly ["IdProp", "LabelProp", "DescriptionProp", {
|
|
1776
|
+
readonly field: "current";
|
|
1777
|
+
readonly local: true;
|
|
1778
|
+
readonly reason: "Marks the column as now/today — it carries the tint and hosts the grid's now marker.";
|
|
1779
|
+
}];
|
|
1780
|
+
};
|
|
1781
|
+
readonly TimelineGridEventProp: {
|
|
1782
|
+
readonly group: "data-display";
|
|
1783
|
+
readonly file: "components/data-display.prop.ts";
|
|
1784
|
+
readonly vocabulary: readonly ["IdProp", "TitleProp", "DescriptionProp", {
|
|
1785
|
+
readonly field: "columnId";
|
|
1786
|
+
readonly local: true;
|
|
1787
|
+
readonly reason: "Id of the column the event belongs to (see TimelineGridColumnProp.id).";
|
|
1788
|
+
}, {
|
|
1789
|
+
readonly field: "start";
|
|
1790
|
+
readonly local: true;
|
|
1791
|
+
readonly reason: 'Start clock time in the column\'s own day, "HH:MM" — no date, no timezone.';
|
|
1792
|
+
}, {
|
|
1793
|
+
readonly field: "end";
|
|
1794
|
+
readonly local: true;
|
|
1795
|
+
readonly reason: 'End clock time, "HH:MM"; at or before start means the event continues into the next day.';
|
|
1796
|
+
}, {
|
|
1797
|
+
readonly field: "color";
|
|
1798
|
+
readonly local: true;
|
|
1799
|
+
readonly reason: "The record's own colour, washed into the block exactly like Badge `color` — decorative, never the only signal.";
|
|
1800
|
+
}];
|
|
1801
|
+
};
|
|
1802
|
+
readonly TimelineGridProp: {
|
|
1803
|
+
readonly group: "data-display";
|
|
1804
|
+
readonly file: "components/data-display.prop.ts";
|
|
1805
|
+
readonly vocabulary: readonly ["LabelProp", "ClassNameProp", "IdProp", {
|
|
1806
|
+
readonly field: "columns";
|
|
1807
|
+
readonly local: true;
|
|
1808
|
+
readonly reason: "Consumer-supplied columns in render order (see TimelineGridColumnProp).";
|
|
1809
|
+
}, {
|
|
1810
|
+
readonly field: "events";
|
|
1811
|
+
readonly local: true;
|
|
1812
|
+
readonly reason: "Consumer-supplied events (see TimelineGridEventProp).";
|
|
1813
|
+
}, {
|
|
1814
|
+
readonly field: "start";
|
|
1815
|
+
readonly local: true;
|
|
1816
|
+
readonly reason: 'First clock time on the axis, "HH:MM"; defaults to the earliest event on the hour so a block can only fall outside a PINNED axis.';
|
|
1817
|
+
}, {
|
|
1818
|
+
readonly field: "end";
|
|
1819
|
+
readonly local: true;
|
|
1820
|
+
readonly reason: 'Last clock time on the axis, "HH:MM"; defaults to the latest event on the hour.';
|
|
1821
|
+
}, {
|
|
1822
|
+
readonly field: "interval";
|
|
1823
|
+
readonly local: true;
|
|
1824
|
+
readonly reason: "Hours between hour rules and axis labels (default 1).";
|
|
1825
|
+
}, {
|
|
1826
|
+
readonly field: "now";
|
|
1827
|
+
readonly local: true;
|
|
1828
|
+
readonly reason: 'Current clock time, "HH:MM" — draws the now marker in the columns marked current.';
|
|
1829
|
+
}, {
|
|
1830
|
+
readonly field: "onEventSelect";
|
|
1831
|
+
readonly local: true;
|
|
1832
|
+
readonly reason: "Block click handler carrying the event; its presence turns every block into a real button.";
|
|
1833
|
+
}];
|
|
1834
|
+
};
|
|
1728
1835
|
readonly TreeListProp: {
|
|
1729
1836
|
readonly group: "data-display";
|
|
1730
1837
|
readonly file: "components/data-display/tree-list.tsx";
|
package/dist/props/registry.js
CHANGED
|
@@ -110,6 +110,11 @@ const VOCABULARY_REGISTRY = {
|
|
|
110
110
|
category: "shared",
|
|
111
111
|
description: "Radix asChild polymorphism"
|
|
112
112
|
},
|
|
113
|
+
FlushProp: {
|
|
114
|
+
file: "vocabulary/shared.prop.ts",
|
|
115
|
+
category: "shared",
|
|
116
|
+
description: "Content owns its own inset \u2014 the container drops its padding so the child reaches the frame edge (CardContent/CardFooter flush, TableCell flush, PopoverContent flush)"
|
|
117
|
+
},
|
|
113
118
|
WidthProp: {
|
|
114
119
|
file: "vocabulary/shared.prop.ts",
|
|
115
120
|
category: "shared",
|
|
@@ -207,6 +212,11 @@ const VOCABULARY_REGISTRY = {
|
|
|
207
212
|
category: "layout",
|
|
208
213
|
description: "CenteredShell column block alignment \u2014 start (flowing page), center (system surface)"
|
|
209
214
|
},
|
|
215
|
+
MobileShellHeightProp: {
|
|
216
|
+
file: "vocabulary/layout.prop.ts",
|
|
217
|
+
category: "layout",
|
|
218
|
+
description: "MobileShell block-size contract \u2014 viewport (100dvh root, the real app) | fill (fills a bounded parent, e.g. a device-frame preview)"
|
|
219
|
+
},
|
|
210
220
|
CenteredShellPresetProp: {
|
|
211
221
|
file: "vocabulary/layout.prop.ts",
|
|
212
222
|
category: "layout",
|
|
@@ -222,6 +232,11 @@ const VOCABULARY_REGISTRY = {
|
|
|
222
232
|
category: "data",
|
|
223
233
|
description: "Table column priority for the action-collection preset \u2014 primary | secondary | meta | actions (unset = takes the remaining space)"
|
|
224
234
|
},
|
|
235
|
+
TableCellIndentProp: {
|
|
236
|
+
file: "vocabulary/data.prop.ts",
|
|
237
|
+
category: "data",
|
|
238
|
+
description: "TableCell hierarchy depth \u2014 indent = --table-cell-space-x + depth x --table-cell-indent-space-step (tree rows, grouped detail rows)"
|
|
239
|
+
},
|
|
225
240
|
ErrorSurfaceModeProp: {
|
|
226
241
|
file: "vocabulary/layout.prop.ts",
|
|
227
242
|
category: "layout",
|
|
@@ -546,6 +561,11 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
546
561
|
group: "layout",
|
|
547
562
|
file: "components/layout.prop.ts",
|
|
548
563
|
vocabulary: [
|
|
564
|
+
{
|
|
565
|
+
field: "as",
|
|
566
|
+
local: true,
|
|
567
|
+
reason: "Closed tag seam (div | span) so a Flex stays valid HTML inside a phrasing-only parent such as the <button> a TabsTrigger renders \u2014 same shape as ListRow's `as` (gh#354)."
|
|
568
|
+
},
|
|
549
569
|
{ field: "direction", local: true, reason: "Flex-specific axis control." },
|
|
550
570
|
"GapProp",
|
|
551
571
|
{ field: "align", local: true, reason: "Flex-specific align-items keyword subset." },
|
|
@@ -656,9 +676,40 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
656
676
|
local: true,
|
|
657
677
|
reason: "Auth-specific vertical-density scope for card descendants."
|
|
658
678
|
},
|
|
679
|
+
{
|
|
680
|
+
field: "measure",
|
|
681
|
+
local: true,
|
|
682
|
+
reason: "Auth-shell content-slot measure; wide is the split brand-panel login."
|
|
683
|
+
},
|
|
684
|
+
"ActionProp",
|
|
659
685
|
"AuthShellPresetProp"
|
|
660
686
|
]
|
|
661
687
|
},
|
|
688
|
+
MobileShellProp: {
|
|
689
|
+
group: "layout",
|
|
690
|
+
file: "components/layout.prop.ts",
|
|
691
|
+
vocabulary: [
|
|
692
|
+
"ChildrenProp",
|
|
693
|
+
"ClassNameProp",
|
|
694
|
+
"ActionProp",
|
|
695
|
+
"MobileShellHeightProp",
|
|
696
|
+
{
|
|
697
|
+
field: "header",
|
|
698
|
+
local: true,
|
|
699
|
+
reason: "MobileShell app-bar band \u2014 the screen title row; it absorbs the top safe-area inset when no statusBar precedes it."
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
field: "statusBar",
|
|
703
|
+
local: true,
|
|
704
|
+
reason: "MobileShell OS status-bar band \u2014 standalone/PWA chrome or a device-frame preview; owns the top safe-area inset."
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
field: "tabBar",
|
|
708
|
+
local: true,
|
|
709
|
+
reason: "MobileShell bottom navigation band \u2014 tiling equal-width destinations; owns the home-indicator inset."
|
|
710
|
+
}
|
|
711
|
+
]
|
|
712
|
+
},
|
|
662
713
|
SeparatorProp: {
|
|
663
714
|
group: "layout",
|
|
664
715
|
file: "components/layout.prop.ts",
|
|
@@ -1346,6 +1397,11 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
1346
1397
|
group: "data-display",
|
|
1347
1398
|
file: "components/data-display.prop.ts",
|
|
1348
1399
|
vocabulary: [
|
|
1400
|
+
{
|
|
1401
|
+
field: "as",
|
|
1402
|
+
local: true,
|
|
1403
|
+
reason: "Closed tag seam (div | span) so a chip stays valid HTML inside a phrasing-only parent such as the <button> a TabsTrigger renders \u2014 same shape as ListRow's `as` (gh#354)."
|
|
1404
|
+
},
|
|
1349
1405
|
"BadgeVariantProp",
|
|
1350
1406
|
"ShapeProp",
|
|
1351
1407
|
"ToneProp",
|
|
@@ -1916,6 +1972,93 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
1916
1972
|
file: "components/data-display/timeline.tsx",
|
|
1917
1973
|
vocabulary: ["ClassNameProp"]
|
|
1918
1974
|
},
|
|
1975
|
+
TimelineGridColumnProp: {
|
|
1976
|
+
group: "data-display",
|
|
1977
|
+
file: "components/data-display.prop.ts",
|
|
1978
|
+
vocabulary: [
|
|
1979
|
+
"IdProp",
|
|
1980
|
+
"LabelProp",
|
|
1981
|
+
"DescriptionProp",
|
|
1982
|
+
{
|
|
1983
|
+
field: "current",
|
|
1984
|
+
local: true,
|
|
1985
|
+
reason: "Marks the column as now/today \u2014 it carries the tint and hosts the grid's now marker."
|
|
1986
|
+
}
|
|
1987
|
+
]
|
|
1988
|
+
},
|
|
1989
|
+
TimelineGridEventProp: {
|
|
1990
|
+
group: "data-display",
|
|
1991
|
+
file: "components/data-display.prop.ts",
|
|
1992
|
+
vocabulary: [
|
|
1993
|
+
"IdProp",
|
|
1994
|
+
"TitleProp",
|
|
1995
|
+
"DescriptionProp",
|
|
1996
|
+
{
|
|
1997
|
+
field: "columnId",
|
|
1998
|
+
local: true,
|
|
1999
|
+
reason: "Id of the column the event belongs to (see TimelineGridColumnProp.id)."
|
|
2000
|
+
},
|
|
2001
|
+
{
|
|
2002
|
+
field: "start",
|
|
2003
|
+
local: true,
|
|
2004
|
+
reason: `Start clock time in the column's own day, "HH:MM" \u2014 no date, no timezone.`
|
|
2005
|
+
},
|
|
2006
|
+
{
|
|
2007
|
+
field: "end",
|
|
2008
|
+
local: true,
|
|
2009
|
+
reason: 'End clock time, "HH:MM"; at or before start means the event continues into the next day.'
|
|
2010
|
+
},
|
|
2011
|
+
{
|
|
2012
|
+
field: "color",
|
|
2013
|
+
local: true,
|
|
2014
|
+
reason: "The record's own colour, washed into the block exactly like Badge `color` \u2014 decorative, never the only signal."
|
|
2015
|
+
}
|
|
2016
|
+
]
|
|
2017
|
+
},
|
|
2018
|
+
TimelineGridProp: {
|
|
2019
|
+
group: "data-display",
|
|
2020
|
+
file: "components/data-display.prop.ts",
|
|
2021
|
+
vocabulary: [
|
|
2022
|
+
"LabelProp",
|
|
2023
|
+
"ClassNameProp",
|
|
2024
|
+
"IdProp",
|
|
2025
|
+
{
|
|
2026
|
+
field: "columns",
|
|
2027
|
+
local: true,
|
|
2028
|
+
reason: "Consumer-supplied columns in render order (see TimelineGridColumnProp)."
|
|
2029
|
+
},
|
|
2030
|
+
{
|
|
2031
|
+
field: "events",
|
|
2032
|
+
local: true,
|
|
2033
|
+
reason: "Consumer-supplied events (see TimelineGridEventProp)."
|
|
2034
|
+
},
|
|
2035
|
+
{
|
|
2036
|
+
field: "start",
|
|
2037
|
+
local: true,
|
|
2038
|
+
reason: 'First clock time on the axis, "HH:MM"; defaults to the earliest event on the hour so a block can only fall outside a PINNED axis.'
|
|
2039
|
+
},
|
|
2040
|
+
{
|
|
2041
|
+
field: "end",
|
|
2042
|
+
local: true,
|
|
2043
|
+
reason: 'Last clock time on the axis, "HH:MM"; defaults to the latest event on the hour.'
|
|
2044
|
+
},
|
|
2045
|
+
{
|
|
2046
|
+
field: "interval",
|
|
2047
|
+
local: true,
|
|
2048
|
+
reason: "Hours between hour rules and axis labels (default 1)."
|
|
2049
|
+
},
|
|
2050
|
+
{
|
|
2051
|
+
field: "now",
|
|
2052
|
+
local: true,
|
|
2053
|
+
reason: 'Current clock time, "HH:MM" \u2014 draws the now marker in the columns marked current.'
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
field: "onEventSelect",
|
|
2057
|
+
local: true,
|
|
2058
|
+
reason: "Block click handler carrying the event; its presence turns every block into a real button."
|
|
2059
|
+
}
|
|
2060
|
+
]
|
|
2061
|
+
},
|
|
1919
2062
|
TreeListProp: {
|
|
1920
2063
|
group: "data-display",
|
|
1921
2064
|
file: "components/data-display/tree-list.tsx",
|
|
@@ -87,3 +87,9 @@ export type TablePresetProp = "default" | "action-collection" | "stacked-record-
|
|
|
87
87
|
* is reserved first so it can never be pushed outside the viewport.
|
|
88
88
|
*/
|
|
89
89
|
export type TableColumnPriorityProp = "primary" | "secondary" | "meta" | "actions";
|
|
90
|
+
/**
|
|
91
|
+
* Hierarchy depth a table cell renders at. `0` sits on the column's own text axis and every
|
|
92
|
+
* further level adds one `--table-cell-indent-space-step`, so a tree row or a grouped detail row
|
|
93
|
+
* expresses its level instead of hand-rolling `style={{ paddingInlineStart }}` at the call site.
|
|
94
|
+
*/
|
|
95
|
+
export type TableCellIndentProp = number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Barrel — all vocabulary prop types. */
|
|
2
|
-
export type { ClassNameProp, ChildrenProp, IdProp, OpenProp, DefaultOpenProp, OnOpenChangeProp, HandlerProp, PendingProp, RequiredProp, DisabledProp, LabelProp, HelperProp, ErrorProp, ErrorBagProp, PlaceholderProp, NameProp, ValueProp, DefaultValueProp, OnValueChangeProp, OnChangeProp, OnClickProp, AsChildProp, WidthProp, ControlWidthProp, } from "./shared.prop.js";
|
|
2
|
+
export type { ClassNameProp, ChildrenProp, IdProp, OpenProp, DefaultOpenProp, OnOpenChangeProp, HandlerProp, PendingProp, RequiredProp, DisabledProp, LabelProp, HelperProp, ErrorProp, ErrorBagProp, PlaceholderProp, NameProp, ValueProp, DefaultValueProp, OnValueChangeProp, OnChangeProp, OnClickProp, AsChildProp, FlushProp, WidthProp, ControlWidthProp, } from "./shared.prop.js";
|
|
3
3
|
export type { TitleProp, SubtitleProp, StatusProp, DescriptionProp, ExtraProp, FooterProp, ActionProp, IconProp, ConfirmLabelProp, CancelLabelProp, ActionsProp, EmptyMessageProp, } from "./content.prop.js";
|
|
4
|
-
export type { PageDensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, CenteredShellPresetProp, ErrorSurfaceModeProp, ErrorSurfaceStatusProp, AuthShellPresetProp, OrientationProp, TableDensityProp, DensityProp, GapProp, } from "./layout.prop.js";
|
|
4
|
+
export type { PageDensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, CenteredShellPresetProp, ErrorSurfaceModeProp, ErrorSurfaceStatusProp, AuthShellPresetProp, MobileShellHeightProp, OrientationProp, TableDensityProp, DensityProp, GapProp, } from "./layout.prop.js";
|
|
5
5
|
export type { ButtonVariantProp, ButtonSizeProp, BadgeVariantProp, AppSettingPickerAppearanceProp, ShapeProp, AvatarShapeProp, TextSizeProp, TextToneProp, FontWeightProp, HeadingLevelProp, TextAlignProp, SizeProp, FormLayoutProp, DescriptionsLayoutProp, BreakpointProp, ConfirmVariantProp, ToneProp, AlertVariantProp, SortDirectionProp, ColumnAlignProp, SortStateProp, RevealDelayProp, ActivityVariantProp, ActivityAnnounceProp, } from "./interaction.prop.js";
|
|
6
6
|
export type { BreadcrumbItemProp, BreadcrumbProp } from "./navigation.prop.js";
|
|
7
|
-
export type { GetRowIdProp, OnRowClickProp, ColumnDefProp, TablePresetProp, TableColumnPriorityProp, SelectedIdsProp, OnSelectChangeProp, OnTableDensityChangeProp, OnSortChangeProp, OnSearchChangeProp, OnClearFiltersProp, HasActiveFiltersProp, StickyProp, } from "./data.prop.js";
|
|
7
|
+
export type { GetRowIdProp, OnRowClickProp, ColumnDefProp, TablePresetProp, TableColumnPriorityProp, TableCellIndentProp, SelectedIdsProp, OnSelectChangeProp, OnTableDensityChangeProp, OnSortChangeProp, OnSearchChangeProp, OnClearFiltersProp, HasActiveFiltersProp, StickyProp, } from "./data.prop.js";
|
|
@@ -17,6 +17,15 @@ export type CenteredShellWidthProp = "sm" | "md" | "lg";
|
|
|
17
17
|
* maintenance notice) — the geometry stays package-owned, so no consumer `min-h-dvh` / flex CSS.
|
|
18
18
|
*/
|
|
19
19
|
export type CenteredShellAlignProp = "start" | "center";
|
|
20
|
+
/**
|
|
21
|
+
* MobileShell block-size contract — WHERE the handheld shell gets its one-screen height, the one
|
|
22
|
+
* question a bounded shell cannot answer for itself.
|
|
23
|
+
* `"viewport"` (default) is the real app: the shell is exactly `100dvh`, the document never
|
|
24
|
+
* scrolls, and the chrome bands stay on screen while the URL bar collapses. `"fill"` fills a
|
|
25
|
+
* BOUNDED parent instead — a device-frame preview, or a phone view embedded in a wider page —
|
|
26
|
+
* where a viewport-tall root would overflow its frame. Nothing else differs between the two.
|
|
27
|
+
*/
|
|
28
|
+
export type MobileShellHeightProp = "viewport" | "fill";
|
|
20
29
|
/**
|
|
21
30
|
* ErrorSurface shell contract — WHERE the exception surface lives, not how it looks.
|
|
22
31
|
* `"application"` (403 / 404): the failure happened INSIDE the authenticated app, so the surface
|
|
@@ -43,8 +52,14 @@ export type ErrorSurfaceStatusProp = 400 | 403 | 404 | 500 | 503 | (number & {})
|
|
|
43
52
|
* scroll origin, and the only preset with a footer-clearance knob of its own.
|
|
44
53
|
*/
|
|
45
54
|
export type AuthShellPresetProp = "default" | "login" | "registration" | "device-authorization" | "context-selection" | "account-recovery";
|
|
46
|
-
/**
|
|
47
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Shared gap between layout children; components may document subsets.
|
|
57
|
+
* `"none"` is a DELIBERATE zero, not the absence of a value: two lines that read as ONE block —
|
|
58
|
+
* a name over its role, a weekday over its date, a tab bar with no seam between its triggers.
|
|
59
|
+
* Without it those stacks had to carry `gap="xs"`, which is a visual change forced by a missing
|
|
60
|
+
* step rather than by design.
|
|
61
|
+
*/
|
|
62
|
+
export type GapProp = "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
|
48
63
|
/** DataTable row density subset. */
|
|
49
64
|
export type TableDensityProp = Exclude<DensityProp, "default">;
|
|
50
65
|
/**
|
|
@@ -50,6 +50,13 @@ export type OnChangeProp = React.ChangeEventHandler<HTMLInputElement>;
|
|
|
50
50
|
export type OnClickProp = React.MouseEventHandler<HTMLButtonElement>;
|
|
51
51
|
/** Radix/shadcn `asChild` polymorphism — render as child element. */
|
|
52
52
|
export type AsChildProp = boolean;
|
|
53
|
+
/**
|
|
54
|
+
* The slot's CONTENT owns its own inset: the container drops its padding so the child reaches the
|
|
55
|
+
* frame edge — a full-bleed table inside a Card, an expanded detail panel inside a table cell, a
|
|
56
|
+
* Command list inside a Popover. It is the sanctioned replacement for the `p-0` utility a consumer
|
|
57
|
+
* would otherwise write at the call site.
|
|
58
|
+
*/
|
|
59
|
+
export type FlushProp = boolean;
|
|
53
60
|
/**
|
|
54
61
|
* An explicit layout dimension (NOT the `SizeProp` control-height tier). A `number` is treated as
|
|
55
62
|
* px; a `string` is any CSS length (`"32rem"`, `"90vw"`, `"50%"`).
|
package/dist/styles/control.css
CHANGED
|
@@ -368,7 +368,7 @@
|
|
|
368
368
|
width: var(--checkbox-size);
|
|
369
369
|
height: var(--checkbox-size);
|
|
370
370
|
flex-shrink: 0;
|
|
371
|
-
border:
|
|
371
|
+
border: var(--checkbox-border-width) solid hsl(var(--primary));
|
|
372
372
|
color: hsl(var(--primary));
|
|
373
373
|
background: transparent;
|
|
374
374
|
}
|
|
@@ -999,6 +999,23 @@
|
|
|
999
999
|
--control-height: var(--control-height-sm);
|
|
1000
1000
|
}
|
|
1001
1001
|
|
|
1002
|
+
.ui-control-trigger {
|
|
1003
|
+
cursor: pointer;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
.ui-control-trigger:disabled,
|
|
1007
|
+
.ui-control-trigger[data-disabled] {
|
|
1008
|
+
cursor: not-allowed;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
.ui-control[data-size="sm"] {
|
|
1012
|
+
--control-height: var(--control-height-sm);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
.ui-control[data-size="lg"] {
|
|
1016
|
+
--control-height: var(--control-height-lg);
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1002
1019
|
.ui-number-input[data-size="sm"] {
|
|
1003
1020
|
--control-height: var(--control-height-sm);
|
|
1004
1021
|
}
|
|
@@ -897,3 +897,170 @@
|
|
|
897
897
|
border-block-start: var(--stroke-hairline) solid hsl(var(--border));
|
|
898
898
|
}
|
|
899
899
|
}
|
|
900
|
+
|
|
901
|
+
@layer components {
|
|
902
|
+
.ui-timeline-grid {
|
|
903
|
+
overflow-x: auto;
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
.ui-timeline-grid-frame {
|
|
907
|
+
display: grid;
|
|
908
|
+
grid-template-columns:
|
|
909
|
+
var(--timeline-grid-axis-width)
|
|
910
|
+
repeat(var(--timeline-grid-columns, 1), minmax(var(--timeline-grid-column-min-width), 1fr));
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
.ui-timeline-grid-corner {
|
|
914
|
+
border-block-end: 1px solid hsl(var(--border));
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
.ui-timeline-grid-head {
|
|
918
|
+
display: flex;
|
|
919
|
+
flex-direction: column;
|
|
920
|
+
align-items: center;
|
|
921
|
+
padding: var(--space-1);
|
|
922
|
+
border-block-end: 1px solid hsl(var(--border));
|
|
923
|
+
border-inline-start: 1px solid hsl(var(--border));
|
|
924
|
+
background: hsl(var(--secondary));
|
|
925
|
+
font-size: var(--timeline-grid-head-font-size);
|
|
926
|
+
font-weight: var(--font-weight-medium);
|
|
927
|
+
line-height: var(--line-height-tight);
|
|
928
|
+
text-align: center;
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
.ui-timeline-grid-head[data-current="true"] {
|
|
932
|
+
background: var(--timeline-grid-current-tint, hsl(var(--primary) / 0.08));
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
.ui-timeline-grid-head-description {
|
|
936
|
+
color: hsl(var(--muted-foreground));
|
|
937
|
+
font-size: var(--timeline-grid-axis-font-size);
|
|
938
|
+
font-weight: var(--font-weight-normal);
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
.ui-timeline-grid-axis,
|
|
942
|
+
.ui-timeline-grid-column {
|
|
943
|
+
position: relative;
|
|
944
|
+
block-size: calc(var(--timeline-grid-hour-height) * var(--timeline-grid-hours, 24));
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
.ui-timeline-grid-tick {
|
|
948
|
+
position: absolute;
|
|
949
|
+
inset-inline-end: var(--space-1);
|
|
950
|
+
inset-block-start: calc(var(--timeline-grid-hour-height) * var(--timeline-grid-tick-offset, 0));
|
|
951
|
+
color: hsl(var(--muted-foreground));
|
|
952
|
+
font-size: var(--timeline-grid-axis-font-size);
|
|
953
|
+
font-variant-numeric: tabular-nums;
|
|
954
|
+
line-height: 1;
|
|
955
|
+
transform: translateY(-50%);
|
|
956
|
+
white-space: nowrap;
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
.ui-timeline-grid-column {
|
|
960
|
+
margin: 0;
|
|
961
|
+
padding: 0;
|
|
962
|
+
border-inline-start: 1px solid hsl(var(--border));
|
|
963
|
+
background-image: repeating-linear-gradient(
|
|
964
|
+
to bottom,
|
|
965
|
+
var(--timeline-grid-line-color, hsl(var(--border))) 0 1px,
|
|
966
|
+
transparent 1px calc(var(--timeline-grid-hour-height) * var(--timeline-grid-interval, 1))
|
|
967
|
+
);
|
|
968
|
+
list-style: none;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
.ui-timeline-grid-column[data-current="true"] {
|
|
972
|
+
background-color: var(--timeline-grid-current-tint, hsl(var(--primary) / 0.05));
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
.ui-timeline-grid-event {
|
|
976
|
+
position: absolute;
|
|
977
|
+
inset-block-start: calc(
|
|
978
|
+
var(--timeline-grid-hour-height) * var(--timeline-grid-event-offset, 0)
|
|
979
|
+
);
|
|
980
|
+
inset-inline-start: calc(
|
|
981
|
+
var(--timeline-grid-event-lane, 0) / var(--timeline-grid-event-lanes, 1) * 100%
|
|
982
|
+
);
|
|
983
|
+
box-sizing: border-box;
|
|
984
|
+
inline-size: calc(100% / var(--timeline-grid-event-lanes, 1));
|
|
985
|
+
block-size: calc(var(--timeline-grid-hour-height) * var(--timeline-grid-event-span, 0));
|
|
986
|
+
min-block-size: var(--timeline-grid-event-min-height);
|
|
987
|
+
padding-inline-end: var(--timeline-grid-event-gap);
|
|
988
|
+
padding-block-end: var(--timeline-grid-event-gap);
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
.ui-timeline-grid-event-body {
|
|
992
|
+
display: flex;
|
|
993
|
+
overflow: hidden;
|
|
994
|
+
box-sizing: border-box;
|
|
995
|
+
flex-direction: column;
|
|
996
|
+
inline-size: 100%;
|
|
997
|
+
block-size: 100%;
|
|
998
|
+
padding: var(--timeline-grid-event-space-inset);
|
|
999
|
+
border-inline-start: var(--timeline-grid-event-border-width) solid
|
|
1000
|
+
var(--timeline-grid-event-color, hsl(var(--primary)));
|
|
1001
|
+
border-radius: var(--timeline-grid-event-radius);
|
|
1002
|
+
|
|
1003
|
+
background-color: color-mix(
|
|
1004
|
+
in srgb,
|
|
1005
|
+
hsl(var(--background)),
|
|
1006
|
+
var(--timeline-grid-event-color, hsl(var(--primary))) 12%
|
|
1007
|
+
);
|
|
1008
|
+
color: hsl(var(--foreground));
|
|
1009
|
+
font-size: var(--timeline-grid-event-font-size);
|
|
1010
|
+
line-height: var(--line-height-tight);
|
|
1011
|
+
text-align: start;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
.ui-timeline-grid-event[data-clipped="start"] .ui-timeline-grid-event-body,
|
|
1015
|
+
.ui-timeline-grid-event[data-clipped="both"] .ui-timeline-grid-event-body {
|
|
1016
|
+
border-start-start-radius: 0;
|
|
1017
|
+
border-start-end-radius: 0;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
.ui-timeline-grid-event[data-clipped="end"] .ui-timeline-grid-event-body,
|
|
1021
|
+
.ui-timeline-grid-event[data-clipped="both"] .ui-timeline-grid-event-body {
|
|
1022
|
+
border-end-start-radius: 0;
|
|
1023
|
+
border-end-end-radius: 0;
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
.ui-timeline-grid-event-time {
|
|
1027
|
+
color: var(--timeline-grid-event-muted-color);
|
|
1028
|
+
font-variant-numeric: tabular-nums;
|
|
1029
|
+
white-space: nowrap;
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
.ui-timeline-grid-event-title {
|
|
1033
|
+
overflow: hidden;
|
|
1034
|
+
font-weight: var(--font-weight-medium);
|
|
1035
|
+
text-overflow: ellipsis;
|
|
1036
|
+
white-space: nowrap;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
.ui-timeline-grid-event-description {
|
|
1040
|
+
overflow: hidden;
|
|
1041
|
+
color: var(--timeline-grid-event-muted-color);
|
|
1042
|
+
text-overflow: ellipsis;
|
|
1043
|
+
white-space: nowrap;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
button.ui-timeline-grid-event-body {
|
|
1047
|
+
cursor: pointer;
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
button.ui-timeline-grid-event-body:hover {
|
|
1051
|
+
background-color: color-mix(
|
|
1052
|
+
in srgb,
|
|
1053
|
+
hsl(var(--background)),
|
|
1054
|
+
var(--timeline-grid-event-color, hsl(var(--primary))) 20%
|
|
1055
|
+
);
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
.ui-timeline-grid-now {
|
|
1059
|
+
position: absolute;
|
|
1060
|
+
inset-inline: 0;
|
|
1061
|
+
inset-block-start: calc(var(--timeline-grid-hour-height) * var(--timeline-grid-now-offset, 0));
|
|
1062
|
+
block-size: var(--timeline-grid-now-width);
|
|
1063
|
+
background: var(--timeline-grid-now-color, hsl(var(--destructive)));
|
|
1064
|
+
pointer-events: none;
|
|
1065
|
+
}
|
|
1066
|
+
}
|
package/dist/styles/layout.css
CHANGED
|
@@ -158,6 +158,10 @@
|
|
|
158
158
|
justify-content: space-evenly;
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
.ui-flex-gap-none {
|
|
162
|
+
gap: 0;
|
|
163
|
+
}
|
|
164
|
+
|
|
161
165
|
.ui-flex-gap-xs {
|
|
162
166
|
gap: var(--space-stack-xs);
|
|
163
167
|
}
|
|
@@ -238,6 +242,9 @@
|
|
|
238
242
|
grid-template-columns: minmax(0, 1fr);
|
|
239
243
|
}
|
|
240
244
|
|
|
245
|
+
.ui-responsive-grid[data-gap="none"] {
|
|
246
|
+
gap: 0;
|
|
247
|
+
}
|
|
241
248
|
.ui-responsive-grid[data-gap="xs"] {
|
|
242
249
|
gap: var(--space-stack-xs);
|
|
243
250
|
}
|