@postxl/generators 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/frontend-core/frontend.generator.d.ts +0 -58
- package/dist/frontend-core/frontend.generator.js +6 -172
- package/dist/frontend-core/frontend.generator.js.map +1 -1
- package/dist/frontend-core/template/README.md +1 -1
- package/dist/frontend-core/template/src/components/admin/table-filter.tsx +1 -5
- package/dist/frontend-core/template/src/components/ui/color-mode-toggle/color-mode-toggle.tsx +10 -4
- package/dist/frontend-core/template/src/pages/dashboard/dashboard.page.tsx +2 -3
- package/dist/frontend-core/template/src/pages/error/default-error.page.tsx +1 -1
- package/dist/frontend-core/template/src/pages/error/not-found-error.page.tsx +1 -1
- package/dist/frontend-core/template/src/styles/styles.css +13 -1
- package/dist/frontend-core/template/tsconfig.json +2 -0
- package/dist/frontend-core/types/component.d.ts +1 -1
- package/dist/frontend-forms/generators/discriminated-union/fields.generator.js +4 -6
- package/dist/frontend-forms/generators/discriminated-union/fields.generator.js.map +1 -1
- package/dist/frontend-forms/generators/discriminated-union/inputs.generator.js +1 -1
- package/dist/frontend-forms/generators/discriminated-union/inputs.generator.js.map +1 -1
- package/dist/frontend-forms/generators/enum/inputs.generator.js +1 -1
- package/dist/frontend-forms/generators/enum/inputs.generator.js.map +1 -1
- package/dist/frontend-forms/generators/model/forms.generator.js +8 -12
- package/dist/frontend-forms/generators/model/forms.generator.js.map +1 -1
- package/dist/frontend-forms/generators/model/inputs.generator.js +2 -6
- package/dist/frontend-forms/generators/model/inputs.generator.js.map +1 -1
- package/dist/frontend-forms/template/src/components/ui/field/field.tsx +1 -4
- package/dist/frontend-tables/generators/model-table.generator.js +1 -5
- package/dist/frontend-tables/generators/model-table.generator.js.map +1 -1
- package/package.json +3 -2
- package/dist/frontend-core/template/src/components/ui/accordion/accordion.stories.tsx +0 -47
- package/dist/frontend-core/template/src/components/ui/accordion/accordion.tsx +0 -52
- package/dist/frontend-core/template/src/components/ui/admin-sidebar/admin-sidebar.tsx +0 -195
- package/dist/frontend-core/template/src/components/ui/alert/alert.stories.tsx +0 -61
- package/dist/frontend-core/template/src/components/ui/alert/alert.tsx +0 -45
- package/dist/frontend-core/template/src/components/ui/alert-dialog/alert-dialog.stories.tsx +0 -52
- package/dist/frontend-core/template/src/components/ui/alert-dialog/alert-dialog.tsx +0 -105
- package/dist/frontend-core/template/src/components/ui/avatar/avatar.stories.tsx +0 -30
- package/dist/frontend-core/template/src/components/ui/avatar/avatar.tsx +0 -39
- package/dist/frontend-core/template/src/components/ui/badge/badge.stories.tsx +0 -78
- package/dist/frontend-core/template/src/components/ui/badge/badge.tsx +0 -48
- package/dist/frontend-core/template/src/components/ui/breadcrumb/breadcrumb.stories.tsx +0 -67
- package/dist/frontend-core/template/src/components/ui/breadcrumb/breadcrumb.tsx +0 -85
- package/dist/frontend-core/template/src/components/ui/button/button.stories.tsx +0 -150
- package/dist/frontend-core/template/src/components/ui/button/button.tsx +0 -68
- package/dist/frontend-core/template/src/components/ui/calendar/calendar.stories.tsx +0 -160
- package/dist/frontend-core/template/src/components/ui/calendar/calendar.tsx +0 -293
- package/dist/frontend-core/template/src/components/ui/card/card.stories.tsx +0 -77
- package/dist/frontend-core/template/src/components/ui/card/card.tsx +0 -45
- package/dist/frontend-core/template/src/components/ui/card-hover/card-hover.stories.tsx +0 -29
- package/dist/frontend-core/template/src/components/ui/card-hover/card-hover.tsx +0 -28
- package/dist/frontend-core/template/src/components/ui/carousel/carousel.stories.tsx +0 -154
- package/dist/frontend-core/template/src/components/ui/carousel/carousel.tsx +0 -227
- package/dist/frontend-core/template/src/components/ui/checkbox/checkbox.stories.tsx +0 -106
- package/dist/frontend-core/template/src/components/ui/checkbox/checkbox.tsx +0 -88
- package/dist/frontend-core/template/src/components/ui/checkbox/shadcn-checkbox.stories.tsx +0 -90
- package/dist/frontend-core/template/src/components/ui/checkbox/shadcn-checkbox.tsx +0 -54
- package/dist/frontend-core/template/src/components/ui/collapse/collapse.stories.tsx +0 -52
- package/dist/frontend-core/template/src/components/ui/collapse/collapse.tsx +0 -9
- package/dist/frontend-core/template/src/components/ui/combobox/combobox.stories.tsx +0 -207
- package/dist/frontend-core/template/src/components/ui/combobox/combobox.tsx +0 -79
- package/dist/frontend-core/template/src/components/ui/command/command.stories.tsx +0 -186
- package/dist/frontend-core/template/src/components/ui/command/command.tsx +0 -165
- package/dist/frontend-core/template/src/components/ui/command-palette/command-palette.stories.tsx +0 -160
- package/dist/frontend-core/template/src/components/ui/command-palette/command-palette.tsx +0 -134
- package/dist/frontend-core/template/src/components/ui/content-frame/content-frame.stories.tsx +0 -198
- package/dist/frontend-core/template/src/components/ui/content-frame/content-frame.tsx +0 -100
- package/dist/frontend-core/template/src/components/ui/context-menu/context-menu.stories.tsx +0 -78
- package/dist/frontend-core/template/src/components/ui/context-menu/context-menu.tsx +0 -179
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/cell-variant-types.ts +0 -11
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/checkbox-cell.tsx +0 -116
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/date-cell.tsx +0 -157
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/gantt-cell.tsx +0 -82
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/long-text-cell.tsx +0 -180
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/multi-select-cell.tsx +0 -280
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/number-cell.tsx +0 -169
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/react-node-cell.tsx +0 -33
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/select-cell.tsx +0 -175
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/short-text-cell.tsx +0 -138
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/utils/gantt-timeline.tsx +0 -92
- package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/utils/gantt-timerange-picker.tsx +0 -330
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-cell-wrapper.tsx +0 -212
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-cell.tsx +0 -157
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-column-header.tsx +0 -340
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-context-menu.tsx +0 -271
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-row.tsx +0 -123
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-search.tsx +0 -211
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-types.ts +0 -159
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-utils.ts +0 -67
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-view-menu.tsx +0 -360
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid.stories.tsx +0 -780
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid.tsx +0 -217
- package/dist/frontend-core/template/src/components/ui/data-grid/hooks/use-callback-ref.ts +0 -22
- package/dist/frontend-core/template/src/components/ui/data-grid/hooks/use-data-grid.tsx +0 -1892
- package/dist/frontend-core/template/src/components/ui/data-grid/hooks/use-debounced-callback.ts +0 -19
- package/dist/frontend-core/template/src/components/ui/data-grid/styles.css +0 -3
- package/dist/frontend-core/template/src/components/ui/data-table/context-menu-simple.tsx +0 -141
- package/dist/frontend-core/template/src/components/ui/data-table/data-table.stories.tsx +0 -146
- package/dist/frontend-core/template/src/components/ui/data-table/data-table.tsx +0 -447
- package/dist/frontend-core/template/src/components/ui/data-table/renderers/country-array-cell-renderer.tsx +0 -77
- package/dist/frontend-core/template/src/components/ui/data-table/renderers/country-cell-renderer.tsx +0 -56
- package/dist/frontend-core/template/src/components/ui/data-table/renderers/favorite-cell-renderer.tsx +0 -68
- package/dist/frontend-core/template/src/components/ui/data-table/renderers/links-cell-renderer.tsx +0 -205
- package/dist/frontend-core/template/src/components/ui/data-table/utils/columns.ts +0 -351
- package/dist/frontend-core/template/src/components/ui/data-table/utils/data-table.utils.ts +0 -49
- package/dist/frontend-core/template/src/components/ui/date-picker/date-picker.stories.tsx +0 -149
- package/dist/frontend-core/template/src/components/ui/date-picker/date-picker.tsx +0 -30
- package/dist/frontend-core/template/src/components/ui/dialog/dialog.stories.tsx +0 -80
- package/dist/frontend-core/template/src/components/ui/dialog/dialog.tsx +0 -134
- package/dist/frontend-core/template/src/components/ui/drawer/drawer.stories.tsx +0 -104
- package/dist/frontend-core/template/src/components/ui/drawer/drawer.tsx +0 -87
- package/dist/frontend-core/template/src/components/ui/dropdown-menu/dropdown-menu.stories.tsx +0 -168
- package/dist/frontend-core/template/src/components/ui/dropdown-menu/dropdown-menu.tsx +0 -225
- package/dist/frontend-core/template/src/components/ui/input/input.stories.tsx +0 -141
- package/dist/frontend-core/template/src/components/ui/input/input.tsx +0 -47
- package/dist/frontend-core/template/src/components/ui/label/label.stories.tsx +0 -41
- package/dist/frontend-core/template/src/components/ui/label/label.tsx +0 -20
- package/dist/frontend-core/template/src/components/ui/loader/loader.stories.tsx +0 -45
- package/dist/frontend-core/template/src/components/ui/loader/loader.tsx +0 -17
- package/dist/frontend-core/template/src/components/ui/mark-value-renderer/mark-value-renderer.stories.tsx +0 -114
- package/dist/frontend-core/template/src/components/ui/mark-value-renderer/mark-value-renderer.tsx +0 -48
- package/dist/frontend-core/template/src/components/ui/menubar/menu.stories.tsx +0 -134
- package/dist/frontend-core/template/src/components/ui/menubar/menubar.tsx +0 -208
- package/dist/frontend-core/template/src/components/ui/modal/modal.stories.tsx +0 -297
- package/dist/frontend-core/template/src/components/ui/modal/modal.tsx +0 -80
- package/dist/frontend-core/template/src/components/ui/navigation-menu/navigation-menu.stories.tsx +0 -213
- package/dist/frontend-core/template/src/components/ui/navigation-menu/navigation-menu.tsx +0 -142
- package/dist/frontend-core/template/src/components/ui/pagination/pagination.stories.tsx +0 -49
- package/dist/frontend-core/template/src/components/ui/pagination/pagination.tsx +0 -84
- package/dist/frontend-core/template/src/components/ui/popover/popover.stories.tsx +0 -82
- package/dist/frontend-core/template/src/components/ui/popover/popover.tsx +0 -55
- package/dist/frontend-core/template/src/components/ui/progress/progress.stories.tsx +0 -80
- package/dist/frontend-core/template/src/components/ui/progress/progress.tsx +0 -17
- package/dist/frontend-core/template/src/components/ui/radio-group/radio-group.stories.tsx +0 -154
- package/dist/frontend-core/template/src/components/ui/radio-group/radio-group.tsx +0 -68
- package/dist/frontend-core/template/src/components/ui/resizable/resizable.stories.tsx +0 -73
- package/dist/frontend-core/template/src/components/ui/resizable/resizeable.tsx +0 -38
- package/dist/frontend-core/template/src/components/ui/scroll-area/scroll-area.stories.tsx +0 -55
- package/dist/frontend-core/template/src/components/ui/scroll-area/scroll-area.tsx +0 -39
- package/dist/frontend-core/template/src/components/ui/select/select.stories.tsx +0 -297
- package/dist/frontend-core/template/src/components/ui/select/select.tsx +0 -227
- package/dist/frontend-core/template/src/components/ui/separator/separator.tsx +0 -21
- package/dist/frontend-core/template/src/components/ui/separator/seperator.stories.tsx +0 -25
- package/dist/frontend-core/template/src/components/ui/sheet/sheet.stories.tsx +0 -45
- package/dist/frontend-core/template/src/components/ui/sheet/sheet.tsx +0 -107
- package/dist/frontend-core/template/src/components/ui/skeleton/skeleton.stories.tsx +0 -26
- package/dist/frontend-core/template/src/components/ui/skeleton/skeleton.tsx +0 -7
- package/dist/frontend-core/template/src/components/ui/slider/slider.stories.tsx +0 -101
- package/dist/frontend-core/template/src/components/ui/slider/slider.tsx +0 -98
- package/dist/frontend-core/template/src/components/ui/spinner/spinner.stories.tsx +0 -19
- package/dist/frontend-core/template/src/components/ui/spinner/spinner.tsx +0 -21
- package/dist/frontend-core/template/src/components/ui/switch/switch.stories.tsx +0 -33
- package/dist/frontend-core/template/src/components/ui/switch/switch.tsx +0 -28
- package/dist/frontend-core/template/src/components/ui/tabs/tabs.stories.tsx +0 -215
- package/dist/frontend-core/template/src/components/ui/tabs/tabs.tsx +0 -70
- package/dist/frontend-core/template/src/components/ui/textarea/textarea.stories.tsx +0 -138
- package/dist/frontend-core/template/src/components/ui/textarea/textarea.tsx +0 -40
- package/dist/frontend-core/template/src/components/ui/toast/toast.mdx +0 -31
- package/dist/frontend-core/template/src/components/ui/toast/toast.stories.tsx +0 -89
- package/dist/frontend-core/template/src/components/ui/toggle/toggle.stories.tsx +0 -65
- package/dist/frontend-core/template/src/components/ui/toggle/toggle.tsx +0 -38
- package/dist/frontend-core/template/src/components/ui/toggle-group/toggle-group.stories.tsx +0 -85
- package/dist/frontend-core/template/src/components/ui/toggle-group/toggle-group.tsx +0 -54
- package/dist/frontend-core/template/src/components/ui/tooltip/tooltip.stories.tsx +0 -29
- package/dist/frontend-core/template/src/components/ui/tooltip/tooltip.tsx +0 -29
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import type { StoryObj } from '@storybook/react-vite'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
Command,
|
|
5
|
-
CommandEmpty,
|
|
6
|
-
CommandInput,
|
|
7
|
-
CommandItem,
|
|
8
|
-
CommandList,
|
|
9
|
-
CommandGroup,
|
|
10
|
-
CommandSeparator,
|
|
11
|
-
CommandShortcut,
|
|
12
|
-
CommandInputProps,
|
|
13
|
-
} from './command'
|
|
14
|
-
import { expect, userEvent, waitFor, screen } from 'storybook/test'
|
|
15
|
-
import { useState } from 'storybook/preview-api'
|
|
16
|
-
|
|
17
|
-
const CommandWithInput = ({
|
|
18
|
-
variant: inputVariant,
|
|
19
|
-
inputSize,
|
|
20
|
-
showContent = true,
|
|
21
|
-
searchValue,
|
|
22
|
-
setSearchValue,
|
|
23
|
-
placeholder,
|
|
24
|
-
...rest
|
|
25
|
-
}: CommandProps & { showContent?: boolean } & { searchValue?: string } & {
|
|
26
|
-
setSearchValue?: (val: string) => void
|
|
27
|
-
}) => (
|
|
28
|
-
<Command {...rest} className="w-[250px] border">
|
|
29
|
-
<CommandInput
|
|
30
|
-
placeholder={placeholder}
|
|
31
|
-
variant={inputVariant}
|
|
32
|
-
inputSize={inputSize}
|
|
33
|
-
value={searchValue}
|
|
34
|
-
onValueChange={(val) => {
|
|
35
|
-
setSearchValue?.(val)
|
|
36
|
-
}}
|
|
37
|
-
/>
|
|
38
|
-
{showContent && (
|
|
39
|
-
<CommandList>
|
|
40
|
-
<CommandEmpty>No results found.</CommandEmpty>
|
|
41
|
-
<CommandGroup heading="Category 1">
|
|
42
|
-
<CommandItem>
|
|
43
|
-
<span>Item</span>
|
|
44
|
-
</CommandItem>
|
|
45
|
-
<CommandItem disabled>
|
|
46
|
-
<span>Disabled item</span>
|
|
47
|
-
</CommandItem>
|
|
48
|
-
</CommandGroup>
|
|
49
|
-
<CommandSeparator />
|
|
50
|
-
<CommandGroup heading="Category 2">
|
|
51
|
-
<CommandItem>
|
|
52
|
-
<span>With shortcut</span>
|
|
53
|
-
<CommandShortcut>⌘P (only visually)</CommandShortcut>
|
|
54
|
-
</CommandItem>
|
|
55
|
-
</CommandGroup>
|
|
56
|
-
</CommandList>
|
|
57
|
-
)}
|
|
58
|
-
</Command>
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
const meta = {
|
|
62
|
-
title: 'Command',
|
|
63
|
-
component: CommandWithInput,
|
|
64
|
-
tags: ['autodocs'],
|
|
65
|
-
parameters: {
|
|
66
|
-
layout: 'centered',
|
|
67
|
-
},
|
|
68
|
-
argTypes: {
|
|
69
|
-
inputVariant: {
|
|
70
|
-
control: 'select',
|
|
71
|
-
options: ['default', 'borderless'],
|
|
72
|
-
},
|
|
73
|
-
inputSize: {
|
|
74
|
-
control: 'select',
|
|
75
|
-
options: ['md', 'sm', 'lg'],
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
}
|
|
79
|
-
export default meta
|
|
80
|
-
|
|
81
|
-
interface CommandStoryArgs {
|
|
82
|
-
inputVariant?: 'default' | 'borderless'
|
|
83
|
-
inputSize?: 'md' | 'sm' | 'lg'
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
type Story = StoryObj<CommandStoryArgs>
|
|
87
|
-
|
|
88
|
-
type CommandProps = CommandInputProps &
|
|
89
|
-
React.ComponentProps<typeof Command> & {
|
|
90
|
-
inputVariant?: 'default' | 'borderless'
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export const Default: Story = {
|
|
94
|
-
render: (args) => (
|
|
95
|
-
<CommandWithInput
|
|
96
|
-
variant={args.inputVariant}
|
|
97
|
-
inputSize={args.inputSize}
|
|
98
|
-
placeholder="Command with border and w-[250px]"
|
|
99
|
-
/>
|
|
100
|
-
),
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export const InputVariants: Story = {
|
|
104
|
-
render: () => (
|
|
105
|
-
<div className="flex flex-wrap gap-4">
|
|
106
|
-
<CommandWithInput variant="default" inputSize="md" placeholder="Command with border and w-[250px]" />
|
|
107
|
-
<CommandWithInput variant="borderless" inputSize="md" placeholder="Command with border and w-[250px]" />
|
|
108
|
-
</div>
|
|
109
|
-
),
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export const InputSizes: Story = {
|
|
113
|
-
render: () => (
|
|
114
|
-
<div className="flex flex-wrap gap-4 items-center">
|
|
115
|
-
<CommandWithInput
|
|
116
|
-
variant="borderless"
|
|
117
|
-
inputSize="sm"
|
|
118
|
-
showContent={false}
|
|
119
|
-
placeholder="Command with border and w-[250px]"
|
|
120
|
-
/>
|
|
121
|
-
<CommandWithInput
|
|
122
|
-
variant="borderless"
|
|
123
|
-
inputSize="md"
|
|
124
|
-
showContent={false}
|
|
125
|
-
placeholder="Command with border and w-[250px]"
|
|
126
|
-
/>
|
|
127
|
-
<CommandWithInput
|
|
128
|
-
variant="borderless"
|
|
129
|
-
inputSize="lg"
|
|
130
|
-
showContent={false}
|
|
131
|
-
placeholder="Command with border and w-[250px]"
|
|
132
|
-
/>
|
|
133
|
-
</div>
|
|
134
|
-
),
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export const InteractiveExample: Story = {
|
|
138
|
-
render: () => {
|
|
139
|
-
const [open, setOpen] = useState(false)
|
|
140
|
-
const [searchValue, setSearchValue] = useState('')
|
|
141
|
-
return (
|
|
142
|
-
<CommandWithInput
|
|
143
|
-
variant={open ? 'default' : 'borderless'}
|
|
144
|
-
inputSize="md"
|
|
145
|
-
placeholder="Type a command or search..."
|
|
146
|
-
searchValue={searchValue}
|
|
147
|
-
setSearchValue={(val) => {
|
|
148
|
-
setSearchValue(val)
|
|
149
|
-
}}
|
|
150
|
-
showContent={open}
|
|
151
|
-
onBlur={() => {
|
|
152
|
-
setOpen(false)
|
|
153
|
-
setSearchValue('')
|
|
154
|
-
}}
|
|
155
|
-
onFocus={() => setOpen(true)}
|
|
156
|
-
/>
|
|
157
|
-
)
|
|
158
|
-
},
|
|
159
|
-
play: async () => {
|
|
160
|
-
const input = screen.getByPlaceholderText('Type a command or search...')
|
|
161
|
-
|
|
162
|
-
// 1. Dropdown should be closed initially
|
|
163
|
-
await expect(screen.queryByText('Category 1')).toBeNull()
|
|
164
|
-
// 2. Focus input, dropdown opens
|
|
165
|
-
await userEvent.click(input)
|
|
166
|
-
// await expect(await screen.findByText('Category 1')).toBeVisible()
|
|
167
|
-
// 3. Type to filter items
|
|
168
|
-
await userEvent.type(input, 'Item')
|
|
169
|
-
// await expect(await screen.findByText('Item')).toBeVisible()
|
|
170
|
-
await expect(screen.queryByText('With shortcut')).toBeNull()
|
|
171
|
-
// 4. Clear input, all items visible again
|
|
172
|
-
await userEvent.clear(input)
|
|
173
|
-
// await expect(await screen.findByText('Category 1')).toBeVisible()
|
|
174
|
-
// await expect(await screen.findByText('With shortcut')).toBeVisible()
|
|
175
|
-
// 5. Blur input, dropdown closes
|
|
176
|
-
await userEvent.tab()
|
|
177
|
-
await waitFor(() => {
|
|
178
|
-
const el = screen.queryByText('Category 1')
|
|
179
|
-
expect(!el || el.getAttribute('aria-hidden') === 'true').toBe(true)
|
|
180
|
-
})
|
|
181
|
-
// 6. check that value is reset correctly
|
|
182
|
-
const inputField = screen.getByPlaceholderText('Type a command or search...')
|
|
183
|
-
await expect(inputField).toHaveValue('')
|
|
184
|
-
await expect(inputField).not.toHaveFocus()
|
|
185
|
-
},
|
|
186
|
-
}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import { MagnifyingGlassIcon } from '@radix-ui/react-icons'
|
|
2
|
-
|
|
3
|
-
import { cva, type VariantProps } from 'class-variance-authority'
|
|
4
|
-
import { Command as CommandPrimitive } from 'cmdk'
|
|
5
|
-
import React from 'react'
|
|
6
|
-
|
|
7
|
-
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@components/ui/dialog/dialog'
|
|
8
|
-
import { cn } from '@lib/utils'
|
|
9
|
-
|
|
10
|
-
function Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {
|
|
11
|
-
return (
|
|
12
|
-
<CommandPrimitive
|
|
13
|
-
data-slot="command"
|
|
14
|
-
className={cn(
|
|
15
|
-
'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',
|
|
16
|
-
className,
|
|
17
|
-
)}
|
|
18
|
-
{...props}
|
|
19
|
-
/>
|
|
20
|
-
)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function CommandDialog({
|
|
24
|
-
title = 'Command Palette',
|
|
25
|
-
description = 'Search for a command to run...',
|
|
26
|
-
children,
|
|
27
|
-
className,
|
|
28
|
-
showCloseButton = true,
|
|
29
|
-
...props
|
|
30
|
-
}: React.ComponentProps<typeof Dialog> & {
|
|
31
|
-
title?: string
|
|
32
|
-
description?: string
|
|
33
|
-
className?: string
|
|
34
|
-
showCloseButton?: boolean
|
|
35
|
-
}) {
|
|
36
|
-
return (
|
|
37
|
-
<Dialog {...props}>
|
|
38
|
-
<DialogHeader className="sr-only">
|
|
39
|
-
<DialogTitle>{title}</DialogTitle>
|
|
40
|
-
<DialogDescription>{description}</DialogDescription>
|
|
41
|
-
</DialogHeader>
|
|
42
|
-
<DialogContent className={cn('overflow-hidden p-0', className)} showCloseButton={showCloseButton}>
|
|
43
|
-
<Command className="[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
|
|
44
|
-
{children}
|
|
45
|
-
</Command>
|
|
46
|
-
</DialogContent>
|
|
47
|
-
</Dialog>
|
|
48
|
-
)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const commandInputVariants = cva('', {
|
|
52
|
-
variants: {
|
|
53
|
-
variant: { default: '', borderless: 'border-none' },
|
|
54
|
-
inputSize: {
|
|
55
|
-
sm: 'h-7.5 py-2',
|
|
56
|
-
md: 'h-9 py-3',
|
|
57
|
-
lg: 'h-12 py-4',
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
defaultVariants: { variant: 'default', inputSize: 'md' },
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
export type CommandInputProps = Omit<React.ComponentProps<typeof CommandPrimitive.Input>, 'size'> &
|
|
64
|
-
VariantProps<typeof commandInputVariants> & {
|
|
65
|
-
wrapperClassName?: string
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export const CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(
|
|
69
|
-
({ className, wrapperClassName, variant, inputSize, ...props }, ref) => {
|
|
70
|
-
return (
|
|
71
|
-
<div
|
|
72
|
-
data-slot="command-input-wrapper"
|
|
73
|
-
className={cn(
|
|
74
|
-
'flex items-center gap-2 border-b px-3',
|
|
75
|
-
commandInputVariants({ variant, inputSize }),
|
|
76
|
-
wrapperClassName,
|
|
77
|
-
)}
|
|
78
|
-
>
|
|
79
|
-
<MagnifyingGlassIcon className="size-4 shrink-0 opacity-50" />
|
|
80
|
-
<CommandPrimitive.Input
|
|
81
|
-
ref={ref}
|
|
82
|
-
data-slot="command-input"
|
|
83
|
-
className={cn(
|
|
84
|
-
'placeholder:text-muted-foreground flex w-full rounded bg-transparent text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',
|
|
85
|
-
className,
|
|
86
|
-
)}
|
|
87
|
-
{...props}
|
|
88
|
-
/>
|
|
89
|
-
</div>
|
|
90
|
-
)
|
|
91
|
-
},
|
|
92
|
-
)
|
|
93
|
-
CommandInput.displayName = 'CommandInput'
|
|
94
|
-
|
|
95
|
-
function CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {
|
|
96
|
-
return (
|
|
97
|
-
<CommandPrimitive.List
|
|
98
|
-
data-slot="command-list"
|
|
99
|
-
className={cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', className)}
|
|
100
|
-
{...props}
|
|
101
|
-
/>
|
|
102
|
-
)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function CommandEmpty({ ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {
|
|
106
|
-
return <CommandPrimitive.Empty data-slot="command-empty" className="py-6 text-center text-sm" {...props} />
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {
|
|
110
|
-
return (
|
|
111
|
-
<CommandPrimitive.Group
|
|
112
|
-
data-slot="command-group"
|
|
113
|
-
className={cn(
|
|
114
|
-
'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',
|
|
115
|
-
className,
|
|
116
|
-
)}
|
|
117
|
-
{...props}
|
|
118
|
-
/>
|
|
119
|
-
)
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {
|
|
123
|
-
return (
|
|
124
|
-
<CommandPrimitive.Separator
|
|
125
|
-
data-slot="command-separator"
|
|
126
|
-
className={cn('bg-border -mx-1 h-px', className)}
|
|
127
|
-
{...props}
|
|
128
|
-
/>
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) {
|
|
133
|
-
return (
|
|
134
|
-
<CommandPrimitive.Item
|
|
135
|
-
data-slot="command-item"
|
|
136
|
-
className={cn(
|
|
137
|
-
"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
138
|
-
className,
|
|
139
|
-
)}
|
|
140
|
-
{...props}
|
|
141
|
-
/>
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {
|
|
146
|
-
return (
|
|
147
|
-
<span
|
|
148
|
-
data-slot="command-shortcut"
|
|
149
|
-
className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}
|
|
150
|
-
{...props}
|
|
151
|
-
/>
|
|
152
|
-
)
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export {
|
|
156
|
-
Command,
|
|
157
|
-
CommandDialog,
|
|
158
|
-
commandInputVariants,
|
|
159
|
-
CommandList,
|
|
160
|
-
CommandEmpty,
|
|
161
|
-
CommandGroup,
|
|
162
|
-
CommandItem,
|
|
163
|
-
CommandShortcut,
|
|
164
|
-
CommandSeparator,
|
|
165
|
-
}
|
package/dist/frontend-core/template/src/components/ui/command-palette/command-palette.stories.tsx
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react-vite'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
CommandPalette,
|
|
5
|
-
CommandPaletteEmpty,
|
|
6
|
-
CommandPaletteDialog,
|
|
7
|
-
CommandPaletteGroup,
|
|
8
|
-
CommandPaletteInput,
|
|
9
|
-
CommandPaletteItem,
|
|
10
|
-
CommandPaletteList,
|
|
11
|
-
CommandPaletteSeparator,
|
|
12
|
-
CommandPaletteShortcut,
|
|
13
|
-
} from './command-palette'
|
|
14
|
-
import { CalendarIcon, EnvelopeClosedIcon, FaceIcon, GearIcon, PersonIcon, RocketIcon } from '@radix-ui/react-icons'
|
|
15
|
-
import { useEffect, useState } from 'react'
|
|
16
|
-
|
|
17
|
-
const meta = {
|
|
18
|
-
title: 'Command Palette',
|
|
19
|
-
component: CommandPalette,
|
|
20
|
-
tags: ['autodocs'],
|
|
21
|
-
parameters: {
|
|
22
|
-
docs: {
|
|
23
|
-
description: {
|
|
24
|
-
component:
|
|
25
|
-
'The Command Palette component is used to display a list of commands or actions that can be triggered by the user.',
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
} satisfies Meta<typeof CommandPalette>
|
|
30
|
-
|
|
31
|
-
export default meta
|
|
32
|
-
type Story = StoryObj<typeof meta>
|
|
33
|
-
|
|
34
|
-
export const Default: Story = {
|
|
35
|
-
parameters: {
|
|
36
|
-
docs: {
|
|
37
|
-
description: {
|
|
38
|
-
story: 'A basic command palette with grouped items and keyboard shortcuts.',
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
render: () => (
|
|
43
|
-
<div className="flex items-center justify-center">
|
|
44
|
-
<CommandPalette className="rounded-lg border shadow-md md:min-w-[450px]">
|
|
45
|
-
<CommandPaletteInput placeholder="Type a command or search..." />
|
|
46
|
-
<CommandPaletteList>
|
|
47
|
-
<CommandPaletteEmpty>No results found.</CommandPaletteEmpty>
|
|
48
|
-
<CommandPaletteGroup heading="Suggestions">
|
|
49
|
-
<CommandPaletteItem>
|
|
50
|
-
<CalendarIcon className="mr-2 h-4 w-4" />
|
|
51
|
-
<span>Calendar</span>
|
|
52
|
-
</CommandPaletteItem>
|
|
53
|
-
<CommandPaletteItem>
|
|
54
|
-
<FaceIcon className="mr-2 h-4 w-4" />
|
|
55
|
-
<span>Search Emoji</span>
|
|
56
|
-
</CommandPaletteItem>
|
|
57
|
-
<CommandPaletteItem disabled>
|
|
58
|
-
<RocketIcon className="mr-2 h-4 w-4" />
|
|
59
|
-
<span>Launch</span>
|
|
60
|
-
</CommandPaletteItem>
|
|
61
|
-
</CommandPaletteGroup>
|
|
62
|
-
<CommandPaletteSeparator />
|
|
63
|
-
<CommandPaletteGroup heading="Settings">
|
|
64
|
-
<CommandPaletteItem>
|
|
65
|
-
<PersonIcon className="mr-2 h-4 w-4" />
|
|
66
|
-
<span>Profile</span>
|
|
67
|
-
<CommandPaletteShortcut>⌘P</CommandPaletteShortcut>
|
|
68
|
-
</CommandPaletteItem>
|
|
69
|
-
<CommandPaletteItem>
|
|
70
|
-
<EnvelopeClosedIcon className="mr-2 h-4 w-4" />
|
|
71
|
-
<span>Mail</span>
|
|
72
|
-
<CommandPaletteShortcut>⌘B</CommandPaletteShortcut>
|
|
73
|
-
</CommandPaletteItem>
|
|
74
|
-
<CommandPaletteItem>
|
|
75
|
-
<GearIcon className="mr-2 h-4 w-4" />
|
|
76
|
-
<span>Settings</span>
|
|
77
|
-
<CommandPaletteShortcut>⌘S</CommandPaletteShortcut>
|
|
78
|
-
</CommandPaletteItem>
|
|
79
|
-
</CommandPaletteGroup>
|
|
80
|
-
</CommandPaletteList>
|
|
81
|
-
</CommandPalette>
|
|
82
|
-
</div>
|
|
83
|
-
),
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const CommandPaletteDialogExample = () => {
|
|
87
|
-
const [open, setOpen] = useState(false)
|
|
88
|
-
|
|
89
|
-
useEffect(() => {
|
|
90
|
-
const down = (e: KeyboardEvent) => {
|
|
91
|
-
if (e.key === 'j' && (e.metaKey || e.ctrlKey)) {
|
|
92
|
-
e.preventDefault()
|
|
93
|
-
setOpen((open) => !open)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
document.addEventListener('keydown', down)
|
|
98
|
-
return () => document.removeEventListener('keydown', down)
|
|
99
|
-
}, [])
|
|
100
|
-
|
|
101
|
-
return (
|
|
102
|
-
<div className="flex items-center justify-center">
|
|
103
|
-
<p className="text-sm text-muted-foreground">
|
|
104
|
-
Press{' '}
|
|
105
|
-
<kbd className="pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground opacity-100">
|
|
106
|
-
<span className="text-xs">⌘</span>J
|
|
107
|
-
</kbd>
|
|
108
|
-
</p>
|
|
109
|
-
<CommandPaletteDialog open={open} onOpenChange={setOpen}>
|
|
110
|
-
<CommandPaletteInput placeholder="Type a command or search..." />
|
|
111
|
-
<CommandPaletteList>
|
|
112
|
-
<CommandPaletteEmpty>No results found.</CommandPaletteEmpty>
|
|
113
|
-
<CommandPaletteGroup heading="Suggestions">
|
|
114
|
-
<CommandPaletteItem>
|
|
115
|
-
<CalendarIcon className="mr-2 h-4 w-4" />
|
|
116
|
-
<span>Calendar</span>
|
|
117
|
-
</CommandPaletteItem>
|
|
118
|
-
<CommandPaletteItem>
|
|
119
|
-
<FaceIcon className="mr-2 h-4 w-4" />
|
|
120
|
-
<span>Search Emoji</span>
|
|
121
|
-
</CommandPaletteItem>
|
|
122
|
-
<CommandPaletteItem>
|
|
123
|
-
<RocketIcon className="mr-2 h-4 w-4" />
|
|
124
|
-
<span>Launch</span>
|
|
125
|
-
</CommandPaletteItem>
|
|
126
|
-
</CommandPaletteGroup>
|
|
127
|
-
<CommandPaletteSeparator />
|
|
128
|
-
<CommandPaletteGroup heading="Settings">
|
|
129
|
-
<CommandPaletteItem>
|
|
130
|
-
<PersonIcon className="mr-2 h-4 w-4" />
|
|
131
|
-
<span>Profile</span>
|
|
132
|
-
<CommandPaletteShortcut>⌘P</CommandPaletteShortcut>
|
|
133
|
-
</CommandPaletteItem>
|
|
134
|
-
<CommandPaletteItem>
|
|
135
|
-
<EnvelopeClosedIcon className="mr-2 h-4 w-4" />
|
|
136
|
-
<span>Mail</span>
|
|
137
|
-
<CommandPaletteShortcut>⌘B</CommandPaletteShortcut>
|
|
138
|
-
</CommandPaletteItem>
|
|
139
|
-
<CommandPaletteItem>
|
|
140
|
-
<GearIcon className="mr-2 h-4 w-4" />
|
|
141
|
-
<span>Settings</span>
|
|
142
|
-
<CommandPaletteShortcut>⌘S</CommandPaletteShortcut>
|
|
143
|
-
</CommandPaletteItem>
|
|
144
|
-
</CommandPaletteGroup>
|
|
145
|
-
</CommandPaletteList>
|
|
146
|
-
</CommandPaletteDialog>
|
|
147
|
-
</div>
|
|
148
|
-
)
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
export const Dialog: Story = {
|
|
152
|
-
parameters: {
|
|
153
|
-
docs: {
|
|
154
|
-
description: {
|
|
155
|
-
story: 'Command palette displayed in a dialog that can be opened with ⌘J keyboard shortcut.',
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
render: () => <CommandPaletteDialogExample />,
|
|
160
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { type DialogProps } from '@radix-ui/react-dialog'
|
|
2
|
-
import { MagnifyingGlassIcon } from '@radix-ui/react-icons'
|
|
3
|
-
|
|
4
|
-
import { Command as CommandPalettePrimitive } from 'cmdk'
|
|
5
|
-
import * as React from 'react'
|
|
6
|
-
|
|
7
|
-
import { Dialog, DialogContent } from '@components/ui/dialog/dialog'
|
|
8
|
-
import { cn } from '@lib/utils'
|
|
9
|
-
|
|
10
|
-
const CommandPalette = React.forwardRef<
|
|
11
|
-
React.ElementRef<typeof CommandPalettePrimitive>,
|
|
12
|
-
React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive>
|
|
13
|
-
>(({ className, ...props }, ref) => (
|
|
14
|
-
<CommandPalettePrimitive
|
|
15
|
-
ref={ref}
|
|
16
|
-
className={cn(
|
|
17
|
-
'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',
|
|
18
|
-
className,
|
|
19
|
-
)}
|
|
20
|
-
{...props}
|
|
21
|
-
/>
|
|
22
|
-
))
|
|
23
|
-
CommandPalette.displayName = CommandPalettePrimitive.displayName
|
|
24
|
-
|
|
25
|
-
type CommandPaletteDialogProps = DialogProps
|
|
26
|
-
|
|
27
|
-
const CommandPaletteDialog = ({ children, ...props }: CommandPaletteDialogProps) => {
|
|
28
|
-
return (
|
|
29
|
-
<Dialog {...props}>
|
|
30
|
-
<DialogContent className="overflow-hidden p-0">
|
|
31
|
-
<CommandPalette className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
|
|
32
|
-
{children}
|
|
33
|
-
</CommandPalette>
|
|
34
|
-
</DialogContent>
|
|
35
|
-
</Dialog>
|
|
36
|
-
)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const CommandPaletteInput = React.forwardRef<
|
|
40
|
-
React.ElementRef<typeof CommandPalettePrimitive.Input>,
|
|
41
|
-
React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Input>
|
|
42
|
-
>(({ className, ...props }, ref) => (
|
|
43
|
-
// eslint-disable-next-line react/no-unknown-property
|
|
44
|
-
<div className="flex items-center border-b px-3" cmdk-input-wrapper="">
|
|
45
|
-
<MagnifyingGlassIcon className="mr-2 h-4 w-4 shrink-0 opacity-50" />
|
|
46
|
-
<CommandPalettePrimitive.Input
|
|
47
|
-
ref={ref}
|
|
48
|
-
className={cn(
|
|
49
|
-
'flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',
|
|
50
|
-
className,
|
|
51
|
-
)}
|
|
52
|
-
{...props}
|
|
53
|
-
/>
|
|
54
|
-
</div>
|
|
55
|
-
))
|
|
56
|
-
|
|
57
|
-
CommandPaletteInput.displayName = CommandPalettePrimitive.Input.displayName
|
|
58
|
-
|
|
59
|
-
const CommandPaletteList = React.forwardRef<
|
|
60
|
-
React.ElementRef<typeof CommandPalettePrimitive.List>,
|
|
61
|
-
React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.List>
|
|
62
|
-
>(({ className, ...props }, ref) => (
|
|
63
|
-
<CommandPalettePrimitive.List
|
|
64
|
-
ref={ref}
|
|
65
|
-
className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)}
|
|
66
|
-
{...props}
|
|
67
|
-
/>
|
|
68
|
-
))
|
|
69
|
-
|
|
70
|
-
CommandPaletteList.displayName = CommandPalettePrimitive.List.displayName
|
|
71
|
-
|
|
72
|
-
const CommandPaletteEmpty = React.forwardRef<
|
|
73
|
-
React.ElementRef<typeof CommandPalettePrimitive.Empty>,
|
|
74
|
-
React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Empty>
|
|
75
|
-
>((props, ref) => <CommandPalettePrimitive.Empty ref={ref} className="py-6 text-center text-sm" {...props} />)
|
|
76
|
-
|
|
77
|
-
CommandPaletteEmpty.displayName = CommandPalettePrimitive.Empty.displayName
|
|
78
|
-
|
|
79
|
-
const CommandPaletteGroup = React.forwardRef<
|
|
80
|
-
React.ElementRef<typeof CommandPalettePrimitive.Group>,
|
|
81
|
-
React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Group>
|
|
82
|
-
>(({ className, ...props }, ref) => (
|
|
83
|
-
<CommandPalettePrimitive.Group
|
|
84
|
-
ref={ref}
|
|
85
|
-
className={cn(
|
|
86
|
-
'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground',
|
|
87
|
-
className,
|
|
88
|
-
)}
|
|
89
|
-
{...props}
|
|
90
|
-
/>
|
|
91
|
-
))
|
|
92
|
-
|
|
93
|
-
CommandPaletteGroup.displayName = CommandPalettePrimitive.Group.displayName
|
|
94
|
-
|
|
95
|
-
const CommandPaletteSeparator = React.forwardRef<
|
|
96
|
-
React.ElementRef<typeof CommandPalettePrimitive.Separator>,
|
|
97
|
-
React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Separator>
|
|
98
|
-
>(({ className, ...props }, ref) => (
|
|
99
|
-
<CommandPalettePrimitive.Separator ref={ref} className={cn('-mx-1 h-px bg-border', className)} {...props} />
|
|
100
|
-
))
|
|
101
|
-
CommandPaletteSeparator.displayName = CommandPalettePrimitive.Separator.displayName
|
|
102
|
-
|
|
103
|
-
const CommandPaletteItem = React.forwardRef<
|
|
104
|
-
React.ElementRef<typeof CommandPalettePrimitive.Item>,
|
|
105
|
-
React.ComponentPropsWithoutRef<typeof CommandPalettePrimitive.Item>
|
|
106
|
-
>(({ className, ...props }, ref) => (
|
|
107
|
-
<CommandPalettePrimitive.Item
|
|
108
|
-
ref={ref}
|
|
109
|
-
className={cn(
|
|
110
|
-
'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50',
|
|
111
|
-
className,
|
|
112
|
-
)}
|
|
113
|
-
{...props}
|
|
114
|
-
/>
|
|
115
|
-
))
|
|
116
|
-
|
|
117
|
-
CommandPaletteItem.displayName = CommandPalettePrimitive.Item.displayName
|
|
118
|
-
|
|
119
|
-
const CommandPaletteShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {
|
|
120
|
-
return <span className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)} {...props} />
|
|
121
|
-
}
|
|
122
|
-
CommandPaletteShortcut.displayName = 'CommandPaletteShortcut'
|
|
123
|
-
|
|
124
|
-
export {
|
|
125
|
-
CommandPalette,
|
|
126
|
-
CommandPaletteDialog,
|
|
127
|
-
CommandPaletteInput,
|
|
128
|
-
CommandPaletteList,
|
|
129
|
-
CommandPaletteEmpty,
|
|
130
|
-
CommandPaletteGroup,
|
|
131
|
-
CommandPaletteItem,
|
|
132
|
-
CommandPaletteShortcut,
|
|
133
|
-
CommandPaletteSeparator,
|
|
134
|
-
}
|