tonkean-tcltext 1.0.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 (67) hide show
  1. package/README.md +114 -0
  2. package/dist/components/ButtonToken.d.ts +17 -0
  3. package/dist/components/ButtonToken.d.ts.map +1 -0
  4. package/dist/components/ButtonToken.js +234 -0
  5. package/dist/components/ButtonToken.js.map +1 -0
  6. package/dist/components/ColorSelectToken.d.ts +17 -0
  7. package/dist/components/ColorSelectToken.d.ts.map +1 -0
  8. package/dist/components/ColorSelectToken.js +499 -0
  9. package/dist/components/ColorSelectToken.js.map +1 -0
  10. package/dist/components/ColorSwatch.d.ts +9 -0
  11. package/dist/components/ColorSwatch.d.ts.map +1 -0
  12. package/dist/components/ColorSwatch.js +12 -0
  13. package/dist/components/ColorSwatch.js.map +1 -0
  14. package/dist/components/IconItem.d.ts +17 -0
  15. package/dist/components/IconItem.d.ts.map +1 -0
  16. package/dist/components/IconItem.js +64 -0
  17. package/dist/components/IconItem.js.map +1 -0
  18. package/dist/components/InputToken.d.ts +15 -0
  19. package/dist/components/InputToken.d.ts.map +1 -0
  20. package/dist/components/InputToken.js +203 -0
  21. package/dist/components/InputToken.js.map +1 -0
  22. package/dist/components/MultiSelectToken.d.ts +18 -0
  23. package/dist/components/MultiSelectToken.d.ts.map +1 -0
  24. package/dist/components/MultiSelectToken.js +568 -0
  25. package/dist/components/MultiSelectToken.js.map +1 -0
  26. package/dist/components/NumericInputToken.d.ts +16 -0
  27. package/dist/components/NumericInputToken.d.ts.map +1 -0
  28. package/dist/components/NumericInputToken.js +322 -0
  29. package/dist/components/NumericInputToken.js.map +1 -0
  30. package/dist/components/SelectToken.d.ts +18 -0
  31. package/dist/components/SelectToken.d.ts.map +1 -0
  32. package/dist/components/SelectToken.js +357 -0
  33. package/dist/components/SelectToken.js.map +1 -0
  34. package/dist/components/TCLText.d.ts +28 -0
  35. package/dist/components/TCLText.d.ts.map +1 -0
  36. package/dist/components/TCLText.js +89 -0
  37. package/dist/components/TCLText.js.map +1 -0
  38. package/dist/components/hooks/useTooltipOnTruncation.d.ts +20 -0
  39. package/dist/components/hooks/useTooltipOnTruncation.d.ts.map +1 -0
  40. package/dist/components/hooks/useTooltipOnTruncation.js +62 -0
  41. package/dist/components/hooks/useTooltipOnTruncation.js.map +1 -0
  42. package/dist/components/iconLibrary.d.ts +3 -0
  43. package/dist/components/iconLibrary.d.ts.map +1 -0
  44. package/dist/components/iconLibrary.js +58 -0
  45. package/dist/components/iconLibrary.js.map +1 -0
  46. package/dist/components/iconLoader.d.ts +5 -0
  47. package/dist/components/iconLoader.d.ts.map +1 -0
  48. package/dist/components/iconLoader.js +113 -0
  49. package/dist/components/iconLoader.js.map +1 -0
  50. package/dist/index.d.ts +5 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +7 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/tokens/buttons.json +198 -0
  55. package/dist/tokens/colors.json +93 -0
  56. package/dist/tokens/index.d.ts +7 -0
  57. package/dist/tokens/index.d.ts.map +1 -0
  58. package/dist/tokens/index.js +6 -0
  59. package/dist/tokens/index.js.map +1 -0
  60. package/dist/tokens/inputs.json +304 -0
  61. package/dist/tokens/types.d.ts +9 -0
  62. package/dist/tokens/types.d.ts.map +1 -0
  63. package/dist/tokens/types.js +2 -0
  64. package/dist/tokens/types.js.map +1 -0
  65. package/dist/tokens/typography.json +37 -0
  66. package/package.json +59 -0
  67. package/src/styles/tokens.css +274 -0
@@ -0,0 +1,357 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { useState, useRef, useEffect } from 'react';
3
+ import { inputs, colors, typography } from '../tokens';
4
+ import { loadAllIcons } from './iconLoader';
5
+ // Load all icons once at module level
6
+ const allIconsCache = loadAllIcons();
7
+ // Helper function to resolve color references from tokens
8
+ const resolveColor = (colorRef) => {
9
+ if (colorRef.startsWith('#') || colorRef === 'transparent' || colorRef === 'none') {
10
+ return colorRef;
11
+ }
12
+ const parts = colorRef.split('.');
13
+ if (parts.length === 2) {
14
+ const [category, shade] = parts;
15
+ const colorCategory = colors.colors[category];
16
+ if (colorCategory && typeof colorCategory === 'object') {
17
+ const colorValue = colorCategory[shade];
18
+ if (colorValue) {
19
+ return colorValue;
20
+ }
21
+ }
22
+ }
23
+ return colorRef;
24
+ };
25
+ // Helper function to resolve border string
26
+ const resolveBorder = (border) => {
27
+ if (border === 'none' || border === 'transparent') {
28
+ return border;
29
+ }
30
+ return border.replace(/(\w+\.\w+)/g, (match) => resolveColor(match));
31
+ };
32
+ // Helper function to get the next darker shade of a color
33
+ const getDarkerShade = (colorRef) => {
34
+ if (colorRef.startsWith('#') || colorRef === 'transparent' || colorRef === 'none') {
35
+ return colorRef;
36
+ }
37
+ const parts = colorRef.split('.');
38
+ if (parts.length === 2) {
39
+ const [category, shade] = parts;
40
+ if (category === 'basic') {
41
+ return colorRef;
42
+ }
43
+ const shadeLevels = ['50', '100', '200', '300', '400', '500', '600', '700', '800', '900'];
44
+ const currentIndex = shadeLevels.indexOf(shade);
45
+ if (currentIndex !== -1 && currentIndex < shadeLevels.length - 1) {
46
+ const nextShade = shadeLevels[currentIndex + 1];
47
+ return `${category}.${nextShade}`;
48
+ }
49
+ }
50
+ return colorRef;
51
+ };
52
+ // Helper function to get hover border
53
+ const getHoverBorder = (border) => {
54
+ if (border === 'none' || border === 'transparent') {
55
+ return border;
56
+ }
57
+ return border.replace(/(\w+\.\w+)/g, (match) => {
58
+ const darkerShade = getDarkerShade(match);
59
+ return resolveColor(darkerShade);
60
+ });
61
+ };
62
+ // Helper function to resolve typography values
63
+ const resolveTypography = {
64
+ fontFamily: (family = 'roboto') => {
65
+ const fontFamily = typography.typography.fontFamilies[family];
66
+ return Array.isArray(fontFamily) ? fontFamily.join(', ') : fontFamily;
67
+ },
68
+ fontSize: (size) => {
69
+ return typography.typography.fontSizes[size];
70
+ },
71
+ fontWeight: (weight) => {
72
+ return typography.typography.fontWeights[weight];
73
+ },
74
+ lineHeight: (height) => {
75
+ return typography.typography.lineHeights[height];
76
+ },
77
+ letterSpacing: (spacing) => {
78
+ return typography.typography.letterSpacing[spacing];
79
+ },
80
+ };
81
+ export const SelectToken = ({ state, showLabel = false, label = 'Select Item', placeholder = 'Select Item', value, leftIcon, options = [], onSelect, }) => {
82
+ const [isOpen, setIsOpen] = useState(state === 'open');
83
+ const [isHovered, setIsHovered] = useState(false);
84
+ const [isFocused, setIsFocused] = useState(false);
85
+ const [selectedValue, setSelectedValue] = useState(value || '');
86
+ const [selectedIcon, setSelectedIcon] = useState(leftIcon || null);
87
+ const selectRef = useRef(null);
88
+ // Map state to token state
89
+ const getTokenState = () => {
90
+ if (state === 'disabled')
91
+ return 'disabled';
92
+ if (state === 'open' || isOpen)
93
+ return 'open';
94
+ if (state === 'focus' || isFocused)
95
+ return 'open'; // Use 'open' token for focus (purple border)
96
+ if (state === 'filled' && selectedValue)
97
+ return 'selected';
98
+ return 'default';
99
+ };
100
+ const tokenState = getTokenState();
101
+ const typeTokens = inputs.inputs.types.singleSelector;
102
+ const stateTokens = typeTokens[tokenState];
103
+ const sizeTokens = inputs.inputs.sizes.regular;
104
+ if (!stateTokens) {
105
+ return _jsxs("div", { children: ["Invalid state: ", tokenState] });
106
+ }
107
+ // Resolve colors from token references
108
+ const resolvedBackground = resolveColor(stateTokens.background);
109
+ const resolvedText = resolveColor(stateTokens.text);
110
+ const resolvedPlaceholder = resolveColor(stateTokens.placeholder || stateTokens.text);
111
+ const resolvedBorder = resolveBorder(stateTokens.border);
112
+ const resolvedIcon = resolveColor(stateTokens.icon || stateTokens.text);
113
+ // Get chevron icons
114
+ const chevronDown = allIconsCache.find(icon => icon.name === 'chevron-down');
115
+ const chevronUp = allIconsCache.find(icon => icon.name === 'chevron-up');
116
+ // Determine if should show placeholder or value
117
+ const isDisabled = state === 'disabled';
118
+ const showPlaceholder = !selectedValue;
119
+ const textColor = showPlaceholder ? resolvedPlaceholder : resolvedText;
120
+ const displayText = selectedValue || placeholder;
121
+ // Get active state tokens for focus styling (use 'open' state which has gray.600 border like input 'active')
122
+ const activeStateTokens = typeTokens['open'];
123
+ const activeBorder = activeStateTokens ? resolveBorder(activeStateTokens.border) : resolvedBorder;
124
+ // Calculate hover border (one shade darker) - same approach as InputToken
125
+ const shouldShowHover = !isDisabled && stateTokens.border !== 'none' && stateTokens.border !== 'transparent';
126
+ const hoverBorder = shouldShowHover ? getHoverBorder(stateTokens.border) : resolvedBorder;
127
+ // Determine border color: focus > hover > default (same logic as InputToken)
128
+ const getBorderColor = () => {
129
+ if ((state === 'focus' || isFocused) && !isDisabled && activeStateTokens) {
130
+ return activeBorder;
131
+ }
132
+ if ((state === 'hover' || isHovered) && shouldShowHover) {
133
+ return hoverBorder;
134
+ }
135
+ return resolvedBorder;
136
+ };
137
+ // Handle click outside to close dropdown
138
+ useEffect(() => {
139
+ const handleClickOutside = (event) => {
140
+ if (selectRef.current && !selectRef.current.contains(event.target)) {
141
+ setIsOpen(false);
142
+ }
143
+ };
144
+ if (isOpen) {
145
+ document.addEventListener('mousedown', handleClickOutside);
146
+ }
147
+ return () => {
148
+ document.removeEventListener('mousedown', handleClickOutside);
149
+ };
150
+ }, [isOpen]);
151
+ const selectContainerStyle = {
152
+ width: '100%',
153
+ position: 'relative',
154
+ display: 'flex',
155
+ alignItems: 'center',
156
+ padding: `${sizeTokens.padding.vertical} ${sizeTokens.padding.horizontal}`,
157
+ fontSize: resolveTypography.fontSize('base'),
158
+ minHeight: sizeTokens.minHeight,
159
+ borderRadius: inputs.inputs.borderRadius,
160
+ border: getBorderColor(),
161
+ backgroundColor: resolvedBackground,
162
+ color: textColor,
163
+ fontFamily: resolveTypography.fontFamily('roboto'),
164
+ fontWeight: resolveTypography.fontWeight('regular'),
165
+ lineHeight: resolveTypography.lineHeight('normal'),
166
+ letterSpacing: resolveTypography.letterSpacing('normal'),
167
+ cursor: isDisabled ? 'not-allowed' : 'pointer',
168
+ opacity: isDisabled ? 0.6 : 1,
169
+ gap: '8px',
170
+ boxSizing: 'border-box',
171
+ transition: 'border-color 0.2s ease',
172
+ };
173
+ const handleSelectClick = () => {
174
+ if (!isDisabled) {
175
+ setIsOpen(!isOpen);
176
+ setIsFocused(true);
177
+ }
178
+ };
179
+ const handleOptionClick = (optionLabel, optionIcon) => {
180
+ setSelectedValue(optionLabel);
181
+ setSelectedIcon(optionIcon || null);
182
+ setIsOpen(false);
183
+ setIsFocused(false);
184
+ if (onSelect) {
185
+ onSelect(optionLabel);
186
+ }
187
+ };
188
+ const renderIcon = (icon, size = 16) => {
189
+ if (!icon)
190
+ return null;
191
+ // Process SVG string similar to ButtonToken
192
+ if (icon.svg) {
193
+ let processedSvg = icon.svg;
194
+ // Update width and height attributes
195
+ processedSvg = processedSvg.replace(/width="[^"]*"/gi, `width="${size}"`);
196
+ processedSvg = processedSvg.replace(/height="[^"]*"/gi, `height="${size}"`);
197
+ // If SVG doesn't have width/height, add them
198
+ if (!processedSvg.match(/width\s*=/i)) {
199
+ processedSvg = processedSvg.replace(/<svg([^>]*?)>/i, (match, attrs) => `<svg${attrs} width="${size}" height="${size}">`);
200
+ }
201
+ // Replace currentColor with actual icon color from tokens
202
+ processedSvg = processedSvg.replace(/stroke="currentColor"/gi, `stroke="${resolvedIcon}"`);
203
+ processedSvg = processedSvg.replace(/fill="currentColor"/gi, `fill="${resolvedIcon}"`);
204
+ // Set stroke-width to 2px for all stroke elements
205
+ processedSvg = processedSvg.replace(/stroke-width="[^"]*"/gi, 'stroke-width="2"');
206
+ processedSvg = processedSvg.replace(/strokeWidth="[^"]*"/gi, 'strokeWidth="2"');
207
+ // Add stroke-width="2" to all elements that have stroke but no stroke-width
208
+ processedSvg = processedSvg.replace(/(<(path|line|polyline|polygon|circle|ellipse|rect)[^>]*stroke="[^"]*"[^>]*?)(?![^>]*stroke-width)(?![^>]*strokeWidth)([^>]*>)/gi, (match, before, tag, after) => {
209
+ return `${before} stroke-width="2"${after}`;
210
+ });
211
+ return (_jsx("span", { style: {
212
+ width: `${size}px`,
213
+ height: `${size}px`,
214
+ display: 'inline-flex',
215
+ alignItems: 'center',
216
+ justifyContent: 'center',
217
+ flexShrink: 0,
218
+ color: resolvedIcon,
219
+ lineHeight: 0,
220
+ }, dangerouslySetInnerHTML: { __html: processedSvg } }));
221
+ }
222
+ if (icon.component) {
223
+ return (_jsx("span", { style: {
224
+ width: `${size}px`,
225
+ height: `${size}px`,
226
+ display: 'inline-flex',
227
+ alignItems: 'center',
228
+ justifyContent: 'center',
229
+ flexShrink: 0,
230
+ color: resolvedIcon,
231
+ }, children: React.cloneElement(icon.component, {
232
+ width: size,
233
+ height: size,
234
+ style: { color: resolvedIcon },
235
+ }) }));
236
+ }
237
+ return null;
238
+ };
239
+ const renderChevron = () => {
240
+ const chevronIcon = (isOpen || state === 'open' || state === 'focus') ? chevronUp : chevronDown;
241
+ if (!chevronIcon)
242
+ return null;
243
+ // Process SVG string similar to other icons
244
+ if (chevronIcon.svg) {
245
+ let processedSvg = chevronIcon.svg;
246
+ const chevronSize = 16;
247
+ // Update width and height attributes
248
+ processedSvg = processedSvg.replace(/width="[^"]*"/gi, `width="${chevronSize}"`);
249
+ processedSvg = processedSvg.replace(/height="[^"]*"/gi, `height="${chevronSize}"`);
250
+ // If SVG doesn't have width/height, add them
251
+ if (!processedSvg.match(/width\s*=/i)) {
252
+ processedSvg = processedSvg.replace(/<svg([^>]*?)>/i, (match, attrs) => `<svg${attrs} width="${chevronSize}" height="${chevronSize}">`);
253
+ }
254
+ // Replace currentColor with actual icon color from tokens
255
+ processedSvg = processedSvg.replace(/stroke="currentColor"/gi, `stroke="${resolvedIcon}"`);
256
+ processedSvg = processedSvg.replace(/fill="currentColor"/gi, `fill="${resolvedIcon}"`);
257
+ // Set stroke-width to 2px for all stroke elements
258
+ processedSvg = processedSvg.replace(/stroke-width="[^"]*"/gi, 'stroke-width="2"');
259
+ processedSvg = processedSvg.replace(/strokeWidth="[^"]*"/gi, 'strokeWidth="2"');
260
+ // Add stroke-width="2" to all elements that have stroke but no stroke-width
261
+ processedSvg = processedSvg.replace(/(<(path|line|polyline|polygon|circle|ellipse|rect)[^>]*stroke="[^"]*"[^>]*?)(?![^>]*stroke-width)(?![^>]*strokeWidth)([^>]*>)/gi, (match, before, tag, after) => {
262
+ return `${before} stroke-width="2"${after}`;
263
+ });
264
+ return (_jsx("span", { style: {
265
+ width: `${chevronSize}px`,
266
+ height: `${chevronSize}px`,
267
+ display: 'inline-flex',
268
+ alignItems: 'center',
269
+ justifyContent: 'center',
270
+ flexShrink: 0,
271
+ color: resolvedIcon,
272
+ lineHeight: 0,
273
+ }, dangerouslySetInnerHTML: { __html: processedSvg } }));
274
+ }
275
+ if (chevronIcon.component) {
276
+ return (_jsx("span", { style: {
277
+ width: '16px',
278
+ height: '16px',
279
+ display: 'inline-flex',
280
+ alignItems: 'center',
281
+ justifyContent: 'center',
282
+ flexShrink: 0,
283
+ color: resolvedIcon,
284
+ }, children: React.cloneElement(chevronIcon.component, {
285
+ width: 16,
286
+ height: 16,
287
+ style: { color: resolvedIcon },
288
+ }) }));
289
+ }
290
+ return null;
291
+ };
292
+ // Resolve colors for dropdown from tokens
293
+ const dropdownBg = resolveColor('basic.white');
294
+ const dropdownBorder = resolveColor('gray.300');
295
+ const dropdownStyle = {
296
+ position: 'absolute',
297
+ top: '100%',
298
+ left: 0,
299
+ right: 0,
300
+ marginTop: '2px',
301
+ backgroundColor: dropdownBg,
302
+ border: `1px solid ${dropdownBorder}`,
303
+ borderRadius: inputs.inputs.borderRadius,
304
+ boxShadow: '0px 1px 4px 0px rgba(0, 0, 0, 0.1)',
305
+ zIndex: 1000,
306
+ overflow: 'hidden',
307
+ };
308
+ // Resolve colors for dropdown options from tokens
309
+ const optionBorderColor = resolveColor('gray.200'); // Light border between options
310
+ const optionHoverBg = resolveColor('gray.100'); // One level up from gray.50 for hover
311
+ const optionTextColor = resolveColor('gray.700');
312
+ const optionBg = resolveColor('basic.white');
313
+ const optionStyle = {
314
+ padding: '12px',
315
+ margin: '2px',
316
+ display: 'flex',
317
+ alignItems: 'center',
318
+ gap: '8px',
319
+ cursor: 'pointer',
320
+ borderBottom: 'none',
321
+ borderRadius: inputs.inputs.borderRadius,
322
+ fontFamily: resolveTypography.fontFamily('roboto'),
323
+ fontSize: resolveTypography.fontSize('base'),
324
+ fontWeight: resolveTypography.fontWeight('regular'),
325
+ color: optionTextColor,
326
+ backgroundColor: optionBg,
327
+ transition: 'background-color 0.15s ease',
328
+ };
329
+ const lastOptionStyle = {
330
+ ...optionStyle,
331
+ };
332
+ return (_jsxs("div", { style: { marginBottom: '1rem', width: '100%', maxWidth: '400px' }, ref: selectRef, children: [showLabel && (_jsx("div", { style: {
333
+ fontSize: resolveTypography.fontSize('sm'),
334
+ color: resolveColor('gray.700'),
335
+ marginBottom: '0.5rem',
336
+ fontWeight: resolveTypography.fontWeight('medium'),
337
+ fontFamily: resolveTypography.fontFamily('roboto'),
338
+ lineHeight: resolveTypography.lineHeight('normal'),
339
+ letterSpacing: resolveTypography.letterSpacing('normal'),
340
+ }, children: label })), _jsxs("div", { style: { position: 'relative' }, children: [_jsxs("div", { style: selectContainerStyle, onClick: handleSelectClick, onMouseEnter: () => shouldShowHover && setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: [(selectedIcon || leftIcon) && renderIcon(selectedIcon || leftIcon, 16), _jsx("div", { style: {
341
+ flex: 1,
342
+ minWidth: 0,
343
+ fontSize: resolveTypography.fontSize('base'),
344
+ fontFamily: resolveTypography.fontFamily('roboto'),
345
+ fontWeight: resolveTypography.fontWeight('regular'),
346
+ lineHeight: resolveTypography.lineHeight('normal'),
347
+ color: textColor,
348
+ display: 'flex',
349
+ alignItems: 'center',
350
+ marginTop: '-1px', // Move text up slightly to align with icon
351
+ }, children: displayText }), renderChevron()] }), (isOpen || state === 'open') && options.length > 0 && (_jsx("div", { style: dropdownStyle, children: options.map((option, index) => (_jsxs("div", { style: index === options.length - 1 ? lastOptionStyle : optionStyle, onClick: () => handleOptionClick(option.label, option.icon), onMouseEnter: (e) => {
352
+ e.currentTarget.style.backgroundColor = optionHoverBg;
353
+ }, onMouseLeave: (e) => {
354
+ e.currentTarget.style.backgroundColor = optionBg;
355
+ }, children: [option.icon && renderIcon(option.icon, 16), _jsx("span", { children: option.label })] }, index))) }))] })] }));
356
+ };
357
+ //# sourceMappingURL=SelectToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectToken.js","sourceRoot":"","sources":["../../src/components/SelectToken.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import { typography } from '../tokens';
3
+ export declare enum TCLFontSize {
4
+ NORMAL = "base",
5
+ TEXT_MEDIUM = "base",
6
+ MSMALL = "sm",
7
+ SMALL = "sm",
8
+ XSMALL = "xs",
9
+ MEDIUM = "lg",
10
+ LARGE = "xl"
11
+ }
12
+ export interface TCLTextProps {
13
+ text?: string;
14
+ children?: ReactNode;
15
+ className?: string;
16
+ tooltipConfig?: {
17
+ margin?: number;
18
+ minSpaceNeeded?: number;
19
+ maxWidth?: number;
20
+ tooltipHeight?: number;
21
+ };
22
+ fontSize?: TCLFontSize | keyof typeof typography.typography.fontSizes;
23
+ fontFamily?: 'roboto' | 'lato';
24
+ color?: string;
25
+ }
26
+ export declare const TCLText: React.FC<TCLTextProps>;
27
+ export default TCLText;
28
+ //# sourceMappingURL=TCLText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TCLText.d.ts","sourceRoot":"","sources":["../../src/components/TCLText.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAKvC,oBAAY,WAAW;IACnB,MAAM,SAAS;IACf,WAAW,SAAS;IACpB,MAAM,OAAO;IACb,KAAK,OAAO;IACZ,MAAM,OAAO;IACb,MAAM,OAAO;IACb,KAAK,OAAO;CACf;AAGD,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,OAAO,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;IACtE,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA8H1C,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
3
+ import { typography } from '../tokens';
4
+ import { useTooltipOnTruncation } from './hooks/useTooltipOnTruncation';
5
+ // Map TCLFontSize to Storybook typography tokens
6
+ export var TCLFontSize;
7
+ (function (TCLFontSize) {
8
+ TCLFontSize["NORMAL"] = "base";
9
+ TCLFontSize["TEXT_MEDIUM"] = "base";
10
+ TCLFontSize["MSMALL"] = "sm";
11
+ TCLFontSize["SMALL"] = "sm";
12
+ TCLFontSize["XSMALL"] = "xs";
13
+ TCLFontSize["MEDIUM"] = "lg";
14
+ TCLFontSize["LARGE"] = "xl";
15
+ })(TCLFontSize || (TCLFontSize = {}));
16
+ // Simple TranslatableText replacement for Storybook
17
+ const TranslatableText = ({ defaultElement, children }) => {
18
+ return _jsx(_Fragment, { children: defaultElement || children });
19
+ };
20
+ export const TCLText = ({ text, children, className = '', tooltipConfig, fontSize = 'base', fontFamily = 'roboto', color, }) => {
21
+ const { triggerRef, wrapperRef, mousePos, handleMouseEnter, isTruncated, margin, maxWidth } = useTooltipOnTruncation(tooltipConfig, text ?? children);
22
+ // Resolve font size from tokens
23
+ let fontSizeKey = 'base';
24
+ if (typeof fontSize === 'string' && fontSize in typography.typography.fontSizes) {
25
+ fontSizeKey = fontSize;
26
+ }
27
+ else {
28
+ const fontSizeValue = fontSize;
29
+ if (fontSizeValue === TCLFontSize.NORMAL || fontSizeValue === TCLFontSize.TEXT_MEDIUM) {
30
+ fontSizeKey = 'base';
31
+ }
32
+ else if (fontSizeValue === TCLFontSize.MSMALL || fontSizeValue === TCLFontSize.SMALL) {
33
+ fontSizeKey = 'sm';
34
+ }
35
+ else if (fontSizeValue === TCLFontSize.XSMALL) {
36
+ fontSizeKey = 'xs';
37
+ }
38
+ else if (fontSizeValue === TCLFontSize.MEDIUM) {
39
+ fontSizeKey = 'lg';
40
+ }
41
+ else if (fontSizeValue === TCLFontSize.LARGE) {
42
+ fontSizeKey = 'xl';
43
+ }
44
+ }
45
+ const resolvedFontSize = typography.typography.fontSizes[fontSizeKey];
46
+ const resolvedFontFamily = fontFamily === 'lato'
47
+ ? typography.typography.fontFamilies.lato.join(', ')
48
+ : typography.typography.fontFamilies.roboto.join(', ');
49
+ const textColor = color || 'var(--color-gray-900)';
50
+ const wrapperStyle = {
51
+ position: 'relative',
52
+ display: 'inline-block',
53
+ maxWidth: '100%',
54
+ };
55
+ const textStyle = {
56
+ fontSize: resolvedFontSize,
57
+ fontFamily: resolvedFontFamily,
58
+ color: textColor,
59
+ overflow: 'hidden',
60
+ textOverflow: 'ellipsis',
61
+ whiteSpace: 'nowrap',
62
+ display: 'inline-block',
63
+ verticalAlign: 'top',
64
+ maxWidth: '100%',
65
+ cursor: 'default',
66
+ };
67
+ const tooltipContentStyle = {
68
+ backgroundColor: 'var(--color-gray-200)',
69
+ color: 'var(--color-gray-900)',
70
+ borderRadius: '6px',
71
+ padding: '8px 12px',
72
+ whiteSpace: 'normal',
73
+ zIndex: 1000,
74
+ pointerEvents: 'none',
75
+ maxWidth: `${maxWidth}px`,
76
+ boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
77
+ wordBreak: 'break-word',
78
+ fontWeight: 400,
79
+ fontSize: resolvedFontSize,
80
+ fontFamily: resolvedFontFamily,
81
+ lineHeight: '1.5',
82
+ };
83
+ if (!isTruncated) {
84
+ return (_jsx("div", { style: wrapperStyle, className: className, role: "presentation", children: _jsx("span", { ref: wrapperRef, style: textStyle, children: text ? (_jsx(TranslatableText, { defaultElement: text })) : (children) }) }));
85
+ }
86
+ return (_jsx(TooltipPrimitive.Provider, { delayDuration: 200, children: _jsxs(TooltipPrimitive.Root, { children: [_jsx(TooltipPrimitive.Trigger, { asChild: true, children: _jsx("div", { ref: triggerRef, style: wrapperStyle, className: className, role: "presentation", onMouseEnter: handleMouseEnter, children: _jsx("span", { ref: wrapperRef, style: textStyle, children: text ? (_jsx(TranslatableText, { defaultElement: text })) : (children) }) }) }), _jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Content, { style: tooltipContentStyle, side: "bottom", align: "start", alignOffset: mousePos.x, sideOffset: margin, children: text ? (_jsx(TranslatableText, { defaultElement: text })) : (children) }) })] }) }));
87
+ };
88
+ export default TCLText;
89
+ //# sourceMappingURL=TCLText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TCLText.js","sourceRoot":"","sources":["../../src/components/TCLText.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type MouseEvent, type ReactNode } from 'react';
2
+ interface MousePosition {
3
+ x: number;
4
+ y: number;
5
+ }
6
+ interface TooltipConfig {
7
+ margin?: number;
8
+ maxWidth?: number;
9
+ }
10
+ export declare const useTooltipOnTruncation: (config?: TooltipConfig, content?: string | ReactNode) => {
11
+ triggerRef: import("react").MutableRefObject<HTMLDivElement>;
12
+ wrapperRef: import("react").MutableRefObject<HTMLSpanElement>;
13
+ mousePos: MousePosition;
14
+ handleMouseEnter: (e: MouseEvent<HTMLDivElement>) => void;
15
+ isTruncated: boolean;
16
+ margin: number;
17
+ maxWidth: number;
18
+ };
19
+ export {};
20
+ //# sourceMappingURL=useTooltipOnTruncation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTooltipOnTruncation.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useTooltipOnTruncation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElG,UAAU,aAAa;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,UAAU,aAAa;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,sBAAsB,GAAI,SAAQ,aAAkB,EAAE,UAAU,MAAM,GAAG,SAAS;;;;0BAkDnF,UAAU,CAAC,cAAc,CAAC;;;;CAwBrC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { useRef, useEffect, useState, useCallback } from 'react';
2
+ export const useTooltipOnTruncation = (config = {}, content) => {
3
+ const triggerRef = useRef(null);
4
+ const wrapperRef = useRef(null);
5
+ const [isTruncated, setIsTruncated] = useState(false);
6
+ const [mousePos, setMousePos] = useState({ x: 0, y: 0 });
7
+ const checkOverflow = useCallback(() => {
8
+ const el = wrapperRef.current;
9
+ if (el) {
10
+ setIsTruncated(el.scrollWidth > el.clientWidth);
11
+ }
12
+ }, []);
13
+ // Use ResizeObserver to watch for size changes
14
+ useEffect(() => {
15
+ const element = wrapperRef.current;
16
+ if (!element)
17
+ return;
18
+ const resizeObserver = new ResizeObserver(() => {
19
+ checkOverflow();
20
+ });
21
+ resizeObserver.observe(element);
22
+ // Initial check
23
+ const timeoutId = setTimeout(checkOverflow, 0);
24
+ return () => {
25
+ resizeObserver.disconnect();
26
+ clearTimeout(timeoutId);
27
+ };
28
+ }, [checkOverflow, content]);
29
+ useEffect(() => {
30
+ if (typeof window === 'undefined') {
31
+ return;
32
+ }
33
+ window.addEventListener('resize', checkOverflow);
34
+ return () => {
35
+ window.removeEventListener('resize', checkOverflow);
36
+ };
37
+ }, [checkOverflow]);
38
+ useEffect(() => {
39
+ checkOverflow();
40
+ }, [checkOverflow, content]);
41
+ const handleMouseEnter = useCallback((e) => {
42
+ checkOverflow();
43
+ if (!triggerRef.current) {
44
+ return;
45
+ }
46
+ const rect = triggerRef.current.getBoundingClientRect();
47
+ setMousePos({
48
+ x: e.clientX - rect.left,
49
+ y: e.clientY - rect.top,
50
+ });
51
+ }, [checkOverflow]);
52
+ return {
53
+ triggerRef,
54
+ wrapperRef,
55
+ mousePos,
56
+ handleMouseEnter,
57
+ isTruncated,
58
+ margin: config.margin || 10,
59
+ maxWidth: config.maxWidth || 300,
60
+ };
61
+ };
62
+ //# sourceMappingURL=useTooltipOnTruncation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTooltipOnTruncation.js","sourceRoot":"","sources":["../../../src/components/hooks/useTooltipOnTruncation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAmC,MAAM,OAAO,CAAC;AAYlG,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAwB,EAAE,EAAE,OAA4B,EAAE,EAAE;IAC/F,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAExE,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,EAAE,CAAC;YACL,cAAc,CAAC,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,+CAA+C;IAC/C,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YAC3C,aAAa,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEhC,gBAAgB;QAChB,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAE/C,OAAO,GAAG,EAAE;YACR,cAAc,CAAC,UAAU,EAAE,CAAC;YAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAE7B,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO;QACX,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAEjD,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACxD,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACX,aAAa,EAAE,CAAC;IACpB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAE7B,MAAM,gBAAgB,GAAG,WAAW,CAChC,CAAC,CAA6B,EAAE,EAAE;QAC9B,aAAa,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACxD,WAAW,CAAC;YACR,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;YACxB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;SAC1B,CAAC,CAAC;IACP,CAAC,EACD,CAAC,aAAa,CAAC,CAClB,CAAC;IAEF,OAAO;QACH,UAAU;QACV,UAAU;QACV,QAAQ;QACR,gBAAgB;QAChB,WAAW;QACX,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,GAAG;KACnC,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { IconData } from './IconItem';
2
+ export declare const iconLibrary: IconData[];
3
+ //# sourceMappingURL=iconLibrary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconLibrary.d.ts","sourceRoot":"","sources":["../../src/components/iconLibrary.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAO,MAAM,WAAW,EAAE,QAAQ,EA2FjC,CAAC"}