@tokis/react 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.
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/cjs/components/accordion/index.js +36 -0
- package/dist/cjs/components/alert/index.js +14 -0
- package/dist/cjs/components/app-bar/index.js +9 -0
- package/dist/cjs/components/avatar/index.js +64 -0
- package/dist/cjs/components/badge/index.js +6 -0
- package/dist/cjs/components/bottom-nav/index.js +12 -0
- package/dist/cjs/components/breadcrumbs/index.js +19 -0
- package/dist/cjs/components/button/ButtonIcon.js +9 -0
- package/dist/cjs/components/button/ButtonLabel.js +9 -0
- package/dist/cjs/components/button/ButtonRoot.js +23 -0
- package/dist/cjs/components/button/index.js +11 -0
- package/dist/cjs/components/button/useButton.js +14 -0
- package/dist/cjs/components/card/index.js +25 -0
- package/dist/cjs/components/charts/index.js +214 -0
- package/dist/cjs/components/checkbox/index.js +18 -0
- package/dist/cjs/components/chip/index.js +6 -0
- package/dist/cjs/components/circular-progress/index.js +28 -0
- package/dist/cjs/components/codeblock/CodeBlock.js +35 -0
- package/dist/cjs/components/codeblock/index.js +5 -0
- package/dist/cjs/components/command-palette/index.js +84 -0
- package/dist/cjs/components/confirm-dialog/index.js +10 -0
- package/dist/cjs/components/context-menu/index.js +82 -0
- package/dist/cjs/components/dialog/index.js +43 -0
- package/dist/cjs/components/divider/index.js +6 -0
- package/dist/cjs/components/drawer/index.js +37 -0
- package/dist/cjs/components/dropdown/index.js +104 -0
- package/dist/cjs/components/emptystate/index.js +9 -0
- package/dist/cjs/components/extended/index.js +329 -0
- package/dist/cjs/components/hover-card/index.js +107 -0
- package/dist/cjs/components/infinite-scroll/index.js +21 -0
- package/dist/cjs/components/input/index.js +27 -0
- package/dist/cjs/components/layout/index.js +34 -0
- package/dist/cjs/components/link/index.js +7 -0
- package/dist/cjs/components/list/index.js +14 -0
- package/dist/cjs/components/menu/index.js +120 -0
- package/dist/cjs/components/nav-rail/index.js +12 -0
- package/dist/cjs/components/pagination/index.js +46 -0
- package/dist/cjs/components/popover/index.js +114 -0
- package/dist/cjs/components/portal/index.js +10 -0
- package/dist/cjs/components/progress/index.js +21 -0
- package/dist/cjs/components/radio/index.js +60 -0
- package/dist/cjs/components/result/index.js +25 -0
- package/dist/cjs/components/search-field/index.js +30 -0
- package/dist/cjs/components/select/index.js +88 -0
- package/dist/cjs/components/skeleton/index.js +6 -0
- package/dist/cjs/components/slider/index.js +73 -0
- package/dist/cjs/components/snackbar/index.js +41 -0
- package/dist/cjs/components/spinner/index.js +6 -0
- package/dist/cjs/components/statistic/index.js +17 -0
- package/dist/cjs/components/stepper/index.js +24 -0
- package/dist/cjs/components/switch/index.js +19 -0
- package/dist/cjs/components/table/index.js +26 -0
- package/dist/cjs/components/tabs/index.js +44 -0
- package/dist/cjs/components/tag/index.js +6 -0
- package/dist/cjs/components/timeline/index.js +12 -0
- package/dist/cjs/components/toggle/index.js +32 -0
- package/dist/cjs/components/tooltip/index.js +116 -0
- package/dist/cjs/components/treeview/index.js +89 -0
- package/dist/cjs/components/typography/index.js +20 -0
- package/dist/cjs/components/virtual-list/index.js +25 -0
- package/dist/cjs/context/ConfigProvider.js +22 -0
- package/dist/cjs/context/ThemeContext.js +25 -0
- package/dist/cjs/hooks/useControllableState.js +31 -0
- package/dist/cjs/hooks/useDialog.js +35 -0
- package/dist/cjs/hooks/useId.js +13 -0
- package/dist/cjs/hooks/useMenu.js +64 -0
- package/dist/cjs/hooks/usePopover.js +32 -0
- package/dist/cjs/hooks/useTabs.js +51 -0
- package/dist/cjs/index.js +102 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/utils/cn.js +10 -0
- package/dist/components/accordion/index.d.ts +19 -0
- package/dist/components/accordion/index.d.ts.map +1 -0
- package/dist/components/accordion/index.js +34 -0
- package/dist/components/accordion/index.js.map +1 -0
- package/dist/components/alert/index.d.ts +11 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +12 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/app-bar/index.d.ts +17 -0
- package/dist/components/app-bar/index.d.ts.map +1 -0
- package/dist/components/app-bar/index.js +7 -0
- package/dist/components/app-bar/index.js.map +1 -0
- package/dist/components/avatar/index.d.ts +33 -0
- package/dist/components/avatar/index.d.ts.map +1 -0
- package/dist/components/avatar/index.js +28 -0
- package/dist/components/avatar/index.js.map +1 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +3 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/bottom-nav/index.d.ts +18 -0
- package/dist/components/bottom-nav/index.d.ts.map +1 -0
- package/dist/components/bottom-nav/index.js +10 -0
- package/dist/components/bottom-nav/index.js.map +1 -0
- package/dist/components/breadcrumbs/index.d.ts +19 -0
- package/dist/components/breadcrumbs/index.d.ts.map +1 -0
- package/dist/components/breadcrumbs/index.js +17 -0
- package/dist/components/breadcrumbs/index.js.map +1 -0
- package/dist/components/button/ButtonIcon.d.ts +8 -0
- package/dist/components/button/ButtonIcon.d.ts.map +1 -0
- package/dist/components/button/ButtonIcon.js +6 -0
- package/dist/components/button/ButtonIcon.js.map +1 -0
- package/dist/components/button/ButtonLabel.d.ts +6 -0
- package/dist/components/button/ButtonLabel.d.ts.map +1 -0
- package/dist/components/button/ButtonLabel.js +6 -0
- package/dist/components/button/ButtonLabel.js.map +1 -0
- package/dist/components/button/ButtonRoot.d.ts +15 -0
- package/dist/components/button/ButtonRoot.d.ts.map +1 -0
- package/dist/components/button/ButtonRoot.js +21 -0
- package/dist/components/button/ButtonRoot.js.map +1 -0
- package/dist/components/button/index.d.ts +9 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +5 -0
- package/dist/components/button/index.js.map +1 -0
- package/dist/components/button/useButton.d.ts +16 -0
- package/dist/components/button/useButton.d.ts.map +1 -0
- package/dist/components/button/useButton.js +12 -0
- package/dist/components/button/useButton.js.map +1 -0
- package/dist/components/card/index.d.ts +17 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/index.js +23 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/charts/index.d.ts +60 -0
- package/dist/components/charts/index.d.ts.map +1 -0
- package/dist/components/charts/index.js +209 -0
- package/dist/components/charts/index.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +17 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +16 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/chip/index.d.ts +3 -0
- package/dist/components/chip/index.d.ts.map +1 -0
- package/dist/components/chip/index.js +3 -0
- package/dist/components/chip/index.js.map +1 -0
- package/dist/components/circular-progress/index.d.ts +15 -0
- package/dist/components/circular-progress/index.d.ts.map +1 -0
- package/dist/components/circular-progress/index.js +26 -0
- package/dist/components/circular-progress/index.js.map +1 -0
- package/dist/components/codeblock/CodeBlock.d.ts +13 -0
- package/dist/components/codeblock/CodeBlock.d.ts.map +1 -0
- package/dist/components/codeblock/CodeBlock.js +32 -0
- package/dist/components/codeblock/CodeBlock.js.map +1 -0
- package/dist/components/codeblock/index.d.ts +3 -0
- package/dist/components/codeblock/index.d.ts.map +1 -0
- package/dist/components/codeblock/index.js +2 -0
- package/dist/components/codeblock/index.js.map +1 -0
- package/dist/components/command-palette/index.d.ts +22 -0
- package/dist/components/command-palette/index.d.ts.map +1 -0
- package/dist/components/command-palette/index.js +82 -0
- package/dist/components/command-palette/index.js.map +1 -0
- package/dist/components/confirm-dialog/index.d.ts +17 -0
- package/dist/components/confirm-dialog/index.d.ts.map +1 -0
- package/dist/components/confirm-dialog/index.js +8 -0
- package/dist/components/confirm-dialog/index.js.map +1 -0
- package/dist/components/context-menu/index.d.ts +19 -0
- package/dist/components/context-menu/index.d.ts.map +1 -0
- package/dist/components/context-menu/index.js +47 -0
- package/dist/components/context-menu/index.js.map +1 -0
- package/dist/components/dialog/index.d.ts +16 -0
- package/dist/components/dialog/index.d.ts.map +1 -0
- package/dist/components/dialog/index.js +41 -0
- package/dist/components/dialog/index.js.map +1 -0
- package/dist/components/divider/index.d.ts +3 -0
- package/dist/components/divider/index.d.ts.map +1 -0
- package/dist/components/divider/index.js +3 -0
- package/dist/components/divider/index.js.map +1 -0
- package/dist/components/drawer/index.d.ts +16 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/index.js +35 -0
- package/dist/components/drawer/index.js.map +1 -0
- package/dist/components/dropdown/index.d.ts +16 -0
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dropdown/index.js +69 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/emptystate/index.d.ts +13 -0
- package/dist/components/emptystate/index.d.ts.map +1 -0
- package/dist/components/emptystate/index.js +7 -0
- package/dist/components/emptystate/index.js.map +1 -0
- package/dist/components/extended/index.d.ts +163 -0
- package/dist/components/extended/index.d.ts.map +1 -0
- package/dist/components/extended/index.js +267 -0
- package/dist/components/extended/index.js.map +1 -0
- package/dist/components/hover-card/index.d.ts +14 -0
- package/dist/components/hover-card/index.d.ts.map +1 -0
- package/dist/components/hover-card/index.js +72 -0
- package/dist/components/hover-card/index.js.map +1 -0
- package/dist/components/infinite-scroll/index.d.ts +16 -0
- package/dist/components/infinite-scroll/index.d.ts.map +1 -0
- package/dist/components/infinite-scroll/index.js +19 -0
- package/dist/components/infinite-scroll/index.js.map +1 -0
- package/dist/components/input/index.d.ts +19 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/index.js +25 -0
- package/dist/components/input/index.js.map +1 -0
- package/dist/components/layout/index.d.ts +39 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/index.js +32 -0
- package/dist/components/layout/index.js.map +1 -0
- package/dist/components/link/index.d.ts +3 -0
- package/dist/components/link/index.d.ts.map +1 -0
- package/dist/components/link/index.js +3 -0
- package/dist/components/link/index.js.map +1 -0
- package/dist/components/list/index.d.ts +13 -0
- package/dist/components/list/index.d.ts.map +1 -0
- package/dist/components/list/index.js +12 -0
- package/dist/components/list/index.js.map +1 -0
- package/dist/components/menu/index.d.ts +19 -0
- package/dist/components/menu/index.d.ts.map +1 -0
- package/dist/components/menu/index.js +85 -0
- package/dist/components/menu/index.js.map +1 -0
- package/dist/components/nav-rail/index.d.ts +20 -0
- package/dist/components/nav-rail/index.d.ts.map +1 -0
- package/dist/components/nav-rail/index.js +10 -0
- package/dist/components/nav-rail/index.js.map +1 -0
- package/dist/components/pagination/index.d.ts +9 -0
- package/dist/components/pagination/index.d.ts.map +1 -0
- package/dist/components/pagination/index.js +44 -0
- package/dist/components/pagination/index.js.map +1 -0
- package/dist/components/popover/index.d.ts +16 -0
- package/dist/components/popover/index.d.ts.map +1 -0
- package/dist/components/popover/index.js +79 -0
- package/dist/components/popover/index.js.map +1 -0
- package/dist/components/portal/index.d.ts +7 -0
- package/dist/components/portal/index.d.ts.map +1 -0
- package/dist/components/portal/index.js +8 -0
- package/dist/components/portal/index.js.map +1 -0
- package/dist/components/progress/index.d.ts +25 -0
- package/dist/components/progress/index.d.ts.map +1 -0
- package/dist/components/progress/index.js +19 -0
- package/dist/components/progress/index.js.map +1 -0
- package/dist/components/radio/index.d.ts +25 -0
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +24 -0
- package/dist/components/radio/index.js.map +1 -0
- package/dist/components/result/index.d.ts +14 -0
- package/dist/components/result/index.d.ts.map +1 -0
- package/dist/components/result/index.js +23 -0
- package/dist/components/result/index.js.map +1 -0
- package/dist/components/search-field/index.d.ts +15 -0
- package/dist/components/search-field/index.d.ts.map +1 -0
- package/dist/components/search-field/index.js +28 -0
- package/dist/components/search-field/index.js.map +1 -0
- package/dist/components/select/index.d.ts +23 -0
- package/dist/components/select/index.d.ts.map +1 -0
- package/dist/components/select/index.js +86 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/components/skeleton/index.d.ts +3 -0
- package/dist/components/skeleton/index.d.ts.map +1 -0
- package/dist/components/skeleton/index.js +3 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/slider/index.d.ts +18 -0
- package/dist/components/slider/index.d.ts.map +1 -0
- package/dist/components/slider/index.js +71 -0
- package/dist/components/slider/index.js.map +1 -0
- package/dist/components/snackbar/index.d.ts +27 -0
- package/dist/components/snackbar/index.d.ts.map +1 -0
- package/dist/components/snackbar/index.js +38 -0
- package/dist/components/snackbar/index.js.map +1 -0
- package/dist/components/spinner/index.d.ts +3 -0
- package/dist/components/spinner/index.d.ts.map +1 -0
- package/dist/components/spinner/index.js +3 -0
- package/dist/components/spinner/index.js.map +1 -0
- package/dist/components/statistic/index.d.ts +13 -0
- package/dist/components/statistic/index.d.ts.map +1 -0
- package/dist/components/statistic/index.js +15 -0
- package/dist/components/statistic/index.js.map +1 -0
- package/dist/components/stepper/index.d.ts +17 -0
- package/dist/components/stepper/index.d.ts.map +1 -0
- package/dist/components/stepper/index.js +22 -0
- package/dist/components/stepper/index.js.map +1 -0
- package/dist/components/switch/index.d.ts +16 -0
- package/dist/components/switch/index.d.ts.map +1 -0
- package/dist/components/switch/index.js +17 -0
- package/dist/components/switch/index.js.map +1 -0
- package/dist/components/table/index.d.ts +17 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js +24 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/tabs/index.d.ts +19 -0
- package/dist/components/tabs/index.d.ts.map +1 -0
- package/dist/components/tabs/index.js +42 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/tag/index.d.ts +3 -0
- package/dist/components/tag/index.d.ts.map +1 -0
- package/dist/components/tag/index.js +3 -0
- package/dist/components/tag/index.js.map +1 -0
- package/dist/components/timeline/index.d.ts +16 -0
- package/dist/components/timeline/index.d.ts.map +1 -0
- package/dist/components/timeline/index.js +10 -0
- package/dist/components/timeline/index.js.map +1 -0
- package/dist/components/toggle/index.d.ts +32 -0
- package/dist/components/toggle/index.d.ts.map +1 -0
- package/dist/components/toggle/index.js +29 -0
- package/dist/components/toggle/index.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +11 -0
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/index.js +81 -0
- package/dist/components/tooltip/index.js.map +1 -0
- package/dist/components/treeview/index.d.ts +19 -0
- package/dist/components/treeview/index.d.ts.map +1 -0
- package/dist/components/treeview/index.js +87 -0
- package/dist/components/treeview/index.js.map +1 -0
- package/dist/components/typography/index.d.ts +11 -0
- package/dist/components/typography/index.d.ts.map +1 -0
- package/dist/components/typography/index.js +18 -0
- package/dist/components/typography/index.js.map +1 -0
- package/dist/components/virtual-list/index.d.ts +15 -0
- package/dist/components/virtual-list/index.d.ts.map +1 -0
- package/dist/components/virtual-list/index.js +23 -0
- package/dist/components/virtual-list/index.js.map +1 -0
- package/dist/context/ConfigProvider.d.ts +12 -0
- package/dist/context/ConfigProvider.d.ts.map +1 -0
- package/dist/context/ConfigProvider.js +18 -0
- package/dist/context/ConfigProvider.js.map +1 -0
- package/dist/context/ThemeContext.d.ts +15 -0
- package/dist/context/ThemeContext.d.ts.map +1 -0
- package/dist/context/ThemeContext.js +21 -0
- package/dist/context/ThemeContext.js.map +1 -0
- package/dist/hooks/useControllableState.d.ts +10 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useControllableState.js +29 -0
- package/dist/hooks/useControllableState.js.map +1 -0
- package/dist/hooks/useDialog.d.ts +24 -0
- package/dist/hooks/useDialog.d.ts.map +1 -0
- package/dist/hooks/useDialog.js +33 -0
- package/dist/hooks/useDialog.js.map +1 -0
- package/dist/hooks/useId.d.ts +7 -0
- package/dist/hooks/useId.d.ts.map +1 -0
- package/dist/hooks/useId.js +11 -0
- package/dist/hooks/useId.js.map +1 -0
- package/dist/hooks/useMenu.d.ts +21 -0
- package/dist/hooks/useMenu.d.ts.map +1 -0
- package/dist/hooks/useMenu.js +62 -0
- package/dist/hooks/useMenu.js.map +1 -0
- package/dist/hooks/usePopover.d.ts +22 -0
- package/dist/hooks/usePopover.d.ts.map +1 -0
- package/dist/hooks/usePopover.js +30 -0
- package/dist/hooks/usePopover.js.map +1 -0
- package/dist/hooks/useTabs.d.ts +22 -0
- package/dist/hooks/useTabs.d.ts.map +1 -0
- package/dist/hooks/useTabs.js +49 -0
- package/dist/hooks/useTabs.js.map +1 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/cn.d.ts +6 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +8 -0
- package/dist/utils/cn.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState, useRef, useEffect, useCallback, useId } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
import { Portal } from '../portal/index.js';
|
|
5
|
+
export function Tooltip({ content, children, placement = 'top', delay = 300, disabled = false }) {
|
|
6
|
+
const [state, setState] = useState({ visible: false, top: 0, left: 0, placement });
|
|
7
|
+
const triggerRef = useRef(null);
|
|
8
|
+
const timerRef = useRef();
|
|
9
|
+
const tooltipId = useId();
|
|
10
|
+
// When placement prop changes and tooltip is visible, recompute
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (state.visible && triggerRef.current) {
|
|
13
|
+
const rect = triggerRef.current.getBoundingClientRect();
|
|
14
|
+
const { top, left } = computePosition(rect, placement);
|
|
15
|
+
setState((prev) => ({ ...prev, top, left, placement }));
|
|
16
|
+
}
|
|
17
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
18
|
+
}, [placement]);
|
|
19
|
+
const show = useCallback(() => {
|
|
20
|
+
timerRef.current = setTimeout(() => {
|
|
21
|
+
if (!triggerRef.current)
|
|
22
|
+
return;
|
|
23
|
+
const rect = triggerRef.current.getBoundingClientRect();
|
|
24
|
+
const { top, left } = computePosition(rect, placement);
|
|
25
|
+
// Single atomic state update — position + visible at once
|
|
26
|
+
setState({ visible: true, top, left, placement });
|
|
27
|
+
}, delay);
|
|
28
|
+
}, [delay, placement]);
|
|
29
|
+
const hide = useCallback(() => {
|
|
30
|
+
clearTimeout(timerRef.current);
|
|
31
|
+
setState((prev) => ({ ...prev, visible: false }));
|
|
32
|
+
}, []);
|
|
33
|
+
useEffect(() => () => clearTimeout(timerRef.current), []);
|
|
34
|
+
const transformMap = {
|
|
35
|
+
top: 'translateX(-50%) translateY(-100%)',
|
|
36
|
+
bottom: 'translateX(-50%)',
|
|
37
|
+
left: 'translateX(-100%) translateY(-50%)',
|
|
38
|
+
right: 'translateY(-50%)',
|
|
39
|
+
};
|
|
40
|
+
return (_jsxs(_Fragment, { children: [React.cloneElement(children, {
|
|
41
|
+
ref: triggerRef,
|
|
42
|
+
'aria-describedby': state.visible ? tooltipId : undefined,
|
|
43
|
+
onMouseEnter: (...args) => {
|
|
44
|
+
if (!disabled)
|
|
45
|
+
show();
|
|
46
|
+
children.props.onMouseEnter?.(...args);
|
|
47
|
+
},
|
|
48
|
+
onMouseLeave: (...args) => {
|
|
49
|
+
hide();
|
|
50
|
+
children.props.onMouseLeave?.(...args);
|
|
51
|
+
},
|
|
52
|
+
onFocus: (...args) => {
|
|
53
|
+
if (!disabled)
|
|
54
|
+
show();
|
|
55
|
+
children.props.onFocus?.(...args);
|
|
56
|
+
},
|
|
57
|
+
onBlur: (...args) => {
|
|
58
|
+
hide();
|
|
59
|
+
children.props.onBlur?.(...args);
|
|
60
|
+
},
|
|
61
|
+
}), state.visible && !disabled && (_jsx(Portal, { children: _jsx("div", { id: tooltipId, role: "tooltip", className: cn('tokis-tooltip-content', `tokis-tooltip-content--${state.placement}`), style: {
|
|
62
|
+
position: 'fixed',
|
|
63
|
+
top: state.top,
|
|
64
|
+
left: state.left,
|
|
65
|
+
transform: transformMap[state.placement],
|
|
66
|
+
}, children: content }) }))] }));
|
|
67
|
+
}
|
|
68
|
+
function computePosition(rect, placement) {
|
|
69
|
+
const gap = 8;
|
|
70
|
+
switch (placement) {
|
|
71
|
+
case 'top':
|
|
72
|
+
return { top: rect.top - gap, left: rect.left + rect.width / 2 };
|
|
73
|
+
case 'bottom':
|
|
74
|
+
return { top: rect.bottom + gap, left: rect.left + rect.width / 2 };
|
|
75
|
+
case 'left':
|
|
76
|
+
return { top: rect.top + rect.height / 2, left: rect.left - gap };
|
|
77
|
+
case 'right':
|
|
78
|
+
return { top: rect.top + rect.height / 2, left: rect.right + gap };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/tooltip/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface TreeNode {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
children?: TreeNode[];
|
|
6
|
+
icon?: React.ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface TreeViewProps {
|
|
10
|
+
data: TreeNode[];
|
|
11
|
+
selected?: string[];
|
|
12
|
+
onSelect?: (id: string) => void;
|
|
13
|
+
expanded?: string[];
|
|
14
|
+
onExpand?: (id: string) => void;
|
|
15
|
+
multiSelect?: boolean;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function TreeView({ data, selected, onSelect, expanded, onExpand, multiSelect, className, }: TreeViewProps): JSX.Element;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/treeview/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0ID,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAa,EACb,QAAQ,EACR,QAAa,EACb,QAAQ,EACR,WAAmB,EACnB,SAAS,GACV,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAkD7B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useRef } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
function flattenVisible(nodes, expanded) {
|
|
5
|
+
const result = [];
|
|
6
|
+
function walk(items) {
|
|
7
|
+
for (const node of items) {
|
|
8
|
+
result.push(node);
|
|
9
|
+
if (node.children && expanded.includes(node.id)) {
|
|
10
|
+
walk(node.children);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
walk(nodes);
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
function TreeItem({ node, level, selected, expanded, onSelect, onExpand, multiSelect, allNodes, onKeyNav, }) {
|
|
18
|
+
const hasChildren = Boolean(node.children && node.children.length > 0);
|
|
19
|
+
const isExpanded = expanded.includes(node.id);
|
|
20
|
+
const isSelected = selected.includes(node.id);
|
|
21
|
+
const handleKeyDown = (e) => {
|
|
22
|
+
switch (e.key) {
|
|
23
|
+
case 'ArrowRight':
|
|
24
|
+
e.preventDefault();
|
|
25
|
+
if (hasChildren && !isExpanded)
|
|
26
|
+
onExpand(node.id);
|
|
27
|
+
else if (hasChildren && isExpanded)
|
|
28
|
+
onKeyNav(node.id, 'down');
|
|
29
|
+
break;
|
|
30
|
+
case 'ArrowLeft':
|
|
31
|
+
e.preventDefault();
|
|
32
|
+
if (hasChildren && isExpanded)
|
|
33
|
+
onExpand(node.id);
|
|
34
|
+
else
|
|
35
|
+
onKeyNav(node.id, 'up');
|
|
36
|
+
break;
|
|
37
|
+
case 'ArrowDown':
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
onKeyNav(node.id, 'down');
|
|
40
|
+
break;
|
|
41
|
+
case 'ArrowUp':
|
|
42
|
+
e.preventDefault();
|
|
43
|
+
onKeyNav(node.id, 'up');
|
|
44
|
+
break;
|
|
45
|
+
case 'Enter':
|
|
46
|
+
case ' ':
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
if (!node.disabled)
|
|
49
|
+
onSelect(node.id);
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return (_jsxs("li", { role: "none", children: [_jsxs("div", { role: "treeitem", "aria-expanded": hasChildren ? isExpanded : undefined, "aria-selected": isSelected, "aria-disabled": node.disabled, "aria-level": level, tabIndex: node.disabled ? -1 : 0, className: cn('tokis-treeview__item', isSelected && 'tokis-treeview__item--selected', node.disabled && 'tokis-treeview__item--disabled'), style: { paddingLeft: `calc(${(level - 1) * 20}px + var(--tokis-spacing-2))` }, onClick: () => {
|
|
54
|
+
if (node.disabled)
|
|
55
|
+
return;
|
|
56
|
+
if (hasChildren)
|
|
57
|
+
onExpand(node.id);
|
|
58
|
+
onSelect(node.id);
|
|
59
|
+
}, onKeyDown: handleKeyDown, "data-id": node.id, children: [hasChildren ? (_jsx("span", { className: cn('tokis-treeview__chevron', isExpanded && 'tokis-treeview__chevron--open'), "aria-hidden": "true", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: _jsx("path", { d: "M4 3l4 3-4 3", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })) : (_jsx("span", { className: "tokis-treeview__leaf-spacer", "aria-hidden": "true" })), node.icon && (_jsx("span", { className: "tokis-treeview__icon", "aria-hidden": "true", children: node.icon })), _jsx("span", { className: "tokis-treeview__label", children: node.label })] }), hasChildren && isExpanded && (_jsx("ul", { role: "group", className: "tokis-treeview__group", "aria-label": node.label, children: node.children.map((child) => (_jsx(TreeItem, { node: child, level: level + 1, selected: selected, expanded: expanded, onSelect: onSelect, onExpand: onExpand, multiSelect: multiSelect, allNodes: allNodes, onKeyNav: onKeyNav }, child.id))) }))] }));
|
|
60
|
+
}
|
|
61
|
+
export function TreeView({ data, selected = [], onSelect, expanded = [], onExpand, multiSelect = false, className, }) {
|
|
62
|
+
const treeRef = useRef(null);
|
|
63
|
+
const handleSelect = useCallback((id) => {
|
|
64
|
+
onSelect?.(id);
|
|
65
|
+
}, [onSelect]);
|
|
66
|
+
const handleExpand = useCallback((id) => {
|
|
67
|
+
onExpand?.(id);
|
|
68
|
+
}, [onExpand]);
|
|
69
|
+
const handleKeyNav = useCallback((currentId, direction) => {
|
|
70
|
+
const visible = flattenVisible(data, expanded);
|
|
71
|
+
const currentIndex = visible.findIndex((n) => n.id === currentId);
|
|
72
|
+
if (currentIndex === -1)
|
|
73
|
+
return;
|
|
74
|
+
let targetIndex;
|
|
75
|
+
if (direction === 'down')
|
|
76
|
+
targetIndex = Math.min(currentIndex + 1, visible.length - 1);
|
|
77
|
+
if (direction === 'up')
|
|
78
|
+
targetIndex = Math.max(currentIndex - 1, 0);
|
|
79
|
+
if (targetIndex !== undefined && targetIndex !== currentIndex) {
|
|
80
|
+
const targetId = visible[targetIndex].id;
|
|
81
|
+
const el = treeRef.current?.querySelector(`[data-id="${targetId}"]`);
|
|
82
|
+
el?.focus();
|
|
83
|
+
}
|
|
84
|
+
}, [data, expanded]);
|
|
85
|
+
return (_jsx("ul", { ref: treeRef, role: "tree", "aria-multiselectable": multiSelect, className: cn('tokis-treeview', className), children: data.map((node) => (_jsx(TreeItem, { node: node, level: 1, selected: selected, expanded: expanded, onSelect: handleSelect, onExpand: handleExpand, multiSelect: multiSelect, allNodes: data, onKeyNav: handleKeyNav }, node.id))) }));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/treeview/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface TypographyProps extends React.HTMLAttributes<HTMLElement> {
|
|
3
|
+
as?: React.ElementType;
|
|
4
|
+
variant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body1' | 'body2' | 'caption' | 'label' | 'code' | 'overline';
|
|
5
|
+
color?: 'primary' | 'secondary' | 'tertiary' | 'error' | 'success' | 'warning' | 'inherit';
|
|
6
|
+
truncate?: boolean;
|
|
7
|
+
weight?: 'regular' | 'medium' | 'semibold' | 'bold';
|
|
8
|
+
align?: 'left' | 'center' | 'right';
|
|
9
|
+
}
|
|
10
|
+
export declare const Typography: React.ForwardRefExoticComponent<TypographyProps & React.RefAttributes<HTMLElement>>;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IACxE,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACvB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IAClH,KAAK,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACrC;AAaD,eAAO,MAAM,UAAU,qFA4BrB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
const variantElementMap = {
|
|
5
|
+
h1: 'h1', h2: 'h2', h3: 'h3', h4: 'h4', h5: 'h5', h6: 'h6',
|
|
6
|
+
body1: 'p', body2: 'p', caption: 'span', label: 'label', code: 'code', overline: 'span',
|
|
7
|
+
};
|
|
8
|
+
const variantClassMap = {
|
|
9
|
+
h1: 'tokis-h1', h2: 'tokis-h2', h3: 'tokis-h3', h4: 'tokis-h4', h5: 'tokis-h5', h6: 'tokis-h6',
|
|
10
|
+
body1: 'tokis-text', body2: 'tokis-text', caption: 'tokis-text', label: 'tokis-text',
|
|
11
|
+
code: 'tokis-code', overline: 'tokis-text',
|
|
12
|
+
};
|
|
13
|
+
export const Typography = forwardRef(({ as, variant = 'body1', color, truncate, weight, align, className, children, ...props }, ref) => {
|
|
14
|
+
const Component = as ?? variantElementMap[variant] ?? 'p';
|
|
15
|
+
return (_jsx(Component, { ref: ref, className: cn(variantClassMap[variant], color && color !== 'inherit' && `tokis-text--${color}`, truncate && 'tokis-text--truncate', weight && `tokis-text--weight-${weight}`, align && `tokis-text--align-${align}`, className), ...props, children: children }));
|
|
16
|
+
});
|
|
17
|
+
Typography.displayName = 'Typography';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/typography/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAWvC,MAAM,iBAAiB,GAAsC;IAC3D,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI;IAC1D,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CACxF,CAAC;AAEF,MAAM,eAAe,GAA2B;IAC9C,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU;IAC9F,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY;IACpF,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAA+B,CAAC,EAClE,EAAE,EACF,OAAO,GAAG,OAAO,EACjB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,GAAG,EAAE,EAAE;IACR,MAAM,SAAS,GAAG,EAAE,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;IAC1D,OAAO,CACL,KAAC,SAAS,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,eAAe,CAAC,OAAO,CAAC,EACxB,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,eAAe,KAAK,EAAE,EACtD,QAAQ,IAAI,sBAAsB,EAClC,MAAM,IAAI,sBAAsB,MAAM,EAAE,EACxC,KAAK,IAAI,qBAAqB,KAAK,EAAE,EACrC,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACC,CACb,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface VirtualizedListProps<T> {
|
|
3
|
+
items: T[];
|
|
4
|
+
itemHeight: number;
|
|
5
|
+
height: number;
|
|
6
|
+
renderItem: (item: T, index: number) => React.ReactNode;
|
|
7
|
+
overscan?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
getItemKey?: (item: T, index: number) => string | number;
|
|
10
|
+
}
|
|
11
|
+
export declare function VirtualizedList<T>({ items, itemHeight, height, renderItem, overscan, className, getItemKey, }: VirtualizedListProps<T>): JSX.Element;
|
|
12
|
+
export declare namespace VirtualizedList {
|
|
13
|
+
var displayName: string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/virtual-list/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;CAC1D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,EACjC,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAY,EACZ,SAAS,EACT,UAAU,GACX,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAsCvC;yBA9Ce,eAAe"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useCallback } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
export function VirtualizedList({ items, itemHeight, height, renderItem, overscan = 3, className, getItemKey, }) {
|
|
5
|
+
const [scrollTop, setScrollTop] = useState(0);
|
|
6
|
+
const containerRef = useRef(null);
|
|
7
|
+
const totalHeight = items.length * itemHeight;
|
|
8
|
+
const visibleCount = Math.ceil(height / itemHeight);
|
|
9
|
+
const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);
|
|
10
|
+
const endIndex = Math.min(items.length - 1, startIndex + visibleCount + overscan * 2);
|
|
11
|
+
const paddingTop = startIndex * itemHeight;
|
|
12
|
+
const handleScroll = useCallback(() => {
|
|
13
|
+
if (containerRef.current)
|
|
14
|
+
setScrollTop(containerRef.current.scrollTop);
|
|
15
|
+
}, []);
|
|
16
|
+
return (_jsx("div", { ref: containerRef, className: cn('tokis-virtual-list', className), style: { height, overflow: 'auto' }, onScroll: handleScroll, children: _jsx("div", { style: { height: totalHeight, position: 'relative' }, children: _jsx("div", { style: { position: 'absolute', top: paddingTop, left: 0, right: 0 }, children: items.slice(startIndex, endIndex + 1).map((item, offset) => {
|
|
17
|
+
const index = startIndex + offset;
|
|
18
|
+
const key = getItemKey ? getItemKey(item, index) : index;
|
|
19
|
+
return (_jsx("div", { style: { height: itemHeight }, children: renderItem(item, index) }, key));
|
|
20
|
+
}) }) }) }));
|
|
21
|
+
}
|
|
22
|
+
VirtualizedList.displayName = 'VirtualizedList';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/virtual-list/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAa,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAYvC,MAAM,UAAU,eAAe,CAAI,EACjC,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,GAAG,CAAC,EACZ,SAAS,EACT,UAAU,GACc;IACxB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IAEtF,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAE3C,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,IAAI,YAAY,CAAC,OAAO;YAAE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,cACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,EAAE,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EACnC,QAAQ,EAAE,YAAY,YAEtB,cAAK,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,YACvD,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YACrE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;oBAC1D,MAAM,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;oBAClC,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBACzD,OAAO,CACL,cAAe,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,YACzC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IADhB,GAAG,CAEP,CACP,CAAC;gBACJ,CAAC,CAAC,GACE,GACF,GACF,CACP,CAAC;AACJ,CAAC;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
import { lightTheme } from '@tokis/tokens';
|
|
3
|
+
export type Config = {
|
|
4
|
+
tokens: typeof lightTheme;
|
|
5
|
+
};
|
|
6
|
+
export interface ConfigProviderProps {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
config?: Partial<Config>;
|
|
9
|
+
}
|
|
10
|
+
export declare const ConfigProvider: React.FC<ConfigProviderProps>;
|
|
11
|
+
export declare function useConfig(): Config;
|
|
12
|
+
//# sourceMappingURL=ConfigProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigProvider.d.ts","sourceRoot":"","sources":["../../src/context/ConfigProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,EAAE,OAAO,UAAU,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B;AAQD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAMxD,CAAC;AAEF,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
import { lightTheme } from '@tokis/tokens';
|
|
4
|
+
const defaultConfig = {
|
|
5
|
+
tokens: lightTheme,
|
|
6
|
+
};
|
|
7
|
+
const ConfigContext = createContext(defaultConfig);
|
|
8
|
+
export const ConfigProvider = ({ children, config }) => {
|
|
9
|
+
const resolved = {
|
|
10
|
+
...defaultConfig,
|
|
11
|
+
...config,
|
|
12
|
+
};
|
|
13
|
+
return _jsx(ConfigContext.Provider, { value: resolved, children: children });
|
|
14
|
+
};
|
|
15
|
+
export function useConfig() {
|
|
16
|
+
return useContext(ConfigContext);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ConfigProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigProvider.js","sourceRoot":"","sources":["../../src/context/ConfigProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAa,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAW3C,MAAM,aAAa,GAAW;IAC5B,MAAM,EAAE,UAAU;CACnB,CAAC;AAEF,MAAM,aAAa,GAAG,aAAa,CAAS,aAAa,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;IACpF,MAAM,QAAQ,GAAW;QACvB,GAAG,aAAa;QAChB,GAAG,MAAM;KACV,CAAC;IACF,OAAO,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,YAAG,QAAQ,GAA0B,CAAC;AACtF,CAAC,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
export type ThemeMode = 'light' | 'dark';
|
|
3
|
+
interface ThemeContextValue {
|
|
4
|
+
mode: ThemeMode;
|
|
5
|
+
toggle: () => void;
|
|
6
|
+
setMode: (mode: ThemeMode) => void;
|
|
7
|
+
}
|
|
8
|
+
export interface ThemeProviderProps {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
initialMode?: ThemeMode;
|
|
11
|
+
}
|
|
12
|
+
export declare const ThemeProvider: React.FC<ThemeProviderProps>;
|
|
13
|
+
export declare function useTheme(): ThemeContextValue;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=ThemeContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/context/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkD,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,UAAU,iBAAiB;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAiBtD,CAAC;AAEF,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useState, useEffect } from 'react';
|
|
3
|
+
const ThemeContext = createContext(undefined);
|
|
4
|
+
export const ThemeProvider = ({ children, initialMode = 'light' }) => {
|
|
5
|
+
const [mode, setMode] = useState(initialMode);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
document.documentElement.setAttribute('data-theme', mode);
|
|
8
|
+
return () => {
|
|
9
|
+
document.documentElement.removeAttribute('data-theme');
|
|
10
|
+
};
|
|
11
|
+
}, [mode]);
|
|
12
|
+
const toggle = () => setMode((prev) => (prev === 'light' ? 'dark' : 'light'));
|
|
13
|
+
return (_jsx(ThemeContext.Provider, { value: { mode, toggle, setMode }, children: children }));
|
|
14
|
+
};
|
|
15
|
+
export function useTheme() {
|
|
16
|
+
const ctx = useContext(ThemeContext);
|
|
17
|
+
if (!ctx)
|
|
18
|
+
throw new Error('useTheme must be used within ThemeProvider');
|
|
19
|
+
return ctx;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ThemeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeContext.js","sourceRoot":"","sources":["../../src/context/ThemeContext.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAUzF,MAAM,YAAY,GAAG,aAAa,CAAgC,SAAS,CAAC,CAAC;AAO7E,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,EAAE,EAAE,EAAE;IACjG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAY,WAAW,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC1D,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9E,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YACpD,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A React hook for managing controllable state — supporting both
|
|
3
|
+
* controlled (externally managed) and uncontrolled (internally managed) modes.
|
|
4
|
+
*
|
|
5
|
+
* @param controlled - The externally controlled value (undefined = uncontrolled)
|
|
6
|
+
* @param defaultValue - The initial value for uncontrolled mode
|
|
7
|
+
* @param onChange - Optional callback invoked when internal state changes
|
|
8
|
+
*/
|
|
9
|
+
export declare function useControllableState<T>(controlled: T | undefined, defaultValue: T, onChange?: (value: T) => void): [T, (value: T | ((prev: T) => T)) => void];
|
|
10
|
+
//# sourceMappingURL=useControllableState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useControllableState.d.ts","sourceRoot":"","sources":["../../src/hooks/useControllableState.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,UAAU,EAAE,CAAC,GAAG,SAAS,EACzB,YAAY,EAAE,CAAC,EACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAC5B,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAyB5C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useState, useCallback, useRef } from 'react';
|
|
2
|
+
import { isControlled } from '@tokis/core';
|
|
3
|
+
/**
|
|
4
|
+
* A React hook for managing controllable state — supporting both
|
|
5
|
+
* controlled (externally managed) and uncontrolled (internally managed) modes.
|
|
6
|
+
*
|
|
7
|
+
* @param controlled - The externally controlled value (undefined = uncontrolled)
|
|
8
|
+
* @param defaultValue - The initial value for uncontrolled mode
|
|
9
|
+
* @param onChange - Optional callback invoked when internal state changes
|
|
10
|
+
*/
|
|
11
|
+
export function useControllableState(controlled, defaultValue, onChange) {
|
|
12
|
+
const [internalState, setInternalState] = useState(defaultValue);
|
|
13
|
+
const controlled_ = isControlled(controlled);
|
|
14
|
+
const value = controlled_ ? controlled : internalState;
|
|
15
|
+
// Keep a stable ref to onChange to avoid stale closures
|
|
16
|
+
const onChangeRef = useRef(onChange);
|
|
17
|
+
onChangeRef.current = onChange;
|
|
18
|
+
const setValue = useCallback((next) => {
|
|
19
|
+
const nextValue = typeof next === 'function'
|
|
20
|
+
? next(value)
|
|
21
|
+
: next;
|
|
22
|
+
if (!controlled_) {
|
|
23
|
+
setInternalState(nextValue);
|
|
24
|
+
}
|
|
25
|
+
onChangeRef.current?.(nextValue);
|
|
26
|
+
}, [controlled_, value]);
|
|
27
|
+
return [value, setValue];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=useControllableState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useControllableState.js","sourceRoot":"","sources":["../../src/hooks/useControllableState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAyB,EACzB,YAAe,EACf,QAA6B;IAE7B,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;IAEvD,wDAAwD;IACxD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,IAA0B,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,UAAU;YAC1C,CAAC,CAAE,IAAuB,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QACD,WAAW,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,CACrB,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface UseDialogReturn {
|
|
2
|
+
isOpen: boolean;
|
|
3
|
+
open: () => void;
|
|
4
|
+
close: () => void;
|
|
5
|
+
toggle: () => void;
|
|
6
|
+
dialogProps: {
|
|
7
|
+
open: boolean;
|
|
8
|
+
onClose: () => void;
|
|
9
|
+
'aria-modal': true;
|
|
10
|
+
role: 'dialog';
|
|
11
|
+
'aria-labelledby'?: string;
|
|
12
|
+
'aria-describedby'?: string;
|
|
13
|
+
};
|
|
14
|
+
triggerProps: {
|
|
15
|
+
onClick: () => void;
|
|
16
|
+
'aria-haspopup': 'dialog';
|
|
17
|
+
'aria-expanded': boolean;
|
|
18
|
+
'aria-controls': string;
|
|
19
|
+
};
|
|
20
|
+
titleId: string;
|
|
21
|
+
descriptionId: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function useDialog(defaultOpen?: boolean): UseDialogReturn;
|
|
24
|
+
//# sourceMappingURL=useDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialog.d.ts","sourceRoot":"","sources":["../../src/hooks/useDialog.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,YAAY,EAAE,IAAI,CAAC;QACnB,IAAI,EAAE,QAAQ,CAAC;QACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,eAAe,EAAE,QAAQ,CAAC;QAC1B,eAAe,EAAE,OAAO,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,WAAW,UAAQ,GAAG,eAAe,CAgC9D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { useState, useCallback, useId } from 'react';
|
|
2
|
+
export function useDialog(defaultOpen = false) {
|
|
3
|
+
const [isOpen, setIsOpen] = useState(defaultOpen);
|
|
4
|
+
const dialogId = useId();
|
|
5
|
+
const titleId = `${dialogId}-title`;
|
|
6
|
+
const descriptionId = `${dialogId}-desc`;
|
|
7
|
+
const open = useCallback(() => setIsOpen(true), []);
|
|
8
|
+
const close = useCallback(() => setIsOpen(false), []);
|
|
9
|
+
const toggle = useCallback(() => setIsOpen((v) => !v), []);
|
|
10
|
+
return {
|
|
11
|
+
isOpen,
|
|
12
|
+
open,
|
|
13
|
+
close,
|
|
14
|
+
toggle,
|
|
15
|
+
dialogProps: {
|
|
16
|
+
open: isOpen,
|
|
17
|
+
onClose: close,
|
|
18
|
+
'aria-modal': true,
|
|
19
|
+
role: 'dialog',
|
|
20
|
+
'aria-labelledby': titleId,
|
|
21
|
+
'aria-describedby': descriptionId,
|
|
22
|
+
},
|
|
23
|
+
triggerProps: {
|
|
24
|
+
onClick: open,
|
|
25
|
+
'aria-haspopup': 'dialog',
|
|
26
|
+
'aria-expanded': isOpen,
|
|
27
|
+
'aria-controls': dialogId,
|
|
28
|
+
},
|
|
29
|
+
titleId,
|
|
30
|
+
descriptionId,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=useDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialog.js","sourceRoot":"","sources":["../../src/hooks/useDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAyBrD,MAAM,UAAU,SAAS,CAAC,WAAW,GAAG,KAAK;IAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,GAAG,QAAQ,QAAQ,CAAC;IACpC,MAAM,aAAa,GAAG,GAAG,QAAQ,OAAO,CAAC;IAEzC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3D,OAAO;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,WAAW,EAAE;YACX,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,QAAQ;YACd,iBAAiB,EAAE,OAAO;YAC1B,kBAAkB,EAAE,aAAa;SAClC;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,QAAQ;YACzB,eAAe,EAAE,MAAM;YACvB,eAAe,EAAE,QAAQ;SAC1B;QACD,OAAO;QACP,aAAa;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a stable, unique ID for the lifetime of the component.
|
|
3
|
+
* Prefer React 18's built-in `useId` for SSR-safe IDs.
|
|
4
|
+
* Use this hook only when a custom prefix is needed.
|
|
5
|
+
*/
|
|
6
|
+
export declare function useId(prefix?: string): string;
|
|
7
|
+
//# sourceMappingURL=useId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useId.d.ts","sourceRoot":"","sources":["../../src/hooks/useId.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,SAAU,GAAG,MAAM,CAE9C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { generateId } from '@tokis/core';
|
|
3
|
+
/**
|
|
4
|
+
* Returns a stable, unique ID for the lifetime of the component.
|
|
5
|
+
* Prefer React 18's built-in `useId` for SSR-safe IDs.
|
|
6
|
+
* Use this hook only when a custom prefix is needed.
|
|
7
|
+
*/
|
|
8
|
+
export function useId(prefix = 'tokis') {
|
|
9
|
+
return useRef(generateId(prefix)).current;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=useId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useId.js","sourceRoot":"","sources":["../../src/hooks/useId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,MAAM,GAAG,OAAO;IACpC,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface UseMenuReturn {
|
|
2
|
+
isOpen: boolean;
|
|
3
|
+
open: () => void;
|
|
4
|
+
close: () => void;
|
|
5
|
+
activeIndex: number;
|
|
6
|
+
setActiveIndex: (index: number) => void;
|
|
7
|
+
getMenuProps: () => {
|
|
8
|
+
id: string;
|
|
9
|
+
role: 'menu';
|
|
10
|
+
'aria-orientation': 'vertical';
|
|
11
|
+
onKeyDown: (e: React.KeyboardEvent) => void;
|
|
12
|
+
};
|
|
13
|
+
getItemProps: (index: number) => {
|
|
14
|
+
role: 'menuitem';
|
|
15
|
+
tabIndex: number;
|
|
16
|
+
'aria-selected': boolean;
|
|
17
|
+
onMouseEnter: () => void;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare function useMenu(itemCount?: number): UseMenuReturn;
|
|
21
|
+
//# sourceMappingURL=useMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../src/hooks/useMenu.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,kBAAkB,EAAE,UAAU,CAAC;QAC/B,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;KAC7C,CAAC;IACF,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;QAC/B,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,MAAM,IAAI,CAAC;KAC1B,CAAC;CACH;AAED,wBAAgB,OAAO,CAAC,SAAS,SAAI,GAAG,aAAa,CAyEpD"}
|