@tangible/ui 0.0.1

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 (212) hide show
  1. package/README.md +100 -0
  2. package/components/Accordion/Accordion.d.ts +22 -0
  3. package/components/Accordion/Accordion.js +192 -0
  4. package/components/Accordion/AccordionContext.d.ts +5 -0
  5. package/components/Accordion/AccordionContext.js +23 -0
  6. package/components/Accordion/index.d.ts +2 -0
  7. package/components/Accordion/index.js +1 -0
  8. package/components/Accordion/types.d.ts +61 -0
  9. package/components/Accordion/types.js +1 -0
  10. package/components/Avatar/Avatar.d.ts +11 -0
  11. package/components/Avatar/Avatar.js +67 -0
  12. package/components/Avatar/AvatarGroup.d.ts +11 -0
  13. package/components/Avatar/AvatarGroup.js +45 -0
  14. package/components/Avatar/index.d.ts +9 -0
  15. package/components/Avatar/index.js +7 -0
  16. package/components/Avatar/types.d.ts +44 -0
  17. package/components/Avatar/types.js +12 -0
  18. package/components/Button/Button.d.ts +4 -0
  19. package/components/Button/Button.js +33 -0
  20. package/components/Button/index.d.ts +2 -0
  21. package/components/Button/index.js +1 -0
  22. package/components/Button/types.d.ts +127 -0
  23. package/components/Button/types.js +1 -0
  24. package/components/Card/Card.d.ts +29 -0
  25. package/components/Card/Card.js +47 -0
  26. package/components/Card/index.d.ts +2 -0
  27. package/components/Card/index.js +1 -0
  28. package/components/Chip/Chip.d.ts +24 -0
  29. package/components/Chip/Chip.js +37 -0
  30. package/components/Chip/index.d.ts +2 -0
  31. package/components/Chip/index.js +1 -0
  32. package/components/Chips/Chips.d.ts +31 -0
  33. package/components/Chips/Chips.js +21 -0
  34. package/components/Chips/index.d.ts +2 -0
  35. package/components/Chips/index.js +1 -0
  36. package/components/ContentIndicator/ContentIndicator.d.ts +2 -0
  37. package/components/ContentIndicator/ContentIndicator.js +21 -0
  38. package/components/ContentIndicator/index.d.ts +2 -0
  39. package/components/ContentIndicator/index.js +1 -0
  40. package/components/ContentIndicator/types.d.ts +57 -0
  41. package/components/ContentIndicator/types.js +1 -0
  42. package/components/Dropdown/Dropdown.d.ts +31 -0
  43. package/components/Dropdown/Dropdown.js +219 -0
  44. package/components/Dropdown/DropdownContext.d.ts +3 -0
  45. package/components/Dropdown/DropdownContext.js +9 -0
  46. package/components/Dropdown/index.d.ts +2 -0
  47. package/components/Dropdown/index.js +1 -0
  48. package/components/Dropdown/types.d.ts +102 -0
  49. package/components/Dropdown/types.js +8 -0
  50. package/components/Icon/Icon.d.ts +22 -0
  51. package/components/Icon/Icon.js +24 -0
  52. package/components/Icon/index.d.ts +2 -0
  53. package/components/Icon/index.js +1 -0
  54. package/components/IconButton/IconButton.d.ts +2 -0
  55. package/components/IconButton/IconButton.js +50 -0
  56. package/components/IconButton/index.d.ts +2 -0
  57. package/components/IconButton/index.js +1 -0
  58. package/components/IconButton/types.d.ts +79 -0
  59. package/components/IconButton/types.js +1 -0
  60. package/components/Modal/Modal.d.ts +52 -0
  61. package/components/Modal/Modal.js +133 -0
  62. package/components/Modal/context.d.ts +6 -0
  63. package/components/Modal/context.js +9 -0
  64. package/components/Modal/index.d.ts +2 -0
  65. package/components/Modal/index.js +1 -0
  66. package/components/Notice/Notice.d.ts +93 -0
  67. package/components/Notice/Notice.js +144 -0
  68. package/components/Notice/index.d.ts +2 -0
  69. package/components/Notice/index.js +1 -0
  70. package/components/OverlapStack/OverlapStack.d.ts +44 -0
  71. package/components/OverlapStack/OverlapStack.js +41 -0
  72. package/components/OverlapStack/index.d.ts +2 -0
  73. package/components/OverlapStack/index.js +1 -0
  74. package/components/Pager/Pager.d.ts +26 -0
  75. package/components/Pager/Pager.js +151 -0
  76. package/components/Pager/index.d.ts +2 -0
  77. package/components/Pager/index.js +1 -0
  78. package/components/Progress/Progress.d.ts +2 -0
  79. package/components/Progress/Progress.js +100 -0
  80. package/components/Progress/index.d.ts +4 -0
  81. package/components/Progress/index.js +2 -0
  82. package/components/Progress/types.d.ts +251 -0
  83. package/components/Progress/types.js +1 -0
  84. package/components/Progress/useProgressSegments.d.ts +40 -0
  85. package/components/Progress/useProgressSegments.js +42 -0
  86. package/components/Rating/Rating.d.ts +32 -0
  87. package/components/Rating/Rating.js +74 -0
  88. package/components/Rating/index.d.ts +2 -0
  89. package/components/Rating/index.js +1 -0
  90. package/components/SegmentedControl/SegmentedControl.d.ts +10 -0
  91. package/components/SegmentedControl/SegmentedControl.js +183 -0
  92. package/components/SegmentedControl/SegmentedControlContext.d.ts +3 -0
  93. package/components/SegmentedControl/SegmentedControlContext.js +9 -0
  94. package/components/SegmentedControl/index.d.ts +2 -0
  95. package/components/SegmentedControl/index.js +1 -0
  96. package/components/SegmentedControl/types.d.ts +63 -0
  97. package/components/SegmentedControl/types.js +1 -0
  98. package/components/Sidebar/Sidebar.d.ts +17 -0
  99. package/components/Sidebar/Sidebar.js +107 -0
  100. package/components/Sidebar/index.d.ts +2 -0
  101. package/components/Sidebar/index.js +1 -0
  102. package/components/Sidebar/types.d.ts +65 -0
  103. package/components/Sidebar/types.js +4 -0
  104. package/components/StepIndicator/StepIndicator.d.ts +2 -0
  105. package/components/StepIndicator/StepIndicator.js +64 -0
  106. package/components/StepIndicator/index.d.ts +2 -0
  107. package/components/StepIndicator/index.js +1 -0
  108. package/components/StepIndicator/types.d.ts +68 -0
  109. package/components/StepIndicator/types.js +1 -0
  110. package/components/StepList/StepList.d.ts +12 -0
  111. package/components/StepList/StepList.js +59 -0
  112. package/components/StepList/StepListContext.d.ts +3 -0
  113. package/components/StepList/StepListContext.js +9 -0
  114. package/components/StepList/index.d.ts +2 -0
  115. package/components/StepList/index.js +1 -0
  116. package/components/StepList/types.d.ts +91 -0
  117. package/components/StepList/types.js +4 -0
  118. package/components/Table/BulkActionsBar.d.ts +12 -0
  119. package/components/Table/BulkActionsBar.js +9 -0
  120. package/components/Table/DataTable.d.ts +35 -0
  121. package/components/Table/DataTable.js +184 -0
  122. package/components/Table/Pagination.d.ts +13 -0
  123. package/components/Table/Pagination.js +13 -0
  124. package/components/Table/index.d.ts +2 -0
  125. package/components/Table/index.js +1 -0
  126. package/components/Tabs/Tabs.d.ts +23 -0
  127. package/components/Tabs/Tabs.js +309 -0
  128. package/components/Tabs/TabsContext.d.ts +3 -0
  129. package/components/Tabs/TabsContext.js +12 -0
  130. package/components/Tabs/index.d.ts +2 -0
  131. package/components/Tabs/index.js +1 -0
  132. package/components/Tabs/types.d.ts +75 -0
  133. package/components/Tabs/types.js +1 -0
  134. package/components/Toolbar/Toolbar.d.ts +18 -0
  135. package/components/Toolbar/Toolbar.js +241 -0
  136. package/components/Toolbar/index.d.ts +2 -0
  137. package/components/Toolbar/index.js +1 -0
  138. package/components/Toolbar/types.d.ts +28 -0
  139. package/components/Toolbar/types.js +1 -0
  140. package/components/Tooltip/Tooltip.d.ts +15 -0
  141. package/components/Tooltip/Tooltip.js +166 -0
  142. package/components/Tooltip/TooltipContext.d.ts +15 -0
  143. package/components/Tooltip/TooltipContext.js +25 -0
  144. package/components/Tooltip/index.d.ts +2 -0
  145. package/components/Tooltip/index.js +1 -0
  146. package/components/Tooltip/types.d.ts +85 -0
  147. package/components/Tooltip/types.js +8 -0
  148. package/components/index.d.ts +52 -0
  149. package/components/index.js +26 -0
  150. package/constants.d.ts +16 -0
  151. package/constants.js +16 -0
  152. package/icons/cred/index.d.ts +31 -0
  153. package/icons/cred/index.js +136 -0
  154. package/icons/icons.svg +155 -0
  155. package/icons/lms/index.d.ts +21 -0
  156. package/icons/lms/index.js +81 -0
  157. package/icons/manifest.json +1226 -0
  158. package/icons/player/index.d.ts +55 -0
  159. package/icons/player/index.js +268 -0
  160. package/icons/reaction/index.d.ts +79 -0
  161. package/icons/reaction/index.js +400 -0
  162. package/icons/registry.d.ts +316 -0
  163. package/icons/registry.js +163 -0
  164. package/icons/system/index.d.ts +155 -0
  165. package/icons/system/index.js +818 -0
  166. package/package.json +121 -0
  167. package/styles/all.css +1 -0
  168. package/styles/all.expanded.css +4137 -0
  169. package/styles/all.expanded.unlayered.css +4137 -0
  170. package/styles/all.unlayered.css +1 -0
  171. package/styles/components/_bundle.scss +51 -0
  172. package/styles/components/index.scss +1 -0
  173. package/styles/components/input/index.scss +248 -0
  174. package/styles/index.scss +71 -0
  175. package/styles/system/_constants.scss +12 -0
  176. package/styles/system/_motion.scss +47 -0
  177. package/styles/system/_palette-fns.scss +10 -0
  178. package/styles/system/_palettes.scss +80 -0
  179. package/styles/system/_tokens.scss +249 -0
  180. package/styles/system/index.scss +4 -0
  181. package/styles/utilities/_index.scss +373 -0
  182. package/tui-manifest.json +1858 -0
  183. package/types/index.d.ts +2 -0
  184. package/types/index.js +1 -0
  185. package/types/index.ts +2 -0
  186. package/types/sizes.d.ts +17 -0
  187. package/types/sizes.js +10 -0
  188. package/types/sizes.ts +21 -0
  189. package/types/svg.d.ts +5 -0
  190. package/types/themes.d.ts +14 -0
  191. package/types/themes.js +9 -0
  192. package/types/themes.ts +17 -0
  193. package/utils/color/contrast.d.ts +33 -0
  194. package/utils/color/contrast.js +88 -0
  195. package/utils/color-scheme.d.ts +25 -0
  196. package/utils/color-scheme.js +55 -0
  197. package/utils/compose-refs.d.ts +17 -0
  198. package/utils/compose-refs.js +38 -0
  199. package/utils/cx.d.ts +12 -0
  200. package/utils/cx.js +14 -0
  201. package/utils/focus-trap.d.ts +40 -0
  202. package/utils/focus-trap.js +93 -0
  203. package/utils/index.d.ts +10 -0
  204. package/utils/index.js +16 -0
  205. package/utils/math.d.ts +4 -0
  206. package/utils/math.js +19 -0
  207. package/utils/merge-props.d.ts +25 -0
  208. package/utils/merge-props.js +60 -0
  209. package/utils/polymorphic.d.ts +28 -0
  210. package/utils/polymorphic.js +44 -0
  211. package/utils/portal.d.ts +11 -0
  212. package/utils/portal.js +105 -0
@@ -0,0 +1 @@
1
+ export { Toolbar } from './Toolbar.js';
@@ -0,0 +1,28 @@
1
+ import type { ReactNode, ReactElement } from 'react';
2
+ export type ToolbarOrientation = 'horizontal' | 'vertical';
3
+ export interface ToolbarProps {
4
+ /** Accessible label for the toolbar (required for a11y) */
5
+ 'aria-label'?: string;
6
+ /** ID of element that labels the toolbar */
7
+ 'aria-labelledby'?: string;
8
+ /** Toolbar orientation - affects arrow key direction */
9
+ orientation?: ToolbarOrientation;
10
+ /** Whether arrow keys wrap from end to start (does not affect Home/End) */
11
+ loop?: boolean;
12
+ children?: ReactNode;
13
+ className?: string;
14
+ /** Inline styles for layout integration */
15
+ style?: React.CSSProperties;
16
+ }
17
+ export interface ToolbarGroupProps {
18
+ /** Accessible label for the group (only adds role="group" if provided) */
19
+ 'aria-label'?: string;
20
+ /** ID of element that labels the group */
21
+ 'aria-labelledby'?: string;
22
+ children?: ReactNode;
23
+ className?: string;
24
+ }
25
+ export interface ToolbarItemProps {
26
+ /** The focusable element to register as a toolbar item */
27
+ children: ReactElement;
28
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { TooltipProviderProps, TooltipProps, TooltipTriggerProps, TooltipContentProps } from './types';
2
+ declare function TooltipProviderComponent({ delayDuration, closeDelayDuration, children, }: TooltipProviderProps): import("react/jsx-runtime").JSX.Element;
3
+ declare function TooltipRoot({ open: controlledOpen, onOpenChange, defaultOpen, delayDuration: localDelay, children, }: TooltipProps): import("react/jsx-runtime").JSX.Element;
4
+ declare function TooltipTriggerComponent({ asChild, children }: TooltipTriggerProps): import("react/jsx-runtime").JSX.Element;
5
+ declare function TooltipContentComponent({ side, align, sideOffset, className, children, }: TooltipContentProps): import("react/jsx-runtime").JSX.Element | null;
6
+ type TooltipCompound = typeof TooltipRoot & {
7
+ Provider: typeof TooltipProviderComponent;
8
+ Trigger: typeof TooltipTriggerComponent;
9
+ Content: typeof TooltipContentComponent;
10
+ };
11
+ export declare const Tooltip: TooltipCompound;
12
+ export declare const TooltipProvider: typeof TooltipProviderComponent;
13
+ export declare const TooltipTrigger: typeof TooltipTriggerComponent;
14
+ export declare const TooltipContent: typeof TooltipContentComponent;
15
+ export {};
@@ -0,0 +1,166 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { useCallback, useEffect, useId, useMemo, useRef, useState, cloneElement, isValidElement, } from 'react';
3
+ import { useFloating, offset, flip, shift, autoUpdate, FloatingPortal, } from '@floating-ui/react';
4
+ import { cx } from '../../utils/cx.js';
5
+ import { getPortalRootFor } from '../../utils/portal.js';
6
+ import { TooltipContext, TooltipProviderContext, useTooltipContext, useTooltipProviderContext, } from './TooltipContext.js';
7
+ import { toPlacement } from './types.js';
8
+ // =============================================================================
9
+ // TooltipProvider
10
+ // =============================================================================
11
+ function TooltipProviderComponent({ delayDuration = 400, closeDelayDuration = 0, children, }) {
12
+ const value = useMemo(() => ({ delayDuration, closeDelayDuration }), [delayDuration, closeDelayDuration]);
13
+ return (_jsx(TooltipProviderContext.Provider, { value: value, children: children }));
14
+ }
15
+ // =============================================================================
16
+ // Tooltip Root
17
+ // =============================================================================
18
+ function TooltipRoot({ open: controlledOpen, onOpenChange, defaultOpen = false, delayDuration: localDelay, children, }) {
19
+ const providerContext = useTooltipProviderContext();
20
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
21
+ const isControlled = controlledOpen !== undefined;
22
+ const open = isControlled ? controlledOpen : uncontrolledOpen;
23
+ const setOpen = useCallback((nextOpen) => {
24
+ if (!isControlled) {
25
+ setUncontrolledOpen(nextOpen);
26
+ }
27
+ onOpenChange?.(nextOpen);
28
+ }, [isControlled, onOpenChange]);
29
+ const triggerRef = useRef(null);
30
+ const contentId = useId();
31
+ const contextValue = useMemo(() => ({
32
+ open,
33
+ setOpen,
34
+ triggerRef,
35
+ contentId,
36
+ delayDuration: localDelay ?? providerContext.delayDuration,
37
+ closeDelayDuration: providerContext.closeDelayDuration,
38
+ }), [open, setOpen, contentId, localDelay, providerContext]);
39
+ return (_jsx(TooltipContext.Provider, { value: contextValue, children: children }));
40
+ }
41
+ // =============================================================================
42
+ // TooltipTrigger
43
+ // =============================================================================
44
+ function TooltipTriggerComponent({ asChild = false, children }) {
45
+ const { open, setOpen, triggerRef, contentId, delayDuration, closeDelayDuration } = useTooltipContext();
46
+ const openTimeoutRef = useRef(null);
47
+ const closeTimeoutRef = useRef(null);
48
+ const clearTimeouts = useCallback(() => {
49
+ if (openTimeoutRef.current)
50
+ clearTimeout(openTimeoutRef.current);
51
+ if (closeTimeoutRef.current)
52
+ clearTimeout(closeTimeoutRef.current);
53
+ }, []);
54
+ const handleOpen = useCallback(() => {
55
+ clearTimeouts();
56
+ openTimeoutRef.current = setTimeout(() => setOpen(true), delayDuration);
57
+ }, [clearTimeouts, delayDuration, setOpen]);
58
+ const handleClose = useCallback(() => {
59
+ clearTimeouts();
60
+ if (closeDelayDuration > 0) {
61
+ closeTimeoutRef.current = setTimeout(() => setOpen(false), closeDelayDuration);
62
+ }
63
+ else {
64
+ setOpen(false);
65
+ }
66
+ }, [clearTimeouts, closeDelayDuration, setOpen]);
67
+ // Cleanup on unmount
68
+ useEffect(() => {
69
+ return () => clearTimeouts();
70
+ }, [clearTimeouts]);
71
+ // Merge child ref with our triggerRef
72
+ const setRefs = useCallback((node) => {
73
+ triggerRef.current = node;
74
+ // Also call child's ref if it exists
75
+ if (asChild && isValidElement(children)) {
76
+ const childRef = children.ref;
77
+ if (typeof childRef === 'function') {
78
+ childRef(node);
79
+ }
80
+ else if (childRef && typeof childRef === 'object') {
81
+ childRef.current = node;
82
+ }
83
+ }
84
+ }, [asChild, children, triggerRef]);
85
+ const triggerProps = {
86
+ onMouseEnter: handleOpen,
87
+ onMouseLeave: handleClose,
88
+ onFocus: handleOpen,
89
+ onBlur: handleClose,
90
+ 'aria-describedby': open ? contentId : undefined,
91
+ 'data-tooltip-open': open || undefined,
92
+ };
93
+ if (asChild && isValidElement(children)) {
94
+ return cloneElement(children, {
95
+ ...triggerProps,
96
+ ref: setRefs,
97
+ });
98
+ }
99
+ // Wrapper needs tabIndex to be keyboard-focusable for non-interactive children
100
+ return (_jsx("span", { ref: setRefs, ...triggerProps, tabIndex: 0, style: { display: 'inline-flex' }, children: children }));
101
+ }
102
+ // =============================================================================
103
+ // TooltipContent
104
+ // =============================================================================
105
+ function TooltipContentComponent({ side = 'top', align = 'center', sideOffset = 8, className, children, }) {
106
+ const { open, setOpen, triggerRef, contentId } = useTooltipContext();
107
+ const { refs, floatingStyles } = useFloating({
108
+ placement: toPlacement(side, align),
109
+ open,
110
+ middleware: [
111
+ offset(sideOffset),
112
+ flip(),
113
+ shift({ padding: 8 }),
114
+ ],
115
+ whileElementsMounted: autoUpdate,
116
+ });
117
+ // Sync reference element when trigger mounts/changes
118
+ // This avoids the stale ref issue with passing triggerRef.current directly
119
+ useEffect(() => {
120
+ if (triggerRef.current) {
121
+ refs.setReference(triggerRef.current);
122
+ }
123
+ }, [triggerRef, refs]);
124
+ // Close on Escape — scoped to trigger focus to avoid closing modal + tooltip together
125
+ useEffect(() => {
126
+ if (!open)
127
+ return;
128
+ const handleKeyDown = (e) => {
129
+ if (e.key === 'Escape') {
130
+ // Only close if focus is on or within the trigger element
131
+ const activeEl = document.activeElement;
132
+ const trigger = triggerRef.current;
133
+ if (trigger && (trigger === activeEl || trigger.contains(activeEl))) {
134
+ setOpen(false);
135
+ e.stopPropagation(); // Prevent bubbling to modal's Escape handler
136
+ }
137
+ }
138
+ };
139
+ document.addEventListener('keydown', handleKeyDown);
140
+ return () => document.removeEventListener('keydown', handleKeyDown);
141
+ }, [open, setOpen, triggerRef]);
142
+ // Get portal root inside .tui-interface
143
+ const portalRoot = getPortalRootFor(triggerRef.current);
144
+ // Dev warning: tooltips should not contain interactive content (WCAG 1.4.13)
145
+ // Use Popover for interactive overlays instead
146
+ useEffect(() => {
147
+ if (import.meta.env?.DEV && open && refs.floating.current) {
148
+ const interactive = refs.floating.current.querySelectorAll('a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])');
149
+ if (interactive.length > 0) {
150
+ console.warn('[Tooltip] Contains interactive elements which violates WCAG 1.4.13. ' +
151
+ 'Tooltips should only contain plain text. Use Popover for interactive content.');
152
+ }
153
+ }
154
+ }, [open, refs.floating, children]);
155
+ if (!open)
156
+ return null;
157
+ return (_jsx(FloatingPortal, { root: portalRoot, children: _jsx("div", { ref: refs.setFloating, id: contentId, role: "tooltip", className: cx('tui-tooltip', className), style: floatingStyles, children: children }) }));
158
+ }
159
+ export const Tooltip = TooltipRoot;
160
+ Tooltip.Provider = TooltipProviderComponent;
161
+ Tooltip.Trigger = TooltipTriggerComponent;
162
+ Tooltip.Content = TooltipContentComponent;
163
+ // Named exports for direct imports
164
+ export const TooltipProvider = TooltipProviderComponent;
165
+ export const TooltipTrigger = TooltipTriggerComponent;
166
+ export const TooltipContent = TooltipContentComponent;
@@ -0,0 +1,15 @@
1
+ import type { TooltipContextValue } from './types';
2
+ /**
3
+ * Context for Tooltip compound components.
4
+ */
5
+ export declare const TooltipContext: import("react").Context<TooltipContextValue | null>;
6
+ /**
7
+ * Hook to access tooltip context. Throws if used outside Tooltip.
8
+ */
9
+ export declare function useTooltipContext(): TooltipContextValue;
10
+ export type TooltipProviderContextValue = {
11
+ delayDuration: number;
12
+ closeDelayDuration: number;
13
+ };
14
+ export declare const TooltipProviderContext: import("react").Context<TooltipProviderContextValue>;
15
+ export declare function useTooltipProviderContext(): TooltipProviderContextValue;
@@ -0,0 +1,25 @@
1
+ import { createContext, useContext } from 'react';
2
+ // =============================================================================
3
+ // Tooltip Context
4
+ // =============================================================================
5
+ /**
6
+ * Context for Tooltip compound components.
7
+ */
8
+ export const TooltipContext = createContext(null);
9
+ /**
10
+ * Hook to access tooltip context. Throws if used outside Tooltip.
11
+ */
12
+ export function useTooltipContext() {
13
+ const context = useContext(TooltipContext);
14
+ if (!context) {
15
+ throw new Error('Tooltip compound components must be used within <Tooltip>');
16
+ }
17
+ return context;
18
+ }
19
+ export const TooltipProviderContext = createContext({
20
+ delayDuration: 400,
21
+ closeDelayDuration: 0,
22
+ });
23
+ export function useTooltipProviderContext() {
24
+ return useContext(TooltipProviderContext);
25
+ }
@@ -0,0 +1,2 @@
1
+ export { Tooltip, TooltipProvider, TooltipTrigger, TooltipContent } from './Tooltip';
2
+ export type { TooltipProviderProps, TooltipProps, TooltipTriggerProps, TooltipContentProps, Side, Align, } from './types';
@@ -0,0 +1 @@
1
+ export { Tooltip, TooltipProvider, TooltipTrigger, TooltipContent } from './Tooltip.js';
@@ -0,0 +1,85 @@
1
+ import type { Placement } from '@floating-ui/react';
2
+ /**
3
+ * Tooltip placement sides.
4
+ */
5
+ export type Side = 'top' | 'right' | 'bottom' | 'left';
6
+ /**
7
+ * Tooltip alignment relative to trigger.
8
+ */
9
+ export type Align = 'start' | 'center' | 'end';
10
+ export type TooltipProviderProps = {
11
+ /**
12
+ * Delay in ms before tooltip opens on hover.
13
+ * @default 400
14
+ */
15
+ delayDuration?: number;
16
+ /**
17
+ * Delay in ms before tooltip closes after pointer leaves.
18
+ * @default 0
19
+ */
20
+ closeDelayDuration?: number;
21
+ children: React.ReactNode;
22
+ };
23
+ export type TooltipProps = {
24
+ /**
25
+ * Controlled open state.
26
+ */
27
+ open?: boolean;
28
+ /**
29
+ * Callback when open state changes.
30
+ */
31
+ onOpenChange?: (open: boolean) => void;
32
+ /**
33
+ * Default open state for uncontrolled usage.
34
+ * @default false
35
+ */
36
+ defaultOpen?: boolean;
37
+ /**
38
+ * Override provider's delay for this tooltip.
39
+ */
40
+ delayDuration?: number;
41
+ children: React.ReactNode;
42
+ };
43
+ export type TooltipTriggerProps = {
44
+ /**
45
+ * When true, merges props onto the child element instead of wrapping in a span.
46
+ * Child must be a single React element that accepts ref and event handlers.
47
+ * @default false
48
+ */
49
+ asChild?: boolean;
50
+ children: React.ReactNode;
51
+ };
52
+ export type TooltipContentProps = {
53
+ /**
54
+ * Preferred side of the trigger to place the tooltip.
55
+ * @default 'top'
56
+ */
57
+ side?: Side;
58
+ /**
59
+ * Alignment along the side.
60
+ * @default 'center'
61
+ */
62
+ align?: Align;
63
+ /**
64
+ * Distance from the trigger in pixels.
65
+ * @default 8
66
+ */
67
+ sideOffset?: number;
68
+ /**
69
+ * Additional CSS class names.
70
+ */
71
+ className?: string;
72
+ children: React.ReactNode;
73
+ };
74
+ export type TooltipContextValue = {
75
+ open: boolean;
76
+ setOpen: (open: boolean) => void;
77
+ triggerRef: React.RefObject<HTMLElement | null>;
78
+ contentId: string;
79
+ delayDuration: number;
80
+ closeDelayDuration: number;
81
+ };
82
+ /**
83
+ * Convert side + align to Floating UI placement.
84
+ */
85
+ export declare function toPlacement(side: Side, align: Align): Placement;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Convert side + align to Floating UI placement.
3
+ */
4
+ export function toPlacement(side, align) {
5
+ if (align === 'center')
6
+ return side;
7
+ return `${side}-${align}`;
8
+ }
@@ -0,0 +1,52 @@
1
+ export type { Size, SizeExtended, SizeCompact, SizeStandard } from '../types';
2
+ export type { Theme, ThemeIntent, ThemeStatus } from '../types';
3
+ export type { IconName } from '../icons/registry';
4
+ export { Accordion } from './Accordion';
5
+ export { Avatar, AvatarGroup } from './Avatar';
6
+ export { Button } from './Button';
7
+ export { Card } from './Card';
8
+ export { Chip } from './Chip';
9
+ export { Chips } from './Chips';
10
+ export { ContentIndicator } from './ContentIndicator';
11
+ export { Dropdown, DropdownTrigger, DropdownContent, DropdownItem, useDropdown } from './Dropdown';
12
+ export { Icon } from './Icon';
13
+ export { IconButton } from './IconButton';
14
+ export { Modal } from './Modal';
15
+ export { Notice } from './Notice';
16
+ export { OverlapStack } from './OverlapStack';
17
+ export { Pager } from './Pager';
18
+ export { Progress } from './Progress';
19
+ export { Rating } from './Rating';
20
+ export { SegmentedControl } from './SegmentedControl';
21
+ export { Sidebar } from './Sidebar';
22
+ export { StepIndicator } from './StepIndicator';
23
+ export { StepList } from './StepList';
24
+ export { DataTable } from './Table';
25
+ export { Tabs } from './Tabs';
26
+ export { Toolbar } from './Toolbar';
27
+ export { Tooltip, TooltipProvider, TooltipTrigger, TooltipContent } from './Tooltip';
28
+ export type { AccordionProps, AccordionSingleProps, AccordionMultipleProps, AccordionItemProps, AccordionTriggerProps, AccordionPanelProps, } from './Accordion';
29
+ export type { AvatarProps, AvatarGroupProps, AvatarSize, AvatarShape, AvatarColor, IndicatorPosition, } from './Avatar';
30
+ export { AVATAR_COLORS } from './Avatar';
31
+ export type { ButtonProps } from './Button';
32
+ export type { CardRootProps } from './Card';
33
+ export type { ChipProps } from './Chip';
34
+ export type { ChipsProps, ChipOption } from './Chips';
35
+ export type { ContentIndicatorProps } from './ContentIndicator';
36
+ export type { DropdownProps, DropdownTriggerProps, DropdownContentProps, DropdownItemProps, } from './Dropdown';
37
+ export type { IconProps } from './Icon';
38
+ export type { IconButtonProps } from './IconButton';
39
+ export type { ModalProps } from './Modal';
40
+ export type { NoticeProps } from './Notice';
41
+ export type { OverlapStackProps, OverlapStackOverflowProps } from './OverlapStack';
42
+ export type { PagerProps, PagerMode } from './Pager';
43
+ export type { ProgressProps } from './Progress';
44
+ export type { RatingProps } from './Rating';
45
+ export type { SegmentedControlProps, SegmentedControlItemProps, SegmentedControlValue, SegmentedControlVariant, SegmentedControlSize, SegmentedControlOrientation, } from './SegmentedControl';
46
+ export type { SidebarProps, SidebarHeaderProps, SidebarNavProps } from './Sidebar';
47
+ export type { StepIndicatorProps, StepStatus } from './StepIndicator';
48
+ export type { StepListProps, StepListItemProps } from './StepList';
49
+ export type { DataTableProps } from './Table';
50
+ export type { TabsProps, TabsListProps, TabProps, TabPanelProps, TabsVariant, TabsActivationMode, TabsOrientation, } from './Tabs';
51
+ export type { ToolbarProps, ToolbarGroupProps, ToolbarItemProps, ToolbarOrientation } from './Toolbar';
52
+ export type { TooltipProps, TooltipProviderProps, TooltipTriggerProps, TooltipContentProps } from './Tooltip';
@@ -0,0 +1,26 @@
1
+ // Components
2
+ export { Accordion } from './Accordion/index.js';
3
+ export { Avatar, AvatarGroup } from './Avatar/index.js';
4
+ export { Button } from './Button/index.js';
5
+ export { Card } from './Card/index.js';
6
+ export { Chip } from './Chip/index.js';
7
+ export { Chips } from './Chips/index.js';
8
+ export { ContentIndicator } from './ContentIndicator/index.js';
9
+ export { Dropdown, DropdownTrigger, DropdownContent, DropdownItem, useDropdown } from './Dropdown/index.js';
10
+ export { Icon } from './Icon/index.js';
11
+ export { IconButton } from './IconButton/index.js';
12
+ export { Modal } from './Modal/index.js';
13
+ export { Notice } from './Notice/index.js';
14
+ export { OverlapStack } from './OverlapStack/index.js';
15
+ export { Pager } from './Pager/index.js';
16
+ export { Progress } from './Progress/index.js';
17
+ export { Rating } from './Rating/index.js';
18
+ export { SegmentedControl } from './SegmentedControl/index.js';
19
+ export { Sidebar } from './Sidebar/index.js';
20
+ export { StepIndicator } from './StepIndicator/index.js';
21
+ export { StepList } from './StepList/index.js';
22
+ export { DataTable } from './Table/index.js';
23
+ export { Tabs } from './Tabs/index.js';
24
+ export { Toolbar } from './Toolbar/index.js';
25
+ export { Tooltip, TooltipProvider, TooltipTrigger, TooltipContent } from './Tooltip/index.js';
26
+ export { AVATAR_COLORS } from './Avatar/index.js';
package/constants.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * TUI Constants
3
+ *
4
+ * Single source of truth for TS/TSX code.
5
+ *
6
+ * IMPORTANT: SCSS has its own constants in `src/styles/system/_constants.scss`.
7
+ * These must stay in sync manually. If you change PREFIX here, update $prefix there.
8
+ */
9
+ /** CSS class prefix (without trailing hyphen for composition) */
10
+ export declare const PREFIX = "tui";
11
+ /** Main wrapper class that scopes TUI styles */
12
+ export declare const INTERFACE_CLASS = "tui-interface";
13
+ /** CSS selector for interface wrapper */
14
+ export declare const INTERFACE_SELECTOR = ".tui-interface";
15
+ /** CSS container query name */
16
+ export declare const CONTAINER_NAME = "tuiContainer";
package/constants.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * TUI Constants
3
+ *
4
+ * Single source of truth for TS/TSX code.
5
+ *
6
+ * IMPORTANT: SCSS has its own constants in `src/styles/system/_constants.scss`.
7
+ * These must stay in sync manually. If you change PREFIX here, update $prefix there.
8
+ */
9
+ /** CSS class prefix (without trailing hyphen for composition) */
10
+ export const PREFIX = 'tui';
11
+ /** Main wrapper class that scopes TUI styles */
12
+ export const INTERFACE_CLASS = `${PREFIX}-interface`;
13
+ /** CSS selector for interface wrapper */
14
+ export const INTERFACE_SELECTOR = `.${INTERFACE_CLASS}`;
15
+ /** CSS container query name */
16
+ export const CONTAINER_NAME = `${PREFIX}Container`;
@@ -0,0 +1,31 @@
1
+ import type { FC, SVGProps } from 'react';
2
+
3
+ type IconComponent = FC<SVGProps<SVGSVGElement>>;
4
+
5
+ export declare const BadgeCheck: IconComponent;
6
+ export declare const BadgeRibbon: IconComponent;
7
+ export declare const Badge: IconComponent;
8
+ export declare const CheckCircle: IconComponent;
9
+ export declare const Clock: IconComponent;
10
+ export declare const Coin: IconComponent;
11
+ export declare const Crown: IconComponent;
12
+ export declare const Heart: IconComponent;
13
+ export declare const Hourglass: IconComponent;
14
+ export declare const Star: IconComponent;
15
+ export declare const Timer: IconComponent;
16
+ export declare const Trophy: IconComponent;
17
+
18
+ export declare const credIcons: {
19
+ 'badge-check': IconComponent;
20
+ 'badge-ribbon': IconComponent;
21
+ 'badge': IconComponent;
22
+ 'check-circle': IconComponent;
23
+ 'clock': IconComponent;
24
+ 'coin': IconComponent;
25
+ 'crown': IconComponent;
26
+ 'heart': IconComponent;
27
+ 'hourglass': IconComponent;
28
+ 'star': IconComponent;
29
+ 'timer': IconComponent;
30
+ 'trophy': IconComponent;
31
+ };
@@ -0,0 +1,136 @@
1
+ import { createElement as _c } from "react";
2
+
3
+ export function BadgeCheck(props) {
4
+ return _c("svg", Object.assign({
5
+ xmlns: "http://www.w3.org/2000/svg",
6
+ viewBox: "0 0 24 24",
7
+ width: "1em",
8
+ height: "1em",
9
+ fill: "currentColor"
10
+ }, props), _c("path", {fillRule:"evenodd",d:"M10.893 4.558a1.377 1.377 0 0 1 2.214 0c.381.515 1.068.7 1.656.444a1.377 1.377 0 0 1 1.917 1.106c.072.637.575 1.14 1.212 1.213a1.377 1.377 0 0 1 1.106 1.916 1.38 1.38 0 0 0 .444 1.656c.744.55.744 1.663 0 2.214a1.38 1.38 0 0 0-.444 1.656 1.377 1.377 0 0 1-1.106 1.917 1.38 1.38 0 0 0-1.212 1.212 1.377 1.377 0 0 1-1.917 1.106 1.38 1.38 0 0 0-1.656.444 1.377 1.377 0 0 1-2.214 0 1.38 1.38 0 0 0-1.656-.444 1.377 1.377 0 0 1-1.916-1.106 1.38 1.38 0 0 0-1.213-1.212 1.377 1.377 0 0 1-1.106-1.917 1.38 1.38 0 0 0-.444-1.656 1.377 1.377 0 0 1 0-2.214c.515-.381.7-1.068.444-1.656a1.377 1.377 0 0 1 1.106-1.916 1.38 1.38 0 0 0 1.213-1.213 1.377 1.377 0 0 1 1.916-1.106 1.38 1.38 0 0 0 1.656-.444m5.193 5.91a.75.75 0 0 0-1.172-.936l-3.531 4.414-1.914-1.532a.75.75 0 1 0-.937 1.172l3.085 2.468z",clipRule:"evenodd"}));
11
+ }
12
+
13
+ export function BadgeRibbon(props) {
14
+ return _c("svg", Object.assign({
15
+ xmlns: "http://www.w3.org/2000/svg",
16
+ viewBox: "0 0 24 24",
17
+ width: "1em",
18
+ height: "1em",
19
+ fill: "currentColor"
20
+ }, props), _c("path", {d:"M11.032 3.488a1.205 1.205 0 0 1 1.936 0c.334.451.935.612 1.45.388a1.205 1.205 0 0 1 1.677.969c.063.557.503.997 1.06 1.06.805.092 1.291.935.969 1.678a1.204 1.204 0 0 0 .388 1.449c.65.481.65 1.455 0 1.936a1.205 1.205 0 0 0-.388 1.45 1.205 1.205 0 0 1-.969 1.677 1.204 1.204 0 0 0-1.06 1.06 1.205 1.205 0 0 1-1.678.969 1.205 1.205 0 0 0-1.449.388c-.481.65-1.455.65-1.936 0a1.204 1.204 0 0 0-1.45-.388 1.205 1.205 0 0 1-1.677-.969 1.205 1.205 0 0 0-1.06-1.06 1.205 1.205 0 0 1-.969-1.678 1.205 1.205 0 0 0-.388-1.449 1.205 1.205 0 0 1 0-1.936c.451-.334.612-.935.388-1.45a1.205 1.205 0 0 1 .969-1.677 1.205 1.205 0 0 0 1.06-1.06 1.205 1.205 0 0 1 1.678-.969 1.205 1.205 0 0 0 1.449-.388M8 17.482c.442.175.953.185 1.437-.025a.88.88 0 0 1 1.054.282 1.877 1.877 0 0 0 3.018 0 .88.88 0 0 1 1.054-.282c.484.21.995.2 1.437.025V21l-4-2.286L8 21z"}));
21
+ }
22
+
23
+ export function Badge(props) {
24
+ return _c("svg", Object.assign({
25
+ xmlns: "http://www.w3.org/2000/svg",
26
+ viewBox: "0 0 24 24",
27
+ width: "1em",
28
+ height: "1em",
29
+ fill: "currentColor"
30
+ }, props), _c("path", {d:"M13.107 4.558a1.377 1.377 0 0 0-2.214 0c-.381.515-1.068.7-1.656.444a1.377 1.377 0 0 0-1.916 1.106 1.38 1.38 0 0 1-1.213 1.213 1.377 1.377 0 0 0-1.106 1.916 1.38 1.38 0 0 1-.444 1.656 1.377 1.377 0 0 0 0 2.214c.515.381.7 1.068.444 1.656a1.377 1.377 0 0 0 1.106 1.917c.637.072 1.14.575 1.213 1.212a1.377 1.377 0 0 0 1.916 1.106 1.38 1.38 0 0 1 1.656.444c.55.744 1.663.744 2.214 0a1.38 1.38 0 0 1 1.656-.444 1.377 1.377 0 0 0 1.917-1.106 1.38 1.38 0 0 1 1.212-1.212 1.377 1.377 0 0 0 1.106-1.917 1.38 1.38 0 0 1 .444-1.656 1.377 1.377 0 0 0 0-2.214 1.38 1.38 0 0 1-.444-1.656 1.377 1.377 0 0 0-1.106-1.916 1.38 1.38 0 0 1-1.212-1.213 1.377 1.377 0 0 0-1.917-1.106 1.38 1.38 0 0 1-1.656-.444"}));
31
+ }
32
+
33
+ export function CheckCircle(props) {
34
+ return _c("svg", Object.assign({
35
+ xmlns: "http://www.w3.org/2000/svg",
36
+ viewBox: "0 0 24 24",
37
+ width: "1em",
38
+ height: "1em",
39
+ fill: "currentColor"
40
+ }, props), _c("path", {fillRule:"evenodd",d:"M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16m4.086-10.531a.75.75 0 0 0-1.172-.937l-3.531 4.414-1.914-1.532a.75.75 0 1 0-.937 1.172l3.085 2.468z",clipRule:"evenodd"}));
41
+ }
42
+
43
+ export function Clock(props) {
44
+ return _c("svg", Object.assign({
45
+ xmlns: "http://www.w3.org/2000/svg",
46
+ viewBox: "0 0 24 24",
47
+ width: "1em",
48
+ height: "1em",
49
+ fill: "currentColor"
50
+ }, props), _c("path", {fillRule:"evenodd",d:"M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16m0-13.75a.75.75 0 0 1 .75.75v4.599l2.666 1.777a.75.75 0 1 1-.832 1.248l-2.99-1.994-.055-.039a.75.75 0 0 1-.289-.603V7a.75.75 0 0 1 .75-.75",clipRule:"evenodd"}));
51
+ }
52
+
53
+ export function Coin(props) {
54
+ return _c("svg", Object.assign({
55
+ xmlns: "http://www.w3.org/2000/svg",
56
+ viewBox: "0 0 24 24",
57
+ width: "1em",
58
+ height: "1em",
59
+ fill: "currentColor"
60
+ }, props), _c("path", {fillRule:"evenodd",d:"M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16m.686-11.859V7h-.954v1.127a3.5 3.5 0 0 0-1.052.246q-.634.258-.99.736a1.83 1.83 0 0 0-.352 1.12q0 .675.327 1.116.331.442.929.742a9.6 9.6 0 0 0 1.39.542q.511.157.813.331.307.174.437.395.135.22.135.52 0 .295-.147.526a.93.93 0 0 1-.431.353q-.283.126-.714.126-.264 0-.523-.063a1.3 1.3 0 0 1-.468-.216 1.1 1.1 0 0 1-.332-.42 1.6 1.6 0 0 1-.123-.663H9q0 .694.265 1.173.264.473.707.762.45.285.997.41.324.076.652.106V17h.948v-1.031a4 4 0 0 0 1.04-.226q.66-.248 1.022-.72.369-.474.369-1.158 0-.669-.326-1.105t-.917-.736a9 9 0 0 0-1.39-.558 5 5 0 0 1-.844-.352q-.3-.174-.43-.384a1 1 0 0 1-.124-.5q0-.295.117-.52.124-.227.382-.359.264-.13.67-.131.284 0 .505.09.228.088.388.268.159.172.246.426.086.251.086.578h1.625q0-.589-.203-1.046a2.05 2.05 0 0 0-.573-.779 2.5 2.5 0 0 0-.892-.479 3.4 3.4 0 0 0-.634-.137",clipRule:"evenodd"}));
61
+ }
62
+
63
+ export function Crown(props) {
64
+ return _c("svg", Object.assign({
65
+ xmlns: "http://www.w3.org/2000/svg",
66
+ viewBox: "0 0 24 24",
67
+ width: "1em",
68
+ height: "1em",
69
+ fill: "currentColor"
70
+ }, props), _c("path", {d:"M8 10 4 6l1 9h14l1-9-4 4-4-6zm11 10v-3H5v3z"}));
71
+ }
72
+
73
+ export function Heart(props) {
74
+ return _c("svg", Object.assign({
75
+ xmlns: "http://www.w3.org/2000/svg",
76
+ viewBox: "0 0 24 24",
77
+ width: "1em",
78
+ height: "1em",
79
+ fill: "currentColor"
80
+ }, props), _c("path", {d:"M5.206 5.396c-1.608 1.861-1.608 4.88 0 6.74L12 20l6.794-7.864c1.608-1.86 1.608-4.879 0-6.74s-4.215-1.861-5.823 0L12 6.52l-.97-1.124c-1.609-1.861-4.216-1.861-5.824 0"}));
81
+ }
82
+
83
+ export function Hourglass(props) {
84
+ return _c("svg", Object.assign({
85
+ xmlns: "http://www.w3.org/2000/svg",
86
+ viewBox: "0 0 24 24",
87
+ width: "1em",
88
+ height: "1em",
89
+ fill: "currentColor"
90
+ }, props), _c("path", {fillRule:"evenodd",d:"M7 6v.536A6 6 0 0 0 10.52 12 6 6 0 0 0 7 17.464V18H5v2h14v-2h-2v-.536A6 6 0 0 0 13.48 12 6 6 0 0 0 17 6.536V6h2V4H5v2zm8.5 0v.536c0 .898-.267 1.749-.735 2.464h-5.53A4.5 4.5 0 0 1 8.5 6.536V6z",clipRule:"evenodd"}));
91
+ }
92
+
93
+ export function Star(props) {
94
+ return _c("svg", Object.assign({
95
+ xmlns: "http://www.w3.org/2000/svg",
96
+ viewBox: "0 0 24 24",
97
+ width: "1em",
98
+ height: "1em",
99
+ fill: "currentColor"
100
+ }, props), _c("path", {d:"M10.907 4.67a1.228 1.228 0 0 1 2.186 0l1.567 3.07c.178.349.513.592.9.654l3.404.54a1.228 1.228 0 0 1 .676 2.08l-2.436 2.439a1.23 1.23 0 0 0-.344 1.059l.537 3.404c.157.99-.875 1.74-1.769 1.285l-3.071-1.562a1.23 1.23 0 0 0-1.114 0L8.372 19.2a1.228 1.228 0 0 1-1.77-1.285l.538-3.404a1.23 1.23 0 0 0-.344-1.059L4.36 11.015a1.228 1.228 0 0 1 .676-2.08l3.404-.541c.387-.062.722-.305.9-.655z"}));
101
+ }
102
+
103
+ export function Timer(props) {
104
+ return _c("svg", Object.assign({
105
+ xmlns: "http://www.w3.org/2000/svg",
106
+ viewBox: "0 0 24 24",
107
+ width: "1em",
108
+ height: "1em",
109
+ fill: "currentColor"
110
+ }, props), _c("path", {fillRule:"evenodd",d:"M12.5 2a.5.5 0 0 1 .5.5v1.53a7.95 7.95 0 0 1 3.447 1.288l.679-.766a.5.5 0 0 1 .706-.042l.748.664a.5.5 0 0 1 .042.705l-.665.75A8 8 0 1 1 6.055 6.61l-.68-.765a.5.5 0 0 1 .043-.706l.748-.663a.5.5 0 0 1 .706.042l.696.786A7.95 7.95 0 0 1 11 4.028V2.5a.5.5 0 0 1 .5-.5zm3.677 6.991c.254-.254-.068-.647-.368-.45-1.724 1.139-3.84 2.544-4.269 2.866a.75.75 0 1 0 .9 1.2c.432-.323 2.263-2.137 3.737-3.616",clipRule:"evenodd"}));
111
+ }
112
+
113
+ export function Trophy(props) {
114
+ return _c("svg", Object.assign({
115
+ xmlns: "http://www.w3.org/2000/svg",
116
+ viewBox: "0 0 24 24",
117
+ width: "1em",
118
+ height: "1em",
119
+ fill: "currentColor"
120
+ }, props), _c("path", {fillRule:"evenodd",d:"M7 4h10v2.25h3.75V9a4.75 4.75 0 0 1-4.571 4.747A5 5 0 0 1 13 15.9v.6a1.5 1.5 0 0 0 1.5 1.5H16v2H8v-2h1.5a1.5 1.5 0 0 0 1.5-1.5v-.6a5 5 0 0 1-3.179-2.153A4.75 4.75 0 0 1 3.25 9V6.25H7zm0 3.75H4.75V9a3.25 3.25 0 0 0 2.379 3.132A5 5 0 0 1 7 11zM17 11V7.75h2.25V9a3.25 3.25 0 0 1-2.379 3.132Q17 11.585 17 11",clipRule:"evenodd"}));
121
+ }
122
+
123
+ export const credIcons = {
124
+ 'badge-check': BadgeCheck,
125
+ 'badge-ribbon': BadgeRibbon,
126
+ 'badge': Badge,
127
+ 'check-circle': CheckCircle,
128
+ 'clock': Clock,
129
+ 'coin': Coin,
130
+ 'crown': Crown,
131
+ 'heart': Heart,
132
+ 'hourglass': Hourglass,
133
+ 'star': Star,
134
+ 'timer': Timer,
135
+ 'trophy': Trophy,
136
+ };