@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.
Files changed (161) hide show
  1. package/dist/frontend-core/frontend.generator.d.ts +0 -58
  2. package/dist/frontend-core/frontend.generator.js +6 -172
  3. package/dist/frontend-core/frontend.generator.js.map +1 -1
  4. package/dist/frontend-core/template/README.md +1 -1
  5. package/dist/frontend-core/template/src/components/admin/table-filter.tsx +1 -5
  6. package/dist/frontend-core/template/src/components/ui/color-mode-toggle/color-mode-toggle.tsx +10 -4
  7. package/dist/frontend-core/template/src/pages/dashboard/dashboard.page.tsx +2 -3
  8. package/dist/frontend-core/template/src/pages/error/default-error.page.tsx +1 -1
  9. package/dist/frontend-core/template/src/pages/error/not-found-error.page.tsx +1 -1
  10. package/dist/frontend-core/template/src/styles/styles.css +13 -1
  11. package/dist/frontend-core/template/tsconfig.json +2 -0
  12. package/dist/frontend-core/types/component.d.ts +1 -1
  13. package/dist/frontend-forms/generators/discriminated-union/fields.generator.js +4 -6
  14. package/dist/frontend-forms/generators/discriminated-union/fields.generator.js.map +1 -1
  15. package/dist/frontend-forms/generators/discriminated-union/inputs.generator.js +1 -1
  16. package/dist/frontend-forms/generators/discriminated-union/inputs.generator.js.map +1 -1
  17. package/dist/frontend-forms/generators/enum/inputs.generator.js +1 -1
  18. package/dist/frontend-forms/generators/enum/inputs.generator.js.map +1 -1
  19. package/dist/frontend-forms/generators/model/forms.generator.js +8 -12
  20. package/dist/frontend-forms/generators/model/forms.generator.js.map +1 -1
  21. package/dist/frontend-forms/generators/model/inputs.generator.js +2 -6
  22. package/dist/frontend-forms/generators/model/inputs.generator.js.map +1 -1
  23. package/dist/frontend-forms/template/src/components/ui/field/field.tsx +1 -4
  24. package/dist/frontend-tables/generators/model-table.generator.js +1 -5
  25. package/dist/frontend-tables/generators/model-table.generator.js.map +1 -1
  26. package/package.json +3 -2
  27. package/dist/frontend-core/template/src/components/ui/accordion/accordion.stories.tsx +0 -47
  28. package/dist/frontend-core/template/src/components/ui/accordion/accordion.tsx +0 -52
  29. package/dist/frontend-core/template/src/components/ui/admin-sidebar/admin-sidebar.tsx +0 -195
  30. package/dist/frontend-core/template/src/components/ui/alert/alert.stories.tsx +0 -61
  31. package/dist/frontend-core/template/src/components/ui/alert/alert.tsx +0 -45
  32. package/dist/frontend-core/template/src/components/ui/alert-dialog/alert-dialog.stories.tsx +0 -52
  33. package/dist/frontend-core/template/src/components/ui/alert-dialog/alert-dialog.tsx +0 -105
  34. package/dist/frontend-core/template/src/components/ui/avatar/avatar.stories.tsx +0 -30
  35. package/dist/frontend-core/template/src/components/ui/avatar/avatar.tsx +0 -39
  36. package/dist/frontend-core/template/src/components/ui/badge/badge.stories.tsx +0 -78
  37. package/dist/frontend-core/template/src/components/ui/badge/badge.tsx +0 -48
  38. package/dist/frontend-core/template/src/components/ui/breadcrumb/breadcrumb.stories.tsx +0 -67
  39. package/dist/frontend-core/template/src/components/ui/breadcrumb/breadcrumb.tsx +0 -85
  40. package/dist/frontend-core/template/src/components/ui/button/button.stories.tsx +0 -150
  41. package/dist/frontend-core/template/src/components/ui/button/button.tsx +0 -68
  42. package/dist/frontend-core/template/src/components/ui/calendar/calendar.stories.tsx +0 -160
  43. package/dist/frontend-core/template/src/components/ui/calendar/calendar.tsx +0 -293
  44. package/dist/frontend-core/template/src/components/ui/card/card.stories.tsx +0 -77
  45. package/dist/frontend-core/template/src/components/ui/card/card.tsx +0 -45
  46. package/dist/frontend-core/template/src/components/ui/card-hover/card-hover.stories.tsx +0 -29
  47. package/dist/frontend-core/template/src/components/ui/card-hover/card-hover.tsx +0 -28
  48. package/dist/frontend-core/template/src/components/ui/carousel/carousel.stories.tsx +0 -154
  49. package/dist/frontend-core/template/src/components/ui/carousel/carousel.tsx +0 -227
  50. package/dist/frontend-core/template/src/components/ui/checkbox/checkbox.stories.tsx +0 -106
  51. package/dist/frontend-core/template/src/components/ui/checkbox/checkbox.tsx +0 -88
  52. package/dist/frontend-core/template/src/components/ui/checkbox/shadcn-checkbox.stories.tsx +0 -90
  53. package/dist/frontend-core/template/src/components/ui/checkbox/shadcn-checkbox.tsx +0 -54
  54. package/dist/frontend-core/template/src/components/ui/collapse/collapse.stories.tsx +0 -52
  55. package/dist/frontend-core/template/src/components/ui/collapse/collapse.tsx +0 -9
  56. package/dist/frontend-core/template/src/components/ui/combobox/combobox.stories.tsx +0 -207
  57. package/dist/frontend-core/template/src/components/ui/combobox/combobox.tsx +0 -79
  58. package/dist/frontend-core/template/src/components/ui/command/command.stories.tsx +0 -186
  59. package/dist/frontend-core/template/src/components/ui/command/command.tsx +0 -165
  60. package/dist/frontend-core/template/src/components/ui/command-palette/command-palette.stories.tsx +0 -160
  61. package/dist/frontend-core/template/src/components/ui/command-palette/command-palette.tsx +0 -134
  62. package/dist/frontend-core/template/src/components/ui/content-frame/content-frame.stories.tsx +0 -198
  63. package/dist/frontend-core/template/src/components/ui/content-frame/content-frame.tsx +0 -100
  64. package/dist/frontend-core/template/src/components/ui/context-menu/context-menu.stories.tsx +0 -78
  65. package/dist/frontend-core/template/src/components/ui/context-menu/context-menu.tsx +0 -179
  66. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/cell-variant-types.ts +0 -11
  67. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/checkbox-cell.tsx +0 -116
  68. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/date-cell.tsx +0 -157
  69. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/gantt-cell.tsx +0 -82
  70. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/long-text-cell.tsx +0 -180
  71. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/multi-select-cell.tsx +0 -280
  72. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/number-cell.tsx +0 -169
  73. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/react-node-cell.tsx +0 -33
  74. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/select-cell.tsx +0 -175
  75. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/short-text-cell.tsx +0 -138
  76. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/utils/gantt-timeline.tsx +0 -92
  77. package/dist/frontend-core/template/src/components/ui/data-grid/cell-variants/utils/gantt-timerange-picker.tsx +0 -330
  78. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-cell-wrapper.tsx +0 -212
  79. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-cell.tsx +0 -157
  80. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-column-header.tsx +0 -340
  81. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-context-menu.tsx +0 -271
  82. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-row.tsx +0 -123
  83. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-search.tsx +0 -211
  84. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-types.ts +0 -159
  85. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-utils.ts +0 -67
  86. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-view-menu.tsx +0 -360
  87. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid.stories.tsx +0 -780
  88. package/dist/frontend-core/template/src/components/ui/data-grid/data-grid.tsx +0 -217
  89. package/dist/frontend-core/template/src/components/ui/data-grid/hooks/use-callback-ref.ts +0 -22
  90. package/dist/frontend-core/template/src/components/ui/data-grid/hooks/use-data-grid.tsx +0 -1892
  91. package/dist/frontend-core/template/src/components/ui/data-grid/hooks/use-debounced-callback.ts +0 -19
  92. package/dist/frontend-core/template/src/components/ui/data-grid/styles.css +0 -3
  93. package/dist/frontend-core/template/src/components/ui/data-table/context-menu-simple.tsx +0 -141
  94. package/dist/frontend-core/template/src/components/ui/data-table/data-table.stories.tsx +0 -146
  95. package/dist/frontend-core/template/src/components/ui/data-table/data-table.tsx +0 -447
  96. package/dist/frontend-core/template/src/components/ui/data-table/renderers/country-array-cell-renderer.tsx +0 -77
  97. package/dist/frontend-core/template/src/components/ui/data-table/renderers/country-cell-renderer.tsx +0 -56
  98. package/dist/frontend-core/template/src/components/ui/data-table/renderers/favorite-cell-renderer.tsx +0 -68
  99. package/dist/frontend-core/template/src/components/ui/data-table/renderers/links-cell-renderer.tsx +0 -205
  100. package/dist/frontend-core/template/src/components/ui/data-table/utils/columns.ts +0 -351
  101. package/dist/frontend-core/template/src/components/ui/data-table/utils/data-table.utils.ts +0 -49
  102. package/dist/frontend-core/template/src/components/ui/date-picker/date-picker.stories.tsx +0 -149
  103. package/dist/frontend-core/template/src/components/ui/date-picker/date-picker.tsx +0 -30
  104. package/dist/frontend-core/template/src/components/ui/dialog/dialog.stories.tsx +0 -80
  105. package/dist/frontend-core/template/src/components/ui/dialog/dialog.tsx +0 -134
  106. package/dist/frontend-core/template/src/components/ui/drawer/drawer.stories.tsx +0 -104
  107. package/dist/frontend-core/template/src/components/ui/drawer/drawer.tsx +0 -87
  108. package/dist/frontend-core/template/src/components/ui/dropdown-menu/dropdown-menu.stories.tsx +0 -168
  109. package/dist/frontend-core/template/src/components/ui/dropdown-menu/dropdown-menu.tsx +0 -225
  110. package/dist/frontend-core/template/src/components/ui/input/input.stories.tsx +0 -141
  111. package/dist/frontend-core/template/src/components/ui/input/input.tsx +0 -47
  112. package/dist/frontend-core/template/src/components/ui/label/label.stories.tsx +0 -41
  113. package/dist/frontend-core/template/src/components/ui/label/label.tsx +0 -20
  114. package/dist/frontend-core/template/src/components/ui/loader/loader.stories.tsx +0 -45
  115. package/dist/frontend-core/template/src/components/ui/loader/loader.tsx +0 -17
  116. package/dist/frontend-core/template/src/components/ui/mark-value-renderer/mark-value-renderer.stories.tsx +0 -114
  117. package/dist/frontend-core/template/src/components/ui/mark-value-renderer/mark-value-renderer.tsx +0 -48
  118. package/dist/frontend-core/template/src/components/ui/menubar/menu.stories.tsx +0 -134
  119. package/dist/frontend-core/template/src/components/ui/menubar/menubar.tsx +0 -208
  120. package/dist/frontend-core/template/src/components/ui/modal/modal.stories.tsx +0 -297
  121. package/dist/frontend-core/template/src/components/ui/modal/modal.tsx +0 -80
  122. package/dist/frontend-core/template/src/components/ui/navigation-menu/navigation-menu.stories.tsx +0 -213
  123. package/dist/frontend-core/template/src/components/ui/navigation-menu/navigation-menu.tsx +0 -142
  124. package/dist/frontend-core/template/src/components/ui/pagination/pagination.stories.tsx +0 -49
  125. package/dist/frontend-core/template/src/components/ui/pagination/pagination.tsx +0 -84
  126. package/dist/frontend-core/template/src/components/ui/popover/popover.stories.tsx +0 -82
  127. package/dist/frontend-core/template/src/components/ui/popover/popover.tsx +0 -55
  128. package/dist/frontend-core/template/src/components/ui/progress/progress.stories.tsx +0 -80
  129. package/dist/frontend-core/template/src/components/ui/progress/progress.tsx +0 -17
  130. package/dist/frontend-core/template/src/components/ui/radio-group/radio-group.stories.tsx +0 -154
  131. package/dist/frontend-core/template/src/components/ui/radio-group/radio-group.tsx +0 -68
  132. package/dist/frontend-core/template/src/components/ui/resizable/resizable.stories.tsx +0 -73
  133. package/dist/frontend-core/template/src/components/ui/resizable/resizeable.tsx +0 -38
  134. package/dist/frontend-core/template/src/components/ui/scroll-area/scroll-area.stories.tsx +0 -55
  135. package/dist/frontend-core/template/src/components/ui/scroll-area/scroll-area.tsx +0 -39
  136. package/dist/frontend-core/template/src/components/ui/select/select.stories.tsx +0 -297
  137. package/dist/frontend-core/template/src/components/ui/select/select.tsx +0 -227
  138. package/dist/frontend-core/template/src/components/ui/separator/separator.tsx +0 -21
  139. package/dist/frontend-core/template/src/components/ui/separator/seperator.stories.tsx +0 -25
  140. package/dist/frontend-core/template/src/components/ui/sheet/sheet.stories.tsx +0 -45
  141. package/dist/frontend-core/template/src/components/ui/sheet/sheet.tsx +0 -107
  142. package/dist/frontend-core/template/src/components/ui/skeleton/skeleton.stories.tsx +0 -26
  143. package/dist/frontend-core/template/src/components/ui/skeleton/skeleton.tsx +0 -7
  144. package/dist/frontend-core/template/src/components/ui/slider/slider.stories.tsx +0 -101
  145. package/dist/frontend-core/template/src/components/ui/slider/slider.tsx +0 -98
  146. package/dist/frontend-core/template/src/components/ui/spinner/spinner.stories.tsx +0 -19
  147. package/dist/frontend-core/template/src/components/ui/spinner/spinner.tsx +0 -21
  148. package/dist/frontend-core/template/src/components/ui/switch/switch.stories.tsx +0 -33
  149. package/dist/frontend-core/template/src/components/ui/switch/switch.tsx +0 -28
  150. package/dist/frontend-core/template/src/components/ui/tabs/tabs.stories.tsx +0 -215
  151. package/dist/frontend-core/template/src/components/ui/tabs/tabs.tsx +0 -70
  152. package/dist/frontend-core/template/src/components/ui/textarea/textarea.stories.tsx +0 -138
  153. package/dist/frontend-core/template/src/components/ui/textarea/textarea.tsx +0 -40
  154. package/dist/frontend-core/template/src/components/ui/toast/toast.mdx +0 -31
  155. package/dist/frontend-core/template/src/components/ui/toast/toast.stories.tsx +0 -89
  156. package/dist/frontend-core/template/src/components/ui/toggle/toggle.stories.tsx +0 -65
  157. package/dist/frontend-core/template/src/components/ui/toggle/toggle.tsx +0 -38
  158. package/dist/frontend-core/template/src/components/ui/toggle-group/toggle-group.stories.tsx +0 -85
  159. package/dist/frontend-core/template/src/components/ui/toggle-group/toggle-group.tsx +0 -54
  160. package/dist/frontend-core/template/src/components/ui/tooltip/tooltip.stories.tsx +0 -29
  161. package/dist/frontend-core/template/src/components/ui/tooltip/tooltip.tsx +0 -29
@@ -1,88 +0,0 @@
1
- import { CheckIcon, Cross1Icon } from '@radix-ui/react-icons'
2
-
3
- import { cva, type VariantProps } from 'class-variance-authority'
4
- import { SquareIcon } from 'lucide-react'
5
-
6
- import { cn } from '@lib/utils'
7
-
8
- type CheckboxProps = React.ComponentProps<'input'> &
9
- VariantProps<typeof checkboxVariants> & {
10
- label?: string
11
- /**
12
- * E2E test_id to identify the checkbox.
13
- */
14
- __e2e_test_id__?: string
15
- }
16
-
17
- const checkboxVariants = cva(
18
- 'cursor-pointer peer appearance-none rounded border focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive shrink-0 shadow-xs transition-shadow',
19
- {
20
- variants: {
21
- variant: {
22
- default: '',
23
- simple: ' border-input checked:bg-muted-foreground checked:border-muted-foreground',
24
- iconSolo: 'border-transparent shadow-none',
25
- },
26
- checkboxSize: {
27
- default: 'size-4 [&_svg]:size-3.5',
28
- sm: 'size-3.5 [&_svg]:size-3',
29
- lg: 'size-4.5 [&_svg]:size-4',
30
- },
31
- checkIcon: {
32
- default: 'cross',
33
- check: 'check',
34
- square: 'square',
35
- },
36
- iconStyle: {
37
- default: 'text-foreground',
38
- simple: 'text-primary-foreground',
39
- solo: 'text-muted-foreground shadow-none',
40
- },
41
- },
42
- defaultVariants: {
43
- variant: 'default',
44
- checkIcon: 'default',
45
- iconStyle: 'default',
46
- checkboxSize: 'default',
47
- },
48
- },
49
- )
50
-
51
- function Checkbox({
52
- label,
53
- className,
54
- variant,
55
- checkIcon,
56
- checkboxSize,
57
- iconStyle,
58
- __e2e_test_id__,
59
- ...props
60
- }: CheckboxProps) {
61
- const inputId = props.id ?? (label ? `${label}-checkbox` : undefined)
62
-
63
- let icon = <Cross1Icon />
64
- if (checkIcon === 'check') {
65
- icon = <CheckIcon />
66
- } else if (checkIcon === 'square') {
67
- icon = <SquareIcon fill="var(--muted-foreground)" className="size-1/3" />
68
- }
69
-
70
- return (
71
- <div className={cn('relative flex gap-2 items-center', className)} data-test-id={__e2e_test_id__}>
72
- <input {...props} type="checkbox" id={inputId} className={cn(checkboxVariants({ variant, checkboxSize }))} />
73
- <span
74
- className={cn(
75
- checkboxVariants({ iconStyle, checkboxSize }),
76
- 'absolute opacity-0 peer-checked:opacity-100 top-1/2 left-0 transform -translate-y-1/2 pointer-events-none flex items-center justify-center border-transparent',
77
- )}
78
- >
79
- {icon}
80
- </span>
81
- <label htmlFor={inputId} className="cursor-pointer select-none">
82
- {label}
83
- </label>
84
- </div>
85
- )
86
- }
87
-
88
- export { Checkbox, checkboxVariants }
@@ -1,90 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite'
2
-
3
- import { Checkbox } from './shadcn-checkbox'
4
- import { expect, userEvent, screen } from 'storybook/test'
5
- import { Label } from '@components/ui/label/label'
6
-
7
- const meta = {
8
- title: 'ShadcnCheckbox',
9
- component: Checkbox,
10
- tags: ['autodocs'],
11
- parameters: {
12
- layout: 'centered',
13
- },
14
- argTypes: {
15
- variant: {
16
- control: 'select',
17
- options: ['default'],
18
- },
19
- size: {
20
- control: 'select',
21
- options: ['default', 'sm'],
22
- },
23
- },
24
- } satisfies Meta<typeof Checkbox>
25
- export default meta
26
-
27
- type Story = StoryObj<typeof meta>
28
-
29
- export const Default: Story = {
30
- args: { variant: 'default', size: 'default' },
31
- render: (args) => (
32
- <div className="flex flex-wrap gap-2">
33
- <div className="flex flex-wrap gap-2 items-center">
34
- <Checkbox id="default-cb" {...args} />
35
- <Label htmlFor="default-cb">Default</Label>
36
- </div>
37
- </div>
38
- ),
39
- }
40
-
41
- export const Variants: Story = {
42
- render: () => (
43
- <div className="flex flex-wrap gap-2">
44
- <div className="flex flex-wrap gap-2 items-center">
45
- <Checkbox id="default-variant" variant="default" defaultChecked={true} />
46
- <Label htmlFor="default-variant">Default</Label>
47
- </div>
48
- </div>
49
- ),
50
- }
51
-
52
- export const Sizes: Story = {
53
- render: () => (
54
- <div className="flex flex-wrap gap-2">
55
- <div className="flex flex-wrap gap-2 items-center">
56
- <Checkbox id="sm" size="sm" />
57
- <Label htmlFor="sm">sm</Label>
58
- </div>
59
- <div className="flex flex-wrap gap-2 items-center">
60
- <Checkbox id="default-size" size="default" />
61
- <Label htmlFor="default-size">Default</Label>
62
- </div>
63
- </div>
64
- ),
65
- }
66
-
67
- export const Disabled: Story = {
68
- args: {
69
- disabled: true,
70
- },
71
- render: (args) => (
72
- <div className="flex flex-wrap gap-2">
73
- <div className="flex flex-wrap gap-2 items-center">
74
- <Checkbox id="disabled" {...args} data-testid="disabled-checkbox" defaultChecked={false} />
75
- <Label htmlFor="disabled">Disabled</Label>
76
- </div>
77
- <div className="flex flex-wrap gap-2 items-center">
78
- <Checkbox id="disabled" {...args} data-testid="disabled-checkbox-active" defaultChecked={true} />
79
- <Label htmlFor="disabled">Disabled active</Label>
80
- </div>
81
- </div>
82
- ),
83
- play: async () => {
84
- const disabledCheckbox = screen.getByTestId('disabled-checkbox')
85
-
86
- await expect(disabledCheckbox).toHaveAttribute('disabled')
87
-
88
- await userEvent.click(disabledCheckbox, { pointerEventsCheck: 0 })
89
- },
90
- }
@@ -1,54 +0,0 @@
1
- import * as CheckboxPrimitive from '@radix-ui/react-checkbox'
2
- import { CheckIcon } from '@radix-ui/react-icons'
3
-
4
- import { cva, type VariantProps } from 'class-variance-authority'
5
- import * as React from 'react'
6
-
7
- import { cn } from '@lib/utils'
8
-
9
- const checkboxVariants = cva(
10
- 'cursor-pointer peer border-input dark:bg-input/30 data-[state=checked]:text-primary-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',
11
- {
12
- variants: {
13
- variant: {
14
- default: 'data-[state=checked]:bg-primary data-[state=checked]:border-primary',
15
- },
16
- size: {
17
- default: 'size-4 [&_svg]:size-3.5',
18
- sm: 'size-3.5 [&_svg]:size-3',
19
- },
20
- },
21
- defaultVariants: {
22
- variant: 'default',
23
- size: 'default',
24
- },
25
- },
26
- )
27
-
28
- type CheckboxProps = React.ComponentProps<typeof CheckboxPrimitive.Root> &
29
- VariantProps<typeof checkboxVariants> & {
30
- /**
31
- * E2E test_id to identify the button.
32
- */
33
- __e2e_test_id__?: string
34
- }
35
-
36
- function Checkbox({ className, variant, size, __e2e_test_id__, ...props }: CheckboxProps) {
37
- return (
38
- <CheckboxPrimitive.Root
39
- data-slot="checkbox"
40
- className={cn(checkboxVariants({ variant, size, className }))}
41
- {...props}
42
- data-test-id={__e2e_test_id__}
43
- >
44
- <CheckboxPrimitive.Indicator
45
- data-slot="checkbox-indicator"
46
- className="flex items-center justify-center text-current transition-none"
47
- >
48
- <CheckIcon />
49
- </CheckboxPrimitive.Indicator>
50
- </CheckboxPrimitive.Root>
51
- )
52
- }
53
-
54
- export { Checkbox, checkboxVariants }
@@ -1,52 +0,0 @@
1
- import { CaretSortIcon } from '@radix-ui/react-icons'
2
- import { Meta, StoryObj } from '@storybook/react-vite'
3
-
4
- import { useState } from 'react'
5
-
6
- import { Button } from '@components/ui/button/button'
7
-
8
- import { Collapse, CollapseContent, CollapseTrigger } from './collapse'
9
-
10
- const meta = {
11
- title: 'Collapse',
12
- component: Collapse,
13
- tags: ['autodocs'],
14
- } satisfies Meta<typeof Collapse>
15
-
16
- export default meta
17
-
18
- function CollapseExample() {
19
- const [isOpen, setIsOpen] = useState(false)
20
-
21
- return (
22
- <div className="flex items-center justify-center border rounded p-4">
23
- <Collapse open={isOpen} onOpenChange={setIsOpen} className="w-[350px] space-y-2">
24
- <div className="flex items-center justify-between space-x-4 px-4">
25
- <h4 className="text-sm font-semibold">You have made 3 commits</h4>
26
- <CollapseTrigger asChild>
27
- <Button variant="ghost" size="sm">
28
- <CaretSortIcon className="h-4 w-4" />
29
- <span className="sr-only">Toggle</span>
30
- </Button>
31
- </CollapseTrigger>
32
- </div>
33
- <div className="rounded-md border px-4 py-2 font-mono text-sm shadow-sm">@radix-ui/primitives</div>
34
- <CollapseContent className="space-y-2">
35
- <div className="rounded-md border px-4 py-2 font-mono text-sm shadow-sm">@radix-ui/colors</div>
36
- <div className="rounded-md border px-4 py-2 font-mono text-sm shadow-sm">@stitches/react</div>
37
- </CollapseContent>
38
- </Collapse>
39
- </div>
40
- )
41
- }
42
-
43
- export const Default: StoryObj<typeof meta> = {
44
- parameters: {
45
- docs: {
46
- description: {
47
- story: 'The Collapse component allows you to show and hide content.',
48
- },
49
- },
50
- },
51
- render: () => <CollapseExample />,
52
- }
@@ -1,9 +0,0 @@
1
- import * as CollapsePrimitive from '@radix-ui/react-collapsible'
2
-
3
- const Collapse = CollapsePrimitive.Root
4
-
5
- const CollapseTrigger = CollapsePrimitive.CollapsibleTrigger
6
-
7
- const CollapseContent = CollapsePrimitive.CollapsibleContent
8
-
9
- export { Collapse, CollapseTrigger, CollapseContent }
@@ -1,207 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite'
2
-
3
- import { ComboboxDemo } from './combobox'
4
- import { useState } from 'react'
5
- import { Button } from '@components/ui/button/button'
6
- import {
7
- CommandPalette,
8
- CommandPaletteEmpty,
9
- CommandPaletteGroup,
10
- CommandPaletteInput,
11
- CommandPaletteItem,
12
- CommandPaletteList,
13
- } from '@components/ui/command-palette/command-palette'
14
- import { Popover, PopoverContent, PopoverTrigger } from '@components/ui/popover/popover'
15
- import {
16
- DropdownMenu,
17
- DropdownMenuContent,
18
- DropdownMenuGroup,
19
- DropdownMenuItem,
20
- DropdownMenuLabel,
21
- DropdownMenuSeparator,
22
- DropdownMenuShortcut,
23
- DropdownMenuSub,
24
- DropdownMenuSubContent,
25
- DropdownMenuSubTrigger,
26
- DropdownMenuTrigger,
27
- } from 'components/ui/dropdown-menu/dropdown-menu'
28
- import { DotsHorizontalIcon } from '@radix-ui/react-icons'
29
-
30
- // DATA ------------------------------------------------------------------------
31
-
32
- const labels = ['feature', 'bug', 'enhancement', 'documentation', 'design', 'question', 'maintenance']
33
-
34
- type Status = {
35
- value: string
36
- label: string
37
- }
38
-
39
- const statuses: Status[] = [
40
- {
41
- value: 'backlog',
42
- label: 'Backlog',
43
- },
44
- {
45
- value: 'todo',
46
- label: 'Todo',
47
- },
48
- {
49
- value: 'in progress',
50
- label: 'In Progress',
51
- },
52
- {
53
- value: 'done',
54
- label: 'Done',
55
- },
56
- {
57
- value: 'canceled',
58
- label: 'Canceled',
59
- },
60
- ]
61
-
62
- const meta = {
63
- title: 'Combobox',
64
- component: ComboboxDemo,
65
- tags: ['autodocs'],
66
- } satisfies Meta<typeof ComboboxDemo>
67
-
68
- export default meta
69
- type Story = StoryObj<typeof meta>
70
-
71
- export const Default: Story = {
72
- parameters: {
73
- docs: {
74
- description: {
75
- story: 'A basic combobox component with search and selection functionality.',
76
- },
77
- },
78
- },
79
- render: () => (
80
- <div className="flex items-center justify-center">
81
- <ComboboxDemo />
82
- </div>
83
- ),
84
- }
85
-
86
- const PopoverComboboxExample = () => {
87
- const [openPopover, setOpenPopover] = useState(false)
88
- const [selectedStatus, setSelectedStatus] = useState<Status | null>(null)
89
-
90
- return (
91
- <div className="flex items-center space-x-4">
92
- <p className="text-sm text-muted-foreground">Status</p>
93
- <Popover open={openPopover} onOpenChange={setOpenPopover}>
94
- <PopoverTrigger asChild>
95
- <Button variant="outline" className="w-[150px] justify-start">
96
- {selectedStatus ? <>{selectedStatus.label}</> : <>+ Set status</>}
97
- </Button>
98
- </PopoverTrigger>
99
- <PopoverContent className="p-0" side="right" align="start">
100
- <CommandPalette>
101
- <CommandPaletteInput placeholder="Change status..." />
102
- <CommandPaletteList>
103
- <CommandPaletteEmpty>No results found.</CommandPaletteEmpty>
104
- <CommandPaletteGroup>
105
- {statuses.map((status) => (
106
- <CommandPaletteItem
107
- key={status.value}
108
- value={status.value}
109
- onSelect={(value) => {
110
- setSelectedStatus(statuses.find((priority) => priority.value === value) || null)
111
- setOpenPopover(false)
112
- }}
113
- >
114
- {status.label}
115
- </CommandPaletteItem>
116
- ))}
117
- </CommandPaletteGroup>
118
- </CommandPaletteList>
119
- </CommandPalette>
120
- </PopoverContent>
121
- </Popover>
122
- </div>
123
- )
124
- }
125
-
126
- export const WithPopover: Story = {
127
- parameters: {
128
- docs: {
129
- description: {
130
- story: 'A combobox implemented using a popover with status selection functionality.',
131
- },
132
- },
133
- },
134
- render: () => <PopoverComboboxExample />,
135
- }
136
-
137
- const DropdownMenuComboboxExample = () => {
138
- const [label, setLabel] = useState('feature')
139
- const [openDropdown, setOpenDropdown] = useState(false)
140
-
141
- return (
142
- <div className="flex items-center justify-center">
143
- <div className="flex w-full flex-col items-start justify-between rounded-md border px-4 py-3 sm:flex-row sm:items-center">
144
- <p className="text-sm font-medium leading-none">
145
- <span className="mr-2 rounded-lg bg-primary px-2 py-1 text-xs text-primary-foreground">{label}</span>
146
- <span className="text-muted-foreground">Create a new project</span>
147
- </p>
148
- <DropdownMenu open={openDropdown} onOpenChange={setOpenDropdown}>
149
- <DropdownMenuTrigger asChild>
150
- <Button variant="ghost" size="sm">
151
- <DotsHorizontalIcon />
152
- </Button>
153
- </DropdownMenuTrigger>
154
- <DropdownMenuContent align="end" className="w-[200px]">
155
- <DropdownMenuLabel>Actions</DropdownMenuLabel>
156
- <DropdownMenuGroup>
157
- <DropdownMenuItem>Assign to...</DropdownMenuItem>
158
- <DropdownMenuItem>Set due date...</DropdownMenuItem>
159
- <DropdownMenuSeparator />
160
- <DropdownMenuSub>
161
- <DropdownMenuSubTrigger>Apply label</DropdownMenuSubTrigger>
162
- <DropdownMenuSubContent className="p-0">
163
- <CommandPalette>
164
- <CommandPaletteInput placeholder="Filter label..." autoFocus={true} className="h-9" />
165
- <CommandPaletteList>
166
- <CommandPaletteEmpty>No label found.</CommandPaletteEmpty>
167
- <DropdownMenuGroup>
168
- {labels.map((label) => (
169
- <CommandPaletteItem
170
- key={label}
171
- value={label}
172
- onSelect={(value) => {
173
- setLabel(value)
174
- setOpenDropdown(false)
175
- }}
176
- >
177
- {label}
178
- </CommandPaletteItem>
179
- ))}
180
- </DropdownMenuGroup>
181
- </CommandPaletteList>
182
- </CommandPalette>
183
- </DropdownMenuSubContent>
184
- </DropdownMenuSub>
185
- <DropdownMenuSeparator />
186
- <DropdownMenuItem className="text-red-600">
187
- Delete
188
- <DropdownMenuShortcut>⌘⌫</DropdownMenuShortcut>
189
- </DropdownMenuItem>
190
- </DropdownMenuGroup>
191
- </DropdownMenuContent>
192
- </DropdownMenu>
193
- </div>
194
- </div>
195
- )
196
- }
197
-
198
- export const WithDropdownMenu: Story = {
199
- parameters: {
200
- docs: {
201
- description: {
202
- story: 'A combobox integrated within a dropdown menu for label selection with project management actions.',
203
- },
204
- },
205
- },
206
- render: () => <DropdownMenuComboboxExample />,
207
- }
@@ -1,79 +0,0 @@
1
- import { CaretSortIcon, CheckIcon } from '@radix-ui/react-icons'
2
-
3
- import * as React from 'react'
4
-
5
- import { Button } from '@components/ui/button/button'
6
- import {
7
- CommandPalette,
8
- CommandPaletteEmpty,
9
- CommandPaletteGroup,
10
- CommandPaletteInput,
11
- CommandPaletteItem,
12
- CommandPaletteList,
13
- } from '@components/ui/command-palette/command-palette'
14
- import { Popover, PopoverContent, PopoverTrigger } from '@components/ui/popover/popover'
15
- import { cn } from '@lib/utils'
16
-
17
- const frameworks = [
18
- {
19
- value: 'next.js',
20
- label: 'Next.js',
21
- },
22
- {
23
- value: 'sveltekit',
24
- label: 'SvelteKit',
25
- },
26
- {
27
- value: 'nuxt.js',
28
- label: 'Nuxt.js',
29
- },
30
- {
31
- value: 'remix',
32
- label: 'Remix',
33
- },
34
- {
35
- value: 'astro',
36
- label: 'Astro',
37
- },
38
- ]
39
-
40
- export function ComboboxDemo() {
41
- const [open, setOpen] = React.useState(false)
42
- const [value, setValue] = React.useState('')
43
-
44
- return (
45
- <Popover open={open} onOpenChange={setOpen}>
46
- <PopoverTrigger asChild>
47
- <Button variant="outline" aria-expanded={open} className="w-[200px] justify-between">
48
- {value ? frameworks.find((framework) => framework.value === value)?.label : 'Select framework...'}
49
- <CaretSortIcon className="ml-2 h-4 w-4 shrink-0 opacity-50" />
50
- </Button>
51
- </PopoverTrigger>
52
- <PopoverContent className="w-[200px] p-0">
53
- <CommandPalette>
54
- <CommandPaletteInput placeholder="Search framework..." className="h-9" />
55
- <CommandPaletteList>
56
- <CommandPaletteEmpty>No framework found.</CommandPaletteEmpty>
57
- <CommandPaletteGroup>
58
- {frameworks.map((framework) => (
59
- <CommandPaletteItem
60
- key={framework.value}
61
- value={framework.value}
62
- onSelect={(currentValue) => {
63
- setValue(currentValue === value ? '' : currentValue)
64
- setOpen(false)
65
- }}
66
- >
67
- {framework.label}
68
- <CheckIcon
69
- className={cn('ml-auto h-4 w-4', value === framework.value ? 'opacity-100' : 'opacity-0')}
70
- />
71
- </CommandPaletteItem>
72
- ))}
73
- </CommandPaletteGroup>
74
- </CommandPaletteList>
75
- </CommandPalette>
76
- </PopoverContent>
77
- </Popover>
78
- )
79
- }