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.
- package/dist/index.cjs +75 -14
- package/dist/index.d.ts +32 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10957 -4936
- package/dist/src/components/TkxAffix.d.ts +10 -0
- package/dist/src/components/TkxAffix.d.ts.map +1 -0
- package/dist/src/components/TkxAnchor.d.ts +14 -0
- package/dist/src/components/TkxAnchor.d.ts.map +1 -0
- package/dist/src/components/TkxCascader.d.ts +16 -0
- package/dist/src/components/TkxCascader.d.ts.map +1 -0
- package/dist/src/components/TkxDataGrid.d.ts +5 -1
- package/dist/src/components/TkxDataGrid.d.ts.map +1 -1
- package/dist/src/components/TkxList.d.ts +24 -0
- package/dist/src/components/TkxList.d.ts.map +1 -0
- package/dist/src/components/TkxMentions.d.ts +15 -0
- package/dist/src/components/TkxMentions.d.ts.map +1 -0
- package/dist/src/components/TkxQRCode.d.ts +11 -0
- package/dist/src/components/TkxQRCode.d.ts.map +1 -0
- package/dist/src/components/TkxResult.d.ts +11 -0
- package/dist/src/components/TkxResult.d.ts.map +1 -0
- package/dist/src/components/TkxSegmented.d.ts +16 -0
- package/dist/src/components/TkxSegmented.d.ts.map +1 -0
- package/dist/src/components/TkxSelect.d.ts +5 -1
- package/dist/src/components/TkxSelect.d.ts.map +1 -1
- package/dist/src/components/TkxTour.d.ts +15 -0
- package/dist/src/components/TkxTour.d.ts.map +1 -0
- package/dist/src/components/TkxWatermark.d.ts +12 -0
- package/dist/src/components/TkxWatermark.d.ts.map +1 -0
- package/dist/src/components/index.d.ts +10 -0
- package/dist/src/components/index.d.ts.map +1 -1
- package/dist/src/engine/tkx.d.ts +38 -0
- package/dist/src/engine/tkx.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/TkxAffix.tsx +138 -0
- package/src/components/TkxAnchor.tsx +193 -0
- package/src/components/TkxCascader.tsx +276 -0
- package/src/components/TkxDataGrid.tsx +65 -2
- package/src/components/TkxList.tsx +242 -0
- package/src/components/TkxMentions.tsx +210 -0
- package/src/components/TkxQRCode.tsx +174 -0
- package/src/components/TkxResult.tsx +128 -0
- package/src/components/TkxSegmented.tsx +169 -0
- package/src/components/TkxSelect.tsx +209 -6
- package/src/components/TkxTour.tsx +239 -0
- package/src/components/TkxWatermark.tsx +143 -0
- package/src/components/index.ts +10 -0
- 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,
|
|
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,
|
|
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"}
|
package/dist/src/engine/tkx.d.ts
CHANGED
|
@@ -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":"
|
|
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
|
@@ -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
|
+
}
|