@gunkin/uiify 0.0.3-alpha → 0.0.5-alpha
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/dist/components/candle-chart/CandleChart.d.ts +10 -1
- package/dist/components/candle-chart/CandleChart.d.ts.map +1 -1
- package/dist/components/candle-chart/CandleChart.js +82 -42
- package/dist/components/candle-chart/CandleChart.js.map +1 -1
- package/dist/components/candle-chart/client/CandleChartClient.d.ts +2 -2
- package/dist/components/candle-chart/client/CandleChartClient.d.ts.map +1 -1
- package/dist/components/candle-chart/client/CandleChartClient.js +103 -14
- package/dist/components/candle-chart/client/CandleChartClient.js.map +1 -1
- package/dist/components/candle-chart/client/index.d.ts +1 -0
- package/dist/components/candle-chart/client/index.d.ts.map +1 -1
- package/dist/components/candle-chart/client/index.js.map +1 -1
- package/dist/components/candle-chart/types.d.ts +39 -0
- package/dist/components/candle-chart/types.d.ts.map +1 -1
- package/dist/components/color-picker/ColorPicker.d.ts +4 -34
- package/dist/components/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/color-picker/ColorPicker.js +96 -164
- package/dist/components/color-picker/ColorPicker.js.map +1 -1
- package/dist/components/color-picker/index.d.ts +2 -3
- package/dist/components/color-picker/index.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +2 -40
- package/dist/components/color-picker/index.js.map +1 -1
- package/dist/components/color-picker/types.d.ts +13 -69
- package/dist/components/color-picker/types.d.ts.map +1 -1
- package/dist/components/context-menu/ContextMenu.d.ts.map +1 -1
- package/dist/components/context-menu/ContextMenu.js +13 -1
- package/dist/components/context-menu/ContextMenu.js.map +1 -1
- package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.d.ts +11 -0
- package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.d.ts.map +1 -0
- package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.js +21 -0
- package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.js.map +1 -0
- package/dist/components/internal/live-chart/types.d.ts +36 -0
- package/dist/components/internal/live-chart/types.d.ts.map +1 -0
- package/dist/components/internal/live-chart/types.js +1 -0
- package/dist/components/internal/live-chart/types.js.map +1 -0
- package/dist/components/internal/live-chart/use-live-chart-window.d.ts +18 -0
- package/dist/components/internal/live-chart/use-live-chart-window.d.ts.map +1 -0
- package/dist/components/internal/live-chart/use-live-chart-window.js +75 -0
- package/dist/components/internal/live-chart/use-live-chart-window.js.map +1 -0
- package/dist/components/line-chart/LineChart.d.ts +6 -1
- package/dist/components/line-chart/LineChart.d.ts.map +1 -1
- package/dist/components/line-chart/LineChart.js +82 -48
- package/dist/components/line-chart/LineChart.js.map +1 -1
- package/dist/components/line-chart/client/LineChartClient.d.ts +2 -2
- package/dist/components/line-chart/client/LineChartClient.d.ts.map +1 -1
- package/dist/components/line-chart/client/LineChartClient.js +106 -14
- package/dist/components/line-chart/client/LineChartClient.js.map +1 -1
- package/dist/components/line-chart/client/index.d.ts +1 -1
- package/dist/components/line-chart/client/index.d.ts.map +1 -1
- package/dist/components/line-chart/client/index.js.map +1 -1
- package/dist/components/line-chart/line-chart-geometry.d.ts +7 -0
- package/dist/components/line-chart/line-chart-geometry.d.ts.map +1 -1
- package/dist/components/line-chart/line-chart-geometry.js +14 -2
- package/dist/components/line-chart/line-chart-geometry.js.map +1 -1
- package/dist/components/line-chart/types.d.ts +42 -0
- package/dist/components/line-chart/types.d.ts.map +1 -1
- package/dist/components/number-field/NumberField.d.ts.map +1 -1
- package/dist/components/number-field/NumberField.js +5 -1
- package/dist/components/number-field/NumberField.js.map +1 -1
- package/dist/components/slider/Slider.d.ts.map +1 -1
- package/dist/components/slider/Slider.js +15 -0
- package/dist/components/slider/Slider.js.map +1 -1
- package/dist/components/slider/client/SliderClient.d.ts +7 -0
- package/dist/components/slider/client/SliderClient.d.ts.map +1 -0
- package/dist/components/slider/client/SliderClient.js +170 -0
- package/dist/components/slider/client/SliderClient.js.map +1 -0
- package/dist/components/slider/client/index.d.ts +3 -0
- package/dist/components/slider/client/index.d.ts.map +1 -0
- package/dist/components/slider/client/index.js +5 -0
- package/dist/components/slider/client/index.js.map +1 -0
- package/dist/components/slider/client.d.ts +1 -0
- package/dist/components/slider/client.js +1 -0
- package/dist/components/slider/slider-values.d.ts +4 -0
- package/dist/components/slider/slider-values.d.ts.map +1 -0
- package/dist/components/slider/slider-values.js +26 -0
- package/dist/components/slider/slider-values.js.map +1 -0
- package/dist/components/slider/types.d.ts +26 -1
- package/dist/components/slider/types.d.ts.map +1 -1
- package/dist/styles/index.css +1 -1
- package/package.json +1 -1
- package/dist/components/color-picker/color.d.ts +0 -15
- package/dist/components/color-picker/color.d.ts.map +0 -1
- package/dist/components/color-picker/color.js +0 -190
- package/dist/components/color-picker/color.js.map +0 -1
|
@@ -1,37 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type {
|
|
3
|
-
export
|
|
4
|
-
export declare
|
|
5
|
-
export declare namespace ColorPickerRoot {
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import type { ColorPickerProps } from "./types.js";
|
|
3
|
+
export declare function ColorPicker(props: ColorPickerProps): ReactElement;
|
|
4
|
+
export declare namespace ColorPicker {
|
|
6
5
|
var displayName: string;
|
|
7
6
|
}
|
|
8
|
-
export declare function ColorPickerTrigger(props: ColorPickerTriggerOwnProps): ReactElement | null;
|
|
9
|
-
export declare namespace ColorPickerTrigger {
|
|
10
|
-
var displayName: string;
|
|
11
|
-
}
|
|
12
|
-
export declare function ColorPickerContent(props: ColorPickerContentOwnProps): ReactElement | null;
|
|
13
|
-
export declare namespace ColorPickerContent {
|
|
14
|
-
var displayName: string;
|
|
15
|
-
}
|
|
16
|
-
export declare function ColorPickerArea(props: ColorPickerAreaOwnProps): ReactElement | null;
|
|
17
|
-
export declare namespace ColorPickerArea {
|
|
18
|
-
var displayName: string;
|
|
19
|
-
}
|
|
20
|
-
export declare function ColorPickerSlider(props: ColorPickerSliderOwnProps): ReactElement | null;
|
|
21
|
-
export declare namespace ColorPickerSlider {
|
|
22
|
-
var displayName: string;
|
|
23
|
-
}
|
|
24
|
-
export declare function ColorPickerSwatch(props: ColorPickerSwatchOwnProps): ReactElement | null;
|
|
25
|
-
export declare function ColorPickerSwatchGroup(props: ColorPickerSwatchGroupOwnProps): ReactElement | null;
|
|
26
|
-
export declare function ColorPickerField(props: ColorPickerFieldOwnProps): ReactElement | null;
|
|
27
|
-
export declare const ColorPicker: {
|
|
28
|
-
Area: typeof ColorPickerArea;
|
|
29
|
-
Content: typeof ColorPickerContent;
|
|
30
|
-
Field: typeof ColorPickerField;
|
|
31
|
-
Root: typeof ColorPickerRoot;
|
|
32
|
-
Slider: typeof ColorPickerSlider;
|
|
33
|
-
Swatch: typeof ColorPickerSwatch;
|
|
34
|
-
SwatchGroup: typeof ColorPickerSwatchGroup;
|
|
35
|
-
Trigger: typeof ColorPickerTrigger;
|
|
36
|
-
};
|
|
37
7
|
//# sourceMappingURL=ColorPicker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPicker.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/ColorPicker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ColorPicker.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/ColorPicker.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+C,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAEvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAwGjE;yBAxGe,WAAW"}
|
|
@@ -1,185 +1,117 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { Popup } from "../popup/index.js";
|
|
7
|
-
import { Slider } from "../slider/Slider.js";
|
|
8
|
-
import { useRenderElement } from "@gunkin/uiify/core/render";
|
|
9
|
-
import { colorToHex, createColor, formatColor, hsbToRgb, parseHex, rgbToHsb } from "./color.js";
|
|
10
|
-
const [ColorPickerProvider, useColorPickerContext] = createPartContext("ColorPicker");
|
|
11
|
-
function ColorPickerRoot(props) {
|
|
3
|
+
import { useId, useRef, useState } from "react";
|
|
4
|
+
import { Field } from "../field/index.js";
|
|
5
|
+
function ColorPicker(props) {
|
|
12
6
|
const {
|
|
13
|
-
alpha =
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
alpha = false,
|
|
8
|
+
"aria-label": ariaLabel,
|
|
9
|
+
"aria-invalid": ariaInvalid,
|
|
10
|
+
className,
|
|
11
|
+
colorSpace,
|
|
12
|
+
defaultValue = "#2563eb",
|
|
13
|
+
disabled = false,
|
|
14
|
+
id,
|
|
15
|
+
label,
|
|
17
16
|
onChange,
|
|
18
|
-
|
|
17
|
+
onValueChange,
|
|
18
|
+
ref,
|
|
19
|
+
style,
|
|
20
|
+
value,
|
|
21
|
+
...nativeProps
|
|
19
22
|
} = props;
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
ColorPickerTrigger.displayName = "ColorPickerTrigger";
|
|
39
|
-
function ColorPickerContent(props) {
|
|
40
|
-
const { children, className } = props;
|
|
41
|
-
const { popoverId } = useColorPickerContext("Content");
|
|
42
|
-
return /* @__PURE__ */ jsx(Popup.Content, { __popupId: popoverId, ...className ? { className } : {}, children });
|
|
43
|
-
}
|
|
44
|
-
ColorPickerContent.displayName = "ColorPickerContent";
|
|
45
|
-
function ColorPickerArea(props) {
|
|
46
|
-
const { className } = props;
|
|
47
|
-
const { color, setColor } = useColorPickerContext("Area");
|
|
48
|
-
const hsb = rgbToHsb(color.rgb);
|
|
23
|
+
const generatedId = useId();
|
|
24
|
+
const inputId = id ?? generatedId;
|
|
25
|
+
const fieldId = `${inputId}-field`;
|
|
26
|
+
const nativeInputRef = useRef(null);
|
|
27
|
+
const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
|
|
28
|
+
const selectedValue = value ?? uncontrolledValue;
|
|
29
|
+
const rootDataProps = {};
|
|
30
|
+
const nativeInputProps = {};
|
|
31
|
+
for (const [name, propValue] of Object.entries(nativeProps)) {
|
|
32
|
+
if (name.startsWith("data-")) rootDataProps[name] = propValue;
|
|
33
|
+
else nativeInputProps[name] = propValue;
|
|
34
|
+
}
|
|
35
|
+
const controlStyle = {
|
|
36
|
+
"--uiify-color-picker-value": selectedValue
|
|
37
|
+
};
|
|
38
|
+
const invalid = ariaInvalid !== void 0 && ariaInvalid !== false && ariaInvalid !== "false" || rootDataProps["data-invalid"] === true || rootDataProps["data-invalid"] === "" || rootDataProps["data-invalid"] === "true";
|
|
39
|
+
const required = Boolean(nativeInputProps.required);
|
|
49
40
|
return /* @__PURE__ */ jsxs(
|
|
50
|
-
|
|
41
|
+
Field.Root,
|
|
51
42
|
{
|
|
52
43
|
className,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
...rootDataProps,
|
|
45
|
+
"data-uiify-color-picker": "",
|
|
46
|
+
disabled,
|
|
47
|
+
id: fieldId,
|
|
48
|
+
invalid,
|
|
49
|
+
required,
|
|
50
|
+
style,
|
|
57
51
|
children: [
|
|
58
52
|
/* @__PURE__ */ jsx(
|
|
59
|
-
|
|
53
|
+
Field.Label,
|
|
60
54
|
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
55
|
+
disabled,
|
|
56
|
+
fieldId,
|
|
57
|
+
onClick: (event) => {
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
nativeInputRef.current?.click();
|
|
66
60
|
},
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
required,
|
|
62
|
+
children: label
|
|
69
63
|
}
|
|
70
64
|
),
|
|
71
|
-
/* @__PURE__ */
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
65
|
+
/* @__PURE__ */ jsxs("div", { "data-part": "surface", "data-value": selectedValue, style: controlStyle, children: [
|
|
66
|
+
/* @__PURE__ */ jsx(
|
|
67
|
+
Field.Control,
|
|
68
|
+
{
|
|
69
|
+
"aria-hidden": "true",
|
|
70
|
+
as: "input",
|
|
71
|
+
disabled,
|
|
72
|
+
fieldId,
|
|
73
|
+
invalid,
|
|
74
|
+
readOnly: true,
|
|
75
|
+
required,
|
|
76
|
+
tabIndex: -1,
|
|
77
|
+
type: "text",
|
|
78
|
+
value: selectedValue
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
/* @__PURE__ */ jsx(
|
|
82
|
+
"input",
|
|
83
|
+
{
|
|
84
|
+
...nativeInputProps,
|
|
85
|
+
"aria-invalid": invalid || void 0,
|
|
86
|
+
"aria-label": ariaLabel,
|
|
87
|
+
"aria-labelledby": ariaLabel ? void 0 : `${fieldId}-label`,
|
|
88
|
+
"data-part": "native-input",
|
|
89
|
+
disabled,
|
|
90
|
+
id: inputId,
|
|
91
|
+
onChange: (event) => {
|
|
92
|
+
const nextValue = event.currentTarget.value;
|
|
93
|
+
if (value === void 0) setUncontrolledValue(nextValue);
|
|
94
|
+
onValueChange?.(nextValue);
|
|
95
|
+
onChange?.(event);
|
|
96
|
+
},
|
|
97
|
+
type: "color",
|
|
98
|
+
value: selectedValue,
|
|
99
|
+
ref: (element) => {
|
|
100
|
+
nativeInputRef.current = element;
|
|
101
|
+
if (typeof ref === "function") return ref(element);
|
|
102
|
+
else if (ref) ref.current = element;
|
|
103
|
+
},
|
|
104
|
+
...alpha ? { alpha: "" } : {},
|
|
105
|
+
...colorSpace ? { colorspace: colorSpace } : {}
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
] })
|
|
84
109
|
]
|
|
85
110
|
}
|
|
86
111
|
);
|
|
87
112
|
}
|
|
88
|
-
|
|
89
|
-
function ColorPickerSlider(props) {
|
|
90
|
-
const { channel, className } = props;
|
|
91
|
-
const { alpha, color, setColor } = useColorPickerContext("Slider");
|
|
92
|
-
const hsb = rgbToHsb(color.rgb);
|
|
93
|
-
if (channel === "alpha" && !alpha) return null;
|
|
94
|
-
const value = channel === "hue" ? hsb.h : color.rgb.a * 100;
|
|
95
|
-
const max = channel === "hue" ? 360 : 100;
|
|
96
|
-
return /* @__PURE__ */ jsx(
|
|
97
|
-
Slider,
|
|
98
|
-
{
|
|
99
|
-
"aria-label": channel,
|
|
100
|
-
"aria-valuetext": String(Math.round(value)),
|
|
101
|
-
className,
|
|
102
|
-
max,
|
|
103
|
-
min: 0,
|
|
104
|
-
onValueChange: (next) => {
|
|
105
|
-
if (channel === "hue") {
|
|
106
|
-
setColor(createColor(hsbToRgb({ ...hsb, h: next })));
|
|
107
|
-
} else {
|
|
108
|
-
setColor(createColor({ ...color.rgb, a: next / 100 }));
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
step: 1,
|
|
112
|
-
value
|
|
113
|
-
}
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
ColorPickerSlider.displayName = "ColorPickerSlider";
|
|
117
|
-
function ColorPickerSwatch(props) {
|
|
118
|
-
const { className, value } = props;
|
|
119
|
-
const { setColor } = useColorPickerContext("Swatch");
|
|
120
|
-
const parsed = parseHex(value) ?? createColor({ r: 0, g: 0, b: 0, a: 1 });
|
|
121
|
-
return useRenderElement({
|
|
122
|
-
defaultTag: "button",
|
|
123
|
-
props: {
|
|
124
|
-
type: "button",
|
|
125
|
-
"aria-label": value,
|
|
126
|
-
"data-value": value,
|
|
127
|
-
style: { backgroundColor: value },
|
|
128
|
-
...className ? { className } : {},
|
|
129
|
-
onClick: () => setColor(parsed)
|
|
130
|
-
},
|
|
131
|
-
state: {}
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
function ColorPickerSwatchGroup(props) {
|
|
135
|
-
const { children, className, swatches = [] } = props;
|
|
136
|
-
return useRenderElement({
|
|
137
|
-
defaultTag: "div",
|
|
138
|
-
props: {
|
|
139
|
-
role: "group",
|
|
140
|
-
...className ? { className } : {},
|
|
141
|
-
children: children ?? swatches.map((swatch) => /* @__PURE__ */ jsx(ColorPickerSwatch, { value: swatch }, swatch))
|
|
142
|
-
},
|
|
143
|
-
state: {}
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
function ColorPickerField(props) {
|
|
147
|
-
const { className } = props;
|
|
148
|
-
const { color, format, setColor } = useColorPickerContext("Field");
|
|
149
|
-
return useRenderElement({
|
|
150
|
-
defaultTag: "input",
|
|
151
|
-
props: {
|
|
152
|
-
type: "text",
|
|
153
|
-
"aria-label": "Color value",
|
|
154
|
-
value: formatColor(color, format),
|
|
155
|
-
...className ? { className } : {},
|
|
156
|
-
onChange(event) {
|
|
157
|
-
const parsed = parseHex(event.currentTarget.value);
|
|
158
|
-
if (parsed) setColor(parsed);
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
state: {}
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
const ColorPicker = {
|
|
165
|
-
Area: ColorPickerArea,
|
|
166
|
-
Content: ColorPickerContent,
|
|
167
|
-
Field: ColorPickerField,
|
|
168
|
-
Root: ColorPickerRoot,
|
|
169
|
-
Slider: ColorPickerSlider,
|
|
170
|
-
Swatch: ColorPickerSwatch,
|
|
171
|
-
SwatchGroup: ColorPickerSwatchGroup,
|
|
172
|
-
Trigger: ColorPickerTrigger
|
|
173
|
-
};
|
|
113
|
+
ColorPicker.displayName = "ColorPicker";
|
|
174
114
|
export {
|
|
175
|
-
ColorPicker
|
|
176
|
-
ColorPickerArea,
|
|
177
|
-
ColorPickerContent,
|
|
178
|
-
ColorPickerField,
|
|
179
|
-
ColorPickerRoot,
|
|
180
|
-
ColorPickerSlider,
|
|
181
|
-
ColorPickerSwatch,
|
|
182
|
-
ColorPickerSwatchGroup,
|
|
183
|
-
ColorPickerTrigger
|
|
115
|
+
ColorPicker
|
|
184
116
|
};
|
|
185
117
|
//# sourceMappingURL=ColorPicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/color-picker/ColorPicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ReactElement, SyntheticEvent } from \"react\";\nimport { useControllableState, useId } from \"@gunkin/uiify/hooks\";\nimport { createPartContext } from \"@gunkin/uiify/core\";\nimport { Popup } from \"../popup/index.js\";\nimport { Slider } from \"../slider/Slider.js\";\nimport { useRenderElement } from \"@gunkin/uiify/core/render\";\nimport { colorToHex, createColor, formatColor, hsbToRgb, parseHex, rgbToHsb } from \"./color.js\";\nimport type {\n Color,\n ColorPickerContextValue,\n ColorPickerRootProps,\n ColorPickerTriggerOwnProps,\n ColorPickerContentOwnProps,\n ColorPickerAreaOwnProps,\n ColorPickerSliderOwnProps,\n ColorPickerSwatchOwnProps,\n ColorPickerSwatchGroupOwnProps,\n ColorPickerFieldOwnProps,\n} from \"./types.js\";\n\nexport type { Color, ColorFormat } from \"./types.js\";\n\nconst [ColorPickerProvider, useColorPickerContext] =\n createPartContext<ColorPickerContextValue>(\"ColorPicker\");\n\nexport function ColorPickerRoot(props: ColorPickerRootProps): ReactElement | null {\n const {\n alpha = true,\n children,\n defaultValue = createColor({ r: 255, g: 0, b: 0, a: 1 }),\n format = \"hex\",\n onChange,\n value: controlledValue,\n } = props;\n\n const [color, setColor] = useControllableState<Color>({\n defaultValue,\n ...(controlledValue !== undefined ? { value: controlledValue } : {}),\n ...(onChange ? { onChange } : {}),\n });\n const popoverId = useId(undefined, \"uiify-color-picker\");\n\n const contextValue = useMemo(\n () => ({ alpha, color, format, popoverId, setColor }),\n [alpha, color, format, popoverId, setColor],\n );\n\n return (\n <ColorPickerProvider value={contextValue}>\n <Popup.Root id={popoverId}>{children}</Popup.Root>\n </ColorPickerProvider>\n );\n}\nColorPickerRoot.displayName = \"ColorPickerRoot\";\n\nexport function ColorPickerTrigger(props: ColorPickerTriggerOwnProps): ReactElement | null {\n const { children, className } = props;\n const { color, popoverId } = useColorPickerContext(\"Trigger\");\n\n return (\n <Popup.Trigger __popupId={popoverId} {...(className ? { className } : {})}>\n {children ?? colorToHex(color)}\n </Popup.Trigger>\n );\n}\nColorPickerTrigger.displayName = \"ColorPickerTrigger\";\n\nexport function ColorPickerContent(props: ColorPickerContentOwnProps): ReactElement | null {\n const { children, className } = props;\n const { popoverId } = useColorPickerContext(\"Content\");\n return (\n <Popup.Content __popupId={popoverId} {...(className ? { className } : {})}>\n {children}\n </Popup.Content>\n );\n}\nColorPickerContent.displayName = \"ColorPickerContent\";\n\nexport function ColorPickerArea(props: ColorPickerAreaOwnProps): ReactElement | null {\n const { className } = props;\n const { color, setColor } = useColorPickerContext(\"Area\");\n const hsb = rgbToHsb(color.rgb);\n\n return (\n <div\n className={className}\n data-channel=\"area\"\n style={{\n background: `hsl(${Math.round(hsb.h)}, 100%, 50%)`,\n }}\n >\n <Slider\n aria-label=\"Saturation\"\n max={100}\n min={0}\n onValueChange={(value) => {\n setColor(createColor(hsbToRgb({ ...hsb, s: value })));\n }}\n step={1}\n value={hsb.s}\n />\n <Slider\n aria-label=\"Brightness\"\n max={100}\n min={0}\n onValueChange={(value) => {\n setColor(createColor(hsbToRgb({ ...hsb, b: value })));\n }}\n step={1}\n value={hsb.b}\n />\n </div>\n );\n}\nColorPickerArea.displayName = \"ColorPickerArea\";\n\nexport function ColorPickerSlider(props: ColorPickerSliderOwnProps): ReactElement | null {\n const { channel, className } = props;\n const { alpha, color, setColor } = useColorPickerContext(\"Slider\");\n const hsb = rgbToHsb(color.rgb);\n\n if (channel === \"alpha\" && !alpha) return null;\n\n const value = channel === \"hue\" ? hsb.h : color.rgb.a * 100;\n const max = channel === \"hue\" ? 360 : 100;\n\n return (\n <Slider\n aria-label={channel}\n aria-valuetext={String(Math.round(value))}\n className={className}\n max={max}\n min={0}\n onValueChange={(next) => {\n if (channel === \"hue\") {\n setColor(createColor(hsbToRgb({ ...hsb, h: next })));\n } else {\n setColor(createColor({ ...color.rgb, a: next / 100 }));\n }\n }}\n step={1}\n value={value}\n />\n );\n}\nColorPickerSlider.displayName = \"ColorPickerSlider\";\n\nexport function ColorPickerSwatch(props: ColorPickerSwatchOwnProps): ReactElement | null {\n const { className, value } = props;\n const { setColor } = useColorPickerContext(\"Swatch\");\n const parsed = parseHex(value) ?? createColor({ r: 0, g: 0, b: 0, a: 1 });\n\n return useRenderElement({\n defaultTag: \"button\",\n props: {\n type: \"button\",\n \"aria-label\": value,\n \"data-value\": value,\n style: { backgroundColor: value },\n ...(className ? { className } : {}),\n onClick: () => setColor(parsed),\n },\n state: {},\n });\n}\n\nexport function ColorPickerSwatchGroup(props: ColorPickerSwatchGroupOwnProps): ReactElement | null {\n const { children, className, swatches = [] } = props;\n\n return useRenderElement({\n defaultTag: \"div\",\n props: {\n role: \"group\",\n ...(className ? { className } : {}),\n children:\n children ?? swatches.map((swatch) => <ColorPickerSwatch key={swatch} value={swatch} />),\n },\n state: {},\n });\n}\n\nexport function ColorPickerField(props: ColorPickerFieldOwnProps): ReactElement | null {\n const { className } = props;\n const { color, format, setColor } = useColorPickerContext(\"Field\");\n\n return useRenderElement({\n defaultTag: \"input\",\n props: {\n type: \"text\",\n \"aria-label\": \"Color value\",\n value: formatColor(color, format),\n ...(className ? { className } : {}),\n onChange(event: SyntheticEvent<HTMLInputElement>) {\n const parsed = parseHex(event.currentTarget.value);\n if (parsed) setColor(parsed);\n },\n },\n state: {},\n });\n}\n\nexport const ColorPicker = {\n Area: ColorPickerArea,\n Content: ColorPickerContent,\n Field: ColorPickerField,\n Root: ColorPickerRoot,\n Slider: ColorPickerSlider,\n Swatch: ColorPickerSwatch,\n SwatchGroup: ColorPickerSwatchGroup,\n Trigger: ColorPickerTrigger,\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/color-picker/ColorPicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useId, useRef, useState, type CSSProperties, type ReactElement } from \"react\";\nimport { Field } from \"../field/index.js\";\nimport type { ColorPickerProps } from \"./types.js\";\n\nexport function ColorPicker(props: ColorPickerProps): ReactElement {\n const {\n alpha = false,\n \"aria-label\": ariaLabel,\n \"aria-invalid\": ariaInvalid,\n className,\n colorSpace,\n defaultValue = \"#2563eb\",\n disabled = false,\n id,\n label,\n onChange,\n onValueChange,\n ref,\n style,\n value,\n ...nativeProps\n } = props;\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const fieldId = `${inputId}-field`;\n const nativeInputRef = useRef<HTMLInputElement>(null);\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const selectedValue = value ?? uncontrolledValue;\n const rootDataProps: Record<string, unknown> = {};\n const nativeInputProps: Record<string, unknown> = {};\n\n for (const [name, propValue] of Object.entries(nativeProps)) {\n if (name.startsWith(\"data-\")) rootDataProps[name] = propValue;\n else nativeInputProps[name] = propValue;\n }\n\n const controlStyle = {\n \"--uiify-color-picker-value\": selectedValue,\n } as CSSProperties;\n const invalid =\n (ariaInvalid !== undefined && ariaInvalid !== false && ariaInvalid !== \"false\") ||\n rootDataProps[\"data-invalid\"] === true ||\n rootDataProps[\"data-invalid\"] === \"\" ||\n rootDataProps[\"data-invalid\"] === \"true\";\n const required = Boolean(nativeInputProps.required);\n\n return (\n <Field.Root\n className={className}\n {...rootDataProps}\n data-uiify-color-picker=\"\"\n disabled={disabled}\n id={fieldId}\n invalid={invalid}\n required={required}\n style={style}\n >\n <Field.Label\n disabled={disabled}\n fieldId={fieldId}\n onClick={(event) => {\n event.preventDefault();\n nativeInputRef.current?.click();\n }}\n required={required}\n >\n {label}\n </Field.Label>\n <div data-part=\"surface\" data-value={selectedValue} style={controlStyle}>\n <Field.Control\n aria-hidden=\"true\"\n as=\"input\"\n disabled={disabled}\n fieldId={fieldId}\n invalid={invalid}\n readOnly\n required={required}\n tabIndex={-1}\n type=\"text\"\n value={selectedValue}\n />\n <input\n {...nativeInputProps}\n aria-invalid={invalid || undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : `${fieldId}-label`}\n data-part=\"native-input\"\n disabled={disabled}\n id={inputId}\n onChange={(event) => {\n const nextValue = event.currentTarget.value;\n if (value === undefined) setUncontrolledValue(nextValue);\n onValueChange?.(nextValue);\n onChange?.(event);\n }}\n type=\"color\"\n value={selectedValue}\n ref={(element) => {\n nativeInputRef.current = element;\n if (typeof ref === \"function\") return ref(element);\n else if (ref) ref.current = element;\n }}\n {...(alpha ? { alpha: \"\" } : {})}\n {...(colorSpace ? { colorspace: colorSpace } : {})}\n />\n </div>\n </Field.Root>\n );\n}\nColorPicker.displayName = \"ColorPicker\";\n"],"mappings":";AA2DM,cAWA,YAXA;AAzDN,SAAS,OAAO,QAAQ,gBAAuD;AAC/E,SAAS,aAAa;AAGf,SAAS,YAAY,OAAuC;AACjE,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,cAAc,MAAM;AAC1B,QAAM,UAAU,MAAM;AACtB,QAAM,UAAU,GAAG,OAAO;AAC1B,QAAM,iBAAiB,OAAyB,IAAI;AACpD,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAS,YAAY;AACvE,QAAM,gBAAgB,SAAS;AAC/B,QAAM,gBAAyC,CAAC;AAChD,QAAM,mBAA4C,CAAC;AAEnD,aAAW,CAAC,MAAM,SAAS,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC3D,QAAI,KAAK,WAAW,OAAO,EAAG,eAAc,IAAI,IAAI;AAAA,QAC/C,kBAAiB,IAAI,IAAI;AAAA,EAChC;AAEA,QAAM,eAAe;AAAA,IACnB,8BAA8B;AAAA,EAChC;AACA,QAAM,UACH,gBAAgB,UAAa,gBAAgB,SAAS,gBAAgB,WACvE,cAAc,cAAc,MAAM,QAClC,cAAc,cAAc,MAAM,MAClC,cAAc,cAAc,MAAM;AACpC,QAAM,WAAW,QAAQ,iBAAiB,QAAQ;AAElD,SACE;AAAA,IAAC,MAAM;AAAA,IAAN;AAAA,MACC;AAAA,MACC,GAAG;AAAA,MACJ,2BAAwB;AAAA,MACxB;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA;AAAA,UAAC,MAAM;AAAA,UAAN;AAAA,YACC;AAAA,YACA;AAAA,YACA,SAAS,CAAC,UAAU;AAClB,oBAAM,eAAe;AACrB,6BAAe,SAAS,MAAM;AAAA,YAChC;AAAA,YACA;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QACA,qBAAC,SAAI,aAAU,WAAU,cAAY,eAAe,OAAO,cACzD;AAAA;AAAA,YAAC,MAAM;AAAA,YAAN;AAAA,cACC,eAAY;AAAA,cACZ,IAAG;AAAA,cACH;AAAA,cACA;AAAA,cACA;AAAA,cACA,UAAQ;AAAA,cACR;AAAA,cACA,UAAU;AAAA,cACV,MAAK;AAAA,cACL,OAAO;AAAA;AAAA,UACT;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACE,GAAG;AAAA,cACJ,gBAAc,WAAW;AAAA,cACzB,cAAY;AAAA,cACZ,mBAAiB,YAAY,SAAY,GAAG,OAAO;AAAA,cACnD,aAAU;AAAA,cACV;AAAA,cACA,IAAI;AAAA,cACJ,UAAU,CAAC,UAAU;AACnB,sBAAM,YAAY,MAAM,cAAc;AACtC,oBAAI,UAAU,OAAW,sBAAqB,SAAS;AACvD,gCAAgB,SAAS;AACzB,2BAAW,KAAK;AAAA,cAClB;AAAA,cACA,MAAK;AAAA,cACL,OAAO;AAAA,cACP,KAAK,CAAC,YAAY;AAChB,+BAAe,UAAU;AACzB,oBAAI,OAAO,QAAQ,WAAY,QAAO,IAAI,OAAO;AAAA,yBACxC,IAAK,KAAI,UAAU;AAAA,cAC9B;AAAA,cACC,GAAI,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;AAAA,cAC7B,GAAI,aAAa,EAAE,YAAY,WAAW,IAAI,CAAC;AAAA;AAAA,UAClD;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;AACA,YAAY,cAAc;","names":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export { ColorPicker
|
|
2
|
-
export type {
|
|
3
|
-
export { colorToHex, createColor, formatColor, hsbToRgb, hslToRgb, parseColor, parseHex, rgbToHsb, rgbToHsl, } from "./color.js";
|
|
1
|
+
export { ColorPicker } from "./ColorPicker.js";
|
|
2
|
+
export type { ColorPickerProps, ColorSpace } from "./types.js";
|
|
4
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,43 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ColorPicker,
|
|
3
|
-
ColorPickerArea,
|
|
4
|
-
ColorPickerContent,
|
|
5
|
-
ColorPickerField,
|
|
6
|
-
ColorPickerRoot,
|
|
7
|
-
ColorPickerSlider,
|
|
8
|
-
ColorPickerSwatch,
|
|
9
|
-
ColorPickerSwatchGroup,
|
|
10
|
-
ColorPickerTrigger
|
|
11
|
-
} from "./ColorPicker.js";
|
|
12
|
-
import {
|
|
13
|
-
colorToHex,
|
|
14
|
-
createColor,
|
|
15
|
-
formatColor,
|
|
16
|
-
hsbToRgb,
|
|
17
|
-
hslToRgb,
|
|
18
|
-
parseColor,
|
|
19
|
-
parseHex,
|
|
20
|
-
rgbToHsb,
|
|
21
|
-
rgbToHsl
|
|
22
|
-
} from "./color.js";
|
|
1
|
+
import { ColorPicker } from "./ColorPicker.js";
|
|
23
2
|
export {
|
|
24
|
-
ColorPicker
|
|
25
|
-
ColorPickerArea,
|
|
26
|
-
ColorPickerContent,
|
|
27
|
-
ColorPickerField,
|
|
28
|
-
ColorPickerRoot,
|
|
29
|
-
ColorPickerSlider,
|
|
30
|
-
ColorPickerSwatch,
|
|
31
|
-
ColorPickerSwatchGroup,
|
|
32
|
-
ColorPickerTrigger,
|
|
33
|
-
colorToHex,
|
|
34
|
-
createColor,
|
|
35
|
-
formatColor,
|
|
36
|
-
hsbToRgb,
|
|
37
|
-
hslToRgb,
|
|
38
|
-
parseColor,
|
|
39
|
-
parseHex,
|
|
40
|
-
rgbToHsb,
|
|
41
|
-
rgbToHsl
|
|
3
|
+
ColorPicker
|
|
42
4
|
};
|
|
43
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/color-picker/index.ts"],"sourcesContent":["export {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/color-picker/index.ts"],"sourcesContent":["export { ColorPicker } from \"./ColorPicker.js\";\nexport type { ColorPickerProps, ColorSpace } from \"./types.js\";\n"],"mappings":"AAAA,SAAS,mBAAmB;","names":[]}
|
|
@@ -1,73 +1,17 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
readonly g: number;
|
|
5
|
-
readonly b: number;
|
|
6
|
-
readonly a: number;
|
|
7
|
-
}
|
|
8
|
-
export interface HslColor {
|
|
9
|
-
readonly h: number;
|
|
10
|
-
readonly s: number;
|
|
11
|
-
readonly l: number;
|
|
12
|
-
readonly a: number;
|
|
13
|
-
}
|
|
14
|
-
export interface HsbColor {
|
|
15
|
-
readonly h: number;
|
|
16
|
-
readonly s: number;
|
|
17
|
-
readonly b: number;
|
|
18
|
-
readonly a: number;
|
|
19
|
-
}
|
|
20
|
-
export type ColorFormat = "hex" | "rgb" | "hsl" | "hsb";
|
|
21
|
-
export interface Color {
|
|
22
|
-
readonly rgb: RgbColor;
|
|
23
|
-
}
|
|
24
|
-
export interface ColorPickerContextValue {
|
|
25
|
-
readonly alpha: boolean;
|
|
26
|
-
readonly color: Color;
|
|
27
|
-
readonly format: ColorFormat;
|
|
28
|
-
readonly popoverId: string;
|
|
29
|
-
readonly setColor: (color: Color) => void;
|
|
30
|
-
}
|
|
31
|
-
export interface ColorPickerRootShellOwnProps {
|
|
1
|
+
import type { ChangeEventHandler, ComponentPropsWithRef, CSSProperties, Ref } from "react";
|
|
2
|
+
export type ColorSpace = "limited-srgb" | "display-p3";
|
|
3
|
+
export interface ColorPickerOwnProps {
|
|
32
4
|
readonly alpha?: boolean;
|
|
33
|
-
readonly
|
|
34
|
-
readonly
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
readonly
|
|
38
|
-
readonly value?: Color;
|
|
5
|
+
readonly colorSpace?: ColorSpace;
|
|
6
|
+
readonly defaultValue?: string;
|
|
7
|
+
readonly label: string;
|
|
8
|
+
readonly onValueChange?: (value: string) => void;
|
|
9
|
+
readonly value?: string;
|
|
39
10
|
}
|
|
40
|
-
export
|
|
41
|
-
readonly children?: ReactNode;
|
|
42
|
-
}
|
|
43
|
-
export interface ColorPickerRootProps extends ColorPickerRootShellOwnProps, ColorPickerRootControlledOwnProps {
|
|
44
|
-
readonly children?: ReactNode;
|
|
45
|
-
}
|
|
46
|
-
export interface ColorPickerTriggerOwnProps {
|
|
47
|
-
readonly children?: ReactNode;
|
|
11
|
+
export type ColorPickerProps = Omit<ComponentPropsWithRef<"input">, "alpha" | "className" | "colorSpace" | "defaultValue" | "onChange" | "ref" | "style" | "type" | "value"> & ColorPickerOwnProps & {
|
|
48
12
|
readonly className?: string;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
readonly
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
export interface ColorPickerAreaOwnProps {
|
|
55
|
-
readonly className?: string;
|
|
56
|
-
}
|
|
57
|
-
export interface ColorPickerSliderOwnProps {
|
|
58
|
-
readonly channel: "hue" | "alpha";
|
|
59
|
-
readonly className?: string;
|
|
60
|
-
}
|
|
61
|
-
export interface ColorPickerSwatchOwnProps {
|
|
62
|
-
readonly className?: string;
|
|
63
|
-
readonly value: string;
|
|
64
|
-
}
|
|
65
|
-
export interface ColorPickerSwatchGroupOwnProps {
|
|
66
|
-
readonly children?: ReactNode;
|
|
67
|
-
readonly className?: string;
|
|
68
|
-
readonly swatches?: readonly string[];
|
|
69
|
-
}
|
|
70
|
-
export interface ColorPickerFieldOwnProps {
|
|
71
|
-
readonly className?: string;
|
|
72
|
-
}
|
|
13
|
+
readonly onChange?: ChangeEventHandler<HTMLInputElement>;
|
|
14
|
+
readonly ref?: Ref<HTMLInputElement>;
|
|
15
|
+
readonly style?: CSSProperties;
|
|
16
|
+
};
|
|
73
17
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE3F,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,qBAAqB,CAAC,OAAO,CAAC,EAC5B,OAAO,GACP,WAAW,GACX,YAAY,GACZ,cAAc,GACd,UAAU,GACV,KAAK,GACL,OAAO,GACP,MAAM,GACN,OAAO,CACV,GACC,mBAAmB,GAAG;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/components/context-menu/ContextMenu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EAKX,YAAY,EAEb,MAAM,OAAO,CAAC;AAQf,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAEV,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,eAAe,EAAE,CAAC;AAKhC,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,GAAG,IAAI,CA8DhF;yBA9De,eAAe;;;AAiE/B,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAChE,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAClC,YAAY,GAAG,IAAI,CAsBrB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAChE,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAClC,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/components/context-menu/ContextMenu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EAKX,YAAY,EAEb,MAAM,OAAO,CAAC;AAQf,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAEV,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,eAAe,EAAE,CAAC;AAKhC,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,GAAG,IAAI,CA8DhF;yBA9De,eAAe;;;AAiE/B,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAChE,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAClC,YAAY,GAAG,IAAI,CAsBrB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAChE,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAClC,YAAY,GAAG,IAAI,CA6DrB;yBA/De,kBAAkB;;;AAkElC,wBAAgB,eAAe,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAC7D,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAC/B,YAAY,GAAG,IAAI,CA6DrB;yBA/De,eAAe;;;AA8F/B,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,+BAA+B,GACrC,YAAY,GAAG,IAAI,CAyCrB;yBA3Ce,uBAAuB;;;AA8CvC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,4BAA4B,GAAG,YAAY,GAAG,IAAI,CAgC7F;yBAhCe,oBAAoB;;;AA6CpC,wBAAgB,cAAc,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,GAAG,IAAI,CAKjF;yBALe,cAAc;;;AAQ9B,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CAsC/F;yBAtCe,qBAAqB;;;AAyCrC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CAoB/F;AAED,eAAO,MAAM,gBAAgB,kBAAY,CAAC;AAE1C,eAAO,MAAM,oBAAoB,sBAAgB,CAAC;AAElD,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAavB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
4
|
-
import { useMergedRefs } from "@gunkin/uiify/hooks";
|
|
4
|
+
import { useIsomorphicLayoutEffect, useMergedRefs } from "@gunkin/uiify/hooks";
|
|
5
5
|
import { createPartContext, splitRef } from "@gunkin/uiify/core";
|
|
6
6
|
import { composeEventHandlers } from "@gunkin/uiify/core/compose-event-handlers";
|
|
7
7
|
import { RovingFocusItem, RovingFocusRoot } from "@gunkin/uiify/core/roving-focus";
|
|
@@ -96,6 +96,18 @@ function ContextMenuContent(props) {
|
|
|
96
96
|
const { close, contentRef, focusTrigger, open, popupProps, popupRef, positionerProps } = useContextMenuContext("Content");
|
|
97
97
|
const [consumerRef, withoutRef] = splitRef(consumerProps);
|
|
98
98
|
const mergedRef = useMergedRefs(popupRef, contentRef, consumerRef);
|
|
99
|
+
useIsomorphicLayoutEffect(() => {
|
|
100
|
+
if (!open) return;
|
|
101
|
+
const content = contentRef.current;
|
|
102
|
+
const ownerDocument = content?.ownerDocument;
|
|
103
|
+
if (!content || !ownerDocument) return;
|
|
104
|
+
const handlePointerDown = (event) => {
|
|
105
|
+
if (event.composedPath().includes(content)) return;
|
|
106
|
+
close();
|
|
107
|
+
};
|
|
108
|
+
ownerDocument.addEventListener("pointerdown", handlePointerDown, true);
|
|
109
|
+
return () => ownerDocument.removeEventListener("pointerdown", handlePointerDown, true);
|
|
110
|
+
}, [close, contentRef, open]);
|
|
99
111
|
const { onKeyDown: consumerOnKeyDown } = withoutRef;
|
|
100
112
|
const handleKeyDown = (event) => {
|
|
101
113
|
if (event.key === "Escape") {
|