@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,79 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState, useRef, useEffect, useId, useCallback } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
import { Portal } from '../portal/index.js';
|
|
5
|
+
export function Popover({ trigger, content, title, placement = 'bottom-start', open, defaultOpen = false, onOpenChange, closeOnClickOutside = true, closeOnEsc = true, className }) {
|
|
6
|
+
const [internalOpen, setInternalOpen] = useState(defaultOpen);
|
|
7
|
+
const isOpen = open ?? internalOpen;
|
|
8
|
+
const [pos, setPos] = useState({ top: 0, left: 0 });
|
|
9
|
+
const triggerRef = useRef(null);
|
|
10
|
+
const contentRef = useRef(null);
|
|
11
|
+
const popoverId = useId();
|
|
12
|
+
const setOpen = useCallback((val) => {
|
|
13
|
+
if (open === undefined)
|
|
14
|
+
setInternalOpen(val);
|
|
15
|
+
onOpenChange?.(val);
|
|
16
|
+
}, [open, onOpenChange]);
|
|
17
|
+
const updatePosition = useCallback(() => {
|
|
18
|
+
if (!triggerRef.current)
|
|
19
|
+
return;
|
|
20
|
+
const rect = triggerRef.current.getBoundingClientRect();
|
|
21
|
+
const gap = 8;
|
|
22
|
+
let top = 0;
|
|
23
|
+
let left = 0;
|
|
24
|
+
const base = placement.split('-')[0];
|
|
25
|
+
const align = placement.split('-')[1];
|
|
26
|
+
if (base === 'bottom') {
|
|
27
|
+
top = rect.bottom + window.scrollY + gap;
|
|
28
|
+
}
|
|
29
|
+
if (base === 'top') {
|
|
30
|
+
top = rect.top + window.scrollY - gap;
|
|
31
|
+
}
|
|
32
|
+
if (base === 'right') {
|
|
33
|
+
left = rect.right + window.scrollX + gap;
|
|
34
|
+
top = rect.top + window.scrollY;
|
|
35
|
+
}
|
|
36
|
+
if (base === 'left') {
|
|
37
|
+
left = rect.left + window.scrollX - gap;
|
|
38
|
+
top = rect.top + window.scrollY;
|
|
39
|
+
}
|
|
40
|
+
if (!align || align === 'start') {
|
|
41
|
+
left = rect.left + window.scrollX;
|
|
42
|
+
}
|
|
43
|
+
if (align === 'end') {
|
|
44
|
+
left = rect.right + window.scrollX;
|
|
45
|
+
}
|
|
46
|
+
if (align === 'center' || (base === 'top' || base === 'bottom') && !align) {
|
|
47
|
+
left = rect.left + window.scrollX + rect.width / 2;
|
|
48
|
+
}
|
|
49
|
+
setPos({ top, left });
|
|
50
|
+
}, [placement]);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (!isOpen || !closeOnClickOutside)
|
|
53
|
+
return;
|
|
54
|
+
const handle = (e) => {
|
|
55
|
+
if (!triggerRef.current?.contains(e.target) && !contentRef.current?.contains(e.target)) {
|
|
56
|
+
setOpen(false);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
document.addEventListener('mousedown', handle);
|
|
60
|
+
return () => document.removeEventListener('mousedown', handle);
|
|
61
|
+
}, [isOpen, closeOnClickOutside, setOpen]);
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (!isOpen || !closeOnEsc)
|
|
64
|
+
return;
|
|
65
|
+
const h = (e) => { if (e.key === 'Escape')
|
|
66
|
+
setOpen(false); };
|
|
67
|
+
document.addEventListener('keydown', h);
|
|
68
|
+
return () => document.removeEventListener('keydown', h);
|
|
69
|
+
}, [isOpen, closeOnEsc, setOpen]);
|
|
70
|
+
const handleToggle = () => { updatePosition(); setOpen(!isOpen); };
|
|
71
|
+
return (_jsxs(_Fragment, { children: [React.cloneElement(trigger, {
|
|
72
|
+
ref: triggerRef,
|
|
73
|
+
'aria-expanded': isOpen,
|
|
74
|
+
'aria-haspopup': 'dialog',
|
|
75
|
+
'aria-controls': isOpen ? popoverId : undefined,
|
|
76
|
+
onClick: (e) => { handleToggle(); trigger.props.onClick?.(e); },
|
|
77
|
+
}), isOpen && (_jsx(Portal, { children: _jsxs("div", { ref: contentRef, id: popoverId, role: "dialog", "aria-modal": "false", tabIndex: -1, className: cn('tokis-popover-content', className), style: { position: 'absolute', top: pos.top, left: pos.left }, children: [title && _jsx("p", { className: "tokis-popover-title", children: title }), _jsx("button", { className: "tokis-popover-close", onClick: () => setOpen(false), "aria-label": "Close", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M1 1l10 10M11 1L1 11", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) }), content] }) }))] }));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/popover/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/portal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAIrF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createPortal } from 'react-dom';
|
|
2
|
+
export function Portal({ children, container }) {
|
|
3
|
+
if (typeof document === 'undefined')
|
|
4
|
+
return null;
|
|
5
|
+
const target = container ?? document.body;
|
|
6
|
+
return createPortal(children, target);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/portal/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAOzC,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAe;IACzD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC1C,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type ProgressVariant = 'default' | 'success' | 'warning' | 'error';
|
|
3
|
+
export interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
value?: number;
|
|
5
|
+
max?: number;
|
|
6
|
+
label?: string;
|
|
7
|
+
showValue?: boolean;
|
|
8
|
+
variant?: ProgressVariant;
|
|
9
|
+
size?: 'sm' | 'md' | 'lg';
|
|
10
|
+
}
|
|
11
|
+
export declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export interface SkeletonProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
13
|
+
variant?: 'text' | 'rectangular' | 'circular' | 'wave';
|
|
14
|
+
width?: string | number;
|
|
15
|
+
height?: string | number;
|
|
16
|
+
lines?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const Skeleton: React.ForwardRefExoticComponent<SkeletonProps & React.RefAttributes<HTMLSpanElement>>;
|
|
19
|
+
export interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
20
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
21
|
+
variant?: 'default' | 'white';
|
|
22
|
+
label?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<HTMLSpanElement>>;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/progress/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAI1C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1E,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,QAAQ,sFAiCnB,CAAC;AAIH,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IAC1E,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,uFAgCnB,CAAC;AAIH,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IACzE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,OAAO,sFAalB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
export const Progress = forwardRef(({ value, max = 100, label, showValue = false, variant = 'default', size = 'md', className, ...props }, ref) => {
|
|
5
|
+
const pct = value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : undefined;
|
|
6
|
+
const isIndeterminate = pct === undefined;
|
|
7
|
+
return (_jsxs("div", { ref: ref, className: cn('tokis-progress-root', className), ...props, children: [(label || showValue) && (_jsxs("div", { className: "tokis-progress-label", children: [label && _jsx("span", { className: "tokis-progress-label-text", children: label }), showValue && !isIndeterminate && _jsxs("span", { className: "tokis-progress-label-value", children: [Math.round(pct), "%"] })] })), _jsx("div", { role: "progressbar", "aria-valuenow": isIndeterminate ? undefined : pct, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": label, className: cn('tokis-progress-track', size !== 'md' && `tokis-progress-track--${size}`), children: _jsx("div", { className: cn('tokis-progress-fill', variant !== 'default' && `tokis-progress-fill--${variant}`, isIndeterminate && 'tokis-progress-fill--indeterminate'), style: !isIndeterminate ? { width: `${pct}%` } : undefined }) })] }));
|
|
8
|
+
});
|
|
9
|
+
Progress.displayName = 'Progress';
|
|
10
|
+
export const Skeleton = forwardRef(({ variant = 'rectangular', width, height, lines, className, style, ...props }, ref) => {
|
|
11
|
+
if (lines && lines > 1) {
|
|
12
|
+
return (_jsx("div", { className: className, children: Array.from({ length: lines }).map((_, i) => (_jsx("span", { className: cn('tokis-skeleton tokis-skeleton--text'), style: { width: i === lines - 1 ? '70%' : '100%', marginBottom: i < lines - 1 ? '8px' : 0 } }, i))) }));
|
|
13
|
+
}
|
|
14
|
+
return (_jsx("span", { ref: ref, className: cn('tokis-skeleton', variant === 'text' && 'tokis-skeleton--text', variant === 'circular' && 'tokis-skeleton--circle', variant === 'wave' && 'tokis-skeleton--wave', className), style: { display: 'block', width, height, ...style }, "aria-hidden": "true", ...props }));
|
|
15
|
+
});
|
|
16
|
+
Skeleton.displayName = 'Skeleton';
|
|
17
|
+
export const Spinner = forwardRef(({ size = 'md', variant = 'default', label = 'Loading…', className, ...props }, ref) => (_jsx("span", { ref: ref, role: "status", "aria-label": label, className: cn('tokis-spinner', size !== 'md' && `tokis-spinner--${size}`, variant === 'white' && 'tokis-spinner--white', className), ...props })));
|
|
18
|
+
Spinner.displayName = 'Spinner';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/progress/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface RadioGroupProps {
|
|
3
|
+
value?: string;
|
|
4
|
+
defaultValue?: string;
|
|
5
|
+
onChange?: (value: string) => void;
|
|
6
|
+
name?: string;
|
|
7
|
+
orientation?: 'vertical' | 'horizontal';
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
className?: string;
|
|
11
|
+
label?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface RadioProps {
|
|
14
|
+
value: string;
|
|
15
|
+
label?: React.ReactNode;
|
|
16
|
+
description?: string;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
checked?: boolean;
|
|
19
|
+
name?: string;
|
|
20
|
+
onChange?: (value: string) => void;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function Radio({ value, label, description, disabled, checked, name, onChange, className }: RadioProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare function RadioGroup({ value, onChange, name, orientation, disabled, children, className, label }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/radio/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgB,MAAM,OAAO,CAAC;AAGrC,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAgB,EAAE,OAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,UAAU,2CAmC5H;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAwB,EAAE,QAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,eAAe,2CAsB5I"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useId } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
export function Radio({ value, label, description, disabled = false, checked = false, name, onChange, className }) {
|
|
5
|
+
const autoId = useId();
|
|
6
|
+
const radioId = `radio-${autoId}`;
|
|
7
|
+
const descId = description ? `${radioId}-desc` : undefined;
|
|
8
|
+
return (_jsxs("label", { className: cn('tokis-radio-root', className), "data-disabled": disabled || undefined, htmlFor: radioId, children: [_jsx("input", { type: "radio", id: radioId, name: name, value: value, checked: checked, disabled: disabled, onChange: (e) => e.target.checked && onChange?.(value), className: "tokis-radio-native", "aria-describedby": descId }), _jsx("span", { "aria-hidden": "true", className: "tokis-radio-control", "data-checked": checked ? 'true' : undefined }), (label || description) && (_jsxs("div", { children: [label && _jsx("span", { className: "tokis-radio-label", children: label }), description && _jsx("p", { id: descId, className: "tokis-radio-description", children: description })] }))] }));
|
|
9
|
+
}
|
|
10
|
+
export function RadioGroup({ value, onChange, name, orientation = 'vertical', disabled = false, children, className, label }) {
|
|
11
|
+
const groupId = useId();
|
|
12
|
+
return (_jsxs("div", { role: "radiogroup", "aria-labelledby": label ? groupId : undefined, "aria-disabled": disabled, className: cn('tokis-radio-group', orientation === 'horizontal' && 'tokis-radio-group--horizontal', className), children: [label && _jsx("span", { id: groupId, className: "tokis-label", style: { marginBottom: 'var(--tokis-spacing-1)' }, children: label }), React.Children.map(children, (child) => {
|
|
13
|
+
if (!React.isValidElement(child))
|
|
14
|
+
return child;
|
|
15
|
+
const item = child;
|
|
16
|
+
return React.cloneElement(item, {
|
|
17
|
+
name: name ?? groupId,
|
|
18
|
+
checked: value !== undefined ? item.props.value === value : item.props.checked,
|
|
19
|
+
disabled: disabled || item.props.disabled,
|
|
20
|
+
onChange: (v) => onChange?.(v),
|
|
21
|
+
});
|
|
22
|
+
})] }));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/radio/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type ResultStatus = 'success' | 'error' | 'warning' | 'info' | 'loading';
|
|
3
|
+
export interface ResultProps {
|
|
4
|
+
status: ResultStatus;
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
extra?: React.ReactNode;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function Result({ status, title, description, extra, className }: ResultProps): JSX.Element;
|
|
11
|
+
export declare namespace Result {
|
|
12
|
+
var displayName: string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/result/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2CD,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAWjG;yBAXe,MAAM"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../../utils/cn.js';
|
|
3
|
+
const StatusIcon = ({ status }) => {
|
|
4
|
+
if (status === 'success') {
|
|
5
|
+
return (_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [_jsx("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M14 24l7 7 13-14", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" })] }));
|
|
6
|
+
}
|
|
7
|
+
if (status === 'error') {
|
|
8
|
+
return (_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [_jsx("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M16 16l16 16M32 16L16 32", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
|
|
9
|
+
}
|
|
10
|
+
if (status === 'warning') {
|
|
11
|
+
return (_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [_jsx("path", { d: "M24 6L42 40H6L24 6z", stroke: "currentColor", strokeWidth: "2", strokeLinejoin: "round" }), _jsx("path", { d: "M24 20v10M24 34v2", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
|
|
12
|
+
}
|
|
13
|
+
if (status === 'info') {
|
|
14
|
+
return (_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", children: [_jsx("circle", { cx: "24", cy: "24", r: "22", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M24 22v12M24 16v2", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })] }));
|
|
15
|
+
}
|
|
16
|
+
// loading
|
|
17
|
+
return (_jsx("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", "aria-hidden": "true", className: "tokis-result__spin", children: _jsx("circle", { cx: "24", cy: "24", r: "20", stroke: "currentColor", strokeWidth: "3", strokeDasharray: "31.4 94.2", strokeLinecap: "round" }) }));
|
|
18
|
+
};
|
|
19
|
+
export function Result({ status, title, description, extra, className }) {
|
|
20
|
+
return (_jsxs("div", { className: cn('tokis-result', `tokis-result--${status}`, className), children: [_jsx("div", { className: cn('tokis-result__icon', `tokis-result__icon--${status}`), children: _jsx(StatusIcon, { status: status }) }), _jsx("h3", { className: "tokis-result__title", children: title }), description && _jsx("p", { className: "tokis-result__description", children: description }), extra && _jsx("div", { className: "tokis-result__extra", children: extra })] }));
|
|
21
|
+
}
|
|
22
|
+
Result.displayName = 'Result';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/result/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SearchFieldProps {
|
|
2
|
+
value: string;
|
|
3
|
+
onChange: (value: string) => void;
|
|
4
|
+
onSearch?: (value: string) => void;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
debounce?: number;
|
|
8
|
+
label?: string;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function SearchField({ value, onChange, onSearch, placeholder, loading, debounce, label, className, }: SearchFieldProps): JSX.Element;
|
|
12
|
+
export declare namespace SearchField {
|
|
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/search-field/index.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAuB,EACvB,OAAe,EACf,QAAc,EACd,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAoEhC;yBA7Ee,WAAW"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useEffect, useCallback } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
export function SearchField({ value, onChange, onSearch, placeholder = 'Search…', loading = false, debounce = 300, label, className, }) {
|
|
5
|
+
const debounceRef = useRef();
|
|
6
|
+
const handleChange = useCallback((e) => {
|
|
7
|
+
const val = e.target.value;
|
|
8
|
+
onChange(val);
|
|
9
|
+
if (onSearch) {
|
|
10
|
+
clearTimeout(debounceRef.current);
|
|
11
|
+
debounceRef.current = setTimeout(() => onSearch(val), debounce);
|
|
12
|
+
}
|
|
13
|
+
}, [onChange, onSearch, debounce]);
|
|
14
|
+
const handleKeyDown = useCallback((e) => {
|
|
15
|
+
if (e.key === 'Enter' && onSearch) {
|
|
16
|
+
clearTimeout(debounceRef.current);
|
|
17
|
+
onSearch(value);
|
|
18
|
+
}
|
|
19
|
+
if (e.key === 'Escape') {
|
|
20
|
+
onChange('');
|
|
21
|
+
onSearch?.('');
|
|
22
|
+
}
|
|
23
|
+
}, [value, onChange, onSearch]);
|
|
24
|
+
useEffect(() => () => clearTimeout(debounceRef.current), []);
|
|
25
|
+
return (_jsxs("div", { className: cn('tokis-search-field', className), children: [label && _jsx("label", { className: "tokis-search-field__label", children: label }), _jsxs("div", { className: "tokis-search-field__wrap", children: [_jsx("span", { className: "tokis-search-field__icon", "aria-hidden": "true", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: [_jsx("circle", { cx: "6", cy: "6", r: "4", stroke: "currentColor", strokeWidth: "1.4" }), _jsx("path", { d: "M9.5 9.5L12 12", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" })] }) }), _jsx("input", { type: "search", className: "tokis-search-field__input", value: value, onChange: handleChange, onKeyDown: handleKeyDown, placeholder: placeholder, "aria-label": label ?? placeholder }), loading && (_jsx("span", { className: "tokis-search-field__spinner", "aria-label": "Searching\u2026" })), !loading && value && (_jsx("button", { type: "button", className: "tokis-search-field__clear", onClick: () => { onChange(''); onSearch?.(''); }, "aria-label": "Clear search", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: _jsx("path", { d: "M2 2l8 8M10 2l-8 8", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" }) }) }))] })] }));
|
|
26
|
+
}
|
|
27
|
+
SearchField.displayName = 'SearchField';
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/search-field/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface SelectOption {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
group?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SelectProps {
|
|
8
|
+
value?: string;
|
|
9
|
+
defaultValue?: string;
|
|
10
|
+
onChange?: (value: string) => void;
|
|
11
|
+
options: SelectOption[];
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
label?: string;
|
|
15
|
+
helperText?: string;
|
|
16
|
+
error?: boolean;
|
|
17
|
+
required?: boolean;
|
|
18
|
+
id?: string;
|
|
19
|
+
className?: string;
|
|
20
|
+
size?: 'sm' | 'md' | 'lg';
|
|
21
|
+
}
|
|
22
|
+
export declare function Select({ value, defaultValue, onChange, options, placeholder, disabled, label, helperText, error, required, id, className, size, }: SelectProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/select/index.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAgC,EACxE,QAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAa,EAAE,QAAQ,EAC5D,EAAE,EAAE,SAAS,EAAE,IAAW,GAC3B,EAAE,WAAW,2CAwHb"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useEffect, useId, useCallback } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
import { Portal } from '../portal/index.js';
|
|
5
|
+
export function Select({ value, defaultValue, onChange, options, placeholder = 'Select an option', disabled = false, label, helperText, error = false, required, id, className, size = 'md', }) {
|
|
6
|
+
const autoId = useId();
|
|
7
|
+
const selectId = id ?? `select-${autoId}`;
|
|
8
|
+
const [open, setOpen] = useState(false);
|
|
9
|
+
const [internalValue, setInternalValue] = useState(defaultValue ?? '');
|
|
10
|
+
const [focusedIndex, setFocusedIndex] = useState(-1);
|
|
11
|
+
const triggerRef = useRef(null);
|
|
12
|
+
const contentRef = useRef(null);
|
|
13
|
+
const [position, setPosition] = useState({ top: 0, left: 0, width: 0 });
|
|
14
|
+
const currentValue = value !== undefined ? value : internalValue;
|
|
15
|
+
const selectedOption = options.find((o) => o.value === currentValue);
|
|
16
|
+
const enabledOptions = options.filter((o) => !o.disabled);
|
|
17
|
+
const updatePosition = useCallback(() => {
|
|
18
|
+
if (!triggerRef.current)
|
|
19
|
+
return;
|
|
20
|
+
const rect = triggerRef.current.getBoundingClientRect();
|
|
21
|
+
setPosition({ top: rect.bottom + window.scrollY + 4, left: rect.left + window.scrollX, width: rect.width });
|
|
22
|
+
}, []);
|
|
23
|
+
const handleSelect = (val) => {
|
|
24
|
+
if (value === undefined)
|
|
25
|
+
setInternalValue(val);
|
|
26
|
+
onChange?.(val);
|
|
27
|
+
setOpen(false);
|
|
28
|
+
triggerRef.current?.focus();
|
|
29
|
+
};
|
|
30
|
+
const handleKeyDown = (e) => {
|
|
31
|
+
if (disabled)
|
|
32
|
+
return;
|
|
33
|
+
if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
|
34
|
+
e.preventDefault();
|
|
35
|
+
if (!open) {
|
|
36
|
+
updatePosition();
|
|
37
|
+
setOpen(true);
|
|
38
|
+
setFocusedIndex(0);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
setFocusedIndex((prev) => {
|
|
42
|
+
const next = e.key === 'ArrowDown' ? (prev + 1) % enabledOptions.length : (prev - 1 + enabledOptions.length) % enabledOptions.length;
|
|
43
|
+
return next;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
if (!open) {
|
|
49
|
+
updatePosition();
|
|
50
|
+
setOpen(true);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (focusedIndex >= 0)
|
|
54
|
+
handleSelect(enabledOptions[focusedIndex].value);
|
|
55
|
+
}
|
|
56
|
+
if (e.key === 'Escape') {
|
|
57
|
+
setOpen(false);
|
|
58
|
+
triggerRef.current?.focus();
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (!open)
|
|
63
|
+
return;
|
|
64
|
+
const handle = (e) => {
|
|
65
|
+
if (!triggerRef.current?.contains(e.target) && !contentRef.current?.contains(e.target)) {
|
|
66
|
+
setOpen(false);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
document.addEventListener('mousedown', handle);
|
|
70
|
+
return () => document.removeEventListener('mousedown', handle);
|
|
71
|
+
}, [open]);
|
|
72
|
+
const helperId = helperText ? `${selectId}-helper` : undefined;
|
|
73
|
+
const groups = [...new Set(options.map((o) => o.group))];
|
|
74
|
+
const hasGroups = groups.some(Boolean);
|
|
75
|
+
return (_jsxs("div", { className: cn('tokis-field', className), children: [label && (_jsx("label", { htmlFor: selectId, className: cn('tokis-label', required && 'tokis-label--required'), children: label })), _jsxs("button", { ref: triggerRef, id: selectId, type: "button", role: "combobox", "aria-expanded": open, "aria-haspopup": "listbox", "aria-describedby": helperId, "aria-invalid": error || undefined, "aria-required": required, "aria-disabled": disabled, className: cn('tokis-select-trigger', size !== 'md' && `tokis-select-trigger--${size}`), "data-open": open || undefined, "data-disabled": disabled || undefined, disabled: disabled, onKeyDown: handleKeyDown, onClick: () => { if (!disabled) {
|
|
76
|
+
updatePosition();
|
|
77
|
+
setOpen((v) => !v);
|
|
78
|
+
} }, children: [_jsx("span", { className: cn(!selectedOption && 'tokis-select-trigger__placeholder'), children: selectedOption ? selectedOption.label : placeholder }), _jsx("svg", { className: "tokis-select-trigger__icon", width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M4 6l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })] }), open && (_jsx(Portal, { children: _jsx("div", { ref: contentRef, role: "listbox", "aria-label": label, className: "tokis-select-content", style: { position: 'absolute', top: position.top, left: position.left, width: position.width }, children: hasGroups
|
|
79
|
+
? groups.map((group) => (_jsxs("div", { children: [group && _jsx("div", { className: "tokis-select-group-label", children: group }), options.filter((o) => o.group === group).map((opt) => (_jsx(SelectItem, { opt: opt, currentValue: currentValue, onSelect: handleSelect }, opt.value)))] }, group ?? '__default__')))
|
|
80
|
+
: options.map((opt) => (_jsx(SelectItem, { opt: opt, currentValue: currentValue, onSelect: handleSelect }, opt.value))) }) })), helperText && (_jsx("span", { id: helperId, className: cn('tokis-helper-text', error && 'tokis-helper-text--error'), children: helperText }))] }));
|
|
81
|
+
}
|
|
82
|
+
function SelectItem({ opt, currentValue, onSelect }) {
|
|
83
|
+
return (_jsxs("div", { role: "option", "aria-selected": opt.value === currentValue, "aria-disabled": opt.disabled, className: "tokis-select-item", "data-selected": opt.value === currentValue ? 'true' : undefined, "data-disabled": opt.disabled ? 'true' : undefined, onClick: () => { if (!opt.disabled)
|
|
84
|
+
onSelect(opt.value); }, children: [opt.value === currentValue && (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M2 7l3.5 3.5L12 3.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })), opt.label] }));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/select/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/skeleton/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/skeleton/index.tsx"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
3
|
+
value?: number;
|
|
4
|
+
defaultValue?: number;
|
|
5
|
+
min?: number;
|
|
6
|
+
max?: number;
|
|
7
|
+
step?: number;
|
|
8
|
+
onChange?: (value: number) => void;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
label?: string;
|
|
11
|
+
showValue?: boolean;
|
|
12
|
+
marks?: boolean | {
|
|
13
|
+
value: number;
|
|
14
|
+
label?: string;
|
|
15
|
+
}[];
|
|
16
|
+
}
|
|
17
|
+
export declare const Slider: React.ForwardRefExoticComponent<SliderProps & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/slider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAGzE,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD;AAED,eAAO,MAAM,MAAM,oFAsFjB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useCallback, useRef, useState } from 'react';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
export const Slider = forwardRef(({ value, defaultValue = 0, min = 0, max = 100, step = 1, onChange, disabled = false, label, showValue = false, marks, className, ...props }, ref) => {
|
|
5
|
+
const [internal, setInternal] = useState(defaultValue);
|
|
6
|
+
const current = value ?? internal;
|
|
7
|
+
const trackRef = useRef(null);
|
|
8
|
+
const clamp = (v) => Math.min(max, Math.max(min, Math.round(v / step) * step));
|
|
9
|
+
const pct = ((current - min) / (max - min)) * 100;
|
|
10
|
+
const handleChange = useCallback((newVal) => {
|
|
11
|
+
const clamped = clamp(newVal);
|
|
12
|
+
if (value === undefined)
|
|
13
|
+
setInternal(clamped);
|
|
14
|
+
onChange?.(clamped);
|
|
15
|
+
}, [min, max, step, value, onChange]);
|
|
16
|
+
const handleKeyDown = (e) => {
|
|
17
|
+
if (disabled)
|
|
18
|
+
return;
|
|
19
|
+
if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
handleChange(current + step);
|
|
22
|
+
}
|
|
23
|
+
if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {
|
|
24
|
+
e.preventDefault();
|
|
25
|
+
handleChange(current - step);
|
|
26
|
+
}
|
|
27
|
+
if (e.key === 'Home') {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
handleChange(min);
|
|
30
|
+
}
|
|
31
|
+
if (e.key === 'End') {
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
handleChange(max);
|
|
34
|
+
}
|
|
35
|
+
if (e.key === 'PageUp') {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
handleChange(current + step * 10);
|
|
38
|
+
}
|
|
39
|
+
if (e.key === 'PageDown') {
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
handleChange(current - step * 10);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const handleTrackClick = (e) => {
|
|
45
|
+
if (disabled || !trackRef.current)
|
|
46
|
+
return;
|
|
47
|
+
const rect = trackRef.current.getBoundingClientRect();
|
|
48
|
+
const ratio = (e.clientX - rect.left) / rect.width;
|
|
49
|
+
handleChange(min + ratio * (max - min));
|
|
50
|
+
};
|
|
51
|
+
const markList = Array.isArray(marks)
|
|
52
|
+
? marks
|
|
53
|
+
: marks
|
|
54
|
+
? [{ value: min }, { value: max }]
|
|
55
|
+
: [];
|
|
56
|
+
return (_jsxs("div", { className: cn('tokis-slider-root', className), "data-disabled": disabled || undefined, ...props, ref: ref, children: [label && (_jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: '8px' }, children: [_jsx("span", { className: "tokis-label", children: label }), showValue && _jsx("span", { className: "tokis-text--secondary", style: { fontSize: 'var(--tokis-font-size-sm)' }, children: current })] })), _jsxs("div", { className: "tokis-slider-track-wrapper", children: [_jsx("div", { ref: trackRef, className: "tokis-slider-track", onClick: handleTrackClick, children: _jsx("div", { className: "tokis-slider-range", style: { width: `${pct}%` } }) }), _jsx("div", { role: "slider", tabIndex: disabled ? -1 : 0, "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": current, "aria-label": label, "aria-disabled": disabled, className: "tokis-slider-thumb", style: { left: `${pct}%` }, onKeyDown: handleKeyDown, onMouseDown: (e) => {
|
|
57
|
+
if (disabled)
|
|
58
|
+
return;
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
const move = (me) => {
|
|
61
|
+
if (!trackRef.current)
|
|
62
|
+
return;
|
|
63
|
+
const rect = trackRef.current.getBoundingClientRect();
|
|
64
|
+
handleChange(min + ((me.clientX - rect.left) / rect.width) * (max - min));
|
|
65
|
+
};
|
|
66
|
+
document.addEventListener('mousemove', move);
|
|
67
|
+
document.addEventListener('mouseup', () => document.removeEventListener('mousemove', move), { once: true });
|
|
68
|
+
} })] }), markList.length > 0 && (_jsx("div", { className: "tokis-slider-marks", children: markList.map((m) => (_jsx("span", { className: "tokis-slider-mark-label", children: m.label ?? m.value }, m.value))) }))] }));
|
|
69
|
+
});
|
|
70
|
+
Slider.displayName = 'Slider';
|
|
71
|
+
//# sourceMappingURL=index.js.map
|