@womp/kookie-ui 0.33.0 → 0.34.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/components.css +202 -0
- package/dist/cjs/components/command.d.ts +133 -0
- package/dist/cjs/components/command.d.ts.map +1 -0
- package/dist/cjs/components/command.js +3 -0
- package/dist/cjs/components/command.js.map +7 -0
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +2 -2
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/{chunk-K35JUIUT.js → chunk-API4DAPY.js} +2 -2
- package/dist/esm/{chunk-W35ZKQMQ.js → chunk-CAM66IXC.js} +2 -2
- package/dist/esm/chunk-GZPB6MRQ.js +3 -0
- package/dist/esm/chunk-GZPB6MRQ.js.map +7 -0
- package/dist/esm/{chunk-6WHKGVWY.js → chunk-NZJRXZYX.js} +2 -2
- package/dist/esm/chunk-SHKPQ3RI.js +2 -0
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/command.d.ts +133 -0
- package/dist/esm/components/command.d.ts.map +1 -0
- package/dist/esm/components/command.js +3 -0
- package/dist/esm/components/command.js.map +7 -0
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/navigator.js +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/hooks/index.js +1 -1
- package/dist/esm/index.js +1 -1
- package/package.json +1 -1
- package/src/components/command.css +197 -0
- package/src/components/command.tsx +432 -0
- package/src/components/index.css +1 -0
- package/src/components/index.tsx +24 -0
- package/styles.css +202 -0
- package/dist/esm/chunk-RSG4XWHU.js +0 -2
- /package/dist/esm/{chunk-K35JUIUT.js.map → chunk-API4DAPY.js.map} +0 -0
- /package/dist/esm/{chunk-W35ZKQMQ.js.map → chunk-CAM66IXC.js.map} +0 -0
- /package/dist/esm/{chunk-6WHKGVWY.js.map → chunk-NZJRXZYX.js.map} +0 -0
- /package/dist/esm/{chunk-RSG4XWHU.js.map → chunk-SHKPQ3RI.js.map} +0 -0
package/components.css
CHANGED
|
@@ -4999,6 +4999,208 @@
|
|
|
4999
4999
|
-webkit-transform-origin: var(--radix-context-menu-content-transform-origin);
|
|
5000
5000
|
transform-origin: var(--radix-context-menu-content-transform-origin);
|
|
5001
5001
|
}
|
|
5002
|
+
.kui-CommandOverlay {
|
|
5003
|
+
display: -webkit-box;
|
|
5004
|
+
display: -ms-flexbox;
|
|
5005
|
+
display: flex;
|
|
5006
|
+
-webkit-box-pack: center;
|
|
5007
|
+
-ms-flex-pack: center;
|
|
5008
|
+
justify-content: center;
|
|
5009
|
+
-webkit-box-align: start;
|
|
5010
|
+
-ms-flex-align: start;
|
|
5011
|
+
align-items: flex-start;
|
|
5012
|
+
padding: max(var(--space-9), 12vh) var(--space-4) var(--space-4);
|
|
5013
|
+
}
|
|
5014
|
+
.kui-CommandContent {
|
|
5015
|
+
position: relative;
|
|
5016
|
+
z-index: 1;
|
|
5017
|
+
display: -webkit-box;
|
|
5018
|
+
display: -ms-flexbox;
|
|
5019
|
+
display: flex;
|
|
5020
|
+
-webkit-box-orient: vertical;
|
|
5021
|
+
-webkit-box-direction: normal;
|
|
5022
|
+
-ms-flex-direction: column;
|
|
5023
|
+
flex-direction: column;
|
|
5024
|
+
gap: var(--space-3);
|
|
5025
|
+
width: 100%;
|
|
5026
|
+
max-width: var(--overlay-w);
|
|
5027
|
+
max-height: 100%;
|
|
5028
|
+
outline: none;
|
|
5029
|
+
}
|
|
5030
|
+
.kui-CommandContent:where(.kui-r-size-1) {
|
|
5031
|
+
--overlay-w: var(--overlay-w-1);
|
|
5032
|
+
}
|
|
5033
|
+
.kui-CommandContent:where(.kui-r-size-2) {
|
|
5034
|
+
--overlay-w: var(--overlay-w-2);
|
|
5035
|
+
}
|
|
5036
|
+
.kui-CommandContent:where(.kui-r-size-3) {
|
|
5037
|
+
--overlay-w: var(--overlay-w-3);
|
|
5038
|
+
}
|
|
5039
|
+
.kui-CommandContent:where(.kui-r-size-4) {
|
|
5040
|
+
--overlay-w: var(--overlay-w-4);
|
|
5041
|
+
}
|
|
5042
|
+
.kui-CommandRoot {
|
|
5043
|
+
display: -webkit-box;
|
|
5044
|
+
display: -ms-flexbox;
|
|
5045
|
+
display: flex;
|
|
5046
|
+
-webkit-box-orient: vertical;
|
|
5047
|
+
-webkit-box-direction: normal;
|
|
5048
|
+
-ms-flex-direction: column;
|
|
5049
|
+
flex-direction: column;
|
|
5050
|
+
gap: var(--space-3);
|
|
5051
|
+
min-height: 0;
|
|
5052
|
+
}
|
|
5053
|
+
.kui-CommandSearch {
|
|
5054
|
+
display: -webkit-box;
|
|
5055
|
+
display: -ms-flexbox;
|
|
5056
|
+
display: flex;
|
|
5057
|
+
-webkit-box-align: center;
|
|
5058
|
+
-ms-flex-align: center;
|
|
5059
|
+
align-items: center;
|
|
5060
|
+
-ms-flex-negative: 0;
|
|
5061
|
+
flex-shrink: 0;
|
|
5062
|
+
background-color: var(--color-surface);
|
|
5063
|
+
-webkit-box-shadow: var(--floating-chrome);
|
|
5064
|
+
box-shadow: var(--floating-chrome);
|
|
5065
|
+
cursor: text;
|
|
5066
|
+
}
|
|
5067
|
+
.kui-CommandSearch:where(.kui-r-size-1) {
|
|
5068
|
+
gap: var(--space-2);
|
|
5069
|
+
padding: var(--panel-p-1) var(--panel-p-2);
|
|
5070
|
+
border-radius: var(--radius-panel-1);
|
|
5071
|
+
font-size: var(--font-size-3);
|
|
5072
|
+
line-height: var(--line-height-3);
|
|
5073
|
+
}
|
|
5074
|
+
.kui-CommandSearch:where(.kui-r-size-2) {
|
|
5075
|
+
gap: var(--space-3);
|
|
5076
|
+
padding: var(--panel-p-2) var(--panel-p-3);
|
|
5077
|
+
border-radius: var(--radius-panel-2);
|
|
5078
|
+
font-size: var(--font-size-4);
|
|
5079
|
+
line-height: var(--line-height-4);
|
|
5080
|
+
}
|
|
5081
|
+
.kui-CommandSearch:where(.kui-r-size-3) {
|
|
5082
|
+
gap: var(--space-3);
|
|
5083
|
+
padding: var(--panel-p-3) var(--panel-p-4);
|
|
5084
|
+
border-radius: var(--radius-panel-3);
|
|
5085
|
+
font-size: var(--font-size-5);
|
|
5086
|
+
line-height: var(--line-height-5);
|
|
5087
|
+
}
|
|
5088
|
+
.kui-CommandSearch:where(.kui-r-size-4) {
|
|
5089
|
+
gap: var(--space-4);
|
|
5090
|
+
padding: var(--panel-p-4) var(--panel-p-4);
|
|
5091
|
+
border-radius: var(--radius-panel-4);
|
|
5092
|
+
font-size: var(--font-size-6);
|
|
5093
|
+
line-height: var(--line-height-6);
|
|
5094
|
+
}
|
|
5095
|
+
.kui-CommandSearchSlot {
|
|
5096
|
+
display: -webkit-box;
|
|
5097
|
+
display: -ms-flexbox;
|
|
5098
|
+
display: flex;
|
|
5099
|
+
-ms-flex-negative: 0;
|
|
5100
|
+
flex-shrink: 0;
|
|
5101
|
+
color: var(--neutral-a10);
|
|
5102
|
+
}
|
|
5103
|
+
.kui-CommandSearchSlot > :where(*) {
|
|
5104
|
+
width: 1em;
|
|
5105
|
+
height: 1em;
|
|
5106
|
+
}
|
|
5107
|
+
.kui-CommandInput {
|
|
5108
|
+
-webkit-box-flex: 1;
|
|
5109
|
+
-ms-flex: 1;
|
|
5110
|
+
flex: 1;
|
|
5111
|
+
min-width: 0;
|
|
5112
|
+
font: inherit;
|
|
5113
|
+
color: var(--neutral-12);
|
|
5114
|
+
background: none;
|
|
5115
|
+
outline: none;
|
|
5116
|
+
}
|
|
5117
|
+
.kui-CommandInput::-webkit-input-placeholder {
|
|
5118
|
+
color: var(--neutral-a10);
|
|
5119
|
+
}
|
|
5120
|
+
.kui-CommandInput::-moz-placeholder {
|
|
5121
|
+
color: var(--neutral-a10);
|
|
5122
|
+
}
|
|
5123
|
+
.kui-CommandInput:-ms-input-placeholder {
|
|
5124
|
+
color: var(--neutral-a10);
|
|
5125
|
+
}
|
|
5126
|
+
.kui-CommandInput::-ms-input-placeholder {
|
|
5127
|
+
color: var(--neutral-a10);
|
|
5128
|
+
}
|
|
5129
|
+
.kui-CommandInput::placeholder {
|
|
5130
|
+
color: var(--neutral-a10);
|
|
5131
|
+
}
|
|
5132
|
+
.kui-CommandPanel {
|
|
5133
|
+
min-height: 0;
|
|
5134
|
+
-ms-flex-negative: 1;
|
|
5135
|
+
flex-shrink: 1;
|
|
5136
|
+
}
|
|
5137
|
+
.kui-CommandList {
|
|
5138
|
+
max-height: min(60vh, calc(480px * var(--scale)));
|
|
5139
|
+
overflow: auto;
|
|
5140
|
+
-ms-scroll-chaining: none;
|
|
5141
|
+
overscroll-behavior: contain;
|
|
5142
|
+
outline: 0;
|
|
5143
|
+
}
|
|
5144
|
+
.kui-CommandPanel:where(:not(:has(.kui-CommandItem, .kui-CommandEmpty))) {
|
|
5145
|
+
display: none;
|
|
5146
|
+
}
|
|
5147
|
+
.kui-CommandSeat:where(:empty) {
|
|
5148
|
+
display: none;
|
|
5149
|
+
}
|
|
5150
|
+
.kui-CommandItem:where([data-disabled='false']) {
|
|
5151
|
+
color: inherit;
|
|
5152
|
+
cursor: var(--cursor-menu-item);
|
|
5153
|
+
}
|
|
5154
|
+
.kui-CommandItem:where([data-selected='true']) {
|
|
5155
|
+
background-color: var(--accent-4);
|
|
5156
|
+
}
|
|
5157
|
+
.kui-CommandItem:where([data-tone='destructive']) {
|
|
5158
|
+
color: var(--red-11);
|
|
5159
|
+
}
|
|
5160
|
+
.kui-CommandItem:where([data-disabled='true']) {
|
|
5161
|
+
color: var(--neutral-a8);
|
|
5162
|
+
cursor: default;
|
|
5163
|
+
pointer-events: none;
|
|
5164
|
+
}
|
|
5165
|
+
.kui-CommandItem:where(:-moz-any-link) {
|
|
5166
|
+
text-decoration: none;
|
|
5167
|
+
}
|
|
5168
|
+
.kui-CommandItem:where(:any-link) {
|
|
5169
|
+
text-decoration: none;
|
|
5170
|
+
}
|
|
5171
|
+
.kui-CommandItemLabel {
|
|
5172
|
+
-webkit-box-flex: 1;
|
|
5173
|
+
-ms-flex: 1;
|
|
5174
|
+
flex: 1;
|
|
5175
|
+
min-width: 0;
|
|
5176
|
+
}
|
|
5177
|
+
.kui-CommandItemSlot {
|
|
5178
|
+
display: -webkit-box;
|
|
5179
|
+
display: -ms-flexbox;
|
|
5180
|
+
display: flex;
|
|
5181
|
+
-ms-flex-negative: 0;
|
|
5182
|
+
flex-shrink: 0;
|
|
5183
|
+
}
|
|
5184
|
+
.kui-CommandItemSlot:where([data-slot='leading']) {
|
|
5185
|
+
color: var(--neutral-a11);
|
|
5186
|
+
}
|
|
5187
|
+
.kui-CommandItemSlot:where([data-slot='trailing']) {
|
|
5188
|
+
color: var(--neutral-a10);
|
|
5189
|
+
}
|
|
5190
|
+
.kui-CommandEmpty {
|
|
5191
|
+
padding: var(--space-5);
|
|
5192
|
+
text-align: center;
|
|
5193
|
+
color: var(--neutral-a11);
|
|
5194
|
+
}
|
|
5195
|
+
@media (forced-colors: active) {
|
|
5196
|
+
.kui-CommandItem:where([data-selected='true']) {
|
|
5197
|
+
outline: 2px solid Highlight;
|
|
5198
|
+
outline-offset: -2px;
|
|
5199
|
+
}
|
|
5200
|
+
.kui-CommandSearch {
|
|
5201
|
+
border: 1px solid CanvasText;
|
|
5202
|
+
}
|
|
5203
|
+
}
|
|
5002
5204
|
.kui-DialogContent {
|
|
5003
5205
|
max-width: var(--overlay-w);
|
|
5004
5206
|
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command, from v2 (2026-11-03): a command palette, one field over everything the app can do.
|
|
3
|
+
*
|
|
4
|
+
* It is a Dialog: it covers the app, traps focus, locks the page and leaves on Escape. Inside are
|
|
5
|
+
* two panes in a column anchored to the top, the search bar and the results, so a result count
|
|
6
|
+
* never moves the field. The keyboard model is the package's: a row is highlighted from the first
|
|
7
|
+
* frame and after every keystroke, the arrows move it, Enter runs it, and running a row closes the
|
|
8
|
+
* palette. What rows exist and what they do is the app's.
|
|
9
|
+
*
|
|
10
|
+
* Filtering keeps the order of `items`: a palette is used by muscle memory, so typing never
|
|
11
|
+
* reorders it. Pass `filter={null}` to narrow and rank `items` yourself.
|
|
12
|
+
*
|
|
13
|
+
* Differs from v2 in its machine only: v1 builds on cmdk where v2 builds on Base UI's Autocomplete.
|
|
14
|
+
* A row that should be a link takes `asChild` around the app's link, where v2 takes `render`.
|
|
15
|
+
*/
|
|
16
|
+
import * as React from 'react';
|
|
17
|
+
import { Command as CommandPrimitive } from 'cmdk';
|
|
18
|
+
import { Dialog as DialogPrimitive } from 'radix-ui';
|
|
19
|
+
type Size = '1' | '2' | '3' | '4';
|
|
20
|
+
/** The rows stand one step above the palette: it is the one object on screen, read from a distance. */
|
|
21
|
+
declare const ROW_STEP: Record<Size, Size>;
|
|
22
|
+
type CommandOpenChangeReason = 'item-press' | 'dismiss';
|
|
23
|
+
type CommandOpenChangeDetails = {
|
|
24
|
+
reason: CommandOpenChangeReason;
|
|
25
|
+
};
|
|
26
|
+
type Filter = (item: unknown, query: string, itemToString: (item: unknown) => string) => boolean;
|
|
27
|
+
interface CommandProps {
|
|
28
|
+
/**
|
|
29
|
+
* The size step of the palette, from `"1"` to `"4"`. The rows are one step larger than the
|
|
30
|
+
* app's controls at the same step, and the search text larger again. The default comes from
|
|
31
|
+
* the theme.
|
|
32
|
+
*/
|
|
33
|
+
size?: Size;
|
|
34
|
+
/**
|
|
35
|
+
* Every item the palette can show, before filtering. `CommandList` takes a function that turns
|
|
36
|
+
* an item into a row. An item with its own `items` array is a group. Keep the array stable.
|
|
37
|
+
*/
|
|
38
|
+
items: readonly unknown[];
|
|
39
|
+
/** Whether the palette is open, for a controlled palette. Most are, because a key handler opens them. */
|
|
40
|
+
open?: boolean;
|
|
41
|
+
/** Whether the palette is open at the start, for an uncontrolled palette. */
|
|
42
|
+
defaultOpen?: boolean;
|
|
43
|
+
/** Called each time the palette opens or closes. `reason` is `"item-press"` when a row ran. */
|
|
44
|
+
onOpenChange?: (open: boolean, details: CommandOpenChangeDetails) => void;
|
|
45
|
+
/** A `CommandTrigger`, if there is one, and a `CommandContent`. */
|
|
46
|
+
children: React.ReactNode;
|
|
47
|
+
}
|
|
48
|
+
/** A command palette: a field over a list of rows, in a dialog. Running a row closes it. */
|
|
49
|
+
declare function Command({ size: sizeProp, items, open, defaultOpen, onOpenChange, children }: CommandProps): React.JSX.Element;
|
|
50
|
+
interface CommandTriggerProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger> {
|
|
51
|
+
}
|
|
52
|
+
/** Opens the palette. Most palettes open from a key handler instead, and render none. */
|
|
53
|
+
declare function CommandTrigger({ children, ...props }: CommandTriggerProps): React.JSX.Element;
|
|
54
|
+
interface CommandContentProps {
|
|
55
|
+
/** The palette's accessible name, such as "Search the documentation". */
|
|
56
|
+
'aria-label': string;
|
|
57
|
+
/**
|
|
58
|
+
* How an item matches the query. The default keeps an item whose text contains the query.
|
|
59
|
+
* `null` turns filtering off, for an app that narrows and ranks `items` itself.
|
|
60
|
+
*/
|
|
61
|
+
filter?: Filter | null;
|
|
62
|
+
/** What an item says, for the filter. The default reads a string, or an object's label, title or value. */
|
|
63
|
+
itemToString?: (item: unknown) => string;
|
|
64
|
+
/** Called with the query on every keystroke, and with `""` when the palette closes. */
|
|
65
|
+
onQueryChange?: (query: string) => void;
|
|
66
|
+
/** Keep the portal in a container of your own. */
|
|
67
|
+
container?: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>['container'];
|
|
68
|
+
children: React.ReactNode;
|
|
69
|
+
className?: string;
|
|
70
|
+
style?: React.CSSProperties;
|
|
71
|
+
}
|
|
72
|
+
/** The palette: a column of the search bar over the results, anchored to the top of the window. */
|
|
73
|
+
declare function CommandContent({ 'aria-label': label, filter, itemToString, onQueryChange, container, children, className, style }: CommandContentProps): React.JSX.Element;
|
|
74
|
+
interface CommandInputProps extends Omit<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>, 'value' | 'onValueChange' | 'aria-label'> {
|
|
75
|
+
/** The field's accessible name. */
|
|
76
|
+
'aria-label': string;
|
|
77
|
+
/** An icon before the text, such as a search glyph. */
|
|
78
|
+
leading?: React.ReactNode;
|
|
79
|
+
}
|
|
80
|
+
/** The search bar, a pane of its own. The palette opens with the caret in it. */
|
|
81
|
+
declare function CommandInput({ leading, className, ...props }: CommandInputProps): React.JSX.Element;
|
|
82
|
+
interface CommandListProps<T> {
|
|
83
|
+
/** Turns an item into a row (a `CommandItem`) or a group (a `CommandGroup`). */
|
|
84
|
+
children: (item: T) => React.ReactNode;
|
|
85
|
+
className?: string;
|
|
86
|
+
}
|
|
87
|
+
/** The results, a pane of their own under the search bar. Its height follows the results. */
|
|
88
|
+
declare function CommandList<T>({ children, className }: CommandListProps<T>): React.JSX.Element;
|
|
89
|
+
interface CommandGroupProps {
|
|
90
|
+
/** The group's own items, after filtering. Render them with `CommandCollection`. */
|
|
91
|
+
items: readonly unknown[];
|
|
92
|
+
children: React.ReactNode;
|
|
93
|
+
className?: string;
|
|
94
|
+
}
|
|
95
|
+
/** A labelled run of rows. A group with no matching rows is left out. */
|
|
96
|
+
declare function CommandGroup({ items, children, className }: CommandGroupProps): React.JSX.Element;
|
|
97
|
+
interface CommandGroupLabelProps {
|
|
98
|
+
children: React.ReactNode;
|
|
99
|
+
className?: string;
|
|
100
|
+
}
|
|
101
|
+
/** The group's name, above its rows. */
|
|
102
|
+
declare function CommandGroupLabel({ children, className }: CommandGroupLabelProps): React.JSX.Element;
|
|
103
|
+
interface CommandCollectionProps<T> {
|
|
104
|
+
/** Turns one of the group's items into a row. */
|
|
105
|
+
children: (item: T) => React.ReactNode;
|
|
106
|
+
}
|
|
107
|
+
/** The group's rows. */
|
|
108
|
+
declare function CommandCollection<T>({ children }: CommandCollectionProps<T>): React.JSX.Element;
|
|
109
|
+
interface CommandItemProps extends Omit<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>, 'value' | 'onSelect'> {
|
|
110
|
+
/** The item this row shows. A string is also the row's identity for the highlight. */
|
|
111
|
+
value?: unknown;
|
|
112
|
+
/** Runs when the row is pressed or Enter is pressed on it. The palette then closes. */
|
|
113
|
+
onSelect?: () => void;
|
|
114
|
+
/** An icon before the label. */
|
|
115
|
+
leading?: React.ReactNode;
|
|
116
|
+
/** Something after the label, such as a shortcut. */
|
|
117
|
+
trailing?: React.ReactNode;
|
|
118
|
+
/** Set when running the row destroys something. */
|
|
119
|
+
tone?: 'destructive';
|
|
120
|
+
/** Renders the child, such as your router's link, as the row. Enter follows the link. */
|
|
121
|
+
asChild?: boolean;
|
|
122
|
+
}
|
|
123
|
+
/** One row. Running it, by press or by Enter, runs `onSelect` and closes the palette. */
|
|
124
|
+
declare function CommandItem({ value, onSelect, leading, trailing, tone, asChild, children, className, ...props }: CommandItemProps): React.JSX.Element;
|
|
125
|
+
interface CommandEmptyProps {
|
|
126
|
+
children: React.ReactNode;
|
|
127
|
+
className?: string;
|
|
128
|
+
}
|
|
129
|
+
/** What the results pane says when nothing matches. It renders inside that pane. */
|
|
130
|
+
declare function CommandEmpty({ children, className }: CommandEmptyProps): React.ReactPortal | null;
|
|
131
|
+
export { Command, CommandTrigger, CommandContent, CommandInput, CommandList, CommandGroup, CommandGroupLabel, CommandCollection, CommandItem, CommandEmpty, ROW_STEP as COMMAND_ROW_STEP };
|
|
132
|
+
export type { CommandProps, CommandTriggerProps, CommandContentProps, CommandInputProps, CommandListProps, CommandGroupProps, CommandGroupLabelProps, CommandCollectionProps, CommandItemProps, CommandEmptyProps, CommandOpenChangeDetails, CommandOpenChangeReason, };
|
|
133
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/components/command.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";"use client";var he=Object.create;var L=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var ve=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var Se=(e,n)=>{for(var o in n)L(e,o,{get:n[o],enumerable:!0})},U=(e,n,o,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let a of ve(n))!Te.call(e,a)&&a!==o&&L(e,a,{get:()=>n[a],enumerable:!(i=Pe(n,a))||i.enumerable});return e};var R=(e,n,o)=>(o=e!=null?he(Re(e)):{},U(n||!e||!e.__esModule?L(o,"default",{value:e,enumerable:!0}):o,e)),be=e=>U(L({},"__esModule",{value:!0}),e);var Qe={};Se(Qe,{COMMAND_ROW_STEP:()=>de,Command:()=>Ae,CommandCollection:()=>We,CommandContent:()=>Oe,CommandEmpty:()=>qe,CommandGroup:()=>Ve,CommandGroupLabel:()=>je,CommandInput:()=>Be,CommandItem:()=>_e,CommandList:()=>He,CommandTrigger:()=>Me});module.exports=be(Qe);var t=R(require("react")),ue=require("react-dom"),S=R(require("classnames")),z=require("cmdk"),k=require("radix-ui");var E=R(require("react"));var f=R(require("react")),ae=R(require("classnames")),N=require("radix-ui");function Z(e){switch(e){case"tomato":case"red":case"ruby":case"crimson":case"pink":case"plum":case"purple":case"violet":return"mauve";case"iris":case"indigo":case"blue":case"sky":case"cyan":return"slate";case"teal":case"jade":case"mint":case"green":return"sage";case"grass":case"lime":return"olive";case"yellow":case"amber":case"orange":case"brown":case"gold":case"bronze":return"sand";case"gray":return"gray"}}var G=R(require("react"));function J(e,n){if(n.includes(e))return e;let o=Number(e),i=n[0],a=1/0;for(let r=0;r<n.length;r++){let s=Math.abs(Number(n[r])-o);s<a&&(a=s,i=n[r])}return i}var A=G.createContext("2");A.displayName="ThemeSizeContext";function X(e,n){let o=G.useContext(A);return e!==void 0?e:J(o,n.values)}var j=R(require("react"));function F(e){let[n,o]=j.useState(e),[i,a]=j.useState(e);return Object.is(e,i)||(a(e),o(e)),[n,o]}var Y={asChild:{type:"boolean"}};var ee=["gray","gold","bronze","brown","yellow","amber","orange","tomato","red","ruby","crimson","pink","plum","purple","violet","iris","indigo","blue","cyan","teal","jade","green","grass","lime","mint","sky"],te=["auto","gray","mauve","slate","sage","olive","sand"];var oe=["none","small","medium","large","full"];var Fe=["inherit","light","dark"],ne=["sans","mono","serif"],ke=["1","2","3","4"],c={...Y,hasBackground:{type:"boolean",default:!0},appearance:{type:"enum",values:Fe,default:"inherit"},accentColor:{type:"enum",values:ee,default:"gray"},grayColor:{type:"enum",values:te,default:"gray"},radius:{type:"enum",values:oe,default:"full"},fontFamily:{type:"enum",values:ne,default:"sans"},headingFontFamily:{type:"enum",values:ne},size:{type:"enum",values:ke,default:"2"}};var g=()=>{},ct={appearance:c.appearance.default,accentColor:c.accentColor.default,grayColor:c.grayColor.default,resolvedGrayColor:c.grayColor.default,radius:c.radius.default,fontFamily:c.fontFamily.default,headingFontFamily:void 0,size:c.size.default,onAppearanceChange:g,onAccentColorChange:g,onGrayColorChange:g,onRadiusChange:g,onFontFamilyChange:g,onHeadingFontFamilyChange:g,onSizeChange:g},W=f.createContext(void 0);var _=f.forwardRef((e,n)=>{let o=f.useContext(W),i=N.Direction.useDirection();return o===void 0?f.createElement(N.Direction.Provider,{dir:i},f.createElement(re,{...e,ref:n})):f.createElement(q,{...e,ref:n})});_.displayName="Theme";var re=f.forwardRef((e,n)=>{let{appearance:o=c.appearance.default,accentColor:i=c.accentColor.default,grayColor:a=c.grayColor.default,radius:r=c.radius.default,fontFamily:s=c.fontFamily.default,headingFontFamily:u,size:m=c.size.default,hasBackground:p=c.hasBackground.default,...y}=e,[l,d]=F(o),[C,h]=F(i),[x,P]=F(a),[v,b]=F(r),[I,w]=F(s),[B,D]=F(u),[H,V]=F(m);return f.createElement(q,{...y,ref:n,isRoot:!0,hasBackground:p,appearance:l,accentColor:C,grayColor:x,radius:v,fontFamily:I,headingFontFamily:B,size:H,onAppearanceChange:d,onAccentColorChange:h,onGrayColorChange:P,onRadiusChange:b,onFontFamilyChange:w,onHeadingFontFamilyChange:D,onSizeChange:V})});re.displayName="ThemeRoot";var q=f.forwardRef((e,n)=>{let o=f.useContext(W),{asChild:i,isRoot:a,hasBackground:r,appearance:s=e.appearance??o?.appearance??c.appearance.default,accentColor:u=e.accentColor??o?.accentColor??c.accentColor.default,grayColor:m=e.grayColor??o?.resolvedGrayColor??c.grayColor.default,radius:p=e.radius??o?.radius??c.radius.default,fontFamily:y=e.fontFamily??o?.fontFamily??c.fontFamily.default,headingFontFamily:l=e.headingFontFamily??o?.headingFontFamily,size:d=e.size??o?.size??c.size.default,onAppearanceChange:C=o?.onAppearanceChange??g,onAccentColorChange:h=o?.onAccentColorChange??g,onGrayColorChange:x=o?.onGrayColorChange??g,onRadiusChange:P=o?.onRadiusChange??g,onFontFamilyChange:v=o?.onFontFamilyChange??g,onHeadingFontFamilyChange:b=o?.onHeadingFontFamilyChange??g,onSizeChange:I=o?.onSizeChange??g,...w}=e,B=i?N.Slot.Root:"div",D=m==="auto"?Z(u):m,H=e.appearance==="light"||e.appearance==="dark",V=r===void 0?a||H:r;return f.createElement(W.Provider,{value:f.useMemo(()=>({appearance:s,accentColor:u,grayColor:m,resolvedGrayColor:D,radius:p,fontFamily:y,headingFontFamily:l,size:d,onAppearanceChange:C,onAccentColorChange:h,onGrayColorChange:x,onRadiusChange:P,onFontFamilyChange:v,onHeadingFontFamilyChange:b,onSizeChange:I}),[s,u,m,D,p,y,l,d,C,h,x,P,v,b,I])},f.createElement(A.Provider,{value:d},f.createElement(B,{"data-is-root-theme":a?"true":"false","data-accent-color":u,"data-gray-color":D,"data-has-background":V?"true":"false","data-radius":p,"data-font-family":y,"data-heading-font-family":l,ref:n,...w,className:(0,ae.default)("kui-theme",{light:s==="light",dark:s==="dark"},w.className)})))});q.displayName="ThemeImpl";var ie=R(require("react")),se=ie.createContext(void 0);var T=R(require("react")),ze=T.createContext(null);function le({children:e}){return T.createElement(ze.Provider,{value:null},e)}var Q=E.forwardRef((e,n)=>E.createElement(se.Provider,{value:null},E.createElement(le,null,E.createElement(_,{...e,ref:n}))));Q.displayName="PortalTheme";var me=R(require("react")),M=0,$=null,Ee=e=>{};function De(){let e=new Set,n=(l,d)=>{let C=setTimeout(()=>{e.delete(C),l()},d);e.add(C)},o=()=>document.body.style.pointerEvents==="none",i=()=>{let l=!!document.querySelector('[role="dialog"][aria-modal="true"], [role="alertdialog"][aria-modal="true"]'),d=!!document.querySelector('[data-radix-popper-content-wrapper], [role="dialog"][data-state="open"], [role="alertdialog"][data-state="open"]');return l||d},a=()=>{o()&&!i()&&(Ee("[KookieUI] Cleaning stuck pointer-events: none from body"),document.body.style.pointerEvents="")},r=l=>{o()&&n(a,l)},s=l=>{let d=l.target;d&&!d.closest('[role="dialog"], [role="alertdialog"], [data-radix-popper-content-wrapper]')&&r(100)},u=l=>{l.key==="Escape"&&r(200)},m=()=>{r(50)};document.addEventListener("click",s,!0),document.addEventListener("keydown",u,!0),document.addEventListener("pointerup",m,!0),document.addEventListener("transitionend",m,!0),document.addEventListener("animationend",m,!0);let p=new MutationObserver(()=>{r(0)});p.observe(document.body,{childList:!0,attributes:!0,attributeFilter:["style"]});let y=setInterval(a,1e3);return r(100),()=>{clearInterval(y),e.forEach(clearTimeout),e.clear(),p.disconnect(),document.removeEventListener("click",s,!0),document.removeEventListener("keydown",u,!0),document.removeEventListener("pointerup",m,!0),document.removeEventListener("transitionend",m,!0),document.removeEventListener("animationend",m,!0)}}function ce(){me.useEffect(()=>{if(!(typeof document>"u"))return M+=1,M===1&&($=De()),()=>{M-=1,M===0&&($?.(),$=null)}},[])}var de={1:"2",2:"3",3:"4",4:"4"},Ne={values:["1","2","3","4"],default:"2"},O=t.createContext("2"),pe=t.createContext(()=>{}),fe=t.createContext([]),Ce=t.createContext(null),ye=t.createContext({query:"",filter:null,itemToString:String}),K=t.createContext(null);function Ie(e){if(typeof e=="string"||typeof e=="number")return String(e);if(e&&typeof e=="object"){let n=e;for(let o of["label","title","value","name"])if(typeof n[o]=="string")return n[o]}return""}var we=(e,n,o)=>o(e).toLowerCase().includes(n.trim().toLowerCase());function Le(e){return!!(e&&typeof e=="object"&&Array.isArray(e.items))}function Ge(e,n,o,i){if(o===null||n.trim()==="")return[...e];let a=[];for(let r of e)if(Le(r)){let s=r.items.filter(u=>o(u,n,i));s.length>0&&a.push({...r,items:s})}else o(r,n,i)&&a.push(r);return a}function Ae({size:e,items:n,open:o,defaultOpen:i,onOpenChange:a,children:r}){let s=X(e,Ne),[u,m]=t.useState(i??!1),p=o!==void 0,y=p?o:u,l=t.useCallback((C,h)=>{a?.(C,{reason:h}),p||m(C)},[a,p]),d=t.useCallback(()=>l(!1,"item-press"),[l]);return t.createElement(O.Provider,{value:s},t.createElement(fe.Provider,{value:n},t.createElement(Ce.Provider,{value:d},t.createElement(k.Dialog.Root,{open:y,onOpenChange:C=>l(C,"dismiss"),modal:!0},r))))}function Me({children:e,...n}){return t.createElement(k.Dialog.Trigger,{asChild:!0,...n},e)}function Oe({"aria-label":e,filter:n=we,itemToString:o=Ie,onQueryChange:i,container:a,children:r,className:s,style:u}){let m=t.useContext(O),[p,y]=t.useState(""),[l,d]=t.useState(null),C=t.useRef(i);t.useEffect(()=>{C.current=i}),t.useEffect(()=>()=>C.current?.(""),[]),ce();let h=t.useCallback(v=>{y(v),C.current?.(v)},[]),x=t.useMemo(()=>({query:p,filter:n,itemToString:o}),[p,n,o]),P=t.useMemo(()=>({seat:l,setSeat:d}),[l]);return t.createElement(k.Dialog.Portal,{container:a},t.createElement(Q,{asChild:!0},t.createElement(k.Dialog.Overlay,{className:"kui-BaseDialogOverlay kui-CommandOverlay"},t.createElement(k.Dialog.Content,{"aria-label":e,"aria-describedby":void 0,className:(0,S.default)("kui-CommandContent",`kui-r-size-${m}`,s),style:u,onCloseAutoFocus:()=>{document.body.style.pointerEvents=""}},t.createElement(k.Dialog.Title,{className:"kui-sr-only"},e),t.createElement(z.Command,{label:e,shouldFilter:!1,loop:!0,className:"kui-CommandRoot"},t.createElement(ye.Provider,{value:x},t.createElement(pe.Provider,{value:h},t.createElement(K.Provider,{value:P},r))))))))}function Be({leading:e,className:n,...o}){let i=t.useContext(O),a=t.useContext(pe),r=t.useRef(null);return t.createElement("div",{className:(0,S.default)("kui-CommandSearch",`kui-r-size-${i}`),onMouseDown:s=>{s.target!==r.current&&(s.preventDefault(),r.current?.focus())}},e?t.createElement("span",{className:"kui-CommandSearchSlot","aria-hidden":!0},e):null,t.createElement(z.Command.Input,{ref:r,autoFocus:!0,...o,onValueChange:a,className:(0,S.default)("kui-reset","kui-CommandInput",n)}))}function He({children:e,className:n}){let o=t.useContext(O),i=t.useContext(fe),{query:a,filter:r,itemToString:s}=t.useContext(ye),u=t.useContext(K),m=t.useMemo(()=>Ge(i,a,r,s),[i,a,r,s]);return t.createElement("div",{className:(0,S.default)("kui-BaseMenuContent","kui-variant-soft",`kui-r-size-${de[o]}`,"kui-CommandPanel",n)},t.createElement(z.Command.List,{className:(0,S.default)("kui-BaseMenuViewport","kui-CommandList")},m.map(p=>e(p)),t.createElement("div",{className:"kui-CommandSeat",ref:u?u.setSeat:void 0})))}var ge=t.createContext([]);function Ve({items:e,children:n,className:o}){return t.createElement(ge.Provider,{value:e},t.createElement(z.Command.Group,{className:(0,S.default)("kui-BaseMenuGroup","kui-CommandGroup",o)},n))}function je({children:e,className:n}){return t.createElement("div",{className:(0,S.default)("kui-BaseMenuLabel","kui-CommandGroupLabel",n),"aria-hidden":!0},e)}function We({children:e}){let n=t.useContext(ge);return t.createElement(t.Fragment,null,n.map(o=>e(o)))}function _e({value:e,onSelect:n,leading:o,trailing:i,tone:a,asChild:r,children:s,className:u,...m}){let p=t.useContext(Ce),y=t.useId(),l=t.useRef(null),d=t.useRef(!1),C=typeof e=="string"?e:y,h=()=>{n?.(),p?.()},x=()=>{if(d.current){d.current=!1,h();return}let b=l.current??document.querySelector(`[data-kui-command-item="${CSS.escape(y)}"]`);if(r&&b instanceof HTMLAnchorElement){b.click();return}h()},P=r&&t.isValidElement(s)?s:null,v=b=>t.createElement(t.Fragment,null,o?t.createElement("span",{className:"kui-CommandItemSlot","data-slot":"leading","aria-hidden":!0},o):null,t.createElement("span",{className:"kui-CommandItemLabel"},b),i?t.createElement("span",{className:"kui-CommandItemSlot","data-slot":"trailing"},i):null);return t.createElement(z.Command.Item,{...m,ref:l,"data-kui-command-item":y,value:C,asChild:!!P,onSelect:x,onClickCapture:()=>{d.current=!0},"data-tone":a,className:(0,S.default)("kui-reset","kui-BaseMenuItem","kui-CommandItem",u)},P?t.cloneElement(P,void 0,v(P.props.children)):v(s))}function qe({children:e,className:n}){let o=t.useContext(K);return o?.seat?(0,ue.createPortal)(t.createElement(z.Command.Empty,{className:(0,S.default)("kui-CommandEmpty",n)},e),o.seat):null}
|
|
3
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/command.tsx", "../../../src/components/_internal/portal-theme.tsx", "../../../src/components/theme.tsx", "../../../src/helpers/get-matching-gray-color.ts", "../../../src/hooks/theme-size.ts", "../../../src/helpers/theme-size.ts", "../../../src/hooks/use-prop-synced-state.ts", "../../../src/props/as-child.prop.ts", "../../../src/props/color.prop.ts", "../../../src/props/radius.prop.ts", "../../../src/components/theme.props.tsx", "../../../src/components/_internal/pane-band-context.ts", "../../../src/components/_internal/page-scope.tsx", "../../../src/hooks/use-body-pointer-events-cleanup.ts"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\n/**\n * Command, from v2 (2026-11-03): a command palette, one field over everything the app can do.\n *\n * It is a Dialog: it covers the app, traps focus, locks the page and leaves on Escape. Inside are\n * two panes in a column anchored to the top, the search bar and the results, so a result count\n * never moves the field. The keyboard model is the package's: a row is highlighted from the first\n * frame and after every keystroke, the arrows move it, Enter runs it, and running a row closes the\n * palette. What rows exist and what they do is the app's.\n *\n * Filtering keeps the order of `items`: a palette is used by muscle memory, so typing never\n * reorders it. Pass `filter={null}` to narrow and rank `items` yourself.\n *\n * Differs from v2 in its machine only: v1 builds on cmdk where v2 builds on Base UI's Autocomplete.\n * A row that should be a link takes `asChild` around the app's link, where v2 takes `render`.\n */\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport classNames from 'classnames';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\n\nimport { PortalTheme } from './_internal/portal-theme.js';\nimport { useBodyPointerEventsCleanup } from '../hooks/use-body-pointer-events-cleanup.js';\nimport { useThemeSize } from '../hooks/theme-size.js';\n\ntype Size = '1' | '2' | '3' | '4';\n\n/** The rows stand one step above the palette: it is the one object on screen, read from a distance. */\nconst ROW_STEP: Record<Size, Size> = { '1': '2', '2': '3', '3': '4', '4': '4' };\n\ntype CommandOpenChangeReason = 'item-press' | 'dismiss';\ntype CommandOpenChangeDetails = { reason: CommandOpenChangeReason };\n\ntype Filter = (item: unknown, query: string, itemToString: (item: unknown) => string) => boolean;\n\nconst SIZE_DEF = { values: ['1', '2', '3', '4'], default: '2' } as const;\n\nconst CommandSizeContext = React.createContext<Size>('2');\nconst CommandQueryContext = React.createContext<(query: string) => void>(() => {});\nconst CommandItemsContext = React.createContext<readonly unknown[]>([]);\nconst CommandCloseContext = React.createContext<(() => void) | null>(null);\nconst CommandListContext = React.createContext<{ query: string; filter: Filter | null; itemToString: (item: unknown) => string }>({\n query: '',\n filter: null,\n itemToString: String,\n});\nconst CommandSeatContext = React.createContext<{ seat: HTMLElement | null; setSeat: (node: HTMLElement | null) => void } | null>(null);\n\n/** What an item says, for the default filter: a string as itself, an object by its label, title or value. */\nfunction defaultItemToString(item: unknown): string {\n if (typeof item === 'string' || typeof item === 'number') return String(item);\n if (item && typeof item === 'object') {\n const record = item as Record<string, unknown>;\n for (const key of ['label', 'title', 'value', 'name']) {\n if (typeof record[key] === 'string') return record[key] as string;\n }\n }\n return '';\n}\n\nconst defaultFilter: Filter = (item, query, itemToString) => itemToString(item).toLowerCase().includes(query.trim().toLowerCase());\n\n/** A group is an item that carries its own `items`; it stays while any of them matches. */\nfunction isGroup(item: unknown): item is { items: readonly unknown[] } {\n return Boolean(item && typeof item === 'object' && Array.isArray((item as { items?: unknown }).items));\n}\n\nfunction narrow(items: readonly unknown[], query: string, filter: Filter | null, itemToString: (item: unknown) => string): unknown[] {\n if (filter === null || query.trim() === '') return [...items];\n const out: unknown[] = [];\n for (const item of items) {\n if (isGroup(item)) {\n const kept = item.items.filter((member) => filter(member, query, itemToString));\n if (kept.length > 0) out.push({ ...item, items: kept });\n } else if (filter(item, query, itemToString)) {\n out.push(item);\n }\n }\n return out;\n}\n\ninterface CommandProps {\n /**\n * The size step of the palette, from `\"1\"` to `\"4\"`. The rows are one step larger than the\n * app's controls at the same step, and the search text larger again. The default comes from\n * the theme.\n */\n size?: Size;\n /**\n * Every item the palette can show, before filtering. `CommandList` takes a function that turns\n * an item into a row. An item with its own `items` array is a group. Keep the array stable.\n */\n items: readonly unknown[];\n /** Whether the palette is open, for a controlled palette. Most are, because a key handler opens them. */\n open?: boolean;\n /** Whether the palette is open at the start, for an uncontrolled palette. */\n defaultOpen?: boolean;\n /** Called each time the palette opens or closes. `reason` is `\"item-press\"` when a row ran. */\n onOpenChange?: (open: boolean, details: CommandOpenChangeDetails) => void;\n /** A `CommandTrigger`, if there is one, and a `CommandContent`. */\n children: React.ReactNode;\n}\n\n/** A command palette: a field over a list of rows, in a dialog. Running a row closes it. */\nfunction Command({ size: sizeProp, items, open, defaultOpen, onOpenChange, children }: CommandProps) {\n const size = useThemeSize<Size>(sizeProp, SIZE_DEF);\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen ?? false);\n const controlled = open !== undefined;\n const isOpen = controlled ? open : internalOpen;\n\n const change = React.useCallback(\n (next: boolean, reason: CommandOpenChangeReason) => {\n onOpenChange?.(next, { reason });\n if (!controlled) setInternalOpen(next);\n },\n [onOpenChange, controlled],\n );\n const close = React.useCallback(() => change(false, 'item-press'), [change]);\n\n return (\n <CommandSizeContext.Provider value={size}>\n <CommandItemsContext.Provider value={items}>\n <CommandCloseContext.Provider value={close}>\n <DialogPrimitive.Root open={isOpen} onOpenChange={(next) => change(next, 'dismiss')} modal>\n {children}\n </DialogPrimitive.Root>\n </CommandCloseContext.Provider>\n </CommandItemsContext.Provider>\n </CommandSizeContext.Provider>\n );\n}\n\ninterface CommandTriggerProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger> {}\n\n/** Opens the palette. Most palettes open from a key handler instead, and render none. */\nfunction CommandTrigger({ children, ...props }: CommandTriggerProps) {\n return (\n <DialogPrimitive.Trigger asChild {...props}>\n {children}\n </DialogPrimitive.Trigger>\n );\n}\n\ninterface CommandContentProps {\n /** The palette's accessible name, such as \"Search the documentation\". */\n 'aria-label': string;\n /**\n * How an item matches the query. The default keeps an item whose text contains the query.\n * `null` turns filtering off, for an app that narrows and ranks `items` itself.\n */\n filter?: Filter | null;\n /** What an item says, for the filter. The default reads a string, or an object's label, title or value. */\n itemToString?: (item: unknown) => string;\n /** Called with the query on every keystroke, and with `\"\"` when the palette closes. */\n onQueryChange?: (query: string) => void;\n /** Keep the portal in a container of your own. */\n container?: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>['container'];\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** The palette: a column of the search bar over the results, anchored to the top of the window. */\nfunction CommandContent({ 'aria-label': label, filter = defaultFilter, itemToString = defaultItemToString, onQueryChange, container, children, className, style }: CommandContentProps) {\n const size = React.useContext(CommandSizeContext);\n const [query, setQuery] = React.useState('');\n const [seat, setSeat] = React.useState<HTMLElement | null>(null);\n const report = React.useRef(onQueryChange);\n React.useEffect(() => {\n report.current = onQueryChange;\n });\n\n // Closing clears the query, so the palette opens fresh.\n React.useEffect(() => () => report.current?.(''), []);\n useBodyPointerEventsCleanup();\n\n const changeQuery = React.useCallback((next: string) => {\n setQuery(next);\n report.current?.(next);\n }, []);\n const listValue = React.useMemo(() => ({ query, filter, itemToString }), [query, filter, itemToString]);\n const seatValue = React.useMemo(() => ({ seat, setSeat }), [seat]);\n\n return (\n <DialogPrimitive.Portal container={container}>\n <PortalTheme asChild>\n <DialogPrimitive.Overlay className=\"kui-BaseDialogOverlay kui-CommandOverlay\">\n <DialogPrimitive.Content\n aria-label={label}\n aria-describedby={undefined}\n className={classNames('kui-CommandContent', `kui-r-size-${size}`, className)}\n style={style}\n onCloseAutoFocus={() => {\n document.body.style.pointerEvents = '';\n }}\n >\n <DialogPrimitive.Title className=\"kui-sr-only\">{label}</DialogPrimitive.Title>\n {/* cmdk owns the highlight and Enter; this file owns the filter, so order never changes. */}\n <CommandPrimitive label={label} shouldFilter={false} loop className=\"kui-CommandRoot\">\n <CommandListContext.Provider value={listValue}>\n <CommandQueryContext.Provider value={changeQuery}>\n <CommandSeatContext.Provider value={seatValue}>{children}</CommandSeatContext.Provider>\n </CommandQueryContext.Provider>\n </CommandListContext.Provider>\n </CommandPrimitive>\n </DialogPrimitive.Content>\n </DialogPrimitive.Overlay>\n </PortalTheme>\n </DialogPrimitive.Portal>\n );\n}\n\ninterface CommandInputProps extends Omit<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>, 'value' | 'onValueChange' | 'aria-label'> {\n /** The field's accessible name. */\n 'aria-label': string;\n /** An icon before the text, such as a search glyph. */\n leading?: React.ReactNode;\n}\n\n/** The search bar, a pane of its own. The palette opens with the caret in it. */\nfunction CommandInput({ leading, className, ...props }: CommandInputProps) {\n const size = React.useContext(CommandSizeContext);\n const setQuery = React.useContext(CommandQueryContext);\n const inputRef = React.useRef<HTMLInputElement>(null);\n return (\n // A press anywhere on the bar puts the caret in the field.\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n className={classNames('kui-CommandSearch', `kui-r-size-${size}`)}\n onMouseDown={(event) => {\n if (event.target === inputRef.current) return;\n event.preventDefault();\n inputRef.current?.focus();\n }}\n >\n {leading ? (\n <span className=\"kui-CommandSearchSlot\" aria-hidden>\n {leading}\n </span>\n ) : null}\n {/* `autoFocus` focuses inside the tap's own task, which is what raises the keyboard on iOS. */}\n <CommandPrimitive.Input\n ref={inputRef}\n // The palette is the field: it opens to type into, the one place autofocus is the design.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n {...props}\n onValueChange={setQuery}\n className={classNames('kui-reset', 'kui-CommandInput', className)}\n />\n </div>\n );\n}\n\ninterface CommandListProps<T> {\n /** Turns an item into a row (a `CommandItem`) or a group (a `CommandGroup`). */\n children: (item: T) => React.ReactNode;\n className?: string;\n}\n\n/** The results, a pane of their own under the search bar. Its height follows the results. */\nfunction CommandList<T>({ children, className }: CommandListProps<T>) {\n const size = React.useContext(CommandSizeContext);\n const items = React.useContext(CommandItemsContext);\n const { query, filter, itemToString } = React.useContext(CommandListContext);\n const seat = React.useContext(CommandSeatContext);\n const shown = React.useMemo(() => narrow(items, query, filter, itemToString), [items, query, filter, itemToString]);\n return (\n <div className={classNames('kui-BaseMenuContent', 'kui-variant-soft', `kui-r-size-${ROW_STEP[size]}`, 'kui-CommandPanel', className)}>\n <CommandPrimitive.List className={classNames('kui-BaseMenuViewport', 'kui-CommandList')}>\n {shown.map((item) => children(item as T))}\n {/* The empty state's seat, inside this pane, so it is the same box as the results. */}\n <div className=\"kui-CommandSeat\" ref={seat ? seat.setSeat : undefined} />\n </CommandPrimitive.List>\n </div>\n );\n}\n\nconst CommandGroupItemsContext = React.createContext<readonly unknown[]>([]);\n\ninterface CommandGroupProps {\n /** The group's own items, after filtering. Render them with `CommandCollection`. */\n items: readonly unknown[];\n children: React.ReactNode;\n className?: string;\n}\n\n/** A labelled run of rows. A group with no matching rows is left out. */\nfunction CommandGroup({ items, children, className }: CommandGroupProps) {\n return (\n <CommandGroupItemsContext.Provider value={items}>\n <CommandPrimitive.Group className={classNames('kui-BaseMenuGroup', 'kui-CommandGroup', className)}>{children}</CommandPrimitive.Group>\n </CommandGroupItemsContext.Provider>\n );\n}\n\ninterface CommandGroupLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/** The group's name, above its rows. */\nfunction CommandGroupLabel({ children, className }: CommandGroupLabelProps) {\n return (\n <div className={classNames('kui-BaseMenuLabel', 'kui-CommandGroupLabel', className)} aria-hidden>\n {children}\n </div>\n );\n}\n\ninterface CommandCollectionProps<T> {\n /** Turns one of the group's items into a row. */\n children: (item: T) => React.ReactNode;\n}\n\n/** The group's rows. */\nfunction CommandCollection<T>({ children }: CommandCollectionProps<T>) {\n const items = React.useContext(CommandGroupItemsContext);\n return <>{items.map((item) => children(item as T))}</>;\n}\n\ninterface CommandItemProps extends Omit<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>, 'value' | 'onSelect'> {\n /** The item this row shows. A string is also the row's identity for the highlight. */\n value?: unknown;\n /** Runs when the row is pressed or Enter is pressed on it. The palette then closes. */\n onSelect?: () => void;\n /** An icon before the label. */\n leading?: React.ReactNode;\n /** Something after the label, such as a shortcut. */\n trailing?: React.ReactNode;\n /** Set when running the row destroys something. */\n tone?: 'destructive';\n /** Renders the child, such as your router's link, as the row. Enter follows the link. */\n asChild?: boolean;\n}\n\n/** One row. Running it, by press or by Enter, runs `onSelect` and closes the palette. */\nfunction CommandItem({ value, onSelect, leading, trailing, tone, asChild, children, className, ...props }: CommandItemProps) {\n const close = React.useContext(CommandCloseContext);\n const id = React.useId();\n const element = React.useRef<HTMLDivElement>(null);\n const clicked = React.useRef(false);\n const itemValue = typeof value === 'string' ? value : id;\n\n const run = () => {\n onSelect?.();\n close?.();\n };\n\n // cmdk runs a row from Enter without a click. A link has to be clicked to navigate, so Enter\n // clicks it, and the click comes back through here as the run.\n const handleSelect = () => {\n if (clicked.current) {\n clicked.current = false;\n run();\n return;\n }\n // Found by attribute, not by ref: an app's link component need not forward a ref.\n const node = element.current ?? document.querySelector(`[data-kui-command-item=\"${CSS.escape(id)}\"]`);\n if (asChild && node instanceof HTMLAnchorElement) {\n node.click();\n return;\n }\n run();\n };\n\n const child = asChild && React.isValidElement<{ children?: React.ReactNode }>(children) ? children : null;\n const inner = (label: React.ReactNode) => (\n <>\n {leading ? (\n <span className=\"kui-CommandItemSlot\" data-slot=\"leading\" aria-hidden>\n {leading}\n </span>\n ) : null}\n <span className=\"kui-CommandItemLabel\">{label}</span>\n {trailing ? (\n <span className=\"kui-CommandItemSlot\" data-slot=\"trailing\">\n {trailing}\n </span>\n ) : null}\n </>\n );\n\n return (\n <CommandPrimitive.Item\n {...props}\n ref={element}\n data-kui-command-item={id}\n value={itemValue}\n asChild={Boolean(child)}\n onSelect={handleSelect}\n onClickCapture={() => {\n clicked.current = true;\n }}\n data-tone={tone}\n className={classNames('kui-reset', 'kui-BaseMenuItem', 'kui-CommandItem', className)}\n >\n {child ? React.cloneElement(child, undefined, inner(child.props.children)) : inner(children)}\n </CommandPrimitive.Item>\n );\n}\n\ninterface CommandEmptyProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/** What the results pane says when nothing matches. It renders inside that pane. */\nfunction CommandEmpty({ children, className }: CommandEmptyProps) {\n const seat = React.useContext(CommandSeatContext);\n if (!seat?.seat) return null;\n return createPortal(<CommandPrimitive.Empty className={classNames('kui-CommandEmpty', className)}>{children}</CommandPrimitive.Empty>, seat.seat);\n}\n\nexport { Command, CommandTrigger, CommandContent, CommandInput, CommandList, CommandGroup, CommandGroupLabel, CommandCollection, CommandItem, CommandEmpty, ROW_STEP as COMMAND_ROW_STEP };\nexport type {\n CommandProps,\n CommandTriggerProps,\n CommandContentProps,\n CommandInputProps,\n CommandListProps,\n CommandGroupProps,\n CommandGroupLabelProps,\n CommandCollectionProps,\n CommandItemProps,\n CommandEmptyProps,\n CommandOpenChangeDetails,\n CommandOpenChangeReason,\n};\n", "import * as React from 'react';\n\nimport { Theme } from '../theme.js';\nimport { PaneBandSizeContext } from './pane-band-context.js';\nimport { NoPageScope } from './page-scope.js';\n\n/**\n * The Theme at the root of a portalled surface (Popover, Dialog, Sheet, menus, Tooltip). The\n * surface renders outside any Shell pane even though context flows into it, so a Toolbar in it\n * does not take the pane's band size, and a title in it does not take over the pane's page. A\n * `Theme asChild` an app nests in a pane keeps both.\n */\nconst PortalTheme = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<typeof Theme>>((props, forwardedRef) => (\n <PaneBandSizeContext.Provider value={null}>\n <NoPageScope>\n <Theme {...props} ref={forwardedRef} />\n </NoPageScope>\n </PaneBandSizeContext.Provider>\n));\nPortalTheme.displayName = 'PortalTheme';\n\nexport { PortalTheme };\n", "'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Direction, Slot } from 'radix-ui';\n\nimport { getMatchingGrayColor } from '../helpers/get-matching-gray-color.js';\nimport { ThemeSizeContext } from '../hooks/theme-size.js';\nimport { usePropSyncedState } from '../hooks/use-prop-synced-state.js';\nimport { themePropDefs } from './theme.props.js';\n\nimport type { ThemeOwnProps } from './theme.props.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\n\nconst noop = () => {};\n\ntype ThemeAppearance = (typeof themePropDefs.appearance.values)[number];\ntype ThemeAccentColor = (typeof themePropDefs.accentColor.values)[number];\ntype ThemeGrayColor = (typeof themePropDefs.grayColor.values)[number];\ntype ThemeRadius = (typeof themePropDefs.radius.values)[number];\ntype ThemeFontFamily = (typeof themePropDefs.fontFamily.values)[number];\ntype ThemeSize = (typeof themePropDefs.size.values)[number];\n// Headings follow the body font until something sets this, so `undefined` is a\n// meaningful value here rather than a missing one.\ntype ThemeHeadingFontFamily = ThemeFontFamily | undefined;\n\ninterface ThemeChangeHandlers {\n onAppearanceChange: (appearance: ThemeAppearance) => void;\n onAccentColorChange: (accentColor: ThemeAccentColor) => void;\n onGrayColorChange: (grayColor: ThemeGrayColor) => void;\n onRadiusChange: (radius: ThemeRadius) => void;\n onFontFamilyChange: (fontFamily: ThemeFontFamily) => void;\n onHeadingFontFamilyChange: (headingFontFamily: ThemeHeadingFontFamily) => void;\n onSizeChange: (size: ThemeSize) => void;\n}\n\ninterface ThemeContextValue extends ThemeChangeHandlers {\n appearance: ThemeAppearance;\n accentColor: ThemeAccentColor;\n grayColor: ThemeGrayColor;\n resolvedGrayColor: ThemeGrayColor;\n radius: ThemeRadius;\n fontFamily: ThemeFontFamily;\n headingFontFamily: ThemeHeadingFontFamily;\n size: ThemeSize;\n}\n// Default theme values used when components render outside a Theme provider\nconst defaultThemeContext: ThemeContextValue = {\n appearance: themePropDefs.appearance.default,\n accentColor: themePropDefs.accentColor.default,\n grayColor: themePropDefs.grayColor.default,\n resolvedGrayColor: themePropDefs.grayColor.default,\n radius: themePropDefs.radius.default,\n fontFamily: themePropDefs.fontFamily.default,\n headingFontFamily: undefined,\n size: themePropDefs.size.default,\n onAppearanceChange: noop,\n onAccentColorChange: noop,\n onGrayColorChange: noop,\n onRadiusChange: noop,\n onFontFamilyChange: noop,\n onHeadingFontFamilyChange: noop,\n onSizeChange: noop,\n};\n\nconst ThemeContext = React.createContext<ThemeContextValue | undefined>(undefined);\n\nfunction useThemeContext() {\n const context = React.useContext(ThemeContext);\n // Return default context if used outside Theme provider (e.g., during SSR)\n return context ?? defaultThemeContext;\n}\n\ninterface ThemeProps extends ThemeImplPublicProps {}\nconst Theme = React.forwardRef<ThemeImplElement, ThemeProps>((props, forwardedRef) => {\n const context = React.useContext(ThemeContext);\n // Direction is inherited: a Radix DirectionProvider above the Theme (for a right-to-left app)\n // wins, and left-to-right stays the default when there is none.\n const dir = Direction.useDirection();\n const isRoot = context === undefined;\n if (isRoot) {\n return (\n <Direction.Provider dir={dir}>\n <ThemeRoot {...props} ref={forwardedRef} />\n </Direction.Provider>\n );\n }\n return <ThemeImpl {...props} ref={forwardedRef} />;\n});\nTheme.displayName = 'Theme';\n\nconst ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>((props, forwardedRef) => {\n const {\n appearance: appearanceProp = themePropDefs.appearance.default,\n accentColor: accentColorProp = themePropDefs.accentColor.default,\n grayColor: grayColorProp = themePropDefs.grayColor.default,\n radius: radiusProp = themePropDefs.radius.default,\n fontFamily: fontFamilyProp = themePropDefs.fontFamily.default,\n headingFontFamily: headingFontFamilyProp,\n size: sizeProp = themePropDefs.size.default,\n hasBackground = themePropDefs.hasBackground.default,\n ...rootProps\n } = props;\n\n // Each of these follows its prop but stays independently settable, so\n // the context setters can change the theme at runtime. Syncing during render\n // rather than in an effect matters here: an effect would commit the old\n // theme first and re-render every consumer of the context a second time.\n const [appearance, setAppearance] = usePropSyncedState(appearanceProp);\n const [accentColor, setAccentColor] = usePropSyncedState(accentColorProp);\n const [grayColor, setGrayColor] = usePropSyncedState(grayColorProp);\n const [radius, setRadius] = usePropSyncedState(radiusProp);\n const [fontFamily, setFontFamily] = usePropSyncedState(fontFamilyProp);\n const [headingFontFamily, setHeadingFontFamily] = usePropSyncedState(headingFontFamilyProp);\n const [size, setSize] = usePropSyncedState(sizeProp);\n\n return (\n <ThemeImpl\n {...rootProps}\n ref={forwardedRef}\n isRoot\n hasBackground={hasBackground}\n //\n appearance={appearance}\n accentColor={accentColor}\n grayColor={grayColor}\n radius={radius}\n fontFamily={fontFamily}\n headingFontFamily={headingFontFamily}\n size={size}\n //\n onAppearanceChange={setAppearance}\n onAccentColorChange={setAccentColor}\n onGrayColorChange={setGrayColor}\n onRadiusChange={setRadius}\n onFontFamilyChange={setFontFamily}\n onHeadingFontFamilyChange={setHeadingFontFamily}\n onSizeChange={setSize}\n />\n );\n});\nThemeRoot.displayName = 'ThemeRoot';\n\ntype ThemeImplElement = React.ElementRef<'div'>;\ninterface ThemeImplProps extends ThemeImplPublicProps, ThemeImplPrivateProps {}\ninterface ThemeImplPublicProps extends ComponentPropsWithout<'div', RemovedProps | 'dir'>, ThemeOwnProps {}\ninterface ThemeImplPrivateProps extends Partial<ThemeChangeHandlers> {\n isRoot?: boolean;\n}\nconst ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, forwardedRef) => {\n const context = React.useContext(ThemeContext);\n const {\n asChild,\n isRoot,\n hasBackground: hasBackgroundProp,\n //\n appearance = props.appearance ?? context?.appearance ?? themePropDefs.appearance.default,\n accentColor = props.accentColor ?? context?.accentColor ?? themePropDefs.accentColor.default,\n grayColor = props.grayColor ?? context?.resolvedGrayColor ?? themePropDefs.grayColor.default,\n radius = props.radius ?? context?.radius ?? themePropDefs.radius.default,\n fontFamily = props.fontFamily ?? context?.fontFamily ?? themePropDefs.fontFamily.default,\n headingFontFamily = props.headingFontFamily ?? context?.headingFontFamily,\n size = props.size ?? context?.size ?? themePropDefs.size.default,\n // A nested Theme forwards changes to the one above it, so a switcher\n // inside a portal (Dialog, Popover, menus) still reaches the root.\n onAppearanceChange = context?.onAppearanceChange ?? noop,\n onAccentColorChange = context?.onAccentColorChange ?? noop,\n onGrayColorChange = context?.onGrayColorChange ?? noop,\n onRadiusChange = context?.onRadiusChange ?? noop,\n onFontFamilyChange = context?.onFontFamilyChange ?? noop,\n onHeadingFontFamilyChange = context?.onHeadingFontFamilyChange ?? noop,\n onSizeChange = context?.onSizeChange ?? noop,\n //\n ...themeProps\n } = props;\n const Comp = asChild ? Slot.Root : 'div';\n const resolvedGrayColor = grayColor === 'auto' ? getMatchingGrayColor(accentColor) : grayColor;\n const isExplicitAppearance = props.appearance === 'light' || props.appearance === 'dark';\n const hasBackground = hasBackgroundProp === undefined ? isRoot || isExplicitAppearance : hasBackgroundProp;\n\n return (\n <ThemeContext.Provider\n value={React.useMemo(\n () => ({\n appearance,\n accentColor,\n grayColor,\n resolvedGrayColor,\n radius,\n fontFamily,\n headingFontFamily,\n size,\n //\n onAppearanceChange,\n onAccentColorChange,\n onGrayColorChange,\n onRadiusChange,\n onFontFamilyChange,\n onHeadingFontFamilyChange,\n onSizeChange,\n }),\n [\n appearance,\n accentColor,\n grayColor,\n resolvedGrayColor,\n radius,\n fontFamily,\n headingFontFamily,\n size,\n //\n onAppearanceChange,\n onAccentColorChange,\n onGrayColorChange,\n onRadiusChange,\n onFontFamilyChange,\n onHeadingFontFamilyChange,\n onSizeChange,\n ],\n )}\n >\n {/* Size travels on its own context as a bare string, so the components\n that read it do not re-render when another theme value changes. */}\n <ThemeSizeContext.Provider value={size}>\n <Comp\n data-is-root-theme={isRoot ? 'true' : 'false'}\n data-accent-color={accentColor}\n data-gray-color={resolvedGrayColor}\n // for nested `Theme` background\n data-has-background={hasBackground ? 'true' : 'false'}\n data-radius={radius}\n data-font-family={fontFamily}\n data-heading-font-family={headingFontFamily}\n ref={forwardedRef}\n {...themeProps}\n className={classNames(\n 'kui-theme',\n {\n light: appearance === 'light',\n dark: appearance === 'dark',\n },\n themeProps.className,\n )}\n />\n </ThemeSizeContext.Provider>\n </ThemeContext.Provider>\n );\n});\nThemeImpl.displayName = 'ThemeImpl';\n\nexport { Theme, ThemeContext, useThemeContext };\nexport type { ThemeProps, ThemeContextValue };\n", "import type { accentColors } from '../props/color.prop.js';\n\ntype ThemeAccentColor = (typeof accentColors)[number];\n\nexport function getMatchingGrayColor(accentColor: ThemeAccentColor) {\n switch (accentColor) {\n case 'tomato':\n case 'red':\n case 'ruby':\n case 'crimson':\n case 'pink':\n case 'plum':\n case 'purple':\n case 'violet':\n return 'mauve';\n case 'iris':\n case 'indigo':\n case 'blue':\n case 'sky':\n case 'cyan':\n return 'slate';\n case 'teal':\n case 'jade':\n case 'mint':\n case 'green':\n return 'sage';\n case 'grass':\n case 'lime':\n return 'olive';\n case 'yellow':\n case 'amber':\n case 'orange':\n case 'brown':\n case 'gold':\n case 'bronze':\n return 'sand';\n case 'gray':\n return 'gray';\n }\n}\n", "'use client';\n\nimport * as React from 'react';\n\nimport { THEME_SIZE_DEFAULT, clampSize } from '../helpers/theme-size.js';\nimport type { ThemeSize } from '../helpers/theme-size.js';\n\n/**\n * The app-wide size index, provided by `Theme` beside `ThemeContext`.\n *\n * It is its own context, holding one string, so a component that only needs\n * the size does not re-render when the accent colour or appearance changes.\n */\nconst ThemeSizeContext = React.createContext<ThemeSize>(THEME_SIZE_DEFAULT);\nThemeSizeContext.displayName = 'ThemeSizeContext';\n\ninterface SizePropDef {\n values: readonly string[];\n default?: string;\n}\n\n/**\n * The size a component on the 1-4 index takes: what the caller said, else the\n * nearest Theme's size, mapped into the component's range.\n */\nfunction useThemeSize<V>(explicit: V | undefined, propDef: SizePropDef): V {\n const themeSize = React.useContext(ThemeSizeContext);\n if (explicit !== undefined) return explicit;\n // The clamped value is one of `propDef.values`, which is what `V` ranges over.\n return clampSize(themeSize, propDef.values) as V;\n}\n\n/**\n * Fills `size` from the nearest Theme when the caller left it unset, so the\n * result can go straight into `extractProps`. An explicit size, responsive\n * object included, wins.\n *\n * Returns the same props object when there is nothing to fill: when a size is\n * set, or when the theme size resolves to the prop def's own default (the\n * common case, a Theme with no size), so `extractProps` applies it as before.\n */\nfunction useThemeSizeProps<P extends { size?: unknown }>(props: P, propDef: SizePropDef): P {\n const themeSize = React.useContext(ThemeSizeContext);\n if (props.size !== undefined) return props;\n const size = clampSize(themeSize, propDef.values);\n if (size === propDef.default) return props;\n return { ...props, size };\n}\n\nexport { ThemeSizeContext, useThemeSize, useThemeSizeProps };\n", "/**\n * The pure half of the theme size: the type, the default and the clamp. Server-safe.\n *\n * The context and the hooks that read it live in `hooks/theme-size.ts`, a client module, so there\n * is one `ThemeSizeContext` and importing `/helpers` from a server component does not call\n * `createContext`.\n */\n\ntype ThemeSize = '1' | '2' | '3' | '4';\n\n/** The rest of the 1-4 index when no Theme states a size. */\nconst THEME_SIZE_DEFAULT: ThemeSize = '2';\n\n/**\n * Maps the theme size onto a component's own range: the value itself when the\n * component has it, otherwise the nearest end of the range (`4` on a 1-3 scale\n * is `3`, on a 1-2 scale it is `2`).\n */\nfunction clampSize(size: ThemeSize, values: readonly string[]): string {\n if (values.includes(size)) return size;\n const n = Number(size);\n let nearest = values[0];\n let distance = Infinity;\n for (let i = 0; i < values.length; i++) {\n const d = Math.abs(Number(values[i]) - n);\n if (d < distance) {\n distance = d;\n nearest = values[i];\n }\n }\n return nearest;\n}\n\nexport { THEME_SIZE_DEFAULT, clampSize };\nexport type { ThemeSize };\n", "import * as React from 'react';\n\n/**\n * State that tracks a prop but can also be set imperatively \u2014 the shape `Theme`\n * needs, where a prop sets the value and the context setters can change it at runtime.\n *\n * Adjusts state during render rather than syncing in a `useEffect`. An effect\n * would commit one render carrying the *old* value and schedule a second one,\n * which for a provider means every consumer renders twice and the browser can\n * paint the stale value in between.\n *\n * @see https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */\nexport function usePropSyncedState<T>(propValue: T) {\n const [value, setValue] = React.useState(propValue);\n const [previousPropValue, setPreviousPropValue] = React.useState(propValue);\n\n if (!Object.is(propValue, previousPropValue)) {\n setPreviousPropValue(propValue);\n setValue(propValue);\n }\n\n return [value, setValue] as const;\n}\n", "import type { PropDef } from './prop-def.js';\n\nconst asChildPropDef = {\n /**\n * Composes the component into its immediate child instead of rendering its own HTML element.\n * You\u2019ll have to provide a single React Element child.\n */\n asChild: {\n type: 'boolean',\n },\n} satisfies {\n asChild: PropDef<boolean>;\n};\n\nexport { asChildPropDef };\n", "import type { PropDef } from './prop-def.js';\n\n// prettier-ignore\nconst accentColors = ['gray', 'gold', 'bronze', 'brown', 'yellow', 'amber', 'orange', 'tomato', 'red', 'ruby', 'crimson', 'pink', 'plum', 'purple', 'violet', 'iris', 'indigo', 'blue', 'cyan', 'teal', 'jade', 'green', 'grass', 'lime', 'mint', 'sky'] as const;\n\nconst grayColors = ['auto', 'gray', 'mauve', 'slate', 'sage', 'olive', 'sand'] as const;\n\nconst colorPropDef = {\n color: {\n type: 'enum',\n values: accentColors,\n default: undefined as (typeof accentColors)[number] | undefined,\n },\n} satisfies {\n color: PropDef<(typeof accentColors)[number]>;\n};\n\n// 1. When used on components that compose Text, sets the color of the text to the current accent.\n// 2. Re-declares the accent role tokens (`--accent-ink`, `--accent-solid`, ...) that descendants read.\nconst accentColorPropDef = {\n color: {\n type: 'enum',\n values: accentColors,\n default: '' as (typeof accentColors)[number],\n },\n} satisfies {\n color: PropDef<(typeof accentColors)[number]>;\n};\n\n// For components whose colour comes from their content (Chip, Avatar, Code): they rest gray, and `color` picks a category when it means something.\nconst grayAccentColorPropDef = {\n color: {\n type: 'enum',\n values: accentColors,\n default: 'gray' as (typeof accentColors)[number],\n },\n} satisfies {\n color: PropDef<(typeof accentColors)[number]>;\n};\n\nexport {\n accentColorPropDef,\n grayAccentColorPropDef,\n colorPropDef,\n //\n accentColors,\n grayColors,\n};\n", "import type { PropDef } from './prop-def.js';\n\nconst radii = ['none', 'small', 'medium', 'large', 'full'] as const;\n\nconst radiusPropDef = {\n radius: {\n type: 'enum',\n values: radii,\n default: undefined,\n },\n} satisfies {\n radius: PropDef<(typeof radii)[number]>;\n};\n\nexport { radiusPropDef, radii };\n", "import { asChildPropDef } from '../props/as-child.prop.js';\nimport { accentColors, grayColors } from '../props/color.prop.js';\nimport { radii } from '../props/radius.prop.js';\n\nimport type { GetPropDefTypes, PropDef } from '../props/prop-def.js';\n\nconst appearances = ['inherit', 'light', 'dark'] as const;\nconst fontFamilies = ['sans', 'mono', 'serif'] as const;\nconst sizes = ['1', '2', '3', '4'] as const;\n\nconst themePropDefs = {\n ...asChildPropDef,\n /**\n * Whether to apply background color to the Theme element.\n *\n * Defaults to true for the root Theme and for Theme elements that\n * have an explicit light or dark appearance prop.\n */\n hasBackground: { type: 'boolean', default: true },\n /**\n * Sets the color scheme of the theme, typcially referred to as light and dark mode.\n *\n * @link\n * https://www.radix-ui.com/themes/docs/theme/dark-mode\n */\n appearance: { type: 'enum', values: appearances, default: 'inherit' },\n /**\n * Selects one of the accent color options to use in the Theme.\n *\n * @link\n * https://www.radix-ui.com/themes/docs/theme/color\n */\n accentColor: { type: 'enum', values: accentColors, default: 'gray' },\n /**\n * Selects one of the gray color options to use in the Theme.\n *\n * @link\n * https://www.radix-ui.com/themes/docs/theme/color\n */\n grayColor: { type: 'enum', values: grayColors, default: 'gray' },\n /**\n * Sets the default radius of the components.\n *\n * @link\n * https://www.radix-ui.com/themes/docs/theme/visual-style\n */\n radius: { type: 'enum', values: radii, default: 'full' },\n /**\n * Sets the font family used for body text in the theme.\n *\n * Headings follow this unless `headingFontFamily` (or the `--font-heading`\n * token) says otherwise.\n *\n * @default 'sans'\n */\n fontFamily: { type: 'enum', values: fontFamilies, default: 'sans' },\n /**\n * Sets the font family used for `Heading`, independently of body text.\n *\n * Deliberately has no default: when it is left unset no attribute is\n * emitted and `--font-heading` keeps following `--font-body`, so a\n * `--font-heading` override in your own CSS survives a `fontFamily` switch.\n */\n headingFontFamily: { type: 'enum', values: fontFamilies },\n /**\n * The app-wide size index. Every component on the 1-4 control and surface\n * scale that states no `size` of its own takes this one; an explicit\n * `size` always wins. Nested Themes override it for their subtree.\n *\n * @default '2'\n */\n size: { type: 'enum', values: sizes, default: '2' },\n} satisfies {\n hasBackground: PropDef<boolean>;\n appearance: PropDef<(typeof appearances)[number]>;\n accentColor: PropDef<(typeof accentColors)[number]>;\n grayColor: PropDef<(typeof grayColors)[number]>;\n radius: PropDef<(typeof radii)[number]>;\n fontFamily: PropDef<(typeof fontFamilies)[number]>;\n headingFontFamily: PropDef<(typeof fontFamilies)[number]>;\n size: PropDef<(typeof sizes)[number]>;\n};\n\ntype ThemeOwnProps = GetPropDefTypes<typeof themePropDefs & typeof asChildPropDef>;\n\nexport { themePropDefs };\nexport type { ThemeOwnProps };\n", "import * as React from 'react';\n\ntype BandSize = '1' | '2' | '3' | '4';\n\n/**\n * Set by `Shell.PaneHeader` and `Shell.PaneFooter` to their band size, and by `Shell.Scroll` to\n * null (a scrolling list has no band). `PortalTheme`, the root of every portalled surface\n * (Popover, Dialog, Sheet, menus), sets null too, so a Toolbar in one does not take the Shell's\n * step; a `Theme asChild` an app nests in a pane leaves it alone. `Shell.Root` clears it again.\n * Unset (`undefined`) everywhere else.\n *\n * Its own module so PortalTheme can reset it without bringing the Shell.\n */\nconst PaneBandSizeContext = React.createContext<BandSize | null | undefined>(undefined);\n\nexport { PaneBandSizeContext };\nexport type { BandSize };\n", "'use client';\n\nimport * as React from 'react';\n\n/**\n * What page is in a pane, and whether its title has scrolled away (from v2, 2026-11-03).\n *\n * A page's large title lives inside the scroller and the band that shows it again lives beside\n * it, so context, which only flows down, cannot carry it from one to the other. The store sits\n * at their common ancestor, the pane. Each pane provides its own, so two panes can each hold a\n * titled page; `Shell.Header` provides none, so a `Toolbar.Title` there always speaks for itself.\n * Outside a Shell there is no scope: a `Page` still draws its heading and a `Toolbar.Title` still\n * shows its own words.\n */\ntype PageStore = {\n /** The words of the page in this pane, or null while nothing has claimed it. */\n title: string | null;\n /** Every `Toolbar.Title` mirroring this pane's page, as elements: the collapse is written onto them. */\n mirrors: Set<HTMLElement>;\n /** Whether the page's own title has scrolled up behind the band. */\n collapsed: boolean;\n listeners: Set<() => void>;\n /** What a subscriber reads: a stable value between notifications. */\n version: number;\n};\n\nconst PageScopeContext = React.createContext<PageStore | null>(null);\n\nfunction notify(store: PageStore) {\n store.version += 1;\n for (const listener of store.listeners) listener();\n}\n\n/**\n * The collapse is an attribute write, not a render: only CSS reads it, and an observer sends it\n * twice per visit to a page.\n */\nfunction setPageCollapsed(store: PageStore, collapsed: boolean): void {\n if (store.collapsed === collapsed) return;\n store.collapsed = collapsed;\n for (const el of store.mirrors) {\n if (collapsed) el.setAttribute('data-collapsed', '');\n else el.removeAttribute('data-collapsed');\n }\n}\n\n/** Every pane renders one. It draws nothing. */\nfunction PageScope({ children }: { children: React.ReactNode }) {\n const store = React.useMemo<PageStore>(() => ({ title: null, mirrors: new Set(), collapsed: false, listeners: new Set(), version: 0 }), []);\n return <PageScopeContext.Provider value={store}>{children}</PageScopeContext.Provider>;\n}\n\n/** Cuts the scope off below a portal: a panel over a pane is not in it, so its title must not take the pane's band. */\nfunction NoPageScope({ children }: { children: React.ReactNode }) {\n return <PageScopeContext.Provider value={null}>{children}</PageScopeContext.Provider>;\n}\n\nfunction usePageScope(): PageStore | null {\n return React.useContext(PageScopeContext);\n}\n\n/** A `Page` claims the pane it is in, in an effect, so no subscriber's snapshot changes mid-render. */\nfunction useClaimPage(store: PageStore | null, title: string): void {\n React.useEffect(() => {\n if (!store) return;\n store.title = title;\n notify(store);\n return () => {\n if (store.title === title) {\n store.title = null;\n notify(store);\n }\n };\n }, [store, title]);\n}\n\n/** What a `Toolbar.Title` shows when it is given no words of its own. */\nfunction usePageTitle(store: PageStore | null): string | null {\n const subscribe = React.useCallback(\n (cb: () => void) => {\n if (!store) return () => {};\n store.listeners.add(cb);\n return () => {\n store.listeners.delete(cb);\n };\n },\n [store],\n );\n // The version is read so the subscription re-renders this consumer; the title itself is the value.\n React.useSyncExternalStore(\n subscribe,\n () => store?.version ?? 0,\n () => 0,\n );\n return store?.title ?? null;\n}\n\n/**\n * Registers a mirroring title's element, stamped with what the page is doing now: a title that\n * mounts after its page has scrolled arrives collapsed.\n */\nfunction usePageMirror(store: PageStore | null): React.RefCallback<HTMLElement> {\n const current = React.useRef<HTMLElement | null>(null);\n return React.useCallback(\n (el: HTMLElement | null) => {\n if (!store) return;\n if (current.current) store.mirrors.delete(current.current);\n current.current = el;\n if (!el) return;\n store.mirrors.add(el);\n if (store.collapsed) el.setAttribute('data-collapsed', '');\n else el.removeAttribute('data-collapsed');\n },\n [store],\n );\n}\n\nexport { PageScope, NoPageScope, usePageScope, useClaimPage, usePageTitle, usePageMirror, setPageCollapsed };\nexport type { PageStore };\n", "import * as React from 'react';\n\n// How many overlays currently use the hook. The listeners are shared: the first mount installs\n// them and the last unmount removes them, so closing one overlay never strips the fallback from\n// another that is still mounted.\nlet mountCount = 0;\nlet teardown: (() => void) | null = null;\n\nconst devLog = (message: string) => {\n if (process.env.NODE_ENV !== 'production') {\n console.log(message);\n }\n};\n\nfunction install(): () => void {\n // Deferred cleanups are tracked so teardown can cancel the ones still queued. A timer that\n // outlives the document reaches for `document.body` after it is gone; under jsdom that surfaces\n // as an unhandled ReferenceError attributed to whichever test happened to be running.\n const pending = new Set<ReturnType<typeof setTimeout>>();\n\n const defer = (fn: () => void, delay: number) => {\n const id = setTimeout(() => {\n pending.delete(id);\n fn();\n }, delay);\n pending.add(id);\n };\n\n const isStuck = () => document.body.style.pointerEvents === 'none';\n\n const hasOpenModal = (): boolean => {\n // Open dialogs and alert dialogs\n const hasDialogs = Boolean(\n document.querySelector('[role=\"dialog\"][aria-modal=\"true\"], [role=\"alertdialog\"][aria-modal=\"true\"]'),\n );\n\n // Any Radix overlay that is still mounted. Only overlays count: an open Accordion or\n // Collapsible also carries data-state=\"open\" and must not keep a stuck page blocked.\n const hasRadixOverlays = Boolean(\n document.querySelector(\n '[data-radix-popper-content-wrapper], [role=\"dialog\"][data-state=\"open\"], [role=\"alertdialog\"][data-state=\"open\"]',\n ),\n );\n\n return hasDialogs || hasRadixOverlays;\n };\n\n // Only clears pointer-events when no modal is open. Scroll-lock attributes belong to\n // react-remove-scroll and are never touched here.\n const safeCleanup = () => {\n if (isStuck() && !hasOpenModal()) {\n devLog('[KookieUI] Cleaning stuck pointer-events: none from body');\n document.body.style.pointerEvents = '';\n }\n };\n\n // Every trigger queues a check only while the body is actually blocked.\n const scheduleCleanup = (delay: number) => {\n if (isStuck()) defer(safeCleanup, delay);\n };\n\n const onDocumentClick = (event: Event) => {\n const target = event.target as Element;\n if (target && !target.closest('[role=\"dialog\"], [role=\"alertdialog\"], [data-radix-popper-content-wrapper]')) {\n scheduleCleanup(100);\n }\n };\n\n const onEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n scheduleCleanup(200);\n }\n };\n\n const onInteraction = () => {\n scheduleCleanup(50);\n };\n\n document.addEventListener('click', onDocumentClick, true);\n document.addEventListener('keydown', onEscapeKey, true);\n document.addEventListener('pointerup', onInteraction, true);\n document.addEventListener('transitionend', onInteraction, true);\n document.addEventListener('animationend', onInteraction, true);\n\n // Portals mount and unmount as direct children of body, and the stuck value lives in body's\n // style, so body's own children and style are all that need watching.\n const observer = new MutationObserver(() => {\n scheduleCleanup(0);\n });\n observer.observe(document.body, { childList: true, attributes: true, attributeFilter: ['style'] });\n\n // Fallback periodic cleanup\n const intervalId = setInterval(safeCleanup, 1000);\n\n // Initial cleanup\n scheduleCleanup(100);\n\n // Tear everything down together. The observer is the important one: it fires while React\n // unmounts the tree, so leaving it connected keeps queueing work against a document that is\n // about to go away.\n return () => {\n clearInterval(intervalId);\n\n pending.forEach(clearTimeout);\n pending.clear();\n\n observer.disconnect();\n\n document.removeEventListener('click', onDocumentClick, true);\n document.removeEventListener('keydown', onEscapeKey, true);\n document.removeEventListener('pointerup', onInteraction, true);\n document.removeEventListener('transitionend', onInteraction, true);\n document.removeEventListener('animationend', onInteraction, true);\n };\n}\n\n/**\n * Hook to cleanup stuck pointer-events: none on document.body\n *\n * This addresses an issue where react-remove-scroll (used by Radix UI Dialog)\n * sometimes fails to restore body pointer-events after dialog closes,\n * leaving the page unclickable. It never clears the value while a modal is open.\n */\nexport function useBodyPointerEventsCleanup() {\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n\n mountCount += 1;\n if (mountCount === 1) {\n teardown = install();\n }\n\n return () => {\n mountCount -= 1;\n if (mountCount === 0) {\n teardown?.();\n teardown = null;\n }\n };\n }, []);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["command_exports", "__export", "ROW_STEP", "Command", "CommandCollection", "CommandContent", "CommandEmpty", "CommandGroup", "CommandGroupLabel", "CommandInput", "CommandItem", "CommandList", "CommandTrigger", "__toCommonJS", "React", "import_react_dom", "import_classnames", "import_cmdk", "import_radix_ui", "React", "React", "import_classnames", "import_radix_ui", "getMatchingGrayColor", "accentColor", "React", "clampSize", "size", "values", "n", "nearest", "distance", "i", "d", "ThemeSizeContext", "useThemeSize", "explicit", "propDef", "themeSize", "clampSize", "React", "usePropSyncedState", "propValue", "value", "setValue", "previousPropValue", "setPreviousPropValue", "asChildPropDef", "accentColors", "grayColors", "radii", "appearances", "fontFamilies", "sizes", "themePropDefs", "asChildPropDef", "accentColors", "grayColors", "radii", "noop", "defaultThemeContext", "themePropDefs", "ThemeContext", "Theme", "props", "forwardedRef", "context", "ThemeContext", "dir", "ThemeRoot", "ThemeImpl", "appearanceProp", "themePropDefs", "accentColorProp", "grayColorProp", "radiusProp", "fontFamilyProp", "headingFontFamilyProp", "sizeProp", "hasBackground", "rootProps", "appearance", "setAppearance", "usePropSyncedState", "accentColor", "setAccentColor", "grayColor", "setGrayColor", "radius", "setRadius", "fontFamily", "setFontFamily", "headingFontFamily", "setHeadingFontFamily", "size", "setSize", "asChild", "isRoot", "hasBackgroundProp", "onAppearanceChange", "noop", "onAccentColorChange", "onGrayColorChange", "onRadiusChange", "onFontFamilyChange", "onHeadingFontFamilyChange", "onSizeChange", "themeProps", "Comp", "resolvedGrayColor", "getMatchingGrayColor", "isExplicitAppearance", "ThemeSizeContext", "classNames", "React", "PaneBandSizeContext", "React", "PageScopeContext", "NoPageScope", "children", "PageScopeContext", "PortalTheme", "props", "forwardedRef", "PaneBandSizeContext", "NoPageScope", "Theme", "React", "mountCount", "teardown", "devLog", "message", "install", "pending", "defer", "fn", "delay", "id", "isStuck", "hasOpenModal", "hasDialogs", "hasRadixOverlays", "safeCleanup", "scheduleCleanup", "onDocumentClick", "event", "target", "onEscapeKey", "onInteraction", "observer", "intervalId", "useBodyPointerEventsCleanup", "ROW_STEP", "SIZE_DEF", "CommandSizeContext", "CommandQueryContext", "CommandItemsContext", "CommandCloseContext", "CommandListContext", "CommandSeatContext", "defaultItemToString", "item", "record", "key", "defaultFilter", "query", "itemToString", "isGroup", "narrow", "items", "filter", "out", "kept", "member", "Command", "sizeProp", "open", "defaultOpen", "onOpenChange", "children", "size", "useThemeSize", "internalOpen", "setInternalOpen", "controlled", "isOpen", "change", "next", "reason", "close", "DialogPrimitive", "CommandTrigger", "props", "CommandContent", "label", "onQueryChange", "container", "className", "style", "setQuery", "seat", "setSeat", "report", "useBodyPointerEventsCleanup", "changeQuery", "listValue", "seatValue", "PortalTheme", "classNames", "CommandPrimitive", "CommandInput", "leading", "inputRef", "event", "CommandList", "shown", "CommandGroupItemsContext", "CommandGroup", "CommandGroupLabel", "CommandCollection", "CommandItem", "value", "onSelect", "trailing", "tone", "asChild", "id", "element", "clicked", "itemValue", "run", "handleSelect", "node", "child", "inner", "CommandEmpty"]
|
|
7
|
+
}
|
|
@@ -45,6 +45,7 @@ export { Theme, ThemeContext, type ThemeContextValue, type ThemeProps, useThemeC
|
|
|
45
45
|
export { Toggle, type ToggleProps } from './toggle.js';
|
|
46
46
|
export { Toolbar, ToolbarGroup, ToolbarButton, ToolbarSeparator, ToolbarTitle, ToolbarOverflow, ToolbarSlot, ToolbarFill, useToolbarOverflow, type ToolbarProps, type ToolbarGroupProps, type ToolbarButtonProps, type ToolbarSeparatorProps, type ToolbarTitleProps, type ToolbarOverflowProps, type ToolbarSlotProps, type ToolbarFillProps, } from './toolbar.js';
|
|
47
47
|
export { Page, type PageProps } from './page.js';
|
|
48
|
+
export { Command, CommandTrigger, CommandContent, CommandInput, CommandList, CommandGroup, CommandGroupLabel, CommandCollection, CommandItem, CommandEmpty, type CommandProps, type CommandTriggerProps, type CommandContentProps, type CommandInputProps, type CommandListProps, type CommandGroupProps, type CommandGroupLabelProps, type CommandCollectionProps, type CommandItemProps, type CommandEmptyProps, type CommandOpenChangeDetails, type CommandOpenChangeReason, } from './command.js';
|
|
48
49
|
export { Navigator, NavigatorOutlet, NavigatorBack, NavigatorTitle, NavigatorScreen, NavigatorLink, useNavigator, type NavigatorProps, type NavigatorBackProps, type NavigatorScreenProps, type NavigatorLinkProps, type NavigatorApi, } from './navigator.js';
|
|
49
50
|
export { Tooltip, TooltipProvider, type TooltipProps, type TooltipProviderProps } from './tooltip.js';
|
|
50
51
|
export { VirtualMenu, type VirtualMenuProps, type VirtualMenuItemProps, type VirtualMenuRenderItemProps } from './virtual-menu.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.tsx"],"names":[],"mappings":"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"}
|