@godxjp/ui 19.4.2 → 19.6.0
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/app/app-provider.js +10 -1
- package/dist/app/theme-axes.d.ts +18 -3
- package/dist/app/theme-axes.js +15 -3
- package/dist/components/data-display/badge.js +4 -1
- package/dist/components/data-display/data-table.js +9 -2
- package/dist/components/data-entry/checkbox.d.ts +12 -0
- package/dist/components/data-entry/checkbox.js +34 -3
- package/dist/components/data-entry/index.d.ts +2 -0
- package/dist/components/data-entry/index.js +2 -0
- package/dist/components/data-entry/segmented.d.ts +2 -0
- package/dist/components/data-entry/segmented.js +5 -0
- package/dist/components/data-entry/select.d.ts +2 -0
- package/dist/components/data-entry/select.js +8 -3
- package/dist/components/feedback/sheet.js +1 -1
- package/dist/components/feedback/sonner.d.ts +7 -1
- package/dist/components/feedback/sonner.js +27 -7
- package/dist/components/general/button.js +6 -1
- package/dist/components/general/inert-background.d.ts +8 -3
- package/dist/components/general/inert-background.js +26 -2
- package/dist/components/general/logo.d.ts +53 -0
- package/dist/components/general/logo.js +57 -3
- package/dist/components/general/typography.d.ts +7 -1
- package/dist/components/general/typography.js +20 -5
- package/dist/components/layout/index.d.ts +4 -0
- package/dist/components/layout/index.js +4 -0
- package/dist/components/layout/nav-list.d.ts +26 -0
- package/dist/components/layout/nav-list.js +21 -0
- package/dist/components/layout/topbar-item.d.ts +17 -0
- package/dist/components/layout/topbar-item.js +21 -0
- package/dist/components/navigation/app-setting-picker.js +22 -5
- package/dist/components/navigation/context-menu.js +2 -2
- package/dist/components/navigation/dropdown-menu.js +2 -2
- package/dist/components/navigation/tabs.js +42 -10
- package/dist/components/ui/segmented.d.ts +48 -0
- package/dist/components/ui/segmented.js +48 -0
- package/dist/email/tokens.generated.d.ts +3 -3
- package/dist/email/tokens.generated.js +3 -3
- package/dist/i18n/messages/en.json +2 -1
- package/dist/i18n/messages/ja.json +2 -1
- package/dist/i18n/messages/vi.json +2 -1
- package/dist/props/components/app.prop.d.ts +9 -2
- package/dist/props/components/general.prop.d.ts +31 -1
- package/dist/props/components/layout.prop.d.ts +48 -2
- package/dist/props/registry.d.ts +19 -0
- package/dist/props/registry.js +27 -0
- package/dist/props/vocabulary/shared.prop.d.ts +11 -2
- package/dist/styles/alert-layout.css +4 -0
- package/dist/styles/base.css +2 -0
- package/dist/styles/control.css +94 -26
- package/dist/styles/data-display-layout.css +2 -1
- package/dist/styles/dialog-layout.css +2 -1
- package/dist/styles/focus-ring.css +85 -24
- package/dist/styles/layout.css +2 -1
- package/dist/styles/logo-layout.css +56 -0
- package/dist/styles/navigation-layout.css +15 -0
- package/dist/styles/shell-layout.css +64 -10
- package/dist/styles/text-layout.css +11 -0
- package/dist/tokens/antd.generated.css +40 -0
- package/dist/tokens/axes.css +6 -0
- package/dist/tokens/base.css +4 -0
- package/dist/tokens/components/control.css +5 -1
- package/dist/tokens/components/feedback.css +2 -0
- package/dist/tokens/components/legal-document.css +0 -2
- package/dist/tokens/components/logo.css +13 -0
- package/dist/tokens/components/navigation.css +2 -0
- package/dist/tokens/components/segmented.css +27 -0
- package/dist/tokens/components/shell.css +15 -2
- package/dist/tokens/components/text.css +7 -0
- package/dist/tokens/foundation.css +19 -12
- package/docs/DESIGN-AUTHORITY.md +346 -0
- package/docs/FRAME-COVERAGE-REPORT.md +5 -2
- package/docs/README.md +14 -13
- package/docs/data-entry/segmented.tsx +124 -0
- package/docs/general/typography.tsx +84 -1
- package/docs/layout/nav-list.tsx +63 -0
- package/docs/layout/topbar-item.tsx +157 -0
- package/package.json +8 -2
|
@@ -631,6 +631,25 @@ export type SidebarItemProp = {
|
|
|
631
631
|
/** Nested rows — renders a collapsible submenu group (the parent reads active when any child is). */
|
|
632
632
|
children?: SidebarItemProp[];
|
|
633
633
|
};
|
|
634
|
+
/**
|
|
635
|
+
* A vertical route navigation that lives INSIDE a page, not in the shell (gh#374).
|
|
636
|
+
*
|
|
637
|
+
* Reuses `SidebarItemProp` and `SidebarLinkComponentProp` verbatim rather than minting a parallel
|
|
638
|
+
* vocabulary: the row is the same row, so a service that learnt the rail's item shape does not
|
|
639
|
+
* learn a second one, and a fix to the row reaches both.
|
|
640
|
+
*/
|
|
641
|
+
export type NavListProp = Omit<React.HTMLAttributes<HTMLElement>, "onSelect"> & {
|
|
642
|
+
/** Rows, in reading order. `icon` is required by `SidebarItemProp` — the label aligns to it. */
|
|
643
|
+
items: SidebarItemProp[];
|
|
644
|
+
/** `SidebarItemProp.id` of the current route; that row gets `aria-current="page"`. */
|
|
645
|
+
activeId?: string;
|
|
646
|
+
/** Accessible name for the `<nav>` landmark. Required: a page may hold more than one. */
|
|
647
|
+
label: string;
|
|
648
|
+
/** Router link component — same contract as `Sidebar.linkComponent`. */
|
|
649
|
+
linkComponent?: SidebarLinkComponentProp;
|
|
650
|
+
/** Reports the activated row's id, for consumers driving navigation themselves. */
|
|
651
|
+
onSelect?: (id: string) => void;
|
|
652
|
+
};
|
|
634
653
|
/** @see Sidebar */
|
|
635
654
|
export type SidebarItemData = SidebarItemProp;
|
|
636
655
|
/**
|
|
@@ -654,8 +673,15 @@ export type SidebarLinkProp = {
|
|
|
654
673
|
"aria-label"?: string;
|
|
655
674
|
/** `"menuitem"` inside the collapsed rail's portaled flyout menu; absent for ordinary rows. */
|
|
656
675
|
role?: "menuitem";
|
|
657
|
-
/**
|
|
658
|
-
|
|
676
|
+
/**
|
|
677
|
+
* Reports selection to `Sidebar.onSelect` after the router link runs its own handler.
|
|
678
|
+
*
|
|
679
|
+
* Typed on `Element`, NOT `HTMLElement`. Handler parameters are contravariant, so a link
|
|
680
|
+
* component that accepts the wider `MouseEvent<Element>` — Inertia's `<Link>`, react-router's,
|
|
681
|
+
* TanStack's — cannot receive a prop narrowed to `HTMLElement`, and the anchor-safe contract
|
|
682
|
+
* this type promises would only hold behind a cast at every call site.
|
|
683
|
+
*/
|
|
684
|
+
onClick?: React.MouseEventHandler<Element>;
|
|
659
685
|
};
|
|
660
686
|
/**
|
|
661
687
|
* A framework router link component driven by {@link SidebarLinkProp} — Inertia's `<Link href>`,
|
|
@@ -809,6 +835,26 @@ export type TopbarProp = Omit<React.HTMLAttributes<HTMLDivElement>, "children">
|
|
|
809
835
|
/** Escape hatch — render fully custom bar content instead of the three slots. */
|
|
810
836
|
children?: ReactNode;
|
|
811
837
|
};
|
|
838
|
+
/**
|
|
839
|
+
* @see TopbarItem — ONE interactive cell of a {@link TopbarProp} slot: the account button, a
|
|
840
|
+
* settings trigger, a notifications bell.
|
|
841
|
+
*
|
|
842
|
+
* It exists because the alternative is a `Button`, and a Button in a bar is a control that landed
|
|
843
|
+
* in the bar rather than a part of it — a pill of its own height floating in a taller strip, with
|
|
844
|
+
* its own hover surface and its own focus ring drawn around that pill. Fluent, SLDS, Atlassian and
|
|
845
|
+
* antd's ProLayout all draw a top-bar trigger the other way: the cell is as tall as the bar, its
|
|
846
|
+
* hover is the bar's own surface, and the focus mark is hosted INSIDE the cell because a
|
|
847
|
+
* full-bleed cell has nothing outside itself to ring.
|
|
848
|
+
*/
|
|
849
|
+
export type TopbarItemProp = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
850
|
+
/**
|
|
851
|
+
* Render the bar-cell shape ONTO the child instead of emitting a `<button>` — for a router link,
|
|
852
|
+
* or for a menu/popover trigger that needs to own the element itself.
|
|
853
|
+
*/
|
|
854
|
+
asChild?: boolean;
|
|
855
|
+
children?: ReactNode;
|
|
856
|
+
className?: ClassNameProp;
|
|
857
|
+
};
|
|
812
858
|
/**
|
|
813
859
|
* @see LegalDocumentShell — one entry of the table of contents + the matching document section.
|
|
814
860
|
* `id` is the REAL anchor target (`href="#{id}"`, `<section id>`), so it must be unique on the page
|
package/dist/props/registry.d.ts
CHANGED
|
@@ -927,6 +927,20 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
927
927
|
readonly file: "components/layout.prop.ts";
|
|
928
928
|
readonly vocabulary: readonly ["ChildrenProp"];
|
|
929
929
|
};
|
|
930
|
+
readonly TopbarItemProp: {
|
|
931
|
+
readonly group: "layout";
|
|
932
|
+
readonly file: "components/layout.prop.ts";
|
|
933
|
+
readonly vocabulary: readonly ["ChildrenProp", "ClassNameProp", {
|
|
934
|
+
readonly field: "asChild";
|
|
935
|
+
readonly local: true;
|
|
936
|
+
readonly reason: "Radix Slot passthrough — merges onto the child";
|
|
937
|
+
}];
|
|
938
|
+
};
|
|
939
|
+
readonly NavListProp: {
|
|
940
|
+
readonly group: "layout";
|
|
941
|
+
readonly file: "components/layout.prop.ts";
|
|
942
|
+
readonly vocabulary: readonly ["IdProp", "ClassNameProp"];
|
|
943
|
+
};
|
|
930
944
|
readonly ButtonProp: {
|
|
931
945
|
readonly group: "general";
|
|
932
946
|
readonly file: "components/general.prop.ts";
|
|
@@ -1734,6 +1748,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
1734
1748
|
readonly file: "components/ui/rating.tsx";
|
|
1735
1749
|
readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "ClassNameProp"];
|
|
1736
1750
|
};
|
|
1751
|
+
readonly SegmentedProp: {
|
|
1752
|
+
readonly group: "data-entry";
|
|
1753
|
+
readonly file: "components/ui/segmented.tsx";
|
|
1754
|
+
readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "DisabledProp", "NameProp", "IdProp", "ClassNameProp"];
|
|
1755
|
+
};
|
|
1737
1756
|
readonly TagInputProp: {
|
|
1738
1757
|
readonly group: "data-entry";
|
|
1739
1758
|
readonly file: "components/ui/tag-input.tsx";
|
package/dist/props/registry.js
CHANGED
|
@@ -1020,6 +1020,20 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
1020
1020
|
file: "components/layout.prop.ts",
|
|
1021
1021
|
vocabulary: ["ChildrenProp"]
|
|
1022
1022
|
},
|
|
1023
|
+
TopbarItemProp: {
|
|
1024
|
+
group: "layout",
|
|
1025
|
+
file: "components/layout.prop.ts",
|
|
1026
|
+
vocabulary: [
|
|
1027
|
+
"ChildrenProp",
|
|
1028
|
+
"ClassNameProp",
|
|
1029
|
+
{ field: "asChild", local: true, reason: "Radix Slot passthrough \u2014 merges onto the child" }
|
|
1030
|
+
]
|
|
1031
|
+
},
|
|
1032
|
+
NavListProp: {
|
|
1033
|
+
group: "layout",
|
|
1034
|
+
file: "components/layout.prop.ts",
|
|
1035
|
+
vocabulary: ["IdProp", "ClassNameProp"]
|
|
1036
|
+
},
|
|
1023
1037
|
ButtonProp: {
|
|
1024
1038
|
group: "general",
|
|
1025
1039
|
file: "components/general.prop.ts",
|
|
@@ -1938,6 +1952,19 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
1938
1952
|
file: "components/ui/rating.tsx",
|
|
1939
1953
|
vocabulary: ["ValueProp", "OnValueChangeProp", "DisabledProp", "ClassNameProp"]
|
|
1940
1954
|
},
|
|
1955
|
+
SegmentedProp: {
|
|
1956
|
+
group: "data-entry",
|
|
1957
|
+
file: "components/ui/segmented.tsx",
|
|
1958
|
+
vocabulary: [
|
|
1959
|
+
"ValueProp",
|
|
1960
|
+
"DefaultValueProp",
|
|
1961
|
+
"OnValueChangeProp",
|
|
1962
|
+
"DisabledProp",
|
|
1963
|
+
"NameProp",
|
|
1964
|
+
"IdProp",
|
|
1965
|
+
"ClassNameProp"
|
|
1966
|
+
]
|
|
1967
|
+
},
|
|
1941
1968
|
TagInputProp: {
|
|
1942
1969
|
group: "data-entry",
|
|
1943
1970
|
file: "components/ui/tag-input.tsx",
|
|
@@ -62,5 +62,14 @@ export type FlushProp = boolean;
|
|
|
62
62
|
* px; a `string` is any CSS length (`"32rem"`, `"90vw"`, `"50%"`).
|
|
63
63
|
*/
|
|
64
64
|
export type WidthProp = number | string;
|
|
65
|
-
/**
|
|
66
|
-
|
|
65
|
+
/**
|
|
66
|
+
* How a control sizes on the inline axis: fill its column, hug its label, or sit at a bounded
|
|
67
|
+
* width the theme owns.
|
|
68
|
+
*
|
|
69
|
+
* `bounded` exists because neither of the other two is right for a control whose VALUE varies in
|
|
70
|
+
* length — an organization switcher in a shell top bar is the canonical case. `full` swallows the
|
|
71
|
+
* bar; `auto` makes the bar reflow every time the selected value changes length. `bounded` reads
|
|
72
|
+
* `--control-bounded-width`, so the width is a knob rather than geometry hand-written at the call
|
|
73
|
+
* site (gh#375).
|
|
74
|
+
*/
|
|
75
|
+
export type ControlWidthProp = "full" | "auto" | "bounded";
|
|
@@ -191,6 +191,10 @@
|
|
|
191
191
|
block-size: var(--toast-icon-size);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
+
[data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"] > * {
|
|
195
|
+
visibility: hidden;
|
|
196
|
+
}
|
|
197
|
+
|
|
194
198
|
.ui-skeleton-block {
|
|
195
199
|
border-radius: var(--skeleton-radius);
|
|
196
200
|
background: var(--skeleton-background, hsl(var(--muted)));
|
package/dist/styles/base.css
CHANGED
package/dist/styles/control.css
CHANGED
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
.ui-button--default:hover {
|
|
109
|
-
background: hsl(var(--primary)
|
|
109
|
+
background: hsl(var(--primary-hover));
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
.ui-button--destructive {
|
|
@@ -550,7 +550,8 @@
|
|
|
550
550
|
width: 100%;
|
|
551
551
|
height: 100%;
|
|
552
552
|
flex-direction: column;
|
|
553
|
-
overflow:
|
|
553
|
+
overflow: clip;
|
|
554
|
+
overflow-clip-margin: var(--focus-ring-clip-margin);
|
|
554
555
|
border-radius: var(--control-radius);
|
|
555
556
|
background: hsl(var(--popover));
|
|
556
557
|
color: hsl(var(--popover-foreground));
|
|
@@ -823,33 +824,28 @@
|
|
|
823
824
|
.ui-otp-group[data-appearance="grouped"] .ui-otp-slot[data-active="true"] {
|
|
824
825
|
box-shadow: none;
|
|
825
826
|
}
|
|
827
|
+
|
|
826
828
|
.ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
|
|
827
|
-
border-color: hsl(var(--focus-ring-color, var(--ring))
|
|
828
|
-
|
|
829
|
-
|
|
829
|
+
border-color: hsl(var(--focus-ring-color, var(--ring)));
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
.ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) {
|
|
833
|
+
--focus-ring-color: var(--destructive);
|
|
830
834
|
}
|
|
831
835
|
.ui-otp-container:has(.ui-otp-input[aria-invalid="true"])
|
|
832
836
|
.ui-otp-group[data-appearance="grouped"] {
|
|
833
837
|
border-color: hsl(var(--destructive));
|
|
834
838
|
}
|
|
835
|
-
.ui-otp-container:has(.ui-otp-input[aria-invalid="true"])
|
|
836
|
-
.ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
|
|
837
|
-
box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
|
|
838
|
-
}
|
|
839
839
|
.ui-otp-container:has(.ui-otp-input:disabled) .ui-otp-group[data-appearance="grouped"] {
|
|
840
840
|
background: hsl(var(--muted));
|
|
841
841
|
}
|
|
842
|
+
|
|
842
843
|
.ui-otp-slot[data-active="true"] {
|
|
843
844
|
z-index: 1;
|
|
844
|
-
box-shadow: 0 0 0 var(--focus-ring-width)
|
|
845
|
-
hsl(var(--focus-ring-color, var(--ring)) / var(--focus-ring-opacity, 1));
|
|
846
845
|
}
|
|
847
846
|
.ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) .ui-otp-slot {
|
|
848
847
|
border-color: hsl(var(--destructive));
|
|
849
848
|
}
|
|
850
|
-
.ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) .ui-otp-slot[data-active="true"] {
|
|
851
|
-
box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
|
|
852
|
-
}
|
|
853
849
|
.ui-otp-container:has(.ui-otp-input:disabled) .ui-otp-slot {
|
|
854
850
|
cursor: not-allowed;
|
|
855
851
|
background: hsl(var(--muted));
|
|
@@ -917,6 +913,73 @@
|
|
|
917
913
|
border-radius: var(--radius-sm);
|
|
918
914
|
}
|
|
919
915
|
|
|
916
|
+
.ui-segmented {
|
|
917
|
+
display: inline-flex;
|
|
918
|
+
max-width: 100%;
|
|
919
|
+
align-items: stretch;
|
|
920
|
+
padding: var(--segmented-track-padding);
|
|
921
|
+
border-radius: var(--segmented-track-radius);
|
|
922
|
+
background: hsl(var(--segmented-track-background));
|
|
923
|
+
color: hsl(var(--segmented-item-color));
|
|
924
|
+
font-size: var(--font-size-base);
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
.ui-segmented-item {
|
|
928
|
+
display: inline-flex;
|
|
929
|
+
min-width: 0;
|
|
930
|
+
height: var(--segmented-item-height);
|
|
931
|
+
align-items: center;
|
|
932
|
+
justify-content: center;
|
|
933
|
+
gap: var(--segmented-item-gap);
|
|
934
|
+
padding-inline: var(--segmented-item-padding-inline);
|
|
935
|
+
border: 0;
|
|
936
|
+
border-radius: var(--segmented-item-radius);
|
|
937
|
+
background: transparent;
|
|
938
|
+
color: inherit;
|
|
939
|
+
cursor: pointer;
|
|
940
|
+
|
|
941
|
+
font: inherit;
|
|
942
|
+
white-space: nowrap;
|
|
943
|
+
|
|
944
|
+
transition: color var(--duration-fast);
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
.ui-segmented-item:not([data-state="checked"]):not([data-disabled]):hover {
|
|
948
|
+
background: hsl(var(--segmented-item-hover-background));
|
|
949
|
+
color: hsl(var(--segmented-item-hover-color));
|
|
950
|
+
}
|
|
951
|
+
.ui-segmented-item:not([data-state="checked"]):not([data-disabled]):active {
|
|
952
|
+
background: hsl(var(--segmented-item-active-background));
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
.ui-segmented-item[data-state="checked"] {
|
|
956
|
+
background: hsl(var(--segmented-item-selected-background));
|
|
957
|
+
box-shadow: var(--segmented-item-selected-shadow);
|
|
958
|
+
color: hsl(var(--segmented-item-selected-color));
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
.ui-segmented-item[data-disabled] {
|
|
962
|
+
opacity: var(--disabled-opacity);
|
|
963
|
+
cursor: not-allowed;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
.ui-segmented-item-label {
|
|
967
|
+
overflow: hidden;
|
|
968
|
+
text-overflow: ellipsis;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
.ui-segmented-item-icon {
|
|
972
|
+
display: inline-flex;
|
|
973
|
+
flex: 0 0 auto;
|
|
974
|
+
align-items: center;
|
|
975
|
+
}
|
|
976
|
+
.ui-segmented-item-icon > svg {
|
|
977
|
+
width: var(--icon-size-md);
|
|
978
|
+
height: var(--icon-size-md);
|
|
979
|
+
display: inline-block;
|
|
980
|
+
vertical-align: middle;
|
|
981
|
+
}
|
|
982
|
+
|
|
920
983
|
.ui-tag-input {
|
|
921
984
|
display: flex;
|
|
922
985
|
flex-wrap: wrap;
|
|
@@ -1008,6 +1071,11 @@
|
|
|
1008
1071
|
cursor: not-allowed;
|
|
1009
1072
|
}
|
|
1010
1073
|
|
|
1074
|
+
.ui-control-trigger[data-width="bounded"] {
|
|
1075
|
+
inline-size: var(--control-bounded-width);
|
|
1076
|
+
max-inline-size: 100%;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1011
1079
|
.ui-control[data-size="sm"] {
|
|
1012
1080
|
--control-height: var(--control-height-sm);
|
|
1013
1081
|
}
|
|
@@ -1112,16 +1180,16 @@
|
|
|
1112
1180
|
}
|
|
1113
1181
|
|
|
1114
1182
|
.ui-search-select-panel {
|
|
1183
|
+
--popover-surface-inline-size: max-content;
|
|
1184
|
+
--popover-space-inset: 0;
|
|
1115
1185
|
display: flex;
|
|
1116
1186
|
flex-direction: column;
|
|
1117
1187
|
max-block-size: var(--radix-popover-content-available-height);
|
|
1118
|
-
inline-size: max-content;
|
|
1119
1188
|
max-inline-size: min(
|
|
1120
1189
|
var(--search-select-panel-max-width),
|
|
1121
1190
|
calc(100vw - var(--search-select-panel-viewport-inset))
|
|
1122
1191
|
);
|
|
1123
1192
|
min-inline-size: var(--radix-popover-trigger-width);
|
|
1124
|
-
padding: 0;
|
|
1125
1193
|
}
|
|
1126
1194
|
|
|
1127
1195
|
.ui-search-select-command {
|
|
@@ -1271,9 +1339,9 @@
|
|
|
1271
1339
|
}
|
|
1272
1340
|
|
|
1273
1341
|
.ui-cascader-popover {
|
|
1274
|
-
inline-size: auto;
|
|
1342
|
+
--popover-surface-inline-size: auto;
|
|
1343
|
+
--popover-space-inset: 0;
|
|
1275
1344
|
min-inline-size: var(--radix-popover-trigger-width);
|
|
1276
|
-
padding: 0;
|
|
1277
1345
|
}
|
|
1278
1346
|
|
|
1279
1347
|
.ui-cascader-empty {
|
|
@@ -1479,13 +1547,13 @@
|
|
|
1479
1547
|
}
|
|
1480
1548
|
|
|
1481
1549
|
.ui-time-picker-popover {
|
|
1482
|
-
inline-size: auto;
|
|
1483
|
-
|
|
1550
|
+
--popover-surface-inline-size: auto;
|
|
1551
|
+
--popover-space-inset: 0;
|
|
1484
1552
|
}
|
|
1485
1553
|
|
|
1486
1554
|
.ui-control-panel-flush {
|
|
1487
|
-
inline-size: auto;
|
|
1488
|
-
|
|
1555
|
+
--popover-surface-inline-size: auto;
|
|
1556
|
+
--popover-space-inset: 0;
|
|
1489
1557
|
}
|
|
1490
1558
|
|
|
1491
1559
|
.ui-control-inline-affix-pair-affixed {
|
|
@@ -1584,8 +1652,8 @@
|
|
|
1584
1652
|
@layer components {
|
|
1585
1653
|
|
|
1586
1654
|
.ui-tree-select-popover {
|
|
1587
|
-
inline-size: var(--radix-popover-trigger-width);
|
|
1588
|
-
|
|
1655
|
+
--popover-surface-inline-size: var(--radix-popover-trigger-width);
|
|
1656
|
+
--popover-space-inset: 0;
|
|
1589
1657
|
}
|
|
1590
1658
|
|
|
1591
1659
|
.ui-tree-select-list {
|
|
@@ -1968,8 +2036,8 @@
|
|
|
1968
2036
|
}
|
|
1969
2037
|
|
|
1970
2038
|
.ui-month-picker-panel {
|
|
1971
|
-
inline-size: auto;
|
|
1972
|
-
|
|
2039
|
+
--popover-surface-inline-size: auto;
|
|
2040
|
+
--popover-space-inset: var(--month-picker-panel-space-inset);
|
|
1973
2041
|
}
|
|
1974
2042
|
|
|
1975
2043
|
.ui-month-picker-nav {
|
|
@@ -256,7 +256,8 @@
|
|
|
256
256
|
|
|
257
257
|
.ui-popover-content {
|
|
258
258
|
z-index: var(--overlay-z-index);
|
|
259
|
-
|
|
259
|
+
|
|
260
|
+
width: var(--popover-surface-inline-size, var(--popover-width));
|
|
260
261
|
padding: var(--popover-space-inset);
|
|
261
262
|
border-radius: var(--popover-radius);
|
|
262
263
|
border: 1px solid var(--popover-surface-border-color, hsl(var(--border)));
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
|
|
4
4
|
:is(
|
|
5
5
|
.ui-focus-ring,
|
|
6
|
-
.ui-
|
|
7
|
-
.ui-control,
|
|
6
|
+
.ui-focus-ring-outline,
|
|
8
7
|
.ui-input,
|
|
8
|
+
.ui-control,
|
|
9
9
|
.ui-control-multiline,
|
|
10
10
|
.ui-control-trigger,
|
|
11
|
+
.ui-tag-input,
|
|
12
|
+
.ui-button,
|
|
11
13
|
.ui-toggle,
|
|
12
14
|
.ui-checkbox,
|
|
13
15
|
.ui-radio,
|
|
@@ -17,36 +19,86 @@
|
|
|
17
19
|
.ui-pagination-link,
|
|
18
20
|
.ui-legal-document-toc-link,
|
|
19
21
|
.ui-code-block,
|
|
22
|
+
.ui-accordion-trigger,
|
|
23
|
+
.ui-carousel-dot,
|
|
24
|
+
.ui-rating-star,
|
|
25
|
+
a.ui-list-row,
|
|
26
|
+
.ui-text[data-link],
|
|
27
|
+
.sb-nav-item,
|
|
20
28
|
.sb-user,
|
|
21
29
|
.tb-icon-btn
|
|
22
30
|
):focus-visible,
|
|
23
31
|
.ui-control-trigger[data-state="open"],
|
|
24
32
|
.ui-tag-input:focus-within,
|
|
25
33
|
.ui-control-composite-field:focus-within,
|
|
26
|
-
.ui-control-composite-field[data-state="open"]
|
|
27
|
-
|
|
34
|
+
.ui-control-composite-field[data-state="open"],
|
|
35
|
+
.ui-otp-slot[data-active="true"],
|
|
36
|
+
.ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
|
|
37
|
+
outline: var(--focus-ring-width) solid
|
|
38
|
+
hsl(var(--focus-outline-color) / var(--focus-ring-opacity, 1));
|
|
39
|
+
outline-offset: var(--focus-ring-offset);
|
|
28
40
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
hsl(var(--focus-ring-color, var(--ring)) / var(--focus-ring-opacity, 1));
|
|
41
|
+
transition:
|
|
42
|
+
outline-offset 0s,
|
|
43
|
+
outline 0s;
|
|
33
44
|
}
|
|
34
45
|
|
|
35
|
-
:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
:root[data-focus-outline="on"]
|
|
47
|
+
:is(
|
|
48
|
+
.ui-focus-ring,
|
|
49
|
+
.ui-focus-ring-outline,
|
|
50
|
+
.ui-input,
|
|
51
|
+
.ui-control,
|
|
52
|
+
.ui-control-multiline,
|
|
53
|
+
.ui-control-trigger,
|
|
54
|
+
.ui-tag-input,
|
|
55
|
+
.ui-button,
|
|
56
|
+
.ui-toggle,
|
|
57
|
+
.ui-checkbox,
|
|
58
|
+
.ui-radio,
|
|
59
|
+
.ui-slider-thumb,
|
|
60
|
+
.ui-switch,
|
|
61
|
+
.ui-steps-inline-control,
|
|
62
|
+
.ui-pagination-link,
|
|
63
|
+
.ui-legal-document-toc-link,
|
|
64
|
+
.ui-code-block,
|
|
65
|
+
.ui-accordion-trigger,
|
|
66
|
+
.ui-carousel-dot,
|
|
67
|
+
.ui-rating-star,
|
|
68
|
+
a.ui-list-row,
|
|
69
|
+
.ui-text[data-link],
|
|
70
|
+
.sb-nav-item,
|
|
71
|
+
.sb-user,
|
|
72
|
+
.tb-icon-btn
|
|
73
|
+
):focus-visible,
|
|
74
|
+
:root[data-focus-outline="on"] .ui-control-trigger[data-state="open"],
|
|
75
|
+
:root[data-focus-outline="on"] .ui-tag-input:focus-within,
|
|
76
|
+
:root[data-focus-outline="on"] .ui-control-composite-field:focus-within,
|
|
77
|
+
:root[data-focus-outline="on"] .ui-control-composite-field[data-state="open"],
|
|
78
|
+
:root[data-focus-outline="on"] .ui-otp-slot[data-active="true"],
|
|
79
|
+
:root[data-focus-outline="on"]
|
|
80
|
+
.ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
|
|
81
|
+
--tw-ring-shadow: var(--focus-field-shadow);
|
|
82
|
+
box-shadow: var(--focus-field-shadow);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
:root[data-focus-outline="on"]
|
|
86
|
+
:is(
|
|
87
|
+
.ui-input,
|
|
88
|
+
.ui-control,
|
|
89
|
+
.ui-control-multiline,
|
|
90
|
+
.ui-control-trigger,
|
|
91
|
+
.ui-tag-input
|
|
92
|
+
):focus-visible,
|
|
93
|
+
:root[data-focus-outline="on"] .ui-control-trigger[data-state="open"],
|
|
94
|
+
:root[data-focus-outline="on"] .ui-tag-input:focus-within,
|
|
95
|
+
:root[data-focus-outline="on"] .ui-control-composite-field:focus-within,
|
|
96
|
+
:root[data-focus-outline="on"] .ui-control-composite-field[data-state="open"] {
|
|
97
|
+
--input: var(--focus-ring-color, var(--ring));
|
|
46
98
|
}
|
|
47
99
|
|
|
48
100
|
.ui-toggle {
|
|
49
|
-
--focus-ring-
|
|
101
|
+
--focus-ring-weight: var(--toggle-focus-ring-width);
|
|
50
102
|
--focus-ring-opacity: var(--toggle-focus-ring-alpha);
|
|
51
103
|
}
|
|
52
104
|
|
|
@@ -58,7 +110,9 @@
|
|
|
58
110
|
--focus-ring-opacity: var(--topbar-icon-focus-ring-alpha);
|
|
59
111
|
}
|
|
60
112
|
|
|
61
|
-
a.ui-list-row
|
|
113
|
+
a.ui-list-row,
|
|
114
|
+
tr.ui-focus-ring,
|
|
115
|
+
.sb-nav-item {
|
|
62
116
|
--focus-ring-offset: calc(-1 * var(--focus-ring-width));
|
|
63
117
|
}
|
|
64
118
|
|
|
@@ -74,17 +128,24 @@
|
|
|
74
128
|
--focus-ring-offset: var(--rating-focus-ring-offset);
|
|
75
129
|
}
|
|
76
130
|
|
|
77
|
-
.ui-
|
|
78
|
-
|
|
131
|
+
:is(.ui-control, .ui-input, .ui-control-multiline, .ui-tag-input):not(
|
|
132
|
+
.ui-app-setting-picker-icon,
|
|
133
|
+
.ui-app-setting-picker-inline
|
|
134
|
+
) {
|
|
135
|
+
--focus-ring-weight: var(--control-focus-ring-width);
|
|
79
136
|
}
|
|
80
137
|
|
|
81
138
|
.ui-command-input:focus-visible {
|
|
82
|
-
--focus-
|
|
139
|
+
--focus-field-shadow: none;
|
|
140
|
+
--focus-ring-weight: 0px;
|
|
83
141
|
outline: none;
|
|
84
142
|
box-shadow: none;
|
|
85
143
|
}
|
|
86
144
|
|
|
87
145
|
[aria-invalid="true"] {
|
|
88
146
|
--focus-ring-color: var(--destructive);
|
|
147
|
+
--focus-outline-color: var(--destructive);
|
|
148
|
+
--focus-ring-glow-color: var(--control-outline-error);
|
|
149
|
+
--focus-ring-glow-alpha: var(--control-outline-error-alpha);
|
|
89
150
|
}
|
|
90
151
|
}
|
package/dist/styles/layout.css
CHANGED
|
@@ -15,6 +15,62 @@
|
|
|
15
15
|
user-select: none;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
.ui-logo-glyph {
|
|
19
|
+
--logo-glyph-advance-width: max(
|
|
20
|
+
var(--logo-glyph-fullwidth-width),
|
|
21
|
+
calc(
|
|
22
|
+
var(--logo-glyph-fullwidth-count, 0) * var(--logo-glyph-fullwidth-width) +
|
|
23
|
+
var(--logo-glyph-wide-count, 0) * var(--logo-glyph-wide-width) +
|
|
24
|
+
var(--logo-glyph-narrow-count, 0) * var(--logo-glyph-narrow-width) +
|
|
25
|
+
var(--logo-glyph-space-count, 0) * var(--logo-glyph-space-width)
|
|
26
|
+
)
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
white-space: nowrap;
|
|
30
|
+
font-size: min(
|
|
31
|
+
var(--logo-font-size-md),
|
|
32
|
+
calc(var(--logo-size-md) * var(--logo-glyph-fit-max-width) / var(--logo-glyph-advance-width))
|
|
33
|
+
);
|
|
34
|
+
translate: 0 var(--logo-glyph-optical-offset, 0em);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.ui-logo[data-size="xs"] .ui-logo-glyph {
|
|
38
|
+
font-size: min(
|
|
39
|
+
var(--logo-font-size-xs),
|
|
40
|
+
calc(var(--logo-size-xs) * var(--logo-glyph-fit-max-width) / var(--logo-glyph-advance-width))
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.ui-logo[data-size="sm"] .ui-logo-glyph {
|
|
45
|
+
font-size: min(
|
|
46
|
+
var(--logo-font-size-sm),
|
|
47
|
+
calc(var(--logo-size-sm) * var(--logo-glyph-fit-max-width) / var(--logo-glyph-advance-width))
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.ui-logo[data-size="lg"] .ui-logo-glyph {
|
|
52
|
+
font-size: min(
|
|
53
|
+
var(--logo-font-size-lg),
|
|
54
|
+
calc(var(--logo-size-lg) * var(--logo-glyph-fit-max-width) / var(--logo-glyph-advance-width))
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.ui-logo-glyph[data-ink="cap-baseline"] {
|
|
59
|
+
translate: 0 var(--logo-glyph-optical-offset, var(--logo-glyph-cap-baseline-optical-offset));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.ui-logo-glyph[data-ink="cap-descender"] {
|
|
63
|
+
translate: 0 var(--logo-glyph-optical-offset, var(--logo-glyph-cap-descender-optical-offset));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.ui-logo-glyph[data-ink="x-baseline"] {
|
|
67
|
+
translate: 0 var(--logo-glyph-optical-offset, var(--logo-glyph-x-baseline-optical-offset));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.ui-logo-glyph[data-ink="x-descender"] {
|
|
71
|
+
translate: 0 var(--logo-glyph-optical-offset, var(--logo-glyph-x-descender-optical-offset));
|
|
72
|
+
}
|
|
73
|
+
|
|
18
74
|
.ui-logo[data-size="xs"] {
|
|
19
75
|
width: var(--logo-size-xs);
|
|
20
76
|
height: var(--logo-size-xs);
|
|
@@ -127,6 +127,20 @@
|
|
|
127
127
|
font-size: var(--menu-item-font-size);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
.ui-context-menu-item > svg,
|
|
131
|
+
.ui-context-menu-checkbox-item > svg,
|
|
132
|
+
.ui-context-menu-radio-item > svg,
|
|
133
|
+
.ui-menubar-item > svg,
|
|
134
|
+
.ui-menubar-checkbox-item > svg,
|
|
135
|
+
.ui-menubar-radio-item > svg,
|
|
136
|
+
.ui-dropdown-menu-item > svg,
|
|
137
|
+
.ui-dropdown-menu-checkbox-item > svg,
|
|
138
|
+
.ui-dropdown-menu-radio-item > svg {
|
|
139
|
+
width: var(--menu-icon-size);
|
|
140
|
+
height: var(--menu-icon-size);
|
|
141
|
+
flex: 0 0 auto;
|
|
142
|
+
}
|
|
143
|
+
|
|
130
144
|
.ui-dropdown-menu-item[data-inset="true"],
|
|
131
145
|
.ui-dropdown-menu-label[data-inset="true"],
|
|
132
146
|
.ui-dropdown-menu-sub-trigger[data-inset="true"] {
|
|
@@ -209,6 +223,7 @@
|
|
|
209
223
|
.ui-context-menu-label,
|
|
210
224
|
.ui-menubar-label,
|
|
211
225
|
.ui-dropdown-menu-label {
|
|
226
|
+
height: auto;
|
|
212
227
|
min-height: var(--menu-item-height);
|
|
213
228
|
color: hsl(var(--muted-foreground));
|
|
214
229
|
font-weight: var(--font-weight-medium);
|