vxui-re 1.0.6 → 1.0.7
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/index.cjs +2 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +17428 -0
- package/dist/src/components/Accordion.d.ts +14 -0
- package/dist/src/components/Alert.d.ts +10 -0
- package/dist/src/components/AppShell.d.ts +33 -0
- package/dist/src/components/Article.d.ts +72 -0
- package/dist/src/components/Avatar.d.ts +12 -0
- package/dist/src/components/Badge.d.ts +7 -0
- package/dist/src/components/Breadcrumb.d.ts +12 -0
- package/dist/src/components/Button.d.ts +18 -0
- package/dist/src/components/Calendar.d.ts +10 -0
- package/dist/src/components/Card.d.ts +17 -0
- package/dist/src/components/Carousel.d.ts +15 -0
- package/dist/src/components/Checkbox.d.ts +7 -0
- package/dist/src/components/CodeBlock.d.ts +9 -0
- package/dist/src/components/ColorPicker.d.ts +13 -0
- package/dist/src/components/CommandPalette.d.ts +22 -0
- package/dist/src/components/ContextMenu.d.ts +20 -0
- package/dist/src/components/DatePicker.d.ts +15 -0
- package/dist/src/components/Descriptions.d.ts +29 -0
- package/dist/src/components/Dialog.d.ts +49 -0
- package/dist/src/components/DropdownMenu.d.ts +55 -0
- package/dist/src/components/EmptyState.d.ts +9 -0
- package/dist/src/components/FileUpload.d.ts +17 -0
- package/dist/src/components/Form.d.ts +28 -0
- package/dist/src/components/Heading.d.ts +13 -0
- package/dist/src/components/HoverCard.d.ts +11 -0
- package/dist/src/components/Image.d.ts +30 -0
- package/dist/src/components/Input.d.ts +18 -0
- package/dist/src/components/Label.d.ts +5 -0
- package/dist/src/components/LanguageSwitcher.d.ts +9 -0
- package/dist/src/components/Menubar.d.ts +24 -0
- package/dist/src/components/MultiSelect.d.ts +27 -0
- package/dist/src/components/NavigationMenu.d.ts +20 -0
- package/dist/src/components/Notification.d.ts +30 -0
- package/dist/src/components/NumberInput.d.ts +12 -0
- package/dist/src/components/Pagination.d.ts +9 -0
- package/dist/src/components/PinInput.d.ts +37 -0
- package/dist/src/components/Popover.d.ts +13 -0
- package/dist/src/components/Progress.d.ts +11 -0
- package/dist/src/components/Radio.d.ts +12 -0
- package/dist/src/components/Rating.d.ts +14 -0
- package/dist/src/components/Resizable.d.ts +35 -0
- package/dist/src/components/Responsive.d.ts +25 -0
- package/dist/src/components/Result.d.ts +18 -0
- package/dist/src/components/ScrollArea.d.ts +21 -0
- package/dist/src/components/SegmentedControl.d.ts +16 -0
- package/dist/src/components/Select.d.ts +31 -0
- package/dist/src/components/Separator.d.ts +6 -0
- package/dist/src/components/Sheet/Sheet.d.ts +30 -0
- package/dist/src/components/Sheet/SheetPanel.d.ts +44 -0
- package/dist/src/components/Sheet/index.d.ts +2 -0
- package/dist/src/components/Sheet/useSheetState.d.ts +34 -0
- package/dist/src/components/Shell.d.ts +88 -0
- package/dist/src/components/Skeleton.d.ts +8 -0
- package/dist/src/components/Slider.d.ts +7 -0
- package/dist/src/components/Spinner.d.ts +8 -0
- package/dist/src/components/Stepper.d.ts +14 -0
- package/dist/src/components/Switch.d.ts +7 -0
- package/dist/src/components/Table.d.ts +90 -0
- package/dist/src/components/Tabs.d.ts +5 -0
- package/dist/src/components/TagInput.d.ts +18 -0
- package/dist/src/components/Text.d.ts +14 -0
- package/dist/src/components/Textarea.d.ts +7 -0
- package/dist/src/components/ThemeProvider.d.ts +51 -0
- package/dist/src/components/TimePicker.d.ts +14 -0
- package/dist/src/components/Timeline.d.ts +14 -0
- package/dist/src/components/Toast.d.ts +15 -0
- package/dist/src/components/Toggle.d.ts +24 -0
- package/dist/src/components/Tooltip.d.ts +11 -0
- package/dist/src/components/TreeView.d.ts +20 -0
- package/dist/src/components/mobile/ActionSheet.d.ts +15 -0
- package/dist/src/components/mobile/BottomNav.d.ts +23 -0
- package/dist/src/components/mobile/MobileApp.d.ts +1 -0
- package/dist/src/components/mobile/MobileDrawer.d.ts +31 -0
- package/dist/src/components/mobile/MobileList.d.ts +24 -0
- package/dist/src/components/mobile/MobilePreviewPage.d.ts +5 -0
- package/dist/src/components/mobile/MobileShell.d.ts +24 -0
- package/dist/src/components/pages/ErrorPage.d.ts +9 -0
- package/dist/src/components/pages/HomePage.d.ts +10 -0
- package/dist/src/components/pages/LoginPage.d.ts +12 -0
- package/dist/src/components/pages/PrivacyPolicyPage.d.ts +5 -0
- package/dist/src/components/pages/RegisterPage.d.ts +14 -0
- package/dist/src/components/pages/TermsOfServicePage.d.ts +5 -0
- package/dist/src/components/pages/homePageContent.d.ts +25 -0
- package/dist/src/components/pages/legalPageContent.d.ts +15 -0
- package/dist/src/lib/VXUIProvider.d.ts +29 -0
- package/dist/src/lib/breakpoints.d.ts +63 -0
- package/dist/src/lib/cx.d.ts +1 -0
- package/dist/src/lib/dialogPopover.d.ts +30 -0
- package/dist/src/lib/index.d.ts +152 -0
- package/dist/src/lib/version.d.ts +1 -0
- package/dist/src/lib/viewport.d.ts +21 -0
- package/package.json +18 -16
- package/dist/.assetsignore +0 -2
- package/dist/404.html +0 -18
- package/dist/assets/index-CnEehOVd.js +0 -1279
- package/dist/assets/index-rt2jc-43.css +0 -1
- package/dist/colorful_flat_icon.ico +0 -0
- package/dist/colorful_flat_icon.svg +0 -46
- package/dist/index.html +0 -47
- package/dist/wrangler.json +0 -1
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require("react");l=c(l,1);let u=require("react/jsx-runtime"),d=require("react-dom");d=c(d,1);var f={sm:640,md:768,lg:1e3},p=f.lg,m=.7,h=.75;function g(){if(typeof window>`u`)return`desktop`;let e=window.screen.width,t=window.screen.height;return e>p?`desktop`:e/t<.7?`phone`:`tablet`}var _=(0,l.createContext)({viewport:`desktop`,isPhone:!1,isTablet:!1,isTabletPortrait:!1,isDesktop:!0,screenWidth:0,screenHeight:0,aspectRatio:0});function v(){return typeof window>`u`?!1:window.innerHeight>window.innerWidth}function y({children:e}){let[t,n]=(0,l.useState)(g),[r,i]=(0,l.useState)(v);(0,l.useEffect)(()=>{let e=()=>{let e=g();n(t=>t===e?t:e);let t=v();i(e=>e===t?e:t)};if(window.addEventListener(`resize`,e,{passive:!0}),typeof window<`u`&&window.matchMedia){let t=window.matchMedia(`(orientation: portrait)`),r=()=>{let e=t.matches;i(t=>t===e?t:e);let r=g();n(e=>e===r?e:r)};return t.addEventListener(`change`,r),()=>{window.removeEventListener(`resize`,e),t.removeEventListener(`change`,r)}}return()=>window.removeEventListener(`resize`,e)},[]);let a=t===`tablet`,o=window.screen.width,s=window.screen.height,c=o/s,d={viewport:t,isPhone:t===`phone`,isTablet:a,isTabletPortrait:a&&r,isDesktop:t===`desktop`,screenWidth:o,screenHeight:s,aspectRatio:c};return(0,u.jsx)(_.Provider,{value:d,children:e})}function b(){return(0,l.useContext)(_)}function x({desktop:e,mobile:t,tablet:n}){let{viewport:r}=b();return r===`phone`?(0,u.jsx)(u.Fragment,{children:t}):r===`tablet`?(0,u.jsx)(u.Fragment,{children:n==null?e:n}):(0,u.jsx)(u.Fragment,{children:e})}function S(e){"@babel/helpers - typeof";return S=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},S(e)}function C(e,t){if(S(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(S(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function w(e){var t=C(e,`string`);return S(t)==`symbol`?t:t+``}function T(e,t,n){return(t=w(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function E(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function D(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?E(Object(n),!0).forEach(function(t){T(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var O={light:{label:`Light`,mode:`light`},dark:{label:`Dark`,mode:`dark`}};function k(e,t={}){return{label:t.label,mode:e,tokens:t.tokens}}var A=D(D({},O),{},{sunset:k(`light`,{label:`Sunset`,tokens:{"--vx-primary":`#c2410c`,"--vx-primary-strong":`#9a3412`,"--vx-primary-soft":`rgba(194, 65, 12, 0.12)`,"--vx-secondary":`#9a3412`,"--vx-bg":`#fff7ed`,"--vx-bg-accent":`#ffedd5`,"--vx-surface-hover":`#fffaf5`,"--vx-border":`#fed7aa`,"--vx-border-strong":`#fdba74`,"--vx-text":`#431407`,"--vx-text-secondary":`#9a3412`,"--vx-text-muted":`#b45309`,"--vx-shadow-sm":`0 1px 2px rgba(124, 45, 18, 0.08)`,"--vx-shadow":`0 14px 32px rgba(124, 45, 18, 0.08)`,"--vx-shadow-lg":`0 28px 64px rgba(124, 45, 18, 0.12)`}}),mint:k(`light`,{label:`Mint`,tokens:{"--vx-primary":`#0f766e`,"--vx-primary-strong":`#115e59`,"--vx-primary-soft":`rgba(15, 118, 110, 0.12)`,"--vx-secondary":`#0f766e`,"--vx-bg":`#f0fdfa`,"--vx-bg-accent":`#ccfbf1`,"--vx-surface-hover":`#f6fffd`,"--vx-border":`#99f6e4`,"--vx-border-strong":`#5eead4`,"--vx-text":`#042f2e`,"--vx-text-secondary":`#115e59`,"--vx-text-muted":`#0f766e`,"--vx-shadow-sm":`0 1px 2px rgba(4, 47, 46, 0.08)`,"--vx-shadow":`0 14px 32px rgba(4, 47, 46, 0.08)`,"--vx-shadow-lg":`0 28px 64px rgba(4, 47, 46, 0.12)`}}),graphite:k(`dark`,{label:`Graphite`,tokens:{"--vx-primary":`#f59e0b`,"--vx-primary-strong":`#d97706`,"--vx-primary-soft":`rgba(245, 158, 11, 0.16)`,"--vx-bg":`#111111`,"--vx-bg-accent":`#191919`,"--vx-surface":`#18181b`,"--vx-surface-strong":`#111111`,"--vx-surface-hover":`#222225`,"--vx-border":`rgba(244, 244, 245, 0.10)`,"--vx-border-strong":`rgba(244, 244, 245, 0.18)`,"--vx-text":`#fafafa`,"--vx-text-secondary":`#d4d4d8`,"--vx-text-muted":`#a1a1aa`,"--vx-shadow-sm":`0 1px 2px rgba(0, 0, 0, 0.34)`,"--vx-shadow":`0 20px 44px rgba(0, 0, 0, 0.28)`,"--vx-shadow-lg":`0 30px 72px rgba(0, 0, 0, 0.38)`}}),"ivory-gold":k(`light`,{label:`Ivory Gold`,tokens:{"--vx-primary":`#a0742a`,"--vx-primary-strong":`#7d5a1e`,"--vx-primary-soft":`rgba(160, 116, 42, 0.12)`,"--vx-bg":`#faf6ee`,"--vx-bg-accent":`#f2ead8`,"--vx-surface":`#ffffff`,"--vx-surface-strong":`#faf6ee`,"--vx-surface-hover":`#f6f0e4`,"--vx-border":`rgba(160, 116, 42, 0.18)`,"--vx-border-strong":`rgba(160, 116, 42, 0.38)`,"--vx-text":`#1c1409`,"--vx-text-secondary":`#5a4320`,"--vx-text-muted":`#9a7c4a`,"--vx-shadow-sm":`0 1px 2px rgba(90, 67, 32, 0.08)`,"--vx-shadow":`0 12px 32px rgba(90, 67, 32, 0.10)`,"--vx-shadow-lg":`0 28px 64px rgba(90, 67, 32, 0.14)`,"--vx-success":`#1a9e6e`,"--vx-warning":`#c4820a`,"--vx-danger":`#d63b3b`}}),"black-gold":k(`dark`,{label:`Black Gold`,tokens:{"--vx-primary":`#c8a97c`,"--vx-primary-strong":`#9a7545`,"--vx-primary-soft":`rgba(200, 169, 124, 0.16)`,"--vx-bg":`#05070b`,"--vx-bg-accent":`#0a0d14`,"--vx-surface":`rgba(15, 18, 25, 0.76)`,"--vx-surface-strong":`rgba(18, 21, 29, 0.9)`,"--vx-surface-hover":`rgba(245, 233, 215, 0.1)`,"--vx-border":`rgba(245, 233, 215, 0.12)`,"--vx-border-strong":`rgba(200, 169, 124, 0.42)`,"--vx-text":`#f5e9d7`,"--vx-text-secondary":`#d7c8b2`,"--vx-text-muted":`#928a81`,"--vx-shadow-sm":`0 1px 2px rgba(0, 0, 0, 0.4)`,"--vx-shadow":`0 0 42px rgba(200, 169, 124, 0.16)`,"--vx-shadow-lg":`0 34px 120px rgba(0, 0, 0, 0.62)`,"--vx-success":`#32d49a`,"--vx-warning":`#e6ad64`,"--vx-danger":`#ef6a64`}}),ocean:k(`dark`,{label:`Ocean`,tokens:{"--vx-primary":`#38bdf8`,"--vx-primary-strong":`#0ea5e9`,"--vx-primary-soft":`rgba(56, 189, 248, 0.16)`,"--vx-bg":`#06131f`,"--vx-bg-accent":`#0b1a2b`,"--vx-surface":`#0d2236`,"--vx-surface-strong":`#06131f`,"--vx-surface-hover":`#13314d`,"--vx-border":`rgba(125, 211, 252, 0.16)`,"--vx-border-strong":`rgba(56, 189, 248, 0.24)`,"--vx-text":`#e0f2fe`,"--vx-text-secondary":`#bae6fd`,"--vx-text-muted":`#7dd3fc`,"--vx-shadow-sm":`0 1px 2px rgba(2, 6, 23, 0.34)`,"--vx-shadow":`0 20px 44px rgba(2, 6, 23, 0.28)`,"--vx-shadow-lg":`0 30px 72px rgba(2, 6, 23, 0.4)`}}),indigo:k(`light`,{label:`Indigo`,tokens:{"--vx-primary":`#5c5fe8`,"--vx-primary-strong":`#4f52d4`,"--vx-primary-soft":`rgba(92, 95, 232, 0.10)`,"--vx-secondary":`#818cf8`,"--vx-success":`#059669`,"--vx-warning":`#d97706`,"--vx-danger":`#dc2626`,"--vx-info":`#5c5fe8`,"--vx-bg":`#e8ecf6`,"--vx-bg-accent":`#dde3f0`,"--vx-surface":`#ffffff`,"--vx-surface-strong":`#f8f9ff`,"--vx-surface-hover":`#f4f5ff`,"--vx-border":`#d4daf0`,"--vx-border-strong":`#bfc8e8`,"--vx-text":`#1a2336`,"--vx-text-secondary":`#4a5572`,"--vx-text-muted":`#8b96b4`,"--vx-shadow-sm":`0 1px 3px rgba(28, 40, 80, 0.08)`,"--vx-shadow":`0 8px 28px rgba(28, 40, 80, 0.10)`,"--vx-shadow-lg":`0 24px 60px rgba(28, 40, 80, 0.14)`,"--vx-glass-bg":`color-mix(in srgb, #ffffff 86%, transparent)`,"--vx-glass-bg-strong":`color-mix(in srgb, #f8f9ff 93%, transparent)`,"--vx-glass-border":`rgba(92, 95, 232, 0.18)`,"--vx-glass-shadow":`0 16px 44px rgba(28, 40, 80, 0.12)`,"--vx-glass-highlight":`inset 0 1px 0 rgba(255, 255, 255, 0.70)`,"--vx-radius-sm":`10px`,"--vx-radius":`12px`,"--vx-radius-lg":`16px`,"--vx-radius-xl":`22px`}}),violet:k(`light`,{label:`Violet`,tokens:{"--vx-primary":`#7c3aed`,"--vx-primary-strong":`#6d28d9`,"--vx-primary-soft":`rgba(124, 58, 237, 0.10)`,"--vx-secondary":`#8b5cf6`,"--vx-success":`#059669`,"--vx-warning":`#d97706`,"--vx-danger":`#dc2626`,"--vx-info":`#6d28d9`,"--vx-bg":`#f8f7ff`,"--vx-bg-accent":`#ede9fe`,"--vx-surface":`#ffffff`,"--vx-surface-strong":`#faf9ff`,"--vx-surface-hover":`#f5f3ff`,"--vx-border":`#e4dfff`,"--vx-border-strong":`#c9bffd`,"--vx-text":`#1e1b2e`,"--vx-text-secondary":`#6e6a8a`,"--vx-text-muted":`#a89fc8`,"--vx-shadow-sm":`0 1px 3px rgba(109, 40, 217, 0.07)`,"--vx-shadow":`0 12px 32px rgba(109, 40, 217, 0.10)`,"--vx-shadow-lg":`0 28px 64px rgba(109, 40, 217, 0.14)`,"--vx-glass-bg":`color-mix(in srgb, #ffffff 84%, transparent)`,"--vx-glass-bg-strong":`color-mix(in srgb, #faf9ff 92%, transparent)`,"--vx-glass-border":`rgba(196, 181, 253, 0.55)`,"--vx-glass-shadow":`0 18px 48px rgba(109, 40, 217, 0.12)`,"--vx-glass-highlight":`inset 0 1px 0 rgba(255, 255, 255, 0.60)`,"--vx-radius-sm":`10px`,"--vx-radius":`12px`,"--vx-radius-lg":`16px`,"--vx-radius-xl":`24px`}}),"violet-dark":k(`dark`,{label:`Violet Dark`,tokens:{"--vx-primary":`#a78bfa`,"--vx-primary-strong":`#8b5cf6`,"--vx-primary-soft":`rgba(167, 139, 250, 0.16)`,"--vx-secondary":`#c4b5fd`,"--vx-success":`#34d399`,"--vx-warning":`#fbbf24`,"--vx-danger":`#f87171`,"--vx-info":`#c4b5fd`,"--vx-bg":`#0d0b1a`,"--vx-bg-accent":`#13102a`,"--vx-surface":`#1a1735`,"--vx-surface-strong":`#0d0b1a`,"--vx-surface-hover":`#1e1b3a`,"--vx-border":`rgba(167, 139, 250, 0.16)`,"--vx-border-strong":`rgba(167, 139, 250, 0.30)`,"--vx-text":`#f0eeff`,"--vx-text-secondary":`#c4b5fd`,"--vx-text-muted":`#8b7fc8`,"--vx-shadow-sm":`0 1px 3px rgba(0, 0, 0, 0.40)`,"--vx-shadow":`0 18px 44px rgba(0, 0, 0, 0.30)`,"--vx-shadow-lg":`0 30px 72px rgba(0, 0, 0, 0.44)`,"--vx-glass-bg":`color-mix(in srgb, #1a1735 86%, transparent)`,"--vx-glass-bg-strong":`color-mix(in srgb, #0d0b1a 94%, transparent)`,"--vx-glass-border":`rgba(167, 139, 250, 0.22)`,"--vx-glass-shadow":`0 22px 54px rgba(0, 0, 0, 0.50)`,"--vx-glass-highlight":`inset 0 1px 0 rgba(255, 255, 255, 0.07)`,"--vx-glass-scrim":`color-mix(in srgb, #04030d 62%, transparent)`,"--vx-radius-sm":`10px`,"--vx-radius":`12px`,"--vx-radius-lg":`16px`,"--vx-radius-xl":`24px`}}),vxai:k(`light`,{label:`VXAI (Default)`,tokens:{"--vx-primary":`#4f46e5`,"--vx-primary-strong":`#4338ca`,"--vx-primary-soft":`rgba(79, 70, 229, 0.1)`,"--vx-secondary":`#64748b`,"--vx-success":`#10b981`,"--vx-warning":`#f59e0b`,"--vx-danger":`#ef4444`,"--vx-info":`#4f46e5`,"--vx-bg":`#f8fafc`,"--vx-bg-accent":`#f1f5f9`,"--vx-surface":`#ffffff`,"--vx-surface-strong":`#f8fafc`,"--vx-surface-hover":`#f1f5f9`,"--vx-border":`#e2e8f0`,"--vx-border-strong":`#cbd5e1`,"--vx-text":`#0f172a`,"--vx-text-secondary":`#334155`,"--vx-text-muted":`#64748b`,"--vx-shadow-sm":`0 1px 2px -1px rgba(0, 0, 0, 0.1), 0 1px 3px 0 rgba(0, 0, 0, 0.1)`,"--vx-shadow":`0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)`,"--vx-shadow-lg":`0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)`,"--vx-glass-bg":`rgba(255, 255, 255, 0.8)`,"--vx-glass-bg-strong":`rgba(255, 255, 255, 0.95)`,"--vx-glass-border":`#e2e8f0`,"--vx-glass-shadow":`none`,"--vx-glass-highlight":`none`,"--vx-radius-sm":`4px`,"--vx-radius":`6px`,"--vx-radius-lg":`8px`,"--vx-radius-xl":`12px`}}),"vxai-dark":k(`dark`,{label:`VXAI Dark`,tokens:{"--vx-primary":`#6366f1`,"--vx-primary-strong":`#4f46e5`,"--vx-primary-soft":`rgba(99, 102, 241, 0.16)`,"--vx-secondary":`#cbd5e1`,"--vx-success":`#34d399`,"--vx-warning":`#fbbf24`,"--vx-danger":`#f87171`,"--vx-info":`#6366f1`,"--vx-bg":`#020617`,"--vx-bg-accent":`#0f172a`,"--vx-surface":`#0f172a`,"--vx-surface-strong":`#020617`,"--vx-surface-hover":`#1e293b`,"--vx-border":`oklch(27.8% 0.033 256.848)`,"--vx-border-strong":`#334155`,"--vx-text":`oklch(96.8% 0.007 247.896)`,"--vx-text-secondary":`#94a3b8`,"--vx-text-muted":`#64748b`,"--vx-shadow-sm":`0 1px 2px -1px rgba(0, 0, 0, 0.4), 0 1px 3px 0 rgba(0, 0, 0, 0.4)`,"--vx-shadow":`0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.4)`,"--vx-shadow-lg":`0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -4px rgba(0, 0, 0, 0.4)`,"--vx-glass-bg":`rgba(15, 23, 42, 0.7)`,"--vx-glass-bg-strong":`rgba(15, 23, 42, 0.95)`,"--vx-glass-border":`oklch(27.8% 0.033 256.848)`,"--vx-glass-shadow":`none`,"--vx-glass-highlight":`none`,"--vx-radius-sm":`4px`,"--vx-radius":`6px`,"--vx-radius-lg":`8px`,"--vx-radius-xl":`12px`}})});function j(e){return D(D({},O),e)}function M(e,t){if(e&&t[e])return e;if(t.light)return`light`;let[n]=Object.keys(t);return n==null?`light`:n}function N(e,t){let n=window.localStorage.getItem(e);return n&&t[n]?n:null}function P(e,t,n){var r;if(((r=e[n])==null?void 0:r.mode)===t)return n;let i=Object.entries(e).find(([,e])=>e.mode===t);return i==null?void 0:i[0]}var F=(0,l.createContext)(null);function I({children:e,defaultTheme:t=`light`,storageKey:n=`vxui-re-theme`,themes:r}){let i=(0,l.useMemo)(()=>j(r),[r]),a=(0,l.useMemo)(()=>M(t,i),[t,i]),o=(0,l.useRef)([]),[s,c]=(0,l.useState)(()=>{var e;return typeof window>`u`||(e=N(n,i))==null?a:e}),d=i[s]?s:a,f=i[d];(0,l.useEffect)(()=>{s!==d&&c(d)},[d,s]),(0,l.useEffect)(()=>{var e;let t=document.documentElement;for(let e of o.current)t.style.removeProperty(e);t.dataset.theme=f.mode,t.dataset.themeName=d;let r=Object.entries((e=f.tokens)==null?{}:e).filter(e=>typeof e[1]==`string`&&e[1].length>0);for(let[e,n]of r)t.style.setProperty(e,n);o.current=r.map(([e])=>e),window.localStorage.setItem(n,d)},[f,d,n]);let p=(0,l.useMemo)(()=>({theme:d,mode:f.mode,themes:i,setTheme:e=>{c(i[e]?e:a)},toggleTheme:()=>{c(e=>{var t,n;let r=((t=i[e])==null?f:t).mode===`light`?`dark`:`light`;return(n=P(i,r,r))==null?e:n})}}),[f,a,i,d]);return(0,u.jsx)(F.Provider,{value:p,children:e})}function L(){let e=(0,l.useContext)(F);if(!e)throw Error(`useTheme must be used within ThemeProvider.`);return e}typeof window<`u`&&window.document&&window.document.createElement;function R(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e==null||e(r),n===!1||!r||!r.defaultPrevented)return t==null?void 0:t(r)}}function z(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function B(...e){return t=>{let n=!1,r=e.map(e=>{let r=z(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():z(e[t],null)}}}}function V(...e){return l.useCallback(B(...e),e)}function H(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}function U(e,t){if(e==null)return{};var n,r,i=H(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.includes(n)||{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var ee=[`scope`,`children`];function W(e,t=[]){let n=[];function r(t,r){let i=l.createContext(r);i.displayName=t+`Context`;let a=n.length;n=[...n,r];let o=t=>{var n;let{scope:r,children:o}=t,s=U(t,ee),c=(r==null||(n=r[e])==null?void 0:n[a])||i,d=l.useMemo(()=>s,Object.values(s));return(0,u.jsx)(c.Provider,{value:d,children:o})};o.displayName=t+`Provider`;function s(n,o,s={}){var c;let{optional:u=!1}=s,d=(o==null||(c=o[e])==null?void 0:c[a])||i,f=l.useContext(d);if(f)return f;if(r!==void 0)return r;if(!u)throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,s]}let i=()=>{let t=n.map(e=>l.createContext(e));return function(n){let r=(n==null?void 0:n[e])||t;return l.useMemo(()=>({[`__scope${e}`]:D(D({},n),{},{[e]:r})}),[n,r])}};return i.scopeName=e,[r,te(i,...t)]}function te(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return D(D({},t),i)},{});return l.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}var ne=[`children`];function G(e){let t=l.forwardRef((t,n)=>{var r;let{children:i}=t,a=U(t,ne),o=null,s=!1,c=[];se(i)&&typeof de==`function`&&(i=de(i._payload)),l.Children.forEach(i,e=>{if(ae(e)){var t;s=!0;let n=e,r=`child`in n.props?n.props.child:n.props.children;se(r)&&typeof de==`function`&&(r=de(r._payload)),o=q(n,r),c.push(o==null||(t=o.props)==null?void 0:t.children)}else c.push(e)}),o?o=l.cloneElement(o,void 0,c):!s&&l.Children.count(i)===1&&l.isValidElement(i)&&(o=i);let u=o?ie(o):void 0,d=V(n,u);if(!o){if(i||i===0)throw Error(s?ue(e):le(e));return i}let f=re(a,(r=o.props)==null?{}:r);return o.type!==l.Fragment&&(f.ref=n?d:u),l.cloneElement(o,f)});return t.displayName=`${e}.Slot`,t}var K=Symbol.for(`radix.slottable`),q=(e,t)=>{if(`child`in e.props){let t=e.props.child;return l.isValidElement(t)?l.cloneElement(t,void 0,e.props.children(t.props.children)):null}return l.isValidElement(t)?t:null};function re(e,t){let n=D({},t);for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]=D(D({},i),a):r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return D(D({},e),n)}function ie(e){var t,n;let r=(t=Object.getOwnPropertyDescriptor(e.props,`ref`))==null?void 0:t.get,i=r&&`isReactWarning`in r&&r.isReactWarning;return i?e.ref:(r=(n=Object.getOwnPropertyDescriptor(e,`ref`))==null?void 0:n.get,i=r&&`isReactWarning`in r&&r.isReactWarning,i?e.props.ref:e.props.ref||e.ref)}function ae(e){return l.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===K}var oe=Symbol.for(`react.lazy`);function se(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===oe&&`_payload`in e&&ce(e._payload)}function ce(e){return typeof e==`object`&&!!e&&`then`in e}var le=e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,ue=e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,de=l.use,fe=[`scope`,`children`];function pe(e){let t=e+`CollectionProvider`,[n,r]=W(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=e=>{let{scope:t,children:n}=e,r=l.useRef(null),a=l.useRef(new Map).current;return(0,u.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})};o.displayName=t;let s=e+`CollectionSlot`,c=G(s),d=l.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=V(t,a(s,n).collectionRef);return(0,u.jsx)(c,{ref:i,children:r})});d.displayName=s;let f=e+`CollectionItemSlot`,p=`data-radix-collection-item`,m=G(f),h=l.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=U(e,fe),o=l.useRef(null),s=V(t,o),c=a(f,n);return l.useEffect(()=>(c.itemMap.set(o,D({ref:o},i)),()=>void c.itemMap.delete(o))),(0,u.jsx)(m,D(D({},{[p]:``}),{},{ref:s,children:r}))});h.displayName=f;function g(t){let n=a(e+`CollectionConsumer`,t);return l.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${p}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:o,Slot:d,ItemSlot:h},g,r]}var me=[`asChild`],J=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=G(`Primitive.${t}`),r=l.forwardRef((e,r)=>{let{asChild:i}=e,a=U(e,me),o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,u.jsx)(o,D(D({},a),{},{ref:r}))});return r.displayName=`Primitive.${t}`,D(D({},e),{},{[t]:r})},{});function he(e,t){e&&d.flushSync(()=>e.dispatchEvent(t))}function Y(e){let t=l.useRef(e);return l.useEffect(()=>{t.current=e}),l.useMemo(()=>((...e)=>{var n;return(n=t.current)==null?void 0:n.call(t,...e)}),[])}var ge=[`disableOutsidePointerEvents`,`deferPointerDownOutside`,`onEscapeKeyDown`,`onPointerDownOutside`,`onFocusOutside`,`onInteractOutside`,`onDismiss`],_e=`DismissableLayer`,X=`dismissableLayer.update`,ve=`dismissableLayer.pointerDownOutside`,ye=`dismissableLayer.focusOutside`,be,xe=l.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),Se=l.forwardRef((e,t)=>{var n,r;let{disableOutsidePointerEvents:i=!1,deferPointerDownOutside:a=!1,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:c,onInteractOutside:d,onDismiss:f}=e,p=U(e,ge),m=l.useContext(xe),[h,g]=l.useState(null),_=(n=h==null?void 0:h.ownerDocument)==null?(r=globalThis)==null?void 0:r.document:n,[,v]=l.useState({}),y=V(t,g),b=Array.from(m.layers),[x]=[...m.layersWithOutsidePointerEventsDisabled].slice(-1),S=x?b.indexOf(x):-1,C=h?b.indexOf(h):-1,w=m.layersWithOutsidePointerEventsDisabled.size>0,T=C>=S,E=l.useRef(!1),O=Ee(e=>{s==null||s(e),d==null||d(e),e.defaultPrevented||f==null||f()},{ownerDocument:_,deferPointerDownOutside:a,isDeferredPointerDownOutsideRef:E,dismissableSurfaces:m.dismissableSurfaces,shouldHandlePointerDownOutside:l.useCallback(e=>{if(!(e instanceof Node))return!1;let t=[...m.branches].some(t=>t.contains(e));return T&&!t},[m.branches,T])}),k=De(e=>{if(a&&E.current)return;let t=e.target;[...m.branches].some(e=>e.contains(t))||(c==null||c(e),d==null||d(e),e.defaultPrevented||f==null||f())},_),A=h?C===b.length-1:!1,j=Y(e=>{e.key===`Escape`&&(o==null||o(e),!e.defaultPrevented&&f&&(e.preventDefault(),f()))});return l.useEffect(()=>{if(A)return _.addEventListener(`keydown`,j,{capture:!0}),()=>_.removeEventListener(`keydown`,j,{capture:!0})},[_,A,j]),l.useEffect(()=>{if(h)return i&&(m.layersWithOutsidePointerEventsDisabled.size===0&&(be=_.body.style.pointerEvents,_.body.style.pointerEvents=`none`),m.layersWithOutsidePointerEventsDisabled.add(h)),m.layers.add(h),Oe(),()=>{i&&(m.layersWithOutsidePointerEventsDisabled.delete(h),m.layersWithOutsidePointerEventsDisabled.size===0&&(_.body.style.pointerEvents=be))}},[h,_,i,m]),l.useEffect(()=>()=>{h&&(m.layers.delete(h),m.layersWithOutsidePointerEventsDisabled.delete(h),Oe())},[h,m]),l.useEffect(()=>{let e=()=>v({});return document.addEventListener(X,e),()=>document.removeEventListener(X,e)},[]),(0,u.jsx)(J.div,D(D({},p),{},{ref:y,style:D({pointerEvents:w?T?`auto`:`none`:void 0},e.style),onFocusCapture:R(e.onFocusCapture,k.onFocusCapture),onBlurCapture:R(e.onBlurCapture,k.onBlurCapture),onPointerDownCapture:R(e.onPointerDownCapture,O.onPointerDownCapture)}))});Se.displayName=_e;var Ce=`DismissableLayerBranch`,we=l.forwardRef((e,t)=>{let n=l.useContext(xe),r=l.useRef(null),i=V(t,r);return l.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,u.jsx)(J.div,D(D({},e),{},{ref:i}))});we.displayName=Ce;var Te=()=>!0;function Ee(e,t){var n;let{ownerDocument:r=(n=globalThis)==null?void 0:n.document,deferPointerDownOutside:i=!1,isDeferredPointerDownOutsideRef:a,dismissableSurfaces:o,shouldHandlePointerDownOutside:s=Te}=t,c=Y(e),u=l.useRef(!1),d=l.useRef(!1),f=l.useRef(new Map),p=l.useRef(()=>{});return l.useEffect(()=>{function e(){d.current=!1,a.current=!1,f.current.clear()}function t(){return Array.from(f.current.values()).some(Boolean)}function n(e){if(!d.current)return;let t=e.target;t instanceof Node&&[...o].some(e=>e.contains(t))||f.current.set(e.type,!0),e.type===`click`&&window.setTimeout(()=>{d.current&&p.current()},0)}function l(e){d.current&&f.current.set(e.type,!1)}let m=n=>{if(n.target&&!u.current){let o=function(){r.removeEventListener(`click`,p.current);let n=t();e(),n||ke(ve,c,l,{discrete:!0})};if(!s(n.target)){r.removeEventListener(`click`,p.current),e(),u.current=!1;return}let l={originalEvent:n};d.current=!0,a.current=i&&n.button===0,f.current.clear(),!i||n.button!==0?o():(r.removeEventListener(`click`,p.current),p.current=o,r.addEventListener(`click`,p.current,{once:!0}))}else r.removeEventListener(`click`,p.current),e();u.current=!1},h=[`pointerup`,`mousedown`,`mouseup`,`touchstart`,`touchend`,`click`];for(let e of h)r.addEventListener(e,n,!0),r.addEventListener(e,l);let g=window.setTimeout(()=>{r.addEventListener(`pointerdown`,m)},0);return()=>{window.clearTimeout(g),r.removeEventListener(`pointerdown`,m),r.removeEventListener(`click`,p.current);for(let e of h)r.removeEventListener(e,n,!0),r.removeEventListener(e,l)}},[r,c,i,a,o,s]),{onPointerDownCapture:()=>u.current=!0}}function De(e,t=(()=>{var e;return(e=globalThis)==null?void 0:e.document})()){let n=Y(e),r=l.useRef(!1);return l.useEffect(()=>{let e=e=>{e.target&&!r.current&&ke(ye,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Oe(){let e=new CustomEvent(X);document.dispatchEvent(e)}function ke(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?he(i,a):i.dispatchEvent(a)}var Ae=Se,je=we,Me,Ne=(Me=globalThis)!=null&&Me.document?l.useLayoutEffect:()=>{},Pe=[`container`],Fe=`Portal`,Ie=l.forwardRef((e,t)=>{var n;let{container:r}=e,i=U(e,Pe),[a,o]=l.useState(!1);Ne(()=>o(!0),[]);let s=r||a&&((n=globalThis)==null||(n=n.document)==null?void 0:n.body);return s?d.createPortal((0,u.jsx)(J.div,D(D({},i),{},{ref:t})),s):null});Ie.displayName=Fe;function Le(e,t){return l.useReducer((e,n)=>{let r=t[e][n];return r==null?e:r},e)}var Re=e=>{let{present:t,children:n}=e,r=ze(t),i=typeof n==`function`?n({present:r.isPresent}):l.Children.only(n),a=Ve(r.ref,Ue(i));return typeof n==`function`||r.isPresent?l.cloneElement(i,{ref:a}):null};Re.displayName=`Presence`;function ze(e){let[t,n]=l.useState(),r=l.useRef(null),i=l.useRef(e),a=l.useRef(`none`),o=l.useRef(void 0),[s,c]=Le(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return l.useEffect(()=>{if(s===`mounted`){var e;a.current=(e=o.current)==null?He(r.current):e,o.current=void 0}else a.current=`none`},[s]),Ne(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,s=He(t);e?(o.current=s,c(`MOUNT`)):s===`none`||(t==null?void 0:t.display)===`none`?c(`UNMOUNT`):c(n&&r!==s?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,c]),Ne(()=>{if(t){var e;let n,o=(e=t.ownerDocument.defaultView)==null?window:e,s=e=>{let a=He(r.current).includes(CSS.escape(e.animationName));if(e.target===t&&a&&(c(`ANIMATION_END`),!i.current)){let e=t.style.animationFillMode;t.style.animationFillMode=`forwards`,n=o.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=e)})}},l=e=>{e.target===t&&(a.current=He(r.current))};return t.addEventListener(`animationstart`,l),t.addEventListener(`animationcancel`,s),t.addEventListener(`animationend`,s),()=>{o.clearTimeout(n),t.removeEventListener(`animationstart`,l),t.removeEventListener(`animationcancel`,s),t.removeEventListener(`animationend`,s)}}else c(`ANIMATION_END`)},[t,c]),{isPresent:[`mounted`,`unmountSuspended`].includes(s),ref:l.useCallback(e=>{if(e){let t=getComputedStyle(e);r.current=t,o.current=He(t)}else r.current=null;n(e)},[])}}function Be(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function Ve(...e){let t=l.useRef(e);return t.current=e,l.useCallback(e=>{let n=t.current,r=!1,i=n.map(t=>{let n=Be(t,e);return!r&&typeof n==`function`&&(r=!0),n});if(r)return()=>{for(let e=0;e<i.length;e++){let t=i[e];typeof t==`function`?t():Be(n[e],null)}}},[])}function He(e){return(e==null?void 0:e.animationName)||`none`}function Ue(e){var t,n;let r=(t=Object.getOwnPropertyDescriptor(e.props,`ref`))==null?void 0:t.get,i=r&&`isReactWarning`in r&&r.isReactWarning;return i?e.ref:(r=(n=Object.getOwnPropertyDescriptor(e,`ref`))==null?void 0:n.get,i=r&&`isReactWarning`in r&&r.isReactWarning,i?e.props.ref:e.props.ref||e.ref)}var We=l.useInsertionEffect||Ne;function Ge({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=Ke({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{let t=l.useRef(e!==void 0);l.useEffect(()=>{let e=t.current;e!==s&&console.warn(`${r} is changing from ${e?`controlled`:`uncontrolled`} to ${s?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=s},[s,r])}return[c,l.useCallback(t=>{if(s){let r=qe(t)?t(e):t;if(r!==e){var n;(n=o.current)==null||n.call(o,r)}}else a(t)},[s,e,a,o])]}function Ke({defaultProp:e,onChange:t}){let[n,r]=l.useState(e),i=l.useRef(n),a=l.useRef(t);return We(()=>{a.current=t},[t]),l.useEffect(()=>{if(i.current!==n){var e;(e=a.current)==null||e.call(a,n),i.current=n}},[n,i]),[n,r,a]}function qe(e){return typeof e==`function`}var Je=Object.freeze({position:`absolute`,border:0,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,wordWrap:`normal`}),Ye=`VisuallyHidden`,Xe=l.forwardRef((e,t)=>(0,u.jsx)(J.span,D(D({},e),{},{ref:t,style:D(D({},Je),e.style)})));Xe.displayName=Ye;var Ze=[`__scopeToast`,`hotkey`,`label`],Qe=[`__scopeToast`,`onFocusFromOutsideViewport`],$e=[`forceMount`,`open`,`defaultOpen`,`onOpenChange`],et=[`__scopeToast`,`type`,`duration`,`open`,`onClose`,`onEscapeKeyDown`,`onPause`,`onResume`,`onSwipeStart`,`onSwipeMove`,`onSwipeCancel`,`onSwipeEnd`],tt=[`__scopeToast`,`children`],nt=[`__scopeToast`],rt=[`__scopeToast`],it=[`altText`],at=[`__scopeToast`],ot=[`__scopeToast`,`altText`],st=`ToastProvider`,[ct,lt,ut]=pe(`Toast`),[dt,ft]=W(`Toast`,[ut]),[pt,mt]=dt(st),ht=e=>{let{__scopeToast:t,label:n=`Notification`,duration:r=5e3,swipeDirection:i=`right`,swipeThreshold:a=50,announcerContainer:o,children:s}=e,[c,d]=l.useState(null),[f,p]=l.useState(0),m=l.useRef(!1),h=l.useRef(!1);return n.trim()||console.error(`Invalid prop \`label\` supplied to \`${st}\`. Expected non-empty \`string\`.`),(0,u.jsx)(ct.Provider,{scope:t,children:(0,u.jsx)(pt,{scope:t,label:n,duration:r,swipeDirection:i,swipeThreshold:a,toastCount:f,viewport:c,onViewportChange:d,onToastAdd:l.useCallback(()=>p(e=>e+1),[]),onToastRemove:l.useCallback(()=>p(e=>e-1),[]),isFocusedToastEscapeKeyDownRef:m,isClosePausedRef:h,announcerContainer:o,children:s})})};ht.displayName=st;var gt=`ToastViewport`,_t=[`F8`],vt=`toast.viewportPause`,yt=`toast.viewportResume`,bt=l.forwardRef((e,t)=>{let{__scopeToast:n,hotkey:r=_t,label:i=`Notifications ({hotkey})`}=e,a=U(e,Ze),o=mt(gt,n),s=lt(n),c=l.useRef(null),d=l.useRef(null),f=l.useRef(null),p=l.useRef(null),m=V(t,p,o.onViewportChange),h=r.join(`+`).replace(/Key/g,``).replace(/Digit/g,``),g=o.toastCount>0;l.useEffect(()=>{let e=e=>{var t;r.length!==0&&r.every(t=>e[t]||e.code===t)&&((t=p.current)==null||t.focus())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[r]),l.useEffect(()=>{let e=c.current,t=p.current;if(g&&e&&t){let n=()=>{if(!o.isClosePausedRef.current){let e=new CustomEvent(vt);t.dispatchEvent(e),o.isClosePausedRef.current=!0}},r=()=>{if(o.isClosePausedRef.current){let e=new CustomEvent(yt);t.dispatchEvent(e),o.isClosePausedRef.current=!1}},i=t=>{e.contains(t.relatedTarget)||r()},a=()=>{e.contains(document.activeElement)||r()};return e.addEventListener(`focusin`,n),e.addEventListener(`focusout`,i),e.addEventListener(`pointermove`,n),e.addEventListener(`pointerleave`,a),window.addEventListener(`blur`,n),window.addEventListener(`focus`,r),()=>{e.removeEventListener(`focusin`,n),e.removeEventListener(`focusout`,i),e.removeEventListener(`pointermove`,n),e.removeEventListener(`pointerleave`,a),window.removeEventListener(`blur`,n),window.removeEventListener(`focus`,r)}}},[g,o.isClosePausedRef]);let _=l.useCallback(({tabbingDirection:e})=>{let t=s().map(t=>{let n=t.ref.current,r=[n,...qt(n)];return e===`forwards`?r:r.reverse()});return(e===`forwards`?t.reverse():t).flat()},[s]);return l.useEffect(()=>{let e=p.current;if(e){let t=t=>{let n=t.altKey||t.ctrlKey||t.metaKey;if(t.key===`Tab`&&!n){let n=document.activeElement,o=t.shiftKey;if(t.target===e&&o){var r;(r=d.current)==null||r.focus();return}let s=_({tabbingDirection:o?`backwards`:`forwards`}),c=s.findIndex(e=>e===n);if(Jt(s.slice(c+1)))t.preventDefault();else{var i,a;o?(i=d.current)==null||i.focus():(a=f.current)==null||a.focus()}}};return e.addEventListener(`keydown`,t),()=>e.removeEventListener(`keydown`,t)}},[s,_]),(0,u.jsxs)(je,{ref:c,role:`region`,"aria-label":i.replace(`{hotkey}`,h),tabIndex:-1,style:{pointerEvents:g?void 0:`none`},children:[g&&(0,u.jsx)(St,{ref:d,onFocusFromOutsideViewport:()=>{Jt(_({tabbingDirection:`forwards`}))}}),(0,u.jsx)(ct.Slot,{scope:n,children:(0,u.jsx)(J.ol,D(D({tabIndex:-1},a),{},{ref:m}))}),g&&(0,u.jsx)(St,{ref:f,onFocusFromOutsideViewport:()=>{Jt(_({tabbingDirection:`backwards`}))}})]})});bt.displayName=gt;var xt=`ToastFocusProxy`,St=l.forwardRef((e,t)=>{let{__scopeToast:n,onFocusFromOutsideViewport:r}=e,i=U(e,Qe),a=mt(xt,n);return(0,u.jsx)(Xe,D(D({tabIndex:0},i),{},{ref:t,style:{position:`fixed`},onFocus:e=>{var t;let n=e.relatedTarget;(t=a.viewport)!=null&&t.contains(n)||r()}}))});St.displayName=xt;var Ct=`Toast`,wt=`toast.swipeStart`,Tt=`toast.swipeMove`,Et=`toast.swipeCancel`,Dt=`toast.swipeEnd`,Ot=l.forwardRef((e,t)=>{let{forceMount:n,open:r,defaultOpen:i,onOpenChange:a}=e,o=U(e,$e),[s,c]=Ge({prop:r,defaultProp:i==null||i,onChange:a,caller:Ct});return(0,u.jsx)(Re,{present:n||s,children:(0,u.jsx)(jt,D(D({open:s},o),{},{ref:t,onClose:()=>c(!1),onPause:Y(e.onPause),onResume:Y(e.onResume),onSwipeStart:R(e.onSwipeStart,e=>{e.currentTarget.setAttribute(`data-swipe`,`start`)}),onSwipeMove:R(e.onSwipeMove,e=>{let{x:t,y:n}=e.detail.delta;e.currentTarget.setAttribute(`data-swipe`,`move`),e.currentTarget.style.setProperty(`--radix-toast-swipe-move-x`,`${t}px`),e.currentTarget.style.setProperty(`--radix-toast-swipe-move-y`,`${n}px`)}),onSwipeCancel:R(e.onSwipeCancel,e=>{e.currentTarget.setAttribute(`data-swipe`,`cancel`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-move-x`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-move-y`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-end-x`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-end-y`)}),onSwipeEnd:R(e.onSwipeEnd,e=>{let{x:t,y:n}=e.detail.delta;e.currentTarget.setAttribute(`data-swipe`,`end`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-move-x`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-move-y`),e.currentTarget.style.setProperty(`--radix-toast-swipe-end-x`,`${t}px`),e.currentTarget.style.setProperty(`--radix-toast-swipe-end-y`,`${n}px`),c(!1)})}))})});Ot.displayName=Ct;var[kt,At]=dt(Ct,{onClose(){}}),jt=l.forwardRef((e,t)=>{let{__scopeToast:n,type:r=`foreground`,duration:i,open:a,onClose:o,onEscapeKeyDown:s,onPause:c,onResume:f,onSwipeStart:p,onSwipeMove:m,onSwipeCancel:h,onSwipeEnd:g}=e,_=U(e,et),v=mt(Ct,n),[y,b]=l.useState(null),x=V(t,b),S=l.useRef(null),C=l.useRef(null),w=i||v.duration,T=l.useRef(0),E=l.useRef(w),O=l.useRef(0),{onToastAdd:k,onToastRemove:A}=v,j=Y(()=>{var e;y!=null&&y.contains(document.activeElement)&&((e=v.viewport)==null||e.focus()),o()}),M=l.useCallback(e=>{!e||e===1/0||(window.clearTimeout(O.current),T.current=new Date().getTime(),O.current=window.setTimeout(j,e))},[j]);l.useEffect(()=>{let e=v.viewport;if(e){let t=()=>{M(E.current),f==null||f()},n=()=>{let e=new Date().getTime()-T.current;E.current-=e,window.clearTimeout(O.current),c==null||c()};return e.addEventListener(vt,n),e.addEventListener(yt,t),()=>{e.removeEventListener(vt,n),e.removeEventListener(yt,t)}}},[v.viewport,w,c,f,M]),l.useEffect(()=>{a&&!v.isClosePausedRef.current&&M(w)},[a,w,v.isClosePausedRef,M]),l.useEffect(()=>()=>{window.clearTimeout(O.current)},[]),l.useEffect(()=>(k(),()=>A()),[k,A]);let N=l.useMemo(()=>y?Ht(y):null,[y]);return v.viewport?(0,u.jsxs)(u.Fragment,{children:[N&&(0,u.jsx)(Mt,{__scopeToast:n,role:`status`,"aria-live":r===`foreground`?`assertive`:`polite`,children:N}),(0,u.jsx)(kt,{scope:n,onClose:j,children:d.createPortal((0,u.jsx)(ct.ItemSlot,{scope:n,children:(0,u.jsx)(Ae,{asChild:!0,onEscapeKeyDown:R(s,()=>{v.isFocusedToastEscapeKeyDownRef.current||j(),v.isFocusedToastEscapeKeyDownRef.current=!1}),children:(0,u.jsx)(J.li,D(D({tabIndex:0,"data-state":a?`open`:`closed`,"data-swipe-direction":v.swipeDirection},_),{},{ref:x,style:D({userSelect:`none`,touchAction:`none`},e.style),onKeyDown:R(e.onKeyDown,e=>{e.key===`Escape`&&(s==null||s(e.nativeEvent),e.nativeEvent.defaultPrevented||(v.isFocusedToastEscapeKeyDownRef.current=!0,j()))}),onPointerDown:R(e.onPointerDown,e=>{e.button===0&&(S.current={x:e.clientX,y:e.clientY})}),onPointerMove:R(e.onPointerMove,e=>{if(!S.current)return;let t=e.clientX-S.current.x,n=e.clientY-S.current.y,r=!!C.current,i=[`left`,`right`].includes(v.swipeDirection),a=[`left`,`up`].includes(v.swipeDirection)?Math.min:Math.max,o=i?a(0,t):0,s=i?0:a(0,n),c=e.pointerType===`touch`?10:2,l={x:o,y:s},u={originalEvent:e,delta:l};r?(C.current=l,Ut(Tt,m,u,{discrete:!1})):Wt(l,v.swipeDirection,c)?(C.current=l,Ut(wt,p,u,{discrete:!1}),e.target.setPointerCapture(e.pointerId)):(Math.abs(t)>c||Math.abs(n)>c)&&(S.current=null)}),onPointerUp:R(e.onPointerUp,e=>{let t=C.current,n=e.target;if(n.hasPointerCapture(e.pointerId)&&n.releasePointerCapture(e.pointerId),C.current=null,S.current=null,t){let n=e.currentTarget,r={originalEvent:e,delta:t};Wt(t,v.swipeDirection,v.swipeThreshold)?Ut(Dt,g,r,{discrete:!0}):Ut(Et,h,r,{discrete:!0}),n.addEventListener(`click`,e=>e.preventDefault(),{once:!0})}})}))})}),v.viewport)})]}):null}),Mt=e=>{let{__scopeToast:t,children:n}=e,r=U(e,tt),i=mt(Ct,t),[a,o]=l.useState(!1),[s,c]=l.useState(!1);return Gt(()=>o(!0)),l.useEffect(()=>{let e=window.setTimeout(()=>c(!0),1e3);return()=>window.clearTimeout(e)},[]),s?null:(0,u.jsx)(Ie,{asChild:!0,container:i.announcerContainer||void 0,children:(0,u.jsx)(Xe,D(D({},r),{},{children:a&&(0,u.jsxs)(u.Fragment,{children:[i.label,` `,n]})}))})},Nt=`ToastTitle`,Pt=l.forwardRef((e,t)=>{let{__scopeToast:n}=e,r=U(e,nt);return(0,u.jsx)(J.div,D(D({},r),{},{ref:t}))});Pt.displayName=Nt;var Ft=`ToastDescription`,It=l.forwardRef((e,t)=>{let{__scopeToast:n}=e,r=U(e,rt);return(0,u.jsx)(J.div,D(D({},r),{},{ref:t}))});It.displayName=Ft;var Lt=`ToastAction`,Rt=l.forwardRef((e,t)=>{let{altText:n}=e,r=U(e,it);return n.trim()?(0,u.jsx)(Vt,{altText:n,asChild:!0,children:(0,u.jsx)(Bt,D(D({},r),{},{ref:t}))}):(console.error(`Invalid prop \`altText\` supplied to \`${Lt}\`. Expected non-empty \`string\`.`),null)});Rt.displayName=Lt;var zt=`ToastClose`,Bt=l.forwardRef((e,t)=>{let{__scopeToast:n}=e,r=U(e,at),i=At(zt,n);return(0,u.jsx)(Vt,{asChild:!0,children:(0,u.jsx)(J.button,D(D({type:`button`},r),{},{ref:t,onClick:R(e.onClick,i.onClose)}))})});Bt.displayName=zt;var Vt=l.forwardRef((e,t)=>{let{__scopeToast:n,altText:r}=e,i=U(e,ot);return(0,u.jsx)(J.div,D(D({"data-radix-toast-announce-exclude":``,"data-radix-toast-announce-alt":r||void 0},i),{},{ref:t}))});function Ht(e){let t=[];return Array.from(e.childNodes).forEach(e=>{if(e.nodeType===e.TEXT_NODE&&e.textContent&&t.push(e.textContent),Kt(e)){let n=e.ariaHidden||e.hidden||e.style.display===`none`,r=e.dataset.radixToastAnnounceExclude===``;if(!n)if(r){let n=e.dataset.radixToastAnnounceAlt;n&&t.push(n)}else t.push(...Ht(e))}}),t}function Ut(e,t,n,{discrete:r}){let i=n.originalEvent.currentTarget,a=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?he(i,a):i.dispatchEvent(a)}var Wt=(e,t,n=0)=>{let r=Math.abs(e.x),i=Math.abs(e.y),a=r>i;return t===`left`||t===`right`?a&&r>n:!a&&i>n};function Gt(e=()=>{}){let t=Y(e);Ne(()=>{let e=0,n=0;return e=window.requestAnimationFrame(()=>n=window.requestAnimationFrame(t)),()=>{window.cancelAnimationFrame(e),window.cancelAnimationFrame(n)}},[t])}function Kt(e){return e.nodeType===e.ELEMENT_NODE}function qt(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Jt(e){let t=document.activeElement;return e.some(e=>e===t?!0:(e.focus(),document.activeElement!==t))}var Yt=ht,Xt=bt,Zt=Ot,Qt=Pt,$t=It,en=Bt,tn=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),nn=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),rn=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),an=e=>{let t=rn(e);return t.charAt(0).toUpperCase()+t.slice(1)},on={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},sn=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},cn=(0,l.createContext)({}),ln=()=>(0,l.useContext)(cn),un=[`color`,`size`,`strokeWidth`,`absoluteStrokeWidth`,`className`,`children`,`iconNode`],dn=(0,l.forwardRef)((e,t)=>{var n,r,i;let{color:a,size:o,strokeWidth:s,absoluteStrokeWidth:c,className:u=``,children:d,iconNode:f}=e,p=U(e,un),{size:m=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,color:_=`currentColor`,className:v=``}=(n=ln())==null?{}:n,y=(c==null?g:c)?Number(s==null?h:s)*24/Number(o==null?m:o):s==null?h:s;return(0,l.createElement)(`svg`,D(D(D({ref:t},on),{},{width:(r=o==null?m:o)==null?on.width:r,height:(i=o==null?m:o)==null?on.height:i,stroke:a==null?_:a,strokeWidth:y,className:tn(`lucide`,v,u)},!d&&!sn(p)&&{"aria-hidden":`true`}),p),[...f.map(([e,t])=>(0,l.createElement)(e,t)),...Array.isArray(d)?d:[d]])}),fn=[`className`],Z=(e,t)=>{let n=(0,l.forwardRef)((n,r)=>{let{className:i}=n,a=U(n,fn);return(0,l.createElement)(dn,D({ref:r,iconNode:t,className:tn(`lucide-${nn(an(e))}`,`lucide-${e}`,i)},a))});return n.displayName=an(e),n},pn=Z(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),mn=Z(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),hn=Z(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),gn=Z(`ban`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M4.929 4.929 19.07 19.071`,key:`196cmz`}]]),_n=Z(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),vn=Z(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),yn=Z(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),bn=Z(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),xn=Z(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),Sn=Z(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Cn=Z(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),wn=Z(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),Tn=Z(`file`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]),En=Z(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),Dn=Z(`panel-left-close`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m16 15-3-3 3-3`,key:`14y99z`}]]),On=Z(`panel-left-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m14 9 3 3-3 3`,key:`8010ee`}]]),kn=Z(`search-x`,[[`path`,{d:`m13.5 8.5-5 5`,key:`1cs55j`}],[`path`,{d:`m8.5 8.5 5 5`,key:`a8mexj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]),An=Z(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),jn=Z(`server-crash`,[[`path`,{d:`M6 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2`,key:`4b9dqc`}],[`path`,{d:`M6 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-2`,key:`22nnkd`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`m13 6-4 6h6l-4 6`,key:`14hqih`}]]),Mn=Z(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Nn=Z(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),Q=Z(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),Pn=Z(`zoom-in`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`11`,x2:`11`,y1:`8`,y2:`14`,key:`1vmskp`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]);function $(...e){return e.filter(Boolean).join(` `)}var Fn=(0,l.createContext)(null),In=1,Ln={info:(0,u.jsx)(En,{size:15}),success:(0,u.jsx)(Sn,{size:15}),warning:(0,u.jsx)(Mn,{size:15}),danger:(0,u.jsx)(xn,{size:15})};function Rn({children:e}){let[t,n]=(0,l.useState)([]),r=(0,l.useMemo)(()=>({push:e=>{n(t=>[...t,D({id:In+=1,tone:`info`},e)])}}),[]);return(0,u.jsx)(Fn.Provider,{value:r,children:(0,u.jsxs)(Yt,{swipeDirection:`right`,children:[e,t.map(e=>{var t,r;return(0,u.jsxs)(Zt,{className:$(`vx-toast`,`vx-toast--${(t=e.tone)==null?`info`:t}`),duration:4500,open:!0,onOpenChange:t=>{t||n(t=>t.filter(t=>t.id!==e.id))},children:[(0,u.jsxs)(`div`,{className:`vx-toast__content`,children:[(0,u.jsxs)(`div`,{className:`vx-toast__header`,children:[(0,u.jsx)(`span`,{className:`vx-toast__icon`,"aria-hidden":`true`,children:Ln[(r=e.tone)==null?`info`:r]}),(0,u.jsx)(Qt,{className:`vx-toast__title`,children:e.title})]}),e.description?(0,u.jsx)($t,{className:`vx-toast__description`,children:e.description}):null]}),(0,u.jsx)(en,{className:`vx-toast__close`,"aria-label":`Dismiss notification`,children:(0,u.jsx)(Q,{size:14})})]},e.id)}),(0,u.jsx)(Xt,{className:`vx-toast__viewport`})]})})}function zn(){let e=(0,l.useContext)(Fn);if(!e)throw Error(`useToast must be used within ToastProvider.`);return e}function Bn({children:e,themes:t,defaultTheme:n,storageKey:r}){return(0,u.jsx)(I,{themes:t,defaultTheme:n,storageKey:r,children:(0,u.jsx)(y,{children:(0,u.jsx)(Rn,{children:e})})})}var Vn=[`className`,`variant`,`size`,`shape`,`fullWidth`,`loading`,`startIcon`,`endIcon`,`disabled`,`type`,`children`],Hn=(0,l.forwardRef)(function(e,t){let{className:n,variant:r=`solid`,size:i=`md`,shape:a=`rect`,fullWidth:o=!1,loading:s=!1,startIcon:c,endIcon:l,disabled:d,type:f=`button`,children:p}=e,m=U(e,Vn);return(0,u.jsxs)(`button`,D(D({ref:t,type:f,disabled:d||s,"aria-busy":s||void 0,className:$(`vx-button`,`vx-button--${r}`,`vx-button--${i}`,a===`square`&&`vx-button--square`,a===`pill`&&`vx-button--pill`,a===`circle`&&`vx-button--circle`,o&&`vx-button--full-width`,s&&`vx-button--loading`,n)},m),{},{children:[s?(0,u.jsx)(`span`,{className:`vx-button__spinner`,"aria-hidden":`true`}):c==null?null:c,p,!s&&l?l:null]}))});function Un(e,t,n=!0){let r=(0,l.useRef)(!1);(0,l.useEffect)(()=>{let i=e.current,a=t.current;if(!i)return;if(!n||!a){i.dataset.scrollable=`false`,i.dataset.scrollbarState=`hidden`,i.style.setProperty(`--vx-scrollbar-thumb-height`,`0px`),i.style.setProperty(`--vx-scrollbar-thumb-offset`,`0px`);return}let o,s=()=>{let e=a.scrollHeight>a.clientHeight+1;if(i.dataset.scrollable=e?`true`:`false`,!e){i.dataset.scrollbarState=`hidden`,i.style.setProperty(`--vx-scrollbar-thumb-height`,`0px`),i.style.setProperty(`--vx-scrollbar-thumb-offset`,`0px`);return}let t=Math.max(i.clientHeight-16,0),n=Math.max(a.clientHeight/a.scrollHeight*t,36),r=a.scrollHeight-a.clientHeight,o=Math.max(t-n,0),s=r>0?a.scrollTop/r*o:0;i.style.setProperty(`--vx-scrollbar-thumb-height`,`${n}px`),i.style.setProperty(`--vx-scrollbar-thumb-offset`,`${s}px`),i.dataset.scrollbarState!==`active`&&(i.dataset.scrollbarState=`hidden`)},c=()=>{i.dataset.scrollable===`true`&&(i.dataset.scrollbarState=`active`,o!==void 0&&window.clearTimeout(o),o=window.setTimeout(()=>{i.dataset.scrollbarState=`hidden`},640))},l=()=>{s(),c()},u=i.querySelector(`.vx-overlay-scrollbar__thumb`),d=()=>{o!==void 0&&window.clearTimeout(o)},f=()=>{d(),o=window.setTimeout(()=>{i.dataset.scrollbarState=`hidden`},640)},p=()=>{d(),i.dataset.scrollbarState=`active`},m=()=>{f()},h=e=>{e.preventDefault(),e.stopPropagation(),r.current=!0,i.dataset.scrollbarDragging=`true`,d();let t=e.clientY,n=a.scrollTop,o=Math.max(i.clientHeight-16,0),s=Math.max(a.clientHeight/a.scrollHeight*o,36),c=a.scrollHeight-a.clientHeight,l=Math.max(o-s,0),u=e=>{if(!r.current)return;let i=e.clientY-t;if(l<=0)return;let o=i/l*c;a.scrollTop=Math.max(0,Math.min(c,n+o))},p=()=>{r.current=!1,i.dataset.scrollbarDragging=`false`,document.removeEventListener(`mousemove`,u),document.removeEventListener(`mouseup`,p),f()};document.addEventListener(`mousemove`,u),document.addEventListener(`mouseup`,p)};u&&(u.addEventListener(`mousedown`,h),u.addEventListener(`mouseenter`,p),u.addEventListener(`mouseleave`,m)),s(),a.addEventListener(`scroll`,l,{passive:!0});let g=new ResizeObserver(()=>s());return g.observe(i),g.observe(a),()=>{a.removeEventListener(`scroll`,l),u&&(u.removeEventListener(`mousedown`,h),u.removeEventListener(`mouseenter`,p),u.removeEventListener(`mouseleave`,m)),g.disconnect(),o!==void 0&&window.clearTimeout(o)}},[n,e,t])}var Wn=[`variant`,`maxHeight`,`maxWidth`,`children`,`className`,`style`];function Gn(e){let{variant:t=`overlay`,maxHeight:n,maxWidth:r,children:i,className:a,style:o}=e,s=U(e,Wn),c=(0,l.useRef)(null),d=(0,l.useRef)(null);Un(c,d,t===`overlay`);let f=typeof n==`number`?`${n}px`:n,p=typeof r==`number`?`${r}px`:r,m=t===`overlay`;return(0,u.jsxs)(`div`,D(D({ref:c,className:$(`vx-scroll-area`,m&&`vx-scroll-host`,a),"data-scrollable":m?`false`:void 0,"data-scrollbar-state":m?`hidden`:void 0,style:D({maxHeight:f,maxWidth:p},o)},s),{},{children:[(0,u.jsx)(`div`,{ref:d,className:$(`vx-scroll-area__viewport`,m&&`vx-scroll-hide-native`),children:i}),m&&(0,u.jsx)(`span`,{className:`vx-overlay-scrollbar`,"aria-hidden":`true`,children:(0,u.jsx)(`span`,{className:`vx-overlay-scrollbar__thumb`})})]}))}var Kn=(0,l.createContext)(!1);function qn({collapsed:e=!1,mobileNavOpen:t=!1,density:n,sidebarWidth:r,className:i,children:a}){let{isTablet:o,isTabletPortrait:s}=b(),c=r?{"--vx-sidebar-width":typeof r==`number`?`${r}px`:r}:void 0;return(0,u.jsx)(Kn.Provider,{value:e,children:(0,u.jsx)(`div`,{className:$(`vx-shell`,i),"data-collapsed":e,"data-nav-open":t,"data-tablet":o,"data-tablet-portrait":s,"data-density":n,style:c,children:a})})}function Jn({brand:e=`VXUI`,brandCaption:t,brandIcon:n,collapsed:r=!1,footer:i,onToggle:a,collapseLabel:o=`Collapse`,expandLabel:s=`Expand`,onSidebarClick:c,children:l}){return(0,u.jsx)(`aside`,{className:`vx-sidebar`,onClickCapture:c,children:(0,u.jsxs)(Gn,{className:`vx-sidebar__scroll`,children:[(0,u.jsx)(`div`,{className:`vx-sidebar__header`,children:(0,u.jsxs)(`div`,{className:`vx-sidebar__brand`,children:[n?(0,u.jsx)(`span`,{className:`vx-sidebar__brand-icon`,children:n}):null,(0,u.jsxs)(`div`,{className:`vx-sidebar__brand-copy`,children:[(0,u.jsx)(`span`,{className:`vx-sidebar__brand-text`,children:e}),t?(0,u.jsx)(`span`,{className:`vx-sidebar__brand-caption`,children:t}):null]})]})}),l,(0,u.jsxs)(`div`,{className:`vx-sidebar__footer`,children:[i?(0,u.jsx)(`div`,{className:`vx-sidebar__footer-content`,children:i}):null,a?(0,u.jsxs)(Hn,{variant:`ghost`,size:`sm`,className:`vx-sidebar__toggle`,onClick:a,"aria-label":r?s:o,children:[r?(0,u.jsx)(On,{size:16}):(0,u.jsx)(Dn,{size:16}),(0,u.jsx)(`span`,{className:`vx-sidebar__toggle-label`,children:r?s:o})]}):null]})]})})}function Yn({label:e=`Primary navigation`,children:t}){return(0,u.jsx)(`nav`,{className:`vx-sidebar__nav`,"aria-label":e,children:t})}function Xn({title:e,children:t}){return(0,u.jsxs)(`div`,{className:`vx-nav-section-block`,children:[e?(0,u.jsx)(`div`,{className:`vx-nav-section-block__title`,children:e}):null,(0,u.jsx)(`div`,{className:`vx-nav-section-block__items`,children:t})]})}function Zn({label:e,icon:t,badge:n,trailing:r,active:i,onSelect:a,children:o,defaultOpen:s=!1}){let[c,f]=(0,l.useState)(s),[p,m]=(0,l.useState)(!1),[h,g]=(0,l.useState)({top:0,left:0}),_=(0,l.useRef)(null),v=(0,l.useRef)(void 0),y=(0,l.useContext)(Kn),b=!!o;(0,l.useEffect)(()=>()=>{v.current!==void 0&&clearTimeout(v.current)},[]);let x=()=>{b&&!y&&f(e=>!e),(!b||y)&&(a==null||a())},S=()=>{if(!y||!b||!_.current)return;v.current!==void 0&&clearTimeout(v.current);let e=_.current.getBoundingClientRect(),t=_.current.closest(`.vx-sidebar`),n=t?t.getBoundingClientRect().right:e.right;g({top:e.top-6,left:n+4}),m(!0)},C=()=>{v.current=setTimeout(()=>m(!1),100)},w=()=>{v.current!==void 0&&clearTimeout(v.current)},T=(0,u.jsxs)(`button`,{type:`button`,className:$(`vx-nav-item`,i&&`vx-nav-item--active`,b&&`vx-nav-item--parent`),onClick:x,"aria-expanded":b&&!y?c:void 0,title:y?e:void 0,children:[t?(0,u.jsx)(`span`,{className:`vx-nav-item__icon`,children:t}):null,(0,u.jsx)(`span`,{className:`vx-nav-item__label`,children:e}),n?(0,u.jsx)(`span`,{className:`vx-nav-item__badge`,children:n}):null,b?(0,u.jsx)(bn,{size:14,className:$(`vx-nav-item__chevron`,c&&`vx-nav-item__chevron--open`)}):r?(0,u.jsx)(`span`,{className:`vx-nav-item__trailing`,children:r}):null]});return b?(0,u.jsxs)(`div`,{ref:_,className:`vx-nav-item-wrap`,onMouseEnter:S,onMouseLeave:y?C:void 0,children:[T,!y&&c&&(0,u.jsx)(`div`,{className:`vx-nav-sublist`,role:`group`,children:o}),y&&p&&(0,d.createPortal)((0,u.jsx)(Kn.Provider,{value:!1,children:(0,u.jsxs)(`div`,{className:`vx-nav-sublist-flyout`,style:{top:h.top,left:h.left},role:`group`,onMouseEnter:w,onMouseLeave:C,children:[(0,u.jsx)(`div`,{className:`vx-nav-sublist-flyout__label`,children:e}),o]})}),document.body)]}):T}function Qn({onClose:e,closeLabel:t=`Close sidebar`}){return(0,u.jsx)(`button`,{type:`button`,className:`vx-shell__overlay`,"aria-label":t,onClick:e})}function $n({children:e}){return(0,u.jsx)(`div`,{className:`vx-shell__main`,children:e})}var er=(0,l.forwardRef)(function({title:e,description:t,breadcrumb:n,actions:r,onMenuToggle:i,mobileNavOpen:a=!1,menuButtonLabel:o=`Open navigation`},s){return(0,u.jsxs)(`header`,{ref:s,className:`vx-topbar`,children:[i?(0,u.jsx)(Hn,{variant:`ghost`,size:`sm`,className:`vx-topbar__menu`,"aria-label":o,onClick:i,children:a?(0,u.jsx)(Dn,{size:16}):(0,u.jsx)(On,{size:16})}):null,(0,u.jsx)(`div`,{className:`vx-topbar__title-group`,children:n||(0,u.jsxs)(`div`,{children:[e?(0,u.jsx)(`h1`,{className:`vx-topbar__title`,children:e}):null,t?(0,u.jsx)(`p`,{className:`vx-topbar__description`,children:t}):null]})}),r?(0,u.jsx)(`div`,{className:`vx-topbar__actions`,children:r}):null]})});function tr({children:e}){return(0,u.jsx)(`div`,{className:`vx-shell__content-wrap`,children:(0,u.jsx)(Gn,{className:`vx-shell__content`,children:e})})}var nr=[`key`,`onSelect`,`children`,`defaultOpen`];function rr({brand:e=`VXUI`,brandCaption:t,brandIcon:n,topbarRef:r,breadcrumb:i,title:a,description:o,navItems:s,navSections:c,sidebarCollapsed:l=!1,sidebarWidth:d,mobileNavOpen:f=!1,onSidebarToggle:p,onMobileNavToggle:m,onSidebarClick:h,menuButtonLabel:g=`Open navigation`,sidebarCollapseLabel:_=`Collapse`,sidebarExpandLabel:v=`Expand`,sidebarCloseLabel:y=`Close sidebar`,density:b,headerActions:x,sidebarFooter:S,children:C}){let w=c==null?s?[{items:s}]:[]:c;function T(e){var t;let{key:n,onSelect:r,children:i,defaultOpen:a}=e,o=U(e,nr),s=(t=i==null?void 0:i.some(e=>e.active))!=null&&t;return(0,u.jsx)(Zn,D(D({onSelect:r,defaultOpen:a==null?i?s:void 0:a},o),{},{children:i==null?void 0:i.map(T)}),n)}return(0,u.jsxs)(qn,{collapsed:l,mobileNavOpen:f,density:b,sidebarWidth:d,children:[(0,u.jsx)(Jn,{brand:e,brandCaption:t,brandIcon:n,collapsed:l,footer:S,onToggle:p,onSidebarClick:h,collapseLabel:_,expandLabel:v,children:(0,u.jsx)(Yn,{children:w.map((e,t)=>{var n,r;return(0,u.jsx)(Xn,{title:e.title,children:e.items.map(T)},(n=(r=e.key)==null?e.title:r)==null?t:n)})})}),m?(0,u.jsx)(Qn,{onClose:m,closeLabel:y}):null,(0,u.jsxs)($n,{children:[(0,u.jsx)(er,{ref:r,breadcrumb:i,title:a,description:o,actions:x,onMenuToggle:m,mobileNavOpen:f,menuButtonLabel:g}),(0,u.jsx)(tr,{children:C})]})]})}var ir=[`className`,`variant`];function ar(e){let{className:t,variant:n=`neutral`}=e,r=U(e,ir);return(0,u.jsx)(`span`,D({className:$(`vx-badge`,`vx-badge--${n}`,t)},r))}var or=[`className`,`variant`,`padding`,`hoverable`],sr=[`className`],cr=[`className`],lr=[`className`],ur=[`className`];function dr(e){let{className:t,variant:n=`default`,padding:r,hoverable:i=!1}=e,a=U(e,or);return(0,u.jsx)(`section`,D({className:$(`vx-card`,n!=="default"&&`vx-card--${n}`,r&&`vx-card--pad-${r}`,i&&`vx-card--hoverable`,t)},a))}function fr(e){let{className:t}=e,n=U(e,sr);return(0,u.jsx)(`header`,D({className:$(`vx-card__header`,t)},n))}function pr(e){let{className:t}=e,n=U(e,cr);return(0,u.jsx)(`h2`,D({className:$(`vx-card__title`,t)},n))}function mr(e){let{className:t}=e,n=U(e,lr);return(0,u.jsx)(`p`,D({className:$(`vx-card__description`,t)},n))}function hr(e){let{className:t}=e,n=U(e,ur);return(0,u.jsx)(`div`,D({className:$(`vx-card__content`,t)},n))}function gr({open:e,defaultOpen:t=!1,onOpenChange:n}){let r=e!==void 0,[i,a]=(0,l.useState)(t),o=r?e:i,s=(0,l.useRef)(n);s.current=n;let c=(0,l.useCallback)(t=>{if(r){var n;let r=typeof t==`function`?t(e):t;(n=s.current)==null||n.call(s,r)}else a(t)},[r,e]);return(0,l.useEffect)(()=>{r&&a(e)},[r,e]),(0,l.useEffect)(()=>{if(!r){var e;(e=s.current)==null||e.call(s,i)}},[r,i]),{isOpen:o,open:(0,l.useCallback)(()=>c(!0),[c]),close:(0,l.useCallback)(()=>c(!1),[c]),toggle:(0,l.useCallback)(()=>c(e=>!e),[c])}}var _r=[`a[href]`,`button:not([disabled]):not([aria-hidden="true"])`,`input:not([disabled]):not([aria-hidden="true"])`,`textarea:not([disabled]):not([aria-hidden="true"])`,`select:not([disabled]):not([aria-hidden="true"])`,`[tabindex]:not([tabindex="-1"]):not([aria-hidden="true"])`,`area[href]`,`iframe`,`object`,`embed`].join(`, `);function vr(e,t){let{active:n,autoFocus:r=!0,onMountAutoFocus:i,onUnmountAutoFocus:a}=t,o=(0,l.useRef)(null);(0,l.useEffect)(()=>{if(!n){if(o.current&&document.contains(o.current)){var t;let e=o.current,n=new Event(`focusrestore`);((t=a==null?void 0:a(n))==null||t)&&requestAnimationFrame(()=>{e.focus({preventScroll:!0})})}o.current=null;return}let s=e.current;if(!s)return;if(o.current=document.activeElement,r){var c;let e=new Event(`focusauto`);if((c=i==null?void 0:i(e))==null||c){let e=br(s);e?e.focus({preventScroll:!0}):s.focus({preventScroll:!0})}}let l=e=>{if(e.key!==`Tab`)return;let t=yr(s);if(t.length===0){e.preventDefault();return}let n=t[0],r=t[t.length-1],i=t.indexOf(document.activeElement);e.shiftKey?i<=0&&(e.preventDefault(),r.focus({preventScroll:!0})):(i===-1||i===t.length-1)&&(e.preventDefault(),n.focus({preventScroll:!0}))};return document.addEventListener(`keydown`,l),()=>{document.removeEventListener(`keydown`,l)}},[n,r,e,i,a])}function yr(e){return Array.from(e.querySelectorAll(_r))}function br(e){return e.querySelector(_r)}function xr(e){let t=(0,l.useRef)(0);(0,l.useEffect)(()=>(e?(t.current+=1,t.current===1&&wr()):(--t.current,t.current<=0&&(t.current=0,Tr())),()=>{--t.current,t.current<=0&&(t.current=0,Tr())}),[e])}var Sr=null,Cr=null;function wr(){let e=document.body,t=window.innerWidth-document.documentElement.clientWidth;if(Sr=e.style.overflow,Cr=e.style.paddingRight,e.style.overflow=`hidden`,t>0){let n=parseFloat(getComputedStyle(e).paddingRight)||0;e.style.paddingRight=`${n+t}px`}}function Tr(){let e=document.body;Sr===null?e.style.overflow=``:(e.style.overflow=Sr,Sr=null),Cr===null?e.style.paddingRight=``:(e.style.paddingRight=Cr,Cr=null)}var Er=(0,l.createContext)(null);function Dr(e){var t;if(e){let t=e.closest(`[data-dialog-content-ref]`);if(t)return t}return(t=e==null?void 0:e.closest(`.vx-dialog__content`))==null?null:t}function Or(e){return{dialogContent:Dr(e),shouldInline:!1}}function kr(){return(0,l.useContext)(Er)}var Ar=[`asChild`,`children`,`onClick`,`className`],jr=(0,l.createContext)(null);function Mr(){let e=(0,l.useContext)(jr);if(!e)throw Error(`DialogClose must be used within a Dialog component`);return e}function Nr({children:e,scrollable:t}){return t?(0,u.jsx)(`div`,{className:`vx-dialog__body-wrap`,children:(0,u.jsx)(Gn,{className:`vx-dialog__body`,children:e})}):(0,u.jsx)(`div`,{className:`vx-dialog__body-wrap`,children:(0,u.jsx)(`div`,{className:`vx-dialog__body`,children:e})})}function Pr(e){let{asChild:t,children:n,onClick:r,className:i}=e,a=U(e,Ar),{close:o}=Mr(),s=(0,l.useCallback)(e=>{r==null||r(e),e.defaultPrevented||o()},[o,r]);if(t){let e=l.Children.only(n);return(0,l.cloneElement)(e,D(D({},a),{},{onClick:t=>{let n=e.props.onClick;n==null||n(t),t.defaultPrevented||s(t)}}))}return(0,u.jsx)(`button`,D(D({type:`button`,className:i,onClick:s},a),{},{children:n}))}function Fr({trigger:e,onOpen:t}){if((0,l.isValidElement)(e)){let n=e;return(0,l.cloneElement)(n,{onClick:e=>{let r=n.props.onClick;r==null||r(e),e.defaultPrevented||t()}})}return(0,u.jsx)(`button`,{type:`button`,onClick:t,children:e})}function Ir({trigger:e,title:t,description:n,children:r,footer:i,className:a,size:o=`md`,padding:s,placement:c=`center`,scrollable:f=!0,closable:p=!0,fullscreen:m=!1,open:h,defaultOpen:g,onOpenChange:_,onConfirm:v,onCancel:y,confirmLabel:b=`Confirm`,cancelLabel:x=`Cancel`,confirmVariant:S=`solid`}){let{isOpen:C,open:w,close:T}=gr({open:h,defaultOpen:g,onOpenChange:_}),E=(0,l.useCallback)(()=>{v==null||v(),T()},[v,T]),D=(0,l.useCallback)(()=>{y==null||y(),T()},[y,T]),O=(0,l.useRef)(null),k=(0,l.useId)(),A=(0,l.useId)();xr(C),vr(O,{active:C}),(0,l.useEffect)(()=>{if(!C)return;let e=e=>{if(e.key!==`Escape`)return;let t=O.current;if(!t)return;let n=!!t.querySelector(`.vx-select__dropdown, .vx-multiselect__dropdown, .vx-datepicker__popover, .vx-timepicker__popover, .vx-colorpicker__panel`),r=t.dataset.hasOpenPortal===`1`;if(n||r){e.preventDefault();return}T()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[C,T]);let j=(0,l.useCallback)(e=>{if(e.target!==e.currentTarget)return;let t=O.current;(t==null?void 0:t.dataset.hasOpenPortal)!==`1`&&T()},[T]),M={close:T,contentRef:O},N=i==null?v?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`button`,{type:`button`,className:`vx-button vx-button--secondary`,onClick:D,children:x}),(0,u.jsx)(`button`,{type:`button`,className:$(`vx-button`,S===`danger`?`vx-button--danger`:`vx-button--solid`),onClick:E,children:b})]}):null:i;return(0,u.jsxs)(u.Fragment,{children:[e!=null&&(0,u.jsx)(Fr,{trigger:e,onOpen:w}),C&&(0,d.createPortal)((0,u.jsx)(jr.Provider,{value:M,children:(0,u.jsxs)(Er.Provider,{value:O.current,children:[(0,u.jsx)(`div`,{className:`vx-dialog__overlay`,onClick:j,onPointerDown:e=>{let t=O.current;(t==null?void 0:t.dataset.hasOpenPortal)===`1`&&e.preventDefault()}}),(0,u.jsxs)(`div`,{ref:O,role:`dialog`,"aria-modal":`true`,"aria-labelledby":k,"aria-describedby":n?A:void 0,tabIndex:-1,className:$(`vx-dialog__content`,m&&`vx-dialog__content--fullscreen`,o!==`md`&&`vx-dialog__content--${o}`,c!==`center`&&`vx-dialog__content--${c}`,s&&`vx-dialog__content--pad-${s}`,f&&`vx-dialog__content--scrollable`,a),children:[(0,u.jsxs)(`div`,{className:`vx-dialog__header`,children:[(0,u.jsxs)(`div`,{children:[(0,u.jsx)(`h2`,{id:k,className:`vx-dialog__title`,children:t}),n?(0,u.jsx)(`p`,{id:A,className:`vx-dialog__description`,children:n}):null]}),p?(0,u.jsx)(`button`,{type:`button`,className:`vx-dialog__close`,"aria-label":`Close dialog`,onClick:T,children:(0,u.jsx)(Q,{size:16})}):null]}),r?(0,u.jsx)(Nr,{scrollable:f,children:r}):null,N?(0,u.jsx)(`div`,{className:`vx-dialog__footer`,children:N}):null]})]})}),document.body)]})}var Lr=[`className`,`label`,`hint`,`prefix`,`suffix`,`error`,`variant`,`size`,`rounded`];function Rr(e){let{className:t,label:n,hint:r,prefix:i,suffix:a,error:o,variant:s=`default`,size:c=`md`,rounded:l=!1}=e,d=U(e,Lr);return(0,u.jsxs)(`label`,{className:`vx-field-group`,children:[n?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:n}):null,(0,u.jsxs)(`span`,{className:$(`vx-input`,s!=="default"&&`vx-input--${s}`,c!==`md`&&`vx-input--${c}`,l&&`vx-input--rounded`,o&&`vx-input--invalid`,t),children:[i?(0,u.jsx)(`span`,{className:`vx-input__ornament`,children:i}):null,(0,u.jsx)(`input`,D({className:`vx-input__field`,"aria-invalid":o?`true`:void 0},d)),a?(0,u.jsx)(`span`,{className:`vx-input__ornament`,children:a}):null]}),o?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:o}):null,!o&&r?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:r}):null]})}function zr(e){let t=l.useRef({value:e,previous:e});return l.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}function Br(e){let[t,n]=l.useState(void 0);return Ne(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});let t=new ResizeObserver(t=>{if(!Array.isArray(t)||!t.length)return;let r=t[0],i,a;if(`borderBoxSize`in r){let e=r.borderBoxSize,t=Array.isArray(e)?e[0]:e;i=t.inlineSize,a=t.blockSize}else i=e.offsetWidth,a=e.offsetHeight;n({width:i,height:a})});return t.observe(e,{box:`border-box`}),()=>t.unobserve(e)}else n(void 0)},[e]),t}var Vr=[`__scopeSwitch`,`onClick`],Hr=[`__scopeSwitch`,`name`,`checked`,`defaultChecked`,`required`,`disabled`,`value`,`onCheckedChange`,`form`],Ur=[`__scopeSwitch`],Wr=[`__scopeSwitch`],Gr=`Switch`,[Kr,qr]=W(Gr),[Jr,Yr]=Kr(Gr);function Xr(e){let{__scopeSwitch:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:d,value:f=`on`,internal_do_not_use_render:p}=e,[m,h]=Ge({prop:n,defaultProp:i!=null&&i,onChange:c,caller:Gr}),[g,_]=l.useState(null),[v,y]=l.useState(null),b={checked:m,setChecked:h,disabled:a,control:g,setControl:_,name:s,form:o,value:f,hasConsumerStoppedPropagationRef:l.useRef(!1),required:d,defaultChecked:i,isFormControl:!g||!!o||!!g.closest(`form`),bubbleInput:v,setBubbleInput:y};return(0,u.jsx)(Jr,D(D({scope:t},b),{},{children:ii(p)?p(b):r}))}var Zr=`SwitchTrigger`,Qr=l.forwardRef((e,t)=>{let{__scopeSwitch:n,onClick:r}=e,i=U(e,Vr),{control:a,form:o,value:s,disabled:c,checked:d,required:f,setControl:p,setChecked:m,hasConsumerStoppedPropagationRef:h,isFormControl:g,bubbleInput:_}=Yr(Zr,n),v=V(t,p),y=l.useRef(d);return l.useEffect(()=>{let e=o?a==null?void 0:a.ownerDocument.getElementById(o):a==null?void 0:a.form;if(e instanceof HTMLFormElement){let t=()=>m(y.current);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[a,o,m]),(0,u.jsx)(J.button,D(D({type:`button`,role:`switch`,"aria-checked":d,"aria-required":f,"data-state":ai(d),"data-disabled":c?``:void 0,disabled:c,value:s},i),{},{ref:v,onClick:R(r,e=>{m(e=>!e),_&&g&&(h.current=e.isPropagationStopped(),h.current||e.stopPropagation())})}))});Qr.displayName=Zr;var $r=l.forwardRef((e,t)=>{let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:d}=e,f=U(e,Hr);return(0,u.jsx)(Xr,{__scopeSwitch:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:d,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Qr,D(D({},f),{},{ref:t,__scopeSwitch:n})),e&&(0,u.jsx)(ri,{__scopeSwitch:n})]})})});$r.displayName=Gr;var ei=`SwitchThumb`,ti=l.forwardRef((e,t)=>{let{__scopeSwitch:n}=e,r=U(e,Ur),i=Yr(ei,n);return(0,u.jsx)(J.span,D(D({"data-state":ai(i.checked),"data-disabled":i.disabled?``:void 0},r),{},{ref:t}))});ti.displayName=ei;var ni=`SwitchBubbleInput`,ri=l.forwardRef((e,t)=>{let{__scopeSwitch:n}=e,r=U(e,Wr),{control:i,hasConsumerStoppedPropagationRef:a,checked:o,defaultChecked:s,required:c,disabled:d,name:f,value:p,form:m,bubbleInput:h,setBubbleInput:g}=Yr(ni,n),_=V(t,g),v=zr(o),y=Br(i);l.useEffect(()=>{let e=h;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!a.current;if(v!==o&&n){let t=new Event(`click`,{bubbles:r});n.call(e,o),e.dispatchEvent(t)}},[h,v,o,a]);let b=l.useRef(o);return(0,u.jsx)(J.input,D(D({type:`checkbox`,"aria-hidden":!0,defaultChecked:s==null?b.current:s,required:c,disabled:d,name:f,value:p,form:m},r),{},{tabIndex:-1,ref:_,style:D(D(D({},r.style),y),{},{position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`})}))});ri.displayName=ni;function ii(e){return typeof e==`function`}function ai(e){return e?`checked`:`unchecked`}var oi=[`className`,`label`,`description`];function si(e){let{className:t,label:n,description:r}=e,i=U(e,oi);return(0,u.jsxs)(`label`,{className:`vx-switch`,children:[(0,u.jsxs)(`span`,{className:`vx-switch__copy`,children:[(0,u.jsx)(`span`,{className:`vx-switch__label`,children:n}),r?(0,u.jsx)(`span`,{className:`vx-switch__description`,children:r}):null]}),(0,u.jsx)($r,D(D({className:$(`vx-switch__control`,t)},i),{},{children:(0,u.jsx)(ti,{className:`vx-switch__thumb`})}))]})}var ci=l.useId||(()=>void 0),li=0;function ui(e){let[t,n]=l.useState(ci());return Ne(()=>{e||n(e=>e==null?String(li++):e)},[e]),e||(t?`radix-${t}`:``)}var di=l.createContext(void 0);function fi(e){let t=l.useContext(di);return e||t||`ltr`}var pi=!1;function mi(){let[e,t]=l.useState(pi);return l.useEffect(()=>{pi||(pi=!0,t(!0))},[]),e}var hi=l.useSyncExternalStore;function gi(){return()=>{}}function _i(){return hi(gi,()=>!0,()=>!1)}var vi=typeof hi==`function`?_i:mi,yi=[`__scopeRovingFocusGroup`,`orientation`,`loop`,`dir`,`currentTabStopId`,`defaultCurrentTabStopId`,`onCurrentTabStopIdChange`,`onEntryFocus`,`preventScrollOnEntryFocus`],bi=[`__scopeRovingFocusGroup`,`focusable`,`active`,`tabStopId`,`children`],xi=`rovingFocusGroup.onEntryFocus`,Si={bubbles:!1,cancelable:!0},Ci=`RovingFocusGroup`,[wi,Ti,Ei]=pe(Ci),[Di,Oi]=W(Ci,[Ei]),[ki,Ai]=Di(Ci),ji=l.forwardRef((e,t)=>(0,u.jsx)(wi.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,u.jsx)(wi.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,u.jsx)(Mi,D(D({},e),{},{ref:t}))})}));ji.displayName=Ci;var Mi=l.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:d,preventScrollOnEntryFocus:f=!1}=e,p=U(e,yi),m=l.useRef(null),h=V(t,m),g=fi(a),[_,v]=Ge({prop:o,defaultProp:s==null?null:s,onChange:c,caller:Ci}),[y,b]=l.useState(!1),x=Y(d),S=Ti(n),C=l.useRef(!1),[w,T]=l.useState(0);return l.useEffect(()=>{let e=m.current;if(e)return e.addEventListener(xi,x),()=>e.removeEventListener(xi,x)},[x]),(0,u.jsx)(ki,{scope:n,orientation:r,dir:g,loop:i,currentTabStopId:_,onItemFocus:l.useCallback(e=>v(e),[v]),onItemShiftTab:l.useCallback(()=>b(!0),[]),onFocusableItemAdd:l.useCallback(()=>T(e=>e+1),[]),onFocusableItemRemove:l.useCallback(()=>T(e=>e-1),[]),children:(0,u.jsx)(J.div,D(D({tabIndex:y||w===0?-1:0,"data-orientation":r},p),{},{ref:h,style:D({outline:`none`},e.style),onMouseDown:R(e.onMouseDown,()=>{C.current=!0}),onFocus:R(e.onFocus,e=>{let t=!C.current;if(e.target===e.currentTarget&&t&&!y){let t=new CustomEvent(xi,Si);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=S().filter(e=>e.focusable);Ri([e.find(e=>e.active),e.find(e=>e.id===_),...e].filter(Boolean).map(e=>e.ref.current),f)}}C.current=!1}),onBlur:R(e.onBlur,()=>b(!1))}))})}),Ni=`RovingFocusGroupItem`,Pi=l.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o}=e,s=U(e,bi),c=ui(),d=a||c,f=Ai(Ni,n),p=f.currentTabStopId===d,m=Ti(n),{onFocusableItemAdd:h,onFocusableItemRemove:g,currentTabStopId:_}=f,v=vi();return Ne(()=>{if(!(!v||!r))return h(),()=>g()},[v,r,h,g]),l.useEffect(()=>{if(!(v||!r))return h(),()=>g()},[v,r,h,g]),(0,u.jsx)(wi.ItemSlot,{scope:n,id:d,focusable:r,active:i,children:(0,u.jsx)(J.span,D(D({tabIndex:p?0:-1,"data-orientation":f.orientation},s),{},{ref:t,onMouseDown:R(e.onMouseDown,e=>{r?f.onItemFocus(d):e.preventDefault()}),onFocus:R(e.onFocus,()=>f.onItemFocus(d)),onKeyDown:R(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){f.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=Li(e,f.orientation,f.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=m().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=f.loop?zi(n,r+1):n.slice(r+1)}setTimeout(()=>Ri(n))}}),children:typeof o==`function`?o({isCurrentTabStop:p,hasTabStop:_!=null}):o}))})});Pi.displayName=Ni;var Fi={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function Ii(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function Li(e,t,n){let r=Ii(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return Fi[r]}function Ri(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function zi(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Bi=ji,Vi=Pi,Hi=[`__scopeTabs`,`value`,`onValueChange`,`defaultValue`,`orientation`,`dir`,`activationMode`],Ui=[`__scopeTabs`,`loop`],Wi=[`__scopeTabs`,`value`,`disabled`],Gi=[`__scopeTabs`,`value`,`forceMount`,`children`],Ki=`Tabs`,[qi,Ji]=W(Ki,[Oi]),Yi=Oi(),[Xi,Zi]=qi(Ki),Qi=l.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:i,defaultValue:a,orientation:o=`horizontal`,dir:s,activationMode:c=`automatic`}=e,l=U(e,Hi),d=fi(s),[f,p]=Ge({prop:r,onChange:i,defaultProp:a==null?``:a,caller:Ki});return(0,u.jsx)(Xi,{scope:n,baseId:ui(),value:f,onValueChange:p,orientation:o,dir:d,activationMode:c,children:(0,u.jsx)(J.div,D(D({dir:d,"data-orientation":o},l),{},{ref:t}))})});Qi.displayName=Ki;var $i=`TabsList`,ea=l.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0}=e,i=U(e,Ui),a=Zi($i,n),o=Yi(n);return(0,u.jsx)(Bi,D(D({asChild:!0},o),{},{orientation:a.orientation,dir:a.dir,loop:r,children:(0,u.jsx)(J.div,D(D({role:`tablist`,"aria-orientation":a.orientation},i),{},{ref:t}))}))});ea.displayName=$i;var ta=`TabsTrigger`,na=l.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:i=!1}=e,a=U(e,Wi),o=Zi(ta,n),s=Yi(n),c=aa(o.baseId,r),l=oa(o.baseId,r),d=r===o.value;return(0,u.jsx)(Vi,D(D({asChild:!0},s),{},{focusable:!i,active:d,children:(0,u.jsx)(J.button,D(D({type:`button`,role:`tab`,"aria-selected":d,"aria-controls":l,"data-state":d?`active`:`inactive`,"data-disabled":i?``:void 0,disabled:i,id:c},a),{},{ref:t,onMouseDown:R(e.onMouseDown,e=>{!i&&e.button===0&&e.ctrlKey===!1?o.onValueChange(r):e.preventDefault()}),onKeyDown:R(e.onKeyDown,e=>{i||e.target!==e.currentTarget||[` `,`Enter`].includes(e.key)&&o.onValueChange(r)}),onFocus:R(e.onFocus,()=>{let e=o.activationMode!==`manual`;!d&&!i&&e&&o.onValueChange(r)})}))}))});na.displayName=ta;var ra=`TabsContent`,ia=l.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:i,children:a}=e,o=U(e,Gi),s=Zi(ra,n),c=aa(s.baseId,r),d=oa(s.baseId,r),f=r===s.value,p=l.useRef(f);return l.useEffect(()=>{let e=requestAnimationFrame(()=>p.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,u.jsx)(Re,{present:i||f,children:({present:n})=>(0,u.jsx)(J.div,D(D({"data-state":f?`active`:`inactive`,"data-orientation":s.orientation,role:`tabpanel`,"aria-labelledby":c,hidden:!n,id:d,tabIndex:0},o),{},{ref:t,style:D(D({},e.style),{},{animationDuration:p.current?`0s`:void 0}),children:n&&a}))})});ia.displayName=ra;function aa(e,t){return`${e}-trigger-${t}`}function oa(e,t){return`${e}-content-${t}`}var sa=Qi,ca=ea,la=na,ua=ia,da=[`className`],fa=[`className`],pa=[`className`],ma=sa,ha=(0,l.forwardRef)(function(e,t){let{className:n}=e,r=U(e,da);return(0,u.jsx)(ca,D({ref:t,className:$(`vx-tabs__list`,n)},r))}),ga=(0,l.forwardRef)(function(e,t){let{className:n}=e,r=U(e,fa);return(0,u.jsx)(la,D({ref:t,className:$(`vx-tabs__trigger`,n)},r))}),_a=(0,l.forwardRef)(function(e,t){let{className:n}=e,r=U(e,pa);return(0,u.jsx)(ua,D({ref:t,className:$(`vx-tabs__content`,n)},r))}),va=[`as`,`variant`,`size`,`weight`,`truncate`,`className`];function ya(e){let{as:t=`p`,variant:n=`default`,size:r=`base`,weight:i=`normal`,truncate:a=!1,className:o}=e,s=U(e,va);return(0,u.jsx)(t,D({className:$(`vx-text-component`,`vx-text--${n}`,`vx-text-size--${r}`,`vx-text-weight--${i}`,a&&`vx-text--truncate`,o)},s))}var ba=[`as`,`level`,`variant`,`weight`,`truncate`,`className`];function xa(e){let{as:t,level:n=2,variant:r=`default`,weight:i=`bold`,truncate:a=!1,className:o}=e,s=U(e,ba);return(0,u.jsx)(t||`h${n}`,D({className:$(`vx-heading`,`vx-heading--h${n}`,`vx-heading--${r}`,`vx-heading-weight--${i}`,a&&`vx-text--truncate`,o)},s))}function Sa(){let{isPhone:e,screenWidth:t,aspectRatio:n}=b();return!!(e||n>0&&n<.75&&t<=p)}function Ca(e){let{isOpen:t,open:n,close:r}=gr(e),[i,a]=(0,l.useState)(`hidden`),o=(0,l.useRef)(!1);return(0,l.useEffect)(()=>{t?(o.current=!1,a(`visible`)):o.current||(o.current=!0,a(`exiting`))},[t]),(0,l.useEffect)(()=>{if(i===`exiting`){let e=setTimeout(()=>{a(`hidden`),o.current=!1},280);return()=>clearTimeout(e)}},[i]),{isVisible:i!==`hidden`,phase:i,open:n,close:(0,l.useCallback)(()=>{r()},[r]),isOpen:t}}var wa=[`icon`,`destructive`,`className`,`children`];function Ta({side:e,phase:t,title:n,description:r,children:i,header:a,footer:o,className:s,showClose:c=!0,showConfirm:f=!1,confirmText:p=`确认`,confirmDisabled:m=!1,onConfirm:h,onClose:g,closeOnOverlayClick:_=!0,action:v=!1,width:y}){let b=(0,l.useRef)(null),x=(0,l.useId)(),S=(0,l.useId)(),C=t!==`hidden`;if(xr(C),vr(b,{active:t===`visible`}),(0,l.useEffect)(()=>{if(t!==`visible`)return;let e=e=>{e.key===`Escape`&&g()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[t,g]),!C)return null;let w=e===`left`||e===`right`;return(0,d.createPortal)((0,u.jsx)(`div`,{className:$(`vx-sheet__overlay`,t===`exiting`&&`vx-sheet__overlay--exiting`),onClick:_?g:void 0,children:(0,u.jsxs)(`div`,{ref:b,role:`dialog`,"aria-modal":`true`,"aria-labelledby":n?x:void 0,"aria-describedby":r?S:void 0,tabIndex:-1,className:$(`vx-sheet`,`vx-sheet--${e}`,t===`exiting`&&`vx-sheet--exiting`,v&&`vx-sheet--action`,s),onClick:e=>e.stopPropagation(),style:w&&y?{width:y}:void 0,children:[!v&&c&&(0,u.jsx)(`button`,{type:`button`,className:`vx-sheet__close`,onClick:g,"aria-label":`Close`,children:(0,u.jsx)(Q,{size:16})}),a,!a&&(n||r)&&(0,u.jsx)(`div`,{className:`vx-sheet__header`,children:(0,u.jsxs)(`div`,{children:[n&&(0,u.jsx)(`h2`,{id:x,className:`vx-sheet__title`,children:n}),r&&(0,u.jsx)(`p`,{id:S,className:`vx-sheet__description`,children:r})]})}),(0,u.jsx)(`div`,{className:$(`vx-sheet__body`,v&&`vx-sheet__body--action`),children:i}),o,!v&&f&&(0,u.jsx)(`div`,{className:`vx-sheet__footer`,children:(0,u.jsx)(`button`,{type:`button`,className:`vx-sheet__confirm`,disabled:m,onClick:()=>{h==null||h(),g()},children:p})})]})}),document.body)}function Ea(e){let{icon:t,destructive:n,className:r,children:i}=e,a=U(e,wa);return(0,u.jsxs)(`button`,D(D({type:`button`,className:$(`vxm-actionsheet-item`,n&&`vxm-actionsheet-item--destructive`,r)},a),{},{children:[t&&(0,u.jsx)(`span`,{className:`vxm-actionsheet-item__icon`,children:t}),i]}))}var Da=[`onClick`];function Oa(e){return typeof e==`object`&&!!e&&`type`in e&&`props`in e}function ka(e,t){let n=e.props,{onClick:r}=n,i=U(n,Da);return D(D({},e),{},{props:D(D(D({},i),t),{},{onClick:e=>{typeof r==`function`&&r(e),typeof t.onClick==`function`&&t.onClick(e)}})})}function Aa({trigger:e,onOpen:t}){return Oa(e)?ka(e,{onClick:t}):(0,u.jsx)(`button`,{type:`button`,onClick:t,children:e})}function ja({trigger:e,title:t,description:n,side:r=`right`,variant:i=`default`,children:a,header:o,footer:s,className:c,open:l,defaultOpen:d,onOpenChange:f,showClose:p=!0,closeOnOverlayClick:m=!0,showConfirm:h=!1,confirmText:g=`确认`,confirmDisabled:_=!1,onConfirm:v,width:y}){let{isOpen:b,phase:x,open:S,close:C}=Ca({open:l,defaultOpen:d,onOpenChange:f});return(0,u.jsxs)(u.Fragment,{children:[e?(0,u.jsx)(Aa,{trigger:e,onOpen:S}):null,(0,u.jsx)(Ta,{side:r,phase:x,title:t,description:n,header:o,footer:s,className:c,showClose:i!==`action`&&p,closeOnOverlayClick:m,showConfirm:h,confirmText:g,confirmDisabled:_,onConfirm:v,onClose:C,action:i===`action`,width:y,children:a})]})}ja.Item=Ea;function Ma(e){return e.searchLabel===void 0?typeof e.label==`string`?e.label:``:e.searchLabel}function Na({options:e,value:t,defaultValue:n,onChange:r,placeholder:i=`Select...`,searchPlaceholder:a=`Search...`,label:o,hint:s,error:c,disabled:f,clearable:p=!1,emptyText:m=`No results`,searchable:h=!0,className:g,mobileSheet:_}){var v;let y=t!==void 0,[b,x]=(0,l.useState)(n),S=y?t:b,[C,w]=(0,l.useState)(!1),[T,E]=(0,l.useState)(``),D=(0,l.useRef)(null),O=(0,l.useRef)(null),k=(0,l.useRef)(null),A=(0,l.useRef)(null),j=(0,l.useId)(),M=Sa(),[N,P]=(0,l.useState)(null),F=(0,l.useRef)(null),I=e.find(e=>e.value===S),L=e.filter(e=>{let t=Ma(e);return t&&t.toLowerCase().includes(T.toLowerCase())}),R=typeof h==`number`?e.length>h:h;(0,l.useEffect)(()=>{if(!C){E(``);return}if(R){let e=setTimeout(()=>{var e;return(e=A.current)==null?void 0:e.focus()},M?350:0);return()=>clearTimeout(e)}},[C,R,M]),(0,l.useEffect)(()=>{if(!C||M)return;let e=e=>{var t,n;let r=(t=D.current)==null?void 0:t.contains(e.target),i=(n=k.current)==null?void 0:n.contains(e.target);!r&&!i&&w(!1)},t=e=>{e.key===`Escape`&&(e.preventDefault(),w(!1))};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e,{passive:!0}),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e),document.removeEventListener(`keydown`,t)}},[C,M]),(0,l.useEffect)(()=>{let{shouldInline:e}=Or(D.current);if(!(!C||!e))return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=``}},[C]),(0,l.useEffect)(()=>{if(!C||!N)return;let e=F.current;if(e)return e.dataset.hasOpenPortal=`1`,()=>{delete e.dataset.hasOpenPortal}},[C,N]),(0,l.useLayoutEffect)(()=>{let{dialogContent:e,shouldInline:t}=Or(D.current);if(!C||!O.current||t||M){P(null),F.current=null;return}F.current=e;let n=O.current.getBoundingClientRect(),r=window.innerHeight-n.bottom,i=n.top,a=r<200&&i>r?`up`:`down`,o=a===`down`?Math.max(120,r-8):Math.max(120,i-8);P(a===`down`?{top:n.bottom+4,left:n.left,width:n.width,direction:a,maxHeight:o}:{bottom:window.innerHeight-n.top+4,left:n.left,width:n.width,direction:a,maxHeight:o})},[C,M]),(0,l.useEffect)(()=>{if(!C||!N)return;let e=e=>{var t;(t=k.current)!=null&&t.contains(e.target)||w(!1)};return window.addEventListener(`scroll`,e,{capture:!0,passive:!0}),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,{capture:!0}),window.removeEventListener(`resize`,e)}},[C,N]);let z=e=>{e.disabled||(y||x(e.value),r==null||r(e.value),w(!1))},B=e=>{e.stopPropagation(),y||x(void 0),r==null||r(void 0)},[V,H]=(0,l.useState)(S);(0,l.useEffect)(()=>{C&&M&&H(S)},[C,M,S]);let U=e=>{e.disabled||H(e.value)},ee=()=>{y||x(V),r==null||r(V)},W=(0,u.jsxs)(u.Fragment,{children:[R&&(0,u.jsx)(`div`,{className:`vx-select__search-wrap`,children:(0,u.jsx)(`input`,{ref:A,type:`text`,className:`vx-select__search`,placeholder:a,value:T,onChange:e=>E(e.target.value),"aria-label":a})}),(0,u.jsx)(`ul`,{id:j,className:`vx-select__list`,role:`listbox`,"aria-label":o==null?`Options`:o,children:L.length===0?(0,u.jsx)(`li`,{className:`vx-select__empty`,children:m}):L.map(e=>(0,u.jsxs)(`li`,{className:$(`vx-select__option`,e.value===V&&`vx-select__option--selected`,e.disabled&&`vx-select__option--disabled`),role:`option`,"aria-selected":e.value===V,"aria-disabled":e.disabled,onClick:()=>U(e),children:[(0,u.jsx)(`span`,{children:e.label}),e.value===V?(0,u.jsx)(_n,{size:14}):null]},e.value))})]});return(0,u.jsxs)(`div`,{ref:D,className:$(`vx-select`,C&&`vx-select--open`,g),children:[o?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:o}):null,(0,u.jsxs)(`button`,{ref:O,type:`button`,className:$(`vx-select__trigger`,c&&`vx-select__trigger--invalid`,f&&`vx-select__trigger--disabled`),onClick:()=>!f&&w(e=>!e),disabled:f,"aria-haspopup":`listbox`,"aria-expanded":C,"aria-controls":j,children:[(0,u.jsx)(`span`,{className:$(`vx-select__value`,!I&&`vx-select__value--placeholder`),children:(v=I==null?void 0:I.label)==null?i:v}),(0,u.jsxs)(`span`,{className:`vx-select__icons`,children:[p&&I&&(0,u.jsx)(`span`,{className:`vx-select__clear`,onClick:B,role:`button`,"aria-label":`Clear selection`,children:(0,u.jsx)(Q,{size:14})}),(0,u.jsx)(yn,{size:14,className:$(`vx-select__chevron`,C&&`vx-select__chevron--open`)})]})]}),c?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:c}):null,!c&&s?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:s}):null,C&&!M&&(()=>{let e=!!N,t=N?{top:N.top,bottom:N.bottom,left:N.left,width:N.width,pointerEvents:`auto`}:void 0,n=(0,u.jsxs)(`div`,{ref:k,className:$(`vx-select__dropdown`,(N==null?void 0:N.direction)===`up`&&`vx-select__dropdown--up`,!!F.current&&`vx-select__dropdown--in-dialog`),style:t,children:[R&&(0,u.jsx)(`div`,{className:`vx-select__search-wrap`,children:(0,u.jsx)(`input`,{ref:A,type:`text`,className:`vx-select__search`,placeholder:a,value:T,onChange:e=>E(e.target.value),"aria-label":a})}),(0,u.jsx)(`ul`,{id:j,className:`vx-select__list`,role:`listbox`,"aria-label":o==null?`Options`:o,style:N?{maxHeight:N.maxHeight}:void 0,children:L.length===0?(0,u.jsx)(`li`,{className:`vx-select__empty`,children:m}):L.map(e=>(0,u.jsxs)(`li`,{className:$(`vx-select__option`,e.value===S&&`vx-select__option--selected`,e.disabled&&`vx-select__option--disabled`),role:`option`,"aria-selected":e.value===S,"aria-disabled":e.disabled,onClick:()=>z(e),children:[(0,u.jsx)(`span`,{children:e.label}),e.value===S?(0,u.jsx)(_n,{size:14}):null]},e.value))})]});return e?(0,d.createPortal)(n,document.body):n})(),M&&(_===void 0?(0,u.jsx)(ja,{side:`bottom`,open:C,onOpenChange:e=>{e||w(!1)},title:o||i,showConfirm:!0,confirmDisabled:V===void 0,onConfirm:ee,children:W}):_)]})}var Pa=[`className`,`label`,`description`,`indeterminate`];function Fa(e){let{className:t,label:n,description:r,indeterminate:i}=e,a=U(e,Pa);return(0,u.jsxs)(`label`,{className:$(`vx-checkbox`,a.disabled&&`vx-checkbox--disabled`),children:[(0,u.jsxs)(`span`,{className:`vx-checkbox__control-wrap`,children:[(0,u.jsx)(`input`,D({type:`checkbox`,className:$(`vx-checkbox__input`,t),ref:e=>{e&&(e.indeterminate=i!=null&&i)}},a)),(0,u.jsx)(`span`,{className:`vx-checkbox__box`,"aria-hidden":`true`,children:i?(0,u.jsx)(`svg`,{width:`10`,height:`10`,viewBox:`0 0 10 10`,fill:`none`,children:(0,u.jsx)(`path`,{d:`M2 5h6`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`})}):(0,u.jsx)(`svg`,{width:`10`,height:`10`,viewBox:`0 0 10 10`,fill:`none`,children:(0,u.jsx)(`path`,{d:`M2 5l2.5 2.5L8 3`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`})})})]}),n?(0,u.jsxs)(`span`,{className:`vx-checkbox__copy`,children:[(0,u.jsx)(`span`,{className:`vx-checkbox__label`,children:n}),r?(0,u.jsx)(`span`,{className:`vx-checkbox__description`,children:r}):null]}):null]})}function Ia({options:e,value:t,defaultValue:n,onChange:r,className:i,fullWidth:a,size:o=`md`}){var s;let[c,d]=(0,l.useState)(n==null?(s=e[0])==null?void 0:s.value:n),f=t!==void 0,p=f?t:c,[m,h]=(0,l.useState)({left:0,width:0,opacity:0}),g=(0,l.useRef)(null),_=(0,l.useRef)({});(0,l.useEffect)(()=>{requestAnimationFrame(()=>{let e=_.current[p];e&&h({left:e.offsetLeft,width:e.offsetWidth,opacity:1})})},[p,e,a,o]);let v=e=>{f||d(e),r==null||r(e)};return(0,u.jsxs)(`div`,{ref:g,className:$(`vx-segmented-control`,`vx-segmented-control--${o}`,a&&`vx-segmented-control--full`,i),children:[(0,u.jsx)(`div`,{className:`vx-segmented-control__slider`,style:{transform:`translateX(${m.left}px)`,width:`${m.width}px`,opacity:m.opacity}}),e.map(e=>{let t=p===e.value;return(0,u.jsx)(`button`,{ref:t=>{_.current[e.value]=t},type:`button`,role:`radio`,"aria-checked":t,disabled:e.disabled,onClick:()=>!e.disabled&&v(e.value),className:$(`vx-segmented-control__item`,t&&`vx-segmented-control__item--active`),children:e.label},e.value)})]})}var La=[`className`,`label`,`description`];function Ra(e){let{className:t,label:n,description:r}=e,i=U(e,La);return(0,u.jsxs)(`label`,{className:$(`vx-radio`,i.disabled&&`vx-radio--disabled`),children:[(0,u.jsxs)(`span`,{className:`vx-radio__control-wrap`,children:[(0,u.jsx)(`input`,D({type:`radio`,className:$(`vx-radio__input`,t)},i)),(0,u.jsx)(`span`,{className:`vx-radio__circle`,"aria-hidden":`true`,children:(0,u.jsx)(`span`,{className:`vx-radio__dot`})})]}),n?(0,u.jsxs)(`span`,{className:`vx-radio__copy`,children:[(0,u.jsx)(`span`,{className:`vx-radio__label`,children:n}),r?(0,u.jsx)(`span`,{className:`vx-radio__description`,children:r}):null]}):null]})}function za({label:e,children:t,className:n}){return(0,u.jsxs)(`fieldset`,{className:$(`vx-radio-group`,n),children:[e?(0,u.jsx)(`legend`,{className:`vx-field-group__label`,children:e}):null,(0,u.jsx)(`div`,{className:`vx-radio-group__items`,children:t})]})}var Ba=[`className`,`label`,`hint`,`resize`,`style`];function Va(e){let{className:t,label:n,hint:r,resize:i=`vertical`,style:a}=e,o=U(e,Ba);return(0,u.jsxs)(`label`,{className:`vx-field-group`,children:[n?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:n}):null,(0,u.jsx)(`textarea`,D({className:$(`vx-textarea`,t),style:D({resize:i},a)},o)),r?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:r}):null]})}var Ha=[`className`,`label`,`showValue`,`hint`,`value`,`defaultValue`];function Ua(e){var t;let{className:n,label:r,showValue:i=!1,hint:a,value:o,defaultValue:s}=e,c=U(e,Ha),l=(t=o==null?s:o)==null?``:t;return(0,u.jsxs)(`label`,{className:`vx-field-group`,children:[r||i?(0,u.jsxs)(`span`,{className:`vx-slider__header`,children:[r?(0,u.jsx)(`span`,{className:`vx-field-group__label vx-slider__label`,children:r}):null,i?(0,u.jsx)(`span`,{className:`vx-slider__value`,children:l}):null]}):null,(0,u.jsx)(`input`,D({type:`range`,className:$(`vx-slider`,n),value:o,defaultValue:s},c)),a?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:a}):null]})}var Wa=[`className`,`size`,`label`],Ga={sm:16,md:24,lg:36};function Ka(e){let{className:t,size:n=`md`,label:r=`Loading…`}=e,i=U(e,Wa),a=Ga[n];return(0,u.jsx)(`span`,D(D({role:`status`,"aria-label":r,className:$(`vx-spinner`,`vx-spinner--${n}`,t)},i),{},{children:(0,u.jsx)(`svg`,{width:a,height:a,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeDasharray:`42 14`})})}))}var qa=[`className`,`value`,`max`,`label`,`showLabel`,`size`,`variant`,`indeterminate`];function Ja(e){let{className:t,value:n=0,max:r=100,label:i,showLabel:a=!1,size:o=`md`,variant:s=`default`,indeterminate:c=!1}=e,l=U(e,qa),d=c?void 0:Math.min(100,Math.max(0,n/r*100));return(0,u.jsxs)(`div`,D(D({className:$(`vx-progress-wrap`,t)},l),{},{children:[i||a?(0,u.jsxs)(`div`,{className:`vx-progress__header`,children:[i?(0,u.jsx)(`span`,{className:`vx-progress__label`,children:i}):null,a&&!c?(0,u.jsxs)(`span`,{className:`vx-progress__value`,children:[Math.round(d),`%`]}):null]}):null,(0,u.jsx)(`div`,{role:`progressbar`,"aria-valuenow":c?void 0:n,"aria-valuemin":0,"aria-valuemax":r,"aria-label":i,className:$(`vx-progress`,`vx-progress--${o}`,`vx-progress--${s}`,c&&`vx-progress--indeterminate`),children:(0,u.jsx)(`div`,{className:`vx-progress__bar`,style:c?void 0:{width:`${d}%`}})})]}))}var Ya=[`className`,`variant`,`title`,`icon`,`onClose`,`children`],Xa={info:(0,u.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:[(0,u.jsx)(`circle`,{cx:`8`,cy:`8`,r:`7`,stroke:`currentColor`,strokeWidth:`1.5`}),(0,u.jsx)(`path`,{d:`M8 7v4M8 5.5v.5`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})]}),success:(0,u.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:[(0,u.jsx)(`circle`,{cx:`8`,cy:`8`,r:`7`,stroke:`currentColor`,strokeWidth:`1.5`}),(0,u.jsx)(`path`,{d:`M5 8.5l2 2 4-4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})]}),warning:(0,u.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:[(0,u.jsx)(`path`,{d:`M8 2L14.5 13.5H1.5L8 2z`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinejoin:`round`}),(0,u.jsx)(`path`,{d:`M8 6.5v3M8 11v.5`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})]}),danger:(0,u.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:[(0,u.jsx)(`circle`,{cx:`8`,cy:`8`,r:`7`,stroke:`currentColor`,strokeWidth:`1.5`}),(0,u.jsx)(`path`,{d:`M10 6L6 10M6 6l4 4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})]})};function Za(e){let{className:t,variant:n=`info`,title:r,icon:i,onClose:a,children:o}=e,s=U(e,Ya);return(0,u.jsxs)(`div`,D(D({role:`alert`,className:$(`vx-alert`,`vx-alert--${n}`,t)},s),{},{children:[(0,u.jsx)(`span`,{className:`vx-alert__icon`,children:i==null?Xa[n]:i}),(0,u.jsxs)(`div`,{className:`vx-alert__body`,children:[r?(0,u.jsx)(`p`,{className:`vx-alert__title`,children:r}):null,o?(0,u.jsx)(`div`,{className:`vx-alert__content`,children:o}):null]}),a?(0,u.jsx)(`button`,{type:`button`,className:`vx-alert__close`,onClick:a,"aria-label":`关闭`,children:(0,u.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M1 1l12 12M13 1L1 13`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})}):null]}))}var Qa=[`className`,`width`,`height`,`variant`,`lines`,`style`];function $a(e){let{className:t,width:n,height:r,variant:i=`rect`,lines:a=1,style:o}=e,s=U(e,Qa);return i===`text`&&a>1?(0,u.jsx)(`span`,D(D({className:$(`vx-skeleton-text`,t)},s),{},{children:Array.from({length:a}).map((e,t)=>(0,u.jsx)(`span`,{className:`vx-skeleton vx-skeleton--text`,style:t===a-1?{width:`70%`}:void 0},t))})):(0,u.jsx)(`span`,D({className:$(`vx-skeleton`,`vx-skeleton--${i}`,t),style:D({width:typeof n==`number`?`${n}px`:n,height:typeof r==`number`?`${r}px`:r},o)},s))}function eo({content:e,placement:t=`top`,delay:n=600,children:r,className:i}){let[a,o]=(0,l.useState)(!1),s=(0,l.useRef)(null),c=(0,l.useCallback)(()=>{s.current=setTimeout(()=>o(!0),n)},[n]),d=(0,l.useCallback)(()=>{s.current&&clearTimeout(s.current),o(!1)},[]);return(0,l.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]),(0,u.jsxs)(`span`,{className:$(`vx-tooltip-wrap`,i),onMouseEnter:c,onMouseLeave:d,onFocus:c,onBlur:d,children:[r,a?(0,u.jsx)(`span`,{role:`tooltip`,className:$(`vx-tooltip`,`vx-tooltip--${t}`),children:e}):null]})}function to({content:e,placement:t=`bottom`,trigger:n=`click`,children:r,className:i,open:a,onOpenChange:o}){let[s,c]=(0,l.useState)(!1),d=a!==void 0,f=d?a:s,p=(0,l.useRef)(null),m=(0,l.useCallback)(e=>{d||c(e),o==null||o(e)},[d,o]),h=(0,l.useCallback)(()=>m(!f),[f,m]);(0,l.useEffect)(()=>{if(!f)return;let e=e=>{e.key===`Escape`&&m(!1)},t=e=>{p.current&&!p.current.contains(e.target)&&m(!1)};return document.addEventListener(`keydown`,e),document.addEventListener(`mousedown`,t),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`mousedown`,t)}},[f,m]);let g=n===`click`?{onClick:h}:{onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1)};return(0,u.jsxs)(`div`,D(D({ref:p,className:$(`vx-popover-wrap`,i)},g),{},{children:[r,f?(0,u.jsx)(`div`,{className:$(`vx-popover`,`vx-popover--${t}`),role:`dialog`,children:e}):null]}))}function no(e){return Array.from(e.querySelectorAll(`.vx-dropdown__item:not(.vx-dropdown__item--disabled):not([aria-hidden]):not([aria-haspopup="menu"])`))}function ro(e,t){var n;t.length!==0&&((n=t[Math.max(0,Math.min(e,t.length-1))])==null||n.focus())}function io({trigger:e,items:t,disabled:n,onCloseAll:r,onSelect:i}){let[a,o]=(0,l.useState)(!1),s=(0,l.useRef)(null),c=(0,l.useRef)(null),d=(0,l.useId)(),f=(0,l.useId)(),p=(0,l.useRef)(void 0),m=(0,l.useCallback)(()=>o(!1),[]),h=(0,l.useCallback)(()=>{n||(clearTimeout(p.current),o(!0))},[n]),g=(0,l.useCallback)(()=>{p.current=setTimeout(m,150)},[m]);(0,l.useEffect)(()=>()=>clearTimeout(p.current),[]),(0,l.useEffect)(()=>{if(!a)return;let e=e=>{if(e.key===`Escape`||e.key===`ArrowLeft`){var t;e.preventDefault(),e.stopPropagation(),m(),(t=s.current)==null||(t=t.querySelector(`[aria-haspopup="menu"]`))==null||t.focus()}};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[a,m]);let _=(0,l.useCallback)(e=>{if(!c.current)return;let t=no(c.current);if(t.length===0)return;let n=t.indexOf(document.activeElement);switch(e.key){case`ArrowDown`:e.preventDefault(),ro(n+1,t);break;case`ArrowUp`:e.preventDefault(),ro(n-1,t);break;case`Home`:e.preventDefault(),ro(0,t);break;case`End`:e.preventDefault(),ro(t.length-1,t);break}},[]);return(0,u.jsxs)(`div`,{ref:s,className:`vx-dropdown__sub-wrap`,onMouseEnter:h,onMouseLeave:g,children:[(0,l.cloneElement)(e,{id:d,"aria-expanded":a,"aria-controls":a?f:void 0}),a&&!n?(0,u.jsx)(`div`,{ref:c,id:f,className:`vx-dropdown__sub-menu`,role:`menu`,"aria-labelledby":d,onKeyDown:_,children:t.map((e,t)=>(0,u.jsxs)(`button`,{role:`menuitem`,disabled:e.disabled,className:$(`vx-dropdown__item`,e.type&&`vx-dropdown__item--checkable`,e.type===`checkbox`&&`vx-dropdown__item--checkbox`,e.type===`radio`&&`vx-dropdown__item--radio`,e.danger&&`vx-dropdown__item--danger`,e.disabled&&`vx-dropdown__item--disabled`),"aria-disabled":e.disabled||void 0,"aria-checked":e.type?e.checked:void 0,onClick:()=>{if(!e.disabled){var t;(t=e.onClick)==null||t.call(e),i==null||i(e),r==null||r()}},children:[e.type?(0,u.jsx)(`span`,{className:`vx-dropdown__item-check`,"aria-hidden":`true`,children:e.type===`checkbox`&&e.checked?`✓`:e.type===`radio`&&e.checked?`●`:null}):e.icon?(0,u.jsx)(`span`,{className:`vx-dropdown__item-icon`,children:e.icon}):null,(0,u.jsxs)(`span`,{className:`vx-dropdown__item-content`,children:[(0,u.jsx)(`span`,{className:`vx-dropdown__item-label`,children:e.label}),e.description&&(0,u.jsx)(`span`,{className:`vx-dropdown__item-desc`,children:e.description})]}),e.shortcut?(0,u.jsx)(`kbd`,{className:`vx-dropdown__shortcut`,children:e.shortcut}):null]},t))}):null]})}function ao({asChild:e,children:t,extraProps:n,wrapper:r}){return e&&(0,l.isValidElement)(t)?(0,l.cloneElement)(t,n):(0,l.cloneElement)(r,n,t)}function oo({trigger:e,groups:t,items:n,side:r=`bottom`,align:i=`start`,sideOffset:a=4,className:o,open:s,onOpenChange:c,onSelect:f}){var p,m;let[h,g]=(0,l.useState)(!1),_=s!==void 0,v=_?s:h,y=(0,l.useRef)(null),b=(0,l.useRef)(null),x=(0,l.useRef)(null),S=(0,l.useId)(),C=kr(),w=Sa(),[T,E]=(0,l.useState)(null),O=(0,l.useRef)(``),k=(0,l.useRef)(void 0),A=(0,l.useCallback)(e=>{if(!x.current)return;clearTimeout(k.current),O.current+=e.toLowerCase(),k.current=setTimeout(()=>{O.current=``},350);let t=no(x.current);for(let e of t){var n;if(((n=e.textContent)==null?``:n).trim().toLowerCase().startsWith(O.current)){e.focus();return}}},[]),j=(0,l.useCallback)(e=>{_||g(e),c==null||c(e)},[_,c]),M=(0,l.useCallback)(()=>j(!v),[v,j]),N=(0,l.useCallback)(()=>{var e;j(!1),(e=y.current)==null||e.focus()},[j]),P=(0,l.useCallback)(e=>{var t;if(!e.disabled&&((t=e.onClick)==null||t.call(e),f==null||f(e),!e.type)){var n;j(!1),(n=y.current)==null||n.focus()}},[f,j]),F=(0,l.useCallback)(()=>{if(!y.current||w){E(null);return}let e=y.current.getBoundingClientRect(),t=window.innerHeight-e.bottom,n=e.top,o=r;r===`bottom`&&t<200&&n>t?o=`top`:r===`top`&&n<200&&t>n&&(o=`bottom`);let s=o===`bottom`?Math.max(120,t-a-8):Math.max(120,n-a-8),c=i,l=Math.max(192,e.width);i===`start`&&e.left+l>window.innerWidth-8?c=`end`:i===`end`&&e.right-l<8&&(c=`start`);let u,d;c===`start`?u=Math.max(8,e.left):d=Math.max(8,window.innerWidth-e.right),E({top:o===`bottom`?e.bottom+a:void 0,bottom:o===`top`?window.innerHeight-e.top+a:void 0,left:u,right:d,maxHeight:s,actualSide:o,actualAlign:c,width:e.width})},[r,a,i,w]);(0,l.useLayoutEffect)(()=>{v&&!w?F():E(null)},[v,w,F]),(0,l.useEffect)(()=>{if(!v||w)return;let e=()=>F();return window.addEventListener(`scroll`,e,{capture:!0,passive:!0}),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,{capture:!0}),window.removeEventListener(`resize`,e)}},[v,w,F]),(0,l.useEffect)(()=>{if(!v||w)return;let e=e=>{if(e.key===`Escape`){var t;e.preventDefault(),j(!1),(t=y.current)==null||t.focus()}},t=e=>{b.current&&!b.current.contains(e.target)&&!(x.current&&x.current.contains(e.target))&&j(!1)};return document.addEventListener(`keydown`,e),document.addEventListener(`mousedown`,t),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`mousedown`,t)}},[v,w,j]),(0,l.useEffect)(()=>{if(!v||w||!x.current)return;let e=requestAnimationFrame(()=>{let e=no(x.current);e.length>0&&e[0].focus()});return()=>cancelAnimationFrame(e)},[v,w]);let I=(0,l.useCallback)(e=>{if(e.key.length===1&&!e.ctrlKey&&!e.altKey&&!e.metaKey){e.preventDefault(),A(e.key);return}if(!x.current)return;let t=no(x.current);if(t.length===0)return;let n=t.indexOf(document.activeElement);switch(e.key){case`ArrowDown`:e.preventDefault(),ro(n+1,t);break;case`ArrowUp`:e.preventDefault(),ro(n-1,t);break;case`Home`:e.preventDefault(),ro(0,t);break;case`End`:e.preventDefault(),ro(t.length-1,t);break;case`Tab`:var r;e.preventDefault(),j(!1),(r=y.current)==null||r.focus();break}},[A,j]),L=t==null?n?[{items:n}]:[]:t,R=(e,t)=>e.subItems&&e.subItems.length>0?(0,u.jsx)(io,{disabled:e.disabled,onCloseAll:N,onSelect:f,trigger:(0,u.jsxs)(`button`,{role:`menuitem`,"aria-haspopup":`menu`,disabled:e.disabled,className:$(`vx-dropdown__item`,e.danger&&`vx-dropdown__item--danger`,e.disabled&&`vx-dropdown__item--disabled`),"aria-disabled":e.disabled||void 0,children:[e.icon?(0,u.jsx)(`span`,{className:`vx-dropdown__item-icon`,children:e.icon}):null,(0,u.jsxs)(`span`,{className:`vx-dropdown__item-content`,children:[(0,u.jsx)(`span`,{className:`vx-dropdown__item-label`,children:e.label}),e.description&&(0,u.jsx)(`span`,{className:`vx-dropdown__item-desc`,children:e.description})]}),(0,u.jsx)(`span`,{className:`vx-dropdown__sub-arrow`,"aria-hidden":`true`,children:`▶`})]}),items:e.subItems},t):(0,u.jsxs)(`button`,{role:`menuitem`,disabled:e.disabled,className:$(`vx-dropdown__item`,e.type&&`vx-dropdown__item--checkable`,e.type===`checkbox`&&`vx-dropdown__item--checkbox`,e.type===`radio`&&`vx-dropdown__item--radio`,e.danger&&`vx-dropdown__item--danger`,e.disabled&&`vx-dropdown__item--disabled`),"aria-disabled":e.disabled||void 0,"aria-checked":e.type?e.checked:void 0,onClick:()=>P(e),children:[e.type?(0,u.jsx)(`span`,{className:`vx-dropdown__item-check`,"aria-hidden":`true`,children:e.type===`checkbox`&&e.checked?`✓`:e.type===`radio`&&e.checked?`●`:null}):e.icon?(0,u.jsx)(`span`,{className:`vx-dropdown__item-icon`,children:e.icon}):null,(0,u.jsxs)(`span`,{className:`vx-dropdown__item-content`,children:[(0,u.jsx)(`span`,{className:`vx-dropdown__item-label`,children:e.label}),e.description&&(0,u.jsx)(`span`,{className:`vx-dropdown__item-desc`,children:e.description})]}),e.shortcut?(0,u.jsx)(`kbd`,{className:`vx-dropdown__shortcut`,children:e.shortcut}):null]},t),z=(0,u.jsx)(`div`,{ref:x,id:S,role:`menu`,tabIndex:-1,className:$(`vx-dropdown__menu`,`vx-dropdown__menu--${(p=T==null?void 0:T.actualSide)==null?r:p}`,((m=T==null?void 0:T.actualAlign)==null?i:m)===`end`&&`vx-dropdown__menu--align-end`,!!C&&`vx-dropdown__menu--in-dialog`),style:{top:T==null?void 0:T.top,bottom:T==null?void 0:T.bottom,left:T==null?void 0:T.left,right:T==null?void 0:T.right,maxHeight:T==null?void 0:T.maxHeight,minWidth:T==null?void 0:T.width},onKeyDown:I,"aria-label":`Menu`,children:L.length===0?(0,u.jsx)(`div`,{className:`vx-dropdown__empty`,role:`presentation`,children:`No items`}):L.map((e,t)=>{let n=e.label?`${S}-group-${t}`:void 0;return(0,u.jsxs)(`div`,{className:`vx-dropdown__group`,role:`group`,"aria-labelledby":n,children:[e.label?(0,u.jsx)(`div`,{id:n,className:`vx-dropdown__group-label`,"aria-hidden":`true`,children:e.label}):null,t>0&&!e.label?(0,u.jsx)(`div`,{className:`vx-dropdown__separator`,role:`separator`,"aria-orientation":`horizontal`}):null,e.items.map((e,t)=>R(e,t))]},t)})}),B=w?null:document.body,V=(0,l.isValidElement)(e)&&typeof e.type==`function`,H={ref:y,type:`button`,"aria-haspopup":`menu`,"aria-expanded":v,"aria-controls":S,onClick:t=>{if(V&&e.props&&typeof e.props==`object`){let n=e.props;typeof n.onClick==`function`&&n.onClick(t)}t.defaultPrevented||M()},onKeyDown:t=>{if((t.key===`Enter`||t.key===` `||t.key===`ArrowDown`)&&(t.preventDefault(),M()),V&&e.props&&typeof e.props==`object`){let n=e.props;typeof n.onKeyDown==`function`&&n.onKeyDown(t)}}};return(0,u.jsx)(`div`,{ref:b,className:$(`vx-dropdown`,v&&`vx-dropdown--open`,o),children:w?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`button`,{ref:y,type:`button`,className:`vx-dropdown__trigger vx-dropdown__trigger--default`,onClick:M,"aria-haspopup":`menu`,"aria-expanded":v,"aria-controls":S,children:e}),(0,u.jsx)(ja,{side:`bottom`,open:v,onOpenChange:e=>{e||j(!1)},title:``,children:(0,u.jsx)(`div`,{className:`vx-dropdown__mobile-sheet`,children:L.map((e,t)=>{let n=e.label?`${S}-mob-group-${t}`:void 0;return(0,u.jsxs)(`div`,{className:`vx-dropdown__group`,role:`group`,"aria-labelledby":n,children:[e.label?(0,u.jsx)(`div`,{id:n,className:`vx-dropdown__group-label`,"aria-hidden":`true`,children:e.label}):null,t>0&&!e.label?(0,u.jsx)(`div`,{className:`vx-dropdown__separator`,role:`separator`,"aria-orientation":`horizontal`}):null,e.items.map((e,t)=>(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,className:$(`vx-dropdown__item`,e.type&&`vx-dropdown__item--checkable`,e.type===`checkbox`&&`vx-dropdown__item--checkbox`,e.type===`radio`&&`vx-dropdown__item--radio`,e.danger&&`vx-dropdown__item--danger`,e.disabled&&`vx-dropdown__item--disabled`),disabled:e.disabled,"aria-checked":e.type?e.checked:void 0,onClick:()=>P(e),children:[e.type?(0,u.jsx)(`span`,{className:`vx-dropdown__item-check`,"aria-hidden":`true`,children:e.type===`checkbox`&&e.checked?`✓`:e.type===`radio`&&e.checked?`●`:null}):e.icon?(0,u.jsx)(`span`,{className:`vx-dropdown__item-icon`,children:e.icon}):null,(0,u.jsxs)(`span`,{className:`vx-dropdown__item-content`,children:[(0,u.jsx)(`span`,{className:`vx-dropdown__item-label`,children:e.label}),e.description&&(0,u.jsx)(`span`,{className:`vx-dropdown__item-desc`,children:e.description})]}),e.shortcut?(0,u.jsx)(`kbd`,{className:`vx-dropdown__shortcut`,children:e.shortcut}):null]},t))]},t)})})})]}):(0,u.jsxs)(u.Fragment,{children:[V?(0,u.jsx)(ao,{asChild:!0,wrapper:(0,u.jsx)(`button`,{className:`vx-dropdown__trigger`}),extraProps:H,children:e}):(0,u.jsx)(`button`,D(D({className:`vx-dropdown__trigger vx-dropdown__trigger--default`},H),{},{children:e})),v&&B?(0,d.createPortal)(z,B):null]})})}var so=()=>(0,u.jsx)(`svg`,{width:`12`,height:`12`,viewBox:`0 0 12 12`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M4.5 2.5L7.5 6l-3 3.5`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})});function co({items:e,separator:t,className:n}){return(0,u.jsx)(`nav`,{"aria-label":`Breadcrumb`,className:$(`vx-breadcrumb`,n),children:(0,u.jsx)(`ol`,{className:`vx-breadcrumb__list`,children:e.map((n,r)=>{let i=r===e.length-1;return(0,u.jsxs)(`li`,{className:`vx-breadcrumb__item`,children:[i?(0,u.jsx)(`span`,{className:`vx-breadcrumb__current`,"aria-current":`page`,children:n.label}):n.href?(0,u.jsx)(`a`,{href:n.href,className:`vx-breadcrumb__link`,children:n.label}):(0,u.jsx)(`button`,{type:`button`,className:`vx-breadcrumb__link`,onClick:n.onClick,children:n.label}),i?null:(0,u.jsx)(`span`,{className:`vx-breadcrumb__sep`,"aria-hidden":`true`,children:t==null?(0,u.jsx)(so,{}):t})]},r)})})})}function lo(e,t){return Array.from({length:t-e+1},(t,n)=>e+n)}function uo({page:e,total:t,pageSize:n=10,siblingCount:r=1,onChange:i,className:a}){let o=Math.max(1,Math.ceil(t/n)),s=(()=>{let t=r*2+5;if(o<=t)return lo(1,o);let n=Math.max(e-r,1),i=Math.min(e+r,o),a=n>3,s=i<o-2;return!a&&s?[...lo(1,3+r*2),`…`,o]:a&&!s?[1,`…`,...lo(o-(2+r*2),o)]:[1,`…`,...lo(n,i),`…`,o]})();return(0,u.jsxs)(`nav`,{role:`navigation`,"aria-label":`Pagination`,className:$(`vx-pagination`,a),children:[(0,u.jsx)(`button`,{type:`button`,className:`vx-pagination__btn vx-pagination__btn--prev`,disabled:e<=1,onClick:()=>i(e-1),"aria-label":`上一页`,children:(0,u.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M9 11L5 7l4-4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})}),s.map((t,n)=>t===`…`?(0,u.jsx)(`span`,{className:`vx-pagination__ellipsis`,"aria-hidden":`true`,children:`…`},`e-${n}`):(0,u.jsx)(`button`,{type:`button`,"aria-current":t===e?`page`:void 0,className:$(`vx-pagination__btn`,t===e&&`vx-pagination__btn--active`),onClick:()=>i(t),children:t},t)),(0,u.jsx)(`button`,{type:`button`,className:`vx-pagination__btn vx-pagination__btn--next`,disabled:e>=o,onClick:()=>i(e+1),"aria-label":`下一页`,children:(0,u.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M5 11l4-4-4-4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})})]})}function fo({items:e,multiple:t=!1,defaultOpen:n=[],className:r}){let[i,a]=(0,l.useState)(new Set(n));function o(e){a(n=>{let r=new Set(t?n:[]);return n.has(e)?r.delete(e):r.add(e),r})}return(0,u.jsx)(`div`,{className:$(`vx-accordion`,r),children:e.map(e=>{let t=i.has(e.key);return(0,u.jsxs)(`div`,{className:$(`vx-accordion__item`,t&&`vx-accordion__item--open`,e.disabled&&`vx-accordion__item--disabled`),children:[(0,u.jsxs)(`button`,{type:`button`,disabled:e.disabled,"aria-expanded":t,className:`vx-accordion__trigger`,onClick:()=>!e.disabled&&o(e.key),children:[(0,u.jsx)(`span`,{className:`vx-accordion__title`,children:e.title}),(0,u.jsx)(`span`,{className:`vx-accordion__chevron`,"aria-hidden":`true`,children:(0,u.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,children:(0,u.jsx)(`path`,{d:`M3 5l4 4 4-4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})})]}),t?(0,u.jsx)(`div`,{className:`vx-accordion__content`,children:e.content}):null]},e.key)})})}var po=[`className`,`orientation`,`decorative`];function mo(e){let{className:t,orientation:n=`horizontal`,decorative:r=!0}=e,i=U(e,po);return(0,u.jsx)(`hr`,D({role:r?`none`:`separator`,"aria-orientation":r?void 0:n,className:$(`vx-separator`,`vx-separator--${n}`,t)},i))}var ho=[`src`,`name`,`size`,`shape`,`fallback`,`className`,`alt`];function go(e){let t=e.trim().split(/\s+/);return t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}var _o=[0,30,60,120,160,200,240,270,300,340];function vo(e){let t=0;for(let n=0;n<e.length;n++)t+=e.charCodeAt(n);return _o[t%_o.length]}function yo(e){var t,n;let{src:r,name:i,size:a=`md`,shape:o=`circle`,fallback:s,className:c,alt:d}=e,f=U(e,ho),[p,m]=(0,l.useState)(!1),h=r&&!p,g=(t=i==null?d:i)==null?``:t,_=g?vo(g):200;return(0,u.jsx)(`span`,{className:$(`vx-avatar`,`vx-avatar--${a}`,`vx-avatar--${o}`,c),"aria-label":g||void 0,style:h?void 0:{"--vx-avatar-hue":_},children:h?(0,u.jsx)(`img`,D({src:r,alt:(n=d==null?i:d)==null?``:n,className:`vx-avatar__img`,onError:()=>m(!0)},f)):s?(0,u.jsx)(`span`,{className:`vx-avatar__fallback`,children:s}):g?(0,u.jsx)(`span`,{className:`vx-avatar__initials`,children:go(g)}):(0,u.jsxs)(`svg`,{className:`vx-avatar__placeholder`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,children:[(0,u.jsx)(`circle`,{cx:`12`,cy:`8`,r:`4`,stroke:`currentColor`,strokeWidth:`1.5`}),(0,u.jsx)(`path`,{d:`M4 20c0-4 3.58-7 8-7s8 3 8 7`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})]})})}var bo=`columns.data.size.striped.hoverable.bordered.compact.stickyHeader.stickyFilter.borderless.headless.rounded.loading.caption.emptyText.sortColumn.sortDirection.onSortChange.variant.fixed.removeBorders.flush.onRowClick.rowClassName.selectable.selectedRows.onSelectionChange.className.filterable.filterPlaceholder.filterValue.onFilterChange.columnFilters.onColumnFilterChange.filterThreshold.searchDebounce.searchColumns`.split(`.`);function xo(e,t){if(e.searchValue)return e.searchValue(t);let n=e.accessor(t);return typeof n==`string`||typeof n==`number`?String(n):``}function So({dir:e,active:t}){return t?e===`asc`?(0,u.jsx)(hn,{size:12,className:`vx-table__sort-icon vx-table__sort-icon--active`}):(0,u.jsx)(pn,{size:12,className:`vx-table__sort-icon vx-table__sort-icon--active`}):(0,u.jsx)(mn,{size:12,className:`vx-table__sort-icon`})}function Co(e){let{columns:t,data:n,size:r=`md`,striped:i=!1,hoverable:a=!0,bordered:o=!1,compact:s=!1,stickyHeader:c=!1,stickyFilter:d=!1,borderless:f=!1,headless:p=!1,rounded:m=!0,loading:h=!1,caption:g,emptyText:_=`暂无数据`,sortColumn:v,sortDirection:y,onSortChange:b,variant:x=`default`,fixed:S=!1,removeBorders:C,flush:w=!1,onRowClick:T,rowClassName:E,selectable:O=!1,selectedRows:k,onSelectionChange:A,className:j,filterable:M,filterPlaceholder:N=`搜索...`,filterValue:P,onFilterChange:F,columnFilters:I,onColumnFilterChange:L,filterThreshold:R=10,searchDebounce:z=200,searchColumns:B}=e,V=U(e,bo),H=s?`sm`:r,[ee,W]=(0,l.useState)(null),[te,ne]=(0,l.useState)(null),G=v!==void 0,K=G?v:ee,q=G?y==null?null:y:te,re=(0,l.useCallback)(e=>{let t;t=K===e?q===`asc`?`desc`:q===`desc`?null:`asc`:`asc`,G||(W(t===null?null:e),ne(t)),b==null||b(e,t)},[K,q,G,b]),[ie,ae]=(0,l.useState)(``),[oe,se]=(0,l.useState)({}),ce=P==null?ie:P,le=I==null?oe:I,[ue,de]=(0,l.useState)(ce),fe=(0,l.useRef)(null);(0,l.useEffect)(()=>{if(z<=0){de(ce);return}return fe.current&&clearTimeout(fe.current),fe.current=setTimeout(()=>{de(ce)},z),()=>{fe.current&&clearTimeout(fe.current)}},[ce,z]);let pe=(0,l.useCallback)(e=>{F?F(e):ae(e)},[F]),me=(0,l.useCallback)((e,t)=>{L?L(e,t):se(n=>{let r=D({},n);return t===``||t===void 0?delete r[e]:r[e]=t,r})},[L]),J=(0,l.useMemo)(()=>B||t.filter(e=>e.searchable!==!1).map(e=>e.key),[t,B]),he=(0,l.useMemo)(()=>{let e=n;if(ue){let n=ue.toLowerCase();e=e.filter(e=>t.some(t=>J.includes(t.key)?xo(t,e).toLowerCase().includes(n):!1))}for(let[n,r]of Object.entries(le))r&&(e=e.filter(e=>{let i=t.find(e=>e.key===n);return!i||xo(i,e)===r}));return e},[n,ue,le,t,J]),Y=(0,l.useMemo)(()=>{if(G||!K||!q)return he;let e=t.find(e=>e.key===K);return e?[...he].sort((t,n)=>{let r=e.accessor(t),i=e.accessor(n),a;return a=typeof r==`number`&&typeof i==`number`?r-i:String(r==null?``:r).localeCompare(String(i==null?``:i),void 0,{numeric:!0}),q===`desc`?-a:a}):he},[he,K,q,t,G]),[ge,_e]=(0,l.useState)(new Set),X=k==null?ge:k,ve=(0,l.useMemo)(()=>Y.map(e=>n.indexOf(e)),[Y,n]),ye=(0,l.useCallback)(e=>{let t=ve[e];if(t===void 0)return;let n=new Set(X);n.has(t)?n.delete(t):n.add(t),k||_e(n),A==null||A(n)},[X,ve,k,A]),be=(0,l.useCallback)(()=>{let e=ve.filter(e=>e!==void 0),t=e.every(e=>X.has(e)),n=new Set(X);t?e.forEach(e=>n.delete(e)):e.forEach(e=>n.add(e)),k||_e(n),A==null||A(n)},[ve,X,k,A]),xe=ve.filter(e=>e!==void 0),Se=xe.length>0&&xe.every(e=>X.has(e)),Ce=!Se&&xe.some(e=>X.has(e)),we=M===!0||M!==!1&&n.length>R,Te=t.filter(e=>e.filterable),Ee=(0,l.useMemo)(()=>{let e={};for(let t of Te)if(t.filterOptions)e[t.key]=t.filterOptions;else{let r=[...new Set(n.map(e=>xo(t,e)).filter(Boolean))];e[t.key]=r.map(e=>({value:e,label:e}))}return e},[Te,n]),De=(0,l.useMemo)(()=>C?C===`all`?{top:!0,right:!0,bottom:!0,left:!0}:Object.fromEntries(C.map(e=>[e,!0])):{},[C]);return(0,u.jsxs)(`div`,D(D({className:$(`vx-table-wrap`,x!=="default"&&`vx-table-wrap--${x}`,f&&`vx-table-wrap--borderless`,!m&&`vx-table-wrap--square`,w&&`vx-table-wrap--flush`,De.top&&`vx-table-wrap--no-top`,De.right&&`vx-table-wrap--no-right`,De.bottom&&`vx-table-wrap--no-bottom`,De.left&&`vx-table-wrap--no-left`,d&&`vx-table-wrap--sticky-filter`,j)},V),{},{children:[we?(0,u.jsxs)(`div`,{className:`vx-table__filterbar`,children:[(0,u.jsx)(`div`,{className:`vx-table__filterbar-search`,children:(0,u.jsx)(Rr,{size:`sm`,placeholder:N,value:ce,onChange:e=>pe(e.target.value),prefix:(0,u.jsx)(An,{size:14}),rounded:!0})}),Te.map(e=>{var t,n;return(0,u.jsx)(`div`,{className:`vx-table__filterbar-col`,children:(0,u.jsx)(Na,{options:[{value:``,label:`全部${e.header}`},...(t=Ee[e.key])==null?[]:t],value:(n=le[e.key])==null?``:n,onChange:t=>me(e.key,t==null?``:t),placeholder:`筛选${e.header}`,searchable:!1,clearable:!0})},e.key)})]}):null,(0,u.jsxs)(`table`,{className:$(`vx-table`,`vx-table--${x}`,i&&`vx-table--striped`,a&&`vx-table--hoverable`,o&&`vx-table--bordered`,f&&`vx-table--borderless`,S&&`vx-table--fixed`,H!==`md`&&`vx-table--${H}`,c&&`vx-table--sticky`,T&&`vx-table--clickable`,O&&`vx-table--selectable`),children:[g?(0,u.jsx)(`caption`,{className:`vx-table__caption`,children:g}):null,p?null:(0,u.jsx)(`thead`,{children:(0,u.jsxs)(`tr`,{children:[O?(0,u.jsx)(`th`,{className:`vx-table__th vx-table__th--checkbox`,style:{width:44},children:(0,u.jsx)(Fa,{checked:Se,indeterminate:Ce,onChange:be,"aria-label":`全选`})}):null,t.map(e=>(0,u.jsx)(`th`,{className:$(`vx-table__th`,e.sortable&&`vx-table__th--sortable`,e.align&&`vx-table__th--${e.align}`,e.className),style:{width:e.width},onClick:e.sortable?()=>re(e.key):void 0,"aria-sort":K===e.key?q===`asc`?`ascending`:q===`desc`?`descending`:`none`:void 0,children:(0,u.jsxs)(`span`,{className:`vx-table__th-inner`,children:[e.header,e.sortable?(0,u.jsx)(So,{dir:K===e.key?q:null,active:K===e.key}):null]})},e.key))]})}),(0,u.jsx)(`tbody`,{className:$(h&&`vx-table__body--loading`),children:Y.length===0?(0,u.jsx)(`tr`,{children:(0,u.jsx)(`td`,{colSpan:t.length+ +!!O,className:`vx-table__empty`,children:_})}):Y.map((e,n)=>{let r=ve[n],i=r!==void 0&&X.has(r),a=typeof E==`function`?E(e,n):E;return(0,u.jsxs)(`tr`,{className:$(`vx-table__row`,i&&`vx-table__row--selected`,a),onClick:T?()=>T(e,n):void 0,children:[O?(0,u.jsx)(`td`,{className:`vx-table__td vx-table__td--checkbox`,children:(0,u.jsx)(Fa,{checked:i,onChange:()=>ye(n),"aria-label":`选择第 ${n+1} 行`})}):null,t.map(t=>(0,u.jsx)(`td`,{className:$(`vx-table__td`,t.align&&`vx-table__td--${t.align}`,t.className),children:t.accessor(e)},t.key))]},n)})})]})]}))}var wo=[`label`,`className`,`children`];function To({topBar:e,bottomNav:t,children:n,className:r}){return(0,u.jsxs)(`div`,{className:$(`vxm-shell`,r),children:[e&&(0,u.jsx)(`div`,{className:`vxm-shell__topbar`,children:e}),(0,u.jsx)(`main`,{className:`vxm-shell__main`,children:n}),t&&(0,u.jsx)(`div`,{className:`vxm-shell__bottomnav`,children:t})]})}function Eo({title:e,leading:t,trailing:n,className:r}){return(0,u.jsxs)(`div`,{className:$(`vxm-topbar`,r),children:[(0,u.jsx)(`div`,{className:`vxm-topbar__leading`,children:t}),(0,u.jsx)(`div`,{className:`vxm-topbar__title`,children:e}),(0,u.jsx)(`div`,{className:`vxm-topbar__trailing`,children:n})]})}function Do(e){let{label:t,className:n,children:r}=e,i=U(e,wo);return(0,u.jsx)(`button`,D(D({type:`button`,className:$(`vxm-icon-btn`,n),"aria-label":t},i),{},{children:r}))}function Oo({items:e,className:t}){let[n,r]=(0,l.useState)(null),i=n?e.find(e=>e.key===n):null,a=e=>{var t;if((t=e.submenu)!=null&&t.length)r(t=>t===e.key?null:e.key);else{var n;r(null),(n=e.onSelect)==null||n.call(e)}};return(0,u.jsxs)(`div`,{className:`vxm-bottomnav-wrap`,children:[n&&(i==null?void 0:i.submenu)&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{className:`vxm-bottomnav__scrim`,onClick:()=>r(null),"aria-hidden":`true`}),(0,u.jsx)(`div`,{className:`vxm-bottomnav__submenu`,role:`menu`,children:i.submenu.map(e=>(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`vxm-bottomnav__submenu-item`,onClick:()=>{var t;(t=e.onSelect)==null||t.call(e),r(null)},children:[e.icon&&(0,u.jsx)(`span`,{className:`vxm-bottomnav__submenu-icon`,children:e.icon}),(0,u.jsx)(`span`,{children:e.label})]},e.key))})]}),(0,u.jsx)(`nav`,{className:$(`vxm-bottomnav`,t),"aria-label":`底部导航`,children:e.map(e=>{var t,r,i;return(0,u.jsxs)(`button`,{type:`button`,className:$(`vxm-bottomnav__item`,e.active&&`vxm-bottomnav__item--active`,!!((t=e.submenu)!=null&&t.length&&n===e.key)&&`vxm-bottomnav__item--submenu-open`),onClick:()=>a(e),"aria-current":e.active?`page`:void 0,"aria-expanded":(r=e.submenu)!=null&&r.length?n===e.key:void 0,"aria-haspopup":(i=e.submenu)!=null&&i.length?`menu`:void 0,children:[(0,u.jsxs)(`span`,{className:`vxm-bottomnav__icon`,children:[e.icon,e.badge!=null&&(0,u.jsx)(`span`,{className:`vxm-bottomnav__badge`,"aria-label":`${e.badge} 条未读`,children:e.badge})]}),(0,u.jsx)(`span`,{className:`vxm-bottomnav__label`,children:e.label})]},e.key)})})]})}var ko=[`className`],Ao=[`title`,`className`,`children`];function jo(e){let{className:t}=e,n=U(e,ko);return(0,u.jsx)(`ul`,D({className:$(`vxm-list`,t),role:`list`},n))}function Mo(e){let{title:t,className:n,children:r}=e,i=U(e,Ao);return(0,u.jsxs)(`div`,D(D({className:$(`vxm-list-section`,n)},i),{},{children:[t&&(0,u.jsx)(`div`,{className:`vxm-list-section__title`,children:t}),r]}))}function No({leading:e,trailing:t,label:n,description:r,chevron:i,destructive:a,disabled:o,onClick:s,className:c}){let l=(0,u.jsxs)(u.Fragment,{children:[e&&(0,u.jsx)(`span`,{className:`vxm-list-item__leading`,children:e}),(0,u.jsxs)(`span`,{className:`vxm-list-item__content`,children:[(0,u.jsx)(`span`,{className:`vxm-list-item__label`,children:n}),r&&(0,u.jsx)(`span`,{className:`vxm-list-item__description`,children:r})]}),t&&(0,u.jsx)(`span`,{className:`vxm-list-item__trailing`,children:t}),i&&(0,u.jsx)(bn,{size:16,className:`vxm-list-item__chevron`,"aria-hidden":`true`})]});return(0,u.jsx)(`li`,{className:$(`vxm-list-item`,a&&`vxm-list-item--destructive`,o&&`vxm-list-item--disabled`,!s&&`vxm-list-item--static`,c),children:(0,u.jsx)(`button`,{type:`button`,className:`vxm-list-item__btn`,onClick:o?void 0:s,disabled:o,tabIndex:s?0:-1,children:l})})}var Po=[`className`,`required`,`children`],Fo=(0,l.forwardRef)(function(e,t){let{className:n,required:r,children:i}=e,a=U(e,Po);return(0,u.jsxs)(`label`,D(D({ref:t,className:$(`vx-label`,n)},a),{},{children:[i,r?(0,u.jsx)(`span`,{className:`vx-label__required`,"aria-hidden":`true`,children:` *`}):null]}))}),Io=[`className`],Lo=[`className`,`required`,`children`],Ro=[`className`,`children`],zo=[`className`,`children`],Bo=(0,l.createContext)({});function Vo(){return(0,l.useContext)(Bo)}function Ho(e){let{className:t}=e,n=U(e,Io);return(0,u.jsx)(`form`,D({noValidate:!0,className:$(`vx-form`,t)},n))}function Uo({error:e,children:t,className:n}){return(0,u.jsx)(Bo.Provider,{value:{error:e},children:(0,u.jsx)(`div`,{className:$(`vx-form-field`,e&&`vx-form-field--invalid`,n),children:t})})}function Wo(e){let{className:t,required:n,children:r}=e,i=U(e,Lo);return(0,u.jsxs)(`label`,D(D({className:$(`vx-form-label`,t)},i),{},{children:[r,n?(0,u.jsx)(`span`,{className:`vx-form-label__required`,"aria-hidden":`true`,children:` *`}):null]}))}function Go(e){let{className:t,children:n}=e,r=U(e,Ro);return(0,u.jsx)(`p`,D(D({className:$(`vx-form-description`,t)},r),{},{children:n}))}function Ko(e){let{className:t,children:n}=e,r=U(e,zo),{error:i}=Vo(),a=i==null?n:i;return a?(0,u.jsx)(`p`,D(D({className:$(`vx-form-message`,i&&`vx-form-message--error`,t)},r),{},{children:a})):null}var qo=[`className`,`label`,`hint`,`error`,`value`,`onChange`,`min`,`max`,`step`,`disabled`];function Jo(e){let{className:t,label:n,hint:r,error:i,value:a,onChange:o,min:s,max:c,step:d=1,disabled:f}=e,p=U(e,qo),m=(0,l.useCallback)(e=>{let t=e;return s!==void 0&&(t=Math.max(s,t)),c!==void 0&&(t=Math.min(c,t)),t},[s,c]),h=()=>{f||o==null||o(m((a==null?0:a)+d))},g=()=>{f||o==null||o(m((a==null?0:a)-d))},_=e=>{let t=parseFloat(e.target.value);isNaN(t)||o==null||o(m(t))},v=s!==void 0&&(a==null?0:a)<=s,y=c!==void 0&&(a==null?0:a)>=c;return(0,u.jsxs)(`label`,{className:`vx-field-group`,children:[n?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:n}):null,(0,u.jsxs)(`span`,{className:$(`vx-number-input`,i&&`vx-number-input--invalid`,f&&`vx-number-input--disabled`,t),children:[(0,u.jsx)(`button`,{type:`button`,className:`vx-number-input__btn`,onClick:g,disabled:f||v,"aria-label":`Decrease`,tabIndex:-1,children:(0,u.jsx)(`svg`,{width:`12`,height:`12`,viewBox:`0 0 12 12`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M2 6h8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})}),(0,u.jsx)(`input`,D({type:`number`,className:`vx-number-input__field`,value:a==null?``:a,onChange:_,min:s,max:c,step:d,disabled:f,"aria-invalid":i?`true`:void 0},p)),(0,u.jsx)(`button`,{type:`button`,className:`vx-number-input__btn`,onClick:h,disabled:f||y,"aria-label":`Increase`,tabIndex:-1,children:(0,u.jsx)(`svg`,{width:`12`,height:`12`,viewBox:`0 0 12 12`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M6 2v8M2 6h8`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})})]}),i?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:i}):null,!i&&r?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:r}):null]})}function Yo(e,t){return new Date(e,t+1,0).getDate()}function Xo(e,t){return new Date(e,t,1).getDay()}function Zo(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function Qo({value:e,defaultValue:t,onChange:n,min:r,max:i,className:a,weekStartsOnMonday:o=!1}){let s=new Date,c=e!==void 0,[d,f]=(0,l.useState)(t),p=c?e:d,[m,h]=(0,l.useState)((p==null?s:p).getFullYear()),[g,_]=(0,l.useState)((p==null?s:p).getMonth()),v=Yo(m,g),y=Xo(m,g),b=o?y===0?6:y-1:y,x=o?[`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`,`Su`]:[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`],S=()=>{g===0?(h(e=>e-1),_(11)):_(e=>e-1)},C=()=>{g===11?(h(e=>e+1),_(0)):_(e=>e+1)},w=(0,l.useCallback)(e=>{let t=new Date(m,g,e);return!!(r&&t<new Date(r.getFullYear(),r.getMonth(),r.getDate())||i&&t>new Date(i.getFullYear(),i.getMonth(),i.getDate()))},[m,g,r,i]),T=e=>{if(w(e))return;let t=new Date(m,g,e);c||f(t),n==null||n(t)},E=new Date(m,g).toLocaleString(`default`,{month:`long`}),D=[...Array(b).fill(null),...Array.from({length:v},(e,t)=>t+1)];for(;D.length%7!=0;)D.push(null);return(0,u.jsxs)(`div`,{className:$(`vx-calendar`,a),children:[(0,u.jsxs)(`div`,{className:`vx-calendar__header`,children:[(0,u.jsx)(`button`,{type:`button`,className:`vx-calendar__nav-btn`,onClick:S,"aria-label":`Previous month`,children:(0,u.jsx)(vn,{size:16})}),(0,u.jsxs)(`span`,{className:`vx-calendar__month-label`,children:[E,` `,m]}),(0,u.jsx)(`button`,{type:`button`,className:`vx-calendar__nav-btn`,onClick:C,"aria-label":`Next month`,children:(0,u.jsx)(bn,{size:16})})]}),(0,u.jsxs)(`div`,{className:`vx-calendar__grid`,role:`grid`,"aria-label":`${E} ${m}`,children:[x.map(e=>(0,u.jsx)(`div`,{className:`vx-calendar__weekday`,role:`columnheader`,children:e},e)),D.map((e,t)=>{if(e===null)return(0,u.jsx)(`div`,{className:`vx-calendar__cell vx-calendar__cell--empty`},`e-${t}`);let n=new Date(m,g,e),r=Zo(n,s),i=p?Zo(n,p):!1,a=w(e);return(0,u.jsx)(`button`,{type:`button`,role:`gridcell`,className:$(`vx-calendar__cell`,r&&`vx-calendar__cell--today`,i&&`vx-calendar__cell--selected`,a&&`vx-calendar__cell--disabled`),onClick:()=>T(e),disabled:a,"aria-label":n.toLocaleDateString(),"aria-selected":i,children:e},e)})]})]})}function $o(e){return e.toLocaleDateString()}function es(){return(0,u.jsxs)(`svg`,{width:`15`,height:`15`,viewBox:`0 0 15 15`,fill:`none`,"aria-hidden":`true`,children:[(0,u.jsx)(`rect`,{x:`1`,y:`3`,width:`13`,height:`11`,rx:`2`,stroke:`currentColor`,strokeWidth:`1.2`}),(0,u.jsx)(`path`,{d:`M1 6.5h13`,stroke:`currentColor`,strokeWidth:`1.2`}),(0,u.jsx)(`path`,{d:`M5 1v3M10 1v3`,stroke:`currentColor`,strokeWidth:`1.4`,strokeLinecap:`round`})]})}function ts({value:e,defaultValue:t,onChange:n,placeholder:r=`Select date`,label:i,hint:a,error:o,min:s,max:c,disabled:f,weekStartsOnMonday:p,className:m}){let h=e!==void 0,[g,_]=(0,l.useState)(t),v=h?e:g,[y,b]=(0,l.useState)(!1),x=(0,l.useRef)(null),S=(0,l.useRef)(null),C=(0,l.useRef)(null),w=(0,l.useRef)(null),T=Sa(),[E,D]=(0,l.useState)(null);(0,l.useEffect)(()=>{if(!y||T)return;let e=e=>{var t,n;let r=(t=x.current)==null?void 0:t.contains(e.target),i=(n=C.current)==null?void 0:n.contains(e.target);!r&&!i&&b(!1)},t=e=>{e.key===`Escape`&&(e.preventDefault(),b(!1))};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e,{passive:!0}),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e),document.removeEventListener(`keydown`,t)}},[y,T]),(0,l.useEffect)(()=>{let{shouldInline:e}=Or(x.current);if(!(!y||!e))return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=``}},[y]),(0,l.useEffect)(()=>{if(!y||!E)return;let e=w.current;if(e)return e.dataset.hasOpenPortal=`1`,()=>{delete e.dataset.hasOpenPortal}},[y,E]),(0,l.useLayoutEffect)(()=>{let{dialogContent:e,shouldInline:t}=Or(x.current);if(!y||!S.current||t||T){D(null),w.current=null;return}w.current=e;let n=S.current.getBoundingClientRect(),r=window.innerHeight-n.bottom,i=n.top,a=r<320&&i>r?`up`:`down`;D(a===`down`?{top:n.bottom+6,left:n.left,direction:a}:{bottom:window.innerHeight-n.top+6,left:n.left,direction:a})},[y,T]),(0,l.useEffect)(()=>{if(!y||!E)return;let e=e=>{var t;(t=C.current)!=null&&t.contains(e.target)||b(!1)};return window.addEventListener(`scroll`,e,{capture:!0,passive:!0}),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,{capture:!0}),window.removeEventListener(`resize`,e)}},[y,E]);let O=e=>{h||_(e),n==null||n(e),b(!1)},[k,A]=(0,l.useState)(v);(0,l.useEffect)(()=>{y&&T&&A(v)},[y,T,v]);let j=e=>{A(e)},M=()=>{h||_(k),n==null||n(k)},N=(0,u.jsx)(u.Fragment,{children:(0,u.jsx)(Qo,{value:k,onChange:j,min:s,max:c,weekStartsOnMonday:p})});return(0,u.jsxs)(`div`,{ref:x,className:$(`vx-datepicker`,m),children:[i?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:i}):null,(0,u.jsxs)(`button`,{ref:S,type:`button`,className:$(`vx-datepicker__trigger`,o&&`vx-datepicker__trigger--invalid`,f&&`vx-datepicker__trigger--disabled`),onClick:()=>!f&&b(e=>!e),disabled:f,"aria-haspopup":`dialog`,"aria-expanded":y,children:[(0,u.jsx)(es,{}),(0,u.jsx)(`span`,{className:$(`vx-datepicker__value`,!v&&`vx-datepicker__value--placeholder`),children:v?$o(v):r})]}),o?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:o}):null,!o&&a?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:a}):null,y&&!T&&(()=>{let e=!!E,t=E?{position:`fixed`,top:E.top,bottom:E.bottom,left:E.left,pointerEvents:`auto`}:void 0,n=(0,u.jsx)(`div`,{ref:C,className:$(`vx-datepicker__popover`,(E==null?void 0:E.direction)===`up`&&`vx-datepicker__popover--up`,!!w.current&&`vx-datepicker__popover--in-dialog`),role:`dialog`,"aria-label":`Date picker`,style:t,children:(0,u.jsx)(Qo,{value:v,onChange:O,min:s,max:c,weekStartsOnMonday:p})});return e?(0,d.createPortal)(n,document.body):n})(),T&&y&&(0,u.jsx)(ja,{side:`bottom`,open:y,onOpenChange:e=>{e||b(!1)},title:i||`Select date`,showConfirm:!0,confirmDisabled:k===void 0,onConfirm:M,children:N})]})}function ns(e){return e.searchLabel===void 0?typeof e.label==`string`?e.label:``:e.searchLabel}function rs({options:e,value:t,defaultValue:n=[],onChange:r,placeholder:i=`Select...`,searchPlaceholder:a=`Search...`,label:o,hint:s,error:c,disabled:f,clearable:p=!1,emptyText:m=`No results`,maxDisplay:h,className:g}){let _=t!==void 0,[v,y]=(0,l.useState)(n),b=_?t:v,[x,S]=(0,l.useState)(!1),[C,w]=(0,l.useState)(``),T=(0,l.useRef)(null),E=(0,l.useRef)(null),D=(0,l.useRef)(null),O=(0,l.useRef)(null),k=(0,l.useId)(),A=Sa(),[j,M]=(0,l.useState)(null),N=(0,l.useRef)(null),P=e.filter(e=>{let t=ns(e);return t&&t.toLowerCase().includes(C.toLowerCase())});(0,l.useEffect)(()=>{if(!x){w(``);return}let e=setTimeout(()=>{var e;return(e=O.current)==null?void 0:e.focus()},A?350:0);return()=>clearTimeout(e)},[x,A]),(0,l.useEffect)(()=>{if(!x||A)return;let e=e=>{var t,n;let r=(t=T.current)==null?void 0:t.contains(e.target),i=(n=D.current)==null?void 0:n.contains(e.target);!r&&!i&&S(!1)},t=e=>{e.key===`Escape`&&(e.preventDefault(),S(!1))};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e,{passive:!0}),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e),document.removeEventListener(`keydown`,t)}},[x,A]),(0,l.useEffect)(()=>{let{shouldInline:e}=Or(T.current);if(!(!x||!e))return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=``}},[x]),(0,l.useEffect)(()=>{if(!x||!j)return;let e=N.current;if(e)return e.dataset.hasOpenPortal=`1`,()=>{delete e.dataset.hasOpenPortal}},[x,j]),(0,l.useLayoutEffect)(()=>{let{dialogContent:e,shouldInline:t}=Or(T.current);if(!x||!E.current||t||A){M(null),N.current=null;return}N.current=e;let n=E.current.getBoundingClientRect(),r=window.innerHeight-n.bottom,i=n.top,a=r<300&&i>r?`up`:`down`;M(a===`down`?{top:n.bottom+4,left:n.left,width:n.width,direction:a}:{bottom:window.innerHeight-n.top+4,left:n.left,width:n.width,direction:a})},[x,A]),(0,l.useEffect)(()=>{if(!x||!j)return;let e=e=>{var t;(t=D.current)!=null&&t.contains(e.target)||S(!1)};return window.addEventListener(`scroll`,e,{capture:!0,passive:!0}),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,{capture:!0}),window.removeEventListener(`resize`,e)}},[x,j]);let F=e=>{if(e.disabled)return;let t=b.includes(e.value)?b.filter(t=>t!==e.value):[...b,e.value];_||y(t),r==null||r(t),S(!1)},I=(e,t)=>{e.stopPropagation();let n=b.filter(e=>e!==t);_||y(n),r==null||r(n)},L=e=>{e.stopPropagation(),_||y([]),r==null||r([])},R=h?b.slice(0,h):b,z=h?Math.max(0,b.length-h):0,B=e.reduce((e,t)=>(e[t.value]=t.label,e),{}),[V,H]=(0,l.useState)(b);(0,l.useEffect)(()=>{x&&A&&H(b)},[x,A,b]);let U=e=>{e.disabled||H(t=>t.includes(e.value)?t.filter(t=>t!==e.value):[...t,e.value])},ee=()=>{_||y(V),r==null||r(V)},W=(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{className:`vx-multiselect__search-wrap`,children:(0,u.jsx)(`input`,{ref:O,type:`text`,className:`vx-multiselect__search`,placeholder:a,value:C,onChange:e=>w(e.target.value),"aria-label":a})}),(0,u.jsx)(`ul`,{id:k,className:`vx-multiselect__list`,role:`listbox`,"aria-multiselectable":`true`,"aria-label":o==null?`Options`:o,children:P.length===0?(0,u.jsx)(`li`,{className:`vx-multiselect__empty`,children:m}):P.map(e=>{let t=V.includes(e.value);return(0,u.jsxs)(`li`,{className:$(`vx-multiselect__option`,t&&`vx-multiselect__option--selected`,e.disabled&&`vx-multiselect__option--disabled`),role:`option`,"aria-selected":t,"aria-disabled":e.disabled,onClick:()=>U(e),children:[(0,u.jsx)(`span`,{className:$(`vx-multiselect__checkbox`,t&&`vx-multiselect__checkbox--checked`),children:t?(0,u.jsx)(_n,{size:11}):null}),(0,u.jsx)(`span`,{children:e.label})]},e.value)})})]});return(0,u.jsxs)(`div`,{ref:T,className:$(`vx-multiselect`,x&&`vx-multiselect--open`,g),children:[o?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:o}):null,(0,u.jsxs)(`button`,{ref:E,type:`button`,className:$(`vx-multiselect__trigger`,c&&`vx-multiselect__trigger--invalid`,f&&`vx-multiselect__trigger--disabled`),onClick:()=>!f&&S(e=>!e),disabled:f,"aria-haspopup":`listbox`,"aria-expanded":x,"aria-controls":k,children:[(0,u.jsx)(`span`,{className:`vx-multiselect__tags`,children:b.length===0?(0,u.jsx)(`span`,{className:`vx-multiselect__placeholder`,children:i}):(0,u.jsxs)(u.Fragment,{children:[R.map(e=>{var t;let n=(t=B[e])==null?e:t;return(0,u.jsxs)(`span`,{className:`vx-multiselect__tag`,children:[n,!f&&(0,u.jsx)(`span`,{className:`vx-multiselect__tag-remove`,role:`button`,"aria-label":`Remove ${typeof n==`string`?n:e}`,onClick:t=>I(t,e),children:(0,u.jsx)(Q,{size:11})})]},e)}),z>0&&(0,u.jsxs)(`span`,{className:`vx-multiselect__overflow`,children:[`+`,z]})]})}),(0,u.jsxs)(`span`,{className:`vx-multiselect__icons`,children:[p&&b.length>0&&(0,u.jsx)(`span`,{className:`vx-multiselect__clear`,role:`button`,"aria-label":`Clear all`,onClick:L,children:(0,u.jsx)(Q,{size:14})}),(0,u.jsx)(yn,{size:14,className:$(`vx-multiselect__chevron`,x&&`vx-multiselect__chevron--open`)})]})]}),c?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:c}):null,!c&&s?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:s}):null,x&&!A&&(()=>{let e=!!j,t=e&&j?{top:j.top,bottom:j.bottom,left:j.left,width:j.width,pointerEvents:`auto`}:void 0,n=(0,u.jsxs)(`div`,{ref:D,className:$(`vx-multiselect__dropdown`,(j==null?void 0:j.direction)===`up`&&`vx-multiselect__dropdown--up`,!!N.current&&`vx-multiselect__dropdown--in-dialog`),style:t,children:[(0,u.jsx)(`div`,{className:`vx-multiselect__search-wrap`,children:(0,u.jsx)(`input`,{ref:O,type:`text`,className:`vx-multiselect__search`,placeholder:a,value:C,onChange:e=>w(e.target.value),"aria-label":a})}),(0,u.jsx)(`ul`,{id:k,className:`vx-multiselect__list`,role:`listbox`,"aria-multiselectable":`true`,"aria-label":o==null?`Options`:o,children:P.length===0?(0,u.jsx)(`li`,{className:`vx-multiselect__empty`,children:m}):P.map(e=>{let t=b.includes(e.value);return(0,u.jsxs)(`li`,{className:$(`vx-multiselect__option`,t&&`vx-multiselect__option--selected`,e.disabled&&`vx-multiselect__option--disabled`),role:`option`,"aria-selected":t,"aria-disabled":e.disabled,onClick:()=>F(e),children:[(0,u.jsx)(`span`,{className:$(`vx-multiselect__checkbox`,t&&`vx-multiselect__checkbox--checked`),children:t?(0,u.jsx)(_n,{size:11}):null}),(0,u.jsx)(`span`,{children:e.label})]},e.value)})})]});return e?(0,d.createPortal)(n,document.body):n})(),A&&(0,u.jsx)(ja,{side:`bottom`,open:x,onOpenChange:e=>{e||S(!1)},title:o||i,showConfirm:!0,confirmDisabled:V.length===0,onConfirm:ee,children:W})]})}function is(e){return String(e).padStart(2,`0`)}function as(e){var t,n,r;let i=e.split(`:`).map(Number);return{h:(t=i[0])==null?0:t,m:(n=i[1])==null?0:n,s:(r=i[2])==null?0:r}}function os(e,t,n,r){return r?`${is(e)}:${is(t)}:${is(n)}`:`${is(e)}:${is(t)}`}function ss(){return(0,u.jsxs)(`svg`,{width:`15`,height:`15`,viewBox:`0 0 15 15`,fill:`none`,"aria-hidden":`true`,children:[(0,u.jsx)(`circle`,{cx:`7.5`,cy:`7.5`,r:`6`,stroke:`currentColor`,strokeWidth:`1.2`}),(0,u.jsx)(`path`,{d:`M7.5 4v3.5l2.5 1.5`,stroke:`currentColor`,strokeWidth:`1.2`,strokeLinecap:`round`,strokeLinejoin:`round`})]})}function cs({size:e=14}){return(0,u.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M3 9l4-4 4 4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function ls({size:e=14}){return(0,u.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M3 5l4 4 4-4`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function us({value:e,min:t,max:n,onChange:r,label:i}){n-t+1;let a=()=>r(e===t?n:e-1),o=()=>r(e===n?t:e+1),s=e=>{e.preventDefault(),e.deltaY>0?o():a()},c=e=>{e.key===`ArrowUp`&&(e.preventDefault(),a()),e.key===`ArrowDown`&&(e.preventDefault(),o())},l=e===t?n:e-1,d=e===n?t:e+1;return(0,u.jsxs)(`div`,{className:`vx-timepicker__col`,role:`spinbutton`,"aria-label":i,"aria-valuenow":e,"aria-valuemin":t,"aria-valuemax":n,"aria-valuetext":is(e),tabIndex:0,onKeyDown:c,onWheel:s,children:[(0,u.jsx)(`button`,{type:`button`,className:`vx-timepicker__col-btn`,onClick:a,"aria-label":`Decrease ${i}`,tabIndex:-1,children:(0,u.jsx)(cs,{size:13})}),(0,u.jsxs)(`div`,{className:`vx-timepicker__col-items`,children:[(0,u.jsx)(`div`,{className:`vx-timepicker__col-item vx-timepicker__col-item--adjacent`,children:is(l)}),(0,u.jsx)(`div`,{className:`vx-timepicker__col-item vx-timepicker__col-item--selected`,children:is(e)}),(0,u.jsx)(`div`,{className:`vx-timepicker__col-item vx-timepicker__col-item--adjacent`,children:is(d)})]}),(0,u.jsx)(`button`,{type:`button`,className:`vx-timepicker__col-btn`,onClick:o,"aria-label":`Increase ${i}`,tabIndex:-1,children:(0,u.jsx)(ls,{size:13})})]})}function ds({value:e,defaultValue:t,onChange:n,placeholder:r=`Select time`,label:i,hint:a,error:o,disabled:s,seconds:c=!1,className:f}){let p=e!==void 0,[m,h]=(0,l.useState)(t),g=p?e:m,_=g?as(g):{h:12,m:0,s:0},[v,y]=(0,l.useState)(_.h),[b,x]=(0,l.useState)(_.m),[S,C]=(0,l.useState)(_.s),[w,T]=(0,l.useState)(!1),E=(0,l.useRef)(null),D=(0,l.useRef)(null),O=(0,l.useRef)(null),k=(0,l.useRef)(null),A=Sa(),[j,M]=(0,l.useState)(null);(0,l.useEffect)(()=>{if(e){let t=as(e);y(t.h),x(t.m),C(t.s)}},[e]),(0,l.useEffect)(()=>{if(!w||A)return;let e=e=>{var t,n;let r=(t=E.current)==null?void 0:t.contains(e.target),i=(n=O.current)==null?void 0:n.contains(e.target);!r&&!i&&T(!1)},t=e=>{e.key===`Escape`&&(e.preventDefault(),T(!1))};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e,{passive:!0}),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e),document.removeEventListener(`keydown`,t)}},[w,A]),(0,l.useEffect)(()=>{let{shouldInline:e}=Or(E.current);if(!(!w||!e))return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=``}},[w]),(0,l.useEffect)(()=>{if(!w||!j)return;let e=k.current;if(e)return e.dataset.hasOpenPortal=`1`,()=>{delete e.dataset.hasOpenPortal}},[w,j]),(0,l.useLayoutEffect)(()=>{let{dialogContent:e,shouldInline:t}=Or(E.current);if(!w||!D.current||t||A){M(null),k.current=null;return}k.current=e;let n=D.current.getBoundingClientRect(),r=window.innerHeight-n.bottom,i=n.top,a=r<220&&i>r?`up`:`down`;M(a===`down`?{top:n.bottom+4,left:n.left,direction:a}:{bottom:window.innerHeight-n.top+4,left:n.left,direction:a})},[w,A]),(0,l.useEffect)(()=>{if(!w||!j)return;let e=e=>{var t;(t=O.current)!=null&&t.contains(e.target)||T(!1)};return window.addEventListener(`scroll`,e,{capture:!0,passive:!0}),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`scroll`,e,{capture:!0}),window.removeEventListener(`resize`,e)}},[w,j]);let N=(0,l.useCallback)((e,t,r)=>{let i=os(e,t,r,c);p||h(i),n==null||n(i)},[p,c,n]),P=e=>{y(e),N(e,b,S)},F=e=>{x(e),N(v,e,S)},I=e=>{C(e),N(v,b,e)},L=g==null?w?os(v,b,S,c):void 0:g,[R,z]=(0,l.useState)(_.h),[B,V]=(0,l.useState)(_.m),[H,U]=(0,l.useState)(_.s);(0,l.useEffect)(()=>{if(w&&A){let e=g?as(g):{h:12,m:0,s:0};z(e.h),V(e.m),U(e.s)}},[w,A,g]);let ee=e=>z(e),W=e=>V(e),te=e=>U(e),ne=()=>{N(R,B,H)},G=(0,u.jsx)(u.Fragment,{children:(0,u.jsxs)(`div`,{className:`vx-timepicker__columns`,children:[(0,u.jsx)(us,{value:R,min:0,max:23,onChange:ee,label:`Hours`}),(0,u.jsx)(`span`,{className:`vx-timepicker__sep`,children:`:`}),(0,u.jsx)(us,{value:B,min:0,max:59,onChange:W,label:`Minutes`}),c&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`span`,{className:`vx-timepicker__sep`,children:`:`}),(0,u.jsx)(us,{value:H,min:0,max:59,onChange:te,label:`Seconds`})]})]})});return(0,u.jsxs)(`div`,{ref:E,className:$(`vx-timepicker`,f),children:[i?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:i}):null,(0,u.jsxs)(`button`,{ref:D,type:`button`,className:$(`vx-timepicker__trigger`,o&&`vx-timepicker__trigger--invalid`,s&&`vx-timepicker__trigger--disabled`),onClick:()=>!s&&T(e=>!e),disabled:s,"aria-haspopup":`dialog`,"aria-expanded":w,children:[(0,u.jsx)(ss,{}),(0,u.jsx)(`span`,{className:$(`vx-timepicker__value`,!L&&`vx-timepicker__value--placeholder`),children:L==null?r:L})]}),o?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:o}):null,!o&&a?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:a}):null,w&&!A&&(()=>{let e=!!j,t=j?{position:`fixed`,top:j.top,bottom:j.bottom,left:j.left,pointerEvents:`auto`}:void 0,n=(0,u.jsxs)(`div`,{ref:O,className:$(`vx-timepicker__popover`,(j==null?void 0:j.direction)===`up`&&`vx-timepicker__popover--up`,!!k.current&&`vx-timepicker__popover--in-dialog`),role:`dialog`,"aria-label":`Time picker`,style:t,children:[(0,u.jsxs)(`div`,{className:`vx-timepicker__columns`,children:[(0,u.jsx)(us,{value:v,min:0,max:23,onChange:P,label:`Hours`}),(0,u.jsx)(`span`,{className:`vx-timepicker__sep`,children:`:`}),(0,u.jsx)(us,{value:b,min:0,max:59,onChange:F,label:`Minutes`}),c&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`span`,{className:`vx-timepicker__sep`,children:`:`}),(0,u.jsx)(us,{value:S,min:0,max:59,onChange:I,label:`Seconds`})]})]}),(0,u.jsx)(`div`,{className:`vx-timepicker__footer`,children:(0,u.jsx)(`button`,{type:`button`,className:`vx-timepicker__done`,onClick:()=>{g||N(v,b,S),T(!1)},children:`Done`})})]});return e?(0,d.createPortal)(n,document.body):n})(),A&&w&&(0,u.jsx)(ja,{side:`bottom`,open:w,onOpenChange:e=>{e||T(!1)},title:i||`Select time`,showConfirm:!0,onConfirm:ne,children:G})]})}function fs({label:e,hint:t,error:n,accept:r,multiple:i=!1,maxSize:a,disabled:o,onFiles:s,className:c}){let[d,f]=(0,l.useState)(!1),[p,m]=(0,l.useState)([]),[h,g]=(0,l.useState)(),_=(0,l.useRef)(null),v=(0,l.useCallback)(e=>{if(!e)return;let t=Array.from(e);if(a&&t.filter(e=>e.size>a).length>0){g(`File too large (max ${(a/1024/1024).toFixed(1)} MB)`);return}g(void 0);let n=t.map(e=>({file:e,id:crypto.randomUUID()})),r=i?[...p,...n]:n;m(r),s==null||s(r.map(e=>e.file))},[p,a,i,s]),y=e=>{e.preventDefault(),f(!1),o||v(e.dataTransfer.files)},b=e=>{e.preventDefault(),o||f(!0)},x=e=>{let t=p.filter(t=>t.id!==e);m(t),s==null||s(t.map(e=>e.file))},S=n==null?h:n;return(0,u.jsxs)(`div`,{className:$(`vx-file-upload`,c),children:[e?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:e}):null,(0,u.jsxs)(`div`,{className:$(`vx-file-upload__zone`,d&&`vx-file-upload__zone--dragging`,o&&`vx-file-upload__zone--disabled`,S&&`vx-file-upload__zone--invalid`),onDrop:y,onDragOver:b,onDragLeave:()=>f(!1),onClick:()=>{var e;return!o&&((e=_.current)==null?void 0:e.click())},role:`button`,tabIndex:o?-1:0,onKeyDown:e=>{var t;return e.key===`Enter`&&!o&&((t=_.current)==null?void 0:t.click())},"aria-label":`Upload files, click or drag and drop`,children:[(0,u.jsx)(Nn,{size:24,className:`vx-file-upload__icon`}),(0,u.jsxs)(`p`,{className:`vx-file-upload__text`,children:[(0,u.jsx)(`span`,{className:`vx-file-upload__link`,children:`Click to upload`}),` or drag and drop`]}),t?(0,u.jsx)(`p`,{className:`vx-file-upload__hint`,children:t}):null,(0,u.jsx)(`input`,{ref:_,type:`file`,accept:r,multiple:i,disabled:o,className:`vx-file-upload__input`,onChange:e=>v(e.target.files),"aria-hidden":`true`,tabIndex:-1})]}),S?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:S}):null,p.length>0&&(0,u.jsx)(`ul`,{className:`vx-file-upload__list`,children:p.map(({id:e,file:t})=>(0,u.jsxs)(`li`,{className:`vx-file-upload__file`,children:[(0,u.jsx)(Tn,{size:14,className:`vx-file-upload__file-icon`}),(0,u.jsx)(`span`,{className:`vx-file-upload__file-name`,children:t.name}),(0,u.jsxs)(`span`,{className:`vx-file-upload__file-size`,children:[(t.size/1024).toFixed(0),` KB`]}),(0,u.jsx)(`button`,{type:`button`,className:`vx-file-upload__remove`,onClick:()=>x(e),"aria-label":`Remove ${t.name}`,children:(0,u.jsx)(Q,{size:14})})]},e))})]})}var ps=[`icon`,`destructive`,`className`,`children`];function ms({open:e,onClose:t,title:n,description:r,children:i,className:a}){let o=(0,l.useRef)(null),s=(0,l.useRef)(0),[c,d]=(0,l.useState)(!1),[f,p]=(0,l.useState)(0),m=(0,l.useRef)(0);return(0,l.useEffect)(()=>{e||(p(0),m.current=0)},[e]),(0,l.useEffect)(()=>{if(!e)return;let n=e=>{e.key===`Escape`&&t()};return document.addEventListener(`keydown`,n),()=>document.removeEventListener(`keydown`,n)},[e,t]),(0,l.useEffect)(()=>(e?document.body.style.overflow=`hidden`:document.body.style.overflow=``,()=>{document.body.style.overflow=``}),[e]),e?(0,u.jsx)(`div`,{className:`vxm-actionsheet__overlay`,onClick:t,role:`presentation`,"aria-hidden":`true`,children:(0,u.jsxs)(`div`,{ref:o,className:$(`vxm-actionsheet`,a),style:{transform:`translateY(${f}px)`,transition:c?`none`:`transform 280ms cubic-bezier(0.32, 0.72, 0, 1)`},onClick:e=>e.stopPropagation(),onTouchStart:e=>{s.current=e.touches[0].clientY,m.current=0,d(!0)},onTouchMove:e=>{let t=e.touches[0].clientY-s.current;t<0||(m.current=t,p(t))},onTouchEnd:()=>{d(!1);let e=o.current;if(!e)return;let n=e.offsetHeight*.32;m.current>n?t():p(0)},role:`dialog`,"aria-modal":!0,"aria-label":n==null?`Action sheet`:n,children:[(0,u.jsx)(`div`,{className:`vxm-actionsheet__handle`,"aria-hidden":`true`}),(n||r)&&(0,u.jsxs)(`div`,{className:`vxm-actionsheet__header`,children:[n&&(0,u.jsx)(`h3`,{className:`vxm-actionsheet__title`,children:n}),r&&(0,u.jsx)(`p`,{className:`vxm-actionsheet__description`,children:r})]}),(0,u.jsx)(`div`,{className:`vxm-actionsheet__body`,children:i})]})}):null}function hs(e){let{icon:t,destructive:n,className:r,children:i}=e,a=U(e,ps);return(0,u.jsxs)(`button`,D(D({type:`button`,className:$(`vxm-actionsheet-item`,n&&`vxm-actionsheet-item--destructive`,r)},a),{},{children:[t&&(0,u.jsx)(`span`,{className:`vxm-actionsheet-item__icon`,children:t}),i]}))}function gs({open:e,onClose:t,width:n=280,header:r,footer:i,children:a,className:o}){let s=(0,l.useRef)(null),c=(0,l.useRef)(0),d=(0,l.useRef)(0),[f,p]=(0,l.useState)(!1),[m,h]=(0,l.useState)(0);return(0,l.useEffect)(()=>{e||(h(0),d.current=0)},[e]),(0,l.useEffect)(()=>{if(!e)return;let n=e=>{e.key===`Escape`&&t()};return document.addEventListener(`keydown`,n),()=>document.removeEventListener(`keydown`,n)},[e,t]),(0,l.useEffect)(()=>(document.body.style.overflow=e?`hidden`:``,()=>{document.body.style.overflow=``}),[e]),e?(0,u.jsxs)(`div`,{className:`vxm-drawer__overlay`,style:{"--vxm-overlay-opacity":.52*Math.max(0,1+m/n)},children:[(0,u.jsx)(`div`,{className:`vxm-drawer__scrim`,onClick:t,"aria-hidden":`true`}),(0,u.jsxs)(`div`,{ref:s,className:$(`vxm-drawer`,o),style:{width:n,transform:`translateX(${m}px)`,transition:f?`none`:`transform 280ms cubic-bezier(0.32, 0.72, 0, 1)`},onTouchStart:e=>{c.current=e.touches[0].clientX,d.current=0,p(!0)},onTouchMove:e=>{let t=e.touches[0].clientX-c.current;t>0||(d.current=t,h(t))},onTouchEnd:()=>{p(!1),Math.abs(d.current)>n*.3?t():h(0)},role:`dialog`,"aria-modal":!0,"aria-label":`Navigation drawer`,children:[r&&(0,u.jsx)(`div`,{className:`vxm-drawer__header`,children:r}),(0,u.jsx)(`div`,{className:`vxm-drawer__body`,children:a}),i&&(0,u.jsx)(`div`,{className:`vxm-drawer__footer`,children:i})]})]}):null}function _s({icon:e,label:t,badge:n,active:r,onClick:i}){return(0,u.jsxs)(`button`,{type:`button`,className:$(`vxm-drawer-item`,r&&`vxm-drawer-item--active`),onClick:i,"aria-current":r?`page`:void 0,children:[e&&(0,u.jsx)(`span`,{className:`vxm-drawer-item__icon`,children:e}),(0,u.jsx)(`span`,{className:`vxm-drawer-item__label`,children:t}),n!=null&&(0,u.jsx)(`span`,{className:`vxm-drawer-item__badge`,children:n})]})}function vs({title:e,collapsible:t=!1,defaultOpen:n=!0,children:r}){let[i,a]=(0,l.useState)(n);return(0,u.jsxs)(`div`,{className:$(`vxm-drawer-section`,t&&`vxm-drawer-section--collapsible`),children:[e&&(t?(0,u.jsxs)(`button`,{type:`button`,className:`vxm-drawer-section__header`,onClick:()=>a(e=>!e),"aria-expanded":i,children:[(0,u.jsx)(`span`,{className:`vxm-drawer-section__title`,children:e}),(0,u.jsx)(yn,{size:14,className:$(`vxm-drawer-section__chevron`,i&&`vxm-drawer-section__chevron--open`)})]}):(0,u.jsx)(`div`,{className:`vxm-drawer-section__title`,children:e})),(0,u.jsx)(`div`,{className:$(`vxm-drawer-section__items-wrap`,!i&&`vxm-drawer-section__items-wrap--closed`),children:(0,u.jsx)(`div`,{className:`vxm-drawer-section__items`,children:r})})]})}var ys=[`pressed`,`defaultPressed`,`onPressedChange`,`size`,`className`,`children`,`onClick`];function bs(e){let{pressed:t,defaultPressed:n=!1,onPressedChange:r,size:i=`md`,className:a,children:o,onClick:s}=e,c=U(e,ys),[d,f]=(0,l.useState)(n),p=t!==void 0,m=p?t:d;return(0,u.jsx)(`button`,D(D({type:`button`,"aria-pressed":m,className:$(`vx-toggle`,`vx-toggle--${i}`,m&&`vx-toggle--on`,a),onClick:e=>{p||f(e=>!e),r==null||r(!m),s==null||s(e)}},c),{},{children:o}))}function xs({items:e,value:t,defaultValue:n,onValueChange:r,type:i=`single`,size:a=`md`,className:o}){let[s,c]=(0,l.useState)(n==null?i===`multiple`?[]:``:n),d=t!==void 0,f=d?t:s,p=e=>Array.isArray(f)?f.includes(e):f===e,m=e=>{let t;if(i===`multiple`){let n=Array.isArray(f)?f:[];t=n.includes(e)?n.filter(t=>t!==e):[...n,e]}else t=f===e?``:e;d||c(t),r==null||r(t)};return(0,u.jsx)(`div`,{className:$(`vx-toggle-group`,o),role:`group`,children:e.map(e=>(0,u.jsx)(`button`,{type:`button`,"aria-pressed":p(e.value),disabled:e.disabled,className:$(`vx-toggle`,`vx-toggle--${a}`,p(e.value)&&`vx-toggle--on`,`vx-toggle-group__item`),onClick:()=>!e.disabled&&m(e.value),children:e.label},e.value))})}function Ss({groups:e,items:t,children:n,className:r}){let[i,a]=(0,l.useState)(null),o=(0,l.useRef)(null),s=e==null?t?[{items:t}]:[]:e;(0,l.useEffect)(()=>{if(!i)return;let e=e=>{o.current&&!o.current.contains(e.target)&&a(null)},t=e=>{e.key===`Escape`&&a(null)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[i]);let c=(0,l.useCallback)(e=>{e.preventDefault(),a({x:e.clientX,y:e.clientY})},[]);return(0,u.jsxs)(`div`,{className:$(`vx-context-menu-wrap`,r),onContextMenu:c,children:[n,i&&(0,u.jsx)(`div`,{ref:o,className:`vx-dropdown__menu vx-context-menu`,style:{position:`fixed`,top:i.y,left:i.x},role:`menu`,children:s.map((e,t)=>(0,u.jsxs)(`div`,{className:`vx-dropdown__group`,children:[t>0&&(0,u.jsx)(`div`,{className:`vx-dropdown__separator`}),e.label&&(0,u.jsx)(`div`,{className:`vx-dropdown__group-label`,children:e.label}),e.items.map((e,t)=>(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,disabled:e.disabled,className:$(`vx-dropdown__item`,e.danger&&`vx-dropdown__item--danger`,e.disabled&&`vx-dropdown__item--disabled`),onClick:()=>{var t;(t=e.onClick)==null||t.call(e),a(null)},children:[e.icon&&(0,u.jsx)(`span`,{className:`vx-dropdown__item-icon`,children:e.icon}),(0,u.jsx)(`span`,{className:`vx-dropdown__item-label`,children:e.label}),e.shortcut&&(0,u.jsx)(`span`,{className:`vx-dropdown__shortcut`,children:e.shortcut})]},t))]},t))})]})}function Cs({content:e,placement:t=`bottom`,delay:n=400,children:r,className:i}){let[a,o]=(0,l.useState)(!1),s=(0,l.useRef)(null),c=(0,l.useCallback)(()=>{s.current=setTimeout(()=>o(!0),n)},[n]),d=(0,l.useCallback)(()=>{s.current&&clearTimeout(s.current),o(!1)},[]);return(0,u.jsxs)(`span`,{className:$(`vx-hovercard-wrap`,i),onMouseEnter:c,onMouseLeave:d,onFocus:c,onBlur:d,children:[r,a&&(0,u.jsx)(`div`,{className:$(`vx-hovercard`,`vx-hovercard--${t}`),children:e})]})}function ws({menus:e,className:t}){let[n,r]=(0,l.useState)(null),i=(0,l.useRef)(null);return(0,l.useEffect)(()=>{if(n===null)return;let e=e=>{i.current&&!i.current.contains(e.target)&&r(null)},t=e=>{e.key===`Escape`&&r(null)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[n]),(0,u.jsx)(`div`,{ref:i,className:$(`vx-menubar`,t),role:`menubar`,children:e.map((e,t)=>{var i;let a=(i=e.groups)==null?e.items?[{items:e.items}]:[]:i,o=n===t;return(0,u.jsxs)(`div`,{className:`vx-menubar__item-wrap`,children:[(0,u.jsx)(`button`,{type:`button`,role:`menuitem`,className:$(`vx-menubar__trigger`,o&&`vx-menubar__trigger--open`),disabled:e.disabled,"aria-haspopup":`menu`,"aria-expanded":o,onClick:()=>r(o?null:t),onMouseEnter:()=>{n!==null&&r(t)},children:e.label}),o&&(0,u.jsx)(`div`,{className:`vx-dropdown__menu`,role:`menu`,children:a.map((e,t)=>(0,u.jsxs)(`div`,{className:`vx-dropdown__group`,children:[t>0&&(0,u.jsx)(`div`,{className:`vx-dropdown__separator`}),e.label&&(0,u.jsx)(`div`,{className:`vx-dropdown__group-label`,children:e.label}),e.items.map((e,t)=>(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,disabled:e.disabled,className:$(`vx-dropdown__item`,e.danger&&`vx-dropdown__item--danger`,e.disabled&&`vx-dropdown__item--disabled`),onClick:()=>{var t;(t=e.onClick)==null||t.call(e),r(null)},children:[e.icon&&(0,u.jsx)(`span`,{className:`vx-dropdown__item-icon`,children:e.icon}),(0,u.jsx)(`span`,{className:`vx-dropdown__item-label`,children:e.label}),e.shortcut&&(0,u.jsx)(`span`,{className:`vx-dropdown__shortcut`,children:e.shortcut})]},t))]},t))})]},t)})})}function Ts({items:e,className:t}){let[n,r]=(0,l.useState)(null),i=(0,l.useRef)(null);return(0,l.useEffect)(()=>{if(n===null)return;let e=e=>{i.current&&!i.current.contains(e.target)&&r(null)},t=e=>{e.key===`Escape`&&r(null)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[n]),(0,u.jsx)(`nav`,{ref:i,className:$(`vx-nav-menu`,t),"aria-label":`Main navigation`,children:(0,u.jsx)(`ul`,{className:`vx-nav-menu__list`,role:`list`,children:e.map((e,t)=>{var i;let a=e.items&&e.items.length>0,o=n===t;return(0,u.jsxs)(`li`,{className:`vx-nav-menu__item-wrap`,children:[a?(0,u.jsxs)(`button`,{type:`button`,className:$(`vx-nav-menu__link`,e.active&&`vx-nav-menu__link--active`,o&&`vx-nav-menu__link--open`),"aria-haspopup":`true`,"aria-expanded":o,onClick:()=>r(o?null:t),children:[e.label,(0,u.jsx)(yn,{size:14,className:$(`vx-nav-menu__chevron`,o&&`vx-nav-menu__chevron--open`)})]}):(0,u.jsx)(`a`,{href:(i=e.href)==null?`#`:i,className:$(`vx-nav-menu__link`,e.active&&`vx-nav-menu__link--active`),onClick:e.onClick,children:e.label}),a&&o&&(0,u.jsx)(`div`,{className:`vx-nav-menu__dropdown`,children:e.items.map((e,t)=>{var n;return(0,u.jsxs)(`a`,{href:(n=e.href)==null?`#`:n,className:`vx-nav-menu__sub-item`,onClick:()=>{var t;(t=e.onClick)==null||t.call(e),r(null)},children:[e.icon&&(0,u.jsx)(`span`,{className:`vx-nav-menu__sub-icon`,children:e.icon}),(0,u.jsxs)(`span`,{children:[(0,u.jsx)(`span`,{className:`vx-nav-menu__sub-label`,children:e.label}),e.description&&(0,u.jsx)(`span`,{className:`vx-nav-menu__sub-desc`,children:e.description})]})]},t)})})]},t)})})})}function Es(e,t,n){return e.status?e.status:t<n?`completed`:t===n?`active`:`pending`}function Ds({steps:e,currentStep:t=0,orientation:n=`horizontal`,className:r}){let i=e[Math.min(Math.max(t,0),e.length-1)];return(0,u.jsxs)(`div`,{className:$(`vx-stepper`,`vx-stepper--${n}`,r),children:[(0,u.jsx)(`ol`,{className:`vx-stepper__track`,"aria-label":`Steps`,children:e.map((n,r)=>{let i=Es(n,r,t),a=r===e.length-1;return(0,u.jsxs)(l.Fragment,{children:[(0,u.jsx)(`li`,{className:$(`vx-stepper__step`,`vx-stepper__step--${i}`),"aria-current":i===`active`?`step`:void 0,children:(0,u.jsx)(`div`,{className:`vx-stepper__indicator`,"aria-hidden":`true`,children:i===`completed`?(0,u.jsx)(_n,{size:14}):(0,u.jsx)(`span`,{children:r+1})})}),!a&&(0,u.jsx)(`div`,{className:`vx-stepper__connector`,"data-prev-status":i,"aria-hidden":`true`})]},r)})}),(0,u.jsx)(`div`,{className:`vx-stepper__active-panel`,"aria-live":`polite`,children:i&&(0,u.jsxs)(`div`,{className:`vx-stepper__content`,children:[(0,u.jsx)(`span`,{className:`vx-stepper__label`,children:i.label}),i.description&&(0,u.jsx)(`span`,{className:`vx-stepper__description`,children:i.description})]})})]})}function Os({items:e,className:t}){return(0,u.jsx)(`ol`,{className:$(`vx-timeline`,t),"aria-label":`Timeline`,children:e.map((e,t)=>{var n;return(0,u.jsxs)(`li`,{className:$(`vx-timeline__item`,e.status&&`vx-timeline__item--${e.status}`),children:[(0,u.jsx)(`div`,{className:`vx-timeline__dot`,"aria-hidden":`true`,children:(n=e.icon)==null?null:n}),(0,u.jsxs)(`div`,{className:`vx-timeline__body`,children:[(0,u.jsxs)(`div`,{className:`vx-timeline__header`,children:[(0,u.jsx)(`span`,{className:`vx-timeline__title`,children:e.title}),e.time&&(0,u.jsx)(`span`,{className:`vx-timeline__time`,children:e.time})]}),e.description&&(0,u.jsx)(`p`,{className:`vx-timeline__description`,children:e.description})]})]},t)})})}function ks({icon:e,title:t,description:n,action:r,className:i}){return(0,u.jsxs)(`div`,{className:$(`vx-empty-state`,i),role:`status`,"aria-live":`polite`,children:[e&&(0,u.jsx)(`div`,{className:`vx-empty-state__icon`,"aria-hidden":`true`,children:e}),(0,u.jsx)(`p`,{className:`vx-empty-state__title`,children:t}),n&&(0,u.jsx)(`p`,{className:`vx-empty-state__description`,children:n}),r&&(0,u.jsx)(`div`,{className:`vx-empty-state__action`,children:r})]})}function As({items:e,defaultIndex:t=0,index:n,onIndexChange:r,autoPlay:i=!1,interval:a=3e3,loop:o=!0,showDots:s=!0,showArrows:c=!0,className:d}){let f=n!==void 0,[p,m]=(0,l.useState)(t),h=f?n:p,g=e.length,_=(0,l.useRef)(null),v=(0,l.useCallback)(e=>{let t=e;t=o?(e%g+g)%g:Math.max(0,Math.min(e,g-1)),f||m(t),r==null||r(t)},[f,o,r,g]);return(0,l.useEffect)(()=>{if(i)return _.current=setInterval(()=>v(h+1),a),()=>{_.current&&clearInterval(_.current)}},[i,h,v,a]),g===0?null:(0,u.jsxs)(`div`,{className:$(`vx-carousel`,d),role:`region`,"aria-roledescription":`carousel`,"aria-label":`Carousel`,children:[(0,u.jsx)(`div`,{className:`vx-carousel__track-wrap`,children:(0,u.jsx)(`div`,{className:`vx-carousel__track`,style:{transform:`translateX(-${h*100}%)`},children:e.map((e,t)=>(0,u.jsx)(`div`,{className:`vx-carousel__slide`,role:`group`,"aria-roledescription":`slide`,"aria-label":`Slide ${t+1} of ${g}`,"aria-hidden":t!==h,children:e},t))})}),c&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`button`,{type:`button`,className:`vx-carousel__arrow vx-carousel__arrow--prev`,onClick:()=>v(h-1),disabled:!o&&h===0,"aria-label":`Previous slide`,children:(0,u.jsx)(vn,{size:20})}),(0,u.jsx)(`button`,{type:`button`,className:`vx-carousel__arrow vx-carousel__arrow--next`,onClick:()=>v(h+1),disabled:!o&&h===g-1,"aria-label":`Next slide`,children:(0,u.jsx)(bn,{size:20})})]}),s&&(0,u.jsx)(`div`,{className:`vx-carousel__dots`,role:`tablist`,"aria-label":`Slides`,children:e.map((e,t)=>(0,u.jsx)(`button`,{type:`button`,role:`tab`,className:$(`vx-carousel__dot`,t===h&&`vx-carousel__dot--active`),onClick:()=>v(t),"aria-selected":t===h,"aria-label":`Go to slide ${t+1}`},t))})]})}function js({filled:e,half:t}){return(0,u.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 20 20`,fill:`none`,"aria-hidden":`true`,children:t?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`defs`,{children:(0,u.jsxs)(`linearGradient`,{id:`vx-star-half`,children:[(0,u.jsx)(`stop`,{offset:`50%`,stopColor:`currentColor`}),(0,u.jsx)(`stop`,{offset:`50%`,stopColor:`none`,stopOpacity:`0`})]})}),(0,u.jsx)(`path`,{d:`M10 1.5l2.39 4.84 5.34.78-3.87 3.77.91 5.32L10 13.77l-4.77 2.44.91-5.32L2.27 7.12l5.34-.78L10 1.5z`,fill:`url(#vx-star-half)`,stroke:`currentColor`,strokeWidth:`1.2`,strokeLinejoin:`round`})]}):(0,u.jsx)(`path`,{d:`M10 1.5l2.39 4.84 5.34.78-3.87 3.77.91 5.32L10 13.77l-4.77 2.44.91-5.32L2.27 7.12l5.34-.78L10 1.5z`,fill:e?`currentColor`:`none`,stroke:`currentColor`,strokeWidth:`1.2`,strokeLinejoin:`round`})})}function Ms({value:e,defaultValue:t=0,onChange:n,max:r=5,allowHalf:i=!1,disabled:a,readOnly:o,label:s,className:c,size:d=`md`}){let f=e!==void 0,[p,m]=(0,l.useState)(t),h=f?e:p,[g,_]=(0,l.useState)(null),v=g==null?h:g,y=(e,t)=>{if(!i)return e;let n=t.currentTarget.getBoundingClientRect();return t.clientX-n.left<n.width/2?e-.5:e},b=(e,t)=>{if(a||o)return;let r=y(e,t);f||m(r),n==null||n(r)},x=(e,t)=>{a||o||_(y(e,t))};return(0,u.jsx)(`div`,{className:$(`vx-rating`,`vx-rating--${d}`,a&&`vx-rating--disabled`,c),role:`group`,"aria-label":s==null?`Rating`:s,children:Array.from({length:r},(e,t)=>{let n=t+1,r=v>=n,i=!r&&v>=n-.5;return(0,u.jsx)(`button`,{type:`button`,className:$(`vx-rating__star`,(r||i)&&`vx-rating__star--active`),onClick:e=>b(n,e),onMouseMove:e=>x(n,e),onMouseLeave:()=>_(null),disabled:a,"aria-label":`${n} star${n===1?``:`s`}`,"aria-pressed":h>=n,tabIndex:o||a?-1:0,children:(0,u.jsx)(js,{filled:r,half:i})},t)})})}function Ns({node:e,depth:t,selected:n,expanded:r,onSelect:i,onToggle:a}){let o=e.children&&e.children.length>0,s=r.has(e.id),c=n===e.id;return(0,u.jsxs)(`li`,{role:`treeitem`,"aria-selected":c,"aria-expanded":o?s:void 0,children:[(0,u.jsxs)(`div`,{className:$(`vx-tree__node`,c&&`vx-tree__node--selected`,e.disabled&&`vx-tree__node--disabled`),style:{paddingLeft:`${8+t*20}px`},onClick:()=>{e.disabled||(i(e.id,e),o&&a(e.id))},onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),e.disabled||i(e.id,e)),t.key===`ArrowRight`&&o&&!s&&(t.preventDefault(),a(e.id)),t.key===`ArrowLeft`&&s&&(t.preventDefault(),a(e.id))},tabIndex:e.disabled?-1:0,role:`button`,"aria-label":typeof e.label==`string`?e.label:void 0,children:[(0,u.jsx)(`span`,{className:$(`vx-tree__expand`,!o&&`vx-tree__expand--hidden`),children:(0,u.jsx)(bn,{size:14,className:$(`vx-tree__chevron`,s&&`vx-tree__chevron--open`)})}),e.icon&&(0,u.jsx)(`span`,{className:`vx-tree__icon`,children:e.icon}),(0,u.jsx)(`span`,{className:`vx-tree__label`,children:e.label})]}),o&&s&&(0,u.jsx)(`ul`,{role:`group`,className:`vx-tree__children`,children:e.children.map(e=>(0,u.jsx)(Ns,{node:e,depth:t+1,selected:n,expanded:r,onSelect:i,onToggle:a},e.id))})]})}function Ps({nodes:e,selected:t,defaultSelected:n,onSelect:r,defaultExpanded:i=[],expanded:a,onExpandedChange:o,className:s}){let c=t!==void 0,[d,f]=(0,l.useState)(n),p=c?t:d,m=a!==void 0,[h,g]=(0,l.useState)(new Set(i)),_=m?new Set(a):h,v=(0,l.useCallback)((e,t)=>{c||f(e),r==null||r(e,t)},[c,r]),y=(0,l.useCallback)(e=>{let t=new Set(_);t.has(e)?t.delete(e):t.add(e),m||g(t),o==null||o([...t])},[_,m,o]);return(0,u.jsx)(`ul`,{className:$(`vx-tree`,s),role:`tree`,"aria-multiselectable":`false`,children:e.map(e=>(0,u.jsx)(Ns,{node:e,depth:0,selected:p,expanded:_,onSelect:v,onToggle:y},e.id))})}var Fs=[`value`,`defaultValue`,`onChange`,`label`,`hint`,`error`,`placeholder`,`confirmKeys`,`maxTags`,`validate`,`disabled`,`className`];function Is(e){let{value:t,defaultValue:n=[],onChange:r,label:i,hint:a,error:o,placeholder:s=`Add tag...`,confirmKeys:c=[`Enter`,`,`],maxTags:d,validate:f,disabled:p,className:m}=e,h=U(e,Fs),g=t!==void 0,[_,v]=(0,l.useState)(n),y=g?t:_,[b,x]=(0,l.useState)(``),[S,C]=(0,l.useState)(),w=(0,l.useRef)(null),T=e=>{g||v(e),r==null||r(e)},E=e=>{let t=e.trim();if(t){if(y.includes(t)){C(`Tag already exists`);return}if(d&&y.length>=d){C(`Max ${d} tags`);return}if(f){let e=f(t);if(e===!1){C(`Invalid tag`);return}if(typeof e==`string`){C(e);return}}C(void 0),T([...y,t]),x(``)}},O=e=>{T(y.filter((t,n)=>n!==e))},k=e=>{c.includes(e.key)?(e.preventDefault(),E(b)):e.key===`Backspace`&&!b&&y.length>0&&O(y.length-1)},A=o==null?S:o;return(0,u.jsxs)(`div`,{className:$(`vx-tag-input`,m),children:[i?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:i}):null,(0,u.jsxs)(`div`,{className:$(`vx-tag-input__wrap`,A&&`vx-tag-input__wrap--invalid`,p&&`vx-tag-input__wrap--disabled`),onClick:()=>{var e;return(e=w.current)==null?void 0:e.focus()},children:[y.map((e,t)=>(0,u.jsxs)(`span`,{className:`vx-tag-input__tag`,children:[e,!p&&(0,u.jsx)(`button`,{type:`button`,className:`vx-tag-input__remove`,onClick:e=>{e.stopPropagation(),O(t)},"aria-label":`Remove tag ${e}`,children:(0,u.jsx)(Q,{size:11})})]},t)),(0,u.jsx)(`input`,D({ref:w,className:`vx-tag-input__input`,value:b,placeholder:y.length===0?s:``,disabled:p,onKeyDown:k,onChange:e=>{x(e.target.value),C(void 0)},onBlur:()=>{b.trim()&&E(b)},"aria-label":i==null?`Tag input`:i},h))]}),A?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:A}):null,!A&&a?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:a}):null]})}function Ls(e){let t=parseInt(e.slice(1,3),16)/255,n=parseInt(e.slice(3,5),16)/255,r=parseInt(e.slice(5,7),16)/255,i=Math.max(t,n,r),a=Math.min(t,n,r),o=(i+a)/2,s=0,c=0;if(i!==a){let e=i-a;switch(c=e/(o>.5?2-i-a:i+a),i){case t:s=((n-r)/e+(n<r?6:0))/6;break;case n:s=((r-t)/e+2)/6;break;case r:s=((t-n)/e+4)/6;break}}return[Math.round(s*360),Math.round(c*100),Math.round(o*100)]}function Rs(e,t,n){let r=e/360,i=t/100,a=n/100,o=(e,t,n)=>{let r=n;return r<0&&(r+=1),r>1&&--r,r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e},s,c,l;if(i===0)s=c=l=a;else{let e=a<.5?a*(1+i):a+i-a*i,t=2*a-e;s=o(t,e,r+1/3),c=o(t,e,r),l=o(t,e,r-1/3)}let u=e=>Math.round(e*255).toString(16).padStart(2,`0`);return`#${u(s)}${u(c)}${u(l)}`}function zs(e){return/^#[0-9a-f]{6}$/i.test(e)}var Bs=[`#ef4444`,`#f97316`,`#eab308`,`#22c55e`,`#06b6d4`,`#3b82f6`,`#8b5cf6`,`#ec4899`,`#64748b`,`#0f172a`,`#ffffff`,`#f8fafc`];function Vs({value:e,defaultValue:t=`#3b82f6`,onChange:n,label:r,hint:i,error:a,disabled:o,presets:s=Bs,showPresets:c=!0,className:d}){let f=e!==void 0,[p,m]=(0,l.useState)(t),h=f?e:p,[g,_]=(0,l.useState)(h),[v,y]=(0,l.useState)(!1),b=(0,l.useRef)(null),x=(0,l.useCallback)(()=>typeof window>`u`?!1:window.innerWidth<=1e3&&window.innerHeight>window.innerWidth,[]),[S,C,w]=zs(h)?Ls(h):[0,0,50],T=(0,l.useCallback)(e=>{f||m(e),_(e),n==null||n(e)},[f,n]),E=e=>{let t=e.startsWith(`#`)?e:`#${e}`;_(t),zs(t)&&T(t)},D=(0,u.jsxs)(`div`,{className:$(`vx-colorpicker__panel`),role:`dialog`,"aria-label":`Color picker`,children:[(0,u.jsx)(`div`,{className:`vx-colorpicker__section-label`,children:`Hue`}),(0,u.jsx)(`input`,{type:`range`,className:`vx-colorpicker__hue-slider`,min:`0`,max:`360`,value:S,onChange:e=>T(Rs(Number(e.target.value),C,w)),"aria-label":`Hue`}),(0,u.jsx)(`div`,{className:`vx-colorpicker__section-label`,children:`Saturation`}),(0,u.jsx)(`input`,{type:`range`,className:`vx-colorpicker__sat-slider`,min:`0`,max:`100`,value:C,style:{"--vx-cp-hue":S},onChange:e=>T(Rs(S,Number(e.target.value),w)),"aria-label":`Saturation`}),(0,u.jsx)(`div`,{className:`vx-colorpicker__section-label`,children:`Lightness`}),(0,u.jsx)(`input`,{type:`range`,className:`vx-colorpicker__lit-slider`,min:`0`,max:`100`,value:w,style:{"--vx-cp-hue":S,"--vx-cp-sat":`${C}%`},onChange:e=>T(Rs(S,C,Number(e.target.value))),"aria-label":`Lightness`}),c&&(0,u.jsx)(`div`,{className:`vx-colorpicker__presets`,children:s.map(e=>(0,u.jsx)(`button`,{type:`button`,className:$(`vx-colorpicker__preset`,h.toLowerCase()===e.toLowerCase()&&`vx-colorpicker__preset--active`),style:{background:e},onClick:()=>T(e),"aria-label":e},e))}),(0,u.jsx)(`button`,{type:`button`,className:`vx-colorpicker__close`,onClick:()=>y(!1),children:`Done`})]}),O=(0,u.jsxs)(`div`,{className:`vxm-colorpicker__sheet`,children:[(0,u.jsx)(`div`,{className:`vx-colorpicker__section-label`,children:`Hue`}),(0,u.jsx)(`input`,{type:`range`,className:`vx-colorpicker__hue-slider`,min:`0`,max:`360`,value:S,onChange:e=>T(Rs(Number(e.target.value),C,w)),"aria-label":`Hue`}),(0,u.jsx)(`div`,{className:`vx-colorpicker__section-label`,children:`Saturation`}),(0,u.jsx)(`input`,{type:`range`,className:`vx-colorpicker__sat-slider`,min:`0`,max:`100`,value:C,style:{"--vx-cp-hue":S},onChange:e=>T(Rs(S,Number(e.target.value),w)),"aria-label":`Saturation`}),(0,u.jsx)(`div`,{className:`vx-colorpicker__section-label`,children:`Lightness`}),(0,u.jsx)(`input`,{type:`range`,className:`vx-colorpicker__lit-slider`,min:`0`,max:`100`,value:w,style:{"--vx-cp-hue":S,"--vx-cp-sat":`${C}%`},onChange:e=>T(Rs(S,C,Number(e.target.value))),"aria-label":`Lightness`}),c&&(0,u.jsx)(`div`,{className:`vx-colorpicker__presets`,children:s.map(e=>(0,u.jsx)(`button`,{type:`button`,className:$(`vx-colorpicker__preset`,h.toLowerCase()===e.toLowerCase()&&`vx-colorpicker__preset--active`),style:{background:e},onClick:()=>T(e),"aria-label":e},e))})]});return(0,u.jsxs)(`div`,{ref:b,className:$(`vx-colorpicker`,d),children:[r?(0,u.jsx)(`span`,{className:`vx-field-group__label`,children:r}):null,(0,u.jsxs)(`div`,{className:`vx-colorpicker__row`,children:[(0,u.jsx)(`button`,{type:`button`,className:$(`vx-colorpicker__swatch-btn`,o&&`vx-colorpicker__swatch-btn--disabled`),style:{"--vx-cp-color":h},onClick:()=>!o&&y(e=>!e),disabled:o,"aria-label":`Current color: ${h}. Click to open color picker.`,"aria-haspopup":`dialog`,"aria-expanded":v}),(0,u.jsx)(`input`,{type:`text`,className:`vx-colorpicker__hex-input`,value:g,onChange:e=>E(e.target.value),disabled:o,"aria-label":`Hex color value`,maxLength:7})]}),a?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:a}):null,!a&&i?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:i}):null,!x()&&v&&D,x()&&(0,u.jsx)(ja,{side:`bottom`,open:v,onOpenChange:e=>{e||y(!1)},title:`颜色选择器`,children:O})]})}var Hs=(0,l.createContext)(null);function Us(e){let t=(0,l.useContext)(Hs);if(!t)throw Error(`<${e}> must be rendered inside <ResizablePanelGroup>.`);return t}function Ws({direction:e=`horizontal`,children:t,className:n,style:r,disabled:i=!1}){let a=(0,l.useMemo)(()=>({direction:e,disabled:i}),[e,i]);return(0,u.jsx)(Hs.Provider,{value:a,children:(0,u.jsx)(`div`,{className:$(`vx-resizable-group`,`vx-resizable-group--${e}`,i&&`vx-resizable-group--disabled`,n),style:r,"data-direction":e,children:t})})}function Gs({children:e,defaultSize:t=50,minSize:n=10,maxSize:r=90,className:i,style:a}){let{direction:o}=Us(`ResizablePanel`),s=`${Math.min(Math.max(t,0),100)}%`,c=o===`horizontal`;return(0,u.jsx)(`div`,{className:$(`vx-resizable-panel`,i),style:D({flexBasis:s,flexGrow:0,flexShrink:1,width:c?s:`100%`,height:c?`100%`:s},a),"data-min":n,"data-max":r,"data-size":t,children:e})}function Ks(e,t){if(`touches`in e){var n,r;let i=(n=e.touches[0])==null?(r=e.changedTouches)==null?void 0:r[0]:n;return t?i.clientX:i.clientY}return t?e.clientX:e.clientY}function qs({direction:e,ariaLabel:t,className:n}){let{direction:r,disabled:i}=Us(`ResizableHandle`),a=r===`horizontal`,o=(0,l.useRef)(!1),s=(0,l.useRef)(0),c=(0,l.useRef)(0),d=(0,l.useRef)(0),f=(0,l.useRef)(0),p=(0,l.useRef)(null),[m,h]=(0,l.useState)(!1),[g,_]=(0,l.useState)(null),v=(0,l.useCallback)(()=>{var e,t,n,r;let i=p.current;if(!i)return null;let o=i.previousElementSibling,s=i.nextElementSibling;if(!o||!s)return null;let c=i.parentElement;if(!c)return null;let l=a?c.getBoundingClientRect().width:c.getBoundingClientRect().height,u=a?o.getBoundingClientRect().width:o.getBoundingClientRect().height,d=a?s.getBoundingClientRect().width:s.getBoundingClientRect().height,f=Number((e=o.dataset.min)==null?10:e),m=Number((t=o.dataset.max)==null?90:t),h=Number((n=s.dataset.min)==null?10:n),g=Number((r=s.dataset.max)==null?90:r);return{handle:i,prev:o,next:s,parent:c,parentSize:l,prevSize:u,nextSize:d,prevMin:f/100*l,prevMax:m/100*l,nextMin:h/100*l,nextMax:g/100*l}},[a]),y=(0,l.useCallback)((e,t,n)=>{if(!n)return;let{prev:r,next:i,parentSize:o}=n,s=Math.min(Math.max(e,n.prevMin),n.prevMax),c=Math.min(Math.max(t,n.nextMin),n.nextMax),l=s/o*100,u=c/o*100,d=`${l}%`,f=`${u}%`;r.style.flexBasis=d,r.style.flexGrow=`0`,r.style.flexShrink=`1`,a?r.style.width=d:r.style.height=d,i.style.flexBasis=f,i.style.flexGrow=`0`,i.style.flexShrink=`1`,a?i.style.width=f:i.style.height=f},[a]),b=(0,l.useCallback)(e=>{if(i)return;e.preventDefault();let t=v();if(!t)return;s.current=Ks(e.nativeEvent,a),c.current=t.parentSize,d.current=t.prevSize,f.current=t.nextSize,o.current=!0,h(!0);let n=e=>{var n;if(!o.current)return;e.cancelable&&e.preventDefault();let r=(n=v())==null?t:n,i=Ks(e,a)-s.current;y(d.current+i,f.current-i,r)},r=()=>{o.current=!1,h(!1),document.removeEventListener(`mousemove`,n),document.removeEventListener(`mouseup`,r),document.removeEventListener(`touchmove`,n),document.removeEventListener(`touchend`,r),document.removeEventListener(`touchcancel`,r)};document.addEventListener(`mousemove`,n),document.addEventListener(`mouseup`,r),document.addEventListener(`touchmove`,n,{passive:!1}),document.addEventListener(`touchend`,r),document.addEventListener(`touchcancel`,r)},[y,v,i,a]),x=(0,l.useCallback)(e=>{if(i)return;let t=a?e.key===`ArrowRight`||e.key===`ArrowUp`:e.key===`ArrowDown`||e.key===`ArrowRight`,n=a?e.key===`ArrowLeft`||e.key===`ArrowDown`:e.key===`ArrowUp`||e.key===`ArrowLeft`;if(!t&&!n)return;e.preventDefault();let r=v();if(!r)return;let o=e.shiftKey?10:2,s=t?o:-o;d.current===0&&(d.current=r.prevSize,f.current=r.nextSize);let c=r.parentSize*s/100;y(r.prevSize+c,r.nextSize-c,r),_(s)},[y,v,i,a]);return(0,l.useEffect)(()=>{if(g===null)return;let e=window.setTimeout(()=>_(null),600);return()=>window.clearTimeout(e)},[g]),(0,u.jsx)(`div`,{ref:p,role:`separator`,tabIndex:i?-1:0,"aria-orientation":a?`vertical`:`horizontal`,"aria-label":t,"aria-disabled":i||void 0,"aria-valuenow":g==null?void 0:g,className:$(`vx-resizable-handle`,`vx-resizable-handle--${r}`,m&&`vx-resizable-handle--active`,i&&`vx-resizable-handle--disabled`,n),onMouseDown:b,onTouchStart:b,onKeyDown:x,children:(0,u.jsx)(`span`,{className:`vx-resizable-handle__bar`,"aria-hidden":`true`})})}function Js(e,t){if(!t)return e;let n=e.toLowerCase().indexOf(t.toLowerCase());return n===-1?e:(0,u.jsxs)(u.Fragment,{children:[e.slice(0,n),(0,u.jsx)(`mark`,{className:`vx-cmd__mark`,children:e.slice(n,n+t.length)}),e.slice(n+t.length)]})}function Ys(e,t){var n;let r=t.toLowerCase(),i=e.title.toLowerCase(),a=e.section.toLowerCase(),o=e.description.toLowerCase(),s=((n=e.keywords)==null?[]:n).join(` `).toLowerCase();return i===r?100:i.startsWith(r)?80:i.includes(r)?60:a.includes(r)?40:s.includes(r)?35:o.includes(r)?20:0}function Xs({entries:e,open:t,onClose:n,onSelect:r,placeholder:i=`Search components, pages, keywords…`,ariaLabel:a=`Search`,emptyText:o=e=>`No results for "${e}"`,labelNavigate:s=`Navigate`,labelGo:c=`Go`,labelClose:d=`Close`}){let[f,p]=(0,l.useState)(``),[m,h]=(0,l.useState)(0),g=(0,l.useRef)(null),_=(0,l.useRef)(null),v=f.trim()?e.map(e=>({entry:e,s:Ys(e,f.trim())})).filter(e=>e.s>0).sort((e,t)=>t.s-e.s).map(e=>e.entry):e;(0,l.useEffect)(()=>{t&&(p(``),h(0),setTimeout(()=>{var e;return(e=g.current)==null?void 0:e.focus()},30))},[t]),(0,l.useEffect)(()=>{h(0)},[f]),(0,l.useEffect)(()=>{var e,t;let n=(e=_.current)==null?void 0:e.children[m];n==null||(t=n.scrollIntoView)==null||t.call(n,{block:`nearest`})},[m]);let y=(0,l.useCallback)(e=>{r(e),n()},[r,n]),b=(0,l.useCallback)(e=>{e.key===`ArrowDown`?(e.preventDefault(),h(e=>Math.min(e+1,v.length-1))):e.key===`ArrowUp`?(e.preventDefault(),h(e=>Math.max(e-1,0))):e.key===`Enter`?(e.preventDefault(),v[m]&&y(v[m].key)):e.key===`Escape`&&n()},[v,m,y,n]);if(!t)return null;let x=[];for(let e of v){let t=x[x.length-1];t&&t.section===e.section?t.items.push(e):x.push({section:e.section,items:[e]})}return(0,u.jsx)(`div`,{className:`vx-cmd__backdrop`,onMouseDown:n,children:(0,u.jsxs)(`div`,{className:`vx-cmd`,role:`dialog`,"aria-modal":`true`,"aria-label":a,onMouseDown:e=>e.stopPropagation(),children:[(0,u.jsxs)(`div`,{className:`vx-cmd__search`,children:[(0,u.jsxs)(`svg`,{className:`vx-cmd__search-icon`,width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:[(0,u.jsx)(`circle`,{cx:`6.5`,cy:`6.5`,r:`5`,stroke:`currentColor`,strokeWidth:`1.5`}),(0,u.jsx)(`path`,{d:`M10.5 10.5L14 14`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})]}),(0,u.jsx)(`input`,{ref:g,className:`vx-cmd__input`,type:`text`,placeholder:i,value:f,onChange:e=>p(e.target.value),onKeyDown:b,autoComplete:`off`,spellCheck:!1}),f?(0,u.jsx)(`button`,{className:`vx-cmd__clear`,onClick:()=>p(``),"aria-label":`清除`,children:(0,u.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,"aria-hidden":`true`,children:(0,u.jsx)(`path`,{d:`M1 1l12 12M13 1L1 13`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`})})}):(0,u.jsx)(`kbd`,{className:`vx-cmd__esc`,children:`esc`})]}),(0,u.jsx)(`ul`,{className:`vx-cmd__list`,ref:_,role:`listbox`,children:v.length===0?(0,u.jsx)(`li`,{className:`vx-cmd__empty`,children:o(f)}):x.map(e=>e.items.map((e,t)=>{let n=v.indexOf(e),r=n===m;return(0,u.jsxs)(`li`,{role:`option`,"aria-selected":r,className:`vx-cmd__item${r?` vx-cmd__item--active`:``}`,onMouseEnter:()=>h(n),onMouseDown:()=>y(e.key),children:[e.icon?(0,u.jsx)(`span`,{className:`vx-cmd__item-icon`,children:e.icon}):(0,u.jsx)(`span`,{className:`vx-cmd__item-icon vx-cmd__item-icon--section`,children:(e.title||e.section).slice(0,1)}),(0,u.jsxs)(`span`,{className:`vx-cmd__item-body`,children:[(0,u.jsx)(`span`,{className:`vx-cmd__item-title`,children:Js(e.title,f)}),(0,u.jsx)(`span`,{className:`vx-cmd__item-sub`,children:Js(e.section,f)})]}),r&&(0,u.jsx)(`kbd`,{className:`vx-cmd__enter`,children:`↵`})]},e.key)}))}),(0,u.jsxs)(`div`,{className:`vx-cmd__footer`,children:[(0,u.jsxs)(`span`,{children:[(0,u.jsx)(`kbd`,{children:`↑↓`}),` `,s]}),(0,u.jsxs)(`span`,{children:[(0,u.jsx)(`kbd`,{children:`↵`}),` `,c]}),(0,u.jsxs)(`span`,{children:[(0,u.jsx)(`kbd`,{children:`esc`}),` `,d]})]})]})})}var Zs=c(o(((e,t)=>{var n=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,r={},i={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,`&`).replace(/</g,`<`).replace(/\u00a0/g,` `)},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++n}),e.__id},clone:function e(t,n){n=n||{};var r,a;switch(i.util.type(t)){case`Object`:if(a=i.util.objId(t),n[a])return n[a];for(var o in r={},n[a]=r,t)t.hasOwnProperty(o)&&(r[o]=e(t[o],n));return r;case`Array`:return a=i.util.objId(t),n[a]?n[a]:(r=[],n[a]=r,t.forEach(function(t,i){r[i]=e(t,n)}),r);default:return t}},getLanguage:function(e){for(;e;){var n=t.exec(e.className);if(n)return n[1].toLowerCase();e=e.parentElement}return`none`},setLanguage:function(e,n){e.className=e.className.replace(RegExp(t,`gi`),``),e.classList.add(`language-`+n)},currentScript:function(){if(typeof document>`u`)return null;if(document.currentScript&&document.currentScript.tagName===`SCRIPT`)return document.currentScript;try{throw Error()}catch(r){var e=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(r.stack)||[])[1];if(e){var t=document.getElementsByTagName(`script`);for(var n in t)if(t[n].src==e)return t[n]}return null}},isActive:function(e,t,n){for(var r=`no-`+t;e;){var i=e.classList;if(i.contains(t))return!0;if(i.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:r,plaintext:r,text:r,txt:r,extend:function(e,t){var n=i.util.clone(i.languages[e]);for(var r in t)n[r]=t[r];return n},insertBefore:function(e,t,n,r){r=r||i.languages;var a=r[e],o={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var c in n)n.hasOwnProperty(c)&&(o[c]=n[c]);n.hasOwnProperty(s)||(o[s]=a[s])}var l=r[e];return r[e]=o,i.languages.DFS(i.languages,function(t,n){n===l&&t!=e&&(this[t]=o)}),o},DFS:function e(t,n,r,a){a=a||{};var o=i.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],r||s);var c=t[s],l=i.util.type(c);l===`Object`&&!a[o(c)]?(a[o(c)]=!0,e(c,n,null,a)):l===`Array`&&!a[o(c)]&&(a[o(c)]=!0,e(c,n,s,a))}}},plugins:{},highlightAll:function(e,t){i.highlightAllUnder(document,e,t)},highlightAllUnder:function(e,t,n){var r={callback:n,container:e,selector:`code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code`};i.hooks.run(`before-highlightall`,r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),i.hooks.run(`before-all-elements-highlight`,r);for(var a=0,o;o=r.elements[a++];)i.highlightElement(o,t===!0,r.callback)},highlightElement:function(t,n,r){var a=i.util.getLanguage(t),o=i.languages[a];i.util.setLanguage(t,a);var s=t.parentElement;s&&s.nodeName.toLowerCase()===`pre`&&i.util.setLanguage(s,a);var c={element:t,language:a,grammar:o,code:t.textContent};function l(e){c.highlightedCode=e,i.hooks.run(`before-insert`,c),c.element.innerHTML=c.highlightedCode,i.hooks.run(`after-highlight`,c),i.hooks.run(`complete`,c),r&&r.call(c.element)}if(i.hooks.run(`before-sanity-check`,c),s=c.element.parentElement,s&&s.nodeName.toLowerCase()===`pre`&&!s.hasAttribute(`tabindex`)&&s.setAttribute(`tabindex`,`0`),!c.code){i.hooks.run(`complete`,c),r&&r.call(c.element);return}if(i.hooks.run(`before-highlight`,c),!c.grammar){l(i.util.encode(c.code));return}if(n&&e.Worker){var u=new Worker(i.filename);u.onmessage=function(e){l(e.data)},u.postMessage(JSON.stringify({language:c.language,code:c.code,immediateClose:!0}))}else l(i.highlight(c.code,c.grammar,c.language))},highlight:function(e,t,n){var r={code:e,grammar:t,language:n};if(i.hooks.run(`before-tokenize`,r),!r.grammar)throw Error(`The language "`+r.language+`" has no grammar.`);return r.tokens=i.tokenize(r.code,r.grammar),i.hooks.run(`after-tokenize`,r),a.stringify(i.util.encode(r.tokens),r.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var i=new c;return l(i,i.head,e),s(e,i,t,i.head,0),d(i)},hooks:{all:{},add:function(e,t){var n=i.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=i.hooks.all[e];if(!(!n||!n.length))for(var r=0,a;a=n[r++];)a(t)}},Token:a};e.Prism=i;function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=(r||``).length|0}a.stringify=function e(t,n){if(typeof t==`string`)return t;if(Array.isArray(t)){var r=``;return t.forEach(function(t){r+=e(t,n)}),r}var a={type:t.type,content:e(t.content,n),tag:`span`,classes:[`token`,t.type],attributes:{},language:n},o=t.alias;o&&(Array.isArray(o)?Array.prototype.push.apply(a.classes,o):a.classes.push(o)),i.hooks.run(`wrap`,a);var s=``;for(var c in a.attributes)s+=` `+c+`="`+(a.attributes[c]||``).replace(/"/g,`"`)+`"`;return`<`+a.tag+` class="`+a.classes.join(` `)+`"`+s+`>`+a.content+`</`+a.tag+`>`};function o(e,t,n,r){e.lastIndex=t;var i=e.exec(n);if(i&&r&&i[1]){var a=i[1].length;i.index+=a,i[0]=i[0].slice(a)}return i}function s(e,t,n,r,c,d){for(var f in n)if(!(!n.hasOwnProperty(f)||!n[f])){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+`,`+m)return;var h=p[m],g=h.inside,_=!!h.lookbehind,v=!!h.greedy,y=h.alias;if(v&&!h.pattern.global){var b=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,b+`g`)}for(var x=h.pattern||h,S=r.next,C=c;S!==t.tail&&!(d&&C>=d.reach);C+=S.value.length,S=S.next){var w=S.value;if(t.length>e.length)return;if(!(w instanceof a)){var T=1,E;if(v){if(E=o(x,C,e,_),!E||E.index>=e.length)break;var D=E.index,O=E.index+E[0].length,k=C;for(k+=S.value.length;D>=k;)S=S.next,k+=S.value.length;if(k-=S.value.length,C=k,S.value instanceof a)continue;for(var A=S;A!==t.tail&&(k<O||typeof A.value==`string`);A=A.next)T++,k+=A.value.length;T--,w=e.slice(C,k),E.index-=C}else if(E=o(x,0,w,_),!E)continue;var D=E.index,j=E[0],M=w.slice(0,D),N=w.slice(D+j.length),P=C+w.length;d&&P>d.reach&&(d.reach=P);var F=S.prev;M&&(F=l(t,F,M),C+=M.length),u(t,F,T);var I=new a(f,g?i.tokenize(j,g):j,y,j);if(S=l(t,F,I),N&&l(t,S,N),T>1){var L={cause:f+`,`+m,reach:P};s(e,t,n,S.prev,C,L),d&&L.reach>d.reach&&(d.reach=L.reach)}}}}}}function c(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,i={value:n,prev:t,next:r};return t.next=i,r.prev=i,e.length++,i}function u(e,t,n){for(var r=t.next,i=0;i<n&&r!==e.tail;i++)r=r.next;t.next=r,r.prev=t,e.length-=i}function d(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}if(!e.document)return e.addEventListener&&(i.disableWorkerMessageHandler||e.addEventListener(`message`,function(t){var n=JSON.parse(t.data),r=n.language,a=n.code,o=n.immediateClose;e.postMessage(i.highlight(a,i.languages[r],r)),o&&e.close()},!1)),i;var f=i.util.currentScript();f&&(i.filename=f.src,f.hasAttribute(`data-manual`)&&(i.manual=!0));function p(){i.manual||i.highlightAll()}if(!i.manual){var m=document.readyState;m===`loading`||m===`interactive`&&f&&f.defer?document.addEventListener(`DOMContentLoaded`,p):window.requestAnimationFrame?window.requestAnimationFrame(p):window.setTimeout(p,16)}return i}(typeof window<`u`?window:typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope?self:{});t!==void 0&&t.exports&&(t.exports=n),typeof global<`u`&&(global.Prism=n),n.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:`attr-equals`},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:`named-entity`},/&#x?[\da-f]{1,8};/i]},n.languages.markup.tag.inside[`attr-value`].inside.entity=n.languages.markup.entity,n.languages.markup.doctype.inside[`internal-subset`].inside=n.languages.markup,n.hooks.add(`wrap`,function(e){e.type===`entity`&&(e.attributes.title=e.content.replace(/&/,`&`))}),Object.defineProperty(n.languages.markup.tag,"addInlined",{value:function(e,t){var r={};r[`language-`+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:n.languages[t]},r.cdata=/^<!\[CDATA\[|\]\]>$/i;var i={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:r}};i[`language-`+t]={pattern:/[\s\S]+/,inside:n.languages[t]};var a={};a[e]={pattern:RegExp(`(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)`.replace(/__/g,function(){return e}),`i`),lookbehind:!0,greedy:!0,inside:i},n.languages.insertBefore(`markup`,`cdata`,a)}}),Object.defineProperty(n.languages.markup.tag,"addAttribute",{value:function(e,t){n.languages.markup.tag.inside[`special-attr`].push({pattern:RegExp(`(^|["'\\s])(?:`+e+`)\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s'">=]+(?=[\\s>]))`,`i`),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,`language-`+t],inside:n.languages[t]},punctuation:[{pattern:/^=/,alias:`attr-equals`},/"|'/]}}}})}}),n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.xml=n.languages.extend(`markup`,{}),n.languages.ssml=n.languages.xml,n.languages.atom=n.languages.xml,n.languages.rss=n.languages.xml,(function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp(`@[\\w-](?:[^;{\\s"']|\\s+(?!\\s)|`+t.source+`)*?(?:;|(?=\\s*\\{))`),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:`selector`},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp(`\\burl\\((?:`+t.source+`|(?:[^\\\\\\r\\n()"']|\\\\[\\s\\S])*)\\)`,`i`),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp(`^`+t.source+`$`),alias:`url`}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+t.source+`)*(?=\\s*\\{)`),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined(`style`,`css`),n.tag.addAttribute(`style`,`css`))})(n),n.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},n.languages.javascript=n.languages.extend(`clike`,{"class-name":[n.languages.clike[`class-name`],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(`(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])`),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),n.languages.javascript[`class-name`][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,n.languages.insertBefore(`javascript`,`keyword`,{regex:{pattern:RegExp(`((?:^|[^$\\w\\xA0-\\uFFFF."'\\])\\s]|\\b(?:return|yield))\\s*)\\/(?:(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))`),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:`language-regex`,inside:n.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:`function`},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:n.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:n.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:n.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:n.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),n.languages.insertBefore(`javascript`,`string`,{hashbang:{pattern:/^#!.*/,greedy:!0,alias:`comment`},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:`string`},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:`punctuation`},rest:n.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:`property`}}),n.languages.insertBefore(`javascript`,`operator`,{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:`property`}}),n.languages.markup&&(n.languages.markup.tag.addInlined(`script`,`javascript`),n.languages.markup.tag.addAttribute(`on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)`,`javascript`)),n.languages.js=n.languages.javascript,(function(){if(n===void 0||typeof document>`u`)return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var e=`Loading…`,t=function(e,t){return`✖ Error `+e+` while fetching file: `+t},r=`✖ Error: File does not exist or is empty`,i={js:`javascript`,py:`python`,rb:`ruby`,ps1:`powershell`,psm1:`powershell`,sh:`bash`,bat:`batch`,h:`c`,tex:`latex`},a=`data-src-status`,o=`loading`,s=`loaded`,c=`failed`,l=`pre[data-src]:not([`+a+`="`+s+`"]):not([`+a+`="`+o+`"])`;function u(e,n,i){var a=new XMLHttpRequest;a.open(`GET`,e,!0),a.onreadystatechange=function(){a.readyState==4&&(a.status<400&&a.responseText?n(a.responseText):a.status>=400?i(t(a.status,a.statusText)):i(r))},a.send(null)}function d(e){var t=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(e||``);if(t){var n=Number(t[1]),r=t[2],i=t[3];return r?i?[n,Number(i)]:[n,void 0]:[n,n]}}n.hooks.add(`before-highlightall`,function(e){e.selector+=`, `+l}),n.hooks.add(`before-sanity-check`,function(t){var r=t.element;if(r.matches(l)){t.code=``,r.setAttribute(a,o);var f=r.appendChild(document.createElement(`CODE`));f.textContent=e;var p=r.getAttribute(`data-src`),m=t.language;if(m===`none`){var h=(/\.(\w+)$/.exec(p)||[,`none`])[1];m=i[h]||h}n.util.setLanguage(f,m),n.util.setLanguage(r,m);var g=n.plugins.autoloader;g&&g.loadLanguages(m),u(p,function(e){r.setAttribute(a,s);var t=d(r.getAttribute(`data-range`));if(t){var i=e.split(/\r\n?|\n/g),o=t[0],c=t[1]==null?i.length:t[1];o<0&&(o+=i.length),o=Math.max(0,Math.min(o-1,i.length)),c<0&&(c+=i.length),c=Math.max(0,Math.min(c,i.length)),e=i.slice(o,c).join(`
|
|
2
|
+
`),r.hasAttribute(`data-start`)||r.setAttribute(`data-start`,String(o+1))}f.textContent=e,n.highlightElement(f)},function(e){r.setAttribute(a,c),f.textContent=e})}}),n.plugins.fileHighlight={highlight:function(e){for(var t=(e||document).querySelectorAll(l),r=0,i;i=t[r++];)n.highlightElement(i)}};var f=!1;n.fileHighlight=function(){f||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),f=!0),n.plugins.fileHighlight.highlight.apply(this,arguments)}})()}))(),1);Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:`attr-equals`},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:`named-entity`},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside[`attr-value`].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside[`internal-subset`].inside=Prism.languages.markup,Prism.hooks.add(`wrap`,function(e){e.type===`entity`&&(e.attributes.title=e.content.replace(/&/,`&`))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n[`language-`+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r[`language-`+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var i={};i[e]={pattern:RegExp(`(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)`.replace(/__/g,function(){return e}),`i`),lookbehind:!0,greedy:!0,inside:r},Prism.languages.insertBefore(`markup`,`cdata`,i)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(e,t){Prism.languages.markup.tag.inside[`special-attr`].push({pattern:RegExp(`(^|["'\\s])(?:`+e+`)\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s'">=]+(?=[\\s>]))`,`i`),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,`language-`+t],inside:Prism.languages[t]},punctuation:[{pattern:/^=/,alias:`attr-equals`},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend(`markup`,{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend(`clike`,{"class-name":[Prism.languages.clike[`class-name`],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(`(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])`),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript[`class-name`][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore(`javascript`,`keyword`,{regex:{pattern:RegExp(`((?:^|[^$\\w\\xA0-\\uFFFF."'\\])\\s]|\\b(?:return|yield))\\s*)\\/(?:(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))`),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:`language-regex`,inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:`function`},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore(`javascript`,`string`,{hashbang:{pattern:/^#!.*/,greedy:!0,alias:`comment`},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:`string`},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:`punctuation`},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:`property`}}),Prism.languages.insertBefore(`javascript`,`operator`,{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:`property`}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined(`script`,`javascript`),Prism.languages.markup.tag.addAttribute(`on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)`,`javascript`)),Prism.languages.js=Prism.languages.javascript,(function(e){var t=e.util.clone(e.languages.javascript),n=`(?:\\s|\\/\\/.*(?!.)|\\/\\*(?:[^*]|\\*(?!\\/))\\*\\/)`,r=`(?:\\{(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])*\\})`,i=`(?:\\{<S>*\\.{3}(?:[^{}]|<BRACES>)*\\})`;function a(e,t){return e=e.replace(/<S>/g,function(){return n}).replace(/<BRACES>/g,function(){return r}).replace(/<SPREAD>/g,function(){return i}),RegExp(e,t)}i=a(i).source,e.languages.jsx=e.languages.extend(`markup`,t),e.languages.jsx.tag.pattern=a(`<\\/?(?:[\\w.:-]+(?:<S>+(?:[\\w.:$-]+(?:=(?:"(?:\\\\[\\s\\S]|[^\\\\"])*"|'(?:\\\\[\\s\\S]|[^\\\\'])*'|[^\\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\\/?)?>`),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside[`attr-value`].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside[`class-name`]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore(`inside`,`attr-name`,{spread:{pattern:a(`<SPREAD>`),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore(`inside`,`special-attr`,{script:{pattern:a(`=<BRACES>`),alias:`language-javascript`,inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:`punctuation`},rest:e.languages.jsx}}},e.languages.jsx.tag);var o=function(e){return e?typeof e==`string`?e:typeof e.content==`string`?e.content:e.content.map(o).join(``):``},s=function(t){for(var n=[],r=0;r<t.length;r++){var i=t[r],a=!1;if(typeof i!=`string`&&(i.type===`tag`&&i.content[0]&&i.content[0].type===`tag`?i.content[0].content[0].content===`</`?n.length>0&&n[n.length-1].tagName===o(i.content[0].content[1])&&n.pop():i.content[i.content.length-1].content===`/>`||n.push({tagName:o(i.content[0].content[1]),openedBraces:0}):n.length>0&&i.type===`punctuation`&&i.content===`{`?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&i.type===`punctuation`&&i.content===`}`?n[n.length-1].openedBraces--:a=!0),(a||typeof i==`string`)&&n.length>0&&n[n.length-1].openedBraces===0){var c=o(i);r<t.length-1&&(typeof t[r+1]==`string`||t[r+1].type===`plain-text`)&&(c+=o(t[r+1]),t.splice(r+1,1)),r>0&&(typeof t[r-1]==`string`||t[r-1].type===`plain-text`)&&(c=o(t[r-1])+c,t.splice(r-1,1),r--),t[r]=new e.Token(`plain-text`,c,null,c)}i.content&&typeof i.content!=`string`&&s(i.content)}};e.hooks.add(`after-tokenize`,function(e){e.language!==`jsx`&&e.language!==`tsx`||s(e.tokens)})})(Prism),(function(e){e.languages.typescript=e.languages.extend(`javascript`,{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript[`literal-property`];var t=e.languages.extend(`typescript`,{});delete t[`class-name`],e.languages.typescript[`class-name`].inside=t,e.languages.insertBefore(`typescript`,`function`,{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:`operator`},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:`class-name`,inside:t}}}}),e.languages.ts=e.languages.typescript})(Prism),(function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend(`jsx`,t),delete e.languages.tsx.parameter,delete e.languages.tsx[`literal-property`];var n=e.languages.tsx.tag;n.pattern=RegExp(`(^|[^\\w$]|(?=<\\/))(?:`+n.pattern.source+`)`,n.pattern.flags),n.lookbehind=!0})(Prism),(function(e){var t=`\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b`,n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:`punctuation`,inside:null},r={bash:n,environment:{pattern:RegExp(`\\$`+t),alias:`constant`},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp(`(\\{)`+t),lookbehind:!0,alias:`constant`}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:`important`},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:`function`},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:`function`}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:`variable`,lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp(`(^|[\\s;|&]|[<>]\\()`+t),lookbehind:!0,alias:`constant`}},alias:`variable`,lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:`variable`,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp(`\\$?`+t),alias:`constant`},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:`class-name`},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:`important`},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:`important`}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var i=[`comment`,`function-name`,`for-or-select`,`assign-left`,`parameter`,`string`,`environment`,`function`,`keyword`,`builtin`,`boolean`,`file-descriptor`,`operator`,`punctuation`,`number`],a=r.variable[1].inside,o=0;o<i.length;o++)a[i[o]]=e.languages.bash[i[o]];e.languages.sh=e.languages.bash,e.languages.shell=e.languages.bash})(Prism),Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:`keyword`}},Prism.languages.webmanifest=Prism.languages.json;function Qs(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function $s(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){Qs(a,r,i,o,s,`next`,e)}function s(e){Qs(a,r,i,o,s,`throw`,e)}o(void 0)})}}function ec({code:e,language:t=`tsx`,copyLabel:n,copiedLabel:r,onCopy:i}){let[a,o]=(0,l.useState)(!1),s=(0,l.useRef)(null),c=(0,l.useMemo)(()=>{var n,r;let i=(n=(r=Zs.default.languages[t])==null?Zs.default.languages.tsx:r)==null?Zs.default.languages.typescript:n;return i?Zs.default.highlight(e,i,t):e},[e,t]);(0,l.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]);function d(){return f.apply(this,arguments)}function f(){return f=$s(function*(){(yield i(e))&&(o(!0),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{o(!1),s.current=null},1600))}),f.apply(this,arguments)}return(0,u.jsxs)(`div`,{className:`vx-code-block-wrap`,"data-language":t,children:[(0,u.jsxs)(Hn,{type:`button`,size:`sm`,variant:a?`solid`:`secondary`,className:a?`vx-code-block__copy vx-code-block__copy--copied`:`vx-code-block__copy`,onClick:()=>void d(),children:[a?(0,u.jsx)(_n,{size:14}):(0,u.jsx)(wn,{size:14}),a?r:n]}),(0,u.jsx)(`pre`,{className:`vx-code-block`,children:(0,u.jsx)(`code`,{className:`vx-code-block__code language-${t}`,dangerouslySetInnerHTML:{__html:c}})})]})}var tc=`v${{name:`vxui-re`,version:`1.0.7`,description:`A general-purpose React UI framework rebuilt from VXUI principles.`,license:`Apache-2.0`,repository:{type:`git`,url:`git+https://github.com/tmplink/vxui_react.git`},homepage:`https://github.com/tmplink/vxui_react#readme`,bugs:{url:`https://github.com/tmplink/vxui_react/issues`},keywords:[`react`,`ui`,`component-library`,`design-system`,`dashboard`,`typescript`],type:`module`,sideEffects:[`**/*.css`],files:[`dist`,`llms.txt`],main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`},"./styles.css":`./dist/index.css`},scripts:{dev:`vite`,build:`vite build`,"build:lib":`vite build`,"build:pages":`PAGE_BUILD=true vite build`,"build:analyze":`VISUALIZE=true vite build`,typecheck:`tsc --noEmit`,test:`vitest run`,"test:watch":`vitest`,"test:coverage":`vitest run --coverage`,preview:`npm run build && wrangler dev`,pub:`npm publish`,prepublishOnly:`npm run build`,deploy:`npm run build:pages && wrangler deploy`,"security:audit":`npm audit --audit-level=high`},peerDependencies:{react:`^19.0.0`,"react-dom":`^19.0.0`},dependencies:{"@radix-ui/react-switch":`1.3.3`,"@radix-ui/react-tabs":`1.1.17`,"@radix-ui/react-toast":`1.2.19`,"@types/prismjs":`^1.26.6`,"lucide-react":`1.24.0`,prismjs:`^1.30.0`},devDependencies:{"@cloudflare/vite-plugin":`1.45.0`,"@testing-library/jest-dom":`^6.9.1`,"@testing-library/react":`^16.3.2`,"@testing-library/user-event":`^14.6.1`,"@types/node":`26.1.1`,"@types/react":`19.2.17`,"@types/react-dom":`^19.1.2`,"@typescript/typescript6":`^6.0.2`,"@vitejs/plugin-react":`6.0.3`,"@vitest/coverage-v8":`4.1.10`,jsdom:`^29.1.1`,"rollup-plugin-visualizer":`^7.0.1`,typescript:`7.0.2`,vite:`8.1.4`,"vite-plugin-dts":`5.0.3`,vitest:`4.1.10`,wrangler:`4.111.0`}}.version}`,nc={locale:`en`,label:`English`,searchPlaceholder:`Search components, pages, keywords…`,searchAriaLabel:`Search`,searchEmpty:e=>`No results for "${e}"`,searchNavigate:`Navigate`,searchGo:`Go`,searchClose:`Close`,sidebarCollapse:`Collapse`,sidebarExpand:`Expand`,sidebarCloseLabel:`Close sidebar`,searchTrigger:`Search`,versionLabel:tc,mobilePreview:`Mobile Preview`,nav:{gettingStarted:`Getting Started`,layout:`Layout`,content:`Content`,forms:`Forms`,components:`Components`,overlays:`Overlays`,navigation:`Navigation`,feedback:`Feedback`,templates:`Templates`,mobile:`Responsive`},pages:{introduction:`Introduction`,"quick-start":`Quick Start`,"shell-sidebar":`Shell & Sidebar`,"grid-page":`Grid & Page`,"nav-layout":`Navigation & Layout`,"scroll-area":`ScrollArea`,separator:`Separator`,resizable:`Resizable`,typography:`Typography`,"typography-base":`Typography Base`,badge:`Badge`,avatar:`Avatar`,skeleton:`Skeleton`,card:`Card`,"code-block":`Code Block`,"language-switcher":`Language Switcher`,button:`Button`,elements:`Elements`,"form-controls":`Form Controls`,"form-inputs":`Form Inputs`,toggle:`Toggle`,rating:`Rating`,label:`Label`,"date-pickers":`Date Pickers`,"file-upload":`File Upload`,"color-picker":`Color Picker`,form:`Form`,accordion:`Accordion`,tabs:`Tabs`,breadcrumb:`Breadcrumb`,pagination:`Pagination`,stepper:`Stepper`,progress:`Progress`,spinner:`Spinner`,alert:`Alert`,toasts:`Toasts`,table:`Table`,"data-list":`Data List`,timeline:`Timeline`,"tree-view":`Tree View`,carousel:`Carousel`,"empty-states":`Empty States`,overlays:`Overlays`,"data-display":`Data Display`,navigation:`Navigation`,feedback:`Feedback`,dialog:`Dialog`,sheet:`Sheet`,popover:`Popover`,tooltip:`Tooltip`,"hover-card":`Hover Card`,"dropdown-menu":`Dropdown Menu`,"context-menu":`Context Menu`,"command-palette":`Command Palette`,"navigation-menu":`Navigation Menu`,menubar:`Menubar`,mobile:`Mobile Components`,"mobile-list":`Mobile List`,image:`Image`,"pin-input":`Pin Input`,descriptions:`Descriptions`,notification:`Notification`,result:`Result`,"home-page":`Home Page`,"login-page":`Login Page`,"register-page":`Register Page`,"error-page":`Error Page`,"privacy-policy":`Privacy Policy`,"terms-of-service":`Terms of Service`,"vxui-provider":`VXUI Provider`,viewport:`Viewport`,constants:`Constants`,calendar:`Calendar`,"bottom-nav":`Bottom Nav`},docs:{guidance:`Guidance`,guidanceDesc:`Keep the implementation tight and let the design system do most of the visual work.`,preview:`Preview`,previewDesc:`A compact example of how this area should feel inside the system.`,notes:`Notes`,primaryTheme:`Primary Theme`,primaryThemeDesc:`Blue-gray neutrals keep emphasis reserved for actions, not decoration.`,tokenScale:`Token Scale`,tokenScaleDesc:`Reuse the shared surface, border, and text variables before introducing page-specific styles.`,themeStudio:`Theme Studio`,themeStudioDesc:`Register named themes once, then switch every component with a single key.`,liveControls:`Live Controls`,liveControlsDesc:`A few reusable primitives are still available inside the docs surface.`,searchDocs:`Search docs`,searchDocsPlaceholder:`Buttons, tokens, layout...`,compactDensity:`Compact density`,compactDensityDesc:`Tighten the vertical rhythm for denser operator views.`,systemPreview:`System Preview`,openSection:`Open section`},intro:{tagline:`A lightweight, dependency-free UI framework for building clean admin interfaces. Design tokens, components, and a minimal SPA runtime live behind one consistent visual language.`,getStarted:`Get Started`,browseComponents:`Browse Components`,atAGlance:`At a Glance`,designTokens:`Design Tokens`,designTokensLead:`All colors, spacing, and typography values are exposed as CSS custom properties under the vx namespace. Register named light and dark themes once, then swap the whole framework by theme key.`,componentFamilies:`Component Families`},glance:{zeroDeps:`Zero dependencies`,zeroDepsHint:`Original shell runtime does not require a build pipeline.`,components:`Components`,componentsHint:`Layout, form, feedback, and list primitives in one system.`,coreCSS:`Core CSS`,coreCSSHint:`Neutral tokens and structural styles stay compact.`,darkMode:`Dark mode`,darkModeHint:`Semantic variables keep the same components reusable.`},tokens:{primary:`Primary`,primaryDesc:`Accent color for primary actions, active navigation, and emphasis.`,surface:`Surface`,surfaceDesc:`Default panel and content background for documentation cards and shell regions.`,border:`Border`,borderDesc:`Light separators that keep the UI structured without adding visual weight.`,text:`Text`,textDesc:`Primary foreground used for headings, dense data, and body copy.`},families:{layout:`Layout`,layoutDesc:`App shell, sticky header, section rhythm, and responsive content framing.`,content:`Content`,contentDesc:`Typography, badges, avatars, cards, and code blocks.`,elements:`Elements`,elementsDesc:`Quiet primitives for actions, metadata, and structured content blocks.`,forms:`Forms`,formsDesc:`Inputs, switches, dialogs, and field composition patterns.`,inputs:`Inputs`,inputsDesc:`Text inputs, selects, textareas, and number pickers.`,overlays:`Overlays`,overlaysDesc:`Modals, popovers, tooltips, and sheet panels.`,navigation:`Navigation`,navigationDesc:`Menus, nav bars, and breadcrumbs.`,feedback:`Feedback`,feedbackDesc:`Transient toasts and interruptive confirmation flows.`},dataList:{name:`Name`,kind:`Kind`,updated:`Updated`},modeLabel:e=>`${e} mode`,publicPages:{navLogin:`Log in`,navSignup:`Sign up`,navDocs:`Docs`,navLogout:`Log out`,heroTag:`New · ${tc}`,heroTitle:`Lightweight React UI library`,heroLead:`Zero dependencies · 30+ components · Built-in theming & dark mode`,heroCta:`Get started`,heroCtaAlt:`Browse docs`,previewLead:``,previewAccessTitle:`Access modes`,previewAccessMember:`Sign in to keep a session and return to your workspace.`,previewAccessGuest:`Open the docs as a guest when you just need to browse.`,previewMobileTitle:`Mobile-ready`,previewMobileLead:`Navigation and auth layouts adapt naturally on mobile.`,featuresSectionTitle:`Why vxUI`,feat1:`Zero dependencies`,feat1Desc:`Pure CSS + TypeScript, no peer dependencies.`,feat2:`30+ components`,feat2Desc:`Layout, form, feedback and list primitives in one system.`,feat3:`Themeable`,feat3Desc:`CSS variable-driven, swap the whole theme with one key.`,feat4:`Dark mode`,feat4Desc:`Semantic tokens work across light and dark themes.`,footerCopy:`© 2026 vxUI. All rights reserved.`,footerPrivacy:`Privacy Policy`,footerGithub:`GitHub`,footerWebsite:`Website`,loginTitle:`Welcome back`,loginSubtitle:`Sign in to access the documentation.`,loginEmail:`Email`,loginEmailPlaceholder:`you@example.com`,loginPassword:`Password`,loginPasswordPlaceholder:`At least 8 characters`,loginCta:`Sign in`,loginNoAccount:`Don't have an account?`,loginRegister:`Register`,loginGuest:`Continue without an account →`,rememberMe:`Remember this device`,showPassword:`Show`,hidePassword:`Hide`,authInfoTitle:`Guest access is available`,authInfoBody:`You can go straight to the docs without an account. Sign in only if you want a persisted session example.`,registerTitle:`Create account`,registerSubtitle:`Get started with vxUI today.`,registerName:`Full name`,registerNamePlaceholder:`Jane Smith`,registerEmail:`Email`,registerEmailPlaceholder:`jane@company.com`,registerPassword:`Password`,registerPasswordPlaceholder:`Create a strong password`,registerTermsAgree:`I agree to the`,registerTermsLink:`Terms of Service`,registerTermsAnd:`and`,registerPrivacyLink:`Privacy Policy`,registerCta:`Create account`,registerHasAccount:`Already have an account?`,registerLogin:`Sign in`,registerGuest:`Continue without an account →`,validationNameRequired:`Enter your full name.`,validationNameShort:`Use at least 2 characters for your name.`,validationEmailRequired:`Enter your email address.`,validationEmailInvalid:`Enter a valid email address.`,validationPasswordRequired:`Enter your password.`,validationPasswordShort:`Use at least 8 characters for the password.`,validationTermsRequired:`You must agree to the terms before creating an account.`,sessionLoginTitle:`Signed in`,sessionLoginBody:`Your session is active. You can now browse the docs as a signed-in user.`,sessionRegisterTitle:`Account created`,sessionRegisterBody:`Your sample account is ready and the docs are now unlocked.`,sessionGuestTitle:`Browsing as guest`,sessionGuestBody:`You entered the docs without a saved account session.`,sessionLogoutTitle:`Signed out`,sessionLogoutBody:`Your persisted session was cleared. You are back on the public site.`,signedInAs:`Signed in as`,guestLabel:`Guest`,backHome:`← Back to home`,backToDocs:`Back to docs`},pageDefs:{introduction:{section:`Introduction`,title:`Introduction`,description:`A lightweight, dependency-free UI framework for building clean admin interfaces. Design tokens, components, and a minimal SPA runtime live behind one consistent visual language.`,guidance:[`Start from the shell and navigation rhythm before styling isolated controls.`,`Keep tokens semantic so a theme swap does not require page-specific overrides.`,`Treat documentation, examples, and production surfaces as the same design system.`]},"quick-start":{section:`Installation`,title:`Quick Start`,description:`Install the package, wrap your app with providers, and mount a page shell before composing business screens.`,guidance:[`Import the shared stylesheet once near the application root.`,`Use AppShell for product chrome and keep page content inside the main slot.`,`Add ThemeProvider and ToastProvider only when the app needs them.`]},"shell-sidebar":{section:`Components`,title:`Shell & Sidebar`,description:"The shell is responsible for sidebar hierarchy, sticky header spacing, and content width. Navigation items support nested sub-menus via the `children` prop — click a parent to expand or collapse its sub-items.",guidance:[`Keep navigation labels short so collapsed mode stays scannable.`,`Use section titles to separate page groups instead of visual noise.`,"Add `children` to a nav item to make it expandable; set `defaultOpen: true` to start it expanded.",`If any child is active, AppShell auto-opens the parent group.`,'Customize the sidebar width via the `sidebarWidth` prop (e.g. `sidebarWidth={280}` or `"18rem"`).'],props:[{prop:`brand`,type:`string`,default:`"VXUI"`,description:`Brand / product name shown in the sidebar header.`},{prop:`brandCaption`,type:`string`,description:`Secondary subtitle displayed below the brand name.`},{prop:`brandIcon`,type:`ReactNode`,description:`Logo element (image or icon) rendered in the sidebar header.`},{prop:`title`,type:`string`,description:`Page title shown in the topbar.`},{prop:`description`,type:`string`,description:`Page subtitle / description shown below the topbar title.`},{prop:`breadcrumb`,type:`ReactNode`,description:`Breadcrumb element rendered in the topbar.`},{prop:`navSections`,type:`AppShellNavSection[]`,description:`Structured navigation tree grouped by sections. Preferred over navItems.`},{prop:`navItems`,type:`AppShellNavItem[]`,description:`Flat navigation list. Automatically wrapped in a single unnamed section.`},{prop:`sidebarCollapsed`,type:`boolean`,default:`false`,description:`Collapse sidebar to icon-only rail mode.`},{prop:`sidebarWidth`,type:`number | string`,default:`240px`,description:`Custom sidebar width. Pass a number for px (e.g. 280) or a CSS string (e.g. "18rem").`},{prop:`density`,type:`"comfortable" | "compact"`,description:`Layout density. "compact" tightens vertical rhythm for high-density operator UIs.`},{prop:`headerActions`,type:`ReactNode`,description:`Slot for right-aligned topbar actions (buttons, dropdowns, user menu, etc.).`},{prop:`sidebarFooter`,type:`ReactNode`,description:`Slot rendered at the bottom of the sidebar (user info, settings link, etc.).`},{prop:`mobileNavOpen`,type:`boolean`,default:`false`,description:`Controls whether the mobile navigation overlay is visible.`},{prop:`onSidebarToggle`,type:`() => void`,description:`Called when the collapse / expand button is clicked.`},{prop:`onMobileNavToggle`,type:`() => void`,description:`Called when the mobile overlay toggle button is clicked. Required to enable mobile nav.`},{prop:`children`,type:`ReactNode`,required:!0,description:`Main page content rendered inside ShellContent.`}]},"grid-page":{section:`Components`,title:`Grid & Page`,description:`Use simple responsive grids for cards, tokens, and documentation blocks. The page surface should stay neutral and let content carry emphasis.`,guidance:[`Prefer 12 to 16 pixel gaps for dense documentation surfaces.`,`Reserve larger spacing for section boundaries, not every card.`,`Keep max width constrained so long paragraphs remain readable.`]},button:{section:`Components`,title:`Button`,description:`Buttons carry the primary action hierarchy for the system. Variants, sizes, and width should communicate intent without requiring extra styling.`,guidance:[`Use the solid variant for the primary action in a given area.`,`Use secondary or ghost variants for supporting actions that should stay visually quieter.`,`Use fullWidth for stacked mobile actions or single-column forms.`],props:[{prop:`variant`,type:`"solid" | "secondary" | "ghost" | "danger" | "outline" | "soft" | "danger-outline" | "primary-outline" | "gradient"`,default:`"solid"`,description:`Visual style variant.`},{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Button size preset.`},{prop:`fullWidth`,type:`boolean`,default:`false`,description:`Stretch to fill container width.`},{prop:`shape`,type:`"rect" | "square" | "pill" | "circle"`,default:`"rect"`,description:`Button shape preset.`},{prop:`loading`,type:`boolean`,default:`false`,description:`Show a spinner and disable the button.`},{prop:`startIcon`,type:`ReactNode`,description:`Left-side icon slot.`},{prop:`endIcon`,type:`ReactNode`,description:`Right-side icon slot.`}]},elements:{section:`Components`,title:`Elements`,description:`Button forms the atomic foundation of actions. Other atomic components (Badge, Text, Heading, CodeBlock, LanguageSwitcher) each have their own dedicated pages under Content.`,guidance:[`One primary action per area is usually enough.`,`Use the solid variant for the primary action in a given area.`,`Use secondary or ghost variants for supporting actions.`]},"form-controls":{section:`Components`,title:`Form Controls`,description:`A complete set of form primitives: single-line inputs, multi-line textarea, searchable single-select (Select), multi-select with tag display (MultiSelect), and time selection (TimePicker). All share the same label / hint / error layout system.`,guidance:[`Always pair form controls with visible labels in admin surfaces.`,"Use Select for single-select with optional search; set `searchable={N}` to show the search input only when options exceed N.",`Use MultiSelect when users need to pick several values from a bounded list.`,"TimePicker supports 24-hour format and an optional seconds column via the `seconds` prop.",`Short helper text is better than placeholder-only instruction.`],props:[{prop:`Select.options`,type:`SelectOption[]`,required:!0,description:`Array of selectable options.`},{prop:`Select.value`,type:`string`,description:`Controlled selected value.`},{prop:`Select.defaultValue`,type:`string`,description:`Uncontrolled initial value.`},{prop:`Select.onChange`,type:`(value: string | undefined) => void`,description:`Called when selection changes.`},{prop:`Select.placeholder`,type:`string`,default:`"Select..."`,description:`Placeholder when nothing selected.`},{prop:`Select.label`,type:`string`,description:`Field label.`},{prop:`Select.hint`,type:`string`,description:`Helper text.`},{prop:`Select.error`,type:`string`,description:`Error message.`},{prop:`Select.disabled`,type:`boolean`,description:`Disable the select.`},{prop:`Select.clearable`,type:`boolean`,default:`false`,description:`Show clear button.`},{prop:`Select.searchable`,type:`boolean | number`,default:`true`,description:`Enable search. Number enables search above that option count.`},{prop:`MultiSelect.options`,type:`MultiSelectOption[]`,required:!0,description:`Array of selectable options.`},{prop:`MultiSelect.value`,type:`string[]`,description:`Controlled selected values.`},{prop:`MultiSelect.defaultValue`,type:`string[]`,default:`[]`,description:`Uncontrolled initial values.`},{prop:`MultiSelect.onChange`,type:`(value: string[]) => void`,description:`Called when selection changes.`},{prop:`MultiSelect.placeholder`,type:`string`,default:`"Select..."`,description:`Placeholder when nothing selected.`},{prop:`MultiSelect.label`,type:`string`,description:`Field label.`},{prop:`MultiSelect.hint`,type:`string`,description:`Helper text.`},{prop:`MultiSelect.error`,type:`string`,description:`Error message.`},{prop:`MultiSelect.disabled`,type:`boolean`,description:`Disable the multi-select.`},{prop:`MultiSelect.clearable`,type:`boolean`,default:`false`,description:`Show clear-all button.`},{prop:`MultiSelect.maxDisplay`,type:`number`,description:`Max visible tags before "+N more" badge.`},{prop:`Textarea.label`,type:`string`,description:`Label above the textarea.`},{prop:`Textarea.hint`,type:`string`,description:`Helper text below.`},{prop:`Textarea.resize`,type:`"none" | "vertical" | "horizontal" | "both"`,default:`"vertical"`,description:`CSS resize direction.`},{prop:`TimePicker.value`,type:`string`,description:`Controlled time value (HH:MM or HH:MM:SS).`},{prop:`TimePicker.defaultValue`,type:`string`,description:`Uncontrolled initial time.`},{prop:`TimePicker.onChange`,type:`(value: string) => void`,description:`Called when time changes.`},{prop:`TimePicker.label`,type:`string`,description:`Field label.`},{prop:`TimePicker.seconds`,type:`boolean`,default:`false`,description:`Show seconds column.`}]},navigation:{section:`Components`,title:`Navigation`,description:`Navigation patterns should communicate location first, then available movement. Tabs work best for sibling views within a single page context.`,guidance:[`Mirror information architecture in the control structure.`,`Make the active state obvious without relying on color alone.`,`Avoid mixing route navigation and local view state in one control.`]},"data-list":{section:`Components`,title:`Data List`,description:`Lists and tables should prioritize scanning over ornament. Use generous alignment, light separators, and action density only where needed.`,guidance:[`Align headers and row content precisely to reduce visual drift.`,`Use subtle borders instead of heavy card chrome around every row.`,`Reserve destructive affordances for row action groups, not inline text links.`]},dialog:{section:`Overlays`,title:`Dialog`,description:`A modal dialog that interrupts the user to confirm an action or show critical information. Supports multiple sizes, placement options, and a close button.`,guidance:[`Use Dialog for confirmations that require a decision before continuing.`,`Choose the appropriate size — "sm" for quick confirmations, "lg" for forms or details.`,`Dialog traps focus and blocks interaction with the page behind it.`,`When content overflows the max height, the body scrolls while the header and footer stay fixed.`],props:[{prop:`trigger`,type:`ReactNode`,required:!0,description:`Element that opens the dialog.`},{prop:`title`,type:`string`,required:!0,description:`Dialog title.`},{prop:`description`,type:`string`,description:`Optional description text.`},{prop:`children`,type:`ReactNode`,description:`Dialog body content.`},{prop:`footer`,type:`ReactNode`,description:`Custom footer content.`},{prop:`size`,type:`"sm" | "md" | "lg" | "xl" | "full"`,default:`"md"`,description:`Dialog width preset.`},{prop:`placement`,type:`"center" | "top" | "right" | "bottom" | "left" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "top-half" | "right-half" | "bottom-half" | "left-half"`,default:`"center"`,description:`Dialog placement.`},{prop:`scrollable`,type:`boolean`,default:`true`,description:`Allow body scrolling on overflow.`},{prop:`closable`,type:`boolean`,default:`true`,description:`Show the close button.`},{prop:`fullscreen`,type:`boolean`,default:`false`,description:`Display in fullscreen mode.`},{prop:`open`,type:`boolean`,description:`Controlled open state.`},{prop:`defaultOpen`,type:`boolean`,description:`Default open state (uncontrolled).`},{prop:`onOpenChange`,type:`(open: boolean) => void`,description:`Callback when open state changes.`},{prop:`onConfirm`,type:`() => void`,description:`Shows built-in confirm button.`},{prop:`onCancel`,type:`() => void`,description:`Shows built-in cancel button.`},{prop:`confirmLabel`,type:`string`,default:`"Confirm"`,description:`Confirm button label.`},{prop:`cancelLabel`,type:`string`,default:`"Cancel"`,description:`Cancel button label.`},{prop:`confirmVariant`,type:`"solid" | "danger"`,default:`"solid"`,description:`Confirm button variant.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`},{prop:`padding`,type:`"none" | "sm" | "md" | "lg"`,default:`"md"`,description:`Content padding preset.`}]},popover:{section:`Overlays`,title:`Popover`,description:`A rich popup that can contain forms, buttons, and structured content. Unlike Tooltip, Popover can hold interactive elements and requires an explicit dismiss action.`,guidance:[`Popover can contain interactive content — forms, buttons, links.`,`Always provide a close mechanism (click outside or explicit close button).`,`Use Tooltip for read-only labels and Popover for interactive content.`],props:[{prop:`content`,type:`ReactNode`,required:!0,description:`Popover content (forms, buttons, links).`},{prop:`children`,type:`ReactNode`,required:!0,description:`Trigger element.`},{prop:`placement`,type:`"top" | "bottom" | "left" | "right"`,default:`"bottom"`,description:`Popover placement.`},{prop:`trigger`,type:`"click" | "hover"`,default:`"click"`,description:`Open trigger method.`},{prop:`open`,type:`boolean`,description:`Controlled open state.`},{prop:`onOpenChange`,type:`(open: boolean) => void`,description:`Callback when open state changes.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},tooltip:{section:`Overlays`,title:`Tooltip`,description:`A short, non-interactive label that appears on hover or focus to describe a UI element. Tooltips contain text only — no links, buttons, or forms.`,guidance:[`Tooltips are for supplementary text only — never place interactive content inside.`,`Tooltips appear on hover and focus; they do not require a close action.`,`Keep tooltip text short — one to five words is ideal.`],props:[{prop:`content`,type:`ReactNode`,required:!0,description:`Tooltip text content.`},{prop:`children`,type:`ReactNode`,required:!0,description:`Trigger element.`},{prop:`placement`,type:`"top" | "bottom" | "left" | "right"`,default:`"top"`,description:`Tooltip placement.`},{prop:`delay`,type:`number`,default:`600`,description:`Delay in ms before showing.`}]},"hover-card":{section:`Overlays`,title:`Hover Card`,description:`A card that appears on hover, showing a richer preview of a linked element. Useful for user profiles, document previews, or reference summaries.`,guidance:[`Use HoverCard to preview related content without navigating away.`,`HoverCard can contain richer content than Tooltip — images, metadata, links.`,`Ensure the HoverCard trigger area is large enough to reach without the card disappearing.`],props:[{prop:`content`,type:`ReactNode`,required:!0,description:`Card content (images, metadata, links).`},{prop:`children`,type:`ReactNode`,required:!0,description:`Trigger element.`},{prop:`placement`,type:`"top" | "bottom" | "left" | "right"`,default:`"bottom"`,description:`HoverCard placement.`},{prop:`delay`,type:`number`,default:`400`,description:`Delay in ms before showing.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},"dropdown-menu":{section:`Overlays`,title:`Dropdown Menu`,description:`A menu that opens on click, presenting a list of grouped actions or navigation items. Supports nested groups, keyboard navigation, and disabled items.`,guidance:[`Group related actions under labeled menu groups.`,`Use separators between unrelated action groups.`,`DropdownMenu supports keyboard navigation — arrow keys, Enter, and Escape.`],props:[{prop:`trigger`,type:`ReactNode`,required:!0,description:`Element that opens the menu.`},{prop:`groups`,type:`DropdownMenuGroupProps[]`,description:`Grouped menu items (renders separators between groups).`},{prop:`items`,type:`DropdownMenuItemProps[]`,description:`Flat list of menu items.`},{prop:`align`,type:`"left" | "right"`,default:`"left"`,description:`Menu alignment relative to trigger.`},{prop:`open`,type:`boolean`,description:`Controlled open state.`},{prop:`onOpenChange`,type:`(open: boolean) => void`,description:`Callback when open state changes.`},{prop:`DropdownMenuItem.label`,type:`ReactNode`,required:!0,description:`Item display content.`},{prop:`DropdownMenuItem.icon`,type:`ReactNode`,description:`Item icon.`},{prop:`DropdownMenuItem.shortcut`,type:`string`,description:`Keyboard shortcut hint.`},{prop:`DropdownMenuItem.disabled`,type:`boolean`,description:`Disable the item.`},{prop:`DropdownMenuItem.danger`,type:`boolean`,description:`Apply danger styling.`},{prop:`DropdownMenuItem.onClick`,type:`() => void`,description:`Click handler.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},"context-menu":{section:`Overlays`,title:`Context Menu`,description:`A right-click menu that provides actions relevant to the clicked element. Supports the same item and group API as DropdownMenu.`,guidance:[`Use ContextMenu to expose secondary actions that users discover through right-click.`,`Always provide an alternative way to access the same actions (toolbar, button).`,`Keep the menu short — long context menus are hard to scan at a glance.`],props:[{prop:`groups`,type:`ContextMenuGroupProps[]`,description:`Grouped menu items.`},{prop:`items`,type:`ContextMenuItemProps[]`,description:`Flat list of items.`},{prop:`children`,type:`ReactNode`,required:!0,description:`Element that triggers on right-click.`},{prop:`ContextMenuItem.label`,type:`ReactNode`,required:!0,description:`Item display content.`},{prop:`ContextMenuItem.icon`,type:`ReactNode`,description:`Item icon.`},{prop:`ContextMenuItem.shortcut`,type:`string`,description:`Keyboard shortcut hint.`},{prop:`ContextMenuItem.disabled`,type:`boolean`,description:`Disable the item.`},{prop:`ContextMenuItem.danger`,type:`boolean`,description:`Apply danger styling.`},{prop:`ContextMenuItem.onClick`,type:`() => void`,description:`Click handler.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},"command-palette":{section:`Overlays`,title:`Command Palette`,description:`A keyboard-driven search overlay that lets users jump to any page or action without leaving the keyboard. Render it globally, wire a hotkey, then pass a flat list of entries.`,guidance:[`Keep the entries list flat and label-searchable — avoid nesting pages under hidden categories.`,`Populate entries from the same nav data you use for the sidebar so the two surfaces stay in sync.`,`Bind to ⌘K (Mac) or Ctrl+K (Windows) for a familiar shortcut.`],props:[{prop:`entries`,type:`SearchEntry[]`,required:!0,description:`Flat list of searchable entries.`},{prop:`open`,type:`boolean`,required:!0,description:`Controlled open state.`},{prop:`onClose`,type:`() => void`,required:!0,description:`Called when the palette is dismissed.`},{prop:`onSelect`,type:`(key: string) => void`,required:!0,description:`Called when an entry is selected.`},{prop:`placeholder`,type:`string`,default:`"Search components, pages, keywords..."`,description:`Search input placeholder.`},{prop:`emptyText`,type:`(query: string) => string`,description:`Function returning empty results message.`},{prop:`ariaLabel`,type:`string`,default:`"Search"`,description:`Accessible label for the dialog.`},{prop:`labelNavigate`,type:`string`,default:`"Navigate"`,description:`Footer navigation hint text.`},{prop:`labelGo`,type:`string`,default:`"Go"`,description:`Footer go hint text.`},{prop:`labelClose`,type:`string`,default:`"Close"`,description:`Footer close hint text.`}]},"navigation-menu":{section:`Navigation`,title:`Navigation Menu`,description:`A horizontal navigation bar that supports multi-level dropdown menus on hover. Suitable for top-level site navigation with nested sections.`,guidance:[`Use NavigationMenu for site-level navigation with multiple tiers of content.`,`Each item can have sub-items for second-level navigation.`,`Keep the top-level items short — one or two words each.`],props:[{prop:`items`,type:`NavMenuItem[]`,required:!0,description:`Top-level navigation items.`},{prop:`NavMenuItem.label`,type:`string`,required:!0,description:`Item display text.`},{prop:`NavMenuItem.href`,type:`string`,description:`Link URL (for items without sub-items).`},{prop:`NavMenuItem.onClick`,type:`() => void`,description:`Click handler.`},{prop:`NavMenuItem.items`,type:`NavMenuSubItem[]`,description:`Sub-menu items (triggers dropdown).`},{prop:`NavMenuItem.active`,type:`boolean`,description:`Active state.`}]},menubar:{section:`Navigation`,title:`Menubar`,description:`A horizontal menu bar typically used for application-level actions (File, Edit, View). Supports keyboard-driven navigation between menus.`,guidance:[`Menubar follows desktop application conventions — use it for app-level command menus.`,`Each menu can contain items, groups, and separators.`,`Arrow keys navigate between menus; Escape closes the current menu.`],props:[{prop:`menus`,type:`MenubarMenuProps[]`,required:!0,description:`Top-level menu definitions.`},{prop:`MenubarMenu.label`,type:`string`,required:!0,description:`Menu trigger label.`},{prop:`MenubarMenu.groups`,type:`MenubarGroupProps[]`,description:`Grouped items with separators.`},{prop:`MenubarMenu.items`,type:`MenubarItemProps[]`,description:`Flat list of items.`},{prop:`MenubarMenu.disabled`,type:`boolean`,description:`Disable the menu trigger.`},{prop:`MenubarItem.label`,type:`ReactNode`,required:!0,description:`Item display content.`},{prop:`MenubarItem.icon`,type:`ReactNode`,description:`Item icon.`},{prop:`MenubarItem.shortcut`,type:`string`,description:`Keyboard shortcut text.`},{prop:`MenubarItem.disabled`,type:`boolean`,description:`Disable the item.`},{prop:`MenubarItem.danger`,type:`boolean`,description:`Apply danger styling.`},{prop:`MenubarItem.onClick`,type:`() => void`,description:`Click handler.`}]},resizable:{section:`Layout`,title:`Resizable`,description:`A set of three components — ResizablePanelGroup, ResizablePanel, ResizableHandle — for building split-panel layouts with draggable dividers. Supports horizontal and vertical arrangements.`,guidance:[`Use ResizablePanelGroup as the outer container, then nest ResizablePanel and ResizableHandle inside.`,`Set direction to "horizontal" for side-by-side panels, "vertical" for stacked panels.`,`Panels can be collapsed or resized by dragging the handle between them.`],props:[{prop:`ResizablePanelGroup.direction`,type:`"horizontal" | "vertical"`,default:`"horizontal"`,description:`Layout axis.`},{prop:`ResizablePanelGroup.disabled`,type:`boolean`,default:`false`,description:`Disable resize on all handles.`},{prop:`ResizablePanel.defaultSize`,type:`number`,default:`50`,description:`Initial size as percentage.`},{prop:`ResizablePanel.minSize`,type:`number`,default:`10`,description:`Minimum size percentage.`},{prop:`ResizablePanel.maxSize`,type:`number`,default:`90`,description:`Maximum size percentage.`},{prop:`ResizableHandle.ariaLabel`,type:`string`,description:`Accessible label for the handle.`}]},"file-upload":{section:`Forms`,title:`File Upload`,description:`A drag-and-drop file upload area with click-to-browse fallback. Supports multiple files, previews, and removal.`,guidance:[`Accept multiple files with the multiple prop — each file renders a preview card.`,`Uploaded files are surfaced via the onChange callback with name, size, and file object.`,`The component handles its own drag state and visual feedback.`],props:[{prop:`label`,type:`string`,description:`Field label text.`},{prop:`hint`,type:`string`,description:`Helper text below the drop zone.`},{prop:`error`,type:`string`,description:`Error message text.`},{prop:`accept`,type:`string`,description:`File input accept attribute (e.g. ".png,.jpg").`},{prop:`multiple`,type:`boolean`,default:`false`,description:`Allow multiple file selection.`},{prop:`maxSize`,type:`number`,description:`Maximum file size in bytes.`},{prop:`disabled`,type:`boolean`,description:`Disable the upload zone.`},{prop:`onFiles`,type:`(files: File[]) => void`,description:`Callback with selected files.`}]},"color-picker":{section:`Forms`,title:`Color Picker`,description:`A color selection control that opens a popup with hue, saturation, and brightness sliders. Supports predefined swatches and custom hex input.`,guidance:[`Use ColorPicker for brand color configuration, tag colors, or theme customization.`,`The component provides both a visual picker and a hex input for precision.`,`Swatches can be customized via the swatches prop for brand-specific palettes.`],props:[{prop:`value`,type:`string`,description:`Controlled hex color value (e.g. "#ff0000").`},{prop:`defaultValue`,type:`string`,default:`"#3b82f6"`,description:`Uncontrolled initial color.`},{prop:`onChange`,type:`(color: string) => void`,description:`Change callback (receives hex string).`},{prop:`label`,type:`string`,description:`Field label text.`},{prop:`hint`,type:`string`,description:`Helper text below the picker.`},{prop:`error`,type:`string`,description:`Error message text.`},{prop:`disabled`,type:`boolean`,description:`Disable the picker.`},{prop:`presets`,type:`string[]`,description:`Array of preset swatch hex colors.`},{prop:`showPresets`,type:`boolean`,default:`true`,description:`Show/hide preset color swatches.`}]},accordion:{section:`Components`,title:`Accordion`,description:`A vertically stacked list of collapsible panels. Each panel has a header that toggles its content open or closed. Supports single and multiple open panels.`,guidance:[`Accordion is ideal for FAQ sections, settings panels, and progressive disclosure patterns.`,`By default, only one panel is open at a time (type="single").`,`For accordions where multiple panels should stay open simultaneously, allowMultiple enables independent toggling.`],props:[{prop:`items`,type:`AccordionItem[]`,required:!0,description:`Array of accordion panel definitions.`},{prop:`multiple`,type:`boolean`,default:`false`,description:`Allow multiple panels open simultaneously.`},{prop:`defaultOpen`,type:`string[]`,default:`[]`,description:`Keys of initially open panels.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`},{prop:`AccordionItem.key`,type:`string`,required:!0,description:`Unique key for the panel.`},{prop:`AccordionItem.title`,type:`ReactNode`,required:!0,description:`Panel header content.`},{prop:`AccordionItem.content`,type:`ReactNode`,required:!0,description:`Panel body content.`},{prop:`AccordionItem.disabled`,type:`boolean`,description:`Disable the panel.`}]},tabs:{section:`Components`,title:`Tabs`,description:`A tabbed interface for switching between multiple content panels. Supports controlled and uncontrolled modes with keyboard navigation.`,guidance:[`Use Tabs to organize related content into separate panels without navigating to a new page.`,`TabsList holds the trigger buttons; TabsContent holds the panel content.`,`Use the defaultValue prop for uncontrolled usage, or value/onValueChange for controlled mode.`],props:[{prop:`value`,type:`string`,description:`Controlled selected tab value.`},{prop:`defaultValue`,type:`string`,description:`Uncontrolled initial tab.`},{prop:`onValueChange`,type:`(value: string) => void`,description:`Called when a new tab is selected.`},{prop:`orientation`,type:`"horizontal" | "vertical"`,default:`"horizontal"`,description:`Layout orientation.`}]},breadcrumb:{section:`Components`,title:`Breadcrumb`,description:`A navigation aid that shows the user's location within the page hierarchy. Each segment is a link to the corresponding level.`,guidance:[`Breadcrumb reflects URL depth — single-level pages may omit it entirely.`,`Use the separator prop to customize the divider between segments.`,`The last segment should be the current page (not a link) for accessibility.`],props:[{prop:`items`,type:`BreadcrumbItem[]`,required:!0,description:`Ordered list of breadcrumb segments.`},{prop:`separator`,type:`ReactNode`,default:`Chevron`,description:`Custom separator between items.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`},{prop:`BreadcrumbItem.href`,type:`string`,description:`Link URL for the item.`},{prop:`BreadcrumbItem.onClick`,type:`() => void`,description:`Click handler for the item.`}]},pagination:{section:`Components`,title:`Pagination`,description:`A page navigation control that breaks large datasets into manageable pages. Shows page numbers with prev/next buttons and an optional page size selector.`,guidance:[`Show the total page count so users know the dataset size.`,`Use the siblings prop to control how many page numbers appear around the current page.`,`The onPageChange callback receives the new page number for external data fetching.`],props:[{prop:`page`,type:`number`,required:!0,description:`Current active page (1-indexed).`},{prop:`total`,type:`number`,required:!0,description:`Total number of items.`},{prop:`pageSize`,type:`number`,default:`10`,description:`Items per page.`},{prop:`siblingCount`,type:`number`,default:`1`,description:`Page buttons around current page.`},{prop:`onChange`,type:`(page: number) => void`,required:!0,description:`Callback when a page is clicked.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},stepper:{section:`Components`,title:`Progress Steps`,description:`A multi-step progress indicator that visualizes the user's current position in a linear workflow. Supports completed, active, pending, and error states.`,guidance:[`Use Stepper for multi-page forms, checkout flows, or setup wizards.`,`Each step can be in "completed", "active", "pending", or "error" status.`,`Steps with error status draw attention to the failed step so users can navigate back to fix it.`],props:[{prop:`steps`,type:`StepItem[]`,required:!0,description:`Array of step definitions.`},{prop:`currentStep`,type:`number`,default:`0`,description:`0-based index of the active step.`},{prop:`orientation`,type:`"horizontal" | "vertical"`,default:`"horizontal"`,description:`Layout direction.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},progress:{section:`Components`,title:`Progress Bar`,description:`A horizontal progress bar that indicates the completion percentage of a deterministic operation. Supports labeled and unlabeled variants.`,guidance:[`Use Progress for deterministic operations where the duration is known (e.g., file upload, data export).`,`Use Spinner for indeterminate waits where the duration is unknown.`,`The value prop represents progress toward max; set value equal to max for completion.`],props:[{prop:`value`,type:`number`,default:`0`,description:`Current progress value.`},{prop:`max`,type:`number`,default:`100`,description:`Maximum value (denominator).`},{prop:`label`,type:`string`,description:`Text label above the bar.`},{prop:`showLabel`,type:`boolean`,default:`false`,description:`Show percentage text.`},{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Bar thickness preset.`},{prop:`variant`,type:`"default" | "success" | "warning" | "danger" | "rainbow"`,default:`"default"`,description:`Bar color variant.`},{prop:`indeterminate`,type:`boolean`,default:`false`,description:`Indeterminate (animated) mode.`}]},spinner:{section:`Components`,title:`Spinner`,description:`A rotating indicator for indeterminate loading states. Use it while content is being fetched or processed without a known duration.`,guidance:[`Use Spinner for short, indeterminate waits where the remaining time is unknown.`,`Use Progress for deterministic operations with a known duration.`,`Spinner accepts size prop ("sm", "md", "lg") to match the surrounding context.`],props:[{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Spinner dimension (16/24/36 px).`},{prop:`label`,type:`string`,default:`"Loading…"`,description:`Accessible aria-label text.`}]},alert:{section:`Components`,title:`Alert`,description:`A prominent status message that communicates success, warning, danger, or informational states. Can optionally be dismissed by the user.`,guidance:[`Use Alert for persistent or page-level status messages — prefer it over Toasts for important information.`,`Alert supports "info", "success", "warning", and "danger" variants.`,`The onClose prop adds a close button for user-dismissable alerts.`],props:[{prop:`variant`,type:`"info" | "success" | "warning" | "danger"`,default:`"info"`,description:`Visual style variant.`},{prop:`title`,type:`string`,description:`Alert title text.`},{prop:`icon`,type:`ReactNode`,description:`Custom icon override.`},{prop:`onClose`,type:`() => void`,description:`Close button callback (hidden when omitted).`}]},table:{section:`Components`,title:`Table`,description:`A data table with sortable columns, multiple visual variants, row selection, and built-in auto search with debounce. Supports borderless, headless, fixed layout, and clickable rows.`,guidance:[`Table supports sortable columns — delegate sort state up when the data comes from a server.`,`Use variant="dark" for emphasis or variant="outline" for minimal chrome.`,`Enable selectable to add checkbox row selection; control state via selectedRows/onSelectionChange.`,`Built-in search is debounced (200ms default) and works automatically — no external state needed.`,`Set searchable: false on a column to exclude it from text search.`],props:[{prop:`columns`,type:`TableColumn[]`,required:!0,description:`Column definitions.`},{prop:`data`,type:`T[]`,required:!0,description:`Row data.`},{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Row height preset.`},{prop:`striped`,type:`boolean`,default:`false`,description:`Alternating row background.`},{prop:`hoverable`,type:`boolean`,default:`true`,description:`Row hover highlight.`},{prop:`bordered`,type:`boolean`,default:`false`,description:`Inner cell borders.`},{prop:`stickyHeader`,type:`boolean`,default:`false`,description:`Sticky table header.`},{prop:`stickyFilter`,type:`boolean`,default:`false`,description:`Sticky filter bar, keeps search box visible when scrolling.`},{prop:`borderless`,type:`boolean`,default:`false`,description:`Remove all borders including the outer wrapper.`},{prop:`headless`,type:`boolean`,default:`false`,description:`Hide the header row.`},{prop:`loading`,type:`boolean`,default:`false`,description:`Show loading overlay.`},{prop:`variant`,type:`"default" | "dark" | "outline"`,default:`"default"`,description:`Visual style variant.`},{prop:`fixed`,type:`boolean`,default:`false`,description:`Fixed table layout (column widths honored strictly, text truncated).`},{prop:`removeBorders`,type:`"all" | ("top" | "right" | "bottom" | "left")[]`,description:`Remove specific side borders or all. Adjusts border-radius accordingly.`},{prop:`flush`,type:`boolean`,default:`false`,description:`Flush mode: removes border, border-radius, and padding for embedding inside Card.`},{prop:`onRowClick`,type:`(row: T, index: number) => void`,description:`Row click callback.`},{prop:`rowClassName`,type:`string | ((row: T, index: number) => string)`,description:`Custom row class name.`},{prop:`selectable`,type:`boolean`,default:`false`,description:`Enable checkbox row selection.`},{prop:`selectedRows`,type:`Set<number>`,description:`Controlled selected row indices.`},{prop:`onSelectionChange`,type:`(selected: Set<number>) => void`,description:`Selection change callback.`},{prop:`searchDebounce`,type:`number`,default:`200`,description:`Search debounce delay in ms. Set 0 to disable.`},{prop:`searchColumns`,type:`string[]`,description:`Limit text search to specific column keys.`},{prop:`sortColumn`,type:`string`,description:`Controlled sort column key.`},{prop:`sortDirection`,type:`"asc" | "desc"`,description:`Controlled sort direction.`},{prop:`onSortChange`,type:`(column: string, direction: SortDirection) => void`,description:`Sort change callback.`},{prop:`emptyText`,type:`ReactNode`,default:`"No data"`,description:`Text when data is empty.`},{prop:`rounded`,type:`boolean`,default:`false`,description:`Remove outer wrapper border-radius.`},{prop:`caption`,type:`string`,description:`Table caption for accessibility.`}]},"empty-states":{section:`Components`,title:`Empty States`,description:`An empty state should explain what is missing, why it matters, and what the next action is. It should never feel like a dead end. The EmptyState component provides a consistent layout with icon, title, description, and an action slot.`,guidance:[`Name the object that is absent so users know what they are looking at.`,`Offer one clear recovery action via the action prop.`,`Keep the visual weight lighter than success or alert feedback.`],props:[{prop:`icon`,type:`ReactNode`,description:`Illustration or icon displayed above the title.`},{prop:`title`,type:`string`,required:!0,description:`Main heading explaining what is missing.`},{prop:`description`,type:`string`,description:`Optional explanatory text below the title.`},{prop:`action`,type:`ReactNode`,description:`Call-to-action button or link for recovery.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},toasts:{section:`Components`,title:`Toasts`,description:`Toasts confirm short-lived events without interrupting task flow. Keep them brief, specific, and easy to dismiss.`,guidance:[`Use success and info to confirm background actions.`,`Escalate blocking or destructive states to dialogs instead of stacking toasts.`,`Avoid repeating the same message on every page transition.`],props:[{prop:`push`,type:`(toast: ToastInput) => void`,description:`Show a toast notification.`},{prop:`ToastInput.title`,type:`string`,required:!0,description:`Toast title text.`},{prop:`ToastInput.description`,type:`string`,description:`Optional description text.`},{prop:`ToastInput.tone`,type:`"info" | "success" | "warning" | "danger"`,default:`"info"`,description:`Toast visual tone.`}]},feedback:{section:`Feedback`,title:`Feedback Components`,description:`Alert, Progress, Spinner, Stepper, and Toast indicate application state without interrupting the layout.`,guidance:[`Use Spinner for short, indeterminate waits; use Progress for deterministic operations.`,`Prefer Alert over Toast for persistent or page-level status messages.`]},overlays:{section:`Components`,title:`Overlays`,description:`Dialog, ContextMenu, HoverCard, Tooltip, Popover, and DropdownMenu layer transient content and actions above the page.`,guidance:[`Tooltips are for supplementary text only — never interactive content.`,`Popovers can contain forms and rich content; they require explicit close triggers.`,`DropdownMenus should group related actions and support keyboard navigation.`]},"nav-layout":{section:`Components`,title:`Navigation & Layout`,description:`Tabs, Accordion, Breadcrumb, Menubar, NavigationMenu, ScrollArea, Separator, Resizable, and Sheet structure content hierarchically.`,guidance:[`Breadcrumb mirrors route depth — omit it on single-level pages.`,`Pagination should show page count so users understand the data set size.`,`Accordion works best for progressive disclosure, not primary navigation.`]},"data-display":{section:`Components`,title:`Data Display`,description:`Table and EmptyState present structured data compactly. Other data components (Avatar, Badge, Card, Carousel, Timeline, TreeView) each have their own dedicated pages.`,guidance:[`Table supports sortable columns — delegate sort state up when the data is server-side.`,`Use striped rows in dense tables to help eyes track across long rows.`,`EmptyState should include a clear recovery action whenever possible.`]},"form-inputs":{section:`Forms`,title:`Form Inputs`,description:`Checkbox, Radio, Switch, Slider, NumberInput, TagInput, SegmentedControl, and Input extend the form vocabulary beyond text inputs. Other form components (Label, Toggle, Rating, DatePicker) each have their own dedicated pages.`,guidance:[`Group radio buttons with RadioGroup to share name and semantics.`,`Slider is ideal for numeric ranges; pair it with showValue for immediate feedback.`,`Textarea defaults to vertical resize — disable resize only in fixed-height containers.`,`Use Switch for immediate state toggles (like settings), and Checkbox for form submissions or multi-selections.`],props:[{prop:`Checkbox.label`,type:`ReactNode`,description:`Label next to the checkbox.`},{prop:`Checkbox.description`,type:`string`,description:`Description under the label.`},{prop:`Checkbox.indeterminate`,type:`boolean`,description:`Show indeterminate visual state.`},{prop:`Radio.label`,type:`ReactNode`,description:`Label next to the radio circle.`},{prop:`Radio.description`,type:`string`,description:`Description under the label.`},{prop:`RadioGroup.label`,type:`string`,description:`Group label rendered as <legend>.`},{prop:`RadioGroup.children`,type:`ReactNode`,required:!0,description:`Radio components inside the group.`},{prop:`RadioGroup.className`,type:`string`,description:`Additional CSS class names.`},{prop:`Switch.label`,type:`string`,required:!0,description:`Visible label text.`},{prop:`Switch.description`,type:`string`,description:`Description below the label.`},{prop:`Slider.label`,type:`string`,description:`Label above the slider.`},{prop:`Slider.showValue`,type:`boolean`,default:`false`,description:`Show current value next to label.`},{prop:`Slider.hint`,type:`string`,description:`Helper text below.`},{prop:`NumberInput.label`,type:`string`,description:`Label above the input.`},{prop:`NumberInput.hint`,type:`string`,description:`Helper text below.`},{prop:`NumberInput.error`,type:`string`,description:`Error message.`},{prop:`NumberInput.value`,type:`number`,description:`Controlled value.`},{prop:`NumberInput.onChange`,type:`(value: number) => void`,description:`Called when value changes.`},{prop:`NumberInput.min`,type:`number`,description:`Minimum value.`},{prop:`NumberInput.max`,type:`number`,description:`Maximum value.`},{prop:`NumberInput.step`,type:`number`,default:`1`,description:`Step increment.`},{prop:`TagInput.value`,type:`string[]`,description:`Controlled tags.`},{prop:`TagInput.defaultValue`,type:`string[]`,default:`[]`,description:`Uncontrolled default tags.`},{prop:`TagInput.onChange`,type:`(tags: string[]) => void`,description:`Called when tags change.`},{prop:`TagInput.label`,type:`string`,description:`Field label.`},{prop:`TagInput.placeholder`,type:`string`,default:`"Add tag..."`,description:`Placeholder.`},{prop:`TagInput.maxTags`,type:`number`,description:`Maximum number of tags.`},{prop:`SegmentedControl.options`,type:`SegmentedControlOption[]`,required:!0,description:`Array of options.`},{prop:`SegmentedControl.value`,type:`string`,description:`Controlled value.`},{prop:`SegmentedControl.defaultValue`,type:`string`,description:`Uncontrolled initial value.`},{prop:`SegmentedControl.onChange`,type:`(value: string) => void`,description:`Called when selection changes.`},{prop:`SegmentedControl.fullWidth`,type:`boolean`,description:`Stretch to fill container width.`},{prop:`SegmentedControl.size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Control size preset.`},{prop:`Input.label`,type:`string`,description:`Label above the input.`},{prop:`Input.hint`,type:`string`,description:`Helper text below.`},{prop:`Input.error`,type:`string`,description:`Error message.`},{prop:`Input.prefix`,type:`ReactNode`,description:`Ornament prepended inside the input.`},{prop:`Input.suffix`,type:`ReactNode`,description:`Ornament appended inside the input.`},{prop:`Input.variant`,type:`"default" | "filled" | "underline" | "borderless"`,default:`"default"`,description:`Visual style variant.`},{prop:`Input.size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Size preset.`},{prop:`Input.rounded`,type:`boolean`,description:`Pill-shaped input.`}]},"mobile-list":{section:`Responsive`,title:`Mobile List`,description:`MobileList, MobileListSection, and MobileListItem provide a native-feeling list suitable for mobile navigation, settings, and data display. Each item supports leading icons, trailing content, chevron indicators, and destructive or disabled states.`,guidance:[`Use MobileListSection with a title prop to group related items under a section header.`,`Set chevron on items that navigate to a detail view — omit it for static or toggle items.`,`Use destructive for irreversible actions (delete, leave, remove) — the text turns red.`,`Disabled items render visually muted and block click events.`],props:[{prop:`MobileList`,type:`—`,description:`Root <ul> element with list styling.`},{prop:`MobileListSection.title`,type:`string`,description:`Section header text.`},{prop:`MobileListItem.leading`,type:`ReactNode`,description:`Icon or avatar on the left side.`},{prop:`MobileListItem.trailing`,type:`ReactNode`,description:`Custom content on the right (badge, value, etc.).`},{prop:`MobileListItem.label`,type:`ReactNode`,required:!0,description:`Primary label text.`},{prop:`MobileListItem.description`,type:`ReactNode`,description:`Secondary descriptive text.`},{prop:`MobileListItem.chevron`,type:`boolean`,default:`false`,description:`Show a right chevron arrow.`},{prop:`MobileListItem.destructive`,type:`boolean`,default:`false`,description:`Style as destructive action (red text).`},{prop:`MobileListItem.disabled`,type:`boolean`,default:`false`,description:`Disable the item.`},{prop:`MobileListItem.onClick`,type:`() => void`,description:`Click handler.`}]},mobile:{section:`Responsive`,title:`Responsive Patterns`,description:`A single responsive system for phone, tablet, and desktop. One route tree, one content model, and one set of components adapt through layout instead of duplicate applications.`,guidance:[`Keep the route tree identical across breakpoints; only the shell and density should change.`,`Turn persistent side navigation into a drawer on narrow screens instead of forking the page implementation.`,`Design cards, forms, and tables to reflow from three columns to one without changing component ownership.`]},image:{section:`Content`,title:`Image`,description:`A progressive image component with lazy loading via IntersectionObserver, error fallback, and an optional click-to-preview lightbox. Supports fixed dimensions, border-radius presets, and captions.`,guidance:[`Set lazy={true} (default) to defer off-screen images and improve initial load time.`,`Provide a fallback node to replace the default placeholder when the image fails to load.`,`Enable preview={true} for gallery-style layouts where users expect to inspect images.`,`Use width and height props to prevent layout shift (CLS) during loading.`],props:[{prop:`src`,type:`string`,required:!0,description:`Image source URL.`},{prop:`alt`,type:`string`,description:`Alt text for accessibility.`},{prop:`width`,type:`string | number`,description:`Fixed width (CSS value or px number).`},{prop:`height`,type:`string | number`,description:`Fixed height (CSS value or px number).`},{prop:`radius`,type:`'none' | 'sm' | 'md' | 'lg' | 'full'`,default:`'md'`,description:`Border radius preset.`},{prop:`fit`,type:`'cover' | 'contain' | 'fill' | 'none'`,default:`'cover'`,description:`Object-fit CSS value.`},{prop:`lazy`,type:`boolean`,default:`true`,description:`Enable lazy loading.`},{prop:`placeholder`,type:`ReactNode`,description:`Placeholder shown while loading.`},{prop:`fallback`,type:`ReactNode`,description:`Fallback shown on error.`},{prop:`preview`,type:`boolean`,default:`false`,description:`Enable click-to-preview lightbox.`},{prop:`caption`,type:`ReactNode`,description:`Caption text below the image.`}]},"pin-input":{section:`Forms`,title:`Pin Input`,description:`A segmented input for verification codes, OTPs, and PINs. Supports numeric or alphanumeric modes, auto-advance, paste handling, and mask mode.`,guidance:[`Use length={6} for standard verification codes or length={4} for PINs.`,`Set type="numeric" (default) for number-only codes; use "alphanumeric" for mixed.`,`Provide an onComplete callback to auto-submit once all fields are filled.`,`Enable mask={true} for sensitive codes that should not be visible.`],props:[{prop:`length`,type:`number`,default:`6`,description:`Number of input fields.`},{prop:`value`,type:`string`,description:`Controlled value.`},{prop:`onChange`,type:`(value: string) => void`,description:`Called when any field changes.`},{prop:`onComplete`,type:`(value: string) => void`,description:`Called when all fields are filled.`},{prop:`type`,type:`'numeric' | 'alphanumeric'`,default:`'numeric'`,description:`Input type.`},{prop:`size`,type:`'sm' | 'md' | 'lg'`,default:`'md'`,description:`Size preset.`},{prop:`mask`,type:`boolean`,default:`false`,description:`Mask input (show dots).`},{prop:`error`,type:`string`,description:`Error message below the input group.`},{prop:`label`,type:`string`,description:`Label above the input group.`},{prop:`autoFocus`,type:`boolean`,default:`false`,description:`Auto-focus the first input.`}]},descriptions:{section:`Content`,title:`Descriptions`,description:`A key-value display component for detail pages. Organizes metadata in a structured horizontal or vertical layout with optional borders, column spanning, and size presets.`,guidance:[`Use horizontal layout for wide screens; vertical for narrow or single-column details.`,`Set column={2} or column={3} to arrange items in multi-column rows.`,`Use the span property on individual items to stretch across multiple columns.`,`Combine with the title and extra props for a section header with actions.`],props:[{prop:`items`,type:`DescriptionsItem[]`,required:!0,description:`List of description items.`},{prop:`layout`,type:`'horizontal' | 'vertical'`,default:`'horizontal'`,description:`Layout direction.`},{prop:`column`,type:`number`,default:`3`,description:`Number of columns per row.`},{prop:`size`,type:`'sm' | 'md' | 'lg'`,default:`'md'`,description:`Size preset.`},{prop:`bordered`,type:`boolean`,default:`true`,description:`Show border around the descriptions.`},{prop:`title`,type:`ReactNode`,description:`Title above the descriptions.`},{prop:`extra`,type:`ReactNode`,description:`Extra content next to the title.`}]},notification:{section:`Components`,title:`Notification`,description:`A persistent notification system with NotificationProvider and useNotification hook. Unlike Toast (auto-dismiss), notifications remain visible until dismissed manually or via duration.`,guidance:[`Wrap your app with NotificationProvider and set the desired placement.`,`Use push() to show a notification — it returns an id for programmatic dismiss.`,`Set duration > 0 for auto-dismiss; use 0 (default) for persistent notifications.`,`Use the action prop for inline buttons like "View details" or "Undo".`],props:[{prop:`NotificationProvider.placement`,type:`'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center'`,default:`'top-right'`,description:`Stack position.`},{prop:`NotificationProvider.maxCount`,type:`number`,default:`5`,description:`Maximum visible notifications.`},{prop:`push`,type:`(input: NotificationInput) => number`,description:`Show a notification; returns the id.`},{prop:`dismiss`,type:`(id: number) => void`,description:`Dismiss a notification by id.`},{prop:`clear`,type:`() => void`,description:`Dismiss all notifications.`}]},result:{section:`Components`,title:`Result`,description:`A result/status page component for operation feedback. Provides pre-built status presets (success, error, warning, info, forbidden, not-found, server-error) with default icons and colors.`,guidance:[`Use the status prop for common outcomes; override icon for custom branding.`,`Always provide a clear next action via the actions prop (e.g., "Back to Home").`,`Keep the description to one or two sentences explaining the result.`,`Use the extra slot for supplementary content like order details or error logs.`],props:[{prop:`status`,type:`'success' | 'error' | 'warning' | 'info' | 'forbidden' | 'not-found' | 'server-error'`,required:!0,description:`Pre-built status preset.`},{prop:`title`,type:`string`,required:!0,description:`Title text.`},{prop:`description`,type:`string`,description:`Description below the title.`},{prop:`icon`,type:`ReactNode`,description:`Custom icon (overrides default).`},{prop:`actions`,type:`ReactNode`,description:`Action area for buttons/links.`},{prop:`extra`,type:`ReactNode`,description:`Extra content below actions.`}]},"home-page":{section:`Templates`,title:`Home Page`,description:`A landing-style home page with a hero section, key feature highlights, and primary call-to-action buttons. Suitable for product sites, internal portals, and marketing pages.`,guidance:[`Keep the hero message to one compelling sentence — let the CTA do the work.`,`Feature cards should each solve one problem, not list all capabilities.`,`Balance a primary action with a softer secondary one to reduce decision fatigue.`]},"login-page":{section:`Templates`,title:`Login Page`,description:`A minimal login form centered on the screen. Collect credentials with clear labels, visible error states, and a single primary action.`,guidance:[`Never hide the password label — placeholder text alone fails accessibility.`,`Show inline validation errors as soon as the field loses focus.`,`Offer a password-visible toggle to reduce login friction.`]},"register-page":{section:`Templates`,title:`Register Page`,description:`A registration form that collects the minimum fields needed to create an account. Reduce friction by asking only what is essential at sign-up.`,guidance:[`Request only name, email, and password at registration — profile details can come later.`,`Show password strength inline without blocking submission on minor issues.`,`The terms-of-service checkbox must be explicit; do not pre-check it.`]},"error-page":{section:`Templates`,title:`Error Page`,description:`A graceful fallback for 404, 500, and other error states. Give users a clear explanation and a direct path back to safety.`,guidance:[`State the error code and a plain-language explanation — avoid technical jargon.`,`Always provide a go-home action alongside a go-back option.`,`Match the error page visual weight to the rest of the product, not a generic OS page.`]},"privacy-policy":{section:`Templates`,title:`Privacy Policy`,description:`A structured legal document page with section headings, readable prose, and clear separators. Designed to remain accessible and scannable without sacrificing completeness.`,guidance:[`Use headings to break long policy text into scannable sections.`,`Link directly to the relevant section from any consent flow that references the policy.`,`Version and date the policy at the top so users know when it was last updated.`]},"terms-of-service":{section:`Templates`,title:`Terms of Service`,description:`A service terms page with clear headings, plain-language obligations, and a layout that stays readable from narrow phones to wide desktop viewports.`,guidance:[`State the usage permission, limitations, and disclaimer in separate sections to reduce legal ambiguity.`,`Keep the document scannable with short paragraphs and a compact summary rail.`,`Link to the terms directly from registration and pricing flows so consent is contextual.`]},"code-block":{section:`Components`,title:`Code Block`,description:`A syntax-highlighted, read-only code display with optional filename label. Use it to render installation snippets, usage examples, or any formatted code string.`,guidance:[`Set the language prop to the language of the code — tsx, bash, json, etc. — for correct highlighting.`,`Pass a filename to give readers context on where the snippet belongs in a project.`,`Keep code snippets minimal; show only the lines needed to illustrate the concept being documented.`],props:[{prop:`code`,type:`string`,required:!0,description:`Source code string to highlight.`},{prop:`language`,type:`"tsx" | "typescript" | "javascript" | "jsx" | "bash" | "json" | "markup"`,default:`"tsx"`,description:`Prism language identifier.`},{prop:`copyLabel`,type:`string`,required:!0,description:`Label for the copy button (idle state).`},{prop:`copiedLabel`,type:`string`,required:!0,description:`Label for the copy button (copied state).`},{prop:`onCopy`,type:`(code: string) => Promise<boolean> | boolean`,required:!0,description:`Copy handler returning success status.`}]},"language-switcher":{section:`Components`,title:`Language Switcher`,description:`A locale toggle component that updates the entire UI copy when clicked. Drop it into any topbar or settings area — the i18n provider broadcasts the change automatically.`,guidance:[`Place the switcher in a persistent surface (topbar or settings page) so users can find it from anywhere.`,`The switcher reflects the current locale; no extra state wiring is needed beyond the i18n provider.`,`Use the inline variant for topbars and the default variant for settings pages to match visual density.`],props:[{prop:`variant`,type:`"inline" | "sidebar"`,default:`"inline"`,description:`"inline" for topbars; "sidebar" for sidebar footer.`}]},"scroll-area":{section:`Layout`,title:`ScrollArea`,description:`A unified scrollable container. Defaults to overlay scrollbars that float above content without taking layout space. Use variant="native" for browser-native scrollbars.`,guidance:[`ScrollArea has two variants — "overlay" (default, custom floating scrollbar that auto-hides) and "native" (zero JS overhead, browser-native scrollbar).`,`Set maxHeight to constrain vertical overflow — all content outside the viewport scrolls inside.`,`Set maxWidth to constrain horizontal overflow, useful for wide tables or code blocks.`,`Pass a number for pixels (e.g. 200) or a string like "50vh" / "100%" for relative sizing.`,`Overlay mode supports drag-to-scroll: click and drag on the scrollbar thumb.`,`ScrollArea is purely presentational; it does not virtualize or lazy-render children.`],props:[{prop:`variant`,type:`"overlay" | "native"`,default:`"overlay"`,description:`Scrollbar style. "overlay" uses a custom floating scrollbar; "native" uses the browser default.`},{prop:`maxHeight`,type:`string | number`,description:`Maximum height before content scrolls. Numbers are treated as pixels.`},{prop:`maxWidth`,type:`string | number`,description:`Maximum width before content scrolls. Numbers are treated as pixels.`},{prop:`children`,type:`ReactNode`,required:!0,description:`Content inside the scrollable viewport.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},separator:{section:`Layout`,title:`Separator`,description:`A visual divider that separates content sections. Renders as an <hr> element with horizontal or vertical orientation.`,guidance:[`Use horizontal separators between stacked sections; use vertical ones in toolbars or inline contexts.`,`The decorative prop controls the role attribute — set to false when the separator conveys semantic meaning.`,`Vertical separators need an explicit height to render visibly.`],props:[{prop:`orientation`,type:`"horizontal" | "vertical"`,default:`"horizontal"`,description:`The axis of the separator line.`},{prop:`decorative`,type:`boolean`,default:`true`,description:`When true, sets role="none"; when false, role="separator" with aria-orientation.`}]},timeline:{section:`Components`,title:`Timeline`,description:`A vertical list of chronologically ordered events. Each item shows a title, optional description, time, icon, and status indicator.`,guidance:[`Use Timeline for activity feeds, order tracking, or deployment history.`,`Set status to "success", "warning", "danger", or "info" to color the timeline dot.`,`Pass an icon on individual items to replace the default dot icon.`],props:[{prop:`items`,type:`TimelineItem[]`,required:!0,description:`Array of timeline entries.`},{prop:`items[].title`,type:`string`,required:!0,description:`Event title.`},{prop:`items[].description`,type:`string`,description:`Optional event description.`},{prop:`items[].time`,type:`string`,description:`Timestamp or date label.`},{prop:`items[].icon`,type:`ReactNode`,description:`Custom icon replacing the default dot.`},{prop:`items[].status`,type:`"default" | "success" | "warning" | "danger" | "info"`,description:`Visual status color for the dot.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},"tree-view":{section:`Components`,title:`Tree View`,description:`A hierarchical tree control with expandable/collapsible nodes, keyboard navigation, and optional selection state. Suitable for file browsers, organization charts, or nested settings.`,guidance:[`Use defaultExpanded to pre-expand certain nodes on initial render.`,`Each node requires a unique id for selection and expansion tracking.`,`TreeView supports controlled (selected/expanded) or uncontrolled modes via the corresponding props.`,`Disabled nodes cannot be selected or expanded but remain visible.`],props:[{prop:`nodes`,type:`TreeNode[]`,required:!0,description:`Root-level tree nodes.`},{prop:`selected`,type:`string`,description:`Controlled selected node id.`},{prop:`defaultSelected`,type:`string`,description:`Uncontrolled initial selected node id.`},{prop:`onSelect`,type:`(id: string, node: TreeNode) => void`,description:`Called when a node is selected.`},{prop:`expanded`,type:`string[]`,description:`Controlled expanded node ids.`},{prop:`defaultExpanded`,type:`string[]`,description:`Uncontrolled initial expanded node ids.`},{prop:`onExpandedChange`,type:`(ids: string[]) => void`,description:`Called when expansion state changes.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},carousel:{section:`Components`,title:`Carousel`,description:`A slide-based carousel with dot indicators, arrow navigation, optional auto-play, and loop support. Each slide accepts arbitrary React content.`,guidance:[`Set autoPlay for unattended rotation — useful for hero banners or kiosks.`,`Disable loop for linear walkthroughs where users should not wrap around.`,`Carousel respects controlled index via the index prop for external pagination sync.`,`Hide arrows or dots with showArrows / showDots when building minimal variants.`],props:[{prop:`items`,type:`ReactNode[]`,required:!0,description:`Array of slide content.`},{prop:`defaultIndex`,type:`number`,default:`0`,description:`Initial slide index (uncontrolled).`},{prop:`index`,type:`number`,description:`Controlled current slide index.`},{prop:`onIndexChange`,type:`(index: number) => void`,description:`Called when the active slide changes.`},{prop:`autoPlay`,type:`boolean`,default:`false`,description:`Automatically advance slides on an interval.`},{prop:`interval`,type:`number`,default:`3000`,description:`Auto-play interval in milliseconds.`},{prop:`loop`,type:`boolean`,default:`true`,description:`Wrap from last slide back to first.`},{prop:`showDots`,type:`boolean`,default:`true`,description:`Show dot indicators.`},{prop:`showArrows`,type:`boolean`,default:`true`,description:`Show prev/next arrow buttons.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},toggle:{section:`Forms`,title:`Toggle`,description:`A two-state button that toggles between pressed and unpressed. ToggleGroup extends this to single/multiple selection among a set of options.`,guidance:[`Use Toggle for toolbar toggles (bold/italic, filter pills) and ToggleGroup for view mode switching.`,`ToggleGroup type="single" behaves like a radio group; type="multiple" allows any combination.`,`Both controlled (pressed/value) and uncontrolled (defaultPressed/defaultValue) modes are supported.`],props:[{prop:`Toggle.pressed`,type:`boolean`,description:`Controlled pressed state.`},{prop:`Toggle.defaultPressed`,type:`boolean`,default:`false`,description:`Uncontrolled initial pressed state.`},{prop:`Toggle.onPressedChange`,type:`(pressed: boolean) => void`,description:`Called when pressed state changes.`},{prop:`Toggle.size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Button size.`},{prop:`Toggle.children`,type:`ReactNode`,required:!0,description:`Toggle button content (icon or text).`},{prop:`ToggleGroup.items`,type:`ToggleGroupItem[]`,required:!0,description:`Array of toggle options.`},{prop:`ToggleGroup.value`,type:`string | string[]`,description:`Controlled selection value.`},{prop:`ToggleGroup.defaultValue`,type:`string | string[]`,description:`Uncontrolled initial selection.`},{prop:`ToggleGroup.onValueChange`,type:`(value: string | string[]) => void`,description:`Called when selection changes.`},{prop:`ToggleGroup.type`,type:`"single" | "multiple"`,default:`"single"`,description:`Selection mode.`},{prop:`ToggleGroup.size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Toggle group size preset.`},{prop:`ToggleGroup.className`,type:`string`,description:`Additional CSS class names.`},{prop:`ToggleGroupItem.value`,type:`string`,required:!0,description:`Unique item value.`},{prop:`ToggleGroupItem.label`,type:`ReactNode`,required:!0,description:`Item display content.`},{prop:`ToggleGroupItem.disabled`,type:`boolean`,description:`Disable the item.`}]},rating:{section:`Forms`,title:`Rating`,description:`A star-based rating input that supports whole and half-star precision, controlled/uncontrolled modes, and read-only or disabled states.`,guidance:[`Set allowHalf to permit half-star precision for detailed feedback.`,`Use readOnly for display-only ratings (historical averages) and disabled when interaction should be blocked entirely.`,`The size prop adjusts star dimensions for different visual contexts.`],props:[{prop:`value`,type:`number`,description:`Controlled rating value.`},{prop:`defaultValue`,type:`number`,default:`0`,description:`Uncontrolled initial value.`},{prop:`onChange`,type:`(value: number) => void`,description:`Called when the rating changes.`},{prop:`max`,type:`number`,default:`5`,description:`Maximum number of stars.`},{prop:`allowHalf`,type:`boolean`,default:`false`,description:`Allow half-star values.`},{prop:`disabled`,type:`boolean`,description:`Disable interaction.`},{prop:`readOnly`,type:`boolean`,description:`Display-only mode.`},{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`Star size.`},{prop:`label`,type:`string`,description:`Accessible label for the rating group.`},{prop:`className`,type:`string`,description:`Additional CSS class names.`}]},label:{section:`Forms`,title:`Label`,description:`A styled <label> element with an optional required indicator. Use it alongside any form control to provide accessible labelling.`,guidance:[`Always associate a Label with its form control — either by wrapping the input or using htmlFor.`,`Set required to automatically append a red asterisk after the label text.`,`Label is a thin wrapper; it passes all standard label attributes to the underlying element.`],props:[{prop:`required`,type:`boolean`,description:`Show a required indicator (red asterisk) after the label text.`},{prop:`children`,type:`ReactNode`,required:!0,description:`Label text content.`}]},avatar:{section:`Content`,title:`Avatar`,description:`Displays a user avatar with image, fallback initials, or a placeholder icon. Supports multiple sizes and shapes.`,guidance:[`Always provide an accessible label via the name or alt prop.`,`The src prop accepts an image URL; on load failure it falls back to initials or fallback text.`,`Initials are generated from the name prop (up to 2 characters).`,`The circle shape is the default; use square for data-dense layouts.`],props:[{prop:`src`,type:`string`,description:`Image URL for the avatar.`},{prop:`name`,type:`string`,description:`User name used for initials and accessible label.`},{prop:`size`,type:`"xs" | "sm" | "md" | "lg" | "xl"`,default:`"md"`,description:`Avatar size.`},{prop:`shape`,type:`"circle" | "square"`,default:`"circle"`,description:`Avatar shape.`},{prop:`fallback`,type:`string`,description:`Custom fallback text when no image or name is provided.`}]},badge:{section:`Content`,title:`Badge`,description:`A compact label for status, category, or metadata. Use it inline with text or inside buttons, cards, and table cells.`,guidance:[`Use badges for compact status or category metadata, not decoration.`,`The accent variant is reserved for the primary brand color; success and warning convey semantic states.`,`Badges are inline elements — they flow naturally alongside text and other inline content.`],props:[{prop:`variant`,type:`"neutral" | "accent" | "success" | "warning"`,default:`"neutral"`,description:`Visual style variant.`}]},skeleton:{section:`Content`,title:`Skeleton`,description:`A placeholder that mimics content shape while data loads. Supports text, rectangle, and circle variants, as well as multi-line text blocks.`,guidance:[`Match the skeleton shape to the real content to reduce layout shift.`,`Use variant="text" with lines > 1 to simulate a paragraph placeholder.`,`The last line of a multi-line text skeleton is shorter (70% width) to look more natural.`],props:[{prop:`variant`,type:`"text" | "rect" | "circle"`,default:`"rect"`,description:`Shape variant.`},{prop:`width`,type:`string | number`,description:`Width. Numbers are treated as pixels.`},{prop:`height`,type:`string | number`,description:`Height. Numbers are treated as pixels.`},{prop:`lines`,type:`number`,default:`1`,description:`Number of lines for text variant.`}]},typography:{section:`Content`,title:`Typography`,description:`Heading and Text provide the core typography system. Heading renders <h1>-<h6> with level-based sizing; Text renders <p>, <span>, or <div> with variant, size, and weight options.`,guidance:[`Use Heading for section titles and hierarchical content structure.`,`Use Text with variant="secondary" or "muted" for lower-emphasis content.`,`The truncate prop clips overflow with an ellipsis — useful for table cells and sidebars.`,`Set the as prop on Heading to override the rendered HTML element without changing visual style.`],props:[{prop:`Heading.level`,type:`1 | 2 | 3 | 4 | 5 | 6`,default:`2`,description:`Heading level determines font size.`},{prop:`Heading.as`,type:`"h1" | "h2" | "h3" | "h4" | "h5" | "h6"`,description:`Override the rendered HTML element.`},{prop:`Heading.variant`,type:`"default" | "secondary"`,default:`"default"`,description:`Visual variant.`},{prop:`Heading.weight`,type:`"normal" | "medium" | "semibold" | "bold"`,default:`"bold"`,description:`Font weight.`},{prop:`Heading.truncate`,type:`boolean`,default:`false`,description:`Truncate with ellipsis on overflow.`},{prop:`Text.as`,type:`"p" | "span" | "div"`,default:`"p"`,description:`Rendered HTML element.`},{prop:`Text.variant`,type:`"default" | "secondary" | "muted" | "danger" | "success"`,default:`"default"`,description:`Color variant.`},{prop:`Text.size`,type:`"sm" | "base" | "lg" | "xl"`,default:`"base"`,description:`Font size.`},{prop:`Text.weight`,type:`"normal" | "medium" | "semibold" | "bold"`,default:`"normal"`,description:`Font weight.`},{prop:`Text.truncate`,type:`boolean`,default:`false`,description:`Truncate with ellipsis on overflow.`}]},"typography-base":{section:`Content`,title:`Typography Base`,description:`Ready-to-use typography CSS utilities and React components inspired by Bootstrap naming conventions. Ideal for articles, documentation, and API reference pages.`,guidance:[`Typography styles are loaded automatically when you import "vxui-re".`,`Use className directly (e.g., vx-article, vx-section) or use React components (e.g., Article, Section).`,`All colors use CSS variables and automatically adapt to light/dark themes.`,`Built-in responsive breakpoints ensure a consistent experience on mobile and desktop.`],props:[{prop:`Article`,type:`Component`,description:`Article container with standard document layout.`},{prop:`ArticleHeader`,type:`Component`,description:`Article header containing title and description.`},{prop:`ArticleTitle`,type:`Component`,description:`Article title (h1).`},{prop:`ArticleBody`,type:`Component`,description:`Article body container.`},{prop:`Section`,type:`Component`,description:`Document section with anchor support.`},{prop:`SectionHeading`,type:`Component`,description:`Section heading (h2) with optional anchor link.`},{prop:`Pager`,type:`Component`,description:`Previous/next page navigation.`},{prop:`PropsTable`,type:`Component`,description:`API props reference table.`},{prop:`ArticleEmptyState`,type:`Component`,description:`Empty state display.`},{prop:`StatsGrid`,type:`Component`,description:`Statistics metrics grid.`}]},"date-pickers":{section:`Forms`,title:`Date Pickers`,description:`DatePicker provides a text-input with a popup calendar for date selection. Calendar is the standalone month-grid component used internally by DatePicker.`,guidance:[`Use DatePicker for form fields; use Calendar directly when embedding a date grid into a custom widget.`,`Set min/max to constrain the selectable date range.`,`The weekStartsOnMonday prop changes the first day of the week — default is Sunday.`,`DatePicker falls back to a Sheet-based layout on mobile viewports automatically.`],props:[{prop:`DatePicker.value`,type:`Date`,description:`Controlled selected date.`},{prop:`DatePicker.defaultValue`,type:`Date`,description:`Uncontrolled initial date.`},{prop:`DatePicker.onChange`,type:`(date: Date | undefined) => void`,description:`Called when the date changes.`},{prop:`DatePicker.label`,type:`string`,description:`Input label.`},{prop:`DatePicker.hint`,type:`string`,description:`Helper text below the input.`},{prop:`DatePicker.error`,type:`string`,description:`Error message.`},{prop:`DatePicker.min`,type:`Date`,description:`Minimum selectable date.`},{prop:`DatePicker.max`,type:`Date`,description:`Maximum selectable date.`},{prop:`DatePicker.disabled`,type:`boolean`,description:`Disable the date picker.`},{prop:`DatePicker.weekStartsOnMonday`,type:`boolean`,default:`false`,description:`Start the week on Monday instead of Sunday.`},{prop:`Calendar.value`,type:`Date`,description:`Controlled selected date.`},{prop:`Calendar.defaultValue`,type:`Date`,description:`Uncontrolled initial date.`},{prop:`Calendar.onChange`,type:`(date: Date) => void`,description:`Called when a date is clicked.`},{prop:`Calendar.min`,type:`Date`,description:`Minimum selectable date.`},{prop:`Calendar.max`,type:`Date`,description:`Maximum selectable date.`},{prop:`Calendar.weekStartsOnMonday`,type:`boolean`,default:`false`,description:`Start the week on Monday.`}]},card:{section:`Content`,title:`Card`,description:`A flexible content container with multiple visual variants. Use Card as the outer wrapper, then compose CardHeader, CardTitle, CardDescription, and CardContent inside.`,guidance:[`Use the elevated variant for interactive cards that invite clicks.`,`Set hoverable to add a lift effect on hover — ideal for gallery or dashboard tiles.`,`Padding defaults to the card’s internal spacing; use the padding prop to adjust for dense or spacious layouts.`,`Card itself is a <section> — always include a heading (CardTitle) for accessibility.`],props:[{prop:`variant`,type:`"default" | "flat" | "elevated" | "outlined" | "ghost" | "filled"`,default:`"default"`,description:`Visual style preset.`},{prop:`padding`,type:`"none" | "sm" | "md" | "lg"`,description:`Inner padding size. Defaults to the card's internal spacing.`},{prop:`hoverable`,type:`boolean`,default:`false`,description:`Add a hover lift effect — useful for clickable cards.`}]},form:{section:`Forms`,title:`Form`,description:`A form composition system built from Form, FormField, FormLabel, FormDescription, FormMessage, and useFormField. Works with any input component to provide consistent label, hint, and error layout.`,guidance:[`Wrap each logical field group in a FormField to share error state via context.`,`Use FormLabel with required to show a required indicator automatically.`,`FormMessage renders the error from FormField context — no manual prop drilling needed.`,`Form sets noValidate by default; handle validation yourself or with a library.`],props:[{prop:`Form`,type:`—`,description:`Standard <form> wrapper with noValidate and vx-form class.`},{prop:`FormField`,type:`—`,description:`Wraps a field group; provides error context to FormMessage.`},{prop:`FormField.error`,type:`string`,description:`Error message shown by FormMessage in this field.`},{prop:`FormLabel`,type:`—`,description:`Renders a <label> with an optional required asterisk.`},{prop:`FormLabel.required`,type:`boolean`,description:`Shows a red asterisk after the label text.`},{prop:`FormDescription`,type:`—`,description:`Helper text rendered below the label.`},{prop:`FormMessage`,type:`—`,description:`Error or helper message; auto-reads error from FormField context.`},{prop:`useFormField`,type:`() => { error?: string }`,description:`Hook to read the current field's error context.`}]},sheet:{section:`Overlays`,title:`Sheet`,description:`A slide-out panel that enters from the left, right, top, or bottom edge. Supports title, description, optional confirm action, and controlled or uncontrolled open state.`,guidance:[`Use Sheet for secondary content that does not require a full page navigation.`,`Set side to "right" for detail panels, "bottom" for mobile-like action sheets.`,`The variant="action" preset hides the close button and shows a confirm footer — suitable for destructive or confirm actions.`,`Control open state with the open/onOpenChange props or use defaultOpen for uncontrolled usage.`],props:[{prop:`trigger`,type:`ReactNode`,description:`Element that opens the sheet on click.`},{prop:`children`,type:`ReactNode`,required:!0,description:`Sheet body content.`},{prop:`side`,type:`"left" | "right" | "top" | "bottom"`,default:`"right"`,description:`Edge from which the sheet slides in.`},{prop:`variant`,type:`"default" | "action"`,default:`"default"`,description:`"action" hides close button and shows a confirm footer.`},{prop:`title`,type:`ReactNode`,description:`Sheet header title.`},{prop:`description`,type:`ReactNode`,description:`Sheet header description.`},{prop:`header`,type:`ReactNode`,description:`Custom header content (replaces title/description).`},{prop:`footer`,type:`ReactNode`,description:`Custom footer content.`},{prop:`open`,type:`boolean`,description:`Controlled open state.`},{prop:`defaultOpen`,type:`boolean`,description:`Uncontrolled initial open state.`},{prop:`onOpenChange`,type:`(open: boolean) => void`,description:`Callback when open state changes.`},{prop:`showClose`,type:`boolean`,default:`true`,description:`Show the close button in the header.`},{prop:`closeOnOverlayClick`,type:`boolean`,default:`true`,description:`Close when clicking the backdrop.`},{prop:`showConfirm`,type:`boolean`,default:`false`,description:`Show a confirm button in the footer.`},{prop:`confirmText`,type:`string`,default:`"Confirm"`,description:`Confirm button label.`},{prop:`confirmDisabled`,type:`boolean`,default:`false`,description:`Disable the confirm button.`},{prop:`onConfirm`,type:`() => void`,description:`Callback when confirm is clicked.`},{prop:`width`,type:`number`,description:`Custom panel width in pixels.`}]},"vxui-provider":{section:`Getting Started`,title:`VXUI Provider`,description:`A combined provider that wraps ThemeProvider, ViewportProvider, and ToastProvider into a single component. Use it at the app root to reduce nesting.`,guidance:[`VXUIProvider replaces the need to manually nest ThemeProvider + ViewportProvider + ToastProvider.`,`Pass themes, defaultTheme, and storageKey exactly as you would to ThemeProvider.`,`The component is fully optional — you can use the individual providers separately if you need more control.`],props:[{prop:`themes`,type:`ThemeRegistry`,description:`Theme configuration passed to ThemeProvider.`},{prop:`defaultTheme`,type:`string`,description:`Default theme name.`},{prop:`storageKey`,type:`string`,default:`"vxui-theme"`,description:`localStorage key for persisting the theme choice.`},{prop:`children`,type:`ReactNode`,required:!0,description:`Application content.`}]},viewport:{section:`Getting Started`,title:`Viewport`,description:`ViewportProvider monitors screen dimensions and exposes device type, orientation, and breakpoint information via the useViewport hook.`,guidance:[`ViewportProvider uses physical screen size (window.screen.width) for device type classification.`,`A screen width ≤ 1000px is classified as tablet or phone (distinguished by aspect ratio).`,`useViewport() returns isPhone, isTablet, isDesktop, isTabletPortrait, and raw screenWidth/screenHeight.`,`Unlike CSS breakpoints, device detection uses physical screen size so a split-screen tablet is still detected as "tablet".`],props:[{prop:`children`,type:`ReactNode`,required:!0,description:`Application content.`},{prop:`useViewport()`,type:`ViewportContextValue`,description:`Hook returning viewport state.`},{prop:`useViewport().viewport`,type:`"phone" | "tablet" | "desktop"`,description:`Current device type classification.`},{prop:`useViewport().isPhone`,type:`boolean`,description:`True when device is a phone (narrow screen).`},{prop:`useViewport().isTablet`,type:`boolean`,description:`True when device is a tablet.`},{prop:`useViewport().isDesktop`,type:`boolean`,description:`True when device is a desktop (width > 1000px).`},{prop:`useViewport().isTabletPortrait`,type:`boolean`,description:`True when tablet AND portrait orientation.`},{prop:`useViewport().screenWidth`,type:`number`,description:`Physical screen width in CSS pixels.`},{prop:`useViewport().screenHeight`,type:`number`,description:`Physical screen height in CSS pixels.`}]},constants:{section:`Getting Started`,title:`Constants`,description:`Layout breakpoints and device detection thresholds used by the responsive system. These constants are available for custom responsive logic.`,guidance:[`BREAKPOINTS.sm (640) is the phone-to-tablet CSS viewport breakpoint.`,`BREAKPOINTS.md (768) is the tablet-to-desktop CSS viewport breakpoint.`,`BREAKPOINTS.lg (1000) is used as PHONE_MAX_WIDTH for device type detection.`,`PHONE_ASPECT_RATIO_THRESHOLD (0.7) and TABLET_ASPECT_RATIO_THRESHOLD (0.75) distinguish phone vs tablet by aspect ratio.`,`CSS layout breakpoints and device detection thresholds serve different purposes and have different values.`],props:[{prop:`BREAKPOINTS.sm`,type:`640`,description:`CSS layout breakpoint for phone-to-tablet (max-width: 640px).`},{prop:`BREAKPOINTS.md`,type:`768`,description:`CSS layout breakpoint for tablet (max-width: 768px).`},{prop:`BREAKPOINTS.lg`,type:`1000`,description:`CSS layout breakpoint for desktop (min-width: 1000px).`},{prop:`PHONE_MAX_WIDTH`,type:`1000`,description:`Physical screen width threshold for device detection.`},{prop:`PHONE_ASPECT_RATIO_THRESHOLD`,type:`0.7`,description:`Aspect ratio (w/h) threshold — below this value the device is classified as phone.`},{prop:`TABLET_ASPECT_RATIO_THRESHOLD`,type:`0.75`,description:`Aspect ratio threshold used as the upper bound for tablet classification.`}]},calendar:{section:`Forms`,title:`Calendar`,description:`A month-based calendar view for selecting dates. Supports controlled and uncontrolled modes, min/max date constraints, and configurable start-of-week.`,guidance:[`Use Calendar standalone or inside DatePicker for a date selection experience.`,`Set value for controlled mode or defaultValue for uncontrolled mode.`,`Use min and max to restrict the selectable date range.`,`Set weekStartsOnMonday if your locale requires weeks to start on Monday.`],props:[{prop:`value`,type:`Date`,description:`Controlled selected date.`},{prop:`defaultValue`,type:`Date`,description:`Uncontrolled initial selected date.`},{prop:`onChange`,type:`(date: Date) => void`,description:`Called when a day is selected.`},{prop:`min`,type:`Date`,description:`Minimum selectable date.`},{prop:`max`,type:`Date`,description:`Maximum selectable date.`},{prop:`weekStartsOnMonday`,type:`boolean`,default:`false`,description:`Start the week on Monday instead of Sunday.`},{prop:`className`,type:`string`,description:`Additional CSS class.`}]},"bottom-nav":{section:`Responsive`,title:`Bottom Nav`,description:`A mobile-style bottom navigation bar with support for active states, badges, and submenu popups. Ideal for phone-sized viewports where sidebar navigation is impractical.`,guidance:[`Use BottomNav inside MobileShell for a native mobile navigation experience.`,`Each item requires an icon and label — icons are rendered above labels.`,`Set the submenu prop on an item to show a popup menu instead of direct navigation.`,`Badges support numeric values and string overflow (e.g., "99+").`,`The active item is marked with aria-current="page" for accessibility.`],props:[{prop:`items`,type:`BottomNavItem[]`,required:!0,description:`Array of navigation items.`},{prop:`items[].key`,type:`string`,required:!0,description:`Unique item key.`},{prop:`items[].label`,type:`string`,required:!0,description:`Display label below the icon.`},{prop:`items[].icon`,type:`ReactNode`,required:!0,description:`Icon rendered above the label.`},{prop:`items[].badge`,type:`string | number`,description:`Badge value displayed on the icon corner.`},{prop:`items[].active`,type:`boolean`,description:`Mark this item as the active/current page.`},{prop:`items[].onSelect`,type:`() => void`,description:`Click handler (ignored if submenu is set).`},{prop:`items[].submenu`,type:`BottomNavSubMenuItem[]`,description:`Submenu items shown on click as a popup.`},{prop:`className`,type:`string`,description:`Additional CSS class.`}]}}},rc={en:nc,zh:{locale:`zh`,label:`中文`,searchPlaceholder:`搜索组件、页面、关键词…`,searchAriaLabel:`搜索`,searchEmpty:e=>`未找到与"${e}"匹配的结果`,searchNavigate:`导航`,searchGo:`跳转`,searchClose:`关闭`,sidebarCollapse:`收起`,sidebarExpand:`展开`,sidebarCloseLabel:`关闭侧边栏`,searchTrigger:`搜索`,versionLabel:tc,mobilePreview:`移动端预览`,nav:{gettingStarted:`开始使用`,layout:`布局`,content:`内容`,forms:`表单`,components:`组件`,overlays:`浮层`,navigation:`导航`,feedback:`反馈`,templates:`模板`,mobile:`响应式`},pages:{introduction:`简介`,"quick-start":`快速开始`,"shell-sidebar":`框架与侧边栏`,"grid-page":`网格与页面`,"nav-layout":`导航与布局`,"scroll-area":`滚动区域`,separator:`分隔线`,resizable:`可拖拽面板`,typography:`排版`,"typography-base":`排版基础`,badge:`徽章`,avatar:`头像`,skeleton:`骨架屏`,card:`卡片`,"code-block":`代码块`,"language-switcher":`语言切换器`,button:`按钮`,elements:`基础元素`,"form-controls":`表单控件`,"form-inputs":`表单输入`,toggle:`开关按钮`,rating:`评分`,label:`标签`,"date-pickers":`日期选择器`,"file-upload":`文件上传`,"color-picker":`颜色选择器`,form:`表单组合`,accordion:`折叠面板`,tabs:`标签页`,breadcrumb:`面包屑`,pagination:`分页`,stepper:`步骤条`,progress:`进度条`,spinner:`加载器`,alert:`提示`,toasts:`消息提示`,table:`表格`,"data-list":`数据列表`,timeline:`时间线`,"tree-view":`树形视图`,carousel:`轮播`,"empty-states":`空状态`,overlays:`浮层`,"data-display":`数据展示`,navigation:`导航`,feedback:`反馈组件`,dialog:`弹窗`,sheet:`侧滑面板`,popover:`弹出框`,tooltip:`工具提示`,"hover-card":`悬停卡片`,"dropdown-menu":`下拉菜单`,"context-menu":`右键菜单`,"command-palette":`命令面板`,"navigation-menu":`导航菜单`,menubar:`菜单栏`,mobile:`移动端组件`,"mobile-list":`移动端列表`,image:`图片`,"pin-input":`验证码输入`,descriptions:`描述列表`,notification:`通知`,result:`结果页`,"home-page":`主页`,"login-page":`登录页`,"register-page":`注册页`,"error-page":`错误页`,"privacy-policy":`隐私政策`,"terms-of-service":`服务条款`,"vxui-provider":`VXUI Provider`,viewport:`视口`,constants:`常量`,calendar:`日历`,"bottom-nav":`底部导航`},docs:{guidance:`使用指南`,guidanceDesc:`保持实现简洁,让设计系统完成大部分视觉工作。`,preview:`预览`,previewDesc:`该区域在系统中呈现效果的精简示例。`,notes:`备注`,primaryTheme:`主色调`,primaryThemeDesc:`蓝灰色中性调将视觉重点保留给操作,而非装饰。`,tokenScale:`Token 体系`,tokenScaleDesc:`在引入页面特定样式之前,优先复用共享的 surface、border 和 text 变量。`,themeStudio:`主题工作室`,themeStudioDesc:`一次注册命名主题,用单个 key 即可切换所有组件。`,liveControls:`交互控件`,liveControlsDesc:`文档界面中仍有若干可复用的基础原语。`,searchDocs:`搜索文档`,searchDocsPlaceholder:`按钮、Token、布局…`,compactDensity:`紧凑模式`,compactDensityDesc:`收紧垂直间距,适合高密度操作界面。`,systemPreview:`系统预览`,openSection:`打开章节`},intro:{tagline:`一个轻量无依赖的 UI 框架,用于构建简洁的后台管理界面。设计 Token、组件和极简 SPA 运行时,统一在一套一致的视觉语言之下。`,getStarted:`开始使用`,browseComponents:`浏览组件`,atAGlance:`概览`,designTokens:`设计 Token`,designTokensLead:`所有颜色、间距和字体值均以 vx 命名空间下的 CSS 自定义属性暴露。一次注册命名的亮色和暗色主题,之后通过主题 key 即可切换整个框架。`,componentFamilies:`组件系列`},glance:{zeroDeps:`零依赖`,zeroDepsHint:`原始 shell 运行时无需构建流水线。`,components:`组件数`,componentsHint:`布局、表单、反馈和列表原语,一套搞定。`,coreCSS:`核心 CSS`,coreCSSHint:`中性 Token 和结构样式保持精简。`,darkMode:`深色模式`,darkModeHint:`语义变量让相同组件可在多主题下复用。`},tokens:{primary:`主色`,primaryDesc:`用于主要操作、活跃导航和强调的点缀色。`,surface:`表面色`,surfaceDesc:`文档卡片和框架区域的默认面板与内容背景色。`,border:`边框色`,borderDesc:`保持 UI 结构清晰且不增加视觉重量的轻量分隔色。`,text:`文字色`,textDesc:`用于标题、密集数据和正文的主前景色。`},families:{layout:`布局`,layoutDesc:`应用框架、固定顶栏、章节节奏和响应式内容框架。`,content:`内容展示`,contentDesc:`排版、徽章、头像、卡片和代码块。`,elements:`基础元素`,elementsDesc:`用于操作、元数据和结构化内容块的低调原语。`,forms:`表单`,formsDesc:`输入框、开关、对话框和字段组合模式。`,inputs:`输入类`,inputsDesc:`文本输入框、下拉选择、文本域和数字选择器。`,overlays:`浮层`,overlaysDesc:`弹窗、弹出框、工具提示和侧滑面板。`,navigation:`导航`,navigationDesc:`菜单、导航栏和面包屑。`,feedback:`反馈`,feedbackDesc:`短暂的消息提示与打断性确认流程。`},dataList:{name:`名称`,kind:`类型`,updated:`更新时间`},modeLabel:e=>{var t;return`${(t={light:`浅色`,dark:`深色`,black:`纯黑`}[e])==null?e:t}模式`},publicPages:{navLogin:`登录`,navSignup:`注册`,navDocs:`文档`,navLogout:`退出登录`,heroTag:`最新 · ${tc}`,heroTitle:`轻量 React 组件库`,heroLead:`零依赖 · 30+ 组件 · 内置主题与深色模式`,heroCta:`立即开始`,heroCtaAlt:`浏览文档`,previewLead:``,previewAccessTitle:`访问方式`,previewAccessMember:`登录后保留会话状态,随时回到你的工作区。`,previewAccessGuest:`无需登录,直接以访客身份访问文档。`,previewMobileTitle:`移动端适配`,previewMobileLead:`导航与认证布局在移动端自然适配。`,featuresSectionTitle:`为什么选择 vxUI`,feat1:`零依赖`,feat1Desc:`纯 CSS + TypeScript,无第三方依赖。`,feat2:`30+ 组件`,feat2Desc:`布局、表单、反馈和列表,一套搞定。`,feat3:`可主题化`,feat3Desc:`CSS 变量驱动,一键切换整套主题。`,feat4:`深色模式`,feat4Desc:`语义化 Token,浅色与深色主题均适配。`,footerCopy:`© 2026 vxUI. 保留所有权利。`,footerPrivacy:`隐私政策`,footerGithub:`GitHub`,footerWebsite:`官网`,loginTitle:`欢迎回来`,loginSubtitle:`登录以访问文档。`,loginEmail:`邮箱`,loginEmailPlaceholder:`you@example.com`,loginPassword:`密码`,loginPasswordPlaceholder:`至少 8 位字符`,loginCta:`登录`,loginNoAccount:`还没有账号?`,loginRegister:`注册`,loginGuest:`无需登录,直接继续 →`,rememberMe:`记住这台设备`,showPassword:`显示`,hidePassword:`隐藏`,authInfoTitle:`支持访客访问`,authInfoBody:`如果你只是想查看文档,可以不登录直接进入。登录仅用于演示持久化会话的真实流程。`,registerTitle:`创建账号`,registerSubtitle:`立即开始使用 vxUI。`,registerName:`姓名`,registerNamePlaceholder:`张三`,registerEmail:`邮箱`,registerEmailPlaceholder:`zhangsan@company.com`,registerPassword:`密码`,registerPasswordPlaceholder:`创建一个强密码`,registerTermsAgree:`我同意`,registerTermsLink:`服务条款`,registerTermsAnd:`和`,registerPrivacyLink:`隐私政策`,registerCta:`创建账号`,registerHasAccount:`已有账号?`,registerLogin:`登录`,registerGuest:`无需登录,直接继续 →`,validationNameRequired:`请输入你的姓名。`,validationNameShort:`姓名至少需要 2 个字符。`,validationEmailRequired:`请输入邮箱地址。`,validationEmailInvalid:`请输入有效的邮箱地址。`,validationPasswordRequired:`请输入密码。`,validationPasswordShort:`密码至少需要 8 位字符。`,validationTermsRequired:`创建账号前必须同意条款。`,sessionLoginTitle:`已登录`,sessionLoginBody:`你的会话已生效,现在可以以登录用户身份查看文档。`,sessionRegisterTitle:`账号已创建`,sessionRegisterBody:`示例账号已创建完成,文档后台现已可用。`,sessionGuestTitle:`当前为访客模式`,sessionGuestBody:`你正在无账号状态下浏览文档。`,sessionLogoutTitle:`已退出登录`,sessionLogoutBody:`持久化会话已清除,你已返回公共首页。`,signedInAs:`当前登录`,guestLabel:`访客`,backHome:`← 返回首页`,backToDocs:`返回文档`},pageDefs:{introduction:{section:`介绍`,title:`简介`,description:`一个轻量无依赖的 UI 框架,用于构建简洁的后台管理界面。设计 Token、组件和极简 SPA 运行时,统一在一套一致的视觉语言之下。`,guidance:[`先从框架和导航节奏开始,再对独立控件进行样式调整。`,`保持 Token 语义化,主题切换时无需逐页覆盖样式。`,`将文档、示例和生产界面视为同一套设计系统。`]},"quick-start":{section:`安装`,title:`快速开始`,description:`安装包,用 Provider 包裹应用,在组合业务页面前先挂载页面框架。`,guidance:[`在应用根组件附近统一引入共享样式表。`,`使用 AppShell 承载产品外壳,页面内容保持在 main 插槽内。`,`仅在应用需要时才添加 ThemeProvider 和 ToastProvider。`]},"shell-sidebar":{section:`组件`,title:`框架与侧边栏`,description:"Shell 负责侧边栏层级、固定顶栏间距和内容宽度。导航项支持通过 `children` 字段嵌套子菜单,点击父级项可展开或折叠子项。",guidance:[`保持导航标签简短,确保折叠模式下仍可快速扫读。`,`使用章节标题分隔页面分组,而非添加视觉噪音。`,"在导航项中添加 `children` 即可实现可展开子菜单;设置 `defaultOpen: true` 可默认展开。",`如果某子项为 active 状态,AppShell 会自动展开对应父级分组。`,'你可以通过 `sidebarWidth` 属性轻松配置侧边栏的固定宽度(例如 `sidebarWidth={280}` 或 `"18rem"`)。'],props:[{prop:`brand`,type:`string`,default:`"VXUI"`,description:`侧边栏顶部显示的品牌/产品名称。`},{prop:`brandCaption`,type:`string`,description:`品牌名称下方显示的次级说明文字。`},{prop:`brandIcon`,type:`ReactNode`,description:`侧边栏顶部渲染的 Logo 元素(图片或图标)。`},{prop:`title`,type:`string`,description:`顶栏中显示的页面标题。`},{prop:`description`,type:`string`,description:`顶栏标题下方的页面副标题/描述。`},{prop:`breadcrumb`,type:`ReactNode`,description:`顶栏中渲染的面包屑元素。`},{prop:`navSections`,type:`AppShellNavSection[]`,description:`按章节分组的结构化导航树。推荐优先使用此属性。`},{prop:`navItems`,type:`AppShellNavItem[]`,description:`平铺导航列表,自动归入单个无标题章节。`},{prop:`sidebarCollapsed`,type:`boolean`,default:`false`,description:`将侧边栏折叠为仅显示图标的窄轨模式。`},{prop:`sidebarWidth`,type:`number | string`,default:`240px`,description:`自定义侧边栏宽度,数字为 px 单位(如 280),也可传入 CSS 字符串(如 "18rem")。`},{prop:`density`,type:`"comfortable" | "compact"`,description:`布局密度。"compact" 收紧垂直间距,适合高密度操作界面。`},{prop:`headerActions`,type:`ReactNode`,description:`顶栏右侧操作区插槽(按钮、下拉菜单、用户菜单等)。`},{prop:`sidebarFooter`,type:`ReactNode`,description:`侧边栏底部内容插槽(用户信息、设置链接等)。`},{prop:`mobileNavOpen`,type:`boolean`,default:`false`,description:`控制移动端导航遮罩层是否显示。`},{prop:`onSidebarToggle`,type:`() => void`,description:`点击折叠/展开按钮时的回调。`},{prop:`onMobileNavToggle`,type:`() => void`,description:`移动端导航遮罩切换按钮的回调,提供后才会启用移动端导航。`},{prop:`children`,type:`ReactNode`,required:!0,description:`渲染在 ShellContent 内的主页面内容。`}]},"grid-page":{section:`组件`,title:`网格与页面`,description:`为卡片、Token 和文档块使用简单的响应式网格。页面表面应保持中性,由内容承载视觉重点。`,guidance:[`在密集文档界面中优先使用 12 至 16 像素的间距。`,`较大间距应保留给章节边界,而非每张卡片。`,`限制最大宽度,确保长段落保持可读性。`]},button:{section:`组件`,title:`按钮`,description:`按钮承担系统中的主操作层级。变体、尺寸和宽度应该直接表达操作意图,而不需要额外拼样式。`,guidance:[`在同一区域内,实心按钮通常只保留给一个主操作。`,`次级和幽灵按钮更适合辅助动作,避免和主操作竞争视觉优先级。`,`在移动端单列布局或堆叠表单中,优先使用 fullWidth 提升点击面积。`],props:[{prop:`variant`,type:`"solid" | "secondary" | "ghost" | "danger" | "outline" | "soft" | "danger-outline" | "primary-outline" | "gradient"`,default:`"solid"`,description:`按钮样式变体。`},{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`按钮尺寸预设。`},{prop:`fullWidth`,type:`boolean`,default:`false`,description:`拉伸填满容器宽度。`},{prop:`shape`,type:`"rect" | "square" | "pill" | "circle"`,default:`"rect"`,description:`按钮形状预设。`},{prop:`loading`,type:`boolean`,default:`false`,description:`显示加载旋转器并禁用按钮。`},{prop:`startIcon`,type:`ReactNode`,description:`左侧图标插槽。`},{prop:`endIcon`,type:`ReactNode`,description:`右侧图标插槽。`}]},elements:{section:`组件`,title:`基础元素`,description:`Button 构成操作的原子基础。其他原子组件(Badge、Text、Heading、CodeBlock、LanguageSwitcher)各有独立文档页,位于"内容展示"分类下。`,guidance:[`每个区域通常一个主操作就足够了。`,`使用 solid 变体作为区域内的主操作。`,`使用 secondary 或 ghost 变体作为辅助操作。`]},"form-controls":{section:`组件`,title:`表单控件`,description:`完整的表单原语集:单行输入框、多行文本域、可搜索单选下拉(Select)、带标签显示的多选下拉(MultiSelect)和时间选择器(TimePicker)。所有组件共享统一的 label / hint / error 布局体系。`,guidance:[`在管理界面中,表单控件始终应配有可见标签。`,"使用 Select 实现单选下拉;通过 `searchable={N}` 可设为仅当选项超过 N 条时显示搜索框。",`当用户需要从有限列表中选择多个值时,使用 MultiSelect。`,"TimePicker 支持 24 小时制,通过 `seconds` prop 可启用秒选择列。",`简短的辅助文本优于仅依赖 placeholder 的说明。`],props:[{prop:`Select.options`,type:`SelectOption[]`,required:!0,description:`可选项数组。`},{prop:`Select.value`,type:`string`,description:`受控选中值。`},{prop:`Select.defaultValue`,type:`string`,description:`非受控初始值。`},{prop:`Select.onChange`,type:`(value: string | undefined) => void`,description:`选中项变化时回调。`},{prop:`Select.placeholder`,type:`string`,default:`"Select..."`,description:`未选择时的占位文本。`},{prop:`Select.label`,type:`string`,description:`字段标签。`},{prop:`Select.hint`,type:`string`,description:`辅助文本。`},{prop:`Select.error`,type:`string`,description:`错误信息。`},{prop:`Select.disabled`,type:`boolean`,description:`禁用选择器。`},{prop:`Select.clearable`,type:`boolean`,default:`false`,description:`显示清除按钮。`},{prop:`Select.searchable`,type:`boolean | number`,default:`true`,description:`启用搜索。设为数字时超过该数量才显示搜索。`},{prop:`MultiSelect.options`,type:`MultiSelectOption[]`,required:!0,description:`可选项数组。`},{prop:`MultiSelect.value`,type:`string[]`,description:`受控选中值。`},{prop:`MultiSelect.defaultValue`,type:`string[]`,default:`[]`,description:`非受控初始值。`},{prop:`MultiSelect.onChange`,type:`(value: string[]) => void`,description:`选中项变化时回调。`},{prop:`MultiSelect.placeholder`,type:`string`,default:`"Select..."`,description:`未选择时的占位文本。`},{prop:`MultiSelect.label`,type:`string`,description:`字段标签。`},{prop:`MultiSelect.hint`,type:`string`,description:`辅助文本。`},{prop:`MultiSelect.error`,type:`string`,description:`错误信息。`},{prop:`MultiSelect.disabled`,type:`boolean`,description:`禁用多选。`},{prop:`MultiSelect.clearable`,type:`boolean`,default:`false`,description:`显示清除全部按钮。`},{prop:`MultiSelect.maxDisplay`,type:`number`,description:`最多可见标签数,超出显示 "+N more"。`},{prop:`Textarea.label`,type:`string`,description:`文本域上方的标签。`},{prop:`Textarea.hint`,type:`string`,description:`下方的辅助文本。`},{prop:`Textarea.resize`,type:`"none" | "vertical" | "horizontal" | "both"`,default:`"vertical"`,description:`CSS 缩放方向。`},{prop:`TimePicker.value`,type:`string`,description:`受控时间值(HH:MM 或 HH:MM:SS)。`},{prop:`TimePicker.defaultValue`,type:`string`,description:`非受控初始时间。`},{prop:`TimePicker.onChange`,type:`(value: string) => void`,description:`时间变化时回调。`},{prop:`TimePicker.label`,type:`string`,description:`字段标签。`},{prop:`TimePicker.seconds`,type:`boolean`,default:`false`,description:`显示秒列。`}]},navigation:{section:`组件`,title:`导航`,description:`导航模式应首先传达位置,其次才是可用的移动方向。Tabs 最适合在单个页面上下文中切换兄弟视图。`,guidance:[`在控件结构中镜像信息架构。`,`使活跃状态明显,而不仅依赖颜色。`,`避免在一个控件中混用路由导航和本地视图状态。`]},"data-list":{section:`组件`,title:`数据列表`,description:`列表和表格应优先考虑扫读效率而非装饰。使用宽松的对齐、轻量分隔线,仅在需要时增加操作密度。`,guidance:[`精确对齐表头和行内容,减少视觉偏移。`,`使用细微边框而非为每一行添加重型卡片外壳。`,`将破坏性操作保留在行操作组中,而非内联文字链接。`]},dialog:{section:`浮层`,title:`弹窗`,description:`中断用户操作以确认操作或展示关键信息的模态对话框。支持多种尺寸、放置选项和关闭按钮。`,guidance:[`在需要用户做出决定才能继续时使用 Dialog。`,`"sm" 适用于快速确认,"lg" 适用于表单或详细信息展示。`,`Dialog 会捕获焦点并阻止与背景页面的交互。`,`当内容超出最大高度时,主体区域会滚动,标题与底部按钮保持固定。`],props:[{prop:`trigger`,type:`ReactNode`,required:!0,description:`打开弹窗的触发元素。`},{prop:`title`,type:`string`,required:!0,description:`弹窗标题。`},{prop:`description`,type:`string`,description:`可选的描述文字。`},{prop:`children`,type:`ReactNode`,description:`弹窗主体内容。`},{prop:`footer`,type:`ReactNode`,description:`自定义页脚内容。`},{prop:`size`,type:`"sm" | "md" | "lg" | "xl" | "full"`,default:`"md"`,description:`弹窗宽度预设。`},{prop:`placement`,type:`"center" | "top" | "right" | "bottom" | "left" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "top-half" | "right-half" | "bottom-half" | "left-half"`,default:`"center"`,description:`弹窗放置位置。`},{prop:`scrollable`,type:`boolean`,default:`true`,description:`内容溢出时允许滚动。`},{prop:`closable`,type:`boolean`,default:`true`,description:`显示关闭按钮。`},{prop:`open`,type:`boolean`,description:`受控打开状态。`},{prop:`defaultOpen`,type:`boolean`,description:`非受控初始打开状态。`},{prop:`onOpenChange`,type:`(open: boolean) => void`,description:`打开状态变化时回调。`},{prop:`onConfirm`,type:`() => void`,description:`显示内置确认按钮。`},{prop:`confirmLabel`,type:`string`,default:`"Confirm"`,description:`确认按钮文本。`},{prop:`onCancel`,type:`() => void`,description:`显示内置取消按钮。`},{prop:`cancelLabel`,type:`string`,default:`"Cancel"`,description:`取消按钮文本。`},{prop:`confirmVariant`,type:`"solid" | "danger"`,default:`"solid"`,description:`确认按钮样式变体。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`},{prop:`padding`,type:`"none" | "sm" | "md" | "lg"`,default:`"md"`,description:`内容内边距预设。`}]},popover:{section:`浮层`,title:`弹出框`,description:`可包含表单、按钮和结构化内容的丰富弹出面板。与 Tooltip 不同,Popover 可包含交互元素,需要明确的关闭操作。`,guidance:[`Popover 可包含交互内容——表单、按钮、链接。`,`始终提供关闭机制(点击外部或显式关闭按钮)。`,`Tooltip 用于只读标签,Popover 用于交互内容。`],props:[{prop:`content`,type:`ReactNode`,required:!0,description:`弹出内容(表单、按钮、链接)。`},{prop:`children`,type:`ReactNode`,required:!0,description:`触发元素。`},{prop:`placement`,type:`"top" | "bottom" | "left" | "right"`,default:`"bottom"`,description:`弹出位置。`},{prop:`trigger`,type:`"click" | "hover"`,default:`"click"`,description:`触发方式。`},{prop:`open`,type:`boolean`,description:`受控打开状态。`},{prop:`onOpenChange`,type:`(open: boolean) => void`,description:`打开状态变化时回调。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},tooltip:{section:`浮层`,title:`工具提示`,description:`悬停或聚焦时出现的简短非交互标签,用于描述 UI 元素。仅包含文本——无链接、按钮或表单。`,guidance:[`Tooltip 仅用于补充文本——绝不可放入交互内容。`,`Tooltip 在悬停和聚焦时出现,无需关闭操作。`,`保持 Tooltip 文本简短——一到五个词为最佳。`],props:[{prop:`content`,type:`ReactNode`,required:!0,description:`工具提示文本内容。`},{prop:`children`,type:`ReactNode`,required:!0,description:`触发元素。`},{prop:`placement`,type:`"top" | "bottom" | "left" | "right"`,default:`"top"`,description:`提示位置。`},{prop:`delay`,type:`number`,default:`600`,description:`显示前延迟(毫秒)。`}]},"hover-card":{section:`浮层`,title:`悬停卡片`,description:`悬停时出现的卡片,展示链接元素的更丰富预览。适用于用户资料、文档预览或引用摘要。`,guidance:[`使用 HoverCard 预览相关内容,无需导航离开。`,`HoverCard 可包含比 Tooltip 更丰富的内容——图片、元数据、链接。`,`确保触发器区域足够大,避免卡片在到达前消失。`],props:[{prop:`content`,type:`ReactNode`,required:!0,description:`卡片内容(图片、元数据、链接)。`},{prop:`children`,type:`ReactNode`,required:!0,description:`触发元素。`},{prop:`placement`,type:`"top" | "bottom" | "left" | "right"`,default:`"bottom"`,description:`卡片位置。`},{prop:`delay`,type:`number`,default:`400`,description:`显示前延迟(毫秒)。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},"dropdown-menu":{section:`浮层`,title:`下拉菜单`,description:`点击时打开的菜单,展示分组操作或导航项列表。支持嵌套分组、键盘导航和禁用项。`,guidance:[`在带标签的菜单组中对相关操作分组。`,`在无关操作组之间使用分隔线。`,`支持键盘导航——方向键、Enter 和 Escape。`],props:[{prop:`trigger`,type:`ReactNode`,required:!0,description:`打开菜单的触发元素。`},{prop:`groups`,type:`DropdownMenuGroupProps[]`,description:`分组菜单项(组间显示分隔线)。`},{prop:`items`,type:`DropdownMenuItemProps[]`,description:`平铺菜单项列表。`},{prop:`align`,type:`"left" | "right"`,default:`"left"`,description:`菜单相对触发器的对齐方式。`},{prop:`open`,type:`boolean`,description:`受控打开状态。`},{prop:`onOpenChange`,type:`(open: boolean) => void`,description:`打开状态变化时回调。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},"context-menu":{section:`浮层`,title:`右键菜单`,description:`右键点击时出现的菜单,提供与点击元素相关的操作列表。支持与 DropdownMenu 相同的项和分组 API。`,guidance:[`使用 ContextMenu 公开用户通过右键发现的次要操作。`,`始终提供访问相同操作的替代方式(工具栏、按钮)。`,`保持菜单简短——长右键菜单难以快速扫读。`],props:[{prop:`groups`,type:`ContextMenuGroupProps[]`,description:`分组菜单项。`},{prop:`items`,type:`ContextMenuItemProps[]`,description:`平铺菜单项列表。`},{prop:`children`,type:`ReactNode`,required:!0,description:`触发右键菜单的元素。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},"command-palette":{section:`浮层`,title:`命令面板`,description:`键盘驱动的搜索浮层,让用户无需离开键盘即可跳转到任意页面或触发任意操作。全局挂载、绑定快捷键,传入扁平的条目列表即可使用。`,guidance:[`保持条目列表扁平且按标签可搜索——避免隐藏分类嵌套。`,`从与侧边栏相同的导航数据填充条目,保持两个入口同步。`,`绑定 ⌘K(Mac)或 Ctrl+K(Windows)快捷键。`],props:[{prop:`entries`,type:`SearchEntry[]`,required:!0,description:`可搜索条目的扁平列表。`},{prop:`open`,type:`boolean`,required:!0,description:`受控打开状态。`},{prop:`onClose`,type:`() => void`,required:!0,description:`面板关闭时回调。`},{prop:`onSelect`,type:`(key: string) => void`,required:!0,description:`条目被选中时回调。`},{prop:`placeholder`,type:`string`,default:`"Search components, pages, keywords..."`,description:`搜索输入框占位符。`},{prop:`ariaLabel`,type:`string`,default:`"Search"`,description:`对话框的无障碍标签。`},{prop:`labelNavigate`,type:`string`,default:`"Navigate"`,description:`底部导航提示文字。`},{prop:`labelGo`,type:`string`,default:`"Go"`,description:`底部确认提示文字。`},{prop:`labelClose`,type:`string`,default:`"Close"`,description:`底部关闭提示文字。`}]},"navigation-menu":{section:`导航`,title:`导航菜单`,description:`支持悬停时多级下拉菜单的横向导航栏。适用于具有嵌套章节的顶级站点导航。`,guidance:[`在具有多层内容的站点级导航中使用 NavigationMenu。`,`每个项可包含子项用于次级导航。`,`保持顶级项简短——每个一两个词即可。`],props:[{prop:`items`,type:`NavMenuItem[]`,required:!0,description:`顶级导航项。`},{prop:`NavMenuItem.label`,type:`string`,required:!0,description:`项显示文本。`},{prop:`NavMenuItem.href`,type:`string`,description:`链接 URL(无子项时使用)。`},{prop:`NavMenuItem.items`,type:`NavMenuSubItem[]`,description:`子菜单项。`}]},menubar:{section:`导航`,title:`菜单栏`,description:`通常用于应用级操作(文件、编辑、视图)的横向菜单栏。支持菜单间的键盘导航。`,guidance:[`Menubar 遵循桌面应用惯例——用于应用级命令菜单。`,`每个菜单可包含项、分组和分隔线。`,`方向键在菜单间导航;Escape 关闭当前菜单。`],props:[{prop:`menus`,type:`MenubarMenuProps[]`,required:!0,description:`顶级菜单定义。`},{prop:`MenubarMenu.label`,type:`string`,required:!0,description:`菜单触发标签。`},{prop:`MenubarMenu.groups`,type:`MenubarGroupProps[]`,description:`分组项(含分隔线)。`},{prop:`MenubarMenu.items`,type:`MenubarItemProps[]`,description:`平铺项列表。`},{prop:`MenubarItem.label`,type:`ReactNode`,required:!0,description:`项显示内容。`},{prop:`MenubarItem.icon`,type:`ReactNode`,description:`项图标。`},{prop:`MenubarItem.shortcut`,type:`string`,description:`快捷键文本。`},{prop:`MenubarItem.disabled`,type:`boolean`,description:`禁用该项。`},{prop:`MenubarItem.danger`,type:`boolean`,description:`应用危险样式。`},{prop:`MenubarItem.onClick`,type:`() => void`,description:`点击回调。`}]},resizable:{section:`布局`,title:`可拖拽面板`,description:`由 ResizablePanelGroup、ResizablePanel 和 ResizableHandle 组成的分割面板布局组件,支持水平和垂直排列且分隔线可拖拽。`,guidance:[`使用 ResizablePanelGroup 作为外层容器,内部嵌套 ResizablePanel 和 ResizableHandle。`,`direction 设为 "horizontal" 实现左右布局,"vertical" 实现上下布局。`,`面板之间的拖拽手柄可拖动调整各面板尺寸。`],props:[{prop:`ResizablePanelGroup.direction`,type:`"horizontal" | "vertical"`,default:`"horizontal"`,description:`面板布局方向。`},{prop:`ResizablePanelGroup.disabled`,type:`boolean`,default:`false`,description:`禁用所有分隔线拖拽。`},{prop:`ResizablePanel.defaultSize`,type:`number`,default:`50`,description:`初始大小百分比。`},{prop:`ResizablePanel.minSize`,type:`number`,default:`10`,description:`最小大小百分比。`},{prop:`ResizablePanel.maxSize`,type:`number`,default:`90`,description:`最大大小百分比。`}]},"file-upload":{section:`表单`,title:`文件上传`,description:`支持拖拽上传和点击浏览的文件上传区域。支持多文件上传、预览和移除。`,guidance:[`使用 multiple 属性接受多个文件——每个文件以预览卡片展示。`,`通过 onChange 回调获取上传文件的信息(名称、大小和文件对象)。`,`组件自带拖拽状态管理和视觉反馈。`],props:[{prop:`label`,type:`string`,description:`字段标签文本。`},{prop:`hint`,type:`string`,description:`上传区域下方的辅助文本。`},{prop:`error`,type:`string`,description:`错误信息文本。`},{prop:`accept`,type:`string`,description:`文件输入 accept 属性(如 ".png,.jpg")。`},{prop:`multiple`,type:`boolean`,default:`false`,description:`允许多文件选择。`},{prop:`maxSize`,type:`number`,description:`最大文件大小(字节)。`},{prop:`disabled`,type:`boolean`,description:`禁用上传区域。`},{prop:`onFiles`,type:`(files: File[]) => void`,description:`选择文件后的回调。`}]},"color-picker":{section:`表单`,title:`颜色选择器`,description:`弹出式颜色选择控件,包含色相、饱和度和亮度滑块。支持预设色板和自定义十六进制输入。`,guidance:[`适用于品牌颜色配置、标签颜色或主题自定义。`,`同时提供可视化选取器和精确十六进制输入。`,`可通过 swatches 属性定制品牌专属色板。`],props:[{prop:`value`,type:`string`,description:`受控十六进制颜色值。`},{prop:`defaultValue`,type:`string`,default:`"#3b82f6"`,description:`非受控初始颜色。`},{prop:`onChange`,type:`(color: string) => void`,description:`颜色变化时回调。`},{prop:`label`,type:`string`,description:`字段标签文本。`},{prop:`hint`,type:`string`,description:`选择器下方辅助文本。`},{prop:`error`,type:`string`,description:`错误信息文本。`},{prop:`disabled`,type:`boolean`,description:`禁用选择器。`},{prop:`presets`,type:`string[]`,description:`预设色块十六进制颜色数组。`},{prop:`showPresets`,type:`boolean`,default:`true`,description:`显示/隐藏预设色块。`}]},accordion:{section:`组件`,title:`折叠面板`,description:`垂直堆叠的可折叠面板列表。每个面板有可切换展开/折叠的标题区域。支持单面板和双面板同时展开。`,guidance:[`适用于 FAQ、设置面板和渐进式披露模式。`,`默认每次只能展开一个面板(type="single")。`,`设置 allowMultiple 可允许多个面板同时保持展开状态。`],props:[{prop:`items`,type:`AccordionItem[]`,required:!0,description:`折叠面板定义数组。`},{prop:`multiple`,type:`boolean`,default:`false`,description:`允许多个面板同时展开。`},{prop:`defaultOpen`,type:`string[]`,default:`[]`,description:`初始展开面板的键名数组。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`},{prop:`AccordionItem.key`,type:`string`,required:!0,description:`面板的唯一键。`},{prop:`AccordionItem.title`,type:`ReactNode`,required:!0,description:`面板标题内容。`},{prop:`AccordionItem.content`,type:`ReactNode`,required:!0,description:`面板正文内容。`},{prop:`AccordionItem.disabled`,type:`boolean`,description:`禁用该面板。`}]},tabs:{section:`组件`,title:`标签页`,description:`用于在多个内容面板间切换的标签页组件。支持受控和非受控模式及键盘导航。`,guidance:[`使用 Tabs 将相关内容组织到独立面板中,无需跳转到新页面。`,`TabsList 存放触发按钮,TabsContent 存放面板内容。`,`非受控使用 defaultValue,受控模式使用 value/onValueChange。`],props:[{prop:`value`,type:`string`,description:`受控选中标签值。`},{prop:`defaultValue`,type:`string`,description:`非受控初始标签。`},{prop:`onValueChange`,type:`(value: string) => void`,description:`标签切换时回调。`},{prop:`orientation`,type:`"horizontal" | "vertical"`,default:`"horizontal"`,description:`标签布局方向。`}]},breadcrumb:{section:`组件`,title:`面包屑`,description:`显示用户在页面层级中当前位置的导航辅助。每个分段对应相应层级的链接。`,guidance:[`面包屑反映 URL 深度——单层页面可完全省略。`,`使用 separator 属性自定义分段之间的分隔符。`,`最后一个分段应为当前页面(非链接),以确保无障碍。`],props:[{prop:`items`,type:`BreadcrumbItem[]`,required:!0,description:`面包屑分段的有序列表。`},{prop:`separator`,type:`ReactNode`,default:`Chevron`,description:`分段间的自定义分隔符。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`},{prop:`BreadcrumbItem.href`,type:`string`,description:`分段的链接 URL。`},{prop:`BreadcrumbItem.onClick`,type:`() => void`,description:`分段点击处理函数。`}]},pagination:{section:`组件`,title:`分页`,description:`将大数据集分页展示的导航控件。显示页码及上/下翻页按钮,可选页面大小选择器。`,guidance:[`显示总页数,让用户了解数据集大小。`,`使用 siblings 属性控制在当前页周围显示的页码数量。`,`onPageChange 回调返回新页码,用于外部数据加载。`],props:[{prop:`page`,type:`number`,required:!0,description:`当前页码(从 1 开始)。`},{prop:`total`,type:`number`,required:!0,description:`数据总条数。`},{prop:`pageSize`,type:`number`,default:`10`,description:`每页条数。`},{prop:`siblingCount`,type:`number`,default:`1`,description:`当前页两侧显示的页码按钮数。`},{prop:`onChange`,type:`(page: number) => void`,required:!0,description:`点击页码时回调。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},stepper:{section:`组件`,title:`步骤条`,description:`在线性工作流中可视化用户当前位置的多步骤进度指示器。支持已完成、进行中、待处理和错误状态。`,guidance:[`适用于多页表单、结账流程或设置向导。`,`每一步可以是 "completed"、"active"、"pending" 或 "error" 状态。`,`错误状态的步骤将吸引注意力,方便用户导航回去修复。`],props:[{prop:`steps`,type:`StepItem[]`,required:!0,description:`步骤定义数组。`},{prop:`currentStep`,type:`number`,default:`0`,description:`当前激活步骤的索引(从 0 开始)。`},{prop:`orientation`,type:`"horizontal" | "vertical"`,default:`"horizontal"`,description:`布局方向。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},progress:{section:`组件`,title:`进度条`,description:`指示确定性操作完成百分比的横向进度条。支持带标签和不带标签的变体。`,guidance:[`对已知持续时间的确定性操作使用 Progress(如文件上传、数据导出)。`,`对未知持续时间的等待使用 Spinner。`,`value 属性表示相对于 max 的当前进度,value 等于 max 时表示完成。`],props:[{prop:`value`,type:`number`,default:`0`,description:`当前进度值。`},{prop:`max`,type:`number`,default:`100`,description:`最大值(分母)。`},{prop:`label`,type:`string`,description:`进度条上方文本标签。`},{prop:`showLabel`,type:`boolean`,default:`false`,description:`显示百分比文字。`},{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`进度条粗细预设。`},{prop:`variant`,type:`"default" | "success" | "warning" | "danger" | "rainbow"`,default:`"default"`,description:`进度条颜色变体。`},{prop:`indeterminate`,type:`boolean`,default:`false`,description:`不确定模式(动画)。`}]},spinner:{section:`组件`,title:`加载器`,description:`用于不确定等待状态的旋转指示器。在内容正在加载或处理且时长未知时使用。`,guidance:[`对短暂且剩余时间未知的等待使用 Spinner。`,`对已知持续时间的确定性操作使用 Progress。`,`Spinner 支持 size 属性("sm"、"md"、"lg")以匹配周围上下文。`],props:[{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`旋转器尺寸(16/24/36 px)。`},{prop:`label`,type:`string`,default:`"Loading…"`,description:`无障碍 aria-label 文本。`}]},alert:{section:`组件`,title:`提示`,description:`传达成功、警告、危险或信息状态的重要状态消息。用户可选择关闭。`,guidance:[`对持久性或页面级状态消息使用 Alert——重要信息优先于 Toast。`,`支持 "info"、"success"、"warning" 和 "danger" 变体。`,`onClose 属性可添加关闭按钮,用户可手动关闭提示。`],props:[{prop:`variant`,type:`"info" | "success" | "warning" | "danger"`,default:`"info"`,description:`样式变体。`},{prop:`title`,type:`string`,description:`提示标题文本。`},{prop:`icon`,type:`ReactNode`,description:`自定义图标覆盖。`},{prop:`onClose`,type:`() => void`,description:`关闭按钮回调(省略时不显示关闭按钮)。`}]},table:{section:`组件`,title:`表格`,description:`支持可排序列、多种视觉变体、行选择和内置防抖自动搜索的数据表格。支持无边框、无头部、固定布局和可点击行。`,guidance:[`Table 支持可排序列——后端数据时请将排序状态向上委托。`,`使用 variant="dark" 强调视觉,或用 variant="outline" 极简风格。`,`开启 selectable 添加复选框行选择,通过 selectedRows/onSelectionChange 控制状态。`,`内置搜索自动防抖(默认 200ms),无需外部状态管理。`,`对列设置 searchable: false 可将其排除在文本搜索之外。`],props:[{prop:`columns`,type:`TableColumn[]`,required:!0,description:`列定义。`},{prop:`data`,type:`T[]`,required:!0,description:`行数据。`},{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`行高预设。`},{prop:`striped`,type:`boolean`,default:`false`,description:`斑马纹交替背景。`},{prop:`hoverable`,type:`boolean`,default:`true`,description:`行悬停高亮。`},{prop:`bordered`,type:`boolean`,default:`false`,description:`单元格内边框。`},{prop:`stickyHeader`,type:`boolean`,default:`false`,description:`固定表头。`},{prop:`stickyFilter`,type:`boolean`,default:`false`,description:`搜索栏吸顶,滚动时保持搜索框可见。`},{prop:`borderless`,type:`boolean`,default:`false`,description:`移除所有边框(包括外层包裹器边框)。`},{prop:`headless`,type:`boolean`,default:`false`,description:`隐藏表头行。`},{prop:`loading`,type:`boolean`,default:`false`,description:`显示加载遮罩。`},{prop:`variant`,type:`"default" | "dark" | "outline"`,default:`"default"`,description:`视觉风格变体。`},{prop:`fixed`,type:`boolean`,default:`false`,description:`固定表格布局(列宽严格执行,文本截断不换行)。`},{prop:`removeBorders`,type:`"all" | ("top" | "right" | "bottom" | "left")[]`,description:`移除指定边边框或四边全部移除,同步调整圆角。`},{prop:`flush`,type:`boolean`,default:`false`,description:`嵌入模式:移除外边框、圆角和内边距,适合直接放入 Card 等容器。`},{prop:`onRowClick`,type:`(row: T, index: number) => void`,description:`行点击回调。`},{prop:`rowClassName`,type:`string | ((row: T, index: number) => string)`,description:`自定义行类名。`},{prop:`selectable`,type:`boolean`,default:`false`,description:`启用复选框行选择。`},{prop:`selectedRows`,type:`Set<number>`,description:`受控选中行索引集合。`},{prop:`onSelectionChange`,type:`(selected: Set<number>) => void`,description:`选中行变化回调。`},{prop:`searchDebounce`,type:`number`,default:`200`,description:`搜索防抖延迟(毫秒),设为 0 禁用。`},{prop:`searchColumns`,type:`string[]`,description:`限定文本搜索的列 key 列表。`},{prop:`sortColumn`,type:`string`,description:`受控排序列键名。`},{prop:`sortDirection`,type:`"asc" | "desc"`,description:`受控排序方向。`},{prop:`onSortChange`,type:`(column: string, direction: SortDirection) => void`,description:`排序变化回调。`},{prop:`rounded`,type:`boolean`,default:`false`,description:`移除外层包裹器圆角。`},{prop:`caption`,type:`string`,description:`表格标题,用于无障碍说明。`}]},"empty-states":{section:`组件`,title:`空状态`,description:`空状态应解释缺少什么、为何重要以及下一步操作是什么。它不应让用户感到走投无路。EmptyState 组件提供了包含图标、标题、描述和操作插槽的一致布局。`,guidance:[`指明缺失的对象,让用户清楚自己在看什么。`,`通过 action 属性提供一个清晰的恢复操作。`,`视觉重量应轻于成功或警告反馈。`],props:[{prop:`icon`,type:`ReactNode`,description:`标题上方展示的插画或图标。`},{prop:`title`,type:`string`,required:!0,description:`解释缺失对象的主标题。`},{prop:`description`,type:`string`,description:`标题下方的可选说明文字。`},{prop:`action`,type:`ReactNode`,description:`用于恢复的操作按钮或链接。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},toasts:{section:`组件`,title:`消息提示`,description:`Toast 在不打断任务流程的情况下确认短暂事件。保持简洁、具体且易于关闭。`,guidance:[`使用 success 和 info 确认后台操作。`,`将阻塞性或破坏性状态升级为对话框,而非堆叠 Toast。`,`避免在每次页面切换时重复相同消息。`],props:[{prop:`push`,type:`(toast: ToastInput) => void`,description:`显示 Toast 通知。`},{prop:`ToastInput.title`,type:`string`,required:!0,description:`Toast 标题文本。`},{prop:`ToastInput.description`,type:`string`,description:`可选的描述文本。`},{prop:`ToastInput.tone`,type:`"info" | "success" | "warning" | "danger"`,default:`"info"`,description:`Toast 视觉风格。`}]},feedback:{section:`反馈`,title:`反馈组件`,description:`Alert、Progress、Spinner、Stepper 和 Toast 在不阻塞布局的情况下指示应用状态。`,guidance:[`对短暂的不确定等待使用 Spinner;对确定性操作使用 Progress。`,`对持久性或页面级状态消息,优先使用 Alert 而非 Toast。`]},overlays:{section:`组件`,title:`浮层`,description:`Dialog、ContextMenu、HoverCard、Tooltip、Popover 和 DropdownMenu 在页面上方将临时内容和操作置于上方。`,guidance:[`Tooltip 仅用于补充文本,绝不放置可交互内容。`,`Popover 可包含表单和富内容;需要明确的关闭触发器。`,`DropdownMenu 应对相关操作分组,并支持键盘导航。`]},"nav-layout":{section:`布局`,title:`导航与布局`,description:`Tabs、Accordion、Breadcrumb 和 Resizable 帮助结构化展示内容。其他布局组件(ScrollArea、Separator)各有独立文档页。`,guidance:[`Breadcrumb 反映路由深度——单层页面可省略。`,`Pagination 应显示总页数,让用户了解数据集大小。`,`Accordion 最适合渐进式披露,而非主导航。`]},"data-display":{section:`组件`,title:`数据展示`,description:`Table 和 EmptyState 以紧凑方式呈现结构化数据。其他数据组件(Avatar、Badge、Card、Carousel、Timeline、TreeView)各有独立文档页。`,guidance:[`Table 支持可排序列——后端数据时请将排序状态向上委托。`,`在密集表格中使用斑马纹可帮助视线在大段行间对齐追踪。`,`EmptyState 应尽可能包含一个明确的恢复操作。`]},"form-inputs":{section:`表单`,title:`表单输入`,description:`Checkbox、Radio、Switch、Slider、NumberInput、TagInput、SegmentedControl 和 Input 在文本输入框之外扩展了表单词汇。其他表单组件(Label、Toggle、Rating、DatePicker)各有独立文档页。`,guidance:[`使用 RadioGroup 对单选按钮分组,共享 name 和语义。`,`Slider 适合数值范围,配合 showValue 可提供即时反馈。`,`Textarea 默认可垂直调整尺寸——仅在固定高度容器中禁用调整。`,`Switch 用于即时状态切换(如设置开关),Checkbox 用于表单提交或多选。`],props:[{prop:`Checkbox.label`,type:`ReactNode`,description:`复选框旁边的标签。`},{prop:`Checkbox.description`,type:`string`,description:`标签下方的描述。`},{prop:`Checkbox.indeterminate`,type:`boolean`,description:`显示不确定状态。`},{prop:`Radio.label`,type:`ReactNode`,description:`单选按钮旁边的标签。`},{prop:`Radio.description`,type:`string`,description:`标签下方的描述。`},{prop:`RadioGroup.label`,type:`string`,description:`作为 <legend> 渲染的分组标签。`},{prop:`RadioGroup.children`,type:`ReactNode`,required:!0,description:`分组内的 Radio 组件。`},{prop:`RadioGroup.className`,type:`string`,description:`额外的 CSS 类名。`},{prop:`Switch.label`,type:`string`,required:!0,description:`可见标签文本。`},{prop:`Switch.description`,type:`string`,description:`标签下方的描述。`},{prop:`Slider.label`,type:`string`,description:`滑块上方标签。`},{prop:`Slider.showValue`,type:`boolean`,default:`false`,description:`显示当前值。`},{prop:`Slider.hint`,type:`string`,description:`下方的辅助文本。`},{prop:`NumberInput.label`,type:`string`,description:`输入框上方标签。`},{prop:`NumberInput.hint`,type:`string`,description:`下方的辅助文本。`},{prop:`NumberInput.error`,type:`string`,description:`错误信息。`},{prop:`NumberInput.value`,type:`number`,description:`受控值。`},{prop:`NumberInput.onChange`,type:`(value: number) => void`,description:`值变化时回调。`},{prop:`NumberInput.min`,type:`number`,description:`最小值。`},{prop:`NumberInput.max`,type:`number`,description:`最大值。`},{prop:`NumberInput.step`,type:`number`,default:`1`,description:`步进增量。`},{prop:`TagInput.value`,type:`string[]`,description:`受控标签值。`},{prop:`TagInput.defaultValue`,type:`string[]`,default:`[]`,description:`非受控默认标签。`},{prop:`TagInput.onChange`,type:`(tags: string[]) => void`,description:`标签变化时回调。`},{prop:`TagInput.label`,type:`string`,description:`字段标签。`},{prop:`TagInput.placeholder`,type:`string`,default:`"Add tag..."`,description:`占位符。`},{prop:`TagInput.maxTags`,type:`number`,description:`最大标签数量。`},{prop:`SegmentedControl.options`,type:`SegmentedControlOption[]`,required:!0,description:`选项数组。`},{prop:`SegmentedControl.value`,type:`string`,description:`受控值。`},{prop:`SegmentedControl.defaultValue`,type:`string`,description:`非受控初始值。`},{prop:`SegmentedControl.onChange`,type:`(value: string) => void`,description:`选择变化时回调。`},{prop:`SegmentedControl.fullWidth`,type:`boolean`,description:`拉伸填满容器宽度。`},{prop:`SegmentedControl.size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`控件尺寸预设。`},{prop:`Input.label`,type:`string`,description:`输入框上方标签。`},{prop:`Input.hint`,type:`string`,description:`输入框下方的辅助文本。`},{prop:`Input.error`,type:`string`,description:`错误信息。`},{prop:`Input.prefix`,type:`ReactNode`,description:`输入框内部前置装饰。`},{prop:`Input.suffix`,type:`ReactNode`,description:`输入框内部后置装饰。`},{prop:`Input.variant`,type:`"default" | "filled" | "underline" | "borderless"`,default:`"default"`,description:`样式变体。`},{prop:`Input.size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`尺寸预设。`},{prop:`Input.rounded`,type:`boolean`,description:`药丸形状输入框。`}]},"mobile-list":{section:`响应式`,title:`移动端列表`,description:`MobileList、MobileListSection 和 MobileListItem 提供原生感的列表,适用于移动端导航、设置和数据展示。每个条目支持前置图标、尾部内容、箭头指示器以及破坏性或禁用状态。`,guidance:[`使用 MobileListSection 的 title 属性对相关条目分组。`,`对于导航到详情页的条目设置 chevron 箭头——静态或切换条目省略。`,`对于不可逆操作(删除、退出、移除)使用 destructive 样式,文字变红。`,`禁用条目以低视觉权重渲染并阻止点击事件。`],props:[{prop:`MobileList`,type:`—`,description:`带列表样式的根 <ul> 元素。`},{prop:`MobileListSection.title`,type:`string`,description:`分组标题文字。`},{prop:`MobileListItem.leading`,type:`ReactNode`,description:`左侧图标或头像。`},{prop:`MobileListItem.trailing`,type:`ReactNode`,description:`右侧自定义内容(徽章、数值等)。`},{prop:`MobileListItem.label`,type:`ReactNode`,required:!0,description:`主标签文字。`},{prop:`MobileListItem.description`,type:`ReactNode`,description:`次要描述文字。`},{prop:`MobileListItem.chevron`,type:`boolean`,default:`false`,description:`显示右侧箭头。`},{prop:`MobileListItem.destructive`,type:`boolean`,default:`false`,description:`破坏性操作样式(红色文字)。`},{prop:`MobileListItem.disabled`,type:`boolean`,default:`false`,description:`禁用条目。`},{prop:`MobileListItem.onClick`,type:`() => void`,description:`点击回调。`}]},mobile:{section:`响应式`,title:`响应式布局`,description:`一套同时覆盖手机、平板与桌面的响应式系统。通过布局与密度变化适配不同设备,而不是维护两套应用与两套页面树。`,guidance:[`保持所有断点上的路由树一致,只调整壳层结构和内容密度。`,`在窄屏上把常驻侧边导航转成抽屉,而不是复制一套页面实现。`,`让卡片、表单和表格从三列到单列平滑重排,不改变组件归属。`]},image:{section:`内容展示`,title:`图片`,description:`支持 IntersectionObserver 懒加载、错误回退和可选点击预览灯箱的图片组件。支持固定尺寸、圆角预设和说明文字。`,guidance:[`设置 lazy={true}(默认)延迟屏幕外图片加载,提升初始加载速度。`,`提供 fallback 节点在图片加载失败时替换默认占位符。`,`启用 preview={true} 适用于用户需要查看大图的画廊式布局。`,`使用 width 和 height 属性防止加载期间的布局偏移(CLS)。`],props:[{prop:`src`,type:`string`,required:!0,description:`图片来源 URL。`},{prop:`alt`,type:`string`,description:`无障碍替代文本。`},{prop:`width`,type:`string | number`,description:`固定宽度(CSS 值或 px 数字)。`},{prop:`height`,type:`string | number`,description:`固定高度(CSS 值或 px 数字)。`},{prop:`radius`,type:`'none' | 'sm' | 'md' | 'lg' | 'full'`,default:`'md'`,description:`圆角预设。`},{prop:`fit`,type:`'cover' | 'contain' | 'fill' | 'none'`,default:`'cover'`,description:`object-fit CSS 值。`},{prop:`lazy`,type:`boolean`,default:`true`,description:`启用懒加载。`},{prop:`placeholder`,type:`ReactNode`,description:`加载中显示的占位符。`},{prop:`fallback`,type:`ReactNode`,description:`错误时显示的回调内容。`},{prop:`preview`,type:`boolean`,default:`false`,description:`启用点击预览灯箱。`},{prop:`caption`,type:`ReactNode`,description:`图片下方的说明文字。`}]},"pin-input":{section:`表单`,title:`验证码输入`,description:`用于验证码、OTP 和 PIN 的分段输入组件。支持数字或字母模式、自动前进、粘贴处理和掩码模式。`,guidance:[`使用 length={6} 作为标准验证码,length={4} 作为 PIN 码。`,`设置 type="numeric"(默认)仅输入数字;使用 "alphanumeric" 支持混合输入。`,`提供 onComplete 回调在所有字段填满时自动提交。`,`启用 mask={true} 用于不应可见的敏感码。`],props:[{prop:`length`,type:`number`,default:`6`,description:`输入字段数量。`},{prop:`value`,type:`string`,description:`受控值。`},{prop:`onChange`,type:`(value: string) => void`,description:`任意字段变化时调用。`},{prop:`onComplete`,type:`(value: string) => void`,description:`所有字段填满时调用。`},{prop:`type`,type:`'numeric' | 'alphanumeric'`,default:`'numeric'`,description:`输入类型。`},{prop:`size`,type:`'sm' | 'md' | 'lg'`,default:`'md'`,description:`尺寸预设。`},{prop:`mask`,type:`boolean`,default:`false`,description:`掩码输入(显示圆点)。`},{prop:`error`,type:`string`,description:`输入组下方的错误信息。`},{prop:`label`,type:`string`,description:`输入组上方的标签。`},{prop:`autoFocus`,type:`boolean`,default:`false`,description:`自动聚焦第一个输入框。`}]},descriptions:{section:`内容展示`,title:`描述列表`,description:`用于详情页的键值对展示组件。以结构化的水平或垂直布局组织元数据,支持可选边框、跨列和尺寸预设。`,guidance:[`宽屏使用水平布局;窄屏或单列详情使用垂直布局。`,`设置 column={2} 或 column={3} 将项目排成多列行。`,`使用单项的 span 属性跨越多列。`,`结合 title 和 extra 属性实现带操作的区块标题。`],props:[{prop:`items`,type:`DescriptionsItem[]`,required:!0,description:`描述项列表。`},{prop:`layout`,type:`'horizontal' | 'vertical'`,default:`'horizontal'`,description:`布局方向。`},{prop:`column`,type:`number`,default:`3`,description:`每行列数。`},{prop:`size`,type:`'sm' | 'md' | 'lg'`,default:`'md'`,description:`尺寸预设。`},{prop:`bordered`,type:`boolean`,default:`true`,description:`显示边框。`},{prop:`title`,type:`ReactNode`,description:`描述列表上方的标题。`},{prop:`extra`,type:`ReactNode`,description:`标题旁的额外内容。`}]},notification:{section:`组件`,title:`通知`,description:`持久化通知系统,包含 NotificationProvider 和 useNotification hook。与 Toast(自动消失)不同,通知保持可见直到手动关闭或设置 duration。`,guidance:[`用 NotificationProvider 包裹应用并设置期望的位置。`,`使用 push() 显示通知——它返回一个 id 用于程序化关闭。`,`设置 duration > 0 自动消失;使用 0(默认)持久显示。`,`使用 action 属性放置内联按钮如“查看详情”或“撤销”。`],props:[{prop:`NotificationProvider.placement`,type:`'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center'`,default:`'top-right'`,description:`堆叠位置。`},{prop:`NotificationProvider.maxCount`,type:`number`,default:`5`,description:`最大可见通知数。`},{prop:`push`,type:`(input: NotificationInput) => number`,description:`显示通知;返回 id。`},{prop:`dismiss`,type:`(id: number) => void`,description:`按 id 关闭通知。`},{prop:`clear`,type:`() => void`,description:`关闭所有通知。`}]},result:{section:`组件`,title:`结果页`,description:`用于操作反馈的结果/状态页组件。提供预设状态(success、error、warning、info、forbidden、not-found、server-error)及默认图标和颜色。`,guidance:[`使用 status 属性处理常见结果;自定义 icon 属性实现品牌化。`,`始终通过 actions 属性提供清晰的下一步操作(如“返回首页”)。`,`description 保持一两句话说明结果。`,`使用 extra 插槽放置补充内容,如订单详情或错误日志。`],props:[{prop:`status`,type:`'success' | 'error' | 'warning' | 'info' | 'forbidden' | 'not-found' | 'server-error'`,required:!0,description:`预置状态。`},{prop:`title`,type:`string`,required:!0,description:`标题文字。`},{prop:`description`,type:`string`,description:`标题下方的描述。`},{prop:`icon`,type:`ReactNode`,description:`自定义图标(覆盖默认)。`},{prop:`actions`,type:`ReactNode`,description:`按钮/链接操作区。`},{prop:`extra`,type:`ReactNode`,description:`操作区下方的额外内容。`}]},"home-page":{section:`模板`,title:`主页`,description:`带有 Hero 区块、核心功能亮点和主要行动召唤按钮的落地式主页。适用于产品官网、内部门户和营销页面。`,guidance:[`Hero 信息保持一句话——让行动召唤按钮来完成说服工作。`,`功能卡片各自聚焦一个问题,而非罗列所有能力。`,`主操作与次操作相配合,降低用户决策疲劳。`]},"login-page":{section:`模板`,title:`登录页`,description:`居中的极简登录表单。清晰的标签、可见的错误状态和单一主操作,降低登录摩擦。`,guidance:[`不要隐藏密码标签——仅靠 placeholder 无法满足无障碍要求。`,`字段失去焦点后立即显示内联校验错误。`,`提供密码可见切换,降低登录摩擦。`]},"register-page":{section:`模板`,title:`注册页`,description:`只收集创建账号所需最少字段的注册表单。通过仅询问必要信息来降低注册阻力。`,guidance:[`注册时只需姓名、邮箱和密码——个人资料可在之后完善。`,`内联显示密码强度,但不因细微问题阻止提交。`,`服务条款复选框必须明确,不得预先勾选。`]},"error-page":{section:`模板`,title:`错误页`,description:`404、500 及其他错误状态的优雅降级页面。给用户清晰的解释和直接返回的路径。`,guidance:[`说明错误码和通俗解释——避免技术术语。`,`始终提供"返回首页"和"后退"两个操作。`,`错误页的视觉风格应与产品保持一致,而非系统默认页。`]},"privacy-policy":{section:`模板`,title:`隐私政策`,description:`带有章节标题、可读段落和清晰分隔线的结构化法律文档页面。在不牺牲完整性的前提下保持无障碍和可扫读性。`,guidance:[`使用标题将长篇政策文本分成可扫读的章节。`,`从任何引用政策的同意流程中直接链接到相关章节。`,`在顶部注明政策版本和日期,让用户了解最近更新时间。`]},"terms-of-service":{section:`模板`,title:`服务条款`,description:`具备清晰标题、通俗义务说明且在手机到桌面端都保持可读性的服务条款页面。`,guidance:[`将许可范围、使用限制和免责声明拆成独立段落,降低法律歧义。`,`正文使用短段落与摘要侧栏,保证长文档依旧可扫读。`,`在注册和定价流程中直接链接条款页面,让同意动作具备上下文。`]},"code-block":{section:`组件`,title:`代码块`,description:`带语法高亮的只读代码展示组件,支持可选的文件名标签。用于渲染安装步骤、用法示例或任意格式化的代码字符串。`,guidance:[`通过 language 属性指定代码语言(tsx、bash、json 等),以获得正确高亮。`,`传入 filename 可为读者提供该代码片段在项目中所属位置的上下文。`,`保持示例代码精简——只展示说明当前概念所需的最少行数。`],props:[{prop:`code`,type:`string`,required:!0,description:`要高亮显示的源代码字符串。`},{prop:`language`,type:`"tsx" | "typescript" | "javascript" | "jsx" | "bash" | "json" | "markup"`,default:`"tsx"`,description:`Prism 语言标识符。`},{prop:`copyLabel`,type:`string`,required:!0,description:`复制按钮的标签(空闲状态)。`},{prop:`copiedLabel`,type:`string`,required:!0,description:`复制按钮的标签(已复制状态)。`},{prop:`onCopy`,type:`(code: string) => Promise<boolean> | boolean`,required:!0,description:`复制处理函数,返回是否成功。`}]},"language-switcher":{section:`组件`,title:`语言切换器`,description:`点击后即可更新整套 UI 文案的语言切换组件。放入任意顶栏或设置区域——i18n Provider 会自动广播变更,无需额外状态绑定。`,guidance:[`将切换器放置在持久性界面(顶栏或设置页)中,方便用户在任何位置找到它。`,`切换器自动反映当前语言,除 i18n Provider 外无需额外的状态绑定。`,`顶栏中使用 inline 变体,设置页中使用默认变体,以匹配对应场景的视觉密度。`],props:[{prop:`variant`,type:`"inline" | "sidebar"`,default:`"inline"`,description:`"inline" 用于顶栏;"sidebar" 用于侧边栏底部。`}]},"scroll-area":{section:`布局`,title:`滚动区域`,description:`统一的滚动容器组件。默认使用悬浮滚动条(overlay),不占用布局空间。可通过 variant="native" 切换为浏览器原生滚动条。`,guidance:[`设置 maxHeight 限制垂直溢出——超出视口的内容可在内部滚动。`,`传入数字按像素计算,传入字符串如 "50vh" 按相对尺寸计算。`,`Overlay 模式(默认):自定义滚动条自动隐藏,不占布局空间,支持拖拽滚动。`,`Native 模式(variant="native"):零 JS 开销,使用浏览器原生滚动条样式。`,`ScrollArea 纯属展示性组件,不支持虚拟化或延迟渲染子元素。`],props:[{prop:`variant`,type:`"overlay" | "native"`,default:`"overlay"`,description:`滚动条样式。"overlay" 使用自定义悬浮滚动条;"native" 使用浏览器原生滚动条。`},{prop:`maxHeight`,type:`string | number`,description:`内容滚动前的最大高度,数字按像素处理。`},{prop:`maxWidth`,type:`string | number`,description:`内容滚动前的最大宽度,数字按像素处理。`},{prop:`children`,type:`ReactNode`,required:!0,description:`滚动视口内的内容。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},separator:{section:`布局`,title:`分隔线`,description:`用于分隔内容区域的视觉分割线。渲染为 <hr> 元素,支持水平或垂直方向。`,guidance:[`水平分隔线用于堆叠的章节之间;垂直分隔线用于工具栏或行内上下文。`,`decorative 属性控制 role 属性——当分隔线具有语义含义时应设为 false。`,`垂直分隔线需要指定显式高度才能正确渲染。`],props:[{prop:`orientation`,type:`"horizontal" | "vertical"`,default:`"horizontal"`,description:`分隔线的方向。`},{prop:`decorative`,type:`boolean`,default:`true`,description:`为 true 时设置 role="none",否则设置 role="separator"。`}]},timeline:{section:`组件`,title:`时间线`,description:`按时间顺序排列的垂直事件列表。每个条目显示标题、可选描述、时间、图标和状态指示器。`,guidance:[`适用于活动动态、订单跟踪或部署历史。`,`将 status 设为 "success"、"warning"、"danger" 或 "info" 可设置时间点颜色。`,`在条目中传入 icon 可替换默认的点图标。`],props:[{prop:`items`,type:`TimelineItem[]`,required:!0,description:`时间线条目数组。`},{prop:`items[].title`,type:`string`,required:!0,description:`事件标题。`},{prop:`items[].description`,type:`string`,description:`事件描述。`},{prop:`items[].time`,type:`string`,description:`时间戳或日期标签。`},{prop:`items[].icon`,type:`ReactNode`,description:`替换默认点的自定义图标。`},{prop:`items[].status`,type:`"default" | "success" | "warning" | "danger" | "info"`,description:`点的状态颜色。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},"tree-view":{section:`组件`,title:`树形视图`,description:`支持展开/折叠节点、键盘导航和可选选中状态的层级树控件。适用于文件浏览器、组织架构或嵌套设置。`,guidance:[`使用 defaultExpanded 在初始渲染时预展开某些节点。`,`每个节点需要唯一的 id 用于选择和展开状态跟踪。`,`TreeView 支持受控(selected/expanded)或非受控模式。`,`disabled 的节点不可选中或展开,但仍可见。`],props:[{prop:`nodes`,type:`TreeNode[]`,required:!0,description:`根级树节点。`},{prop:`selected`,type:`string`,description:`受控选中的节点 id。`},{prop:`defaultSelected`,type:`string`,description:`非受控初始选中节点 id。`},{prop:`onSelect`,type:`(id: string, node: TreeNode) => void`,description:`节点选中时调用。`},{prop:`expanded`,type:`string[]`,description:`受控展开的节点 id 数组。`},{prop:`defaultExpanded`,type:`string[]`,description:`非受控初始展开节点 id 数组。`},{prop:`onExpandedChange`,type:`(ids: string[]) => void`,description:`展开状态变化时调用。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},carousel:{section:`组件`,title:`轮播`,description:`基于滑块的轮播组件,支持圆点指示器、箭头导航、自动播放和循环。每个滑块可接受任意 React 内容。`,guidance:[`设置 autoPlay 实现无人值守轮播——适用于横幅广告或信息亭。`,`禁用 loop 用于线性引导流程,用户不应循环回到开头。`,`通过 index 属性支持受控索引,便于外部分页同步。`,`在构建极简变体时,使用 showArrows / showDots 隐藏箭头或圆点。`],props:[{prop:`items`,type:`ReactNode[]`,required:!0,description:`滑块内容数组。`},{prop:`defaultIndex`,type:`number`,default:`0`,description:`初始滑块索引(非受控)。`},{prop:`index`,type:`number`,description:`受控的当前滑块索引。`},{prop:`onIndexChange`,type:`(index: number) => void`,description:`活动滑块变化时调用。`},{prop:`autoPlay`,type:`boolean`,default:`false`,description:`按时间间隔自动前进滑块。`},{prop:`interval`,type:`number`,default:`3000`,description:`自动播放间隔(毫秒)。`},{prop:`loop`,type:`boolean`,default:`true`,description:`从最后一张循环回到第一张。`},{prop:`showDots`,type:`boolean`,default:`true`,description:`显示圆点指示器。`},{prop:`showArrows`,type:`boolean`,default:`true`,description:`显示上一张/下一张箭头按钮。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},toggle:{section:`表单`,title:`开关按钮`,description:`在按下和未按下状态之间切换的双状态按钮。ToggleGroup 将其扩展为一组选项间的单选/多选。`,guidance:[`Toggle 适用于工具栏开关(加粗/斜体、筛选标签),ToggleGroup 适用于视图模式切换。`,`ToggleGroup type="single" 类似单选按钮组,type="multiple" 允许多选。`,`同时支持受控(pressed/value)和非受控(defaultPressed/defaultValue)模式。`],props:[{prop:`Toggle.pressed`,type:`boolean`,description:`受控按下状态。`},{prop:`Toggle.defaultPressed`,type:`boolean`,default:`false`,description:`非受控初始按下状态。`},{prop:`Toggle.onPressedChange`,type:`(pressed: boolean) => void`,description:`按下状态变化时调用。`},{prop:`Toggle.size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`按钮尺寸。`},{prop:`ToggleGroup.items`,type:`ToggleGroupItem[]`,required:!0,description:`开关选项数组。`},{prop:`ToggleGroup.value`,type:`string | string[]`,description:`受控选中值。`},{prop:`ToggleGroup.defaultValue`,type:`string | string[]`,description:`非受控初始选中值。`},{prop:`ToggleGroup.onValueChange`,type:`(value: string | string[]) => void`,description:`选中值变化时调用。`},{prop:`ToggleGroup.type`,type:`"single" | "multiple"`,default:`"single"`,description:`选择模式。`},{prop:`Toggle.children`,type:`ReactNode`,required:!0,description:`开关按钮内容(图标或文字)。`},{prop:`ToggleGroup.size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`开关组尺寸预设。`},{prop:`ToggleGroup.className`,type:`string`,description:`额外的 CSS 类名。`},{prop:`ToggleGroupItem.value`,type:`string`,required:!0,description:`选项的唯一值。`},{prop:`ToggleGroupItem.label`,type:`ReactNode`,required:!0,description:`选项显示内容。`},{prop:`ToggleGroupItem.disabled`,type:`boolean`,description:`禁用该选项。`}]},rating:{section:`表单`,title:`评分`,description:`基于星形的评分输入组件,支持整星和半星精度、受控/非受控模式和只读/禁用状态。`,guidance:[`设置 allowHalf 允许半星精度,用于需要精细反馈的场景。`,`使用 readOnly 作为仅展示评分(如历史平均值),disabled 完全阻止交互。`,`size 属性调整星形尺寸以适配不同的视觉语境。`],props:[{prop:`value`,type:`number`,description:`受控评分值。`},{prop:`defaultValue`,type:`number`,default:`0`,description:`非受控初始值。`},{prop:`onChange`,type:`(value: number) => void`,description:`评分变化时调用。`},{prop:`max`,type:`number`,default:`5`,description:`最大星数。`},{prop:`allowHalf`,type:`boolean`,default:`false`,description:`允许半星值。`},{prop:`disabled`,type:`boolean`,description:`禁用交互。`},{prop:`readOnly`,type:`boolean`,description:`只读展示模式。`},{prop:`size`,type:`"sm" | "md" | "lg"`,default:`"md"`,description:`星形尺寸。`},{prop:`label`,type:`string`,description:`评分组的无障碍标签。`},{prop:`className`,type:`string`,description:`额外的 CSS 类名。`}]},label:{section:`表单`,title:`标签`,description:`带可选必填标记的样式化 <label> 元素。与任意表单控件配合使用,提供无障碍标签。`,guidance:[`始终将 Label 与其表单控件关联——可以包裹输入组件或使用 htmlFor。`,`设置 required 可在标签文本后自动追加红色星号。`,`Label 是轻量封装,透传所有标准 label 属性到底层元素。`],props:[{prop:`required`,type:`boolean`,description:`在标签文本后显示必填标记(红色星号)。`},{prop:`children`,type:`ReactNode`,required:!0,description:`标签文本内容。`}]},avatar:{section:`内容展示`,title:`头像`,description:`显示用户头像,支持图片、首字母回退或占位图标。支持多种尺寸和形状。`,guidance:[`始终通过 name 或 alt 属性提供无障碍标签。`,`src 属性接受图片 URL;加载失败时自动回退为首字母或 fallback 文本。`,`首字母从 name 属性自动生成(最多 2 个字符)。`,`圆形为默认形状,数据密集布局可使用方形。`],props:[{prop:`src`,type:`string`,description:`头像图片 URL。`},{prop:`name`,type:`string`,description:`用户名,用于生成首字母和无障碍标签。`},{prop:`size`,type:`"xs" | "sm" | "md" | "lg" | "xl"`,default:`"md"`,description:`头像尺寸。`},{prop:`shape`,type:`"circle" | "square"`,default:`"circle"`,description:`头像形状。`},{prop:`fallback`,type:`string`,description:`当无图片和名称时的自定义回退文字。`}]},badge:{section:`内容展示`,title:`徽章`,description:`用于状态、分类或元数据的紧凑标签。可内联于文本中,或放在按钮、卡片和表格单元格内。`,guidance:[`徽章用于紧凑的状态或分类元数据,而非纯装饰。`,`accent 变体保留给品牌的颜色;success 和 warning 传达语义状态。`,`徽章是内联元素,与文本和其他内联内容自然排列。`],props:[{prop:`variant`,type:`"neutral" | "accent" | "success" | "warning"`,default:`"neutral"`,description:`视觉样式变体。`}]},skeleton:{section:`内容展示`,title:`骨架屏`,description:`在数据加载时模拟内容形状的占位组件。支持文本、矩形和圆形变体,以及多行文本块。`,guidance:[`骨架屏形状与实际内容匹配,减少布局偏移。`,`使用 variant="text" 配合 lines > 1 模拟段落占位。`,`多行文本骨架屏的最后一行宽度为 70%,视觉效果更自然。`],props:[{prop:`variant`,type:`"text" | "rect" | "circle"`,default:`"rect"`,description:`形状变体。`},{prop:`width`,type:`string | number`,description:`宽度,数字按像素计算。`},{prop:`height`,type:`string | number`,description:`高度,数字按像素计算。`},{prop:`lines`,type:`number`,default:`1`,description:`文本变体的行数。`}]},typography:{section:`内容展示`,title:`排版`,description:`Heading 和 Text 提供核心排版系统。Heading 渲染 <h1>-<h6> 并基于级别调整字号;Text 渲染 <p>、<span> 或 <div>,支持变体、尺寸和字重选项。`,guidance:[`使用 Heading 作为章节标题和层级内容结构。`,`使用 variant="secondary" 或 "muted" 降低内容强调程度。`,`truncate 属性超出时以省略号截断——适用于表格单元格和侧边栏。`,`Heading 的 as 属性可覆盖渲染的 HTML 元素而不改变视觉样式。`],props:[{prop:`Heading.level`,type:`1 | 2 | 3 | 4 | 5 | 6`,default:`2`,description:`标题级别,决定字号大小。`},{prop:`Heading.as`,type:`"h1" | "h2" | "h3" | "h4" | "h5" | "h6"`,description:`覆盖渲染的 HTML 元素。`},{prop:`Heading.variant`,type:`"default" | "secondary"`,default:`"default"`,description:`视觉变体。`},{prop:`Heading.weight`,type:`"normal" | "medium" | "semibold" | "bold"`,default:`"bold"`,description:`字重。`},{prop:`Heading.truncate`,type:`boolean`,default:`false`,description:`超出时以省略号截断。`},{prop:`Text.as`,type:`"p" | "span" | "div"`,default:`"p"`,description:`渲染的 HTML 元素。`},{prop:`Text.variant`,type:`"default" | "secondary" | "muted" | "danger" | "success"`,default:`"default"`,description:`颜色变体。`},{prop:`Text.size`,type:`"sm" | "base" | "lg" | "xl"`,default:`"base"`,description:`字号。`},{prop:`Text.weight`,type:`"normal" | "medium" | "semibold" | "bold"`,default:`"normal"`,description:`字重。`},{prop:`Text.truncate`,type:`boolean`,default:`false`,description:`超出时以省略号截断。`}]},"typography-base":{section:`内容展示`,title:`排版基础`,description:`开箱即用的排版 CSS 工具类和 React 组件,参考 Bootstrap 命名风格,适用于文章、文档、API 参考等页面。`,guidance:[`排版样式通过 import "vxui-re" 自动加载,无需额外配置。`,`可直接使用 className(如 vx-article、vx-section),也可使用 React 组件(如 Article、Section)。`,`所有颜色使用 CSS 变量,自动适配亮/暗主题。`,`内置响应式断点,移动端和桌面端体验统一。`],props:[{prop:`Article`,type:`Component`,description:`文章容器,提供标准文档排版布局。`},{prop:`ArticleHeader`,type:`Component`,description:`文章头部,包含标题和描述。`},{prop:`ArticleTitle`,type:`Component`,description:`文章标题(h1)。`},{prop:`ArticleBody`,type:`Component`,description:`文章正文容器。`},{prop:`Section`,type:`Component`,description:`文档章节,支持锚点跳转。`},{prop:`SectionHeading`,type:`Component`,description:`章节标题(h2),可选锚点链接。`},{prop:`Pager`,type:`Component`,description:`上下页导航。`},{prop:`PropsTable`,type:`Component`,description:`API 属性表格。`},{prop:`ArticleEmptyState`,type:`Component`,description:`空状态展示。`},{prop:`StatsGrid`,type:`Component`,description:`统计指标网格。`}]},"date-pickers":{section:`表单`,title:`日期选择器`,description:`DatePicker 提供带弹出日历的文本输入框用于日期选择。Calendar 是独立的月历网格组件,由 DatePicker 内部使用。`,guidance:[`表单字段中使用 DatePicker;内嵌日历网格到自定义组件中使用 Calendar。`,`设置 min/max 限制可选日期范围。`,`weekStartsOnMonday 属性更改每周第一天——默认为周日。`,`DatePicker 在移动端视口自动切换为基于 Sheet 的布局。`],props:[{prop:`DatePicker.value`,type:`Date`,description:`受控选中日期。`},{prop:`DatePicker.defaultValue`,type:`Date`,description:`非受控初始日期。`},{prop:`DatePicker.onChange`,type:`(date: Date | undefined) => void`,description:`日期变化时调用。`},{prop:`DatePicker.label`,type:`string`,description:`输入框标签。`},{prop:`DatePicker.hint`,type:`string`,description:`输入框下方的帮助文字。`},{prop:`DatePicker.error`,type:`string`,description:`错误信息。`},{prop:`DatePicker.min`,type:`Date`,description:`最小可选日期。`},{prop:`DatePicker.max`,type:`Date`,description:`最大可选日期。`},{prop:`DatePicker.disabled`,type:`boolean`,description:`禁用日期选择器。`},{prop:`DatePicker.weekStartsOnMonday`,type:`boolean`,default:`false`,description:`每周从周一开始而非周日。`},{prop:`Calendar.value`,type:`Date`,description:`受控选中日期。`},{prop:`Calendar.defaultValue`,type:`Date`,description:`非受控初始日期。`},{prop:`Calendar.onChange`,type:`(date: Date) => void`,description:`点击日期时调用。`},{prop:`Calendar.min`,type:`Date`,description:`最小可选日期。`},{prop:`Calendar.max`,type:`Date`,description:`最大可选日期。`},{prop:`Calendar.weekStartsOnMonday`,type:`boolean`,default:`false`,description:`每周从周一开始。`}]},card:{section:`内容展示`,title:`卡片`,description:`灵活的内容容器,支持多种视觉变体。使用 Card 作为外层容器,内部组合 CardHeader、CardTitle、CardDescription 和 CardContent。`,guidance:[`对于可交互的卡片,使用 elevated 变体增强视觉层次。`,`设置 hoverable 可以在悬停时添加浮起效果,适用于图库或仪表盘磁贴。`,`padding 属性可调整内边距,适应密集或宽松的布局需求。`,`Card 本身是 <section> 元素,为无障碍考虑,始终应包含 CardTitle。`],props:[{prop:`variant`,type:`"default" | "flat" | "elevated" | "outlined" | "ghost" | "filled"`,default:`"default"`,description:`视觉样式预设。`},{prop:`padding`,type:`"none" | "sm" | "md" | "lg"`,description:`内边距大小,默认为卡片的内部间距。`},{prop:`hoverable`,type:`boolean`,default:`false`,description:`悬停时添加浮起效果,适用于可点击的卡片。`}]},form:{section:`表单`,title:`表单组合`,description:`由 Form、FormField、FormLabel、FormDescription、FormMessage 和 useFormField 构成的表单组合系统。可与任意输入组件配合,提供一致的标签、提示和错误布局。`,guidance:[`将每个逻辑字段组包裹在 FormField 中,通过 context 共享错误状态。`,`使用 FormLabel 的 required 属性可自动显示必填标记。`,`FormMessage 自动读取 FormField context 中的错误信息,无需手动传参。`,`Form 默认启用 noValidate,你需要自行处理验证逻辑或使用验证库。`],props:[{prop:`Form`,type:`—`,description:`表单根组件,携带 noValidate 和 vx-form 类名。`},{prop:`FormField`,type:`—`,description:`包裹字段组,向 FormMessage 提供错误上下文。`},{prop:`FormField.error`,type:`string`,description:`当前字段的错误信息,会被 FormMessage 显示。`},{prop:`FormLabel`,type:`—`,description:`渲染 <label>,支持可选的必填星号。`},{prop:`FormLabel.required`,type:`boolean`,description:`在标签文本后显示红色星号。`},{prop:`FormDescription`,type:`—`,description:`标签下方渲染的帮助提示文字。`},{prop:`FormMessage`,type:`—`,description:`错误或帮助提示消息,自动从 FormField context 读取错误。`},{prop:`useFormField`,type:`() => { error?: string }`,description:`Hook,用于读取当前字段的错误上下文。`}]},sheet:{section:`浮层`,title:`侧滑面板`,description:`从左侧、右侧、顶部或底部边缘滑出的面板。支持标题、描述、可选的确认操作,以及受控或非受控的打开状态。`,guidance:[`在需要展示次级内容但无需整页导航时使用 Sheet。`,`将 side 设为 "right" 用于详情面板,"bottom" 用于类似移动端的操作面板。`,`variant="action" 预设隐藏关闭按钮并显示确认底部栏,适用于删除等破坏性操作。`,`通过 open/onOpenChange 控制打开状态,或使用 defaultOpen 实现非受控使用。`],props:[{prop:`trigger`,type:`ReactNode`,description:`点击后打开面板的触发器元素。`},{prop:`children`,type:`ReactNode`,required:!0,description:`面板主体内容。`},{prop:`side`,type:`"left" | "right" | "top" | "bottom"`,default:`"right"`,description:`面板滑入的起始边缘。`},{prop:`variant`,type:`"default" | "action"`,default:`"default"`,description:`"action" 隐藏关闭按钮并显示确认底部栏。`},{prop:`title`,type:`ReactNode`,description:`面板标题。`},{prop:`description`,type:`ReactNode`,description:`面板描述。`},{prop:`header`,type:`ReactNode`,description:`自定义顶部内容(替换 title/description)。`},{prop:`footer`,type:`ReactNode`,description:`自定义底部内容。`},{prop:`open`,type:`boolean`,description:`受控打开状态。`},{prop:`defaultOpen`,type:`boolean`,description:`非受控初始打开状态。`},{prop:`onOpenChange`,type:`(open: boolean) => void`,description:`打开状态变化时的回调。`},{prop:`showClose`,type:`boolean`,default:`true`,description:`是否显示关闭按钮。`},{prop:`closeOnOverlayClick`,type:`boolean`,default:`true`,description:`点击遮罩层时是否关闭面板。`},{prop:`showConfirm`,type:`boolean`,default:`false`,description:`是否在底部显示确认按钮。`},{prop:`confirmText`,type:`string`,default:`"确认"`,description:`确认按钮的文字。`},{prop:`confirmDisabled`,type:`boolean`,default:`false`,description:`是否禁用确认按钮。`},{prop:`onConfirm`,type:`() => void`,description:`确认按钮回调。`},{prop:`width`,type:`number`,description:`自定义面板宽度(像素)。`}]},"vxui-provider":{section:`开始使用`,title:`VXUI Provider`,description:`组合 Provider,将 ThemeProvider、ViewportProvider 和 ToastProvider 合并为一个组件。在应用根节点使用以减少嵌套层级。`,guidance:[`VXUIProvider 替代了手动嵌套 ThemeProvider + ViewportProvider + ToastProvider。`,`themes、defaultTheme 和 storageKey 的用法与 ThemeProvider 完全相同。`,`此组件完全可选——如果需要更精细的控制,可以分别使用独立的 Provider。`],props:[{prop:`themes`,type:`ThemeRegistry`,description:`传递给 ThemeProvider 的主题配置。`},{prop:`defaultTheme`,type:`string`,description:`默认主题名称。`},{prop:`storageKey`,type:`string`,default:`"vxui-theme"`,description:`用于持久化主题选择的 localStorage 键名。`},{prop:`children`,type:`ReactNode`,required:!0,description:`应用内容。`}]},viewport:{section:`开始使用`,title:`视口`,description:`ViewportProvider 监听屏幕尺寸,通过 useViewport hook 暴露设备类型、方向和断点信息。`,guidance:[`ViewportProvider 使用物理屏幕尺寸 (window.screen.width) 进行设备类型分类。`,`屏幕宽度 ≤ 1000px 时被归类为平板或手机(通过宽高比区分)。`,`useViewport() 返回 isPhone、isTablet、isDesktop、isTabletPortrait 和原始 screenWidth/screenHeight。`,`与 CSS 断点不同,设备检测使用物理屏幕尺寸,因此分屏平板仍被识别为"平板"。`],props:[{prop:`children`,type:`ReactNode`,required:!0,description:`应用内容。`},{prop:`useViewport()`,type:`ViewportContextValue`,description:`返回视口状态的 Hook。`},{prop:`useViewport().viewport`,type:`"phone" | "tablet" | "desktop"`,description:`当前设备类型分类。`},{prop:`useViewport().isPhone`,type:`boolean`,description:`当前设备是否为手机(窄屏)。`},{prop:`useViewport().isTablet`,type:`boolean`,description:`当前设备是否为平板。`},{prop:`useViewport().isDesktop`,type:`boolean`,description:`当前设备是否为桌面端(宽度 > 1000px)。`},{prop:`useViewport().isTabletPortrait`,type:`boolean`,description:`平板且为竖屏时返回 true。`},{prop:`useViewport().screenWidth`,type:`number`,description:`物理屏幕宽度(CSS 像素)。`},{prop:`useViewport().screenHeight`,type:`number`,description:`物理屏幕高度(CSS 像素)。`}]},constants:{section:`开始使用`,title:`常量`,description:`响应式系统使用的布局断点和设备检测阈值。这些常量可用于自定义响应式逻辑。`,guidance:[`BREAKPOINTS.sm (640) 是手机到平板的 CSS 视口断点。`,`BREAKPOINTS.md (768) 是平板到桌面的 CSS 视口断点。`,`BREAKPOINTS.lg (1000) 同时作为 PHONE_MAX_WIDTH 用于设备类型检测。`,`PHONE_ASPECT_RATIO_THRESHOLD (0.7) 和 TABLET_ASPECT_RATIO_THRESHOLD (0.75) 通过宽高比区分手机和平板。`,`CSS 布局断点和设备检测阈值目的不同,值也不同。`],props:[{prop:`BREAKPOINTS.sm`,type:`640`,description:`手机到平板的 CSS 布局断点 (max-width: 640px)。`},{prop:`BREAKPOINTS.md`,type:`768`,description:`平板的 CSS 布局断点 (max-width: 768px)。`},{prop:`BREAKPOINTS.lg`,type:`1000`,description:`桌面端的 CSS 布局断点 (min-width: 1000px)。`},{prop:`PHONE_MAX_WIDTH`,type:`1000`,description:`设备检测的物理屏幕宽度阈值。`},{prop:`PHONE_ASPECT_RATIO_THRESHOLD`,type:`0.7`,description:`宽高比阈值——低于此值则归类为手机。`},{prop:`TABLET_ASPECT_RATIO_THRESHOLD`,type:`0.75`,description:`平板分类的宽高比上限阈值。`}]},calendar:{section:`表单`,title:`日历`,description:`基于月份的日历视图,用于选择日期。支持受控/非受控模式、日期范围限制和可配置的每周起始日。`,guidance:[`Calendar 可独立使用,也可嵌入 DatePicker 提供日期选择体验。`,`使用 value 进行受控模式,或 defaultValue 进行非受控模式。`,`通过 min 和 max 限制可选日期范围。`,`如果需要周一作为每周第一天,设置 weekStartsOnMonday。`],props:[{prop:`value`,type:`Date`,description:`受控模式下当前选中的日期。`},{prop:`defaultValue`,type:`Date`,description:`非受控模式的初始日期。`},{prop:`onChange`,type:`(date: Date) => void`,description:`选择日期时的回调。`},{prop:`min`,type:`Date`,description:`最小可选日期。`},{prop:`max`,type:`Date`,description:`最大可选日期。`},{prop:`weekStartsOnMonday`,type:`boolean`,default:`false`,description:`设置周一为一周的第一天。`},{prop:`className`,type:`string`,description:`自定义 CSS 类名。`}]},"bottom-nav":{section:`响应式`,title:`底部导航`,description:`移动端风格的底部导航栏,支持激活状态、角标和子菜单弹出。适用于侧边栏不实用的手机尺寸视口。`,guidance:[`在 MobileShell 中使用 BottomNav 获得原生移动端导航体验。`,`每个导航项需要 icon 和 label——图标显示在标签上方。`,`在导航项上设置 submenu 属性可显示弹出子菜单而非直接导航。`,`角标支持数值和字符串溢出(如 "99+")。`,`激活的导航项会设置 aria-current="page" 以满足无障碍需求。`],props:[{prop:`items`,type:`BottomNavItem[]`,required:!0,description:`导航项数组。`},{prop:`items[].key`,type:`string`,required:!0,description:`唯一标识。`},{prop:`items[].label`,type:`string`,required:!0,description:`图标下方的显示标签。`},{prop:`items[].icon`,type:`ReactNode`,required:!0,description:`显示在标签上方的图标。`},{prop:`items[].badge`,type:`string | number`,description:`图标角落显示的角标值。`},{prop:`items[].active`,type:`boolean`,description:`标记此项为当前激活页面。`},{prop:`items[].onSelect`,type:`() => void`,description:`点击处理函数(有 submenu 时忽略)。`},{prop:`items[].submenu`,type:`BottomNavSubMenuItem[]`,description:`点击时以弹出菜单显示的子菜单项。`},{prop:`className`,type:`string`,description:`自定义 CSS 类名。`}]}}}},ic=(0,l.createContext)({t:nc,locale:`en`,setLocale:()=>{}});function ac(){return(0,l.useContext)(ic)}var oc=Object.entries(rc).map(([e,t])=>({value:e,label:t.label}));function sc({variant:e=`inline`,className:t}){let{locale:n,setLocale:r}=ac();return(0,u.jsx)(Na,{options:oc,value:n,onChange:e=>{e&&r(e)},placeholder:`Language`,searchable:!1,clearable:!1,className:[`vx-lang-switcher`,e===`sidebar`&&`vx-lang-switcher--sidebar`,t].filter(Boolean).join(` `).trim(),mobileSheet:null})}var cc=[`children`,`className`],lc=[`children`,`className`],uc=[`children`,`className`],dc=[`children`,`className`],fc=[`children`,`className`,`sectionId`],pc=[`children`,`className`,`anchor`];function mc(e){let{children:t,className:n=``}=e,r=U(e,cc);return(0,u.jsx)(`article`,D(D({className:`vx-article ${n}`.trim()},r),{},{children:t}))}function hc(e){let{children:t,className:n=``}=e,r=U(e,lc);return(0,u.jsx)(`header`,D(D({className:`vx-article__header ${n}`.trim()},r),{},{children:t}))}function gc(e){let{children:t,className:n=``}=e,r=U(e,uc);return(0,u.jsx)(`h1`,D(D({className:`vx-article__title ${n}`.trim()},r),{},{children:t}))}function _c(e){let{children:t,className:n=``}=e,r=U(e,dc);return(0,u.jsx)(`div`,D(D({className:`vx-article__body ${n}`.trim()},r),{},{children:(0,u.jsx)(`div`,{className:`vx-article__content`,children:t})}))}function vc(e){let{children:t,className:n=``,sectionId:r}=e,i=U(e,fc);return(0,u.jsx)(`section`,D(D({id:r,className:`vx-section ${n}`.trim()},i),{},{children:t}))}function yc(e){let{children:t,className:n=``,anchor:r}=e,i=U(e,pc);return(0,u.jsxs)(`h2`,D(D({className:`vx-section__heading ${n}`.trim()},i),{},{children:[t,r&&(0,u.jsx)(`a`,{href:r,className:`vx-section__anchor`,"aria-label":`Link to ${r}`,children:`#`})]}))}function bc({prev:e,next:t,className:n=``}){return!e&&!t?null:(0,u.jsxs)(`nav`,{className:`vx-pager ${n}`.trim(),"aria-label":`Page navigation`,children:[e?(0,u.jsxs)(`button`,{type:`button`,className:`vx-pager__btn`,onClick:e.onClick,children:[(0,u.jsx)(`span`,{className:`vx-pager__dir`,children:`← Previous`}),(0,u.jsx)(`span`,{className:`vx-pager__label`,children:e.label})]}):(0,u.jsx)(`div`,{}),t&&(0,u.jsxs)(`button`,{type:`button`,className:`vx-pager__btn vx-pager__btn--next`,onClick:t.onClick,children:[(0,u.jsx)(`span`,{className:`vx-pager__dir`,children:`Next →`}),(0,u.jsx)(`span`,{className:`vx-pager__label`,children:t.label})]})]})}function xc({columns:e,className:t=``}){return(0,u.jsx)(`div`,{className:`vx-props-table-wrapper ${t}`.trim(),children:(0,u.jsxs)(`table`,{className:`vx-props-table`,children:[(0,u.jsx)(`thead`,{children:(0,u.jsxs)(`tr`,{children:[(0,u.jsx)(`th`,{children:`Prop`}),(0,u.jsx)(`th`,{children:`Type`}),(0,u.jsx)(`th`,{children:`Default`}),(0,u.jsx)(`th`,{children:`Description`})]})}),(0,u.jsx)(`tbody`,{children:e.map(e=>(0,u.jsxs)(`tr`,{children:[(0,u.jsxs)(`td`,{children:[(0,u.jsx)(`code`,{children:e.prop}),e.required&&(0,u.jsx)(`span`,{className:`vx-prop-required`,title:`Required`,children:`*`})]}),(0,u.jsx)(`td`,{children:(0,u.jsx)(`code`,{className:`vx-prop-type`,children:e.type})}),(0,u.jsx)(`td`,{children:e.default?(0,u.jsx)(`code`,{children:e.default}):(0,u.jsx)(`span`,{className:`vx-prop-dash`,children:`—`})}),(0,u.jsx)(`td`,{children:e.description})]},e.prop))})]})})}function Sc({icon:e,title:t,description:n,action:r,className:i=``}){return(0,u.jsxs)(`div`,{className:`vx-empty ${i}`.trim(),children:[e&&(0,u.jsx)(`div`,{className:`vx-empty__icon`,children:e}),(0,u.jsx)(`strong`,{children:t}),n&&(0,u.jsx)(`p`,{children:n}),r]})}function Cc({items:e,className:t=``}){return(0,u.jsx)(`div`,{className:`vx-stats ${t}`.trim(),children:e.map(e=>(0,u.jsxs)(`div`,{className:`vx-stat`,children:[(0,u.jsxs)(`div`,{className:`vx-stat__copy`,children:[(0,u.jsx)(`span`,{className:`vx-stat__label`,children:e.label}),(0,u.jsx)(`strong`,{className:`vx-stat__value`,children:e.value}),e.hint&&(0,u.jsx)(`small`,{className:`vx-stat__hint`,children:e.hint})]}),e.icon&&(0,u.jsx)(`div`,{className:`vx-stat__icon`,children:e.icon})]},e.label))})}var wc=[`src`,`alt`,`width`,`height`,`radius`,`fit`,`lazy`,`placeholder`,`fallback`,`preview`,`caption`,`className`,`style`],Tc={none:`0`,sm:`var(--vx-radius-sm)`,md:`var(--vx-radius)`,lg:`var(--vx-radius-lg)`,full:`9999px`};function Ec(e){let{src:t,alt:n=``,width:r,height:i,radius:a=`md`,fit:o=`cover`,lazy:s=!0,placeholder:c,fallback:f,preview:p=!1,caption:m,className:h,style:g}=e,_=U(e,wc),[v,y]=(0,l.useState)(`idle`),[b,x]=(0,l.useState)(!1),S=(0,l.useRef)(null),C=(0,l.useRef)(null);(0,l.useEffect)(()=>{if(!s){y(`loading`);return}let e=C.current;if(!e)return;let t=new IntersectionObserver(([e])=>{e.isIntersecting&&(y(`loading`),t.disconnect())},{rootMargin:`200px`});return t.observe(e),()=>t.disconnect()},[s,t]);let w=(0,l.useCallback)(()=>y(`loaded`),[]),T=(0,l.useCallback)(()=>y(`error`),[]),E=(0,l.useCallback)(()=>{p&&v===`loaded`&&x(!0)},[p,v]),O=v===`idle`||v===`loading`,k=v===`error`,A=D(D({},g),{},{width:typeof r==`number`?`${r}px`:r,height:typeof i==`number`?`${i}px`:i,"--vx-image-radius":Tc[a]});return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{ref:C,className:$(`vx-image`,p&&v===`loaded`&&`vx-image--preview`,h),style:A,children:k&&f?(0,u.jsx)(`div`,{className:`vx-image__fallback`,children:f}):(0,u.jsxs)(u.Fragment,{children:[O&&(0,u.jsx)(`div`,{className:`vx-image__placeholder`,children:c==null?(0,u.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,className:`vx-image__placeholder-icon`,"aria-hidden":`true`,children:[(0,u.jsx)(`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`3`,stroke:`currentColor`,strokeWidth:`1.5`}),(0,u.jsx)(`circle`,{cx:`8.5`,cy:`8.5`,r:`2`,stroke:`currentColor`,strokeWidth:`1.5`}),(0,u.jsx)(`path`,{d:`M3 16l5-5 3 3 4-4 6 6`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinejoin:`round`})]}):c}),v!==`idle`&&(0,u.jsx)(`img`,D({ref:S,src:t,alt:n,className:`vx-image__img`,style:{objectFit:o},onLoad:w,onError:T,onClick:E},_)),p&&v===`loaded`&&(0,u.jsx)(`div`,{className:`vx-image__preview-hint`,"aria-hidden":`true`,children:(0,u.jsx)(Pn,{size:14})})]})}),m&&!k&&(0,u.jsx)(`p`,{className:`vx-image__caption`,children:m}),b&&(0,d.createPortal)((0,u.jsx)(Dc,{src:t,alt:n,onClose:()=>x(!1)}),document.body)]})}function Dc({src:e,alt:t,onClose:n}){return xr(!0),(0,l.useEffect)(()=>{let e=e=>{e.key===`Escape`&&n()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[n]),(0,u.jsxs)(`div`,{className:`vx-image-lightbox`,onClick:e=>{e.target===e.currentTarget&&n()},children:[(0,u.jsx)(`img`,{src:e,alt:t,className:`vx-image-lightbox__img`}),(0,u.jsx)(`button`,{type:`button`,className:`vx-image-lightbox__close`,onClick:n,"aria-label":`关闭预览`,children:(0,u.jsx)(Q,{size:20})})]})}function Oc(e,t){return t===`numeric`?/^\d$/.test(e):/^[a-zA-Z0-9]$/.test(e)}function kc({length:e=6,value:t,defaultValue:n=``,onChange:r,onComplete:i,type:a=`numeric`,size:o=`md`,placeholder:s=`○`,disabled:c=!1,error:d,label:f,hint:p,mask:m=!1,autoFocus:h=!1,"aria-label":g,className:_}){var v;let y=t!==void 0,[b,x]=(0,l.useState)(n.padEnd(e,``).slice(0,e)),S=y?t.padEnd(e,``).slice(0,e).split(``):b.padEnd(e,``).slice(0,e).split(``),C=(0,l.useRef)([]),w=(0,l.useId)(),T=(0,l.useCallback)(t=>{y||x(t),r==null||r(t),t.length===e&&!t.includes(``)&&(i==null||i(t))},[y,e,r,i]),E=(0,l.useCallback)(e=>{let t=C.current[e];t&&(t.focus(),t.select())},[]),D=(0,l.useCallback)((t,n)=>{if(!Oc(n,a))return;let r=S.map((e,r)=>r===t?n:e).join(``);T(r),t<e-1&&E(t+1)},[S,a,e,T,E]),O=(0,l.useCallback)((t,n)=>{if(n.key===`Backspace`){n.preventDefault();let e=S.map((e,n)=>n===t?``:e).join(``);T(e),t>0&&E(t-1)}else n.key===`ArrowLeft`&&t>0?(n.preventDefault(),E(t-1)):n.key===`ArrowRight`&&t<e-1&&(n.preventDefault(),E(t+1))},[S,e,T,E]),k=(0,l.useCallback)(t=>{t.preventDefault();let n=t.clipboardData.getData(`text`).slice(0,e).split(``).filter(e=>Oc(e,a)).join(``);if(!n)return;let r=S.map((e,t)=>t<n.length?n[t]:e),i=r.join(``);T(i);let o=r.findIndex(e=>!e||e===` `);E(o===-1?Math.min(n.length,e-1):o)},[S,e,a,T,E]);return(0,u.jsxs)(`div`,{className:$(`vx-pin-input`,_),children:[f?(0,u.jsx)(`label`,{className:`vx-field-group__label`,htmlFor:`${w}-0`,children:f}):null,(0,u.jsx)(`div`,{className:$(`vx-pin-input__group`,`vx-pin-input--${o}`,d&&`vx-pin-input--invalid`,c&&`vx-pin-input--disabled`),role:`group`,"aria-label":(v=g==null?f:g)==null?`Pin input`:v,children:Array.from({length:e},(e,t)=>(0,u.jsx)(`input`,{id:`${w}-${t}`,ref:e=>{C.current[t]=e},type:m?`password`:a===`numeric`?`tel`:`text`,inputMode:a===`numeric`?`numeric`:`text`,pattern:a===`numeric`?`[0-9]`:void 0,maxLength:1,value:S[t]&&S[t]!==` `?S[t]:``,placeholder:s,disabled:c,autoComplete:`one-time-code`,"aria-label":`Digit ${t+1}`,className:`vx-pin-input__field`,autoFocus:h&&t===0,onChange:e=>{let n=e.target.value;n&&D(t,n.slice(-1))},onKeyDown:e=>O(t,e),onPaste:k,onFocus:e=>e.target.select()},t))}),d?(0,u.jsx)(`span`,{className:`vx-field-group__error`,children:d}):null,!d&&p?(0,u.jsx)(`span`,{className:`vx-field-group__hint`,children:p}):null]})}var Ac=[`items`,`layout`,`column`,`size`,`bordered`,`title`,`extra`,`className`],jc={sm:{py:`6px`,px:`10px`,fs:`12px`},md:{py:`10px`,px:`14px`,fs:`13px`},lg:{py:`14px`,px:`18px`,fs:`14px`}};function Mc(e){let{items:t,layout:n=`horizontal`,column:r,size:i=`md`,bordered:a=!0,title:o,extra:s,className:c}=e,l=U(e,Ac),d=r==null?n===`vertical`?1:3:r,f=jc[i],p=[],m=[],h=0;for(let e of t){var g;let t=Math.min((g=e.span)==null?1:g,d);h+t>d?(m.length>0&&p.push(m),m=[e],h=t):(m.push(e),h+=t)}m.length>0&&p.push(m);let _={padding:`${f.py} ${f.px}`,fontSize:f.fs};return(0,u.jsxs)(`div`,D(D({className:$(`vx-descriptions`,`vx-descriptions--${n}`,`vx-descriptions--${i}`,a&&`vx-descriptions--bordered`,c),style:{"--vx-desc-cols":d}},l),{},{children:[(o||s)&&(0,u.jsxs)(`div`,{className:`vx-descriptions__header`,children:[o&&(0,u.jsx)(`h3`,{className:`vx-descriptions__title`,children:o}),s&&(0,u.jsx)(`div`,{className:`vx-descriptions__extra`,children:s})]}),n===`horizontal`?(0,u.jsx)(`table`,{className:`vx-descriptions__table`,children:(0,u.jsx)(`tbody`,{children:p.map((e,t)=>(0,u.jsx)(`tr`,{className:`vx-descriptions__row`,children:e.map((e,t)=>{var n;return(0,u.jsxs)(`td`,{colSpan:(n=e.span)==null?1:n,className:`vx-descriptions__cell`,children:[(0,u.jsx)(`dt`,{className:`vx-descriptions__label`,style:_,children:e.label}),(0,u.jsx)(`dd`,{className:`vx-descriptions__value`,style:_,children:e.children})]},t)})},t))})}):(0,u.jsx)(`div`,{className:`vx-descriptions__vertical`,children:p.map((e,t)=>(0,u.jsx)(`div`,{className:`vx-descriptions__vrow`,children:e.map((e,t)=>{var n;let r=(n=e.span)==null?1:n;return(0,u.jsxs)(`div`,{className:`vx-descriptions__vcell`,style:{gridColumn:r>1?`span ${r}`:void 0},children:[(0,u.jsx)(`dt`,{className:`vx-descriptions__label`,style:_,children:e.label}),(0,u.jsx)(`dd`,{className:`vx-descriptions__value`,style:_,children:e.children})]},t)})},t))})]}))}var Nc=(0,l.createContext)(null),Pc=1,Fc={info:(0,u.jsx)(En,{size:16}),success:(0,u.jsx)(Sn,{size:16}),warning:(0,u.jsx)(Mn,{size:16}),danger:(0,u.jsx)(xn,{size:16})};function Ic({children:e,placement:t=`top-right`,maxCount:n=5}){let[r,i]=(0,l.useState)([]),a=(0,l.useCallback)(e=>{i(t=>t.filter(t=>t.id!==e))},[]),o=(0,l.useCallback)(()=>{i([])},[]),s=(0,l.useCallback)(e=>{let t=Pc+=1,r=D(D({tone:`info`,duration:0},e),{},{id:t});return i(e=>{let t=[...e,r];return t.length>n?t.slice(t.length-n):t}),r.duration&&r.duration>0&&setTimeout(()=>a(t),r.duration),t},[n,a]),c=(0,l.useMemo)(()=>({push:s,dismiss:a,clear:o}),[s,a,o]);return(0,u.jsxs)(Nc.Provider,{value:c,children:[e,r.length>0&&(0,d.createPortal)((0,u.jsx)(`div`,{className:$(`vx-notification-stack`,`vx-notification-stack--${t}`),role:`region`,"aria-label":`通知`,children:r.map(e=>{var t,n;return(0,u.jsxs)(`div`,{className:$(`vx-notification`,`vx-notification--${(t=e.tone)==null?`info`:t}`),role:`alert`,"aria-live":`polite`,children:[(0,u.jsx)(`div`,{className:`vx-notification__icon`,"aria-hidden":`true`,children:Fc[(n=e.tone)==null?`info`:n]}),(0,u.jsxs)(`div`,{className:`vx-notification__body`,children:[(0,u.jsx)(`p`,{className:`vx-notification__title`,children:e.title}),e.description&&(0,u.jsx)(`p`,{className:`vx-notification__description`,children:e.description}),e.action&&(0,u.jsx)(`div`,{className:`vx-notification__action`,children:e.action})]}),(0,u.jsx)(`button`,{type:`button`,className:`vx-notification__close`,"aria-label":`关闭通知`,onClick:()=>a(e.id),children:(0,u.jsx)(Q,{size:14})})]},e.id)})}),document.body)]})}function Lc(){let e=(0,l.useContext)(Nc);if(!e)throw Error(`useNotification must be used within a NotificationProvider.`);return e}var Rc=[`status`,`title`,`description`,`icon`,`actions`,`extra`,`className`],zc={success:{icon:(0,u.jsx)(Sn,{size:56}),className:`vx-result--success`},error:{icon:(0,u.jsx)(Cn,{size:56}),className:`vx-result--error`},warning:{icon:(0,u.jsx)(Mn,{size:56}),className:`vx-result--warning`},info:{icon:(0,u.jsx)(En,{size:56}),className:`vx-result--info`},forbidden:{icon:(0,u.jsx)(gn,{size:56}),className:`vx-result--forbidden`},"not-found":{icon:(0,u.jsx)(kn,{size:56}),className:`vx-result--not-found`},"server-error":{icon:(0,u.jsx)(jn,{size:56}),className:`vx-result--server-error`}};function Bc(e){let{status:t,title:n,description:r,icon:i,actions:a,extra:o,className:s}=e,c=U(e,Rc),l=zc[t];return(0,u.jsxs)(`div`,D(D({className:$(`vx-result`,l.className,s),role:`status`,"aria-live":`polite`},c),{},{children:[(0,u.jsx)(`div`,{className:`vx-result__icon`,"aria-hidden":`true`,children:i==null?l.icon:i}),(0,u.jsx)(`h2`,{className:`vx-result__title`,children:n}),r&&(0,u.jsx)(`p`,{className:`vx-result__description`,children:r}),a&&(0,u.jsx)(`div`,{className:`vx-result__actions`,children:a}),o&&(0,u.jsx)(`div`,{className:`vx-result__extra`,children:o})]}))}exports.Accordion=fo,exports.ActionSheet=ms,exports.ActionSheetItem=hs,exports.Alert=Za,exports.AppShell=rr,exports.Article=mc,exports.ArticleBody=_c,exports.ArticleEmptyState=Sc,exports.ArticleHeader=hc,exports.ArticleTitle=gc,exports.Avatar=yo,exports.BREAKPOINTS=f,exports.Badge=ar,exports.BottomNav=Oo,exports.Breadcrumb=co,exports.Button=Hn,exports.Calendar=Qo,exports.Card=dr,exports.CardContent=hr,exports.CardDescription=mr,exports.CardHeader=fr,exports.CardTitle=pr,exports.Carousel=As,exports.Checkbox=Fa,exports.CodeBlock=ec,exports.ColorPicker=Vs,exports.CommandPalette=Xs,exports.ContextMenu=Ss,exports.DatePicker=ts,exports.Descriptions=Mc,exports.Dialog=Ir,exports.DialogClose=Pr,exports.DrawerNavItem=_s,exports.DrawerNavSection=vs,exports.DropdownMenu=oo,exports.EmptyState=ks,exports.FileUpload=fs,exports.Form=Ho,exports.FormDescription=Go,exports.FormField=Uo,exports.FormLabel=Wo,exports.FormMessage=Ko,exports.Heading=xa,exports.HoverCard=Cs,exports.Image=Ec,exports.Input=Rr,exports.Label=Fo,exports.LanguageSwitcher=sc,exports.Menubar=ws,exports.MobileDrawer=gs,exports.MobileIconButton=Do,exports.MobileList=jo,exports.MobileListItem=No,exports.MobileListSection=Mo,exports.MobileShell=To,exports.MobileTopBar=Eo,exports.MultiSelect=rs,exports.NavigationMenu=Ts,exports.NotificationProvider=Ic,exports.NumberInput=Jo,exports.PHONE_ASPECT_RATIO_THRESHOLD=m,exports.PHONE_MAX_WIDTH=p,exports.Pager=bc,exports.Pagination=uo,exports.PinInput=kc,exports.Popover=to,exports.Progress=Ja,exports.PropsTable=xc,exports.Radio=Ra,exports.RadioGroup=za,exports.Rating=Ms,exports.ResizableHandle=qs,exports.ResizablePanel=Gs,exports.ResizablePanelGroup=Ws,exports.Responsive=x,exports.Result=Bc,exports.ScrollArea=Gn,exports.Section=vc,exports.SectionHeading=yc,exports.SegmentedControl=Ia,exports.Select=Na,exports.Separator=mo,exports.Sheet=ja,exports.Shell=qn,exports.ShellContent=tr,exports.ShellMain=$n,exports.ShellNav=Yn,exports.ShellNavItem=Zn,exports.ShellNavSection=Xn,exports.ShellOverlay=Qn,exports.ShellSidebar=Jn,exports.ShellTopbar=er,exports.Skeleton=$a,exports.Slider=Ua,exports.Spinner=Ka,exports.StatsGrid=Cc,exports.Stepper=Ds,exports.Switch=si,exports.TABLET_ASPECT_RATIO_THRESHOLD=h,exports.Table=Co,exports.Tabs=ma,exports.TabsContent=_a,exports.TabsList=ha,exports.TabsTrigger=ga,exports.TagInput=Is,exports.Text=ya,exports.Textarea=Va,exports.ThemeProvider=I,exports.TimePicker=ds,exports.Timeline=Os,exports.ToastProvider=Rn,exports.Toggle=bs,exports.ToggleGroup=xs,exports.Tooltip=eo,exports.TreeView=Ps,exports.VXUIProvider=Bn,exports.ViewportProvider=y,exports.createTheme=k,exports.themePresets=A,exports.useFormField=Vo,exports.useNotification=Lc,exports.useTheme=L,exports.useToast=zn,exports.useViewport=b;
|