@uselets/ui 0.6.0 → 1.0.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 (117) hide show
  1. package/README.md +70 -18
  2. package/dist/components/alert-dialog.d.ts +5 -3
  3. package/dist/components/alert-dialog.js +1 -1
  4. package/dist/components/alert-dialog.js.map +1 -1
  5. package/dist/components/anchor.js +1 -1
  6. package/dist/components/anchor.js.map +1 -1
  7. package/dist/components/avatar.d.ts +1 -1
  8. package/dist/components/avatar.js +1 -1
  9. package/dist/components/avatar.js.map +1 -1
  10. package/dist/components/badge.js +1 -1
  11. package/dist/components/badge.js.map +1 -1
  12. package/dist/components/button.d.ts +7 -3
  13. package/dist/components/button.js +1 -1
  14. package/dist/components/button.js.map +1 -1
  15. package/dist/components/calendar.js +1 -1
  16. package/dist/components/calendar.js.map +1 -1
  17. package/dist/components/card.d.ts +1 -1
  18. package/dist/components/card.js +1 -1
  19. package/dist/components/card.js.map +1 -1
  20. package/dist/components/checkbox.d.ts +14 -2
  21. package/dist/components/checkbox.js +1 -1
  22. package/dist/components/checkbox.js.map +1 -1
  23. package/dist/components/combobox.d.ts +8 -1
  24. package/dist/components/combobox.js +1 -1
  25. package/dist/components/combobox.js.map +1 -1
  26. package/dist/components/date-range-picker.d.ts +120 -0
  27. package/dist/components/date-range-picker.js +2 -0
  28. package/dist/components/date-range-picker.js.map +1 -0
  29. package/dist/components/grid.d.ts +37 -0
  30. package/dist/components/grid.js +2 -0
  31. package/dist/components/grid.js.map +1 -0
  32. package/dist/components/group.d.ts +2 -2
  33. package/dist/components/group.js +1 -1
  34. package/dist/components/group.js.map +1 -1
  35. package/dist/components/heading.js +1 -1
  36. package/dist/components/heading.js.map +1 -1
  37. package/dist/components/label.js +1 -1
  38. package/dist/components/label.js.map +1 -1
  39. package/dist/components/list.js +1 -1
  40. package/dist/components/list.js.map +1 -1
  41. package/dist/components/native-select.d.ts +1 -1
  42. package/dist/components/native-select.js +1 -1
  43. package/dist/components/native-select.js.map +1 -1
  44. package/dist/components/pagination.js +1 -1
  45. package/dist/components/pagination.js.map +1 -1
  46. package/dist/components/radio-group.d.ts +23 -2
  47. package/dist/components/radio-group.js +1 -1
  48. package/dist/components/radio-group.js.map +1 -1
  49. package/dist/components/select.d.ts +1 -1
  50. package/dist/components/select.js +1 -1
  51. package/dist/components/select.js.map +1 -1
  52. package/dist/components/sidebar.d.ts +1 -1
  53. package/dist/components/sidebar.js +1 -1
  54. package/dist/components/sidebar.js.map +1 -1
  55. package/dist/components/simple-grid.d.ts +24 -0
  56. package/dist/components/simple-grid.js +2 -0
  57. package/dist/components/simple-grid.js.map +1 -0
  58. package/dist/components/spinner.d.ts +1 -1
  59. package/dist/components/spinner.js +1 -1
  60. package/dist/components/spinner.js.map +1 -1
  61. package/dist/components/stack.d.ts +2 -2
  62. package/dist/components/stack.js +1 -1
  63. package/dist/components/stack.js.map +1 -1
  64. package/dist/components/switch.d.ts +11 -1
  65. package/dist/components/switch.js +1 -1
  66. package/dist/components/switch.js.map +1 -1
  67. package/dist/components/tabs.d.ts +5 -2
  68. package/dist/components/tabs.js +1 -1
  69. package/dist/components/tabs.js.map +1 -1
  70. package/dist/components/text.js +1 -1
  71. package/dist/components/text.js.map +1 -1
  72. package/dist/components/toggle-group.d.ts +2 -0
  73. package/dist/components/toggle-group.js +1 -1
  74. package/dist/components/toggle-group.js.map +1 -1
  75. package/dist/components/toggle.d.ts +4 -2
  76. package/dist/components/toggle.js +1 -1
  77. package/dist/components/toggle.js.map +1 -1
  78. package/dist/components/visibility.d.ts +25 -0
  79. package/dist/components/visibility.js +2 -0
  80. package/dist/components/visibility.js.map +1 -0
  81. package/dist/hooks/use-breakpoint-value.d.ts +9 -0
  82. package/dist/hooks/use-breakpoint-value.js +2 -0
  83. package/dist/hooks/use-breakpoint-value.js.map +1 -0
  84. package/dist/hooks/use-breakpoint-value.spec.d.ts +1 -0
  85. package/dist/hooks/use-breakpoint-value.spec.js +15 -0
  86. package/dist/hooks/use-breakpoint-value.spec.js.map +1 -0
  87. package/dist/hooks/use-breakpoint.d.ts +9 -0
  88. package/dist/hooks/use-breakpoint.js +2 -0
  89. package/dist/hooks/use-breakpoint.js.map +1 -0
  90. package/dist/hooks/use-breakpoint.spec.d.ts +1 -0
  91. package/dist/hooks/use-breakpoint.spec.js +2 -0
  92. package/dist/hooks/use-breakpoint.spec.js.map +1 -0
  93. package/dist/index.d.ts +10 -4
  94. package/dist/index.js +1 -1
  95. package/dist/lib/button.d.ts +12 -8
  96. package/dist/lib/button.js +1 -1
  97. package/dist/lib/button.js.map +1 -1
  98. package/dist/lib/color.d.ts +20 -0
  99. package/dist/lib/color.js +2 -0
  100. package/dist/lib/color.js.map +1 -0
  101. package/dist/skills/uselets-ui/SKILL.md +73 -0
  102. package/dist/skills/uselets-ui/agents/openai.yaml +4 -0
  103. package/dist/skills/uselets-ui/references/component-catalog.md +232 -0
  104. package/dist/skills/uselets-ui/references/package-guide.md +299 -0
  105. package/dist/skills/uselets-ui/scripts/print-public-api.mjs +174 -0
  106. package/dist/styles.css +1 -1
  107. package/dist/themes/gomax.css +1 -1
  108. package/dist/themes/max.css +1 -1
  109. package/package.json +1 -1
  110. package/skills/uselets-ui/SKILL.md +73 -0
  111. package/skills/uselets-ui/agents/openai.yaml +4 -0
  112. package/skills/uselets-ui/references/component-catalog.md +232 -0
  113. package/skills/uselets-ui/references/package-guide.md +299 -0
  114. package/skills/uselets-ui/scripts/print-public-api.mjs +174 -0
  115. package/dist/components/sheet.d.ts +0 -61
  116. package/dist/components/sheet.js +0 -2
  117. package/dist/components/sheet.js.map +0 -1
@@ -0,0 +1,174 @@
1
+ #!/usr/bin/env node
2
+
3
+ import fs from 'node:fs'
4
+ import path from 'node:path'
5
+
6
+ function exists(targetPath) {
7
+ return fs.existsSync(targetPath)
8
+ }
9
+
10
+ function read(filePath) {
11
+ return fs.readFileSync(filePath, 'utf8')
12
+ }
13
+
14
+ function listFiles(dirPath, extension) {
15
+ return fs
16
+ .readdirSync(dirPath)
17
+ .filter((file) => file.endsWith(extension))
18
+ .sort((left, right) => left.localeCompare(right))
19
+ }
20
+
21
+ function uniqueSorted(values) {
22
+ return [...new Set(values)].sort((left, right) => left.localeCompare(right))
23
+ }
24
+
25
+ function findInstalledPackageJson(startDir) {
26
+ let currentDir = path.resolve(startDir)
27
+
28
+ while (true) {
29
+ const candidate = path.join(currentDir, 'node_modules/@uselets/ui/package.json')
30
+
31
+ if (exists(candidate)) {
32
+ return candidate
33
+ }
34
+
35
+ const parentDir = path.dirname(currentDir)
36
+
37
+ if (parentDir === currentDir) {
38
+ return null
39
+ }
40
+
41
+ currentDir = parentDir
42
+ }
43
+ }
44
+
45
+ function parseNamedPart(part) {
46
+ const trimmed = part.trim()
47
+
48
+ if (!trimmed) {
49
+ return null
50
+ }
51
+
52
+ const isType = trimmed.startsWith('type ')
53
+ const withoutType = isType ? trimmed.slice(5).trim() : trimmed
54
+ const segments = withoutType.split(/\s+as\s+/i)
55
+ const name = segments[segments.length - 1].trim()
56
+
57
+ if (!name) {
58
+ return null
59
+ }
60
+
61
+ return { isType, name }
62
+ }
63
+
64
+ function collectExports(source) {
65
+ const runtime = []
66
+ const types = []
67
+
68
+ for (const match of source.matchAll(/export\s+(const|function|class|declare\s+const|declare\s+function|declare\s+class)\s+([A-Za-z0-9_]+)/g)) {
69
+ runtime.push(match[2])
70
+ }
71
+
72
+ for (const match of source.matchAll(/export\s+(type|interface)\s+([A-Za-z0-9_]+)/g)) {
73
+ types.push(match[2])
74
+ }
75
+
76
+ for (const match of source.matchAll(/export\s+(type\s+)?\{([\s\S]*?)\}\s*(?:from\s+['"][^'"]+['"])?/g)) {
77
+ const blockIsTypeOnly = Boolean(match[1])
78
+ const parts = match[2].split(',').map((part) => parseNamedPart(part)).filter(Boolean)
79
+
80
+ for (const part of parts) {
81
+ if (blockIsTypeOnly || part.isType) {
82
+ types.push(part.name)
83
+ } else {
84
+ runtime.push(part.name)
85
+ }
86
+ }
87
+ }
88
+
89
+ return {
90
+ runtime: uniqueSorted(runtime),
91
+ types: uniqueSorted(types)
92
+ }
93
+ }
94
+
95
+ function buildModuleList(dirPath, extension, kind, packageRoot) {
96
+ if (!exists(dirPath)) {
97
+ return []
98
+ }
99
+
100
+ return listFiles(dirPath, extension).map((fileName) => {
101
+ const source = read(path.join(dirPath, fileName))
102
+ const moduleName = fileName.replace(new RegExp(`${extension}$`), '')
103
+
104
+ return {
105
+ kind,
106
+ module: moduleName,
107
+ source: path.relative(packageRoot, path.join(dirPath, fileName)),
108
+ subpath: getPublicSubpath(kind, moduleName),
109
+ ...collectExports(source)
110
+ }
111
+ })
112
+ }
113
+
114
+ function getPublicSubpath(kind, moduleName) {
115
+ if (kind === 'hooks') {
116
+ return `@uselets/ui/hooks/${moduleName}`
117
+ }
118
+
119
+ if (kind === 'lib') {
120
+ return moduleName === 'utils' ? '@uselets/ui/utils' : `@uselets/ui/lib/${moduleName}`
121
+ }
122
+
123
+ return `@uselets/ui/${moduleName}`
124
+ }
125
+
126
+ function printModuleSection(title, modules) {
127
+ console.log(`\n## ${title}\n`)
128
+
129
+ for (const moduleInfo of modules) {
130
+ console.log(`### ${moduleInfo.module}`)
131
+ console.log(`- source: \`${moduleInfo.source}\``)
132
+ console.log(`- subpath: \`${moduleInfo.subpath}\``)
133
+ console.log(`- runtime exports: ${moduleInfo.runtime.length > 0 ? `\`${moduleInfo.runtime.join('`, `')}\`` : '_none_'}`)
134
+ console.log(`- type exports: ${moduleInfo.types.length > 0 ? `\`${moduleInfo.types.join('`, `')}\`` : '_none_'}`)
135
+ console.log('')
136
+ }
137
+ }
138
+
139
+ const packageJsonPath = findInstalledPackageJson(process.cwd())
140
+
141
+ if (!packageJsonPath) {
142
+ console.log('# @uselets/ui public API\n')
143
+ console.log('No installed `@uselets/ui` package was found from the current working directory.')
144
+ console.log('Install the package first or use the bundled references in this skill as a snapshot.')
145
+ process.exit(0)
146
+ }
147
+
148
+ const packageRoot = path.dirname(packageJsonPath)
149
+ const packageJson = JSON.parse(read(packageJsonPath))
150
+ const distRoot = path.join(packageRoot, 'dist')
151
+
152
+ const componentModules = buildModuleList(path.join(distRoot, 'components'), '.d.ts', 'components', packageRoot)
153
+ const hookModules = buildModuleList(path.join(distRoot, 'hooks'), '.d.ts', 'hooks', packageRoot)
154
+ const libModules = buildModuleList(path.join(distRoot, 'lib'), '.d.ts', 'lib', packageRoot)
155
+
156
+ console.log('# @uselets/ui public API\n')
157
+ console.log(`- package root: \`${packageRoot}\``)
158
+ console.log(`- package version: \`${packageJson.version ?? 'unknown'}\``)
159
+ console.log('- barrel: `@uselets/ui`')
160
+ console.log('- component subpaths: `@uselets/ui/*`')
161
+ console.log('- hook subpaths: `@uselets/ui/hooks/*`')
162
+ console.log('- utility helpers: `@uselets/ui/utils`')
163
+ console.log('- styles: `@uselets/ui/styles.css` (legacy Max theme alias)')
164
+ console.log('- Max theme: `@uselets/ui/themes/max.css`')
165
+ console.log('- Gomax theme: `@uselets/ui/themes/gomax.css`')
166
+ console.log('- PostCSS preset: `@uselets/ui/postcss.config`')
167
+ console.log('')
168
+ console.log(`- components: ${componentModules.length}`)
169
+ console.log(`- hooks: ${hookModules.length}`)
170
+ console.log(`- lib modules: ${libModules.length}`)
171
+
172
+ printModuleSection('Components', componentModules)
173
+ printModuleSection('Hooks', hookModules)
174
+ printModuleSection('Lib', libModules)
@@ -1,61 +0,0 @@
1
- import { n as __name } from "../chunk-CHh1Zzun.js";
2
- import { Dialog } from "radix-ui";
3
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
- import * as React from "react";
5
-
6
- //#region src/components/sheet.d.ts
7
- type SheetProps = React.ComponentProps<typeof Dialog.Root>;
8
- type SheetTriggerProps = React.ComponentProps<typeof Dialog.Trigger>;
9
- type SheetCloseProps = React.ComponentProps<typeof Dialog.Close>;
10
- type SheetPortalProps = React.ComponentProps<typeof Dialog.Portal>;
11
- type SheetOverlayProps = React.ComponentProps<typeof Dialog.Overlay>;
12
- type SheetContentProps = React.ComponentProps<typeof Dialog.Content> & {
13
- side?: 'top' | 'right' | 'bottom' | 'left';
14
- showCloseButton?: boolean;
15
- };
16
- type SheetHeaderProps = React.ComponentProps<'div'>;
17
- type SheetFooterProps = React.ComponentProps<'div'>;
18
- type SheetTitleProps = React.ComponentProps<typeof Dialog.Title>;
19
- type SheetDescriptionProps = React.ComponentProps<typeof Dialog.Description>;
20
- declare function Sheet({
21
- ...props
22
- }: SheetProps): _$react_jsx_runtime0.JSX.Element;
23
- declare function SheetTrigger({
24
- ...props
25
- }: SheetTriggerProps): _$react_jsx_runtime0.JSX.Element;
26
- declare function SheetClose({
27
- ...props
28
- }: SheetCloseProps): _$react_jsx_runtime0.JSX.Element;
29
- declare function SheetPortal({
30
- ...props
31
- }: SheetPortalProps): _$react_jsx_runtime0.JSX.Element;
32
- declare function SheetOverlay({
33
- className,
34
- ...props
35
- }: SheetOverlayProps): _$react_jsx_runtime0.JSX.Element;
36
- declare function SheetContent({
37
- className,
38
- children,
39
- side,
40
- showCloseButton,
41
- ...props
42
- }: SheetContentProps): _$react_jsx_runtime0.JSX.Element;
43
- declare function SheetHeader({
44
- className,
45
- ...props
46
- }: SheetHeaderProps): _$react_jsx_runtime0.JSX.Element;
47
- declare function SheetFooter({
48
- className,
49
- ...props
50
- }: SheetFooterProps): _$react_jsx_runtime0.JSX.Element;
51
- declare function SheetTitle({
52
- className,
53
- ...props
54
- }: SheetTitleProps): _$react_jsx_runtime0.JSX.Element;
55
- declare function SheetDescription({
56
- className,
57
- ...props
58
- }: SheetDescriptionProps): _$react_jsx_runtime0.JSX.Element;
59
- //#endregion
60
- export { Sheet, SheetClose, SheetCloseProps, SheetContent, SheetContentProps, SheetDescription, SheetDescriptionProps, SheetFooter, SheetFooterProps, SheetHeader, SheetHeaderProps, SheetOverlay, SheetOverlayProps, SheetPortal, SheetPortalProps, SheetProps, SheetTitle, SheetTitleProps, SheetTrigger, SheetTriggerProps };
61
- //# sourceMappingURL=sheet.d.ts.map
@@ -1,2 +0,0 @@
1
- import"../chunk-CHh1Zzun.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{IconX as n}from"@tabler/icons-react";import{Dialog as r}from"radix-ui";import{jsx as i,jsxs as a}from"react/jsx-runtime";function Sheet({...e}){return i(r.Root,{"data-slot":`sheet`,...e})}function SheetTrigger({...e}){return i(r.Trigger,{"data-slot":`sheet-trigger`,...e})}function SheetClose({...e}){return i(r.Close,{"data-slot":`sheet-close`,...e})}function SheetPortal({...e}){return i(r.Portal,{"data-slot":`sheet-portal`,...e})}function SheetOverlay({className:t,...n}){return i(r.Overlay,{"data-slot":`sheet-overlay`,className:e(`fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,t),...n})}function SheetContent({className:o,children:s,side:c=`right`,showCloseButton:l=!0,...u}){return a(SheetPortal,{children:[i(SheetOverlay,{}),a(r.Content,{"data-slot":`sheet-content`,"data-side":c,className:e(`fixed z-50 flex flex-col gap-4 bg-background bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10`,o),...u,children:[s,l&&i(r.Close,{"data-slot":`sheet-close`,asChild:!0,children:a(t,{variant:`ghost`,className:`absolute top-3 right-3`,size:`icon-sm`,children:[i(n,{}),i(`span`,{className:`sr-only`,children:`Close`})]})})]})]})}function SheetHeader({className:t,...n}){return i(`div`,{"data-slot":`sheet-header`,className:e(`flex flex-col gap-0.5 p-4`,t),...n})}function SheetFooter({className:t,...n}){return i(`div`,{"data-slot":`sheet-footer`,className:e(`mt-auto flex flex-col gap-2 p-4`,t),...n})}function SheetTitle({className:t,...n}){return i(r.Title,{"data-slot":`sheet-title`,className:e(`text-base font-medium text-foreground`,t),...n})}function SheetDescription({className:t,...n}){return i(r.Description,{"data-slot":`sheet-description`,className:e(`text-sm text-muted-foreground`,t),...n})}export{Sheet,SheetClose,SheetContent,SheetDescription,SheetFooter,SheetHeader,SheetOverlay,SheetPortal,SheetTitle,SheetTrigger};
2
- //# sourceMappingURL=sheet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sheet.js","names":["SheetPrimitive"],"sources":["../../src/components/sheet.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { IconX } from '@tabler/icons-react'\nimport { Dialog as SheetPrimitive } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\nexport type SheetProps = React.ComponentProps<typeof SheetPrimitive.Root>\n\nexport type SheetTriggerProps = React.ComponentProps<typeof SheetPrimitive.Trigger>\n\nexport type SheetCloseProps = React.ComponentProps<typeof SheetPrimitive.Close>\n\nexport type SheetPortalProps = React.ComponentProps<typeof SheetPrimitive.Portal>\n\nexport type SheetOverlayProps = React.ComponentProps<typeof SheetPrimitive.Overlay>\n\nexport type SheetContentProps = React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left'\n showCloseButton?: boolean\n}\n\nexport type SheetHeaderProps = React.ComponentProps<'div'>\n\nexport type SheetFooterProps = React.ComponentProps<'div'>\n\nexport type SheetTitleProps = React.ComponentProps<typeof SheetPrimitive.Title>\n\nexport type SheetDescriptionProps = React.ComponentProps<typeof SheetPrimitive.Description>\n\nfunction Sheet({ ...props }: SheetProps) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({ ...props }: SheetTriggerProps) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({ ...props }: SheetCloseProps) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({ ...props }: SheetPortalProps) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({ className, ...props }: SheetOverlayProps) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({ className, children, side = 'right', showCloseButton = true, ...props }: SheetContentProps) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n 'fixed z-50 flex flex-col gap-4 bg-background bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close data-slot=\"sheet-close\" asChild>\n <Button variant=\"ghost\" className=\"absolute top-3 right-3\" size=\"icon-sm\">\n <IconX />\n <span className=\"sr-only\">Close</span>\n </Button>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: SheetHeaderProps) {\n return <div data-slot=\"sheet-header\" className={cn('flex flex-col gap-0.5 p-4', className)} {...props} />\n}\n\nfunction SheetFooter({ className, ...props }: SheetFooterProps) {\n return <div data-slot=\"sheet-footer\" className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} />\n}\n\nfunction SheetTitle({ className, ...props }: SheetTitleProps) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-base font-medium text-foreground', className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({ className, ...props }: SheetDescriptionProps) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetPortal,\n SheetTitle,\n SheetTrigger\n}\n"],"mappings":"uOA+BA,SAAS,MAAM,CAAE,GAAG,GAAqB,CACvC,OAAO,EAACA,EAAe,KAAhB,CAAqB,YAAU,QAAQ,GAAI,EAAS,CAAA,CAG7D,SAAS,aAAa,CAAE,GAAG,GAA4B,CACrD,OAAO,EAACA,EAAe,QAAhB,CAAwB,YAAU,gBAAgB,GAAI,EAAS,CAAA,CAGxE,SAAS,WAAW,CAAE,GAAG,GAA0B,CACjD,OAAO,EAACA,EAAe,MAAhB,CAAsB,YAAU,cAAc,GAAI,EAAS,CAAA,CAGpE,SAAS,YAAY,CAAE,GAAG,GAA2B,CACnD,OAAO,EAACA,EAAe,OAAhB,CAAuB,YAAU,eAAe,GAAI,EAAS,CAAA,CAGtE,SAAS,aAAa,CAAE,YAAW,GAAG,GAA4B,CAChE,OACE,EAACA,EAAe,QAAhB,CACE,YAAU,gBACV,UAAW,EACT,gLACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,aAAa,CAAE,YAAW,WAAU,OAAO,QAAS,kBAAkB,GAAM,GAAG,GAA4B,CAClH,OACE,EAAC,YAAD,CAAA,SAAA,CACE,EAAC,aAAD,EAAgB,CAAA,CAChB,EAACA,EAAe,QAAhB,CACE,YAAU,gBACV,YAAW,EACX,UAAW,EACT,ymCACA,EACD,CACD,GAAI,WAPN,CASG,EACA,GACC,EAACA,EAAe,MAAhB,CAAsB,YAAU,cAAc,QAAA,YAC5C,EAAC,EAAD,CAAQ,QAAQ,QAAQ,UAAU,yBAAyB,KAAK,mBAAhE,CACE,EAAC,EAAD,EAAS,CAAA,CACT,EAAC,OAAD,CAAM,UAAU,mBAAU,QAAY,CAAA,CAC/B,GACY,CAAA,CAEF,GACb,CAAA,CAAA,CAIlB,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OAAO,EAAC,MAAD,CAAK,YAAU,eAAe,UAAW,EAAG,4BAA6B,EAAU,CAAE,GAAI,EAAS,CAAA,CAG3G,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OAAO,EAAC,MAAD,CAAK,YAAU,eAAe,UAAW,EAAG,kCAAmC,EAAU,CAAE,GAAI,EAAS,CAAA,CAGjH,SAAS,WAAW,CAAE,YAAW,GAAG,GAA0B,CAC5D,OACE,EAACA,EAAe,MAAhB,CACE,YAAU,cACV,UAAW,EAAG,wCAAyC,EAAU,CACjE,GAAI,EACJ,CAAA,CAIN,SAAS,iBAAiB,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAACA,EAAe,YAAhB,CACE,YAAU,oBACV,UAAW,EAAG,gCAAiC,EAAU,CACzD,GAAI,EACJ,CAAA"}