@vinyasa/navigation 1.0.26

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.
Files changed (98) hide show
  1. package/README.md +45 -0
  2. package/dist/cjs/breadcrumbs.cjs +240 -0
  3. package/dist/cjs/breadcrumbs.css +58 -0
  4. package/dist/cjs/command-navigation.cjs +215 -0
  5. package/dist/cjs/command-navigation.css +46 -0
  6. package/dist/cjs/index.cjs +2681 -0
  7. package/dist/cjs/index.css +1162 -0
  8. package/dist/cjs/navigation-menu.cjs +302 -0
  9. package/dist/cjs/navigation-menu.css +197 -0
  10. package/dist/cjs/pagination.cjs +462 -0
  11. package/dist/cjs/pagination.css +79 -0
  12. package/dist/cjs/sidebar.cjs +476 -0
  13. package/dist/cjs/sidebar.css +171 -0
  14. package/dist/cjs/stepper.cjs +270 -0
  15. package/dist/cjs/stepper.css +153 -0
  16. package/dist/cjs/tabs.cjs +260 -0
  17. package/dist/cjs/tabs.css +122 -0
  18. package/dist/cjs/top-navigation.cjs +363 -0
  19. package/dist/cjs/top-navigation.css +127 -0
  20. package/dist/cjs/tree-view.cjs +373 -0
  21. package/dist/cjs/tree-view.css +109 -0
  22. package/dist/cjs/workspace-switcher.cjs +249 -0
  23. package/dist/cjs/workspace-switcher.css +100 -0
  24. package/dist/esm/217.css +79 -0
  25. package/dist/esm/217.js +202 -0
  26. package/dist/esm/294.css +100 -0
  27. package/dist/esm/294.js +114 -0
  28. package/dist/esm/375.css +153 -0
  29. package/dist/esm/375.js +120 -0
  30. package/dist/esm/555.css +171 -0
  31. package/dist/esm/555.js +232 -0
  32. package/dist/esm/655.css +58 -0
  33. package/dist/esm/655.js +87 -0
  34. package/dist/esm/66.css +46 -0
  35. package/dist/esm/66.js +92 -0
  36. package/dist/esm/694.css +109 -0
  37. package/dist/esm/694.js +227 -0
  38. package/dist/esm/814.css +197 -0
  39. package/dist/esm/814.js +146 -0
  40. package/dist/esm/862.css +127 -0
  41. package/dist/esm/862.js +130 -0
  42. package/dist/esm/913.css +119 -0
  43. package/dist/esm/913.js +121 -0
  44. package/dist/esm/953.js +87 -0
  45. package/dist/esm/breadcrumbs.d.ts +2 -0
  46. package/dist/esm/breadcrumbs.js +1 -0
  47. package/dist/esm/command-navigation.d.ts +2 -0
  48. package/dist/esm/command-navigation.js +1 -0
  49. package/dist/esm/components/breadcrumbs/Breadcrumbs.css.d.ts +6 -0
  50. package/dist/esm/components/breadcrumbs/Breadcrumbs.d.ts +58 -0
  51. package/dist/esm/components/breadcrumbs/index.d.ts +1 -0
  52. package/dist/esm/components/command-navigation/CommandNavigation.css.d.ts +4 -0
  53. package/dist/esm/components/command-navigation/CommandNavigation.d.ts +50 -0
  54. package/dist/esm/components/command-navigation/index.d.ts +1 -0
  55. package/dist/esm/components/navigation-menu/NavigationMenu.css.d.ts +13 -0
  56. package/dist/esm/components/navigation-menu/NavigationMenu.d.ts +69 -0
  57. package/dist/esm/components/navigation-menu/index.d.ts +1 -0
  58. package/dist/esm/components/pagination/Pagination.css.d.ts +13 -0
  59. package/dist/esm/components/pagination/Pagination.d.ts +69 -0
  60. package/dist/esm/components/pagination/getPaginationRange.d.ts +15 -0
  61. package/dist/esm/components/pagination/index.d.ts +2 -0
  62. package/dist/esm/components/sidebar/Sidebar.css.d.ts +60 -0
  63. package/dist/esm/components/sidebar/Sidebar.d.ts +82 -0
  64. package/dist/esm/components/sidebar/index.d.ts +1 -0
  65. package/dist/esm/components/stepper/Stepper.css.d.ts +10 -0
  66. package/dist/esm/components/stepper/Stepper.d.ts +57 -0
  67. package/dist/esm/components/stepper/index.d.ts +1 -0
  68. package/dist/esm/components/tabs/Tabs.css.d.ts +6 -0
  69. package/dist/esm/components/tabs/Tabs.d.ts +39 -0
  70. package/dist/esm/components/tabs/index.d.ts +1 -0
  71. package/dist/esm/components/top-navigation/TopNavigation.css.d.ts +13 -0
  72. package/dist/esm/components/top-navigation/TopNavigation.d.ts +67 -0
  73. package/dist/esm/components/top-navigation/index.d.ts +1 -0
  74. package/dist/esm/components/tree-view/TreeView.css.d.ts +8 -0
  75. package/dist/esm/components/tree-view/TreeView.d.ts +43 -0
  76. package/dist/esm/components/tree-view/index.d.ts +1 -0
  77. package/dist/esm/components/workspace-switcher/WorkspaceSwitcher.css.d.ts +9 -0
  78. package/dist/esm/components/workspace-switcher/WorkspaceSwitcher.d.ts +43 -0
  79. package/dist/esm/components/workspace-switcher/index.d.ts +1 -0
  80. package/dist/esm/index.d.ts +10 -0
  81. package/dist/esm/index.js +10 -0
  82. package/dist/esm/navigation-menu.d.ts +2 -0
  83. package/dist/esm/navigation-menu.js +1 -0
  84. package/dist/esm/pagination.d.ts +2 -0
  85. package/dist/esm/pagination.js +1 -0
  86. package/dist/esm/sidebar.d.ts +2 -0
  87. package/dist/esm/sidebar.js +1 -0
  88. package/dist/esm/stepper.d.ts +2 -0
  89. package/dist/esm/stepper.js +1 -0
  90. package/dist/esm/tabs.d.ts +2 -0
  91. package/dist/esm/tabs.js +1 -0
  92. package/dist/esm/top-navigation.d.ts +2 -0
  93. package/dist/esm/top-navigation.js +1 -0
  94. package/dist/esm/tree-view.d.ts +2 -0
  95. package/dist/esm/tree-view.js +1 -0
  96. package/dist/esm/workspace-switcher.d.ts +2 -0
  97. package/dist/esm/workspace-switcher.js +1 -0
  98. package/package.json +146 -0
@@ -0,0 +1,232 @@
1
+ import "./555.css";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { ChevronLeftIcon } from "@vinyasa/icons";
4
+ import { useThemedRef } from "@vinyasa/tokens";
5
+ import { createContext, forwardRef, useContext, useState } from "react";
6
+ import { createRuntimeFn } from "./953.js";
7
+ var collapseTrigger = '_1nqk067i';
8
+ var collapseTriggerIcon = createRuntimeFn({
9
+ defaultClassName: '_1nqk067j',
10
+ variantClassNames: {
11
+ collapsed: {
12
+ true: '_1nqk067k'
13
+ }
14
+ },
15
+ defaultVariants: {},
16
+ compoundVariants: []
17
+ });
18
+ var content = '_1nqk0675';
19
+ var footer = '_1nqk0676';
20
+ var header = '_1nqk0673';
21
+ var item = createRuntimeFn({
22
+ defaultClassName: '_1nqk067b',
23
+ variantClassNames: {
24
+ active: {
25
+ true: '_1nqk067c'
26
+ },
27
+ collapsed: {
28
+ true: '_1nqk067d'
29
+ }
30
+ },
31
+ defaultVariants: {},
32
+ compoundVariants: []
33
+ });
34
+ var itemIcon = '_1nqk067e';
35
+ var itemLabel = createRuntimeFn({
36
+ defaultClassName: '_1nqk067f',
37
+ variantClassNames: {
38
+ collapsed: {
39
+ true: '_1nqk067g',
40
+ false: '_1nqk067h'
41
+ }
42
+ },
43
+ defaultVariants: {},
44
+ compoundVariants: []
45
+ });
46
+ var root = createRuntimeFn({
47
+ defaultClassName: '_1nqk0670',
48
+ variantClassNames: {
49
+ collapsed: {
50
+ true: '_1nqk0671',
51
+ false: '_1nqk0672'
52
+ }
53
+ },
54
+ defaultVariants: {
55
+ collapsed: false
56
+ },
57
+ compoundVariants: []
58
+ });
59
+ var section = '_1nqk0677';
60
+ var sectionLabel = createRuntimeFn({
61
+ defaultClassName: '_1nqk0678',
62
+ variantClassNames: {
63
+ collapsed: {
64
+ true: '_1nqk0679',
65
+ false: '_1nqk067a'
66
+ }
67
+ },
68
+ defaultVariants: {},
69
+ compoundVariants: []
70
+ });
71
+ var truncatedContent = '_1nqk0674';
72
+ const SidebarContext = /*#__PURE__*/ createContext(null);
73
+ const useSidebarContext = ()=>{
74
+ const context = useContext(SidebarContext);
75
+ if (!context) throw new Error('Sidebar parts must be rendered inside <Sidebar.Root>.');
76
+ return context;
77
+ };
78
+ const useSidebarCollapsed = ()=>useSidebarContext().collapsed;
79
+ const SidebarRoot = /*#__PURE__*/ forwardRef(({ collapsed: collapsedProp, defaultCollapsed = false, onCollapsedChange, className, children, ...rest }, ref)=>{
80
+ const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);
81
+ const isControlled = void 0 !== collapsedProp;
82
+ const collapsed = isControlled ? collapsedProp : internalCollapsed;
83
+ const themedRef = useThemedRef(ref);
84
+ const setCollapsed = (next)=>{
85
+ if (!isControlled) setInternalCollapsed(next);
86
+ onCollapsedChange?.(next);
87
+ };
88
+ return /*#__PURE__*/ jsx(SidebarContext.Provider, {
89
+ value: {
90
+ collapsed,
91
+ setCollapsed
92
+ },
93
+ children: /*#__PURE__*/ jsx("nav", {
94
+ ref: themedRef,
95
+ className: className ? `${root({
96
+ collapsed
97
+ })} ${className}` : root({
98
+ collapsed
99
+ }),
100
+ ...rest,
101
+ children: children
102
+ })
103
+ });
104
+ });
105
+ SidebarRoot.displayName = 'SidebarRoot';
106
+ const SidebarHeader = ({ className, ...rest })=>/*#__PURE__*/ jsx("div", {
107
+ className: className ? `${header} ${className}` : header,
108
+ ...rest
109
+ });
110
+ SidebarHeader.displayName = 'SidebarHeader';
111
+ const SidebarContent = ({ className, ...rest })=>/*#__PURE__*/ jsx("div", {
112
+ className: className ? `${content} ${className}` : content,
113
+ ...rest
114
+ });
115
+ SidebarContent.displayName = 'SidebarContent';
116
+ const SidebarFooter = ({ className, ...rest })=>/*#__PURE__*/ jsx("div", {
117
+ className: className ? `${footer} ${className}` : footer,
118
+ ...rest
119
+ });
120
+ SidebarFooter.displayName = 'SidebarFooter';
121
+ const SidebarSection = ({ label, className, children, ...rest })=>{
122
+ const collapsed = useSidebarCollapsed();
123
+ return /*#__PURE__*/ jsxs("div", {
124
+ className: className ? `${section} ${className}` : section,
125
+ ...rest,
126
+ children: [
127
+ label ? /*#__PURE__*/ jsx("span", {
128
+ className: sectionLabel({
129
+ collapsed
130
+ }),
131
+ children: label
132
+ }) : null,
133
+ children
134
+ ]
135
+ });
136
+ };
137
+ SidebarSection.displayName = 'SidebarSection';
138
+ const SidebarItem = /*#__PURE__*/ forwardRef(({ as: Component = 'button', icon, active, className, children, title, ...rest }, ref)=>{
139
+ const collapsed = useSidebarCollapsed();
140
+ const classes = className ? `${item({
141
+ active,
142
+ collapsed
143
+ })} ${className}` : item({
144
+ active,
145
+ collapsed
146
+ });
147
+ const resolvedTitle = title ?? (collapsed && 'string' == typeof children ? children : void 0);
148
+ return /*#__PURE__*/ jsxs(Component, {
149
+ ref: ref,
150
+ className: classes,
151
+ title: resolvedTitle,
152
+ ...rest,
153
+ children: [
154
+ icon ? /*#__PURE__*/ jsx("span", {
155
+ className: itemIcon,
156
+ children: icon
157
+ }) : null,
158
+ /*#__PURE__*/ jsx("span", {
159
+ className: itemLabel({
160
+ collapsed
161
+ }),
162
+ children: children
163
+ })
164
+ ]
165
+ });
166
+ });
167
+ SidebarItem.displayName = 'SidebarItem';
168
+ const SidebarCollapseTrigger = ({ className, ...rest })=>{
169
+ const { collapsed, setCollapsed } = useSidebarContext();
170
+ return /*#__PURE__*/ jsx("button", {
171
+ type: "button",
172
+ className: className ? `${collapseTrigger} ${className}` : collapseTrigger,
173
+ "aria-label": collapsed ? 'Expand sidebar' : 'Collapse sidebar',
174
+ onClick: ()=>{
175
+ setCollapsed(!collapsed);
176
+ },
177
+ ...rest,
178
+ children: /*#__PURE__*/ jsx(ChevronLeftIcon, {
179
+ className: collapseTriggerIcon({
180
+ collapsed
181
+ })
182
+ })
183
+ });
184
+ };
185
+ SidebarCollapseTrigger.displayName = 'SidebarCollapseTrigger';
186
+ const SidebarImpl = ({ header: headerContent, footer: footerContent, sections, collapsible = true, linkComponent, collapsed, defaultCollapsed, onCollapsedChange })=>/*#__PURE__*/ jsxs(SidebarRoot, {
187
+ collapsed: collapsed,
188
+ defaultCollapsed: defaultCollapsed,
189
+ onCollapsedChange: onCollapsedChange,
190
+ children: [
191
+ headerContent || collapsible ? /*#__PURE__*/ jsxs(SidebarHeader, {
192
+ children: [
193
+ headerContent ? /*#__PURE__*/ jsx("span", {
194
+ className: truncatedContent,
195
+ children: headerContent
196
+ }) : null,
197
+ collapsible ? /*#__PURE__*/ jsx(SidebarCollapseTrigger, {}) : null
198
+ ]
199
+ }) : null,
200
+ /*#__PURE__*/ jsx(SidebarContent, {
201
+ children: sections.map((sectionSpec)=>/*#__PURE__*/ jsx(SidebarSection, {
202
+ label: sectionSpec.label,
203
+ children: sectionSpec.items.map((itemSpec)=>/*#__PURE__*/ jsx(SidebarItem, {
204
+ as: itemSpec.href ? linkComponent ?? 'a' : 'button',
205
+ href: itemSpec.href,
206
+ icon: itemSpec.icon,
207
+ active: itemSpec.active,
208
+ disabled: itemSpec.disabled,
209
+ onClick: itemSpec.onClick,
210
+ children: itemSpec.label
211
+ }, itemSpec.key))
212
+ }, sectionSpec.key))
213
+ }),
214
+ footerContent ? /*#__PURE__*/ jsx(SidebarFooter, {
215
+ children: /*#__PURE__*/ jsx("span", {
216
+ className: truncatedContent,
217
+ children: footerContent
218
+ })
219
+ }) : null
220
+ ]
221
+ });
222
+ SidebarImpl.displayName = 'Sidebar';
223
+ const Sidebar = Object.assign(SidebarImpl, {
224
+ Root: SidebarRoot,
225
+ Header: SidebarHeader,
226
+ Content: SidebarContent,
227
+ Section: SidebarSection,
228
+ Item: SidebarItem,
229
+ Footer: SidebarFooter,
230
+ CollapseTrigger: SidebarCollapseTrigger
231
+ });
232
+ export { Sidebar, useSidebarCollapsed };
@@ -0,0 +1,58 @@
1
+ ._48ex310 {
2
+ flex-wrap: wrap;
3
+ align-items: center;
4
+ margin: 0;
5
+ padding: 0;
6
+ list-style: none;
7
+ display: flex;
8
+ }
9
+
10
+ ._48ex311 {
11
+ align-items: center;
12
+ display: flex;
13
+ }
14
+
15
+ ._48ex312 {
16
+ color: var(--vinyasa-text-muted);
17
+ font-family: var(--vinyasa-font-family-sans);
18
+ font-size: var(--vinyasa-font-size-sm);
19
+ border-radius: var(--vinyasa-radius-sm);
20
+ transition: color var(--vinyasa-motion-duration-fast) var(--vinyasa-motion-easing-standard);
21
+ text-decoration: none;
22
+ }
23
+
24
+ ._48ex312:hover {
25
+ color: var(--vinyasa-text-default);
26
+ text-decoration: underline;
27
+ }
28
+
29
+ ._48ex312:focus-visible {
30
+ outline: 2px solid var(--vinyasa-focus);
31
+ outline-offset: 2px;
32
+ }
33
+
34
+ ._48ex313 {
35
+ color: var(--vinyasa-text-default);
36
+ font-family: var(--vinyasa-font-family-sans);
37
+ font-size: var(--vinyasa-font-size-sm);
38
+ font-weight: var(--vinyasa-font-weight-medium);
39
+ }
40
+
41
+ ._48ex314 {
42
+ margin: 0 var(--vinyasa-space1);
43
+ color: var(--vinyasa-text-muted);
44
+ justify-content: center;
45
+ align-items: center;
46
+ font-size: .875rem;
47
+ display: inline-flex;
48
+ }
49
+
50
+ ._48ex315 {
51
+ white-space: nowrap;
52
+ text-overflow: ellipsis;
53
+ vertical-align: bottom;
54
+ max-width: 16rem;
55
+ display: inline-block;
56
+ overflow: hidden;
57
+ }
58
+
@@ -0,0 +1,87 @@
1
+ import "./655.css";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { ChevronRightIcon } from "@vinyasa/icons";
4
+ import { useThemedRef } from "@vinyasa/tokens";
5
+ import { Fragment, forwardRef } from "react";
6
+ var item = '_48ex311';
7
+ var Breadcrumbs_css_link = '_48ex312';
8
+ var list = '_48ex310';
9
+ var page = '_48ex313';
10
+ var separator = '_48ex314';
11
+ var truncatedLabel = '_48ex315';
12
+ const BreadcrumbsRoot = /*#__PURE__*/ forwardRef(({ label = 'Breadcrumb', ...rest }, ref)=>{
13
+ const themedRef = useThemedRef(ref);
14
+ return /*#__PURE__*/ jsx("nav", {
15
+ ref: themedRef,
16
+ "aria-label": label,
17
+ ...rest
18
+ });
19
+ });
20
+ BreadcrumbsRoot.displayName = 'BreadcrumbsRoot';
21
+ const BreadcrumbsList = ({ className, ...rest })=>/*#__PURE__*/ jsx("ol", {
22
+ className: className ? `${list} ${className}` : list,
23
+ ...rest
24
+ });
25
+ BreadcrumbsList.displayName = 'BreadcrumbsList';
26
+ const BreadcrumbsItem = ({ className, ...rest })=>/*#__PURE__*/ jsx("li", {
27
+ className: className ? `${item} ${className}` : item,
28
+ ...rest
29
+ });
30
+ BreadcrumbsItem.displayName = 'BreadcrumbsItem';
31
+ const BreadcrumbsLink = ({ as: Component = 'a', className, ...rest })=>/*#__PURE__*/ jsx(Component, {
32
+ className: className ? `${Breadcrumbs_css_link} ${className}` : Breadcrumbs_css_link,
33
+ ...rest
34
+ });
35
+ BreadcrumbsLink.displayName = 'BreadcrumbsLink';
36
+ const BreadcrumbsPage = ({ className, ...rest })=>/*#__PURE__*/ jsx("span", {
37
+ className: className ? `${page} ${className}` : page,
38
+ "aria-current": "page",
39
+ ...rest
40
+ });
41
+ BreadcrumbsPage.displayName = 'BreadcrumbsPage';
42
+ const BreadcrumbsSeparator = ({ className, children, ...rest })=>/*#__PURE__*/ jsx("li", {
43
+ "aria-hidden": "true",
44
+ className: className ? `${separator} ${className}` : separator,
45
+ ...rest,
46
+ children: children ?? /*#__PURE__*/ jsx(ChevronRightIcon, {})
47
+ });
48
+ BreadcrumbsSeparator.displayName = 'BreadcrumbsSeparator';
49
+ const BreadcrumbsImpl = ({ items, separator: separatorNode, linkComponent, label, className, ...rest })=>/*#__PURE__*/ jsx(BreadcrumbsRoot, {
50
+ label: label,
51
+ className: className,
52
+ ...rest,
53
+ children: /*#__PURE__*/ jsx(BreadcrumbsList, {
54
+ children: items.map((itemSpec, index)=>{
55
+ const isLast = index === items.length - 1;
56
+ const key = itemSpec.key ?? ('string' == typeof itemSpec.label ? itemSpec.label : index);
57
+ return /*#__PURE__*/ jsxs(Fragment, {
58
+ children: [
59
+ /*#__PURE__*/ jsx(BreadcrumbsItem, {
60
+ children: isLast ? /*#__PURE__*/ jsx(BreadcrumbsPage, {
61
+ className: truncatedLabel,
62
+ children: itemSpec.label
63
+ }) : /*#__PURE__*/ jsx(BreadcrumbsLink, {
64
+ as: linkComponent ?? 'a',
65
+ href: itemSpec.href,
66
+ className: truncatedLabel,
67
+ children: itemSpec.label
68
+ })
69
+ }),
70
+ isLast ? null : /*#__PURE__*/ jsx(BreadcrumbsSeparator, {
71
+ children: separatorNode
72
+ })
73
+ ]
74
+ }, key);
75
+ })
76
+ })
77
+ });
78
+ BreadcrumbsImpl.displayName = 'Breadcrumbs';
79
+ const Breadcrumbs = Object.assign(BreadcrumbsImpl, {
80
+ Root: BreadcrumbsRoot,
81
+ List: BreadcrumbsList,
82
+ Item: BreadcrumbsItem,
83
+ Link: BreadcrumbsLink,
84
+ Page: BreadcrumbsPage,
85
+ Separator: BreadcrumbsSeparator
86
+ });
87
+ export { Breadcrumbs };
@@ -0,0 +1,46 @@
1
+ ._1pp4pc70 {
2
+ align-items: center;
3
+ gap: var(--vinyasa-space2);
4
+ width: 100%;
5
+ max-width: 20rem;
6
+ height: 2.25rem;
7
+ padding: 0 var(--vinyasa-space3);
8
+ border: var(--vinyasa-border-width-thin) solid var(--vinyasa-border-color-default);
9
+ border-radius: var(--vinyasa-radius-md);
10
+ background-color: var(--vinyasa-surface);
11
+ color: var(--vinyasa-text-muted);
12
+ font-family: var(--vinyasa-font-family-sans);
13
+ font-size: var(--vinyasa-font-size-sm);
14
+ cursor: pointer;
15
+ transition: background-color var(--vinyasa-motion-duration-fast) var(--vinyasa-motion-easing-standard), border-color var(--vinyasa-motion-duration-fast) var(--vinyasa-motion-easing-standard);
16
+ display: inline-flex;
17
+ }
18
+
19
+ ._1pp4pc70:hover {
20
+ background-color: var(--vinyasa-secondary);
21
+ }
22
+
23
+ ._1pp4pc70:focus-visible {
24
+ outline: 2px solid var(--vinyasa-focus);
25
+ outline-offset: 2px;
26
+ }
27
+
28
+ ._1pp4pc71 {
29
+ flex-shrink: 0;
30
+ font-size: 1rem;
31
+ display: inline-flex;
32
+ }
33
+
34
+ ._1pp4pc72 {
35
+ white-space: nowrap;
36
+ text-overflow: ellipsis;
37
+ text-align: left;
38
+ flex: 1;
39
+ min-width: 0;
40
+ overflow: hidden;
41
+ }
42
+
43
+ ._1pp4pc73 {
44
+ flex-shrink: 0;
45
+ }
46
+
package/dist/esm/66.js ADDED
@@ -0,0 +1,92 @@
1
+ import "./66.css";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { SearchIcon } from "@vinyasa/icons";
4
+ import { CommandPalette } from "@vinyasa/overlay/command-palette";
5
+ import { Kbd } from "@vinyasa/typography";
6
+ import { useEffect, useRef, useState } from "react";
7
+ var trigger = '_1pp4pc70';
8
+ var triggerIcon = '_1pp4pc71';
9
+ var triggerKbd = '_1pp4pc73';
10
+ var triggerText = '_1pp4pc72';
11
+ const defaultNavigate = (href)=>{
12
+ window.location.assign(href);
13
+ };
14
+ const CommandNavigationImpl = ({ groups, label = 'Command navigation', placeholder = 'Search or jump to...', emptyMessage, onNavigate = defaultNavigate, open: openProp, defaultOpen = false, onOpenChange, disableShortcut = false })=>{
15
+ const [internalOpen, setInternalOpen] = useState(defaultOpen);
16
+ const isControlled = void 0 !== openProp;
17
+ const open = isControlled ? openProp : internalOpen;
18
+ const openRef = useRef(open);
19
+ useEffect(()=>{
20
+ openRef.current = open;
21
+ }, [
22
+ open
23
+ ]);
24
+ const setOpen = (next)=>{
25
+ if (!isControlled) setInternalOpen(next);
26
+ onOpenChange?.(next);
27
+ };
28
+ useEffect(()=>{
29
+ if (disableShortcut) return;
30
+ const handleKeyDown = (event)=>{
31
+ if ('k' === event.key.toLowerCase() && (event.metaKey || event.ctrlKey)) {
32
+ event.preventDefault();
33
+ setOpen(!openRef.current);
34
+ }
35
+ };
36
+ window.addEventListener('keydown', handleKeyDown);
37
+ return ()=>{
38
+ window.removeEventListener('keydown', handleKeyDown);
39
+ };
40
+ }, [
41
+ disableShortcut
42
+ ]);
43
+ const paletteGroups = groups.map((group)=>({
44
+ key: group.key,
45
+ heading: group.heading,
46
+ items: group.items.map((item)=>({
47
+ key: item.key,
48
+ label: item.label,
49
+ icon: item.icon,
50
+ shortcut: item.shortcut,
51
+ keywords: item.keywords,
52
+ disabled: item.disabled,
53
+ onSelect: ()=>{
54
+ setOpen(false);
55
+ if (item.onSelect) item.onSelect();
56
+ else if (item.href) onNavigate(item.href);
57
+ }
58
+ }))
59
+ }));
60
+ return /*#__PURE__*/ jsx(CommandPalette, {
61
+ label: label,
62
+ placeholder: placeholder,
63
+ emptyMessage: emptyMessage,
64
+ groups: paletteGroups,
65
+ open: open,
66
+ onOpenChange: setOpen
67
+ });
68
+ };
69
+ CommandNavigationImpl.displayName = 'CommandNavigation';
70
+ const CommandNavigationTrigger = ({ placeholder = 'Search or jump to...', shortcutLabel = '⌘K', className, children, ...rest })=>/*#__PURE__*/ jsxs("button", {
71
+ type: "button",
72
+ className: className ? `${trigger} ${className}` : trigger,
73
+ ...rest,
74
+ children: [
75
+ /*#__PURE__*/ jsx(SearchIcon, {
76
+ className: triggerIcon
77
+ }),
78
+ /*#__PURE__*/ jsx("span", {
79
+ className: triggerText,
80
+ children: children ?? placeholder
81
+ }),
82
+ /*#__PURE__*/ jsx(Kbd, {
83
+ className: triggerKbd,
84
+ children: shortcutLabel
85
+ })
86
+ ]
87
+ });
88
+ CommandNavigationTrigger.displayName = 'CommandNavigationTrigger';
89
+ const CommandNavigation = Object.assign(CommandNavigationImpl, {
90
+ Trigger: CommandNavigationTrigger
91
+ });
92
+ export { CommandNavigation };
@@ -0,0 +1,109 @@
1
+ ._1o0hep20 {
2
+ margin: 0;
3
+ padding: 0;
4
+ list-style: none;
5
+ }
6
+
7
+ ._1o0hep21 {
8
+ padding: 0;
9
+ padding-left: var(--vinyasa-space5);
10
+ margin: 0;
11
+ list-style: none;
12
+ }
13
+
14
+ ._1o0hep22 {
15
+ list-style: none;
16
+ }
17
+
18
+ ._1o0hep23 {
19
+ align-items: center;
20
+ gap: var(--vinyasa-space2);
21
+ min-width: 0;
22
+ padding: var(--vinyasa-space2) var(--vinyasa-space2) var(--vinyasa-space2) var(--vinyasa-space3);
23
+ border-radius: var(--vinyasa-radius-md);
24
+ color: var(--vinyasa-text-default);
25
+ font-family: var(--vinyasa-font-family-sans);
26
+ font-size: var(--vinyasa-font-size-sm);
27
+ cursor: pointer;
28
+ transition: background-color var(--vinyasa-motion-duration-fast) var(--vinyasa-motion-easing-standard), color var(--vinyasa-motion-duration-fast) var(--vinyasa-motion-easing-standard);
29
+ display: flex;
30
+ position: relative;
31
+ }
32
+
33
+ ._1o0hep23:hover:not([aria-disabled="true"]) {
34
+ background-color: var(--vinyasa-secondary);
35
+ }
36
+
37
+ ._1o0hep23:focus-visible {
38
+ outline: 2px solid var(--vinyasa-focus);
39
+ outline-offset: -2px;
40
+ }
41
+
42
+ ._1o0hep23[aria-disabled="true"] {
43
+ opacity: var(--vinyasa-opacity-disabled);
44
+ cursor: not-allowed;
45
+ }
46
+
47
+ ._1o0hep23[aria-selected="true"] {
48
+ background-color: var(--vinyasa-tertiary);
49
+ color: var(--vinyasa-primary);
50
+ font-weight: var(--vinyasa-font-weight-medium);
51
+ }
52
+
53
+ ._1o0hep23[aria-selected="true"]:before {
54
+ content: "";
55
+ border-radius: var(--vinyasa-radius-full);
56
+ background-color: var(--vinyasa-primary);
57
+ width: .1875rem;
58
+ position: absolute;
59
+ top: .25rem;
60
+ bottom: .25rem;
61
+ left: .125rem;
62
+ }
63
+
64
+ ._1o0hep24 {
65
+ border-radius: var(--vinyasa-radius-sm);
66
+ width: 1.25rem;
67
+ height: 1.25rem;
68
+ color: var(--vinyasa-text-muted);
69
+ cursor: pointer;
70
+ transition: transform var(--vinyasa-motion-duration-fast) var(--vinyasa-motion-easing-standard), color var(--vinyasa-motion-duration-fast) var(--vinyasa-motion-easing-standard);
71
+ background-color: #0000;
72
+ border: none;
73
+ flex-shrink: 0;
74
+ justify-content: center;
75
+ align-items: center;
76
+ display: inline-flex;
77
+ }
78
+
79
+ ._1o0hep24:hover {
80
+ color: var(--vinyasa-text-default);
81
+ }
82
+
83
+ ._1o0hep24[data-expanded="true"] {
84
+ transform: rotate(90deg);
85
+ }
86
+
87
+ [aria-selected="true"] ._1o0hep24 {
88
+ color: var(--vinyasa-primary);
89
+ }
90
+
91
+ ._1o0hep25 {
92
+ flex-shrink: 0;
93
+ width: 1.25rem;
94
+ height: 1.25rem;
95
+ }
96
+
97
+ ._1o0hep26 {
98
+ flex-shrink: 0;
99
+ font-size: 1rem;
100
+ display: inline-flex;
101
+ }
102
+
103
+ ._1o0hep27 {
104
+ white-space: nowrap;
105
+ text-overflow: ellipsis;
106
+ min-width: 0;
107
+ overflow: hidden;
108
+ }
109
+