tekivex-ui 2.0.2 → 2.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.
Files changed (102) hide show
  1. package/dist/index.cjs +12 -12
  2. package/dist/index.d.ts +7 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2839 -2538
  5. package/dist/src/components/TkxAppBar.d.ts +12 -0
  6. package/dist/src/components/TkxAppBar.d.ts.map +1 -0
  7. package/dist/src/components/TkxAutocomplete.d.ts +25 -0
  8. package/dist/src/components/TkxAutocomplete.d.ts.map +1 -0
  9. package/dist/src/components/TkxBottomNav.d.ts +15 -0
  10. package/dist/src/components/TkxBottomNav.d.ts.map +1 -0
  11. package/dist/src/components/TkxBreadcrumb.d.ts +17 -0
  12. package/dist/src/components/TkxBreadcrumb.d.ts.map +1 -0
  13. package/dist/src/components/TkxCard.d.ts.map +1 -1
  14. package/dist/src/components/TkxConfigProvider.d.ts +100 -0
  15. package/dist/src/components/TkxConfigProvider.d.ts.map +1 -0
  16. package/dist/src/components/TkxDataGrid.d.ts +33 -0
  17. package/dist/src/components/TkxDataGrid.d.ts.map +1 -0
  18. package/dist/src/components/TkxEmpty.d.ts +870 -0
  19. package/dist/src/components/TkxEmpty.d.ts.map +1 -0
  20. package/dist/src/components/TkxForm.d.ts +54 -0
  21. package/dist/src/components/TkxForm.d.ts.map +1 -0
  22. package/dist/src/components/TkxLayout.d.ts +87 -0
  23. package/dist/src/components/TkxLayout.d.ts.map +1 -0
  24. package/dist/src/components/TkxMasonry.d.ts +12 -0
  25. package/dist/src/components/TkxMasonry.d.ts.map +1 -0
  26. package/dist/src/components/TkxModal.d.ts.map +1 -1
  27. package/dist/src/components/TkxPopover.d.ts +15 -0
  28. package/dist/src/components/TkxPopover.d.ts.map +1 -0
  29. package/dist/src/components/TkxRichTextDisplay.d.ts +19 -0
  30. package/dist/src/components/TkxRichTextDisplay.d.ts.map +1 -0
  31. package/dist/src/components/TkxSelect.d.ts.map +1 -1
  32. package/dist/src/components/TkxSlider.d.ts.map +1 -1
  33. package/dist/src/components/TkxSnackbar.d.ts +16 -0
  34. package/dist/src/components/TkxSnackbar.d.ts.map +1 -0
  35. package/dist/src/components/TkxSpeedDial.d.ts +18 -0
  36. package/dist/src/components/TkxSpeedDial.d.ts.map +1 -0
  37. package/dist/src/components/TkxSpin.d.ts +15 -0
  38. package/dist/src/components/TkxSpin.d.ts.map +1 -0
  39. package/dist/src/components/TkxStatistic.d.ts +1746 -0
  40. package/dist/src/components/TkxStatistic.d.ts.map +1 -0
  41. package/dist/src/components/TkxToolbar.d.ts +22 -0
  42. package/dist/src/components/TkxToolbar.d.ts.map +1 -0
  43. package/dist/src/components/TkxTooltip.d.ts.map +1 -1
  44. package/dist/src/components/TkxTransferList.d.ts +20 -0
  45. package/dist/src/components/TkxTransferList.d.ts.map +1 -0
  46. package/dist/src/components/TkxTreeView.d.ts +23 -0
  47. package/dist/src/components/TkxTreeView.d.ts.map +1 -0
  48. package/dist/src/components/TkxTypography.d.ts +2614 -0
  49. package/dist/src/components/TkxTypography.d.ts.map +1 -0
  50. package/dist/src/components/index.d.ts +20 -0
  51. package/dist/src/components/index.d.ts.map +1 -1
  52. package/dist/src/i18n/I18nProvider.d.ts +10 -0
  53. package/dist/src/i18n/I18nProvider.d.ts.map +1 -0
  54. package/dist/src/i18n/index.d.ts +50 -0
  55. package/dist/src/i18n/index.d.ts.map +1 -0
  56. package/dist/src/themes/index.d.ts +108 -0
  57. package/dist/src/themes/index.d.ts.map +1 -1
  58. package/package.json +2 -2
  59. package/src/components/TkxAppBar.tsx +260 -0
  60. package/src/components/TkxAutocomplete.tsx +453 -0
  61. package/src/components/TkxBottomNav.tsx +239 -0
  62. package/src/components/TkxBreadcrumb.tsx +322 -0
  63. package/src/components/TkxCard.tsx +3 -1
  64. package/src/components/TkxConfigProvider.tsx +458 -0
  65. package/src/components/TkxDataGrid.tsx +540 -0
  66. package/src/components/TkxEmpty.tsx +219 -0
  67. package/src/components/TkxForm.tsx +607 -0
  68. package/src/components/TkxLayout.tsx +647 -0
  69. package/src/components/TkxMasonry.tsx +176 -0
  70. package/src/components/TkxModal.tsx +4 -3
  71. package/src/components/TkxPopover.tsx +295 -0
  72. package/src/components/TkxRichTextDisplay.tsx +394 -0
  73. package/src/components/TkxSelect.tsx +2 -0
  74. package/src/components/TkxSlider.tsx +1 -0
  75. package/src/components/TkxSnackbar.tsx +314 -0
  76. package/src/components/TkxSpeedDial.tsx +395 -0
  77. package/src/components/TkxSpin.tsx +261 -0
  78. package/src/components/TkxStatistic.tsx +261 -0
  79. package/src/components/TkxToolbar.tsx +260 -0
  80. package/src/components/TkxTooltip.tsx +3 -2
  81. package/src/components/TkxTransferList.tsx +487 -0
  82. package/src/components/TkxTreeView.tsx +421 -0
  83. package/src/components/TkxTypography.tsx +263 -0
  84. package/src/components/index.ts +20 -0
  85. package/src/hooks/index.ts +1 -1
  86. package/src/i18n/I18nProvider.tsx +36 -0
  87. package/src/i18n/index.ts +237 -0
  88. package/src/themes/index.ts +149 -0
  89. package/dist/tests/TkxButton.test.d.ts +0 -2
  90. package/dist/tests/TkxButton.test.d.ts.map +0 -1
  91. package/dist/tests/a11y/components.test.d.ts +0 -2
  92. package/dist/tests/a11y/components.test.d.ts.map +0 -1
  93. package/dist/tests/quantum.test.d.ts +0 -2
  94. package/dist/tests/quantum.test.d.ts.map +0 -1
  95. package/dist/tests/security.test.d.ts +0 -2
  96. package/dist/tests/security.test.d.ts.map +0 -1
  97. package/dist/tests/setup.d.ts +0 -2
  98. package/dist/tests/setup.d.ts.map +0 -1
  99. package/dist/tests/tkx.test.d.ts +0 -2
  100. package/dist/tests/tkx.test.d.ts.map +0 -1
  101. package/dist/tests/wcag.test.d.ts +0 -2
  102. package/dist/tests/wcag.test.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TkxTypography.d.ts","sourceRoot":"","sources":["../../../src/components/TkxTypography.tsx"],"names":[],"mappings":"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"}
@@ -38,4 +38,24 @@ export * from './TkxNumberInput';
38
38
  export * from './TkxOTP';
39
39
  export * from './TkxCommand';
40
40
  export * from './TkxCarousel';
41
+ export * from './TkxBreadcrumb';
42
+ export * from './TkxPopover';
43
+ export * from './TkxAutocomplete';
44
+ export * from './TkxTreeView';
45
+ export * from './TkxToolbar';
46
+ export * from './TkxTransferList';
47
+ export * from './TkxSpeedDial';
48
+ export * from './TkxAppBar';
49
+ export * from './TkxBottomNav';
50
+ export * from './TkxSnackbar';
51
+ export * from './TkxDataGrid';
52
+ export * from './TkxMasonry';
53
+ export * from './TkxRichTextDisplay';
54
+ export * from './TkxForm';
55
+ export * from './TkxLayout';
56
+ export * from './TkxConfigProvider';
57
+ export * from './TkxTypography';
58
+ export * from './TkxSpin';
59
+ export * from './TkxEmpty';
60
+ export * from './TkxStatistic';
41
61
  //# 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"}
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"}
@@ -0,0 +1,10 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type LocaleCode, type LocaleStrings, type Direction } from './index';
3
+ export interface I18nProviderProps {
4
+ locale?: LocaleCode;
5
+ direction?: Direction;
6
+ strings?: Partial<LocaleStrings>;
7
+ children: ReactNode;
8
+ }
9
+ export declare function I18nProvider({ locale, direction, strings: overrides, children, }: I18nProviderProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=I18nProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"I18nProvider.d.ts","sourceRoot":"","sources":["../../../src/i18n/I18nProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAqC,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAEjH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAgB,EAChB,SAAS,EACT,OAAO,EAAE,SAAS,EAClB,QAAQ,GACT,EAAE,iBAAiB,2CAoBnB"}
@@ -0,0 +1,50 @@
1
+ export type Direction = 'ltr' | 'rtl';
2
+ export interface LocaleStrings {
3
+ close: string;
4
+ cancel: string;
5
+ confirm: string;
6
+ save: string;
7
+ delete: string;
8
+ search: string;
9
+ loading: string;
10
+ noResults: string;
11
+ required: string;
12
+ previous: string;
13
+ next: string;
14
+ pageOf: (page: number, total: number) => string;
15
+ selectPlaceholder: string;
16
+ clearSelection: string;
17
+ selectDate: string;
18
+ today: string;
19
+ dropFiles: string;
20
+ browse: string;
21
+ noData: string;
22
+ sortAscending: string;
23
+ sortDescending: string;
24
+ }
25
+ export declare const enUS: LocaleStrings;
26
+ export declare const esES: LocaleStrings;
27
+ export declare const arSA: LocaleStrings;
28
+ export declare const frFR: LocaleStrings;
29
+ export declare const deDE: LocaleStrings;
30
+ export declare const jaJP: LocaleStrings;
31
+ export declare const LOCALES: {
32
+ readonly 'en-US': LocaleStrings;
33
+ readonly 'es-ES': LocaleStrings;
34
+ readonly 'ar-SA': LocaleStrings;
35
+ readonly 'fr-FR': LocaleStrings;
36
+ readonly 'de-DE': LocaleStrings;
37
+ readonly 'ja-JP': LocaleStrings;
38
+ };
39
+ export type LocaleCode = keyof typeof LOCALES;
40
+ export declare function isRTL(locale: string): boolean;
41
+ export interface I18nContextValue {
42
+ locale: LocaleCode;
43
+ direction: Direction;
44
+ strings: LocaleStrings;
45
+ }
46
+ export declare const I18nContext: import("react").Context<I18nContextValue>;
47
+ export declare function useI18n(): I18nContextValue;
48
+ export declare function useLocale(): LocaleStrings;
49
+ export declare function useDirection(): Direction;
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/i18n/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAItC,MAAM,WAAW,aAAa;IAE5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IAGjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAGhD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IAGvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IAGd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IAGf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAID,eAAO,MAAM,IAAI,EAAE,aAsBlB,CAAC;AAIF,eAAO,MAAM,IAAI,EAAE,aAsBlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,aAsBlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,aAsBlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,aAsBlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,aAsBlB,CAAC;AAIF,eAAO,MAAM,OAAO;;;;;;;CAOV,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC;AAM9C,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7C;AAID,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,2CAItB,CAAC;AAEH,wBAAgB,OAAO,IAAI,gBAAgB,CAE1C;AAED,wBAAgB,SAAS,IAAI,aAAa,CAEzC;AAED,wBAAgB,YAAY,IAAI,SAAS,CAExC"}
@@ -23,4 +23,112 @@ export interface ThemeProviderProps {
23
23
  }
24
24
  export declare function ThemeProvider({ theme, children }: ThemeProviderProps): import("react").FunctionComponentElement<import("react").ProviderProps<ThemeTokens>>;
25
25
  export declare function useTheme(): ThemeTokens;
26
+ export interface ColorPalette {
27
+ 50: string;
28
+ 100: string;
29
+ 200: string;
30
+ 300: string;
31
+ 400: string;
32
+ 500: string;
33
+ 600: string;
34
+ 700: string;
35
+ 800: string;
36
+ 900: string;
37
+ }
38
+ export declare function generatePalette(hex: string): ColorPalette;
39
+ export declare const typography: {
40
+ readonly xs: {
41
+ readonly fontSize: "0.75rem";
42
+ readonly lineHeight: "1rem";
43
+ };
44
+ readonly sm: {
45
+ readonly fontSize: "0.875rem";
46
+ readonly lineHeight: "1.25rem";
47
+ };
48
+ readonly base: {
49
+ readonly fontSize: "1rem";
50
+ readonly lineHeight: "1.5rem";
51
+ };
52
+ readonly lg: {
53
+ readonly fontSize: "1.125rem";
54
+ readonly lineHeight: "1.75rem";
55
+ };
56
+ readonly xl: {
57
+ readonly fontSize: "1.25rem";
58
+ readonly lineHeight: "1.75rem";
59
+ };
60
+ readonly '2xl': {
61
+ readonly fontSize: "1.5rem";
62
+ readonly lineHeight: "2rem";
63
+ };
64
+ readonly '3xl': {
65
+ readonly fontSize: "1.875rem";
66
+ readonly lineHeight: "2.25rem";
67
+ };
68
+ readonly '4xl': {
69
+ readonly fontSize: "2.25rem";
70
+ readonly lineHeight: "2.5rem";
71
+ };
72
+ readonly '5xl': {
73
+ readonly fontSize: "3rem";
74
+ readonly lineHeight: "1.15";
75
+ };
76
+ };
77
+ export declare const spacing: {
78
+ readonly 0: "0px";
79
+ readonly 0.5: "2px";
80
+ readonly 1: "4px";
81
+ readonly 1.5: "6px";
82
+ readonly 2: "8px";
83
+ readonly 2.5: "10px";
84
+ readonly 3: "12px";
85
+ readonly 4: "16px";
86
+ readonly 5: "20px";
87
+ readonly 6: "24px";
88
+ readonly 8: "32px";
89
+ readonly 10: "40px";
90
+ readonly 12: "48px";
91
+ readonly 16: "64px";
92
+ readonly 20: "80px";
93
+ readonly 24: "96px";
94
+ };
95
+ export declare const breakpoints: {
96
+ readonly sm: 640;
97
+ readonly md: 768;
98
+ readonly lg: 1024;
99
+ readonly xl: 1280;
100
+ readonly '2xl': 1536;
101
+ };
102
+ export declare const shadows: {
103
+ readonly none: "none";
104
+ readonly xs: "0 1px 2px 0 rgba(0,0,0,0.05)";
105
+ readonly sm: "0 1px 3px 0 rgba(0,0,0,0.1), 0 1px 2px -1px rgba(0,0,0,0.1)";
106
+ readonly md: "0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)";
107
+ readonly lg: "0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)";
108
+ readonly xl: "0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1)";
109
+ readonly '2xl': "0 25px 50px -12px rgba(0,0,0,0.25)";
110
+ readonly inner: "inset 0 2px 4px 0 rgba(0,0,0,0.06)";
111
+ };
112
+ export declare const zIndex: {
113
+ readonly hide: -1;
114
+ readonly base: 0;
115
+ readonly dropdown: 1000;
116
+ readonly sticky: 1100;
117
+ readonly fixed: 1200;
118
+ readonly overlay: 1300;
119
+ readonly modal: 1400;
120
+ readonly popover: 1500;
121
+ readonly tooltip: 1600;
122
+ readonly toast: 1700;
123
+ readonly max: 9999;
124
+ };
125
+ export declare const radii: {
126
+ readonly none: "0";
127
+ readonly sm: "4px";
128
+ readonly md: "6px";
129
+ readonly lg: "8px";
130
+ readonly xl: "12px";
131
+ readonly '2xl': "16px";
132
+ readonly full: "9999px";
133
+ };
26
134
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/themes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,SAAS,EAAiB,MAAM,OAAO,CAAC;AAM5F,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,eAAO,MAAM,WAAW,EAAE,WAazB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,WAazB,CAAC;AAMF,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAuB5F;AAID,eAAO,MAAM,YAAY,sCAA0C,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAmB,EAAE,QAAQ,EAAE,EAAE,kBAAkB,wFAelF;AAED,wBAAgB,QAAQ,IAAI,WAAW,CAEtC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/themes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,SAAS,EAAiB,MAAM,OAAO,CAAC;AAM5F,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,eAAO,MAAM,WAAW,EAAE,WAazB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,WAazB,CAAC;AAMF,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAuB5F;AAID,eAAO,MAAM,YAAY,sCAA0C,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAmB,EAAE,QAAQ,EAAE,EAAE,kBAAkB,wFAelF;AAED,wBAAgB,QAAQ,IAAI,WAAW,CAEtC;AAoCD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAczD;AAID,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUb,CAAC;AAIX,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;CAiBV,CAAC;AAIX,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC;AAIX,eAAO,MAAM,OAAO;;;;;;;;;CASV,CAAC;AAIX,eAAO,MAAM,MAAM;;;;;;;;;;;;CAYT,CAAC;AAIX,eAAO,MAAM,KAAK;;;;;;;;CAQR,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tekivex-ui",
3
- "version": "2.0.2",
3
+ "version": "2.2.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",
@@ -18,7 +18,7 @@
18
18
  "require": "./dist/themes.cjs"
19
19
  }
20
20
  },
21
- "sideEffects": ["*.css"],
21
+ "sideEffects": ["*.css", "./src/styles/global.css"],
22
22
  "files": ["dist", "src"],
23
23
  "scripts": {
24
24
  "build": "vite build && tsc --emitDeclarationOnly",
@@ -0,0 +1,260 @@
1
+ import {
2
+ useState,
3
+ useEffect,
4
+ useCallback,
5
+ useRef,
6
+ useId,
7
+ type ReactNode,
8
+ type CSSProperties,
9
+ } from 'react';
10
+ import { useTheme } from '../themes';
11
+ import { sanitizeString } from '../engine/security';
12
+ import { useReducedMotion, useEscapeKey } from '../hooks';
13
+ import { tkx } from '../engine/tkx';
14
+
15
+ // ── Types ─────────────────────────────────────────────────────────────────────
16
+
17
+ export interface TkxAppBarProps {
18
+ title?: ReactNode;
19
+ logo?: ReactNode;
20
+ actions?: ReactNode;
21
+ navigation?: ReactNode;
22
+ position?: 'fixed' | 'sticky' | 'static';
23
+ variant?: 'default' | 'transparent' | 'elevated';
24
+ color?: 'primary' | 'surface';
25
+ }
26
+
27
+ // ── Constants ─────────────────────────────────────────────────────────────────
28
+
29
+ const MOBILE_BREAKPOINT = 768;
30
+ const BAR_HEIGHT = 56;
31
+
32
+ // ── Hamburger icon ──────────────────────────────────────────────────────────
33
+
34
+ function HamburgerIcon({ open }: { open: boolean }) {
35
+ return (
36
+ <svg
37
+ width="24"
38
+ height="24"
39
+ viewBox="0 0 24 24"
40
+ fill="none"
41
+ stroke="currentColor"
42
+ strokeWidth={2}
43
+ strokeLinecap="round"
44
+ aria-hidden="true"
45
+ >
46
+ {open ? (
47
+ <>
48
+ <line x1="18" y1="6" x2="6" y2="18" />
49
+ <line x1="6" y1="6" x2="18" y2="18" />
50
+ </>
51
+ ) : (
52
+ <>
53
+ <line x1="3" y1="6" x2="21" y2="6" />
54
+ <line x1="3" y1="12" x2="21" y2="12" />
55
+ <line x1="3" y1="18" x2="21" y2="18" />
56
+ </>
57
+ )}
58
+ </svg>
59
+ );
60
+ }
61
+
62
+ // ── Breakpoint hook ─────────────────────────────────────────────────────────
63
+
64
+ function useIsMobile(): boolean {
65
+ const [isMobile, setIsMobile] = useState(() => {
66
+ if (typeof window === 'undefined') return false;
67
+ return window.innerWidth < MOBILE_BREAKPOINT;
68
+ });
69
+
70
+ useEffect(() => {
71
+ if (typeof window === 'undefined') return;
72
+ const handler = () => setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
73
+ window.addEventListener('resize', handler);
74
+ return () => window.removeEventListener('resize', handler);
75
+ }, []);
76
+
77
+ return isMobile;
78
+ }
79
+
80
+ // ── Component ─────────────────────────────────────────────────────────────────
81
+
82
+ export function TkxAppBar({
83
+ title,
84
+ logo,
85
+ actions,
86
+ navigation,
87
+ position = 'sticky',
88
+ variant = 'default',
89
+ color = 'surface',
90
+ }: TkxAppBarProps) {
91
+ const theme = useTheme();
92
+ const reduced = useReducedMotion();
93
+ const isMobile = useIsMobile();
94
+ const [menuOpen, setMenuOpen] = useState(false);
95
+ const menuRef = useRef<HTMLDivElement>(null);
96
+ const navId = useId();
97
+
98
+ // Close mobile menu on escape
99
+ useEscapeKey(() => setMenuOpen(false), menuOpen);
100
+
101
+ // Close on resize to desktop
102
+ useEffect(() => {
103
+ if (!isMobile && menuOpen) setMenuOpen(false);
104
+ }, [isMobile, menuOpen]);
105
+
106
+ // Close on outside click
107
+ useEffect(() => {
108
+ if (!menuOpen) return;
109
+ const handler = (e: PointerEvent) => {
110
+ if (menuRef.current && !menuRef.current.contains(e.target as Node)) {
111
+ setMenuOpen(false);
112
+ }
113
+ };
114
+ document.addEventListener('pointerdown', handler);
115
+ return () => document.removeEventListener('pointerdown', handler);
116
+ }, [menuOpen]);
117
+
118
+ const toggleMenu = useCallback(() => {
119
+ setMenuOpen((prev) => !prev);
120
+ }, []);
121
+
122
+ // ── Color resolution ────────────────────────────────────────────────────
123
+
124
+ const bgColor = color === 'primary' ? theme.primary : theme.surface;
125
+ const textColor = color === 'primary' ? theme.bg : theme.text;
126
+
127
+ // ── Variant styles ──────────────────────────────────────────────────────
128
+
129
+ const variantStyles: Record<string, CSSProperties> = {
130
+ default: {
131
+ backgroundColor: bgColor,
132
+ borderBottom: `1px solid ${theme.border}`,
133
+ },
134
+ transparent: {
135
+ backgroundColor: 'transparent',
136
+ borderBottom: 'none',
137
+ },
138
+ elevated: {
139
+ backgroundColor: bgColor,
140
+ boxShadow: `0 2px 8px ${theme.bg}66`,
141
+ borderBottom: 'none',
142
+ },
143
+ };
144
+
145
+ // ── Position styles ─────────────────────────────────────────────────────
146
+
147
+ const positionStyles: Record<string, CSSProperties> = {
148
+ fixed: { position: 'fixed', top: 0, left: 0, right: 0, zIndex: 1100 },
149
+ sticky: { position: 'sticky', top: 0, zIndex: 1100 },
150
+ static: { position: 'static' },
151
+ };
152
+
153
+ const safeTitle = typeof title === 'string' ? sanitizeString(title) : title;
154
+
155
+ // ── Transition ──────────────────────────────────────────────────────────
156
+
157
+ const slideTransition = reduced
158
+ ? 'none'
159
+ : 'max-height 300ms cubic-bezier(0.4,0,0.2,1), opacity 300ms ease';
160
+
161
+ return (
162
+ <header
163
+ role="banner"
164
+ className={tkx('font-sans w-full')}
165
+ style={{
166
+ ...positionStyles[position],
167
+ ...variantStyles[variant],
168
+ color: textColor,
169
+ height: BAR_HEIGHT,
170
+ }}
171
+ >
172
+ <div
173
+ ref={menuRef}
174
+ className={tkx('flex items-center h-full px-4')}
175
+ style={{ maxWidth: 1440, margin: '0 auto' }}
176
+ >
177
+ {/* Logo area */}
178
+ {logo && (
179
+ <div
180
+ className={tkx('flex items-center shrink-0 mr-3')}
181
+ aria-hidden="true"
182
+ >
183
+ {logo}
184
+ </div>
185
+ )}
186
+
187
+ {/* Title */}
188
+ {safeTitle && (
189
+ <div
190
+ className={tkx('text-base font-semibold shrink-0 mr-4 leading-snug')}
191
+ style={{ color: textColor }}
192
+ >
193
+ {safeTitle}
194
+ </div>
195
+ )}
196
+
197
+ {/* Desktop navigation */}
198
+ {!isMobile && navigation && (
199
+ <nav
200
+ id={navId}
201
+ aria-label="Main navigation"
202
+ className={tkx('flex items-center flex-1 gap-1')}
203
+ >
204
+ {navigation}
205
+ </nav>
206
+ )}
207
+
208
+ {/* Spacer for mobile */}
209
+ {isMobile && <div className={tkx('flex-1')} />}
210
+
211
+ {/* Desktop actions */}
212
+ {actions && (
213
+ <div className={tkx('flex items-center gap-2 ml-auto shrink-0')}>
214
+ {actions}
215
+ </div>
216
+ )}
217
+
218
+ {/* Mobile hamburger */}
219
+ {isMobile && navigation && (
220
+ <button
221
+ onClick={toggleMenu}
222
+ aria-expanded={menuOpen}
223
+ aria-controls={navId}
224
+ aria-label={menuOpen ? 'Close navigation menu' : 'Open navigation menu'}
225
+ className={tkx(
226
+ 'bg-transparent border-none cursor-pointer p-2 ml-2 rounded flex items-center justify-center',
227
+ 'focus-visible:focus-ring',
228
+ )}
229
+ style={{ color: textColor }}
230
+ >
231
+ <HamburgerIcon open={menuOpen} />
232
+ </button>
233
+ )}
234
+ </div>
235
+
236
+ {/* Mobile dropdown menu */}
237
+ {isMobile && navigation && (
238
+ <nav
239
+ id={navId}
240
+ aria-label="Main navigation"
241
+ style={{
242
+ maxHeight: menuOpen ? 400 : 0,
243
+ opacity: menuOpen ? 1 : 0,
244
+ overflow: 'hidden',
245
+ transition: slideTransition,
246
+ backgroundColor: theme.surface,
247
+ borderBottom: menuOpen ? `1px solid ${theme.border}` : 'none',
248
+ }}
249
+ >
250
+ <div
251
+ className={tkx('flex flex-col gap-1 px-4 py-3')}
252
+ role="menu"
253
+ >
254
+ {navigation}
255
+ </div>
256
+ </nav>
257
+ )}
258
+ </header>
259
+ );
260
+ }