@react-devtools-plus/ui 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +664 -0
- package/dist/index.js +581 -0
- package/dist/index.js.map +1 -0
- package/dist/theme.cjs +5 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.ts +372 -0
- package/dist/theme.js +474 -0
- package/dist/theme.js.map +1 -0
- package/dist/ui.css +1 -0
- package/package.json +52 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 webfansplz
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var Z=Object.defineProperty,H=Object.defineProperties;var F=Object.getOwnPropertyDescriptors;var I=Object.getOwnPropertySymbols;var E=Object.prototype.hasOwnProperty,L=Object.prototype.propertyIsEnumerable;var W=(o,e,t)=>e in o?Z(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,m=(o,e)=>{for(var t in e||(e={}))E.call(e,t)&&W(o,t,e[t]);if(I)for(var t of I(e))L.call(e,t)&&W(o,t,e[t]);return o},b=(o,e)=>H(o,F(e));var y=(o,e)=>{var t={};for(var s in o)E.call(o,s)&&e.indexOf(s)<0&&(t[s]=o[s]);if(o!=null&&I)for(var s of I(o))e.indexOf(s)<0&&L.call(o,s)&&(t[s]=o[s]);return t};Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),g=require("react"),K=require("react-dom"),i=require("./theme.cjs"),V="Badge-module__wrapper___DxhQK",Y="Badge-module__badge___RsuMz",q="Badge-module__standalone___etUpX",Q="Badge-module__dot___i0c-G",X="Badge-module__size-sm___C5J66",G="Badge-module__size-lg___nYU0Z",A="Badge-module__color-primary___LWp2-",U="Badge-module__color-success___tWyRo",ee="Badge-module__color-warning___9Jy7J",oe="Badge-module__color-error___rwZFr",te="Badge-module__color-info___CkG5J",_e="Badge-module__color-neutral___KWbX-",h={wrapper:V,badge:Y,standalone:q,dot:Q,"size-sm":"Badge-module__size-sm___C5J66",sizeSm:X,"size-lg":"Badge-module__size-lg___nYU0Z",sizeLg:G,"color-primary":"Badge-module__color-primary___LWp2-",colorPrimary:A,"color-success":"Badge-module__color-success___tWyRo",colorSuccess:U,"color-warning":"Badge-module__color-warning___9Jy7J",colorWarning:ee,"color-error":"Badge-module__color-error___rwZFr",colorError:oe,"color-info":"Badge-module__color-info___CkG5J",colorInfo:te,"color-neutral":"Badge-module__color-neutral___KWbX-",colorNeutral:_e},se=({children:o,count:e=0,dot:t=!1,max:s=99,color:a="primary",size:n="md",showZero:c=!1,className:p="",style:_})=>{const l=typeof e=="number"?e:0,u=l>s?`${s}+`:e,d=t||c||l>0||typeof e=="string"&&e;return o?r.jsxs("span",{className:[h.wrapper,p].filter(Boolean).join(" "),style:_,children:[o,d&&r.jsx("span",{className:[h.badge,h[`color-${a}`],h[`size-${n}`],t&&h.dot].filter(Boolean).join(" "),children:!t&&u})]}):r.jsx("span",{className:[h.standalone,h[`color-${a}`],h[`size-${n}`],t&&h.dot,p].filter(Boolean).join(" "),style:_,children:!t&&u})},re="Button-module__button___2ZuB7",ae="Button-module__size-sm___yph5g",ne="Button-module__size-md___HBcrV",le="Button-module__size-lg___2sR8u",ce="Button-module__variant-default___uQ3S6",de="Button-module__disabled___Tl9fh",ie="Button-module__variant-primary___yvq47",ue="Button-module__variant-success___0aOFB",me="Button-module__variant-warning___-sJWp",pe="Button-module__variant-error___eSqWK",ge="Button-module__variant-ghost___3HPKX",he="Button-module__variant-text___jt-rA",ze="Button-module__loading___EQAt2",Se="Button-module__content___EKXmF",be="Button-module__icon___-43u5",fe="Button-module__block___bnWJO",we="Button-module__spinner___ZExvW",xe="Button-module__spin___JvkZu",z={button:re,"size-sm":"Button-module__size-sm___yph5g",sizeSm:ae,"size-md":"Button-module__size-md___HBcrV",sizeMd:ne,"size-lg":"Button-module__size-lg___2sR8u",sizeLg:le,"variant-default":"Button-module__variant-default___uQ3S6",variantDefault:ce,disabled:de,"variant-primary":"Button-module__variant-primary___yvq47",variantPrimary:ie,"variant-success":"Button-module__variant-success___0aOFB",variantSuccess:ue,"variant-warning":"Button-module__variant-warning___-sJWp",variantWarning:me,"variant-error":"Button-module__variant-error___eSqWK",variantError:pe,"variant-ghost":"Button-module__variant-ghost___3HPKX",variantGhost:ge,"variant-text":"Button-module__variant-text___jt-rA",variantText:he,loading:ze,content:Se,icon:be,block:fe,spinner:we,spin:xe},ve=v=>{var f=v,{children:o,htmlType:e="button",variant:t="default",size:s="md",disabled:a=!1,loading:n=!1,block:c=!1,icon:p,className:_="",style:l,onClick:u}=f,d=y(f,["children","htmlType","variant","size","disabled","loading","block","icon","className","style","onClick"]);const j=[z.button,z[`variant-${t}`],z[`size-${s}`],c&&z.block,(a||n)&&z.disabled,n&&z.loading,_].filter(Boolean).join(" ");return r.jsxs("button",b(m({type:e,className:j,disabled:a||n,style:l,onClick:u},d),{children:[n&&r.jsx("span",{className:z.spinner}),!n&&p&&r.jsx("span",{className:z.icon,children:p}),o&&r.jsx("span",{className:z.content,children:o})]}))},ye="Card-module__card___Cb1o4",Be="Card-module__bordered___fBy0-",Te="Card-module__hoverable___aGYcW",$e="Card-module__header___PTXf2",Ne="Card-module__title___mSgoo",ke="Card-module__body___W441Z",je="Card-module__padding-none___OI9cD",Ie="Card-module__padding-sm___zE1jj",Ce="Card-module__padding-md___ndH23",Me="Card-module__padding-lg___l9K5D",w={card:ye,bordered:Be,hoverable:Te,header:$e,title:Ne,body:ke,"padding-none":"Card-module__padding-none___OI9cD",paddingNone:je,"padding-sm":"Card-module__padding-sm___zE1jj",paddingSm:Ie,"padding-md":"Card-module__padding-md___ndH23",paddingMd:Ce,"padding-lg":"Card-module__padding-lg___l9K5D",paddingLg:Me},We=({title:o,children:e,className:t="",bordered:s=!0,hoverable:a=!1,padding:n="md",style:c,onClick:p})=>{const _=[w.card,s&&w.bordered,a&&w.hoverable,w[`padding-${n}`],t].filter(Boolean).join(" ");return r.jsxs("div",{className:_,style:c,onClick:p,children:[o&&r.jsx("div",{className:w.header,children:r.jsx("h3",{className:w.title,children:o})}),r.jsx("div",{className:w.body,children:e})]})},Ee="Checkbox-module__checkbox___lSeQj",Le="Checkbox-module__input___2kt-h",Pe="Checkbox-module__box___OCPee",Oe="Checkbox-module__checkIcon___L7mG7",Re="Checkbox-module__label___cwRtI",Je="Checkbox-module__disabled___x7-eg",B={checkbox:Ee,input:Le,box:Pe,checkIcon:Oe,label:Re,disabled:Je},P=g.forwardRef((p,c)=>{var _=p,{checked:o,onChange:e,label:t,disabled:s,className:a=""}=_,n=y(_,["checked","onChange","label","disabled","className"]);return r.jsxs("label",{className:`${B.checkbox} ${s?B.disabled:""} ${a}`,children:[r.jsx("input",m({type:"checkbox",className:B.input,checked:o,onChange:l=>e==null?void 0:e(l.target.checked),disabled:s,ref:c},n)),r.jsx("div",{className:B.box,children:r.jsx("svg",{className:B.checkIcon,viewBox:"0 0 24 24",children:r.jsx("polyline",{points:"20 6 9 17 4 12"})})}),t&&r.jsx("span",{className:B.label,children:t})]})});P.displayName="Checkbox";const De="Input-module__wrapper___iHNUs",Ze="Input-module__disabled___nzcnQ",He="Input-module__size-sm___3ztQq",Fe="Input-module__size-md___I7Ar8",Ke="Input-module__size-lg___sd7Z-",Ve="Input-module__status-error___Spzrx",Ye="Input-module__status-warning___mWfkv",qe="Input-module__status-success___Ik3ZH",Qe="Input-module__block___RCPH3",Xe="Input-module__input___WjT81",Ge="Input-module__prefix___tWvYu",Ae="Input-module__suffix___MnuX-",Ue="Input-module__clear___Y9bUX",S={wrapper:De,disabled:Ze,"size-sm":"Input-module__size-sm___3ztQq",sizeSm:He,"size-md":"Input-module__size-md___I7Ar8",sizeMd:Fe,"size-lg":"Input-module__size-lg___sd7Z-",sizeLg:Ke,"status-error":"Input-module__status-error___Spzrx",statusError:Ve,"status-warning":"Input-module__status-warning___mWfkv",statusWarning:Ye,"status-success":"Input-module__status-success___Ik3ZH",statusSuccess:qe,block:Qe,input:Xe,prefix:Ge,suffix:Ae,clear:Ue},O=g.forwardRef((v,d)=>{var f=v,{size:o="md",status:e,prefix:t,suffix:s,allowClear:a=!1,onClear:n,block:c=!1,className:p="",disabled:_,value:l}=f,u=y(f,["size","status","prefix","suffix","allowClear","onClear","block","className","disabled","value"]);const j=[S.wrapper,S[`size-${o}`],e&&S[`status-${e}`],_&&S.disabled,c&&S.block,p].filter(Boolean).join(" "),$=a&&l&&!_;return r.jsxs("div",{className:j,children:[t&&r.jsx("span",{className:S.prefix,children:t}),r.jsx("input",m({ref:d,className:S.input,disabled:_,value:l},u)),$&&r.jsx("button",{type:"button",className:S.clear,onClick:n,tabIndex:-1,children:"×"}),s&&!$&&r.jsx("span",{className:S.suffix,children:s})]})});O.displayName="Input";const eo="Select-module__wrapper___KS2K3",oo="Select-module__select___cjdcr",to="Select-module__size-sm___QLegM",_o="Select-module__size-md___0JLRh",so="Select-module__size-lg___WT5Lo",ro="Select-module__arrow___w35wW",ao="Select-module__arrow-sm___8eD2n",k={wrapper:eo,select:oo,"size-sm":"Select-module__size-sm___QLegM",sizeSm:to,"size-md":"Select-module__size-md___0JLRh",sizeMd:_o,"size-lg":"Select-module__size-lg___WT5Lo",sizeLg:so,arrow:ro,"arrow-sm":"Select-module__arrow-sm___8eD2n",arrowSm:ao},R=g.forwardRef((p,c)=>{var _=p,{options:o=[],onChange:e,className:t="",size:s="md",children:a}=_,n=y(_,["options","onChange","className","size","children"]);const l=[k.select,k[`size-${s}`]].filter(Boolean).join(" "),u=[k.arrow,s==="sm"&&k["arrow-sm"]].filter(Boolean).join(" ");return r.jsxs("div",{className:`${k.wrapper} ${t}`,children:[r.jsxs("select",b(m({className:l,onChange:d=>e==null?void 0:e(d.target.value),ref:c},n),{children:[o.map(d=>r.jsx("option",{value:d.value,children:d.label},d.value)),a]})),r.jsx("svg",{className:u,viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.5",d:"M6 8l4 4 4-4"})})]})});R.displayName="Select";const no="Switch-module__input___5BPNu",lo="Switch-module__track___7ObdZ",co="Switch-module__size-sm___3fYth",io="Switch-module__size-md___SNixg",uo="Switch-module__size-lg___0syzl",mo="Switch-module__disabled___2aZ0V",po="Switch-module__label___LrH7V",T={switch:"Switch-module__switch___hgdMu",input:no,track:lo,"size-sm":"Switch-module__size-sm___3fYth",sizeSm:co,"size-md":"Switch-module__size-md___SNixg",sizeMd:io,"size-lg":"Switch-module__size-lg___0syzl",sizeLg:uo,disabled:mo,label:po},J=p=>{var _=p,{checked:o,onChange:e,label:t,className:s="",disabled:a,size:n="md"}=_,c=y(_,["checked","onChange","label","className","disabled","size"]);const l=[T.switch,a&&T.disabled,s].filter(Boolean).join(" "),u=[T.track,T[`size-${n}`]].filter(Boolean).join(" ");return r.jsxs("label",{className:l,children:[r.jsx("input",m({type:"checkbox",className:T.input,checked:o,onChange:d=>e==null?void 0:e(d.target.checked),disabled:a},c)),r.jsx("div",{className:u}),t&&r.jsx("span",{className:T.label,children:t})]})};J.displayName="Switch";const go="Tag-module__tag___16VPH",ho="Tag-module__size-sm___DpOlV",zo="Tag-module__size-md___fa5ep",So="Tag-module__variant-solid___Hi-Zy",bo="Tag-module__color-primary___rx17k",fo="Tag-module__variant-outline___7Zcet",wo="Tag-module__color-success___-zzpn",xo="Tag-module__color-warning___EKTvk",vo="Tag-module__color-error___mYB7S",yo="Tag-module__color-info___vNcdt",Bo="Tag-module__color-neutral___5FRfc",To="Tag-module__clickable___KYvr6",$o="Tag-module__closable___w571P",No="Tag-module__close___SCP4u",x={tag:go,"size-sm":"Tag-module__size-sm___DpOlV",sizeSm:ho,"size-md":"Tag-module__size-md___fa5ep",sizeMd:zo,"variant-solid":"Tag-module__variant-solid___Hi-Zy",variantSolid:So,"color-primary":"Tag-module__color-primary___rx17k",colorPrimary:bo,"variant-outline":"Tag-module__variant-outline___7Zcet",variantOutline:fo,"color-success":"Tag-module__color-success___-zzpn",colorSuccess:wo,"color-warning":"Tag-module__color-warning___EKTvk",colorWarning:xo,"color-error":"Tag-module__color-error___mYB7S",colorError:vo,"color-info":"Tag-module__color-info___vNcdt",colorInfo:yo,"color-neutral":"Tag-module__color-neutral___5FRfc",colorNeutral:Bo,clickable:To,closable:$o,close:No},ko=({children:o,color:e="neutral",variant:t="outline",size:s="md",closable:a=!1,onClose:n,onClick:c,className:p="",style:_})=>{const l=c?"button":"span",u=[x.tag,x[`size-${s}`],x[`variant-${t}`],x[`color-${e}`],c&&x.clickable,a&&x.closable,p].filter(Boolean).join(" ");return r.jsxs(l,{type:c?"button":void 0,className:u,style:_,onClick:c,children:[r.jsx("span",{children:o}),a&&r.jsx("button",{type:"button",className:x.close,onClick:d=>{d.stopPropagation(),n==null||n(d)},"aria-label":"Close",children:"×"})]})},D=g.createContext(null),jo={},Io=({children:o,config:e=jo,storageKey:t="react-devtools-theme"})=>{const[s,a]=g.useState(()=>{if(typeof window=="undefined")return e;try{const _=localStorage.getItem(t),l=localStorage.getItem(`${t}-initial`);if(_){const u=JSON.parse(_);return(l?JSON.stringify(JSON.parse(l))!==JSON.stringify(e):JSON.stringify(e)!=="{}")?m(m({},u),e):m(m({},e),u)}}catch(_){console.warn("[Theme] Failed to load persisted config:",_)}return e}),n=g.useRef(e);g.useEffect(()=>{JSON.stringify(e)!==JSON.stringify(n.current)&&(n.current=e,a(_=>m(m({},_),e)))},[e]);const c=g.useMemo(()=>i.createTheme(s),[s]);g.useEffect(()=>{if(typeof window!="undefined")try{localStorage.setItem(t,JSON.stringify(s)),localStorage.setItem(`${t}-initial`,JSON.stringify(e))}catch(_){console.warn("[Theme] Failed to persist config:",_)}},[s,t,e]),g.useEffect(()=>{i.applyTheme(c)},[c]),g.useEffect(()=>s.mode!=="auto"?void 0:i.watchSystemDarkMode(()=>{a(l=>b(m({},l),{mode:"auto"}))}),[s.mode]);const p=g.useMemo(()=>({theme:c,config:s,setMode:_=>{a(l=>b(m({},l),{mode:_}))},setPrimaryColor:_=>{a(l=>b(m({},l),{primaryColor:_}))},toggleMode:_=>{var $,M;const u=i.resolveThemeMode(s.mode||"auto")==="light"?"dark":"light";if(!document.startViewTransition||window.matchMedia("(prefers-reduced-motion: reduce)").matches){a(N=>b(m({},N),{mode:u}));return}const d=($=_==null?void 0:_.clientX)!=null?$:window.innerWidth/2,v=(M=_==null?void 0:_.clientY)!=null?M:window.innerHeight/2,f=Math.hypot(Math.max(d,window.innerWidth-d),Math.max(v,window.innerHeight-v));document.startViewTransition(()=>{K.flushSync(()=>{a(N=>b(m({},N),{mode:u}))})}).ready.then(()=>{const N=[`circle(0px at ${d}px ${v}px)`,`circle(${f}px at ${d}px ${v}px)`];document.documentElement.animate({clipPath:N},{duration:400,easing:"ease-in-out",pseudoElement:"::view-transition-new(root)"})})}}),[c,s]);return r.jsx(D.Provider,{value:p,children:o})};function C(){const o=g.useContext(D);if(!o)throw new Error("useTheme must be used within ThemeProvider");return o}function Co(){const{theme:o,setMode:e,toggleMode:t}=C();return{mode:o.mode,setMode:e,toggleMode:t}}function Mo(){const{theme:o}=C();return o.colors}exports.PRESET_COLORS=i.PRESET_COLORS;exports.applyTheme=i.applyTheme;exports.borderRadius=i.borderRadius;exports.createTheme=i.createTheme;exports.detectSystemDarkMode=i.detectSystemDarkMode;exports.generateCSSVariables=i.generateCSSVariables;exports.generateColorPalette=i.generateColorPalette;exports.generateNeutralColors=i.generateNeutralColors;exports.generateSemanticColors=i.generateSemanticColors;exports.resolveThemeColor=i.resolveThemeColor;exports.resolveThemeMode=i.resolveThemeMode;exports.shadows=i.shadows;exports.spacing=i.spacing;exports.transitions=i.transitions;exports.typography=i.typography;exports.watchSystemDarkMode=i.watchSystemDarkMode;exports.zIndex=i.zIndex;exports.Badge=se;exports.Button=ve;exports.Card=We;exports.Checkbox=P;exports.Input=O;exports.Select=R;exports.Switch=J;exports.Tag=ko;exports.ThemeProvider=Io;exports.useTheme=C;exports.useThemeColors=Mo;exports.useThemeMode=Co;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/components/Switch/Switch.tsx","../src/components/Tag/Tag.tsx","../src/composables/useTheme.tsx"],"sourcesContent":["import type { CSSProperties, FC, ReactNode } from 'react'\nimport styles from './Badge.module.css'\n\nexport interface BadgeProps {\n /**\n * Badge content\n */\n children?: ReactNode\n\n /**\n * Badge count or text\n */\n count?: number | string\n\n /**\n * Show dot instead of count\n * @default false\n */\n dot?: boolean\n\n /**\n * Max count to display\n * @default 99\n */\n max?: number\n\n /**\n * Badge color\n * @default 'primary'\n */\n color?: 'primary' | 'success' | 'warning' | 'error' | 'info' | 'neutral'\n\n /**\n * Badge size\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg'\n\n /**\n * Show zero count\n * @default false\n */\n showZero?: boolean\n\n /**\n * Additional CSS class\n */\n className?: string\n\n /**\n * Custom styles\n */\n style?: CSSProperties\n}\n\nexport const Badge: FC<BadgeProps> = ({\n children,\n count = 0,\n dot = false,\n max = 99,\n color = 'primary',\n size = 'md',\n showZero = false,\n className = '',\n style,\n}) => {\n const numericCount = typeof count === 'number' ? count : 0\n const displayCount = numericCount > max ? `${max}+` : count\n const showBadge = dot || showZero || (numericCount > 0) || (typeof count === 'string' && count)\n\n if (!children) {\n // Standalone badge\n return (\n <span\n className={[\n styles.standalone,\n styles[`color-${color}`],\n styles[`size-${size}`],\n dot && styles.dot,\n className,\n ].filter(Boolean).join(' ')}\n style={style}\n >\n {!dot && displayCount}\n </span>\n )\n }\n\n return (\n <span className={[styles.wrapper, className].filter(Boolean).join(' ')} style={style}>\n {children}\n {showBadge && (\n <span\n className={[\n styles.badge,\n styles[`color-${color}`],\n styles[`size-${size}`],\n dot && styles.dot,\n ].filter(Boolean).join(' ')}\n >\n {!dot && displayCount}\n </span>\n )}\n </span>\n )\n}\n","import type { ButtonHTMLAttributes, CSSProperties, FC, ReactNode } from 'react'\nimport styles from './Button.module.css'\n\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n /**\n * Button content\n */\n children?: ReactNode\n\n /**\n * Button type\n * @default 'button'\n */\n htmlType?: 'button' | 'submit' | 'reset'\n\n /**\n * Button variant\n * @default 'default'\n */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'ghost' | 'text'\n\n /**\n * Button size\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg'\n\n /**\n * Disabled state\n * @default false\n */\n disabled?: boolean\n\n /**\n * Loading state\n * @default false\n */\n loading?: boolean\n\n /**\n * Block level button\n * @default false\n */\n block?: boolean\n\n /**\n * Icon before content\n */\n icon?: ReactNode\n\n /**\n * Additional CSS class\n */\n className?: string\n\n /**\n * Custom styles\n */\n style?: CSSProperties\n}\n\nexport const Button: FC<ButtonProps> = ({\n children,\n htmlType = 'button',\n variant = 'default',\n size = 'md',\n disabled = false,\n loading = false,\n block = false,\n icon,\n className = '',\n style,\n onClick,\n ...rest\n}) => {\n const classNames = [\n styles.button,\n styles[`variant-${variant}`],\n styles[`size-${size}`],\n block && styles.block,\n (disabled || loading) && styles.disabled,\n loading && styles.loading,\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <button\n type={htmlType}\n className={classNames}\n disabled={disabled || loading}\n style={style}\n onClick={onClick}\n {...rest}\n >\n {loading && (\n <span className={styles.spinner} />\n )}\n {!loading && icon && (\n <span className={styles.icon}>{icon}</span>\n )}\n {children && (\n <span className={styles.content}>{children}</span>\n )}\n </button>\n )\n}\n","import type { CSSProperties, FC, ReactNode } from 'react'\nimport styles from './Card.module.css'\n\nexport interface CardProps {\n /**\n * Card title\n */\n title?: string\n\n /**\n * Card content\n */\n children?: ReactNode\n\n /**\n * Additional CSS class\n */\n className?: string\n\n /**\n * Show border\n * @default true\n */\n bordered?: boolean\n\n /**\n * Hoverable effect\n * @default false\n */\n hoverable?: boolean\n\n /**\n * Card padding size\n * @default 'md'\n */\n padding?: 'none' | 'sm' | 'md' | 'lg'\n\n /**\n * Custom styles\n */\n style?: CSSProperties\n\n /**\n * Click handler\n */\n onClick?: () => void\n}\n\nexport const Card: FC<CardProps> = ({\n title,\n children,\n className = '',\n bordered = true,\n hoverable = false,\n padding = 'md',\n style,\n onClick,\n}) => {\n const classNames = [\n styles.card,\n bordered && styles.bordered,\n hoverable && styles.hoverable,\n styles[`padding-${padding}`],\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <div\n className={classNames}\n style={style}\n onClick={onClick}\n >\n {title && (\n <div className={styles.header}>\n <h3 className={styles.title}>{title}</h3>\n </div>\n )}\n <div className={styles.body}>\n {children}\n </div>\n </div>\n )\n}\n","import type { InputHTMLAttributes } from 'react'\nimport { forwardRef } from 'react'\nimport styles from './Checkbox.module.css'\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n checked?: boolean\n onChange?: (checked: boolean) => void\n label?: string\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(({ checked, onChange, label, disabled, className = '', ...props }, ref) => {\n return (\n <label className={`${styles.checkbox} ${disabled ? styles.disabled : ''} ${className}`}>\n <input\n type=\"checkbox\"\n className={styles.input}\n checked={checked}\n onChange={e => onChange?.(e.target.checked)}\n disabled={disabled}\n ref={ref}\n {...props}\n />\n <div className={styles.box}>\n <svg className={styles.checkIcon} viewBox=\"0 0 24 24\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n {label && <span className={styles.label}>{label}</span>}\n </label>\n )\n})\n\nCheckbox.displayName = 'Checkbox'\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { forwardRef } from 'react'\nimport styles from './Input.module.css'\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n /**\n * Input size\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg'\n\n /**\n * Input status\n */\n status?: 'error' | 'warning' | 'success'\n\n /**\n * Prefix icon or text\n */\n prefix?: ReactNode\n\n /**\n * Suffix icon or text\n */\n suffix?: ReactNode\n\n /**\n * Allow clear\n * @default false\n */\n allowClear?: boolean\n\n /**\n * Clear callback\n */\n onClear?: () => void\n\n /**\n * Full width\n * @default false\n */\n block?: boolean\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(({ size = 'md', status, prefix, suffix, allowClear = false, onClear, block = false, className = '', disabled, value, ...rest }, ref) => {\n const wrapperClassNames = [\n styles.wrapper,\n styles[`size-${size}`],\n status && styles[`status-${status}`],\n disabled && styles.disabled,\n block && styles.block,\n className,\n ].filter(Boolean).join(' ')\n\n const showClear = allowClear && value && !disabled\n\n return (\n <div className={wrapperClassNames}>\n {prefix && (\n <span className={styles.prefix}>{prefix}</span>\n )}\n <input\n ref={ref}\n className={styles.input}\n disabled={disabled}\n value={value}\n {...rest}\n />\n {showClear && (\n <button\n type=\"button\"\n className={styles.clear}\n onClick={onClear}\n tabIndex={-1}\n >\n ×\n </button>\n )}\n {suffix && !showClear && (\n <span className={styles.suffix}>{suffix}</span>\n )}\n </div>\n )\n})\n\nInput.displayName = 'Input'\n","import type { SelectHTMLAttributes } from 'react'\nimport { forwardRef } from 'react'\nimport styles from './Select.module.css'\n\nexport interface SelectOption {\n label: string\n value: string | number\n}\n\nexport type SelectSize = 'sm' | 'md' | 'lg'\n\nexport interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'onChange' | 'size'> {\n options?: SelectOption[]\n onChange?: (value: string) => void\n value?: string | number\n size?: SelectSize\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(({ options = [], onChange, className = '', size = 'md', children, ...props }, ref) => {\n const selectClass = [\n styles.select,\n styles[`size-${size}`],\n ].filter(Boolean).join(' ')\n\n const arrowClass = [\n styles.arrow,\n size === 'sm' && styles['arrow-sm'],\n ].filter(Boolean).join(' ')\n\n return (\n <div className={`${styles.wrapper} ${className}`}>\n <select\n className={selectClass}\n onChange={e => onChange?.(e.target.value)}\n ref={ref}\n {...props}\n >\n {options.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n {children}\n </select>\n <svg className={arrowClass} viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\" d=\"M6 8l4 4 4-4\" />\n </svg>\n </div>\n )\n})\n\nSelect.displayName = 'Select'\n","import type { FC, InputHTMLAttributes } from 'react'\nimport styles from './Switch.module.css'\n\nexport type SwitchSize = 'sm' | 'md' | 'lg'\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'size'> {\n checked?: boolean\n onChange?: (checked: boolean) => void\n label?: string\n size?: SwitchSize\n}\n\nexport const Switch: FC<SwitchProps> = ({\n checked,\n onChange,\n label,\n className = '',\n disabled,\n size = 'md',\n ...props\n}) => {\n const containerClass = [\n styles.switch,\n disabled && styles.disabled,\n className,\n ].filter(Boolean).join(' ')\n\n const trackClass = [\n styles.track,\n styles[`size-${size}`],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={containerClass}>\n <input\n type=\"checkbox\"\n className={styles.input}\n checked={checked}\n onChange={e => onChange?.(e.target.checked)}\n disabled={disabled}\n {...props}\n />\n <div className={trackClass} />\n {label && (\n <span className={styles.label}>\n {label}\n </span>\n )}\n </label>\n )\n}\n\nSwitch.displayName = 'Switch'\n","import type { CSSProperties, FC, ReactNode } from 'react'\nimport styles from './Tag.module.css'\n\nexport type TagColor = 'primary' | 'success' | 'warning' | 'error' | 'info' | 'neutral'\nexport type TagVariant = 'solid' | 'outline'\nexport type TagSize = 'sm' | 'md'\n\nexport interface TagProps {\n children?: ReactNode\n color?: TagColor\n variant?: TagVariant\n size?: TagSize\n closable?: boolean\n onClose?: (event: React.MouseEvent<HTMLButtonElement>) => void\n onClick?: (event: React.MouseEvent<HTMLSpanElement | HTMLButtonElement>) => void\n className?: string\n style?: CSSProperties\n}\n\nexport const Tag: FC<TagProps> = ({\n children,\n color = 'neutral',\n variant = 'outline',\n size = 'md',\n closable = false,\n onClose,\n onClick,\n className = '',\n style,\n}) => {\n const TagElement: 'button' | 'span' = onClick ? 'button' : 'span'\n\n const tagClassName = [\n styles.tag,\n styles[`size-${size}`],\n styles[`variant-${variant}`],\n styles[`color-${color}`],\n onClick && styles.clickable,\n closable && styles.closable,\n className,\n ].filter(Boolean).join(' ')\n\n return (\n <TagElement\n type={onClick ? 'button' : undefined}\n className={tagClassName}\n style={style}\n onClick={onClick}\n >\n <span>{children}</span>\n {closable && (\n <button\n type=\"button\"\n className={styles.close}\n onClick={(e) => {\n e.stopPropagation()\n onClose?.(e)\n }}\n aria-label=\"Close\"\n >\n ×\n </button>\n )}\n </TagElement>\n )\n}\n","import type { FC, ReactNode } from 'react'\nimport type { Theme, ThemeConfig, ThemeMode } from '../theme/types'\nimport { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { applyTheme, createTheme, resolveThemeMode, watchSystemDarkMode } from '../theme'\n\n/**\n * Theme context\n */\ninterface ThemeContextValue {\n theme: Theme\n config: ThemeConfig\n setMode: (mode: ThemeMode) => void\n setPrimaryColor: (color: string) => void\n toggleMode: (event?: React.MouseEvent) => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\n/**\n * Theme Provider Props\n */\nexport interface ThemeProviderProps {\n children: ReactNode\n config?: ThemeConfig\n /**\n * Storage key for persisting theme config\n * @default 'react-devtools-theme'\n */\n storageKey?: string\n}\n\nconst DEFAULT_CONFIG: ThemeConfig = {}\n\n/**\n * Theme Provider Component\n */\nexport const ThemeProvider: FC<ThemeProviderProps> = ({\n children,\n config: initialConfig = DEFAULT_CONFIG,\n storageKey = 'react-devtools-theme',\n}) => {\n // Load persisted config from localStorage\n const [config, setConfig] = useState<ThemeConfig>(() => {\n if (typeof window === 'undefined')\n return initialConfig\n\n try {\n const stored = localStorage.getItem(storageKey)\n const storedInitial = localStorage.getItem(`${storageKey}-initial`)\n\n if (stored) {\n const parsedStored = JSON.parse(stored)\n\n // Check if initial config changed since last time (e.g. developer updated vite.config.ts)\n // If it changed, the new initial config should take precedence over stored user preference\n // for the keys that are defined in initialConfig.\n const initialConfigChanged = storedInitial\n ? JSON.stringify(JSON.parse(storedInitial)) !== JSON.stringify(initialConfig)\n : JSON.stringify(initialConfig) !== '{}' // Treat first time non-empty config as change\n\n if (initialConfigChanged) {\n return { ...parsedStored, ...initialConfig }\n }\n\n // Otherwise, user preference (stored) takes precedence\n return { ...initialConfig, ...parsedStored }\n }\n }\n catch (err) {\n console.warn('[Theme] Failed to load persisted config:', err)\n }\n\n return initialConfig\n })\n\n // Sync initialConfig changes during runtime (e.g. HMR)\n const initialConfigRef = useRef(initialConfig)\n useEffect(() => {\n if (JSON.stringify(initialConfig) !== JSON.stringify(initialConfigRef.current)) {\n initialConfigRef.current = initialConfig\n setConfig(prev => ({ ...prev, ...initialConfig }))\n }\n }, [initialConfig])\n\n // Create theme from config\n const theme = useMemo(() => createTheme(config), [config])\n\n // Persist config changes\n useEffect(() => {\n if (typeof window === 'undefined')\n return\n\n try {\n localStorage.setItem(storageKey, JSON.stringify(config))\n // Also persist the initialConfig we started with, so we can detect changes next time\n localStorage.setItem(`${storageKey}-initial`, JSON.stringify(initialConfig))\n }\n catch (err) {\n console.warn('[Theme] Failed to persist config:', err)\n }\n }, [config, storageKey, initialConfig])\n\n // Apply theme to DOM\n useEffect(() => {\n applyTheme(theme)\n }, [theme])\n\n // Watch system dark mode changes (only when mode is 'auto')\n useEffect(() => {\n if (config.mode !== 'auto')\n return\n\n const unwatch = watchSystemDarkMode(() => {\n // Force re-render by updating config\n setConfig(prev => ({ ...prev, mode: 'auto' }))\n })\n\n return unwatch\n }, [config.mode])\n\n // Context value\n const value = useMemo<ThemeContextValue>(() => ({\n theme,\n config,\n\n setMode: (mode: ThemeMode) => {\n setConfig(prev => ({ ...prev, mode }))\n },\n\n setPrimaryColor: (primaryColor: string) => {\n setConfig(prev => ({ ...prev, primaryColor }))\n },\n\n toggleMode: (event?: React.MouseEvent) => {\n const currentMode = resolveThemeMode(config.mode || 'auto')\n const nextMode = currentMode === 'light' ? 'dark' : 'light'\n\n // Use View Transitions API if available\n // View Transition API is experimental\n if (!document.startViewTransition || window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n setConfig(prev => ({ ...prev, mode: nextMode }))\n return\n }\n\n // Get click position or center of screen\n const x = event?.clientX ?? window.innerWidth / 2\n const y = event?.clientY ?? window.innerHeight / 2\n\n // Calculate distance to furthest corner\n const endRadius = Math.hypot(\n Math.max(x, window.innerWidth - x),\n Math.max(y, window.innerHeight - y),\n )\n\n // View Transition API is experimental\n const transition = document.startViewTransition(() => {\n // eslint-disable-next-line react-dom/no-flush-sync\n flushSync(() => {\n setConfig(prev => ({ ...prev, mode: nextMode }))\n })\n })\n\n transition.ready.then(() => {\n const clipPath = [\n `circle(0px at ${x}px ${y}px)`,\n `circle(${endRadius}px at ${x}px ${y}px)`,\n ]\n\n // Animate the new view expanding from the click point\n document.documentElement.animate(\n {\n clipPath,\n },\n {\n duration: 400,\n easing: 'ease-in-out',\n pseudoElement: '::view-transition-new(root)',\n },\n )\n })\n },\n }), [theme, config])\n\n return (\n <ThemeContext.Provider value={value}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\n/**\n * Use theme hook\n */\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useTheme(): ThemeContextValue {\n const context = useContext(ThemeContext)\n\n if (!context) {\n throw new Error('useTheme must be used within ThemeProvider')\n }\n\n return context\n}\n\n/**\n * Use theme mode hook\n */\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useThemeMode() {\n const { theme, setMode, toggleMode } = useTheme()\n\n return {\n mode: theme.mode,\n setMode,\n toggleMode,\n }\n}\n\n/**\n * Use theme colors hook\n */\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useThemeColors() {\n const { theme } = useTheme()\n return theme.colors\n}\n"],"names":["Badge","children","count","dot","max","color","size","showZero","className","style","numericCount","displayCount","showBadge","jsxs","styles","jsx","Button","_a","_b","htmlType","variant","disabled","loading","block","icon","onClick","rest","__objRest","classNames","__spreadProps","__spreadValues","Card","title","bordered","hoverable","padding","Checkbox","forwardRef","ref","checked","onChange","label","props","e","Input","status","prefix","suffix","allowClear","onClear","value","wrapperClassNames","showClear","Select","options","selectClass","arrowClass","option","Switch","containerClass","trackClass","Tag","closable","onClose","TagElement","tagClassName","ThemeContext","createContext","DEFAULT_CONFIG","ThemeProvider","initialConfig","storageKey","config","setConfig","useState","stored","storedInitial","parsedStored","err","initialConfigRef","useRef","useEffect","prev","theme","useMemo","createTheme","applyTheme","watchSystemDarkMode","mode","primaryColor","event","nextMode","resolveThemeMode","x","y","endRadius","flushSync","clipPath","useTheme","context","useContext","useThemeMode","setMode","toggleMode","useThemeColors"],"mappings":"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"}
|