@jackbo_vip/admin-kit 1.0.2 → 1.0.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/dist/admin-kit.css +1 -0
- package/dist/index.cjs +7 -137
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +12 -12
- package/dist/index.mjs +11379 -12
- package/dist/index.mjs.map +1 -0
- package/dist/sortable.complete.esm-Df-311yt.js +1630 -0
- package/dist/sortable.complete.esm-Df-311yt.js.map +1 -0
- package/dist/sortable.complete.esm-FnDNpqb8.cjs +8 -0
- package/dist/sortable.complete.esm-FnDNpqb8.cjs.map +1 -0
- package/package.json +24 -10
- package/dist/index.d.cts +0 -12
- package/dist/index.d.mts +0 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../base/icons/src/create-icon.ts","../../base/shared/src/cache/storage-manager.ts","../../base/shared/src/color/color.ts","../../base/shared/src/color/convert.ts","../../base/shared/src/color/generator.ts","../../base/shared/src/constants/globals.ts","../../base/shared/src/constants/admin.ts","../../base/shared/src/utils/cn.ts","../../../node_modules/dayjs/plugin/timezone.js","../../../node_modules/dayjs/plugin/utc.js","../../base/shared/src/utils/date.ts","../../base/shared/src/utils/diff.ts","../../base/shared/src/utils/dom.ts","../../base/shared/src/utils/window.ts","../../base/shared/src/utils/download.ts","../../base/shared/src/utils/inference.ts","../../base/shared/src/utils/letter.ts","../../base/shared/src/utils/merge.ts","../../base/shared/src/utils/nprogress.ts","../../base/shared/src/utils/resources.ts","../../base/shared/src/utils/state-handler.ts","../../base/shared/src/utils/to.ts","../../base/shared/src/utils/tree.ts","../../base/shared/src/utils/unique.ts","../../base/shared/src/utils/update-css-variables.ts","../../base/shared/src/utils/util.ts","../../../node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs","../../../node_modules/es-toolkit/dist/compat/_internal/isDeepKey.mjs","../../../node_modules/es-toolkit/dist/compat/_internal/toKey.mjs","../../../node_modules/es-toolkit/dist/compat/util/toString.mjs","../../../node_modules/es-toolkit/dist/compat/util/toPath.mjs","../../../node_modules/es-toolkit/dist/compat/object/get.mjs","../../../node_modules/es-toolkit/dist/compat/predicate/isObject.mjs","../../../node_modules/es-toolkit/dist/compat/util/eq.mjs","../../../node_modules/es-toolkit/dist/compat/_internal/getSymbols.mjs","../../../node_modules/es-toolkit/dist/compat/_internal/getTag.mjs","../../../node_modules/es-toolkit/dist/compat/_internal/tags.mjs","../../../node_modules/es-toolkit/dist/compat/_internal/isIndex.mjs","../../../node_modules/es-toolkit/dist/compat/predicate/isSymbol.mjs","../../../node_modules/es-toolkit/dist/compat/_internal/isKey.mjs","../../../node_modules/es-toolkit/dist/compat/_internal/assignValue.mjs","../../../node_modules/es-toolkit/dist/compat/object/updateWith.mjs","../../../node_modules/es-toolkit/dist/compat/object/set.mjs","../../../node_modules/es-toolkit/dist/predicate/isPlainObject.mjs","../../../node_modules/es-toolkit/dist/predicate/isEqualWith.mjs","../../../node_modules/es-toolkit/dist/function/noop.mjs","../../../node_modules/es-toolkit/dist/predicate/isEqual.mjs","../../base/shared/src/global-state.ts","../../composables/src/use-is-mobile.ts","../../composables/src/use-layout-style.ts","../../composables/src/use-namespace.ts","../../composables/src/use-priority-value.ts","../../composables/src/use-scroll-lock.ts","../../composables/src/use-simple-locale/messages.ts","../../composables/src/use-simple-locale/index.ts","../../composables/src/use-sortable.ts","../../preferences/src/config.ts","../../preferences/src/constants.ts","../../preferences/src/update-css-variables.ts","../../preferences/src/preferences.ts","../../preferences/src/use-preferences.ts","../../preferences/src/index.ts","../../ui-kit/shadcn-ui/src/ui/accordion/Accordion.vue","../../ui-kit/shadcn-ui/src/ui/accordion/AccordionContent.vue","../../ui-kit/shadcn-ui/src/ui/accordion/AccordionItem.vue","../../ui-kit/shadcn-ui/src/ui/accordion/AccordionTrigger.vue","../../ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialog.vue","../../ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogAction.vue","../../ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogCancel.vue","../../ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue","../../ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue","../../ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogDescription.vue","../../ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogTitle.vue","../../ui-kit/shadcn-ui/src/ui/avatar/avatar.ts","../../ui-kit/shadcn-ui/src/ui/avatar/Avatar.vue","../../ui-kit/shadcn-ui/src/ui/avatar/AvatarFallback.vue","../../ui-kit/shadcn-ui/src/ui/avatar/AvatarImage.vue","../../ui-kit/shadcn-ui/src/ui/badge/badge.ts","../../ui-kit/shadcn-ui/src/ui/badge/Badge.vue","../../ui-kit/shadcn-ui/src/ui/breadcrumb/Breadcrumb.vue","../../ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbEllipsis.vue","../../ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue","../../ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbLink.vue","../../ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue","../../ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue","../../ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbSeparator.vue","../../ui-kit/shadcn-ui/src/ui/button/button.ts","../../ui-kit/shadcn-ui/src/ui/button/Button.vue","../../ui-kit/shadcn-ui/src/ui/card/Card.vue","../../ui-kit/shadcn-ui/src/ui/card/CardContent.vue","../../ui-kit/shadcn-ui/src/ui/card/CardDescription.vue","../../ui-kit/shadcn-ui/src/ui/card/CardFooter.vue","../../ui-kit/shadcn-ui/src/ui/card/CardHeader.vue","../../ui-kit/shadcn-ui/src/ui/card/CardTitle.vue","../../ui-kit/shadcn-ui/src/ui/checkbox/Checkbox.vue","../../ui-kit/shadcn-ui/src/ui/dialog/Dialog.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogClose.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogFooter.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogHeader.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogTitle.vue","../../ui-kit/shadcn-ui/src/ui/dialog/DialogTrigger.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenu.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuCheckboxItem.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuContent.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuGroup.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuItem.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuLabel.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioGroup.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioItem.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSeparator.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuShortcut.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSub.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubTrigger.vue","../../ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuTrigger.vue","../../ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts","../../ui-kit/shadcn-ui/src/ui/form/useFormField.ts","../../ui-kit/shadcn-ui/src/ui/form/FormControl.vue","../../ui-kit/shadcn-ui/src/ui/form/FormDescription.vue","../../ui-kit/shadcn-ui/src/ui/form/FormItem.vue","../../ui-kit/shadcn-ui/src/ui/label/Label.vue","../../ui-kit/shadcn-ui/src/ui/form/FormLabel.vue","../../ui-kit/shadcn-ui/src/ui/form/FormMessage.vue","../../ui-kit/shadcn-ui/src/ui/hover-card/HoverCard.vue","../../ui-kit/shadcn-ui/src/ui/hover-card/HoverCardContent.vue","../../ui-kit/shadcn-ui/src/ui/hover-card/HoverCardTrigger.vue","../../ui-kit/shadcn-ui/src/ui/input/Input.vue","../../ui-kit/shadcn-ui/src/ui/number-field/NumberField.vue","../../ui-kit/shadcn-ui/src/ui/number-field/NumberFieldContent.vue","../../ui-kit/shadcn-ui/src/ui/number-field/NumberFieldDecrement.vue","../../ui-kit/shadcn-ui/src/ui/number-field/NumberFieldIncrement.vue","../../ui-kit/shadcn-ui/src/ui/number-field/NumberFieldInput.vue","../../ui-kit/shadcn-ui/src/ui/pagination/PaginationEllipsis.vue","../../ui-kit/shadcn-ui/src/ui/pagination/PaginationFirst.vue","../../ui-kit/shadcn-ui/src/ui/pagination/PaginationLast.vue","../../ui-kit/shadcn-ui/src/ui/pagination/PaginationNext.vue","../../ui-kit/shadcn-ui/src/ui/pagination/PaginationPrev.vue","../../ui-kit/shadcn-ui/src/ui/pin-input/PinInput.vue","../../ui-kit/shadcn-ui/src/ui/pin-input/PinInputGroup.vue","../../ui-kit/shadcn-ui/src/ui/pin-input/PinInputInput.vue","../../ui-kit/shadcn-ui/src/ui/pin-input/PinInputSeparator.vue","../../ui-kit/shadcn-ui/src/ui/popover/Popover.vue","../../ui-kit/shadcn-ui/src/ui/popover/PopoverContent.vue","../../ui-kit/shadcn-ui/src/ui/popover/PopoverTrigger.vue","../../ui-kit/shadcn-ui/src/ui/radio-group/RadioGroup.vue","../../ui-kit/shadcn-ui/src/ui/radio-group/RadioGroupItem.vue","../../ui-kit/shadcn-ui/src/ui/resizable/ResizableHandle.vue","../../ui-kit/shadcn-ui/src/ui/resizable/ResizablePanelGroup.vue","../../ui-kit/shadcn-ui/src/ui/scroll-area/ScrollBar.vue","../../ui-kit/shadcn-ui/src/ui/scroll-area/ScrollArea.vue","../../ui-kit/shadcn-ui/src/ui/select/Select.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectScrollDownButton.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectScrollUpButton.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectContent.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectGroup.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectItem.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectItemText.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectLabel.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectSeparator.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectTrigger.vue","../../ui-kit/shadcn-ui/src/ui/select/SelectValue.vue","../../ui-kit/shadcn-ui/src/ui/separator/Separator.vue","../../ui-kit/shadcn-ui/src/ui/sheet/sheet.ts","../../ui-kit/shadcn-ui/src/ui/sheet/Sheet.vue","../../ui-kit/shadcn-ui/src/ui/sheet/SheetClose.vue","../../ui-kit/shadcn-ui/src/ui/sheet/SheetOverlay.vue","../../ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue","../../ui-kit/shadcn-ui/src/ui/sheet/SheetDescription.vue","../../ui-kit/shadcn-ui/src/ui/sheet/SheetFooter.vue","../../ui-kit/shadcn-ui/src/ui/sheet/SheetHeader.vue","../../ui-kit/shadcn-ui/src/ui/sheet/SheetTitle.vue","../../ui-kit/shadcn-ui/src/ui/sheet/SheetTrigger.vue","../../ui-kit/shadcn-ui/src/ui/switch/Switch.vue","../../ui-kit/shadcn-ui/src/ui/tabs/Tabs.vue","../../ui-kit/shadcn-ui/src/ui/tabs/TabsContent.vue","../../ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue","../../ui-kit/shadcn-ui/src/ui/tabs/TabsTrigger.vue","../../ui-kit/shadcn-ui/src/ui/textarea/Textarea.vue","../../ui-kit/shadcn-ui/src/ui/toggle/toggle.ts","../../ui-kit/shadcn-ui/src/ui/toggle/Toggle.vue","../../ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroup.vue","../../ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroupItem.vue","../../ui-kit/shadcn-ui/src/ui/tooltip/Tooltip.vue","../../ui-kit/shadcn-ui/src/ui/tooltip/TooltipContent.vue","../../ui-kit/shadcn-ui/src/ui/tooltip/TooltipProvider.vue","../../ui-kit/shadcn-ui/src/ui/tooltip/TooltipTrigger.vue","../../ui-kit/shadcn-ui/src/ui/tree/types.ts","../../ui-kit/shadcn-ui/src/ui/tree/tree.vue","../../ui-kit/shadcn-ui/src/components/avatar/avatar.vue","../../ui-kit/shadcn-ui/src/components/button/button-group.vue","../../ui-kit/shadcn-ui/src/components/button/button.vue","../../ui-kit/shadcn-ui/src/components/render-content/render-content.vue","../../ui-kit/shadcn-ui/src/components/button/check-button-group.vue","../../ui-kit/shadcn-ui/src/components/tooltip/tooltip.vue","../../ui-kit/shadcn-ui/src/components/tooltip/help-tooltip.vue","../../ui-kit/shadcn-ui/src/components/button/icon-button.vue","../../ui-kit/shadcn-ui/src/components/back-top/use-backtop.ts","../../ui-kit/shadcn-ui/src/components/back-top/back-top.vue","../../ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue","../../ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb.vue","../../ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-view.vue","../../ui-kit/shadcn-ui/src/components/checkbox/checkbox.vue","../../ui-kit/shadcn-ui/src/ui/context-menu/ContextMenu.vue","../../ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuContent.vue","../../ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuItem.vue","../../ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSeparator.vue","../../ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue","../../ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuTrigger.vue","../../ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue","../../ui-kit/shadcn-ui/src/components/count-to-animator/count-to-animator.vue","../../ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-menu.vue","../../ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-radio-menu.vue","../../ui-kit/shadcn-ui/src/components/expandable-arrow/expandable-arrow.vue","../../ui-kit/shadcn-ui/src/components/full-screen/full-screen.vue","../../ui-kit/shadcn-ui/src/components/hover-card/hover-card.vue","../../ui-kit/shadcn-ui/src/components/icon/icon.vue","../../ui-kit/shadcn-ui/src/components/input-password/password-strength.vue","../../ui-kit/shadcn-ui/src/components/input-password/input-password.vue","../../ui-kit/shadcn-ui/src/components/logo/logo.vue","../../ui-kit/shadcn-ui/src/components/pin-input/input.vue","../../ui-kit/shadcn-ui/src/components/popover/popover.vue","../../ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue","../../ui-kit/shadcn-ui/src/components/segmented/tabs-indicator.vue","../../ui-kit/shadcn-ui/src/components/segmented/segmented.vue","../../ui-kit/shadcn-ui/src/components/select/select.vue","../../ui-kit/shadcn-ui/src/components/spine-text/spine-text.vue","../../ui-kit/shadcn-ui/src/components/spinner/loading.vue","../../ui-kit/shadcn-ui/src/components/spinner/spinner.vue","../../ui-kit/form-ui/src/config.ts","../../ui-kit/form-ui/src/form-api.ts","../../../node_modules/zod-defaults/dist/zod-defaults.js","../../ui-kit/form-ui/src/use-form-context.ts","../../ui-kit/form-ui/src/components/form-actions.vue","../../../node_modules/@vee-validate/zod/dist/vee-validate-zod.mjs","../../ui-kit/form-ui/src/form-render/context.ts","../../ui-kit/form-ui/src/form-render/dependencies.ts","../../ui-kit/form-ui/src/form-render/form-label.vue","../../ui-kit/form-ui/src/form-render/helper.ts","../../ui-kit/form-ui/src/form-render/form-field.vue","../../ui-kit/form-ui/src/form-render/expandable.ts","../../ui-kit/form-ui/src/form-render/form.vue","../../ui-kit/form-ui/src/admin-use-form.vue","../../ui-kit/form-ui/src/use-admin-form.ts","../../ui-kit/layout-ui/src/components/layout-content.vue","../../ui-kit/layout-ui/src/components/layout-footer.vue","../../ui-kit/layout-ui/src/components/layout-header.vue","../../ui-kit/layout-ui/src/components/widgets/sidebar-collapse-button.vue","../../ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue","../../ui-kit/layout-ui/src/components/layout-sidebar.vue","../../ui-kit/layout-ui/src/components/layout-tabbar.vue","../../ui-kit/layout-ui/src/hooks/use-layout.ts","../../ui-kit/layout-ui/src/admin-layout.vue","../../ui-kit/menu-ui/src/components/menu-badge-dot.vue","../../ui-kit/menu-ui/src/components/menu-badge.vue","../../ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue","../../ui-kit/popup-ui/src/alert/alert.ts","../../ui-kit/popup-ui/src/alert/alert.vue","../../ui-kit/popup-ui/src/alert/AlertBuilder.ts","../../ui-kit/popup-ui/src/drawer/drawer.vue","../../ui-kit/popup-ui/src/drawer/drawer-api.ts","../../ui-kit/popup-ui/src/drawer/use-drawer.ts","../../ui-kit/popup-ui/src/modal/use-modal-draggable.ts","../../ui-kit/popup-ui/src/modal/modal.vue","../../ui-kit/popup-ui/src/modal/modal-api.ts","../../ui-kit/popup-ui/src/modal/use-modal.ts","../../ui-kit/tabs-ui/src/components/widgets/tool-more.vue","../../ui-kit/tabs-ui/src/components/widgets/tool-screen.vue","../../ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue","../../ui-kit/tabs-ui/src/components/tabs/tabs.vue","../../ui-kit/tabs-ui/src/use-tabs-drag.ts","../../ui-kit/tabs-ui/src/use-tabs-view-scroll.ts","../../ui-kit/tabs-ui/src/tabs-view.vue"],"sourcesContent":["import { defineComponent, h } from 'vue';\r\n\r\nimport { Icon } from '@iconify/vue';\r\n\r\nfunction createIconifyIcon(icon: string) {\r\n return defineComponent({\r\n name: `Icon-${icon}`,\r\n setup(props, { attrs }) {\r\n return () => h(Icon, { icon, ...props, ...attrs });\r\n },\r\n });\r\n}\r\n\r\nexport { createIconifyIcon };\r\n","type StorageType = 'localStorage' | 'sessionStorage';\r\n\r\ninterface StorageManagerOptions {\r\n prefix?: string;\r\n storageType?: StorageType;\r\n}\r\n\r\ninterface StorageItem<T> {\r\n expiry?: number;\r\n value: T;\r\n}\r\n\r\nclass StorageManager {\r\n private prefix: string;\r\n private storage: Storage;\r\n\r\n constructor({\r\n prefix = '',\r\n storageType = 'localStorage',\r\n }: StorageManagerOptions = {}) {\r\n this.prefix = prefix;\r\n this.storage =\r\n storageType === 'localStorage'\r\n ? window.localStorage\r\n : window.sessionStorage;\r\n }\r\n\r\n /**\r\n * 清除所有带前缀的存储项\r\n */\r\n clear(): void {\r\n const keysToRemove: string[] = [];\r\n for (let i = 0; i < this.storage.length; i++) {\r\n const key = this.storage.key(i);\r\n if (key && key.startsWith(this.prefix)) {\r\n keysToRemove.push(key);\r\n }\r\n }\r\n for (const key of keysToRemove) {\r\n this.storage.removeItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * 清除所有过期的存储项\r\n */\r\n clearExpiredItems(): void {\r\n for (let i = 0; i < this.storage.length; i++) {\r\n const key = this.storage.key(i);\r\n if (key && key.startsWith(this.prefix)) {\r\n const shortKey = key.slice(this.prefix.length + 1); // 使用 slice 替代 replace\r\n this.getItem(shortKey); // 调用 getItem 方法检查并移除过期项\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取存储项\r\n * @param key 键\r\n * @param defaultValue 当项不存在或已过期时返回的默认值\r\n * @returns 值,如果项已过期或解析错误则返回默认值\r\n */\r\n getItem<T>(key: string, defaultValue: null | T = null): null | T {\r\n const fullKey = this.getFullKey(key);\r\n const itemStr = this.storage.getItem(fullKey);\r\n if (!itemStr) {\r\n return defaultValue;\r\n }\r\n\r\n try {\r\n const item: StorageItem<T> = JSON.parse(itemStr);\r\n if (item.expiry && Date.now() > item.expiry) {\r\n this.storage.removeItem(fullKey);\r\n return defaultValue;\r\n }\r\n return item.value;\r\n } catch (error) {\r\n console.error(`Error parsing item with key \"${fullKey}\":`, error);\r\n this.storage.removeItem(fullKey); // 如果解析失败,删除该项\r\n return defaultValue;\r\n }\r\n }\r\n\r\n /**\r\n * 移除存储项\r\n * @param key 键\r\n */\r\n removeItem(key: string): void {\r\n const fullKey = this.getFullKey(key);\r\n this.storage.removeItem(fullKey);\r\n }\r\n\r\n /**\r\n * 设置存储项\r\n * @param key 键\r\n * @param value 值\r\n * @param ttl 存活时间(毫秒)\r\n */\r\n setItem<T>(key: string, value: T, ttl?: number): void {\r\n const fullKey = this.getFullKey(key);\r\n const expiry = ttl ? Date.now() + ttl : undefined;\r\n const item: StorageItem<T> = { expiry, value };\r\n try {\r\n this.storage.setItem(fullKey, JSON.stringify(item));\r\n } catch (error) {\r\n console.error(`Error setting item with key \"${fullKey}\":`, error);\r\n }\r\n }\r\n\r\n /**\r\n * 获取完整的存储键\r\n * @param key 原始键\r\n * @returns 带前缀的完整键\r\n */\r\n private getFullKey(key: string): string {\r\n return `${this.prefix}-${key}`;\r\n }\r\n}\r\n\r\nexport { StorageManager };\r\n","import { TinyColor } from '@ctrl/tinycolor';\r\n\r\nexport function isDarkColor(color: string) {\r\n return new TinyColor(color).isDark();\r\n}\r\n\r\nexport function isLightColor(color: string) {\r\n return new TinyColor(color).isLight();\r\n}\r\n","import { TinyColor } from '@ctrl/tinycolor';\r\n\r\n/**\r\n * 将颜色转换为HSL格式。\r\n *\r\n * HSL是一种颜色模型,包括色相(Hue)、饱和度(Saturation)和亮度(Lightness)三个部分。\r\n *\r\n * @param {string} color 输入的颜色。\r\n * @returns {string} HSL格式的颜色字符串。\r\n */\r\nfunction convertToHsl(color: string): string {\r\n const { a, h, l, s } = new TinyColor(color).toHsl();\r\n const hsl = `hsl(${Math.round(h)} ${Math.round(s * 100)}% ${Math.round(l * 100)}%)`;\r\n return a < 1 ? `${hsl} ${a}` : hsl;\r\n}\r\n\r\n/**\r\n * 将颜色转换为HSL CSS变量。\r\n *\r\n * 这个函数与convertToHsl函数类似,但是返回的字符串格式稍有不同,\r\n * 以便可以作为CSS变量使用。\r\n *\r\n * @param {string} color 输入的颜色。\r\n * @returns {string} 可以作为CSS变量使用的HSL格式的颜色字符串。\r\n */\r\nfunction convertToHslCssVar(color: string): string {\r\n const { a, h, l, s } = new TinyColor(color).toHsl();\r\n const hsl = `${Math.round(h)} ${Math.round(s * 100)}% ${Math.round(l * 100)}%`;\r\n return a < 1 ? `${hsl} / ${a}` : hsl;\r\n}\r\n\r\n/**\r\n * 将颜色转换为RGB颜色字符串\r\n * TinyColor无法处理hsl内包含'deg'、'grad'、'rad'或'turn'的字符串\r\n * 比如 hsl(231deg 98% 65%)将被解析为rgb(0, 0, 0)\r\n * 这里在转换之前先将这些单位去掉\r\n * @param str 表示HLS颜色值的字符串\r\n * @returns 如果颜色值有效,则返回对应的RGB颜色字符串;如果无效,则返回rgb(0, 0, 0)\r\n */\r\nfunction convertToRgb(str: string): string {\r\n return new TinyColor(str.replaceAll(/deg|grad|rad|turn/g, '')).toRgbString();\r\n}\r\n\r\n/**\r\n * 检查颜色是否有效\r\n * @param {string} color - 待检查的颜色\r\n * 如果颜色有效返回true,否则返回false\r\n */\r\nfunction isValidColor(color?: string) {\r\n if (!color) {\r\n return false;\r\n }\r\n return new TinyColor(color).isValid;\r\n}\r\n\r\nexport {\r\n convertToHsl,\r\n convertToHslCssVar,\r\n convertToRgb,\r\n isValidColor,\r\n TinyColor,\r\n};\r\n","import { getColors } from 'theme-colors';\r\n\r\nimport { convertToHslCssVar, TinyColor } from './convert';\r\n\r\ninterface ColorItem {\r\n alias?: string;\r\n color: string;\r\n name: string;\r\n}\r\n\r\nfunction generatorColorVariables(colorItems: ColorItem[]) {\r\n const colorVariables: Record<string, string> = {};\r\n\r\n colorItems.forEach(({ alias, color, name }) => {\r\n if (color) {\r\n const colorsMap = getColors(new TinyColor(color).toHexString());\r\n\r\n let mainColor = colorsMap['500'];\r\n\r\n const colorKeys = Object.keys(colorsMap);\r\n\r\n colorKeys.forEach((key) => {\r\n const colorValue = colorsMap[key];\r\n\r\n if (colorValue) {\r\n const hslColor = convertToHslCssVar(colorValue);\r\n colorVariables[`--${name}-${key}`] = hslColor;\r\n if (alias) {\r\n colorVariables[`--${alias}-${key}`] = hslColor;\r\n }\r\n\r\n if (key === '500') {\r\n mainColor = hslColor;\r\n }\r\n }\r\n });\r\n if (alias && mainColor) {\r\n colorVariables[`--${alias}`] = mainColor;\r\n }\r\n }\r\n });\r\n return colorVariables;\r\n}\r\n\r\nexport { generatorColorVariables };\r\n","/** layout content 组件的高度 */\r\nexport const CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT = `--admin-content-height`;\r\n/** layout content 组件的宽度 */\r\nexport const CSS_VARIABLE_LAYOUT_CONTENT_WIDTH = `--admin-content-width`;\r\n/** layout header 组件的高度 */\r\nexport const CSS_VARIABLE_LAYOUT_HEADER_HEIGHT = `--admin-header-height`;\r\n/** layout footer 组件的高度 */\r\nexport const CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT = `--admin-footer-height`;\r\n\r\n/** 内容区域的组件ID */\r\nexport const ELEMENT_ID_MAIN_CONTENT = `__admin_main_content`;\r\n\r\n/**\r\n * @zh_CN 默认命名空间\r\n */\r\nexport const DEFAULT_NAMESPACE = 'admin';\r\n","/**\r\n * @zh_CN GITHUB 仓库地址\r\n */\r\nexport const ADMIN_GITHUB_URL = 'https://github.com/vbenjs/vue-vben-admin';\r\n\r\n/**\r\n * @zh_CN 文档地址\r\n */\r\nexport const ADMIN_DOC_URL = 'https://doc.vben.pro';\r\n\r\n/**\r\n * @zh_CN Admin Logo\r\n */\r\nexport const ADMIN_LOGO_URL =\r\n 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp';\r\n\r\n/**\r\n * @zh_CN Admin 首页地址\r\n */\r\nexport const ADMIN_PREVIEW_URL = 'https://www.vben.pro';\r\n\r\nexport const ADMIN_ELE_PREVIEW_URL = 'https://ele.vben.pro';\r\n\r\nexport const ADMIN_NAIVE_PREVIEW_URL = 'https://naive.vben.pro';\r\n\r\nexport const ADMIN_ANT_PREVIEW_URL = 'https://ant.vben.pro';\r\n\r\nexport const ADMIN_TD_PREVIEW_URL = 'https://tdesign.vben.pro';\r\n","import type { ClassValue } from 'clsx';\r\n\r\nimport { clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nfunction cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\nexport { cn };\r\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString(\"en-US\",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","import dayjs from 'dayjs';\r\nimport timezone from 'dayjs/plugin/timezone';\r\nimport utc from 'dayjs/plugin/utc';\r\n\r\ndayjs.extend(utc);\r\ndayjs.extend(timezone);\r\n\r\ntype FormatDate = Date | dayjs.Dayjs | number | string;\r\n\r\ntype Format =\r\n | 'HH'\r\n | 'HH:mm'\r\n | 'HH:mm:ss'\r\n | 'YYYY'\r\n | 'YYYY-MM'\r\n | 'YYYY-MM-DD'\r\n | 'YYYY-MM-DD HH'\r\n | 'YYYY-MM-DD HH:mm'\r\n | 'YYYY-MM-DD HH:mm:ss'\r\n | (string & {});\r\n\r\nexport function formatDate(time?: FormatDate, format: Format = 'YYYY-MM-DD') {\r\n try {\r\n const date = dayjs.isDayjs(time) ? time : dayjs(time);\r\n if (!date.isValid()) {\r\n throw new Error('Invalid date');\r\n }\r\n return date.tz().format(format);\r\n } catch (error) {\r\n console.error(`Error formatting date: ${error}`);\r\n return String(time ?? '');\r\n }\r\n}\r\n\r\nexport function formatDateTime(time?: FormatDate) {\r\n return formatDate(time, 'YYYY-MM-DD HH:mm:ss');\r\n}\r\n\r\nexport function isDate(value: any): value is Date {\r\n return value instanceof Date;\r\n}\r\n\r\nexport function isDayjsObject(value: any): value is dayjs.Dayjs {\r\n return dayjs.isDayjs(value);\r\n}\r\n\r\n/**\r\n * 获取当前时区\r\n * @returns 当前时区\r\n */\r\nexport const getSystemTimezone = () => {\r\n return dayjs.tz.guess();\r\n};\r\n\r\n/**\r\n * 自定义设置的时区\r\n */\r\nlet currentTimezone = getSystemTimezone();\r\n\r\n/**\r\n * 设置默认时区\r\n * @param timezone\r\n */\r\nexport const setCurrentTimezone = (timezone?: string) => {\r\n currentTimezone = timezone ?? getSystemTimezone();\r\n dayjs.tz.setDefault(currentTimezone);\r\n};\r\n\r\n/**\r\n * 获取设置的时区\r\n * @returns 设置的时区\r\n */\r\nexport const getCurrentTimezone = () => {\r\n return currentTimezone;\r\n};\r\n","// type Diff<T = any> = T;\r\n\r\n// 比较两个数组是否相等\r\n\r\nfunction arraysEqual<T>(a: T[], b: T[]): boolean {\r\n if (a.length !== b.length) return false;\r\n const counter = new Map<T, number>();\r\n for (const value of a) {\r\n counter.set(value, (counter.get(value) ?? 0) + 1);\r\n }\r\n for (const value of b) {\r\n const count = counter.get(value);\r\n if (count === undefined || count === 0) {\r\n return false;\r\n }\r\n counter.set(value, count - 1);\r\n }\r\n return true;\r\n}\r\n\r\n// 深度对比两个值\r\n// function deepEqual<T>(oldVal: T, newVal: T): boolean {\r\n// if (\r\n// typeof oldVal === 'object' &&\r\n// oldVal !== null &&\r\n// typeof newVal === 'object' &&\r\n// newVal !== null\r\n// ) {\r\n// return Array.isArray(oldVal) && Array.isArray(newVal)\r\n// ? arraysEqual(oldVal, newVal)\r\n// : diff(oldVal as any, newVal as any) === null;\r\n// } else {\r\n// return oldVal === newVal;\r\n// }\r\n// }\r\n\r\n// // diff 函数\r\n// function diff<T extends object>(\r\n// oldObj: T,\r\n// newObj: T,\r\n// ignoreFields: (keyof T)[] = [],\r\n// ): { [K in keyof T]?: Diff<T[K]> } | null {\r\n// const difference: { [K in keyof T]?: Diff<T[K]> } = {};\r\n\r\n// for (const key in oldObj) {\r\n// if (ignoreFields.includes(key)) continue;\r\n// const oldValue = oldObj[key];\r\n// const newValue = newObj[key];\r\n\r\n// if (!deepEqual(oldValue, newValue)) {\r\n// difference[key] = newValue;\r\n// }\r\n// }\r\n\r\n// return Object.keys(difference).length === 0 ? null : difference;\r\n// }\r\n\r\ntype DiffResult<T> = Partial<{\r\n [K in keyof T]: T[K] extends object ? DiffResult<T[K]> : T[K];\r\n}>;\r\n\r\nfunction diff<T extends Record<string, any>>(obj1: T, obj2: T): DiffResult<T> {\r\n function findDifferences(o1: any, o2: any): any {\r\n if (Array.isArray(o1) && Array.isArray(o2)) {\r\n if (!arraysEqual(o1, o2)) {\r\n return o2;\r\n }\r\n return undefined;\r\n }\r\n\r\n if (\r\n typeof o1 === 'object' &&\r\n typeof o2 === 'object' &&\r\n o1 !== null &&\r\n o2 !== null\r\n ) {\r\n const diffResult: any = {};\r\n\r\n const keys = new Set([...Object.keys(o1), ...Object.keys(o2)]);\r\n keys.forEach((key) => {\r\n const valueDiff = findDifferences(o1[key], o2[key]);\r\n if (valueDiff !== undefined) {\r\n diffResult[key] = valueDiff;\r\n }\r\n });\r\n\r\n return Object.keys(diffResult).length > 0 ? diffResult : undefined;\r\n }\r\n\r\n return o1 === o2 ? undefined : o2;\r\n }\r\n\r\n return findDifferences(obj1, obj2);\r\n}\r\n\r\nexport { arraysEqual, diff };\r\n","export interface VisibleDomRect {\r\n bottom: number;\r\n height: number;\r\n left: number;\r\n right: number;\r\n top: number;\r\n width: number;\r\n}\r\n\r\n/**\r\n * 获取元素可见信息\r\n * @param element\r\n */\r\nexport function getElementVisibleRect(\r\n element?: HTMLElement | null | undefined,\r\n): VisibleDomRect {\r\n if (!element) {\r\n return {\r\n bottom: 0,\r\n height: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n width: 0,\r\n };\r\n }\r\n const rect = element.getBoundingClientRect();\r\n const viewHeight = Math.max(\r\n document.documentElement.clientHeight,\r\n window.innerHeight,\r\n );\r\n\r\n const top = Math.max(rect.top, 0);\r\n const bottom = Math.min(rect.bottom, viewHeight);\r\n\r\n const viewWidth = Math.max(\r\n document.documentElement.clientWidth,\r\n window.innerWidth,\r\n );\r\n\r\n const left = Math.max(rect.left, 0);\r\n const right = Math.min(rect.right, viewWidth);\r\n\r\n return {\r\n bottom,\r\n height: Math.max(0, bottom - top),\r\n left,\r\n right,\r\n top,\r\n width: Math.max(0, right - left),\r\n };\r\n}\r\n\r\nexport function getScrollbarWidth() {\r\n const scrollDiv = document.createElement('div');\r\n\r\n Object.assign(scrollDiv.style, {\r\n visibility: 'hidden',\r\n overflow: 'scroll',\r\n position: 'absolute',\r\n top: '-9999px',\r\n });\r\n\r\n document.body.append(scrollDiv);\r\n\r\n const innerDiv = document.createElement('div');\r\n scrollDiv.append(innerDiv);\r\n\r\n const scrollbarWidth = scrollDiv.offsetWidth - innerDiv.offsetWidth;\r\n\r\n scrollDiv.remove();\r\n return scrollbarWidth;\r\n}\r\n\r\nexport function needsScrollbar() {\r\n const doc = document.documentElement;\r\n const body = document.body;\r\n\r\n // 检查 body 的 overflow-y 样式\r\n const overflowY = window.getComputedStyle(body).overflowY;\r\n\r\n // 如果明确设置了需要滚动条的样式\r\n if (overflowY === 'scroll' || overflowY === 'auto') {\r\n return doc.scrollHeight > window.innerHeight;\r\n }\r\n\r\n // 在其他情况下,根据 scrollHeight 和 innerHeight 比较判断\r\n return doc.scrollHeight > window.innerHeight;\r\n}\r\n\r\nexport function triggerWindowResize(): void {\r\n // 创建一个新的 resize 事件\r\n const resizeEvent = new Event('resize');\r\n\r\n // 触发 window 的 resize 事件\r\n window.dispatchEvent(resizeEvent);\r\n}\r\n","interface OpenWindowOptions {\r\n noopener?: boolean;\r\n noreferrer?: boolean;\r\n target?: '_blank' | '_parent' | '_self' | '_top' | string;\r\n}\r\n\r\n/**\r\n * 新窗口打开URL。\r\n *\r\n * @param url - 需要打开的网址。\r\n * @param options - 打开窗口的选项。\r\n */\r\nfunction openWindow(url: string, options: OpenWindowOptions = {}): void {\r\n // 解构并设置默认值\r\n const { noopener = true, noreferrer = true, target = '_blank' } = options;\r\n\r\n // 基于选项创建特性字符串\r\n const features = [noopener && 'noopener=yes', noreferrer && 'noreferrer=yes']\r\n .filter(Boolean)\r\n .join(',');\r\n\r\n // 打开窗口\r\n window.open(url, target, features);\r\n}\r\n\r\n/**\r\n * 在新窗口中打开路由。\r\n * @param path\r\n */\r\nfunction openRouteInNewWindow(path: string) {\r\n const { hash, origin } = location;\r\n const fullPath = path.startsWith('/') ? path : `/${path}`;\r\n const url = `${origin}${hash && !fullPath.startsWith('/#') ? '/#' : ''}${fullPath}`;\r\n openWindow(url, { target: '_blank' });\r\n}\r\n\r\nexport { openRouteInNewWindow, openWindow };\r\n","import { openWindow } from './window';\r\n\r\ninterface DownloadOptions<T = string> {\r\n fileName?: string;\r\n source: T;\r\n target?: string;\r\n}\r\n\r\nconst DEFAULT_FILENAME = 'downloaded_file';\r\n\r\n/**\r\n * 通过 URL 下载文件,支持跨域\r\n * @throws {Error} - 当下载失败时抛出错误\r\n */\r\nexport async function downloadFileFromUrl({\r\n fileName,\r\n source,\r\n target = '_blank',\r\n}: DownloadOptions): Promise<void> {\r\n if (!source || typeof source !== 'string') {\r\n throw new Error('Invalid URL.');\r\n }\r\n\r\n const isChrome = window.navigator.userAgent.toLowerCase().includes('chrome');\r\n const isSafari = window.navigator.userAgent.toLowerCase().includes('safari');\r\n\r\n if (/iP/.test(window.navigator.userAgent)) {\r\n console.error('Your browser does not support download!');\r\n return;\r\n }\r\n\r\n if (isChrome || isSafari) {\r\n triggerDownload(source, resolveFileName(source, fileName));\r\n return;\r\n }\r\n if (!source.includes('?')) {\r\n source += '?download';\r\n }\r\n\r\n openWindow(source, { target });\r\n}\r\n\r\n/**\r\n * 通过 Base64 下载文件\r\n */\r\nexport function downloadFileFromBase64({ fileName, source }: DownloadOptions) {\r\n if (!source || typeof source !== 'string') {\r\n throw new Error('Invalid Base64 data.');\r\n }\r\n\r\n const resolvedFileName = fileName || DEFAULT_FILENAME;\r\n triggerDownload(source, resolvedFileName);\r\n}\r\n\r\n/**\r\n * 通过图片 URL 下载图片文件\r\n */\r\nexport async function downloadFileFromImageUrl({\r\n fileName,\r\n source,\r\n}: DownloadOptions) {\r\n const base64 = await urlToBase64(source);\r\n downloadFileFromBase64({ fileName, source: base64 });\r\n}\r\n\r\n/**\r\n * 通过 Blob 下载文件\r\n */\r\nexport function downloadFileFromBlob({\r\n fileName = DEFAULT_FILENAME,\r\n source,\r\n}: DownloadOptions<Blob>): void {\r\n if (!(source instanceof Blob)) {\r\n throw new TypeError('Invalid Blob data.');\r\n }\r\n\r\n const url = URL.createObjectURL(source);\r\n triggerDownload(url, fileName);\r\n}\r\n\r\n/**\r\n * 下载文件,支持 Blob、字符串和其他 BlobPart 类型\r\n */\r\nexport function downloadFileFromBlobPart({\r\n fileName = DEFAULT_FILENAME,\r\n source,\r\n}: DownloadOptions<BlobPart>): void {\r\n // 如果 data 不是 Blob,则转换为 Blob\r\n const blob =\r\n source instanceof Blob\r\n ? source\r\n : new Blob([source], { type: 'application/octet-stream' });\r\n\r\n // 创建对象 URL 并触发下载\r\n const url = URL.createObjectURL(blob);\r\n triggerDownload(url, fileName);\r\n}\r\n\r\n/**\r\n * img url to base64\r\n * @param url\r\n */\r\nexport function urlToBase64(url: string, mineType?: string): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const canvas = document.createElement('CANVAS') as HTMLCanvasElement;\r\n const ctx = canvas.getContext('2d');\r\n const img = new Image();\r\n img.crossOrigin = '';\r\n img.addEventListener('load', () => {\r\n if (!ctx) {\r\n return reject(new Error('Failed to create canvas context.'));\r\n }\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0);\r\n const dataURL = canvas.toDataURL(mineType || 'image/png');\r\n resolve(dataURL);\r\n });\r\n img.src = url;\r\n });\r\n}\r\n\r\n/**\r\n * 通用下载触发函数\r\n * @param href - 文件下载的 URL\r\n * @param fileName - 下载文件的名称,如果未提供则自动识别\r\n * @param revokeDelay - 清理 URL 的延迟时间 (毫秒)\r\n */\r\nexport function triggerDownload(\r\n href: string,\r\n fileName: string | undefined,\r\n revokeDelay: number = 100,\r\n): void {\r\n const defaultFileName = 'downloaded_file';\r\n const finalFileName = fileName || defaultFileName;\r\n\r\n const link = document.createElement('a');\r\n link.href = href;\r\n link.download = finalFileName;\r\n link.style.display = 'none';\r\n\r\n if (link.download === undefined) {\r\n link.setAttribute('target', '_blank');\r\n }\r\n\r\n document.body.append(link);\r\n link.click();\r\n link.remove();\r\n\r\n // 清理临时 URL 以释放内存\r\n setTimeout(() => URL.revokeObjectURL(href), revokeDelay);\r\n}\r\n\r\nfunction resolveFileName(url: string, fileName?: string): string {\r\n return fileName || url.slice(url.lastIndexOf('/') + 1) || DEFAULT_FILENAME;\r\n}\r\n","import { isFunction, isObject, isString } from '@vue/shared';\r\n\r\n/**\r\n * 检查传入的值是否为undefined。\r\n *\r\n * @param {unknown} value 要检查的值。\r\n * @returns {boolean} 如果值是undefined,返回true,否则返回false。\r\n */\r\nfunction isUndefined(value?: unknown): value is undefined {\r\n return value === undefined;\r\n}\r\n\r\n/**\r\n * 检查传入的值是否为boolean\r\n * @param value\r\n * @returns 如果值是布尔值,返回true,否则返回false。\r\n */\r\nfunction isBoolean(value: unknown): value is boolean {\r\n return typeof value === 'boolean';\r\n}\r\n\r\n/**\r\n * 检查传入的值是否为空。\r\n *\r\n * 以下情况将被认为是空:\r\n * - 值为null。\r\n * - 值为undefined。\r\n * - 值为一个空字符串。\r\n * - 值为一个长度为0的数组。\r\n * - 值为一个没有元素的Map或Set。\r\n * - 值为一个没有属性的对象。\r\n *\r\n * @param {T} value 要检查的值。\r\n * @returns {boolean} 如果值为空,返回true,否则返回false。\r\n */\r\nfunction isEmpty<T = unknown>(value?: T): value is T {\r\n if (value == null) {\r\n return true;\r\n }\r\n\r\n if (Array.isArray(value) || isString(value)) {\r\n return value.length === 0;\r\n }\r\n\r\n if (value instanceof Map || value instanceof Set) {\r\n return value.size === 0;\r\n }\r\n\r\n if (isObject(value)) {\r\n return Object.keys(value).length === 0;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * 检查传入的字符串是否为有效的HTTP或HTTPS URL。\r\n *\r\n * @param {string} url 要检查的字符串。\r\n * @return {boolean} 如果字符串是有效的HTTP或HTTPS URL,返回true,否则返回false。\r\n */\r\nfunction isHttpUrl(url?: string): boolean {\r\n if (!url) {\r\n return false;\r\n }\r\n // 使用正则表达式测试URL是否以http:// 或 https:// 开头\r\n const httpRegex = /^https?:\\/\\/.*$/;\r\n return httpRegex.test(url);\r\n}\r\n\r\n/**\r\n * 检查传入的值是否为window对象。\r\n *\r\n * @param {any} value 要检查的值。\r\n * @returns {boolean} 如果值是window对象,返回true,否则返回false。\r\n */\r\nfunction isWindow(value: any): value is Window {\r\n return (\r\n typeof window !== 'undefined' && value != null && value === value.window\r\n );\r\n}\r\n\r\n/**\r\n * 检查当前运行环境是否为Mac OS。\r\n *\r\n * 这个函数通过检查navigator.userAgent字符串来判断当前运行环境。\r\n * 如果userAgent字符串中包含\"macintosh\"或\"mac os x\"(不区分大小写),则认为当前环境是Mac OS。\r\n *\r\n * @returns {boolean} 如果当前环境是Mac OS,返回true,否则返回false。\r\n */\r\nfunction isMacOs(): boolean {\r\n const macRegex = /macintosh|mac os x/i;\r\n return macRegex.test(navigator.userAgent);\r\n}\r\n\r\n/**\r\n * 检查当前运行环境是否为Windows OS。\r\n *\r\n * 这个函数通过检查navigator.userAgent字符串来判断当前运行环境。\r\n * 如果userAgent字符串中包含\"windows\"或\"win32\"(不区分大小写),则认为当前环境是Windows OS。\r\n *\r\n * @returns {boolean} 如果当前环境是Windows OS,返回true,否则返回false。\r\n */\r\nfunction isWindowsOs(): boolean {\r\n const windowsRegex = /windows|win32/i;\r\n return windowsRegex.test(navigator.userAgent);\r\n}\r\n\r\n/**\r\n * 检查传入的值是否为数字\r\n * @param value\r\n */\r\nfunction isNumber(value: any): value is number {\r\n return typeof value === 'number' && Number.isFinite(value);\r\n}\r\n\r\n/**\r\n * Returns the first value in the provided list that is neither `null` nor `undefined`.\r\n *\r\n * This function iterates over the input values and returns the first one that is\r\n * not strictly equal to `null` or `undefined`. If all values are either `null` or\r\n * `undefined`, it returns `undefined`.\r\n *\r\n * @template T - The type of the input values.\r\n * @param {...(T | null | undefined)[]} values - A list of values to evaluate.\r\n * @returns {T | undefined} - The first value that is not `null` or `undefined`, or `undefined` if none are found.\r\n *\r\n * @example\r\n * // Returns 42 because it is the first non-null, non-undefined value.\r\n * getFirstNonNullOrUndefined(undefined, null, 42, 'hello'); // 42\r\n *\r\n * @example\r\n * // Returns 'hello' because it is the first non-null, non-undefined value.\r\n * getFirstNonNullOrUndefined(null, undefined, 'hello', 123); // 'hello'\r\n *\r\n * @example\r\n * // Returns undefined because all values are either null or undefined.\r\n * getFirstNonNullOrUndefined(undefined, null); // undefined\r\n */\r\nfunction getFirstNonNullOrUndefined<T>(\r\n ...values: (null | T | undefined)[]\r\n): T | undefined {\r\n for (const value of values) {\r\n if (value != null) {\r\n return value;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nexport {\r\n getFirstNonNullOrUndefined,\r\n isBoolean,\r\n isEmpty,\r\n isFunction,\r\n isHttpUrl,\r\n isMacOs,\r\n isNumber,\r\n isObject,\r\n isString,\r\n isUndefined,\r\n isWindow,\r\n isWindowsOs,\r\n};\r\n","/**\r\n * 将字符串的首字母大写\r\n * @param string\r\n */\r\nfunction capitalizeFirstLetter(string: string): string {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n}\r\n\r\n/**\r\n * 将字符串的首字母转换为小写。\r\n *\r\n * @param str 要转换的字符串\r\n * @returns 首字母小写的字符串\r\n */\r\nfunction toLowerCaseFirstLetter(str: string): string {\r\n if (!str) return str; // 如果字符串为空,直接返回\r\n return str.charAt(0).toLowerCase() + str.slice(1);\r\n}\r\n\r\n/**\r\n * 生成驼峰命名法的键名\r\n * @param key\r\n * @param parentKey\r\n */\r\nfunction toCamelCase(key: string, parentKey: string): string {\r\n if (!parentKey) {\r\n return key;\r\n }\r\n return parentKey + key.charAt(0).toUpperCase() + key.slice(1);\r\n}\r\n\r\nfunction kebabToCamelCase(str: string): string {\r\n return str\r\n .split('-')\r\n .filter(Boolean)\r\n .map((word, index) =>\r\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1),\r\n )\r\n .join('');\r\n}\r\n\r\nexport {\r\n capitalizeFirstLetter,\r\n kebabToCamelCase,\r\n toCamelCase,\r\n toLowerCaseFirstLetter,\r\n};\r\n","import { createDefu } from 'defu';\r\n\r\nexport { createDefu as createMerge, defu as merge } from 'defu';\r\n\r\nexport const mergeWithArrayOverride = createDefu((originObj, key, updates) => {\r\n if (Array.isArray(originObj[key]) && Array.isArray(updates)) {\r\n originObj[key] = updates;\r\n return true;\r\n }\r\n});\r\n","import type NProgress from 'nprogress';\r\n\r\n// 创建一个NProgress实例的变量,初始值为null\r\nlet nProgressInstance: null | typeof NProgress = null;\r\n\r\n/**\r\n * 动态加载NProgress库,并进行配置。\r\n * 此函数首先检查是否已经加载过NProgress库,如果已经加载过,则直接返回NProgress实例。\r\n * 否则,动态导入NProgress库,进行配置,然后返回NProgress实例。\r\n *\r\n * @returns NProgress实例的Promise对象。\r\n */\r\nasync function loadNprogress() {\r\n if (nProgressInstance) {\r\n return nProgressInstance;\r\n }\r\n nProgressInstance = await import('nprogress');\r\n nProgressInstance.configure({\r\n showSpinner: true,\r\n speed: 300,\r\n });\r\n return nProgressInstance;\r\n}\r\n\r\n/**\r\n * 开始显示进度条。\r\n * 此函数首先加载NProgress库,然后调用NProgress的start方法开始显示进度条。\r\n */\r\nasync function startProgress() {\r\n const nprogress = await loadNprogress();\r\n nprogress?.start();\r\n}\r\n\r\n/**\r\n * 停止显示进度条,并隐藏进度条。\r\n * 此函数首先加载NProgress库,然后调用NProgress的done方法停止并隐藏进度条。\r\n */\r\nasync function stopProgress() {\r\n const nprogress = await loadNprogress();\r\n nprogress?.done();\r\n}\r\n\r\nexport { startProgress, stopProgress };\r\n","/**\r\n * 加载js文件\r\n * @param src js文件地址\r\n */\r\nfunction loadScript(src: string) {\r\n const existingScript = document.querySelector(`script[src=\"${src}\"]`);\r\n if (existingScript) {\r\n // 如果已经加载过,直接 resolve\r\n return Promise.resolve();\r\n }\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = src;\r\n script.addEventListener('load', () => resolve());\r\n script.addEventListener('error', () =>\r\n reject(new Error(`Failed to load script: ${src}`)),\r\n );\r\n document.head.append(script);\r\n });\r\n}\r\n\r\nexport { loadScript };\r\n","export class StateHandler {\r\n private condition: boolean = false;\r\n private rejectCondition: (() => void) | null = null;\r\n private resolveCondition: (() => void) | null = null;\r\n\r\n isConditionTrue(): boolean {\r\n return this.condition;\r\n }\r\n\r\n reset() {\r\n this.condition = false;\r\n this.clearPromises();\r\n }\r\n\r\n // 触发状态为 false 时,reject\r\n setConditionFalse() {\r\n this.condition = false;\r\n if (this.rejectCondition) {\r\n this.rejectCondition();\r\n this.clearPromises();\r\n }\r\n }\r\n\r\n // 触发状态为 true 时,resolve\r\n setConditionTrue() {\r\n this.condition = true;\r\n if (this.resolveCondition) {\r\n this.resolveCondition();\r\n this.clearPromises();\r\n }\r\n }\r\n\r\n // 返回一个 Promise,等待 condition 变为 true\r\n waitForCondition(): Promise<void> {\r\n if (this.condition) {\r\n return Promise.resolve(); // 如果 condition 已经为 true,立即 resolve\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.resolveCondition = resolve;\r\n this.rejectCondition = reject;\r\n });\r\n }\r\n\r\n // 清理 resolve/reject 函数\r\n private clearPromises() {\r\n this.resolveCondition = null;\r\n this.rejectCondition = null;\r\n }\r\n}\r\n","/**\r\n * @param { Readonly<Promise> } promise\r\n * @param {object=} errorExt - Additional Information you can pass to the err object\r\n * @return { Promise }\r\n */\r\nexport async function to<T, U = Error>(\r\n promise: Readonly<Promise<T>>,\r\n errorExt?: object,\r\n): Promise<[null, T] | [U, undefined]> {\r\n try {\r\n const data = await promise;\r\n return [null, data] as [null, T];\r\n } catch (error) {\r\n if (errorExt) {\r\n const parsedError = Object.assign({}, error, errorExt);\r\n return [parsedError as U, undefined];\r\n }\r\n return [error as U, undefined];\r\n }\r\n}\r\n","interface TreeConfigOptions {\r\n // 子属性的名称,默认为'children'\r\n childProps: string;\r\n}\r\n\r\n/**\r\n * @zh_CN 遍历树形结构,并返回所有节点中指定的值。\r\n * @param tree 树形结构数组\r\n * @param getValue 获取节点值的函数\r\n * @param options 作为子节点数组的可选属性名称。\r\n * @returns 所有节点中指定的值的数组\r\n */\r\nfunction traverseTreeValues<T, V>(\r\n tree: T[],\r\n getValue: (node: T) => V,\r\n options?: TreeConfigOptions,\r\n): V[] {\r\n const result: V[] = [];\r\n const { childProps } = options || {\r\n childProps: 'children',\r\n };\r\n\r\n const dfs = (treeNode: T) => {\r\n const value = getValue(treeNode);\r\n result.push(value);\r\n const children = (treeNode as Record<string, any>)?.[childProps];\r\n if (!children) {\r\n return;\r\n }\r\n if (children.length > 0) {\r\n for (const child of children) {\r\n dfs(child);\r\n }\r\n }\r\n };\r\n\r\n for (const treeNode of tree) {\r\n dfs(treeNode);\r\n }\r\n return result.filter(Boolean);\r\n}\r\n\r\n/**\r\n * 根据条件过滤给定树结构的节点,并以原有顺序返回所有匹配节点的数组。\r\n * @param tree 要过滤的树结构的根节点数组。\r\n * @param filter 用于匹配每个节点的条件。\r\n * @param options 作为子节点数组的可选属性名称。\r\n * @returns 包含所有匹配节点的数组。\r\n */\r\nfunction filterTree<T extends Record<string, any>>(\r\n tree: T[],\r\n filter: (node: T) => boolean,\r\n options?: TreeConfigOptions,\r\n): T[] {\r\n const { childProps } = options || {\r\n childProps: 'children',\r\n };\r\n\r\n const _filterTree = (nodes: T[]): T[] => {\r\n return nodes.filter((node: Record<string, any>) => {\r\n if (filter(node as T)) {\r\n if (node[childProps]) {\r\n node[childProps] = _filterTree(node[childProps]);\r\n }\r\n return true;\r\n }\r\n return false;\r\n });\r\n };\r\n\r\n return _filterTree(tree);\r\n}\r\n\r\n/**\r\n * 根据条件重新映射给定树结构的节\r\n * @param tree 要过滤的树结构的根节点数组。\r\n * @param mapper 用于map每个节点的条件。\r\n * @param options 作为子节点数组的可选属性名称。\r\n */\r\nfunction mapTree<T, V extends Record<string, any>>(\r\n tree: T[],\r\n mapper: (node: T) => V,\r\n options?: TreeConfigOptions,\r\n): V[] {\r\n const { childProps } = options || {\r\n childProps: 'children',\r\n };\r\n return tree.map((node) => {\r\n const mapperNode: Record<string, any> = mapper(node);\r\n if (mapperNode[childProps]) {\r\n mapperNode[childProps] = mapTree(mapperNode[childProps], mapper, options);\r\n }\r\n return mapperNode as V;\r\n });\r\n}\r\n\r\n/**\r\n * 对树形结构数据进行递归排序\r\n * @param treeData - 树形数据数组\r\n * @param sortFunction - 排序函数,用于定义排序规则\r\n * @param options - 配置选项,包括子节点属性名\r\n * @returns 排序后的树形数据\r\n */\r\nfunction sortTree<T extends Record<string, any>>(\r\n treeData: T[],\r\n sortFunction: (a: T, b: T) => number,\r\n options?: TreeConfigOptions,\r\n): T[] {\r\n const { childProps } = options || {\r\n childProps: 'children',\r\n };\r\n\r\n return treeData.toSorted(sortFunction).map((item) => {\r\n const children = item[childProps];\r\n if (children && Array.isArray(children) && children.length > 0) {\r\n return {\r\n ...item,\r\n [childProps]: sortTree(children, sortFunction, options),\r\n };\r\n }\r\n return item;\r\n });\r\n}\r\n\r\nexport { filterTree, mapTree, sortTree, traverseTreeValues };\r\n","/**\r\n * 根据指定字段对对象数组进行去重\r\n * @param arr 要去重的对象数组\r\n * @param key 去重依据的字段名\r\n * @returns 去重后的对象数组\r\n */\r\nfunction uniqueByField<T>(arr: T[], key: keyof T): T[] {\r\n const seen = new Map<any, T>();\r\n return arr.filter((item) => {\r\n const value = item[key];\r\n if (seen.has(value)) {\r\n return false;\r\n }\r\n seen.set(value, item);\r\n return true;\r\n });\r\n}\r\n\r\nexport { uniqueByField };\r\n","/**\r\n * 更新 CSS 变量的函数\r\n * @param variables 要更新的 CSS 变量与其新值的映射\r\n */\r\nfunction updateCSSVariables(\r\n variables: { [key: string]: string },\r\n id = '__admin-styles__',\r\n): void {\r\n // 获取或创建内联样式表元素\r\n const styleElement =\r\n document.querySelector(`#${id}`) || document.createElement('style');\r\n\r\n styleElement.id = id;\r\n\r\n // 构建要更新的 CSS 变量的样式文本\r\n let cssText = ':root {';\r\n for (const key in variables) {\r\n if (Object.prototype.hasOwnProperty.call(variables, key)) {\r\n cssText += `${key}: ${variables[key]};`;\r\n }\r\n }\r\n cssText += '}';\r\n\r\n // 将样式文本赋值给内联样式表\r\n styleElement.textContent = cssText;\r\n\r\n // 将内联样式表添加到文档头部\r\n if (!document.querySelector(`#${id}`)) {\r\n setTimeout(() => {\r\n document.head.append(styleElement);\r\n });\r\n }\r\n}\r\n\r\nexport { updateCSSVariables };\r\n","export function bindMethods<T extends object>(instance: T): void {\r\n const prototype = Object.getPrototypeOf(instance);\r\n const propertyNames = Object.getOwnPropertyNames(prototype);\r\n\r\n for (const propertyName of propertyNames) {\r\n const descriptor = Object.getOwnPropertyDescriptor(prototype, propertyName);\r\n const propertyValue = instance[propertyName as keyof T];\r\n\r\n if (\r\n typeof propertyValue === 'function' &&\r\n propertyName !== 'constructor' &&\r\n descriptor &&\r\n !descriptor.get &&\r\n !descriptor.set\r\n ) {\r\n instance[propertyName as keyof T] = propertyValue.bind(instance);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 获取嵌套对象的字段值\r\n * @param obj - 要查找的对象\r\n * @param path - 用于查找字段的路径,使用小数点分隔\r\n * @returns 字段值,或者未找到时返回 undefined\r\n */\r\nexport function getNestedValue<T>(obj: T, path: string): any {\r\n if (typeof path !== 'string' || path.length === 0) {\r\n throw new Error('Path must be a non-empty string');\r\n }\r\n // 把路径字符串按 \".\" 分割成数组\r\n const keys = path.split('.') as (number | string)[];\r\n\r\n let current: any = obj;\r\n\r\n for (const key of keys) {\r\n if (current == null) {\r\n return undefined;\r\n }\r\n current = current[key as keyof typeof current];\r\n }\r\n\r\n return current;\r\n}\r\n","function isUnsafeProperty(key) {\n return key === '__proto__';\n}\n\nexport { isUnsafeProperty };\n","function isDeepKey(key) {\n switch (typeof key) {\n case 'number':\n case 'symbol': {\n return false;\n }\n case 'string': {\n return key.includes('.') || key.includes('[') || key.includes(']');\n }\n }\n}\n\nexport { isDeepKey };\n","function toKey(value) {\n if (typeof value === 'string' || typeof value === 'symbol') {\n return value;\n }\n if (Object.is(value?.valueOf?.(), -0)) {\n return '-0';\n }\n return String(value);\n}\n\nexport { toKey };\n","function toString(value) {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(toString).join(',');\n }\n const result = String(value);\n if (result === '0' && Object.is(Number(value), -0)) {\n return '-0';\n }\n return result;\n}\n\nexport { toString };\n","import { toString } from './toString.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\n\nfunction toPath(deepKey) {\n if (Array.isArray(deepKey)) {\n return deepKey.map(toKey);\n }\n if (typeof deepKey === 'symbol') {\n return [deepKey];\n }\n deepKey = toString(deepKey);\n const result = [];\n const length = deepKey.length;\n if (length === 0) {\n return result;\n }\n let index = 0;\n let key = '';\n let quoteChar = '';\n let bracket = false;\n if (deepKey.charCodeAt(0) === 46) {\n result.push('');\n index++;\n }\n while (index < length) {\n const char = deepKey[index];\n if (quoteChar) {\n if (char === '\\\\' && index + 1 < length) {\n index++;\n key += deepKey[index];\n }\n else if (char === quoteChar) {\n quoteChar = '';\n }\n else {\n key += char;\n }\n }\n else if (bracket) {\n if (char === '\"' || char === \"'\") {\n quoteChar = char;\n }\n else if (char === ']') {\n bracket = false;\n result.push(key);\n key = '';\n }\n else {\n key += char;\n }\n }\n else {\n if (char === '[') {\n bracket = true;\n if (key) {\n result.push(key);\n key = '';\n }\n }\n else if (char === '.') {\n if (key) {\n result.push(key);\n key = '';\n }\n }\n else {\n key += char;\n }\n }\n index++;\n }\n if (key) {\n result.push(key);\n }\n return result;\n}\n\nexport { toPath };\n","import { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';\nimport { isDeepKey } from '../_internal/isDeepKey.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction get(object, path, defaultValue) {\n if (object == null) {\n return defaultValue;\n }\n switch (typeof path) {\n case 'string': {\n if (isUnsafeProperty(path)) {\n return defaultValue;\n }\n const result = object[path];\n if (result === undefined) {\n if (isDeepKey(path)) {\n return get(object, toPath(path), defaultValue);\n }\n else {\n return defaultValue;\n }\n }\n return result;\n }\n case 'number':\n case 'symbol': {\n if (typeof path === 'number') {\n path = toKey(path);\n }\n const result = object[path];\n if (result === undefined) {\n return defaultValue;\n }\n return result;\n }\n default: {\n if (Array.isArray(path)) {\n return getWithPath(object, path, defaultValue);\n }\n if (Object.is(path?.valueOf(), -0)) {\n path = '-0';\n }\n else {\n path = String(path);\n }\n if (isUnsafeProperty(path)) {\n return defaultValue;\n }\n const result = object[path];\n if (result === undefined) {\n return defaultValue;\n }\n return result;\n }\n }\n}\nfunction getWithPath(object, path, defaultValue) {\n if (path.length === 0) {\n return defaultValue;\n }\n let current = object;\n for (let index = 0; index < path.length; index++) {\n if (current == null) {\n return defaultValue;\n }\n if (isUnsafeProperty(path[index])) {\n return defaultValue;\n }\n current = current[path[index]];\n }\n if (current === undefined) {\n return defaultValue;\n }\n return current;\n}\n\nexport { get };\n","function isObject(value) {\n return value !== null && (typeof value === 'object' || typeof value === 'function');\n}\n\nexport { isObject };\n","function eq(value, other) {\n return value === other || (Number.isNaN(value) && Number.isNaN(other));\n}\n\nexport { eq };\n","function getSymbols(object) {\n return Object.getOwnPropertySymbols(object).filter(symbol => Object.prototype.propertyIsEnumerable.call(object, symbol));\n}\n\nexport { getSymbols };\n","function getTag(value) {\n if (value == null) {\n return value === undefined ? '[object Undefined]' : '[object Null]';\n }\n return Object.prototype.toString.call(value);\n}\n\nexport { getTag };\n","const regexpTag = '[object RegExp]';\nconst stringTag = '[object String]';\nconst numberTag = '[object Number]';\nconst booleanTag = '[object Boolean]';\nconst argumentsTag = '[object Arguments]';\nconst symbolTag = '[object Symbol]';\nconst dateTag = '[object Date]';\nconst mapTag = '[object Map]';\nconst setTag = '[object Set]';\nconst arrayTag = '[object Array]';\nconst functionTag = '[object Function]';\nconst arrayBufferTag = '[object ArrayBuffer]';\nconst objectTag = '[object Object]';\nconst errorTag = '[object Error]';\nconst dataViewTag = '[object DataView]';\nconst uint8ArrayTag = '[object Uint8Array]';\nconst uint8ClampedArrayTag = '[object Uint8ClampedArray]';\nconst uint16ArrayTag = '[object Uint16Array]';\nconst uint32ArrayTag = '[object Uint32Array]';\nconst bigUint64ArrayTag = '[object BigUint64Array]';\nconst int8ArrayTag = '[object Int8Array]';\nconst int16ArrayTag = '[object Int16Array]';\nconst int32ArrayTag = '[object Int32Array]';\nconst bigInt64ArrayTag = '[object BigInt64Array]';\nconst float32ArrayTag = '[object Float32Array]';\nconst float64ArrayTag = '[object Float64Array]';\n\nexport { argumentsTag, arrayBufferTag, arrayTag, bigInt64ArrayTag, bigUint64ArrayTag, booleanTag, dataViewTag, dateTag, errorTag, float32ArrayTag, float64ArrayTag, functionTag, int16ArrayTag, int32ArrayTag, int8ArrayTag, mapTag, numberTag, objectTag, regexpTag, setTag, stringTag, symbolTag, uint16ArrayTag, uint32ArrayTag, uint8ArrayTag, uint8ClampedArrayTag };\n","const IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length = Number.MAX_SAFE_INTEGER) {\n switch (typeof value) {\n case 'number': {\n return Number.isInteger(value) && value >= 0 && value < length;\n }\n case 'symbol': {\n return false;\n }\n case 'string': {\n return IS_UNSIGNED_INTEGER.test(value);\n }\n }\n}\n\nexport { isIndex };\n","function isSymbol(value) {\n return typeof value === 'symbol' || value instanceof Symbol;\n}\n\nexport { isSymbol };\n","import { isSymbol } from '../predicate/isSymbol.mjs';\n\nconst regexIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\nconst regexIsPlainProp = /^\\w*$/;\nfunction isKey(value, object) {\n if (Array.isArray(value)) {\n return false;\n }\n if (typeof value === 'number' || typeof value === 'boolean' || value == null || isSymbol(value)) {\n return true;\n }\n return ((typeof value === 'string' && (regexIsPlainProp.test(value) || !regexIsDeepProp.test(value))) ||\n (object != null && Object.hasOwn(object, value)));\n}\n\nexport { isKey };\n","import { eq } from '../util/eq.mjs';\n\nconst assignValue = (object, key, value) => {\n const objValue = object[key];\n if (!(Object.hasOwn(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) {\n object[key] = value;\n }\n};\n\nexport { assignValue };\n","import { get } from './get.mjs';\nimport { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';\nimport { assignValue } from '../_internal/assignValue.mjs';\nimport { isIndex } from '../_internal/isIndex.mjs';\nimport { isKey } from '../_internal/isKey.mjs';\nimport { toKey } from '../_internal/toKey.mjs';\nimport { isObject } from '../predicate/isObject.mjs';\nimport { toPath } from '../util/toPath.mjs';\n\nfunction updateWith(obj, path, updater, customizer) {\n if (obj == null && !isObject(obj)) {\n return obj;\n }\n let resolvedPath;\n if (isKey(path, obj)) {\n resolvedPath = [path];\n }\n else if (Array.isArray(path)) {\n resolvedPath = path;\n }\n else {\n resolvedPath = toPath(path);\n }\n const updateValue = updater(get(obj, resolvedPath));\n let current = obj;\n for (let i = 0; i < resolvedPath.length && current != null; i++) {\n const key = toKey(resolvedPath[i]);\n if (isUnsafeProperty(key)) {\n continue;\n }\n let newValue;\n if (i === resolvedPath.length - 1) {\n newValue = updateValue;\n }\n else {\n const objValue = current[key];\n const customizerResult = customizer?.(objValue, key, obj);\n newValue =\n customizerResult !== undefined\n ? customizerResult\n : isObject(objValue)\n ? objValue\n : isIndex(resolvedPath[i + 1])\n ? []\n : {};\n }\n assignValue(current, key, newValue);\n current = current[key];\n }\n return obj;\n}\n\nexport { updateWith };\n","import { updateWith } from './updateWith.mjs';\n\nfunction set(obj, path, value) {\n return updateWith(obj, path, () => value, () => undefined);\n}\n\nexport { set };\n","function isPlainObject(value) {\n if (!value || typeof value !== 'object') {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n const hasObjectPrototype = proto === null ||\n proto === Object.prototype ||\n Object.getPrototypeOf(proto) === null;\n if (!hasObjectPrototype) {\n return false;\n }\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nexport { isPlainObject };\n","import { isPlainObject } from './isPlainObject.mjs';\nimport { getSymbols } from '../compat/_internal/getSymbols.mjs';\nimport { getTag } from '../compat/_internal/getTag.mjs';\nimport { functionTag, regexpTag, symbolTag, dateTag, booleanTag, numberTag, stringTag, objectTag, errorTag, dataViewTag, arrayBufferTag, float64ArrayTag, float32ArrayTag, bigInt64ArrayTag, int32ArrayTag, int16ArrayTag, int8ArrayTag, bigUint64ArrayTag, uint32ArrayTag, uint16ArrayTag, uint8ClampedArrayTag, uint8ArrayTag, arrayTag, setTag, mapTag, argumentsTag } from '../compat/_internal/tags.mjs';\nimport { eq } from '../compat/util/eq.mjs';\n\nfunction isEqualWith(a, b, areValuesEqual) {\n return isEqualWithImpl(a, b, undefined, undefined, undefined, undefined, areValuesEqual);\n}\nfunction isEqualWithImpl(a, b, property, aParent, bParent, stack, areValuesEqual) {\n const result = areValuesEqual(a, b, property, aParent, bParent, stack);\n if (result !== undefined) {\n return result;\n }\n if (typeof a === typeof b) {\n switch (typeof a) {\n case 'bigint':\n case 'string':\n case 'boolean':\n case 'symbol':\n case 'undefined': {\n return a === b;\n }\n case 'number': {\n return a === b || Object.is(a, b);\n }\n case 'function': {\n return a === b;\n }\n case 'object': {\n return areObjectsEqual(a, b, stack, areValuesEqual);\n }\n }\n }\n return areObjectsEqual(a, b, stack, areValuesEqual);\n}\nfunction areObjectsEqual(a, b, stack, areValuesEqual) {\n if (Object.is(a, b)) {\n return true;\n }\n let aTag = getTag(a);\n let bTag = getTag(b);\n if (aTag === argumentsTag) {\n aTag = objectTag;\n }\n if (bTag === argumentsTag) {\n bTag = objectTag;\n }\n if (aTag !== bTag) {\n return false;\n }\n switch (aTag) {\n case stringTag:\n return a.toString() === b.toString();\n case numberTag: {\n const x = a.valueOf();\n const y = b.valueOf();\n return eq(x, y);\n }\n case booleanTag:\n case dateTag:\n case symbolTag:\n return Object.is(a.valueOf(), b.valueOf());\n case regexpTag: {\n return a.source === b.source && a.flags === b.flags;\n }\n case functionTag: {\n return a === b;\n }\n }\n stack = stack ?? new Map();\n const aStack = stack.get(a);\n const bStack = stack.get(b);\n if (aStack != null && bStack != null) {\n return aStack === b;\n }\n stack.set(a, b);\n stack.set(b, a);\n try {\n switch (aTag) {\n case mapTag: {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a.entries()) {\n if (!b.has(key) || !isEqualWithImpl(value, b.get(key), key, a, b, stack, areValuesEqual)) {\n return false;\n }\n }\n return true;\n }\n case setTag: {\n if (a.size !== b.size) {\n return false;\n }\n const aValues = Array.from(a.values());\n const bValues = Array.from(b.values());\n for (let i = 0; i < aValues.length; i++) {\n const aValue = aValues[i];\n const index = bValues.findIndex(bValue => {\n return isEqualWithImpl(aValue, bValue, undefined, a, b, stack, areValuesEqual);\n });\n if (index === -1) {\n return false;\n }\n bValues.splice(index, 1);\n }\n return true;\n }\n case arrayTag:\n case uint8ArrayTag:\n case uint8ClampedArrayTag:\n case uint16ArrayTag:\n case uint32ArrayTag:\n case bigUint64ArrayTag:\n case int8ArrayTag:\n case int16ArrayTag:\n case int32ArrayTag:\n case bigInt64ArrayTag:\n case float32ArrayTag:\n case float64ArrayTag: {\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(a) !== Buffer.isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (!isEqualWithImpl(a[i], b[i], i, a, b, stack, areValuesEqual)) {\n return false;\n }\n }\n return true;\n }\n case arrayBufferTag: {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);\n }\n case dataViewTag: {\n if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {\n return false;\n }\n return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);\n }\n case errorTag: {\n return a.name === b.name && a.message === b.message;\n }\n case objectTag: {\n const areEqualInstances = areObjectsEqual(a.constructor, b.constructor, stack, areValuesEqual) ||\n (isPlainObject(a) && isPlainObject(b));\n if (!areEqualInstances) {\n return false;\n }\n const aKeys = [...Object.keys(a), ...getSymbols(a)];\n const bKeys = [...Object.keys(b), ...getSymbols(b)];\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (let i = 0; i < aKeys.length; i++) {\n const propKey = aKeys[i];\n const aProp = a[propKey];\n if (!Object.hasOwn(b, propKey)) {\n return false;\n }\n const bProp = b[propKey];\n if (!isEqualWithImpl(aProp, bProp, propKey, a, b, stack, areValuesEqual)) {\n return false;\n }\n }\n return true;\n }\n default: {\n return false;\n }\n }\n }\n finally {\n stack.delete(a);\n stack.delete(b);\n }\n}\n\nexport { isEqualWith };\n","function noop() { }\n\nexport { noop };\n","import { isEqualWith } from './isEqualWith.mjs';\nimport { noop } from '../function/noop.mjs';\n\nfunction isEqual(a, b) {\n return isEqualWith(a, b, noop);\n}\n\nexport { isEqual };\n","/**\r\n * 全局复用的变量、组件、配置,各个模块之间共享\r\n * 通过单例模式实现,单例必须注意不受请求影响,例如用户信息这些需要根据请求获取的。后续如果有ssr需求,也不会影响\r\n */\r\n\r\ninterface ComponentsState {\r\n [key: string]: any;\r\n}\r\n\r\ninterface MessageState {\r\n copyPreferencesSuccess?: (title: string, content?: string) => void;\r\n}\r\n\r\nexport interface IGlobalSharedState {\r\n components: ComponentsState;\r\n message: MessageState;\r\n}\r\n\r\nclass GlobalShareState {\r\n #components: ComponentsState = {};\r\n #message: MessageState = {};\r\n\r\n /**\r\n * 定义框架内部各个场景的消息提示\r\n */\r\n public defineMessage({ copyPreferencesSuccess }: MessageState) {\r\n if (copyPreferencesSuccess) {\r\n this.#message.copyPreferencesSuccess = copyPreferencesSuccess;\r\n }\r\n }\r\n\r\n public getComponents(): ComponentsState {\r\n return this.#components;\r\n }\r\n\r\n public getMessage(): MessageState {\r\n return this.#message;\r\n }\r\n\r\n public setComponents(value: ComponentsState) {\r\n this.#components = value;\r\n }\r\n}\r\n\r\nexport const globalShareState = new GlobalShareState();\r\n","import { breakpointsTailwind, useBreakpoints } from '@vueuse/core';\r\n\r\nexport function useIsMobile() {\r\n const breakpoints = useBreakpoints(breakpointsTailwind);\r\n const isMobile = breakpoints.smaller('md');\r\n return { isMobile };\r\n}\r\n","import type { CSSProperties } from 'vue';\r\n\r\nimport type { VisibleDomRect } from '@admin-kit/shared/utils';\r\n\r\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\r\n\r\nimport {\r\n CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT,\r\n CSS_VARIABLE_LAYOUT_CONTENT_WIDTH,\r\n CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT,\r\n CSS_VARIABLE_LAYOUT_HEADER_HEIGHT,\r\n} from '@admin-kit/shared/constants';\r\nimport { getElementVisibleRect } from '@admin-kit/shared/utils';\r\n\r\nimport { useCssVar, useDebounceFn } from '@vueuse/core';\r\n\r\n/**\r\n * @zh_CN content style\r\n */\r\nexport function useLayoutContentStyle() {\r\n let resizeObserver: null | ResizeObserver = null;\r\n const contentElement = ref<HTMLDivElement | null>(null);\r\n const visibleDomRect = ref<null | VisibleDomRect>(null);\r\n const contentHeight = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT);\r\n const contentWidth = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_WIDTH);\r\n\r\n const overlayStyle = computed((): CSSProperties => {\r\n const { height, left, top, width } = visibleDomRect.value ?? {};\r\n return {\r\n height: `${height}px`,\r\n left: `${left}px`,\r\n position: 'fixed',\r\n top: `${top}px`,\r\n width: `${width}px`,\r\n zIndex: 150,\r\n };\r\n });\r\n\r\n const debouncedCalcHeight = useDebounceFn(\r\n (_entries: ResizeObserverEntry[]) => {\r\n visibleDomRect.value = getElementVisibleRect(contentElement.value);\r\n contentHeight.value = `${visibleDomRect.value.height}px`;\r\n contentWidth.value = `${visibleDomRect.value.width}px`;\r\n },\r\n 16,\r\n );\r\n\r\n onMounted(() => {\r\n if (contentElement.value && !resizeObserver) {\r\n resizeObserver = new ResizeObserver(debouncedCalcHeight);\r\n resizeObserver.observe(contentElement.value);\r\n }\r\n });\r\n\r\n onUnmounted(() => {\r\n resizeObserver?.disconnect();\r\n resizeObserver = null;\r\n });\r\n\r\n return { contentElement, overlayStyle, visibleDomRect };\r\n}\r\n\r\nexport function useLayoutHeaderStyle() {\r\n const headerHeight = useCssVar(CSS_VARIABLE_LAYOUT_HEADER_HEIGHT);\r\n\r\n return {\r\n getLayoutHeaderHeight: () => {\r\n return Number.parseInt(`${headerHeight.value}`, 10);\r\n },\r\n setLayoutHeaderHeight: (height: number) => {\r\n headerHeight.value = `${height}px`;\r\n },\r\n };\r\n}\r\n\r\nexport function useLayoutFooterStyle() {\r\n const footerHeight = useCssVar(CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT);\r\n\r\n return {\r\n getLayoutFooterHeight: () => {\r\n return Number.parseInt(`${footerHeight.value}`, 10);\r\n },\r\n setLayoutFooterHeight: (height: number) => {\r\n footerHeight.value = `${height}px`;\r\n },\r\n };\r\n}\r\n","import { DEFAULT_NAMESPACE } from '@admin-kit/shared/constants';\r\n\r\n/**\r\n * @see copy https://github.com/element-plus/element-plus/blob/dev/packages/hooks/use-namespace/index.ts\r\n */\r\n\r\nconst statePrefix = 'is-';\r\n\r\nconst _bem = (\r\n namespace: string,\r\n block: string,\r\n blockSuffix: string,\r\n element: string,\r\n modifier: string,\r\n) => {\r\n let cls = `${namespace}-${block}`;\r\n if (blockSuffix) {\r\n cls += `-${blockSuffix}`;\r\n }\r\n if (element) {\r\n cls += `__${element}`;\r\n }\r\n if (modifier) {\r\n cls += `--${modifier}`;\r\n }\r\n return cls;\r\n};\r\n\r\nconst is: {\r\n (name: string): string;\r\n (name: string, state: boolean | undefined): string;\r\n} = (name: string, ...args: [] | [boolean | undefined]) => {\r\n const state = args.length > 0 ? args[0] : true;\r\n return name && state ? `${statePrefix}${name}` : '';\r\n};\r\n\r\nconst useNamespace = (block: string) => {\r\n const namespace = DEFAULT_NAMESPACE;\r\n const b = (blockSuffix = '') => _bem(namespace, block, blockSuffix, '', '');\r\n const e = (element?: string) =>\r\n element ? _bem(namespace, block, '', element, '') : '';\r\n const m = (modifier?: string) =>\r\n modifier ? _bem(namespace, block, '', '', modifier) : '';\r\n const be = (blockSuffix?: string, element?: string) =>\r\n blockSuffix && element\r\n ? _bem(namespace, block, blockSuffix, element, '')\r\n : '';\r\n const em = (element?: string, modifier?: string) =>\r\n element && modifier ? _bem(namespace, block, '', element, modifier) : '';\r\n const bm = (blockSuffix?: string, modifier?: string) =>\r\n blockSuffix && modifier\r\n ? _bem(namespace, block, blockSuffix, '', modifier)\r\n : '';\r\n const bem = (blockSuffix?: string, element?: string, modifier?: string) =>\r\n blockSuffix && element && modifier\r\n ? _bem(namespace, block, blockSuffix, element, modifier)\r\n : '';\r\n\r\n // for css var\r\n // --el-xxx: value;\r\n const cssVar = (object: Record<string, string>) => {\r\n const styles: Record<string, string> = {};\r\n for (const key in object) {\r\n if (object[key]) {\r\n styles[`--${namespace}-${key}`] = object[key];\r\n }\r\n }\r\n return styles;\r\n };\r\n // with block\r\n const cssVarBlock = (object: Record<string, string>) => {\r\n const styles: Record<string, string> = {};\r\n for (const key in object) {\r\n if (object[key]) {\r\n styles[`--${namespace}-${block}-${key}`] = object[key];\r\n }\r\n }\r\n return styles;\r\n };\r\n\r\n const cssVarName = (name: string) => `--${namespace}-${name}`;\r\n const cssVarBlockName = (name: string) => `--${namespace}-${block}-${name}`;\r\n\r\n return {\r\n b,\r\n be,\r\n bem,\r\n bm,\r\n // css\r\n cssVar,\r\n cssVarBlock,\r\n cssVarBlockName,\r\n cssVarName,\r\n e,\r\n em,\r\n is,\r\n m,\r\n namespace,\r\n };\r\n};\r\n\r\ntype UseNamespaceReturn = ReturnType<typeof useNamespace>;\r\n\r\nexport type { UseNamespaceReturn };\r\nexport { useNamespace };\r\n","import type { ComputedRef, Ref } from 'vue';\r\n\r\nimport { computed, getCurrentInstance, unref, useAttrs, useSlots } from 'vue';\r\n\r\nimport {\r\n getFirstNonNullOrUndefined,\r\n kebabToCamelCase,\r\n} from '@admin-kit/shared/utils';\r\n\r\n/**\r\n * 依次从插槽、attrs、props、state 中获取值\r\n * @param key\r\n * @param props\r\n * @param state\r\n */\r\nexport function usePriorityValue<\r\n T extends Record<string, any>,\r\n S extends Record<string, any>,\r\n K extends keyof T = keyof T,\r\n>(key: K, props: T, state: Readonly<Ref<NoInfer<S>>> | undefined) {\r\n const instance = getCurrentInstance();\r\n const slots = useSlots();\r\n const attrs = useAttrs() as T;\r\n\r\n const value = computed((): T[K] => {\r\n // props不管有没有传,都会有默认值,会影响这里的顺序,\r\n // 通过判断原始props是否有值来判断是否传入\r\n const rawProps = (instance?.vnode?.props || {}) as T;\r\n\r\n const standardRawProps = {} as T;\r\n\r\n for (const [key, value] of Object.entries(rawProps)) {\r\n standardRawProps[kebabToCamelCase(key) as K] = value;\r\n }\r\n const propsKey =\r\n standardRawProps?.[key] === undefined ? undefined : props[key];\r\n\r\n // slot可以关闭\r\n return getFirstNonNullOrUndefined(\r\n slots[key as string],\r\n attrs[key],\r\n propsKey,\r\n state?.value?.[key as keyof S],\r\n ) as T[K];\r\n });\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * 批量获取state中的值(每个值都是ref)\r\n * @param props\r\n * @param state\r\n */\r\nexport function usePriorityValues<\r\n T extends Record<string, any>,\r\n S extends Ref<Record<string, any>> = Readonly<Ref<NoInfer<T>, NoInfer<T>>>,\r\n>(props: T, state: S | undefined) {\r\n const result: { [K in keyof T]: ComputedRef<T[K]> } = {} as never;\r\n\r\n (Object.keys(props) as (keyof T)[]).forEach((key) => {\r\n result[key] = usePriorityValue(key as keyof typeof props, props, state);\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * 批量获取state中的值(集中在一个computed,用于透传)\r\n * @param props\r\n * @param state\r\n */\r\nexport function useForwardPriorityValues<\r\n T extends Record<string, any>,\r\n S extends Ref<Record<string, any>> = Readonly<Ref<NoInfer<T>, NoInfer<T>>>,\r\n>(props: T, state: S | undefined) {\r\n const computedResult: { [K in keyof T]: ComputedRef<T[K]> } = {} as never;\r\n\r\n (Object.keys(props) as (keyof T)[]).forEach((key) => {\r\n computedResult[key] = usePriorityValue(\r\n key as keyof typeof props,\r\n props,\r\n state,\r\n );\r\n });\r\n\r\n return computed(() => {\r\n const unwrapResult: Record<string, any> = {};\r\n Object.keys(props).forEach((key) => {\r\n unwrapResult[key] = unref(computedResult[key]);\r\n });\r\n return unwrapResult as { [K in keyof T]: T[K] };\r\n });\r\n}\r\n","import { getScrollbarWidth, needsScrollbar } from '@admin-kit/shared/utils';\r\n\r\nimport {\r\n useScrollLock as _useScrollLock,\r\n tryOnBeforeUnmount,\r\n tryOnMounted,\r\n} from '@vueuse/core';\r\n\r\nexport const SCROLL_FIXED_CLASS = `_scroll__fixed_`;\r\n\r\nexport function useScrollLock() {\r\n const isLocked = _useScrollLock(document.body);\r\n const scrollbarWidth = getScrollbarWidth();\r\n\r\n tryOnMounted(() => {\r\n if (!needsScrollbar()) {\r\n return;\r\n }\r\n document.body.style.paddingRight = `${scrollbarWidth}px`;\r\n\r\n const layoutFixedNodes = document.querySelectorAll<HTMLElement>(\r\n `.${SCROLL_FIXED_CLASS}`,\r\n );\r\n const nodes = [...layoutFixedNodes];\r\n if (nodes.length > 0) {\r\n nodes.forEach((node) => {\r\n node.dataset.transition = node.style.transition;\r\n node.style.transition = 'none';\r\n node.style.paddingRight = `${scrollbarWidth}px`;\r\n });\r\n }\r\n isLocked.value = true;\r\n });\r\n\r\n tryOnBeforeUnmount(() => {\r\n if (!needsScrollbar()) {\r\n return;\r\n }\r\n isLocked.value = false;\r\n const layoutFixedNodes = document.querySelectorAll<HTMLElement>(\r\n `.${SCROLL_FIXED_CLASS}`,\r\n );\r\n const nodes = [...layoutFixedNodes];\r\n if (nodes.length > 0) {\r\n nodes.forEach((node) => {\r\n node.style.paddingRight = '';\r\n requestAnimationFrame(() => {\r\n node.style.transition = node.dataset.transition || '';\r\n });\r\n });\r\n }\r\n document.body.style.paddingRight = '';\r\n });\r\n}\r\n","export type Locale = 'en-US' | 'zh-CN';\r\n\r\nexport const messages: Record<Locale, Record<string, string>> = {\r\n 'en-US': {\r\n cancel: 'Cancel',\r\n collapse: 'Collapse',\r\n confirm: 'Confirm',\r\n expand: 'Expand',\r\n prompt: 'Prompt',\r\n reset: 'Reset',\r\n submit: 'Submit',\r\n },\r\n 'zh-CN': {\r\n cancel: '取消',\r\n collapse: '收起',\r\n confirm: '确认',\r\n expand: '展开',\r\n prompt: '提示',\r\n reset: '重置',\r\n submit: '提交',\r\n },\r\n};\r\n\r\nexport const getMessages = (locale: Locale) => messages[locale];\r\n","import type { Locale } from './messages';\r\n\r\nimport { computed, ref } from 'vue';\r\n\r\nimport { createSharedComposable } from '@vueuse/core';\r\n\r\nimport { getMessages } from './messages';\r\n\r\nexport const useSimpleLocale = createSharedComposable(() => {\r\n const currentLocale = ref<Locale>('zh-CN');\r\n\r\n const setSimpleLocale = (locale: Locale) => {\r\n currentLocale.value = locale;\r\n };\r\n\r\n const $t = computed(() => {\r\n const localeMessages = getMessages(currentLocale.value);\r\n return (key: string) => {\r\n return localeMessages[key] || key;\r\n };\r\n });\r\n return {\r\n $t,\r\n currentLocale,\r\n setSimpleLocale,\r\n };\r\n});\r\n","import type { SortableOptions } from 'sortablejs';\r\nimport type Sortable from 'sortablejs';\r\n\r\nfunction useSortable<T extends HTMLElement>(\r\n sortableContainer: T,\r\n options: SortableOptions = {},\r\n) {\r\n const initializeSortable = async () => {\r\n const Sortable = await import(\r\n // @ts-expect-error - This is a dynamic import\r\n 'sortablejs/modular/sortable.complete.esm.js'\r\n );\r\n const sortable = Sortable?.default?.create?.(sortableContainer, {\r\n animation: 300,\r\n delay: 400,\r\n delayOnTouchOnly: true,\r\n ...options,\r\n });\r\n return sortable as Sortable;\r\n };\r\n\r\n return {\r\n initializeSortable,\r\n };\r\n}\r\n\r\nexport { useSortable };\r\n\r\nexport type { Sortable };\r\n","import type { Preferences } from './types';\r\n\r\nconst defaultPreferences: Preferences = {\r\n app: {\r\n accessMode: 'frontend',\r\n authPageLayout: 'panel-right',\r\n checkUpdatesInterval: 1,\r\n colorGrayMode: false,\r\n colorWeakMode: false,\r\n compact: false,\r\n contentCompact: 'wide',\r\n contentCompactWidth: 1200,\r\n contentPadding: 0,\r\n contentPaddingBottom: 0,\r\n contentPaddingLeft: 0,\r\n contentPaddingRight: 0,\r\n contentPaddingTop: 0,\r\n defaultAvatar:\r\n 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp',\r\n defaultHomePath: '/analytics',\r\n dynamicTitle: true,\r\n enableCheckUpdates: true,\r\n enablePreferences: true,\r\n enableRefreshToken: false,\r\n enableStickyPreferencesNavigationBar: true,\r\n isMobile: false,\r\n layout: 'sidebar-nav',\r\n locale: 'zh-CN',\r\n loginExpiredMode: 'page',\r\n name: 'Admin',\r\n preferencesButtonPosition: 'auto',\r\n watermark: false,\r\n watermarkContent: '',\r\n zIndex: 200,\r\n },\r\n breadcrumb: {\r\n enable: true,\r\n hideOnlyOne: false,\r\n showHome: false,\r\n showIcon: true,\r\n styleType: 'normal',\r\n },\r\n copyright: {\r\n companyName: 'Admin',\r\n companySiteLink: 'https://www.vben.pro',\r\n date: '2024',\r\n enable: true,\r\n icp: '',\r\n icpLink: '',\r\n settingShow: true,\r\n },\r\n footer: {\r\n enable: false,\r\n fixed: false,\r\n height: 32,\r\n },\r\n header: {\r\n enable: true,\r\n height: 50,\r\n hidden: false,\r\n menuAlign: 'start',\r\n mode: 'fixed',\r\n },\r\n\r\n logo: {\r\n enable: true,\r\n fit: 'contain',\r\n source: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp',\r\n },\r\n navigation: {\r\n accordion: true,\r\n split: true,\r\n styleType: 'rounded',\r\n },\r\n shortcutKeys: {\r\n enable: true,\r\n globalLockScreen: true,\r\n globalLogout: true,\r\n globalPreferences: true,\r\n globalSearch: true,\r\n },\r\n sidebar: {\r\n autoActivateChild: false,\r\n collapsed: false,\r\n collapsedButton: true,\r\n collapsedShowTitle: false,\r\n collapseWidth: 60,\r\n enable: true,\r\n expandOnHover: true,\r\n extraCollapse: false,\r\n extraCollapsedWidth: 60,\r\n fixedButton: true,\r\n hidden: false,\r\n mixedWidth: 80,\r\n width: 224,\r\n },\r\n tabbar: {\r\n draggable: true,\r\n enable: true,\r\n height: 38,\r\n keepAlive: true,\r\n maxCount: 0,\r\n middleClickToClose: false,\r\n persist: true,\r\n showIcon: true,\r\n showMaximize: true,\r\n showMore: true,\r\n styleType: 'chrome',\r\n wheelable: true,\r\n },\r\n theme: {\r\n builtinType: 'default',\r\n colorDestructive: 'hsl(348 100% 61%)',\r\n colorPrimary: 'hsl(212 100% 45%)',\r\n colorSuccess: 'hsl(144 57% 58%)',\r\n colorWarning: 'hsl(42 84% 61%)',\r\n mode: 'dark',\r\n radius: '0.5',\r\n fontSize: 16,\r\n semiDarkHeader: false,\r\n semiDarkSidebar: false,\r\n },\r\n transition: {\r\n enable: true,\r\n loading: true,\r\n name: 'fade-slide',\r\n progress: true,\r\n },\r\n widget: {\r\n fullscreen: true,\r\n globalSearch: true,\r\n languageToggle: true,\r\n lockScreen: true,\r\n notification: true,\r\n refresh: true,\r\n sidebarToggle: true,\r\n themeToggle: true,\r\n timezone: true,\r\n },\r\n};\r\n\r\nexport { defaultPreferences };\r\n","import type { BuiltinThemeType, TimezoneOption } from '@admin-kit/typings';\r\n\r\ninterface BuiltinThemePreset {\r\n color: string;\r\n darkPrimaryColor?: string;\r\n primaryColor?: string;\r\n type: BuiltinThemeType;\r\n}\r\n\r\nconst BUILT_IN_THEME_PRESETS: BuiltinThemePreset[] = [\r\n {\r\n color: 'hsl(212 100% 45%)',\r\n type: 'default',\r\n },\r\n {\r\n color: 'hsl(245 82% 67%)',\r\n type: 'violet',\r\n },\r\n {\r\n color: 'hsl(347 77% 60%)',\r\n type: 'pink',\r\n },\r\n {\r\n color: 'hsl(42 84% 61%)',\r\n type: 'yellow',\r\n },\r\n {\r\n color: 'hsl(231 98% 65%)',\r\n type: 'sky-blue',\r\n },\r\n {\r\n color: 'hsl(161 90% 43%)',\r\n type: 'green',\r\n },\r\n {\r\n color: 'hsl(240 5% 26%)',\r\n darkPrimaryColor: 'hsl(0 0% 98%)',\r\n primaryColor: 'hsl(240 5.9% 10%)',\r\n type: 'zinc',\r\n },\r\n\r\n {\r\n color: 'hsl(181 84% 32%)',\r\n type: 'deep-green',\r\n },\r\n\r\n {\r\n color: 'hsl(211 91% 39%)',\r\n type: 'deep-blue',\r\n },\r\n {\r\n color: 'hsl(18 89% 40%)',\r\n type: 'orange',\r\n },\r\n {\r\n color: 'hsl(0 75% 42%)',\r\n type: 'rose',\r\n },\r\n\r\n {\r\n color: 'hsl(0 0% 25%)',\r\n darkPrimaryColor: 'hsl(0 0% 98%)',\r\n primaryColor: 'hsl(240 5.9% 10%)',\r\n type: 'neutral',\r\n },\r\n {\r\n color: 'hsl(215 25% 27%)',\r\n darkPrimaryColor: 'hsl(0 0% 98%)',\r\n primaryColor: 'hsl(240 5.9% 10%)',\r\n type: 'slate',\r\n },\r\n {\r\n color: 'hsl(217 19% 27%)',\r\n darkPrimaryColor: 'hsl(0 0% 98%)',\r\n primaryColor: 'hsl(240 5.9% 10%)',\r\n type: 'gray',\r\n },\r\n {\r\n color: '',\r\n type: 'custom',\r\n },\r\n];\r\n\r\n/**\r\n * 时区选项\r\n */\r\nconst DEFAULT_TIME_ZONE_OPTIONS: TimezoneOption[] = [\r\n {\r\n offset: -5,\r\n timezone: 'America/New_York',\r\n label: 'America/New_York(GMT-5)',\r\n },\r\n {\r\n offset: 0,\r\n timezone: 'Europe/London',\r\n label: 'Europe/London(GMT0)',\r\n },\r\n {\r\n offset: 8,\r\n timezone: 'Asia/Shanghai',\r\n label: 'Asia/Shanghai(GMT+8)',\r\n },\r\n {\r\n offset: 9,\r\n timezone: 'Asia/Tokyo',\r\n label: 'Asia/Tokyo(GMT+9)',\r\n },\r\n {\r\n offset: 9,\r\n timezone: 'Asia/Seoul',\r\n label: 'Asia/Seoul(GMT+9)',\r\n },\r\n];\r\n\r\nexport const COLOR_PRESETS = [...BUILT_IN_THEME_PRESETS].slice(0, 7);\r\n\r\nexport { BUILT_IN_THEME_PRESETS, DEFAULT_TIME_ZONE_OPTIONS };\r\n\r\nexport type { BuiltinThemePreset };\r\n","import type { Preferences } from './types';\r\n\r\nimport { generatorColorVariables } from '@admin-kit/shared/color';\r\nimport { updateCSSVariables as executeUpdateCSSVariables } from '@admin-kit/shared/utils';\r\n\r\nimport { BUILT_IN_THEME_PRESETS } from './constants';\r\n\r\n/**\r\n * 更新主题的 CSS 变量以及其他 CSS 变量\r\n * @param preferences - 当前偏好设置对象,它的主题值将被用来设置文档的主题。\r\n */\r\nfunction updateCSSVariables(preferences: Preferences) {\r\n // 当修改到颜色变量时,更新 css 变量\r\n const root = document.documentElement;\r\n if (!root) {\r\n return;\r\n }\r\n\r\n const theme = preferences?.theme ?? {};\r\n\r\n const { builtinType, mode, radius } = theme;\r\n\r\n // html 设置 dark 类\r\n if (Reflect.has(theme, 'mode')) {\r\n const dark = isDarkTheme(mode);\r\n root.classList.toggle('dark', dark);\r\n }\r\n\r\n // html 设置 data-theme=[builtinType]\r\n if (Reflect.has(theme, 'builtinType')) {\r\n const rootTheme = root.dataset.theme;\r\n if (rootTheme !== builtinType) {\r\n root.dataset.theme = builtinType;\r\n }\r\n }\r\n\r\n // 获取当前的内置主题\r\n const currentBuiltType = [...BUILT_IN_THEME_PRESETS].find(\r\n (item) => item.type === builtinType,\r\n );\r\n\r\n let builtinTypeColorPrimary: string | undefined = '';\r\n\r\n if (currentBuiltType) {\r\n const isDark = isDarkTheme(preferences.theme.mode);\r\n // 设置不同主题的主要颜色\r\n const color = isDark\r\n ? currentBuiltType.darkPrimaryColor || currentBuiltType.primaryColor\r\n : currentBuiltType.primaryColor;\r\n builtinTypeColorPrimary = color || currentBuiltType.color;\r\n }\r\n\r\n // 如果内置主题颜色和自定义颜色都不存在,则不更新主题颜色\r\n if (\r\n builtinTypeColorPrimary ||\r\n Reflect.has(theme, 'colorPrimary') ||\r\n Reflect.has(theme, 'colorDestructive') ||\r\n Reflect.has(theme, 'colorSuccess') ||\r\n Reflect.has(theme, 'colorWarning')\r\n ) {\r\n // preferences.theme.colorPrimary = builtinTypeColorPrimary || colorPrimary;\r\n updateMainColorVariables(preferences);\r\n }\r\n\r\n // 更新圆角\r\n if (Reflect.has(theme, 'radius')) {\r\n document.documentElement.style.setProperty('--radius', `${radius}rem`);\r\n }\r\n\r\n // 更新字体大小\r\n if (Reflect.has(theme, 'fontSize')) {\r\n const fontSize = theme.fontSize;\r\n document.documentElement.style.setProperty(\r\n '--font-size-base',\r\n `${fontSize}px`,\r\n );\r\n document.documentElement.style.setProperty(\r\n '--menu-font-size',\r\n `calc(${fontSize}px * 0.875)`,\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * 更新主要的 CSS 变量\r\n * @param preference - 当前偏好设置对象,它的颜色值将被转换成 HSL 格式并设置为 CSS 变量。\r\n */\r\nfunction updateMainColorVariables(preference: Preferences) {\r\n if (!preference.theme) {\r\n return;\r\n }\r\n const { colorDestructive, colorPrimary, colorSuccess, colorWarning } =\r\n preference.theme;\r\n\r\n const colorVariables = generatorColorVariables([\r\n { color: colorPrimary, name: 'primary' },\r\n { alias: 'warning', color: colorWarning, name: 'yellow' },\r\n { alias: 'success', color: colorSuccess, name: 'green' },\r\n { alias: 'destructive', color: colorDestructive, name: 'red' },\r\n ]);\r\n\r\n // 要设置的 CSS 变量映射\r\n const colorMappings = {\r\n '--green-500': '--success',\r\n '--primary-500': '--primary',\r\n '--red-500': '--destructive',\r\n '--yellow-500': '--warning',\r\n };\r\n\r\n // 统一处理颜色变量的更新\r\n Object.entries(colorMappings).forEach(([sourceVar, targetVar]) => {\r\n const colorValue = colorVariables[sourceVar];\r\n if (colorValue) {\r\n document.documentElement.style.setProperty(targetVar, colorValue);\r\n }\r\n });\r\n\r\n executeUpdateCSSVariables(colorVariables);\r\n}\r\n\r\nfunction isDarkTheme(theme: string) {\r\n let dark = theme === 'dark';\r\n if (theme === 'auto') {\r\n dark = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n }\r\n return dark;\r\n}\r\n\r\nexport { isDarkTheme, updateCSSVariables };\r\n","import type { DeepPartial } from '@admin-kit/typings';\r\n\r\nimport type { InitialOptions, Preferences } from './types';\r\n\r\nimport { markRaw, reactive, readonly, watch } from 'vue';\r\n\r\nimport { StorageManager } from '@admin-kit/shared/cache';\r\nimport { isMacOs, merge } from '@admin-kit/shared/utils';\r\n\r\nimport {\r\n breakpointsTailwind,\r\n useBreakpoints,\r\n useDebounceFn,\r\n} from '@vueuse/core';\r\n\r\nimport { defaultPreferences } from './config';\r\nimport { updateCSSVariables } from './update-css-variables';\r\n\r\nconst STORAGE_KEYS = {\r\n MAIN: 'preferences',\r\n LOCALE: 'preferences-locale',\r\n THEME: 'preferences-theme',\r\n} as const;\r\n\r\nclass PreferenceManager {\r\n private cache: StorageManager;\r\n private debouncedSave: (preference: Preferences) => void;\r\n private initialPreferences: Preferences = defaultPreferences;\r\n private isInitialized = false;\r\n private state: Preferences;\r\n\r\n constructor() {\r\n this.cache = new StorageManager();\r\n this.state = reactive<Preferences>(\r\n this.loadFromCache() || { ...defaultPreferences },\r\n );\r\n this.debouncedSave = useDebounceFn(\r\n (preference) => this.saveToCache(preference),\r\n 150,\r\n );\r\n }\r\n\r\n /**\r\n * 清除所有缓存的偏好设置\r\n */\r\n clearCache = () => {\r\n Object.values(STORAGE_KEYS).forEach((key) => this.cache.removeItem(key));\r\n };\r\n\r\n /**\r\n * 获取初始化偏好设置\r\n */\r\n getInitialPreferences = () => {\r\n return this.initialPreferences;\r\n };\r\n\r\n /**\r\n * 获取当前偏好设置(只读)\r\n */\r\n getPreferences = () => {\r\n return readonly(this.state);\r\n };\r\n\r\n /**\r\n * 初始化偏好设置\r\n * @param namespace - 命名空间,用于隔离不同应用的配置\r\n * @param overrides - 要覆盖的偏好设置\r\n */\r\n initPreferences = async ({ namespace, overrides }: InitialOptions) => {\r\n // 防止重复初始化\r\n if (this.isInitialized) {\r\n return;\r\n }\r\n\r\n // 使用命名空间初始化存储管理器\r\n this.cache = new StorageManager({ prefix: namespace });\r\n\r\n // 合并初始偏好设置\r\n this.initialPreferences = merge({}, overrides, defaultPreferences);\r\n\r\n // 加载缓存的偏好设置并与初始配置合并\r\n const cachedPreferences = this.loadFromCache() || {};\r\n const mergedPreference = merge(\r\n {},\r\n cachedPreferences,\r\n this.initialPreferences,\r\n );\r\n\r\n // 更新偏好设置\r\n this.updatePreferences(mergedPreference);\r\n\r\n // 设置监听器\r\n this.setupWatcher();\r\n\r\n // 初始化平台标识\r\n this.initPlatform();\r\n\r\n this.isInitialized = true;\r\n };\r\n\r\n /**\r\n * 重置偏好设置到初始状态\r\n */\r\n resetPreferences = () => {\r\n // 将状态重置为初始偏好设置\r\n Object.assign(this.state, this.initialPreferences);\r\n\r\n // 保存偏好设置至缓存\r\n this.saveToCache(this.state);\r\n\r\n // 直接触发 UI 更新\r\n this.handleUpdates(this.state);\r\n };\r\n\r\n /**\r\n * 更新偏好设置\r\n * @param updates - 要更新的偏好设置\r\n */\r\n updatePreferences = (updates: DeepPartial<Preferences>) => {\r\n // 深度合并更新内容和当前状态\r\n const mergedState = merge({}, updates, markRaw(this.state));\r\n Object.assign(this.state, mergedState);\r\n\r\n // 根据更新的值执行更新\r\n this.handleUpdates(updates);\r\n\r\n // 保存到缓存\r\n this.debouncedSave(this.state);\r\n };\r\n\r\n /**\r\n * 处理更新\r\n * @param updates - 更新的偏好设置\r\n */\r\n private handleUpdates(updates: DeepPartial<Preferences>) {\r\n const { theme, app } = updates;\r\n\r\n if (\r\n theme &&\r\n (Object.keys(theme).length > 0 || Reflect.has(theme, 'fontSize'))\r\n ) {\r\n updateCSSVariables(this.state);\r\n }\r\n\r\n if (\r\n app &&\r\n (Reflect.has(app, 'colorGrayMode') || Reflect.has(app, 'colorWeakMode'))\r\n ) {\r\n this.updateColorMode(this.state);\r\n }\r\n }\r\n\r\n /**\r\n * 初始化平台标识\r\n */\r\n private initPlatform() {\r\n document.documentElement.dataset.platform = isMacOs() ? 'macOs' : 'window';\r\n }\r\n\r\n /**\r\n * 从缓存加载偏好设置\r\n * @returns 缓存的偏好设置,如果不存在则返回 null\r\n */\r\n private loadFromCache(): null | Preferences {\r\n return this.cache.getItem<Preferences>(STORAGE_KEYS.MAIN);\r\n }\r\n\r\n /**\r\n * 保存偏好设置到缓存\r\n * @param preference - 要保存的偏好设置\r\n */\r\n private saveToCache(preference: Preferences) {\r\n this.cache.setItem(STORAGE_KEYS.MAIN, preference);\r\n this.cache.setItem(STORAGE_KEYS.LOCALE, preference.app.locale);\r\n this.cache.setItem(STORAGE_KEYS.THEME, preference.theme.mode);\r\n }\r\n\r\n /**\r\n * 监听状态和系统偏好设置的变化\r\n */\r\n private setupWatcher() {\r\n if (this.isInitialized) {\r\n return;\r\n }\r\n\r\n // 监听断点,判断是否移动端\r\n const breakpoints = useBreakpoints(breakpointsTailwind);\r\n const isMobile = breakpoints.smaller('md');\r\n\r\n watch(\r\n () => isMobile.value,\r\n (val) => {\r\n this.updatePreferences({\r\n app: { isMobile: val },\r\n });\r\n },\r\n { immediate: true },\r\n );\r\n\r\n // 监听系统主题偏好设置变化\r\n window\r\n .matchMedia('(prefers-color-scheme: dark)')\r\n .addEventListener('change', ({ matches: isDark }) => {\r\n // 仅在自动模式下跟随系统主题\r\n if (this.state.theme.mode === 'auto') {\r\n // 先应用实际的主题\r\n this.updatePreferences({\r\n theme: { mode: isDark ? 'dark' : 'light' },\r\n });\r\n // 再恢复为 auto 模式,保持跟随系统的状态\r\n this.updatePreferences({\r\n theme: { mode: 'auto' },\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 更新页面颜色模式(灰色、色弱)\r\n * @param preference - 偏好设置\r\n */\r\n private updateColorMode(preference: Preferences) {\r\n const { colorGrayMode, colorWeakMode } = preference.app;\r\n const dom = document.documentElement;\r\n\r\n dom.classList.toggle('invert-mode', colorWeakMode);\r\n dom.classList.toggle('grayscale-mode', colorGrayMode);\r\n }\r\n}\r\n\r\nconst preferencesManager = new PreferenceManager();\r\n\r\nexport { PreferenceManager, preferencesManager };\r\n","import { computed } from 'vue';\r\n\r\nimport { diff } from '@admin-kit/shared/utils';\r\n\r\nimport { preferencesManager } from './preferences';\r\nimport { isDarkTheme } from './update-css-variables';\r\n\r\nfunction usePreferences() {\r\n const preferences = preferencesManager.getPreferences();\r\n const initialPreferences = preferencesManager.getInitialPreferences();\r\n /**\r\n * @zh_CN 计算偏好设置的变化\r\n */\r\n const diffPreference = computed(() => {\r\n return diff(initialPreferences, preferences);\r\n });\r\n\r\n const appPreferences = computed(() => preferences.app);\r\n\r\n const shortcutKeysPreferences = computed(() => preferences.shortcutKeys);\r\n\r\n /**\r\n * @zh_CN 判断是否为暗黑模式\r\n * @param preferences - 当前偏好设置对象,它的主题值将被用来判断是否为暗黑模式。\r\n * @returns 如果主题为暗黑模式,返回 true,否则返回 false。\r\n */\r\n const isDark = computed(() => {\r\n return isDarkTheme(preferences.theme.mode);\r\n });\r\n\r\n const locale = computed(() => {\r\n return preferences.app.locale;\r\n });\r\n\r\n const isMobile = computed(() => {\r\n return appPreferences.value.isMobile;\r\n });\r\n\r\n const theme = computed(() => {\r\n return isDark.value ? 'dark' : 'light';\r\n });\r\n\r\n /**\r\n * @zh_CN 布局方式\r\n */\r\n const layout = computed(() =>\r\n isMobile.value ? 'sidebar-nav' : appPreferences.value.layout,\r\n );\r\n\r\n /**\r\n * @zh_CN 是否显示顶栏\r\n */\r\n const isShowHeaderNav = computed(() => {\r\n return preferences.header.enable;\r\n });\r\n\r\n /**\r\n * @zh_CN 是否全屏显示content,不需要侧边、底部、顶部、tab区域\r\n */\r\n const isFullContent = computed(\r\n () => appPreferences.value.layout === 'full-content',\r\n );\r\n\r\n /**\r\n * @zh_CN 是否侧边导航模式\r\n */\r\n const isSideNav = computed(\r\n () => appPreferences.value.layout === 'sidebar-nav',\r\n );\r\n\r\n /**\r\n * @zh_CN 是否侧边混合模式\r\n */\r\n const isSideMixedNav = computed(\r\n () => appPreferences.value.layout === 'sidebar-mixed-nav',\r\n );\r\n\r\n /**\r\n * @zh_CN 是否为头部导航模式\r\n */\r\n const isHeaderNav = computed(\r\n () => appPreferences.value.layout === 'header-nav',\r\n );\r\n\r\n /**\r\n * @zh_CN 是否为头部混合导航模式\r\n */\r\n const isHeaderMixedNav = computed(\r\n () => appPreferences.value.layout === 'header-mixed-nav',\r\n );\r\n\r\n /**\r\n * @zh_CN 是否为顶部通栏+侧边导航模式\r\n */\r\n const isHeaderSidebarNav = computed(\r\n () => appPreferences.value.layout === 'header-sidebar-nav',\r\n );\r\n\r\n /**\r\n * @zh_CN 是否为混合导航模式\r\n */\r\n const isMixedNav = computed(\r\n () => appPreferences.value.layout === 'mixed-nav',\r\n );\r\n\r\n /**\r\n * @zh_CN 是否包含侧边导航模式\r\n */\r\n const isSideMode = computed(() => {\r\n return (\r\n isMixedNav.value ||\r\n isSideMixedNav.value ||\r\n isSideNav.value ||\r\n isHeaderMixedNav.value ||\r\n isHeaderSidebarNav.value\r\n );\r\n });\r\n\r\n const sidebarCollapsed = computed(() => {\r\n return preferences.sidebar.collapsed;\r\n });\r\n\r\n /**\r\n * @zh_CN 是否开启keep-alive\r\n * 在tabs可见以及开启keep-alive的情况下才开启\r\n */\r\n const keepAlive = computed(\r\n () => preferences.tabbar.enable && preferences.tabbar.keepAlive,\r\n );\r\n\r\n /**\r\n * @zh_CN 登录注册页面布局是否为左侧\r\n */\r\n const authPanelLeft = computed(() => {\r\n return appPreferences.value.authPageLayout === 'panel-left';\r\n });\r\n\r\n /**\r\n * @zh_CN 登录注册页面布局是否为左侧\r\n */\r\n const authPanelRight = computed(() => {\r\n return appPreferences.value.authPageLayout === 'panel-right';\r\n });\r\n\r\n /**\r\n * @zh_CN 登录注册页面布局是否为中间\r\n */\r\n const authPanelCenter = computed(() => {\r\n return appPreferences.value.authPageLayout === 'panel-center';\r\n });\r\n\r\n /**\r\n * @zh_CN 内容是否已经最大化\r\n * 排除 full-content模式\r\n */\r\n const contentIsMaximize = computed(() => {\r\n const headerIsHidden = preferences.header.hidden;\r\n const sidebarIsHidden = preferences.sidebar.hidden;\r\n return headerIsHidden && sidebarIsHidden && !isFullContent.value;\r\n });\r\n\r\n /**\r\n * @zh_CN 是否启用全局搜索快捷键\r\n */\r\n const globalSearchShortcutKey = computed(() => {\r\n const { enable, globalSearch } = shortcutKeysPreferences.value;\r\n return enable && globalSearch;\r\n });\r\n\r\n /**\r\n * @zh_CN 是否启用全局注销快捷键\r\n */\r\n const globalLogoutShortcutKey = computed(() => {\r\n const { enable, globalLogout } = shortcutKeysPreferences.value;\r\n return enable && globalLogout;\r\n });\r\n\r\n const globalLockScreenShortcutKey = computed(() => {\r\n const { enable, globalLockScreen } = shortcutKeysPreferences.value;\r\n return enable && globalLockScreen;\r\n });\r\n\r\n /**\r\n * @zh_CN 偏好设置按钮位置\r\n */\r\n const preferencesButtonPosition = computed(() => {\r\n const { enablePreferences, preferencesButtonPosition } = preferences.app;\r\n\r\n // 如果没有启用偏好设置按钮\r\n if (!enablePreferences) {\r\n return {\r\n fixed: false,\r\n header: false,\r\n };\r\n }\r\n\r\n const { header, sidebar } = preferences;\r\n const headerHidden = header.hidden;\r\n const sidebarHidden = sidebar.hidden;\r\n\r\n const contentIsMaximize = headerHidden && sidebarHidden;\r\n\r\n const isHeaderPosition = preferencesButtonPosition === 'header';\r\n\r\n // 如果设置了固定位置\r\n if (preferencesButtonPosition !== 'auto') {\r\n return {\r\n fixed: preferencesButtonPosition === 'fixed',\r\n header: isHeaderPosition,\r\n };\r\n }\r\n\r\n // 如果是全屏模式或者没有固定在顶部,\r\n const fixed =\r\n contentIsMaximize ||\r\n isFullContent.value ||\r\n isMobile.value ||\r\n !isShowHeaderNav.value;\r\n\r\n return {\r\n fixed,\r\n header: !fixed,\r\n };\r\n });\r\n\r\n return {\r\n authPanelCenter,\r\n authPanelLeft,\r\n authPanelRight,\r\n contentIsMaximize,\r\n diffPreference,\r\n globalLockScreenShortcutKey,\r\n globalLogoutShortcutKey,\r\n globalSearchShortcutKey,\r\n isDark,\r\n isFullContent,\r\n isHeaderMixedNav,\r\n isHeaderNav,\r\n isHeaderSidebarNav,\r\n isMixedNav,\r\n isMobile,\r\n isSideMixedNav,\r\n isSideMode,\r\n isSideNav,\r\n keepAlive,\r\n layout,\r\n locale,\r\n preferencesButtonPosition,\r\n sidebarCollapsed,\r\n theme,\r\n };\r\n}\r\n\r\nexport { usePreferences };\r\n","import type { Preferences } from './types';\r\n\r\nimport { preferencesManager } from './preferences';\r\n\r\nexport const {\r\n getPreferences,\r\n updatePreferences,\r\n resetPreferences,\r\n clearCache,\r\n initPreferences,\r\n} = preferencesManager;\r\n\r\nexport const preferences: Preferences = getPreferences();\r\n\r\nexport { preferencesManager };\r\n\r\nexport * from './constants';\r\nexport type * from './types';\r\nexport * from './use-preferences';\r\n","<script setup lang=\"ts\">\r\nimport type { AccordionRootEmits, AccordionRootProps } from 'reka-ui';\r\n\r\nimport { AccordionRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<AccordionRootProps>();\r\nconst emits = defineEmits<AccordionRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <AccordionRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </AccordionRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AccordionContentProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { AccordionContent } from 'reka-ui';\r\n\r\nconst props = defineProps<AccordionContentProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <AccordionContent\r\n v-bind=\"delegatedProps\"\r\n class=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\r\n >\r\n <div :class=\"cn('pb-4 pt-0', props.class)\">\r\n <slot></slot>\r\n </div>\r\n </AccordionContent>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AccordionItemProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { AccordionItem, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<AccordionItemProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <AccordionItem v-bind=\"forwardedProps\" :class=\"cn('border-b', props.class)\">\r\n <slot></slot>\r\n </AccordionItem>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AccordionTriggerProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronDown } from 'lucide-vue-next';\r\nimport { AccordionHeader, AccordionTrigger } from 'reka-ui';\r\n\r\nconst props = defineProps<AccordionTriggerProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <AccordionHeader class=\"flex\">\r\n <AccordionTrigger\r\n v-bind=\"delegatedProps\"\r\n :class=\"\r\n cn(\r\n 'flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n <slot name=\"icon\">\r\n <ChevronDown\r\n class=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\"\r\n />\r\n </slot>\r\n </AccordionTrigger>\r\n </AccordionHeader>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AlertDialogEmits, AlertDialogProps } from 'reka-ui';\r\n\r\nimport { AlertDialogRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<AlertDialogProps>();\r\nconst emits = defineEmits<AlertDialogEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <AlertDialogRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </AlertDialogRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AlertDialogActionProps } from 'reka-ui';\r\n\r\nimport { AlertDialogAction } from 'reka-ui';\r\n\r\nconst props = defineProps<AlertDialogActionProps>();\r\n</script>\r\n\r\n<template>\r\n <AlertDialogAction v-bind=\"props\">\r\n <slot></slot>\r\n </AlertDialogAction>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AlertDialogCancelProps } from 'reka-ui';\r\n\r\nimport { AlertDialogCancel } from 'reka-ui';\r\n\r\nconst props = defineProps<AlertDialogCancelProps>();\r\n</script>\r\n\r\n<template>\r\n <AlertDialogCancel v-bind=\"props\">\r\n <slot></slot>\r\n </AlertDialogCancel>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { useScrollLock } from '@admin-kit/composables';\r\n\r\nuseScrollLock();\r\n</script>\r\n<template>\r\n <div class=\"z-popup inset-0 bg-overlay\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AlertDialogContentEmits, AlertDialogContentProps } from 'reka-ui';\r\n\r\nimport type { ClassType } from '@admin-kit/typings';\r\n\r\nimport { computed, ref } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport {\r\n AlertDialogContent,\r\n AlertDialogPortal,\r\n useForwardPropsEmits,\r\n} from 'reka-ui';\r\n\r\nimport AlertDialogOverlay from './AlertDialogOverlay.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<\r\n AlertDialogContentProps & {\r\n centered?: boolean;\r\n class?: ClassType;\r\n modal?: boolean;\r\n open?: boolean;\r\n overlayBlur?: number;\r\n zIndex?: number;\r\n }\r\n >(),\r\n { modal: true },\r\n);\r\nconst emits = defineEmits<\r\n AlertDialogContentEmits & { close: []; closed: []; opened: [] }\r\n>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, modal: _modal, open: _open, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n\r\nconst contentRef = ref<InstanceType<typeof AlertDialogContent> | null>(null);\r\nfunction onAnimationEnd(event: AnimationEvent) {\r\n // 只有在 contentRef 的动画结束时才触发 opened/closed 事件\r\n if (event.target === contentRef.value?.$el) {\r\n if (props.open) {\r\n emits('opened');\r\n } else {\r\n emits('closed');\r\n }\r\n }\r\n}\r\ndefineExpose({\r\n getContentRef: () => contentRef.value,\r\n});\r\n</script>\r\n\r\n<template>\r\n <AlertDialogPortal>\r\n <Transition name=\"fade\" appear>\r\n <AlertDialogOverlay\r\n v-if=\"open && modal\"\r\n :style=\"{\r\n ...(zIndex ? { zIndex } : {}),\r\n position: 'fixed',\r\n backdropFilter:\r\n overlayBlur && overlayBlur > 0 ? `blur(${overlayBlur}px)` : 'none',\r\n }\"\r\n @click=\"() => emits('close')\"\r\n />\r\n </Transition>\r\n <AlertDialogContent\r\n ref=\"contentRef\"\r\n :style=\"{ ...(zIndex ? { zIndex } : {}), position: 'fixed' }\"\r\n @animationend=\"onAnimationEnd\"\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'z-popup bg-background p-6 shadow-lg outline-none sm:rounded-xl',\r\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\r\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\r\n {\r\n 'data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%]':\r\n !centered,\r\n 'data-[state=closed]:slide-out-to-top-[148%] data-[state=open]:slide-in-from-top-[98%]':\r\n centered,\r\n 'top-[10vh]': !centered,\r\n 'top-1/2 -translate-y-1/2': centered,\r\n },\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </AlertDialogContent>\r\n </AlertDialogPortal>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { AlertDialogDescriptionProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { AlertDialogDescription, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<AlertDialogDescriptionProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <AlertDialogDescription\r\n v-bind=\"forwardedProps\"\r\n :class=\"cn('text-sm text-muted-foreground', props.class)\"\r\n >\r\n <slot></slot>\r\n </AlertDialogDescription>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AlertDialogTitleProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { AlertDialogTitle, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<AlertDialogTitleProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <AlertDialogTitle\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn('text-lg font-semibold leading-none tracking-tight', props.class)\r\n \"\r\n >\r\n <slot></slot>\r\n </AlertDialogTitle>\r\n</template>\r\n","import type { VariantProps } from 'class-variance-authority';\r\n\r\nimport { cva } from 'class-variance-authority';\r\n\r\nexport const avatarVariant = cva(\r\n 'inline-flex items-center justify-center font-normal text-foreground select-none shrink-0 bg-secondary overflow-hidden',\r\n {\r\n variants: {\r\n shape: {\r\n circle: 'rounded-full',\r\n square: 'rounded-md',\r\n },\r\n size: {\r\n base: 'h-16 w-16 text-2xl',\r\n lg: 'h-32 w-32 text-5xl',\r\n sm: 'h-10 w-10 text-xs',\r\n },\r\n },\r\n },\r\n);\r\n\r\nexport type AvatarVariants = VariantProps<typeof avatarVariant>;\r\n","<script setup lang=\"ts\">\r\nimport type { AvatarVariants } from './avatar';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { AvatarRoot } from 'reka-ui';\r\n\r\nimport { avatarVariant } from './avatar';\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n class?: any;\r\n shape?: AvatarVariants['shape'];\r\n size?: AvatarVariants['size'];\r\n }>(),\r\n {\r\n shape: 'circle',\r\n size: 'sm',\r\n },\r\n);\r\n</script>\r\n\r\n<template>\r\n <AvatarRoot :class=\"cn(avatarVariant({ size, shape }), props.class)\">\r\n <slot></slot>\r\n </AvatarRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AvatarFallbackProps } from 'reka-ui';\r\n\r\nimport { AvatarFallback } from 'reka-ui';\r\n\r\nconst props = defineProps<AvatarFallbackProps>();\r\n</script>\r\n\r\n<template>\r\n <AvatarFallback v-bind=\"props\">\r\n <slot></slot>\r\n </AvatarFallback>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { AvatarImageProps } from 'reka-ui';\r\n\r\nimport { AvatarImage } from 'reka-ui';\r\n\r\nconst props = defineProps<AvatarImageProps>();\r\n</script>\r\n\r\n<template>\r\n <AvatarImage v-bind=\"props\" class=\"h-full w-full object-cover\" />\r\n</template>\r\n","import type { VariantProps } from 'class-variance-authority';\r\n\r\nimport { cva } from 'class-variance-authority';\r\n\r\nexport const badgeVariants = cva(\r\n 'inline-flex items-center rounded-md border border-border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\r\n {\r\n defaultVariants: {\r\n variant: 'default',\r\n },\r\n variants: {\r\n variant: {\r\n default:\r\n 'border-transparent bg-accent hover:bg-accent text-primary-foreground shadow',\r\n destructive:\r\n 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive-hover',\r\n outline: 'text-foreground',\r\n secondary:\r\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n },\r\n },\r\n },\r\n);\r\n\r\nexport type BadgeVariants = VariantProps<typeof badgeVariants>;\r\n","<script setup lang=\"ts\">\r\nimport type { BadgeVariants } from './badge';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { badgeVariants } from './badge';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n variant?: BadgeVariants['variant'];\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <div :class=\"cn(badgeVariants({ variant }), props.class)\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <nav :class=\"props.class\" aria-label=\"breadcrumb\" role=\"navigation\">\r\n <slot></slot>\r\n </nav>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { MoreHorizontal } from 'lucide-vue-next';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"cn('flex h-9 w-9 items-center justify-center', props.class)\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <slot>\r\n <MoreHorizontal class=\"h-4 w-4\" />\r\n </slot>\r\n <span class=\"sr-only\">More</span>\r\n </span>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <li\r\n :class=\"\r\n cn('inline-flex items-center gap-1.5 hover:text-foreground', props.class)\r\n \"\r\n >\r\n <slot></slot>\r\n </li>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { PrimitiveProps } from 'reka-ui';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Primitive } from 'reka-ui';\r\n\r\nconst props = withDefaults(defineProps<PrimitiveProps & { class?: any }>(), {\r\n as: 'a',\r\n});\r\n</script>\r\n\r\n<template>\r\n <Primitive\r\n :as=\"as\"\r\n :as-child=\"asChild\"\r\n :class=\"cn('transition-colors hover:text-foreground', props.class)\"\r\n >\r\n <slot></slot>\r\n </Primitive>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <ol\r\n :class=\"\r\n cn(\r\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </ol>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"cn('font-normal text-foreground', props.class)\"\r\n aria-current=\"page\"\r\n aria-disabled=\"true\"\r\n role=\"link\"\r\n >\r\n <slot></slot>\r\n </span>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronRight } from 'lucide-vue-next';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <li\r\n :class=\"cn('[&>svg]:size-3.5', props.class)\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n >\r\n <slot>\r\n <ChevronRight />\r\n </slot>\r\n </li>\r\n</template>\r\n","import { cva } from 'class-variance-authority';\r\n\r\nexport const buttonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\r\n {\r\n defaultVariants: {\r\n size: 'default',\r\n variant: 'default',\r\n },\r\n variants: {\r\n size: {\r\n default: 'h-9 px-4 py-2',\r\n icon: 'h-8 w-8 rounded-sm px-1 text-lg',\r\n lg: 'h-10 rounded-md px-4',\r\n sm: 'h-8 rounded-md px-2 text-xs',\r\n xs: 'h-8 w-8 rounded-sm px-1 text-xs',\r\n },\r\n variant: {\r\n default:\r\n 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\r\n destructive:\r\n 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive-hover',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n heavy: 'hover:bg-heavy hover:text-heavy-foreground',\r\n icon: 'hover:bg-accent hover:text-accent-foreground text-foreground/80',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n outline:\r\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\r\n secondary:\r\n 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\r\n },\r\n },\r\n },\r\n);\r\n","<script setup lang=\"ts\">\r\nimport type { PrimitiveProps } from 'reka-ui';\r\n\r\nimport type { ButtonVariants, ButtonVariantSize } from './types';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Primitive } from 'reka-ui';\r\n\r\nimport { buttonVariants } from './button';\r\n\r\ninterface Props extends PrimitiveProps {\r\n class?: any;\r\n size?: ButtonVariantSize;\r\n variant?: ButtonVariants;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n as: 'button',\r\n class: '',\r\n});\r\n</script>\r\n\r\n<template>\r\n <Primitive\r\n :as=\"as\"\r\n :as-child=\"asChild\"\r\n :class=\"cn(buttonVariants({ variant, size }), props.class)\"\r\n >\r\n <slot></slot>\r\n </Primitive>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"\r\n cn(\r\n 'rounded-xl border border-border bg-card text-card-foreground',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <div :class=\"cn('p-6 pt-0', props.class)\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <p :class=\"cn('text-sm text-muted-foreground', props.class)\">\r\n <slot></slot>\r\n </p>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <div :class=\"cn('flex items-center p-6 pt-0', props.class)\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <div :class=\"cn('flex flex-col gap-y-1.5 p-5', props.class)\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <h3 :class=\"cn('font-semibold leading-none tracking-tight', props.class)\">\r\n <slot></slot>\r\n </h3>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { CheckboxRootEmits, CheckboxRootProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Check, Minus } from 'lucide-vue-next';\r\nimport { CheckboxIndicator, CheckboxRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<\r\n CheckboxRootProps & { class?: any; indeterminate?: boolean }\r\n>();\r\nconst emits = defineEmits<CheckboxRootEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <CheckboxRoot\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'peer h-4 w-4 shrink-0 rounded-sm border border-border transition hover:border-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <CheckboxIndicator\r\n class=\"flex h-full w-full items-center justify-center text-current\"\r\n >\r\n <slot>\r\n <component :is=\"indeterminate ? Minus : Check\" class=\"h-4 w-4\" />\r\n </slot>\r\n </CheckboxIndicator>\r\n </CheckboxRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogRootEmits, DialogRootProps } from 'reka-ui';\r\n\r\nimport { DialogRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogRootProps>();\r\nconst emits = defineEmits<DialogRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <DialogRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </DialogRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogCloseProps } from 'reka-ui';\r\n\r\nimport { DialogClose } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogCloseProps>();\r\n</script>\r\n\r\n<template>\r\n <DialogClose v-bind=\"props\">\r\n <slot></slot>\r\n </DialogClose>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { inject } from 'vue';\r\n\r\nimport { useScrollLock } from '@admin-kit/composables';\r\n\r\nuseScrollLock();\r\nconst id = inject('DISMISSABLE_MODAL_ID');\r\n</script>\r\n<template>\r\n <div :data-dismissable-modal=\"id\" class=\"z-popup inset-0 bg-overlay\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogContentEmits, DialogContentProps } from 'reka-ui';\r\n\r\nimport type { ClassType } from '@admin-kit/typings';\r\n\r\nimport { computed, ref } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { X } from 'lucide-vue-next';\r\nimport { DialogClose, DialogContent, useForwardPropsEmits } from 'reka-ui';\r\n\r\nimport DialogOverlay from './DialogOverlay.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<\r\n DialogContentProps & {\r\n animationType?: 'scale' | 'slide';\r\n appendTo?: HTMLElement | string;\r\n class?: ClassType;\r\n closeClass?: ClassType;\r\n closeDisabled?: boolean;\r\n modal?: boolean;\r\n open?: boolean;\r\n overlayBlur?: number;\r\n showClose?: boolean;\r\n zIndex?: number;\r\n }\r\n >(),\r\n {\r\n appendTo: 'body',\r\n animationType: 'slide',\r\n closeDisabled: false,\r\n showClose: true,\r\n },\r\n);\r\nconst emits = defineEmits<\r\n DialogContentEmits & { close: []; closed: []; opened: [] }\r\n>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const {\r\n class: _,\r\n modal: _modal,\r\n open: _open,\r\n showClose: __,\r\n animationType: ___,\r\n ...delegated\r\n } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nfunction isAppendToBody() {\r\n return (\r\n props.appendTo === 'body' ||\r\n props.appendTo === document.body ||\r\n !props.appendTo\r\n );\r\n}\r\n\r\nconst position = computed(() => {\r\n return isAppendToBody() ? 'fixed' : 'absolute';\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n\r\nconst contentRef = ref<InstanceType<typeof DialogContent> | null>(null);\r\nfunction onAnimationEnd(event: AnimationEvent) {\r\n // 只有在 contentRef 的动画结束时才触发 opened/closed 事件\r\n if (event.target === contentRef.value?.$el) {\r\n if (props.open) {\r\n emits('opened');\r\n } else {\r\n emits('closed');\r\n }\r\n }\r\n}\r\ndefineExpose({\r\n getContentRef: () => contentRef.value,\r\n});\r\n</script>\r\n\r\n<template>\r\n <Teleport defer :to=\"appendTo\">\r\n <Transition name=\"fade\">\r\n <DialogOverlay\r\n v-if=\"open && modal\"\r\n :style=\"{\r\n ...(zIndex ? { zIndex } : {}),\r\n position,\r\n backdropFilter:\r\n overlayBlur && overlayBlur > 0 ? `blur(${overlayBlur}px)` : 'none',\r\n }\"\r\n @click=\"() => emits('close')\"\r\n />\r\n </Transition>\r\n <DialogContent\r\n ref=\"contentRef\"\r\n :style=\"{ ...(zIndex ? { zIndex } : {}), position }\"\r\n @animationend=\"onAnimationEnd\"\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'z-popup w-full bg-background p-6 shadow-lg outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-xl',\r\n {\r\n 'data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%]':\r\n animationType === 'slide',\r\n },\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n\r\n <DialogClose\r\n v-if=\"showClose\"\r\n :disabled=\"closeDisabled\"\r\n :class=\"\r\n cn(\r\n 'flex-center absolute right-3 top-3 h-6 w-6 rounded-full px-1 text-lg text-foreground/80 opacity-70 transition-opacity hover:bg-accent hover:text-accent-foreground hover:opacity-100 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground',\r\n props.closeClass,\r\n )\r\n \"\r\n @click=\"() => emits('close')\"\r\n >\r\n <X class=\"h-4 w-4\" />\r\n </DialogClose>\r\n </DialogContent>\r\n </Teleport>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogDescriptionProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DialogDescription, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogDescriptionProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <DialogDescription\r\n v-bind=\"forwardedProps\"\r\n :class=\"cn('text-sm text-muted-foreground', props.class)\"\r\n >\r\n <slot></slot>\r\n </DialogDescription>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{ class?: any }>();\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"\r\n cn('flex flex-row flex-col-reverse justify-end gap-x-2', props.class)\r\n \"\r\n >\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"cn('flex flex-col gap-y-1.5 text-center sm:text-left', props.class)\"\r\n >\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogContentEmits, DialogContentProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { X } from 'lucide-vue-next';\r\nimport {\r\n DialogClose,\r\n DialogContent,\r\n DialogOverlay,\r\n DialogPortal,\r\n useForwardPropsEmits,\r\n} from 'reka-ui';\r\n\r\nconst props = withDefaults(\r\n defineProps<DialogContentProps & { class?: any; zIndex?: number }>(),\r\n { zIndex: 1000 },\r\n);\r\nconst emits = defineEmits<DialogContentEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <DialogPortal>\r\n <DialogOverlay\r\n :style=\"{ zIndex }\"\r\n class=\"absolute inset-0 grid place-items-center overflow-y-auto border border-border bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\"\r\n >\r\n <DialogContent\r\n :class=\"\r\n cn(\r\n 'relative z-50 my-8 grid w-full max-w-lg gap-4 border border-border bg-background p-6 shadow-lg duration-200 sm:rounded-lg md:w-full',\r\n props.class,\r\n )\r\n \"\r\n :style=\"{ zIndex }\"\r\n v-bind=\"forwarded\"\r\n @pointer-down-outside=\"\r\n (event) => {\r\n const originalEvent = event.detail.originalEvent;\r\n const target = originalEvent.target as HTMLElement;\r\n if (\r\n originalEvent.offsetX > target.clientWidth ||\r\n originalEvent.offsetY > target.clientHeight\r\n ) {\r\n event.preventDefault();\r\n }\r\n }\r\n \"\r\n >\r\n <slot></slot>\r\n\r\n <DialogClose\r\n class=\"absolute right-4 top-4 rounded-md p-0.5 transition-colors hover:bg-secondary\"\r\n >\r\n <X class=\"h-4 w-4\" />\r\n <span class=\"sr-only\">Close</span>\r\n </DialogClose>\r\n </DialogContent>\r\n </DialogOverlay>\r\n </DialogPortal>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogTitleProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DialogTitle, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogTitleProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <DialogTitle\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn('text-lg font-semibold leading-none tracking-tight', props.class)\r\n \"\r\n >\r\n <slot></slot>\r\n </DialogTitle>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogTriggerProps } from 'reka-ui';\r\n\r\nimport { DialogTrigger } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogTriggerProps>();\r\n</script>\r\n\r\n<template>\r\n <DialogTrigger v-bind=\"props\">\r\n <slot></slot>\r\n </DialogTrigger>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DropdownMenuRootEmits, DropdownMenuRootProps } from 'reka-ui';\r\n\r\nimport { DropdownMenuRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = withDefaults(defineProps<DropdownMenuRootProps>(), {\r\n modal: false,\r\n});\r\nconst emits = defineEmits<DropdownMenuRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </DropdownMenuRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n DropdownMenuCheckboxItemEmits,\r\n DropdownMenuCheckboxItemProps,\r\n} from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Check } from 'lucide-vue-next';\r\nimport {\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuItemIndicator,\r\n useForwardPropsEmits,\r\n} from 'reka-ui';\r\n\r\nconst props = defineProps<DropdownMenuCheckboxItemProps & { class?: any }>();\r\nconst emits = defineEmits<DropdownMenuCheckboxItemEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuCheckboxItem\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <span class=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuItemIndicator>\r\n <Check class=\"h-4 w-4\" />\r\n </DropdownMenuItemIndicator>\r\n </span>\r\n <slot></slot>\r\n </DropdownMenuCheckboxItem>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n DropdownMenuContentEmits,\r\n DropdownMenuContentProps,\r\n} from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport {\r\n DropdownMenuContent,\r\n DropdownMenuPortal,\r\n useForwardPropsEmits,\r\n} from 'reka-ui';\r\n\r\nconst props = withDefaults(\r\n defineProps<DropdownMenuContentProps & { class?: any }>(),\r\n {\r\n sideOffset: 4,\r\n },\r\n);\r\nconst emits = defineEmits<DropdownMenuContentEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuPortal>\r\n <DropdownMenuContent\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'z-popup min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </DropdownMenuContent>\r\n </DropdownMenuPortal>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DropdownMenuGroupProps } from 'reka-ui';\r\n\r\nimport { DropdownMenuGroup } from 'reka-ui';\r\n\r\nconst props = defineProps<DropdownMenuGroupProps>();\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuGroup v-bind=\"props\">\r\n <slot></slot>\r\n </DropdownMenuGroup>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DropdownMenuItemProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DropdownMenuItem, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<\r\n DropdownMenuItemProps & { class?: any; inset?: boolean }\r\n>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuItem\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n inset && 'pl-8',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </DropdownMenuItem>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DropdownMenuLabelProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DropdownMenuLabel, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<\r\n DropdownMenuLabelProps & { class?: any; inset?: boolean }\r\n>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuLabel\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', props.class)\r\n \"\r\n >\r\n <slot></slot>\r\n </DropdownMenuLabel>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n DropdownMenuRadioGroupEmits,\r\n DropdownMenuRadioGroupProps,\r\n} from 'reka-ui';\r\n\r\nimport { DropdownMenuRadioGroup, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<DropdownMenuRadioGroupProps>();\r\nconst emits = defineEmits<DropdownMenuRadioGroupEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuRadioGroup v-bind=\"forwarded\">\r\n <slot></slot>\r\n </DropdownMenuRadioGroup>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n DropdownMenuRadioItemEmits,\r\n DropdownMenuRadioItemProps,\r\n} from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Circle } from 'lucide-vue-next';\r\nimport {\r\n DropdownMenuItemIndicator,\r\n DropdownMenuRadioItem,\r\n useForwardPropsEmits,\r\n} from 'reka-ui';\r\n\r\nconst props = defineProps<DropdownMenuRadioItemProps & { class?: any }>();\r\n\r\nconst emits = defineEmits<DropdownMenuRadioItemEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuRadioItem\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <span class=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuItemIndicator>\r\n <Circle class=\"h-2 w-2 fill-current\" />\r\n </DropdownMenuItemIndicator>\r\n </span>\r\n <slot></slot>\r\n </DropdownMenuRadioItem>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DropdownMenuSeparatorProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DropdownMenuSeparator } from 'reka-ui';\r\n\r\nconst props = defineProps<\r\n DropdownMenuSeparatorProps & {\r\n class?: any;\r\n }\r\n>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuSeparator\r\n v-bind=\"delegatedProps\"\r\n :class=\"cn('-mx-1 my-1 h-px bg-border', props.class)\"\r\n />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <span :class=\"cn('ml-auto text-xs tracking-widest opacity-60', props.class)\">\r\n <slot></slot>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DropdownMenuSubEmits, DropdownMenuSubProps } from 'reka-ui';\r\n\r\nimport { DropdownMenuSub, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<DropdownMenuSubProps>();\r\nconst emits = defineEmits<DropdownMenuSubEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuSub v-bind=\"forwarded\">\r\n <slot></slot>\r\n </DropdownMenuSub>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n DropdownMenuSubContentEmits,\r\n DropdownMenuSubContentProps,\r\n} from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DropdownMenuSubContent, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<DropdownMenuSubContentProps & { class?: any }>();\r\nconst emits = defineEmits<DropdownMenuSubContentEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuSubContent\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'z-50 min-w-32 overflow-hidden rounded-md',\r\n 'border border-border',\r\n 'bg-popover p-1 text-popover-foreground shadow-lg',\r\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\r\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\r\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\r\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\r\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </DropdownMenuSubContent>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DropdownMenuSubTriggerProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronRight } from 'lucide-vue-next';\r\nimport { DropdownMenuSubTrigger, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<DropdownMenuSubTriggerProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuSubTrigger\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n <ChevronRight class=\"ml-auto h-4 w-4\" />\r\n </DropdownMenuSubTrigger>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DropdownMenuTriggerProps } from 'reka-ui';\r\n\r\nimport { DropdownMenuTrigger, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<DropdownMenuTriggerProps>();\r\n\r\nconst forwardedProps = useForwardProps(props);\r\n</script>\r\n\r\n<template>\r\n <DropdownMenuTrigger class=\"outline-none\" v-bind=\"forwardedProps\">\r\n <slot></slot>\r\n </DropdownMenuTrigger>\r\n</template>\r\n","import type { InjectionKey } from 'vue';\r\n\r\n \r\nexport const FORM_ITEM_INJECTION_KEY = Symbol() as InjectionKey<string>;\r\n","import { inject } from 'vue';\r\n\r\nimport {\r\n FieldContextKey,\r\n useFieldError,\r\n useIsFieldDirty,\r\n useIsFieldTouched,\r\n useIsFieldValid,\r\n} from 'vee-validate';\r\n\r\nimport { FORM_ITEM_INJECTION_KEY } from './injectionKeys';\r\n\r\nexport function useFormField() {\r\n const fieldContext = inject(FieldContextKey);\r\n const fieldItemContext = inject(FORM_ITEM_INJECTION_KEY);\r\n\r\n if (!fieldContext)\r\n throw new Error('useFormField should be used within <FormField>');\r\n\r\n const { name } = fieldContext;\r\n const id = fieldItemContext;\r\n\r\n const fieldState = {\r\n error: useFieldError(name),\r\n isDirty: useIsFieldDirty(name),\r\n isTouched: useIsFieldTouched(name),\r\n valid: useIsFieldValid(name),\r\n };\r\n\r\n return {\r\n formDescriptionId: `${id}-form-item-description`,\r\n formItemId: `${id}-form-item`,\r\n formMessageId: `${id}-form-item-message`,\r\n id,\r\n name,\r\n ...fieldState,\r\n };\r\n}\r\n","<script lang=\"ts\" setup>\r\nimport { Slot } from 'reka-ui';\r\n\r\nimport { useFormField } from './useFormField';\r\n\r\nconst { error, formDescriptionId, formItemId, formMessageId } = useFormField();\r\n</script>\r\n\r\n<template>\r\n <Slot\r\n :id=\"formItemId\"\r\n :aria-describedby=\"\r\n !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`\r\n \"\r\n :aria-invalid=\"!!error\"\r\n >\r\n <slot></slot>\r\n </Slot>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { useFormField } from './useFormField';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n\r\nconst { formDescriptionId } = useFormField();\r\n</script>\r\n\r\n<template>\r\n <p\r\n :id=\"formDescriptionId\"\r\n :class=\"cn('text-sm text-muted-foreground', props.class)\"\r\n >\r\n <slot></slot>\r\n </p>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { provide, useId } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { FORM_ITEM_INJECTION_KEY } from './injectionKeys';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n\r\nconst id = useId() as string;\r\nprovide(FORM_ITEM_INJECTION_KEY, id);\r\n</script>\r\n\r\n<template>\r\n <div :class=\"cn(props.class)\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { LabelProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Label } from 'reka-ui';\r\n\r\nconst props = defineProps<LabelProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <Label\r\n v-bind=\"delegatedProps\"\r\n :class=\"\r\n cn(\r\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </Label>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { LabelProps } from 'reka-ui';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Label } from '../label';\r\nimport { useFormField } from './useFormField';\r\n\r\nconst props = defineProps<LabelProps & { class?: any }>();\r\n\r\nconst { formItemId } = useFormField();\r\n</script>\r\n\r\n<template>\r\n <Label :class=\"cn(props.class)\" :for=\"formItemId\">\r\n <slot></slot>\r\n </Label>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { toValue } from 'vue';\r\n\r\nimport { ErrorMessage } from 'vee-validate';\r\n\r\nimport { useFormField } from './useFormField';\r\n\r\nconst { formMessageId, name } = useFormField();\r\n</script>\r\n\r\n<template>\r\n <ErrorMessage\r\n :id=\"formMessageId\"\r\n :name=\"toValue(name)\"\r\n as=\"p\"\r\n class=\"text-[0.8rem] text-destructive\"\r\n />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { HoverCardRootEmits, HoverCardRootProps } from 'reka-ui';\r\n\r\nimport { HoverCardRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<HoverCardRootProps>();\r\nconst emits = defineEmits<HoverCardRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <HoverCardRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </HoverCardRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { HoverCardContentProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { HoverCardContent, HoverCardPortal, useForwardProps } from 'reka-ui';\r\n\r\nconst props = withDefaults(\r\n defineProps<HoverCardContentProps & { class?: any }>(),\r\n {\r\n sideOffset: 4,\r\n },\r\n);\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <HoverCardPortal>\r\n <HoverCardContent\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'z-popup w-64 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </HoverCardContent>\r\n </HoverCardPortal>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { HoverCardTriggerProps } from 'reka-ui';\r\n\r\nimport { HoverCardTrigger } from 'reka-ui';\r\n\r\nconst props = defineProps<HoverCardTriggerProps>();\r\n</script>\r\n\r\n<template>\r\n <HoverCardTrigger v-bind=\"props\">\r\n <slot></slot>\r\n </HoverCardTrigger>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { useVModel } from '@vueuse/core';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n defaultValue?: number | string;\r\n modelValue?: number | string;\r\n}>();\r\n\r\nconst emits = defineEmits<{\r\n (e: 'update:modelValue', payload: number | string): void;\r\n}>();\r\n\r\nconst modelValue = useVModel(props, 'modelValue', emits, {\r\n defaultValue: props.defaultValue,\r\n passive: true,\r\n});\r\n</script>\r\n\r\n<template>\r\n <input\r\n v-model=\"modelValue\"\r\n :class=\"\r\n cn(\r\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\r\n props.class,\r\n )\r\n \"\r\n />\r\n</template>\r\n<style lang=\"scss\" scoped>\r\ninput {\r\n --ring: var(--primary);\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { NumberFieldRootEmits, NumberFieldRootProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { NumberFieldRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<NumberFieldRootProps & { class?: any }>();\r\nconst emits = defineEmits<NumberFieldRootEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <NumberFieldRoot v-bind=\"forwarded\" :class=\"cn('grid gap-1.5', props.class)\">\r\n <slot></slot>\r\n </NumberFieldRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"\r\n cn(\r\n 'relative [&>[data-slot=input]]:has-[[data-slot=decrement]]:pl-5 [&>[data-slot=input]]:has-[[data-slot=increment]]:pr-5',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { NumberFieldDecrementProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Minus } from 'lucide-vue-next';\r\nimport { NumberFieldDecrement, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<NumberFieldDecrementProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <NumberFieldDecrement\r\n data-slot=\"decrement\"\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'absolute left-0 top-1/2 -translate-y-1/2 p-3 disabled:cursor-not-allowed disabled:opacity-20',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot>\r\n <Minus class=\"h-4 w-4\" />\r\n </slot>\r\n </NumberFieldDecrement>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { NumberFieldIncrementProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Plus } from 'lucide-vue-next';\r\nimport { NumberFieldIncrement, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<NumberFieldIncrementProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <NumberFieldIncrement\r\n data-slot=\"increment\"\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'absolute right-0 top-1/2 -translate-y-1/2 p-3 disabled:cursor-not-allowed disabled:opacity-20',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot>\r\n <Plus class=\"h-4 w-4\" />\r\n </slot>\r\n </NumberFieldIncrement>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { NumberFieldInput } from 'reka-ui';\r\n</script>\r\n\r\n<template>\r\n <NumberFieldInput\r\n :class=\"\r\n cn(\r\n 'flex h-9 w-full rounded-md border border-input bg-transparent py-1 text-center text-sm shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\r\n )\r\n \"\r\n data-slot=\"input\"\r\n />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PaginationEllipsisProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { MoreHorizontal } from 'lucide-vue-next';\r\nimport { PaginationEllipsis } from 'reka-ui';\r\n\r\nconst props = defineProps<PaginationEllipsisProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <PaginationEllipsis\r\n v-bind=\"delegatedProps\"\r\n :class=\"cn('flex size-8 items-center justify-center', props.class)\"\r\n >\r\n <slot>\r\n <MoreHorizontal class=\"size-4\" />\r\n </slot>\r\n </PaginationEllipsis>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PaginationFirstProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronsLeft } from 'lucide-vue-next';\r\nimport { PaginationFirst } from 'reka-ui';\r\n\r\nimport { Button } from '../button';\r\n\r\nconst props = withDefaults(\r\n defineProps<PaginationFirstProps & { class?: any }>(),\r\n {\r\n asChild: true,\r\n },\r\n);\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <PaginationFirst v-bind=\"delegatedProps\">\r\n <Button :class=\"cn('size-8 p-0', props.class)\" variant=\"outline\">\r\n <slot>\r\n <ChevronsLeft class=\"size-4\" />\r\n </slot>\r\n </Button>\r\n </PaginationFirst>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PaginationLastProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronsRight } from 'lucide-vue-next';\r\nimport { PaginationLast } from 'reka-ui';\r\n\r\nimport { Button } from '../button';\r\n\r\nconst props = withDefaults(\r\n defineProps<PaginationLastProps & { class?: any }>(),\r\n {\r\n asChild: true,\r\n },\r\n);\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <PaginationLast v-bind=\"delegatedProps\">\r\n <Button :class=\"cn('size-8 p-0', props.class)\" variant=\"outline\">\r\n <slot>\r\n <ChevronsRight class=\"size-4\" />\r\n </slot>\r\n </Button>\r\n </PaginationLast>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PaginationNextProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronRight } from 'lucide-vue-next';\r\nimport { PaginationNext } from 'reka-ui';\r\n\r\nimport { Button } from '../button';\r\n\r\nconst props = withDefaults(\r\n defineProps<PaginationNextProps & { class?: any }>(),\r\n {\r\n asChild: true,\r\n },\r\n);\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <PaginationNext v-bind=\"delegatedProps\">\r\n <Button :class=\"cn('size-8 p-0', props.class)\" variant=\"outline\">\r\n <slot>\r\n <ChevronRight class=\"size-4\" />\r\n </slot>\r\n </Button>\r\n </PaginationNext>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PaginationPrevProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronLeft } from 'lucide-vue-next';\r\nimport { PaginationPrev } from 'reka-ui';\r\n\r\nimport { Button } from '../button';\r\n\r\nconst props = withDefaults(\r\n defineProps<PaginationPrevProps & { class?: any }>(),\r\n {\r\n asChild: true,\r\n },\r\n);\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <PaginationPrev v-bind=\"delegatedProps\">\r\n <Button :class=\"cn('size-8 p-0', props.class)\" variant=\"outline\">\r\n <slot>\r\n <ChevronLeft class=\"size-4\" />\r\n </slot>\r\n </Button>\r\n </PaginationPrev>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PinInputRootEmits, PinInputRootProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { PinInputRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<PinInputRootProps & { class?: any }>();\r\nconst emits = defineEmits<PinInputRootEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <PinInputRoot\r\n v-bind=\"forwarded\"\r\n :class=\"cn('flex items-center gap-2', props.class)\"\r\n >\r\n <slot></slot>\r\n </PinInputRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PrimitiveProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Primitive, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<PrimitiveProps & { class?: any }>();\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n return delegated;\r\n});\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <Primitive\r\n v-bind=\"forwardedProps\"\r\n :class=\"cn('flex items-center', props.class)\"\r\n >\r\n <slot></slot>\r\n </Primitive>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PinInputInputProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { PinInputInput, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<PinInputInputProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <PinInputInput\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'relative flex h-10 w-8 items-center justify-center border-y border-r border-input bg-background text-center text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md focus:relative focus:z-10 focus:outline-none focus:ring-2 md:w-10',\r\n props.class,\r\n )\r\n \"\r\n />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PrimitiveProps } from 'reka-ui';\r\n\r\nimport { Dot } from 'lucide-vue-next';\r\nimport { Primitive, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<PrimitiveProps>();\r\nconst forwardedProps = useForwardProps(props);\r\n</script>\r\n\r\n<template>\r\n <Primitive v-bind=\"forwardedProps\">\r\n <slot>\r\n <Dot />\r\n </slot>\r\n </Primitive>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PopoverRootEmits, PopoverRootProps } from 'reka-ui';\r\n\r\nimport { PopoverRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<PopoverRootProps>();\r\nconst emits = defineEmits<PopoverRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <PopoverRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </PopoverRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PopoverContentEmits, PopoverContentProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { PopoverContent, PopoverPortal, useForwardPropsEmits } from 'reka-ui';\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(\r\n defineProps<PopoverContentProps & { class?: any }>(),\r\n {\r\n align: 'center',\r\n sideOffset: 4,\r\n },\r\n);\r\nconst emits = defineEmits<PopoverContentEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <PopoverPortal>\r\n <PopoverContent\r\n v-bind=\"{ ...forwarded, ...$attrs }\"\r\n :class=\"\r\n cn(\r\n 'w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </PopoverContent>\r\n </PopoverPortal>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PopoverTriggerProps } from 'reka-ui';\r\n\r\nimport { PopoverTrigger } from 'reka-ui';\r\n\r\nconst props = defineProps<PopoverTriggerProps>();\r\n</script>\r\n\r\n<template>\r\n <PopoverTrigger v-bind=\"props\">\r\n <slot></slot>\r\n </PopoverTrigger>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { RadioGroupRootEmits, RadioGroupRootProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { RadioGroupRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<RadioGroupRootProps & { class?: any }>();\r\nconst emits = defineEmits<RadioGroupRootEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <RadioGroupRoot :class=\"cn('grid gap-2', props.class)\" v-bind=\"forwarded\">\r\n <slot></slot>\r\n </RadioGroupRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { RadioGroupItemProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Circle } from 'lucide-vue-next';\r\nimport { RadioGroupIndicator, RadioGroupItem, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<RadioGroupItemProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <RadioGroupItem\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'aspect-square h-4 w-4 rounded-full border border-primary text-primary shadow focus:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <RadioGroupIndicator class=\"flex items-center justify-center\">\r\n <Circle class=\"h-2.5 w-2.5 fill-current text-current\" />\r\n </RadioGroupIndicator>\r\n </RadioGroupItem>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n SplitterResizeHandleEmits,\r\n SplitterResizeHandleProps,\r\n} from 'reka-ui';\r\n\r\nimport type { HTMLAttributes } from 'vue';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { GripVertical } from '@admin-kit/icons';\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { SplitterResizeHandle, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<\r\n SplitterResizeHandleProps & {\r\n class?: HTMLAttributes['class'];\r\n withHandle?: boolean;\r\n }\r\n>();\r\nconst emits = defineEmits<SplitterResizeHandleEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <SplitterResizeHandle\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 [&[data-orientation=vertical]>div]:rotate-90 [&[data-orientation=vertical]]:h-px [&[data-orientation=vertical]]:w-full [&[data-orientation=vertical]]:after:left-0 [&[data-orientation=vertical]]:after:h-1 [&[data-orientation=vertical]]:after:w-full [&[data-orientation=vertical]]:after:-translate-y-1/2 [&[data-orientation=vertical]]:after:translate-x-0',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <template v-if=\"props.withHandle\">\r\n <div\r\n class=\"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border\"\r\n >\r\n <GripVertical class=\"h-2.5 w-2.5\" />\r\n </div>\r\n </template>\r\n </SplitterResizeHandle>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SplitterGroupEmits, SplitterGroupProps } from 'reka-ui';\r\n\r\nimport type { HTMLAttributes } from 'vue';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { SplitterGroup, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<\r\n SplitterGroupProps & { class?: HTMLAttributes['class'] }\r\n>();\r\nconst emits = defineEmits<SplitterGroupEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <SplitterGroup\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'flex h-full w-full data-[panel-group-direction=vertical]:flex-col',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </SplitterGroup>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ScrollAreaScrollbarProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ScrollAreaScrollbar, ScrollAreaThumb } from 'reka-ui';\r\n\r\nconst props = withDefaults(\r\n defineProps<ScrollAreaScrollbarProps & { class?: any }>(),\r\n {\r\n orientation: 'vertical',\r\n },\r\n);\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <ScrollAreaScrollbar\r\n v-bind=\"delegatedProps\"\r\n :class=\"\r\n cn(\r\n 'flex touch-none select-none transition-colors',\r\n orientation === 'vertical' &&\r\n 'h-full w-2.5 border-l border-l-transparent p-px',\r\n orientation === 'horizontal' &&\r\n 'h-2.5 flex-col border-t border-t-transparent p-px',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <ScrollAreaThumb class=\"relative flex-1 rounded-full bg-border\" />\r\n </ScrollAreaScrollbar>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ScrollAreaRootProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ScrollAreaCorner, ScrollAreaRoot, ScrollAreaViewport } from 'reka-ui';\r\n\r\nimport ScrollBar from './ScrollBar.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<\r\n ScrollAreaRootProps & {\r\n class?: any;\r\n onScroll?: (event: Event) => void;\r\n viewportProps?: { onScroll: (event: Event) => void };\r\n }\r\n >(),\r\n {\r\n onScroll: () => {},\r\n },\r\n);\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <ScrollAreaRoot\r\n v-bind=\"delegatedProps\"\r\n :class=\"cn('relative overflow-hidden', props.class)\"\r\n >\r\n <ScrollAreaViewport\r\n as-child\r\n class=\"h-full w-full rounded-[inherit] focus:outline-none\"\r\n @scroll=\"onScroll\"\r\n >\r\n <slot></slot>\r\n </ScrollAreaViewport>\r\n <ScrollBar />\r\n <ScrollAreaCorner />\r\n </ScrollAreaRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectRootEmits, SelectRootProps } from 'reka-ui';\r\n\r\nimport { SelectRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectRootProps>();\r\nconst emits = defineEmits<SelectRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <SelectRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </SelectRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectScrollDownButtonProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronDown } from 'lucide-vue-next';\r\nimport { SelectScrollDownButton, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectScrollDownButtonProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <SelectScrollDownButton\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn('flex cursor-default items-center justify-center py-1', props.class)\r\n \"\r\n >\r\n <slot>\r\n <ChevronDown class=\"h-4 w-4\" />\r\n </slot>\r\n </SelectScrollDownButton>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectScrollUpButtonProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronUp } from 'lucide-vue-next';\r\nimport { SelectScrollUpButton, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectScrollUpButtonProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <SelectScrollUpButton\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn('flex cursor-default items-center justify-center py-1', props.class)\r\n \"\r\n >\r\n <slot>\r\n <ChevronUp class=\"h-4 w-4\" />\r\n </slot>\r\n </SelectScrollUpButton>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectContentEmits, SelectContentProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport {\r\n SelectContent,\r\n SelectPortal,\r\n SelectViewport,\r\n useForwardPropsEmits,\r\n} from 'reka-ui';\r\n\r\nimport SelectScrollDownButton from './SelectScrollDownButton.vue';\r\nimport SelectScrollUpButton from './SelectScrollUpButton.vue';\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(\r\n defineProps<SelectContentProps & { class?: any }>(),\r\n {\r\n position: 'popper',\r\n },\r\n);\r\nconst emits = defineEmits<SelectContentEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <SelectPortal>\r\n <SelectContent\r\n v-bind=\"{ ...forwarded, ...$attrs }\"\r\n :class=\"\r\n cn(\r\n 'z-popup relative max-h-96 min-w-32 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n position === 'popper' &&\r\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <SelectScrollUpButton />\r\n <SelectViewport\r\n :class=\"\r\n cn(\r\n 'p-1',\r\n position === 'popper' &&\r\n 'h-[--reka-select-trigger-height] w-full min-w-[--reka-select-trigger-width]',\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </SelectViewport>\r\n <SelectScrollDownButton />\r\n </SelectContent>\r\n </SelectPortal>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectGroupProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { SelectGroup } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectGroupProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <SelectGroup :class=\"cn('w-full p-1', props.class)\" v-bind=\"delegatedProps\">\r\n <slot></slot>\r\n </SelectGroup>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectItemProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Check } from 'lucide-vue-next';\r\nimport {\r\n SelectItem,\r\n SelectItemIndicator,\r\n SelectItemText,\r\n useForwardProps,\r\n} from 'reka-ui';\r\n\r\nconst props = defineProps<SelectItemProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <SelectItem\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <span class=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <SelectItemIndicator>\r\n <Check class=\"h-4 w-4\" />\r\n </SelectItemIndicator>\r\n </span>\r\n\r\n <SelectItemText>\r\n <slot></slot>\r\n </SelectItemText>\r\n </SelectItem>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectItemTextProps } from 'reka-ui';\r\n\r\nimport { SelectItemText } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectItemTextProps>();\r\n</script>\r\n\r\n<template>\r\n <SelectItemText v-bind=\"props\">\r\n <slot></slot>\r\n </SelectItemText>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectLabelProps } from 'reka-ui';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { SelectLabel } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectLabelProps & { class?: any }>();\r\n</script>\r\n\r\n<template>\r\n <SelectLabel :class=\"cn('px-2 py-1.5 text-sm font-semibold', props.class)\">\r\n <slot></slot>\r\n </SelectLabel>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectSeparatorProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { SelectSeparator } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectSeparatorProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <SelectSeparator\r\n v-bind=\"delegatedProps\"\r\n :class=\"cn('-mx-1 my-1 h-px bg-muted', props.class)\"\r\n />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectTriggerProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ChevronDown } from 'lucide-vue-next';\r\nimport { SelectIcon, SelectTrigger, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectTriggerProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <SelectTrigger\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'flex h-10 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n <SelectIcon as-child>\r\n <ChevronDown class=\"h-4 w-4 opacity-50\" />\r\n </SelectIcon>\r\n </SelectTrigger>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SelectValueProps } from 'reka-ui';\r\n\r\nimport { SelectValue } from 'reka-ui';\r\n\r\nconst props = defineProps<SelectValueProps>();\r\n</script>\r\n\r\n<template>\r\n <SelectValue v-bind=\"props\">\r\n <slot></slot>\r\n </SelectValue>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SeparatorProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Separator } from 'reka-ui';\r\n\r\nconst props = defineProps<SeparatorProps & { class?: any; label?: string }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <Separator\r\n v-bind=\"delegatedProps\"\r\n :class=\"\r\n cn(\r\n 'relative shrink-0 bg-border',\r\n props.orientation === 'vertical' ? 'h-full w-px' : 'h-px w-full',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <span\r\n v-if=\"props.label\"\r\n :class=\"\r\n cn(\r\n 'absolute left-1/2 top-1/2 flex -translate-x-1/2 -translate-y-1/2 items-center justify-center bg-background text-xs text-muted-foreground',\r\n props.orientation === 'vertical'\r\n ? 'w-[1px] px-1 py-2'\r\n : 'h-[1px] px-2 py-1',\r\n )\r\n \"\r\n >\r\n {{ props.label }}\r\n </span>\r\n </Separator>\r\n</template>\r\n","import type { VariantProps } from 'class-variance-authority';\r\n\r\nimport { cva } from 'class-variance-authority';\r\n\r\nexport const sheetVariants = cva(\r\n 'bg-background shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500 border-border',\r\n {\r\n defaultVariants: {\r\n side: 'right',\r\n },\r\n variants: {\r\n side: {\r\n bottom:\r\n 'inset-x-0 bottom-0 border-t border-border data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\r\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left ',\r\n right:\r\n 'inset-y-0 right-0 w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right',\r\n top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\r\n },\r\n },\r\n },\r\n);\r\n\r\nexport type SheetVariants = VariantProps<typeof sheetVariants>;\r\n","<script setup lang=\"ts\">\r\nimport type { DialogRootEmits, DialogRootProps } from 'reka-ui';\r\n\r\nimport { DialogRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogRootProps>();\r\nconst emits = defineEmits<DialogRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <DialogRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </DialogRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogCloseProps } from 'reka-ui';\r\n\r\nimport { DialogClose } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogCloseProps>();\r\n</script>\r\n\r\n<template>\r\n <DialogClose v-bind=\"props\">\r\n <slot></slot>\r\n </DialogClose>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { inject } from 'vue';\r\n\r\nimport { useScrollLock } from '@admin-kit/composables';\r\n\r\nuseScrollLock();\r\nconst id = inject('DISMISSABLE_DRAWER_ID');\r\n</script>\r\n<template>\r\n <div :data-dismissable-drawer=\"id\" class=\"z-popup inset-0 bg-overlay\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogContentEmits, DialogContentProps } from 'reka-ui';\r\n\r\nimport type { SheetVariants } from './sheet';\r\n\r\nimport { computed, ref } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DialogContent, useForwardPropsEmits } from 'reka-ui';\r\n\r\nimport { sheetVariants } from './sheet';\r\nimport SheetOverlay from './SheetOverlay.vue';\r\n\r\ninterface SheetContentProps extends DialogContentProps {\r\n appendTo?: HTMLElement | string;\r\n class?: any;\r\n modal?: boolean;\r\n open?: boolean;\r\n overlayBlur?: number;\r\n side?: SheetVariants['side'];\r\n zIndex?: number;\r\n}\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<SheetContentProps>(), {\r\n appendTo: 'body',\r\n});\r\n\r\nconst emits = defineEmits<\r\n DialogContentEmits & { close: []; closed: []; opened: [] }\r\n>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const {\r\n class: _,\r\n modal: _modal,\r\n open: _open,\r\n side: _side,\r\n ...delegated\r\n } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nfunction isAppendToBody() {\r\n return (\r\n props.appendTo === 'body' ||\r\n props.appendTo === document.body ||\r\n !props.appendTo\r\n );\r\n}\r\n\r\nconst position = computed(() => {\r\n return isAppendToBody() ? 'fixed' : 'absolute';\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\nconst contentRef = ref<InstanceType<typeof DialogContent> | null>(null);\r\nfunction onAnimationEnd(event: AnimationEvent) {\r\n // 只有在 contentRef 的动画结束时才触发 opened/closed 事件\r\n if (event.target === contentRef.value?.$el) {\r\n if (props.open) {\r\n emits('opened');\r\n } else {\r\n emits('closed');\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <Teleport defer :to=\"appendTo\">\r\n <Transition name=\"fade\">\r\n <SheetOverlay\r\n v-if=\"open && modal\"\r\n :style=\"{\r\n ...(zIndex ? { zIndex } : {}),\r\n position,\r\n backdropFilter:\r\n overlayBlur && overlayBlur > 0 ? `blur(${overlayBlur}px)` : 'none',\r\n }\"\r\n />\r\n </Transition>\r\n <DialogContent\r\n ref=\"contentRef\"\r\n :class=\"cn('z-popup', sheetVariants({ side }), props.class)\"\r\n :style=\"{\r\n ...(zIndex ? { zIndex } : {}),\r\n position,\r\n }\"\r\n @animationend=\"onAnimationEnd\"\r\n v-bind=\"{ ...forwarded, ...$attrs }\"\r\n >\r\n <slot></slot>\r\n\r\n <!-- <DialogClose\r\n class=\"data-[state=open]:bg-secondary absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none\"\r\n >\r\n <Cross2Icon class=\"h-5 w-\" />\r\n </DialogClose> -->\r\n </DialogContent>\r\n </Teleport>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogDescriptionProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DialogDescription } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogDescriptionProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <DialogDescription\r\n :class=\"cn('text-sm text-muted-foreground', props.class)\"\r\n v-bind=\"delegatedProps\"\r\n >\r\n <slot></slot>\r\n </DialogDescription>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{ class?: any }>();\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"\r\n cn('flex flex-row flex-col-reverse justify-end gap-x-2', props.class)\r\n \"\r\n >\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{ class?: any }>();\r\n</script>\r\n\r\n<template>\r\n <div :class=\"cn('flex flex-col text-center sm:text-left', props.class)\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogTitleProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { DialogTitle } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogTitleProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <DialogTitle\r\n :class=\"cn('font-medium text-foreground', props.class)\"\r\n v-bind=\"delegatedProps\"\r\n >\r\n <slot></slot>\r\n </DialogTitle>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { DialogTriggerProps } from 'reka-ui';\r\n\r\nimport { DialogTrigger } from 'reka-ui';\r\n\r\nconst props = defineProps<DialogTriggerProps>();\r\n</script>\r\n\r\n<template>\r\n <DialogTrigger v-bind=\"props\">\r\n <slot></slot>\r\n </DialogTrigger>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SwitchRootEmits, SwitchRootProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { SwitchRoot, SwitchThumb, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<SwitchRootProps & { class?: any }>();\r\n\r\nconst emits = defineEmits<SwitchRootEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <SwitchRoot\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <SwitchThumb\r\n :class=\"\r\n cn(\r\n 'pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\r\n )\r\n \"\r\n />\r\n </SwitchRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TabsRootEmits, TabsRootProps } from 'reka-ui';\r\n\r\nimport { TabsRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<TabsRootProps>();\r\nconst emits = defineEmits<TabsRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <TabsRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </TabsRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TabsContentProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { TabsContent } from 'reka-ui';\r\n\r\nconst props = defineProps<TabsContentProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <TabsContent\r\n :class=\"\r\n cn(\r\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\r\n props.class,\r\n )\r\n \"\r\n v-bind=\"delegatedProps\"\r\n >\r\n <slot></slot>\r\n </TabsContent>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TabsListProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { TabsList } from 'reka-ui';\r\n\r\nconst props = defineProps<TabsListProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <TabsList\r\n v-bind=\"delegatedProps\"\r\n :class=\"\r\n cn(\r\n 'inline-flex h-9 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </TabsList>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TabsTriggerProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { TabsTrigger, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<TabsTriggerProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <TabsTrigger\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </TabsTrigger>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { useVModel } from '@vueuse/core';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n defaultValue?: number | string;\r\n modelValue?: number | string;\r\n}>();\r\n\r\nconst emits = defineEmits<{\r\n (e: 'update:modelValue', payload: number | string): void;\r\n}>();\r\n\r\nconst modelValue = useVModel(props, 'modelValue', emits, {\r\n defaultValue: props.defaultValue,\r\n passive: true,\r\n});\r\n</script>\r\n\r\n<template>\r\n <textarea\r\n v-model=\"modelValue\"\r\n :class=\"\r\n cn(\r\n 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\r\n props.class,\r\n )\r\n \"\r\n ></textarea>\r\n</template>\r\n","import type { VariantProps } from 'class-variance-authority';\r\n\r\nimport { cva } from 'class-variance-authority';\r\n\r\nexport const toggleVariants = cva(\r\n 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground',\r\n {\r\n defaultVariants: {\r\n size: 'default',\r\n variant: 'default',\r\n },\r\n variants: {\r\n size: {\r\n default: 'h-9 px-3',\r\n lg: 'h-10 px-3',\r\n sm: 'h-8 px-2',\r\n },\r\n variant: {\r\n default: 'bg-transparent',\r\n outline:\r\n 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',\r\n },\r\n },\r\n },\r\n);\r\n\r\nexport type ToggleVariants = VariantProps<typeof toggleVariants>;\r\n","<script setup lang=\"ts\">\r\nimport type { ToggleEmits, ToggleProps } from 'reka-ui';\r\n\r\nimport type { ToggleVariants } from './toggle';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Toggle, useForwardPropsEmits } from 'reka-ui';\r\n\r\nimport { toggleVariants } from './toggle';\r\n\r\nconst props = withDefaults(\r\n defineProps<\r\n ToggleProps & {\r\n class?: any;\r\n size?: ToggleVariants['size'];\r\n variant?: ToggleVariants['variant'];\r\n }\r\n >(),\r\n {\r\n disabled: false,\r\n size: 'default',\r\n variant: 'default',\r\n },\r\n);\r\n\r\nconst emits = defineEmits<ToggleEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, size: _size, variant: _variant, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <Toggle\r\n v-bind=\"forwarded\"\r\n :class=\"cn(toggleVariants({ variant, size }), props.class)\"\r\n >\r\n <slot></slot>\r\n </Toggle>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { VariantProps } from 'class-variance-authority';\r\nimport type { ToggleGroupRootEmits, ToggleGroupRootProps } from 'reka-ui';\r\n\r\nimport type { toggleVariants } from '../toggle';\r\n\r\nimport { computed, provide } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ToggleGroupRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\ntype ToggleGroupVariants = VariantProps<typeof toggleVariants>;\r\n\r\nconst props = defineProps<\r\n ToggleGroupRootProps & {\r\n class?: any;\r\n size?: ToggleGroupVariants['size'];\r\n variant?: ToggleGroupVariants['variant'];\r\n }\r\n>();\r\nconst emits = defineEmits<ToggleGroupRootEmits>();\r\n\r\nprovide('toggleGroup', {\r\n size: props.size,\r\n variant: props.variant,\r\n});\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <ToggleGroupRoot\r\n v-bind=\"forwarded\"\r\n :class=\"cn('flex items-center justify-center gap-1', props.class)\"\r\n >\r\n <slot></slot>\r\n </ToggleGroupRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { VariantProps } from 'class-variance-authority';\r\nimport type { ToggleGroupItemProps } from 'reka-ui';\r\n\r\nimport { computed, inject } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ToggleGroupItem, useForwardProps } from 'reka-ui';\r\n\r\nimport { toggleVariants } from '../toggle';\r\n\r\ntype ToggleGroupVariants = VariantProps<typeof toggleVariants>;\r\n\r\nconst props = defineProps<\r\n ToggleGroupItemProps & {\r\n class?: any;\r\n size?: ToggleGroupVariants['size'];\r\n variant?: ToggleGroupVariants['variant'];\r\n }\r\n>();\r\n\r\nconst context = inject<ToggleGroupVariants>('toggleGroup');\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, size: _size, variant: _variant, ...delegated } = props;\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <ToggleGroupItem\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n toggleVariants({\r\n variant: context?.variant || variant,\r\n size: context?.size || size,\r\n }),\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </ToggleGroupItem>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TooltipRootEmits, TooltipRootProps } from 'reka-ui';\r\n\r\nimport { TooltipRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<TooltipRootProps>();\r\nconst emits = defineEmits<TooltipRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <TooltipRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </TooltipRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TooltipContentEmits, TooltipContentProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { TooltipContent, TooltipPortal, useForwardPropsEmits } from 'reka-ui';\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(\r\n defineProps<TooltipContentProps & { class?: any }>(),\r\n {\r\n class: '',\r\n side: 'right',\r\n sideOffset: 5,\r\n },\r\n);\r\n\r\nconst emits = defineEmits<TooltipContentEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <TooltipPortal>\r\n <TooltipContent\r\n v-bind=\"{ ...forwarded, ...$attrs }\"\r\n :class=\"\r\n cn(\r\n 'z-popup overflow-hidden rounded-sm border border-border bg-accent px-4 py-2 text-xs text-accent-foreground shadow-float animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </TooltipContent>\r\n </TooltipPortal>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TooltipProviderProps } from 'reka-ui';\r\n\r\nimport { TooltipProvider } from 'reka-ui';\r\n\r\nconst props = defineProps<TooltipProviderProps>();\r\n</script>\r\n\r\n<template>\r\n <TooltipProvider v-bind=\"props\">\r\n <slot></slot>\r\n </TooltipProvider>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TooltipTriggerProps } from 'reka-ui';\r\n\r\nimport { TooltipTrigger } from 'reka-ui';\r\n\r\nconst props = defineProps<TooltipTriggerProps>();\r\n</script>\r\n\r\n<template>\r\n <TooltipTrigger v-bind=\"props\">\r\n <slot></slot>\r\n </TooltipTrigger>\r\n</template>\r\n","import type { Arrayable } from '@vueuse/core';\r\nimport type { FlattenedItem } from 'reka-ui';\r\n\r\nimport type { Recordable } from '@admin-kit/typings';\r\n\r\nexport interface TreeProps {\r\n /** 单选时允许取消已有选项 */\r\n allowClear?: boolean;\r\n /** 非关联选择时,自动选中上级节点 */\r\n autoCheckParent?: boolean;\r\n /** 显示边框 */\r\n bordered?: boolean;\r\n /** 取消父子关联选择 */\r\n checkStrictly?: boolean;\r\n /** 子级字段名 */\r\n childrenField?: string;\r\n /** 默认展开的键 */\r\n defaultExpandedKeys?: Array<number | string>;\r\n /** 默认展开的级别(优先级高于defaultExpandedKeys) */\r\n defaultExpandedLevel?: number;\r\n /** 默认值 */\r\n defaultValue?: Arrayable<number | string>;\r\n /** 禁用 */\r\n disabled?: boolean;\r\n /** 禁用字段名 */\r\n disabledField?: string;\r\n /** 自定义节点类名 */\r\n getNodeClass?: (item: FlattenedItem<Recordable<any>>) => string;\r\n iconField?: string;\r\n /** label字段 */\r\n labelField?: string;\r\n /** 是否多选 */\r\n multiple?: boolean;\r\n /** 显示由iconField指定的图标 */\r\n showIcon?: boolean;\r\n /** 启用展开收缩动画 */\r\n transition?: boolean;\r\n /** 树数据 */\r\n treeData: Recordable<any>[];\r\n /** 值字段 */\r\n valueField?: string;\r\n}\r\n\r\nexport function treePropsDefaults() {\r\n return {\r\n allowClear: false,\r\n autoCheckParent: true,\r\n bordered: false,\r\n checkStrictly: false,\r\n defaultExpandedKeys: () => [],\r\n defaultExpandedLevel: 0,\r\n disabled: false,\r\n disabledField: 'disabled',\r\n iconField: 'icon',\r\n labelField: 'label',\r\n multiple: false,\r\n showIcon: true,\r\n transition: true,\r\n valueField: 'value',\r\n childrenField: 'children',\r\n };\r\n}\r\n","<script lang=\"ts\" setup>\r\nimport type { Arrayable } from '@vueuse/core';\r\nimport type { FlattenedItem } from 'reka-ui';\r\n\r\nimport type { ClassType, Recordable } from '@admin-kit/typings';\r\n\r\nimport type { TreeProps } from './types';\r\n\r\nimport { onMounted, ref, watchEffect } from 'vue';\r\n\r\nimport { ChevronRight, IconifyIcon } from '@admin-kit/icons';\r\nimport { cn, get } from '@admin-kit/shared/utils';\r\n\r\nimport { TreeItem, TreeRoot } from 'reka-ui';\r\n\r\nimport { Checkbox } from '../checkbox';\r\nimport { treePropsDefaults } from './types';\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), treePropsDefaults());\r\n\r\nconst emits = defineEmits<{\r\n expand: [value: FlattenedItem<Recordable<any>>];\r\n select: [value: FlattenedItem<Recordable<any>>];\r\n}>();\r\n\r\ninterface InnerFlattenItem<T = Recordable<any>, P = number | string> {\r\n hasChildren: boolean;\r\n id: P;\r\n level: number;\r\n parentId: null | P;\r\n parents: P[];\r\n value: T;\r\n}\r\n\r\nfunction flatten<T = Recordable<any>, P = number | string>(\r\n items: T[],\r\n childrenField: string = 'children',\r\n level = 0,\r\n parentId: null | P = null,\r\n parents: P[] = [],\r\n): InnerFlattenItem<T, P>[] {\r\n const result: InnerFlattenItem<T, P>[] = [];\r\n items.forEach((item) => {\r\n const children = get(item, childrenField) as Array<T>;\r\n const id = get(item, props.valueField) as P;\r\n const val: InnerFlattenItem<T, P> = {\r\n hasChildren: Array.isArray(children) && children.length > 0,\r\n id,\r\n level,\r\n parentId,\r\n parents: [...parents],\r\n value: item,\r\n };\r\n result.push(val);\r\n if (val.hasChildren)\r\n result.push(\r\n ...flatten(children, childrenField, level + 1, id, [...parents, id]),\r\n );\r\n });\r\n return result;\r\n}\r\n\r\nconst flattenData = ref<Array<InnerFlattenItem>>([]);\r\nconst modelValue = defineModel<Arrayable<number | string>>();\r\nconst expanded = ref<Array<number | string>>(props.defaultExpandedKeys ?? []);\r\n\r\nconst treeValue = ref();\r\n\r\nonMounted(() => {\r\n watchEffect(() => {\r\n flattenData.value = flatten(props.treeData, props.childrenField);\r\n updateTreeValue();\r\n if (\r\n props.defaultExpandedLevel !== undefined &&\r\n props.defaultExpandedLevel > 0\r\n )\r\n expandToLevel(props.defaultExpandedLevel);\r\n });\r\n});\r\n\r\nfunction getItemByValue(value: number | string) {\r\n return flattenData.value.find(\r\n (item) => get(item.value, props.valueField) === value,\r\n )?.value;\r\n}\r\n\r\nfunction updateTreeValue() {\r\n const val = modelValue.value;\r\n if (val === undefined) {\r\n treeValue.value = undefined;\r\n } else {\r\n if (Array.isArray(val)) {\r\n const filteredValues = val.filter((v) => {\r\n const item = getItemByValue(v);\r\n return item && !get(item, props.disabledField);\r\n });\r\n treeValue.value = filteredValues.map((v) => getItemByValue(v));\r\n\r\n if (filteredValues.length !== val.length) {\r\n modelValue.value = filteredValues;\r\n }\r\n } else {\r\n const item = getItemByValue(val);\r\n if (item && !get(item, props.disabledField)) {\r\n treeValue.value = item;\r\n } else {\r\n treeValue.value = undefined;\r\n modelValue.value = undefined;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction updateModelValue(val: Arrayable<Recordable<any>>) {\r\n if (Array.isArray(val)) {\r\n const filteredVal = val.filter((v) => !get(v, props.disabledField));\r\n modelValue.value = filteredVal.map((v) => get(v, props.valueField));\r\n } else {\r\n if (val && !get(val, props.disabledField)) {\r\n modelValue.value = get(val, props.valueField);\r\n }\r\n }\r\n}\r\n\r\nfunction expandToLevel(level: number) {\r\n const keys: string[] = [];\r\n flattenData.value.forEach((item) => {\r\n if (item.level <= level - 1) {\r\n keys.push(get(item.value, props.valueField));\r\n }\r\n });\r\n expanded.value = keys;\r\n}\r\n\r\nfunction collapseNodes(value: Arrayable<number | string>) {\r\n const keys = new Set(Array.isArray(value) ? value : [value]);\r\n expanded.value = expanded.value.filter((key) => !keys.has(key));\r\n}\r\n\r\nfunction expandNodes(value: Arrayable<number | string>) {\r\n const keys = [...(Array.isArray(value) ? value : [value])];\r\n keys.forEach((key) => {\r\n if (expanded.value.includes(key)) return;\r\n const item = getItemByValue(key);\r\n if (item) {\r\n expanded.value.push(key);\r\n }\r\n });\r\n}\r\n\r\nfunction expandAll() {\r\n expanded.value = flattenData.value\r\n .filter((item) => item.hasChildren)\r\n .map((item) => get(item.value, props.valueField));\r\n}\r\n\r\nfunction collapseAll() {\r\n expanded.value = [];\r\n}\r\n\r\nfunction checkAll() {\r\n if (!props.multiple) return;\r\n modelValue.value = [\r\n ...new Set(\r\n flattenData.value\r\n .filter((item) => !get(item.value, props.disabledField))\r\n .map((item) => get(item.value, props.valueField)),\r\n ),\r\n ];\r\n updateTreeValue();\r\n}\r\n\r\nfunction unCheckAll() {\r\n if (!props.multiple) return;\r\n modelValue.value = [];\r\n updateTreeValue();\r\n}\r\n\r\nfunction isNodeDisabled(item: FlattenedItem<Recordable<any>>) {\r\n return props.disabled || get(item.value, props.disabledField);\r\n}\r\n\r\nfunction onToggle(item: FlattenedItem<Recordable<any>>) {\r\n emits('expand', item);\r\n}\r\nfunction onSelect(item: FlattenedItem<Recordable<any>>, isSelected: boolean) {\r\n if (isNodeDisabled(item)) {\r\n return;\r\n }\r\n\r\n if (\r\n !props.checkStrictly &&\r\n props.multiple &&\r\n props.autoCheckParent &&\r\n isSelected\r\n ) {\r\n flattenData.value\r\n .find((i) => {\r\n return (\r\n get(i.value, props.valueField) === get(item.value, props.valueField)\r\n );\r\n })\r\n ?.parents?.filter((item) => !get(item, props.disabledField))\r\n ?.forEach((p) => {\r\n if (Array.isArray(modelValue.value) && !modelValue.value.includes(p)) {\r\n modelValue.value.push(p);\r\n }\r\n });\r\n }\r\n if (\r\n !props.checkStrictly &&\r\n props.multiple &&\r\n props.autoCheckParent &&\r\n !isSelected\r\n ) {\r\n flattenData.value\r\n .find((i) => {\r\n return (\r\n get(i.value, props.valueField) === get(item.value, props.valueField)\r\n );\r\n })\r\n ?.parents?.filter((item) => !get(item, props.disabledField))\r\n ?.toReversed()\r\n .forEach((p) => {\r\n const children = flattenData.value.filter((i) => {\r\n return (\r\n i.parents.length > 0 &&\r\n i.parents.includes(p) &&\r\n i.id !== item._id &&\r\n i.parentId === p\r\n );\r\n });\r\n if (Array.isArray(modelValue.value)) {\r\n const hasSelectedChild = children.some((child) =>\r\n (modelValue.value as unknown[]).includes(\r\n get(child.value, props.valueField),\r\n ),\r\n );\r\n if (!hasSelectedChild) {\r\n const index = modelValue.value.indexOf(p);\r\n if (index !== -1) {\r\n modelValue.value.splice(index, 1);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n updateTreeValue();\r\n emits('select', item);\r\n}\r\n\r\ndefineExpose({\r\n collapseAll,\r\n collapseNodes,\r\n expandAll,\r\n expandNodes,\r\n checkAll,\r\n unCheckAll,\r\n expandToLevel,\r\n getItemByValue,\r\n});\r\n</script>\r\n<template>\r\n <TreeRoot\r\n :get-key=\"(item) => get(item, valueField)\"\r\n :get-children=\"(item) => get(item, childrenField)\"\r\n :items=\"treeData\"\r\n :model-value=\"treeValue\"\r\n v-model:expanded=\"expanded as string[]\"\r\n :default-expanded=\"defaultExpandedKeys as string[]\"\r\n :propagate-select=\"!checkStrictly\"\r\n :multiple=\"multiple\"\r\n :disabled=\"disabled\"\r\n :selection-behavior=\"allowClear || multiple ? 'toggle' : 'replace'\"\r\n @update:model-value=\"updateModelValue\"\r\n v-slot=\"{ flattenItems }\"\r\n :class=\"\r\n cn(\r\n 'text-blackA11 container select-none list-none rounded-lg text-sm font-medium',\r\n $attrs.class as unknown as ClassType,\r\n bordered ? 'border' : '',\r\n )\r\n \"\r\n >\r\n <div\r\n :class=\"\r\n cn('my-0.5 flex w-full items-center p-1', bordered ? 'border-b' : '')\r\n \"\r\n v-if=\"$slots.header\"\r\n >\r\n <slot name=\"header\"> </slot>\r\n </div>\r\n <div\r\n :class=\"\r\n cn('my-0.5 flex w-full items-center p-1', bordered ? 'border-b' : '')\r\n \"\r\n v-if=\"treeData.length > 0\"\r\n >\r\n <div\r\n class=\"flex size-5 flex-1 cursor-pointer items-center\"\r\n @click=\"() => (expanded?.length > 0 ? collapseAll() : expandAll())\"\r\n >\r\n <ChevronRight\r\n :class=\"{ 'rotate-90': expanded?.length > 0 }\"\r\n class=\"size-4 cursor-pointer text-foreground/80 transition hover:text-foreground\"\r\n />\r\n <Checkbox\r\n v-if=\"multiple\"\r\n @click.stop\r\n @update:model-value=\"\r\n (checked: boolean | 'indeterminate') =>\r\n checked === true ? checkAll() : unCheckAll()\r\n \"\r\n />\r\n </div>\r\n </div>\r\n <TransitionGroup :name=\"transition ? 'fade' : ''\">\r\n <TreeItem\r\n v-for=\"item in flattenItems\"\r\n v-slot=\"{\r\n isExpanded,\r\n isSelected,\r\n isIndeterminate,\r\n handleSelect,\r\n handleToggle,\r\n }\"\r\n :key=\"item._id\"\r\n :style=\"{ 'margin-left': `${item.level - 1}rem` }\"\r\n :class=\"\r\n cn('cursor-pointer', getNodeClass?.(item), {\r\n 'data-[selected]:bg-accent': !multiple,\r\n 'cursor-not-allowed text-foreground/50': isNodeDisabled(item),\r\n })\r\n \"\r\n v-bind=\"\r\n Object.assign(item.bind, {\r\n onfocus: isNodeDisabled(item) ? 'this.blur()' : undefined,\r\n disabled: isNodeDisabled(item),\r\n })\r\n \"\r\n @select=\"\r\n (event: any) => {\r\n if (isNodeDisabled(item)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n if (event.detail.originalEvent.type === 'click') {\r\n event.preventDefault();\r\n }\r\n onSelect(item, event.detail.isSelected);\r\n }\r\n \"\r\n @toggle=\"\r\n (event: any) => {\r\n if (event.detail.originalEvent.type === 'click') {\r\n event.preventDefault();\r\n }\r\n !isNodeDisabled(item) && onToggle(item);\r\n }\r\n \"\r\n class=\"tree-node focus:ring-grass8 my-0.5 flex items-center rounded p-1 outline-none focus:ring-2\"\r\n >\r\n <ChevronRight\r\n v-if=\"\r\n item.hasChildren &&\r\n Array.isArray(item.value[childrenField]) &&\r\n item.value[childrenField].length > 0\r\n \"\r\n class=\"size-4 cursor-pointer text-foreground/80 transition hover:text-foreground\"\r\n :class=\"{ 'rotate-90': isExpanded }\"\r\n @click.stop=\"\r\n () => {\r\n handleToggle();\r\n onToggle(item);\r\n }\r\n \"\r\n />\r\n <div v-else class=\"h-4 w-4\"></div>\r\n <div class=\"flex items-center gap-1\">\r\n <Checkbox\r\n v-if=\"multiple\"\r\n :model-value=\"isSelected && !isNodeDisabled(item)\"\r\n :disabled=\"isNodeDisabled(item)\"\r\n :indeterminate=\"isIndeterminate && !isNodeDisabled(item)\"\r\n @click=\"\r\n (event: MouseEvent) => {\r\n if (isNodeDisabled(item)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n handleSelect();\r\n }\r\n \"\r\n />\r\n <div\r\n class=\"flex items-center gap-1\"\r\n @click=\"\r\n (event: MouseEvent) => {\r\n if (isNodeDisabled(item)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n handleSelect();\r\n }\r\n \"\r\n >\r\n <slot name=\"node\" v-bind=\"item\">\r\n <IconifyIcon\r\n class=\"size-4\"\r\n v-if=\"showIcon && get(item.value, iconField)\"\r\n :icon=\"get(item.value, iconField)\"\r\n />\r\n {{ get(item.value, labelField) }}\r\n </slot>\r\n </div>\r\n </div>\r\n <div class=\"h-4 w-4\"></div>\r\n </TreeItem>\r\n </TransitionGroup>\r\n <div\r\n :class=\"\r\n cn('my-0.5 flex w-full items-center p-1', bordered ? 'border-t' : '')\r\n \"\r\n v-if=\"$slots.footer\"\r\n >\r\n <slot name=\"footer\"> </slot>\r\n </div>\r\n </TreeRoot>\r\n</template>\r\n<style lang=\"scss\" scoped>\r\n.container {\r\n position: relative;\r\n padding: 0;\r\n list-style-type: none;\r\n}\r\n\r\n.item {\r\n box-sizing: border-box;\r\n width: 100%;\r\n height: 30px;\r\n background-color: #f3f3f3;\r\n border: 1px solid #666;\r\n}\r\n\r\n/* 1. 声明过渡效果 */\r\n.fade-move,\r\n.fade-enter-active,\r\n.fade-leave-active {\r\n transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);\r\n}\r\n\r\n/* 2. 声明进入和离开的状态 */\r\n.fade-enter-from,\r\n.fade-leave-to {\r\n opacity: 0;\r\n transform: scaleY(0.01) translate(30px, 0);\r\n}\r\n\r\n/* 3. 确保离开的项目被移除出了布局流\r\n 以便正确地计算移动时的动画效果。 */\r\n.fade-leave-active {\r\n position: absolute;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n AvatarFallbackProps,\r\n AvatarImageProps,\r\n AvatarRootProps,\r\n} from 'reka-ui';\r\n\r\nimport type { CSSProperties } from 'vue';\r\n\r\nimport type { ClassType } from '@admin-kit/typings';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { Avatar, AvatarFallback, AvatarImage } from '../../ui';\r\n\r\ninterface Props extends AvatarFallbackProps, AvatarImageProps, AvatarRootProps {\r\n alt?: string;\r\n class?: ClassType;\r\n dot?: boolean;\r\n dotClass?: ClassType;\r\n fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';\r\n size?: number;\r\n}\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n alt: 'avatar',\r\n as: 'button',\r\n dot: false,\r\n dotClass: 'bg-green-500',\r\n fit: 'cover',\r\n});\r\n\r\nconst imageStyle = computed<CSSProperties>(() => {\r\n const { fit } = props;\r\n if (fit) {\r\n return { objectFit: fit };\r\n }\r\n return {};\r\n});\r\n\r\nconst text = computed(() => {\r\n return props.alt.slice(-2).toUpperCase();\r\n});\r\n\r\nconst rootStyle = computed(() => {\r\n return props.size !== undefined && props.size > 0\r\n ? {\r\n height: `${props.size}px`,\r\n width: `${props.size}px`,\r\n }\r\n : {};\r\n});\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"props.class\"\r\n :style=\"rootStyle\"\r\n class=\"relative flex flex-shrink-0 items-center\"\r\n >\r\n <Avatar :class=\"props.class\" class=\"size-full\">\r\n <AvatarImage :alt=\"alt\" :src=\"src\" :style=\"imageStyle\" />\r\n <AvatarFallback>{{ text }}</AvatarFallback>\r\n </Avatar>\r\n <span\r\n v-if=\"dot\"\r\n :class=\"dotClass\"\r\n class=\"absolute bottom-0 right-0 size-3 rounded-full border-2 border-background\"\r\n >\r\n </span>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\ndefineOptions({ name: 'AdminButtonGroup' });\r\n\r\nwithDefaults(\r\n defineProps<{\r\n border?: boolean;\r\n gap?: number;\r\n size?: 'large' | 'middle' | 'small';\r\n }>(),\r\n { border: false, gap: 0, size: 'middle' },\r\n);\r\n</script>\r\n<template>\r\n <div\r\n :class=\"\r\n cn(\r\n 'admin-button-group rounded-md',\r\n `size-${size}`,\r\n gap ? 'with-gap' : 'no-gap',\r\n $attrs.class as string,\r\n )\r\n \"\r\n :style=\"{ gap: gap ? `${gap}px` : '0px' }\"\r\n >\r\n <slot></slot>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\n.admin-button-group {\r\n display: inline-flex;\r\n\r\n &.size-large :deep(button) {\r\n height: 2.25rem;\r\n padding: 0.5rem 0.75rem;\r\n font-size: 0.875rem;\r\n line-height: 1.25rem;\r\n\r\n .icon-wrapper {\r\n margin-right: 0.4rem;\r\n\r\n svg {\r\n width: 1rem;\r\n height: 1rem;\r\n }\r\n }\r\n }\r\n\r\n &.size-middle :deep(button) {\r\n height: 2rem;\r\n padding: 0.25rem 0.5rem;\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n\r\n .icon-wrapper {\r\n margin-right: 0.2rem;\r\n\r\n svg {\r\n width: 0.75rem;\r\n height: 0.75rem;\r\n }\r\n }\r\n }\r\n\r\n &.size-small :deep(button) {\r\n height: 1.75rem;\r\n padding: 0.2rem 0.4rem;\r\n font-size: 0.65rem;\r\n line-height: 0.75rem;\r\n\r\n .icon-wrapper {\r\n margin-right: 0.1rem;\r\n\r\n svg {\r\n width: 0.65rem;\r\n height: 0.65rem;\r\n }\r\n }\r\n }\r\n\r\n &.no-gap > :deep(button):nth-of-type(1) {\r\n border-radius: calc(var(--radius) - 2px) 0 0 calc(var(--radius) - 2px);\r\n }\r\n\r\n &.no-gap > :deep(button):last-of-type {\r\n border-radius: 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0;\r\n }\r\n\r\n &.no-gap {\r\n :deep(button + button) {\r\n border-left-width: 0;\r\n border-radius: 0;\r\n }\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { AdminButtonProps } from './button';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { LoaderCircle } from '@admin-kit/icons';\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Primitive } from 'reka-ui';\r\n\r\nimport { buttonVariants } from '../../ui';\r\n\r\ninterface Props extends AdminButtonProps {}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n as: 'button',\r\n class: '',\r\n disabled: false,\r\n loading: false,\r\n size: 'default',\r\n variant: 'default',\r\n});\r\n\r\nconst isDisabled = computed(() => {\r\n return props.disabled || props.loading;\r\n});\r\n</script>\r\n\r\n<template>\r\n <Primitive\r\n :as=\"as\"\r\n :as-child=\"asChild\"\r\n :class=\"cn(buttonVariants({ variant, size }), props.class)\"\r\n :disabled=\"isDisabled\"\r\n >\r\n <LoaderCircle\r\n v-if=\"loading\"\r\n class=\"text-md mr-2 size-4 flex-shrink-0 animate-spin\"\r\n />\r\n <slot></slot>\r\n </Primitive>\r\n</template>\r\n","<script lang=\"ts\">\r\nimport type { Component, PropType } from 'vue';\r\n\r\nimport { defineComponent, h } from 'vue';\r\n\r\nimport { isFunction, isObject, isString } from '@admin-kit/shared/utils';\r\n\r\nexport default defineComponent({\r\n name: 'RenderContent',\r\n props: {\r\n content: {\r\n default: undefined as\r\n | PropType<(() => any) | Component | string>\r\n | undefined,\r\n type: [Object, String, Function],\r\n },\r\n renderBr: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n },\r\n setup(props, { attrs, slots }) {\r\n return () => {\r\n if (!props.content) {\r\n return null;\r\n }\r\n const isComponent =\r\n (isObject(props.content) || isFunction(props.content)) &&\r\n props.content !== null;\r\n if (!isComponent) {\r\n if (props.renderBr && isString(props.content)) {\r\n const lines = props.content.split('\\n');\r\n const result = [];\r\n for (const [i, line] of lines.entries()) {\r\n result.push(h('p', { key: i }, line));\r\n // if (i < lines.length - 1) {\r\n // result.push(h('br'));\r\n // }\r\n }\r\n return result;\r\n } else {\r\n return props.content;\r\n }\r\n }\r\n return h(props.content as never, {\r\n ...attrs,\r\n props: {\r\n ...props,\r\n ...attrs,\r\n },\r\n slots,\r\n });\r\n };\r\n },\r\n});\r\n</script>\r\n","<script lang=\"ts\" setup>\r\nimport type { Arrayable } from '@vueuse/core';\r\n\r\nimport type { ValueType, AdminButtonGroupProps } from './button';\r\n\r\nimport { computed, ref, watch } from 'vue';\r\n\r\nimport { Circle, CircleCheckBig, LoaderCircle } from '@admin-kit/icons';\r\nimport { cn, isFunction } from '@admin-kit/shared/utils';\r\n\r\nimport { objectOmit } from '@vueuse/core';\r\n\r\nimport { AdminRenderContent } from '../render-content';\r\nimport AdminButtonGroup from './button-group.vue';\r\nimport Button from './button.vue';\r\n\r\nconst props = withDefaults(defineProps<AdminButtonGroupProps>(), {\r\n gap: 0,\r\n multiple: false,\r\n showIcon: true,\r\n size: 'middle',\r\n allowClear: false,\r\n maxCount: 0,\r\n});\r\nconst emit = defineEmits(['btnClick']);\r\nconst btnDefaultProps = computed(() => {\r\n return {\r\n ...objectOmit(props, ['options', 'btnClass', 'size', 'disabled']),\r\n class: cn(props.btnClass),\r\n };\r\n});\r\nconst modelValue = defineModel<Arrayable<ValueType> | undefined>();\r\n\r\nconst innerValue = ref<Array<ValueType>>([]);\r\nconst loadingValues = ref<Array<ValueType>>([]);\r\nwatch(\r\n () => props.multiple,\r\n (val) => {\r\n if (val) {\r\n modelValue.value = innerValue.value;\r\n } else {\r\n modelValue.value =\r\n innerValue.value.length > 0 ? innerValue.value[0] : undefined;\r\n }\r\n },\r\n);\r\n\r\nwatch(\r\n () => modelValue.value,\r\n (val) => {\r\n if (Array.isArray(val)) {\r\n const arrVal = val.filter((v) => v !== undefined);\r\n if (arrVal.length > 0) {\r\n innerValue.value = props.multiple\r\n ? [...arrVal]\r\n : [arrVal[0] as ValueType];\r\n } else {\r\n innerValue.value = [];\r\n }\r\n } else {\r\n innerValue.value = val === undefined ? [] : [val as ValueType];\r\n }\r\n },\r\n { deep: true, immediate: true },\r\n);\r\n\r\nasync function onBtnClick(value: ValueType) {\r\n if (props.beforeChange && isFunction(props.beforeChange)) {\r\n try {\r\n loadingValues.value.push(value);\r\n const canChange = await props.beforeChange(\r\n value,\r\n !innerValue.value.includes(value),\r\n );\r\n if (canChange === false) {\r\n return;\r\n }\r\n } finally {\r\n loadingValues.value.splice(loadingValues.value.indexOf(value), 1);\r\n }\r\n }\r\n\r\n if (props.multiple) {\r\n if (innerValue.value.includes(value)) {\r\n innerValue.value = innerValue.value.filter((item) => item !== value);\r\n } else {\r\n if (props.maxCount > 0 && innerValue.value.length >= props.maxCount) {\r\n innerValue.value = innerValue.value.slice(0, props.maxCount - 1);\r\n }\r\n innerValue.value.push(value);\r\n }\r\n modelValue.value = innerValue.value;\r\n } else {\r\n if (props.allowClear && innerValue.value.includes(value)) {\r\n innerValue.value = [];\r\n modelValue.value = undefined;\r\n emit('btnClick', undefined);\r\n return;\r\n } else {\r\n innerValue.value = [value];\r\n modelValue.value = value;\r\n }\r\n }\r\n emit('btnClick', value);\r\n}\r\n</script>\r\n<template>\r\n <AdminButtonGroup\r\n :size=\"props.size\"\r\n :gap=\"props.gap\"\r\n class=\"admin-check-button-group\"\r\n >\r\n <Button\r\n v-for=\"(btn, index) in props.options\"\r\n :key=\"index\"\r\n :class=\"cn('border', props.btnClass)\"\r\n :disabled=\"\r\n props.disabled ||\r\n loadingValues.includes(btn.value) ||\r\n (!props.multiple && loadingValues.length > 0)\r\n \"\r\n v-bind=\"btnDefaultProps\"\r\n :variant=\"innerValue.includes(btn.value) ? 'default' : 'outline'\"\r\n @click=\"onBtnClick(btn.value)\"\r\n type=\"button\"\r\n >\r\n <div class=\"icon-wrapper\" v-if=\"props.showIcon\">\r\n <slot\r\n name=\"icon\"\r\n :loading=\"loadingValues.includes(btn.value)\"\r\n :checked=\"innerValue.includes(btn.value)\"\r\n >\r\n <LoaderCircle\r\n class=\"animate-spin\"\r\n v-if=\"loadingValues.includes(btn.value)\"\r\n />\r\n <CircleCheckBig v-else-if=\"innerValue.includes(btn.value)\" />\r\n <Circle v-else />\r\n </slot>\r\n </div>\r\n <slot name=\"option\" :label=\"btn.label\" :value=\"btn.value\" :data=\"btn\">\r\n <AdminRenderContent :content=\"btn.label\" />\r\n </slot>\r\n </Button>\r\n </AdminButtonGroup>\r\n</template>\r\n<style lang=\"scss\" scoped>\r\n.admin-check-button-group {\r\n display: flex;\r\n flex-wrap: wrap;\r\n\r\n &:deep(.size-large) button {\r\n .icon-wrapper {\r\n margin-right: 0.3rem;\r\n\r\n svg {\r\n width: 1rem;\r\n height: 1rem;\r\n }\r\n }\r\n }\r\n\r\n &:deep(.size-middle) button {\r\n .icon-wrapper {\r\n margin-right: 0.2rem;\r\n\r\n svg {\r\n width: 0.75rem;\r\n height: 0.75rem;\r\n }\r\n }\r\n }\r\n\r\n &:deep(.size-small) button {\r\n .icon-wrapper {\r\n margin-right: 0.1rem;\r\n\r\n svg {\r\n width: 0.65rem;\r\n height: 0.65rem;\r\n }\r\n }\r\n }\r\n\r\n &.no-gap > :deep(button):nth-of-type(1) {\r\n border-right-width: 0;\r\n }\r\n\r\n &.no-gap {\r\n :deep(button + button) {\r\n margin-right: -1px;\r\n border-left-width: 1px;\r\n }\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { TooltipContentProps } from 'reka-ui';\r\n\r\nimport type { StyleValue } from 'vue';\r\n\r\nimport type { ClassType } from '@admin-kit/typings';\r\n\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipProvider,\r\n TooltipTrigger,\r\n} from '../../ui';\r\n\r\ninterface Props {\r\n contentClass?: ClassType;\r\n contentStyle?: StyleValue;\r\n delayDuration?: number;\r\n side?: TooltipContentProps['side'];\r\n}\r\n\r\nwithDefaults(defineProps<Props>(), {\r\n delayDuration: 0,\r\n side: 'right',\r\n});\r\n</script>\r\n\r\n<template>\r\n <TooltipProvider :delay-duration=\"delayDuration\">\r\n <Tooltip>\r\n <TooltipTrigger as-child tabindex=\"-1\">\r\n <slot name=\"trigger\"></slot>\r\n </TooltipTrigger>\r\n <TooltipContent\r\n :class=\"contentClass\"\r\n :side=\"side\"\r\n :style=\"contentStyle\"\r\n class=\"side-content rounded-md bg-accent text-popover-foreground\"\r\n >\r\n <slot></slot>\r\n </TooltipContent>\r\n </Tooltip>\r\n </TooltipProvider>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { CircleHelp } from 'lucide-vue-next';\r\n\r\nimport Tooltip from './tooltip.vue';\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\ndefineProps<{ triggerClass?: string }>();\r\n</script>\r\n\r\n<template>\r\n <Tooltip :delay-duration=\"300\" side=\"right\">\r\n <template #trigger>\r\n <slot name=\"trigger\">\r\n <CircleHelp\r\n :class=\"\r\n cn(\r\n 'inline-flex size-5 cursor-pointer text-foreground/80 hover:text-foreground',\r\n triggerClass,\r\n )\r\n \"\r\n />\r\n </slot>\r\n </template>\r\n <slot></slot>\r\n </Tooltip>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ButtonVariants } from '../../ui';\r\nimport type { AdminButtonProps } from './button';\r\n\r\nimport { computed, useSlots } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { AdminTooltip } from '../tooltip';\r\nimport AdminButton from './button.vue';\r\n\r\ninterface Props extends AdminButtonProps {\r\n class?: any;\r\n disabled?: boolean;\r\n onClick?: () => void;\r\n tooltip?: string;\r\n tooltipDelayDuration?: number;\r\n tooltipSide?: 'bottom' | 'left' | 'right' | 'top';\r\n variant?: ButtonVariants;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n disabled: false,\r\n onClick: () => {},\r\n tooltipDelayDuration: 200,\r\n tooltipSide: 'bottom',\r\n variant: 'icon',\r\n});\r\n\r\nconst slots = useSlots();\r\n\r\nconst showTooltip = computed(() => !!slots.tooltip || !!props.tooltip);\r\n</script>\r\n\r\n<template>\r\n <AdminButton\r\n v-if=\"!showTooltip\"\r\n :class=\"cn('rounded-full', props.class)\"\r\n :disabled=\"disabled\"\r\n :variant=\"variant\"\r\n size=\"icon\"\r\n @click=\"onClick\"\r\n >\r\n <slot></slot>\r\n </AdminButton>\r\n\r\n <AdminTooltip\r\n v-else\r\n :delay-duration=\"tooltipDelayDuration\"\r\n :side=\"tooltipSide\"\r\n >\r\n <template #trigger>\r\n <AdminButton\r\n :class=\"cn('rounded-full', props.class)\"\r\n :disabled=\"disabled\"\r\n :variant=\"variant\"\r\n size=\"icon\"\r\n @click=\"onClick\"\r\n >\r\n <slot></slot>\r\n </AdminButton>\r\n </template>\r\n <slot v-if=\"slots.tooltip\" name=\"tooltip\"> </slot>\r\n <template v-else>\r\n {{ tooltip }}\r\n </template>\r\n </AdminTooltip>\r\n</template>\r\n","import type { BacktopProps } from './backtop';\r\n\r\nimport { onMounted, ref, shallowRef } from 'vue';\r\n\r\nimport { useEventListener, useThrottleFn } from '@vueuse/core';\r\n\r\nexport const useBackTop = (props: BacktopProps) => {\r\n const el = shallowRef<HTMLElement>();\r\n const container = shallowRef<Document | HTMLElement>();\r\n const visible = ref(false);\r\n\r\n const handleScroll = () => {\r\n if (el.value) {\r\n visible.value = el.value.scrollTop >= (props?.visibilityHeight ?? 0);\r\n }\r\n };\r\n\r\n const handleClick = () => {\r\n el.value?.scrollTo({ behavior: 'smooth', top: 0 });\r\n };\r\n\r\n const handleScrollThrottled = useThrottleFn(handleScroll, 300, true);\r\n\r\n useEventListener(container, 'scroll', handleScrollThrottled);\r\n onMounted(() => {\r\n container.value = document;\r\n el.value = document.documentElement;\r\n\r\n if (props.target) {\r\n el.value = document.querySelector<HTMLElement>(props.target) ?? undefined;\r\n\r\n if (!el.value) {\r\n throw new Error(`target does not exist: ${props.target}`);\r\n }\r\n container.value = el.value;\r\n }\r\n // Give visible an initial value, fix #13066\r\n handleScroll();\r\n });\r\n\r\n return {\r\n handleClick,\r\n visible,\r\n };\r\n};\r\n","<script lang=\"ts\" setup>\r\nimport type { BacktopProps } from './backtop';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { ArrowUpToLine } from '@admin-kit/icons';\r\n\r\nimport { AdminButton } from '../button';\r\nimport { useBackTop } from './use-backtop';\r\n\r\ninterface Props extends BacktopProps {}\r\n\r\ndefineOptions({ name: 'BackTop' });\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n bottom: 20,\r\n isGroup: false,\r\n right: 24,\r\n target: '',\r\n visibilityHeight: 200,\r\n});\r\n\r\nconst backTopStyle = computed(() => ({\r\n bottom: `${props.bottom}px`,\r\n right: `${props.right}px`,\r\n}));\r\n\r\nconst { handleClick, visible } = useBackTop(props);\r\n</script>\r\n<template>\r\n <transition name=\"fade-down\">\r\n <AdminButton\r\n v-if=\"visible\"\r\n :style=\"backTopStyle\"\r\n class=\"data z-popup fixed bottom-10 size-10 rounded-full bg-background shadow-float duration-500 hover:bg-heavy dark:bg-accent dark:hover:bg-heavy\"\r\n size=\"icon\"\r\n variant=\"icon\"\r\n @click=\"handleClick\"\r\n >\r\n <ArrowUpToLine class=\"size-4\" />\r\n </AdminButton>\r\n </transition>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { BreadcrumbProps } from './types';\r\n\r\n\r\ninterface Props extends BreadcrumbProps {}\r\n\r\ndefineOptions({ name: 'Breadcrumb' });\r\nconst { breadcrumbs, showIcon } = defineProps<Props>();\r\n\r\nconst emit = defineEmits<{ select: [string] }>();\r\n\r\nfunction handleClick(index: number, path?: string) {\r\n if (!path || index === breadcrumbs.length - 1) {\r\n return;\r\n }\r\n emit('select', path);\r\n}\r\n</script>\r\n<template>\r\n <ul class=\"flex\">\r\n <TransitionGroup name=\"breadcrumb-transition\">\r\n <template\r\n v-for=\"(item, index) in breadcrumbs\"\r\n :key=\"`${item.path}-${item.title}-${index}`\"\r\n >\r\n <li>\r\n <a\r\n href=\"javascript:void 0\"\r\n @click.stop=\"handleClick(index, item.path)\"\r\n >\r\n <span class=\"flex-center z-10 h-full\">\r\n <AdminIcon\r\n v-if=\"showIcon\"\r\n :icon=\"item.icon\"\r\n class=\"mr-1 size-4 flex-shrink-0\"\r\n />\r\n <span\r\n :class=\"{\r\n 'font-normal text-foreground':\r\n index === breadcrumbs.length - 1,\r\n }\"\r\n >{{ item.title }}\r\n </span>\r\n </span>\r\n </a>\r\n </li>\r\n </template>\r\n </TransitionGroup>\r\n </ul>\r\n</template>\r\n<style scoped>\r\nli {\r\n @apply h-7;\r\n}\r\n\r\nli a {\r\n @apply relative mr-9 flex h-7 items-center bg-accent py-0 pl-[5px] pr-2 text-[13px] text-muted-foreground;\r\n}\r\n\r\nli a > span {\r\n @apply -ml-3;\r\n}\r\n\r\nli:first-child a > span {\r\n @apply -ml-1;\r\n}\r\n\r\nli:first-child a {\r\n @apply rounded-[4px_0_0_4px] pl-[15px];\r\n}\r\n\r\nli:first-child a::before {\r\n @apply border-none;\r\n}\r\n\r\nli:last-child a {\r\n @apply rounded-[0_4px_4px_0] pr-[15px];\r\n}\r\n\r\nli:last-child a::after {\r\n @apply border-none;\r\n}\r\n\r\nli a::before,\r\nli a::after {\r\n @apply absolute top-0 h-0 w-0 border-[.875rem] border-solid border-accent content-[''];\r\n}\r\n\r\nli a::before {\r\n @apply -left-7 z-10 border-l-transparent;\r\n}\r\n\r\nli a::after {\r\n @apply left-full border-transparent border-l-accent;\r\n}\r\n\r\nli:not(:last-child) a:hover {\r\n @apply bg-accent-hover;\r\n}\r\n\r\nli:not(:last-child) a:hover::before {\r\n @apply border-accent-hover border-l-transparent;\r\n}\r\n\r\nli:not(:last-child) a:hover::after {\r\n @apply border-l-accent-hover;\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport type { BreadcrumbProps } from './types';\r\n\r\nimport { ChevronDown } from '@admin-kit/icons';\r\n\r\nimport {\r\n Breadcrumb,\r\n BreadcrumbItem,\r\n BreadcrumbLink,\r\n BreadcrumbList,\r\n BreadcrumbPage,\r\n BreadcrumbSeparator,\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../../ui';\r\n\r\ninterface Props extends BreadcrumbProps {}\r\n\r\ndefineOptions({ name: 'Breadcrumb' });\r\nwithDefaults(defineProps<Props>(), {\r\n showIcon: false,\r\n});\r\n\r\nconst emit = defineEmits<{ select: [string] }>();\r\n\r\nfunction handleClick(path?: string) {\r\n if (!path) {\r\n return;\r\n }\r\n emit('select', path);\r\n}\r\n</script>\r\n<template>\r\n <Breadcrumb>\r\n <BreadcrumbList>\r\n <TransitionGroup name=\"breadcrumb-transition\">\r\n <template\r\n v-for=\"(item, index) in breadcrumbs\"\r\n :key=\"`${item.path}-${item.title}-${index}`\"\r\n >\r\n <BreadcrumbItem>\r\n <div v-if=\"item.items?.length ?? 0 > 0\">\r\n <DropdownMenu>\r\n <DropdownMenuTrigger class=\"flex items-center gap-1\">\r\n <AdminIcon v-if=\"showIcon\" :icon=\"item.icon\" class=\"size-5\" />\r\n {{ item.title }}\r\n <ChevronDown class=\"size-4\" />\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"start\">\r\n <template\r\n v-for=\"menuItem in item.items\"\r\n :key=\"`sub-${menuItem.path}`\"\r\n >\r\n <DropdownMenuItem @click.stop=\"handleClick(menuItem.path)\">\r\n {{ menuItem.title }}\r\n </DropdownMenuItem>\r\n </template>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n <BreadcrumbLink\r\n v-else-if=\"index !== breadcrumbs.length - 1\"\r\n href=\"javascript:void 0\"\r\n @click.stop=\"handleClick(item.path)\"\r\n >\r\n <div class=\"flex-center\">\r\n <AdminIcon\r\n v-if=\"showIcon\"\r\n :class=\"{ 'size-5': item.isHome }\"\r\n :icon=\"item.icon\"\r\n class=\"mr-1 size-4\"\r\n />\r\n {{ item.title }}\r\n </div>\r\n </BreadcrumbLink>\r\n <BreadcrumbPage v-else>\r\n <div class=\"flex-center\">\r\n <AdminIcon\r\n v-if=\"showIcon\"\r\n :class=\"{ 'size-5': item.isHome }\"\r\n :icon=\"item.icon\"\r\n class=\"mr-1 size-4\"\r\n />\r\n {{ item.title }}\r\n </div>\r\n </BreadcrumbPage>\r\n <BreadcrumbSeparator\r\n v-if=\"index < breadcrumbs.length - 1 && !item.isHome\"\r\n />\r\n </BreadcrumbItem>\r\n </template>\r\n </TransitionGroup>\r\n </BreadcrumbList>\r\n </Breadcrumb>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { BreadcrumbProps } from './types';\r\n\r\nimport { useForwardPropsEmits } from 'reka-ui';\r\n\r\nimport BreadcrumbBackground from './breadcrumb-background.vue';\r\nimport Breadcrumb from './breadcrumb.vue';\r\n\r\ninterface Props extends BreadcrumbProps {\r\n class?: any;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {});\r\n\r\nconst emit = defineEmits<{ select: [string] }>();\r\n\r\nconst forward = useForwardPropsEmits(props, emit);\r\n</script>\r\n<template>\r\n <Breadcrumb\r\n v-if=\"styleType === 'normal'\"\r\n v-bind=\"forward\"\r\n class=\"admin-breadcrumb\"\r\n />\r\n <BreadcrumbBackground\r\n v-if=\"styleType === 'background'\"\r\n v-bind=\"forward\"\r\n class=\"admin-breadcrumb\"\r\n />\r\n</template>\r\n<style lang=\"scss\" scoped>\r\n/** 修复全局引入Antd时,ol和ul的默认样式会被修改的问题 */\r\n.admin-breadcrumb {\r\n :deep(ol),\r\n :deep(ul) {\r\n margin-bottom: 0;\r\n }\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { CheckboxRootEmits, CheckboxRootProps } from 'reka-ui';\r\n\r\nimport { useId } from 'vue';\r\n\r\nimport { useForwardPropsEmits } from 'reka-ui';\r\n\r\nimport { Checkbox } from '../../ui/checkbox';\r\n\r\nconst props = defineProps<CheckboxRootProps & { indeterminate?: boolean }>();\r\n\r\nconst emits = defineEmits<CheckboxRootEmits>();\r\n\r\nconst checked = defineModel<boolean>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n\r\nconst id = useId();\r\n</script>\r\n\r\n<template>\r\n <div class=\"flex items-center\">\r\n <Checkbox v-bind=\"forwarded\" :id=\"id\" v-model=\"checked\" />\r\n <label :for=\"id\" class=\"ml-2 cursor-pointer text-sm\"> <slot></slot> </label>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ContextMenuRootEmits, ContextMenuRootProps } from 'reka-ui';\r\n\r\nimport { ContextMenuRoot, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = withDefaults(defineProps<ContextMenuRootProps>(), {\r\n modal: false,\r\n});\r\nconst emits = defineEmits<ContextMenuRootEmits>();\r\n\r\nconst forwarded = useForwardPropsEmits(props, emits);\r\n</script>\r\n\r\n<template>\r\n <ContextMenuRoot v-bind=\"forwarded\">\r\n <slot></slot>\r\n </ContextMenuRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ContextMenuContentEmits, ContextMenuContentProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport {\r\n ContextMenuContent,\r\n ContextMenuPortal,\r\n useForwardPropsEmits,\r\n} from 'reka-ui';\r\n\r\nconst props = defineProps<ContextMenuContentProps & { class?: any }>();\r\nconst emits = defineEmits<ContextMenuContentEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <ContextMenuPortal>\r\n <ContextMenuContent\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'z-popup min-w-32 overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </ContextMenuContent>\r\n </ContextMenuPortal>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ContextMenuItemEmits, ContextMenuItemProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ContextMenuItem, useForwardPropsEmits } from 'reka-ui';\r\n\r\nconst props = defineProps<\r\n ContextMenuItemProps & { class?: any; inset?: boolean }\r\n>();\r\nconst emits = defineEmits<ContextMenuItemEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <ContextMenuItem\r\n v-bind=\"forwarded\"\r\n :class=\"\r\n cn(\r\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n inset && 'pl-8',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <slot></slot>\r\n </ContextMenuItem>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ContextMenuSeparatorProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ContextMenuSeparator } from 'reka-ui';\r\n\r\nconst props = defineProps<ContextMenuSeparatorProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n</script>\r\n\r\n<template>\r\n <ContextMenuSeparator\r\n v-bind=\"delegatedProps\"\r\n :class=\"cn('-mx-1 my-1 h-px bg-border', props.class)\"\r\n />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: any;\r\n}>();\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"\r\n cn('ml-auto text-xs tracking-widest text-muted-foreground', props.class)\r\n \"\r\n >\r\n <slot></slot>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ContextMenuTriggerProps } from 'reka-ui';\r\n\r\nimport { ContextMenuTrigger, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<ContextMenuTriggerProps>();\r\n\r\nconst forwardedProps = useForwardProps(props);\r\n</script>\r\n\r\n<template>\r\n <ContextMenuTrigger v-bind=\"forwardedProps\">\r\n <slot></slot>\r\n </ContextMenuTrigger>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n ContextMenuContentProps,\r\n ContextMenuRootEmits,\r\n ContextMenuRootProps,\r\n} from 'reka-ui';\r\n\r\nimport type { ClassType } from '@admin-kit/typings';\r\n\r\nimport type { IContextMenuItem } from './interface';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { useForwardPropsEmits } from 'reka-ui';\r\n\r\nimport {\r\n ContextMenu,\r\n ContextMenuContent,\r\n ContextMenuItem,\r\n ContextMenuSeparator,\r\n ContextMenuShortcut,\r\n ContextMenuTrigger,\r\n} from '../../ui/context-menu';\r\n\r\nconst props = defineProps<\r\n ContextMenuRootProps & {\r\n class?: ClassType;\r\n contentClass?: ClassType;\r\n contentProps?: ContextMenuContentProps;\r\n handlerData?: Record<string, any>;\r\n itemClass?: ClassType;\r\n menus: (data: any) => IContextMenuItem[];\r\n }\r\n>();\r\n\r\nconst emits = defineEmits<ContextMenuRootEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const {\r\n class: _cls,\r\n contentClass: _,\r\n contentProps: _cProps,\r\n itemClass: _iCls,\r\n ...delegated\r\n } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n\r\nconst menusView = computed(() => {\r\n return props.menus?.(props.handlerData);\r\n});\r\n\r\nfunction handleClick(menu: IContextMenuItem) {\r\n if (menu.disabled) {\r\n return;\r\n }\r\n menu?.handler?.(props.handlerData);\r\n}\r\n</script>\r\n\r\n<template>\r\n <ContextMenu v-bind=\"forwarded\">\r\n <ContextMenuTrigger as-child>\r\n <slot></slot>\r\n </ContextMenuTrigger>\r\n <ContextMenuContent\r\n :class=\"contentClass\"\r\n v-bind=\"contentProps\"\r\n class=\"side-content z-popup\"\r\n >\r\n <template v-for=\"menu in menusView\" :key=\"menu.key\">\r\n <ContextMenuItem\r\n v-if=\"!menu.hidden\"\r\n :class=\"itemClass\"\r\n :disabled=\"menu.disabled\"\r\n :inset=\"menu.inset || !menu.icon\"\r\n class=\"cursor-pointer\"\r\n @click=\"handleClick(menu)\"\r\n >\r\n <component\r\n :is=\"menu.icon\"\r\n v-if=\"menu.icon\"\r\n class=\"mr-2 size-4 text-lg\"\r\n />\r\n\r\n {{ menu.text }}\r\n <ContextMenuShortcut v-if=\"menu.shortcut\">\r\n {{ menu.shortcut }}\r\n </ContextMenuShortcut>\r\n </ContextMenuItem>\r\n <ContextMenuSeparator v-if=\"menu.separator\" />\r\n </template>\r\n </ContextMenuContent>\r\n </ContextMenu>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed, onMounted, ref, unref, watch, watchEffect } from 'vue';\r\n\r\nimport { isNumber } from '@admin-kit/shared/utils';\r\n\r\nimport { TransitionPresets, useTransition } from '@vueuse/core';\r\n\r\ninterface Props {\r\n autoplay?: boolean;\r\n color?: string;\r\n decimal?: string;\r\n decimals?: number;\r\n duration?: number;\r\n endVal?: number;\r\n prefix?: string;\r\n separator?: string;\r\n startVal?: number;\r\n suffix?: string;\r\n transition?: keyof typeof TransitionPresets;\r\n useEasing?: boolean;\r\n}\r\n\r\ndefineOptions({ name: 'CountToAnimator' });\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n autoplay: true,\r\n color: '',\r\n decimal: '.',\r\n decimals: 0,\r\n duration: 1500,\r\n endVal: 2021,\r\n prefix: '',\r\n separator: ',',\r\n startVal: 0,\r\n suffix: '',\r\n transition: 'linear',\r\n useEasing: true,\r\n});\r\n\r\nconst emit = defineEmits<{\r\n finished: [];\r\n /**\r\n * @deprecated 请使用{@link finished}事件\r\n */\r\n onFinished: [];\r\n /**\r\n * @deprecated 请使用{@link started}事件\r\n */\r\n onStarted: [];\r\n started: [];\r\n}>();\r\n\r\nconst source = ref(props.startVal);\r\nconst disabled = ref(false);\r\nlet outputValue = useTransition(source);\r\n\r\nconst value = computed(() => formatNumber(unref(outputValue)));\r\n\r\nwatchEffect(() => {\r\n source.value = props.startVal;\r\n});\r\n\r\nwatch([() => props.startVal, () => props.endVal], () => {\r\n if (props.autoplay) {\r\n start();\r\n }\r\n});\r\n\r\nonMounted(() => {\r\n props.autoplay && start();\r\n});\r\n\r\nfunction start() {\r\n run();\r\n source.value = props.endVal;\r\n}\r\n\r\nfunction reset() {\r\n source.value = props.startVal;\r\n run();\r\n}\r\n\r\nfunction run() {\r\n outputValue = useTransition(source, {\r\n disabled,\r\n duration: props.duration,\r\n onFinished: () => {\r\n emit('finished');\r\n emit('onFinished');\r\n },\r\n onStarted: () => {\r\n emit('started');\r\n emit('onStarted');\r\n },\r\n ...(props.useEasing\r\n ? { transition: TransitionPresets[props.transition] }\r\n : {}),\r\n });\r\n}\r\n\r\nfunction formatNumber(num: number | string) {\r\n if (!num && num !== 0) {\r\n return '';\r\n }\r\n const { decimal, decimals, prefix, separator, suffix } = props;\r\n num = Number(num).toFixed(decimals);\r\n num += '';\r\n\r\n const x = num.split('.');\r\n let x1 = x[0];\r\n const x2 = x.length > 1 ? decimal + x[1] : '';\r\n\r\n const rgx = /(\\d+)(\\d{3})/;\r\n if (separator && !isNumber(separator) && x1) {\r\n while (rgx.test(x1)) {\r\n x1 = x1.replace(rgx, `$1${separator}$2`);\r\n }\r\n }\r\n return prefix + x1 + x2 + suffix;\r\n}\r\n\r\ndefineExpose({ reset });\r\n</script>\r\n<template>\r\n <span :style=\"{ color }\">\r\n {{ value }}\r\n </span>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type {\r\n DropdownMenuProps,\r\n AdminDropdownMenuItem as IDropdownMenuItem,\r\n} from './interface';\r\n\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuGroup,\r\n DropdownMenuItem,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '../../ui';\r\n\r\ninterface Props extends DropdownMenuProps {}\r\n\r\ndefineOptions({ name: 'DropdownMenu' });\r\nconst props = withDefaults(defineProps<Props>(), {});\r\n\r\nfunction handleItemClick(menu: IDropdownMenuItem) {\r\n if (menu.disabled) {\r\n return;\r\n }\r\n menu?.handler?.(props);\r\n}\r\n</script>\r\n<template>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger class=\"flex h-full items-center gap-1\">\r\n <slot></slot>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"start\">\r\n <DropdownMenuGroup>\r\n <template v-for=\"menu in menus\" :key=\"menu.value\">\r\n <DropdownMenuItem\r\n :disabled=\"menu.disabled\"\r\n class=\"mb-1 cursor-pointer text-foreground/80 data-[state=checked]:bg-accent data-[state=checked]:text-accent-foreground\"\r\n @click=\"handleItemClick(menu)\"\r\n >\r\n <component :is=\"menu.icon\" v-if=\"menu.icon\" class=\"mr-2 size-4\" />\r\n {{ menu.label }}\r\n </DropdownMenuItem>\r\n <DropdownMenuSeparator v-if=\"menu.separator\" class=\"bg-border\" />\r\n </template>\r\n </DropdownMenuGroup>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { DropdownMenuProps } from './interface';\r\n\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuGroup,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../../ui';\r\n\r\ninterface Props extends DropdownMenuProps {}\r\n\r\ndefineOptions({ name: 'DropdownRadioMenu' });\r\nwithDefaults(defineProps<Props>(), {});\r\n\r\nconst modelValue = defineModel<string>();\r\n\r\nfunction handleItemClick(value: string) {\r\n modelValue.value = value;\r\n}\r\n</script>\r\n<template>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger as-child class=\"flex items-center gap-1\">\r\n <slot></slot>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"start\">\r\n <DropdownMenuGroup>\r\n <template v-for=\"menu in menus\" :key=\"menu.value\">\r\n <DropdownMenuItem\r\n :class=\"\r\n menu.value === modelValue\r\n ? 'bg-accent text-accent-foreground'\r\n : ''\r\n \"\r\n class=\"mb-1 cursor-pointer text-foreground/80 data-[state=checked]:bg-accent data-[state=checked]:text-accent-foreground\"\r\n @click=\"handleItemClick(menu.value)\"\r\n >\r\n <component :is=\"menu.icon\" v-if=\"menu.icon\" class=\"mr-2 size-4\" />\r\n <span\r\n v-if=\"!menu.icon\"\r\n :class=\"menu.value === modelValue ? 'bg-foreground' : ''\"\r\n class=\"mr-2 size-1.5 rounded-full\"\r\n ></span>\r\n {{ menu.label }}\r\n </DropdownMenuItem>\r\n </template>\r\n </DropdownMenuGroup>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ChevronDown } from '@admin-kit/icons';\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n class?: string;\r\n}>();\r\n\r\n// 控制箭头展开/收起状态\r\nconst collapsed = defineModel({ default: false });\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"cn('admin-link inline-flex items-center', props.class)\"\r\n @click=\"collapsed = !collapsed\"\r\n >\r\n <slot :is-expanded=\"collapsed\">\r\n {{ collapsed }}\r\n <!-- <span>{{ isExpanded ? '收起' : '展开' }}</span> -->\r\n </slot>\r\n <div\r\n :class=\"{ 'rotate-180': !collapsed }\"\r\n class=\"transition-transform duration-300\"\r\n >\r\n <slot name=\"icon\">\r\n <ChevronDown class=\"size-4\" />\r\n </slot>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Maximize, Minimize } from '@admin-kit/icons';\r\n\r\nimport { useFullscreen } from '@vueuse/core';\r\n\r\nimport { AdminIconButton } from '../button';\r\n\r\ndefineOptions({ name: 'FullScreen' });\r\n\r\nconst { isFullscreen, toggle } = useFullscreen();\r\n\r\n// 重新检查全屏状态\r\nisFullscreen.value = !!(\r\n document.fullscreenElement ||\r\n // @ts-ignore\r\n document.webkitFullscreenElement ||\r\n // @ts-ignore\r\n document.mozFullScreenElement ||\r\n // @ts-ignore\r\n document.msFullscreenElement\r\n);\r\n</script>\r\n<template>\r\n <AdminIconButton\r\n class=\"hover:animate-[shrink_0.3s_ease-in-out]\"\r\n @click=\"toggle\"\r\n >\r\n <Minimize v-if=\"isFullscreen\" class=\"size-4 text-foreground\" />\r\n <Maximize v-else class=\"size-4 text-foreground\" />\r\n </AdminIconButton>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n HoverCardContentProps,\r\n HoverCardRootEmits,\r\n HoverCardRootProps,\r\n} from 'reka-ui';\r\n\r\nimport type { ClassType } from '@admin-kit/typings';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { useForwardPropsEmits } from 'reka-ui';\r\n\r\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from '../../ui';\r\n\r\ninterface Props extends HoverCardRootProps {\r\n class?: ClassType;\r\n contentClass?: ClassType;\r\n contentProps?: HoverCardContentProps;\r\n}\r\n\r\nconst props = defineProps<Props>();\r\n\r\nconst emits = defineEmits<HoverCardRootEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const {\r\n class: _cls,\r\n contentClass: _,\r\n contentProps: _cProps,\r\n ...delegated\r\n } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <HoverCard v-bind=\"forwarded\">\r\n <HoverCardTrigger as-child class=\"h-full\">\r\n <div class=\"h-full cursor-pointer\">\r\n <slot name=\"trigger\"></slot>\r\n </div>\r\n </HoverCardTrigger>\r\n <HoverCardContent\r\n :class=\"contentClass\"\r\n v-bind=\"contentProps\"\r\n class=\"side-content z-popup\"\r\n >\r\n <slot></slot>\r\n </HoverCardContent>\r\n </HoverCard>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { Component } from 'vue';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { IconDefault, IconifyIcon } from '@admin-kit/icons';\r\nimport {\r\n isFunction,\r\n isHttpUrl,\r\n isObject,\r\n isString,\r\n} from '@admin-kit/shared/utils';\r\n\r\nconst props = defineProps<{\r\n // 没有是否显示默认图标\r\n fallback?: boolean;\r\n icon?: Component | Function | string;\r\n}>();\r\n\r\nconst isRemoteIcon = computed(() => {\r\n return isString(props.icon) && isHttpUrl(props.icon);\r\n});\r\n\r\nconst isComponent = computed(() => {\r\n const { icon } = props;\r\n return !isString(icon) && (isObject(icon) || isFunction(icon));\r\n});\r\n</script>\r\n\r\n<template>\r\n <component :is=\"icon as Component\" v-if=\"isComponent\" v-bind=\"$attrs\" />\r\n <img v-else-if=\"isRemoteIcon\" :src=\"icon as string\" v-bind=\"$attrs\" />\r\n <IconifyIcon v-else-if=\"icon\" v-bind=\"$attrs\" :icon=\"icon as string\" />\r\n <IconDefault v-else-if=\"fallback\" v-bind=\"$attrs\" />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\n\r\nconst props = withDefaults(defineProps<{ password?: string }>(), {\r\n password: '',\r\n});\r\n\r\nconst strengthList: string[] = [\r\n '',\r\n '#e74242',\r\n '#ED6F6F',\r\n '#EFBD47',\r\n '#55D18780',\r\n '#55D187',\r\n];\r\n\r\nconst currentStrength = computed(() => {\r\n return checkPasswordStrength(props.password);\r\n});\r\n\r\nconst currentColor = computed(() => {\r\n return strengthList[currentStrength.value];\r\n});\r\n\r\n/**\r\n * Check the strength of a password\r\n */\r\nfunction checkPasswordStrength(password: string) {\r\n let strength = 0;\r\n\r\n // Check length\r\n if (password.length >= 8) strength++;\r\n\r\n // Check for lowercase letters\r\n if (/[a-z]/.test(password)) strength++;\r\n\r\n // Check for uppercase letters\r\n if (/[A-Z]/.test(password)) strength++;\r\n\r\n // Check for numbers\r\n if (/\\d/.test(password)) strength++;\r\n\r\n // Check for special characters\r\n if (/[^\\da-z]/i.test(password)) strength++;\r\n\r\n return strength;\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative mt-2 flex items-center justify-between\">\r\n <template v-for=\"index in 5\" :key=\"index\">\r\n <div\r\n class=\"relative mr-1 h-1.5 w-1/5 rounded-sm bg-heavy last:mr-0 dark:bg-input-background\"\r\n >\r\n <span\r\n :style=\"{\r\n backgroundColor: currentColor,\r\n width: currentStrength >= index ? '100%' : '',\r\n }\"\r\n class=\"absolute left-0 h-full w-0 rounded-sm transition-all duration-500\"\r\n ></span>\r\n </div>\r\n </template>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { ref, useSlots } from 'vue';\r\n\r\nimport { Eye, EyeOff } from '@admin-kit/icons';\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { Input } from '../../ui';\r\nimport PasswordStrength from './password-strength.vue';\r\n\r\ninterface Props {\r\n class?: any;\r\n /**\r\n * 是否显示密码强度\r\n */\r\n passwordStrength?: boolean;\r\n}\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\nconst props = defineProps<Props>();\r\n\r\nconst modelValue = defineModel<string>();\r\n\r\nconst slots = useSlots();\r\n\r\nconst show = ref(false);\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative w-full\">\r\n <Input\r\n v-bind=\"$attrs\"\r\n v-model=\"modelValue\"\r\n :class=\"cn(props.class)\"\r\n :type=\"show ? 'text' : 'password'\"\r\n />\r\n <template v-if=\"passwordStrength\">\r\n <PasswordStrength :password=\"modelValue\" />\r\n <p v-if=\"slots.strengthText\" class=\"mt-1.5 text-xs text-muted-foreground\">\r\n <slot name=\"strengthText\"> </slot>\r\n </p>\r\n </template>\r\n <div\r\n :class=\"{\r\n 'top-3': !!passwordStrength,\r\n 'top-1/2 -translate-y-1/2 items-center': !passwordStrength,\r\n }\"\r\n class=\"absolute inset-y-0 right-0 flex cursor-pointer pr-3 text-lg leading-5 text-foreground/60 hover:text-foreground\"\r\n @click=\"show = !show\"\r\n >\r\n <Eye v-if=\"show\" class=\"size-4\" />\r\n <EyeOff v-else class=\"size-4\" />\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\n\r\nimport { AdminAvatar } from '../avatar';\r\n\r\ninterface Props {\r\n /**\r\n * @zh_CN 是否收起文本\r\n */\r\n collapsed?: boolean;\r\n /**\r\n * @zh_CN Logo 图片适应方式\r\n */\r\n fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';\r\n /**\r\n * @zh_CN Logo 跳转地址\r\n */\r\n href?: string;\r\n /**\r\n * @zh_CN Logo 图片大小\r\n */\r\n logoSize?: number;\r\n /**\r\n * @zh_CN Logo 图标\r\n */\r\n src?: string;\r\n /**\r\n * @zh_CN 暗色主题 Logo 图标 (可选,若不设置则使用 src)\r\n */\r\n srcDark?: string;\r\n /**\r\n * @zh_CN Logo 文本\r\n */\r\n text: string;\r\n /**\r\n * @zh_CN Logo 主题\r\n */\r\n theme?: string;\r\n}\r\n\r\ndefineOptions({\r\n name: 'AdminLogo',\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n collapsed: false,\r\n href: 'javascript:void 0',\r\n logoSize: 32,\r\n src: '',\r\n srcDark: '',\r\n theme: 'light',\r\n fit: 'cover',\r\n});\r\n\r\n/**\r\n * @zh_CN 根据主题选择合适的 logo 图标\r\n */\r\nconst logoSrc = computed(() => {\r\n // 如果是暗色主题且提供了 srcDark,则使用暗色主题的 logo\r\n if (props.theme === 'dark' && props.srcDark) {\r\n return props.srcDark;\r\n }\r\n // 否则使用默认的 src\r\n return props.src;\r\n});\r\n</script>\r\n\r\n<template>\r\n <div :class=\"theme\" class=\"flex h-full items-center text-lg\">\r\n <a\r\n :class=\"$attrs.class\"\r\n :href=\"href\"\r\n class=\"flex h-full items-center gap-2 overflow-hidden px-3 text-lg leading-normal transition-all duration-500\"\r\n >\r\n <AdminAvatar\r\n v-if=\"logoSrc\"\r\n :alt=\"text\"\r\n :src=\"logoSrc\"\r\n :size=\"logoSize\"\r\n :fit=\"fit\"\r\n class=\"relative rounded-none bg-transparent\"\r\n />\r\n <template v-if=\"!collapsed\">\r\n <slot name=\"text\">\r\n <span class=\"truncate text-nowrap font-semibold text-foreground\">\r\n {{ text }}\r\n </span>\r\n </slot>\r\n </template>\r\n </a>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { PinInputProps } from './types';\r\n\r\nimport { computed, onBeforeUnmount, ref, useId, watch } from 'vue';\r\n\r\nimport { PinInput, PinInputGroup, PinInputInput } from '../../ui';\r\nimport { AdminButton } from '../button';\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\nconst {\r\n codeLength = 6,\r\n createText = async () => {},\r\n disabled = false,\r\n handleSendCode = async () => {},\r\n loading = false,\r\n maxTime = 60,\r\n} = defineProps<PinInputProps>();\r\n\r\nconst emit = defineEmits<{\r\n complete: [];\r\n sendError: [error: any];\r\n}>();\r\n\r\nconst timer = ref<ReturnType<typeof setTimeout>>();\r\n\r\nconst modelValue = defineModel<string>();\r\n\r\nconst inputValue = ref<string[]>([]);\r\nconst countdown = ref(0);\r\n\r\nconst btnText = computed(() => {\r\n const countdownValue = countdown.value;\r\n return createText?.(countdownValue);\r\n});\r\n\r\nconst btnLoading = computed(() => {\r\n return loading || countdown.value > 0;\r\n});\r\n\r\nwatch(\r\n () => modelValue.value,\r\n () => {\r\n inputValue.value = modelValue.value?.split('') ?? [];\r\n },\r\n);\r\n\r\nwatch(inputValue, (val) => {\r\n modelValue.value = val.join('');\r\n});\r\n\r\nfunction handleComplete(e: string[]) {\r\n modelValue.value = e.join('');\r\n emit('complete');\r\n}\r\n\r\nasync function handleSend(e: Event) {\r\n try {\r\n e?.preventDefault();\r\n countdown.value = maxTime;\r\n startCountdown();\r\n await handleSendCode();\r\n } catch (error) {\r\n console.error('Failed to send code:', error);\r\n // Consider emitting an error event or showing a notification\r\n emit('sendError', error);\r\n }\r\n}\r\n\r\nfunction startCountdown() {\r\n if (countdown.value > 0) {\r\n timer.value = setTimeout(() => {\r\n countdown.value--;\r\n startCountdown();\r\n }, 1000);\r\n }\r\n}\r\n\r\nonBeforeUnmount(() => {\r\n countdown.value = 0;\r\n clearTimeout(timer.value);\r\n});\r\n\r\nconst id = useId();\r\n\r\nconst pinType = 'text' as const;\r\n</script>\r\n\r\n<template>\r\n <PinInput\r\n :id=\"id\"\r\n v-model=\"inputValue\"\r\n :disabled=\"disabled\"\r\n class=\"flex w-full justify-between\"\r\n otp\r\n placeholder=\"○\"\r\n :type=\"pinType\"\r\n @complete=\"handleComplete\"\r\n >\r\n <div class=\"relative flex w-full\">\r\n <PinInputGroup class=\"mr-2\">\r\n <PinInputInput\r\n v-for=\"(item, index) in codeLength\"\r\n :key=\"item\"\r\n :index=\"index\"\r\n />\r\n </PinInputGroup>\r\n <AdminButton\r\n :disabled=\"disabled\"\r\n :loading=\"btnLoading\"\r\n class=\"flex-grow\"\r\n size=\"lg\"\r\n variant=\"outline\"\r\n @click=\"handleSend\"\r\n >\r\n {{ btnText }}\r\n </AdminButton>\r\n </div>\r\n </PinInput>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type {\r\n PopoverContentProps,\r\n PopoverRootEmits,\r\n PopoverRootProps,\r\n} from 'reka-ui';\r\n\r\nimport type { ClassType } from '@admin-kit/typings';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { useForwardPropsEmits } from 'reka-ui';\r\n\r\nimport {\r\n PopoverContent,\r\n Popover as PopoverRoot,\r\n PopoverTrigger,\r\n} from '../../ui';\r\n\r\ninterface Props extends PopoverRootProps {\r\n class?: ClassType;\r\n contentClass?: ClassType;\r\n contentProps?: PopoverContentProps;\r\n triggerClass?: ClassType;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {});\r\n\r\nconst emits = defineEmits<PopoverRootEmits>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const {\r\n class: _cls,\r\n contentClass: _,\r\n contentProps: _cProps,\r\n triggerClass: _tClass,\r\n ...delegated\r\n } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwarded = useForwardPropsEmits(delegatedProps, emits);\r\n</script>\r\n\r\n<template>\r\n <PopoverRoot v-bind=\"forwarded\">\r\n <PopoverTrigger :class=\"triggerClass\">\r\n <slot name=\"trigger\"></slot>\r\n\r\n <PopoverContent\r\n :class=\"contentClass\"\r\n class=\"side-content z-popup\"\r\n v-bind=\"contentProps\"\r\n >\r\n <slot></slot>\r\n </PopoverContent>\r\n </PopoverTrigger>\r\n </PopoverRoot>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ClassType } from '@admin-kit/typings';\r\n\r\nimport { computed, ref } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { ScrollArea, ScrollBar } from '../../ui';\r\n\r\ninterface Props {\r\n class?: ClassType;\r\n horizontal?: boolean;\r\n scrollBarClass?: ClassType;\r\n shadow?: boolean;\r\n shadowBorder?: boolean;\r\n shadowBottom?: boolean;\r\n shadowLeft?: boolean;\r\n shadowRight?: boolean;\r\n shadowTop?: boolean;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n class: '',\r\n horizontal: false,\r\n shadow: false,\r\n shadowBorder: false,\r\n shadowBottom: true,\r\n shadowLeft: false,\r\n shadowRight: false,\r\n shadowTop: true,\r\n});\r\n\r\nconst emit = defineEmits<{\r\n scrollAt: [{ bottom: boolean; left: boolean; right: boolean; top: boolean }];\r\n}>();\r\n\r\nconst isAtTop = ref(true);\r\nconst isAtRight = ref(false);\r\nconst isAtBottom = ref(false);\r\nconst isAtLeft = ref(true);\r\n\r\n/**\r\n * We have to check if the scroll amount is close enough to some threshold in order to\r\n * more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\r\n * numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\r\n */\r\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\r\n\r\nconst showShadowTop = computed(() => props.shadow && props.shadowTop);\r\nconst showShadowBottom = computed(() => props.shadow && props.shadowBottom);\r\nconst showShadowLeft = computed(() => props.shadow && props.shadowLeft);\r\nconst showShadowRight = computed(() => props.shadow && props.shadowRight);\r\n\r\nconst computedShadowClasses = computed(() => {\r\n return {\r\n 'both-shadow':\r\n !isAtLeft.value &&\r\n !isAtRight.value &&\r\n showShadowLeft.value &&\r\n showShadowRight.value,\r\n 'left-shadow': !isAtLeft.value && showShadowLeft.value,\r\n 'right-shadow': !isAtRight.value && showShadowRight.value,\r\n };\r\n});\r\n\r\nfunction handleScroll(event: Event) {\r\n const target = event.target as HTMLElement;\r\n const scrollTop = target?.scrollTop ?? 0;\r\n const scrollLeft = target?.scrollLeft ?? 0;\r\n const clientHeight = target?.clientHeight ?? 0;\r\n const clientWidth = target?.clientWidth ?? 0;\r\n const scrollHeight = target?.scrollHeight ?? 0;\r\n const scrollWidth = target?.scrollWidth ?? 0;\r\n isAtTop.value = scrollTop <= 0;\r\n isAtLeft.value = scrollLeft <= 0;\r\n isAtBottom.value =\r\n Math.abs(scrollTop) + clientHeight >=\r\n scrollHeight - ARRIVED_STATE_THRESHOLD_PIXELS;\r\n isAtRight.value =\r\n Math.abs(scrollLeft) + clientWidth >=\r\n scrollWidth - ARRIVED_STATE_THRESHOLD_PIXELS;\r\n\r\n emit('scrollAt', {\r\n bottom: isAtBottom.value,\r\n left: isAtLeft.value,\r\n right: isAtRight.value,\r\n top: isAtTop.value,\r\n });\r\n}\r\n</script>\r\n\r\n<template>\r\n <ScrollArea\r\n :class=\"[cn(props.class), computedShadowClasses]\"\r\n :on-scroll=\"handleScroll\"\r\n class=\"admin-scrollbar relative\"\r\n >\r\n <div\r\n v-if=\"showShadowTop\"\r\n :class=\"{\r\n 'opacity-100': !isAtTop,\r\n 'border-t border-border': shadowBorder && !isAtTop,\r\n }\"\r\n class=\"scrollbar-top-shadow pointer-events-none absolute top-0 z-10 h-12 w-full opacity-0 transition-opacity duration-300 ease-in-out will-change-[opacity]\"\r\n ></div>\r\n <slot></slot>\r\n <div\r\n v-if=\"showShadowBottom\"\r\n :class=\"{\r\n 'opacity-100': !isAtTop && !isAtBottom,\r\n 'border-b border-border': shadowBorder && !isAtTop && !isAtBottom,\r\n }\"\r\n class=\"scrollbar-bottom-shadow pointer-events-none absolute bottom-0 z-10 h-12 w-full opacity-0 transition-opacity duration-300 ease-in-out will-change-[opacity]\"\r\n ></div>\r\n <ScrollBar\r\n v-if=\"horizontal\"\r\n :class=\"scrollBarClass\"\r\n orientation=\"horizontal\"\r\n />\r\n </ScrollArea>\r\n</template>\r\n\r\n<style scoped>\r\n.admin-scrollbar {\r\n &:not(.both-shadow).left-shadow {\r\n mask-image: linear-gradient(90deg, transparent, #000 16px);\r\n }\r\n\r\n &:not(.both-shadow).right-shadow {\r\n mask-image: linear-gradient(\r\n 90deg,\r\n #000 0%,\r\n #000 calc(100% - 16px),\r\n transparent\r\n );\r\n }\r\n\r\n &.both-shadow {\r\n mask-image: linear-gradient(\r\n 90deg,\r\n transparent,\r\n #000 16px,\r\n #000 calc(100% - 16px),\r\n transparent 100%\r\n );\r\n }\r\n}\r\n\r\n.scrollbar-top-shadow {\r\n background: linear-gradient(\r\n to bottom,\r\n hsl(var(--scroll-shadow, var(--background))),\r\n transparent\r\n );\r\n}\r\n\r\n.scrollbar-bottom-shadow {\r\n background: linear-gradient(\r\n to top,\r\n hsl(var(--scroll-shadow, var(--background))),\r\n transparent\r\n );\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { TabsIndicatorProps } from 'reka-ui';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { TabsIndicator, useForwardProps } from 'reka-ui';\r\n\r\nconst props = defineProps<TabsIndicatorProps & { class?: any }>();\r\n\r\nconst delegatedProps = computed(() => {\r\n const { class: _, ...delegated } = props;\r\n\r\n return delegated;\r\n});\r\n\r\nconst forwardedProps = useForwardProps(delegatedProps);\r\n</script>\r\n\r\n<template>\r\n <TabsIndicator\r\n v-bind=\"forwardedProps\"\r\n :class=\"\r\n cn(\r\n 'absolute bottom-0 left-0 z-10 h-full w-1/2 translate-x-[--reka-tabs-indicator-position] rounded-full px-0 py-1 pr-0.5 transition-[width,transform] duration-300',\r\n props.class,\r\n )\r\n \"\r\n >\r\n <div\r\n class=\"inline-flex h-full w-full items-center justify-center whitespace-nowrap rounded-md bg-background px-3 py-1 text-sm font-medium text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\"\r\n >\r\n <slot></slot>\r\n </div>\r\n </TabsIndicator>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { SegmentedItem } from './types';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { TabsTrigger } from 'reka-ui';\r\n\r\nimport { Tabs, TabsContent, TabsList } from '../../ui';\r\nimport TabsIndicator from './tabs-indicator.vue';\r\n\r\ninterface Props {\r\n defaultValue?: string;\r\n tabs?: SegmentedItem[];\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n defaultValue: '',\r\n tabs: () => [],\r\n});\r\n\r\nconst activeTab = defineModel<string>();\r\n\r\nconst getDefaultValue = computed(() => {\r\n return props.defaultValue || props.tabs[0]?.value;\r\n});\r\n\r\nconst tabsStyle = computed(() => {\r\n return {\r\n 'grid-template-columns': `repeat(${props.tabs.length}, minmax(0, 1fr))`,\r\n };\r\n});\r\n\r\nconst tabsIndicatorStyle = computed(() => {\r\n return {\r\n width: `${(100 / props.tabs.length).toFixed(0)}%`,\r\n };\r\n});\r\n\r\nfunction activeClass(tab: string): string[] {\r\n return tab === activeTab.value ? ['!font-bold', 'text-primary'] : [];\r\n}\r\n</script>\r\n\r\n<template>\r\n <Tabs v-model=\"activeTab\" :default-value=\"getDefaultValue\">\r\n <TabsList\r\n :style=\"tabsStyle\"\r\n class=\"relative grid w-full bg-accent !outline !outline-2 !outline-heavy\"\r\n >\r\n <TabsIndicator :style=\"tabsIndicatorStyle\" />\r\n <template v-for=\"tab in tabs\" :key=\"tab.value\">\r\n <TabsTrigger\r\n :value=\"tab.value\"\r\n :class=\"activeClass(tab.value)\"\r\n class=\"z-20 inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium hover:text-primary disabled:pointer-events-none disabled:opacity-50\"\r\n >\r\n {{ tab.label }}\r\n </TabsTrigger>\r\n </template>\r\n </TabsList>\r\n <template v-for=\"tab in tabs\" :key=\"tab.value\">\r\n <TabsContent :value=\"tab.value\">\r\n <slot :name=\"tab.value\"></slot>\r\n </TabsContent>\r\n </template>\r\n </Tabs>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { CircleX } from '@admin-kit/icons';\r\n\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '../../ui';\r\n\r\ninterface Props {\r\n allowClear?: boolean;\r\n class?: any;\r\n options?: Array<{ label: string; value: string }>;\r\n placeholder?: string;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n allowClear: false,\r\n});\r\n\r\nconst modelValue = defineModel<string>();\r\n\r\nfunction handleClear() {\r\n modelValue.value = undefined;\r\n}\r\n</script>\r\n<template>\r\n <Select v-model=\"modelValue\">\r\n <SelectTrigger :class=\"props.class\" class=\"flex w-full items-center\">\r\n <SelectValue class=\"flex-auto text-left\" :placeholder=\"placeholder\" />\r\n <CircleX\r\n @pointerdown.stop\r\n @click.stop.prevent=\"handleClear\"\r\n v-if=\"allowClear && modelValue\"\r\n data-clear-button\r\n class=\"mr-1 size-4 cursor-pointer opacity-50 hover:opacity-100\"\r\n />\r\n </SelectTrigger>\r\n <SelectContent>\r\n <template v-for=\"item in options\" :key=\"item.value\">\r\n <SelectItem :value=\"item.value\"> {{ item.label }} </SelectItem>\r\n </template>\r\n </SelectContent>\r\n </Select>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped>\r\nbutton[role='combobox'][data-placeholder] {\r\n color: hsl(var(--muted-foreground));\r\n}\r\n\r\nbutton {\r\n --ring: var(--primary);\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue';\r\n\r\nconst { animationDuration = 2, animationIterationCount = 'infinite' } =\r\n defineProps<{\r\n // 动画持续时间,单位秒\r\n animationDuration?: number;\r\n // 动画是否只执行一次\r\n animationIterationCount?: 'infinite' | number;\r\n }>();\r\n\r\nconst style = computed(() => {\r\n return {\r\n animation: `shine ${animationDuration}s linear ${animationIterationCount}`,\r\n };\r\n});\r\n</script>\r\n<template>\r\n <div :style=\"style\" class=\"admin-spine-text !bg-clip-text text-transparent\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n<style>\r\n.admin-spine-text {\r\n background:\r\n radial-gradient(circle at center, rgb(255 255 255 / 80%), #f000) -200% 50% /\r\n 200% 100% no-repeat,\r\n #000;\r\n\r\n /* animation: shine 3s linear infinite; */\r\n}\r\n\r\n.dark .admin-spine-text {\r\n background:\r\n radial-gradient(circle at center, rgb(24 24 26 / 80%), transparent) -200%\r\n 50% / 200% 100% no-repeat,\r\n #f4f4f4;\r\n}\r\n\r\n@keyframes shine {\r\n 0% {\r\n background-position: 200% 0%;\r\n }\r\n\r\n 100% {\r\n background-position: -200% 0%;\r\n }\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, watch } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\ninterface Props {\r\n class?: string;\r\n /**\r\n * @zh_CN 最小加载时间\r\n * @en_US Minimum loading time\r\n */\r\n minLoadingTime?: number;\r\n\r\n /**\r\n * @zh_CN loading状态开启\r\n */\r\n spinning?: boolean;\r\n /**\r\n * @zh_CN 文字\r\n */\r\n text?: string;\r\n}\r\n\r\ndefineOptions({\r\n name: 'AdminLoading',\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n minLoadingTime: 50,\r\n text: '',\r\n});\r\n// const startTime = ref(0);\r\nconst showSpinner = ref(false);\r\nconst renderSpinner = ref(false);\r\nconst timer = ref<ReturnType<typeof setTimeout>>();\r\n\r\nwatch(\r\n () => props.spinning,\r\n (show) => {\r\n if (!show) {\r\n showSpinner.value = false;\r\n clearTimeout(timer.value);\r\n return;\r\n }\r\n\r\n // startTime.value = performance.now();\r\n timer.value = setTimeout(() => {\r\n // const loadingTime = performance.now() - startTime.value;\r\n\r\n showSpinner.value = true;\r\n if (showSpinner.value) {\r\n renderSpinner.value = true;\r\n }\r\n }, props.minLoadingTime);\r\n },\r\n {\r\n immediate: true,\r\n },\r\n);\r\n\r\nfunction onTransitionEnd() {\r\n if (!showSpinner.value) {\r\n renderSpinner.value = false;\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"\r\n cn(\r\n 'absolute left-0 top-0 z-100 flex size-full flex-col items-center justify-center bg-overlay-content transition-all duration-500 dark:bg-overlay',\r\n {\r\n 'invisible opacity-0': !showSpinner,\r\n },\r\n props.class,\r\n )\r\n \"\r\n @transitionend=\"onTransitionEnd\"\r\n >\r\n <slot name=\"icon\" v-if=\"renderSpinner\">\r\n <span class=\"dot relative inline-block size-9 text-3xl\">\r\n <i\r\n v-for=\"index in 4\"\r\n :key=\"index\"\r\n class=\"absolute block size-4 origin-[50%_50%] scale-75 rounded-full bg-primary opacity-30\"\r\n ></i>\r\n </span>\r\n </slot>\r\n\r\n <div v-if=\"text\" class=\"mt-4 text-xs text-primary\">{{ text }}</div>\r\n <slot></slot>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.dot {\r\n transform: rotate(45deg);\r\n animation: rotate-ani 1.2s infinite linear;\r\n}\r\n\r\n.dot i {\r\n animation: spin-move-ani 1s infinite linear alternate;\r\n}\r\n\r\n.dot i:nth-child(1) {\r\n top: 0;\r\n left: 0;\r\n}\r\n\r\n.dot i:nth-child(2) {\r\n top: 0;\r\n right: 0;\r\n animation-delay: 0.4s;\r\n}\r\n\r\n.dot i:nth-child(3) {\r\n right: 0;\r\n bottom: 0;\r\n animation-delay: 0.8s;\r\n}\r\n\r\n.dot i:nth-child(4) {\r\n bottom: 0;\r\n left: 0;\r\n animation-delay: 1.2s;\r\n}\r\n\r\n@keyframes rotate-ani {\r\n to {\r\n transform: rotate(405deg);\r\n }\r\n}\r\n\r\n@keyframes spin-move-ani {\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, watch } from 'vue';\r\n\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\ninterface Props {\r\n class?: string;\r\n /**\r\n * @zh_CN 最小加载时间\r\n * @en_US Minimum loading time\r\n */\r\n minLoadingTime?: number;\r\n /**\r\n * @zh_CN loading状态开启\r\n */\r\n spinning?: boolean;\r\n}\r\n\r\ndefineOptions({\r\n name: 'AdminSpinner',\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n minLoadingTime: 50,\r\n});\r\n// const startTime = ref(0);\r\nconst showSpinner = ref(false);\r\nconst renderSpinner = ref(false);\r\nconst timer = ref<ReturnType<typeof setTimeout>>();\r\n\r\nwatch(\r\n () => props.spinning,\r\n (show) => {\r\n if (!show) {\r\n showSpinner.value = false;\r\n clearTimeout(timer.value);\r\n return;\r\n }\r\n\r\n // startTime.value = performance.now();\r\n timer.value = setTimeout(() => {\r\n // const loadingTime = performance.now() - startTime.value;\r\n\r\n showSpinner.value = true;\r\n if (showSpinner.value) {\r\n renderSpinner.value = true;\r\n }\r\n }, props.minLoadingTime);\r\n },\r\n {\r\n immediate: true,\r\n },\r\n);\r\n\r\nfunction onTransitionEnd() {\r\n if (!showSpinner.value) {\r\n renderSpinner.value = false;\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"\r\n cn(\r\n 'flex-center absolute left-0 top-0 z-100 size-full bg-overlay-content backdrop-blur-sm transition-all duration-500',\r\n {\r\n 'invisible opacity-0': !showSpinner,\r\n },\r\n props.class,\r\n )\r\n \"\r\n @transitionend=\"onTransitionEnd\"\r\n >\r\n <div\r\n :class=\"{ paused: !renderSpinner }\"\r\n v-if=\"renderSpinner\"\r\n class=\"loader relative size-12 before:absolute before:left-0 before:top-[60px] before:h-[5px] before:w-12 before:rounded-[50%] before:bg-primary/50 before:content-[''] after:absolute after:left-0 after:top-0 after:h-full after:w-full after:rounded after:bg-primary after:content-['']\"\r\n ></div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.paused {\r\n &::before {\r\n animation-play-state: paused !important;\r\n }\r\n\r\n &::after {\r\n animation-play-state: paused !important;\r\n }\r\n}\r\n\r\n.loader {\r\n &::before {\r\n animation: loader-shadow-ani 0.5s linear infinite;\r\n }\r\n\r\n &::after {\r\n animation: loader-jump-ani 0.5s linear infinite;\r\n }\r\n}\r\n\r\n@keyframes loader-jump-ani {\r\n 15% {\r\n border-bottom-right-radius: 3px;\r\n }\r\n\r\n 25% {\r\n transform: translateY(9px) rotate(22.5deg);\r\n }\r\n\r\n 50% {\r\n border-bottom-right-radius: 40px;\r\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\r\n }\r\n\r\n 75% {\r\n transform: translateY(9px) rotate(67.5deg);\r\n }\r\n\r\n 100% {\r\n transform: translateY(0) rotate(90deg);\r\n }\r\n}\r\n\r\n@keyframes loader-shadow-ani {\r\n 0%,\r\n 100% {\r\n transform: scale(1, 1);\r\n }\r\n\r\n 50% {\r\n transform: scale(1.2, 1);\r\n }\r\n}\r\n</style>\r\n","import type { Component } from 'vue';\r\n\r\nimport type {\r\n BaseFormComponentType,\r\n FormCommonConfig,\r\n AdminFormAdapterOptions,\r\n} from './types';\r\n\r\nimport { h } from 'vue';\r\n\r\nimport {\r\n AdminButton,\r\n AdminCheckbox,\r\n Input,\r\n AdminInputPassword,\r\n AdminPinInput,\r\n AdminSelect,\r\n} from '@admin-kit/shadcn-ui';\r\nimport { globalShareState } from '@admin-kit/shared/global-state';\r\n\r\nimport { defineRule } from 'vee-validate';\r\n\r\nconst DEFAULT_MODEL_PROP_NAME = 'modelValue';\r\n\r\nexport const DEFAULT_FORM_COMMON_CONFIG: FormCommonConfig = {};\r\n\r\nexport const COMPONENT_MAP: Record<BaseFormComponentType, Component> = {\r\n DefaultButton: h(AdminButton, { size: 'sm', variant: 'outline' }),\r\n PrimaryButton: h(AdminButton, { size: 'sm', variant: 'default' }),\r\n AdminCheckbox: AdminCheckbox,\r\n AdminInput: Input,\r\n AdminInputPassword: AdminInputPassword,\r\n AdminPinInput: AdminPinInput,\r\n AdminSelect: AdminSelect,\r\n};\r\n\r\nexport const COMPONENT_BIND_EVENT_MAP: Partial<\r\n Record<BaseFormComponentType, string>\r\n> = {\r\n AdminCheckbox: 'checked',\r\n};\r\n\r\nexport function setupAdminForm<\r\n T extends BaseFormComponentType = BaseFormComponentType,\r\n>(options: AdminFormAdapterOptions<T>) {\r\n const { config, defineRules } = options;\r\n\r\n const {\r\n disabledOnChangeListener = true,\r\n disabledOnInputListener = true,\r\n emptyStateValue = undefined,\r\n } = (config || {}) as FormCommonConfig;\r\n\r\n Object.assign(DEFAULT_FORM_COMMON_CONFIG, {\r\n disabledOnChangeListener,\r\n disabledOnInputListener,\r\n emptyStateValue,\r\n });\r\n\r\n if (defineRules) {\r\n for (const key of Object.keys(defineRules)) {\r\n defineRule(key, defineRules[key as never]);\r\n }\r\n }\r\n\r\n const baseModelPropName =\r\n config?.baseModelPropName ?? DEFAULT_MODEL_PROP_NAME;\r\n const modelPropNameMap = config?.modelPropNameMap as\r\n | Record<BaseFormComponentType, string>\r\n | undefined;\r\n\r\n const components = globalShareState.getComponents();\r\n\r\n for (const component of Object.keys(components)) {\r\n const key = component as BaseFormComponentType;\r\n COMPONENT_MAP[key] = components[component as never];\r\n\r\n if (baseModelPropName !== DEFAULT_MODEL_PROP_NAME) {\r\n COMPONENT_BIND_EVENT_MAP[key] = baseModelPropName;\r\n }\r\n\r\n // 覆盖特殊组件的modelPropName\r\n if (modelPropNameMap && modelPropNameMap[key]) {\r\n COMPONENT_BIND_EVENT_MAP[key] = modelPropNameMap[key];\r\n }\r\n }\r\n}\r\n","import type {\r\n FormState,\r\n GenericObject,\r\n ResetFormOpts,\r\n ValidationOptions,\r\n} from 'vee-validate';\r\n\r\nimport type { ComponentPublicInstance } from 'vue';\r\n\r\nimport type { Recordable } from '@admin-kit/typings';\r\n\r\nimport type { FormActions, FormSchema, AdminFormProps } from './types';\r\n\r\nimport { isRef, toRaw } from 'vue';\r\n\r\nimport { Store } from '@admin-kit/shared/store';\r\nimport {\r\n bindMethods,\r\n createMerge,\r\n formatDate,\r\n isDate,\r\n isDayjsObject,\r\n isFunction,\r\n isObject,\r\n mergeWithArrayOverride,\r\n StateHandler,\r\n} from '@admin-kit/shared/utils';\r\n\r\nfunction getDefaultState(): AdminFormProps {\r\n return {\r\n actionWrapperClass: '',\r\n collapsed: false,\r\n collapsedRows: 1,\r\n collapseTriggerResize: false,\r\n commonConfig: {},\r\n handleReset: undefined,\r\n handleSubmit: undefined,\r\n handleValuesChange: undefined,\r\n handleCollapsedChange: undefined,\r\n layout: 'horizontal',\r\n resetButtonOptions: {},\r\n schema: [],\r\n scrollToFirstError: false,\r\n showCollapseButton: false,\r\n showDefaultActions: true,\r\n submitButtonOptions: {},\r\n submitOnChange: false,\r\n submitOnEnter: false,\r\n wrapperClass: 'grid-cols-1',\r\n };\r\n}\r\n\r\nexport class FormApi {\r\n // private api: Pick<AdminFormProps, 'handleReset' | 'handleSubmit'>;\r\n public form = {} as FormActions;\r\n isMounted = false;\r\n\r\n public state: null | AdminFormProps = null;\r\n stateHandler: StateHandler;\r\n\r\n public store: Store<AdminFormProps>;\r\n\r\n /**\r\n * 组件实例映射\r\n */\r\n private componentRefMap: Map<string, unknown> = new Map();\r\n\r\n // 最后一次点击提交时的表单值\r\n private latestSubmissionValues: null | Recordable<any> = null;\r\n\r\n private prevState: null | AdminFormProps = null;\r\n\r\n constructor(options: AdminFormProps = {}) {\r\n const { ...storeState } = options;\r\n\r\n const defaultState = getDefaultState();\r\n\r\n this.store = new Store<AdminFormProps>(\r\n {\r\n ...defaultState,\r\n ...storeState,\r\n },\r\n {\r\n onUpdate: () => {\r\n this.prevState = this.state;\r\n this.state = this.store.state;\r\n this.updateState();\r\n },\r\n },\r\n );\r\n\r\n this.state = this.store.state;\r\n this.stateHandler = new StateHandler();\r\n bindMethods(this);\r\n }\r\n\r\n /**\r\n * 获取字段组件实例\r\n * @param fieldName 字段名\r\n * @returns 组件实例\r\n */\r\n getFieldComponentRef<T = ComponentPublicInstance>(\r\n fieldName: string,\r\n ): T | undefined {\r\n let target = this.componentRefMap.has(fieldName)\r\n ? (this.componentRefMap.get(fieldName) as ComponentPublicInstance)\r\n : undefined;\r\n if (\r\n target &&\r\n target.$.type.name === 'AsyncComponentWrapper' &&\r\n target.$.subTree.ref\r\n ) {\r\n if (Array.isArray(target.$.subTree.ref)) {\r\n if (\r\n target.$.subTree.ref.length > 0 &&\r\n isRef(target.$.subTree.ref[0]?.r)\r\n ) {\r\n target = target.$.subTree.ref[0]?.r.value as ComponentPublicInstance;\r\n }\r\n } else if (isRef(target.$.subTree.ref.r)) {\r\n target = target.$.subTree.ref.r.value as ComponentPublicInstance;\r\n }\r\n }\r\n return target as T;\r\n }\r\n\r\n /**\r\n * 获取当前聚焦的字段,如果没有聚焦的字段则返回undefined\r\n */\r\n getFocusedField() {\r\n for (const fieldName of this.componentRefMap.keys()) {\r\n const ref = this.getFieldComponentRef(fieldName);\r\n if (ref) {\r\n let el: HTMLElement | null = null;\r\n if (ref instanceof HTMLElement) {\r\n el = ref;\r\n } else if (ref.$el instanceof HTMLElement) {\r\n el = ref.$el;\r\n }\r\n if (!el) {\r\n continue;\r\n }\r\n if (\r\n el === document.activeElement ||\r\n el.contains(document.activeElement)\r\n ) {\r\n return fieldName;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n getLatestSubmissionValues() {\r\n return this.latestSubmissionValues || {};\r\n }\r\n\r\n getState() {\r\n return this.state;\r\n }\r\n\r\n async getValues<T = Recordable<any>>() {\r\n const form = await this.getForm();\r\n return (form.values ? this.handleRangeTimeValue(form.values) : {}) as T;\r\n }\r\n\r\n async isFieldValid(fieldName: string) {\r\n const form = await this.getForm();\r\n return form.isFieldValid(fieldName);\r\n }\r\n\r\n merge(formApi: FormApi) {\r\n const chain = [this, formApi];\r\n const proxy = new Proxy(formApi, {\r\n get(target: any, prop: any) {\r\n if (prop === 'merge') {\r\n return (nextFormApi: FormApi) => {\r\n chain.push(nextFormApi);\r\n return proxy;\r\n };\r\n }\r\n if (prop === 'submitAllForm') {\r\n return async (needMerge: boolean = true) => {\r\n try {\r\n const results = await Promise.all(\r\n chain.map(async (api) => {\r\n const validateResult = await api.validate();\r\n if (!validateResult.valid) {\r\n return;\r\n }\r\n const rawValues = toRaw((await api.getValues()) || {});\r\n return rawValues;\r\n }),\r\n );\r\n if (needMerge) {\r\n const mergedResults = Object.assign({}, ...results);\r\n return mergedResults;\r\n }\r\n return results;\r\n } catch (error) {\r\n console.error('Validation error:', error);\r\n }\r\n };\r\n }\r\n return target[prop];\r\n },\r\n });\r\n\r\n return proxy;\r\n }\r\n\r\n mount(formActions: FormActions, componentRefMap: Map<string, unknown>) {\r\n if (!this.isMounted) {\r\n Object.assign(this.form, formActions);\r\n this.stateHandler.setConditionTrue();\r\n this.setLatestSubmissionValues({\r\n ...toRaw(this.handleRangeTimeValue(this.form.values)),\r\n });\r\n this.componentRefMap = componentRefMap;\r\n this.isMounted = true;\r\n }\r\n }\r\n\r\n /**\r\n * 根据字段名移除表单项\r\n * @param fields\r\n */\r\n async removeSchemaByFields(fields: string[]) {\r\n const fieldSet = new Set(fields);\r\n const schema = this.state?.schema ?? [];\r\n\r\n const filterSchema = schema.filter((item) => !fieldSet.has(item.fieldName));\r\n\r\n this.setState({\r\n schema: filterSchema,\r\n });\r\n }\r\n\r\n /**\r\n * 重置表单\r\n */\r\n async resetForm(\r\n state?: Partial<FormState<GenericObject>> | undefined,\r\n opts?: Partial<ResetFormOpts>,\r\n ) {\r\n const form = await this.getForm();\r\n return form.resetForm(state, opts);\r\n }\r\n\r\n async resetValidate() {\r\n const form = await this.getForm();\r\n const fields = Object.keys(form.errors.value);\r\n fields.forEach((field) => {\r\n form.setFieldError(field, undefined);\r\n });\r\n }\r\n\r\n /**\r\n * 滚动到第一个错误字段\r\n * @param errors 验证错误对象\r\n */\r\n scrollToFirstError(errors: Record<string, any> | string) {\r\n // https://github.com/logaretm/vee-validate/discussions/3835\r\n const firstErrorFieldName =\r\n typeof errors === 'string' ? errors : Object.keys(errors)[0];\r\n\r\n if (!firstErrorFieldName) {\r\n return;\r\n }\r\n\r\n let el = document.querySelector(\r\n `[name=\"${firstErrorFieldName}\"]`,\r\n ) as HTMLElement;\r\n\r\n // 如果通过 name 属性找不到,尝试通过组件引用查找, 正常情况下不会走到这,怕哪天 vee-validate 改了 name 属性有个兜底的\r\n if (!el) {\r\n const componentRef = this.getFieldComponentRef(firstErrorFieldName);\r\n if (componentRef && componentRef.$el instanceof HTMLElement) {\r\n el = componentRef.$el;\r\n }\r\n }\r\n\r\n if (el) {\r\n // 滚动到错误字段,添加一些偏移量以确保字段完全可见\r\n el.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n inline: 'nearest',\r\n });\r\n }\r\n }\r\n\r\n async setFieldValue(field: string, value: any, shouldValidate?: boolean) {\r\n const form = await this.getForm();\r\n form.setFieldValue(field, value, shouldValidate);\r\n }\r\n\r\n setLatestSubmissionValues(values: null | Recordable<any>) {\r\n this.latestSubmissionValues = { ...toRaw(values) };\r\n }\r\n\r\n setState(\r\n stateOrFn:\r\n | ((prev: AdminFormProps) => Partial<AdminFormProps>)\r\n | Partial<AdminFormProps>,\r\n ) {\r\n if (isFunction(stateOrFn)) {\r\n this.store.setState((prev) => {\r\n return mergeWithArrayOverride(stateOrFn(prev), prev);\r\n });\r\n } else {\r\n this.store.setState((prev) => mergeWithArrayOverride(stateOrFn, prev));\r\n }\r\n }\r\n\r\n /**\r\n * 设置表单值\r\n * @param fields record\r\n * @param filterFields 过滤不在schema中定义的字段 默认为true\r\n * @param shouldValidate\r\n */\r\n async setValues(\r\n fields: Record<string, any>,\r\n filterFields: boolean = true,\r\n shouldValidate: boolean = false,\r\n ) {\r\n const form = await this.getForm();\r\n if (!filterFields) {\r\n form.setValues(fields, shouldValidate);\r\n return;\r\n }\r\n\r\n /**\r\n * 合并算法有待改进,目前的算法不支持object类型的值。\r\n * antd的日期时间相关组件的值类型为dayjs对象\r\n * element-plus的日期时间相关组件的值类型可能为Date对象\r\n * 以上两种类型需要排除深度合并\r\n */\r\n const fieldMergeFn = createMerge((obj, key, value) => {\r\n if (key in obj) {\r\n obj[key] =\r\n !Array.isArray(obj[key]) &&\r\n isObject(obj[key]) &&\r\n !isDayjsObject(obj[key]) &&\r\n !isDate(obj[key])\r\n ? fieldMergeFn(value, obj[key])\r\n : value;\r\n }\r\n return true;\r\n });\r\n const filteredFields = fieldMergeFn(fields, form.values);\r\n form.setValues(filteredFields, shouldValidate);\r\n }\r\n\r\n async submitForm(e?: Event) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n const form = await this.getForm();\r\n await form.submitForm();\r\n const rawValues = toRaw(await this.getValues());\r\n await this.state?.handleSubmit?.(rawValues);\r\n\r\n return rawValues;\r\n }\r\n\r\n unmount() {\r\n this.form?.resetForm?.();\r\n // this.state = null;\r\n this.latestSubmissionValues = null;\r\n this.isMounted = false;\r\n this.stateHandler.reset();\r\n }\r\n\r\n updateSchema(schema: Partial<FormSchema>[]) {\r\n const updated: Partial<FormSchema>[] = [...schema];\r\n const hasField = updated.every(\r\n (item) => Reflect.has(item, 'fieldName') && item.fieldName,\r\n );\r\n\r\n if (!hasField) {\r\n console.error(\r\n 'All items in the schema array must have a valid `fieldName` property to be updated',\r\n );\r\n return;\r\n }\r\n const currentSchema = [...(this.state?.schema ?? [])];\r\n\r\n const updatedMap: Record<string, any> = {};\r\n\r\n updated.forEach((item) => {\r\n if (item.fieldName) {\r\n updatedMap[item.fieldName] = item;\r\n }\r\n });\r\n\r\n currentSchema.forEach((schema, index) => {\r\n const updatedData = updatedMap[schema.fieldName];\r\n if (updatedData) {\r\n currentSchema[index] = mergeWithArrayOverride(\r\n updatedData,\r\n schema,\r\n ) as FormSchema;\r\n }\r\n });\r\n this.setState({ schema: currentSchema });\r\n }\r\n\r\n async validate(opts?: Partial<ValidationOptions>) {\r\n const form = await this.getForm();\r\n\r\n const validateResult = await form.validate(opts);\r\n\r\n if (Object.keys(validateResult?.errors ?? {}).length > 0) {\r\n console.error('validate error', validateResult?.errors);\r\n\r\n if (this.state?.scrollToFirstError) {\r\n this.scrollToFirstError(validateResult.errors);\r\n }\r\n }\r\n return validateResult;\r\n }\r\n\r\n async validateAndSubmitForm() {\r\n const form = await this.getForm();\r\n const { valid, errors } = await form.validate();\r\n if (!valid) {\r\n if (this.state?.scrollToFirstError) {\r\n this.scrollToFirstError(errors);\r\n }\r\n return;\r\n }\r\n return await this.submitForm();\r\n }\r\n\r\n async validateField(fieldName: string, opts?: Partial<ValidationOptions>) {\r\n const form = await this.getForm();\r\n const validateResult = await form.validateField(fieldName, opts);\r\n\r\n if (Object.keys(validateResult?.errors ?? {}).length > 0) {\r\n console.error('validate error', validateResult?.errors);\r\n\r\n if (this.state?.scrollToFirstError) {\r\n this.scrollToFirstError(fieldName);\r\n }\r\n }\r\n return validateResult;\r\n }\r\n\r\n private async getForm() {\r\n if (!this.isMounted) {\r\n // 等待form挂载\r\n await this.stateHandler.waitForCondition();\r\n }\r\n if (!this.form?.meta) {\r\n throw new Error('<AdminForm /> is not mounted');\r\n }\r\n return this.form;\r\n }\r\n\r\n private handleMultiFields = (originValues: Record<string, any>) => {\r\n const arrayToStringFields = this.state?.arrayToStringFields;\r\n if (!arrayToStringFields || !Array.isArray(arrayToStringFields)) {\r\n return;\r\n }\r\n\r\n const processFields = (fields: string[], separator: string = ',') => {\r\n this.processFields(fields, separator, originValues, (value, sep) => {\r\n if (Array.isArray(value)) {\r\n return value.join(sep);\r\n } else if (typeof value === 'string') {\r\n // 处理空字符串的情况\r\n if (value === '') {\r\n return [];\r\n }\r\n // 处理复杂分隔符的情况\r\n const escapedSeparator = sep.replaceAll(\r\n /[.*+?^${}()|[\\]\\\\]/g,\r\n String.raw`\\$&`,\r\n );\r\n return value.split(new RegExp(escapedSeparator));\r\n } else {\r\n return value;\r\n }\r\n });\r\n };\r\n\r\n // 处理简单数组格式 ['field1', 'field2', ';'] 或 ['field1', 'field2']\r\n if (arrayToStringFields.every((item) => typeof item === 'string')) {\r\n const lastItem =\r\n arrayToStringFields[arrayToStringFields.length - 1] || '';\r\n const fields =\r\n lastItem.length === 1\r\n ? arrayToStringFields.slice(0, -1)\r\n : arrayToStringFields;\r\n const separator = lastItem.length === 1 ? lastItem : ',';\r\n processFields(fields, separator);\r\n return;\r\n }\r\n\r\n // 处理嵌套数组格式 [['field1'], ';']\r\n arrayToStringFields.forEach((fieldConfig) => {\r\n if (Array.isArray(fieldConfig)) {\r\n const [fields, separator = ','] = fieldConfig;\r\n // 根据类型定义,fields 应该始终是字符串数组\r\n if (!Array.isArray(fields)) {\r\n console.warn(\r\n `Invalid field configuration: fields should be an array of strings, got ${typeof fields}`,\r\n );\r\n return;\r\n }\r\n processFields(fields, separator);\r\n }\r\n });\r\n };\r\n\r\n private handleRangeTimeValue = (originValues: Record<string, any>) => {\r\n const values = { ...originValues };\r\n const fieldMappingTime = this.state?.fieldMappingTime;\r\n\r\n this.handleMultiFields(values);\r\n if (!fieldMappingTime || !Array.isArray(fieldMappingTime)) {\r\n return values;\r\n }\r\n\r\n fieldMappingTime.forEach(\r\n ([field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD']) => {\r\n if (startTimeKey && endTimeKey && values[field] === null) {\r\n Reflect.deleteProperty(values, startTimeKey);\r\n Reflect.deleteProperty(values, endTimeKey);\r\n // delete values[startTimeKey];\r\n // delete values[endTimeKey];\r\n }\r\n\r\n if (!values[field]) {\r\n Reflect.deleteProperty(values, field);\r\n // delete values[field];\r\n return;\r\n }\r\n\r\n const [startTime, endTime] = values[field];\r\n if (format === null) {\r\n values[startTimeKey] = startTime;\r\n values[endTimeKey] = endTime;\r\n } else if (isFunction(format)) {\r\n values[startTimeKey] = format(startTime, startTimeKey);\r\n values[endTimeKey] = format(endTime, endTimeKey);\r\n } else {\r\n const [startTimeFormat, endTimeFormat] = Array.isArray(format)\r\n ? format\r\n : [format, format];\r\n\r\n values[startTimeKey] = startTime\r\n ? formatDate(startTime, startTimeFormat)\r\n : undefined;\r\n values[endTimeKey] = endTime\r\n ? formatDate(endTime, endTimeFormat)\r\n : undefined;\r\n }\r\n // delete values[field];\r\n Reflect.deleteProperty(values, field);\r\n },\r\n );\r\n return values;\r\n };\r\n\r\n private processFields = (\r\n fields: string[],\r\n separator: string,\r\n originValues: Record<string, any>,\r\n transformFn: (value: any, separator: string) => any,\r\n ) => {\r\n fields.forEach((field) => {\r\n const value = originValues[field];\r\n if (value === undefined || value === null) {\r\n return;\r\n }\r\n originValues[field] = transformFn(value, separator);\r\n });\r\n };\r\n\r\n private updateState() {\r\n const currentSchema = this.state?.schema ?? [];\r\n const prevSchema = this.prevState?.schema ?? [];\r\n // 进行了删除schema操作\r\n if (currentSchema.length < prevSchema.length) {\r\n const currentFields = new Set(\r\n currentSchema.map((item) => item.fieldName),\r\n );\r\n const deletedSchema = prevSchema.filter(\r\n (item) => !currentFields.has(item.fieldName),\r\n );\r\n for (const schema of deletedSchema) {\r\n this.form?.setFieldValue?.(schema.fieldName, undefined);\r\n }\r\n }\r\n }\r\n}\r\n","\"use strict\";import{z as t}from\"zod\";const a=(e,o)=>e.constructor.name===o.name,n=new Map;n.set(t.ZodBoolean.name,()=>!1),n.set(t.ZodNumber.name,()=>0),n.set(t.ZodString.name,()=>\"\"),n.set(t.ZodArray.name,()=>[]),n.set(t.ZodRecord.name,()=>({})),n.set(t.ZodDefault.name,e=>e.def.defaultValue),n.set(t.ZodPipe.name,e=>d(e.def.in)),n.set(t.ZodOptional.name,e=>a(e.def.innerType,t.ZodDefault)?e.def.innerType.def.defaultValue:void 0),n.set(t.ZodTuple.name,e=>{const o=[];for(const c of e.def.items)o.push(d(c));return o}),n.set(t.ZodPipe.name,e=>d(e.def.in)),n.set(t.ZodUnion.name,e=>d(e.def.options[0])),n.set(t.ZodObject.name,e=>r(e)),n.set(t.ZodRecord.name,e=>r(e)),n.set(t.ZodIntersection.name,e=>r(e));function d(e){const o=e.constructor.name;if(!n.has(o)){console.warn(\"getSchemaDefaultForField: Unhandled type\",e.constructor.name);return}return n.get(o)(e)}function r(e){if(a(e,t.ZodRecord))return{};if(a(e,t.ZodPipe))return r(e.def.in);if(a(e,t.ZodIntersection))return{...r(e.def.left),...r(e.def.right)};if(a(e,t.ZodUnion)){for(const o of e.def.options)if(a(o,t.ZodObject))return r(o);return console.warn(\"getSchemaDefaultObject: No object found in union, returning empty object\"),{}}return a(e,t.ZodObject)?Object.fromEntries(Object.entries(e.shape).map(([o,c])=>[o,d(c)]).filter(o=>o[1]!==void 0)):(console.warn(`getSchemaDefaultObject: Expected object schema, got ${e.constructor.name}`),{})}function s(e){return r(e)}export{s as getDefaultsForSchema};\n","import type { ZodRawShape } from 'zod';\r\n\r\nimport type { ComputedRef } from 'vue';\r\n\r\nimport type { ExtendedFormApi, FormActions, AdminFormProps } from './types';\r\n\r\nimport { computed, unref, useSlots } from 'vue';\r\n\r\nimport { createContext } from '@admin-kit/shadcn-ui';\r\nimport { isString, mergeWithArrayOverride, set } from '@admin-kit/shared/utils';\r\n\r\nimport { useForm } from 'vee-validate';\r\nimport { object, ZodIntersection, ZodNumber, ZodObject, ZodString } from 'zod';\r\nimport { getDefaultsForSchema } from 'zod-defaults';\r\n\r\ntype ExtendFormProps = AdminFormProps & { formApi?: ExtendedFormApi };\r\n\r\nexport const [injectFormProps, provideFormProps] =\r\n createContext<[ComputedRef<ExtendFormProps> | ExtendFormProps, FormActions]>(\r\n 'AdminFormProps',\r\n );\r\n\r\nexport const [injectComponentRefMap, provideComponentRefMap] =\r\n createContext<Map<string, unknown>>('ComponentRefMap');\r\n\r\nexport function useFormInitial(\r\n props: ComputedRef<AdminFormProps> | AdminFormProps,\r\n) {\r\n const slots = useSlots();\r\n const initialValues = generateInitialValues();\r\n\r\n const form = useForm({\r\n ...(Object.keys(initialValues)?.length ? { initialValues } : {}),\r\n });\r\n\r\n const delegatedSlots = computed(() => {\r\n const resultSlots: string[] = [];\r\n\r\n for (const key of Object.keys(slots)) {\r\n if (key !== 'default') {\r\n resultSlots.push(key);\r\n }\r\n }\r\n return resultSlots;\r\n });\r\n\r\n function generateInitialValues() {\r\n const initialValues: Record<string, any> = {};\r\n\r\n const zodObject: ZodRawShape = {};\r\n (unref(props).schema || []).forEach((item) => {\r\n if (Reflect.has(item, 'defaultValue')) {\r\n set(initialValues, item.fieldName, item.defaultValue);\r\n } else if (item.rules && !isString(item.rules)) {\r\n // 检查规则是否适合提取默认值\r\n const customDefaultValue = getCustomDefaultValue(item.rules);\r\n zodObject[item.fieldName] = item.rules;\r\n if (customDefaultValue !== undefined) {\r\n initialValues[item.fieldName] = customDefaultValue;\r\n }\r\n }\r\n });\r\n\r\n const schemaInitialValues = getDefaultsForSchema(object(zodObject));\r\n\r\n const zodDefaults: Record<string, any> = {};\r\n for (const key in schemaInitialValues) {\r\n set(zodDefaults, key, schemaInitialValues[key]);\r\n }\r\n return mergeWithArrayOverride(initialValues, zodDefaults);\r\n }\r\n // 自定义默认值提取逻辑\r\n function getCustomDefaultValue(rule: any): any {\r\n if (rule instanceof ZodString) {\r\n return ''; // 默认为空字符串\r\n } else if (rule instanceof ZodNumber) {\r\n return null; // 默认为 null(避免显示 0)\r\n } else if (rule instanceof ZodObject) {\r\n // 递归提取嵌套对象的默认值\r\n const defaultValues: Record<string, any> = {};\r\n for (const [key, valueSchema] of Object.entries(rule.shape)) {\r\n defaultValues[key] = getCustomDefaultValue(valueSchema);\r\n }\r\n return defaultValues;\r\n } else if (rule instanceof ZodIntersection) {\r\n // 对于交集类型,从schema 提取默认值\r\n const leftDefaultValue = getCustomDefaultValue(rule._def.left);\r\n const rightDefaultValue = getCustomDefaultValue(rule._def.right);\r\n\r\n // 如果左右两边都能提取默认值,合并它们\r\n if (\r\n typeof leftDefaultValue === 'object' &&\r\n typeof rightDefaultValue === 'object'\r\n ) {\r\n return { ...leftDefaultValue, ...rightDefaultValue };\r\n }\r\n\r\n // 否则优先使用左边的默认值\r\n return leftDefaultValue ?? rightDefaultValue;\r\n } else {\r\n return undefined; // 其他类型不提供默认值\r\n }\r\n }\r\n\r\n return {\r\n delegatedSlots,\r\n form,\r\n };\r\n}\r\n","<script setup lang=\"ts\">\r\nimport { computed, toRaw, unref, watch } from 'vue';\r\n\r\nimport { useSimpleLocale } from '@admin-kit/composables';\r\nimport { cn, isFunction, triggerWindowResize } from '@admin-kit/shared/utils';\r\n\r\nimport { COMPONENT_MAP } from '../config';\r\nimport { injectFormProps } from '../use-form-context';\r\n\r\nconst { $t } = useSimpleLocale();\r\n\r\nconst [rootProps, form] = injectFormProps();\r\n\r\nconst collapsed = defineModel({ default: false });\r\n\r\nconst resetButtonOptions = computed(() => {\r\n return {\r\n content: `${$t.value('reset')}`,\r\n show: true,\r\n ...unref(rootProps).resetButtonOptions,\r\n };\r\n});\r\n\r\nconst submitButtonOptions = computed(() => {\r\n return {\r\n content: `${$t.value('submit')}`,\r\n show: true,\r\n ...unref(rootProps).submitButtonOptions,\r\n };\r\n});\r\n\r\n// const isQueryForm = computed(() => {\r\n// return !!unref(rootProps).showCollapseButton;\r\n// });\r\n\r\nasync function handleSubmit(e: Event) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n const props = unref(rootProps);\r\n if (!props.formApi) {\r\n return;\r\n }\r\n\r\n const { valid } = await props.formApi.validate();\r\n if (!valid) {\r\n return;\r\n }\r\n\r\n const values = toRaw(await props.formApi.getValues()) ?? {};\r\n await props.handleSubmit?.(values);\r\n}\r\n\r\nasync function handleReset(e: Event) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n const props = unref(rootProps);\r\n\r\n const values = toRaw(await props.formApi?.getValues()) ?? {};\r\n\r\n if (isFunction(props.handleReset)) {\r\n await props.handleReset?.(values);\r\n } else {\r\n form.resetForm();\r\n }\r\n}\r\n\r\nwatch(\r\n () => collapsed.value,\r\n () => {\r\n const props = unref(rootProps);\r\n if (props.collapseTriggerResize) {\r\n triggerWindowResize();\r\n }\r\n },\r\n);\r\n\r\nconst actionWrapperClass = computed(() => {\r\n const props = unref(rootProps);\r\n const actionLayout = props.actionLayout || 'rowEnd';\r\n const actionPosition = props.actionPosition || 'right';\r\n\r\n const cls = [\r\n 'flex',\r\n 'items-center',\r\n 'gap-3',\r\n props.compact ? 'pb-2' : 'pb-4',\r\n props.layout === 'vertical' ? 'self-end' : 'self-center',\r\n props.layout === 'inline' ? '' : 'w-full',\r\n props.actionWrapperClass,\r\n ];\r\n\r\n switch (actionLayout) {\r\n case 'newLine': {\r\n cls.push('col-span-full');\r\n break;\r\n }\r\n case 'rowEnd': {\r\n cls.push('col-[-2/-1]');\r\n break;\r\n }\r\n // 'inline' 不需要额外类名,保持默认\r\n }\r\n\r\n switch (actionPosition) {\r\n case 'center': {\r\n cls.push('justify-center');\r\n break;\r\n }\r\n case 'left': {\r\n cls.push('justify-start');\r\n break;\r\n }\r\n default: {\r\n // case 'right': 默认右对齐\r\n cls.push('justify-end');\r\n break;\r\n }\r\n }\r\n\r\n return cls.join(' ');\r\n});\r\n\r\ndefineExpose({\r\n handleReset,\r\n handleSubmit,\r\n});\r\n</script>\r\n<template>\r\n <div :class=\"cn(actionWrapperClass)\">\r\n <template v-if=\"rootProps.actionButtonsReverse\">\r\n <!-- 提交按钮前 -->\r\n <slot name=\"submit-before\"></slot>\r\n\r\n <component\r\n :is=\"COMPONENT_MAP.PrimaryButton\"\r\n v-if=\"submitButtonOptions.show\"\r\n type=\"button\"\r\n @click=\"handleSubmit\"\r\n v-bind=\"submitButtonOptions\"\r\n >\r\n {{ submitButtonOptions.content }}\r\n </component>\r\n </template>\r\n\r\n <!-- 重置按钮前 -->\r\n <slot name=\"reset-before\"></slot>\r\n\r\n <component\r\n :is=\"COMPONENT_MAP.DefaultButton\"\r\n v-if=\"resetButtonOptions.show\"\r\n type=\"button\"\r\n @click=\"handleReset\"\r\n v-bind=\"resetButtonOptions\"\r\n >\r\n {{ resetButtonOptions.content }}\r\n </component>\r\n\r\n <template v-if=\"!rootProps.actionButtonsReverse\">\r\n <!-- 提交按钮前 -->\r\n <slot name=\"submit-before\"></slot>\r\n\r\n <component\r\n :is=\"COMPONENT_MAP.PrimaryButton\"\r\n v-if=\"submitButtonOptions.show\"\r\n type=\"button\"\r\n @click=\"handleSubmit\"\r\n v-bind=\"submitButtonOptions\"\r\n >\r\n {{ submitButtonOptions.content }}\r\n </component>\r\n </template>\r\n\r\n <!-- 展开按钮前 -->\r\n <slot name=\"expand-before\"></slot>\r\n\r\n <AdminExpandableArrow\r\n class=\"ml-[-0.3em]\"\r\n v-if=\"rootProps.showCollapseButton\"\r\n v-model:model-value=\"collapsed\"\r\n >\r\n <span>{{ collapsed ? $t('expand') : $t('collapse') }}</span>\r\n </AdminExpandableArrow>\r\n\r\n <!-- 展开按钮后 -->\r\n <slot name=\"expand-after\"></slot>\r\n </div>\r\n</template>\r\n","/**\n * vee-validate v4.15.1\n * (c) 2025 Abdelrahman Awad\n * @license MIT\n */\nimport { ZodObject, ZodDefault, ZodFirstPartyTypeKind } from 'zod';\nimport { isNotNestedPath, cleanupNonNestedPath } from 'vee-validate';\n\nconst isObject = (obj) => obj !== null && !!obj && typeof obj === 'object' && !Array.isArray(obj);\nfunction isIndex(value) {\n return Number(value) >= 0;\n}\nfunction isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\nfunction getTag(value) {\n if (value == null) {\n return value === undefined ? '[object Undefined]' : '[object Null]';\n }\n return Object.prototype.toString.call(value);\n}\n// Reference: https://github.com/lodash/lodash/blob/master/isPlainObject.js\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || getTag(value) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n let proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n}\nfunction merge(target, source) {\n Object.keys(source).forEach(key => {\n if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n if (!target[key]) {\n target[key] = {};\n }\n merge(target[key], source[key]);\n return;\n }\n target[key] = source[key];\n });\n return target;\n}\n/**\n * Constructs a path with dot paths for arrays to use brackets to be compatible with vee-validate path syntax\n */\nfunction normalizeFormPath(path) {\n const pathArr = path.split('.');\n if (!pathArr.length) {\n return '';\n }\n let fullPath = String(pathArr[0]);\n for (let i = 1; i < pathArr.length; i++) {\n if (isIndex(pathArr[i])) {\n fullPath += `[${pathArr[i]}]`;\n continue;\n }\n fullPath += `.${pathArr[i]}`;\n }\n return fullPath;\n}\n\n/**\n * Transforms a Zod object schema to Yup's schema\n */\nfunction toTypedSchema(zodSchema, opts) {\n const schema = {\n __type: 'VVTypedSchema',\n async parse(value) {\n const result = await zodSchema.safeParseAsync(value, opts);\n if (result.success) {\n return {\n value: result.data,\n errors: [],\n };\n }\n const errors = {};\n processIssues(result.error.issues, errors);\n return {\n errors: Object.values(errors),\n };\n },\n cast(values) {\n try {\n return zodSchema.parse(values);\n }\n catch (_a) {\n // Zod does not support \"casting\" or not validating a value, so next best thing is getting the defaults and merging them with the provided values.\n const defaults = getDefaults(zodSchema);\n if (isObject(defaults) && isObject(values)) {\n return merge(defaults, values);\n }\n return values;\n }\n },\n describe(path) {\n try {\n if (!path) {\n return {\n required: !zodSchema.isOptional(),\n exists: true,\n };\n }\n const description = getSchemaForPath(path, zodSchema);\n if (!description) {\n return {\n required: false,\n exists: false,\n };\n }\n return {\n required: !description.isOptional(),\n exists: true,\n };\n }\n catch (_a) {\n if ((process.env.NODE_ENV !== 'production')) {\n // eslint-disable-next-line no-console\n console.warn(`Failed to describe path ${path} on the schema, returning a default description.`);\n }\n return {\n required: false,\n exists: false,\n };\n }\n },\n };\n return schema;\n}\nfunction processIssues(issues, errors) {\n issues.forEach(issue => {\n const path = normalizeFormPath(issue.path.join('.'));\n if (issue.code === 'invalid_union') {\n processIssues(issue.unionErrors.flatMap(ue => ue.issues), errors);\n if (!path) {\n return;\n }\n }\n if (!errors[path]) {\n errors[path] = { errors: [], path };\n }\n errors[path].errors.push(issue.message);\n });\n}\n// Zod does not support extracting default values so the next best thing is manually extracting them.\n// https://github.com/colinhacks/zod/issues/1944#issuecomment-1406566175\nfunction getDefaults(schema) {\n if (!(schema instanceof ZodObject)) {\n return undefined;\n }\n return Object.fromEntries(Object.entries(schema.shape).map(([key, value]) => {\n if (value instanceof ZodDefault) {\n return [key, value._def.defaultValue()];\n }\n if (value instanceof ZodObject) {\n return [key, getDefaults(value)];\n }\n return [key, undefined];\n }));\n}\n/**\n * @deprecated use toTypedSchema instead.\n */\nconst toFieldValidator = toTypedSchema;\n/**\n * @deprecated use toTypedSchema instead.\n */\nconst toFormValidator = toTypedSchema;\nfunction getSchemaForPath(path, schema) {\n if (!isObjectSchema(schema)) {\n return null;\n }\n if (isNotNestedPath(path)) {\n return schema.shape[cleanupNonNestedPath(path)];\n }\n const paths = (path || '').split(/\\.|\\[(\\d+)\\]/).filter(Boolean);\n let currentSchema = schema;\n for (let i = 0; i <= paths.length; i++) {\n const p = paths[i];\n if (!p || !currentSchema) {\n return currentSchema;\n }\n if (isObjectSchema(currentSchema)) {\n currentSchema = currentSchema.shape[p] || null;\n continue;\n }\n if (isIndex(p) && isArraySchema(currentSchema)) {\n currentSchema = currentSchema._def.type;\n }\n }\n return null;\n}\nfunction getDefType(schema) {\n return schema._def.typeName;\n}\nfunction isArraySchema(schema) {\n return getDefType(schema) === ZodFirstPartyTypeKind.ZodArray;\n}\nfunction isObjectSchema(schema) {\n return getDefType(schema) === ZodFirstPartyTypeKind.ZodObject;\n}\n\nexport { toFieldValidator, toFormValidator, toTypedSchema };\n","import type { FormRenderProps } from '../types';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { createContext } from '@admin-kit/shadcn-ui';\r\n\r\nexport const [injectRenderFormProps, provideFormRenderProps] =\r\n createContext<FormRenderProps>('FormRenderProps');\r\n\r\nexport const useFormContext = () => {\r\n const formRenderProps = injectRenderFormProps();\r\n\r\n const isVertical = computed(() => formRenderProps.layout === 'vertical');\r\n\r\n const componentMap = computed(() => formRenderProps.componentMap);\r\n const componentBindEventMap = computed(\r\n () => formRenderProps.componentBindEventMap,\r\n );\r\n return {\r\n componentBindEventMap,\r\n componentMap,\r\n isVertical,\r\n };\r\n};\r\n","import type {\r\n FormItemDependencies,\r\n FormSchemaRuleType,\r\n MaybeComponentProps,\r\n} from '../types';\r\n\r\nimport { computed, ref, watch } from 'vue';\r\n\r\nimport { isBoolean, isFunction } from '@admin-kit/shared/utils';\r\n\r\nimport { useFormValues } from 'vee-validate';\r\n\r\nimport { injectRenderFormProps } from './context';\r\n\r\nexport default function useDependencies(\r\n getDependencies: () => FormItemDependencies | undefined,\r\n) {\r\n const values = useFormValues();\r\n\r\n const formRenderProps = injectRenderFormProps();\r\n\r\n const formApi = formRenderProps.form!;\r\n\r\n if (!values) {\r\n throw new Error('useDependencies should be used within <AdminForm>');\r\n }\r\n\r\n const isIf = ref(true);\r\n const isDisabled = ref(false);\r\n const isShow = ref(true);\r\n const isRequired = ref(false);\r\n const dynamicComponentProps = ref<MaybeComponentProps>({});\r\n const dynamicRules = ref<FormSchemaRuleType>();\r\n\r\n const triggerFieldValues = computed(() => {\r\n // 该字段可能会被多个字段触发\r\n const triggerFields = getDependencies()?.triggerFields ?? [];\r\n return triggerFields.map((dep) => {\r\n return values.value[dep];\r\n });\r\n });\r\n\r\n const resetConditionState = () => {\r\n isDisabled.value = false;\r\n isIf.value = true;\r\n isShow.value = true;\r\n isRequired.value = false;\r\n dynamicRules.value = undefined;\r\n dynamicComponentProps.value = {};\r\n };\r\n\r\n watch(\r\n [triggerFieldValues, getDependencies],\r\n async ([_values, dependencies]) => {\r\n if (!dependencies || !dependencies?.triggerFields?.length) {\r\n return;\r\n }\r\n resetConditionState();\r\n const {\r\n componentProps,\r\n disabled,\r\n if: whenIf,\r\n required,\r\n rules,\r\n show,\r\n trigger,\r\n } = dependencies;\r\n\r\n // 1. 优先判断if,如果if为false,则不渲染dom,后续判断也不再执行\r\n const formValues = values.value;\r\n\r\n if (isFunction(whenIf)) {\r\n isIf.value = !!(await whenIf(formValues, formApi));\r\n // 不渲染\r\n if (!isIf.value) return;\r\n } else if (isBoolean(whenIf)) {\r\n isIf.value = whenIf;\r\n if (!isIf.value) return;\r\n }\r\n\r\n // 2. 判断show,如果show为false,则隐藏\r\n if (isFunction(show)) {\r\n isShow.value = !!(await show(formValues, formApi));\r\n if (!isShow.value) return;\r\n } else if (isBoolean(show)) {\r\n isShow.value = show;\r\n if (!isShow.value) return;\r\n }\r\n\r\n if (isFunction(componentProps)) {\r\n dynamicComponentProps.value = await componentProps(formValues, formApi);\r\n }\r\n\r\n if (isFunction(rules)) {\r\n dynamicRules.value = await rules(formValues, formApi);\r\n }\r\n\r\n if (isFunction(disabled)) {\r\n isDisabled.value = !!(await disabled(formValues, formApi));\r\n } else if (isBoolean(disabled)) {\r\n isDisabled.value = disabled;\r\n }\r\n\r\n if (isFunction(required)) {\r\n isRequired.value = !!(await required(formValues, formApi));\r\n }\r\n\r\n if (isFunction(trigger)) {\r\n await trigger(formValues, formApi);\r\n }\r\n },\r\n { deep: true, immediate: true },\r\n );\r\n\r\n return {\r\n dynamicComponentProps,\r\n dynamicRules,\r\n isDisabled,\r\n isIf,\r\n isRequired,\r\n isShow,\r\n };\r\n}\r\n","<script setup lang=\"ts\">\r\nimport type { CustomRenderType } from '../types';\r\n\r\nimport {\r\n FormLabel,\r\n AdminHelpTooltip,\r\n AdminRenderContent,\r\n} from '@admin-kit/shadcn-ui';\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\ninterface Props {\r\n class?: string;\r\n colon?: boolean;\r\n help?: CustomRenderType;\r\n label?: CustomRenderType;\r\n required?: boolean;\r\n}\r\n\r\nconst props = defineProps<Props>();\r\n</script>\r\n\r\n<template>\r\n <FormLabel :class=\"cn('flex items-center', props.class)\">\r\n <span v-if=\"required\" class=\"mr-[2px] text-destructive\">*</span>\r\n <slot></slot>\r\n <AdminHelpTooltip v-if=\"help\" trigger-class=\"size-3.5 ml-1\">\r\n <AdminRenderContent :content=\"help\" />\r\n </AdminHelpTooltip>\r\n <span v-if=\"colon && label\" class=\"ml-[2px]\">:</span>\r\n </FormLabel>\r\n</template>\r\n","import type {\r\n AnyZodObject,\r\n ZodDefault,\r\n ZodEffects,\r\n ZodNumber,\r\n ZodString,\r\n ZodTypeAny,\r\n} from 'zod';\r\n\r\nimport { isObject, isString } from '@admin-kit/shared/utils';\r\n\r\n/**\r\n * Get the lowest level Zod type.\r\n * This will unpack optionals, refinements, etc.\r\n */\r\nexport function getBaseRules<\r\n ChildType extends AnyZodObject | ZodTypeAny = ZodTypeAny,\r\n>(schema: ChildType | ZodEffects<ChildType>): ChildType | null {\r\n if (!schema || isString(schema)) return null;\r\n if ('innerType' in schema._def)\r\n return getBaseRules(schema._def.innerType as ChildType);\r\n\r\n if ('schema' in schema._def)\r\n return getBaseRules(schema._def.schema as ChildType);\r\n\r\n return schema as ChildType;\r\n}\r\n\r\n/**\r\n * Search for a \"ZodDefault\" in the Zod stack and return its value.\r\n */\r\nexport function getDefaultValueInZodStack(schema: ZodTypeAny): any {\r\n if (!schema || isString(schema)) {\r\n return;\r\n }\r\n const typedSchema = schema as unknown as ZodDefault<ZodNumber | ZodString>;\r\n\r\n if (typedSchema._def.typeName === 'ZodDefault')\r\n return typedSchema._def.defaultValue();\r\n\r\n if ('innerType' in typedSchema._def) {\r\n return getDefaultValueInZodStack(\r\n typedSchema._def.innerType as unknown as ZodTypeAny,\r\n );\r\n }\r\n if ('schema' in typedSchema._def) {\r\n return getDefaultValueInZodStack(\r\n (typedSchema._def as any).schema as ZodTypeAny,\r\n );\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function isEventObjectLike(obj: any) {\r\n if (!obj || !isObject(obj)) {\r\n return false;\r\n }\r\n return Reflect.has(obj, 'target') && Reflect.has(obj, 'stopPropagation');\r\n}\r\n","<script setup lang=\"ts\">\r\nimport type { ZodType } from 'zod';\r\n\r\nimport type { FormSchema, MaybeComponentProps } from '../types';\r\n\r\nimport { computed, nextTick, onUnmounted, useTemplateRef, watch } from 'vue';\r\n\r\nimport { CircleAlert } from '@admin-kit/icons';\r\nimport {\r\n FormControl,\r\n FormDescription,\r\n FormField,\r\n FormItem,\r\n FormMessage,\r\n AdminRenderContent,\r\n AdminTooltip,\r\n} from '@admin-kit/shadcn-ui';\r\nimport { cn, isFunction, isObject, isString } from '@admin-kit/shared/utils';\r\n\r\nimport { toTypedSchema } from '@vee-validate/zod';\r\nimport { useFieldError, useFormValues } from 'vee-validate';\r\n\r\nimport { injectComponentRefMap } from '../use-form-context';\r\nimport { injectRenderFormProps, useFormContext } from './context';\r\nimport useDependencies from './dependencies';\r\nimport FormLabel from './form-label.vue';\r\nimport { isEventObjectLike } from './helper';\r\n\r\ninterface Props extends FormSchema {}\r\n\r\nconst {\r\n colon,\r\n commonComponentProps,\r\n component,\r\n componentProps,\r\n dependencies,\r\n description,\r\n disabled,\r\n disabledOnChangeListener,\r\n disabledOnInputListener,\r\n emptyStateValue,\r\n fieldName,\r\n formFieldProps,\r\n hide,\r\n label,\r\n labelClass,\r\n labelWidth,\r\n modelPropName,\r\n renderComponentContent,\r\n rules,\r\n} = defineProps<\r\n Props & {\r\n commonComponentProps: MaybeComponentProps;\r\n }\r\n>();\r\n\r\nconst { componentBindEventMap, componentMap, isVertical } = useFormContext();\r\nconst formRenderProps = injectRenderFormProps();\r\nconst values = useFormValues();\r\nconst errors = useFieldError(fieldName);\r\nconst fieldComponentRef = useTemplateRef<HTMLInputElement>('fieldComponentRef');\r\nconst formApi = formRenderProps.form;\r\nconst compact = computed(() => formRenderProps.compact);\r\nconst isInValid = computed(() => errors.value?.length > 0);\r\n\r\nconst FieldComponent = computed(() => {\r\n const finalComponent = isString(component)\r\n ? componentMap.value[component]\r\n : component;\r\n if (!finalComponent) {\r\n // 组件未注�?\r\n console.warn(`Component ${component} is not registered`);\r\n }\r\n return finalComponent;\r\n});\r\n\r\nconst {\r\n dynamicComponentProps,\r\n dynamicRules,\r\n isDisabled,\r\n isIf,\r\n isRequired,\r\n isShow,\r\n} = useDependencies(() => dependencies);\r\n\r\nconst labelStyle = computed(() => {\r\n return labelClass?.includes('w-') || isVertical.value\r\n ? {}\r\n : {\r\n width: `${labelWidth}px`,\r\n };\r\n});\r\n\r\nconst currentRules = computed(() => {\r\n return dynamicRules.value || rules;\r\n});\r\n\r\nconst visible = computed(() => {\r\n return !hide && isIf.value && isShow.value;\r\n});\r\n\r\nconst shouldRequired = computed(() => {\r\n if (!visible.value) {\r\n return false;\r\n }\r\n\r\n if (!currentRules.value) {\r\n return isRequired.value;\r\n }\r\n\r\n if (isRequired.value) {\r\n return true;\r\n }\r\n\r\n if (isString(currentRules.value)) {\r\n return ['required', 'selectRequired'].includes(currentRules.value);\r\n }\r\n\r\n let isOptional = currentRules?.value?.isOptional?.();\r\n\r\n // 如果有设置默认值,则不是必填,需要特殊处�?\r\n const typeName = currentRules?.value?._def?.typeName;\r\n if (typeName === 'ZodDefault') {\r\n const innerType = currentRules?.value?._def.innerType;\r\n if (innerType) {\r\n isOptional = innerType.isOptional?.();\r\n }\r\n }\r\n\r\n return !isOptional;\r\n});\r\n\r\nconst fieldRules = computed(() => {\r\n if (!visible.value) {\r\n return null;\r\n }\r\n\r\n let rules = currentRules.value;\r\n if (!rules) {\r\n return isRequired.value ? 'required' : null;\r\n }\r\n\r\n if (isString(rules)) {\r\n return rules;\r\n }\r\n\r\n const isOptional = !shouldRequired.value;\r\n if (!isOptional) {\r\n const unwrappedRules = (rules as any)?.unwrap?.();\r\n if (unwrappedRules) {\r\n rules = unwrappedRules;\r\n }\r\n }\r\n return toTypedSchema(rules as ZodType);\r\n});\r\n\r\nconst computedProps = computed(() => {\r\n const finalComponentProps = isFunction(componentProps)\r\n ? componentProps(values.value, formApi!)\r\n : componentProps;\r\n\r\n return {\r\n ...commonComponentProps,\r\n ...finalComponentProps,\r\n ...dynamicComponentProps.value,\r\n };\r\n});\r\n\r\nwatch(\r\n () => computedProps.value?.autofocus,\r\n (value) => {\r\n if (value === true) {\r\n nextTick(() => {\r\n autofocus();\r\n });\r\n }\r\n },\r\n { immediate: true },\r\n);\r\n\r\nconst shouldDisabled = computed(() => {\r\n return isDisabled.value || disabled || computedProps.value?.disabled;\r\n});\r\n\r\nconst customContentRender = computed(() => {\r\n if (!isFunction(renderComponentContent)) {\r\n return {};\r\n }\r\n return renderComponentContent(values.value, formApi!);\r\n});\r\n\r\nconst renderContentKey = computed(() => {\r\n return Object.keys(customContentRender.value);\r\n});\r\n\r\nconst fieldProps = computed(() => {\r\n const rules = fieldRules.value;\r\n return {\r\n keepValue: true,\r\n label: isString(label) ? label : '',\r\n ...(rules ? { rules } : {}),\r\n ...(formFieldProps as Record<string, any>),\r\n };\r\n});\r\n\r\nfunction fieldBindEvent(slotProps: Record<string, any>) {\r\n const modelValue = slotProps.componentField.modelValue;\r\n const handler = slotProps.componentField['onUpdate:modelValue'];\r\n\r\n const bindEventField =\r\n modelPropName ||\r\n (isString(component) ? componentBindEventMap.value?.[component] : null);\r\n\r\n let value = modelValue;\r\n // antd design 的一些组件会传递一�?event 对象\r\n if (modelValue && isObject(modelValue) && bindEventField) {\r\n value = isEventObjectLike(modelValue)\r\n ? modelValue?.target?.[bindEventField]\r\n : (modelValue?.[bindEventField] ?? modelValue);\r\n }\r\n\r\n if (bindEventField) {\r\n return {\r\n [`onUpdate:${bindEventField}`]: handler,\r\n [bindEventField]: value === undefined ? emptyStateValue : value,\r\n onChange: disabledOnChangeListener\r\n ? undefined\r\n : (e: Record<string, any>) => {\r\n const shouldUnwrap = isEventObjectLike(e);\r\n const onChange = slotProps?.componentField?.onChange;\r\n if (!shouldUnwrap) {\r\n return onChange?.(e);\r\n }\r\n\r\n return onChange?.(e?.target?.[bindEventField] ?? e);\r\n },\r\n ...(disabledOnInputListener ? { onInput: undefined } : {}),\r\n };\r\n }\r\n return {\r\n ...(disabledOnInputListener ? { onInput: undefined } : {}),\r\n ...(disabledOnChangeListener ? { onChange: undefined } : {}),\r\n };\r\n}\r\n\r\nfunction createComponentProps(slotProps: Record<string, any>) {\r\n const bindEvents = fieldBindEvent(slotProps);\r\n\r\n const binds = {\r\n ...slotProps.componentField,\r\n ...computedProps.value,\r\n ...bindEvents,\r\n ...(Reflect.has(computedProps.value, 'onChange')\r\n ? { onChange: computedProps.value.onChange }\r\n : {}),\r\n ...(Reflect.has(computedProps.value, 'onInput')\r\n ? { onInput: computedProps.value.onInput }\r\n : {}),\r\n };\r\n\r\n return binds;\r\n}\r\n\r\nfunction autofocus() {\r\n if (\r\n fieldComponentRef.value &&\r\n isFunction(fieldComponentRef.value.focus) &&\r\n // 检查当前是否有元素被聚�?\r\n document.activeElement !== fieldComponentRef.value\r\n ) {\r\n fieldComponentRef.value?.focus?.();\r\n }\r\n}\r\nconst componentRefMap = injectComponentRefMap();\r\nwatch(fieldComponentRef, (componentRef) => {\r\n componentRefMap?.set(fieldName, componentRef);\r\n});\r\nonUnmounted(() => {\r\n if (componentRefMap?.has(fieldName)) {\r\n componentRefMap.delete(fieldName);\r\n }\r\n});\r\n</script>\r\n\r\n<template>\r\n <FormField\r\n v-if=\"!hide && isIf\"\r\n v-bind=\"fieldProps\"\r\n v-slot=\"slotProps\"\r\n :name=\"fieldName\"\r\n >\r\n <FormItem\r\n v-show=\"isShow\"\r\n :class=\"{\r\n 'form-valid-error': isInValid,\r\n 'form-is-required': shouldRequired,\r\n 'flex-col': isVertical,\r\n 'flex-row items-center': !isVertical,\r\n 'pb-4': !compact,\r\n 'pb-2': compact,\r\n }\"\r\n class=\"relative flex\"\r\n v-bind=\"$attrs\"\r\n >\r\n <FormLabel\r\n v-if=\"!hideLabel\"\r\n :class=\"\r\n cn(\r\n 'flex leading-6',\r\n {\r\n 'mr-2 flex-shrink-0 justify-end': !isVertical,\r\n 'mb-1 flex-row': isVertical,\r\n },\r\n labelClass,\r\n )\r\n \"\r\n :help=\"help\"\r\n :colon=\"colon\"\r\n :label=\"label\"\r\n :required=\"shouldRequired && !hideRequiredMark\"\r\n :style=\"labelStyle\"\r\n >\r\n <template v-if=\"label\">\r\n <AdminRenderContent :content=\"label\" />\r\n </template>\r\n </FormLabel>\r\n <div class=\"flex-auto overflow-hidden p-[1px]\">\r\n <div :class=\"cn('relative flex w-full items-center', wrapperClass)\">\r\n <FormControl :class=\"cn(controlClass)\">\r\n <slot\r\n v-bind=\"{\r\n ...slotProps,\r\n ...createComponentProps(slotProps),\r\n disabled: shouldDisabled,\r\n isInValid,\r\n }\"\r\n >\r\n <component\r\n :is=\"FieldComponent\"\r\n ref=\"fieldComponentRef\"\r\n :class=\"{\r\n 'border-destructive hover:border-destructive/80 focus:border-destructive focus:shadow-[0_0_0_2px_rgba(255,38,5,0.06)]':\r\n isInValid,\r\n }\"\r\n v-bind=\"createComponentProps(slotProps)\"\r\n :disabled=\"shouldDisabled\"\r\n >\r\n <template\r\n v-for=\"name in renderContentKey\"\r\n :key=\"name\"\r\n #[name]=\"renderSlotProps\"\r\n >\r\n <AdminRenderContent\r\n :content=\"customContentRender[name]\"\r\n v-bind=\"{ ...renderSlotProps, formContext: slotProps }\"\r\n />\r\n </template>\r\n <!-- <slot></slot> -->\r\n </component>\r\n <AdminTooltip\r\n v-if=\"compact && isInValid\"\r\n :delay-duration=\"300\"\r\n side=\"left\"\r\n >\r\n <template #trigger>\r\n <slot name=\"trigger\">\r\n <CircleAlert\r\n :class=\"\r\n cn(\r\n 'inline-flex size-5 cursor-pointer text-foreground/80 hover:text-foreground',\r\n )\r\n \"\r\n />\r\n </slot>\r\n </template>\r\n <FormMessage />\r\n </AdminTooltip>\r\n </slot>\r\n </FormControl>\r\n <!-- 自定义后缀 -->\r\n <div v-if=\"suffix\" class=\"ml-1\">\r\n <AdminRenderContent :content=\"suffix\" />\r\n </div>\r\n <FormDescription v-if=\"description\" class=\"ml-1\">\r\n <AdminRenderContent :content=\"description\" />\r\n </FormDescription>\r\n </div>\r\n\r\n <Transition name=\"slide-up\" v-if=\"!compact\">\r\n <FormMessage class=\"absolute\" />\r\n </Transition>\r\n </div>\r\n </FormItem>\r\n </FormField>\r\n</template>\r\n","import type { FormRenderProps } from '../types';\r\n\r\nimport { computed, nextTick, onMounted, ref, useTemplateRef, watch } from 'vue';\r\n\r\nimport {\r\n breakpointsTailwind,\r\n useBreakpoints,\r\n useElementVisibility,\r\n} from '@vueuse/core';\r\n\r\n/**\r\n * 动态计算行数\r\n */\r\nexport function useExpandable(props: FormRenderProps) {\r\n const wrapperRef = useTemplateRef<HTMLElement>('wrapperRef');\r\n const isVisible = useElementVisibility(wrapperRef);\r\n const rowMapping = ref<Record<number, number>>({});\r\n // 是否已经计算过一次\r\n const isCalculated = ref(false);\r\n\r\n const breakpoints = useBreakpoints(breakpointsTailwind);\r\n\r\n const keepFormItemIndex = computed(() => {\r\n const rows = props.collapsedRows ?? 1;\r\n const mapping = rowMapping.value;\r\n let maxItem = 0;\r\n for (let index = 1; index <= rows; index++) {\r\n maxItem += mapping?.[index] ?? 0;\r\n }\r\n // 保持一行\r\n return maxItem - 1 || 1;\r\n });\r\n\r\n watch(\r\n [\r\n () => props.showCollapseButton,\r\n () => breakpoints.active().value,\r\n () => props.schema?.length,\r\n () => isVisible.value,\r\n ],\r\n async ([val]) => {\r\n if (val) {\r\n await nextTick();\r\n rowMapping.value = {};\r\n isCalculated.value = false;\r\n await calculateRowMapping();\r\n }\r\n },\r\n );\r\n\r\n async function calculateRowMapping() {\r\n if (!props.showCollapseButton) {\r\n return;\r\n }\r\n\r\n await nextTick();\r\n if (!wrapperRef.value) {\r\n return;\r\n }\r\n // 小屏幕不计算\r\n // if (breakpoints.smaller('sm').value) {\r\n // // 保持一行\r\n // rowMapping.value = { 1: 2 };\r\n // return;\r\n // }\r\n\r\n const formItems = [...wrapperRef.value.children];\r\n\r\n const container = wrapperRef.value;\r\n const containerStyles = window.getComputedStyle(container);\r\n const rowHeights = containerStyles\r\n .getPropertyValue('grid-template-rows')\r\n .split(' ');\r\n\r\n const containerRect = container?.getBoundingClientRect();\r\n\r\n formItems.forEach((el) => {\r\n const itemRect = el.getBoundingClientRect();\r\n\r\n // 计算元素在第几行\r\n const itemTop = itemRect.top - containerRect.top;\r\n let rowStart = 0;\r\n let cumulativeHeight = 0;\r\n\r\n for (const [i, rowHeight] of rowHeights.entries()) {\r\n cumulativeHeight += Number.parseFloat(rowHeight);\r\n if (itemTop < cumulativeHeight) {\r\n rowStart = i + 1;\r\n break;\r\n }\r\n }\r\n if (rowStart > (props?.collapsedRows ?? 1)) {\r\n return;\r\n }\r\n rowMapping.value[rowStart] = (rowMapping.value[rowStart] ?? 0) + 1;\r\n isCalculated.value = true;\r\n });\r\n }\r\n\r\n onMounted(() => {\r\n calculateRowMapping();\r\n });\r\n\r\n return { isCalculated, keepFormItemIndex, wrapperRef };\r\n}\r\n","<script setup lang=\"ts\">\r\nimport type { GenericObject } from 'vee-validate';\r\nimport type { ZodTypeAny } from 'zod';\r\n\r\nimport type {\r\n FormCommonConfig,\r\n FormRenderProps,\r\n FormSchema,\r\n FormShape,\r\n} from '../types';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { Form } from '@admin-kit/shadcn-ui';\r\nimport {\r\n cn,\r\n isFunction,\r\n isString,\r\n mergeWithArrayOverride,\r\n} from '@admin-kit/shared/utils';\r\n\r\nimport { provideFormRenderProps } from './context';\r\nimport { useExpandable } from './expandable';\r\nimport FormField from './form-field.vue';\r\nimport { getBaseRules, getDefaultValueInZodStack } from './helper';\r\n\r\ninterface Props extends FormRenderProps {}\r\n\r\nconst props = withDefaults(\r\n defineProps<Props & { globalCommonConfig?: FormCommonConfig }>(),\r\n {\r\n collapsedRows: 1,\r\n commonConfig: () => ({}),\r\n globalCommonConfig: () => ({}),\r\n showCollapseButton: false,\r\n wrapperClass: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3',\r\n },\r\n);\r\n\r\nconst emits = defineEmits<{\r\n submit: [event: any];\r\n}>();\r\n\r\nconst wrapperClass = computed(() => {\r\n const cls = ['flex'];\r\n if (props.layout === 'inline') {\r\n cls.push('flex-wrap gap-x-2');\r\n } else {\r\n cls.push(props.compact ? 'gap-x-2' : 'gap-x-4', 'flex-col grid');\r\n }\r\n return cn(...cls, props.wrapperClass);\r\n});\r\n\r\nprovideFormRenderProps(props);\r\n\r\nconst { isCalculated, keepFormItemIndex, wrapperRef } = useExpandable(props);\r\n\r\nconst shapes = computed(() => {\r\n const resultShapes: FormShape[] = [];\r\n props.schema?.forEach((schema) => {\r\n const { fieldName } = schema;\r\n const rules = schema.rules as ZodTypeAny;\r\n\r\n let typeName = '';\r\n if (rules && !isString(rules)) {\r\n typeName = rules._def.typeName;\r\n }\r\n\r\n const baseRules = getBaseRules(rules) as ZodTypeAny;\r\n\r\n resultShapes.push({\r\n default: getDefaultValueInZodStack(rules),\r\n fieldName,\r\n required: !['ZodNullable', 'ZodOptional'].includes(typeName),\r\n rules: baseRules,\r\n });\r\n });\r\n return resultShapes;\r\n});\r\n\r\nconst formComponent = computed(() => (props.form ? 'form' : Form));\r\n\r\nconst formComponentProps = computed(() => {\r\n return props.form\r\n ? {\r\n onSubmit: props.form.handleSubmit((val) => emits('submit', val)),\r\n }\r\n : {\r\n onSubmit: (val: GenericObject) => emits('submit', val),\r\n };\r\n});\r\n\r\nconst formCollapsed = computed(() => {\r\n return props.collapsed && isCalculated.value;\r\n});\r\n\r\nconst computedSchema = computed(\r\n (): (Omit<FormSchema, 'formFieldProps'> & {\r\n commonComponentProps: Record<string, any>;\r\n formFieldProps: Record<string, any>;\r\n })[] => {\r\n const {\r\n colon = false,\r\n componentProps = {},\r\n controlClass = '',\r\n disabled,\r\n disabledOnChangeListener = true,\r\n disabledOnInputListener = true,\r\n emptyStateValue = undefined,\r\n formFieldProps = {},\r\n formItemClass = '',\r\n hideLabel = false,\r\n hideRequiredMark = false,\r\n labelClass = '',\r\n labelWidth = 100,\r\n modelPropName = '',\r\n wrapperClass = '',\r\n } = mergeWithArrayOverride(props.commonConfig, props.globalCommonConfig);\r\n return (props.schema || []).map((schema, index) => {\r\n const keepIndex = keepFormItemIndex.value;\r\n\r\n const hidden =\r\n // 折叠状态 & 显示折叠按钮 & 当前索引大于保留索引\r\n props.showCollapseButton && !!formCollapsed.value && keepIndex\r\n ? keepIndex <= index\r\n : false;\r\n\r\n // 处理函数形式的formItemClass\r\n let resolvedSchemaFormItemClass = schema.formItemClass;\r\n if (isFunction(schema.formItemClass)) {\r\n try {\r\n resolvedSchemaFormItemClass = schema.formItemClass();\r\n } catch (error) {\r\n console.error('Error calling formItemClass function:', error);\r\n resolvedSchemaFormItemClass = '';\r\n }\r\n }\r\n\r\n return {\r\n colon,\r\n disabled,\r\n disabledOnChangeListener,\r\n disabledOnInputListener,\r\n emptyStateValue,\r\n hideLabel,\r\n hideRequiredMark,\r\n labelWidth,\r\n modelPropName,\r\n wrapperClass,\r\n ...schema,\r\n commonComponentProps: componentProps,\r\n componentProps: schema.componentProps,\r\n controlClass: cn(controlClass, schema.controlClass),\r\n formFieldProps: {\r\n ...formFieldProps,\r\n ...schema.formFieldProps,\r\n },\r\n formItemClass: cn(\r\n 'flex-shrink-0',\r\n { hidden },\r\n formItemClass,\r\n resolvedSchemaFormItemClass,\r\n ),\r\n labelClass: cn(labelClass, schema.labelClass),\r\n };\r\n });\r\n },\r\n);\r\n</script>\r\n\r\n<template>\r\n <component :is=\"formComponent\" v-bind=\"formComponentProps\">\r\n <div ref=\"wrapperRef\" :class=\"wrapperClass\">\r\n <template v-for=\"cSchema in computedSchema\" :key=\"cSchema.fieldName\">\r\n <!-- <div v-if=\"$slots[cSchema.fieldName]\" :class=\"cSchema.formItemClass\">\r\n <slot :definition=\"cSchema\" :name=\"cSchema.fieldName\"> </slot>\r\n </div> -->\r\n <FormField\r\n v-bind=\"cSchema\"\r\n :class=\"cSchema.formItemClass\"\r\n :rules=\"cSchema.rules\"\r\n >\r\n <template #default=\"slotProps\">\r\n <slot v-bind=\"slotProps\" :name=\"cSchema.fieldName\"> </slot>\r\n </template>\r\n </FormField>\r\n </template>\r\n <slot :shapes=\"shapes\"></slot>\r\n </div>\r\n </component>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { Recordable } from '@admin-kit/typings';\r\n\r\nimport type { ExtendedFormApi, AdminFormProps } from './types';\r\n\r\n// import { toRaw, watch } from 'vue';\r\nimport { nextTick, onMounted, watch } from 'vue';\r\n\r\nimport { useForwardPriorityValues } from '@admin-kit/composables';\r\nimport { cloneDeep, get, isEqual, set } from '@admin-kit/shared/utils';\r\n\r\nimport { useDebounceFn } from '@vueuse/core';\r\n\r\nimport FormActions from './components/form-actions.vue';\r\nimport {\r\n COMPONENT_BIND_EVENT_MAP,\r\n COMPONENT_MAP,\r\n DEFAULT_FORM_COMMON_CONFIG,\r\n} from './config';\r\nimport { Form } from './form-render';\r\nimport {\r\n provideComponentRefMap,\r\n provideFormProps,\r\n useFormInitial,\r\n} from './use-form-context';\r\n// 通过 extends 会导致热更新卡死,所以重复写了一遍\r\ninterface Props extends AdminFormProps {\r\n formApi?: ExtendedFormApi;\r\n}\r\n\r\nconst props = defineProps<Props>();\r\n\r\nconst state = props.formApi?.useStore?.();\r\n\r\nconst forward = useForwardPriorityValues(props, state);\r\n\r\nconst componentRefMap = new Map<string, unknown>();\r\n\r\nconst { delegatedSlots, form } = useFormInitial(forward);\r\n\r\nprovideFormProps([forward, form]);\r\nprovideComponentRefMap(componentRefMap);\r\n\r\nprops.formApi?.mount?.(form, componentRefMap);\r\n\r\nconst handleUpdateCollapsed = (value: boolean) => {\r\n props.formApi?.setState({ collapsed: value });\r\n // 触发收起展开状态变化回调\r\n forward.value.handleCollapsedChange?.(value);\r\n};\r\n\r\nfunction handleKeyDownEnter(event: KeyboardEvent) {\r\n if (!state?.value.submitOnEnter || !forward.value.formApi?.isMounted) {\r\n return;\r\n }\r\n // 如果是 textarea 不阻止默认行为,否则会导致无法换行。\r\n // 跳过 textarea 的回车提交处理\r\n if (event.target instanceof HTMLTextAreaElement) {\r\n return;\r\n }\r\n event.preventDefault();\r\n\r\n forward.value.formApi?.validateAndSubmitForm();\r\n}\r\n\r\nconst handleValuesChangeDebounced = useDebounceFn(async () => {\r\n state?.value.submitOnChange && forward.value.formApi?.validateAndSubmitForm();\r\n}, 300);\r\n\r\nconst valuesCache: Recordable<any> = {};\r\n\r\nonMounted(async () => {\r\n // 只在挂载后开始监听,form.values会有一个初始化的过程\r\n await nextTick();\r\n watch(\r\n () => form.values,\r\n async (newVal) => {\r\n if (forward.value.handleValuesChange) {\r\n const fields = state?.value.schema?.map((item) => {\r\n return item.fieldName;\r\n });\r\n\r\n if (fields && fields.length > 0) {\r\n const changedFields: string[] = [];\r\n fields.forEach((field) => {\r\n const newFieldValue = get(newVal, field);\r\n const oldFieldValue = get(valuesCache, field);\r\n if (!isEqual(newFieldValue, oldFieldValue)) {\r\n changedFields.push(field);\r\n set(valuesCache, field, newFieldValue);\r\n }\r\n });\r\n\r\n if (changedFields.length > 0) {\r\n // 调用handleValuesChange回调,传入所有表单值的深拷贝和变更的字段列表\r\n const values = await forward.value.formApi?.getValues();\r\n forward.value.handleValuesChange(\r\n cloneDeep(values ?? {}) as Record<string, any>,\r\n changedFields,\r\n );\r\n }\r\n }\r\n }\r\n handleValuesChangeDebounced();\r\n },\r\n { deep: true },\r\n );\r\n});\r\n</script>\r\n\r\n<template>\r\n <Form\r\n @keydown.enter=\"handleKeyDownEnter\"\r\n v-bind=\"forward\"\r\n :collapsed=\"state?.collapsed\"\r\n :component-bind-event-map=\"COMPONENT_BIND_EVENT_MAP\"\r\n :component-map=\"COMPONENT_MAP\"\r\n :form=\"form\"\r\n :global-common-config=\"DEFAULT_FORM_COMMON_CONFIG\"\r\n >\r\n <template\r\n v-for=\"slotName in delegatedSlots\"\r\n :key=\"slotName\"\r\n #[slotName]=\"slotProps\"\r\n >\r\n <slot :name=\"slotName\" v-bind=\"slotProps\"></slot>\r\n </template>\r\n <template #default=\"slotProps\">\r\n <slot v-bind=\"slotProps\">\r\n <FormActions\r\n v-if=\"forward.showDefaultActions\"\r\n :model-value=\"state?.collapsed\"\r\n @update:model-value=\"handleUpdateCollapsed\"\r\n >\r\n <template #reset-before=\"resetSlotProps\">\r\n <slot name=\"reset-before\" v-bind=\"resetSlotProps\"></slot>\r\n </template>\r\n <template #submit-before=\"submitSlotProps\">\r\n <slot name=\"submit-before\" v-bind=\"submitSlotProps\"></slot>\r\n </template>\r\n <template #expand-before=\"expandBeforeSlotProps\">\r\n <slot name=\"expand-before\" v-bind=\"expandBeforeSlotProps\"></slot>\r\n </template>\r\n <template #expand-after=\"expandAfterSlotProps\">\r\n <slot name=\"expand-after\" v-bind=\"expandAfterSlotProps\"></slot>\r\n </template>\r\n </FormActions>\r\n </slot>\r\n </template>\r\n </Form>\r\n</template>\r\n","import type {\r\n BaseFormComponentType,\r\n ExtendedFormApi,\r\n AdminFormProps,\r\n} from './types';\r\n\r\nimport { defineComponent, h, isReactive, onBeforeUnmount, watch } from 'vue';\r\n\r\nimport { useStore } from '@admin-kit/shared/store';\r\n\r\nimport { FormApi } from './form-api';\r\nimport AdminUseForm from './admin-use-form.vue';\r\n\r\nexport function useAdminForm<\r\n T extends BaseFormComponentType = BaseFormComponentType,\r\n>(options: AdminFormProps<T>) {\r\n const IS_REACTIVE = isReactive(options);\r\n const api = new FormApi(options);\r\n const extendedApi: ExtendedFormApi = api as never;\r\n extendedApi.useStore = (selector) => {\r\n return useStore(api.store, selector);\r\n };\r\n\r\n const Form = defineComponent(\r\n (props: AdminFormProps, { attrs, slots }) => {\r\n onBeforeUnmount(() => {\r\n api.unmount();\r\n });\r\n api.setState({ ...props, ...attrs });\r\n return () =>\r\n h(AdminUseForm, { ...props, ...attrs, formApi: extendedApi }, slots);\r\n },\r\n {\r\n name: 'AdminUseForm',\r\n inheritAttrs: false,\r\n },\r\n );\r\n // Add reactivity support\r\n if (IS_REACTIVE) {\r\n watch(\r\n () => options.schema,\r\n () => {\r\n api.setState({ schema: options.schema });\r\n },\r\n { immediate: true },\r\n );\r\n }\r\n\r\n return [Form, extendedApi] as const;\r\n}\r\n","<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue';\r\n\r\nimport type { ContentCompactType } from '@admin-kit/typings';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { useLayoutContentStyle } from '@admin-kit/composables';\r\nimport { Slot } from '@admin-kit/shadcn-ui';\r\n\r\ninterface Props {\r\n /**\r\n * 内容区域定宽\r\n */\r\n contentCompact: ContentCompactType;\r\n /**\r\n * 定宽布局宽度\r\n */\r\n contentCompactWidth: number;\r\n padding: number;\r\n paddingBottom: number;\r\n paddingLeft: number;\r\n paddingRight: number;\r\n paddingTop: number;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {});\r\n\r\nconst { contentElement, overlayStyle } = useLayoutContentStyle();\r\n\r\nconst style = computed((): CSSProperties => {\r\n const {\r\n contentCompact,\r\n padding,\r\n paddingBottom,\r\n paddingLeft,\r\n paddingRight,\r\n paddingTop,\r\n } = props;\r\n\r\n const compactStyle: CSSProperties =\r\n contentCompact === 'compact'\r\n ? { margin: '0 auto', width: `${props.contentCompactWidth}px` }\r\n : {};\r\n return {\r\n ...compactStyle,\r\n flex: 1,\r\n padding: `${padding}px`,\r\n paddingBottom: `${paddingBottom}px`,\r\n paddingLeft: `${paddingLeft}px`,\r\n paddingRight: `${paddingRight}px`,\r\n paddingTop: `${paddingTop}px`,\r\n };\r\n});\r\n</script>\r\n\r\n<template>\r\n <main ref=\"contentElement\" :style=\"style\" class=\"relative bg-background-deep\">\r\n <Slot :style=\"overlayStyle\">\r\n <slot name=\"overlay\"></slot>\r\n </Slot>\r\n <slot></slot>\r\n </main>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue';\r\n\r\nimport { computed } from 'vue';\r\n\r\ninterface Props {\r\n /**\r\n * 是否固定在底部\r\n */\r\n fixed?: boolean;\r\n height: number;\r\n /**\r\n * 是否显示\r\n * @default true\r\n */\r\n show?: boolean;\r\n width: string;\r\n zIndex: number;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n show: true,\r\n});\r\n\r\nconst style = computed((): CSSProperties => {\r\n const { fixed, height, show, width, zIndex } = props;\r\n return {\r\n height: `${height}px`,\r\n marginBottom: show ? '0' : `-${height}px`,\r\n position: fixed ? 'fixed' : 'static',\r\n width,\r\n zIndex,\r\n };\r\n});\r\n</script>\r\n\r\n<template>\r\n <footer\r\n :style=\"style\"\r\n class=\"bottom-0 w-full bg-background-deep transition-all duration-200\"\r\n >\r\n <slot></slot>\r\n </footer>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue';\r\n\r\nimport { computed, useSlots } from 'vue';\r\n\r\ninterface Props {\r\n /**\r\n * 横屏\r\n */\r\n fullWidth: boolean;\r\n /**\r\n * 高度\r\n */\r\n height: number;\r\n /**\r\n * 是否移动端\r\n */\r\n isMobile: boolean;\r\n /**\r\n * 是否显示\r\n */\r\n show: boolean;\r\n /**\r\n * 侧边菜单宽度\r\n */\r\n sidebarWidth: number;\r\n /**\r\n * 主题\r\n */\r\n theme: string | undefined;\r\n /**\r\n * 宽度\r\n */\r\n width: string;\r\n /**\r\n * zIndex\r\n */\r\n zIndex: number;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {});\r\n\r\nconst slots = useSlots();\r\n\r\nconst style = computed((): CSSProperties => {\r\n const { fullWidth, height, show } = props;\r\n const right = !show || !fullWidth ? undefined : 0;\r\n\r\n return {\r\n height: `${height}px`,\r\n marginTop: show ? 0 : `-${height}px`,\r\n right,\r\n };\r\n});\r\n\r\nconst logoStyle = computed((): CSSProperties => {\r\n return {\r\n minWidth: `${props.isMobile ? 40 : props.sidebarWidth}px`,\r\n };\r\n});\r\n</script>\r\n\r\n<template>\r\n <header\r\n :class=\"theme\"\r\n :style=\"style\"\r\n class=\"top-0 flex w-full flex-[0_0_auto] items-center border-b border-border bg-header pl-2 transition-[margin-top] duration-200\"\r\n >\r\n <div v-if=\"slots.logo\" :style=\"logoStyle\">\r\n <slot name=\"logo\"></slot>\r\n </div>\r\n\r\n <slot name=\"toggle-button\"> </slot>\r\n\r\n <slot></slot>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { ChevronsLeft, ChevronsRight } from '@admin-kit/icons';\r\n\r\nconst collapsed = defineModel<boolean>('collapsed');\r\n\r\nfunction handleCollapsed() {\r\n collapsed.value = !collapsed.value;\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"flex-center absolute bottom-2 left-3 z-10 cursor-pointer rounded-sm bg-accent p-1 text-foreground/60 hover:bg-accent-hover hover:text-foreground\"\r\n @click.stop=\"handleCollapsed\"\r\n >\r\n <ChevronsRight v-if=\"collapsed\" class=\"size-4\" />\r\n <ChevronsLeft v-else class=\"size-4\" />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Pin, PinOff } from '@admin-kit/icons';\r\n\r\nconst expandOnHover = defineModel<boolean>('expandOnHover');\r\n\r\nfunction toggleFixed() {\r\n expandOnHover.value = !expandOnHover.value;\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"flex-center absolute bottom-2 right-3 z-10 cursor-pointer rounded-sm bg-accent p-[5px] text-foreground/60 transition-all duration-300 hover:bg-accent-hover hover:text-foreground\"\r\n @click=\"toggleFixed\"\r\n >\r\n <PinOff v-if=\"!expandOnHover\" class=\"size-3.5\" />\r\n <Pin v-else class=\"size-3.5\" />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue';\r\n\r\nimport { computed, shallowRef, useSlots, watchEffect } from 'vue';\r\n\r\nimport { AdminScrollbar } from '@admin-kit/shadcn-ui';\r\n\r\nimport { useScrollLock } from '@vueuse/core';\r\n\r\nimport { SidebarCollapseButton, SidebarFixedButton } from './widgets';\r\n\r\ninterface Props {\r\n /**\r\n * 折叠区域高度\r\n * @default 42\r\n */\r\n collapseHeight?: number;\r\n /**\r\n * 折叠宽度\r\n * @default 48\r\n */\r\n collapseWidth?: number;\r\n /**\r\n * 隐藏的dom是否可见\r\n * @default true\r\n */\r\n domVisible?: boolean;\r\n /**\r\n * 扩展区域宽度\r\n */\r\n extraWidth: number;\r\n /**\r\n * 固定扩展区域\r\n * @default false\r\n */\r\n fixedExtra?: boolean;\r\n /**\r\n * 头部高度\r\n */\r\n headerHeight: number;\r\n /**\r\n * 是否侧边混合模式\r\n * @default false\r\n */\r\n isSidebarMixed?: boolean;\r\n /**\r\n * 顶部margin\r\n * @default 60\r\n */\r\n marginTop?: number;\r\n /**\r\n * 混合菜单宽度\r\n * @default 80\r\n */\r\n mixedWidth?: number;\r\n /**\r\n * 顶部padding\r\n * @default 60\r\n */\r\n paddingTop?: number;\r\n /**\r\n * 是否显示\r\n * @default true\r\n */\r\n show?: boolean;\r\n /**\r\n * 显示折叠按钮\r\n * @default true\r\n */\r\n showCollapseButton?: boolean;\r\n /**\r\n * 显示固定按钮\r\n * @default true\r\n */\r\n showFixedButton?: boolean;\r\n /**\r\n * 主题\r\n */\r\n theme: string;\r\n\r\n /**\r\n * 宽度\r\n */\r\n width: number;\r\n /**\r\n * zIndex\r\n * @default 0\r\n */\r\n zIndex?: number;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n collapseHeight: 42,\r\n collapseWidth: 48,\r\n domVisible: true,\r\n fixedExtra: false,\r\n isSidebarMixed: false,\r\n marginTop: 0,\r\n mixedWidth: 70,\r\n paddingTop: 0,\r\n show: true,\r\n showCollapseButton: true,\r\n showFixedButton: true,\r\n zIndex: 0,\r\n});\r\n\r\nconst emit = defineEmits<{ leave: [] }>();\r\nconst collapse = defineModel<boolean>('collapse');\r\nconst extraCollapse = defineModel<boolean>('extraCollapse');\r\nconst expandOnHovering = defineModel<boolean>('expandOnHovering');\r\nconst expandOnHover = defineModel<boolean>('expandOnHover');\r\nconst extraVisible = defineModel<boolean>('extraVisible');\r\n\r\nconst isLocked = useScrollLock(document.body);\r\nconst slots = useSlots();\r\n\r\nconst asideRef = shallowRef<HTMLDivElement | null>();\r\n\r\nconst hiddenSideStyle = computed((): CSSProperties => calcMenuWidthStyle(true));\r\n\r\nconst style = computed((): CSSProperties => {\r\n const { isSidebarMixed, marginTop, paddingTop, zIndex } = props;\r\n\r\n return {\r\n '--scroll-shadow': 'var(--sidebar)',\r\n ...calcMenuWidthStyle(false),\r\n height: `calc(100% - ${marginTop}px)`,\r\n marginTop: `${marginTop}px`,\r\n paddingTop: `${paddingTop}px`,\r\n zIndex,\r\n ...(isSidebarMixed && extraVisible.value ? { transition: 'none' } : {}),\r\n };\r\n});\r\n\r\nconst extraStyle = computed((): CSSProperties => {\r\n const { extraWidth, show, width, zIndex } = props;\r\n\r\n return {\r\n left: `${width}px`,\r\n width: extraVisible.value && show ? `${extraWidth}px` : 0,\r\n zIndex,\r\n };\r\n});\r\n\r\nconst extraTitleStyle = computed((): CSSProperties => {\r\n const { headerHeight } = props;\r\n\r\n return {\r\n height: `${headerHeight - 1}px`,\r\n };\r\n});\r\n\r\nconst contentWidthStyle = computed((): CSSProperties => {\r\n const { collapseWidth, fixedExtra, isSidebarMixed, mixedWidth } = props;\r\n if (isSidebarMixed && fixedExtra) {\r\n return { width: `${collapse.value ? collapseWidth : mixedWidth}px` };\r\n }\r\n return {};\r\n});\r\n\r\nconst contentStyle = computed((): CSSProperties => {\r\n const { collapseHeight, headerHeight } = props;\r\n\r\n return {\r\n height: `calc(100% - ${headerHeight + collapseHeight}px)`,\r\n paddingTop: '8px',\r\n ...contentWidthStyle.value,\r\n };\r\n});\r\n\r\nconst headerStyle = computed((): CSSProperties => {\r\n const { headerHeight, isSidebarMixed } = props;\r\n\r\n return {\r\n ...(isSidebarMixed ? { display: 'flex', justifyContent: 'center' } : {}),\r\n height: `${headerHeight - 1}px`,\r\n ...contentWidthStyle.value,\r\n };\r\n});\r\n\r\nconst extraContentStyle = computed((): CSSProperties => {\r\n const { collapseHeight, headerHeight } = props;\r\n return {\r\n height: `calc(100% - ${headerHeight + collapseHeight}px)`,\r\n };\r\n});\r\n\r\nconst collapseStyle = computed((): CSSProperties => {\r\n return {\r\n height: `${props.collapseHeight}px`,\r\n };\r\n});\r\n\r\nwatchEffect(() => {\r\n extraVisible.value = props.fixedExtra ? true : extraVisible.value;\r\n});\r\n\r\nfunction calcMenuWidthStyle(isHiddenDom: boolean): CSSProperties {\r\n const { extraWidth, fixedExtra, isSidebarMixed, show, width } = props;\r\n\r\n let widthValue =\r\n width === 0\r\n ? '0px'\r\n : `${width + (isSidebarMixed && fixedExtra && extraVisible.value ? extraWidth : 0)}px`;\r\n\r\n const { collapseWidth } = props;\r\n\r\n if (isHiddenDom && expandOnHovering.value && !expandOnHover.value) {\r\n widthValue = `${collapseWidth}px`;\r\n }\r\n\r\n return {\r\n ...(widthValue === '0px' ? { overflow: 'hidden' } : {}),\r\n flex: `0 0 ${widthValue}`,\r\n marginLeft: show ? 0 : `-${widthValue}`,\r\n maxWidth: widthValue,\r\n minWidth: widthValue,\r\n width: widthValue,\r\n };\r\n}\r\n\r\nfunction handleMouseenter(e: MouseEvent) {\r\n if (e?.offsetX < 10) {\r\n return;\r\n }\r\n\r\n // 未开启和未折叠状态不生效\r\n if (expandOnHover.value) {\r\n return;\r\n }\r\n if (!expandOnHovering.value) {\r\n collapse.value = false;\r\n }\r\n if (props.isSidebarMixed) {\r\n isLocked.value = true;\r\n }\r\n expandOnHovering.value = true;\r\n}\r\n\r\nfunction handleMouseleave() {\r\n emit('leave');\r\n if (props.isSidebarMixed) {\r\n isLocked.value = false;\r\n }\r\n if (expandOnHover.value) {\r\n return;\r\n }\r\n\r\n expandOnHovering.value = false;\r\n collapse.value = true;\r\n extraVisible.value = false;\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"domVisible\"\r\n :class=\"theme\"\r\n :style=\"hiddenSideStyle\"\r\n class=\"h-full transition-all duration-150\"\r\n ></div>\r\n <aside\r\n :class=\"[\r\n theme,\r\n {\r\n 'bg-sidebar-deep': isSidebarMixed,\r\n 'border-r border-border bg-sidebar': !isSidebarMixed,\r\n },\r\n ]\"\r\n :style=\"style\"\r\n class=\"fixed left-0 top-0 h-full transition-all duration-150\"\r\n @mouseenter=\"handleMouseenter\"\r\n @mouseleave=\"handleMouseleave\"\r\n >\r\n <SidebarFixedButton\r\n v-if=\"!collapse && !isSidebarMixed && showFixedButton\"\r\n v-model:expand-on-hover=\"expandOnHover\"\r\n />\r\n <div v-if=\"slots.logo\" :style=\"headerStyle\">\r\n <slot name=\"logo\"></slot>\r\n </div>\r\n <AdminScrollbar :style=\"contentStyle\" shadow shadow-border>\r\n <slot></slot>\r\n </AdminScrollbar>\r\n\r\n <div :style=\"collapseStyle\"></div>\r\n <SidebarCollapseButton\r\n v-if=\"showCollapseButton && !isSidebarMixed\"\r\n v-model:collapsed=\"collapse\"\r\n />\r\n <div\r\n v-if=\"isSidebarMixed\"\r\n ref=\"asideRef\"\r\n :class=\"{\r\n 'border-l': extraVisible,\r\n }\"\r\n :style=\"extraStyle\"\r\n class=\"fixed top-0 h-full overflow-hidden border-r border-border bg-sidebar transition-all duration-200\"\r\n >\r\n <SidebarCollapseButton\r\n v-if=\"isSidebarMixed && expandOnHover\"\r\n v-model:collapsed=\"extraCollapse\"\r\n />\r\n\r\n <SidebarFixedButton\r\n v-if=\"!extraCollapse\"\r\n v-model:expand-on-hover=\"expandOnHover\"\r\n />\r\n <div v-if=\"!extraCollapse\" :style=\"extraTitleStyle\" class=\"pl-2\">\r\n <slot name=\"extra-title\"></slot>\r\n </div>\r\n <AdminScrollbar\r\n :style=\"extraContentStyle\"\r\n class=\"border-border py-2\"\r\n shadow\r\n shadow-border\r\n >\r\n <slot name=\"extra\"></slot>\r\n </AdminScrollbar>\r\n </div>\r\n </aside>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue';\r\n\r\nimport { computed } from 'vue';\r\n\r\ninterface Props {\r\n /**\r\n * 高度\r\n */\r\n height: number;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {});\r\n\r\nconst style = computed((): CSSProperties => {\r\n const { height } = props;\r\n return {\r\n height: `${height}px`,\r\n };\r\n});\r\n</script>\r\n\r\n<template>\r\n <section\r\n :style=\"style\"\r\n class=\"flex w-full border-b border-border bg-background transition-all\"\r\n >\r\n <slot></slot>\r\n </section>\r\n</template>\r\n","import type { LayoutType } from '@admin-kit/typings';\r\n\r\nimport type { AdminLayoutProps } from '../admin-layout';\r\n\r\nimport { computed } from 'vue';\r\n\r\nexport function useLayout(props: AdminLayoutProps) {\r\n const currentLayout = computed(() =>\r\n props.isMobile ? 'sidebar-nav' : (props.layout as LayoutType),\r\n );\r\n\r\n /**\r\n * 是否全屏显示content,不需要侧边、底部、顶部、tab区域\r\n */\r\n const isFullContent = computed(() => currentLayout.value === 'full-content');\r\n\r\n /**\r\n * 是否侧边混合模式\r\n */\r\n const isSidebarMixedNav = computed(\r\n () => currentLayout.value === 'sidebar-mixed-nav',\r\n );\r\n\r\n /**\r\n * 是否为头部导航模式\r\n */\r\n const isHeaderNav = computed(() => currentLayout.value === 'header-nav');\r\n\r\n /**\r\n * 是否为混合导航模式\r\n */\r\n const isMixedNav = computed(\r\n () =>\r\n currentLayout.value === 'mixed-nav' ||\r\n currentLayout.value === 'header-sidebar-nav',\r\n );\r\n\r\n /**\r\n * 是否为头部混合模式\r\n */\r\n const isHeaderMixedNav = computed(\r\n () => currentLayout.value === 'header-mixed-nav',\r\n );\r\n\r\n return {\r\n currentLayout,\r\n isFullContent,\r\n isHeaderMixedNav,\r\n isHeaderNav,\r\n isMixedNav,\r\n isSidebarMixedNav,\r\n };\r\n}\r\n","<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue';\r\n\r\nimport type { AdminLayoutProps } from './admin-layout';\r\n\r\nimport { computed, ref, watch } from 'vue';\r\n\r\nimport {\r\n SCROLL_FIXED_CLASS,\r\n useLayoutFooterStyle,\r\n useLayoutHeaderStyle,\r\n} from '@admin-kit/composables';\r\nimport { IconifyIcon } from '@admin-kit/icons';\r\nimport { ELEMENT_ID_MAIN_CONTENT } from '@admin-kit/shared/constants';\r\n\r\nimport { useMouse, useScroll, useThrottleFn } from '@vueuse/core';\r\n\r\nimport {\r\n LayoutContent,\r\n LayoutFooter,\r\n LayoutHeader,\r\n LayoutSidebar,\r\n LayoutTabbar,\r\n} from './components';\r\nimport { useLayout } from './hooks/use-layout';\r\n\r\ninterface Props extends AdminLayoutProps {}\r\n\r\ndefineOptions({\r\n name: 'AdminLayout',\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n contentCompact: 'wide',\r\n contentCompactWidth: 1200,\r\n contentPadding: 0,\r\n contentPaddingBottom: 0,\r\n contentPaddingLeft: 0,\r\n contentPaddingRight: 0,\r\n contentPaddingTop: 0,\r\n footerEnable: false,\r\n footerFixed: true,\r\n footerHeight: 32,\r\n headerHeight: 50,\r\n headerHidden: false,\r\n headerMode: 'fixed',\r\n headerToggleSidebarButton: true,\r\n headerVisible: true,\r\n isMobile: false,\r\n layout: 'sidebar-nav',\r\n sidebarCollapsedButton: true,\r\n sidebarCollapseShowTitle: false,\r\n sidebarExtraCollapsedWidth: 60,\r\n sidebarFixedButton: true,\r\n sidebarHidden: false,\r\n sidebarMixedWidth: 80,\r\n sidebarTheme: 'dark',\r\n sidebarWidth: 180,\r\n sideCollapseWidth: 60,\r\n tabbarEnable: true,\r\n tabbarHeight: 40,\r\n zIndex: 200,\r\n});\r\n\r\nconst emit = defineEmits<{ sideMouseLeave: []; toggleSidebar: [] }>();\r\nconst sidebarCollapse = defineModel<boolean>('sidebarCollapse', {\r\n default: false,\r\n});\r\nconst sidebarExtraVisible = defineModel<boolean>('sidebarExtraVisible');\r\nconst sidebarExtraCollapse = defineModel<boolean>('sidebarExtraCollapse', {\r\n default: false,\r\n});\r\nconst sidebarExpandOnHover = defineModel<boolean>('sidebarExpandOnHover', {\r\n default: false,\r\n});\r\nconst sidebarEnable = defineModel<boolean>('sidebarEnable', { default: true });\r\n\r\n// side是否处于hover状态展开菜单中\r\nconst sidebarExpandOnHovering = ref(false);\r\nconst headerIsHidden = ref(false);\r\nconst contentRef = ref();\r\n\r\nconst {\r\n arrivedState,\r\n directions,\r\n isScrolling,\r\n y: scrollY,\r\n} = useScroll(document);\r\n\r\nconst { setLayoutHeaderHeight } = useLayoutHeaderStyle();\r\nconst { setLayoutFooterHeight } = useLayoutFooterStyle();\r\n\r\nconst { y: mouseY } = useMouse({ target: contentRef, type: 'client' });\r\n\r\nconst {\r\n currentLayout,\r\n isFullContent,\r\n isHeaderMixedNav,\r\n isHeaderNav,\r\n isMixedNav,\r\n isSidebarMixedNav,\r\n} = useLayout(props);\r\n\r\n/**\r\n * 顶栏是否自动隐藏\r\n */\r\nconst isHeaderAutoMode = computed(() => props.headerMode === 'auto');\r\n\r\nconst headerWrapperHeight = computed(() => {\r\n let height = 0;\r\n if (props.headerVisible && !props.headerHidden) {\r\n height += props.headerHeight;\r\n }\r\n if (props.tabbarEnable) {\r\n height += props.tabbarHeight;\r\n }\r\n return height;\r\n});\r\n\r\nconst getSideCollapseWidth = computed(() => {\r\n const { sidebarCollapseShowTitle, sidebarMixedWidth, sideCollapseWidth } =\r\n props;\r\n\r\n return sidebarCollapseShowTitle ||\r\n isSidebarMixedNav.value ||\r\n isHeaderMixedNav.value\r\n ? sidebarMixedWidth\r\n : sideCollapseWidth;\r\n});\r\n\r\n/**\r\n * 动态获取侧边区域是否可见\r\n */\r\nconst sidebarEnableState = computed(() => {\r\n return !isHeaderNav.value && sidebarEnable.value;\r\n});\r\n\r\n/**\r\n * 侧边区域离顶部高度\r\n */\r\nconst sidebarMarginTop = computed(() => {\r\n const { headerHeight, isMobile } = props;\r\n return isMixedNav.value && !isMobile ? headerHeight : 0;\r\n});\r\n\r\n/**\r\n * 动态获取侧边宽度\r\n */\r\nconst getSidebarWidth = computed(() => {\r\n const { isMobile, sidebarHidden, sidebarMixedWidth, sidebarWidth } = props;\r\n let width = 0;\r\n\r\n if (sidebarHidden) {\r\n return width;\r\n }\r\n\r\n if (\r\n !sidebarEnableState.value ||\r\n (sidebarHidden &&\r\n !isSidebarMixedNav.value &&\r\n !isMixedNav.value &&\r\n !isHeaderMixedNav.value)\r\n ) {\r\n return width;\r\n }\r\n\r\n if ((isHeaderMixedNav.value || isSidebarMixedNav.value) && !isMobile) {\r\n width = sidebarMixedWidth;\r\n } else if (sidebarCollapse.value) {\r\n width = isMobile ? 0 : getSideCollapseWidth.value;\r\n } else {\r\n width = sidebarWidth;\r\n }\r\n return width;\r\n});\r\n\r\n/**\r\n * 获取扩展区域宽度\r\n */\r\nconst sidebarExtraWidth = computed(() => {\r\n const { sidebarExtraCollapsedWidth, sidebarWidth } = props;\r\n\r\n return sidebarExtraCollapse.value ? sidebarExtraCollapsedWidth : sidebarWidth;\r\n});\r\n\r\n/**\r\n * 是否侧边栏模式,包含混合侧边\r\n */\r\nconst isSideMode = computed(\r\n () =>\r\n currentLayout.value === 'mixed-nav' ||\r\n currentLayout.value === 'sidebar-mixed-nav' ||\r\n currentLayout.value === 'sidebar-nav' ||\r\n currentLayout.value === 'header-mixed-nav' ||\r\n currentLayout.value === 'header-sidebar-nav',\r\n);\r\n\r\n/**\r\n * header fixed值\r\n */\r\nconst headerFixed = computed(() => {\r\n const { headerMode } = props;\r\n return (\r\n isMixedNav.value ||\r\n headerMode === 'fixed' ||\r\n headerMode === 'auto-scroll' ||\r\n headerMode === 'auto'\r\n );\r\n});\r\n\r\nconst showSidebar = computed(() => {\r\n return isSideMode.value && sidebarEnable.value && !props.sidebarHidden;\r\n});\r\n\r\n/**\r\n * 遮罩可见性\r\n */\r\nconst maskVisible = computed(() => !sidebarCollapse.value && props.isMobile);\r\n\r\nconst mainStyle = computed(() => {\r\n let width = '100%';\r\n let sidebarAndExtraWidth = 'unset';\r\n if (\r\n headerFixed.value &&\r\n currentLayout.value !== 'header-nav' &&\r\n currentLayout.value !== 'mixed-nav' &&\r\n currentLayout.value !== 'header-sidebar-nav' &&\r\n showSidebar.value &&\r\n !props.isMobile\r\n ) {\r\n // fixed模式下生效\r\n const isSideNavEffective =\r\n (isSidebarMixedNav.value || isHeaderMixedNav.value) &&\r\n sidebarExpandOnHover.value &&\r\n sidebarExtraVisible.value;\r\n\r\n if (isSideNavEffective) {\r\n const sideCollapseWidth = sidebarCollapse.value\r\n ? getSideCollapseWidth.value\r\n : props.sidebarMixedWidth;\r\n const sideWidth = sidebarExtraCollapse.value\r\n ? props.sidebarExtraCollapsedWidth\r\n : props.sidebarWidth;\r\n\r\n // 100% - 侧边菜单混合宽度 - 菜单宽度\r\n sidebarAndExtraWidth = `${sideCollapseWidth + sideWidth}px`;\r\n width = `calc(100% - ${sidebarAndExtraWidth})`;\r\n } else {\r\n sidebarAndExtraWidth =\r\n sidebarExpandOnHovering.value && !sidebarExpandOnHover.value\r\n ? `${getSideCollapseWidth.value}px`\r\n : `${getSidebarWidth.value}px`;\r\n width = `calc(100% - ${sidebarAndExtraWidth})`;\r\n }\r\n }\r\n return {\r\n sidebarAndExtraWidth,\r\n width,\r\n };\r\n});\r\n\r\n// 计算 tabbar 的样式\r\nconst tabbarStyle = computed((): CSSProperties => {\r\n let width = '';\r\n let marginLeft = 0;\r\n\r\n // 如果不是混合导航,tabbar 的宽度为 100%\r\n if (!isMixedNav.value || props.sidebarHidden) {\r\n width = '100%';\r\n } else if (sidebarEnable.value) {\r\n // 鼠标在侧边栏上时,且侧边栏展开时的宽度\r\n const onHoveringWidth = sidebarExpandOnHover.value\r\n ? props.sidebarWidth\r\n : getSideCollapseWidth.value;\r\n\r\n // 设置 marginLeft,根据侧边栏是否折叠来决定\r\n marginLeft = sidebarCollapse.value\r\n ? getSideCollapseWidth.value\r\n : onHoveringWidth;\r\n\r\n // 设置 tabbar 的宽度,计算方式为 100% 减去侧边栏的宽度\r\n width = `calc(100% - ${sidebarCollapse.value ? getSidebarWidth.value : onHoveringWidth}px)`;\r\n } else {\r\n // 默认情况下,tabbar 的宽度为 100%\r\n width = '100%';\r\n }\r\n\r\n return {\r\n marginLeft: `${marginLeft}px`,\r\n width,\r\n };\r\n});\r\n\r\nconst contentStyle = computed((): CSSProperties => {\r\n const fixed = headerFixed.value;\r\n\r\n const { footerEnable, footerFixed, footerHeight } = props;\r\n return {\r\n marginTop:\r\n fixed &&\r\n !isFullContent.value &&\r\n !headerIsHidden.value &&\r\n (!isHeaderAutoMode.value || scrollY.value < headerWrapperHeight.value)\r\n ? `${headerWrapperHeight.value}px`\r\n : 0,\r\n paddingBottom: `${footerEnable && footerFixed ? footerHeight : 0}px`,\r\n };\r\n});\r\n\r\nconst headerZIndex = computed(() => {\r\n const { zIndex } = props;\r\n const offset = isMixedNav.value ? 1 : 0;\r\n return zIndex + offset;\r\n});\r\n\r\nconst headerWrapperStyle = computed((): CSSProperties => {\r\n const fixed = headerFixed.value;\r\n return {\r\n height: isFullContent.value ? '0' : `${headerWrapperHeight.value}px`,\r\n left: isMixedNav.value ? 0 : mainStyle.value.sidebarAndExtraWidth,\r\n position: fixed ? 'fixed' : 'static',\r\n top:\r\n headerIsHidden.value || isFullContent.value\r\n ? `-${headerWrapperHeight.value}px`\r\n : 0,\r\n width: mainStyle.value.width,\r\n 'z-index': headerZIndex.value,\r\n };\r\n});\r\n\r\n/**\r\n * 侧边栏z-index\r\n */\r\nconst sidebarZIndex = computed(() => {\r\n const { isMobile, zIndex } = props;\r\n let offset = isMobile || isSideMode.value ? 1 : -1;\r\n\r\n if (isMixedNav.value) {\r\n offset += 1;\r\n }\r\n\r\n return zIndex + offset;\r\n});\r\n\r\nconst footerWidth = computed(() => {\r\n if (!props.footerFixed) {\r\n return '100%';\r\n }\r\n\r\n return mainStyle.value.width;\r\n});\r\n\r\nconst maskStyle = computed((): CSSProperties => {\r\n return { zIndex: props.zIndex };\r\n});\r\n\r\nconst showHeaderToggleButton = computed(() => {\r\n return (\r\n props.isMobile ||\r\n (props.headerToggleSidebarButton &&\r\n isSideMode.value &&\r\n !isSidebarMixedNav.value &&\r\n !isMixedNav.value &&\r\n !props.isMobile)\r\n );\r\n});\r\n\r\nconst showHeaderLogo = computed(() => {\r\n return !isSideMode.value || isMixedNav.value || props.isMobile;\r\n});\r\n\r\nwatch(\r\n () => props.isMobile,\r\n (val) => {\r\n if (val) {\r\n sidebarCollapse.value = true;\r\n }\r\n },\r\n {\r\n immediate: true,\r\n },\r\n);\r\n\r\nwatch(\r\n [() => headerWrapperHeight.value, () => isFullContent.value],\r\n ([height]) => {\r\n setLayoutHeaderHeight(isFullContent.value ? 0 : height);\r\n },\r\n {\r\n immediate: true,\r\n },\r\n);\r\n\r\nwatch(\r\n () => props.footerHeight,\r\n (height: number) => {\r\n setLayoutFooterHeight(height);\r\n },\r\n {\r\n immediate: true,\r\n },\r\n);\r\n\r\n{\r\n const mouseMove = () => {\r\n mouseY.value > headerWrapperHeight.value\r\n ? (headerIsHidden.value = true)\r\n : (headerIsHidden.value = false);\r\n };\r\n watch(\r\n [() => props.headerMode, () => mouseY.value],\r\n () => {\r\n if (!isHeaderAutoMode.value || isMixedNav.value || isFullContent.value) {\r\n if (props.headerMode !== 'auto-scroll') {\r\n headerIsHidden.value = false;\r\n }\r\n return;\r\n }\r\n headerIsHidden.value = true;\r\n mouseMove();\r\n },\r\n {\r\n immediate: true,\r\n },\r\n );\r\n}\r\n\r\n{\r\n const checkHeaderIsHidden = useThrottleFn((top, bottom, topArrived) => {\r\n if (scrollY.value < headerWrapperHeight.value) {\r\n headerIsHidden.value = false;\r\n return;\r\n }\r\n if (topArrived) {\r\n headerIsHidden.value = false;\r\n return;\r\n }\r\n\r\n if (top) {\r\n headerIsHidden.value = false;\r\n } else if (bottom) {\r\n headerIsHidden.value = true;\r\n }\r\n }, 300);\r\n\r\n watch(\r\n () => scrollY.value,\r\n () => {\r\n if (\r\n props.headerMode !== 'auto-scroll' ||\r\n isMixedNav.value ||\r\n isFullContent.value\r\n ) {\r\n return;\r\n }\r\n if (isScrolling.value) {\r\n checkHeaderIsHidden(\r\n directions.top,\r\n directions.bottom,\r\n arrivedState.top,\r\n );\r\n }\r\n },\r\n );\r\n}\r\n\r\nfunction handleClickMask() {\r\n sidebarCollapse.value = true;\r\n}\r\n\r\nfunction handleHeaderToggle() {\r\n if (props.isMobile) {\r\n sidebarCollapse.value = false;\r\n } else {\r\n emit('toggleSidebar');\r\n }\r\n}\r\n\r\nconst idMainContent = ELEMENT_ID_MAIN_CONTENT;\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative flex min-h-full w-full\">\r\n <LayoutSidebar\r\n v-if=\"sidebarEnableState\"\r\n v-model:collapse=\"sidebarCollapse\"\r\n v-model:expand-on-hover=\"sidebarExpandOnHover\"\r\n v-model:expand-on-hovering=\"sidebarExpandOnHovering\"\r\n v-model:extra-collapse=\"sidebarExtraCollapse\"\r\n v-model:extra-visible=\"sidebarExtraVisible\"\r\n :show-collapse-button=\"sidebarCollapsedButton\"\r\n :show-fixed-button=\"sidebarFixedButton\"\r\n :collapse-width=\"getSideCollapseWidth\"\r\n :dom-visible=\"!isMobile\"\r\n :extra-width=\"sidebarExtraWidth\"\r\n :fixed-extra=\"sidebarExpandOnHover\"\r\n :header-height=\"isMixedNav ? 0 : headerHeight\"\r\n :is-sidebar-mixed=\"isSidebarMixedNav || isHeaderMixedNav\"\r\n :margin-top=\"sidebarMarginTop\"\r\n :mixed-width=\"sidebarMixedWidth\"\r\n :show=\"showSidebar\"\r\n :theme=\"sidebarTheme\"\r\n :width=\"getSidebarWidth\"\r\n :z-index=\"sidebarZIndex\"\r\n @leave=\"() => emit('sideMouseLeave')\"\r\n >\r\n <template v-if=\"isSideMode && !isMixedNav\" #logo>\r\n <slot name=\"logo\"></slot>\r\n </template>\r\n\r\n <template v-if=\"isSidebarMixedNav || isHeaderMixedNav\">\r\n <slot name=\"mixed-menu\"></slot>\r\n </template>\r\n <template v-else>\r\n <slot name=\"menu\"></slot>\r\n </template>\r\n\r\n <template #extra>\r\n <slot name=\"side-extra\"></slot>\r\n </template>\r\n <template #extra-title>\r\n <slot name=\"side-extra-title\"></slot>\r\n </template>\r\n </LayoutSidebar>\r\n\r\n <div\r\n ref=\"contentRef\"\r\n class=\"flex flex-1 flex-col overflow-hidden transition-all duration-300 ease-in\"\r\n >\r\n <div\r\n :class=\"[\r\n {\r\n 'shadow-[0_16px_24px_hsl(var(--background))]': scrollY > 20,\r\n },\r\n SCROLL_FIXED_CLASS,\r\n ]\"\r\n :style=\"headerWrapperStyle\"\r\n class=\"overflow-hidden transition-all duration-200\"\r\n >\r\n <LayoutHeader\r\n v-if=\"headerVisible\"\r\n :full-width=\"!isSideMode\"\r\n :height=\"headerHeight\"\r\n :is-mobile=\"isMobile\"\r\n :show=\"!isFullContent && !headerHidden\"\r\n :sidebar-width=\"sidebarWidth\"\r\n :theme=\"headerTheme\"\r\n :width=\"mainStyle.width\"\r\n :z-index=\"headerZIndex\"\r\n >\r\n <template v-if=\"showHeaderLogo\" #logo>\r\n <slot name=\"logo\"></slot>\r\n </template>\r\n\r\n <template #toggle-button>\r\n <AdminIconButton\r\n v-if=\"showHeaderToggleButton\"\r\n class=\"my-0 mr-1 rounded-md\"\r\n @click=\"handleHeaderToggle\"\r\n >\r\n <IconifyIcon v-if=\"showSidebar\" icon=\"ep:fold\" />\r\n <IconifyIcon v-else icon=\"ep:expand\" />\r\n </AdminIconButton>\r\n </template>\r\n <slot name=\"header\"></slot>\r\n </LayoutHeader>\r\n\r\n <LayoutTabbar\r\n v-if=\"tabbarEnable\"\r\n :height=\"tabbarHeight\"\r\n :style=\"tabbarStyle\"\r\n >\r\n <slot name=\"tabbar\"></slot>\r\n </LayoutTabbar>\r\n </div>\r\n\r\n <!-- </div> -->\r\n <LayoutContent\r\n :id=\"idMainContent\"\r\n :content-compact=\"contentCompact\"\r\n :content-compact-width=\"contentCompactWidth\"\r\n :padding=\"contentPadding\"\r\n :padding-bottom=\"contentPaddingBottom\"\r\n :padding-left=\"contentPaddingLeft\"\r\n :padding-right=\"contentPaddingRight\"\r\n :padding-top=\"contentPaddingTop\"\r\n :style=\"contentStyle\"\r\n class=\"transition-[margin-top] duration-200\"\r\n >\r\n <slot name=\"content\"></slot>\r\n\r\n <template #overlay>\r\n <slot name=\"content-overlay\"></slot>\r\n </template>\r\n </LayoutContent>\r\n\r\n <LayoutFooter\r\n v-if=\"footerEnable\"\r\n :fixed=\"footerFixed\"\r\n :height=\"footerHeight\"\r\n :show=\"!isFullContent\"\r\n :width=\"footerWidth\"\r\n :z-index=\"zIndex\"\r\n >\r\n <slot name=\"footer\"></slot>\r\n </LayoutFooter>\r\n </div>\r\n <slot name=\"extra\"></slot>\r\n <div\r\n v-if=\"maskVisible\"\r\n :style=\"maskStyle\"\r\n class=\"fixed left-0 top-0 h-full w-full bg-overlay transition-[background-color] duration-200\"\r\n @click=\"handleClickMask\"\r\n ></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { CSSProperties } from 'vue';\r\n\r\ninterface Props {\r\n dotClass?: string;\r\n dotStyle?: CSSProperties;\r\n}\r\n\r\nwithDefaults(defineProps<Props>(), {\r\n dotClass: '',\r\n dotStyle: () => ({}),\r\n});\r\n</script>\r\n<template>\r\n <span class=\"relative mr-1 flex size-1.5\">\r\n <span\r\n :class=\"dotClass\"\r\n :style=\"dotStyle\"\r\n class=\"absolute inline-flex h-full w-full animate-ping rounded-full opacity-75\"\r\n >\r\n </span>\r\n <span\r\n :class=\"dotClass\"\r\n :style=\"dotStyle\"\r\n class=\"relative inline-flex size-1.5 rounded-full\"\r\n ></span>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { MenuRecordBadgeRaw } from '@admin-kit/typings';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { isValidColor } from '@admin-kit/shared/color';\r\n\r\nimport BadgeDot from './menu-badge-dot.vue';\r\n\r\ninterface Props extends MenuRecordBadgeRaw {\r\n hasChildren?: boolean;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {});\r\n\r\nconst variantsMap: Record<string, string> = {\r\n default: 'bg-green-500',\r\n destructive: 'bg-destructive',\r\n primary: 'bg-primary',\r\n success: 'bg-green-500',\r\n warning: 'bg-yellow-500',\r\n};\r\n\r\nconst isDot = computed(() => props.badgeType === 'dot');\r\n\r\nconst badgeClass = computed(() => {\r\n const { badgeVariants } = props;\r\n\r\n if (!badgeVariants) {\r\n return variantsMap.default;\r\n }\r\n\r\n return variantsMap[badgeVariants] || badgeVariants;\r\n});\r\n\r\nconst badgeStyle = computed(() => {\r\n if (badgeClass.value && isValidColor(badgeClass.value)) {\r\n return {\r\n backgroundColor: badgeClass.value,\r\n };\r\n }\r\n return {};\r\n});\r\n</script>\r\n<template>\r\n <span v-if=\"isDot || badge\" :class=\"$attrs.class\" class=\"absolute\">\r\n <BadgeDot v-if=\"isDot\" :dot-class=\"badgeClass\" :dot-style=\"badgeStyle\" />\r\n <div\r\n v-else\r\n :class=\"badgeClass\"\r\n :style=\"badgeStyle\"\r\n class=\"flex-center rounded-xl px-1.5 py-0.5 text-[10px] text-primary-foreground\"\r\n >\r\n {{ badge }}\r\n </div>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { MenuRecordRaw } from '@admin-kit/typings';\r\n\r\nimport type { NormalMenuProps } from './normal-menu';\r\n\r\nimport { useNamespace } from '@admin-kit/composables';\r\n\r\ninterface Props extends NormalMenuProps {}\r\n\r\ndefineOptions({\r\n name: 'NormalMenu',\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n activePath: '',\r\n collapse: false,\r\n menus: () => [],\r\n theme: 'dark',\r\n});\r\n\r\nconst emit = defineEmits<{\r\n enter: [MenuRecordRaw];\r\n select: [MenuRecordRaw];\r\n}>();\r\n\r\nconst { b, e, is } = useNamespace('normal-menu');\r\n\r\nfunction menuIcon(menu: MenuRecordRaw) {\r\n return props.activePath === menu.path\r\n ? menu.activeIcon || menu.icon\r\n : menu.icon;\r\n}\r\n</script>\r\n\r\n<template>\r\n <ul\r\n :class=\"[\r\n theme,\r\n b(),\r\n is('collapse', collapse),\r\n is(theme, true),\r\n is('rounded', rounded),\r\n ]\"\r\n class=\"relative\"\r\n >\r\n <template v-for=\"menu in menus\" :key=\"menu.path\">\r\n <li\r\n :class=\"[e('item'), is('active', activePath === menu.path)]\"\r\n @click=\"() => emit('select', menu)\"\r\n @mouseenter=\"() => emit('enter', menu)\"\r\n >\r\n <AdminIcon :class=\"e('icon')\" :icon=\"menuIcon(menu)\" fallback />\r\n\r\n <span :class=\"e('name')\" class=\"truncate\"> {{ menu.name }}</span>\r\n </li>\r\n </template>\r\n </ul>\r\n</template>\r\n<style lang=\"scss\" scoped>\r\n$namespace: admin;\r\n\r\n.#{$namespace}-normal-menu {\r\n --menu-item-margin-y: 4px;\r\n --menu-item-margin-x: 0px;\r\n --menu-item-padding-y: 9px;\r\n --menu-item-padding-x: 0px;\r\n --menu-item-radius: 0px;\r\n\r\n height: calc(100% - 4px);\r\n\r\n &.is-rounded {\r\n --menu-item-radius: 6px;\r\n --menu-item-margin-x: 8px;\r\n }\r\n\r\n &.is-dark {\r\n .#{$namespace}-normal-menu__item {\r\n @apply text-foreground/80;\r\n // color: hsl(var(--foreground) / 80%);\r\n\r\n &:not(.is-active):hover {\r\n @apply text-foreground;\r\n }\r\n\r\n &.is-active {\r\n .#{$namespace}-normal-menu__name,\r\n .#{$namespace}-normal-menu__icon {\r\n @apply text-foreground;\r\n }\r\n }\r\n }\r\n }\r\n\r\n &.is-collapse {\r\n .#{$namespace}-normal-menu__name {\r\n width: 0;\r\n height: 0;\r\n margin-top: 0;\r\n overflow: hidden;\r\n opacity: 0;\r\n }\r\n\r\n .#{$namespace}-normal-menu__icon {\r\n font-size: calc(var(--font-size-base, 16px) * 1.25);\r\n }\r\n }\r\n\r\n &__item {\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n // max-width: 64px;\r\n // max-height: 64px;\r\n padding: var(--menu-item-padding-y) var(--menu-item-padding-x);\r\n margin: var(--menu-item-margin-y) var(--menu-item-margin-x);\r\n color: hsl(var(--foreground) / 90%);\r\n cursor: pointer;\r\n border-radius: var(--menu-item-radius);\r\n transition:\r\n background 0.15s ease,\r\n padding 0.15s ease,\r\n border-color 0.15s ease;\r\n\r\n &.is-active {\r\n @apply bg-primary text-primary dark:bg-accent;\r\n\r\n .#{$namespace}-normal-menu__name,\r\n .#{$namespace}-normal-menu__icon {\r\n @apply font-semibold text-primary-foreground;\r\n }\r\n }\r\n\r\n &:not(.is-active):hover {\r\n @apply bg-heavy text-primary dark:bg-accent dark:text-foreground;\r\n }\r\n\r\n &:hover {\r\n .#{$namespace}-normal-menu__icon {\r\n transform: scale(1.2);\r\n }\r\n }\r\n }\r\n\r\n &__icon {\r\n max-height: 20px;\r\n font-size: calc(var(--font-size-base, 16px) * 1.25);\r\n transition: all 0.25s ease;\r\n }\r\n\r\n &__name {\r\n margin-top: 8px;\r\n margin-bottom: 0;\r\n font-size: calc(var(--font-size-base, 16px) * 0.75);\r\n font-weight: 400;\r\n transition: all 0.25s ease;\r\n }\r\n}\r\n</style>\r\n","import type { Component, VNode, VNodeArrayChildren } from 'vue';\r\n\r\nimport type { Recordable } from '@admin-kit/typings';\r\n\r\nimport { createContext } from '@admin-kit/shadcn-ui';\r\n\r\nexport type IconType = 'error' | 'info' | 'question' | 'success' | 'warning';\r\n\r\nexport type BeforeCloseScope = {\r\n isConfirm: boolean;\r\n};\r\n\r\nexport type AlertProps = {\r\n /** 关闭前的回调,如果返回false,则终止关闭 */\r\n beforeClose?: (\r\n scope: BeforeCloseScope,\r\n ) => boolean | Promise<boolean | undefined> | undefined;\r\n /** 边框 */\r\n bordered?: boolean;\r\n /**\r\n * 按钮对齐方式\r\n * @default 'end'\r\n */\r\n buttonAlign?: 'center' | 'end' | 'start';\r\n /** 取消按钮的标题 */\r\n cancelText?: string;\r\n /** 是否居中显示 */\r\n centered?: boolean;\r\n /** 确认按钮的标题 */\r\n confirmText?: string;\r\n /** 弹窗容器的额外样式 */\r\n containerClass?: string;\r\n /** 弹窗提示内容 */\r\n content: Component | string;\r\n /** 弹窗内容的额外样式 */\r\n contentClass?: string;\r\n /** 执行beforeClose回调期间,在内容区域显示一个loading遮罩*/\r\n contentMasking?: boolean;\r\n /** 弹窗底部内容(与按钮在同一个容器中) */\r\n footer?: Component | string;\r\n /** 弹窗的图标(在标题的前面) */\r\n icon?: Component | IconType;\r\n /**\r\n * 弹窗遮罩模糊效果\r\n */\r\n overlayBlur?: number;\r\n /** 是否显示取消按钮 */\r\n showCancel?: boolean;\r\n /** 弹窗标题 */\r\n title?: string;\r\n};\r\n\r\n/** Prompt属性 */\r\nexport type PromptProps<T = any> = {\r\n /** 关闭前的回调,如果返回false,则终止关闭 */\r\n beforeClose?: (scope: {\r\n isConfirm: boolean;\r\n value: T | undefined;\r\n }) => boolean | Promise<boolean | undefined> | undefined;\r\n /** 用于接受用户输入的组件 */\r\n component?: Component;\r\n /** 输入组件的属性 */\r\n componentProps?: Recordable<any>;\r\n /** 输入组件的插槽 */\r\n componentSlots?:\r\n | (() => any)\r\n | Recordable<unknown>\r\n | VNode\r\n | VNodeArrayChildren;\r\n /** 默认值 */\r\n defaultValue?: T;\r\n /** 输入组件的值属性名 */\r\n modelPropName?: string;\r\n} & Omit<AlertProps, 'beforeClose'>;\r\n\r\n/**\r\n * Alert上下文\r\n */\r\nexport type AlertContext = {\r\n /** 执行取消操作 */\r\n doCancel: () => void;\r\n /** 执行确认操作 */\r\n doConfirm: () => void;\r\n};\r\n\r\nexport const [injectAlertContext, provideAlertContext] =\r\n createContext<AlertContext>('AdminAlertContext');\r\n\r\n/**\r\n * 获取Alert上下文\r\n * @returns AlertContext\r\n */\r\nexport function useAlertContext() {\r\n const context = injectAlertContext();\r\n if (!context) {\r\n throw new Error('useAlertContext must be used within an AlertProvider');\r\n }\r\n return context;\r\n}\r\n","<script lang=\"ts\" setup>\r\nimport type { Component } from 'vue';\r\n\r\nimport type { AlertProps } from './alert';\r\n\r\nimport { computed, h, nextTick, ref } from 'vue';\r\n\r\nimport { useSimpleLocale } from '@admin-kit/composables';\r\nimport {\r\n CircleAlert,\r\n CircleCheckBig,\r\n CircleHelp,\r\n CircleX,\r\n Info,\r\n X,\r\n} from '@admin-kit/icons';\r\nimport {\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogTitle,\r\n AdminButton,\r\n AdminLoading,\r\n AdminRenderContent,\r\n} from '@admin-kit/shadcn-ui';\r\nimport { globalShareState } from '@admin-kit/shared/global-state';\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { provideAlertContext } from './alert';\r\n\r\nconst props = withDefaults(defineProps<AlertProps>(), {\r\n bordered: true,\r\n buttonAlign: 'end',\r\n centered: true,\r\n});\r\nconst emits = defineEmits(['closed', 'confirm', 'opened']);\r\nconst open = defineModel<boolean>('open', { default: false });\r\nconst { $t } = useSimpleLocale();\r\nconst components = globalShareState.getComponents();\r\nconst isConfirm = ref(false);\r\n\r\nfunction onAlertClosed() {\r\n emits('closed', isConfirm.value);\r\n isConfirm.value = false;\r\n}\r\n\r\nfunction onEscapeKeyDown() {\r\n isConfirm.value = false;\r\n}\r\n\r\nconst getIconRender = computed(() => {\r\n let iconRender: Component | null = null;\r\n if (props.icon) {\r\n if (typeof props.icon === 'string') {\r\n switch (props.icon) {\r\n case 'error': {\r\n iconRender = h(CircleX, {\r\n style: { color: 'hsl(var(--destructive))' },\r\n });\r\n break;\r\n }\r\n case 'info': {\r\n iconRender = h(Info, { style: { color: 'hsl(var(--info))' } });\r\n break;\r\n }\r\n case 'question': {\r\n iconRender = CircleHelp;\r\n break;\r\n }\r\n case 'success': {\r\n iconRender = h(CircleCheckBig, {\r\n style: { color: 'hsl(var(--success))' },\r\n });\r\n break;\r\n }\r\n case 'warning': {\r\n iconRender = h(CircleAlert, {\r\n style: { color: 'hsl(var(--warning))' },\r\n });\r\n break;\r\n }\r\n default: {\r\n iconRender = null;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n iconRender = props.icon ?? null;\r\n }\r\n return iconRender;\r\n});\r\n\r\nfunction doCancel() {\r\n handleCancel();\r\n handleOpenChange(false);\r\n}\r\n\r\nfunction doConfirm() {\r\n handleConfirm();\r\n handleOpenChange(false);\r\n}\r\n\r\nprovideAlertContext({\r\n doCancel,\r\n doConfirm,\r\n});\r\n\r\nfunction handleConfirm() {\r\n isConfirm.value = true;\r\n emits('confirm');\r\n}\r\n\r\nfunction handleCancel() {\r\n isConfirm.value = false;\r\n}\r\n\r\nconst loading = ref(false);\r\nasync function handleOpenChange(val: boolean) {\r\n await nextTick(); // 等待标记isConfirm状态\r\n if (!val && props.beforeClose) {\r\n loading.value = true;\r\n try {\r\n const res = await props.beforeClose({ isConfirm: isConfirm.value });\r\n if (res !== false) {\r\n open.value = false;\r\n }\r\n } finally {\r\n loading.value = false;\r\n }\r\n } else {\r\n open.value = val;\r\n }\r\n}\r\n</script>\r\n<template>\r\n <AlertDialog :open=\"open\" @update:open=\"handleOpenChange\">\r\n <AlertDialogContent\r\n :open=\"open\"\r\n :centered=\"centered\"\r\n :overlay-blur=\"overlayBlur\"\r\n @opened=\"emits('opened')\"\r\n @closed=\"onAlertClosed\"\r\n @escape-key-down=\"onEscapeKeyDown\"\r\n :class=\"\r\n cn(\r\n containerClass,\r\n 'left-0 right-0 mx-auto flex max-h-[80%] flex-col p-0 duration-300 sm:w-[520px] sm:max-w-[80%] sm:rounded-[var(--radius)]',\r\n {\r\n 'border border-border': bordered,\r\n 'shadow-3xl': !bordered,\r\n },\r\n )\r\n \"\r\n >\r\n <div :class=\"cn('relative flex-1 overflow-y-auto p-3', contentClass)\">\r\n <AlertDialogTitle v-if=\"title\">\r\n <div class=\"flex items-center\">\r\n <component :is=\"getIconRender\" class=\"mr-2\" />\r\n <span class=\"flex-auto\">{{ $t(title) }}</span>\r\n <AlertDialogCancel v-if=\"showCancel\" as-child>\r\n <AdminButton\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n class=\"rounded-full\"\r\n :disabled=\"loading\"\r\n @click=\"handleCancel\"\r\n >\r\n <X class=\"size-4 text-muted-foreground\" />\r\n </AdminButton>\r\n </AlertDialogCancel>\r\n </div>\r\n </AlertDialogTitle>\r\n <AlertDialogDescription>\r\n <div class=\"m-4 min-h-[30px]\">\r\n <AdminRenderContent :content=\"content\" render-br />\r\n </div>\r\n <AdminLoading v-if=\"loading && contentMasking\" :spinning=\"loading\" />\r\n </AlertDialogDescription>\r\n <div\r\n class=\"flex items-center justify-end gap-x-2\"\r\n :class=\"`justify-${buttonAlign}`\"\r\n >\r\n <AdminRenderContent :content=\"footer\" />\r\n <AlertDialogCancel v-if=\"showCancel\" as-child>\r\n <component\r\n :is=\"components.DefaultButton || AdminButton\"\r\n :disabled=\"loading\"\r\n variant=\"ghost\"\r\n @click=\"handleCancel\"\r\n >\r\n {{ cancelText || $t('cancel') }}\r\n </component>\r\n </AlertDialogCancel>\r\n <AlertDialogAction as-child>\r\n <component\r\n :is=\"components.PrimaryButton || AdminButton\"\r\n :loading=\"loading\"\r\n @click=\"handleConfirm\"\r\n >\r\n {{ confirmText || $t('confirm') }}\r\n </component>\r\n </AlertDialogAction>\r\n </div>\r\n </div>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n</template>\r\n","import type { Component, VNode } from 'vue';\r\n\r\nimport type { Recordable } from '@admin-kit/typings';\r\n\r\nimport type { AlertProps, BeforeCloseScope, PromptProps } from './alert';\r\n\r\nimport { h, nextTick, ref, render } from 'vue';\r\n\r\nimport { useSimpleLocale } from '@admin-kit/composables';\r\nimport { Input, AdminRenderContent } from '@admin-kit/shadcn-ui';\r\nimport { isFunction, isString } from '@admin-kit/shared/utils';\r\n\r\nimport Alert from './alert.vue';\r\n\r\nconst alerts = ref<Array<{ container: HTMLElement; instance: Component }>>([]);\r\n\r\nconst { $t } = useSimpleLocale();\r\n\r\nexport function adminAlert(options: AlertProps): Promise<void>;\r\nexport function adminAlert(\r\n message: string,\r\n options?: Partial<AlertProps>,\r\n): Promise<void>;\r\nexport function adminAlert(\r\n message: string,\r\n title?: string,\r\n options?: Partial<AlertProps>,\r\n): Promise<void>;\r\n\r\nexport function adminAlert(\r\n arg0: AlertProps | string,\r\n arg1?: Partial<AlertProps> | string,\r\n arg2?: Partial<AlertProps>,\r\n): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const options: AlertProps = isString(arg0)\r\n ? {\r\n content: arg0,\r\n }\r\n : { ...arg0 };\r\n if (arg1) {\r\n if (isString(arg1)) {\r\n options.title = arg1;\r\n } else if (!isString(arg1)) {\r\n // 如果第二个参数是对象,则合并到选项中\r\n Object.assign(options, arg1);\r\n }\r\n }\r\n\r\n if (arg2 && !isString(arg2)) {\r\n Object.assign(options, arg2);\r\n }\r\n // 创建容器元素\r\n const container = document.createElement('div');\r\n document.body.append(container);\r\n\r\n // 创建一个引用,用于在回调中访问实例\r\n const alertRef = { container, instance: null as any };\r\n\r\n const props: AlertProps & Recordable<any> = {\r\n onClosed: (isConfirm: boolean) => {\r\n // 移除组件实例以及创建的所有dom(恢复页面到打开前的状态)\r\n // 从alerts数组中移除该实例\r\n alerts.value = alerts.value.filter((item) => item !== alertRef);\r\n\r\n // 从DOM中移除容器\r\n render(null, container);\r\n if (container.parentNode) {\r\n container.remove();\r\n }\r\n\r\n // 解析 Promise,传递用户操作结果\r\n if (isConfirm) {\r\n resolve();\r\n } else {\r\n reject(new Error('dialog cancelled'));\r\n }\r\n },\r\n ...options,\r\n open: true,\r\n title: options.title ?? $t.value('prompt'),\r\n };\r\n\r\n // 创建Alert组件的VNode\r\n const vnode = h(Alert, props);\r\n\r\n // 渲染组件到容器\r\n render(vnode, container);\r\n\r\n // 保存组件实例引用\r\n alertRef.instance = vnode.component?.proxy as Component;\r\n\r\n // 将实例和容器添加到alerts数组中\r\n alerts.value.push(alertRef);\r\n });\r\n}\r\n\r\nexport function adminConfirm(options: AlertProps): Promise<void>;\r\nexport function adminConfirm(\r\n message: string,\r\n options?: Partial<AlertProps>,\r\n): Promise<void>;\r\nexport function adminConfirm(\r\n message: string,\r\n title?: string,\r\n options?: Partial<AlertProps>,\r\n): Promise<void>;\r\n\r\nexport function adminConfirm(\r\n arg0: AlertProps | string,\r\n arg1?: Partial<AlertProps> | string,\r\n arg2?: Partial<AlertProps>,\r\n): Promise<void> {\r\n const defaultProps: Partial<AlertProps> = {\r\n showCancel: true,\r\n };\r\n if (!arg1) {\r\n return isString(arg0)\r\n ? adminAlert(arg0, defaultProps)\r\n : adminAlert({ ...defaultProps, ...arg0 });\r\n } else if (!arg2) {\r\n return isString(arg1)\r\n ? adminAlert(arg0 as string, arg1, defaultProps)\r\n : adminAlert(arg0 as string, { ...defaultProps, ...arg1 });\r\n }\r\n return adminAlert(arg0 as string, arg1 as string, {\r\n ...defaultProps,\r\n ...arg2,\r\n });\r\n}\r\n\r\nexport async function adminPrompt<T = any>(\r\n options: PromptProps<T>,\r\n): Promise<T | undefined> {\r\n const {\r\n component: _component,\r\n componentProps: _componentProps,\r\n componentSlots,\r\n content,\r\n defaultValue,\r\n modelPropName: _modelPropName,\r\n ...delegated\r\n } = options;\r\n\r\n const modelValue = ref<T | undefined>(defaultValue);\r\n const inputComponentRef = ref<null | VNode>(null);\r\n const staticContents: Component[] = [\r\n h(AdminRenderContent, { content, renderBr: true }),\r\n ];\r\n\r\n const modelPropName = _modelPropName || 'modelValue';\r\n const componentProps = { ..._componentProps };\r\n\r\n // 每次渲染时都会重新计算的内容函数\r\n const contentRenderer = () => {\r\n const currentProps = {\r\n ...componentProps,\r\n [modelPropName]: modelValue.value,\r\n [`onUpdate:${modelPropName}`]: (val: T) => {\r\n modelValue.value = val;\r\n },\r\n };\r\n\r\n // 设置当前值\r\n\r\n // 设置更新处理函数\r\n\r\n // 创建输入组件\r\n inputComponentRef.value = h(\r\n _component || Input,\r\n currentProps,\r\n componentSlots,\r\n );\r\n\r\n // 返回包含静态内容和输入组件的数组\r\n return h(\r\n 'div',\r\n { class: 'flex flex-col gap-2' },\r\n { default: () => [...staticContents, inputComponentRef.value] },\r\n );\r\n };\r\n\r\n const props: AlertProps & Recordable<any> = {\r\n ...delegated,\r\n async beforeClose(scope: BeforeCloseScope) {\r\n if (delegated.beforeClose) {\r\n return await delegated.beforeClose({\r\n ...scope,\r\n value: modelValue.value,\r\n });\r\n }\r\n },\r\n // 使用函数形式,每次渲染都会重新计算内容\r\n content: contentRenderer,\r\n contentMasking: true,\r\n async onOpened() {\r\n await nextTick();\r\n const componentRef: null | VNode = inputComponentRef.value;\r\n if (componentRef) {\r\n if (\r\n componentRef.component?.exposed &&\r\n isFunction(componentRef.component.exposed.focus)\r\n ) {\r\n componentRef.component.exposed.focus();\r\n } else {\r\n if (componentRef.el) {\r\n if (\r\n isFunction(componentRef.el.focus) &&\r\n ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'].includes(\r\n componentRef.el.tagName,\r\n )\r\n ) {\r\n componentRef.el.focus();\r\n } else if (isFunction(componentRef.el.querySelector)) {\r\n const focusableElement = componentRef.el.querySelector(\r\n 'input, select, textarea, button',\r\n );\r\n if (focusableElement && isFunction(focusableElement.focus)) {\r\n focusableElement.focus();\r\n }\r\n } else if (\r\n componentRef.el.nextElementSibling &&\r\n isFunction(componentRef.el.nextElementSibling.focus)\r\n ) {\r\n componentRef.el.nextElementSibling.focus();\r\n }\r\n }\r\n }\r\n }\r\n },\r\n };\r\n\r\n await adminConfirm(props);\r\n return modelValue.value;\r\n}\r\n\r\nexport function clearAllAlerts() {\r\n alerts.value.forEach((alert) => {\r\n // 从DOM中移除容器\r\n render(null, alert.container);\r\n if (alert.container.parentNode) {\r\n alert.container.remove();\r\n }\r\n });\r\n alerts.value = [];\r\n}\r\n","<script lang=\"ts\" setup>\r\nimport type { DrawerProps, ExtendedDrawerApi } from './drawer';\r\n\r\nimport {\r\n computed,\r\n onDeactivated,\r\n provide,\r\n ref,\r\n unref,\r\n useId,\r\n watch,\r\n} from 'vue';\r\n\r\nimport {\r\n useIsMobile,\r\n usePriorityValues,\r\n useSimpleLocale,\r\n} from '@admin-kit/composables';\r\nimport { X } from '@admin-kit/icons';\r\nimport {\r\n Separator,\r\n Sheet,\r\n SheetClose,\r\n SheetContent,\r\n SheetDescription,\r\n SheetFooter,\r\n SheetHeader,\r\n SheetTitle,\r\n AdminButton,\r\n AdminHelpTooltip,\r\n AdminIconButton,\r\n AdminLoading,\r\n VisuallyHidden,\r\n} from '@admin-kit/shadcn-ui';\r\nimport { ELEMENT_ID_MAIN_CONTENT } from '@admin-kit/shared/constants';\r\nimport { globalShareState } from '@admin-kit/shared/global-state';\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\ninterface Props extends DrawerProps {\r\n drawerApi?: ExtendedDrawerApi;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n appendToMain: false,\r\n closeIconPlacement: 'right',\r\n destroyOnClose: false,\r\n drawerApi: undefined,\r\n submitting: false,\r\n zIndex: 1000,\r\n});\r\n\r\nconst components = globalShareState.getComponents();\r\n\r\nconst id = useId();\r\nprovide('DISMISSABLE_DRAWER_ID', id);\r\n\r\nconst wrapperRef = ref<HTMLElement>();\r\nconst { $t } = useSimpleLocale();\r\nconst { isMobile } = useIsMobile();\r\n\r\nconst state = props.drawerApi?.useStore?.();\r\n\r\nconst {\r\n appendToMain,\r\n cancelText,\r\n class: drawerClass,\r\n closable,\r\n closeIconPlacement,\r\n closeOnClickModal,\r\n closeOnPressEscape,\r\n confirmLoading,\r\n confirmText,\r\n contentClass,\r\n description,\r\n destroyOnClose,\r\n footer: showFooter,\r\n footerClass,\r\n header: showHeader,\r\n headerClass,\r\n loading: showLoading,\r\n modal,\r\n openAutoFocus,\r\n overlayBlur,\r\n placement,\r\n showCancelButton,\r\n showConfirmButton,\r\n submitting,\r\n title,\r\n titleTooltip,\r\n zIndex,\r\n} = usePriorityValues(props, state);\r\n\r\n// watch(\r\n// () => showLoading.value,\r\n// (v) => {\r\n// if (v && wrapperRef.value) {\r\n// wrapperRef.value.scrollTo({\r\n// // behavior: 'smooth',\r\n// top: 0,\r\n// });\r\n// }\r\n// },\r\n// );\r\n\r\n/**\r\n * 在开启keepAlive情况下 直接通过浏览器按钮/手势等返回 不会关闭弹窗\r\n */\r\nonDeactivated(() => {\r\n // 如果弹窗没有被挂载到内容区域,则关闭弹窗\r\n if (!appendToMain.value) {\r\n props.drawerApi?.close();\r\n }\r\n});\r\n\r\nfunction interactOutside(e: Event) {\r\n if (!closeOnClickModal.value || submitting.value) {\r\n e.preventDefault();\r\n }\r\n}\r\nfunction escapeKeyDown(e: KeyboardEvent) {\r\n if (!closeOnPressEscape.value || submitting.value) {\r\n e.preventDefault();\r\n }\r\n}\r\n// pointer-down-outside\r\nfunction pointerDownOutside(e: Event) {\r\n const target = e.target as HTMLElement;\r\n const dismissableDrawer = target?.dataset.dismissableDrawer;\r\n if (\r\n submitting.value ||\r\n !closeOnClickModal.value ||\r\n dismissableDrawer !== id\r\n ) {\r\n e.preventDefault();\r\n }\r\n}\r\n\r\nfunction handerOpenAutoFocus(e: Event) {\r\n if (!openAutoFocus.value) {\r\n e?.preventDefault();\r\n }\r\n}\r\n\r\nfunction handleFocusOutside(e: Event) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n}\r\n\r\nconst getAppendTo = computed(() => {\r\n return appendToMain.value\r\n ? `#${ELEMENT_ID_MAIN_CONTENT}>div:not(.absolute)>div`\r\n : undefined;\r\n});\r\n\r\n/**\r\n * destroyOnClose功能完善\r\n */\r\n// 是否打开过\r\nconst hasOpened = ref(false);\r\nconst isClosed = ref(true);\r\nwatch(\r\n () => state?.value?.isOpen,\r\n (value) => {\r\n isClosed.value = false;\r\n if (value && !unref(hasOpened)) {\r\n hasOpened.value = true;\r\n }\r\n },\r\n);\r\nfunction handleClosed() {\r\n isClosed.value = true;\r\n props.drawerApi?.onClosed();\r\n}\r\nconst getForceMount = computed(() => {\r\n return !unref(destroyOnClose) && unref(hasOpened);\r\n});\r\n</script>\r\n<template>\r\n <Sheet\r\n :modal=\"false\"\r\n :open=\"state?.isOpen\"\r\n @update:open=\"() => drawerApi?.close()\"\r\n >\r\n <SheetContent\r\n :append-to=\"getAppendTo\"\r\n :class=\"\r\n cn('flex w-[520px] flex-col', drawerClass, {\r\n '!w-full': isMobile || placement === 'bottom' || placement === 'top',\r\n 'max-h-[100vh]': placement === 'bottom' || placement === 'top',\r\n hidden: isClosed,\r\n })\r\n \"\r\n :modal=\"modal\"\r\n :open=\"state?.isOpen\"\r\n :side=\"placement\"\r\n :z-index=\"zIndex\"\r\n :force-mount=\"getForceMount\"\r\n :overlay-blur=\"overlayBlur\"\r\n @close-auto-focus=\"handleFocusOutside\"\r\n @closed=\"handleClosed\"\r\n @escape-key-down=\"escapeKeyDown\"\r\n @focus-outside=\"handleFocusOutside\"\r\n @interact-outside=\"interactOutside\"\r\n @open-auto-focus=\"handerOpenAutoFocus\"\r\n @opened=\"() => drawerApi?.onOpened()\"\r\n @pointer-down-outside=\"pointerDownOutside\"\r\n >\r\n <SheetHeader\r\n v-if=\"showHeader\"\r\n :class=\"\r\n cn(\r\n '!flex flex-row items-center justify-between border-b px-6 py-5',\r\n headerClass,\r\n {\r\n 'px-4 py-3': closable,\r\n 'pl-2': closable && closeIconPlacement === 'left',\r\n },\r\n )\r\n \"\r\n >\r\n <div class=\"flex items-center\">\r\n <SheetClose\r\n v-if=\"closable && closeIconPlacement === 'left'\"\r\n as-child\r\n :disabled=\"submitting\"\r\n class=\"ml-[2px] cursor-pointer rounded-full opacity-80 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-secondary\"\r\n >\r\n <slot name=\"close-icon\">\r\n <AdminIconButton>\r\n <X class=\"size-4\" />\r\n </AdminIconButton>\r\n </slot>\r\n </SheetClose>\r\n <Separator\r\n v-if=\"closable && closeIconPlacement === 'left'\"\r\n class=\"ml-1 mr-2 h-8\"\r\n decorative\r\n orientation=\"vertical\"\r\n />\r\n <SheetTitle v-if=\"title\" class=\"text-left\">\r\n <slot name=\"title\">\r\n {{ title }}\r\n\r\n <AdminHelpTooltip v-if=\"titleTooltip\" trigger-class=\"pb-1\">\r\n {{ titleTooltip }}\r\n </AdminHelpTooltip>\r\n </slot>\r\n </SheetTitle>\r\n <SheetDescription v-if=\"description\" class=\"mt-1 text-xs\">\r\n <slot name=\"description\">\r\n {{ description }}\r\n </slot>\r\n </SheetDescription>\r\n </div>\r\n\r\n <VisuallyHidden v-if=\"!title || !description\">\r\n <SheetTitle v-if=\"!title\" />\r\n <SheetDescription v-if=\"!description\" />\r\n </VisuallyHidden>\r\n\r\n <div class=\"flex-center\">\r\n <slot name=\"extra\"></slot>\r\n <SheetClose\r\n v-if=\"closable && closeIconPlacement === 'right'\"\r\n as-child\r\n :disabled=\"submitting\"\r\n class=\"ml-[2px] cursor-pointer rounded-full opacity-80 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-secondary\"\r\n >\r\n <slot name=\"close-icon\">\r\n <AdminIconButton>\r\n <X class=\"size-4\" />\r\n </AdminIconButton>\r\n </slot>\r\n </SheetClose>\r\n </div>\r\n </SheetHeader>\r\n <template v-else>\r\n <VisuallyHidden>\r\n <SheetTitle />\r\n <SheetDescription />\r\n </VisuallyHidden>\r\n </template>\r\n <div\r\n ref=\"wrapperRef\"\r\n :class=\"\r\n cn('relative flex-1 overflow-y-auto p-3', contentClass, {\r\n 'pointer-events-none': showLoading || submitting,\r\n })\r\n \"\r\n >\r\n <slot></slot>\r\n </div>\r\n <AdminLoading v-if=\"showLoading || submitting\" spinning />\r\n <SheetFooter\r\n v-if=\"showFooter\"\r\n :class=\"\r\n cn(\r\n 'w-full flex-row items-center justify-end border-t p-2 px-3',\r\n footerClass,\r\n )\r\n \"\r\n >\r\n <slot name=\"prepend-footer\"></slot>\r\n <slot name=\"footer\">\r\n <component\r\n :is=\"components.DefaultButton || AdminButton\"\r\n v-if=\"showCancelButton\"\r\n variant=\"ghost\"\r\n :disabled=\"submitting\"\r\n @click=\"() => drawerApi?.onCancel()\"\r\n >\r\n <slot name=\"cancelText\">\r\n {{ cancelText || $t('cancel') }}\r\n </slot>\r\n </component>\r\n <slot name=\"center-footer\"></slot>\r\n <component\r\n :is=\"components.PrimaryButton || AdminButton\"\r\n v-if=\"showConfirmButton\"\r\n :loading=\"confirmLoading || submitting\"\r\n @click=\"() => drawerApi?.onConfirm()\"\r\n >\r\n <slot name=\"confirmText\">\r\n {{ confirmText || $t('confirm') }}\r\n </slot>\r\n </component>\r\n </slot>\r\n <slot name=\"append-footer\"></slot>\r\n </SheetFooter>\r\n </SheetContent>\r\n </Sheet>\r\n</template>\r\n","import type { DrawerApiOptions, DrawerState } from './drawer';\r\n\r\nimport { Store } from '@admin-kit/shared/store';\r\nimport { bindMethods, isFunction } from '@admin-kit/shared/utils';\r\n\r\nexport class DrawerApi {\r\n // 共享数据\r\n public sharedData: Record<'payload', any> = {\r\n payload: {},\r\n };\r\n public store: Store<DrawerState>;\r\n\r\n private api: Pick<\r\n DrawerApiOptions,\r\n | 'onBeforeClose'\r\n | 'onCancel'\r\n | 'onClosed'\r\n | 'onConfirm'\r\n | 'onOpenChange'\r\n | 'onOpened'\r\n >;\r\n\r\n // private prevState!: DrawerState;\r\n private state!: DrawerState;\r\n\r\n constructor(options: DrawerApiOptions = {}) {\r\n const {\r\n connectedComponent: _,\r\n onBeforeClose,\r\n onCancel,\r\n onClosed,\r\n onConfirm,\r\n onOpenChange,\r\n onOpened,\r\n ...storeState\r\n } = options;\r\n\r\n const defaultState: DrawerState = {\r\n class: '',\r\n closable: true,\r\n closeIconPlacement: 'right',\r\n closeOnClickModal: true,\r\n closeOnPressEscape: true,\r\n confirmLoading: false,\r\n contentClass: '',\r\n footer: true,\r\n header: true,\r\n isOpen: false,\r\n loading: false,\r\n modal: true,\r\n openAutoFocus: false,\r\n placement: 'right',\r\n showCancelButton: true,\r\n showConfirmButton: true,\r\n submitting: false,\r\n title: '',\r\n };\r\n\r\n this.store = new Store<DrawerState>(\r\n {\r\n ...defaultState,\r\n ...storeState,\r\n },\r\n {\r\n onUpdate: () => {\r\n const state = this.store.state;\r\n if (state?.isOpen === this.state?.isOpen) {\r\n this.state = state;\r\n } else {\r\n this.state = state;\r\n this.api.onOpenChange?.(!!state?.isOpen);\r\n }\r\n },\r\n },\r\n );\r\n this.state = this.store.state;\r\n this.api = {\r\n onBeforeClose,\r\n onCancel,\r\n onClosed,\r\n onConfirm,\r\n onOpenChange,\r\n onOpened,\r\n };\r\n bindMethods(this);\r\n }\r\n\r\n /**\r\n * 关闭抽屉\r\n * @description 关闭抽屉时会调用 onBeforeClose 钩子函数,如果 onBeforeClose 返回 false,则不关闭弹窗\r\n */\r\n async close() {\r\n // 通过 onBeforeClose 钩子函数来判断是否允许关闭弹窗\r\n // 如果 onBeforeClose 返回 false,则不关闭弹窗\r\n const allowClose = (await this.api.onBeforeClose?.()) ?? true;\r\n if (allowClose) {\r\n this.store.setState((prev) => ({\r\n ...prev,\r\n isOpen: false,\r\n submitting: false,\r\n }));\r\n }\r\n }\r\n\r\n getData<T extends object = Record<string, any>>() {\r\n return (this.sharedData?.payload ?? {}) as T;\r\n }\r\n\r\n /**\r\n * 锁定抽屉状态(用于提交过程中的等待状态)\r\n * @description 锁定状态将禁用默认的取消按钮,使用spinner覆盖抽屉内容,隐藏关闭按钮,阻止手动关闭弹窗,将默认的提交按钮标记为loading状态\r\n * @param isLocked 是否锁定\r\n */\r\n lock(isLocked: boolean = true) {\r\n return this.setState({ submitting: isLocked });\r\n }\r\n\r\n /**\r\n * 取消操作\r\n */\r\n onCancel() {\r\n if (this.api.onCancel) {\r\n this.api.onCancel?.();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * 弹窗关闭动画播放完毕后的回调\r\n */\r\n onClosed() {\r\n if (!this.state.isOpen) {\r\n this.api.onClosed?.();\r\n }\r\n }\r\n\r\n /**\r\n * 确认操作\r\n */\r\n onConfirm() {\r\n this.api.onConfirm?.();\r\n }\r\n\r\n /**\r\n * 弹窗打开动画播放完毕后的回调\r\n */\r\n onOpened() {\r\n if (this.state.isOpen) {\r\n this.api.onOpened?.();\r\n }\r\n }\r\n\r\n open() {\r\n this.store.setState((prev) => ({ ...prev, isOpen: true }));\r\n }\r\n\r\n setData<T>(payload: T) {\r\n this.sharedData.payload = payload;\r\n return this;\r\n }\r\n\r\n setState(\r\n stateOrFn:\r\n | ((prev: DrawerState) => Partial<DrawerState>)\r\n | Partial<DrawerState>,\r\n ) {\r\n if (isFunction(stateOrFn)) {\r\n this.store.setState(stateOrFn);\r\n } else {\r\n this.store.setState((prev) => ({ ...prev, ...stateOrFn }));\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 解除抽屉的锁定状态\r\n * @description 解除由lock方法设置的锁定状态,是lock(false)的别名\r\n */\r\n unlock() {\r\n return this.lock(false);\r\n }\r\n}\r\n","import type {\r\n DrawerApiOptions,\r\n DrawerProps,\r\n ExtendedDrawerApi,\r\n} from './drawer';\r\n\r\nimport {\r\n defineComponent,\r\n h,\r\n inject,\r\n nextTick,\r\n provide,\r\n reactive,\r\n ref,\r\n} from 'vue';\r\n\r\nimport { useStore } from '@admin-kit/shared/store';\r\n\r\nimport { DrawerApi } from './drawer-api';\r\nimport AdminDrawer from './drawer.vue';\r\n\r\nconst USER_DRAWER_INJECT_KEY = Symbol('ADMIN_DRAWER_INJECT');\r\n\r\nconst DEFAULT_DRAWER_PROPS: Partial<DrawerProps> = {};\r\n\r\nexport function setDefaultDrawerProps(props: Partial<DrawerProps>) {\r\n Object.assign(DEFAULT_DRAWER_PROPS, props);\r\n}\r\n\r\nexport function useAdminDrawer<\r\n TParentDrawerProps extends DrawerProps = DrawerProps,\r\n>(options: DrawerApiOptions = {}) {\r\n // Drawer一般会抽离出来,所以如果有传入 connectedComponent,则表示为外部调用,与内部组件进行连接\r\n // 外部的Drawer通过provide/inject传递api\r\n\r\n const { connectedComponent } = options;\r\n if (connectedComponent) {\r\n const extendedApi = reactive({});\r\n const isDrawerReady = ref(true);\r\n const Drawer = defineComponent(\r\n (props: TParentDrawerProps, { attrs, slots }) => {\r\n provide(USER_DRAWER_INJECT_KEY, {\r\n extendApi(api: ExtendedDrawerApi) {\r\n // 不能直接给 reactive 赋值,会丢失响应\r\n // 不能用 Object.assign,会丢失 api 的原型函数\r\n Object.setPrototypeOf(extendedApi, api);\r\n },\r\n options,\r\n async reCreateDrawer() {\r\n isDrawerReady.value = false;\r\n await nextTick();\r\n isDrawerReady.value = true;\r\n },\r\n });\r\n checkProps(extendedApi as ExtendedDrawerApi, {\r\n ...props,\r\n ...attrs,\r\n ...slots,\r\n });\r\n return () =>\r\n h(\r\n isDrawerReady.value ? connectedComponent : 'div',\r\n { ...props, ...attrs },\r\n slots,\r\n );\r\n },\r\n {\r\n name: 'AdminParentDrawer',\r\n inheritAttrs: false,\r\n },\r\n );\r\n\r\n return [Drawer, extendedApi as ExtendedDrawerApi] as const;\r\n }\r\n\r\n const injectData = inject<any>(USER_DRAWER_INJECT_KEY, {});\r\n\r\n const mergedOptions = {\r\n ...DEFAULT_DRAWER_PROPS,\r\n ...injectData.options,\r\n ...options,\r\n } as DrawerApiOptions;\r\n\r\n mergedOptions.onOpenChange = (isOpen: boolean) => {\r\n options.onOpenChange?.(isOpen);\r\n injectData.options?.onOpenChange?.(isOpen);\r\n };\r\n\r\n const onClosed = mergedOptions.onClosed;\r\n mergedOptions.onClosed = () => {\r\n onClosed?.();\r\n if (mergedOptions.destroyOnClose) {\r\n injectData.reCreateDrawer?.();\r\n }\r\n };\r\n const api = new DrawerApi(mergedOptions);\r\n\r\n const extendedApi: ExtendedDrawerApi = api as never;\r\n\r\n extendedApi.useStore = (selector) => {\r\n return useStore(api.store, selector);\r\n };\r\n\r\n const Drawer = defineComponent(\r\n (props: DrawerProps, { attrs, slots }) => {\r\n return () =>\r\n h(AdminDrawer, { ...props, ...attrs, drawerApi: extendedApi }, slots);\r\n },\r\n {\r\n name: 'AdminDrawer',\r\n inheritAttrs: false,\r\n },\r\n );\r\n injectData.extendApi?.(extendedApi);\r\n return [Drawer, extendedApi] as const;\r\n}\r\n\r\nasync function checkProps(api: ExtendedDrawerApi, attrs: Record<string, any>) {\r\n if (!attrs || Object.keys(attrs).length === 0) {\r\n return;\r\n }\r\n await nextTick();\r\n\r\n const state = api?.store?.state;\r\n\r\n if (!state) {\r\n return;\r\n }\r\n\r\n const stateKeys = new Set(Object.keys(state));\r\n\r\n for (const attr of Object.keys(attrs)) {\r\n if (stateKeys.has(attr) && !['class'].includes(attr)) {\r\n // connectedComponent存在时,不要传入Drawer的props,会造成复杂度提升,如果你需要修改Drawer的props,请使用 useAdminDrawer 或者api\r\n console.warn(\r\n `[Admin Drawer]: When 'connectedComponent' exists, do not set props or slots '${attr}', which will increase complexity. If you need to modify the props of Drawer, please use useAdminDrawer or api.`,\r\n );\r\n }\r\n }\r\n}\r\n","/**\r\n * @copy https://github.com/element-plus/element-plus/blob/dev/packages/hooks/use-draggable/index.ts\r\n * 调整部分细节\r\n */\r\n\r\nimport type { ComputedRef, Ref } from 'vue';\r\n\r\nimport { onBeforeUnmount, onMounted, reactive, ref, watchEffect } from 'vue';\r\n\r\nimport { unrefElement } from '@vueuse/core';\r\n\r\nexport function useModalDraggable(\r\n targetRef: Ref<HTMLElement | undefined>,\r\n dragRef: Ref<HTMLElement | undefined>,\r\n draggable: ComputedRef<boolean>,\r\n containerSelector?: ComputedRef<string | undefined>,\r\n centered?: ComputedRef<boolean>,\r\n) {\r\n const transform = reactive({\r\n offsetX: 0,\r\n offsetY: 0,\r\n });\r\n\r\n const dragging = ref(false);\r\n\r\n const onMousedown = (e: MouseEvent) => {\r\n const downX = e.clientX;\r\n const downY = e.clientY;\r\n\r\n if (!targetRef.value) {\r\n return;\r\n }\r\n\r\n const targetRect = targetRef.value.getBoundingClientRect();\r\n const { offsetX, offsetY } = transform;\r\n const targetLeft = targetRect.left;\r\n const targetTop = targetRect.top;\r\n const targetWidth = targetRect.width;\r\n const targetHeight = targetRect.height;\r\n\r\n let containerRect: DOMRect | null = null;\r\n\r\n if (containerSelector?.value) {\r\n const container = document.querySelector(containerSelector.value);\r\n if (container) {\r\n containerRect = container.getBoundingClientRect();\r\n }\r\n }\r\n\r\n let maxLeft, maxTop, minLeft, minTop;\r\n if (containerRect) {\r\n minLeft = containerRect.left - targetLeft + offsetX;\r\n maxLeft = containerRect.right - targetLeft - targetWidth + offsetX;\r\n minTop = containerRect.top - targetTop + offsetY;\r\n maxTop = containerRect.bottom - targetTop - targetHeight + offsetY;\r\n } else {\r\n const docElement = document.documentElement;\r\n const clientWidth = docElement.clientWidth;\r\n const clientHeight = docElement.clientHeight;\r\n minLeft = -targetLeft + offsetX;\r\n minTop = -targetTop + offsetY;\r\n maxLeft = clientWidth - targetLeft - targetWidth + offsetX;\r\n maxTop = clientHeight - targetTop - targetHeight + offsetY;\r\n }\r\n\r\n const onMousemove = (e: MouseEvent) => {\r\n let moveX = offsetX + e.clientX - downX;\r\n let moveY = offsetY + e.clientY - downY;\r\n\r\n moveX = Math.min(Math.max(moveX, minLeft), maxLeft);\r\n moveY = Math.min(Math.max(moveY, minTop), maxTop);\r\n\r\n transform.offsetX = moveX;\r\n transform.offsetY = moveY;\r\n\r\n if (targetRef.value) {\r\n const isCentered = centered?.value;\r\n targetRef.value.style.transform = isCentered\r\n ? `translate(${moveX}px, calc(-50% + ${moveY}px))`\r\n : `translate(${moveX}px, ${moveY}px)`;\r\n dragging.value = true;\r\n }\r\n };\r\n\r\n const onMouseup = () => {\r\n dragging.value = false;\r\n document.removeEventListener('mousemove', onMousemove);\r\n document.removeEventListener('mouseup', onMouseup);\r\n };\r\n\r\n document.addEventListener('mousemove', onMousemove);\r\n document.addEventListener('mouseup', onMouseup);\r\n };\r\n\r\n const onDraggable = () => {\r\n const dragDom = unrefElement(dragRef);\r\n if (dragDom && targetRef.value) {\r\n dragDom.addEventListener('mousedown', onMousedown);\r\n }\r\n };\r\n\r\n const offDraggable = () => {\r\n const dragDom = unrefElement(dragRef);\r\n if (dragDom && targetRef.value) {\r\n dragDom.removeEventListener('mousedown', onMousedown);\r\n }\r\n };\r\n\r\n const resetPosition = () => {\r\n transform.offsetX = 0;\r\n transform.offsetY = 0;\r\n\r\n const target = unrefElement(targetRef);\r\n if (target) {\r\n target.style.transform = '';\r\n }\r\n };\r\n\r\n onMounted(() => {\r\n watchEffect(() => {\r\n if (draggable.value) {\r\n onDraggable();\r\n } else {\r\n offDraggable();\r\n }\r\n });\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n offDraggable();\r\n });\r\n\r\n return {\r\n dragging,\r\n resetPosition,\r\n transform,\r\n };\r\n}\r\n","<script lang=\"ts\" setup>\r\nimport type { ExtendedModalApi, ModalProps } from './modal';\r\n\r\nimport {\r\n computed,\r\n nextTick,\r\n onDeactivated,\r\n provide,\r\n ref,\r\n unref,\r\n useId,\r\n watch,\r\n} from 'vue';\r\n\r\nimport {\r\n useIsMobile,\r\n usePriorityValues,\r\n useSimpleLocale,\r\n} from '@admin-kit/composables';\r\nimport { Expand, Shrink } from '@admin-kit/icons';\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogDescription,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n AdminButton,\r\n AdminHelpTooltip,\r\n AdminIconButton,\r\n AdminLoading,\r\n VisuallyHidden,\r\n} from '@admin-kit/shadcn-ui';\r\nimport { ELEMENT_ID_MAIN_CONTENT } from '@admin-kit/shared/constants';\r\nimport { globalShareState } from '@admin-kit/shared/global-state';\r\nimport { cn } from '@admin-kit/shared/utils';\r\n\r\nimport { useModalDraggable } from './use-modal-draggable';\r\n\r\ninterface Props extends ModalProps {\r\n modalApi?: ExtendedModalApi;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n appendToMain: false,\r\n destroyOnClose: false,\r\n modalApi: undefined,\r\n});\r\n\r\nconst components = globalShareState.getComponents();\r\n\r\nconst contentRef = ref();\r\nconst wrapperRef = ref<HTMLElement>();\r\nconst dialogRef = ref();\r\nconst headerRef = ref();\r\nconst footerRef = ref();\r\n\r\nconst id = useId();\r\n\r\nprovide('DISMISSABLE_MODAL_ID', id);\r\n\r\nconst { $t } = useSimpleLocale();\r\nconst { isMobile } = useIsMobile();\r\nconst state = props.modalApi?.useStore?.();\r\n\r\nconst {\r\n appendToMain,\r\n bordered,\r\n cancelText,\r\n centered,\r\n class: modalClass,\r\n closable,\r\n closeOnClickModal,\r\n closeOnPressEscape,\r\n confirmDisabled,\r\n confirmLoading,\r\n confirmText,\r\n contentClass,\r\n description,\r\n destroyOnClose,\r\n draggable,\r\n footer: showFooter,\r\n footerClass,\r\n fullscreen,\r\n fullscreenButton,\r\n header,\r\n headerClass,\r\n loading: showLoading,\r\n modal,\r\n openAutoFocus,\r\n overlayBlur,\r\n showCancelButton,\r\n showConfirmButton,\r\n submitting,\r\n title,\r\n titleTooltip,\r\n animationType,\r\n zIndex,\r\n} = usePriorityValues(props, state);\r\n\r\nconst shouldFullscreen = computed(() => fullscreen.value || isMobile.value);\r\n\r\nconst shouldDraggable = computed(\r\n () => draggable.value && !shouldFullscreen.value && header.value,\r\n);\r\n\r\nconst shouldCentered = computed(\r\n () => centered.value && !shouldFullscreen.value,\r\n);\r\n\r\nconst getAppendTo = computed(() => {\r\n return appendToMain.value\r\n ? `#${ELEMENT_ID_MAIN_CONTENT}>div:not(.absolute)>div`\r\n : undefined;\r\n});\r\n\r\nconst { dragging, transform } = useModalDraggable(\r\n dialogRef,\r\n headerRef,\r\n shouldDraggable,\r\n getAppendTo,\r\n shouldCentered,\r\n);\r\n\r\nconst firstOpened = ref(false);\r\nconst isClosed = ref(true);\r\n\r\nwatch(\r\n () => state?.value?.isOpen,\r\n async (v) => {\r\n if (v) {\r\n isClosed.value = false;\r\n if (!firstOpened.value) firstOpened.value = true;\r\n await nextTick();\r\n if (!contentRef.value) return;\r\n const innerContentRef = contentRef.value.getContentRef();\r\n dialogRef.value = innerContentRef.$el;\r\n // reopen modal reassign value\r\n const { offsetX, offsetY } = transform;\r\n dialogRef.value.style.transform = shouldCentered.value\r\n ? `translate(${offsetX}px, calc(-50% + ${offsetY}px))`\r\n : `translate(${offsetX}px, ${offsetY}px)`;\r\n }\r\n },\r\n { immediate: true },\r\n);\r\n\r\n// watch(\r\n// () => [showLoading.value, submitting.value],\r\n// ([l, s]) => {\r\n// if ((s || l) && wrapperRef.value) {\r\n// wrapperRef.value.scrollTo({\r\n// // behavior: 'smooth',\r\n// top: 0,\r\n// });\r\n// }\r\n// },\r\n// );\r\n\r\n/**\r\n * 在开启keepAlive情况下 直接通过浏览器按钮/手势等返回 不会关闭弹窗\r\n */\r\nonDeactivated(() => {\r\n // 如果弹窗没有被挂载到内容区域,则关闭弹窗\r\n if (!appendToMain.value) {\r\n props.modalApi?.close();\r\n }\r\n});\r\n\r\nfunction handleFullscreen() {\r\n props.modalApi?.setState((prev) => {\r\n // if (prev.fullscreen) {\r\n // resetPosition();\r\n // }\r\n return { ...prev, fullscreen: !fullscreen.value };\r\n });\r\n}\r\nfunction interactOutside(e: Event) {\r\n if (!closeOnClickModal.value || submitting.value) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n}\r\nfunction escapeKeyDown(e: KeyboardEvent) {\r\n if (!closeOnPressEscape.value || submitting.value) {\r\n e.preventDefault();\r\n }\r\n}\r\n\r\nfunction handleOpenAutoFocus(e: Event) {\r\n if (!openAutoFocus.value) {\r\n e?.preventDefault();\r\n }\r\n}\r\n\r\n// pointer-down-outside\r\nfunction pointerDownOutside(e: Event) {\r\n const target = e.target as HTMLElement;\r\n const isDismissableModal = target?.dataset.dismissableModal;\r\n if (\r\n !closeOnClickModal.value ||\r\n isDismissableModal !== id ||\r\n submitting.value\r\n ) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n}\r\n\r\nfunction handleFocusOutside(e: Event) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n}\r\n\r\nconst getForceMount = computed(() => {\r\n return !unref(destroyOnClose) && unref(firstOpened);\r\n});\r\n\r\nconst handleOpened = () => {\r\n requestAnimationFrame(() => {\r\n props.modalApi?.onOpened();\r\n });\r\n};\r\n\r\nfunction handleClosed() {\r\n isClosed.value = true;\r\n props.modalApi?.onClosed();\r\n}\r\n</script>\r\n<template>\r\n <Dialog\r\n :modal=\"false\"\r\n :open=\"state?.isOpen\"\r\n @update:open=\"() => (!submitting ? modalApi?.close() : undefined)\"\r\n >\r\n <DialogContent\r\n ref=\"contentRef\"\r\n :append-to=\"getAppendTo\"\r\n :class=\"\r\n cn(\r\n 'left-0 right-0 top-[10vh] mx-auto flex max-h-[80%] w-[520px] flex-col p-0',\r\n shouldFullscreen ? 'sm:rounded-none' : 'sm:rounded-[var(--radius)]',\r\n modalClass,\r\n {\r\n 'border border-border': bordered,\r\n 'shadow-3xl': !bordered,\r\n 'left-0 top-0 size-full max-h-full !translate-x-0 !translate-y-0':\r\n shouldFullscreen,\r\n 'top-1/2': centered && !shouldFullscreen,\r\n 'duration-300': !dragging,\r\n hidden: isClosed,\r\n },\r\n )\r\n \"\r\n :force-mount=\"getForceMount\"\r\n :modal=\"modal\"\r\n :open=\"state?.isOpen\"\r\n :show-close=\"closable\"\r\n :animation-type=\"animationType\"\r\n :z-index=\"zIndex\"\r\n :overlay-blur=\"overlayBlur\"\r\n close-class=\"top-3\"\r\n @close-auto-focus=\"handleFocusOutside\"\r\n @closed=\"handleClosed\"\r\n :close-disabled=\"submitting\"\r\n @escape-key-down=\"escapeKeyDown\"\r\n @focus-outside=\"handleFocusOutside\"\r\n @interact-outside=\"interactOutside\"\r\n @open-auto-focus=\"handleOpenAutoFocus\"\r\n @opened=\"handleOpened\"\r\n @pointer-down-outside=\"pointerDownOutside\"\r\n >\r\n <DialogHeader\r\n ref=\"headerRef\"\r\n :class=\"\r\n cn(\r\n 'px-5 py-4',\r\n {\r\n 'border-b': bordered,\r\n hidden: !header,\r\n 'cursor-move select-none': shouldDraggable,\r\n },\r\n headerClass,\r\n )\r\n \"\r\n >\r\n <DialogTitle v-if=\"title\" class=\"text-left\">\r\n <slot name=\"title\">\r\n {{ title }}\r\n\r\n <slot v-if=\"titleTooltip\" name=\"titleTooltip\">\r\n <AdminHelpTooltip trigger-class=\"pb-1\">\r\n {{ titleTooltip }}\r\n </AdminHelpTooltip>\r\n </slot>\r\n </slot>\r\n </DialogTitle>\r\n <DialogDescription v-if=\"description\">\r\n <slot name=\"description\">\r\n {{ description }}\r\n </slot>\r\n </DialogDescription>\r\n <VisuallyHidden v-if=\"!title || !description\">\r\n <DialogTitle v-if=\"!title\" />\r\n <DialogDescription v-if=\"!description\" />\r\n </VisuallyHidden>\r\n </DialogHeader>\r\n <div\r\n ref=\"wrapperRef\"\r\n :class=\"\r\n cn('relative min-h-40 flex-1 overflow-y-auto p-3', contentClass, {\r\n 'pointer-events-none': showLoading || submitting,\r\n })\r\n \"\r\n >\r\n <slot></slot>\r\n </div>\r\n <AdminLoading v-if=\"showLoading || submitting\" spinning />\r\n <AdminIconButton\r\n v-if=\"fullscreenButton\"\r\n class=\"flex-center absolute right-10 top-3 hidden size-6 rounded-full px-1 text-lg text-foreground/80 opacity-70 transition-opacity hover:bg-accent hover:text-accent-foreground hover:opacity-100 focus:outline-none disabled:pointer-events-none sm:block\"\r\n @click=\"handleFullscreen\"\r\n >\r\n <Shrink v-if=\"fullscreen\" class=\"size-3.5\" />\r\n <Expand v-else class=\"size-3.5\" />\r\n </AdminIconButton>\r\n\r\n <DialogFooter\r\n v-if=\"showFooter\"\r\n ref=\"footerRef\"\r\n :class=\"\r\n cn(\r\n 'flex-row items-center justify-end p-2',\r\n {\r\n 'border-t': bordered,\r\n },\r\n footerClass,\r\n )\r\n \"\r\n >\r\n <slot name=\"prepend-footer\"></slot>\r\n <slot name=\"footer\">\r\n <component\r\n :is=\"components.DefaultButton || AdminButton\"\r\n v-if=\"showCancelButton\"\r\n variant=\"ghost\"\r\n :disabled=\"submitting\"\r\n @click=\"() => modalApi?.onCancel()\"\r\n >\r\n <slot name=\"cancelText\">\r\n {{ cancelText || $t('cancel') }}\r\n </slot>\r\n </component>\r\n <slot name=\"center-footer\"></slot>\r\n <component\r\n :is=\"components.PrimaryButton || AdminButton\"\r\n v-if=\"showConfirmButton\"\r\n :disabled=\"confirmDisabled\"\r\n :loading=\"confirmLoading || submitting\"\r\n @click=\"() => modalApi?.onConfirm()\"\r\n >\r\n <slot name=\"confirmText\">\r\n {{ confirmText || $t('confirm') }}\r\n </slot>\r\n </component>\r\n </slot>\r\n <slot name=\"append-footer\"></slot>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n</template>\r\n","import type { ModalApiOptions, ModalState } from './modal';\r\n\r\nimport { Store } from '@admin-kit/shared/store';\r\nimport { bindMethods, isFunction } from '@admin-kit/shared/utils';\r\n\r\nexport class ModalApi {\r\n // 共享数据\r\n public sharedData: Record<'payload', any> = {\r\n payload: {},\r\n };\r\n public store: Store<ModalState>;\r\n\r\n private api: Pick<\r\n ModalApiOptions,\r\n | 'onBeforeClose'\r\n | 'onCancel'\r\n | 'onClosed'\r\n | 'onConfirm'\r\n | 'onOpenChange'\r\n | 'onOpened'\r\n >;\r\n\r\n // private prevState!: ModalState;\r\n private state!: ModalState;\r\n\r\n constructor(options: ModalApiOptions = {}) {\r\n const {\r\n connectedComponent: _,\r\n onBeforeClose,\r\n onCancel,\r\n onClosed,\r\n onConfirm,\r\n onOpenChange,\r\n onOpened,\r\n ...storeState\r\n } = options;\r\n\r\n const defaultState: ModalState = {\r\n bordered: true,\r\n centered: false,\r\n class: '',\r\n closeOnClickModal: true,\r\n closeOnPressEscape: true,\r\n confirmDisabled: false,\r\n confirmLoading: false,\r\n contentClass: '',\r\n destroyOnClose: true,\r\n draggable: false,\r\n footer: true,\r\n footerClass: '',\r\n fullscreen: false,\r\n fullscreenButton: true,\r\n header: true,\r\n headerClass: '',\r\n isOpen: false,\r\n loading: false,\r\n modal: true,\r\n openAutoFocus: false,\r\n showCancelButton: true,\r\n showConfirmButton: true,\r\n title: '',\r\n animationType: 'slide',\r\n };\r\n\r\n this.store = new Store<ModalState>(\r\n {\r\n ...defaultState,\r\n ...storeState,\r\n },\r\n {\r\n onUpdate: () => {\r\n const state = this.store.state;\r\n\r\n // 每次更新状态时,都会调用 onOpenChange 回调函数\r\n if (state?.isOpen === this.state?.isOpen) {\r\n this.state = state;\r\n } else {\r\n this.state = state;\r\n this.api.onOpenChange?.(!!state?.isOpen);\r\n }\r\n },\r\n },\r\n );\r\n\r\n this.state = this.store.state;\r\n\r\n this.api = {\r\n onBeforeClose,\r\n onCancel,\r\n onClosed,\r\n onConfirm,\r\n onOpenChange,\r\n onOpened,\r\n };\r\n bindMethods(this);\r\n }\r\n\r\n /**\r\n * 关闭弹窗\r\n * @description 关闭弹窗时会调用 onBeforeClose 钩子函数,如果 onBeforeClose 返回 false,则不关闭弹窗\r\n */\r\n async close() {\r\n // 通过 onBeforeClose 钩子函数来判断是否允许关闭弹窗\r\n // 如果 onBeforeClose 返回 false,则不关闭弹窗\r\n const allowClose = (await this.api.onBeforeClose?.()) ?? true;\r\n if (allowClose) {\r\n this.store.setState((prev) => ({\r\n ...prev,\r\n isOpen: false,\r\n }));\r\n }\r\n }\r\n\r\n getData<T extends object = Record<string, any>>() {\r\n return (this.sharedData?.payload ?? {}) as T;\r\n }\r\n\r\n /**\r\n * 锁定弹窗状态(用于提交过程中的等待状态)\r\n * @description 锁定状态将禁用默认的取消按钮,使用spinner覆盖弹窗内容,隐藏关闭按钮,阻止手动关闭弹窗,将默认的提交按钮标记为loading状态\r\n * @param isLocked 是否锁定\r\n */\r\n lock(isLocked = true) {\r\n return this.setState({ submitting: isLocked });\r\n }\r\n\r\n /**\r\n * 取消操作\r\n */\r\n onCancel() {\r\n if (this.api.onCancel) {\r\n this.api.onCancel?.();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * 弹窗关闭动画播放完毕后的回调\r\n */\r\n onClosed() {\r\n if (!this.state.isOpen) {\r\n this.api.onClosed?.();\r\n }\r\n }\r\n\r\n /**\r\n * 确认操作\r\n */\r\n onConfirm() {\r\n this.api.onConfirm?.();\r\n }\r\n\r\n /**\r\n * 弹窗打开动画播放完毕后的回调\r\n */\r\n onOpened() {\r\n if (this.state.isOpen) {\r\n this.api.onOpened?.();\r\n }\r\n }\r\n\r\n open() {\r\n this.store.setState((prev) => ({\r\n ...prev,\r\n isOpen: true,\r\n submitting: false,\r\n }));\r\n }\r\n\r\n setData<T>(payload: T) {\r\n this.sharedData.payload = payload;\r\n return this;\r\n }\r\n\r\n setState(\r\n stateOrFn:\r\n | ((prev: ModalState) => Partial<ModalState>)\r\n | Partial<ModalState>,\r\n ) {\r\n if (isFunction(stateOrFn)) {\r\n this.store.setState(stateOrFn);\r\n } else {\r\n this.store.setState((prev) => ({ ...prev, ...stateOrFn }));\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 解除弹窗的锁定状态\r\n * @description 解除由lock方法设置的锁定状态,是lock(false)的别名\r\n */\r\n unlock() {\r\n return this.lock(false);\r\n }\r\n}\r\n","import type { ExtendedModalApi, ModalApiOptions, ModalProps } from './modal';\r\n\r\nimport {\r\n defineComponent,\r\n h,\r\n inject,\r\n nextTick,\r\n provide,\r\n reactive,\r\n ref,\r\n} from 'vue';\r\n\r\nimport { useStore } from '@admin-kit/shared/store';\r\n\r\nimport { ModalApi } from './modal-api';\r\nimport AdminModal from './modal.vue';\r\n\r\nconst USER_MODAL_INJECT_KEY = Symbol('ADMIN_MODAL_INJECT');\r\n\r\nconst DEFAULT_MODAL_PROPS: Partial<ModalProps> = {};\r\n\r\nexport function setDefaultModalProps(props: Partial<ModalProps>) {\r\n Object.assign(DEFAULT_MODAL_PROPS, props);\r\n}\r\n\r\nexport function useAdminModal<TParentModalProps extends ModalProps = ModalProps>(\r\n options: ModalApiOptions = {},\r\n) {\r\n // Modal一般会抽离出来,所以如果有传入 connectedComponent,则表示为外部调用,与内部组件进行连接\r\n // 外部的Modal通过provide/inject传递api\r\n\r\n const { connectedComponent } = options;\r\n if (connectedComponent) {\r\n const extendedApi = reactive({});\r\n const isModalReady = ref(true);\r\n const Modal = defineComponent(\r\n (props: TParentModalProps, { attrs, slots }) => {\r\n provide(USER_MODAL_INJECT_KEY, {\r\n extendApi(api: ExtendedModalApi) {\r\n // 不能直接给 reactive 赋值,会丢失响应\r\n // 不能用 Object.assign,会丢失 api 的原型函数\r\n Object.setPrototypeOf(extendedApi, api);\r\n },\r\n options,\r\n async reCreateModal() {\r\n isModalReady.value = false;\r\n await nextTick();\r\n isModalReady.value = true;\r\n },\r\n });\r\n checkProps(extendedApi as ExtendedModalApi, {\r\n ...props,\r\n ...attrs,\r\n ...slots,\r\n });\r\n return () =>\r\n h(\r\n isModalReady.value ? connectedComponent : 'div',\r\n {\r\n ...props,\r\n ...attrs,\r\n },\r\n slots,\r\n );\r\n },\r\n {\r\n name: 'AdminParentModal',\r\n inheritAttrs: false,\r\n },\r\n );\r\n\r\n return [Modal, extendedApi as ExtendedModalApi] as const;\r\n }\r\n\r\n const injectData = inject<any>(USER_MODAL_INJECT_KEY, {});\r\n\r\n const mergedOptions = {\r\n ...DEFAULT_MODAL_PROPS,\r\n ...injectData.options,\r\n ...options,\r\n } as ModalApiOptions;\r\n\r\n mergedOptions.onOpenChange = (isOpen: boolean) => {\r\n options.onOpenChange?.(isOpen);\r\n injectData.options?.onOpenChange?.(isOpen);\r\n };\r\n\r\n const onClosed = mergedOptions.onClosed;\r\n mergedOptions.onClosed = () => {\r\n onClosed?.();\r\n if (mergedOptions.destroyOnClose) {\r\n injectData.reCreateModal?.();\r\n }\r\n };\r\n\r\n const api = new ModalApi(mergedOptions);\r\n\r\n const extendedApi: ExtendedModalApi = api as never;\r\n\r\n extendedApi.useStore = (selector) => {\r\n return useStore(api.store, selector);\r\n };\r\n\r\n const Modal = defineComponent(\r\n (props: ModalProps, { attrs, slots }) => {\r\n return () =>\r\n h(\r\n AdminModal,\r\n {\r\n ...props,\r\n ...attrs,\r\n modalApi: extendedApi,\r\n },\r\n slots,\r\n );\r\n },\r\n {\r\n name: 'AdminModal',\r\n inheritAttrs: false,\r\n },\r\n );\r\n injectData.extendApi?.(extendedApi);\r\n\r\n return [Modal, extendedApi] as const;\r\n}\r\n\r\nasync function checkProps(api: ExtendedModalApi, attrs: Record<string, any>) {\r\n if (!attrs || Object.keys(attrs).length === 0) {\r\n return;\r\n }\r\n await nextTick();\r\n\r\n const state = api?.store?.state;\r\n\r\n if (!state) {\r\n return;\r\n }\r\n\r\n const stateKeys = new Set(Object.keys(state));\r\n\r\n for (const attr of Object.keys(attrs)) {\r\n if (stateKeys.has(attr) && !['class'].includes(attr)) {\r\n // connectedComponent存在时,不要传入Modal的props,会造成复杂度提升,如果你需要修改Modal的props,请使用 useModal 或者api\r\n console.warn(\r\n `[Admin Modal]: When 'connectedComponent' exists, do not set props or slots '${attr}', which will increase complexity. If you need to modify the props of Modal, please use useAdminModal or api.`,\r\n );\r\n }\r\n }\r\n}\r\n","<script lang=\"ts\" setup>\r\nimport type { DropdownMenuProps } from '@admin-kit/shadcn-ui';\r\n\r\nimport { ChevronDown } from '@admin-kit/icons';\r\nimport { AdminDropdownMenu } from '@admin-kit/shadcn-ui';\r\n\r\ndefineProps<DropdownMenuProps>();\r\n</script>\r\n\r\n<template>\r\n <AdminDropdownMenu :menus=\"menus\" :modal=\"false\">\r\n <div\r\n class=\"flex-center h-full cursor-pointer border-l border-border px-2 text-lg font-semibold text-muted-foreground hover:bg-muted hover:text-foreground\"\r\n >\r\n <ChevronDown class=\"size-4\" />\r\n </div>\r\n </AdminDropdownMenu>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Fullscreen, Minimize2 } from '@admin-kit/icons';\r\n\r\nconst screen = defineModel<boolean>('screen');\r\n\r\nfunction toggleScreen() {\r\n screen.value = !screen.value;\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"flex-center h-full cursor-pointer border-l border-border px-2 text-lg font-semibold text-muted-foreground hover:bg-muted hover:text-foreground\"\r\n @click=\"toggleScreen\"\r\n >\r\n <Minimize2 v-if=\"screen\" class=\"size-4\" />\r\n <Fullscreen v-else class=\"size-4\" />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { TabDefinition } from '@admin-kit/typings';\r\n\r\nimport type { TabConfig, TabsProps } from '../../types';\r\n\r\nimport { computed, ref } from 'vue';\r\n\r\nimport { Pin, X } from '@admin-kit/icons';\r\nimport { AdminContextMenu, AdminIcon } from '@admin-kit/shadcn-ui';\r\n\r\ninterface Props extends TabsProps {}\r\n\r\ndefineOptions({\r\n name: 'AdminTabsChrome',\r\n inheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n contentClass: 'admin-tabs-content',\r\n contextMenus: () => [],\r\n gap: 7,\r\n tabs: () => [],\r\n});\r\n\r\nconst emit = defineEmits<{\r\n close: [string];\r\n unpin: [TabDefinition];\r\n}>();\r\nconst active = defineModel<string>('active');\r\n\r\nconst contentRef = ref();\r\nconst tabRef = ref();\r\n\r\nconst style = computed(() => {\r\n const { gap } = props;\r\n return {\r\n '--gap': `${gap}px`,\r\n };\r\n});\r\n\r\nconst tabsView = computed(() => {\r\n return props.tabs.map((tab) => {\r\n const { fullPath, meta, name, path, key } = tab || {};\r\n const { affixTab, icon, newTabTitle, tabClosable, title } = meta || {};\r\n return {\r\n affixTab: !!affixTab,\r\n closable: Reflect.has(meta, 'tabClosable') ? !!tabClosable : true,\r\n fullPath,\r\n icon: icon as string,\r\n key,\r\n meta,\r\n name,\r\n path,\r\n title: (newTabTitle || title || name) as string,\r\n } as TabConfig;\r\n });\r\n});\r\n\r\nfunction onMouseDown(e: MouseEvent, tab: TabConfig) {\r\n if (\r\n e.button === 1 &&\r\n tab.closable &&\r\n !tab.affixTab &&\r\n tabsView.value.length > 1 &&\r\n props.middleClickToClose\r\n ) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n emit('close', tab.key);\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"contentRef\"\r\n :class=\"contentClass\"\r\n :style=\"style\"\r\n class=\"tabs-chrome !flex h-full w-max overflow-y-hidden pr-6\"\r\n >\r\n <TransitionGroup name=\"slide-left\">\r\n <div\r\n v-for=\"(tab, i) in tabsView\"\r\n :key=\"tab.key\"\r\n ref=\"tabRef\"\r\n :class=\"[\r\n {\r\n 'is-active': tab.key === active,\r\n draggable: !tab.affixTab,\r\n 'affix-tab': tab.affixTab,\r\n },\r\n ]\"\r\n :data-active-tab=\"active\"\r\n :data-index=\"i\"\r\n class=\"tabs-chrome__item draggable translate-all group relative -mr-3 flex h-full select-none items-center\"\r\n data-tab-item=\"true\"\r\n @click=\"active = tab.key\"\r\n @mousedown=\"onMouseDown($event, tab)\"\r\n >\r\n <AdminContextMenu\r\n :handler-data=\"tab\"\r\n :menus=\"contextMenus\"\r\n :modal=\"false\"\r\n item-class=\"pr-6\"\r\n >\r\n <div class=\"relative size-full px-1\">\r\n <!-- divider -->\r\n <div\r\n v-if=\"i !== 0 && tab.key !== active\"\r\n class=\"tabs-chrome__divider absolute left-[var(--gap)] top-1/2 z-0 h-4 w-[1px] translate-y-[-50%] bg-border transition-all\"\r\n ></div>\r\n <!-- background -->\r\n <div\r\n class=\"tabs-chrome__background absolute z-[-1] size-full px-[calc(var(--gap)-1px)] py-0 transition-opacity duration-150\"\r\n >\r\n <div\r\n class=\"tabs-chrome__background-content h-full rounded-tl-[var(--gap)] rounded-tr-[var(--gap)] duration-150 group-[.is-active]:bg-primary/15 dark:group-[.is-active]:bg-accent\"\r\n ></div>\r\n <svg\r\n class=\"tabs-chrome__background-before absolute bottom-0 left-[-1px] fill-transparent transition-all duration-150 group-[.is-active]:fill-primary/15 dark:group-[.is-active]:fill-accent\"\r\n height=\"7\"\r\n width=\"7\"\r\n >\r\n <path d=\"M 0 7 A 7 7 0 0 0 7 0 L 7 7 Z\" />\r\n </svg>\r\n <svg\r\n class=\"tabs-chrome__background-after absolute bottom-0 right-[-1px] fill-transparent transition-all duration-150 group-[.is-active]:fill-primary/15 dark:group-[.is-active]:fill-accent\"\r\n height=\"7\"\r\n width=\"7\"\r\n >\r\n <path d=\"M 0 0 A 7 7 0 0 0 7 7 L 0 7 Z\" />\r\n </svg>\r\n </div>\r\n\r\n <!-- extra -->\r\n <div\r\n class=\"tabs-chrome__extra absolute right-[var(--gap)] top-1/2 z-[3] size-4 translate-y-[-50%]\"\r\n >\r\n <!-- close-icon -->\r\n <X\r\n v-show=\"!tab.affixTab && tabsView.length > 1 && tab.closable\"\r\n class=\"mt-[2px] size-3 cursor-pointer rounded-full stroke-accent-foreground/80 text-accent-foreground/80 transition-all hover:bg-accent hover:stroke-accent-foreground group-[.is-active]:text-accent-foreground\"\r\n @click.stop=\"() => emit('close', tab.key)\"\r\n />\r\n <Pin\r\n v-show=\"tab.affixTab && tabsView.length > 1 && tab.closable\"\r\n class=\"mt-[1px] size-3.5 cursor-pointer rounded-full text-accent-foreground/80 transition-all hover:text-accent-foreground group-[.is-active]:text-accent-foreground\"\r\n @click.stop=\"() => emit('unpin', tab)\"\r\n />\r\n </div>\r\n\r\n <!-- tab-item-main -->\r\n <div\r\n class=\"tabs-chrome__item-main z-[2] mx-[calc(var(--gap)*2)] my-0 flex h-full items-center overflow-hidden rounded-tl-[5px] rounded-tr-[5px] pl-2 pr-4 text-accent-foreground duration-150 group-[.is-active]:text-primary dark:group-[.is-active]:text-accent-foreground\"\r\n >\r\n <AdminIcon\r\n v-if=\"showIcon\"\r\n :icon=\"tab.icon\"\r\n class=\"mr-1 flex size-4 items-center overflow-hidden\"\r\n />\r\n\r\n <span class=\"flex-1 overflow-hidden whitespace-nowrap text-sm\">\r\n {{ tab.title }}\r\n </span>\r\n </div>\r\n </div>\r\n </AdminContextMenu>\r\n </div>\r\n </TransitionGroup>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.tabs-chrome {\r\n &__item:not(.dragging) {\r\n @apply cursor-pointer;\r\n\r\n &:hover:not(.is-active) {\r\n & + .tabs-chrome__item {\r\n .tabs-chrome__divider {\r\n @apply opacity-0;\r\n }\r\n }\r\n\r\n .tabs-chrome__divider {\r\n @apply opacity-0;\r\n }\r\n\r\n .tabs-chrome__background {\r\n @apply pb-[2px];\r\n\r\n &-content {\r\n @apply mx-[2px] rounded-md bg-accent;\r\n }\r\n }\r\n }\r\n\r\n &.is-active {\r\n @apply z-[2];\r\n\r\n & + .tabs-chrome__item {\r\n .tabs-chrome__divider {\r\n @apply opacity-0 !important;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport type { TabDefinition } from '@admin-kit/typings';\r\n\r\nimport type { TabConfig, TabsProps } from '../../types';\r\n\r\nimport { computed } from 'vue';\r\n\r\nimport { Pin, X } from '@admin-kit/icons';\r\nimport { AdminContextMenu, AdminIcon } from '@admin-kit/shadcn-ui';\r\n\r\ninterface Props extends TabsProps {}\r\n\r\ndefineOptions({\r\n name: 'AdminTabs',\r\n\r\n inheritAttrs: false,\r\n});\r\nconst props = withDefaults(defineProps<Props>(), {\r\n contentClass: 'admin-tabs-content',\r\n contextMenus: () => [],\r\n tabs: () => [],\r\n});\r\n\r\nconst emit = defineEmits<{\r\n close: [string];\r\n unpin: [TabDefinition];\r\n}>();\r\nconst active = defineModel<string>('active');\r\n\r\nconst typeWithClass = computed(() => {\r\n const typeClasses: Record<string, { content: string }> = {\r\n brisk: {\r\n content: `h-full after:content-[''] after:absolute after:bottom-0 after:left-0 after:w-full after:h-[1.5px] after:bg-primary after:scale-x-0 after:transition-[transform] after:ease-out after:duration-300 hover:after:scale-x-100 after:origin-left [&.is-active]:after:scale-x-100 [&:not(:first-child)]:border-l last:border-r last:border-r border-border`,\r\n },\r\n card: {\r\n content:\r\n 'h-[calc(100%-6px)] rounded-md ml-2 border border-border transition-all',\r\n },\r\n plain: {\r\n content:\r\n 'h-full [&:not(:first-child)]:border-l last:border-r border-border',\r\n },\r\n };\r\n\r\n return typeClasses[props.styleType || 'plain'] || { content: '' };\r\n});\r\n\r\nconst tabsView = computed(() => {\r\n return props.tabs.map((tab) => {\r\n const { fullPath, meta, name, path, key } = tab || {};\r\n const { affixTab, icon, newTabTitle, tabClosable, title } = meta || {};\r\n return {\r\n affixTab: !!affixTab,\r\n closable: Reflect.has(meta, 'tabClosable') ? !!tabClosable : true,\r\n fullPath,\r\n icon: icon as string,\r\n key,\r\n meta,\r\n name,\r\n path,\r\n title: (newTabTitle || title || name) as string,\r\n } as TabConfig;\r\n });\r\n});\r\n\r\nfunction onMouseDown(e: MouseEvent, tab: TabConfig) {\r\n if (\r\n e.button === 1 &&\r\n tab.closable &&\r\n !tab.affixTab &&\r\n tabsView.value.length > 1 &&\r\n props.middleClickToClose\r\n ) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n emit('close', tab.key);\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"contentClass\"\r\n class=\"relative !flex h-full w-max items-center overflow-hidden pr-6\"\r\n >\r\n <TransitionGroup name=\"slide-left\">\r\n <div\r\n v-for=\"(tab, i) in tabsView\"\r\n :key=\"tab.key\"\r\n :class=\"[\r\n {\r\n 'is-active bg-primary/15 dark:bg-accent': tab.key === active,\r\n draggable: !tab.affixTab,\r\n 'affix-tab': tab.affixTab,\r\n },\r\n typeWithClass.content,\r\n ]\"\r\n :data-index=\"i\"\r\n class=\"tab-item translate-all group relative flex cursor-pointer select-none [&:not(.is-active)]:hover:bg-accent\"\r\n data-tab-item=\"true\"\r\n @click=\"active = tab.key\"\r\n @mousedown=\"onMouseDown($event, tab)\"\r\n >\r\n <AdminContextMenu\r\n :handler-data=\"tab\"\r\n :menus=\"contextMenus\"\r\n :modal=\"false\"\r\n item-class=\"pr-6\"\r\n >\r\n <div class=\"relative flex size-full items-center\">\r\n <!-- extra -->\r\n <div\r\n class=\"absolute right-1.5 top-1/2 z-[3] translate-y-[-50%] overflow-hidden\"\r\n >\r\n <!-- close-icon -->\r\n <X\r\n v-show=\"!tab.affixTab && tabsView.length > 1 && tab.closable\"\r\n class=\"size-3 cursor-pointer rounded-full stroke-accent-foreground/80 transition-all hover:bg-accent hover:stroke-accent-foreground group-[.is-active]:text-primary dark:group-[.is-active]:text-accent-foreground\"\r\n @click.stop=\"() => emit('close', tab.key)\"\r\n />\r\n <Pin\r\n v-show=\"tab.affixTab && tabsView.length > 1 && tab.closable\"\r\n class=\"mt-[1px] size-3.5 cursor-pointer rounded-full transition-all hover:bg-accent hover:stroke-accent-foreground group-[.is-active]:text-primary dark:group-[.is-active]:text-accent-foreground\"\r\n @click.stop=\"() => emit('unpin', tab)\"\r\n />\r\n </div>\r\n\r\n <!-- tab-item-main -->\r\n <div\r\n class=\"mx-3 mr-4 flex h-full items-center overflow-hidden rounded-tl-[5px] rounded-tr-[5px] pr-3 text-accent-foreground transition-all duration-300 group-[.is-active]:text-primary dark:group-[.is-active]:text-accent-foreground\"\r\n >\r\n <AdminIcon\r\n v-if=\"showIcon\"\r\n :icon=\"tab.icon\"\r\n class=\"mr-2 flex size-4 items-center overflow-hidden\"\r\n fallback\r\n />\r\n\r\n <span class=\"flex-1 overflow-hidden whitespace-nowrap text-sm\">\r\n {{ tab.title }}\r\n </span>\r\n </div>\r\n </div>\r\n </AdminContextMenu>\r\n </div>\r\n </TransitionGroup>\r\n </div>\r\n</template>\r\n","import type { Sortable } from '@admin-kit/composables';\r\nimport type { EmitType } from '@admin-kit/typings';\r\n\r\nimport type { TabsProps } from './types';\r\n\r\nimport { nextTick, onMounted, onUnmounted, ref, watch } from 'vue';\r\n\r\nimport { useIsMobile, useSortable } from '@admin-kit/composables';\r\n\r\n// 可能会找到拖拽的子元素,这里需要确保拖拽的dom时tab元素\r\nfunction findParentElement(element: HTMLElement) {\r\n const parentCls = 'group';\r\n return element.classList.contains(parentCls)\r\n ? element\r\n : element.closest(`.${parentCls}`);\r\n}\r\n\r\nexport function useTabsDrag(props: TabsProps, emit: EmitType) {\r\n const sortableInstance = ref<null | Sortable>(null);\r\n\r\n async function initTabsSortable() {\r\n await nextTick();\r\n\r\n const el = document.querySelectorAll(\r\n `.${props.contentClass}`,\r\n )?.[0] as HTMLElement;\r\n\r\n if (!el) {\r\n console.warn('Element not found for sortable initialization');\r\n return;\r\n }\r\n\r\n const resetElState = async () => {\r\n el.style.cursor = 'default';\r\n // el.classList.remove('dragging');\r\n el.querySelector('.draggable')?.classList.remove('dragging');\r\n };\r\n\r\n const { initializeSortable } = useSortable(el, {\r\n filter: (_evt, target: HTMLElement) => {\r\n const parent = findParentElement(target);\r\n const draggable = parent?.classList.contains('draggable');\r\n return !draggable || !props.draggable;\r\n },\r\n onEnd(evt) {\r\n const { newIndex, oldIndex } = evt;\r\n // const fromElement = evt.item;\r\n const { srcElement } = (evt as any).originalEvent;\r\n\r\n if (!srcElement) {\r\n resetElState();\r\n return;\r\n }\r\n\r\n const srcParent = findParentElement(srcElement);\r\n\r\n if (!srcParent) {\r\n resetElState();\r\n return;\r\n }\r\n\r\n if (!srcParent.classList.contains('draggable')) {\r\n resetElState();\r\n\r\n return;\r\n }\r\n\r\n if (\r\n oldIndex !== undefined &&\r\n newIndex !== undefined &&\r\n !Number.isNaN(oldIndex) &&\r\n !Number.isNaN(newIndex) &&\r\n oldIndex !== newIndex\r\n ) {\r\n emit('sortTabs', oldIndex, newIndex);\r\n }\r\n resetElState();\r\n },\r\n onMove(evt) {\r\n const parent = findParentElement(evt.related);\r\n if (parent?.classList.contains('draggable') && props.draggable) {\r\n const isCurrentAffix = evt.dragged.classList.contains('affix-tab');\r\n const isRelatedAffix = evt.related.classList.contains('affix-tab');\r\n // 不允许在固定的tab和非固定的tab之间互相拖拽\r\n return isCurrentAffix === isRelatedAffix;\r\n } else {\r\n return false;\r\n }\r\n },\r\n onStart: () => {\r\n el.style.cursor = 'grabbing';\r\n el.querySelector('.draggable')?.classList.add('dragging');\r\n // el.classList.add('dragging');\r\n },\r\n });\r\n\r\n sortableInstance.value = await initializeSortable();\r\n }\r\n\r\n async function init() {\r\n const { isMobile } = useIsMobile();\r\n\r\n // 移动端下tab不需要拖拽\r\n if (isMobile.value) {\r\n return;\r\n }\r\n await nextTick();\r\n initTabsSortable();\r\n }\r\n\r\n onMounted(init);\r\n\r\n watch(\r\n () => props.styleType,\r\n () => {\r\n sortableInstance.value?.destroy();\r\n init();\r\n },\r\n );\r\n\r\n onUnmounted(() => {\r\n sortableInstance.value?.destroy();\r\n });\r\n}\r\n","import type { TabsProps } from './types';\r\n\r\nimport { nextTick, onMounted, onUnmounted, ref, watch } from 'vue';\r\n\r\nimport { AdminScrollbar } from '@admin-kit/shadcn-ui';\r\n\r\nimport { useDebounceFn } from '@vueuse/core';\r\n\r\ntype DomElement = Element | null | undefined;\r\n\r\nexport function useTabsViewScroll(props: TabsProps) {\r\n let resizeObserver: null | ResizeObserver = null;\r\n let mutationObserver: MutationObserver | null = null;\r\n let tabItemCount = 0;\r\n const scrollbarRef = ref<InstanceType<typeof AdminScrollbar> | null>(null);\r\n const scrollViewportEl = ref<DomElement>(null);\r\n const showScrollButton = ref(false);\r\n const scrollIsAtLeft = ref(true);\r\n const scrollIsAtRight = ref(false);\r\n\r\n function getScrollClientWidth() {\r\n const scrollbarEl = scrollbarRef.value?.$el;\r\n if (!scrollbarEl || !scrollViewportEl.value) return {};\r\n\r\n const scrollbarWidth = scrollbarEl.clientWidth;\r\n const scrollViewWidth = scrollViewportEl.value.clientWidth;\r\n\r\n return {\r\n scrollbarWidth,\r\n scrollViewWidth,\r\n };\r\n }\r\n\r\n function scrollDirection(\r\n direction: 'left' | 'right',\r\n distance: number = 150,\r\n ) {\r\n const { scrollbarWidth, scrollViewWidth } = getScrollClientWidth();\r\n\r\n if (!scrollbarWidth || !scrollViewWidth) return;\r\n\r\n if (scrollbarWidth > scrollViewWidth) return;\r\n\r\n scrollViewportEl.value?.scrollBy({\r\n behavior: 'smooth',\r\n left:\r\n direction === 'left'\r\n ? -(scrollbarWidth - distance)\r\n : +(scrollbarWidth - distance),\r\n });\r\n }\r\n\r\n async function initScrollbar() {\r\n await nextTick();\r\n\r\n const scrollbarEl = scrollbarRef.value?.$el;\r\n if (!scrollbarEl) {\r\n return;\r\n }\r\n\r\n const viewportEl = scrollbarEl?.querySelector(\r\n 'div[data-reka-scroll-area-viewport]',\r\n );\r\n\r\n scrollViewportEl.value = viewportEl;\r\n calcShowScrollbarButton();\r\n\r\n await nextTick();\r\n scrollToActiveIntoView();\r\n\r\n // 监听大小变化\r\n resizeObserver?.disconnect();\r\n resizeObserver = new ResizeObserver(\r\n useDebounceFn((_entries: ResizeObserverEntry[]) => {\r\n calcShowScrollbarButton();\r\n scrollToActiveIntoView();\r\n }, 100),\r\n );\r\n resizeObserver.observe(viewportEl);\r\n\r\n tabItemCount = props.tabs?.length || 0;\r\n mutationObserver?.disconnect();\r\n // 使用 MutationObserver 仅监听子节点数量变化\r\n mutationObserver = new MutationObserver(() => {\r\n const count = viewportEl.querySelectorAll(\r\n `div[data-tab-item=\"true\"]`,\r\n ).length;\r\n\r\n if (count > tabItemCount) {\r\n scrollToActiveIntoView();\r\n }\r\n\r\n if (count !== tabItemCount) {\r\n calcShowScrollbarButton();\r\n tabItemCount = count;\r\n }\r\n });\r\n\r\n // 配置为仅监听子节点的添加和移除\r\n mutationObserver.observe(viewportEl, {\r\n attributes: false,\r\n childList: true,\r\n subtree: true,\r\n });\r\n }\r\n\r\n async function scrollToActiveIntoView() {\r\n if (!scrollViewportEl.value) {\r\n return;\r\n }\r\n await nextTick();\r\n const viewportEl = scrollViewportEl.value;\r\n const { scrollbarWidth } = getScrollClientWidth();\r\n const { scrollWidth } = viewportEl;\r\n\r\n if (scrollbarWidth >= scrollWidth) {\r\n return;\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n const activeItem = viewportEl?.querySelector('.is-active');\r\n activeItem?.scrollIntoView({ behavior: 'smooth', inline: 'start' });\r\n });\r\n }\r\n\r\n /**\r\n * 计算tabs 宽度,用于判断是否显示左右滚动按钮\r\n */\r\n async function calcShowScrollbarButton() {\r\n if (!scrollViewportEl.value) {\r\n return;\r\n }\r\n\r\n const { scrollbarWidth } = getScrollClientWidth();\r\n\r\n showScrollButton.value =\r\n scrollViewportEl.value.scrollWidth > scrollbarWidth;\r\n }\r\n\r\n const handleScrollAt = useDebounceFn(({ left, right }) => {\r\n scrollIsAtLeft.value = left;\r\n scrollIsAtRight.value = right;\r\n }, 100);\r\n\r\n function handleWheel({ deltaY }: WheelEvent) {\r\n scrollViewportEl.value?.scrollBy({\r\n // behavior: 'smooth',\r\n left: deltaY * 3,\r\n });\r\n }\r\n\r\n watch(\r\n () => props.active,\r\n async () => {\r\n // 200为了等待 tab 切换动画完成\r\n // setTimeout(() => {\r\n scrollToActiveIntoView();\r\n // }, 300);\r\n },\r\n {\r\n flush: 'post',\r\n },\r\n );\r\n\r\n // watch(\r\n // () => props.tabs?.length,\r\n // async () => {\r\n // await nextTick();\r\n // calcShowScrollbarButton();\r\n // },\r\n // {\r\n // flush: 'post',\r\n // },\r\n // );\r\n\r\n watch(\r\n () => props.styleType,\r\n () => {\r\n initScrollbar();\r\n },\r\n );\r\n\r\n onMounted(initScrollbar);\r\n\r\n onUnmounted(() => {\r\n resizeObserver?.disconnect();\r\n mutationObserver?.disconnect();\r\n resizeObserver = null;\r\n mutationObserver = null;\r\n });\r\n\r\n return {\r\n handleScrollAt,\r\n handleWheel,\r\n initScrollbar,\r\n scrollbarRef,\r\n scrollDirection,\r\n scrollIsAtLeft,\r\n scrollIsAtRight,\r\n showScrollButton,\r\n };\r\n}\r\n","<script setup lang=\"ts\">\r\nimport type { TabsEmits, TabsProps } from './types';\r\n\r\nimport { useForwardPropsEmits } from '@admin-kit/composables';\r\nimport { ChevronLeft, ChevronRight } from '@admin-kit/icons';\r\nimport { AdminScrollbar } from '@admin-kit/shadcn-ui';\r\n\r\nimport { Tabs, TabsChrome } from './components';\r\nimport { useTabsDrag } from './use-tabs-drag';\r\nimport { useTabsViewScroll } from './use-tabs-view-scroll';\r\n\r\ninterface Props extends TabsProps {}\r\n\r\ndefineOptions({\r\n name: 'TabsView',\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n contentClass: 'admin-tabs-content',\r\n draggable: true,\r\n styleType: 'chrome',\r\n wheelable: true,\r\n});\r\n\r\nconst emit = defineEmits<TabsEmits>();\r\n\r\nconst forward = useForwardPropsEmits(props, emit);\r\n\r\nconst {\r\n handleScrollAt,\r\n handleWheel,\r\n scrollbarRef,\r\n scrollDirection,\r\n scrollIsAtLeft,\r\n scrollIsAtRight,\r\n showScrollButton,\r\n} = useTabsViewScroll(props);\r\n\r\nfunction onWheel(e: WheelEvent) {\r\n if (props.wheelable) {\r\n handleWheel(e);\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n}\r\n\r\nuseTabsDrag(props, emit);\r\n</script>\r\n\r\n<template>\r\n <div class=\"flex h-full flex-1 overflow-hidden\">\r\n <!-- 左侧滚动按钮 -->\r\n <span\r\n v-show=\"showScrollButton\"\r\n :class=\"{\r\n 'cursor-pointer text-muted-foreground hover:bg-muted': !scrollIsAtLeft,\r\n 'pointer-events-none opacity-30': scrollIsAtLeft,\r\n }\"\r\n class=\"border-r px-2\"\r\n @click=\"scrollDirection('left')\"\r\n >\r\n <ChevronLeft class=\"size-4 h-full\" />\r\n </span>\r\n\r\n <div\r\n :class=\"{\r\n 'pt-[3px]': styleType === 'chrome',\r\n }\"\r\n class=\"size-full flex-1 overflow-hidden\"\r\n >\r\n <AdminScrollbar\r\n ref=\"scrollbarRef\"\r\n :shadow-bottom=\"false\"\r\n :shadow-top=\"false\"\r\n class=\"h-full\"\r\n horizontal\r\n scroll-bar-class=\"z-10 hidden \"\r\n shadow\r\n shadow-left\r\n shadow-right\r\n @scroll-at=\"handleScrollAt\"\r\n @wheel=\"onWheel\"\r\n >\r\n <TabsChrome\r\n v-if=\"styleType === 'chrome'\"\r\n v-bind=\"{ ...forward, ...$attrs, ...$props }\"\r\n />\r\n\r\n <Tabs v-else v-bind=\"{ ...forward, ...$attrs, ...$props }\" />\r\n </AdminScrollbar>\r\n </div>\r\n\r\n <!-- 右侧滚动按钮 -->\r\n <span\r\n v-show=\"showScrollButton\"\r\n :class=\"{\r\n 'cursor-pointer text-muted-foreground hover:bg-muted': !scrollIsAtRight,\r\n 'pointer-events-none opacity-30': scrollIsAtRight,\r\n }\"\r\n class=\"cursor-pointer border-l px-2 text-muted-foreground hover:bg-muted\"\r\n @click=\"scrollDirection('right')\"\r\n >\r\n <ChevronRight class=\"size-4 h-full\" />\r\n </span>\r\n </div>\r\n</template>\r\n"],"names":["createIconifyIcon","icon","defineComponent","props","attrs","h","Icon","StorageManager","prefix","storageType","__publicField","keysToRemove","i","key","shortKey","defaultValue","fullKey","itemStr","item","error","value","ttl","isDarkColor","color","TinyColor","isLightColor","convertToHsl","a","l","hsl","convertToHslCssVar","convertToRgb","str","isValidColor","generatorColorVariables","colorItems","colorVariables","alias","name","colorsMap","getColors","mainColor","colorValue","hslColor","CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT","CSS_VARIABLE_LAYOUT_CONTENT_WIDTH","CSS_VARIABLE_LAYOUT_HEADER_HEIGHT","CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT","ELEMENT_ID_MAIN_CONTENT","DEFAULT_NAMESPACE","ADMIN_GITHUB_URL","ADMIN_DOC_URL","ADMIN_LOGO_URL","ADMIN_PREVIEW_URL","ADMIN_ELE_PREVIEW_URL","ADMIN_NAIVE_PREVIEW_URL","ADMIN_ANT_PREVIEW_URL","ADMIN_TD_PREVIEW_URL","cn","inputs","twMerge","clsx","t","e","module","this","n","o","r","u","f","s","m","c","d","v","dayjs","utc","timezone","formatDate","time","format","date","formatDateTime","isDate","isDayjsObject","getSystemTimezone","currentTimezone","setCurrentTimezone","getCurrentTimezone","arraysEqual","b","counter","count","diff","obj1","obj2","findDifferences","o1","o2","diffResult","valueDiff","getElementVisibleRect","element","rect","viewHeight","top","bottom","viewWidth","left","right","getScrollbarWidth","scrollDiv","innerDiv","scrollbarWidth","needsScrollbar","doc","body","overflowY","triggerWindowResize","resizeEvent","openWindow","url","options","noopener","noreferrer","target","features","openRouteInNewWindow","path","hash","origin","fullPath","DEFAULT_FILENAME","downloadFileFromUrl","fileName","source","isChrome","isSafari","triggerDownload","resolveFileName","downloadFileFromBase64","downloadFileFromImageUrl","base64","urlToBase64","downloadFileFromBlob","downloadFileFromBlobPart","blob","mineType","resolve","reject","canvas","ctx","img","dataURL","href","revokeDelay","finalFileName","link","isUndefined","isBoolean","isEmpty","isString","isObject","isHttpUrl","isWindow","isMacOs","isWindowsOs","isNumber","getFirstNonNullOrUndefined","values","capitalizeFirstLetter","string","toLowerCaseFirstLetter","toCamelCase","parentKey","kebabToCamelCase","word","index","mergeWithArrayOverride","createDefu","originObj","updates","nProgressInstance","loadNprogress","startProgress","nprogress","stopProgress","loadScript","src","script","StateHandler","to","promise","errorExt","traverseTreeValues","tree","getValue","result","childProps","dfs","treeNode","children","child","filterTree","filter","_filterTree","nodes","node","mapTree","mapper","mapperNode","sortTree","treeData","sortFunction","uniqueByField","arr","seen","updateCSSVariables","variables","id","styleElement","cssText","bindMethods","instance","prototype","propertyNames","propertyName","descriptor","propertyValue","getNestedValue","obj","keys","current","isUnsafeProperty","isDeepKey","toKey","_a","toString","toPath","deepKey","length","quoteChar","bracket","char","get","object","getWithPath","eq","other","getSymbols","symbol","getTag","regexpTag","stringTag","numberTag","booleanTag","argumentsTag","symbolTag","dateTag","mapTag","setTag","arrayTag","functionTag","arrayBufferTag","objectTag","errorTag","dataViewTag","uint8ArrayTag","uint8ClampedArrayTag","uint16ArrayTag","uint32ArrayTag","bigUint64ArrayTag","int8ArrayTag","int16ArrayTag","int32ArrayTag","bigInt64ArrayTag","float32ArrayTag","float64ArrayTag","IS_UNSIGNED_INTEGER","isIndex","isSymbol","regexIsDeepProp","regexIsPlainProp","isKey","assignValue","objValue","updateWith","updater","customizer","resolvedPath","updateValue","newValue","customizerResult","set","isPlainObject","proto","isEqualWith","areValuesEqual","isEqualWithImpl","property","aParent","bParent","stack","areObjectsEqual","aTag","bTag","x","y","aStack","bStack","aValues","bValues","aValue","bValue","aKeys","bKeys","propKey","aProp","bProp","noop","isEqual","GlobalShareState","__privateAdd","_components","_message","copyPreferencesSuccess","__privateGet","__privateSet","globalShareState","useIsMobile","useBreakpoints","breakpointsTailwind","useLayoutContentStyle","resizeObserver","contentElement","ref","visibleDomRect","contentHeight","useCssVar","contentWidth","overlayStyle","computed","height","width","debouncedCalcHeight","useDebounceFn","_entries","onMounted","onUnmounted","useLayoutHeaderStyle","headerHeight","useLayoutFooterStyle","footerHeight","statePrefix","_bem","namespace","block","blockSuffix","modifier","cls","is","args","state","useNamespace","styles","usePriorityValue","getCurrentInstance","slots","useSlots","useAttrs","rawProps","standardRawProps","propsKey","_b","usePriorityValues","useForwardPriorityValues","computedResult","unwrapResult","unref","SCROLL_FIXED_CLASS","useScrollLock","isLocked","_useScrollLock","tryOnMounted","tryOnBeforeUnmount","messages","getMessages","locale","useSimpleLocale","createSharedComposable","currentLocale","setSimpleLocale","localeMessages","useSortable","sortableContainer","Sortable","defaultPreferences","BUILT_IN_THEME_PRESETS","DEFAULT_TIME_ZONE_OPTIONS","COLOR_PRESETS","preferences","root","theme","builtinType","mode","radius","dark","isDarkTheme","currentBuiltType","builtinTypeColorPrimary","updateMainColorVariables","fontSize","preference","colorDestructive","colorPrimary","colorSuccess","colorWarning","sourceVar","targetVar","executeUpdateCSSVariables","STORAGE_KEYS","PreferenceManager","readonly","overrides","merge","cachedPreferences","mergedPreference","mergedState","markRaw","reactive","app","isMobile","watch","val","isDark","colorGrayMode","colorWeakMode","dom","preferencesManager","usePreferences","initialPreferences","diffPreference","appPreferences","shortcutKeysPreferences","layout","isShowHeaderNav","isFullContent","isSideNav","isSideMixedNav","isHeaderNav","isHeaderMixedNav","isHeaderSidebarNav","isMixedNav","isSideMode","sidebarCollapsed","keepAlive","authPanelLeft","authPanelRight","authPanelCenter","contentIsMaximize","headerIsHidden","sidebarIsHidden","globalSearchShortcutKey","enable","globalSearch","globalLogoutShortcutKey","globalLogout","globalLockScreenShortcutKey","globalLockScreen","preferencesButtonPosition","enablePreferences","header","sidebar","headerHidden","sidebarHidden","isHeaderPosition","fixed","getPreferences","updatePreferences","resetPreferences","clearCache","initPreferences","forwarded","useForwardPropsEmits","__props","__emit","_openBlock","_createBlock","_unref","_renderSlot","_ctx","delegatedProps","_","delegated","_mergeProps","_createElementVNode","_normalizeClass","forwardedProps","useForwardProps","AccordionItem","AccordionHeader","_createVNode","AccordionTrigger","ChevronDown","_createElementBlock","_hoisted_1","emits","_modal","_open","contentRef","onAnimationEnd","event","__expose","AlertDialogPortal","_Transition","AlertDialogOverlay","_normalizeStyle","AlertDialogDescription","AlertDialogTitle","avatarVariant","cva","AvatarRoot","badgeVariants","MoreHorizontal","_cache","Primitive","ChevronRight","buttonVariants","CheckboxRoot","CheckboxIndicator","_resolveDynamicComponent","Minus","Check","inject","__","___","isAppendToBody","position","_Teleport","DialogOverlay","DialogClose","X","DialogDescription","DialogPortal","originalEvent","DialogTitle","DropdownMenuCheckboxItem","DropdownMenuItemIndicator","DropdownMenuPortal","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuRadioItem","Circle","DropdownMenuSeparator","DropdownMenuSubContent","DropdownMenuSubTrigger","FORM_ITEM_INJECTION_KEY","useFormField","fieldContext","FieldContextKey","fieldItemContext","fieldState","useFieldError","useIsFieldDirty","useIsFieldTouched","useIsFieldValid","formDescriptionId","formItemId","formMessageId","Slot","useId","provide","Label","ErrorMessage","toValue","HoverCardPortal","HoverCardContent","modelValue","useVModel","$event","NumberFieldRoot","Plus","NumberFieldInput","PaginationEllipsis","Button","ChevronsLeft","ChevronsRight","ChevronLeft","PinInputRoot","PinInputInput","Dot","PopoverPortal","PopoverContent","$attrs","RadioGroupItem","RadioGroupIndicator","SplitterResizeHandle","GripVertical","SplitterGroup","ScrollAreaScrollbar","ScrollAreaThumb","ScrollAreaRoot","ScrollAreaViewport","ScrollBar","ScrollAreaCorner","SelectScrollDownButton","SelectScrollUpButton","ChevronUp","SelectPortal","SelectContent","SelectViewport","SelectItem","SelectItemIndicator","SelectItemText","SelectLabel","SelectSeparator","SelectTrigger","SelectIcon","Separator","_toDisplayString","sheetVariants","_side","SheetOverlay","SwitchRoot","SwitchThumb","TabsList","TabsTrigger","toggleVariants","_size","_variant","Toggle","ToggleGroupRoot","context","ToggleGroupItem","TooltipPortal","TooltipContent","treePropsDefaults","flatten","items","childrenField","level","parentId","parents","flattenData","_useModel","expanded","treeValue","watchEffect","updateTreeValue","expandToLevel","getItemByValue","filteredValues","updateModelValue","filteredVal","collapseNodes","expandNodes","expandAll","collapseAll","checkAll","unCheckAll","isNodeDisabled","onToggle","onSelect","isSelected","_c","p","_f","_e","_d","TreeRoot","_withCtx","flattenItems","$slots","Checkbox","checked","_TransitionGroup","_Fragment","_renderList","isExpanded","isIndeterminate","handleSelect","handleToggle","_withModifiers","_hoisted_2","IconifyIcon","_createTextVNode","imageStyle","fit","text","rootStyle","Avatar","AvatarImage","AvatarFallback","isDisabled","LoaderCircle","_sfc_main$X","isFunction","lines","line","emit","btnDefaultProps","objectOmit","innerValue","loadingValues","arrVal","onBtnClick","AdminButtonGroup","btn","CircleCheckBig","AdminRenderContent","TooltipProvider","Tooltip","TooltipTrigger","CircleHelp","showTooltip","AdminTooltip","AdminButton","useBackTop","el","shallowRef","container","visible","handleScroll","handleClick","handleScrollThrottled","useThrottleFn","useEventListener","backTopStyle","ArrowUpToLine","_hoisted_3","_component_AdminIcon","Breadcrumb","BreadcrumbList","BreadcrumbItem","DropdownMenu","DropdownMenuTrigger","menuItem","BreadcrumbLink","BreadcrumbPage","BreadcrumbSeparator","forward","BreadcrumbBackground","ContextMenuPortal","ContextMenuContent","ContextMenuItem","ContextMenuSeparator","_cls","_cProps","_iCls","menusView","menu","ContextMenuTrigger","ContextMenuShortcut","disabled","outputValue","useTransition","formatNumber","start","run","reset","TransitionPresets","num","decimal","decimals","separator","suffix","x1","x2","rgx","handleItemClick","DropdownMenuGroup","collapsed","isFullscreen","toggle","useFullscreen","AdminIconButton","Minimize","Maximize","HoverCardTrigger","isRemoteIcon","isComponent","_normalizeProps","strengthList","currentStrength","checkPasswordStrength","currentColor","password","strength","show","Input","PasswordStrength","Eye","EyeOff","logoSrc","AdminAvatar","pinType","timer","inputValue","countdown","btnText","countdownValue","btnLoading","handleComplete","handleSend","startCountdown","onBeforeUnmount","PinInput","PinInputGroup","_tClass","PopoverTrigger","ARRIVED_STATE_THRESHOLD_PIXELS","isAtTop","isAtRight","isAtBottom","isAtLeft","showShadowTop","showShadowBottom","showShadowLeft","showShadowRight","computedShadowClasses","scrollTop","scrollLeft","clientHeight","clientWidth","scrollHeight","scrollWidth","ScrollArea","TabsIndicator","activeTab","getDefaultValue","tabsStyle","tabsIndicatorStyle","activeClass","tab","Tabs","TabsContent","handleClear","Select","SelectValue","CircleX","style","showSpinner","renderSpinner","onTransitionEnd","DEFAULT_MODEL_PROP_NAME","DEFAULT_FORM_COMMON_CONFIG","COMPONENT_MAP","AdminCheckbox","AdminInputPassword","AdminPinInput","AdminSelect","COMPONENT_BIND_EVENT_MAP","setupAdminForm","config","defineRules","disabledOnChangeListener","disabledOnInputListener","emptyStateValue","defineRule","baseModelPropName","modelPropNameMap","components","component","getDefaultState","FormApi","originValues","arrayToStringFields","processFields","fields","sep","escapedSeparator","lastItem","fieldConfig","fieldMappingTime","field","startTimeKey","endTimeKey","startTime","endTime","startTimeFormat","endTimeFormat","transformFn","storeState","defaultState","Store","fieldName","isRef","form","formApi","chain","proxy","prop","nextFormApi","needMerge","results","api","toRaw","formActions","componentRefMap","fieldSet","filterSchema","opts","errors","firstErrorFieldName","componentRef","shouldValidate","stateOrFn","prev","filterFields","fieldMergeFn","createMerge","filteredFields","rawValues","schema","updated","currentSchema","updatedMap","updatedData","validateResult","valid","prevSchema","currentFields","deletedSchema","injectFormProps","provideFormProps","createContext","injectComponentRefMap","provideComponentRefMap","useFormInitial","initialValues","generateInitialValues","useForm","delegatedSlots","resultSlots","zodObject","customDefaultValue","getCustomDefaultValue","schemaInitialValues","getDefaultsForSchema","zodDefaults","rule","ZodString","ZodNumber","ZodObject","defaultValues","valueSchema","ZodIntersection","leftDefaultValue","rightDefaultValue","$t","rootProps","resetButtonOptions","submitButtonOptions","handleSubmit","handleReset","actionWrapperClass","actionLayout","actionPosition","_component_AdminExpandableArrow","isObjectLike","normalizeFormPath","pathArr","toTypedSchema","zodSchema","processIssues","defaults","getDefaults","description","getSchemaForPath","issues","issue","ue","ZodDefault","isObjectSchema","isNotNestedPath","cleanupNonNestedPath","paths","isArraySchema","getDefType","ZodFirstPartyTypeKind","injectRenderFormProps","provideFormRenderProps","useFormContext","formRenderProps","isVertical","componentMap","useDependencies","getDependencies","useFormValues","isIf","isShow","isRequired","dynamicComponentProps","dynamicRules","triggerFieldValues","dep","resetConditionState","_values","dependencies","componentProps","whenIf","required","rules","trigger","formValues","FormLabel","AdminHelpTooltip","getBaseRules","getDefaultValueInZodStack","typedSchema","isEventObjectLike","componentBindEventMap","fieldComponentRef","useTemplateRef","compact","isInValid","FieldComponent","finalComponent","labelStyle","currentRules","shouldRequired","isOptional","innerType","fieldRules","unwrappedRules","computedProps","finalComponentProps","nextTick","autofocus","shouldDisabled","customContentRender","renderContentKey","fieldProps","fieldBindEvent","slotProps","handler","bindEventField","shouldUnwrap","onChange","createComponentProps","bindEvents","_withDirectives","FormControl","_guardReactiveProps","_createSlots","renderSlotProps","CircleAlert","FormMessage","FormDescription","useExpandable","wrapperRef","isVisible","useElementVisibility","rowMapping","isCalculated","breakpoints","keepFormItemIndex","rows","mapping","maxItem","calculateRowMapping","formItems","rowHeights","containerRect","itemTop","rowStart","cumulativeHeight","rowHeight","wrapperClass","shapes","resultShapes","typeName","baseRules","formComponent","Form","formComponentProps","formCollapsed","computedSchema","colon","controlClass","formFieldProps","formItemClass","hideLabel","hideRequiredMark","labelClass","labelWidth","modelPropName","keepIndex","hidden","resolvedSchemaFormItemClass","cSchema","FormField","handleUpdateCollapsed","handleKeyDownEnter","handleValuesChangeDebounced","valuesCache","newVal","changedFields","newFieldValue","oldFieldValue","cloneDeep","FormActions","resetSlotProps","submitSlotProps","expandBeforeSlotProps","expandAfterSlotProps","slotName","useAdminForm","IS_REACTIVE","isReactive","extendedApi","selector","useStore","AdminUseForm","contentCompact","padding","paddingBottom","paddingLeft","paddingRight","paddingTop","zIndex","fullWidth","logoStyle","handleCollapsed","expandOnHover","toggleFixed","Pin","PinOff","collapse","extraCollapse","expandOnHovering","extraVisible","asideRef","hiddenSideStyle","calcMenuWidthStyle","isSidebarMixed","marginTop","extraStyle","extraWidth","extraTitleStyle","contentWidthStyle","collapseWidth","fixedExtra","mixedWidth","contentStyle","collapseHeight","headerStyle","extraContentStyle","collapseStyle","isHiddenDom","widthValue","handleMouseenter","handleMouseleave","SidebarFixedButton","AdminScrollbar","SidebarCollapseButton","useLayout","currentLayout","isSidebarMixedNav","sidebarCollapse","sidebarExtraVisible","sidebarExtraCollapse","sidebarExpandOnHover","sidebarEnable","sidebarExpandOnHovering","arrivedState","directions","isScrolling","scrollY","useScroll","setLayoutHeaderHeight","setLayoutFooterHeight","mouseY","useMouse","isHeaderAutoMode","headerWrapperHeight","getSideCollapseWidth","sidebarCollapseShowTitle","sidebarMixedWidth","sideCollapseWidth","sidebarEnableState","sidebarMarginTop","getSidebarWidth","sidebarWidth","sidebarExtraWidth","sidebarExtraCollapsedWidth","headerFixed","headerMode","showSidebar","maskVisible","mainStyle","sidebarAndExtraWidth","sideWidth","tabbarStyle","marginLeft","onHoveringWidth","footerEnable","footerFixed","headerZIndex","offset","headerWrapperStyle","sidebarZIndex","footerWidth","maskStyle","showHeaderToggleButton","showHeaderLogo","mouseMove","checkHeaderIsHidden","topArrived","handleClickMask","handleHeaderToggle","idMainContent","LayoutSidebar","LayoutHeader","_component_AdminIconButton","LayoutTabbar","LayoutContent","LayoutFooter","variantsMap","isDot","badgeClass","badgeStyle","BadgeDot","menuIcon","injectAlertContext","provideAlertContext","useAlertContext","open","isConfirm","onAlertClosed","onEscapeKeyDown","getIconRender","iconRender","Info","doCancel","handleCancel","handleOpenChange","doConfirm","handleConfirm","loading","AlertDialog","AlertDialogContent","AlertDialogCancel","AdminLoading","AlertDialogAction","alerts","adminAlert","arg0","arg1","arg2","alertRef","render","vnode","Alert","adminConfirm","defaultProps","adminPrompt","_component","_componentProps","componentSlots","content","_modelPropName","inputComponentRef","staticContents","scope","currentProps","focusableElement","clearAllAlerts","alert","appendToMain","cancelText","drawerClass","closable","closeIconPlacement","closeOnClickModal","closeOnPressEscape","confirmLoading","confirmText","contentClass","destroyOnClose","showFooter","footerClass","showHeader","headerClass","showLoading","modal","openAutoFocus","overlayBlur","placement","showCancelButton","showConfirmButton","submitting","title","titleTooltip","onDeactivated","interactOutside","escapeKeyDown","pointerDownOutside","dismissableDrawer","handerOpenAutoFocus","handleFocusOutside","getAppendTo","hasOpened","isClosed","handleClosed","getForceMount","Sheet","SheetContent","SheetHeader","SheetClose","SheetTitle","SheetDescription","VisuallyHidden","SheetFooter","DrawerApi","onBeforeClose","onCancel","onClosed","onConfirm","onOpenChange","onOpened","payload","USER_DRAWER_INJECT_KEY","DEFAULT_DRAWER_PROPS","setDefaultDrawerProps","useAdminDrawer","connectedComponent","isDrawerReady","checkProps","injectData","mergedOptions","isOpen","Drawer","AdminDrawer","stateKeys","attr","useModalDraggable","targetRef","dragRef","draggable","containerSelector","centered","transform","dragging","onMousedown","downX","downY","targetRect","offsetX","offsetY","targetLeft","targetTop","targetWidth","targetHeight","maxLeft","maxTop","minLeft","minTop","docElement","onMousemove","moveX","moveY","isCentered","onMouseup","onDraggable","dragDom","unrefElement","offDraggable","resetPosition","dialogRef","headerRef","footerRef","bordered","modalClass","confirmDisabled","fullscreen","fullscreenButton","animationType","shouldFullscreen","shouldDraggable","shouldCentered","firstOpened","innerContentRef","handleFullscreen","handleOpenAutoFocus","isDismissableModal","handleOpened","Dialog","DialogContent","DialogHeader","Shrink","Expand","DialogFooter","ModalApi","USER_MODAL_INJECT_KEY","DEFAULT_MODAL_PROPS","setDefaultModalProps","useAdminModal","isModalReady","Modal","AdminModal","AdminDropdownMenu","screen","toggleScreen","Minimize2","Fullscreen","active","tabRef","gap","tabsView","meta","affixTab","newTabTitle","tabClosable","onMouseDown","AdminContextMenu","_hoisted_4","_hoisted_5","AdminIcon","_hoisted_6","typeWithClass","findParentElement","parentCls","useTabsDrag","sortableInstance","initTabsSortable","resetElState","initializeSortable","_evt","parent","evt","newIndex","oldIndex","srcElement","srcParent","isCurrentAffix","isRelatedAffix","init","useTabsViewScroll","mutationObserver","tabItemCount","scrollbarRef","scrollViewportEl","showScrollButton","scrollIsAtLeft","scrollIsAtRight","getScrollClientWidth","scrollbarEl","scrollViewWidth","scrollDirection","direction","distance","initScrollbar","viewportEl","calcShowScrollbarButton","scrollToActiveIntoView","activeItem","handleScrollAt","handleWheel","deltaY","onWheel","TabsChrome","$props"],"mappings":"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","x_google_ignoreList":[8,9,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,234,237]}
|