@gunkin/uiify 0.0.4-alpha → 0.0.6-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/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/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") {
|