@cruxkit/button 0.2.9 → 0.3.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/README.md +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
</div>
|
|
9
9
|
|
|
10
10
|
<div align="center">
|
|
11
|
-
<img src="https://img.shields.io/badge/v-0.
|
|
11
|
+
<img src="https://img.shields.io/badge/v-0.3.0-black"/>
|
|
12
12
|
<a href="https://github.com/cruxkit-org"><img src="https://img.shields.io/badge/🔥-@cruxkit-black"/></a>
|
|
13
13
|
<br>
|
|
14
14
|
<img src="https://img.shields.io/badge/coverage-99.05%25-brightgreen" alt="Test Coverage" />
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var icon=require('@cruxkit/icon'),jsxRuntime=require('@minejs/jsx/jsx-runtime');var d={sm:{px:3,py:1},md:{px:4,py:2},lg:{px:6,py:3}},
|
|
1
|
+
'use strict';var jsx=require('@minejs/jsx'),icon=require('@cruxkit/icon'),jsxRuntime=require('@minejs/jsx/jsx-runtime');var d={sm:{px:3,py:1},md:{px:4,py:2},lg:{px:6,py:3}},f={sm:1,md:2,lg:2},p={sm:"sm",md:"md",lg:"lg"},c={sm:"sm",md:"md",lg:"lg"},h={solid:{brand:["bg-brand","text-inverse","border","border-transparent","hover:bg-brand-hover","active:bg-brand-active"],success:["bg-success","text-inverse","border","border-transparent","hover:bg-success-hover","active:bg-success-active"],warning:["bg-warning","text-inverse","border","border-transparent","hover:bg-warning-hover","active:bg-warning-active"],error:["bg-error","text-inverse","border","border-transparent","hover:bg-error-hover","active:bg-error-active"],neutral:["bg-surface","text-1","border","border-1","hover:bg-raised","active:bg-tertiary"],info:["bg-info","text-inverse","border","border-transparent","hover:opacity-90"]},outline:{brand:["bg-transparent","text-brand","border","border-brand","hover:bg-brand-subtle","active:bg-brand-subtle"],success:["bg-transparent","text-success","border","border-success","hover:bg-success-subtle","active:bg-success-subtle"],warning:["bg-transparent","text-warning","border","border-warning","hover:bg-warning-subtle","active:bg-warning-subtle"],error:["bg-transparent","text-error","border","border-error","hover:bg-error-subtle","active:bg-error-subtle"],neutral:["bg-transparent","text-1","border","border-1","hover:bg-raised","active:bg-tertiary"],info:["bg-transparent","text-info","border","border-info","hover:opacity-90"]},ghost:{brand:["bg-transparent","text-brand","border","border-transparent","hover:bg-brand-subtle","active:bg-brand-subtle"],success:["bg-transparent","text-success","border","border-transparent","hover:bg-success-subtle","active:bg-success-subtle"],warning:["bg-transparent","text-warning","border","border-transparent","hover:bg-warning-subtle","active:bg-warning-subtle"],error:["bg-transparent","text-error","border","border-transparent","hover:bg-error-subtle","active:bg-error-subtle"],neutral:["bg-transparent","text-1","border","border-transparent","hover:bg-raised","active:bg-tertiary"],info:["bg-transparent","text-info","border","border-transparent","hover:opacity-90"]},link:{brand:["bg-transparent","text-brand","border","border-transparent","px-1"],success:["bg-transparent","text-success","border","border-transparent","px-1"],warning:["bg-transparent","text-warning","border","border-transparent","px-1"],error:["bg-transparent","text-error","border","border-transparent","px-1"],neutral:["bg-transparent","text-1","border","border-transparent","px-1"],info:["bg-transparent","text-info","border","border-transparent","px-1"]},danger:{brand:["bg-error","text-inverse","border","border-transparent"],success:["bg-error","text-inverse","border","border-transparent"],warning:["bg-error","text-inverse","border","border-transparent"],error:["bg-error","text-inverse","border","border-transparent"],neutral:["bg-error","text-inverse","border","border-transparent"],info:["bg-error","text-inverse","border","border-transparent"]},primary:{brand:["bg-brand","text-inverse","border","border-transparent"],success:["bg-brand","text-inverse","border","border-transparent"],warning:["bg-brand","text-inverse","border","border-transparent"],error:["bg-brand","text-inverse","border","border-transparent"],neutral:["bg-brand","text-inverse","border","border-transparent"],info:["bg-brand","text-inverse","border","border-transparent"]},secondary:{brand:["bg-raised","text-1","border","border-transparent"],success:["bg-raised","text-1","border","border-transparent"],warning:["bg-raised","text-1","border","border-transparent"],error:["bg-raised","text-1","border","border-transparent"],neutral:["bg-raised","text-1","border","border-transparent"],info:["bg-raised","text-1","border","border-transparent"]},success:{brand:["bg-success","text-inverse","border","border-transparent"],success:["bg-success","text-inverse","border","border-transparent"],warning:["bg-success","text-inverse","border","border-transparent"],error:["bg-success","text-inverse","border","border-transparent"],neutral:["bg-success","text-inverse","border","border-transparent"],info:["bg-success","text-inverse","border","border-transparent"]},warning:{brand:["bg-warning","text-inverse","border","border-transparent"],success:["bg-warning","text-inverse","border","border-transparent"],warning:["bg-warning","text-inverse","border","border-transparent"],error:["bg-warning","text-inverse","border","border-transparent"],neutral:["bg-warning","text-inverse","border","border-transparent"],info:["bg-warning","text-inverse","border","border-transparent"]},info:{brand:["bg-info","text-inverse","border","border-transparent"],success:["bg-info","text-inverse","border","border-transparent"],warning:["bg-info","text-inverse","border","border-transparent"],error:["bg-info","text-inverse","border","border-transparent"],neutral:["bg-info","text-inverse","border","border-transparent"],info:["bg-info","text-inverse","border","border-transparent"]}};function m(n,s){if(!n)return null;let b=c[s];if(typeof n=="string")return jsxRuntime.jsx("span",{className:"inline-flex shrink-0",children:jsxRuntime.jsx(icon.Icon,{name:n,size:b})});let e=n.size??b;return jsxRuntime.jsx("span",{className:"inline-flex shrink-0",children:jsxRuntime.jsx(icon.Icon,{...n,size:e})})}function j(n){let{variant:s="solid",color:b="brand",size:e="md",hover:y,active:z,shadow:S,radius:B,underline:M,uppercase:I,fullWidth:C,labelFullWidth:N,disabled:u,loading:o,leftIcon:P,rightIcon:k,as:R="button",text:E,children:$,className:l,onClick:T,onMouseEnter:J,onMouseLeave:L,...X}=n,v=["primary","secondary","success","warning","danger","info"].includes(s),G=s==="solid",V=s==="link",W=S??(v||G?"sm":"none"),A=z??"scale",i=y??(v?"opacity":"none"),x=M??(V?"hover":"none"),F=B??"base",r=["inline-flex","items-center","justify-center","transition-all","duration-200","focus:outline-none","font-medium"];u||o?r.push("opacity-50","cursor-not-allowed","pointer-events-none"):r.push("cursor-pointer"),C&&r.push("w-full"),r.push(`gap-${f[e]}`),r.push(`px-${d[e].px}`),r.push(`py-${d[e].py}`),r.push(`text-${p[e]}`);let H=h[s]?.[b]||[];r.push(...H),i==="opacity"&&r.push("hover:opacity-90"),i==="scale"&&r.push("hover:scale-105"),i==="shadow"&&r.push("hover:shadow-md"),A==="scale"&&r.push("active:scale-95"),x==="hover"&&r.push("hover:underline","underline-offset-4","decoration-2"),x==="always"&&r.push("underline","underline-offset-4","decoration-2"),I&&r.push("uppercase","tracking-wide"),l&&r.push(l);let a=$||E,U=p[e];return jsxRuntime.jsxs("div",{as:R,className:r.join(" "),radius:F,shadow:W,onClick:q=>{!u&&!o&&T?.(q);},onMouseEnter:J,onMouseLeave:L,...X,children:[o&&jsxRuntime.jsx("span",{className:"animate-spin mr-2",children:jsxRuntime.jsx(icon.Icon,{name:"spinner",size:c[e]})}),o?jsxRuntime.jsx(jsxRuntime.Fragment,{}):m(P,e),a&&(typeof a=="string"||typeof a=="number")?jsxRuntime.jsx(jsx.Text,{as:"span",weight:"extrabold",align:"center",color:"brand",size:U,className:`uppercase ${N?"flex-1":""}`,children:a}):a,o?jsxRuntime.jsx(jsxRuntime.Fragment,{}):m(k,e)]})}exports.Button=j;//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/kit/constants.ts","../src/kit/button.tsx"],"names":["sizePaddingMap","sizeGapMap","labelSizeMap","iconSizeMap","variantClasses","renderIcon","icon","size","iconSize","jsx","Icon","resolvedSize","Button","props","variant","color","hover","active","shadow","radius","underline","uppercase","fullWidth","labelFullWidth","disabled","loading","leftIcon","rightIcon","as","text","children","className","onClick","onMouseEnter","onMouseLeave","rest","isSemantic","isSolid","isLink","resolvedShadow","resolvedActive","resolvedHover","resolvedUnderline","resolvedRadius","baseClasses","variantStyle","content","labelSize","jsxs","e","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ButtonSize, ButtonVariant, ButtonColor } from '../types';\n\nexport const sizePaddingMap: Record<ButtonSize, { px: 3 | 4 | 6; py: 1 | 2 | 3 }> = {\n sm: { px: 3, py: 1 },\n md: { px: 4, py: 2 },\n lg: { px: 6, py: 3 }\n};\n\nexport const sizeGapMap: Record<ButtonSize, 1 | 2> = {\n sm: 1,\n md: 2,\n lg: 2\n};\n\nexport const labelSizeMap: Record<ButtonSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg'\n};\n\nexport const iconSizeMap: Record<ButtonSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg'\n};\n\nexport const variantClasses: Record<ButtonVariant, Record<ButtonColor, string[]>> = {\n solid: {\n brand: ['bg-brand', 'text-inverse', 'border', 'border-transparent', 'hover:bg-brand-hover', 'active:bg-brand-active'],\n success: ['bg-success', 'text-inverse', 'border', 'border-transparent', 'hover:bg-success-hover', 'active:bg-success-active'],\n warning: ['bg-warning', 'text-inverse', 'border', 'border-transparent', 'hover:bg-warning-hover', 'active:bg-warning-active'],\n error: ['bg-error', 'text-inverse', 'border', 'border-transparent', 'hover:bg-error-hover', 'active:bg-error-active'],\n neutral: ['bg-surface', 'text-1', 'border', 'border-1', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-info', 'text-inverse', 'border', 'border-transparent', 'hover:opacity-90']\n },\n outline: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-brand', 'hover:bg-brand-subtle', 'active:bg-brand-subtle'],\n success: ['bg-transparent', 'text-success', 'border', 'border-success', 'hover:bg-success-subtle', 'active:bg-success-subtle'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-warning', 'hover:bg-warning-subtle', 'active:bg-warning-subtle'],\n error: ['bg-transparent', 'text-error', 'border', 'border-error', 'hover:bg-error-subtle', 'active:bg-error-subtle'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-1', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-transparent', 'text-info', 'border', 'border-info', 'hover:opacity-90']\n },\n ghost: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-transparent', 'hover:bg-brand-subtle', 'active:bg-brand-subtle'],\n success: ['bg-transparent', 'text-success', 'border', 'border-transparent', 'hover:bg-success-subtle', 'active:bg-success-subtle'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-transparent', 'hover:bg-warning-subtle', 'active:bg-warning-subtle'],\n error: ['bg-transparent', 'text-error', 'border', 'border-transparent', 'hover:bg-error-subtle', 'active:bg-error-subtle'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-transparent', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-transparent', 'text-info', 'border', 'border-transparent', 'hover:opacity-90']\n },\n link: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-transparent', 'px-1'],\n success: ['bg-transparent', 'text-success', 'border', 'border-transparent', 'px-1'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-transparent', 'px-1'],\n error: ['bg-transparent', 'text-error', 'border', 'border-transparent', 'px-1'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-transparent', 'px-1'],\n info: ['bg-transparent', 'text-info', 'border', 'border-transparent', 'px-1']\n },\n danger: {\n brand: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-error', 'text-inverse', 'border', 'border-transparent']\n },\n primary: {\n brand: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-brand', 'text-inverse', 'border', 'border-transparent']\n },\n secondary: {\n brand: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n success: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n warning: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n error: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n neutral: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n info: ['bg-raised', 'text-1', 'border', 'border-transparent']\n },\n success: {\n brand: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-success', 'text-inverse', 'border', 'border-transparent']\n },\n warning: {\n brand: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-warning', 'text-inverse', 'border', 'border-transparent']\n },\n info: {\n brand: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-info', 'text-inverse', 'border', 'border-transparent']\n }\n};\n","// src/kit/button.tsx\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { JSXElement } from '@minejs/jsx';\r\n import { Icon, type IconProps, type IconName, type IconConfig } from '@cruxkit/icon';\r\n import type { ButtonProps, ButtonSize } from '../types';\r\n import {\r\n sizePaddingMap,\r\n sizeGapMap,\r\n labelSizeMap,\r\n iconSizeMap,\r\n variantClasses\r\n } from './constants';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n function renderIcon(icon: IconProps | IconName | undefined, size: ButtonSize): JSXElement | null {\r\n if (!icon) return null;\r\n\r\n const iconSize = iconSizeMap[size];\r\n\r\n if (typeof icon === 'string') {\r\n return (\r\n <span className=\"inline-flex shrink-0\">\r\n <Icon name={icon as IconName} size={iconSize} />\r\n </span>\r\n );\r\n }\r\n\r\n const resolvedSize = ((icon as IconProps) as IconConfig).size ?? iconSize;\r\n\r\n return (\r\n <span className=\"inline-flex shrink-0\">\r\n <Icon {...icon} size={resolvedSize} />\r\n </span>\r\n );\r\n }\r\n\r\n /**\r\n * Button Component\r\n *\r\n * A versatile button component with support for variants, colors, sizes, and icons.\r\n * Now features enhanced style controllers for effects and interactions.\r\n *\r\n * @param {ButtonProps } props - The properties for the button.\r\n * @param {ButtonVariant } [props.variant='solid'] - Visual style variant.\r\n * - `solid`: Filled background (default).\r\n * - `outline`: Border with transparent background.\r\n * - `ghost`: Transparent background, hover effect.\r\n * - `link`: Looks like a text link.\r\n * - `primary`, `secondary`, `success`, `warning`, `danger`, `info`: Semantic variants.\r\n * @param {ButtonColor } [props.color='brand'] - Color theme.\r\n * - `brand`, `success`, `warning`, `error`, `neutral`, `info`.\r\n * @param {ButtonSize } [props.size='md'] - Button size.\r\n * - `sm`: Small.\r\n * - `md`: Medium.\r\n * - `lg`: Large.\r\n * @param {ButtonHoverEffect } [props.hover] - Hover effect.\r\n * - `opacity`: Reduces opacity on hover.\r\n * - `scale`: Scales up slightly on hover.\r\n * - `shadow`: Adds shadow on hover.\r\n * - `none`: No hover effect.\r\n * - Defaults depend on variant (e.g., semantic variants default to `opacity`).\r\n * @param {ButtonActiveEffect } [props.active='scale'] - Click/Active effect.\r\n * - `scale`: Scales down slightly on click.\r\n * - `none`: No active effect.\r\n * @param {string } [props.shadow] - Box shadow style (e.g., 'sm', 'md', 'lg', 'none'). Defaults based on variant.\r\n * @param {string } [props.radius='base'] - Border radius (e.g., 'none', 'sm', 'base', 'md', 'lg', 'full').\r\n * @param {ButtonUnderline } [props.underline] - Underline style for text.\r\n * - `hover`: Underline on hover.\r\n * - `always`: Always underlined.\r\n * - `none`: No underline.\r\n * @param {boolean} [props.uppercase=false] - If true, transforms text to uppercase.\r\n * @param {boolean} [props.fullWidth=false] - If true, the button takes up the full width of its container.\r\n * @param {boolean} [props.labelFullWidth=false] - If true, the label text takes up the remaining space (useful with icons).\r\n * @param {boolean} [props.disabled=false] - If true, disables interaction and applies disabled styles.\r\n * @param {boolean} [props.loading=false] - If true, shows a loading spinner and disables interaction.\r\n * @param {IconProps | IconName} [props.leftIcon] - Icon to display on the left side.\r\n * @param {IconProps | IconName} [props.rightIcon] - Icon to display on the right side.\r\n * @param {string} [props.as='button'] - The HTML element or component to render as.\r\n * @param {string | number} [props.text] - The text content of the button.\r\n * @param {JSXElement | string | number} [props.children] - Child elements (overrides text).\r\n * @param {string} [props.className] - Additional CSS classes.\r\n * @param {(e: MouseEvent) => void} [props.onClick] - Click handler.\r\n * @param {(e: MouseEvent) => void} [props.onMouseEnter] - Mouse enter handler.\r\n * @param {(e: MouseEvent) => void} [props.onMouseLeave] - Mouse leave handler.\r\n */\r\n export function Button(props: ButtonProps): JSXElement {\r\n const {\r\n variant = 'solid',\r\n color = 'brand',\r\n size = 'md',\r\n\r\n // Style Controllers\r\n hover,\r\n active,\r\n shadow,\r\n radius,\r\n underline,\r\n uppercase,\r\n\r\n fullWidth,\r\n labelFullWidth,\r\n disabled,\r\n loading,\r\n\r\n leftIcon,\r\n rightIcon,\r\n\r\n as = 'button',\r\n text,\r\n children,\r\n\r\n className,\r\n onClick,\r\n onMouseEnter,\r\n onMouseLeave,\r\n\r\n ...rest\r\n } = props;\r\n\r\n // 1. Resolve Defaults based on Variant\r\n const isSemantic = ['primary', 'secondary', 'success', 'warning', 'danger', 'info'].includes(variant);\r\n const isSolid = variant === 'solid';\r\n const isLink = variant === 'link';\r\n\r\n const resolvedShadow = shadow ?? ((isSemantic || isSolid) ? 'sm' : 'none');\r\n const resolvedActive = active ?? 'scale';\r\n // Legacy variants (solid/outline/ghost) have built-in color hovers, so we default to 'none' to avoid double effects\r\n // Semantic variants use opacity hover by default\r\n const resolvedHover = hover ?? (isSemantic ? 'opacity' : 'none');\r\n const resolvedUnderline = underline ?? (isLink ? 'hover' : 'none');\r\n const resolvedRadius = radius ?? 'base'; // Default to base rounded\r\n\r\n // 2. Compose Classes\r\n const baseClasses = [\r\n 'inline-flex', 'items-center', 'justify-center',\r\n 'transition-all', 'duration-200',\r\n 'focus:outline-none',\r\n 'font-medium'\r\n ];\r\n\r\n // State Classes\r\n if (disabled || loading) {\r\n baseClasses.push('opacity-50', 'cursor-not-allowed', 'pointer-events-none');\r\n } else {\r\n baseClasses.push('cursor-pointer');\r\n }\r\n\r\n // Size Classes\r\n if (fullWidth) baseClasses.push('w-full');\r\n baseClasses.push(`gap-${sizeGapMap[size]}`);\r\n baseClasses.push(`px-${sizePaddingMap[size].px}`);\r\n baseClasses.push(`py-${sizePaddingMap[size].py}`);\r\n baseClasses.push(`text-${labelSizeMap[size]}`); // Ensure text size matches button size\r\n\r\n // Variant & Color Classes (from Constants)\r\n const variantStyle = variantClasses[variant]?.[color] || [];\r\n baseClasses.push(...variantStyle);\r\n\r\n // Hover Effects\r\n if (resolvedHover === 'opacity') baseClasses.push('hover:opacity-90');\r\n if (resolvedHover === 'scale') baseClasses.push('hover:scale-105');\r\n if (resolvedHover === 'shadow') baseClasses.push('hover:shadow-md');\r\n\r\n // Active Effects\r\n if (resolvedActive === 'scale') baseClasses.push('active:scale-95');\r\n\r\n // Underline\r\n if (resolvedUnderline === 'hover') baseClasses.push('hover:underline', 'underline-offset-4', 'decoration-2');\r\n if (resolvedUnderline === 'always') baseClasses.push('underline', 'underline-offset-4', 'decoration-2');\r\n\r\n // Uppercase\r\n if (uppercase) baseClasses.push('uppercase', 'tracking-wide');\r\n\r\n // Custom ClassName\r\n if (className) baseClasses.push(className);\r\n\r\n\r\n // 3. Render\r\n const content = children || text;\r\n const labelSize = labelSizeMap[size];\r\n\r\n return (\r\n <div\r\n as={as}\r\n className={baseClasses.join(' ')}\r\n radius={resolvedRadius}\r\n shadow={resolvedShadow}\r\n onClick={(e: MouseEvent) => {\r\n if (!disabled && !loading) {\r\n onClick?.(e);\r\n }\r\n }}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n {...rest}\r\n >\r\n {loading && (\r\n <span className=\"animate-spin mr-2\">\r\n <Icon name='spinner' size={iconSizeMap[size]} />\r\n </span>\r\n )}\r\n\r\n {!loading ? renderIcon(leftIcon, size) : <></>}\r\n\r\n {content && (typeof content === 'string' || typeof content === 'number') ? (\r\n <div\r\n as ='span'\r\n textWeight ='extrabold'\r\n textAlign ={labelFullWidth ? 'center' : 'center'}\r\n textTransform ='uppercase'\r\n color ='brand'\r\n textSize ={labelSize}\r\n className ={labelFullWidth ? 'flex-1' : ''}\r\n children ={content}\r\n />\r\n ) : content}\r\n\r\n {!loading ? renderIcon(rightIcon, size) : <></>}\r\n </div>\r\n );\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/kit/constants.ts","../src/kit/button.tsx"],"names":["sizePaddingMap","sizeGapMap","labelSizeMap","iconSizeMap","variantClasses","renderIcon","icon","size","iconSize","jsx","Icon","resolvedSize","Button","props","variant","color","hover","active","shadow","radius","underline","uppercase","fullWidth","labelFullWidth","disabled","loading","leftIcon","rightIcon","as","text","children","className","onClick","onMouseEnter","onMouseLeave","rest","isSemantic","isSolid","isLink","resolvedShadow","resolvedActive","resolvedHover","resolvedUnderline","resolvedRadius","baseClasses","variantStyle","content","labelSize","jsxs","e","Fragment","Text"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ButtonSize, ButtonVariant, ButtonColor } from '../types';\n\nexport const sizePaddingMap: Record<ButtonSize, { px: 3 | 4 | 6; py: 1 | 2 | 3 }> = {\n sm: { px: 3, py: 1 },\n md: { px: 4, py: 2 },\n lg: { px: 6, py: 3 }\n};\n\nexport const sizeGapMap: Record<ButtonSize, 1 | 2> = {\n sm: 1,\n md: 2,\n lg: 2\n};\n\nexport const labelSizeMap: Record<ButtonSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg'\n};\n\nexport const iconSizeMap: Record<ButtonSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg'\n};\n\nexport const variantClasses: Record<ButtonVariant, Record<ButtonColor, string[]>> = {\n solid: {\n brand: ['bg-brand', 'text-inverse', 'border', 'border-transparent', 'hover:bg-brand-hover', 'active:bg-brand-active'],\n success: ['bg-success', 'text-inverse', 'border', 'border-transparent', 'hover:bg-success-hover', 'active:bg-success-active'],\n warning: ['bg-warning', 'text-inverse', 'border', 'border-transparent', 'hover:bg-warning-hover', 'active:bg-warning-active'],\n error: ['bg-error', 'text-inverse', 'border', 'border-transparent', 'hover:bg-error-hover', 'active:bg-error-active'],\n neutral: ['bg-surface', 'text-1', 'border', 'border-1', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-info', 'text-inverse', 'border', 'border-transparent', 'hover:opacity-90']\n },\n outline: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-brand', 'hover:bg-brand-subtle', 'active:bg-brand-subtle'],\n success: ['bg-transparent', 'text-success', 'border', 'border-success', 'hover:bg-success-subtle', 'active:bg-success-subtle'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-warning', 'hover:bg-warning-subtle', 'active:bg-warning-subtle'],\n error: ['bg-transparent', 'text-error', 'border', 'border-error', 'hover:bg-error-subtle', 'active:bg-error-subtle'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-1', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-transparent', 'text-info', 'border', 'border-info', 'hover:opacity-90']\n },\n ghost: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-transparent', 'hover:bg-brand-subtle', 'active:bg-brand-subtle'],\n success: ['bg-transparent', 'text-success', 'border', 'border-transparent', 'hover:bg-success-subtle', 'active:bg-success-subtle'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-transparent', 'hover:bg-warning-subtle', 'active:bg-warning-subtle'],\n error: ['bg-transparent', 'text-error', 'border', 'border-transparent', 'hover:bg-error-subtle', 'active:bg-error-subtle'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-transparent', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-transparent', 'text-info', 'border', 'border-transparent', 'hover:opacity-90']\n },\n link: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-transparent', 'px-1'],\n success: ['bg-transparent', 'text-success', 'border', 'border-transparent', 'px-1'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-transparent', 'px-1'],\n error: ['bg-transparent', 'text-error', 'border', 'border-transparent', 'px-1'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-transparent', 'px-1'],\n info: ['bg-transparent', 'text-info', 'border', 'border-transparent', 'px-1']\n },\n danger: {\n brand: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-error', 'text-inverse', 'border', 'border-transparent']\n },\n primary: {\n brand: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-brand', 'text-inverse', 'border', 'border-transparent']\n },\n secondary: {\n brand: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n success: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n warning: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n error: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n neutral: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n info: ['bg-raised', 'text-1', 'border', 'border-transparent']\n },\n success: {\n brand: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-success', 'text-inverse', 'border', 'border-transparent']\n },\n warning: {\n brand: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-warning', 'text-inverse', 'border', 'border-transparent']\n },\n info: {\n brand: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-info', 'text-inverse', 'border', 'border-transparent']\n }\n};\n","// src/kit/button.tsx\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { type JSXElement, Text, TextProps } from '@minejs/jsx';\r\n import { Icon, type IconProps, type IconName, type IconConfig } from '@cruxkit/icon';\r\n import type { ButtonProps, ButtonSize } from '../types';\r\n import {\r\n sizePaddingMap,\r\n sizeGapMap,\r\n labelSizeMap,\r\n iconSizeMap,\r\n variantClasses\r\n } from './constants';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n function renderIcon(icon: IconProps | IconName | undefined, size: ButtonSize): JSXElement | null {\r\n if (!icon) return null;\r\n\r\n const iconSize = iconSizeMap[size];\r\n\r\n if (typeof icon === 'string') {\r\n return (\r\n <span className=\"inline-flex shrink-0\">\r\n <Icon name={icon as IconName} size={iconSize} />\r\n </span>\r\n );\r\n }\r\n\r\n const resolvedSize = ((icon as IconProps) as IconConfig).size ?? iconSize;\r\n\r\n return (\r\n <span className=\"inline-flex shrink-0\">\r\n <Icon {...icon} size={resolvedSize} />\r\n </span>\r\n );\r\n }\r\n\r\n /**\r\n * Button Component\r\n *\r\n * A versatile button component with support for variants, colors, sizes, and icons.\r\n * Now features enhanced style controllers for effects and interactions.\r\n *\r\n * @param {ButtonProps } props - The properties for the button.\r\n * @param {ButtonVariant } [props.variant='solid'] - Visual style variant.\r\n * - `solid`: Filled background (default).\r\n * - `outline`: Border with transparent background.\r\n * - `ghost`: Transparent background, hover effect.\r\n * - `link`: Looks like a text link.\r\n * - `primary`, `secondary`, `success`, `warning`, `danger`, `info`: Semantic variants.\r\n * @param {ButtonColor } [props.color='brand'] - Color theme.\r\n * - `brand`, `success`, `warning`, `error`, `neutral`, `info`.\r\n * @param {ButtonSize } [props.size='md'] - Button size.\r\n * - `sm`: Small.\r\n * - `md`: Medium.\r\n * - `lg`: Large.\r\n * @param {ButtonHoverEffect } [props.hover] - Hover effect.\r\n * - `opacity`: Reduces opacity on hover.\r\n * - `scale`: Scales up slightly on hover.\r\n * - `shadow`: Adds shadow on hover.\r\n * - `none`: No hover effect.\r\n * - Defaults depend on variant (e.g., semantic variants default to `opacity`).\r\n * @param {ButtonActiveEffect } [props.active='scale'] - Click/Active effect.\r\n * - `scale`: Scales down slightly on click.\r\n * - `none`: No active effect.\r\n * @param {string } [props.shadow] - Box shadow style (e.g., 'sm', 'md', 'lg', 'none'). Defaults based on variant.\r\n * @param {string } [props.radius='base'] - Border radius (e.g., 'none', 'sm', 'base', 'md', 'lg', 'full').\r\n * @param {ButtonUnderline } [props.underline] - Underline style for text.\r\n * - `hover`: Underline on hover.\r\n * - `always`: Always underlined.\r\n * - `none`: No underline.\r\n * @param {boolean} [props.uppercase=false] - If true, transforms text to uppercase.\r\n * @param {boolean} [props.fullWidth=false] - If true, the button takes up the full width of its container.\r\n * @param {boolean} [props.labelFullWidth=false] - If true, the label text takes up the remaining space (useful with icons).\r\n * @param {boolean} [props.disabled=false] - If true, disables interaction and applies disabled styles.\r\n * @param {boolean} [props.loading=false] - If true, shows a loading spinner and disables interaction.\r\n * @param {IconProps | IconName} [props.leftIcon] - Icon to display on the left side.\r\n * @param {IconProps | IconName} [props.rightIcon] - Icon to display on the right side.\r\n * @param {string} [props.as='button'] - The HTML element or component to render as.\r\n * @param {string | number} [props.text] - The text content of the button.\r\n * @param {JSXElement | string | number} [props.children] - Child elements (overrides text).\r\n * @param {string} [props.className] - Additional CSS classes.\r\n * @param {(e: MouseEvent) => void} [props.onClick] - Click handler.\r\n * @param {(e: MouseEvent) => void} [props.onMouseEnter] - Mouse enter handler.\r\n * @param {(e: MouseEvent) => void} [props.onMouseLeave] - Mouse leave handler.\r\n */\r\n export function Button(props: ButtonProps): JSXElement {\r\n const {\r\n variant = 'solid',\r\n color = 'brand',\r\n size = 'md',\r\n\r\n // Style Controllers\r\n hover,\r\n active,\r\n shadow,\r\n radius,\r\n underline,\r\n uppercase,\r\n\r\n fullWidth,\r\n labelFullWidth,\r\n disabled,\r\n loading,\r\n\r\n leftIcon,\r\n rightIcon,\r\n\r\n as = 'button',\r\n text,\r\n children,\r\n\r\n className,\r\n onClick,\r\n onMouseEnter,\r\n onMouseLeave,\r\n\r\n ...rest\r\n } = props;\r\n\r\n // 1. Resolve Defaults based on Variant\r\n const isSemantic = ['primary', 'secondary', 'success', 'warning', 'danger', 'info'].includes(variant);\r\n const isSolid = variant === 'solid';\r\n const isLink = variant === 'link';\r\n\r\n const resolvedShadow = shadow ?? ((isSemantic || isSolid) ? 'sm' : 'none');\r\n const resolvedActive = active ?? 'scale';\r\n // Legacy variants (solid/outline/ghost) have built-in color hovers, so we default to 'none' to avoid double effects\r\n // Semantic variants use opacity hover by default\r\n const resolvedHover = hover ?? (isSemantic ? 'opacity' : 'none');\r\n const resolvedUnderline = underline ?? (isLink ? 'hover' : 'none');\r\n const resolvedRadius = radius ?? 'base'; // Default to base rounded\r\n\r\n // 2. Compose Classes\r\n const baseClasses = [\r\n 'inline-flex', 'items-center', 'justify-center',\r\n 'transition-all', 'duration-200',\r\n 'focus:outline-none',\r\n 'font-medium'\r\n ];\r\n\r\n // State Classes\r\n if (disabled || loading) {\r\n baseClasses.push('opacity-50', 'cursor-not-allowed', 'pointer-events-none');\r\n } else {\r\n baseClasses.push('cursor-pointer');\r\n }\r\n\r\n // Size Classes\r\n if (fullWidth) baseClasses.push('w-full');\r\n baseClasses.push(`gap-${sizeGapMap[size]}`);\r\n baseClasses.push(`px-${sizePaddingMap[size].px}`);\r\n baseClasses.push(`py-${sizePaddingMap[size].py}`);\r\n baseClasses.push(`text-${labelSizeMap[size]}`); // Ensure text size matches button size\r\n\r\n // Variant & Color Classes (from Constants)\r\n const variantStyle = variantClasses[variant]?.[color] || [];\r\n baseClasses.push(...variantStyle);\r\n\r\n // Hover Effects\r\n if (resolvedHover === 'opacity') baseClasses.push('hover:opacity-90');\r\n if (resolvedHover === 'scale') baseClasses.push('hover:scale-105');\r\n if (resolvedHover === 'shadow') baseClasses.push('hover:shadow-md');\r\n\r\n // Active Effects\r\n if (resolvedActive === 'scale') baseClasses.push('active:scale-95');\r\n\r\n // Underline\r\n if (resolvedUnderline === 'hover') baseClasses.push('hover:underline', 'underline-offset-4', 'decoration-2');\r\n if (resolvedUnderline === 'always') baseClasses.push('underline', 'underline-offset-4', 'decoration-2');\r\n\r\n // Uppercase\r\n if (uppercase) baseClasses.push('uppercase', 'tracking-wide');\r\n\r\n // Custom ClassName\r\n if (className) baseClasses.push(className);\r\n\r\n\r\n // 3. Render\r\n const content = children || text;\r\n const labelSize = labelSizeMap[size];\r\n\r\n return (\r\n <div\r\n as={as}\r\n className={baseClasses.join(' ')}\r\n radius={resolvedRadius}\r\n shadow={resolvedShadow}\r\n onClick={(e: MouseEvent) => {\r\n if (!disabled && !loading) {\r\n onClick?.(e);\r\n }\r\n }}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n {...rest}\r\n >\r\n {loading && (\r\n <span className=\"animate-spin mr-2\">\r\n <Icon name='spinner' size={iconSizeMap[size]} />\r\n </span>\r\n )}\r\n\r\n {!loading ? renderIcon(leftIcon, size) : <></>}\r\n\r\n {content && (typeof content === 'string' || typeof content === 'number') ? (\r\n <Text\r\n as=\"span\"\r\n weight=\"extrabold\"\r\n align=\"center\"\r\n color=\"brand\"\r\n size={labelSize as TextProps[\"size\"]}\r\n className={`uppercase ${labelFullWidth ? 'flex-1' : ''}`}\r\n >\r\n {content}\r\n </Text>\r\n ) : content}\r\n\r\n {!loading ? renderIcon(rightIcon, size) : <></>}\r\n </div>\r\n );\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {Icon}from'@cruxkit/icon';import {jsxs,jsx,Fragment}from'@minejs/jsx/jsx-runtime';var d={sm:{px:3,py:1},md:{px:4,py:2},lg:{px:6,py:3}},
|
|
1
|
+
import {Text}from'@minejs/jsx';import {Icon}from'@cruxkit/icon';import {jsxs,jsx,Fragment}from'@minejs/jsx/jsx-runtime';var d={sm:{px:3,py:1},md:{px:4,py:2},lg:{px:6,py:3}},f={sm:1,md:2,lg:2},p={sm:"sm",md:"md",lg:"lg"},c={sm:"sm",md:"md",lg:"lg"},h={solid:{brand:["bg-brand","text-inverse","border","border-transparent","hover:bg-brand-hover","active:bg-brand-active"],success:["bg-success","text-inverse","border","border-transparent","hover:bg-success-hover","active:bg-success-active"],warning:["bg-warning","text-inverse","border","border-transparent","hover:bg-warning-hover","active:bg-warning-active"],error:["bg-error","text-inverse","border","border-transparent","hover:bg-error-hover","active:bg-error-active"],neutral:["bg-surface","text-1","border","border-1","hover:bg-raised","active:bg-tertiary"],info:["bg-info","text-inverse","border","border-transparent","hover:opacity-90"]},outline:{brand:["bg-transparent","text-brand","border","border-brand","hover:bg-brand-subtle","active:bg-brand-subtle"],success:["bg-transparent","text-success","border","border-success","hover:bg-success-subtle","active:bg-success-subtle"],warning:["bg-transparent","text-warning","border","border-warning","hover:bg-warning-subtle","active:bg-warning-subtle"],error:["bg-transparent","text-error","border","border-error","hover:bg-error-subtle","active:bg-error-subtle"],neutral:["bg-transparent","text-1","border","border-1","hover:bg-raised","active:bg-tertiary"],info:["bg-transparent","text-info","border","border-info","hover:opacity-90"]},ghost:{brand:["bg-transparent","text-brand","border","border-transparent","hover:bg-brand-subtle","active:bg-brand-subtle"],success:["bg-transparent","text-success","border","border-transparent","hover:bg-success-subtle","active:bg-success-subtle"],warning:["bg-transparent","text-warning","border","border-transparent","hover:bg-warning-subtle","active:bg-warning-subtle"],error:["bg-transparent","text-error","border","border-transparent","hover:bg-error-subtle","active:bg-error-subtle"],neutral:["bg-transparent","text-1","border","border-transparent","hover:bg-raised","active:bg-tertiary"],info:["bg-transparent","text-info","border","border-transparent","hover:opacity-90"]},link:{brand:["bg-transparent","text-brand","border","border-transparent","px-1"],success:["bg-transparent","text-success","border","border-transparent","px-1"],warning:["bg-transparent","text-warning","border","border-transparent","px-1"],error:["bg-transparent","text-error","border","border-transparent","px-1"],neutral:["bg-transparent","text-1","border","border-transparent","px-1"],info:["bg-transparent","text-info","border","border-transparent","px-1"]},danger:{brand:["bg-error","text-inverse","border","border-transparent"],success:["bg-error","text-inverse","border","border-transparent"],warning:["bg-error","text-inverse","border","border-transparent"],error:["bg-error","text-inverse","border","border-transparent"],neutral:["bg-error","text-inverse","border","border-transparent"],info:["bg-error","text-inverse","border","border-transparent"]},primary:{brand:["bg-brand","text-inverse","border","border-transparent"],success:["bg-brand","text-inverse","border","border-transparent"],warning:["bg-brand","text-inverse","border","border-transparent"],error:["bg-brand","text-inverse","border","border-transparent"],neutral:["bg-brand","text-inverse","border","border-transparent"],info:["bg-brand","text-inverse","border","border-transparent"]},secondary:{brand:["bg-raised","text-1","border","border-transparent"],success:["bg-raised","text-1","border","border-transparent"],warning:["bg-raised","text-1","border","border-transparent"],error:["bg-raised","text-1","border","border-transparent"],neutral:["bg-raised","text-1","border","border-transparent"],info:["bg-raised","text-1","border","border-transparent"]},success:{brand:["bg-success","text-inverse","border","border-transparent"],success:["bg-success","text-inverse","border","border-transparent"],warning:["bg-success","text-inverse","border","border-transparent"],error:["bg-success","text-inverse","border","border-transparent"],neutral:["bg-success","text-inverse","border","border-transparent"],info:["bg-success","text-inverse","border","border-transparent"]},warning:{brand:["bg-warning","text-inverse","border","border-transparent"],success:["bg-warning","text-inverse","border","border-transparent"],warning:["bg-warning","text-inverse","border","border-transparent"],error:["bg-warning","text-inverse","border","border-transparent"],neutral:["bg-warning","text-inverse","border","border-transparent"],info:["bg-warning","text-inverse","border","border-transparent"]},info:{brand:["bg-info","text-inverse","border","border-transparent"],success:["bg-info","text-inverse","border","border-transparent"],warning:["bg-info","text-inverse","border","border-transparent"],error:["bg-info","text-inverse","border","border-transparent"],neutral:["bg-info","text-inverse","border","border-transparent"],info:["bg-info","text-inverse","border","border-transparent"]}};function m(n,s){if(!n)return null;let b=c[s];if(typeof n=="string")return jsx("span",{className:"inline-flex shrink-0",children:jsx(Icon,{name:n,size:b})});let e=n.size??b;return jsx("span",{className:"inline-flex shrink-0",children:jsx(Icon,{...n,size:e})})}function j(n){let{variant:s="solid",color:b="brand",size:e="md",hover:y,active:z,shadow:S,radius:B,underline:M,uppercase:I,fullWidth:C,labelFullWidth:N,disabled:u,loading:o,leftIcon:P,rightIcon:k,as:R="button",text:E,children:$,className:l,onClick:T,onMouseEnter:J,onMouseLeave:L,...X}=n,v=["primary","secondary","success","warning","danger","info"].includes(s),G=s==="solid",V=s==="link",W=S??(v||G?"sm":"none"),A=z??"scale",i=y??(v?"opacity":"none"),x=M??(V?"hover":"none"),F=B??"base",r=["inline-flex","items-center","justify-center","transition-all","duration-200","focus:outline-none","font-medium"];u||o?r.push("opacity-50","cursor-not-allowed","pointer-events-none"):r.push("cursor-pointer"),C&&r.push("w-full"),r.push(`gap-${f[e]}`),r.push(`px-${d[e].px}`),r.push(`py-${d[e].py}`),r.push(`text-${p[e]}`);let H=h[s]?.[b]||[];r.push(...H),i==="opacity"&&r.push("hover:opacity-90"),i==="scale"&&r.push("hover:scale-105"),i==="shadow"&&r.push("hover:shadow-md"),A==="scale"&&r.push("active:scale-95"),x==="hover"&&r.push("hover:underline","underline-offset-4","decoration-2"),x==="always"&&r.push("underline","underline-offset-4","decoration-2"),I&&r.push("uppercase","tracking-wide"),l&&r.push(l);let a=$||E,U=p[e];return jsxs("div",{as:R,className:r.join(" "),radius:F,shadow:W,onClick:q=>{!u&&!o&&T?.(q);},onMouseEnter:J,onMouseLeave:L,...X,children:[o&&jsx("span",{className:"animate-spin mr-2",children:jsx(Icon,{name:"spinner",size:c[e]})}),o?jsx(Fragment,{}):m(P,e),a&&(typeof a=="string"||typeof a=="number")?jsx(Text,{as:"span",weight:"extrabold",align:"center",color:"brand",size:U,className:`uppercase ${N?"flex-1":""}`,children:a}):a,o?jsx(Fragment,{}):m(k,e)]})}export{j as Button};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/kit/constants.ts","../src/kit/button.tsx"],"names":["sizePaddingMap","sizeGapMap","labelSizeMap","iconSizeMap","variantClasses","renderIcon","icon","size","iconSize","jsx","Icon","resolvedSize","Button","props","variant","color","hover","active","shadow","radius","underline","uppercase","fullWidth","labelFullWidth","disabled","loading","leftIcon","rightIcon","as","text","children","className","onClick","onMouseEnter","onMouseLeave","rest","isSemantic","isSolid","isLink","resolvedShadow","resolvedActive","resolvedHover","resolvedUnderline","resolvedRadius","baseClasses","variantStyle","content","labelSize","jsxs","e","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import type { ButtonSize, ButtonVariant, ButtonColor } from '../types';\n\nexport const sizePaddingMap: Record<ButtonSize, { px: 3 | 4 | 6; py: 1 | 2 | 3 }> = {\n sm: { px: 3, py: 1 },\n md: { px: 4, py: 2 },\n lg: { px: 6, py: 3 }\n};\n\nexport const sizeGapMap: Record<ButtonSize, 1 | 2> = {\n sm: 1,\n md: 2,\n lg: 2\n};\n\nexport const labelSizeMap: Record<ButtonSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg'\n};\n\nexport const iconSizeMap: Record<ButtonSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg'\n};\n\nexport const variantClasses: Record<ButtonVariant, Record<ButtonColor, string[]>> = {\n solid: {\n brand: ['bg-brand', 'text-inverse', 'border', 'border-transparent', 'hover:bg-brand-hover', 'active:bg-brand-active'],\n success: ['bg-success', 'text-inverse', 'border', 'border-transparent', 'hover:bg-success-hover', 'active:bg-success-active'],\n warning: ['bg-warning', 'text-inverse', 'border', 'border-transparent', 'hover:bg-warning-hover', 'active:bg-warning-active'],\n error: ['bg-error', 'text-inverse', 'border', 'border-transparent', 'hover:bg-error-hover', 'active:bg-error-active'],\n neutral: ['bg-surface', 'text-1', 'border', 'border-1', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-info', 'text-inverse', 'border', 'border-transparent', 'hover:opacity-90']\n },\n outline: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-brand', 'hover:bg-brand-subtle', 'active:bg-brand-subtle'],\n success: ['bg-transparent', 'text-success', 'border', 'border-success', 'hover:bg-success-subtle', 'active:bg-success-subtle'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-warning', 'hover:bg-warning-subtle', 'active:bg-warning-subtle'],\n error: ['bg-transparent', 'text-error', 'border', 'border-error', 'hover:bg-error-subtle', 'active:bg-error-subtle'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-1', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-transparent', 'text-info', 'border', 'border-info', 'hover:opacity-90']\n },\n ghost: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-transparent', 'hover:bg-brand-subtle', 'active:bg-brand-subtle'],\n success: ['bg-transparent', 'text-success', 'border', 'border-transparent', 'hover:bg-success-subtle', 'active:bg-success-subtle'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-transparent', 'hover:bg-warning-subtle', 'active:bg-warning-subtle'],\n error: ['bg-transparent', 'text-error', 'border', 'border-transparent', 'hover:bg-error-subtle', 'active:bg-error-subtle'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-transparent', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-transparent', 'text-info', 'border', 'border-transparent', 'hover:opacity-90']\n },\n link: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-transparent', 'px-1'],\n success: ['bg-transparent', 'text-success', 'border', 'border-transparent', 'px-1'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-transparent', 'px-1'],\n error: ['bg-transparent', 'text-error', 'border', 'border-transparent', 'px-1'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-transparent', 'px-1'],\n info: ['bg-transparent', 'text-info', 'border', 'border-transparent', 'px-1']\n },\n danger: {\n brand: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-error', 'text-inverse', 'border', 'border-transparent']\n },\n primary: {\n brand: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-brand', 'text-inverse', 'border', 'border-transparent']\n },\n secondary: {\n brand: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n success: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n warning: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n error: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n neutral: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n info: ['bg-raised', 'text-1', 'border', 'border-transparent']\n },\n success: {\n brand: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-success', 'text-inverse', 'border', 'border-transparent']\n },\n warning: {\n brand: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-warning', 'text-inverse', 'border', 'border-transparent']\n },\n info: {\n brand: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-info', 'text-inverse', 'border', 'border-transparent']\n }\n};\n","// src/kit/button.tsx\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { JSXElement } from '@minejs/jsx';\r\n import { Icon, type IconProps, type IconName, type IconConfig } from '@cruxkit/icon';\r\n import type { ButtonProps, ButtonSize } from '../types';\r\n import {\r\n sizePaddingMap,\r\n sizeGapMap,\r\n labelSizeMap,\r\n iconSizeMap,\r\n variantClasses\r\n } from './constants';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n function renderIcon(icon: IconProps | IconName | undefined, size: ButtonSize): JSXElement | null {\r\n if (!icon) return null;\r\n\r\n const iconSize = iconSizeMap[size];\r\n\r\n if (typeof icon === 'string') {\r\n return (\r\n <span className=\"inline-flex shrink-0\">\r\n <Icon name={icon as IconName} size={iconSize} />\r\n </span>\r\n );\r\n }\r\n\r\n const resolvedSize = ((icon as IconProps) as IconConfig).size ?? iconSize;\r\n\r\n return (\r\n <span className=\"inline-flex shrink-0\">\r\n <Icon {...icon} size={resolvedSize} />\r\n </span>\r\n );\r\n }\r\n\r\n /**\r\n * Button Component\r\n *\r\n * A versatile button component with support for variants, colors, sizes, and icons.\r\n * Now features enhanced style controllers for effects and interactions.\r\n *\r\n * @param {ButtonProps } props - The properties for the button.\r\n * @param {ButtonVariant } [props.variant='solid'] - Visual style variant.\r\n * - `solid`: Filled background (default).\r\n * - `outline`: Border with transparent background.\r\n * - `ghost`: Transparent background, hover effect.\r\n * - `link`: Looks like a text link.\r\n * - `primary`, `secondary`, `success`, `warning`, `danger`, `info`: Semantic variants.\r\n * @param {ButtonColor } [props.color='brand'] - Color theme.\r\n * - `brand`, `success`, `warning`, `error`, `neutral`, `info`.\r\n * @param {ButtonSize } [props.size='md'] - Button size.\r\n * - `sm`: Small.\r\n * - `md`: Medium.\r\n * - `lg`: Large.\r\n * @param {ButtonHoverEffect } [props.hover] - Hover effect.\r\n * - `opacity`: Reduces opacity on hover.\r\n * - `scale`: Scales up slightly on hover.\r\n * - `shadow`: Adds shadow on hover.\r\n * - `none`: No hover effect.\r\n * - Defaults depend on variant (e.g., semantic variants default to `opacity`).\r\n * @param {ButtonActiveEffect } [props.active='scale'] - Click/Active effect.\r\n * - `scale`: Scales down slightly on click.\r\n * - `none`: No active effect.\r\n * @param {string } [props.shadow] - Box shadow style (e.g., 'sm', 'md', 'lg', 'none'). Defaults based on variant.\r\n * @param {string } [props.radius='base'] - Border radius (e.g., 'none', 'sm', 'base', 'md', 'lg', 'full').\r\n * @param {ButtonUnderline } [props.underline] - Underline style for text.\r\n * - `hover`: Underline on hover.\r\n * - `always`: Always underlined.\r\n * - `none`: No underline.\r\n * @param {boolean} [props.uppercase=false] - If true, transforms text to uppercase.\r\n * @param {boolean} [props.fullWidth=false] - If true, the button takes up the full width of its container.\r\n * @param {boolean} [props.labelFullWidth=false] - If true, the label text takes up the remaining space (useful with icons).\r\n * @param {boolean} [props.disabled=false] - If true, disables interaction and applies disabled styles.\r\n * @param {boolean} [props.loading=false] - If true, shows a loading spinner and disables interaction.\r\n * @param {IconProps | IconName} [props.leftIcon] - Icon to display on the left side.\r\n * @param {IconProps | IconName} [props.rightIcon] - Icon to display on the right side.\r\n * @param {string} [props.as='button'] - The HTML element or component to render as.\r\n * @param {string | number} [props.text] - The text content of the button.\r\n * @param {JSXElement | string | number} [props.children] - Child elements (overrides text).\r\n * @param {string} [props.className] - Additional CSS classes.\r\n * @param {(e: MouseEvent) => void} [props.onClick] - Click handler.\r\n * @param {(e: MouseEvent) => void} [props.onMouseEnter] - Mouse enter handler.\r\n * @param {(e: MouseEvent) => void} [props.onMouseLeave] - Mouse leave handler.\r\n */\r\n export function Button(props: ButtonProps): JSXElement {\r\n const {\r\n variant = 'solid',\r\n color = 'brand',\r\n size = 'md',\r\n\r\n // Style Controllers\r\n hover,\r\n active,\r\n shadow,\r\n radius,\r\n underline,\r\n uppercase,\r\n\r\n fullWidth,\r\n labelFullWidth,\r\n disabled,\r\n loading,\r\n\r\n leftIcon,\r\n rightIcon,\r\n\r\n as = 'button',\r\n text,\r\n children,\r\n\r\n className,\r\n onClick,\r\n onMouseEnter,\r\n onMouseLeave,\r\n\r\n ...rest\r\n } = props;\r\n\r\n // 1. Resolve Defaults based on Variant\r\n const isSemantic = ['primary', 'secondary', 'success', 'warning', 'danger', 'info'].includes(variant);\r\n const isSolid = variant === 'solid';\r\n const isLink = variant === 'link';\r\n\r\n const resolvedShadow = shadow ?? ((isSemantic || isSolid) ? 'sm' : 'none');\r\n const resolvedActive = active ?? 'scale';\r\n // Legacy variants (solid/outline/ghost) have built-in color hovers, so we default to 'none' to avoid double effects\r\n // Semantic variants use opacity hover by default\r\n const resolvedHover = hover ?? (isSemantic ? 'opacity' : 'none');\r\n const resolvedUnderline = underline ?? (isLink ? 'hover' : 'none');\r\n const resolvedRadius = radius ?? 'base'; // Default to base rounded\r\n\r\n // 2. Compose Classes\r\n const baseClasses = [\r\n 'inline-flex', 'items-center', 'justify-center',\r\n 'transition-all', 'duration-200',\r\n 'focus:outline-none',\r\n 'font-medium'\r\n ];\r\n\r\n // State Classes\r\n if (disabled || loading) {\r\n baseClasses.push('opacity-50', 'cursor-not-allowed', 'pointer-events-none');\r\n } else {\r\n baseClasses.push('cursor-pointer');\r\n }\r\n\r\n // Size Classes\r\n if (fullWidth) baseClasses.push('w-full');\r\n baseClasses.push(`gap-${sizeGapMap[size]}`);\r\n baseClasses.push(`px-${sizePaddingMap[size].px}`);\r\n baseClasses.push(`py-${sizePaddingMap[size].py}`);\r\n baseClasses.push(`text-${labelSizeMap[size]}`); // Ensure text size matches button size\r\n\r\n // Variant & Color Classes (from Constants)\r\n const variantStyle = variantClasses[variant]?.[color] || [];\r\n baseClasses.push(...variantStyle);\r\n\r\n // Hover Effects\r\n if (resolvedHover === 'opacity') baseClasses.push('hover:opacity-90');\r\n if (resolvedHover === 'scale') baseClasses.push('hover:scale-105');\r\n if (resolvedHover === 'shadow') baseClasses.push('hover:shadow-md');\r\n\r\n // Active Effects\r\n if (resolvedActive === 'scale') baseClasses.push('active:scale-95');\r\n\r\n // Underline\r\n if (resolvedUnderline === 'hover') baseClasses.push('hover:underline', 'underline-offset-4', 'decoration-2');\r\n if (resolvedUnderline === 'always') baseClasses.push('underline', 'underline-offset-4', 'decoration-2');\r\n\r\n // Uppercase\r\n if (uppercase) baseClasses.push('uppercase', 'tracking-wide');\r\n\r\n // Custom ClassName\r\n if (className) baseClasses.push(className);\r\n\r\n\r\n // 3. Render\r\n const content = children || text;\r\n const labelSize = labelSizeMap[size];\r\n\r\n return (\r\n <div\r\n as={as}\r\n className={baseClasses.join(' ')}\r\n radius={resolvedRadius}\r\n shadow={resolvedShadow}\r\n onClick={(e: MouseEvent) => {\r\n if (!disabled && !loading) {\r\n onClick?.(e);\r\n }\r\n }}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n {...rest}\r\n >\r\n {loading && (\r\n <span className=\"animate-spin mr-2\">\r\n <Icon name='spinner' size={iconSizeMap[size]} />\r\n </span>\r\n )}\r\n\r\n {!loading ? renderIcon(leftIcon, size) : <></>}\r\n\r\n {content && (typeof content === 'string' || typeof content === 'number') ? (\r\n <div\r\n as ='span'\r\n textWeight ='extrabold'\r\n textAlign ={labelFullWidth ? 'center' : 'center'}\r\n textTransform ='uppercase'\r\n color ='brand'\r\n textSize ={labelSize}\r\n className ={labelFullWidth ? 'flex-1' : ''}\r\n children ={content}\r\n />\r\n ) : content}\r\n\r\n {!loading ? renderIcon(rightIcon, size) : <></>}\r\n </div>\r\n );\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/kit/constants.ts","../src/kit/button.tsx"],"names":["sizePaddingMap","sizeGapMap","labelSizeMap","iconSizeMap","variantClasses","renderIcon","icon","size","iconSize","jsx","Icon","resolvedSize","Button","props","variant","color","hover","active","shadow","radius","underline","uppercase","fullWidth","labelFullWidth","disabled","loading","leftIcon","rightIcon","as","text","children","className","onClick","onMouseEnter","onMouseLeave","rest","isSemantic","isSolid","isLink","resolvedShadow","resolvedActive","resolvedHover","resolvedUnderline","resolvedRadius","baseClasses","variantStyle","content","labelSize","jsxs","e","Fragment","Text"],"mappings":"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","file":"index.js","sourcesContent":["import type { ButtonSize, ButtonVariant, ButtonColor } from '../types';\n\nexport const sizePaddingMap: Record<ButtonSize, { px: 3 | 4 | 6; py: 1 | 2 | 3 }> = {\n sm: { px: 3, py: 1 },\n md: { px: 4, py: 2 },\n lg: { px: 6, py: 3 }\n};\n\nexport const sizeGapMap: Record<ButtonSize, 1 | 2> = {\n sm: 1,\n md: 2,\n lg: 2\n};\n\nexport const labelSizeMap: Record<ButtonSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg'\n};\n\nexport const iconSizeMap: Record<ButtonSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg'\n};\n\nexport const variantClasses: Record<ButtonVariant, Record<ButtonColor, string[]>> = {\n solid: {\n brand: ['bg-brand', 'text-inverse', 'border', 'border-transparent', 'hover:bg-brand-hover', 'active:bg-brand-active'],\n success: ['bg-success', 'text-inverse', 'border', 'border-transparent', 'hover:bg-success-hover', 'active:bg-success-active'],\n warning: ['bg-warning', 'text-inverse', 'border', 'border-transparent', 'hover:bg-warning-hover', 'active:bg-warning-active'],\n error: ['bg-error', 'text-inverse', 'border', 'border-transparent', 'hover:bg-error-hover', 'active:bg-error-active'],\n neutral: ['bg-surface', 'text-1', 'border', 'border-1', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-info', 'text-inverse', 'border', 'border-transparent', 'hover:opacity-90']\n },\n outline: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-brand', 'hover:bg-brand-subtle', 'active:bg-brand-subtle'],\n success: ['bg-transparent', 'text-success', 'border', 'border-success', 'hover:bg-success-subtle', 'active:bg-success-subtle'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-warning', 'hover:bg-warning-subtle', 'active:bg-warning-subtle'],\n error: ['bg-transparent', 'text-error', 'border', 'border-error', 'hover:bg-error-subtle', 'active:bg-error-subtle'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-1', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-transparent', 'text-info', 'border', 'border-info', 'hover:opacity-90']\n },\n ghost: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-transparent', 'hover:bg-brand-subtle', 'active:bg-brand-subtle'],\n success: ['bg-transparent', 'text-success', 'border', 'border-transparent', 'hover:bg-success-subtle', 'active:bg-success-subtle'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-transparent', 'hover:bg-warning-subtle', 'active:bg-warning-subtle'],\n error: ['bg-transparent', 'text-error', 'border', 'border-transparent', 'hover:bg-error-subtle', 'active:bg-error-subtle'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-transparent', 'hover:bg-raised', 'active:bg-tertiary'],\n info: ['bg-transparent', 'text-info', 'border', 'border-transparent', 'hover:opacity-90']\n },\n link: {\n brand: ['bg-transparent', 'text-brand', 'border', 'border-transparent', 'px-1'],\n success: ['bg-transparent', 'text-success', 'border', 'border-transparent', 'px-1'],\n warning: ['bg-transparent', 'text-warning', 'border', 'border-transparent', 'px-1'],\n error: ['bg-transparent', 'text-error', 'border', 'border-transparent', 'px-1'],\n neutral: ['bg-transparent', 'text-1', 'border', 'border-transparent', 'px-1'],\n info: ['bg-transparent', 'text-info', 'border', 'border-transparent', 'px-1']\n },\n danger: {\n brand: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-error', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-error', 'text-inverse', 'border', 'border-transparent']\n },\n primary: {\n brand: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-brand', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-brand', 'text-inverse', 'border', 'border-transparent']\n },\n secondary: {\n brand: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n success: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n warning: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n error: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n neutral: ['bg-raised', 'text-1', 'border', 'border-transparent'],\n info: ['bg-raised', 'text-1', 'border', 'border-transparent']\n },\n success: {\n brand: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-success', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-success', 'text-inverse', 'border', 'border-transparent']\n },\n warning: {\n brand: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-warning', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-warning', 'text-inverse', 'border', 'border-transparent']\n },\n info: {\n brand: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n success: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n warning: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n error: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n neutral: ['bg-info', 'text-inverse', 'border', 'border-transparent'],\n info: ['bg-info', 'text-inverse', 'border', 'border-transparent']\n }\n};\n","// src/kit/button.tsx\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { type JSXElement, Text, TextProps } from '@minejs/jsx';\r\n import { Icon, type IconProps, type IconName, type IconConfig } from '@cruxkit/icon';\r\n import type { ButtonProps, ButtonSize } from '../types';\r\n import {\r\n sizePaddingMap,\r\n sizeGapMap,\r\n labelSizeMap,\r\n iconSizeMap,\r\n variantClasses\r\n } from './constants';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n function renderIcon(icon: IconProps | IconName | undefined, size: ButtonSize): JSXElement | null {\r\n if (!icon) return null;\r\n\r\n const iconSize = iconSizeMap[size];\r\n\r\n if (typeof icon === 'string') {\r\n return (\r\n <span className=\"inline-flex shrink-0\">\r\n <Icon name={icon as IconName} size={iconSize} />\r\n </span>\r\n );\r\n }\r\n\r\n const resolvedSize = ((icon as IconProps) as IconConfig).size ?? iconSize;\r\n\r\n return (\r\n <span className=\"inline-flex shrink-0\">\r\n <Icon {...icon} size={resolvedSize} />\r\n </span>\r\n );\r\n }\r\n\r\n /**\r\n * Button Component\r\n *\r\n * A versatile button component with support for variants, colors, sizes, and icons.\r\n * Now features enhanced style controllers for effects and interactions.\r\n *\r\n * @param {ButtonProps } props - The properties for the button.\r\n * @param {ButtonVariant } [props.variant='solid'] - Visual style variant.\r\n * - `solid`: Filled background (default).\r\n * - `outline`: Border with transparent background.\r\n * - `ghost`: Transparent background, hover effect.\r\n * - `link`: Looks like a text link.\r\n * - `primary`, `secondary`, `success`, `warning`, `danger`, `info`: Semantic variants.\r\n * @param {ButtonColor } [props.color='brand'] - Color theme.\r\n * - `brand`, `success`, `warning`, `error`, `neutral`, `info`.\r\n * @param {ButtonSize } [props.size='md'] - Button size.\r\n * - `sm`: Small.\r\n * - `md`: Medium.\r\n * - `lg`: Large.\r\n * @param {ButtonHoverEffect } [props.hover] - Hover effect.\r\n * - `opacity`: Reduces opacity on hover.\r\n * - `scale`: Scales up slightly on hover.\r\n * - `shadow`: Adds shadow on hover.\r\n * - `none`: No hover effect.\r\n * - Defaults depend on variant (e.g., semantic variants default to `opacity`).\r\n * @param {ButtonActiveEffect } [props.active='scale'] - Click/Active effect.\r\n * - `scale`: Scales down slightly on click.\r\n * - `none`: No active effect.\r\n * @param {string } [props.shadow] - Box shadow style (e.g., 'sm', 'md', 'lg', 'none'). Defaults based on variant.\r\n * @param {string } [props.radius='base'] - Border radius (e.g., 'none', 'sm', 'base', 'md', 'lg', 'full').\r\n * @param {ButtonUnderline } [props.underline] - Underline style for text.\r\n * - `hover`: Underline on hover.\r\n * - `always`: Always underlined.\r\n * - `none`: No underline.\r\n * @param {boolean} [props.uppercase=false] - If true, transforms text to uppercase.\r\n * @param {boolean} [props.fullWidth=false] - If true, the button takes up the full width of its container.\r\n * @param {boolean} [props.labelFullWidth=false] - If true, the label text takes up the remaining space (useful with icons).\r\n * @param {boolean} [props.disabled=false] - If true, disables interaction and applies disabled styles.\r\n * @param {boolean} [props.loading=false] - If true, shows a loading spinner and disables interaction.\r\n * @param {IconProps | IconName} [props.leftIcon] - Icon to display on the left side.\r\n * @param {IconProps | IconName} [props.rightIcon] - Icon to display on the right side.\r\n * @param {string} [props.as='button'] - The HTML element or component to render as.\r\n * @param {string | number} [props.text] - The text content of the button.\r\n * @param {JSXElement | string | number} [props.children] - Child elements (overrides text).\r\n * @param {string} [props.className] - Additional CSS classes.\r\n * @param {(e: MouseEvent) => void} [props.onClick] - Click handler.\r\n * @param {(e: MouseEvent) => void} [props.onMouseEnter] - Mouse enter handler.\r\n * @param {(e: MouseEvent) => void} [props.onMouseLeave] - Mouse leave handler.\r\n */\r\n export function Button(props: ButtonProps): JSXElement {\r\n const {\r\n variant = 'solid',\r\n color = 'brand',\r\n size = 'md',\r\n\r\n // Style Controllers\r\n hover,\r\n active,\r\n shadow,\r\n radius,\r\n underline,\r\n uppercase,\r\n\r\n fullWidth,\r\n labelFullWidth,\r\n disabled,\r\n loading,\r\n\r\n leftIcon,\r\n rightIcon,\r\n\r\n as = 'button',\r\n text,\r\n children,\r\n\r\n className,\r\n onClick,\r\n onMouseEnter,\r\n onMouseLeave,\r\n\r\n ...rest\r\n } = props;\r\n\r\n // 1. Resolve Defaults based on Variant\r\n const isSemantic = ['primary', 'secondary', 'success', 'warning', 'danger', 'info'].includes(variant);\r\n const isSolid = variant === 'solid';\r\n const isLink = variant === 'link';\r\n\r\n const resolvedShadow = shadow ?? ((isSemantic || isSolid) ? 'sm' : 'none');\r\n const resolvedActive = active ?? 'scale';\r\n // Legacy variants (solid/outline/ghost) have built-in color hovers, so we default to 'none' to avoid double effects\r\n // Semantic variants use opacity hover by default\r\n const resolvedHover = hover ?? (isSemantic ? 'opacity' : 'none');\r\n const resolvedUnderline = underline ?? (isLink ? 'hover' : 'none');\r\n const resolvedRadius = radius ?? 'base'; // Default to base rounded\r\n\r\n // 2. Compose Classes\r\n const baseClasses = [\r\n 'inline-flex', 'items-center', 'justify-center',\r\n 'transition-all', 'duration-200',\r\n 'focus:outline-none',\r\n 'font-medium'\r\n ];\r\n\r\n // State Classes\r\n if (disabled || loading) {\r\n baseClasses.push('opacity-50', 'cursor-not-allowed', 'pointer-events-none');\r\n } else {\r\n baseClasses.push('cursor-pointer');\r\n }\r\n\r\n // Size Classes\r\n if (fullWidth) baseClasses.push('w-full');\r\n baseClasses.push(`gap-${sizeGapMap[size]}`);\r\n baseClasses.push(`px-${sizePaddingMap[size].px}`);\r\n baseClasses.push(`py-${sizePaddingMap[size].py}`);\r\n baseClasses.push(`text-${labelSizeMap[size]}`); // Ensure text size matches button size\r\n\r\n // Variant & Color Classes (from Constants)\r\n const variantStyle = variantClasses[variant]?.[color] || [];\r\n baseClasses.push(...variantStyle);\r\n\r\n // Hover Effects\r\n if (resolvedHover === 'opacity') baseClasses.push('hover:opacity-90');\r\n if (resolvedHover === 'scale') baseClasses.push('hover:scale-105');\r\n if (resolvedHover === 'shadow') baseClasses.push('hover:shadow-md');\r\n\r\n // Active Effects\r\n if (resolvedActive === 'scale') baseClasses.push('active:scale-95');\r\n\r\n // Underline\r\n if (resolvedUnderline === 'hover') baseClasses.push('hover:underline', 'underline-offset-4', 'decoration-2');\r\n if (resolvedUnderline === 'always') baseClasses.push('underline', 'underline-offset-4', 'decoration-2');\r\n\r\n // Uppercase\r\n if (uppercase) baseClasses.push('uppercase', 'tracking-wide');\r\n\r\n // Custom ClassName\r\n if (className) baseClasses.push(className);\r\n\r\n\r\n // 3. Render\r\n const content = children || text;\r\n const labelSize = labelSizeMap[size];\r\n\r\n return (\r\n <div\r\n as={as}\r\n className={baseClasses.join(' ')}\r\n radius={resolvedRadius}\r\n shadow={resolvedShadow}\r\n onClick={(e: MouseEvent) => {\r\n if (!disabled && !loading) {\r\n onClick?.(e);\r\n }\r\n }}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n {...rest}\r\n >\r\n {loading && (\r\n <span className=\"animate-spin mr-2\">\r\n <Icon name='spinner' size={iconSizeMap[size]} />\r\n </span>\r\n )}\r\n\r\n {!loading ? renderIcon(leftIcon, size) : <></>}\r\n\r\n {content && (typeof content === 'string' || typeof content === 'number') ? (\r\n <Text\r\n as=\"span\"\r\n weight=\"extrabold\"\r\n align=\"center\"\r\n color=\"brand\"\r\n size={labelSize as TextProps[\"size\"]}\r\n className={`uppercase ${labelFullWidth ? 'flex-1' : ''}`}\r\n >\r\n {content}\r\n </Text>\r\n ) : content}\r\n\r\n {!loading ? renderIcon(rightIcon, size) : <></>}\r\n </div>\r\n );\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cruxkit/button",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A lightweight, reactive button kit, built for @cruxjs ecosystem.",
|
|
5
5
|
"keywords": ["crux", "kit", "button"],
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"bun": "^1.3.3"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@cruxkit/icon": "^0.1.
|
|
44
|
-
"@minejs/jsx": "^0.2.
|
|
43
|
+
"@cruxkit/icon": "^0.1.3",
|
|
44
|
+
"@minejs/jsx": "^0.2.8"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@eslint/js": "^9.39.2",
|