tekivex-ui 2.2.0 → 2.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.
Files changed (47) hide show
  1. package/dist/index.cjs +75 -14
  2. package/dist/index.d.ts +32 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +10957 -4936
  5. package/dist/src/components/TkxAffix.d.ts +10 -0
  6. package/dist/src/components/TkxAffix.d.ts.map +1 -0
  7. package/dist/src/components/TkxAnchor.d.ts +14 -0
  8. package/dist/src/components/TkxAnchor.d.ts.map +1 -0
  9. package/dist/src/components/TkxCascader.d.ts +16 -0
  10. package/dist/src/components/TkxCascader.d.ts.map +1 -0
  11. package/dist/src/components/TkxDataGrid.d.ts +5 -1
  12. package/dist/src/components/TkxDataGrid.d.ts.map +1 -1
  13. package/dist/src/components/TkxList.d.ts +24 -0
  14. package/dist/src/components/TkxList.d.ts.map +1 -0
  15. package/dist/src/components/TkxMentions.d.ts +15 -0
  16. package/dist/src/components/TkxMentions.d.ts.map +1 -0
  17. package/dist/src/components/TkxQRCode.d.ts +11 -0
  18. package/dist/src/components/TkxQRCode.d.ts.map +1 -0
  19. package/dist/src/components/TkxResult.d.ts +11 -0
  20. package/dist/src/components/TkxResult.d.ts.map +1 -0
  21. package/dist/src/components/TkxSegmented.d.ts +16 -0
  22. package/dist/src/components/TkxSegmented.d.ts.map +1 -0
  23. package/dist/src/components/TkxSelect.d.ts +5 -1
  24. package/dist/src/components/TkxSelect.d.ts.map +1 -1
  25. package/dist/src/components/TkxTour.d.ts +15 -0
  26. package/dist/src/components/TkxTour.d.ts.map +1 -0
  27. package/dist/src/components/TkxWatermark.d.ts +12 -0
  28. package/dist/src/components/TkxWatermark.d.ts.map +1 -0
  29. package/dist/src/components/index.d.ts +10 -0
  30. package/dist/src/components/index.d.ts.map +1 -1
  31. package/dist/src/engine/tkx.d.ts +38 -0
  32. package/dist/src/engine/tkx.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/src/components/TkxAffix.tsx +138 -0
  35. package/src/components/TkxAnchor.tsx +193 -0
  36. package/src/components/TkxCascader.tsx +276 -0
  37. package/src/components/TkxDataGrid.tsx +65 -2
  38. package/src/components/TkxList.tsx +242 -0
  39. package/src/components/TkxMentions.tsx +210 -0
  40. package/src/components/TkxQRCode.tsx +174 -0
  41. package/src/components/TkxResult.tsx +128 -0
  42. package/src/components/TkxSegmented.tsx +169 -0
  43. package/src/components/TkxSelect.tsx +209 -6
  44. package/src/components/TkxTour.tsx +239 -0
  45. package/src/components/TkxWatermark.tsx +143 -0
  46. package/src/components/index.ts +10 -0
  47. package/src/engine/tkx.ts +62 -0
@@ -0,0 +1,10 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface TkxAffixProps {
3
+ children: ReactNode;
4
+ offsetTop?: number;
5
+ offsetBottom?: number;
6
+ onChange?: (affixed: boolean) => void;
7
+ target?: () => HTMLElement | Window;
8
+ }
9
+ export declare function TkxAffix({ children, offsetTop, offsetBottom, onChange, target, }: TkxAffixProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=TkxAffix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxAffix.d.ts","sourceRoot":"","sources":["../../../src/components/TkxAffix.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqD,MAAM,OAAO,CAAC;AAQ1F,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC;CACrC;AAyBD,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,MAAM,GACP,EAAE,aAAa,2CA4Ff"}
@@ -0,0 +1,14 @@
1
+ export interface AnchorLink {
2
+ key: string;
3
+ href: string;
4
+ title: string;
5
+ children?: AnchorLink[];
6
+ }
7
+ export interface TkxAnchorProps {
8
+ items: AnchorLink[];
9
+ offsetTop?: number;
10
+ getCurrentAnchor?: (activeLink: string) => string;
11
+ onChange?: (currentLink: string) => void;
12
+ }
13
+ export declare function TkxAnchor({ items, offsetTop, getCurrentAnchor, onChange, }: TkxAnchorProps): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=TkxAnchor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxAnchor.d.ts","sourceRoot":"","sources":["../../../src/components/TkxAnchor.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AA+ED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAa,EACb,gBAAgB,EAChB,QAAQ,GACT,EAAE,cAAc,2CAwFhB"}
@@ -0,0 +1,16 @@
1
+ export interface CascaderOption {
2
+ value: string;
3
+ label: string;
4
+ children?: CascaderOption[];
5
+ disabled?: boolean;
6
+ }
7
+ export interface TkxCascaderProps {
8
+ options: CascaderOption[];
9
+ value?: string[];
10
+ onChange?: (value: string[], selectedOptions: CascaderOption[]) => void;
11
+ placeholder?: string;
12
+ label?: string;
13
+ multiple?: boolean;
14
+ }
15
+ export declare function TkxCascader({ options, value, onChange, placeholder, label, multiple, }: TkxCascaderProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=TkxCascader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxCascader.d.ts","sourceRoot":"","sources":["../../../src/components/TkxCascader.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA8CD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAU,EACV,QAAQ,EACR,WAAyB,EACzB,KAAK,EACL,QAAgB,GACjB,EAAE,gBAAgB,2CAuMlB"}
@@ -28,6 +28,10 @@ export interface TkxDataGridProps<T = any> {
28
28
  compact?: boolean;
29
29
  maxHeight?: number | string;
30
30
  onRowClick?: (row: T) => void;
31
+ /** Enable virtual scrolling. Defaults to auto (enabled when data has 50+ rows and maxHeight is set). */
32
+ virtualScroll?: boolean;
33
+ /** Row height in pixels for virtual scrolling calculations. Default: 40 */
34
+ rowHeight?: number;
31
35
  }
32
- export declare function TkxDataGrid<T = any>({ columns, data, rowKey, selectable, selectedRows, onSelectionChange, sortable, onSort, loading, emptyMessage, stickyHeader, striped, bordered, compact, maxHeight, onRowClick, }: TkxDataGridProps<T>): import("react/jsx-runtime").JSX.Element;
36
+ export declare function TkxDataGrid<T = any>({ columns, data, rowKey, selectable, selectedRows, onSelectionChange, sortable, onSort, loading, emptyMessage, stickyHeader, striped, bordered, compact, maxHeight, onRowClick, virtualScroll, rowHeight, }: TkxDataGridProps<T>): import("react/jsx-runtime").JSX.Element;
33
37
  //# sourceMappingURL=TkxDataGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TkxDataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/TkxDataGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AASf,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC/C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,GAAG;IACvC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;CAC/B;AA6FD,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,EACnC,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,YAAiB,EACjB,iBAAiB,EACjB,QAAgB,EAChB,MAAM,EACN,OAAe,EACf,YAAmC,EACnC,YAAoB,EACpB,OAAe,EACf,QAAgB,EAChB,OAAe,EACf,SAAS,EACT,UAAU,GACX,EAAE,gBAAgB,CAAC,CAAC,CAAC,2CA6XrB"}
1
+ {"version":3,"file":"TkxDataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/TkxDataGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AASf,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC/C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,GAAG;IACvC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,wGAAwG;IACxG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6FD,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,EACnC,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,YAAiB,EACjB,iBAAiB,EACjB,QAAgB,EAChB,MAAM,EACN,OAAe,EACf,YAAmC,EACnC,YAAoB,EACpB,OAAe,EACf,QAAgB,EAChB,OAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAc,GACf,EAAE,gBAAgB,CAAC,CAAC,CAAC,2CAqbrB"}
@@ -0,0 +1,24 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface ListItem {
3
+ key: string;
4
+ title: string;
5
+ description?: string;
6
+ avatar?: ReactNode;
7
+ actions?: ReactNode;
8
+ extra?: ReactNode;
9
+ }
10
+ export interface TkxListProps {
11
+ items: ListItem[];
12
+ header?: ReactNode;
13
+ footer?: ReactNode;
14
+ bordered?: boolean;
15
+ size?: 'sm' | 'md' | 'lg';
16
+ loading?: boolean;
17
+ emptyText?: string;
18
+ grid?: {
19
+ column?: number;
20
+ gutter?: number;
21
+ };
22
+ }
23
+ export declare function TkxList({ items, header, footer, bordered, size, loading, emptyText, grid, }: TkxListProps): import("react/jsx-runtime").JSX.Element;
24
+ //# sourceMappingURL=TkxList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxList.d.ts","sourceRoot":"","sources":["../../../src/components/TkxList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAmDD,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAe,EACf,IAAW,EACX,OAAe,EACf,SAAqB,EACrB,IAAI,GACL,EAAE,YAAY,2CA2Jd"}
@@ -0,0 +1,15 @@
1
+ export interface MentionOption {
2
+ value: string;
3
+ label: string;
4
+ avatar?: string;
5
+ }
6
+ export interface TkxMentionsProps {
7
+ options: MentionOption[];
8
+ value?: string;
9
+ onChange?: (value: string) => void;
10
+ trigger?: string;
11
+ placeholder?: string;
12
+ label?: string;
13
+ }
14
+ export declare function TkxMentions({ options, value, onChange, trigger, placeholder, label, }: TkxMentionsProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=TkxMentions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxMentions.d.ts","sourceRoot":"","sources":["../../../src/components/TkxMentions.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAU,EACV,QAAQ,EACR,OAAa,EACb,WAAW,EACX,KAAK,GACN,EAAE,gBAAgB,2CAiLlB"}
@@ -0,0 +1,11 @@
1
+ export interface TkxQRCodeProps {
2
+ value: string;
3
+ size?: number;
4
+ color?: string;
5
+ bgColor?: string;
6
+ errorLevel?: 'L' | 'M' | 'Q' | 'H';
7
+ icon?: string;
8
+ bordered?: boolean;
9
+ }
10
+ export declare function TkxQRCode({ value, size, color, bgColor, errorLevel, icon, bordered, }: TkxQRCodeProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=TkxQRCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxQRCode.d.ts","sourceRoot":"","sources":["../../../src/components/TkxQRCode.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAwED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAU,EACV,KAAK,EACL,OAAO,EACP,UAAgB,EAChB,IAAI,EACJ,QAAe,GAChB,EAAE,cAAc,2CA6EhB"}
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from 'react';
2
+ export type ResultStatus = 'success' | 'error' | 'warning' | 'info' | '404' | '403' | '500';
3
+ export interface TkxResultProps {
4
+ status: ResultStatus;
5
+ title: string;
6
+ subTitle?: string;
7
+ icon?: ReactNode;
8
+ extra?: ReactNode;
9
+ }
10
+ export declare function TkxResult({ status, title, subTitle, icon, extra }: TkxResultProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=TkxResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxResult.d.ts","sourceRoot":"","sources":["../../../src/components/TkxResult.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAoED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,2CA2CjF"}
@@ -0,0 +1,16 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface SegmentedOption {
3
+ value: string;
4
+ label: string;
5
+ icon?: ReactNode;
6
+ disabled?: boolean;
7
+ }
8
+ export interface TkxSegmentedProps {
9
+ options: SegmentedOption[];
10
+ value?: string;
11
+ onChange?: (value: string) => void;
12
+ size?: 'sm' | 'md' | 'lg';
13
+ block?: boolean;
14
+ }
15
+ export declare function TkxSegmented({ options, value, onChange, size, block, }: TkxSegmentedProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=TkxSegmented.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxSegmented.d.ts","sourceRoot":"","sources":["../../../src/components/TkxSegmented.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA4C,MAAM,OAAO,CAAC;AAQjF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAYD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,IAAW,EACX,KAAa,GACd,EAAE,iBAAiB,2CAiInB"}
@@ -26,11 +26,15 @@ export interface TkxSelectProps {
26
26
  onChange?: (value: string | string[]) => void;
27
27
  renderOption?: (option: SelectOption, isSelected: boolean) => ReactNode;
28
28
  maxMenuHeight?: number;
29
+ /** Enable virtual scrolling for the dropdown. Defaults to auto (enabled when 100+ options). */
30
+ virtualScroll?: boolean;
31
+ /** Fixed option height in pixels for virtual scroll calculations. Default: 36 */
32
+ optionHeight?: number;
29
33
  id?: string;
30
34
  className?: string;
31
35
  style?: CSSProperties;
32
36
  }
33
- export declare function TkxSelect({ options, value: valueProp, defaultValue, placeholder, size, isDisabled, isInvalid, label, hint, errorMessage, multiple, searchable, clearable, isLoading, onChange, renderOption, maxMenuHeight, id: idProp, className, style, }: TkxSelectProps): import("react/jsx-runtime").JSX.Element;
37
+ export declare function TkxSelect({ options, value: valueProp, defaultValue, placeholder, size, isDisabled, isInvalid, label, hint, errorMessage, multiple, searchable, clearable, isLoading, onChange, renderOption, maxMenuHeight, virtualScroll, optionHeight, id: idProp, className, style, }: TkxSelectProps): import("react/jsx-runtime").JSX.Element;
34
38
  export declare namespace TkxSelect {
35
39
  var displayName: string;
36
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TkxSelect.d.ts","sourceRoot":"","sources":["../../../src/components/TkxSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACd,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAQf,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,KAAK,SAAS,CAAC;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AA0ED,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,WAAiC,EACjC,IAAW,EACX,UAAkB,EAClB,SAAiB,EACjB,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,QAAgB,EAChB,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,aAAmB,EACnB,EAAE,EAAE,MAAM,EACV,SAAS,EACT,KAAK,GACN,EAAE,cAAc,2CA0wBhB;yBA/xBe,SAAS"}
1
+ {"version":3,"file":"TkxSelect.d.ts","sourceRoot":"","sources":["../../../src/components/TkxSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACd,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAQf,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,KAAK,SAAS,CAAC;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+FAA+F;IAC/F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AA0ED,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,WAAiC,EACjC,IAAW,EACX,UAAkB,EAClB,SAAiB,EACjB,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,QAAgB,EAChB,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,aAAmB,EACnB,aAAa,EACb,YAAiB,EACjB,EAAE,EAAE,MAAM,EACV,SAAS,EACT,KAAK,GACN,EAAE,cAAc,2CA+8BhB;yBAt+Be,SAAS"}
@@ -0,0 +1,15 @@
1
+ export interface TourStep {
2
+ target: string;
3
+ title: string;
4
+ description: string;
5
+ placement?: 'top' | 'bottom' | 'left' | 'right';
6
+ }
7
+ export interface TkxTourProps {
8
+ steps: TourStep[];
9
+ isOpen?: boolean;
10
+ onClose?: () => void;
11
+ current?: number;
12
+ onChange?: (step: number) => void;
13
+ }
14
+ export declare function TkxTour({ steps, isOpen, onClose, current: controlledCurrent, onChange, }: TkxTourProps): import("react").ReactPortal | null;
15
+ //# sourceMappingURL=TkxTour.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxTour.d.ts","sourceRoot":"","sources":["../../../src/components/TkxTour.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAqCD,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,MAAc,EACd,OAAO,EACP,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,GACT,EAAE,YAAY,sCA6Kd"}
@@ -0,0 +1,12 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface TkxWatermarkProps {
3
+ text: string | string[];
4
+ children: ReactNode;
5
+ rotate?: number;
6
+ gap?: [number, number];
7
+ fontSize?: number;
8
+ color?: string;
9
+ zIndex?: number;
10
+ }
11
+ export declare function TkxWatermark({ text, children, rotate, gap, fontSize, color, zIndex, }: TkxWatermarkProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=TkxWatermark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxWatermark.d.ts","sourceRoot":"","sources":["../../../src/components/TkxWatermark.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqD,MAAM,OAAO,CAAC;AAQ1F,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkDD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,QAAQ,EACR,MAAY,EACZ,GAAgB,EAChB,QAAa,EACb,KAAK,EACL,MAAW,GACZ,EAAE,iBAAiB,2CAoEnB"}
@@ -58,4 +58,14 @@ export * from './TkxTypography';
58
58
  export * from './TkxSpin';
59
59
  export * from './TkxEmpty';
60
60
  export * from './TkxStatistic';
61
+ export * from './TkxSegmented';
62
+ export * from './TkxMentions';
63
+ export * from './TkxQRCode';
64
+ export * from './TkxResult';
65
+ export * from './TkxTour';
66
+ export * from './TkxWatermark';
67
+ export * from './TkxAffix';
68
+ export * from './TkxAnchor';
69
+ export * from './TkxCascader';
70
+ export * from './TkxList';
61
71
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC"}
@@ -26,4 +26,42 @@ export declare function resetAtomicCSS(): void;
26
26
  * Use this to combine a tkx() result with a consumer-provided className prop.
27
27
  */
28
28
  export declare function cx(...classes: (string | false | null | undefined)[]): string;
29
+ /**
30
+ * TKX Plugin API — extend the utility engine with custom utilities.
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * import { tkxPlugin, tkx } from '@tekivex/ui';
35
+ *
36
+ * // Register custom utilities
37
+ * tkxPlugin({
38
+ * name: 'brand',
39
+ * utilities: {
40
+ * 'brand-gradient': { background: 'linear-gradient(135deg, #667eea, #764ba2)' },
41
+ * 'brand-text': { color: '#667eea', fontWeight: '700' },
42
+ * 'card-shadow': { boxShadow: '0 8px 32px rgba(102, 126, 234, 0.15)' },
43
+ * 'glass': {
44
+ * background: 'rgba(255, 255, 255, 0.05)',
45
+ * backdropFilter: 'blur(12px)',
46
+ * border: '1px solid rgba(255, 255, 255, 0.1)',
47
+ * },
48
+ * },
49
+ * });
50
+ *
51
+ * // Use them like any built-in utility
52
+ * const cls = tkx('brand-gradient p-6 rounded-xl card-shadow');
53
+ * ```
54
+ */
55
+ export interface TkxPluginDef {
56
+ name: string;
57
+ utilities: Record<string, Record<string, string>>;
58
+ }
59
+ export declare function tkxPlugin(plugin: TkxPluginDef): void;
60
+ export declare function tkxRemovePlugin(name: string): void;
61
+ export declare function tkxListPlugins(): string[];
62
+ /**
63
+ * Resolve a plugin utility to CSS properties.
64
+ * Called internally by the TKX engine — but also exported for inspection.
65
+ */
66
+ export declare function resolvePluginUtility(name: string): Record<string, string> | null;
29
67
  //# sourceMappingURL=tkx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tkx.d.ts","sourceRoot":"","sources":["../../../src/engine/tkx.ts"],"names":[],"mappings":"AA2tBA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAmBhG;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAmFjD;AAED,qCAAqC;AACrC,eAAO,MAAM,EAAE,YAAM,CAAC;AAItB,qEAAqE;AACrE,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAGD;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,CAE5E"}
1
+ {"version":3,"file":"tkx.d.ts","sourceRoot":"","sources":["../../../src/engine/tkx.ts"],"names":[],"mappings":"AA+tBA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAmBhG;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAmFjD;AAED,qCAAqC;AACrC,eAAO,MAAM,EAAE,YAAM,CAAC;AAItB,qEAAqE;AACrE,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAGD;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,CAE5E;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAID,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAEpD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAKhF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tekivex-ui",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "Quantum-Class Component Framework — WCAG 2.1 AAA, WAI-ARIA 1.2, Zero-Trust Security",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -0,0 +1,138 @@
1
+ import { type ReactNode, useState, useRef, useEffect, useCallback, useMemo } from 'react';
2
+ import { useTheme } from '../themes';
3
+ import { sanitizeString } from '../engine/security';
4
+ import { useReducedMotion } from '../hooks';
5
+ import { tkx } from '../engine/tkx';
6
+
7
+ // ── Types ────────────────────────────────────────────────────────────────────
8
+
9
+ export interface TkxAffixProps {
10
+ children: ReactNode;
11
+ offsetTop?: number;
12
+ offsetBottom?: number;
13
+ onChange?: (affixed: boolean) => void;
14
+ target?: () => HTMLElement | Window;
15
+ }
16
+
17
+ // ── Helpers ──────────────────────────────────────────────────────────────────
18
+
19
+ function getScrollTarget(target?: () => HTMLElement | Window): HTMLElement | Window {
20
+ if (target) {
21
+ try {
22
+ return target();
23
+ } catch {
24
+ return window;
25
+ }
26
+ }
27
+ return window;
28
+ }
29
+
30
+ function getTargetRect(el: HTMLElement | Window): { top: number; bottom: number } {
31
+ if (el instanceof Window) {
32
+ return { top: 0, bottom: el.innerHeight };
33
+ }
34
+ const rect = el.getBoundingClientRect();
35
+ return { top: rect.top, bottom: rect.bottom };
36
+ }
37
+
38
+ // ── Component ────────────────────────────────────────────────────────────────
39
+
40
+ export function TkxAffix({
41
+ children,
42
+ offsetTop,
43
+ offsetBottom,
44
+ onChange,
45
+ target,
46
+ }: TkxAffixProps) {
47
+ const theme = useTheme();
48
+ const reducedMotion = useReducedMotion();
49
+ const placeholderRef = useRef<HTMLDivElement>(null);
50
+ const fixedRef = useRef<HTMLDivElement>(null);
51
+ const [affixed, setAffixed] = useState(false);
52
+ const [placeholderSize, setPlaceholderSize] = useState({ width: 0, height: 0 });
53
+ const prevAffixed = useRef(false);
54
+
55
+ // Sanitize any debug info strings for security
56
+ const _labelSafe = useMemo(() => sanitizeString('Sticky content'), []);
57
+
58
+ const checkPosition = useCallback(() => {
59
+ const el = placeholderRef.current;
60
+ if (!el) return;
61
+
62
+ const rect = el.getBoundingClientRect();
63
+ const targetRect = getTargetRect(getScrollTarget(target));
64
+ let shouldAffix = false;
65
+
66
+ if (offsetTop !== undefined) {
67
+ // Affix when element scrolls past the top offset
68
+ shouldAffix = rect.top - targetRect.top <= offsetTop;
69
+ } else if (offsetBottom !== undefined) {
70
+ // Affix when element scrolls past the bottom offset
71
+ shouldAffix = targetRect.bottom - rect.bottom <= offsetBottom;
72
+ }
73
+
74
+ if (shouldAffix !== prevAffixed.current) {
75
+ prevAffixed.current = shouldAffix;
76
+ setAffixed(shouldAffix);
77
+ setPlaceholderSize({
78
+ width: rect.width,
79
+ height: rect.height,
80
+ });
81
+ onChange?.(shouldAffix);
82
+ }
83
+ }, [offsetTop, offsetBottom, onChange, target]);
84
+
85
+ // Attach scroll and resize listeners
86
+ useEffect(() => {
87
+ const scrollTarget = getScrollTarget(target);
88
+
89
+ checkPosition();
90
+ scrollTarget.addEventListener('scroll', checkPosition, { passive: true });
91
+ window.addEventListener('resize', checkPosition);
92
+
93
+ return () => {
94
+ scrollTarget.removeEventListener('scroll', checkPosition);
95
+ window.removeEventListener('resize', checkPosition);
96
+ };
97
+ }, [checkPosition, target]);
98
+
99
+ // Build the fixed positioning styles
100
+ const fixedStyle: React.CSSProperties = affixed
101
+ ? {
102
+ position: 'fixed',
103
+ zIndex: 100,
104
+ ...(offsetTop !== undefined ? { top: offsetTop } : {}),
105
+ ...(offsetBottom !== undefined ? { bottom: offsetBottom } : {}),
106
+ width: placeholderSize.width || undefined,
107
+ transition: reducedMotion ? 'none' : 'box-shadow 0.2s ease',
108
+ boxShadow: `0 2px 8px ${theme.border}`,
109
+ }
110
+ : {};
111
+
112
+ // Placeholder keeps the document flow intact when element is fixed
113
+ const placeholderStyle: React.CSSProperties = affixed
114
+ ? {
115
+ height: placeholderSize.height,
116
+ width: placeholderSize.width,
117
+ }
118
+ : {};
119
+
120
+ return (
121
+ <>
122
+ <div
123
+ ref={placeholderRef}
124
+ aria-hidden={affixed}
125
+ style={placeholderStyle}
126
+ />
127
+ <div
128
+ ref={fixedRef}
129
+ role="region"
130
+ aria-label={_labelSafe}
131
+ className={tkx(affixed ? 'tkx-affixed' : '')}
132
+ style={fixedStyle}
133
+ >
134
+ {children}
135
+ </div>
136
+ </>
137
+ );
138
+ }