@dofe/sso-ui 0.1.1 → 0.1.3
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/README.md +67 -75
- package/dist/components/carousel.d.ts +7 -7
- package/dist/components/carousel.d.ts.map +1 -1
- package/dist/components/carousel.js +26 -26
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/checkbox.d.ts +2 -2
- package/dist/components/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox.js +5 -5
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/command.d.ts +4 -4
- package/dist/components/command.d.ts.map +1 -1
- package/dist/components/command.js +13 -13
- package/dist/components/command.js.map +1 -1
- package/dist/components/team-selector.d.ts +36 -0
- package/dist/components/team-selector.d.ts.map +1 -0
- package/dist/components/team-selector.js +28 -0
- package/dist/components/team-selector.js.map +1 -0
- package/dist/components/tenant-selector.d.ts +38 -0
- package/dist/components/tenant-selector.d.ts.map +1 -0
- package/dist/components/tenant-selector.js +38 -0
- package/dist/components/tenant-selector.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,39 +26,39 @@
|
|
|
26
26
|
|
|
27
27
|
## 包含的组件
|
|
28
28
|
|
|
29
|
-
| 组件
|
|
30
|
-
|
|
|
31
|
-
| `Button`
|
|
32
|
-
| `Dialog`
|
|
33
|
-
| `Form`
|
|
34
|
-
| `Input`
|
|
35
|
-
| `Select`
|
|
36
|
-
| `Table`
|
|
37
|
-
| `Tabs`
|
|
38
|
-
| `Toast/Sonner`
|
|
39
|
-
| `Command`
|
|
40
|
-
| `Calendar`
|
|
41
|
-
| `Checkbox`
|
|
42
|
-
| `Switch`
|
|
43
|
-
| `Avatar`
|
|
44
|
-
| `Badge`
|
|
45
|
-
| `Card`
|
|
46
|
-
| `DropdownMenu`
|
|
47
|
-
| `Popover`
|
|
48
|
-
| `Progress`
|
|
49
|
-
| `Separator`
|
|
50
|
-
| `Skeleton`
|
|
51
|
-
| `Slider`
|
|
52
|
-
| `Tooltip`
|
|
53
|
-
| `Accordion`
|
|
54
|
-
| `Alert`
|
|
55
|
-
| `Label`
|
|
56
|
-
| `Textarea`
|
|
57
|
-
| `ScrollArea`
|
|
58
|
-
| `Sheet`
|
|
59
|
-
| `Sidebar`
|
|
60
|
-
| `Carousel`
|
|
61
|
-
| `PasswordStrength` | 密码强度指示器
|
|
29
|
+
| 组件 | 描述 |
|
|
30
|
+
| ------------------ | ---------------------------- |
|
|
31
|
+
| `Button` | 按钮(多种变体) |
|
|
32
|
+
| `Dialog` | 对话框 |
|
|
33
|
+
| `Form` | 表单(集成 react-hook-form) |
|
|
34
|
+
| `Input` | 输入框 |
|
|
35
|
+
| `Select` | 选择器 |
|
|
36
|
+
| `Table` | 表格 |
|
|
37
|
+
| `Tabs` | 标签页 |
|
|
38
|
+
| `Toast/Sonner` | 消息提示 |
|
|
39
|
+
| `Command` | 命令面板(cmdk) |
|
|
40
|
+
| `Calendar` | 日历 |
|
|
41
|
+
| `Checkbox` | 复选框 |
|
|
42
|
+
| `Switch` | 开关 |
|
|
43
|
+
| `Avatar` | 头像 |
|
|
44
|
+
| `Badge` | 标签 |
|
|
45
|
+
| `Card` | 卡片 |
|
|
46
|
+
| `DropdownMenu` | 下拉菜单 |
|
|
47
|
+
| `Popover` | 弹出框 |
|
|
48
|
+
| `Progress` | 进度条 |
|
|
49
|
+
| `Separator` | 分隔线 |
|
|
50
|
+
| `Skeleton` | 骨架屏 |
|
|
51
|
+
| `Slider` | 滑块 |
|
|
52
|
+
| `Tooltip` | 提示 |
|
|
53
|
+
| `Accordion` | 折叠面板 |
|
|
54
|
+
| `Alert` | 警告框 |
|
|
55
|
+
| `Label` | 标签 |
|
|
56
|
+
| `Textarea` | 文本域 |
|
|
57
|
+
| `ScrollArea` | 滚动区域 |
|
|
58
|
+
| `Sheet` | 侧边抽屉 |
|
|
59
|
+
| `Sidebar` | 侧边栏 |
|
|
60
|
+
| `Carousel` | 轮播 |
|
|
61
|
+
| `PasswordStrength` | 密码强度指示器 |
|
|
62
62
|
|
|
63
63
|
## 使用示例
|
|
64
64
|
|
|
@@ -178,54 +178,46 @@ pnpm --filter @repo/ui storybook
|
|
|
178
178
|
|
|
179
179
|
### 发布命令
|
|
180
180
|
|
|
181
|
-
|
|
182
|
-
# 进入 ui 目录
|
|
183
|
-
cd sso.dofe.ai/packages/ui
|
|
181
|
+
#### 从根目录发布(推荐)
|
|
184
182
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
# 发布 minor 版本 (0.1.0 → 0.2.0)
|
|
189
|
-
pnpm release:minor
|
|
183
|
+
```bash
|
|
184
|
+
# 在 sso.dofe.ai 根目录执行
|
|
190
185
|
|
|
191
|
-
#
|
|
192
|
-
pnpm release:
|
|
186
|
+
# 发布单个包
|
|
187
|
+
pnpm release:ui # 发布 @dofe/sso-ui
|
|
188
|
+
pnpm release:ui:otp # 带 OTP 发布
|
|
193
189
|
|
|
194
|
-
#
|
|
195
|
-
pnpm
|
|
190
|
+
# 批量发布所有包
|
|
191
|
+
pnpm release:all # 发布 contracts、hooks、ui
|
|
192
|
+
pnpm release:all:otp # 带 OTP 批量发布
|
|
196
193
|
```
|
|
197
194
|
|
|
198
|
-
|
|
195
|
+
#### 从包目录发布
|
|
199
196
|
|
|
200
197
|
```bash
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
执行步骤:
|
|
205
|
-
|
|
206
|
-
1. `npm version patch` - 升级版本号
|
|
207
|
-
2. `pnpm run prepack` - 修改 package.json(名称、移除 workspace 依赖)
|
|
208
|
-
3. `npm publish --access public` - 发布到 npmjs
|
|
209
|
-
4. `pnpm run postpack` - 恢复 package.json 原始状态
|
|
210
|
-
|
|
211
|
-
### 手动发布步骤(推荐)
|
|
212
|
-
|
|
213
|
-
由于 npm lifecycle hooks 的复杂性,建议使用以下手动流程:
|
|
198
|
+
# 进入 ui 目录
|
|
199
|
+
cd sso.dofe.ai/packages/ui
|
|
214
200
|
|
|
215
|
-
|
|
216
|
-
# 1. 构建包
|
|
201
|
+
# 手动发布流程
|
|
217
202
|
pnpm build
|
|
218
|
-
|
|
219
|
-
# 2. 运行 prepack 修改 package.json
|
|
220
203
|
node scripts/prepack.mjs
|
|
221
|
-
|
|
222
|
-
# 3. 发布(使用 --ignore-scripts 避免重复运行 lifecycle hooks)
|
|
223
204
|
npm publish --access public --ignore-scripts --otp=<你的OTP码>
|
|
224
|
-
|
|
225
|
-
# 4. 运行 postpack 恢复 package.json
|
|
226
205
|
node scripts/postpack.mjs
|
|
227
206
|
```
|
|
228
207
|
|
|
208
|
+
### 从根目录发布流程详解
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
pnpm release:ui:otp
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
执行步骤:
|
|
215
|
+
|
|
216
|
+
1. 进入 `packages/ui` 目录
|
|
217
|
+
2. 运行 `prepack` 修改 package.json(名称、移除 workspace 依赖)
|
|
218
|
+
3. 执行 `npm publish --access public --ignore-scripts --otp`
|
|
219
|
+
4. 运行 `postpack` 恢复 package.json 原始状态
|
|
220
|
+
|
|
229
221
|
### 前置条件
|
|
230
222
|
|
|
231
223
|
1. npm 账户登录:
|
|
@@ -257,14 +249,14 @@ node scripts/postpack.mjs
|
|
|
257
249
|
|
|
258
250
|
### 导出路径
|
|
259
251
|
|
|
260
|
-
| 导出路径
|
|
261
|
-
|
|
|
262
|
-
| `@dofe/sso-ui`
|
|
263
|
-
| `@dofe/sso-ui/globals.css`
|
|
264
|
-
| `@dofe/sso-ui/postcss.config` | PostCSS 配置
|
|
265
|
-
| `@dofe/sso-ui/components/*`
|
|
266
|
-
| `@dofe/sso-ui/lib/*`
|
|
267
|
-
| `@dofe/sso-ui/hooks/*`
|
|
252
|
+
| 导出路径 | 内容 |
|
|
253
|
+
| ----------------------------- | -------------- |
|
|
254
|
+
| `@dofe/sso-ui` | 所有组件 |
|
|
255
|
+
| `@dofe/sso-ui/globals.css` | 全局样式 |
|
|
256
|
+
| `@dofe/sso-ui/postcss.config` | PostCSS 配置 |
|
|
257
|
+
| `@dofe/sso-ui/components/*` | 单个组件 |
|
|
258
|
+
| `@dofe/sso-ui/lib/*` | 工具函数 |
|
|
259
|
+
| `@dofe/sso-ui/hooks/*` | 组件内部 hooks |
|
|
268
260
|
|
|
269
261
|
### 常见问题
|
|
270
262
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import useEmblaCarousel, { type UseEmblaCarouselType } from
|
|
3
|
-
import { Button } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';
|
|
3
|
+
import { Button } from './button';
|
|
4
4
|
type CarouselApi = UseEmblaCarouselType[1];
|
|
5
5
|
type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
|
|
6
6
|
type CarouselOptions = UseCarouselParameters[0];
|
|
@@ -8,12 +8,12 @@ type CarouselPlugin = UseCarouselParameters[1];
|
|
|
8
8
|
type CarouselProps = {
|
|
9
9
|
opts?: CarouselOptions;
|
|
10
10
|
plugins?: CarouselPlugin;
|
|
11
|
-
orientation?:
|
|
11
|
+
orientation?: 'horizontal' | 'vertical';
|
|
12
12
|
setApi?: (api: CarouselApi) => void;
|
|
13
13
|
};
|
|
14
|
-
declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: React.ComponentProps<
|
|
15
|
-
declare function CarouselContent({ className, ...props }: React.ComponentProps<
|
|
16
|
-
declare function CarouselItem({ className, ...props }: React.ComponentProps<
|
|
14
|
+
declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: React.ComponentProps<'div'> & CarouselProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
declare function CarouselContent({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
declare function CarouselItem({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
declare function CarouselPrevious({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
|
|
18
18
|
declare function CarouselNext({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
|
|
19
19
|
export { type CarouselApi, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../src/components/carousel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../src/components/carousel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,gBAAgB,EAAE,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAInF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,KAAK,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AACjE,KAAK,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAChD,KAAK,cAAc,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAE/C,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACrC,CAAC;AAuBF,iBAAS,QAAQ,CAAC,EAChB,WAA0B,EAC1B,IAAI,EACJ,MAAM,EACN,OAAO,EACP,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,aAAa,2CA+E7C;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAW5E;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAgBzE;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,OAAmB,EACnB,IAAa,EACb,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,2CAuBrC;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,OAAmB,EACnB,IAAa,EACb,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,2CAuBrC;AAED,OAAO,EACL,KAAK,WAAW,EAChB,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,CAAC"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from
|
|
4
|
-
import useEmblaCarousel from
|
|
5
|
-
import { ArrowLeft, ArrowRight } from
|
|
6
|
-
import { cn } from
|
|
7
|
-
import { Button } from
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import useEmblaCarousel from 'embla-carousel-react';
|
|
5
|
+
import { ArrowLeft, ArrowRight } from 'lucide-react';
|
|
6
|
+
import { cn } from '../lib/utils';
|
|
7
|
+
import { Button } from './button';
|
|
8
8
|
const CarouselContext = React.createContext(null);
|
|
9
9
|
function useCarousel() {
|
|
10
10
|
const context = React.useContext(CarouselContext);
|
|
11
11
|
if (!context) {
|
|
12
|
-
throw new Error(
|
|
12
|
+
throw new Error('useCarousel must be used within a <Carousel />');
|
|
13
13
|
}
|
|
14
14
|
return context;
|
|
15
15
|
}
|
|
16
|
-
function Carousel({ orientation =
|
|
16
|
+
function Carousel({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }) {
|
|
17
17
|
const [carouselRef, api] = useEmblaCarousel({
|
|
18
18
|
...opts,
|
|
19
|
-
axis: orientation ===
|
|
19
|
+
axis: orientation === 'horizontal' ? 'x' : 'y',
|
|
20
20
|
}, plugins);
|
|
21
21
|
const [canScrollPrev, setCanScrollPrev] = React.useState(false);
|
|
22
22
|
const [canScrollNext, setCanScrollNext] = React.useState(false);
|
|
@@ -33,11 +33,11 @@ function Carousel({ orientation = "horizontal", opts, setApi, plugins, className
|
|
|
33
33
|
api?.scrollNext();
|
|
34
34
|
}, [api]);
|
|
35
35
|
const handleKeyDown = React.useCallback((event) => {
|
|
36
|
-
if (event.key ===
|
|
36
|
+
if (event.key === 'ArrowLeft') {
|
|
37
37
|
event.preventDefault();
|
|
38
38
|
scrollPrev();
|
|
39
39
|
}
|
|
40
|
-
else if (event.key ===
|
|
40
|
+
else if (event.key === 'ArrowRight') {
|
|
41
41
|
event.preventDefault();
|
|
42
42
|
scrollNext();
|
|
43
43
|
}
|
|
@@ -51,42 +51,42 @@ function Carousel({ orientation = "horizontal", opts, setApi, plugins, className
|
|
|
51
51
|
if (!api)
|
|
52
52
|
return;
|
|
53
53
|
onSelect(api);
|
|
54
|
-
api.on(
|
|
55
|
-
api.on(
|
|
54
|
+
api.on('reInit', onSelect);
|
|
55
|
+
api.on('select', onSelect);
|
|
56
56
|
return () => {
|
|
57
|
-
api?.off(
|
|
57
|
+
api?.off('select', onSelect);
|
|
58
58
|
};
|
|
59
59
|
}, [api, onSelect]);
|
|
60
60
|
return (_jsx(CarouselContext.Provider, { value: {
|
|
61
61
|
carouselRef,
|
|
62
62
|
api: api,
|
|
63
63
|
opts,
|
|
64
|
-
orientation: orientation || (opts?.axis ===
|
|
64
|
+
orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),
|
|
65
65
|
scrollPrev,
|
|
66
66
|
scrollNext,
|
|
67
67
|
canScrollPrev,
|
|
68
68
|
canScrollNext,
|
|
69
|
-
}, children: _jsx("div", { onKeyDownCapture: handleKeyDown, className: cn(
|
|
69
|
+
}, children: _jsx("div", { onKeyDownCapture: handleKeyDown, className: cn('relative', className), role: "region", "aria-roledescription": "carousel", "data-slot": "carousel", ...props, children: children }) }));
|
|
70
70
|
}
|
|
71
71
|
function CarouselContent({ className, ...props }) {
|
|
72
72
|
const { carouselRef, orientation } = useCarousel();
|
|
73
|
-
return (_jsx("div", { ref: carouselRef, className: "overflow-hidden", "data-slot": "carousel-content", children: _jsx("div", { className: cn(
|
|
73
|
+
return (_jsx("div", { ref: carouselRef, className: "overflow-hidden", "data-slot": "carousel-content", children: _jsx("div", { className: cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className), ...props }) }));
|
|
74
74
|
}
|
|
75
75
|
function CarouselItem({ className, ...props }) {
|
|
76
76
|
const { orientation } = useCarousel();
|
|
77
|
-
return (_jsx("div", { role: "group", "aria-roledescription": "slide", "data-slot": "carousel-item", className: cn(
|
|
77
|
+
return (_jsx("div", { role: "group", "aria-roledescription": "slide", "data-slot": "carousel-item", className: cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className), ...props }));
|
|
78
78
|
}
|
|
79
|
-
function CarouselPrevious({ className, variant =
|
|
79
|
+
function CarouselPrevious({ className, variant = 'outline', size = 'icon', ...props }) {
|
|
80
80
|
const { orientation, scrollPrev, canScrollPrev } = useCarousel();
|
|
81
|
-
return (_jsxs(Button, { "data-slot": "carousel-previous", variant: variant, size: size, className: cn(
|
|
82
|
-
?
|
|
83
|
-
:
|
|
81
|
+
return (_jsxs(Button, { "data-slot": "carousel-previous", variant: variant, size: size, className: cn('absolute size-8 rounded-full', orientation === 'horizontal'
|
|
82
|
+
? 'top-1/2 -left-12 -translate-y-1/2'
|
|
83
|
+
: '-top-12 left-1/2 -translate-x-1/2 rotate-90', className), disabled: !canScrollPrev, onClick: scrollPrev, ...props, children: [_jsx(ArrowLeft, {}), _jsx("span", { className: "sr-only", children: "Previous slide" })] }));
|
|
84
84
|
}
|
|
85
|
-
function CarouselNext({ className, variant =
|
|
85
|
+
function CarouselNext({ className, variant = 'outline', size = 'icon', ...props }) {
|
|
86
86
|
const { orientation, scrollNext, canScrollNext } = useCarousel();
|
|
87
|
-
return (_jsxs(Button, { "data-slot": "carousel-next", variant: variant, size: size, className: cn(
|
|
88
|
-
?
|
|
89
|
-
:
|
|
87
|
+
return (_jsxs(Button, { "data-slot": "carousel-next", variant: variant, size: size, className: cn('absolute size-8 rounded-full', orientation === 'horizontal'
|
|
88
|
+
? 'top-1/2 -right-12 -translate-y-1/2'
|
|
89
|
+
: '-bottom-12 left-1/2 -translate-x-1/2 rotate-90', className), disabled: !canScrollNext, onClick: scrollNext, ...props, children: [_jsx(ArrowRight, {}), _jsx("span", { className: "sr-only", children: "Next slide" })] }));
|
|
90
90
|
}
|
|
91
91
|
export { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, };
|
|
92
92
|
//# sourceMappingURL=carousel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../src/components/carousel.tsx"],"names":[],"mappings":"AAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../src/components/carousel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import * as CheckboxPrimitive from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
|
3
3
|
declare function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
export { Checkbox };
|
|
5
5
|
//# sourceMappingURL=checkbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAK9D,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,2CAkB7F;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import * as CheckboxPrimitive from
|
|
4
|
-
import { CheckIcon } from
|
|
5
|
-
import { cn } from
|
|
3
|
+
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
|
4
|
+
import { CheckIcon } from 'lucide-react';
|
|
5
|
+
import { cn } from '../lib/utils';
|
|
6
6
|
function Checkbox({ className, ...props }) {
|
|
7
|
-
return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn(
|
|
7
|
+
return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn('peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary 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', className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "grid place-content-center text-current transition-none", children: _jsx(CheckIcon, { className: "size-3.5" }) }) }));
|
|
8
8
|
}
|
|
9
9
|
export { Checkbox };
|
|
10
10
|
//# sourceMappingURL=checkbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAuD;IAC5F,OAAO,CACL,KAAC,iBAAiB,CAAC,IAAI,iBACX,UAAU,EACpB,SAAS,EAAE,EAAE,CACX,6eAA6e,EAC7e,SAAS,CACV,KACG,KAAK,YAET,KAAC,iBAAiB,CAAC,SAAS,iBAChB,oBAAoB,EAC9B,SAAS,EAAC,wDAAwD,YAElE,KAAC,SAAS,IAAC,SAAS,EAAC,UAAU,GAAG,GACN,GACP,CAC1B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { Command as CommandPrimitive } from
|
|
3
|
-
import { Dialog } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Command as CommandPrimitive } from 'cmdk';
|
|
3
|
+
import { Dialog } from './dialog';
|
|
4
4
|
declare function Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
declare function CommandDialog({ title, description, children, className, ...props }: React.ComponentProps<typeof Dialog> & {
|
|
6
6
|
title?: string;
|
|
@@ -13,6 +13,6 @@ declare function CommandEmpty({ ...props }: React.ComponentProps<typeof CommandP
|
|
|
13
13
|
declare function CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>): import("react/jsx-runtime").JSX.Element;
|
|
14
14
|
declare function CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>): import("react/jsx-runtime").JSX.Element;
|
|
15
15
|
declare function CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
declare function CommandShortcut({ className, ...props }: React.ComponentProps<
|
|
16
|
+
declare function CommandShortcut({ className, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };
|
|
18
18
|
//# sourceMappingURL=command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/components/command.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/components/command.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAInD,OAAO,EAAE,MAAM,EAA+D,MAAM,UAAU,CAAC;AAE/F,iBAAS,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,2CAWtF;AAED,iBAAS,aAAa,CAAC,EACrB,KAAyB,EACzB,WAA8C,EAC9C,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAcA;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAcrD;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAQ/F;AAED,iBAAS,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAQtF;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,2CAWrD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,2CAQzD;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAW/F;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAQ7E;AAED,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,CAAC"}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Command as CommandPrimitive } from
|
|
4
|
-
import { SearchIcon } from
|
|
5
|
-
import { cn } from
|
|
6
|
-
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle
|
|
3
|
+
import { Command as CommandPrimitive } from 'cmdk';
|
|
4
|
+
import { SearchIcon } from 'lucide-react';
|
|
5
|
+
import { cn } from '../lib/utils';
|
|
6
|
+
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';
|
|
7
7
|
function Command({ className, ...props }) {
|
|
8
|
-
return (_jsx(CommandPrimitive, { "data-slot": "command", className: cn(
|
|
8
|
+
return (_jsx(CommandPrimitive, { "data-slot": "command", className: cn('bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md', className), ...props }));
|
|
9
9
|
}
|
|
10
|
-
function CommandDialog({ title =
|
|
11
|
-
return (_jsxs(Dialog, { ...props, children: [_jsxs(DialogHeader, { className: "sr-only", children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { children: description })] }), _jsx(DialogContent, { className: cn(
|
|
10
|
+
function CommandDialog({ title = 'Command Palette', description = 'Search for a command to run...', children, className, ...props }) {
|
|
11
|
+
return (_jsxs(Dialog, { ...props, children: [_jsxs(DialogHeader, { className: "sr-only", children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { children: description })] }), _jsx(DialogContent, { className: cn('overflow-hidden p-0', className), children: _jsx(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", children: children }) })] }));
|
|
12
12
|
}
|
|
13
13
|
function CommandInput({ className, ...props }) {
|
|
14
|
-
return (_jsxs("div", { "data-slot": "command-input-wrapper", className: "flex h-9 items-center gap-2 border-b px-3", children: [_jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }), _jsx(CommandPrimitive.Input, { "data-slot": "command-input", className: cn(
|
|
14
|
+
return (_jsxs("div", { "data-slot": "command-input-wrapper", className: "flex h-9 items-center gap-2 border-b px-3", children: [_jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }), _jsx(CommandPrimitive.Input, { "data-slot": "command-input", className: cn('placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50', className), ...props })] }));
|
|
15
15
|
}
|
|
16
16
|
function CommandList({ className, ...props }) {
|
|
17
|
-
return (_jsx(CommandPrimitive.List, { "data-slot": "command-list", className: cn(
|
|
17
|
+
return (_jsx(CommandPrimitive.List, { "data-slot": "command-list", className: cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', className), ...props }));
|
|
18
18
|
}
|
|
19
19
|
function CommandEmpty({ ...props }) {
|
|
20
20
|
return (_jsx(CommandPrimitive.Empty, { "data-slot": "command-empty", className: "py-6 text-center text-sm", ...props }));
|
|
21
21
|
}
|
|
22
22
|
function CommandGroup({ className, ...props }) {
|
|
23
|
-
return (_jsx(CommandPrimitive.Group, { "data-slot": "command-group", className: cn(
|
|
23
|
+
return (_jsx(CommandPrimitive.Group, { "data-slot": "command-group", className: cn('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', className), ...props }));
|
|
24
24
|
}
|
|
25
25
|
function CommandSeparator({ className, ...props }) {
|
|
26
|
-
return (_jsx(CommandPrimitive.Separator, { "data-slot": "command-separator", className: cn(
|
|
26
|
+
return (_jsx(CommandPrimitive.Separator, { "data-slot": "command-separator", className: cn('bg-border -mx-1 h-px', className), ...props }));
|
|
27
27
|
}
|
|
28
28
|
function CommandItem({ className, ...props }) {
|
|
29
29
|
return (_jsx(CommandPrimitive.Item, { "data-slot": "command-item", className: cn("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", className), ...props }));
|
|
30
30
|
}
|
|
31
31
|
function CommandShortcut({ className, ...props }) {
|
|
32
|
-
return (_jsx("span", { "data-slot": "command-shortcut", className: cn(
|
|
32
|
+
return (_jsx("span", { "data-slot": "command-shortcut", className: cn('text-muted-foreground ml-auto text-xs tracking-widest', className), ...props }));
|
|
33
33
|
}
|
|
34
34
|
export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };
|
|
35
35
|
//# sourceMappingURL=command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/components/command.tsx"],"names":[],"mappings":"AAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/components/command.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team Selector Component
|
|
3
|
+
*
|
|
4
|
+
* A dropdown component for selecting teams from a list.
|
|
5
|
+
* Displays team avatar, name, and user's role in the team.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* <TeamSelector
|
|
9
|
+
* teams={teams}
|
|
10
|
+
* currentTeamId={currentTeamId}
|
|
11
|
+
* onSelect={(teamId) => handleSelect(teamId)}
|
|
12
|
+
* />
|
|
13
|
+
*/
|
|
14
|
+
export interface TeamItem {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
slug: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
avatarUrl?: string;
|
|
20
|
+
role?: 'OWNER' | 'ADMIN' | 'MEMBER';
|
|
21
|
+
status?: 'ACTIVE' | 'ARCHIVED';
|
|
22
|
+
tenantName?: string;
|
|
23
|
+
}
|
|
24
|
+
interface TeamSelectorProps {
|
|
25
|
+
teams: TeamItem[];
|
|
26
|
+
currentTeamId?: string | null;
|
|
27
|
+
onSelect?: (teamId: string) => void;
|
|
28
|
+
placeholder?: string;
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
className?: string;
|
|
31
|
+
showRole?: boolean;
|
|
32
|
+
showTenant?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function TeamSelector({ teams, currentTeamId, onSelect, placeholder, disabled, className, showRole, showTenant, }: TeamSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=team-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-selector.d.ts","sourceRoot":"","sources":["../../src/components/team-selector.tsx"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAYD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,aAAa,EACb,QAAQ,EACR,WAA2B,EAC3B,QAAgB,EAChB,SAAS,EACT,QAAe,EACf,UAAkB,GACnB,EAAE,iBAAiB,2CA6EnB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { Avatar, AvatarFallback, AvatarImage } from './avatar';
|
|
5
|
+
import { Badge } from './badge';
|
|
6
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './select';
|
|
7
|
+
import { cn } from '@repo/utils';
|
|
8
|
+
const ROLE_BADGE_CLASSES = {
|
|
9
|
+
OWNER: 'bg-primary/10 text-primary',
|
|
10
|
+
ADMIN: 'bg-amber-500/10 text-amber-500',
|
|
11
|
+
MEMBER: 'bg-muted text-muted-foreground',
|
|
12
|
+
};
|
|
13
|
+
function getTeamAvatarFallback(teamName) {
|
|
14
|
+
return teamName.charAt(0).toUpperCase();
|
|
15
|
+
}
|
|
16
|
+
export function TeamSelector({ teams, currentTeamId, onSelect, placeholder = 'Select team', disabled = false, className, showRole = true, showTenant = false, }) {
|
|
17
|
+
const [selectedTeamId, setSelectedTeamId] = useState(currentTeamId ?? null);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
setSelectedTeamId(currentTeamId ?? null);
|
|
20
|
+
}, [currentTeamId]);
|
|
21
|
+
const handleSelect = (teamId) => {
|
|
22
|
+
setSelectedTeamId(teamId);
|
|
23
|
+
onSelect?.(teamId);
|
|
24
|
+
};
|
|
25
|
+
const selectedTeam = teams.find((t) => t.id === selectedTeamId);
|
|
26
|
+
return (_jsxs(Select, { value: selectedTeamId ?? undefined, onValueChange: handleSelect, disabled: disabled, children: [_jsx(SelectTrigger, { className: cn('w-full', className), children: _jsx(SelectValue, { placeholder: placeholder, children: selectedTeam && (_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Avatar, { className: "h-5 w-5 shrink-0", children: [_jsx(AvatarImage, { src: selectedTeam.avatarUrl, alt: selectedTeam.name }), _jsx(AvatarFallback, { className: "text-xs", children: getTeamAvatarFallback(selectedTeam.name) })] }), _jsx("span", { className: "truncate", children: selectedTeam.name }), showRole && selectedTeam.role && (_jsx(Badge, { variant: "outline", className: cn('ml-1 text-xs px-1 py-0', ROLE_BADGE_CLASSES[selectedTeam.role]), children: selectedTeam.role }))] })) }) }), _jsx(SelectContent, { children: teams.length === 0 ? (_jsx(SelectItem, { value: "__empty__", disabled: true, children: "No teams available" })) : (teams.map((team) => (_jsx(SelectItem, { value: team.id, disabled: team.status === 'ARCHIVED', children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Avatar, { className: "h-5 w-5 shrink-0", children: [_jsx(AvatarImage, { src: team.avatarUrl, alt: team.name }), _jsx(AvatarFallback, { className: "text-xs", children: getTeamAvatarFallback(team.name) })] }), _jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [_jsx("span", { className: "truncate font-medium", children: team.name }), showTenant && team.tenantName && (_jsx("span", { className: "truncate text-xs text-muted-foreground", children: team.tenantName }))] }), showRole && team.role && (_jsx(Badge, { variant: "outline", className: cn('ml-2 text-xs px-1 py-0 shrink-0', ROLE_BADGE_CLASSES[team.role]), children: team.role }))] }) }, team.id)))) })] }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=team-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-selector.js","sourceRoot":"","sources":["../../src/components/team-selector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tenant Selector Component
|
|
3
|
+
*
|
|
4
|
+
* A dropdown component for selecting tenants from a list.
|
|
5
|
+
* Displays tenant avatar, name, and user's role in the tenant.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* <TenantSelector
|
|
9
|
+
* tenants={tenants}
|
|
10
|
+
* currentTenantId={currentTenantId}
|
|
11
|
+
* onSelect={(tenantId) => handleSelect(tenantId)}
|
|
12
|
+
* />
|
|
13
|
+
*/
|
|
14
|
+
export interface TenantItem {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
slug: string;
|
|
18
|
+
displayName?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
avatarUrl?: string;
|
|
21
|
+
logoUrl?: string;
|
|
22
|
+
role?: 'OWNER' | 'ADMIN' | 'MEMBER';
|
|
23
|
+
type?: 'PERSONAL' | 'ORGANIZATION' | 'TEAM';
|
|
24
|
+
status?: 'ACTIVE' | 'SUSPENDED' | 'ARCHIVED';
|
|
25
|
+
}
|
|
26
|
+
interface TenantSelectorProps {
|
|
27
|
+
tenants: TenantItem[];
|
|
28
|
+
currentTenantId?: string | null;
|
|
29
|
+
onSelect?: (tenantId: string) => void;
|
|
30
|
+
placeholder?: string;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
className?: string;
|
|
33
|
+
showRole?: boolean;
|
|
34
|
+
showType?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare function TenantSelector({ tenants, currentTenantId, onSelect, placeholder, disabled, className, showRole, showType, }: TenantSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=tenant-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-selector.d.ts","sourceRoot":"","sources":["../../src/components/tenant-selector.tsx"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,MAAM,CAAC;IAC5C,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;CAC9C;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAwBD,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,eAAe,EACf,QAAQ,EACR,WAA6B,EAC7B,QAAgB,EAChB,SAAS,EACT,QAAe,EACf,QAAgB,GACjB,EAAE,mBAAmB,2CA+FrB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { Avatar, AvatarFallback, AvatarImage } from './avatar';
|
|
5
|
+
import { Badge } from './badge';
|
|
6
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './select';
|
|
7
|
+
import { cn } from '@repo/utils';
|
|
8
|
+
const TENANT_TYPE_LABELS = {
|
|
9
|
+
PERSONAL: '个人',
|
|
10
|
+
ORGANIZATION: '组织',
|
|
11
|
+
TEAM: '团队',
|
|
12
|
+
};
|
|
13
|
+
const ROLE_BADGE_CLASSES = {
|
|
14
|
+
OWNER: 'bg-primary/10 text-primary',
|
|
15
|
+
ADMIN: 'bg-amber-500/10 text-amber-500',
|
|
16
|
+
MEMBER: 'bg-muted text-muted-foreground',
|
|
17
|
+
};
|
|
18
|
+
const TENANT_TYPE_ICONS = {
|
|
19
|
+
PERSONAL: '👤',
|
|
20
|
+
ORGANIZATION: '🏢',
|
|
21
|
+
TEAM: '👥',
|
|
22
|
+
};
|
|
23
|
+
function getTenantAvatarFallback(tenantName) {
|
|
24
|
+
return tenantName.charAt(0).toUpperCase();
|
|
25
|
+
}
|
|
26
|
+
export function TenantSelector({ tenants, currentTenantId, onSelect, placeholder = 'Select tenant', disabled = false, className, showRole = true, showType = false, }) {
|
|
27
|
+
const [selectedTenantId, setSelectedTenantId] = useState(currentTenantId ?? null);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
setSelectedTenantId(currentTenantId ?? null);
|
|
30
|
+
}, [currentTenantId]);
|
|
31
|
+
const handleSelect = (tenantId) => {
|
|
32
|
+
setSelectedTenantId(tenantId);
|
|
33
|
+
onSelect?.(tenantId);
|
|
34
|
+
};
|
|
35
|
+
const selectedTenant = tenants.find((t) => t.id === selectedTenantId);
|
|
36
|
+
return (_jsxs(Select, { value: selectedTenantId ?? undefined, onValueChange: handleSelect, disabled: disabled, children: [_jsx(SelectTrigger, { className: cn('w-full', className), children: _jsx(SelectValue, { placeholder: placeholder, children: selectedTenant && (_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Avatar, { className: "h-5 w-5 shrink-0", children: [_jsx(AvatarImage, { src: selectedTenant.logoUrl || selectedTenant.avatarUrl, alt: selectedTenant.displayName || selectedTenant.name }), _jsx(AvatarFallback, { className: "text-xs", children: getTenantAvatarFallback(selectedTenant.displayName || selectedTenant.name) })] }), _jsx("span", { className: "truncate", children: selectedTenant.displayName || selectedTenant.name }), showRole && selectedTenant.role && (_jsx(Badge, { variant: "outline", className: cn('ml-1 text-xs px-1 py-0', ROLE_BADGE_CLASSES[selectedTenant.role]), children: selectedTenant.role }))] })) }) }), _jsx(SelectContent, { children: tenants.length === 0 ? (_jsx(SelectItem, { value: "__empty__", disabled: true, children: "No tenants available" })) : (tenants.map((tenant) => (_jsx(SelectItem, { value: tenant.id, disabled: tenant.status === 'SUSPENDED' || tenant.status === 'ARCHIVED', children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Avatar, { className: "h-5 w-5 shrink-0", children: [_jsx(AvatarImage, { src: tenant.logoUrl || tenant.avatarUrl, alt: tenant.displayName || tenant.name }), _jsx(AvatarFallback, { className: "text-xs", children: getTenantAvatarFallback(tenant.displayName || tenant.name) })] }), _jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [_jsx("span", { className: "truncate font-medium", children: tenant.displayName || tenant.name }), tenant.description && (_jsx("span", { className: "truncate text-xs text-muted-foreground", children: tenant.description }))] }), showType && tenant.type && (_jsx(Badge, { variant: "outline", className: "ml-2 text-xs px-1 py-0 shrink-0", children: TENANT_TYPE_ICONS[tenant.type] || tenant.type })), showRole && tenant.role && (_jsx(Badge, { variant: "outline", className: cn('ml-2 text-xs px-1 py-0 shrink-0', ROLE_BADGE_CLASSES[tenant.role]), children: tenant.role }))] }) }, tenant.id)))) })] }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=tenant-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-selector.js","sourceRoot":"","sources":["../../src/components/tenant-selector.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ export * from './components/sonner';
|
|
|
30
30
|
export * from './components/switch';
|
|
31
31
|
export * from './components/table';
|
|
32
32
|
export * from './components/tabs';
|
|
33
|
+
export * from './components/team-selector';
|
|
34
|
+
export * from './components/tenant-selector';
|
|
33
35
|
export * from './components/textarea';
|
|
34
36
|
export * from './components/theme-toggle';
|
|
35
37
|
export * from './components/tooltip';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,8 @@ export * from './components/sonner';
|
|
|
31
31
|
export * from './components/switch';
|
|
32
32
|
export * from './components/table';
|
|
33
33
|
export * from './components/tabs';
|
|
34
|
+
export * from './components/team-selector';
|
|
35
|
+
export * from './components/tenant-selector';
|
|
34
36
|
export * from './components/textarea';
|
|
35
37
|
export * from './components/theme-toggle';
|
|
36
38
|
export * from './components/tooltip';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AAErC,QAAQ;AACR,cAAc,oBAAoB,CAAC;AAEnC,QAAQ;AACR,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AAErC,QAAQ;AACR,cAAc,oBAAoB,CAAC;AAEnC,QAAQ;AACR,cAAc,aAAa,CAAC"}
|