@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,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CircularProgress = CircularProgress;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const cn_js_1 = require("../../utils/cn");
|
|
6
|
+
const sizeMap = {
|
|
7
|
+
sm: 32,
|
|
8
|
+
md: 48,
|
|
9
|
+
lg: 64,
|
|
10
|
+
xl: 80,
|
|
11
|
+
};
|
|
12
|
+
const strokeWidthMap = {
|
|
13
|
+
sm: 3,
|
|
14
|
+
md: 4,
|
|
15
|
+
lg: 5,
|
|
16
|
+
xl: 6,
|
|
17
|
+
};
|
|
18
|
+
function CircularProgress({ value, size = 'md', strokeWidth, label, variant = 'default', className, }) {
|
|
19
|
+
const svgSize = sizeMap[size];
|
|
20
|
+
const sw = strokeWidth ?? strokeWidthMap[size];
|
|
21
|
+
const radius = (svgSize - sw) / 2;
|
|
22
|
+
const circumference = 2 * Math.PI * radius;
|
|
23
|
+
const isIndeterminate = value === undefined;
|
|
24
|
+
const clampedValue = Math.min(100, Math.max(0, value ?? 0));
|
|
25
|
+
const offset = circumference * (1 - clampedValue / 100);
|
|
26
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-circular-progress', `tokis-circular-progress--${size}`, `tokis-circular-progress--${variant}`, isIndeterminate && 'tokis-circular-progress--indeterminate', className), role: "progressbar", "aria-valuenow": isIndeterminate ? undefined : clampedValue, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": isIndeterminate ? 'Loading…' : `${clampedValue}%`, children: [(0, jsx_runtime_1.jsxs)("svg", { width: svgSize, height: svgSize, viewBox: `0 0 ${svgSize} ${svgSize}`, fill: "none", children: [(0, jsx_runtime_1.jsx)("circle", { className: "tokis-circular-progress__track", cx: svgSize / 2, cy: svgSize / 2, r: radius, strokeWidth: sw }), (0, jsx_runtime_1.jsx)("circle", { className: "tokis-circular-progress__fill", cx: svgSize / 2, cy: svgSize / 2, r: radius, strokeWidth: sw, strokeDasharray: circumference, strokeDashoffset: isIndeterminate ? circumference * 0.75 : offset, strokeLinecap: "round", transform: `rotate(-90 ${svgSize / 2} ${svgSize / 2})` })] }), label && (0, jsx_runtime_1.jsx)("div", { className: "tokis-circular-progress__label", children: label })] }));
|
|
27
|
+
}
|
|
28
|
+
CircularProgress.displayName = 'CircularProgress';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeBlock = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const cn_js_1 = require("../../utils/cn");
|
|
7
|
+
const CopyIcon = () => ((0, jsx_runtime_1.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("rect", { x: "4", y: "4", width: "8", height: "8", rx: "1.5", stroke: "currentColor", strokeWidth: "1.5" }), (0, jsx_runtime_1.jsx)("path", { d: "M10 4V2.5A1.5 1.5 0 0 0 8.5 1h-6A1.5 1.5 0 0 0 1 2.5v6A1.5 1.5 0 0 0 2.5 10H4", stroke: "currentColor", strokeWidth: "1.5" })] }));
|
|
8
|
+
const CheckIcon = () => ((0, jsx_runtime_1.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M2 7l3.5 3.5L12 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
|
|
9
|
+
const CodeBlock = ({ code, language, filename, highlightedHtml, showLineNumbers = false, theme = 'auto', className, }) => {
|
|
10
|
+
const [copied, setCopied] = (0, react_1.useState)(false);
|
|
11
|
+
const handleCopy = (0, react_1.useCallback)(async () => {
|
|
12
|
+
try {
|
|
13
|
+
await navigator.clipboard.writeText(code);
|
|
14
|
+
setCopied(true);
|
|
15
|
+
setTimeout(() => setCopied(false), 2000);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Fallback for browsers without clipboard API
|
|
19
|
+
const textarea = document.createElement('textarea');
|
|
20
|
+
textarea.value = code;
|
|
21
|
+
textarea.style.position = 'fixed';
|
|
22
|
+
textarea.style.opacity = '0';
|
|
23
|
+
document.body.appendChild(textarea);
|
|
24
|
+
textarea.select();
|
|
25
|
+
document.execCommand('copy');
|
|
26
|
+
document.body.removeChild(textarea);
|
|
27
|
+
setCopied(true);
|
|
28
|
+
setTimeout(() => setCopied(false), 2000);
|
|
29
|
+
}
|
|
30
|
+
}, [code]);
|
|
31
|
+
const lines = code.split('\n');
|
|
32
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-codeblock', className), "data-codeblock-theme": theme !== 'auto' ? theme : undefined, children: [(0, jsx_runtime_1.jsxs)("div", { className: "tokis-codeblock__header", children: [(0, jsx_runtime_1.jsx)("span", { className: "tokis-codeblock__lang", children: filename ?? language ?? 'code' }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: (0, cn_js_1.cn)('tokis-codeblock__copy', copied && 'tokis-codeblock__copy--copied'), onClick: handleCopy, "aria-label": copied ? 'Copied!' : 'Copy code', children: [copied ? (0, jsx_runtime_1.jsx)(CheckIcon, {}) : (0, jsx_runtime_1.jsx)(CopyIcon, {}), (0, jsx_runtime_1.jsx)("span", { children: copied ? 'Copied!' : 'Copy' })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "tokis-codeblock__body", children: [showLineNumbers && ((0, jsx_runtime_1.jsx)("div", { className: "tokis-codeblock__lines", "aria-hidden": "true", children: lines.map((_, i) => ((0, jsx_runtime_1.jsx)("span", { className: "tokis-codeblock__line-num", children: i + 1 }, i))) })), (0, jsx_runtime_1.jsx)("pre", { className: "tokis-codeblock__pre", children: highlightedHtml ? ((0, jsx_runtime_1.jsx)("code", { className: (0, cn_js_1.cn)('tokis-codeblock__code', language && `language-${language}`), dangerouslySetInnerHTML: { __html: highlightedHtml } })) : ((0, jsx_runtime_1.jsx)("code", { className: (0, cn_js_1.cn)('tokis-codeblock__code', language && `language-${language}`), children: code })) })] })] }));
|
|
33
|
+
};
|
|
34
|
+
exports.CodeBlock = CodeBlock;
|
|
35
|
+
exports.CodeBlock.displayName = 'CodeBlock';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeBlock = void 0;
|
|
4
|
+
var CodeBlock_js_1 = require("./CodeBlock");
|
|
5
|
+
Object.defineProperty(exports, "CodeBlock", { enumerable: true, get: function () { return CodeBlock_js_1.CodeBlock; } });
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommandPalette = CommandPalette;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const cn_js_1 = require("../../utils/cn");
|
|
7
|
+
const index_js_1 = require("../portal/index");
|
|
8
|
+
const core_1 = require("@tokis/core");
|
|
9
|
+
function CommandPalette({ open, onClose, items, placeholder = 'Search commands…', className, }) {
|
|
10
|
+
const [query, setQuery] = (0, react_1.useState)('');
|
|
11
|
+
const [activeIndex, setActiveIndex] = (0, react_1.useState)(0);
|
|
12
|
+
const containerRef = (0, react_1.useRef)(null);
|
|
13
|
+
const inputRef = (0, react_1.useRef)(null);
|
|
14
|
+
const filtered = (0, react_1.useMemo)(() => {
|
|
15
|
+
const q = query.trim().toLowerCase();
|
|
16
|
+
if (!q)
|
|
17
|
+
return items;
|
|
18
|
+
return items.filter((item) => item.label.toLowerCase().includes(q) ||
|
|
19
|
+
item.description?.toLowerCase().includes(q) ||
|
|
20
|
+
item.category?.toLowerCase().includes(q));
|
|
21
|
+
}, [query, items]);
|
|
22
|
+
const grouped = (0, react_1.useMemo)(() => {
|
|
23
|
+
const map = new Map();
|
|
24
|
+
for (const item of filtered) {
|
|
25
|
+
const cat = item.category ?? '';
|
|
26
|
+
if (!map.has(cat))
|
|
27
|
+
map.set(cat, []);
|
|
28
|
+
map.get(cat).push(item);
|
|
29
|
+
}
|
|
30
|
+
return map;
|
|
31
|
+
}, [filtered]);
|
|
32
|
+
const flatFiltered = filtered;
|
|
33
|
+
const handleSelect = (0, react_1.useCallback)((item) => {
|
|
34
|
+
item.onSelect();
|
|
35
|
+
onClose();
|
|
36
|
+
setQuery('');
|
|
37
|
+
setActiveIndex(0);
|
|
38
|
+
}, [onClose]);
|
|
39
|
+
(0, react_1.useEffect)(() => {
|
|
40
|
+
if (!open) {
|
|
41
|
+
setQuery('');
|
|
42
|
+
setActiveIndex(0);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const cleanup = containerRef.current ? (0, core_1.trapFocus)(containerRef.current) : undefined;
|
|
46
|
+
inputRef.current?.focus();
|
|
47
|
+
return () => cleanup?.();
|
|
48
|
+
}, [open]);
|
|
49
|
+
(0, react_1.useEffect)(() => {
|
|
50
|
+
if (!open)
|
|
51
|
+
return;
|
|
52
|
+
const onKey = (e) => {
|
|
53
|
+
if (e.key === 'Escape') {
|
|
54
|
+
onClose();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (e.key === 'ArrowDown') {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
setActiveIndex((i) => Math.min(i + 1, flatFiltered.length - 1));
|
|
60
|
+
}
|
|
61
|
+
else if (e.key === 'ArrowUp') {
|
|
62
|
+
e.preventDefault();
|
|
63
|
+
setActiveIndex((i) => Math.max(i - 1, 0));
|
|
64
|
+
}
|
|
65
|
+
else if (e.key === 'Enter') {
|
|
66
|
+
const item = flatFiltered[activeIndex];
|
|
67
|
+
if (item)
|
|
68
|
+
handleSelect(item);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
document.addEventListener('keydown', onKey);
|
|
72
|
+
return () => document.removeEventListener('keydown', onKey);
|
|
73
|
+
}, [open, flatFiltered, activeIndex, handleSelect, onClose]);
|
|
74
|
+
(0, react_1.useEffect)(() => { setActiveIndex(0); }, [query]);
|
|
75
|
+
if (!open)
|
|
76
|
+
return null;
|
|
77
|
+
let globalIndex = 0;
|
|
78
|
+
return ((0, jsx_runtime_1.jsxs)(index_js_1.Portal, { children: [(0, jsx_runtime_1.jsx)("div", { className: "tokis-command-palette-backdrop", "aria-hidden": "true", onClick: onClose }), (0, jsx_runtime_1.jsxs)("div", { ref: containerRef, className: (0, cn_js_1.cn)('tokis-command-palette', className), role: "dialog", "aria-label": "Command palette", "aria-modal": "true", children: [(0, jsx_runtime_1.jsxs)("div", { className: "tokis-command-palette__search", children: [(0, jsx_runtime_1.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", className: "tokis-command-palette__search-icon", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "7", cy: "7", r: "4.5", stroke: "currentColor", strokeWidth: "1.5" }), (0, jsx_runtime_1.jsx)("path", { d: "M11 11l3 3", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] }), (0, jsx_runtime_1.jsx)("input", { ref: inputRef, type: "text", className: "tokis-command-palette__input", placeholder: placeholder, value: query, onChange: (e) => setQuery(e.target.value), "aria-label": placeholder, autoComplete: "off", spellCheck: false })] }), (0, jsx_runtime_1.jsx)("div", { className: "tokis-command-palette__list", role: "listbox", children: filtered.length === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "tokis-command-palette__empty", children: "No commands found" })) : (Array.from(grouped.entries()).map(([category, categoryItems]) => ((0, jsx_runtime_1.jsxs)("div", { className: "tokis-command-palette__group", children: [category && ((0, jsx_runtime_1.jsx)("div", { className: "tokis-command-palette__group-label", children: category })), categoryItems.map((item) => {
|
|
79
|
+
const idx = globalIndex++;
|
|
80
|
+
const isActive = activeIndex === idx;
|
|
81
|
+
return ((0, jsx_runtime_1.jsxs)("button", { role: "option", "aria-selected": isActive, className: (0, cn_js_1.cn)('tokis-command-palette__item', isActive && 'tokis-command-palette__item--active'), onClick: () => handleSelect(item), onMouseEnter: () => setActiveIndex(idx), children: [item.icon && ((0, jsx_runtime_1.jsx)("span", { className: "tokis-command-palette__item-icon", "aria-hidden": "true", children: item.icon })), (0, jsx_runtime_1.jsxs)("span", { className: "tokis-command-palette__item-content", children: [(0, jsx_runtime_1.jsx)("span", { className: "tokis-command-palette__item-label", children: item.label }), item.description && ((0, jsx_runtime_1.jsx)("span", { className: "tokis-command-palette__item-desc", children: item.description }))] }), item.shortcut && ((0, jsx_runtime_1.jsx)("span", { className: "tokis-command-palette__shortcut", "aria-label": `Shortcut: ${item.shortcut.join('+')}`, children: item.shortcut.map((k, ki) => ((0, jsx_runtime_1.jsx)("kbd", { className: "tokis-command-palette__kbd", children: k }, ki))) }))] }, item.id));
|
|
82
|
+
})] }, category)))) })] })] }));
|
|
83
|
+
}
|
|
84
|
+
CommandPalette.displayName = 'CommandPalette';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfirmDialog = ConfirmDialog;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const index_js_1 = require("../dialog/index");
|
|
6
|
+
const cn_js_1 = require("../../utils/cn");
|
|
7
|
+
function ConfirmDialog({ open, onClose, onConfirm, title, description, confirmLabel = 'Confirm', cancelLabel = 'Cancel', destructive = false, loading = false, className, }) {
|
|
8
|
+
return ((0, jsx_runtime_1.jsx)(index_js_1.Dialog, { open: open, onClose: onClose, title: title, description: description, size: "sm", className: (0, cn_js_1.cn)('tokis-confirm-dialog', className), footer: (0, jsx_runtime_1.jsxs)("div", { className: "tokis-confirm-dialog__actions", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "tokis-confirm-dialog__cancel", onClick: onClose, disabled: loading, children: cancelLabel }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: (0, cn_js_1.cn)('tokis-confirm-dialog__confirm', destructive && 'tokis-confirm-dialog__confirm--destructive'), onClick: onConfirm, disabled: loading, "aria-busy": loading, children: [loading ? ((0, jsx_runtime_1.jsx)("span", { className: "tokis-confirm-dialog__spinner", "aria-hidden": "true" })) : null, confirmLabel] })] }) }));
|
|
9
|
+
}
|
|
10
|
+
ConfirmDialog.displayName = 'ConfirmDialog';
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ContextMenu = ContextMenu;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const cn_js_1 = require("../../utils/cn");
|
|
40
|
+
const index_js_1 = require("../portal/index");
|
|
41
|
+
function ContextMenu({ items, children, className }) {
|
|
42
|
+
const [visible, setVisible] = (0, react_1.useState)(false);
|
|
43
|
+
const [pos, setPos] = (0, react_1.useState)({ x: 0, y: 0 });
|
|
44
|
+
const menuRef = (0, react_1.useRef)(null);
|
|
45
|
+
const close = (0, react_1.useCallback)(() => setVisible(false), []);
|
|
46
|
+
const handleContextMenu = (0, react_1.useCallback)((e) => {
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
setPos({ x: e.clientX, y: e.clientY });
|
|
49
|
+
setVisible(true);
|
|
50
|
+
}, []);
|
|
51
|
+
(0, react_1.useEffect)(() => {
|
|
52
|
+
if (!visible)
|
|
53
|
+
return;
|
|
54
|
+
const onKey = (e) => { if (e.key === 'Escape')
|
|
55
|
+
close(); };
|
|
56
|
+
const onClick = (e) => {
|
|
57
|
+
if (menuRef.current && !menuRef.current.contains(e.target))
|
|
58
|
+
close();
|
|
59
|
+
};
|
|
60
|
+
document.addEventListener('keydown', onKey);
|
|
61
|
+
document.addEventListener('mousedown', onClick);
|
|
62
|
+
return () => {
|
|
63
|
+
document.removeEventListener('keydown', onKey);
|
|
64
|
+
document.removeEventListener('mousedown', onClick);
|
|
65
|
+
};
|
|
66
|
+
}, [visible, close]);
|
|
67
|
+
(0, react_1.useEffect)(() => {
|
|
68
|
+
if (!visible || !menuRef.current)
|
|
69
|
+
return;
|
|
70
|
+
menuRef.current.focus();
|
|
71
|
+
}, [visible]);
|
|
72
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [react_1.default.cloneElement(children, { onContextMenu: handleContextMenu }), visible && ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.jsx)("div", { ref: menuRef, className: (0, cn_js_1.cn)('tokis-context-menu', className), role: "menu", tabIndex: -1, style: { position: 'fixed', top: pos.y, left: pos.x }, children: items.map((item, i) => {
|
|
73
|
+
if (item.type === 'separator') {
|
|
74
|
+
return (0, jsx_runtime_1.jsx)("div", { className: "tokis-context-menu__separator", role: "separator" }, i);
|
|
75
|
+
}
|
|
76
|
+
if (item.type === 'label') {
|
|
77
|
+
return (0, jsx_runtime_1.jsx)("div", { className: "tokis-context-menu__label", children: item.label }, i);
|
|
78
|
+
}
|
|
79
|
+
return ((0, jsx_runtime_1.jsxs)("button", { role: "menuitem", className: (0, cn_js_1.cn)('tokis-context-menu__item', item.destructive && 'tokis-context-menu__item--destructive', item.disabled && 'tokis-context-menu__item--disabled'), disabled: item.disabled, onClick: () => { item.onClick?.(); close(); }, children: [item.icon && (0, jsx_runtime_1.jsx)("span", { className: "tokis-context-menu__icon", "aria-hidden": "true", children: item.icon }), item.label] }, i));
|
|
80
|
+
}) }) }))] }));
|
|
81
|
+
}
|
|
82
|
+
ContextMenu.displayName = 'ContextMenu';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Dialog = Dialog;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const cn_js_1 = require("../../utils/cn");
|
|
7
|
+
const index_js_1 = require("../portal/index");
|
|
8
|
+
const core_1 = require("@tokis/core");
|
|
9
|
+
function Dialog({ open, onClose, title, description, children, footer, size = 'md', closeOnBackdrop = true, closeOnEsc = true, className, 'aria-label': ariaLabel, }) {
|
|
10
|
+
const contentRef = (0, react_1.useRef)(null);
|
|
11
|
+
const uid = (0, react_1.useId)();
|
|
12
|
+
const titleId = title ? `dialog-title-${uid}` : undefined;
|
|
13
|
+
const descId = description ? `dialog-desc-${uid}` : undefined;
|
|
14
|
+
(0, react_1.useEffect)(() => {
|
|
15
|
+
if (!open)
|
|
16
|
+
return;
|
|
17
|
+
const cleanup = contentRef.current ? (0, core_1.trapFocus)(contentRef.current) : undefined;
|
|
18
|
+
const prev = document.activeElement;
|
|
19
|
+
contentRef.current?.focus();
|
|
20
|
+
return () => {
|
|
21
|
+
cleanup?.();
|
|
22
|
+
prev?.focus();
|
|
23
|
+
};
|
|
24
|
+
}, [open]);
|
|
25
|
+
(0, react_1.useEffect)(() => {
|
|
26
|
+
if (!open || !closeOnEsc)
|
|
27
|
+
return;
|
|
28
|
+
const handle = (e) => { if (e.key === 'Escape')
|
|
29
|
+
onClose(); };
|
|
30
|
+
document.addEventListener('keydown', handle);
|
|
31
|
+
return () => document.removeEventListener('keydown', handle);
|
|
32
|
+
}, [open, closeOnEsc, onClose]);
|
|
33
|
+
(0, react_1.useEffect)(() => {
|
|
34
|
+
if (open) {
|
|
35
|
+
const prev = document.body.style.overflow;
|
|
36
|
+
document.body.style.overflow = 'hidden';
|
|
37
|
+
return () => { document.body.style.overflow = prev; };
|
|
38
|
+
}
|
|
39
|
+
}, [open]);
|
|
40
|
+
if (!open)
|
|
41
|
+
return null;
|
|
42
|
+
return ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.jsx)("div", { className: "tokis-dialog-backdrop", "aria-hidden": "true", onClick: closeOnBackdrop ? onClose : undefined, children: (0, jsx_runtime_1.jsxs)("div", { ref: contentRef, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": descId, "aria-label": !title ? ariaLabel : undefined, tabIndex: -1, className: (0, cn_js_1.cn)('tokis-dialog-content', size !== 'md' && `tokis-dialog-content--${size}`, className), onClick: (e) => e.stopPropagation(), children: [(title || description) && ((0, jsx_runtime_1.jsxs)("div", { className: "tokis-dialog-header", children: [(0, jsx_runtime_1.jsxs)("div", { children: [title && (0, jsx_runtime_1.jsx)("h2", { id: titleId, className: "tokis-dialog-title", children: title }), description && (0, jsx_runtime_1.jsx)("p", { id: descId, className: "tokis-dialog-description", children: description })] }), (0, jsx_runtime_1.jsx)("button", { className: "tokis-dialog-close", onClick: onClose, "aria-label": "Close dialog", children: (0, jsx_runtime_1.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M3 3l10 10M13 3L3 13", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) })] })), children && (0, jsx_runtime_1.jsx)("div", { className: "tokis-dialog-body", children: children }), footer && (0, jsx_runtime_1.jsx)("div", { className: "tokis-dialog-footer", children: footer })] }) }) }));
|
|
43
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Divider = void 0;
|
|
4
|
+
// Re-export Divider from card
|
|
5
|
+
var index_js_1 = require("../card/index");
|
|
6
|
+
Object.defineProperty(exports, "Divider", { enumerable: true, get: function () { return index_js_1.Divider; } });
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Drawer = Drawer;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const cn_js_1 = require("../../utils/cn");
|
|
7
|
+
const index_js_1 = require("../portal/index");
|
|
8
|
+
const core_1 = require("@tokis/core");
|
|
9
|
+
function Drawer({ open, onClose, side = 'right', title, description, children, footer, closeOnBackdrop = true, closeOnEsc = true, className }) {
|
|
10
|
+
const contentRef = (0, react_1.useRef)(null);
|
|
11
|
+
(0, react_1.useEffect)(() => {
|
|
12
|
+
if (!open)
|
|
13
|
+
return;
|
|
14
|
+
const cleanup = contentRef.current ? (0, core_1.trapFocus)(contentRef.current) : undefined;
|
|
15
|
+
const prev = document.activeElement;
|
|
16
|
+
contentRef.current?.focus();
|
|
17
|
+
return () => { cleanup?.(); prev?.focus(); };
|
|
18
|
+
}, [open]);
|
|
19
|
+
(0, react_1.useEffect)(() => {
|
|
20
|
+
if (!open || !closeOnEsc)
|
|
21
|
+
return;
|
|
22
|
+
const h = (e) => { if (e.key === 'Escape')
|
|
23
|
+
onClose(); };
|
|
24
|
+
document.addEventListener('keydown', h);
|
|
25
|
+
return () => document.removeEventListener('keydown', h);
|
|
26
|
+
}, [open, closeOnEsc, onClose]);
|
|
27
|
+
(0, react_1.useEffect)(() => {
|
|
28
|
+
if (open) {
|
|
29
|
+
const prev = document.body.style.overflow;
|
|
30
|
+
document.body.style.overflow = 'hidden';
|
|
31
|
+
return () => { document.body.style.overflow = prev; };
|
|
32
|
+
}
|
|
33
|
+
}, [open]);
|
|
34
|
+
if (!open)
|
|
35
|
+
return null;
|
|
36
|
+
return ((0, jsx_runtime_1.jsxs)(index_js_1.Portal, { children: [(0, jsx_runtime_1.jsx)("div", { className: "tokis-drawer-backdrop", "aria-hidden": "true", onClick: closeOnBackdrop ? onClose : undefined }), (0, jsx_runtime_1.jsxs)("div", { ref: contentRef, role: "dialog", "aria-modal": "true", tabIndex: -1, className: (0, cn_js_1.cn)(`tokis-drawer-content tokis-drawer-content--${side}`, className), onClick: (e) => e.stopPropagation(), children: [(title || description) && ((0, jsx_runtime_1.jsxs)("div", { className: "tokis-drawer-header", children: [title && (0, jsx_runtime_1.jsx)("h2", { className: "tokis-drawer-title", children: title }), description && (0, jsx_runtime_1.jsx)("p", { className: "tokis-drawer-description", children: description }), (0, jsx_runtime_1.jsx)("button", { className: "tokis-drawer-close", onClick: onClose, "aria-label": "Close drawer", children: (0, jsx_runtime_1.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: "M3 3l10 10M13 3L3 13", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) })] })), (0, jsx_runtime_1.jsx)("div", { className: "tokis-drawer-body", children: children }), footer && (0, jsx_runtime_1.jsx)("div", { className: "tokis-drawer-footer", children: footer })] })] }));
|
|
37
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Dropdown = Dropdown;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const cn_js_1 = require("../../utils/cn");
|
|
40
|
+
const index_js_1 = require("../portal/index");
|
|
41
|
+
function computeDropdownPos(anchor, placement) {
|
|
42
|
+
const gap = 4;
|
|
43
|
+
switch (placement) {
|
|
44
|
+
case 'bottom-start': return { top: anchor.bottom + gap, left: anchor.left };
|
|
45
|
+
case 'bottom-end': return { top: anchor.bottom + gap, left: anchor.right };
|
|
46
|
+
case 'top-start': return { top: anchor.top - gap, left: anchor.left };
|
|
47
|
+
case 'top-end': return { top: anchor.top - gap, left: anchor.right };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const transformMap = {
|
|
51
|
+
'bottom-start': 'none',
|
|
52
|
+
'bottom-end': 'translateX(-100%)',
|
|
53
|
+
'top-start': 'translateY(-100%)',
|
|
54
|
+
'top-end': 'translate(-100%, -100%)',
|
|
55
|
+
};
|
|
56
|
+
function Dropdown({ trigger, children, placement = 'bottom-start', open: controlledOpen, defaultOpen = false, onOpenChange, className, }) {
|
|
57
|
+
const [internalOpen, setInternalOpen] = (0, react_1.useState)(defaultOpen);
|
|
58
|
+
const isControlled = controlledOpen !== undefined;
|
|
59
|
+
const isOpen = isControlled ? controlledOpen : internalOpen;
|
|
60
|
+
const [pos, setPos] = (0, react_1.useState)({ top: 0, left: 0 });
|
|
61
|
+
const anchorRef = (0, react_1.useRef)(null);
|
|
62
|
+
const menuRef = (0, react_1.useRef)(null);
|
|
63
|
+
const setOpen = (0, react_1.useCallback)((v) => {
|
|
64
|
+
if (!isControlled)
|
|
65
|
+
setInternalOpen(v);
|
|
66
|
+
onOpenChange?.(v);
|
|
67
|
+
}, [isControlled, onOpenChange]);
|
|
68
|
+
const toggle = (0, react_1.useCallback)(() => {
|
|
69
|
+
const next = !isOpen;
|
|
70
|
+
if (next && anchorRef.current) {
|
|
71
|
+
const rect = anchorRef.current.getBoundingClientRect();
|
|
72
|
+
setPos(computeDropdownPos(rect, placement));
|
|
73
|
+
}
|
|
74
|
+
setOpen(next);
|
|
75
|
+
}, [isOpen, placement, setOpen]);
|
|
76
|
+
(0, react_1.useEffect)(() => {
|
|
77
|
+
if (!isOpen)
|
|
78
|
+
return;
|
|
79
|
+
const onKey = (e) => { if (e.key === 'Escape')
|
|
80
|
+
setOpen(false); };
|
|
81
|
+
const onMouse = (e) => {
|
|
82
|
+
if (menuRef.current && !menuRef.current.contains(e.target) &&
|
|
83
|
+
anchorRef.current && !anchorRef.current.contains(e.target)) {
|
|
84
|
+
setOpen(false);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
document.addEventListener('keydown', onKey);
|
|
88
|
+
document.addEventListener('mousedown', onMouse);
|
|
89
|
+
return () => {
|
|
90
|
+
document.removeEventListener('keydown', onKey);
|
|
91
|
+
document.removeEventListener('mousedown', onMouse);
|
|
92
|
+
};
|
|
93
|
+
}, [isOpen, setOpen]);
|
|
94
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [react_1.default.cloneElement(trigger, {
|
|
95
|
+
ref: anchorRef,
|
|
96
|
+
onClick: (...args) => {
|
|
97
|
+
toggle();
|
|
98
|
+
trigger.props.onClick?.(...args);
|
|
99
|
+
},
|
|
100
|
+
'aria-expanded': isOpen,
|
|
101
|
+
'aria-haspopup': 'true',
|
|
102
|
+
}), isOpen && ((0, jsx_runtime_1.jsx)(index_js_1.Portal, { children: (0, jsx_runtime_1.jsx)("div", { ref: menuRef, className: (0, cn_js_1.cn)('tokis-dropdown', `tokis-dropdown--${placement}`, className), style: { position: 'fixed', top: pos.top, left: pos.left, transform: transformMap[placement] }, children: children }) }))] }));
|
|
103
|
+
}
|
|
104
|
+
Dropdown.displayName = 'Dropdown';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmptyState = EmptyState;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const cn_js_1 = require("../../utils/cn");
|
|
6
|
+
function EmptyState({ icon, title, description, action, className }) {
|
|
7
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_js_1.cn)('tokis-empty-state', className), role: "status", children: [icon && (0, jsx_runtime_1.jsx)("div", { className: "tokis-empty-state__icon", "aria-hidden": "true", children: icon }), (0, jsx_runtime_1.jsx)("h3", { className: "tokis-empty-state__title", children: title }), description && (0, jsx_runtime_1.jsx)("p", { className: "tokis-empty-state__description", children: description }), action && (0, jsx_runtime_1.jsx)("div", { className: "tokis-empty-state__action", children: action })] }));
|
|
8
|
+
}
|
|
9
|
+
EmptyState.displayName = 'EmptyState';
|