@ktnpm_devops/react-component 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -5
- package/dist/composites/ChartExpandModal/ChartExpandModal.d.ts +21 -0
- package/dist/composites/ChartExpandModal/ChartExpandModal.d.ts.map +1 -0
- package/dist/composites/ChartExpandModal/index.d.ts +3 -0
- package/dist/composites/ChartExpandModal/index.d.ts.map +1 -0
- package/dist/composites/ContextMenu/ContextMenu.d.ts +20 -0
- package/dist/composites/ContextMenu/ContextMenu.d.ts.map +1 -0
- package/dist/composites/ContextMenu/index.d.ts +3 -0
- package/dist/composites/ContextMenu/index.d.ts.map +1 -0
- package/dist/composites/CustomRangePicker/CustomRangePicker.d.ts +13 -0
- package/dist/composites/CustomRangePicker/CustomRangePicker.d.ts.map +1 -0
- package/dist/composites/CustomRangePicker/index.d.ts +3 -0
- package/dist/composites/CustomRangePicker/index.d.ts.map +1 -0
- package/dist/composites/MultiSelectDropdown/MultiSelectDropdown.d.ts +29 -0
- package/dist/composites/MultiSelectDropdown/MultiSelectDropdown.d.ts.map +1 -0
- package/dist/composites/MultiSelectDropdown/index.d.ts +3 -0
- package/dist/composites/MultiSelectDropdown/index.d.ts.map +1 -0
- package/dist/composites/ResizableSplitPanel/ResizableSplitPanel.d.ts +16 -0
- package/dist/composites/ResizableSplitPanel/ResizableSplitPanel.d.ts.map +1 -0
- package/dist/composites/ResizableSplitPanel/index.d.ts +3 -0
- package/dist/composites/ResizableSplitPanel/index.d.ts.map +1 -0
- package/dist/composites/SingleSelectDropdown/SingleSelectDropdown.d.ts +23 -0
- package/dist/composites/SingleSelectDropdown/SingleSelectDropdown.d.ts.map +1 -0
- package/dist/composites/SingleSelectDropdown/index.d.ts +3 -0
- package/dist/composites/SingleSelectDropdown/index.d.ts.map +1 -0
- package/dist/constants.d.ts +32 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/index.cjs +17 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -5
- package/dist/index.js.map +1 -1
- package/dist/index10.cjs +2 -2
- package/dist/index10.js +2 -2
- package/dist/index11.cjs +2 -2
- package/dist/index11.js +2 -2
- package/dist/index12.cjs +99 -7
- package/dist/index12.cjs.map +1 -1
- package/dist/index12.js +101 -9
- package/dist/index12.js.map +1 -1
- package/dist/index13.cjs +87 -35
- package/dist/index13.cjs.map +1 -1
- package/dist/index13.js +87 -35
- package/dist/index13.js.map +1 -1
- package/dist/index14.cjs +120 -7
- package/dist/index14.cjs.map +1 -1
- package/dist/index14.js +122 -9
- package/dist/index14.js.map +1 -1
- package/dist/index15.cjs +8 -6
- package/dist/index15.cjs.map +1 -1
- package/dist/index15.js +8 -6
- package/dist/index15.js.map +1 -1
- package/dist/index16.cjs +38 -8
- package/dist/index16.cjs.map +1 -1
- package/dist/index16.js +39 -9
- package/dist/index16.js.map +1 -1
- package/dist/index17.cjs +226 -16
- package/dist/index17.cjs.map +1 -1
- package/dist/index17.js +225 -15
- package/dist/index17.js.map +1 -1
- package/dist/index18.cjs +79 -18
- package/dist/index18.cjs.map +1 -1
- package/dist/index18.js +78 -17
- package/dist/index18.js.map +1 -1
- package/dist/index19.cjs +10 -10
- package/dist/index19.cjs.map +1 -1
- package/dist/index19.js +9 -9
- package/dist/index19.js.map +1 -1
- package/dist/index20.cjs +144 -6
- package/dist/index20.cjs.map +1 -1
- package/dist/index20.js +143 -5
- package/dist/index20.js.map +1 -1
- package/dist/index21.cjs +8 -7
- package/dist/index21.cjs.map +1 -1
- package/dist/index21.js +7 -6
- package/dist/index21.js.map +1 -1
- package/dist/index22.cjs +10 -28
- package/dist/index22.cjs.map +1 -1
- package/dist/index22.js +9 -27
- package/dist/index22.js.map +1 -1
- package/dist/index23.cjs +15 -6
- package/dist/index23.cjs.map +1 -1
- package/dist/index23.js +15 -6
- package/dist/index23.js.map +1 -1
- package/dist/index24.cjs +22 -10
- package/dist/index24.cjs.map +1 -1
- package/dist/index24.js +23 -11
- package/dist/index24.js.map +1 -1
- package/dist/index25.cjs +13 -19
- package/dist/index25.cjs.map +1 -1
- package/dist/index25.js +13 -19
- package/dist/index25.js.map +1 -1
- package/dist/index26.cjs +2 -11
- package/dist/index26.cjs.map +1 -1
- package/dist/index26.js +3 -12
- package/dist/index26.js.map +1 -1
- package/dist/index27.cjs +12 -0
- package/dist/index27.cjs.map +1 -0
- package/dist/index27.js +12 -0
- package/dist/index27.js.map +1 -0
- package/dist/index28.cjs +9 -0
- package/dist/index28.cjs.map +1 -0
- package/dist/index28.js +9 -0
- package/dist/index28.js.map +1 -0
- package/dist/index29.cjs +18 -0
- package/dist/index29.cjs.map +1 -0
- package/dist/index29.js +18 -0
- package/dist/index29.js.map +1 -0
- package/dist/index30.cjs +30 -0
- package/dist/index30.cjs.map +1 -0
- package/dist/index30.js +30 -0
- package/dist/index30.js.map +1 -0
- package/dist/index31.cjs +87 -0
- package/dist/index31.cjs.map +1 -0
- package/dist/index31.js +87 -0
- package/dist/index31.js.map +1 -0
- package/dist/index32.cjs +60 -0
- package/dist/index32.cjs.map +1 -0
- package/dist/index32.js +60 -0
- package/dist/index32.js.map +1 -0
- package/dist/index33.cjs +27 -0
- package/dist/index33.cjs.map +1 -0
- package/dist/index33.js +27 -0
- package/dist/index33.js.map +1 -0
- package/dist/index34.cjs +21 -0
- package/dist/index34.cjs.map +1 -0
- package/dist/index34.js +21 -0
- package/dist/index34.js.map +1 -0
- package/dist/index35.cjs +36 -0
- package/dist/index35.cjs.map +1 -0
- package/dist/index35.js +36 -0
- package/dist/index35.js.map +1 -0
- package/dist/index36.cjs +42 -0
- package/dist/index36.cjs.map +1 -0
- package/dist/index36.js +42 -0
- package/dist/index36.js.map +1 -0
- package/dist/index37.cjs +9 -0
- package/dist/index37.cjs.map +1 -0
- package/dist/index37.js +9 -0
- package/dist/index37.js.map +1 -0
- package/dist/index38.cjs +21 -0
- package/dist/index38.cjs.map +1 -0
- package/dist/index38.js +21 -0
- package/dist/index38.js.map +1 -0
- package/dist/index39.cjs +18 -0
- package/dist/index39.cjs.map +1 -0
- package/dist/index39.js +18 -0
- package/dist/index39.js.map +1 -0
- package/dist/index8.cjs +2 -2
- package/dist/index8.js +2 -2
- package/dist/index9.cjs +2 -2
- package/dist/index9.js +2 -2
- package/dist/style.css +755 -36
- package/dist/tokens/orbit-tokens.css +11 -11
- package/dist/tokens/semantic-tokens.css +53 -2
- package/package.json +19 -20
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @ktnpm_devops/react-component
|
|
2
2
|
|
|
3
3
|
Kenmei's Orbit design system as a tree-shakeable React component library with CSS Modules, full dark mode support, and Storybook documentation.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
pnpm add @
|
|
8
|
+
pnpm add @ktnpm_devops/react-component
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
### Peer Dependencies
|
|
@@ -30,13 +30,13 @@ Import the design tokens in your app entry point:
|
|
|
30
30
|
|
|
31
31
|
```tsx
|
|
32
32
|
// main.tsx or App.tsx
|
|
33
|
-
import '@
|
|
33
|
+
import '@ktnpm_devops/react-component/tokens';
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
## Quick Start
|
|
37
37
|
|
|
38
38
|
```tsx
|
|
39
|
-
import { Button, Card, CardHeader, CardContent, Badge } from '@
|
|
39
|
+
import { Button, Card, CardHeader, CardContent, Badge } from '@ktnpm_devops/react-component';
|
|
40
40
|
|
|
41
41
|
function App() {
|
|
42
42
|
return (
|
|
@@ -81,6 +81,17 @@ All components automatically adapt — no additional configuration needed.
|
|
|
81
81
|
| `Modal` | Dialog overlay with portal, ESC-to-close, focus management |
|
|
82
82
|
| `Avatar` | Initials-based avatar with gradient background |
|
|
83
83
|
|
|
84
|
+
### Composites
|
|
85
|
+
|
|
86
|
+
| Component | Description |
|
|
87
|
+
|-----------|-------------|
|
|
88
|
+
| `MultiSelectDropdown` | Multi-select with search, select/deselect all, pending apply/cancel |
|
|
89
|
+
| `SingleSelectDropdown` | Single-select with search and optional clear button |
|
|
90
|
+
| `CustomRangePicker` | Date range picker with preset ranges and custom selection |
|
|
91
|
+
| `ResizableSplitPanel` | Draggable split layout with keyboard support |
|
|
92
|
+
| `ChartExpandModal` | Full-screen modal for expanded chart views, portal-based with resize |
|
|
93
|
+
| `ContextMenu` | Right-click context menu with keyboard navigation, portal-based |
|
|
94
|
+
|
|
84
95
|
### Hooks
|
|
85
96
|
|
|
86
97
|
| Hook | Description |
|
|
@@ -123,7 +134,7 @@ This project uses [OpenSpec](https://github.com/kenmeitechnologies/openspec) for
|
|
|
123
134
|
Or create the file directly in `.changeset/<change-name>.md`:
|
|
124
135
|
```md
|
|
125
136
|
---
|
|
126
|
-
"@
|
|
137
|
+
"@ktnpm_devops/react-component": patch
|
|
127
138
|
---
|
|
128
139
|
|
|
129
140
|
Description of what changed.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ChartExpandModalProps {
|
|
4
|
+
/** Title displayed in the modal header. */
|
|
5
|
+
title: string;
|
|
6
|
+
/** Content to render inside the modal body. */
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
/** Called when the modal should close. */
|
|
9
|
+
onClose: () => void;
|
|
10
|
+
/** Enable resize handles on the modal. */
|
|
11
|
+
resizable?: boolean;
|
|
12
|
+
/** Default modal dimensions in pixels. */
|
|
13
|
+
defaultSize?: {
|
|
14
|
+
width?: number;
|
|
15
|
+
height?: number;
|
|
16
|
+
};
|
|
17
|
+
/** Additional actions rendered in the header. */
|
|
18
|
+
actions?: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
export declare const ChartExpandModal: ({ title, children, onClose, resizable, defaultSize, actions, }: ChartExpandModalProps) => import('react').ReactPortal | null;
|
|
21
|
+
//# sourceMappingURL=ChartExpandModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartExpandModal.d.ts","sourceRoot":"","sources":["../../../src/composites/ChartExpandModal/ChartExpandModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjF,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAcD,eAAO,MAAM,gBAAgB,GAAI,gEAO9B,qBAAqB,uCA4FvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composites/ChartExpandModal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ContextMenuItem {
|
|
4
|
+
label: string;
|
|
5
|
+
icon?: ReactNode;
|
|
6
|
+
onClick: () => void;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ContextMenuProps {
|
|
10
|
+
/** Horizontal position (px from left). */
|
|
11
|
+
x: number;
|
|
12
|
+
/** Vertical position (px from top). */
|
|
13
|
+
y: number;
|
|
14
|
+
/** Menu items to render. */
|
|
15
|
+
items: ContextMenuItem[];
|
|
16
|
+
/** Called when the menu should close. */
|
|
17
|
+
onClose: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare const ContextMenu: ({ x, y, items, onClose }: ContextMenuProps) => import('react').ReactPortal | null;
|
|
20
|
+
//# sourceMappingURL=ContextMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/composites/ContextMenu/ContextMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,CAAC,EAAE,MAAM,CAAC;IACV,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;IACV,4BAA4B;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,GAAI,0BAA0B,gBAAgB,uCAoFrE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composites/ContextMenu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface CustomRangePickerProps {
|
|
2
|
+
/** Start of the current range (ISO string). */
|
|
3
|
+
from?: string;
|
|
4
|
+
/** End of the current range (ISO string). */
|
|
5
|
+
to?: string;
|
|
6
|
+
/** Called when user applies a valid range. */
|
|
7
|
+
onApply: (range: {
|
|
8
|
+
from: string;
|
|
9
|
+
to: string;
|
|
10
|
+
}) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const CustomRangePicker: ({ from, to, onApply }: CustomRangePickerProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=CustomRangePicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomRangePicker.d.ts","sourceRoot":"","sources":["../../../src/composites/CustomRangePicker/CustomRangePicker.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACxD;AAqBD,eAAO,MAAM,iBAAiB,GAAI,uBAAuB,sBAAsB,4CAsG9E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composites/CustomRangePicker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface MultiSelectOption {
|
|
2
|
+
value: string;
|
|
3
|
+
label?: string;
|
|
4
|
+
count?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface MultiSelectDropdownProps {
|
|
7
|
+
/** Label displayed on the trigger button. */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Available options. */
|
|
10
|
+
options: MultiSelectOption[];
|
|
11
|
+
/** Currently selected values (controlled). */
|
|
12
|
+
selected: string[];
|
|
13
|
+
/** Called when the user applies a new selection. */
|
|
14
|
+
onApply: (values: string[], metadata: {
|
|
15
|
+
selectionMode: 'all' | 'custom';
|
|
16
|
+
}) => void;
|
|
17
|
+
/** Show loading indicator and disable controls. */
|
|
18
|
+
isLoading?: boolean;
|
|
19
|
+
/** Error message to display in the option list. */
|
|
20
|
+
error?: string | null;
|
|
21
|
+
/** Allow creating options from the search term. */
|
|
22
|
+
allowCustomValues?: boolean;
|
|
23
|
+
/** Override the trigger value label. */
|
|
24
|
+
customTriggerLabel?: string;
|
|
25
|
+
/** Explicit selection mode override. */
|
|
26
|
+
selectionMode?: 'all' | 'custom';
|
|
27
|
+
}
|
|
28
|
+
export declare const MultiSelectDropdown: ({ label, options, selected, onApply, isLoading, error, allowCustomValues, customTriggerLabel, selectionMode, }: MultiSelectDropdownProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
//# sourceMappingURL=MultiSelectDropdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSelectDropdown.d.ts","sourceRoot":"","sources":["../../../src/composites/MultiSelectDropdown/MultiSelectDropdown.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oDAAoD;IACpD,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE;QAAE,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAClC;AAQD,eAAO,MAAM,mBAAmB,GAAI,gHAUjC,wBAAwB,4CAwP1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composites/MultiSelectDropdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ResizableSplitPanelProps {
|
|
4
|
+
/** Content for the left panel. */
|
|
5
|
+
leftPanel: ReactNode;
|
|
6
|
+
/** Content for the right panel. */
|
|
7
|
+
rightPanel: ReactNode;
|
|
8
|
+
/** Default left panel width as a percentage (0-100). */
|
|
9
|
+
defaultLeftWidth?: number;
|
|
10
|
+
/** Minimum left panel width as a percentage. */
|
|
11
|
+
minLeftWidth?: number;
|
|
12
|
+
/** Minimum right panel width as a percentage. */
|
|
13
|
+
minRightWidth?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const ResizableSplitPanel: ({ leftPanel, rightPanel, defaultLeftWidth, minLeftWidth, minRightWidth, }: ResizableSplitPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=ResizableSplitPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResizableSplitPanel.d.ts","sourceRoot":"","sources":["../../../src/composites/ResizableSplitPanel/ResizableSplitPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIjF,MAAM,WAAW,wBAAwB;IACvC,kCAAkC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,mCAAmC;IACnC,UAAU,EAAE,SAAS,CAAC;IACtB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,eAAO,MAAM,mBAAmB,GAAI,2EAMjC,wBAAwB,4CA+E1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composites/ResizableSplitPanel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface SingleSelectOption {
|
|
2
|
+
value: string;
|
|
3
|
+
label?: string;
|
|
4
|
+
count?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SingleSelectDropdownProps {
|
|
7
|
+
/** Label displayed on the trigger. */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Available options. */
|
|
10
|
+
options: SingleSelectOption[];
|
|
11
|
+
/** Currently selected value (controlled). `null` means no selection. */
|
|
12
|
+
selected: string | null;
|
|
13
|
+
/** Called when the user selects an option. */
|
|
14
|
+
onSelect: (value: string) => void;
|
|
15
|
+
/** Override the trigger value label. */
|
|
16
|
+
customTriggerLabel?: string;
|
|
17
|
+
/** Called when the user clears the selection. */
|
|
18
|
+
onClear?: () => void;
|
|
19
|
+
/** Show clear button when a value is selected. */
|
|
20
|
+
showClearButton?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare const SingleSelectDropdown: ({ label, options, selected, onSelect, customTriggerLabel, onClear, showClearButton, }: SingleSelectDropdownProps) => import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=SingleSelectDropdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleSelectDropdown.d.ts","sourceRoot":"","sources":["../../../src/composites/SingleSelectDropdown/SingleSelectDropdown.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,oBAAoB,GAAI,uFAQlC,yBAAyB,4CA2I3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composites/SingleSelectDropdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the component library.
|
|
3
|
+
* Centralises magic numbers used across components.
|
|
4
|
+
*/
|
|
5
|
+
/** SVG icon rendered sizes (px — used as HTML/SVG attributes, not CSS). */
|
|
6
|
+
export declare const ICON_SIZE: {
|
|
7
|
+
readonly SM: 14;
|
|
8
|
+
readonly MD: 16;
|
|
9
|
+
readonly LG: 18;
|
|
10
|
+
};
|
|
11
|
+
/** Standard SVG viewBox for 24×24 icon grid. */
|
|
12
|
+
export declare const SVG_VIEWBOX = "0 0 24 24";
|
|
13
|
+
/** Standard SVG stroke width. */
|
|
14
|
+
export declare const SVG_STROKE_WIDTH = 2;
|
|
15
|
+
/** Keyboard accessibility step (percentage points per arrow press). */
|
|
16
|
+
export declare const KEYBOARD_STEP = 2;
|
|
17
|
+
/** Viewport safety margin (px — used in JS calculations with DOM APIs). */
|
|
18
|
+
export declare const VIEWPORT_MARGIN = 32;
|
|
19
|
+
/** ContextMenu viewport margin (px). */
|
|
20
|
+
export declare const CONTEXT_MENU_MARGIN = 10;
|
|
21
|
+
/** ChartExpandModal dimension constraints (px — used with window.innerWidth). */
|
|
22
|
+
export declare const CHART_MODAL: {
|
|
23
|
+
readonly MIN_WIDTH: 960;
|
|
24
|
+
readonly MIN_HEIGHT: 480;
|
|
25
|
+
readonly MAX_WIDTH: 2400;
|
|
26
|
+
readonly MAX_HEIGHT: 1300;
|
|
27
|
+
readonly DEFAULT_WIDTH: 1500;
|
|
28
|
+
readonly DEFAULT_HEIGHT: 820;
|
|
29
|
+
readonly FALLBACK_WIDTH: 1400;
|
|
30
|
+
readonly FALLBACK_HEIGHT: 800;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,gDAAgD;AAChD,eAAO,MAAM,WAAW,cAAc,CAAC;AAEvC,iCAAiC;AACjC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,uEAAuE;AACvE,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,2EAA2E;AAC3E,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,iFAAiF;AACjF,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -10,11 +10,17 @@ const Avatar = require("./index8.cjs");
|
|
|
10
10
|
const Badge = require("./index9.cjs");
|
|
11
11
|
const Button = require("./index10.cjs");
|
|
12
12
|
const Card = require("./index11.cjs");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
13
|
+
const ChartExpandModal = require("./index12.cjs");
|
|
14
|
+
const ContextMenu = require("./index13.cjs");
|
|
15
|
+
const CustomRangePicker = require("./index14.cjs");
|
|
16
|
+
const Input = require("./index15.cjs");
|
|
17
|
+
const Modal = require("./index16.cjs");
|
|
18
|
+
const MultiSelectDropdown = require("./index17.cjs");
|
|
19
|
+
const ResizableSplitPanel = require("./index18.cjs");
|
|
20
|
+
const Select = require("./index19.cjs");
|
|
21
|
+
const SingleSelectDropdown = require("./index20.cjs");
|
|
22
|
+
const Table = require("./index21.cjs");
|
|
23
|
+
const Textarea = require("./index22.cjs");
|
|
18
24
|
exports.orbitTokens = tokens.orbitTokens;
|
|
19
25
|
exports.useClickOutside = useClickOutside.useClickOutside;
|
|
20
26
|
exports.useEscapeKey = useEscapeKey.useEscapeKey;
|
|
@@ -39,9 +45,15 @@ exports.Card = Card.Card;
|
|
|
39
45
|
exports.CardContent = Card.CardContent;
|
|
40
46
|
exports.CardFooter = Card.CardFooter;
|
|
41
47
|
exports.CardHeader = Card.CardHeader;
|
|
48
|
+
exports.ChartExpandModal = ChartExpandModal.ChartExpandModal;
|
|
49
|
+
exports.ContextMenu = ContextMenu.ContextMenu;
|
|
50
|
+
exports.CustomRangePicker = CustomRangePicker.CustomRangePicker;
|
|
42
51
|
exports.Input = Input.Input;
|
|
43
52
|
exports.Modal = Modal.Modal;
|
|
53
|
+
exports.MultiSelectDropdown = MultiSelectDropdown.MultiSelectDropdown;
|
|
54
|
+
exports.ResizableSplitPanel = ResizableSplitPanel.ResizableSplitPanel;
|
|
44
55
|
exports.Select = Select.Select;
|
|
56
|
+
exports.SingleSelectDropdown = SingleSelectDropdown.SingleSelectDropdown;
|
|
45
57
|
exports.Table = Table.Table;
|
|
46
58
|
exports.TableContainer = Table.TableContainer;
|
|
47
59
|
exports.Textarea = Textarea.Textarea;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,18 @@ export { Modal } from './primitives/Modal';
|
|
|
17
17
|
export type { ModalProps } from './primitives/Modal';
|
|
18
18
|
export { Avatar } from './primitives/Avatar';
|
|
19
19
|
export type { AvatarProps, AvatarSize } from './primitives/Avatar';
|
|
20
|
+
export { MultiSelectDropdown } from './composites/MultiSelectDropdown';
|
|
21
|
+
export type { MultiSelectDropdownProps, MultiSelectOption } from './composites/MultiSelectDropdown';
|
|
22
|
+
export { SingleSelectDropdown } from './composites/SingleSelectDropdown';
|
|
23
|
+
export type { SingleSelectDropdownProps, SingleSelectOption } from './composites/SingleSelectDropdown';
|
|
24
|
+
export { CustomRangePicker } from './composites/CustomRangePicker';
|
|
25
|
+
export type { CustomRangePickerProps } from './composites/CustomRangePicker';
|
|
26
|
+
export { ResizableSplitPanel } from './composites/ResizableSplitPanel';
|
|
27
|
+
export type { ResizableSplitPanelProps } from './composites/ResizableSplitPanel';
|
|
28
|
+
export { ChartExpandModal } from './composites/ChartExpandModal';
|
|
29
|
+
export type { ChartExpandModalProps } from './composites/ChartExpandModal';
|
|
30
|
+
export { ContextMenu } from './composites/ContextMenu';
|
|
31
|
+
export type { ContextMenuProps, ContextMenuItem } from './composites/ContextMenu';
|
|
20
32
|
export { useClickOutside } from './hooks/useClickOutside';
|
|
21
33
|
export { useEscapeKey } from './hooks/useEscapeKey';
|
|
22
34
|
export { useResizeObserver } from './hooks/useResizeObserver';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAElF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9E,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,YAAY,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,11 +8,17 @@ import { Avatar } from "./index8.js";
|
|
|
8
8
|
import { Badge } from "./index9.js";
|
|
9
9
|
import { Button } from "./index10.js";
|
|
10
10
|
import { Card, CardContent, CardFooter, CardHeader } from "./index11.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
11
|
+
import { ChartExpandModal } from "./index12.js";
|
|
12
|
+
import { ContextMenu } from "./index13.js";
|
|
13
|
+
import { CustomRangePicker } from "./index14.js";
|
|
14
|
+
import { Input } from "./index15.js";
|
|
15
|
+
import { Modal } from "./index16.js";
|
|
16
|
+
import { MultiSelectDropdown } from "./index17.js";
|
|
17
|
+
import { ResizableSplitPanel } from "./index18.js";
|
|
18
|
+
import { Select } from "./index19.js";
|
|
19
|
+
import { SingleSelectDropdown } from "./index20.js";
|
|
20
|
+
import { Table, TableContainer } from "./index21.js";
|
|
21
|
+
import { Textarea } from "./index22.js";
|
|
16
22
|
export {
|
|
17
23
|
Avatar,
|
|
18
24
|
Badge,
|
|
@@ -21,9 +27,15 @@ export {
|
|
|
21
27
|
CardContent,
|
|
22
28
|
CardFooter,
|
|
23
29
|
CardHeader,
|
|
30
|
+
ChartExpandModal,
|
|
31
|
+
ContextMenu,
|
|
32
|
+
CustomRangePicker,
|
|
24
33
|
Input,
|
|
25
34
|
Modal,
|
|
35
|
+
MultiSelectDropdown,
|
|
36
|
+
ResizableSplitPanel,
|
|
26
37
|
Select,
|
|
38
|
+
SingleSelectDropdown,
|
|
27
39
|
Table,
|
|
28
40
|
TableContainer,
|
|
29
41
|
Textarea,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index10.cjs
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
|
-
const clsx = require("./
|
|
6
|
-
const Button_module = require("./
|
|
5
|
+
const clsx = require("./index23.cjs");
|
|
6
|
+
const Button_module = require("./index24.cjs");
|
|
7
7
|
const Button = react.forwardRef(
|
|
8
8
|
({ className, variant = "primary", size = "md", type = "button", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
9
9
|
"button",
|
package/dist/index10.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef } from "react";
|
|
3
|
-
import { clsx } from "./
|
|
4
|
-
import styles from "./
|
|
3
|
+
import { clsx } from "./index23.js";
|
|
4
|
+
import styles from "./index24.js";
|
|
5
5
|
const Button = forwardRef(
|
|
6
6
|
({ className, variant = "primary", size = "md", type = "button", ...props }, ref) => /* @__PURE__ */ jsx(
|
|
7
7
|
"button",
|
package/dist/index11.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const clsx = require("./
|
|
5
|
-
const Card_module = require("./
|
|
4
|
+
const clsx = require("./index23.cjs");
|
|
5
|
+
const Card_module = require("./index29.cjs");
|
|
6
6
|
const Card = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(Card_module.default.root, className), ...props });
|
|
7
7
|
const CardHeader = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(Card_module.default.header, className), ...props });
|
|
8
8
|
const CardContent = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(Card_module.default.content, className), ...props });
|
package/dist/index11.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { clsx } from "./
|
|
3
|
-
import styles from "./
|
|
2
|
+
import { clsx } from "./index23.js";
|
|
3
|
+
import styles from "./index29.js";
|
|
4
4
|
const Card = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: clsx(styles.root, className), ...props });
|
|
5
5
|
const CardHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: clsx(styles.header, className), ...props });
|
|
6
6
|
const CardContent = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: clsx(styles.content, className), ...props });
|
package/dist/index12.cjs
CHANGED
|
@@ -2,11 +2,103 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
);
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
const reactDom = require("react-dom");
|
|
6
|
+
const useEscapeKey = require("./index4.cjs");
|
|
7
|
+
const constants = require("./index30.cjs");
|
|
8
|
+
const clsx = require("./index23.cjs");
|
|
9
|
+
const ChartExpandModal_module = require("./index35.cjs");
|
|
10
|
+
const getInitialSize = (override) => {
|
|
11
|
+
if (typeof window === "undefined") {
|
|
12
|
+
return {
|
|
13
|
+
width: (override == null ? void 0 : override.width) ?? constants.CHART_MODAL.FALLBACK_WIDTH,
|
|
14
|
+
height: (override == null ? void 0 : override.height) ?? constants.CHART_MODAL.FALLBACK_HEIGHT
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const w = Math.min((override == null ? void 0 : override.width) ?? constants.CHART_MODAL.DEFAULT_WIDTH, window.innerWidth - constants.VIEWPORT_MARGIN);
|
|
18
|
+
const h = Math.min((override == null ? void 0 : override.height) ?? constants.CHART_MODAL.DEFAULT_HEIGHT, window.innerHeight - constants.VIEWPORT_MARGIN);
|
|
19
|
+
return { width: Math.max(w, constants.CHART_MODAL.MIN_WIDTH), height: Math.max(h, constants.CHART_MODAL.MIN_HEIGHT) };
|
|
20
|
+
};
|
|
21
|
+
const ChartExpandModal = ({
|
|
22
|
+
title,
|
|
23
|
+
children,
|
|
24
|
+
onClose,
|
|
25
|
+
resizable = false,
|
|
26
|
+
defaultSize,
|
|
27
|
+
actions
|
|
28
|
+
}) => {
|
|
29
|
+
const [size, setSize] = react.useState(() => getInitialSize(defaultSize));
|
|
30
|
+
const [isReady, setIsReady] = react.useState(false);
|
|
31
|
+
const bodyRef = react.useRef(null);
|
|
32
|
+
useEscapeKey.useEscapeKey(onClose);
|
|
33
|
+
react.useEffect(() => {
|
|
34
|
+
if (!resizable) return;
|
|
35
|
+
const handleResize = () => setSize(getInitialSize(defaultSize));
|
|
36
|
+
window.addEventListener("resize", handleResize);
|
|
37
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
38
|
+
}, [resizable, defaultSize]);
|
|
39
|
+
react.useEffect(() => {
|
|
40
|
+
const check = () => {
|
|
41
|
+
const body = bodyRef.current;
|
|
42
|
+
if (body && body.clientWidth > 0 && body.clientHeight > 0) {
|
|
43
|
+
setIsReady(true);
|
|
44
|
+
} else {
|
|
45
|
+
requestAnimationFrame(check);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
requestAnimationFrame(check);
|
|
49
|
+
}, []);
|
|
50
|
+
const handleResizeStart = react.useCallback(
|
|
51
|
+
(e) => {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
if (!resizable || typeof window === "undefined") return;
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
const startX = "touches" in e ? ((_a = e.touches[0]) == null ? void 0 : _a.clientX) ?? 0 : e.clientX;
|
|
56
|
+
const startY = "touches" in e ? ((_b = e.touches[0]) == null ? void 0 : _b.clientY) ?? 0 : e.clientY;
|
|
57
|
+
const startW = size.width;
|
|
58
|
+
const startH = size.height;
|
|
59
|
+
const handleMove = (ev) => {
|
|
60
|
+
var _a2, _b2;
|
|
61
|
+
const cx = ev instanceof TouchEvent ? ((_a2 = ev.touches[0]) == null ? void 0 : _a2.clientX) ?? 0 : ev.clientX;
|
|
62
|
+
const cy = ev instanceof TouchEvent ? ((_b2 = ev.touches[0]) == null ? void 0 : _b2.clientY) ?? 0 : ev.clientY;
|
|
63
|
+
const maxW = Math.min(window.innerWidth - constants.VIEWPORT_MARGIN, constants.CHART_MODAL.MAX_WIDTH);
|
|
64
|
+
const maxH = Math.min(window.innerHeight - constants.VIEWPORT_MARGIN, constants.CHART_MODAL.MAX_HEIGHT);
|
|
65
|
+
setSize({
|
|
66
|
+
width: Math.min(Math.max(startW + (cx - startX), constants.CHART_MODAL.MIN_WIDTH), maxW),
|
|
67
|
+
height: Math.min(Math.max(startH + (cy - startY), constants.CHART_MODAL.MIN_HEIGHT), maxH)
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const handleUp = () => {
|
|
71
|
+
window.removeEventListener("mousemove", handleMove);
|
|
72
|
+
window.removeEventListener("mouseup", handleUp);
|
|
73
|
+
window.removeEventListener("touchmove", handleMove);
|
|
74
|
+
window.removeEventListener("touchend", handleUp);
|
|
75
|
+
};
|
|
76
|
+
window.addEventListener("mousemove", handleMove);
|
|
77
|
+
window.addEventListener("mouseup", handleUp);
|
|
78
|
+
window.addEventListener("touchmove", handleMove, { passive: false });
|
|
79
|
+
window.addEventListener("touchend", handleUp);
|
|
80
|
+
},
|
|
81
|
+
[resizable, size]
|
|
82
|
+
);
|
|
83
|
+
if (typeof document === "undefined") return null;
|
|
84
|
+
const modalStyle = resizable ? { width: `${size.width}px`, height: `${size.height}px` } : void 0;
|
|
85
|
+
return reactDom.createPortal(
|
|
86
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: ChartExpandModal_module.default.overlay, role: "dialog", "aria-modal": "true", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx.clsx(ChartExpandModal_module.default.modal, { [ChartExpandModal_module.default.resizable]: resizable }), style: modalStyle, children: [
|
|
87
|
+
/* @__PURE__ */ jsxRuntime.jsxs("header", { className: ChartExpandModal_module.default.header, children: [
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: ChartExpandModal_module.default.title, children: title }),
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: ChartExpandModal_module.default.headerActions, children: [
|
|
90
|
+
actions,
|
|
91
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: ChartExpandModal_module.default.close, onClick: onClose, "aria-label": "Close expanded chart", children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: constants.ICON_SIZE.LG, height: constants.ICON_SIZE.LG, viewBox: constants.SVG_VIEWBOX, fill: "none", stroke: "currentColor", strokeWidth: constants.SVG_STROKE_WIDTH, strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
94
|
+
] }) })
|
|
95
|
+
] })
|
|
96
|
+
] }),
|
|
97
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: ChartExpandModal_module.default.body, ref: bodyRef, children: isReady ? children : /* @__PURE__ */ jsxRuntime.jsx("div", { className: ChartExpandModal_module.default.loading, children: "Loading chart..." }) }),
|
|
98
|
+
resizable && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ChartExpandModal_module.default.resizeHandle, onMouseDown: handleResizeStart, onTouchStart: handleResizeStart, children: /* @__PURE__ */ jsxRuntime.jsx("span", {}) })
|
|
99
|
+
] }) }),
|
|
100
|
+
document.body
|
|
101
|
+
);
|
|
102
|
+
};
|
|
103
|
+
exports.ChartExpandModal = ChartExpandModal;
|
|
12
104
|
//# sourceMappingURL=index12.cjs.map
|
package/dist/index12.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index12.cjs","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index12.cjs","sources":["../src/composites/ChartExpandModal/ChartExpandModal.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { CHART_MODAL, VIEWPORT_MARGIN, ICON_SIZE, SVG_VIEWBOX, SVG_STROKE_WIDTH } from '../../constants';\nimport clsx from 'clsx';\nimport styles from './ChartExpandModal.module.css';\n\nexport interface ChartExpandModalProps {\n /** Title displayed in the modal header. */\n title: string;\n /** Content to render inside the modal body. */\n children: ReactNode;\n /** Called when the modal should close. */\n onClose: () => void;\n /** Enable resize handles on the modal. */\n resizable?: boolean;\n /** Default modal dimensions in pixels. */\n defaultSize?: { width?: number; height?: number };\n /** Additional actions rendered in the header. */\n actions?: ReactNode;\n}\n\nconst getInitialSize = (override?: { width?: number; height?: number }) => {\n if (typeof window === 'undefined') {\n return {\n width: override?.width ?? CHART_MODAL.FALLBACK_WIDTH,\n height: override?.height ?? CHART_MODAL.FALLBACK_HEIGHT,\n };\n }\n const w = Math.min(override?.width ?? CHART_MODAL.DEFAULT_WIDTH, window.innerWidth - VIEWPORT_MARGIN);\n const h = Math.min(override?.height ?? CHART_MODAL.DEFAULT_HEIGHT, window.innerHeight - VIEWPORT_MARGIN);\n return { width: Math.max(w, CHART_MODAL.MIN_WIDTH), height: Math.max(h, CHART_MODAL.MIN_HEIGHT) };\n};\n\nexport const ChartExpandModal = ({\n title,\n children,\n onClose,\n resizable = false,\n defaultSize,\n actions,\n}: ChartExpandModalProps) => {\n const [size, setSize] = useState(() => getInitialSize(defaultSize));\n const [isReady, setIsReady] = useState(false);\n const bodyRef = useRef<HTMLDivElement>(null);\n\n useEscapeKey(onClose);\n\n useEffect(() => {\n if (!resizable) return;\n const handleResize = () => setSize(getInitialSize(defaultSize));\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [resizable, defaultSize]);\n\n useEffect(() => {\n const check = () => {\n const body = bodyRef.current;\n if (body && body.clientWidth > 0 && body.clientHeight > 0) {\n setIsReady(true);\n } else {\n requestAnimationFrame(check);\n }\n };\n requestAnimationFrame(check);\n }, []);\n\n const handleResizeStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n if (!resizable || typeof window === 'undefined') return;\n e.preventDefault();\n const startX = 'touches' in e ? e.touches[0]?.clientX ?? 0 : e.clientX;\n const startY = 'touches' in e ? e.touches[0]?.clientY ?? 0 : e.clientY;\n const startW = size.width;\n const startH = size.height;\n\n const handleMove = (ev: MouseEvent | TouchEvent) => {\n const cx = ev instanceof TouchEvent ? ev.touches[0]?.clientX ?? 0 : (ev as MouseEvent).clientX;\n const cy = ev instanceof TouchEvent ? ev.touches[0]?.clientY ?? 0 : (ev as MouseEvent).clientY;\n const maxW = Math.min(window.innerWidth - VIEWPORT_MARGIN, CHART_MODAL.MAX_WIDTH);\n const maxH = Math.min(window.innerHeight - VIEWPORT_MARGIN, CHART_MODAL.MAX_HEIGHT);\n setSize({\n width: Math.min(Math.max(startW + (cx - startX), CHART_MODAL.MIN_WIDTH), maxW),\n height: Math.min(Math.max(startH + (cy - startY), CHART_MODAL.MIN_HEIGHT), maxH),\n });\n };\n\n const handleUp = () => {\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('mouseup', handleUp);\n window.removeEventListener('touchmove', handleMove as EventListener);\n window.removeEventListener('touchend', handleUp);\n };\n\n window.addEventListener('mousemove', handleMove);\n window.addEventListener('mouseup', handleUp);\n window.addEventListener('touchmove', handleMove as EventListener, { passive: false });\n window.addEventListener('touchend', handleUp);\n },\n [resizable, size],\n );\n\n if (typeof document === 'undefined') return null;\n\n const modalStyle = resizable ? { width: `${size.width}px`, height: `${size.height}px` } : undefined;\n\n return createPortal(\n <div className={styles.overlay} role=\"dialog\" aria-modal=\"true\">\n <div className={clsx(styles.modal, { [styles.resizable]: resizable })} style={modalStyle}>\n <header className={styles.header}>\n <h2 className={styles.title}>{title}</h2>\n <div className={styles.headerActions}>\n {actions}\n <button type=\"button\" className={styles.close} onClick={onClose} aria-label=\"Close expanded chart\">\n <svg width={ICON_SIZE.LG} height={ICON_SIZE.LG} viewBox={SVG_VIEWBOX} fill=\"none\" stroke=\"currentColor\" strokeWidth={SVG_STROKE_WIDTH} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n </header>\n <div className={styles.body} ref={bodyRef}>\n {isReady ? children : <div className={styles.loading}>Loading chart...</div>}\n </div>\n {resizable && (\n <div className={styles.resizeHandle} onMouseDown={handleResizeStart} onTouchStart={handleResizeStart}>\n <span />\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n};\n"],"names":["CHART_MODAL","VIEWPORT_MARGIN","useState","useRef","useEscapeKey","useEffect","useCallback","_a","_b","createPortal","jsx","styles","jsxs","clsx","ICON_SIZE","SVG_VIEWBOX","SVG_STROKE_WIDTH"],"mappings":"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"}
|