tekivex-ui 3.0.4 → 3.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.
@@ -0,0 +1,37 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ export interface TkxHolographicSurfaceProps extends HTMLAttributes<HTMLDivElement> {
3
+ children: ReactNode;
4
+ maxTilt?: number;
5
+ scanLines?: boolean;
6
+ foilIntensity?: 'strong' | 'soft' | 'none';
7
+ radius?: number | string;
8
+ disabled?: boolean;
9
+ }
10
+ export declare const TkxHolographicSurface: import("react").ForwardRefExoticComponent<TkxHolographicSurfaceProps & import("react").RefAttributes<HTMLDivElement>>;
11
+ export interface TkxHolographicCardProps extends Omit<TkxHolographicSurfaceProps, 'children' | 'title'> {
12
+ title?: ReactNode;
13
+ subtitle?: ReactNode;
14
+ badge?: ReactNode;
15
+ children?: ReactNode;
16
+ padding?: number | string;
17
+ }
18
+ export declare const TkxHolographicCard: import("react").ForwardRefExoticComponent<TkxHolographicCardProps & import("react").RefAttributes<HTMLDivElement>>;
19
+ export interface TkxHolographicAvatarProps extends Omit<TkxHolographicSurfaceProps, 'children' | 'radius'> {
20
+ src?: string;
21
+ alt: string;
22
+ size?: number;
23
+ initials?: string;
24
+ }
25
+ export declare const TkxHolographicAvatar: import("react").ForwardRefExoticComponent<TkxHolographicAvatarProps & import("react").RefAttributes<HTMLDivElement>>;
26
+ export interface TkxHolographicBadgeProps extends Omit<TkxHolographicSurfaceProps, 'children' | 'radius' | 'maxTilt'> {
27
+ children: ReactNode;
28
+ size?: 'sm' | 'md' | 'lg';
29
+ }
30
+ export declare const TkxHolographicBadge: import("react").ForwardRefExoticComponent<TkxHolographicBadgeProps & import("react").RefAttributes<HTMLDivElement>>;
31
+ export interface TkxHolographicButtonProps extends Omit<TkxHolographicSurfaceProps, 'children' | 'radius' | 'onClick'> {
32
+ children: ReactNode;
33
+ onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
34
+ isDisabled?: boolean;
35
+ type?: 'button' | 'submit' | 'reset';
36
+ }
37
+ export declare const TkxHolographicButton: import("react").ForwardRefExoticComponent<TkxHolographicButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,43 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ export interface KanbanCard {
3
+ id: string;
4
+ title: string;
5
+ description?: string;
6
+ data?: unknown;
7
+ badges?: {
8
+ label: string;
9
+ color?: string;
10
+ }[];
11
+ assignee?: {
12
+ name: string;
13
+ avatarUrl?: string;
14
+ };
15
+ isDragDisabled?: boolean;
16
+ }
17
+ export interface KanbanColumn {
18
+ id: string;
19
+ title: string;
20
+ wipLimit?: number;
21
+ color?: string;
22
+ cards: KanbanCard[];
23
+ }
24
+ export interface KanbanReorderEvent {
25
+ cardId: string;
26
+ fromColumnId: string;
27
+ fromIndex: number;
28
+ toColumnId: string;
29
+ toIndex: number;
30
+ }
31
+ export interface TkxKanbanProps {
32
+ columns: KanbanColumn[];
33
+ onReorder: (event: KanbanReorderEvent) => void;
34
+ renderCard?: (card: KanbanCard, column: KanbanColumn) => ReactNode;
35
+ onCardClick?: (card: KanbanCard, column: KanbanColumn) => void;
36
+ maxHeight?: number | string;
37
+ minColumnWidth?: number;
38
+ isDragDisabled?: boolean;
39
+ className?: string;
40
+ style?: CSSProperties;
41
+ }
42
+ export declare const TkxKanban: import("react").ForwardRefExoticComponent<TkxKanbanProps & import("react").RefAttributes<HTMLDivElement>>;
43
+ export type { KanbanCard as TkxKanbanCard, KanbanColumn as TkxKanbanColumn, KanbanReorderEvent as TkxKanbanReorderEvent, };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tekivex-ui",
3
- "version": "3.0.4",
3
+ "version": "3.2.0",
4
4
  "description": "Production-grade React component library — 99 components, WCAG 2.1 AAA, WAI-ARIA 1.2, built-in security kernel, built-in charts, headless primitives, zero-runtime CSS engine, 35-locale i18n, Indian KYC pack, TypeScript-first. v3.0.0 ships with 1034 passing tests.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1,3 +0,0 @@
1
- import{p as e}from"./chunk-DdHSYetV.js";import{E as r,a as t,t as l}from"./chunk-DcVMayoM.js";import{useLocale as n}from"./i18n.js";import{cloneElement as a,createContext as i,useCallback as s,useContext as o,useEffect as u,useMemo as c,useRef as d,useState as m}from"react";import{Fragment as f,jsx as h,jsxs as x}from"react/jsx-runtime";var F=i(null),p={required:"This field is required",invalidFormat:"Invalid format",minLength:e=>`Must be at least ${e} characters`,maxLength:e=>`Must be no more than ${e} characters`,minValue:e=>`Must be at least ${e}`,maxValue:e=>`Must be no more than ${e}`};async function v(e,r,t=p){for(const l of r){if(l.required&&(null==e||""===e||Array.isArray(e)&&0===e.length))return l.message??t.required;if(null!=e&&""!==e){if(void 0!==l.min){if("string"==typeof e&&e.length<l.min)return l.message??t.minLength(l.min);if("number"==typeof e&&e<l.min)return l.message??t.minValue(l.min)}if(void 0!==l.max){if("string"==typeof e&&e.length>l.max)return l.message??t.maxLength(l.max);if("number"==typeof e&&e>l.max)return l.message??t.maxValue(l.max)}if(l.pattern&&"string"==typeof e&&!l.pattern.test(e))return l.message??t.invalidFormat;if(l.validator){const r=await l.validator(e);if(r)return r}}}return null}function y(){const e=o(F),r=d({}),t=d({}),l=d({}),n=c(()=>({getFieldValue:e=>r.current[e],setFieldValue:(e,t)=>{r.current[e]=t},getFieldsValue:()=>({...r.current}),setFieldsValue:e=>{Object.assign(r.current,e)},validateFields:()=>Promise.resolve({...r.current}),validateField:e=>Promise.resolve(!0),resetFields:()=>{r.current={},t.current={},l.current={}},getFieldError:e=>t.current[e]??null,isFieldTouched:e=>l.current[e]??!1}),[]);return e?e.instance:n}function g({onSubmit:r,onValuesChange:a,initialValues:i={},layout:o="vertical",disabled:f=!1,children:x,className:y,style:g,form:b}){const V=e(),w=n(),k=c(()=>({required:w.fieldRequired??p.required,invalidFormat:w.invalidFormat??p.invalidFormat,minLength:w.minLength??p.minLength,maxLength:w.maxLength??p.maxLength,minValue:w.minValue??p.minValue,maxValue:w.maxValue??p.maxValue}),[w]),[N,T]=m({values:{...i},errors:{},touched:{}}),j=d(i),E=d({}),q=d(N);q.current=N;const M=s((e,r)=>{E.current[e]=r},[]),z=s(e=>{delete E.current[e]},[]),C=s((e,r)=>{T(t=>{const l={...t,values:{...t.values,[e]:r}};return a?.({[e]:r},l.values),l})},[a]),L=s((e,r)=>{T(t=>({...t,errors:{...t.errors,[e]:r}}))},[]),P=s(e=>{T(r=>({...r,touched:{...r.touched,[e]:!0}}))},[]),$=s(async e=>{const r=E.current[e];if(!r)return!0;const t=q.current.values[e],l=await v(t,r.rules,k);return T(r=>({...r,errors:{...r.errors,[e]:l},touched:{...r.touched,[e]:!0}})),null===l},[k]),O=s(async()=>{const e=Object.keys(E.current),r=await Promise.all(e.map(async e=>{const r=E.current[e],t=q.current.values[e];return{name:e,error:await v(t,r.rules,k)}})),t={},l={};let n=!1;for(const{name:a,error:i}of r)t[a]=i,l[a]=!0,i&&(n=!0);if(T(e=>({...e,errors:{...e.errors,...t},touched:{...e.touched,...l}})),n){const e=Object.fromEntries(r.filter(e=>e.error).map(e=>[e.name,e.error]));return Promise.reject(e)}return{...q.current.values}},[]),R=s(()=>{T({values:{...j.current},errors:{},touched:{}})},[]),S=c(()=>({getFieldValue:e=>q.current.values[e],setFieldValue:C,getFieldsValue:()=>({...q.current.values}),setFieldsValue:e=>{T(r=>{const t={...r.values,...e};return a?.(e,t),{...r,values:t}})},validateFields:O,validateField:$,resetFields:R,getFieldError:e=>q.current.errors[e]??null,isFieldTouched:e=>!!q.current.touched[e]}),[C,O,$,R,a]),B=s(async e=>{e.preventDefault();try{const e=await O();await(r?.(e))}catch{}},[O,r]),I=t("inline"===o?"flex flex-row flex-wrap items-end gap-4":"flex flex-col gap-5");u(()=>{if(!b)return;const e=b;e.getFieldValue=S.getFieldValue,e.setFieldValue=S.setFieldValue,e.getFieldsValue=S.getFieldsValue,e.setFieldsValue=S.setFieldsValue,e.validateFields=S.validateFields,e.validateField=S.validateField,e.resetFields=S.resetFields,e.getFieldError=S.getFieldError,e.isFieldTouched=S.isFieldTouched},[b,S]);const Y=b??S,A=c(()=>({state:N,initialValues:j.current,layout:o,disabled:f,fieldMeta:E,setFieldValue:C,setFieldError:L,setFieldTouched:P,registerField:M,unregisterField:z,validateField:$,instance:Y}),[N,o,f,C,L,P,M,z,$,Y]);/* @__PURE__ */
2
- return h(F.Provider,{value:A,children:/* @__PURE__ */h("form",{noValidate:!0,role:"form","aria-label":"Form",onSubmit:B,className:l(I,y),style:{color:V.text,...g},children:x})})}function b({name:n,label:i,rules:u,help:m,required:v,children:y,className:g,style:b}){const V=e(),w=function(){const e=o(F);if(!e)throw new Error("TkxFormField must be used inside a <TkxForm>. Wrap your fields in a TkxForm component.");return e}(),{state:k,layout:N,disabled:T}=w,j=c(()=>function(e,r,t=p.required){const l=e?[...e]:[];return r&&!l.some(e=>e.required)&&l.unshift({required:!0,message:t}),l}(u,v),[u,v]),E=function(e){return e.some(e=>e.required)}(j),q=d({rules:j});q.current.rules=j;const M=d(!1);M.current||(w.registerField(n,q.current),M.current=!0),c(()=>{w.registerField(n,q.current)},[j,n,w]);const z=k.values[n],C=k.touched[n]?k.errors[n]??null:null,L=C?r(C):null,P=i?r(i):void 0,$=m?r(m):void 0,O=s(e=>{let r;if(null!==e&&"object"==typeof e&&"target"in e){const t=e.target;r="checkbox"===t.type?t.checked:t.value}else r=e;w.setFieldValue(n,r)},[w,n]),R=s(()=>{w.setFieldTouched(n),w.validateField(n)},[w,n]),S=a(y,{value:z??"",onChange:O,onBlur:R,error:L??void 0,isInvalid:!!L,isRequired:E,disabled:T||y.props.disabled,name:n}),B="horizontal"===N,I="inline"===N,Y=/* @__PURE__ */h("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:/* @__PURE__ */h("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),A=P?/* @__PURE__ */x("label",{className:t("text-sm font-medium font-sans",B?"min-w-[140px] pt-2.5":""),style:{color:V.text},children:[P,E&&/* @__PURE__ */h("span",{"aria-hidden":"true",className:t("ml-1"),style:{color:V.danger},children:"*"})]}):null,W=/* @__PURE__ */x(f,{children:[$&&!L&&/* @__PURE__ */h("span",{className:t("text-xs mt-0.5"),style:{color:V.textMuted},children:$}),L&&/* @__PURE__ */x("span",{role:"alert",className:t("text-xs flex items-center gap-1 mt-0.5"),style:{color:V.danger,animation:"tkxFormErrorReveal 200ms ease-out"},children:[Y,L]})]});/* @__PURE__ */
3
- return x("div",I?{className:l(t("flex flex-col gap-1"),g),style:b,children:[A,S,W]}:B?{className:l(t("flex flex-row gap-4 items-start"),g),style:b,children:[A,/* @__PURE__ */x("div",{className:t("flex flex-col gap-1 flex-1 min-w-0"),children:[S,W]})]}:{className:l(t("flex flex-col gap-1"),g),style:b,children:[A,S,W]})}g.displayName="TkxForm",b.displayName="TkxFormField";var V=!1;!function(){if(V)return;if("undefined"==typeof document)return;V=!0;const e=document.createElement("style");e.setAttribute("data-tkx-form",""),e.textContent="\n @keyframes tkxFormErrorReveal {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n ",document.head.appendChild(e)}();export{b as n,y as r,g as t};
@@ -1 +0,0 @@
1
- require("./chunk-DmRB1Blb.js");const e=require("./chunk-BpuJ3-K8.js"),r=require("./chunk-D7-yknXg.js"),t=require("./i18n.cjs");let n=require("react"),l=require("react/jsx-runtime");var i=(0,n.createContext)(null),a={required:"This field is required",invalidFormat:"Invalid format",minLength:e=>`Must be at least ${e} characters`,maxLength:e=>`Must be no more than ${e} characters`,minValue:e=>`Must be at least ${e}`,maxValue:e=>`Must be no more than ${e}`};async function s(e,r,t=a){for(const n of r){if(n.required&&(null==e||""===e||Array.isArray(e)&&0===e.length))return n.message??t.required;if(null!=e&&""!==e){if(void 0!==n.min){if("string"==typeof e&&e.length<n.min)return n.message??t.minLength(n.min);if("number"==typeof e&&e<n.min)return n.message??t.minValue(n.min)}if(void 0!==n.max){if("string"==typeof e&&e.length>n.max)return n.message??t.maxLength(n.max);if("number"==typeof e&&e>n.max)return n.message??t.maxValue(n.max)}if(n.pattern&&"string"==typeof e&&!n.pattern.test(e))return n.message??t.invalidFormat;if(n.validator){const r=await n.validator(e);if(r)return r}}}return null}function o(){const e=(0,n.useContext)(i),r=(0,n.useRef)({}),t=(0,n.useRef)({}),l=(0,n.useRef)({}),a=(0,n.useMemo)(()=>({getFieldValue:e=>r.current[e],setFieldValue:(e,t)=>{r.current[e]=t},getFieldsValue:()=>({...r.current}),setFieldsValue:e=>{Object.assign(r.current,e)},validateFields:()=>Promise.resolve({...r.current}),validateField:e=>Promise.resolve(!0),resetFields:()=>{r.current={},t.current={},l.current={}},getFieldError:e=>t.current[e]??null,isFieldTouched:e=>l.current[e]??!1}),[]);return e?e.instance:a}function u({onSubmit:o,onValuesChange:u,initialValues:c={},layout:d="vertical",disabled:m=!1,children:f,className:h,style:x,form:F}){const v=e.useTheme(),y=t.useLocale(),g=(0,n.useMemo)(()=>({required:y.fieldRequired??a.required,invalidFormat:y.invalidFormat??a.invalidFormat,minLength:y.minLength??a.minLength,maxLength:y.maxLength??a.maxLength,minValue:y.minValue??a.minValue,maxValue:y.maxValue??a.maxValue}),[y]),[p,b]=(0,n.useState)({values:{...c},errors:{},touched:{}}),V=(0,n.useRef)(c),k=(0,n.useRef)({}),w=(0,n.useRef)(p);w.current=p;const j=(0,n.useCallback)((e,r)=>{k.current[e]=r},[]),q=(0,n.useCallback)(e=>{delete k.current[e]},[]),T=(0,n.useCallback)((e,r)=>{b(t=>{const n={...t,values:{...t.values,[e]:r}};return u?.({[e]:r},n.values),n})},[u]),N=(0,n.useCallback)((e,r)=>{b(t=>({...t,errors:{...t.errors,[e]:r}}))},[]),E=(0,n.useCallback)(e=>{b(r=>({...r,touched:{...r.touched,[e]:!0}}))},[]),M=(0,n.useCallback)(async e=>{const r=k.current[e];if(!r)return!0;const t=w.current.values[e],n=await s(t,r.rules,g);return b(r=>({...r,errors:{...r.errors,[e]:n},touched:{...r.touched,[e]:!0}})),null===n},[g]),O=(0,n.useCallback)(async()=>{const e=Object.keys(k.current),r=await Promise.all(e.map(async e=>{const r=k.current[e],t=w.current.values[e];return{name:e,error:await s(t,r.rules,g)}})),t={},n={};let l=!1;for(const{name:i,error:a}of r)t[i]=a,n[i]=!0,a&&(l=!0);if(b(e=>({...e,errors:{...e.errors,...t},touched:{...e.touched,...n}})),l){const e=Object.fromEntries(r.filter(e=>e.error).map(e=>[e.name,e.error]));return Promise.reject(e)}return{...w.current.values}},[]),z=(0,n.useCallback)(()=>{b({values:{...V.current},errors:{},touched:{}})},[]),C=(0,n.useMemo)(()=>({getFieldValue:e=>w.current.values[e],setFieldValue:T,getFieldsValue:()=>({...w.current.values}),setFieldsValue:e=>{b(r=>{const t={...r.values,...e};return u?.(e,t),{...r,values:t}})},validateFields:O,validateField:M,resetFields:z,getFieldError:e=>w.current.errors[e]??null,isFieldTouched:e=>!!w.current.touched[e]}),[T,O,M,z,u]),L=(0,n.useCallback)(async e=>{e.preventDefault();try{const e=await O();await(o?.(e))}catch{}},[O,o]),P="inline"===d?r.tkx("flex flex-row flex-wrap items-end gap-4"):r.tkx("flex flex-col gap-5");(0,n.useEffect)(()=>{if(!F)return;const e=F;e.getFieldValue=C.getFieldValue,e.setFieldValue=C.setFieldValue,e.getFieldsValue=C.getFieldsValue,e.setFieldsValue=C.setFieldsValue,e.validateFields=C.validateFields,e.validateField=C.validateField,e.resetFields=C.resetFields,e.getFieldError=C.getFieldError,e.isFieldTouched=C.isFieldTouched},[F,C]);const $=F??C,R=(0,n.useMemo)(()=>({state:p,initialValues:V.current,layout:d,disabled:m,fieldMeta:k,setFieldValue:T,setFieldError:N,setFieldTouched:E,registerField:j,unregisterField:q,validateField:M,instance:$}),[p,d,m,T,N,E,j,q,M,$]);return(0,l.jsx)(i.Provider,{value:R,children:(0,l.jsx)("form",{noValidate:!0,role:"form","aria-label":"Form",onSubmit:L,className:r.cx(P,h),style:{color:v.text,...x},children:f})})}function c({name:t,label:s,rules:o,help:u,required:c,children:d,className:m,style:f}){const h=e.useTheme(),x=function(){const e=(0,n.useContext)(i);if(!e)throw new Error("TkxFormField must be used inside a <TkxForm>. Wrap your fields in a TkxForm component.");return e}(),{state:F,layout:v,disabled:y}=x,g=(0,n.useMemo)(()=>function(e,r,t=a.required){const n=e?[...e]:[];return r&&!n.some(e=>e.required)&&n.unshift({required:!0,message:t}),n}(o,c),[o,c]),p=function(e){return e.some(e=>e.required)}(g),b=(0,n.useRef)({rules:g});b.current.rules=g;const V=(0,n.useRef)(!1);V.current||(x.registerField(t,b.current),V.current=!0),(0,n.useMemo)(()=>{x.registerField(t,b.current)},[g,t,x]);const k=F.values[t],w=F.touched[t]?F.errors[t]??null:null,j=w?r.sanitizeString(w):null,q=s?r.sanitizeString(s):void 0,T=u?r.sanitizeString(u):void 0,N=(0,n.useCallback)(e=>{let r;if(null!==e&&"object"==typeof e&&"target"in e){const t=e.target;r="checkbox"===t.type?t.checked:t.value}else r=e;x.setFieldValue(t,r)},[x,t]),E=(0,n.useCallback)(()=>{x.setFieldTouched(t),x.validateField(t)},[x,t]),M=d,O=(0,n.cloneElement)(M,{value:k??"",onChange:N,onBlur:E,error:j??void 0,isInvalid:!!j,isRequired:p,disabled:y||M.props.disabled,name:t}),z="horizontal"===v,C="inline"===v,L=(0,l.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:(0,l.jsx)("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),P=q?(0,l.jsxs)("label",{className:r.tkx("text-sm font-medium font-sans",z?"min-w-[140px] pt-2.5":""),style:{color:h.text},children:[q,p&&(0,l.jsx)("span",{"aria-hidden":"true",className:r.tkx("ml-1"),style:{color:h.danger},children:"*"})]}):null,$=(0,l.jsxs)(l.Fragment,{children:[T&&!j&&(0,l.jsx)("span",{className:r.tkx("text-xs mt-0.5"),style:{color:h.textMuted},children:T}),j&&(0,l.jsxs)("span",{role:"alert",className:r.tkx("text-xs flex items-center gap-1 mt-0.5"),style:{color:h.danger,animation:"tkxFormErrorReveal 200ms ease-out"},children:[L,j]})]});return C?(0,l.jsxs)("div",{className:r.cx(r.tkx("flex flex-col gap-1"),m),style:f,children:[P,O,$]}):z?(0,l.jsxs)("div",{className:r.cx(r.tkx("flex flex-row gap-4 items-start"),m),style:f,children:[P,(0,l.jsxs)("div",{className:r.tkx("flex flex-col gap-1 flex-1 min-w-0"),children:[O,$]})]}):(0,l.jsxs)("div",{className:r.cx(r.tkx("flex flex-col gap-1"),m),style:f,children:[P,O,$]})}u.displayName="TkxForm",c.displayName="TkxFormField";var d=!1;!function(){if(d)return;if("undefined"==typeof document)return;d=!0;const e=document.createElement("style");e.setAttribute("data-tkx-form",""),e.textContent="\n @keyframes tkxFormErrorReveal {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n ",document.head.appendChild(e)}(),Object.defineProperty(exports,"TkxForm",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"TkxFormField",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"useTkxForm",{enumerable:!0,get:function(){return o}});