@setsquare/ui 0.6.0 → 0.8.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/CHANGELOG.md +102 -0
- package/README.md +9 -5
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/cn.d.ts.map +1 -1
- package/dist/lib/cn.js +1 -0
- package/dist/lib/cn.js.map +1 -1
- package/dist/lib/english.d.ts.map +1 -1
- package/dist/lib/english.js +2 -0
- package/dist/lib/english.js.map +1 -1
- package/dist/lib/keyshortcuts.d.ts +13 -0
- package/dist/lib/keyshortcuts.d.ts.map +1 -0
- package/dist/lib/keyshortcuts.js +21 -0
- package/dist/lib/keyshortcuts.js.map +1 -0
- package/dist/lib/locale.d.ts +4 -1
- package/dist/lib/locale.d.ts.map +1 -1
- package/dist/lib/locale.js.map +1 -1
- package/dist/lib/search-match.d.ts +31 -0
- package/dist/lib/search-match.d.ts.map +1 -0
- package/dist/lib/search-match.js +82 -0
- package/dist/lib/search-match.js.map +1 -0
- package/dist/lib/search-shortcut.d.ts +16 -0
- package/dist/lib/search-shortcut.d.ts.map +1 -0
- package/dist/lib/search-shortcut.js +49 -0
- package/dist/lib/search-shortcut.js.map +1 -0
- package/dist/shell/app-header.d.ts +4 -1
- package/dist/shell/app-header.d.ts.map +1 -1
- package/dist/shell/app-header.js +6 -3
- package/dist/shell/app-header.js.map +1 -1
- package/dist/shell/dashboard-shell.d.ts +13 -2
- package/dist/shell/dashboard-shell.d.ts.map +1 -1
- package/dist/shell/dashboard-shell.js +5 -2
- package/dist/shell/dashboard-shell.js.map +1 -1
- package/dist/shell/nav-status.d.ts +46 -0
- package/dist/shell/nav-status.d.ts.map +1 -0
- package/dist/shell/nav-status.js +26 -0
- package/dist/shell/nav-status.js.map +1 -0
- package/dist/shell/rail.d.ts +73 -0
- package/dist/shell/rail.d.ts.map +1 -0
- package/dist/shell/rail.js +87 -0
- package/dist/shell/rail.js.map +1 -0
- package/dist/shell/sidebar.d.ts +31 -6
- package/dist/shell/sidebar.d.ts.map +1 -1
- package/dist/shell/sidebar.js +45 -8
- package/dist/shell/sidebar.js.map +1 -1
- package/dist/styles/theme.css +78 -0
- package/dist/styles/tokens.css +4 -4
- package/dist/tokens.json +4 -4
- package/dist/ui/button.d.ts +3 -2
- package/dist/ui/button.d.ts.map +1 -1
- package/dist/ui/button.js +7 -4
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/search.d.ts +19 -3
- package/dist/ui/search.d.ts.map +1 -1
- package/dist/ui/search.js +55 -23
- package/dist/ui/search.js.map +1 -1
- package/dist/ui/tree.d.ts +5 -3
- package/dist/ui/tree.d.ts.map +1 -1
- package/dist/ui/tree.js +4 -2
- package/dist/ui/tree.js.map +1 -1
- package/package.json +1 -1
package/dist/shell/sidebar.js
CHANGED
|
@@ -11,6 +11,7 @@ import { Menu, MenuItem, MenuTrigger, Popover } from '../ui/menu.js';
|
|
|
11
11
|
import { Sheet } from '../ui/sheet.js';
|
|
12
12
|
import { Tooltip, TooltipTrigger } from '../ui/tooltip.js';
|
|
13
13
|
import { useShell } from './dashboard-shell.js';
|
|
14
|
+
import { NavDetail, NavIcon, warnUnlabelledStatus } from './nav-status.js';
|
|
14
15
|
const SidebarCollapsedContext = createContext(false);
|
|
15
16
|
/** True when the sidebar shows icons only (never inside the mobile Sheet). */
|
|
16
17
|
export const useSidebarCollapsed = () => useContext(SidebarCollapsedContext);
|
|
@@ -19,6 +20,12 @@ export const sidebarLabels = {
|
|
|
19
20
|
primary: 'Primary',
|
|
20
21
|
count: ', {count, number}',
|
|
21
22
|
tipCount: '{name} ({count, number})',
|
|
23
|
+
detail: ', {detail}',
|
|
24
|
+
detailWarning: ', {detail}, warning',
|
|
25
|
+
status: ', {status}',
|
|
26
|
+
tipDetail: '{name} ({detail})',
|
|
27
|
+
tipDetailWarning: '{name} ({detail}, warning)',
|
|
28
|
+
tipStatus: '{tip}: {status}',
|
|
22
29
|
};
|
|
23
30
|
/**
|
|
24
31
|
* The full-height sidebar. Expanded, collapsed to icons (labels stay in the accessibility tree
|
|
@@ -52,14 +59,33 @@ export function SidebarGroup({ label, children, className, }) {
|
|
|
52
59
|
export function SidebarList({ children, className }) {
|
|
53
60
|
return _jsx("ul", { className: cn('flex flex-col gap-(--nav-item-gap)', className), children: children });
|
|
54
61
|
}
|
|
55
|
-
|
|
62
|
+
/** A collapsed item's tooltip: its name, then its count, detail and status, each through its own template. */
|
|
63
|
+
export function navTooltip(t, name, { count, detail, detailTone, statusLabel, }) {
|
|
64
|
+
let tip = count != null ? t('tipCount', { name, count }) : name;
|
|
65
|
+
if (detail)
|
|
66
|
+
tip = t(detailTone === 'warning' ? 'tipDetailWarning' : 'tipDetail', { name: tip, detail });
|
|
67
|
+
if (statusLabel)
|
|
68
|
+
tip = t('tipStatus', { tip, status: statusLabel });
|
|
69
|
+
return tip;
|
|
70
|
+
}
|
|
71
|
+
export function SidebarItem({ href, icon, children, isCurrent, count, onPress, detail, detailTone, status, statusLabel, }) {
|
|
56
72
|
const collapsed = useSidebarCollapsed();
|
|
57
73
|
const t = useLabels('sidebar', sidebarLabels, undefined);
|
|
58
74
|
const { locale } = useLocale();
|
|
75
|
+
warnUnlabelledStatus('SidebarItem', status, statusLabel);
|
|
59
76
|
const link = (_jsx(Link, { href: href, onPress: onPress, "aria-current": isCurrent ? 'page' : undefined, className: cn(
|
|
60
77
|
// Layer 1: the row is the target, full width and at least --target-min tall.
|
|
61
|
-
'group/item relative flex min-h-target w-full cursor-pointer items-center text-sm font-medium text-sidebar-foreground no-underline outline-none', 'group-data-collapsed/sidebar:justify-center'), children: _jsxs("span", { className: cn('relative flex min-h-nav-item w-full min-w-0 items-center gap-3 rounded-md px-3', 'group-data-hovered/item:bg-sidebar-accent group-data-hovered/item:text-sidebar-accent-foreground group-data-focus-visible/item:focus-ring',
|
|
62
|
-
|
|
78
|
+
'group/item relative flex min-h-target w-full cursor-pointer items-center text-sm font-medium text-sidebar-foreground no-underline outline-none', 'group-data-collapsed/sidebar:justify-center'), children: _jsxs("span", { className: cn('relative flex min-h-nav-item w-full min-w-0 items-center gap-3 rounded-md px-3', 'group-data-hovered/item:bg-sidebar-accent group-data-hovered/item:text-sidebar-accent-foreground group-data-focus-visible/item:focus-ring',
|
|
79
|
+
// The current page, as RailItem marks it: the fill, the name in brand at weight 700, and a 3px edge along
|
|
80
|
+
// the start, an inset shadow so it follows the rounded corners. Forced colours drop shadows and fills, so
|
|
81
|
+
// there the edge is a bar in Highlight.
|
|
82
|
+
'group-aria-[current=page]/item:bg-brand-subtle group-aria-[current=page]/item:font-bold group-aria-[current=page]/item:text-brand', 'group-aria-[current=page]/item:shadow-[inset_3px_0_0_var(--sidebar-primary)]',
|
|
83
|
+
// Hovered, the current page keeps its fill: the hover ground under brand text would be a pair the audit doesn't
|
|
84
|
+
// promise. Stacked variants, so this is more specific than the hover rule whatever order they're written in.
|
|
85
|
+
'group-data-hovered/item:group-aria-[current=page]/item:bg-brand-subtle group-data-hovered/item:group-aria-[current=page]/item:text-brand', 'forced-colors:group-aria-[current=page]/item:before:absolute forced-colors:group-aria-[current=page]/item:before:inset-y-0 forced-colors:group-aria-[current=page]/item:before:start-0 forced-colors:group-aria-[current=page]/item:before:w-[3px] forced-colors:group-aria-[current=page]/item:before:rounded-s-md forced-colors:group-aria-[current=page]/item:before:bg-[Highlight] forced-colors:group-aria-[current=page]/item:before:forced-color-adjust-none', 'group-data-collapsed/sidebar:w-nav-item group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0',
|
|
86
|
+
// The status badge's cut-out follows the ground: the sidebar, the hovered row, the current one.
|
|
87
|
+
'[--nav-cut:var(--sidebar)] group-data-hovered/item:[--nav-cut:var(--sidebar-accent)] group-aria-[current=page]/item:[--nav-cut:var(--brand-subtle)] group-data-hovered/item:group-aria-[current=page]/item:[--nav-cut:var(--brand-subtle)]'), children: [_jsx(NavIcon, { icon: icon, status: status, className: "group-aria-[current=page]/item:text-brand" }), _jsxs("span", { className: "min-w-0 flex-1 truncate group-data-collapsed/sidebar:sr-only", children: [children, count != null && _jsx("span", { className: "sr-only", children: t('count', { count }) }), detail && (_jsx("span", { className: "sr-only", children: t(detailTone === 'warning' ? 'detailWarning' : 'detail', { detail }) })), statusLabel && _jsx("span", { className: "sr-only", children: t('status', { status: statusLabel }) })] }), count != null && (_jsx("span", { "aria-hidden": "true", className: "text-[13px] font-medium text-muted-foreground tabular-nums group-data-collapsed/sidebar:hidden", children: new Intl.NumberFormat(locale).format(count) })), detail && (_jsx(NavDetail, { detail: detail, tone: detailTone, className: "shrink-0 group-data-collapsed/sidebar:hidden" }))] }) }));
|
|
88
|
+
return (_jsx("li", { children: collapsed ? (_jsxs(TooltipTrigger, { delay: 300, children: [link, _jsx(Tooltip, { placement: "right", children: navTooltip(t, children, { count, detail, detailTone, statusLabel }) })] })) : (link) }));
|
|
63
89
|
}
|
|
64
90
|
/**
|
|
65
91
|
* A sidebar row with rows under it. Expanded (and in the phone's Sheet), the row is a button that opens and closes
|
|
@@ -78,7 +104,11 @@ export function SidebarDisclosure({ icon, children, items, defaultExpanded, }) {
|
|
|
78
104
|
if (collapsed) {
|
|
79
105
|
return (_jsx("li", { children: _jsxs(MenuTrigger, { children: [_jsxs(TooltipTrigger, { delay: 300, children: [_jsx(RACButton, { className: target, children: _jsxs("span", { className: paint, children: [renderIcon(icon, iconClass), _jsx("span", { className: "sr-only", children: children })] }) }), _jsx(Tooltip, { placement: "right", children: children })] }), _jsx(Popover, { placement: "right top", className: "min-w-56", children: _jsx(Menu, { "aria-label": children, selectionMode: "single", selectedKeys: current ? [current.href] : [], children: items.map((item) => (_jsx(MenuItem, { id: item.href, href: item.href, children: item.label }, item.href))) }) })] }) }));
|
|
80
106
|
}
|
|
81
|
-
return (_jsx("li", { children: _jsxs(RACDisclosure, { defaultExpanded: defaultExpanded ?? !!current, className: "group/disclosure", children: [_jsx(RACButton, { slot: "trigger", className: target, children: _jsxs("span", { className: paint, children: [renderIcon(icon, iconClass), _jsx("span", { className: "min-w-0 flex-1 truncate", children: children }), _jsx(ChevronDown, { "aria-hidden": "true", className: "size-4 shrink-0 text-muted-foreground group-data-expanded/disclosure:rotate-180" })] }) }), _jsx(DisclosurePanel, { children: _jsx("ul", { className: "flex flex-col gap-(--nav-item-gap) pt-(--nav-item-gap)", children: items.map((item) => (_jsx("li", { children: _jsx(Link, { href: item.href, "aria-current": item.isCurrent ? 'page' : undefined, className: "group/sub relative flex min-h-target w-full cursor-pointer items-center text-sm font-medium text-sidebar-foreground no-underline outline-none", children: _jsx("span", { className: cn('relative flex min-h-nav-item w-full min-w-0 items-center rounded-md ps-11 pe-3', 'group-data-hovered/sub:bg-sidebar-accent group-data-hovered/sub:text-sidebar-accent-foreground group-data-focus-visible/sub:focus-ring',
|
|
107
|
+
return (_jsx("li", { children: _jsxs(RACDisclosure, { defaultExpanded: defaultExpanded ?? !!current, className: "group/disclosure", children: [_jsx(RACButton, { slot: "trigger", className: target, children: _jsxs("span", { className: paint, children: [renderIcon(icon, iconClass), _jsx("span", { className: "min-w-0 flex-1 truncate", children: children }), _jsx(ChevronDown, { "aria-hidden": "true", className: "size-4 shrink-0 text-muted-foreground group-data-expanded/disclosure:rotate-180" })] }) }), _jsx(DisclosurePanel, { children: _jsx("ul", { className: "flex flex-col gap-(--nav-item-gap) pt-(--nav-item-gap)", children: items.map((item) => (_jsx("li", { children: _jsx(Link, { href: item.href, "aria-current": item.isCurrent ? 'page' : undefined, className: "group/sub relative flex min-h-target w-full cursor-pointer items-center text-sm font-medium text-sidebar-foreground no-underline outline-none", children: _jsx("span", { className: cn('relative flex min-h-nav-item w-full min-w-0 items-center rounded-md ps-11 pe-3', 'group-data-hovered/sub:bg-sidebar-accent group-data-hovered/sub:text-sidebar-accent-foreground group-data-focus-visible/sub:focus-ring',
|
|
108
|
+
// The current page, as RailItem marks it: the fill, the name in brand at weight 700, and a 3px edge along
|
|
109
|
+
// the start, an inset shadow so it follows the rounded corners. Forced colours drop shadows and fills, so
|
|
110
|
+
// there the edge is a bar in Highlight.
|
|
111
|
+
'group-aria-[current=page]/sub:bg-brand-subtle group-aria-[current=page]/sub:font-bold group-aria-[current=page]/sub:text-brand', 'group-aria-[current=page]/sub:shadow-[inset_3px_0_0_var(--sidebar-primary)]', 'group-data-hovered/sub:group-aria-[current=page]/sub:bg-brand-subtle group-data-hovered/sub:group-aria-[current=page]/sub:text-brand', 'forced-colors:group-aria-[current=page]/sub:before:absolute forced-colors:group-aria-[current=page]/sub:before:inset-y-0 forced-colors:group-aria-[current=page]/sub:before:start-0 forced-colors:group-aria-[current=page]/sub:before:w-[3px] forced-colors:group-aria-[current=page]/sub:before:rounded-s-md forced-colors:group-aria-[current=page]/sub:before:bg-[Highlight] forced-colors:group-aria-[current=page]/sub:before:forced-color-adjust-none'), children: _jsx("span", { className: "min-w-0 flex-1 truncate", children: item.label }) }) }) }, item.href))) }) })] }) }));
|
|
82
112
|
}
|
|
83
113
|
/** A sidebar row that opens a menu: the workspace switcher at the top, the account menu at the foot. */
|
|
84
114
|
export function SidebarSwitcher({ leading, title, subtitle, menuLabel, children, onAction, selectedKey, placement = 'bottom start', }) {
|
|
@@ -103,11 +133,18 @@ export const sidebarTriggerLabels = {
|
|
|
103
133
|
openNavigation: 'Open navigation',
|
|
104
134
|
toggleSidebar: 'Toggle sidebar',
|
|
105
135
|
};
|
|
106
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* Collapses the sidebar to icons, or opens it as a Sheet on phones. In a shell with `navigation="rail"` there is
|
|
138
|
+
* nothing to collapse, so it is only there on phones, where it opens the rail's Sheet: before the shell has measured
|
|
139
|
+
* itself a container query hides it from bp-md up, and once it has (or its size is forced) it isn't rendered there.
|
|
140
|
+
*/
|
|
107
141
|
export function SidebarTrigger({ labels: given, className, }) {
|
|
108
|
-
const { size, sidebarCollapsed, toggleSidebar, mobileNavOpen, setMobileNavOpen } = useShell();
|
|
109
|
-
const
|
|
142
|
+
const { size, sidebarCollapsed, toggleSidebar, mobileNavOpen, setMobileNavOpen, navigation, isSizeForced, } = useShell();
|
|
143
|
+
const rail = navigation === 'rail';
|
|
144
|
+
const mobile = size === 'mobile' || (rail && !isSizeForced);
|
|
110
145
|
const t = useLabels('sidebarTrigger', sidebarTriggerLabels, given);
|
|
111
|
-
|
|
146
|
+
if (rail && isSizeForced && size !== 'mobile')
|
|
147
|
+
return null;
|
|
148
|
+
return (_jsx(IconButton, { className: cn(rail && !isSizeForced && '@min-[48rem]/shell:hidden', className), label: mobile ? t('openNavigation') : t('toggleSidebar'), icon: mobile ? MenuIcon : PanelLeft, "aria-expanded": mobile ? mobileNavOpen : !sidebarCollapsed, "aria-haspopup": mobile ? 'dialog' : undefined, onPress: () => (mobile ? setMobileNavOpen(true) : toggleSidebar()) }));
|
|
112
149
|
}
|
|
113
150
|
//# sourceMappingURL=sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../src/shell/sidebar.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../src/shell/sidebar.tsx"],"names":[],"mappings":"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"}
|
package/dist/styles/theme.css
CHANGED
|
@@ -74,6 +74,7 @@
|
|
|
74
74
|
--spacing-header: var(--header-height);
|
|
75
75
|
--spacing-sidebar: var(--sidebar-width);
|
|
76
76
|
--spacing-sidebar-collapsed: var(--sidebar-width-collapsed);
|
|
77
|
+
--spacing-rail: var(--rail-width);
|
|
77
78
|
--spacing-panel: var(--panel-width);
|
|
78
79
|
--spacing-choice: var(--choice-size);
|
|
79
80
|
}
|
|
@@ -831,6 +832,83 @@
|
|
|
831
832
|
}
|
|
832
833
|
}
|
|
833
834
|
}
|
|
835
|
+
/* ---------- A nav item's status (SidebarItem, RailItem): a badge on its icon, in the tab badges' language ----------
|
|
836
|
+
nav-icon wraps the icon and holds the badge at its top right, with a 2px cut-out in the item's own ground
|
|
837
|
+
(--nav-cut: the sidebar, the hovered row or the current one). Never colour alone: working is a hollow ring,
|
|
838
|
+
attention a solid dot inside a ring that stays. Working pulses as it appears: a halo swells three times in 4.5s
|
|
839
|
+
and stops, inside the five seconds 2.2.2 allows, then the ring holds still for as long as the work goes on. At AAA
|
|
840
|
+
and under reduced motion it never pulses. */
|
|
841
|
+
@keyframes setsquare-status-halo { 0% { scale: 0.6; opacity: 0.7; } 100% { scale: 1.7; opacity: 0; } }
|
|
842
|
+
@utility nav-icon {
|
|
843
|
+
position: relative;
|
|
844
|
+
display: inline-flex;
|
|
845
|
+
flex: none;
|
|
846
|
+
align-items: center;
|
|
847
|
+
justify-content: center;
|
|
848
|
+
}
|
|
849
|
+
@utility nav-status {
|
|
850
|
+
position: absolute;
|
|
851
|
+
top: -3px;
|
|
852
|
+
right: -4px;
|
|
853
|
+
width: 10px;
|
|
854
|
+
height: 10px;
|
|
855
|
+
border-radius: 999px;
|
|
856
|
+
box-shadow: 0 0 0 2px var(--nav-cut, var(--sidebar));
|
|
857
|
+
pointer-events: none;
|
|
858
|
+
&[data-status='working'] {
|
|
859
|
+
border: 2px solid var(--brand);
|
|
860
|
+
background-color: var(--nav-cut, var(--sidebar));
|
|
861
|
+
}
|
|
862
|
+
&[data-status='working']::before {
|
|
863
|
+
content: '';
|
|
864
|
+
position: absolute;
|
|
865
|
+
inset: -2px;
|
|
866
|
+
border: 2px solid var(--brand);
|
|
867
|
+
border-radius: 999px;
|
|
868
|
+
opacity: 0;
|
|
869
|
+
animation: setsquare-status-halo 1500ms cubic-bezier(0, 0, 0.2, 1) 3;
|
|
870
|
+
}
|
|
871
|
+
/* As specific as the rule above and after it, so it wins; nested in ::before, the variant would follow the
|
|
872
|
+
pseudo-element, and the browser drops a selector like that. */
|
|
873
|
+
@variant aaa {
|
|
874
|
+
&[data-status='working']::before {
|
|
875
|
+
animation: none;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
&[data-status='attention'] {
|
|
879
|
+
background-color: var(--destructive);
|
|
880
|
+
}
|
|
881
|
+
&[data-status='attention']::after {
|
|
882
|
+
content: '';
|
|
883
|
+
position: absolute;
|
|
884
|
+
inset: -4px;
|
|
885
|
+
border: 2px solid var(--destructive);
|
|
886
|
+
border-radius: 999px;
|
|
887
|
+
}
|
|
888
|
+
@media (prefers-reduced-motion: reduce) {
|
|
889
|
+
&::before {
|
|
890
|
+
animation: none !important;
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
/* Forced colours drop box shadows and repaint borders and fills: draw both shapes in system colours. */
|
|
894
|
+
@media (forced-colors: active) {
|
|
895
|
+
forced-color-adjust: none;
|
|
896
|
+
box-shadow: none;
|
|
897
|
+
&[data-status='working'] {
|
|
898
|
+
border-color: CanvasText;
|
|
899
|
+
background-color: Canvas;
|
|
900
|
+
}
|
|
901
|
+
&[data-status='working']::before {
|
|
902
|
+
border-color: CanvasText;
|
|
903
|
+
}
|
|
904
|
+
&[data-status='attention'] {
|
|
905
|
+
background-color: Highlight;
|
|
906
|
+
}
|
|
907
|
+
&[data-status='attention']::after {
|
|
908
|
+
border-color: Highlight;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
}
|
|
834
912
|
/* A tooltip for a tab whose name isn't showing. It sits inside the tab, so the pointer can move onto it across an
|
|
835
913
|
8px bridge without leaving. Hidden from assistive tech: the name is the tab's own. */
|
|
836
914
|
@utility tabs-tip {
|
package/dist/styles/tokens.css
CHANGED
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
/* Light · AA */
|
|
136
136
|
:root {
|
|
137
137
|
--brand: #2f47c9;
|
|
138
|
-
--brand-subtle: #
|
|
138
|
+
--brand-subtle: #dadef5;
|
|
139
139
|
--background: #ffffff;
|
|
140
140
|
--foreground: #161a1f;
|
|
141
141
|
--card: #ffffff;
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
/* Dark · AA */
|
|
181
181
|
:root.dark {
|
|
182
182
|
--brand: #8fa3ff;
|
|
183
|
-
--brand-subtle: #
|
|
183
|
+
--brand-subtle: #242c55;
|
|
184
184
|
--background: #0e1116;
|
|
185
185
|
--foreground: #e7eaee;
|
|
186
186
|
--card: #151a21;
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
/* Light · AAA */
|
|
226
226
|
:root[data-conformance="aaa"] {
|
|
227
227
|
--brand: #22369f;
|
|
228
|
-
--brand-subtle: #
|
|
228
|
+
--brand-subtle: #dcdff0;
|
|
229
229
|
--background: #ffffff;
|
|
230
230
|
--foreground: #0c0e11;
|
|
231
231
|
--card: #ffffff;
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
/* Dark · AAA */
|
|
271
271
|
:root[data-conformance="aaa"].dark {
|
|
272
272
|
--brand: #b0beff;
|
|
273
|
-
--brand-subtle: #
|
|
273
|
+
--brand-subtle: #20274f;
|
|
274
274
|
--background: #07090c;
|
|
275
275
|
--foreground: #f5f7f9;
|
|
276
276
|
--card: #0e1217;
|
package/dist/tokens.json
CHANGED
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
{
|
|
35
35
|
"name": "brand-subtle",
|
|
36
36
|
"value": {
|
|
37
|
-
"light": "#
|
|
38
|
-
"dark": "#
|
|
39
|
-
"light-aaa": "#
|
|
40
|
-
"dark-aaa": "#
|
|
37
|
+
"light": "#dadef5",
|
|
38
|
+
"dark": "#242c55",
|
|
39
|
+
"light-aaa": "#dcdff0",
|
|
40
|
+
"dark-aaa": "#20274f"
|
|
41
41
|
},
|
|
42
42
|
"usage": "Tinted ground behind brand text: the current nav item, selected table rows, info notices."
|
|
43
43
|
},
|
package/dist/ui/button.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { composeRenderProps, type ButtonProps as RACButtonProps, type LinkProps as RACLinkProps } from 'react-aria-components';
|
|
2
2
|
import { type ButtonVariant, type ButtonVisualSize } from './button-styles.js';
|
|
3
|
+
import { type KeyshortcutsProps } from '../lib/keyshortcuts.js';
|
|
3
4
|
export type { ButtonVariant, ButtonVisualSize };
|
|
4
5
|
interface LayerProps {
|
|
5
6
|
variant?: ButtonVariant;
|
|
@@ -12,14 +13,14 @@ interface LayerProps {
|
|
|
12
13
|
/** Layer 2, the painted box. */
|
|
13
14
|
visualClassName?: string;
|
|
14
15
|
}
|
|
15
|
-
export interface ButtonProps extends Omit<RACButtonProps, 'className'>, LayerProps {
|
|
16
|
+
export interface ButtonProps extends Omit<RACButtonProps, 'className'>, LayerProps, KeyshortcutsProps {
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
19
|
* React Aria Button. One `primary` per view; `outline` is the default.
|
|
19
20
|
* `isPending` keeps it focusable, announces the wait and swaps any leading icon for a spinner.
|
|
20
21
|
*/
|
|
21
22
|
export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
22
|
-
export interface LinkButtonProps extends Omit<RACLinkProps, 'className'>, LayerProps {
|
|
23
|
+
export interface LinkButtonProps extends Omit<RACLinkProps, 'className'>, LayerProps, KeyshortcutsProps {
|
|
23
24
|
}
|
|
24
25
|
/** A link that looks like a button — for navigation, never for actions. Same three layers as Button. */
|
|
25
26
|
export declare const LinkButton: import("react").ForwardRefExoticComponent<LinkButtonProps & import("react").RefAttributes<HTMLAnchorElement>>;
|
package/dist/ui/button.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGL,kBAAkB,EAClB,KAAK,WAAW,IAAI,cAAc,EAClC,KAAK,SAAS,IAAI,YAAY,EAC/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGL,kBAAkB,EAClB,KAAK,WAAW,IAAI,cAAc,EAClC,KAAK,SAAS,IAAI,YAAY,EAC/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAEhD,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,mGAAmG;IACnG,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oGAAoG;IACpG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,iBAAiB;CAAG;AAE7E;;;GAGG;AACH,eAAO,MAAM,MAAM,2GAsCjB,CAAC;AAEH,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,iBAAiB;CAAG;AAE3E,wGAAwG;AACxG,eAAO,MAAM,UAAU,+GA8BrB,CAAC;AAEH,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/ui/button.js
CHANGED
|
@@ -4,13 +4,15 @@ import { forwardRef } from 'react';
|
|
|
4
4
|
import { Button as RACButton, Link as RACLink, composeRenderProps, } from 'react-aria-components';
|
|
5
5
|
import { buttonTargetStyles, buttonVisualStyles, } from './button-styles.js';
|
|
6
6
|
import { SpinnerIcon } from './spinner.js';
|
|
7
|
+
import { useKeyshortcuts } from '../lib/keyshortcuts.js';
|
|
7
8
|
/**
|
|
8
9
|
* React Aria Button. One `primary` per view; `outline` is the default.
|
|
9
10
|
* `isPending` keeps it focusable, announces the wait and swaps any leading icon for a spinner.
|
|
10
11
|
*/
|
|
11
|
-
export const Button = forwardRef(function Button({ variant = 'outline', visualSize = 'default', fullWidth, className, visualClassName, children, ...props }, ref) {
|
|
12
|
+
export const Button = forwardRef(function Button({ variant = 'outline', visualSize = 'default', fullWidth, className, visualClassName, children, 'aria-keyshortcuts': keys, ...props }, ref) {
|
|
12
13
|
const iconOnly = visualSize === 'icon' || visualSize === 'icon-sm';
|
|
13
|
-
|
|
14
|
+
const target = useKeyshortcuts(keys, ref);
|
|
15
|
+
return (_jsx(RACButton, { ref: target, ...props, className: buttonTargetStyles({ fullWidth, className }), children: composeRenderProps(children, (kids, { isPending }) => (_jsx("span", { className: buttonVisualStyles({
|
|
14
16
|
variant,
|
|
15
17
|
visualSize,
|
|
16
18
|
fullWidth,
|
|
@@ -18,8 +20,9 @@ export const Button = forwardRef(function Button({ variant = 'outline', visualSi
|
|
|
18
20
|
}), children: isPending && iconOnly ? (_jsx(SpinnerIcon, {})) : (_jsxs(_Fragment, { children: [isPending && _jsx(SpinnerIcon, {}), kids] })) }))) }));
|
|
19
21
|
});
|
|
20
22
|
/** A link that looks like a button — for navigation, never for actions. Same three layers as Button. */
|
|
21
|
-
export const LinkButton = forwardRef(function LinkButton({ variant = 'outline', visualSize = 'default', fullWidth, className, visualClassName, children, ...props }, ref) {
|
|
22
|
-
|
|
23
|
+
export const LinkButton = forwardRef(function LinkButton({ variant = 'outline', visualSize = 'default', fullWidth, className, visualClassName, children, 'aria-keyshortcuts': keys, ...props }, ref) {
|
|
24
|
+
const target = useKeyshortcuts(keys, ref);
|
|
25
|
+
return (_jsx(RACLink, { ref: target, ...props, className: buttonTargetStyles({ fullWidth, className }), children: composeRenderProps(children, (kids) => (_jsx("span", { className: buttonVisualStyles({
|
|
23
26
|
variant,
|
|
24
27
|
visualSize,
|
|
25
28
|
fullWidth,
|
package/dist/ui/button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EACL,MAAM,IAAI,SAAS,EACnB,IAAI,IAAI,OAAO,EACf,kBAAkB,GAGnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/ui/button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EACL,MAAM,IAAI,SAAS,EACnB,IAAI,IAAI,OAAO,EACf,kBAAkB,GAGnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAA0B,MAAM,wBAAwB,CAAC;AAmBjF;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAiC,SAAS,MAAM,CAC9E,EACE,OAAO,GAAG,SAAS,EACnB,UAAU,GAAG,SAAS,EACtB,SAAS,EACT,SAAS,EACT,eAAe,EACf,QAAQ,EACR,mBAAmB,EAAE,IAAI,EACzB,GAAG,KAAK,EACT,EACD,GAAG;IAEH,MAAM,QAAQ,GAAG,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS,CAAC;IACnE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CACL,KAAC,SAAS,IAAC,GAAG,EAAE,MAAM,KAAM,KAAK,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,YACvF,kBAAkB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CACrD,eACE,SAAS,EAAE,kBAAkB,CAAC;gBAC5B,OAAO;gBACP,UAAU;gBACV,SAAS;gBACT,SAAS,EAAE,eAAe;aAC3B,CAAC,YAED,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,CACvB,KAAC,WAAW,KAAG,CAChB,CAAC,CAAC,CAAC,CACF,8BACG,SAAS,IAAI,KAAC,WAAW,KAAG,EAC5B,IAAI,IACJ,CACJ,GACI,CACR,CAAC,GACQ,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AAKH,wGAAwG;AACxG,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAqC,SAAS,UAAU,CAC1F,EACE,OAAO,GAAG,SAAS,EACnB,UAAU,GAAG,SAAS,EACtB,SAAS,EACT,SAAS,EACT,eAAe,EACf,QAAQ,EACR,mBAAmB,EAAE,IAAI,EACzB,GAAG,KAAK,EACT,EACD,GAAG;IAEH,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CACL,KAAC,OAAO,IAAC,GAAG,EAAE,MAAM,KAAM,KAAK,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,YACrF,kBAAkB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CACtC,eACE,SAAS,EAAE,kBAAkB,CAAC;gBAC5B,OAAO;gBACP,UAAU;gBACV,SAAS;gBACT,SAAS,EAAE,eAAe;aAC3B,CAAC,YAED,IAAI,GACA,CACR,CAAC,GACM,CACX,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/ui/search.d.ts
CHANGED
|
@@ -6,6 +6,11 @@ export interface SearchItem {
|
|
|
6
6
|
description?: string;
|
|
7
7
|
icon?: IconProp;
|
|
8
8
|
href?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Other words that find it: what people call it rather than its name ("mp4", "export"). Matched as well as
|
|
11
|
+
* the label, ranked after label matches, and never shown or read out.
|
|
12
|
+
*/
|
|
13
|
+
keywords?: string[];
|
|
9
14
|
}
|
|
10
15
|
/** The search's own words, for the `labels` prop. */
|
|
11
16
|
export interface SearchLabels {
|
|
@@ -40,6 +45,8 @@ export interface SearchTriggerProps {
|
|
|
40
45
|
/** Icon-only, for narrow headers, named `labels.search`. */
|
|
41
46
|
compact?: boolean;
|
|
42
47
|
labels?: Partial<SearchLabels>;
|
|
48
|
+
/** Shows ⌘K and sets `aria-keyshortcuts`. Default true; false when the shortcut doesn't open this search. */
|
|
49
|
+
shortcut?: boolean;
|
|
43
50
|
className?: string;
|
|
44
51
|
}
|
|
45
52
|
/**
|
|
@@ -47,7 +54,7 @@ export interface SearchTriggerProps {
|
|
|
47
54
|
* shortcut also in `aria-keyshortcuts`. No `aria-label`: one that left out the shortcut would no longer contain
|
|
48
55
|
* the visible text (2.5.3 Label in Name, as axe and the Setsquare SDK measure it).
|
|
49
56
|
*/
|
|
50
|
-
export declare function SearchTrigger({ onPress, placeholder, compact, labels: given, className, }: SearchTriggerProps): import("react").JSX.Element;
|
|
57
|
+
export declare function SearchTrigger({ onPress, placeholder, compact, labels: given, shortcut, className, }: SearchTriggerProps): import("react").JSX.Element;
|
|
51
58
|
export interface AppSearchProps {
|
|
52
59
|
sections: SearchSection[];
|
|
53
60
|
onAction?: (id: Key) => void;
|
|
@@ -57,8 +64,17 @@ export interface AppSearchProps {
|
|
|
57
64
|
placeholder?: string;
|
|
58
65
|
/** For the trigger and the dialog. */
|
|
59
66
|
labels?: Partial<SearchLabels>;
|
|
67
|
+
/**
|
|
68
|
+
* Opens on ⌘K / Ctrl+K. Default true. One search on a page has the shortcut, the first mounted that asks;
|
|
69
|
+
* false gives it up, for a second search on the page.
|
|
70
|
+
*/
|
|
71
|
+
shortcut?: boolean;
|
|
60
72
|
className?: string;
|
|
61
73
|
}
|
|
62
|
-
/**
|
|
63
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Trigger + dialog + the ⌘K / Ctrl+K shortcut, wired together. The shortcut is left alone when focus is in a field
|
|
76
|
+
* or editor, when another handler has already taken it, and in every search on the page but the one that has it
|
|
77
|
+
* (see `shortcut`); the trigger shows ⌘K only on that one.
|
|
78
|
+
*/
|
|
79
|
+
export declare function AppSearch({ sections, onAction, compact, defaultOpen, placeholder, labels, shortcut, className, }: AppSearchProps): import("react").JSX.Element;
|
|
64
80
|
//# sourceMappingURL=search.d.ts.map
|
package/dist/ui/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/ui/search.tsx"],"names":[],"mappings":"AAGA,OAAO,EAcL,KAAK,GAAG,EACT,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/ui/search.tsx"],"names":[],"mappings":"AAGA,OAAO,EAcL,KAAK,GAAG,EACT,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAatD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AACD,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,EAAE,YAK1B,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAChC;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,MAAM,EAAE,KAAK,GACd,EAAE,kBAAkB,+BAmCpB;AA6FD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,WAAW,EACX,OAAO,EACP,MAAM,EAAE,KAAK,EACb,QAAe,EACf,SAAS,GACV,EAAE,kBAAkB,+BAqCpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,WAAmB,EACnB,WAAW,EACX,MAAM,EACN,QAAe,EACf,SAAS,GACV,EAAE,cAAc,+BAyChB"}
|
package/dist/ui/search.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useState } from 'react';
|
|
4
|
-
import { Autocomplete, Button as RACButton, Collection, Dialog, Header, Input, Menu, MenuItem, MenuSection, Modal, ModalOverlay, SearchField,
|
|
3
|
+
import { useEffect, useId, useMemo, useState, useSyncExternalStore } from 'react';
|
|
4
|
+
import { Autocomplete, Button as RACButton, Collection, Dialog, Header, Input, Menu, MenuItem, MenuSection, Modal, ModalOverlay, SearchField, useLocale, } from 'react-aria-components';
|
|
5
5
|
import { Search, SearchX } from 'lucide-react';
|
|
6
6
|
import { cn } from '../lib/cn.js';
|
|
7
7
|
import { fieldBox, fieldInput } from './field.js';
|
|
@@ -9,6 +9,9 @@ import { IconButton } from './icon-button.js';
|
|
|
9
9
|
import { renderIcon } from './icon.js';
|
|
10
10
|
import { Kbd } from './kbd.js';
|
|
11
11
|
import { useLabels } from '../lib/locale.js';
|
|
12
|
+
import { duplicateIds, searchCollator, searchSections } from '../lib/search-match.js';
|
|
13
|
+
import { useKeyshortcuts } from '../lib/keyshortcuts.js';
|
|
14
|
+
import { claimSearchShortcut, hasSearchShortcut, isSearchShortcut, subscribeSearchShortcut, } from '../lib/search-shortcut.js';
|
|
12
15
|
import { itemVisual, rowTarget } from './menu.js';
|
|
13
16
|
export const searchLabels = {
|
|
14
17
|
search: 'Search',
|
|
@@ -19,42 +22,71 @@ export const searchLabels = {
|
|
|
19
22
|
/** The search dialog: type to filter, arrow keys to move, Enter to go, Escape to close. */
|
|
20
23
|
export function CommandSearch({ isOpen, onOpenChange, sections, onAction, placeholder, labels: given, }) {
|
|
21
24
|
const t = useLabels('search', searchLabels, given);
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
const repeated = JSON.stringify(duplicateIds(sections));
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (repeated !== '[]')
|
|
28
|
+
console.error(`Search: item ids must be unique across all sections, and these are used more than once: ${repeated}. React Aria keys the menu by id, so for each, one item is hidden and the other shown twice.`);
|
|
29
|
+
}, [repeated]);
|
|
30
|
+
return (_jsx(ModalOverlay, { isOpen: isOpen, onOpenChange: onOpenChange, isDismissable: true, "data-overlay": true, className: "fixed inset-0 z-(--z-popover) flex items-start justify-center bg-overlay px-4 pt-[12vh]", children: _jsx(Modal, { "data-sheet": "top", className: "w-full max-w-[40rem] overflow-hidden rounded-xl border border-border bg-popover text-popover-foreground shadow-(--shadow-lg) outline-none", children: _jsx(Dialog, { "aria-label": t('search'), className: "flex max-h-[70vh] flex-col outline-none", children: _jsx(SearchBody, { sections: sections, onAction: (id) => {
|
|
31
|
+
onAction?.(id);
|
|
32
|
+
onOpenChange(false);
|
|
33
|
+
}, placeholder: placeholder ?? t('placeholder'), t: t }) }) }) }));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Inside the dialog, so the text starts empty each time it opens. React Aria's Autocomplete can only filter a
|
|
37
|
+
* collection in its own order, so the search holds the text, ranks the items itself and gives the menu only
|
|
38
|
+
* those; Autocomplete still moves through them from the field.
|
|
39
|
+
*/
|
|
40
|
+
function SearchBody({ sections, onAction, placeholder, t, }) {
|
|
41
|
+
const [query, setQuery] = useState('');
|
|
42
|
+
const { locale } = useLocale();
|
|
43
|
+
const collator = useMemo(() => searchCollator(locale), [locale]);
|
|
44
|
+
const results = useMemo(() => searchSections(sections, query, collator), [sections, query, collator]);
|
|
45
|
+
return (_jsxs(Autocomplete, { inputValue: query, onInputChange: setQuery, children: [_jsx(SearchField, { "aria-label": t('search'),
|
|
46
|
+
// oxlint-disable-next-line jsx-a11y/no-autofocus
|
|
47
|
+
autoFocus: true, className: "border-b border-border p-3", children: _jsxs("div", { className: fieldBox, children: [_jsx(Search, { "aria-hidden": "true", className: "pointer-events-none absolute top-1/2 left-2.5 size-5 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { placeholder: placeholder, className: cn(fieldInput, 'pr-14 pl-10 [&::-webkit-search-cancel-button]:hidden') }), _jsx(Kbd, { className: "pointer-events-none absolute top-1/2 right-2 -translate-y-1/2", children: t('escapeKey') })] }) }), _jsx(Menu, { items: results, onAction: onAction, renderEmptyState: () => (_jsxs("div", { className: "flex flex-col items-center gap-2 px-4 py-10 text-center text-sm text-muted-foreground", children: [_jsx(SearchX, { "aria-hidden": "true", className: "size-6" }), t('noResults')] })), className: "relative min-h-0 flex-1 overflow-auto p-2 outline-none", children: (section) => (_jsxs(MenuSection, { id: section.id, className: "not-first:mt-2", children: [_jsx(Header, { className: "px-3 pt-1 pb-1 text-[13px] leading-5 font-semibold text-muted-foreground", children: section.title }), _jsx(Collection, { items: section.items, children: (item) => (_jsx(MenuItem, { id: item.id, href: item.href, textValue: item.label, className: cn('group/item', rowTarget), children: _jsxs("span", { className: itemVisual, children: [item.icon && renderIcon(item.icon, 'size-5 shrink-0 text-muted-foreground'), _jsxs("span", { className: "flex min-w-0 flex-col", children: [_jsx("span", { className: "truncate font-medium", children: item.label }), item.description && (_jsx("span", { className: "truncate text-[13px] text-muted-foreground", children: item.description }))] })] }) })) })] })) })] }));
|
|
30
48
|
}
|
|
31
49
|
/**
|
|
32
50
|
* Opens the search dialog. Looks like a field; is a button named by what it shows, "Search ⌘K", with the
|
|
33
51
|
* shortcut also in `aria-keyshortcuts`. No `aria-label`: one that left out the shortcut would no longer contain
|
|
34
52
|
* the visible text (2.5.3 Label in Name, as axe and the Setsquare SDK measure it).
|
|
35
53
|
*/
|
|
36
|
-
export function SearchTrigger({ onPress, placeholder, compact, labels: given, className, }) {
|
|
54
|
+
export function SearchTrigger({ onPress, placeholder, compact, labels: given, shortcut = true, className, }) {
|
|
37
55
|
const t = useLabels('search', searchLabels, given);
|
|
56
|
+
const keys = shortcut ? 'Meta+K Control+K' : undefined;
|
|
57
|
+
const target = useKeyshortcuts(keys);
|
|
38
58
|
if (compact) {
|
|
39
|
-
return (_jsx(IconButton, { label: t('search'), icon: Search, onPress: onPress, "aria-haspopup": "dialog", "aria-keyshortcuts":
|
|
59
|
+
return (_jsx(IconButton, { label: t('search'), icon: Search, onPress: onPress, "aria-haspopup": "dialog", "aria-keyshortcuts": keys }));
|
|
40
60
|
}
|
|
41
|
-
return (_jsxs(RACButton, { onPress: onPress, "aria-haspopup": "dialog",
|
|
61
|
+
return (_jsxs(RACButton, { ref: target, onPress: onPress, "aria-haspopup": "dialog", className: cn(
|
|
42
62
|
// Looks like a field, so it is built like one: the button is the target, the box is painted behind it.
|
|
43
|
-
'field-paint flex h-control-target w-64 min-w-0 cursor-pointer items-center gap-2 pr-2 pl-2.5 text-left text-sm text-muted-foreground outline-none', 'data-hovered:before:bg-accent data-focus-visible:before:focus-ring', className), children: [_jsx(Search, { "aria-hidden": "true", className: "size-5 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: placeholder ?? t('search') }),
|
|
63
|
+
'field-paint flex h-control-target w-64 min-w-0 cursor-pointer items-center gap-2 pr-2 pl-2.5 text-left text-sm text-muted-foreground outline-none', 'data-hovered:before:bg-accent data-focus-visible:before:focus-ring', className), children: [_jsx(Search, { "aria-hidden": "true", className: "size-5 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: placeholder ?? t('search') }), shortcut && (_jsxs(_Fragment, { children: [' ', _jsx(Kbd, { children: "\u2318K" })] }))] }));
|
|
44
64
|
}
|
|
45
|
-
/**
|
|
46
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Trigger + dialog + the ⌘K / Ctrl+K shortcut, wired together. The shortcut is left alone when focus is in a field
|
|
67
|
+
* or editor, when another handler has already taken it, and in every search on the page but the one that has it
|
|
68
|
+
* (see `shortcut`); the trigger shows ⌘K only on that one.
|
|
69
|
+
*/
|
|
70
|
+
export function AppSearch({ sections, onAction, compact, defaultOpen = false, placeholder, labels, shortcut = true, className, }) {
|
|
47
71
|
const [isOpen, setOpen] = useState(defaultOpen);
|
|
72
|
+
const id = useId();
|
|
73
|
+
const has = useSyncExternalStore(subscribeSearchShortcut, () => hasSearchShortcut(id), () => true);
|
|
48
74
|
useEffect(() => {
|
|
75
|
+
if (!shortcut)
|
|
76
|
+
return;
|
|
77
|
+
const letGo = claimSearchShortcut(id);
|
|
49
78
|
const onKey = (e) => {
|
|
50
|
-
if ((
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
79
|
+
if (!hasSearchShortcut(id) || !isSearchShortcut(e))
|
|
80
|
+
return;
|
|
81
|
+
e.preventDefault();
|
|
82
|
+
setOpen(true);
|
|
54
83
|
};
|
|
55
84
|
document.addEventListener('keydown', onKey);
|
|
56
|
-
return () =>
|
|
57
|
-
|
|
58
|
-
|
|
85
|
+
return () => {
|
|
86
|
+
document.removeEventListener('keydown', onKey);
|
|
87
|
+
letGo();
|
|
88
|
+
};
|
|
89
|
+
}, [id, shortcut]);
|
|
90
|
+
return (_jsxs(_Fragment, { children: [_jsx(SearchTrigger, { onPress: () => setOpen(true), compact: compact, labels: labels, shortcut: shortcut && has, className: className }), _jsx(CommandSearch, { isOpen: isOpen, onOpenChange: setOpen, sections: sections, onAction: onAction, placeholder: placeholder, labels: labels })] }));
|
|
59
91
|
}
|
|
60
92
|
//# sourceMappingURL=search.js.map
|
package/dist/ui/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/ui/search.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/ui/search.tsx"],"names":[],"mappings":"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"}
|