@dxos/react-ui-pickers 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/index.mjs +102 -86
- package/dist/lib/index.mjs.map +1 -1
- package/dist/types/src/components/EmojiPicker/EmojiPicker.d.ts +7 -5
- package/dist/types/src/components/EmojiPicker/EmojiPicker.d.ts.map +1 -1
- package/dist/types/src/components/EmojiPicker/EmojiPicker.stories.d.ts +1 -1
- package/dist/types/src/components/EmojiPicker/EmojiPicker.stories.d.ts.map +1 -1
- package/dist/types/src/components/EmojiPicker/index.d.ts +1 -1
- package/dist/types/src/components/EmojiPicker/index.d.ts.map +1 -1
- package/dist/types/src/components/HuePicker/HuePicker.d.ts +7 -4
- package/dist/types/src/components/HuePicker/HuePicker.d.ts.map +1 -1
- package/dist/types/src/components/HuePicker/HuePicker.stories.d.ts +1 -1
- package/dist/types/src/components/HuePicker/HuePicker.stories.d.ts.map +1 -1
- package/dist/types/src/components/HuePicker/index.d.ts +1 -1
- package/dist/types/src/components/HuePicker/index.d.ts.map +1 -1
- package/dist/types/src/components/IconPicker/IconPicker.d.ts +5 -4
- package/dist/types/src/components/IconPicker/IconPicker.d.ts.map +1 -1
- package/dist/types/src/components/IconPicker/IconPicker.stories.d.ts +1 -1
- package/dist/types/src/components/IconPicker/IconPicker.stories.d.ts.map +1 -1
- package/dist/types/src/components/IconPicker/index.d.ts +1 -1
- package/dist/types/src/components/IconPicker/index.d.ts.map +1 -1
- package/dist/types/src/components/PickerButton/PickerButton.d.ts +5 -4
- package/dist/types/src/components/PickerButton/PickerButton.d.ts.map +1 -1
- package/dist/types/src/components/PickerButton/index.d.ts +1 -1
- package/dist/types/src/components/PickerButton/index.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -9
- package/src/components/EmojiPicker/EmojiPicker.stories.tsx +2 -2
- package/src/components/EmojiPicker/EmojiPicker.tsx +72 -82
- package/src/components/EmojiPicker/index.ts +1 -1
- package/src/components/HuePicker/HuePicker.stories.tsx +2 -2
- package/src/components/HuePicker/HuePicker.tsx +15 -7
- package/src/components/HuePicker/index.ts +1 -1
- package/src/components/IconPicker/IconPicker.stories.tsx +2 -2
- package/src/components/IconPicker/IconPicker.tsx +10 -7
- package/src/components/IconPicker/index.ts +1 -1
- package/src/components/PickerButton/PickerButton.tsx +51 -45
- package/src/components/PickerButton/index.ts +1 -1
- package/src/components/index.ts +4 -4
- package/src/index.ts +1 -1
package/dist/lib/index.mjs
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import { useControllableState } from "@radix-ui/react-use-controllable-state";
|
|
2
1
|
import { Suspense, lazy, useEffect, useState } from "react";
|
|
3
|
-
import {
|
|
2
|
+
import { useControllableState } from "@dxos/react-hooks";
|
|
3
|
+
import * as Button from "@dxos/react-ui/Button";
|
|
4
|
+
import * as Hooks from "@dxos/react-ui/Hooks";
|
|
5
|
+
import * as Icon from "@dxos/react-ui/Icon";
|
|
6
|
+
import * as Popover from "@dxos/react-ui/Popover";
|
|
4
7
|
import { getSize, osTranslations } from "@dxos/ui-theme";
|
|
5
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
9
|
import { hues, iconValues } from "@dxos/ui-types";
|
|
10
|
+
import * as Menu from "@dxos/react-ui/Menu";
|
|
11
|
+
import * as Tooltip from "@dxos/react-ui/Tooltip";
|
|
7
12
|
//#region src/components/EmojiPicker/EmojiPicker.tsx
|
|
8
13
|
/**
|
|
9
14
|
* emoji-mart plus its emoji database is ~480 KB; loading it with the barrel put it in every
|
|
@@ -13,9 +18,9 @@ var EmojiMartPanel = lazy(() => import("./chunk-EmojiMartPanel.mjs"));
|
|
|
13
18
|
/**
|
|
14
19
|
* A toolbar button for picking an emoji. Use only in `role=toolbar` elements. Unable to unset the value.
|
|
15
20
|
*/
|
|
16
|
-
var EmojiPickerToolbarButton = ({
|
|
17
|
-
const { t } = useTranslation(osTranslations);
|
|
18
|
-
const
|
|
21
|
+
var EmojiPickerToolbarButton = ({ size, emoji, disabled, defaultEmoji, onChangeEmoji }) => {
|
|
22
|
+
const { t } = Hooks.useTranslation(osTranslations);
|
|
23
|
+
const themeMode = Hooks.useThemeMode();
|
|
19
24
|
const [_emojiValue, setEmojiValue] = useControllableState({
|
|
20
25
|
prop: emoji,
|
|
21
26
|
onChange: onChangeEmoji,
|
|
@@ -24,27 +29,28 @@ var EmojiPickerToolbarButton = ({ classNames, emoji, disabled, defaultEmoji, onC
|
|
|
24
29
|
const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
|
|
25
30
|
return /* @__PURE__ */ jsxs(Popover.Root, {
|
|
26
31
|
open: emojiPickerOpen,
|
|
27
|
-
onOpenChange: (nextOpen) => {
|
|
32
|
+
onOpenChange: ({ open: nextOpen }) => {
|
|
28
33
|
setEmojiPickerOpen(nextOpen);
|
|
29
34
|
},
|
|
35
|
+
positioning: { placement: "bottom" },
|
|
30
36
|
children: [/* @__PURE__ */ jsx(Popover.Trigger, {
|
|
31
37
|
asChild: true,
|
|
32
|
-
children: /* @__PURE__ */ jsx(
|
|
33
|
-
|
|
38
|
+
children: /* @__PURE__ */ jsx(Button.Root, {
|
|
39
|
+
size,
|
|
34
40
|
label: t("select-emoji.label"),
|
|
41
|
+
icon: "ph--smiley--regular",
|
|
35
42
|
iconOnly: true,
|
|
36
43
|
tooltipSide: "bottom",
|
|
37
44
|
disabled
|
|
38
45
|
})
|
|
39
|
-
}), /* @__PURE__ */ jsx(Popover.
|
|
40
|
-
side: "bottom",
|
|
46
|
+
}), /* @__PURE__ */ jsx(Popover.Content, {
|
|
41
47
|
onKeyDownCapture: (event) => {
|
|
42
48
|
if (event.key === "Escape") {
|
|
43
49
|
event.stopPropagation();
|
|
44
50
|
setEmojiPickerOpen(false);
|
|
45
51
|
}
|
|
46
52
|
},
|
|
47
|
-
children:
|
|
53
|
+
children: /* @__PURE__ */ jsx(Suspense, {
|
|
48
54
|
fallback: null,
|
|
49
55
|
children: /* @__PURE__ */ jsx(EmojiMartPanel, {
|
|
50
56
|
onEmojiSelect: ({ native }) => {
|
|
@@ -55,32 +61,37 @@ var EmojiPickerToolbarButton = ({ classNames, emoji, disabled, defaultEmoji, onC
|
|
|
55
61
|
},
|
|
56
62
|
themeMode
|
|
57
63
|
})
|
|
58
|
-
})
|
|
59
|
-
})
|
|
64
|
+
})
|
|
65
|
+
})]
|
|
60
66
|
});
|
|
61
67
|
};
|
|
62
68
|
/**
|
|
63
69
|
* A button for picking an emoji alongside a button for unsetting it.
|
|
64
70
|
*/
|
|
65
71
|
var EmojiPickerBlock = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickClear, triggerVariant = "ghost", classNames }) => {
|
|
66
|
-
const { t } = useTranslation(osTranslations);
|
|
67
|
-
const [isMd] = useMediaQuery("md");
|
|
72
|
+
const { t } = Hooks.useTranslation(osTranslations);
|
|
73
|
+
const [isMd] = Hooks.useMediaQuery("md");
|
|
68
74
|
const [emojiValue, setEmojiValue] = useControllableState({
|
|
69
75
|
prop: emoji,
|
|
70
76
|
onChange: onChangeEmoji,
|
|
71
77
|
defaultProp: defaultEmoji
|
|
72
78
|
});
|
|
73
79
|
const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
|
|
74
|
-
return /* @__PURE__ */ jsxs(
|
|
80
|
+
return /* @__PURE__ */ jsxs(Button.Group, {
|
|
75
81
|
classNames,
|
|
76
82
|
children: [/* @__PURE__ */ jsxs(Popover.Root, {
|
|
77
83
|
open: emojiPickerOpen,
|
|
78
|
-
onOpenChange: setEmojiPickerOpen,
|
|
84
|
+
onOpenChange: ({ open }) => setEmojiPickerOpen(open),
|
|
85
|
+
positioning: {
|
|
86
|
+
placement: "right",
|
|
87
|
+
gutter: isMd ? 0 : -310,
|
|
88
|
+
overflowPadding: 8
|
|
89
|
+
},
|
|
79
90
|
children: [/* @__PURE__ */ jsx(Popover.Trigger, {
|
|
80
91
|
asChild: true,
|
|
81
|
-
children: /* @__PURE__ */ jsxs(Button, {
|
|
92
|
+
children: /* @__PURE__ */ jsxs(Button.Root, {
|
|
82
93
|
variant: triggerVariant,
|
|
83
|
-
classNames: "
|
|
94
|
+
classNames: "text-xl",
|
|
84
95
|
disabled,
|
|
85
96
|
children: [
|
|
86
97
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -88,23 +99,21 @@ var EmojiPickerBlock = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickC
|
|
|
88
99
|
children: t("select-emoji.label")
|
|
89
100
|
}),
|
|
90
101
|
/* @__PURE__ */ jsx("span", { children: emojiValue }),
|
|
91
|
-
/* @__PURE__ */ jsx(Icon, {
|
|
102
|
+
/* @__PURE__ */ jsx(Icon.Icon, {
|
|
92
103
|
icon: "ph--caret-down--bold",
|
|
93
|
-
size:
|
|
104
|
+
size: "xs"
|
|
94
105
|
})
|
|
95
106
|
]
|
|
96
107
|
})
|
|
97
|
-
}), /* @__PURE__ */ jsx(Popover.
|
|
98
|
-
|
|
99
|
-
sideOffset: isMd ? 0 : -310,
|
|
100
|
-
collisionPadding: 8,
|
|
108
|
+
}), /* @__PURE__ */ jsx(Popover.Content, {
|
|
109
|
+
classNames: "p-0",
|
|
101
110
|
onKeyDownCapture: (event) => {
|
|
102
111
|
if (event.key === "Escape") {
|
|
103
112
|
event.stopPropagation();
|
|
104
113
|
setEmojiPickerOpen(false);
|
|
105
114
|
}
|
|
106
115
|
},
|
|
107
|
-
children:
|
|
116
|
+
children: /* @__PURE__ */ jsx(Suspense, {
|
|
108
117
|
fallback: null,
|
|
109
118
|
children: /* @__PURE__ */ jsx(EmojiMartPanel, { onEmojiSelect: ({ native }) => {
|
|
110
119
|
if (native) {
|
|
@@ -112,9 +121,9 @@ var EmojiPickerBlock = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickC
|
|
|
112
121
|
setEmojiPickerOpen(false);
|
|
113
122
|
}
|
|
114
123
|
} })
|
|
115
|
-
})
|
|
116
|
-
})
|
|
117
|
-
}), /* @__PURE__ */ jsx(
|
|
124
|
+
})
|
|
125
|
+
})]
|
|
126
|
+
}), /* @__PURE__ */ jsx(Button.Root, {
|
|
118
127
|
icon: "ph--arrow-counter-clockwise--regular",
|
|
119
128
|
iconOnly: true,
|
|
120
129
|
label: t("clear.label"),
|
|
@@ -127,7 +136,9 @@ var EmojiPickerBlock = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickC
|
|
|
127
136
|
};
|
|
128
137
|
//#endregion
|
|
129
138
|
//#region src/components/PickerButton/PickerButton.tsx
|
|
130
|
-
|
|
139
|
+
/** Menu value of the reset row; outside every picker's value set. */
|
|
140
|
+
var RESET = "__reset__";
|
|
141
|
+
var PickerButton = ({ Component, disabled, classNames, defaultValue: defaultValueProp, value: valueProp, values, label, icon, onChange, onReset, rootVariant = "button", iconSize }) => {
|
|
131
142
|
const [value, setValue] = useControllableState({
|
|
132
143
|
prop: valueProp,
|
|
133
144
|
defaultProp: defaultValueProp,
|
|
@@ -135,79 +146,84 @@ var PickerButton = ({ Component, disabled, classNames, defaultValue: defaultValu
|
|
|
135
146
|
});
|
|
136
147
|
useEffect(() => setValue(valueProp), [valueProp]);
|
|
137
148
|
const [open, setOpen] = useState(false);
|
|
138
|
-
|
|
139
|
-
return /* @__PURE__ */ jsxs(DropdownMenu.Root, {
|
|
140
|
-
modal: false,
|
|
149
|
+
return /* @__PURE__ */ jsxs(Menu.Root, {
|
|
141
150
|
open,
|
|
142
|
-
onOpenChange: setOpen,
|
|
143
|
-
|
|
151
|
+
onOpenChange: ({ open }) => setOpen(open),
|
|
152
|
+
positioning: { placement: "bottom" },
|
|
153
|
+
children: [/* @__PURE__ */ jsx(Menu.Trigger, {
|
|
144
154
|
asChild: true,
|
|
145
|
-
|
|
146
|
-
side: "bottom",
|
|
147
|
-
children: /* @__PURE__ */ jsx(DropdownMenu.Trigger, {
|
|
155
|
+
children: /* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
148
156
|
asChild: true,
|
|
149
|
-
|
|
150
|
-
|
|
157
|
+
content: label,
|
|
158
|
+
side: "bottom",
|
|
159
|
+
children: /* @__PURE__ */ jsx(Button.Root, {
|
|
160
|
+
variant: rootVariant === "toolbar-button" ? "ghost" : "default",
|
|
161
|
+
iconOnly: true,
|
|
162
|
+
showTooltip: false,
|
|
163
|
+
label,
|
|
164
|
+
caretDown: true,
|
|
165
|
+
classNames,
|
|
151
166
|
disabled,
|
|
152
|
-
children:
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
size: iconSize
|
|
160
|
-
}) || /* @__PURE__ */ jsx(Icon, {
|
|
161
|
-
icon,
|
|
162
|
-
size: iconSize
|
|
163
|
-
}),
|
|
164
|
-
/* @__PURE__ */ jsx(Icon, {
|
|
165
|
-
icon: "ph--caret-down--bold",
|
|
166
|
-
size: 3
|
|
167
|
-
})
|
|
168
|
-
]
|
|
167
|
+
children: value && /* @__PURE__ */ jsx(Component, {
|
|
168
|
+
value,
|
|
169
|
+
size: iconSize
|
|
170
|
+
}) || /* @__PURE__ */ jsx(Icon.Icon, {
|
|
171
|
+
icon,
|
|
172
|
+
size: iconSize
|
|
173
|
+
})
|
|
169
174
|
})
|
|
170
175
|
})
|
|
171
|
-
}), /* @__PURE__ */
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
size: iconSize
|
|
184
|
-
})
|
|
185
|
-
}, _value);
|
|
186
|
-
}), onReset && /* @__PURE__ */ jsx(DropdownMenu.CheckboxItem, {
|
|
187
|
-
onCheckedChange: () => onReset(),
|
|
188
|
-
classNames: "p-1 items-center justify-center aspect-square",
|
|
189
|
-
children: /* @__PURE__ */ jsx(Icon, {
|
|
190
|
-
icon: "ph--x--regular",
|
|
176
|
+
}), /* @__PURE__ */ jsxs(Menu.Content, {
|
|
177
|
+
columns: 6,
|
|
178
|
+
children: [values.map((_value) => {
|
|
179
|
+
return /* @__PURE__ */ jsx(Menu.CheckboxItem, {
|
|
180
|
+
item: {
|
|
181
|
+
value: _value,
|
|
182
|
+
label: _value
|
|
183
|
+
},
|
|
184
|
+
checked: _value === value,
|
|
185
|
+
onCheckedChange: () => setValue(_value),
|
|
186
|
+
children: /* @__PURE__ */ jsx(Component, {
|
|
187
|
+
value: _value,
|
|
191
188
|
size: iconSize
|
|
192
189
|
})
|
|
193
|
-
})
|
|
194
|
-
}), /* @__PURE__ */ jsx(
|
|
195
|
-
|
|
190
|
+
}, _value);
|
|
191
|
+
}), onReset && /* @__PURE__ */ jsx(Menu.Item, {
|
|
192
|
+
item: {
|
|
193
|
+
value: RESET,
|
|
194
|
+
label: "Reset"
|
|
195
|
+
},
|
|
196
|
+
onClick: () => onReset(),
|
|
197
|
+
children: /* @__PURE__ */ jsx(Icon.Icon, {
|
|
198
|
+
icon: "ph--x--regular",
|
|
199
|
+
size: iconSize
|
|
200
|
+
})
|
|
201
|
+
})]
|
|
202
|
+
})]
|
|
196
203
|
});
|
|
197
204
|
};
|
|
198
205
|
//#endregion
|
|
199
206
|
//#region src/components/HuePicker/HuePicker.tsx
|
|
200
|
-
var HuePicker = (props) => {
|
|
201
|
-
const { t } = useTranslation(osTranslations);
|
|
207
|
+
var HuePicker = ({ label, ...props }) => {
|
|
208
|
+
const { t } = Hooks.useTranslation(osTranslations);
|
|
202
209
|
return /* @__PURE__ */ jsx(PickerButton, {
|
|
203
210
|
Component: HuePreview,
|
|
204
|
-
label: t("select-hue.label"),
|
|
211
|
+
label: label ?? t("select-hue.label"),
|
|
205
212
|
icon: "ph--palette--regular",
|
|
206
213
|
values: hues,
|
|
207
214
|
...props
|
|
208
215
|
});
|
|
209
216
|
};
|
|
210
|
-
|
|
217
|
+
/** Next icon sizes as the Tailwind steps the preview's square is drawn at. */
|
|
218
|
+
var PREVIEW_SIZES = {
|
|
219
|
+
xs: 3,
|
|
220
|
+
sm: 3.5,
|
|
221
|
+
md: 4,
|
|
222
|
+
lg: 5,
|
|
223
|
+
xl: 6
|
|
224
|
+
};
|
|
225
|
+
var HuePreview = ({ value, size: iconSize = "md" }) => {
|
|
226
|
+
const size = PREVIEW_SIZES[iconSize];
|
|
211
227
|
return /* @__PURE__ */ jsx("div", {
|
|
212
228
|
className: "flex justify-center items-center",
|
|
213
229
|
children: /* @__PURE__ */ jsx("svg", {
|
|
@@ -227,7 +243,7 @@ var HuePreview = ({ value, size = 5 }) => {
|
|
|
227
243
|
//#endregion
|
|
228
244
|
//#region src/components/IconPicker/IconPicker.tsx
|
|
229
245
|
var IconPicker = ({ ...props }) => {
|
|
230
|
-
const { t } = useTranslation(osTranslations);
|
|
246
|
+
const { t } = Hooks.useTranslation(osTranslations);
|
|
231
247
|
return /* @__PURE__ */ jsx(PickerButton, {
|
|
232
248
|
Component: IconPreview,
|
|
233
249
|
label: t("select-icon.label"),
|
|
@@ -237,7 +253,7 @@ var IconPicker = ({ ...props }) => {
|
|
|
237
253
|
});
|
|
238
254
|
};
|
|
239
255
|
var IconPreview = ({ value, size }) => {
|
|
240
|
-
return /* @__PURE__ */ jsx(Icon, {
|
|
256
|
+
return /* @__PURE__ */ jsx(Icon.Icon, {
|
|
241
257
|
icon: `ph--${value}--regular`,
|
|
242
258
|
size
|
|
243
259
|
});
|
package/dist/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/components/EmojiPicker/EmojiPicker.tsx","../../src/components/PickerButton/PickerButton.tsx","../../src/components/HuePicker/HuePicker.tsx","../../src/components/IconPicker/IconPicker.tsx"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport './emoji.css';\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { Suspense, lazy, useState } from 'react';\n\nimport {\n Button,\n ButtonGroup,\n type ButtonProps,\n Icon,\n IconButton,\n Popover,\n type ThemedClassName,\n Toolbar,\n useMediaQuery,\n useThemeContext,\n useTranslation,\n} from '@dxos/react-ui';\nimport { osTranslations } from '@dxos/ui-theme';\n\n/**\n * emoji-mart plus its emoji database is ~480 KB; loading it with the barrel put it in every\n * tab's boot graph, so the panel loads on first open instead.\n */\nconst EmojiMartPanel = lazy(() => import('./EmojiMartPanel'));\n\nexport type EmojiPickerProps = ThemedClassName<{\n disabled?: boolean;\n defaultEmoji?: string;\n emoji?: string;\n onChangeEmoji?: (nextEmoji: string) => void;\n onClickClear?: ButtonProps['onClick'];\n triggerVariant?: ButtonProps['variant'];\n}>;\n\n/**\n * A toolbar button for picking an emoji. Use only in `role=toolbar` elements. Unable to unset the value.\n */\nexport const EmojiPickerToolbarButton = ({\n classNames,\n emoji,\n disabled,\n defaultEmoji,\n onChangeEmoji,\n}: Omit<EmojiPickerProps, 'onClickClear'>) => {\n const { t } = useTranslation(osTranslations);\n const { themeMode } = useThemeContext();\n\n const [_emojiValue, setEmojiValue] = useControllableState<string>({\n prop: emoji,\n onChange: onChangeEmoji,\n defaultProp: defaultEmoji,\n });\n\n const [emojiPickerOpen, setEmojiPickerOpen] = useState<boolean>(false);\n\n return (\n <Popover.Root\n open={emojiPickerOpen}\n onOpenChange={(nextOpen) => {\n setEmojiPickerOpen(nextOpen);\n }}\n >\n <Popover.Trigger asChild>\n <Toolbar.IconButton\n icon='ph--user-circle--regular'\n label={t('select-emoji.label')}\n iconOnly\n tooltipSide='bottom'\n disabled={disabled}\n />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side='bottom'\n onKeyDownCapture={(event) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n setEmojiPickerOpen(false);\n }\n }}\n >\n <Suspense fallback={null}>\n <EmojiMartPanel\n onEmojiSelect={({ native }: { native?: string }) => {\n if (native) {\n setEmojiValue(native);\n setEmojiPickerOpen(false);\n }\n }}\n themeMode={themeMode}\n />\n </Suspense>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n\n/**\n * A button for picking an emoji alongside a button for unsetting it.\n */\nexport const EmojiPickerBlock = ({\n disabled,\n defaultEmoji,\n emoji,\n onChangeEmoji,\n onClickClear,\n triggerVariant = 'ghost',\n classNames,\n}: EmojiPickerProps) => {\n const { t } = useTranslation(osTranslations);\n const [isMd] = useMediaQuery('md');\n\n const [emojiValue, setEmojiValue] = useControllableState<string>({\n prop: emoji,\n onChange: onChangeEmoji,\n defaultProp: defaultEmoji,\n });\n\n const [emojiPickerOpen, setEmojiPickerOpen] = useState<boolean>(false);\n\n return (\n <ButtonGroup classNames={classNames}>\n <Popover.Root open={emojiPickerOpen} onOpenChange={setEmojiPickerOpen}>\n <Popover.Trigger asChild>\n <Button variant={triggerVariant} classNames='grow gap-2 text-2xl' disabled={disabled}>\n <span className='sr-only'>{t('select-emoji.label')}</span>\n <span>{emojiValue}</span>\n <Icon icon='ph--caret-down--bold' size={3} />\n </Button>\n </Popover.Trigger>\n {/* Portalled, like `EmojiPickerToolbarButton` above and `PickerButton` (which is why the hue\n picker never had this problem): rendered in place, a 300px panel is clipped by the first\n scrolling ancestor — in the profile page, the settings panel's own overflow. */}\n <Popover.Portal>\n <Popover.Content\n side='right'\n sideOffset={isMd ? 0 : -310}\n collisionPadding={8}\n onKeyDownCapture={(event) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n setEmojiPickerOpen(false);\n }\n }}\n >\n <Suspense fallback={null}>\n <EmojiMartPanel\n onEmojiSelect={({ native }: { native?: string }) => {\n if (native) {\n setEmojiValue(native);\n setEmojiPickerOpen(false);\n }\n }}\n />\n </Suspense>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n <IconButton\n icon='ph--arrow-counter-clockwise--regular'\n iconOnly\n label={t('clear.label')}\n tooltipSide='right'\n variant={triggerVariant}\n onClick={onClickClear}\n disabled={disabled}\n />\n </ButtonGroup>\n );\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type FC, useEffect, useState } from 'react';\n\nimport { Button, DropdownMenu, Icon, type IconProps, type ThemedClassName, Toolbar, Tooltip } from '@dxos/react-ui';\n\nexport type PickerButtonProps = ThemedClassName<{\n Component: FC<{ value: string; size?: IconProps['size'] }>;\n label: string;\n icon: string;\n values: readonly string[];\n disabled?: boolean;\n defaultValue?: string;\n value?: string;\n onChange?: (value: string) => void;\n onReset?: () => void;\n rootVariant?: 'button' | 'toolbar-button';\n iconSize?: IconProps['size'];\n}>;\n\nexport const PickerButton = ({\n Component,\n disabled,\n classNames,\n defaultValue: defaultValueProp,\n value: valueProp,\n values,\n label,\n icon,\n onChange,\n onReset,\n rootVariant = 'button',\n iconSize = 5,\n}: PickerButtonProps) => {\n const [value, setValue] = useControllableState<string>({\n prop: valueProp,\n defaultProp: defaultValueProp,\n onChange,\n });\n // TODO(burdon): useControllableState doesn't update the prop when the value is changed. Replace it.\n useEffect(() => setValue(valueProp), [valueProp]);\n\n const [open, setOpen] = useState<boolean>(false);\n const TriggerRoot = rootVariant === 'toolbar-button' ? Toolbar.Button : Button;\n\n return (\n <DropdownMenu.Root modal={false} open={open} onOpenChange={setOpen}>\n <Tooltip.Trigger asChild content={label} side='bottom'>\n <DropdownMenu.Trigger asChild>\n <TriggerRoot classNames={['gap-2 py-1', classNames]} disabled={disabled}>\n <span className='sr-only'>{label}</span>\n {(value && <Component value={value} size={iconSize} />) || <Icon icon={icon} size={iconSize} />}\n <Icon icon='ph--caret-down--bold' size={3} />\n </TriggerRoot>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content side='bottom' classNames='!w-min'>\n <DropdownMenu.Viewport classNames='grid grid-cols-[repeat(6,min-content)]'>\n {values.map((_value) => {\n return (\n <DropdownMenu.CheckboxItem\n key={_value}\n checked={_value === value}\n onCheckedChange={() => setValue(_value)}\n classNames={'p-1 items-center justify-center aspect-square'}\n >\n <Component value={_value} size={iconSize} />\n </DropdownMenu.CheckboxItem>\n );\n })}\n {onReset && (\n <DropdownMenu.CheckboxItem\n onCheckedChange={() => onReset()}\n classNames={'p-1 items-center justify-center aspect-square'}\n >\n <Icon icon='ph--x--regular' size={iconSize} />\n </DropdownMenu.CheckboxItem>\n )}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ButtonProps, type IconProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { getSize, osTranslations } from '@dxos/ui-theme';\nimport { hues } from '@dxos/ui-types';\n\nimport { PickerButton, type PickerButtonProps } from '../PickerButton';\n\nexport type HuePickerProps = {\n disabled?: boolean;\n defaultValue?: string;\n value?: string;\n onChange?: (nextHue: string) => void;\n onReset?: ButtonProps['onClick'];\n} & Pick<PickerButtonProps, 'disabled' | 'defaultValue' | 'value' | 'onChange' | 'onReset' | 'rootVariant'>;\n\nexport const HuePicker = (props: ThemedClassName<HuePickerProps>) => {\n const { t } = useTranslation(osTranslations);\n\n return (\n <PickerButton\n Component={HuePreview}\n label={t('select-hue.label')}\n icon='ph--palette--regular'\n values={hues}\n {...props}\n />\n );\n};\n\nconst HuePreview = ({ value, size = 5 }: { value: string; size?: IconProps['size'] }) => {\n return (\n <div className='flex justify-center items-center'>\n <svg viewBox={`0 0 ${size} ${size}`} className={getSize(size)}>\n <rect x={0} y={0} width={size} height={size} fill={`var(--color-${value}-surface)`} strokeWidth={4} />\n </svg>\n </div>\n );\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ButtonProps, Icon, type IconProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { osTranslations } from '@dxos/ui-theme';\nimport { iconValues } from '@dxos/ui-types';\n\nimport { PickerButton, type PickerButtonProps } from '../PickerButton';\n\nexport type IconPickerProps = {\n disabled?: boolean;\n defaultValue?: string;\n value?: string;\n onChange?: (nextHue: string) => void;\n onReset?: ButtonProps['onClick'];\n} & Pick<\n PickerButtonProps,\n 'disabled' | 'rootVariant' | 'iconSize' | 'defaultValue' | 'value' | 'onChange' | 'onReset'\n>;\n\nexport const IconPicker = ({ ...props }: ThemedClassName<IconPickerProps>) => {\n const { t } = useTranslation(osTranslations);\n\n return (\n <PickerButton\n Component={IconPreview}\n label={t('select-icon.label')}\n icon='ph--selection--regular'\n values={iconValues}\n {...props}\n />\n );\n};\n\nconst IconPreview = ({ value, size }: { value: string; size?: IconProps['size'] }) => {\n return <Icon icon={`ph--${value}--regular`} size={size} />;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/components/EmojiPicker/EmojiPicker.tsx","../../src/components/PickerButton/PickerButton.tsx","../../src/components/HuePicker/HuePicker.tsx","../../src/components/IconPicker/IconPicker.tsx"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport './emoji.css';\n\nimport React, { Suspense, lazy, useState } from 'react';\n\nimport { useControllableState } from '@dxos/react-hooks';\nimport * as Button from '@dxos/react-ui/Button';\nimport * as Hooks from '@dxos/react-ui/Hooks';\nimport * as Icon from '@dxos/react-ui/Icon';\nimport * as Popover from '@dxos/react-ui/Popover';\nimport type * as Util from '@dxos/react-ui/Util';\nimport { osTranslations } from '@dxos/ui-theme';\n\n/**\n * emoji-mart plus its emoji database is ~480 KB; loading it with the barrel put it in every\n * tab's boot graph, so the panel loads on first open instead.\n */\nconst EmojiMartPanel = lazy(() => import('./EmojiMartPanel.tsx'));\n\nexport type EmojiPickerProps = Util.ThemedClassName<{\n disabled?: boolean;\n size?: Button.RootProps['size'];\n defaultEmoji?: string;\n emoji?: string;\n onChangeEmoji?: (nextEmoji: string) => void;\n onClickClear?: Button.RootProps['onClick'];\n triggerVariant?: Button.RootProps['variant'];\n}>;\n\n/**\n * A toolbar button for picking an emoji. Use only in `role=toolbar` elements. Unable to unset the value.\n */\nexport const EmojiPickerToolbarButton = ({\n size,\n emoji,\n disabled,\n defaultEmoji,\n onChangeEmoji,\n}: Omit<EmojiPickerProps, 'onClickClear'>) => {\n const { t } = Hooks.useTranslation(osTranslations);\n const themeMode = Hooks.useThemeMode();\n\n const [_emojiValue, setEmojiValue] = useControllableState<string>({\n prop: emoji,\n onChange: onChangeEmoji,\n defaultProp: defaultEmoji,\n });\n\n const [emojiPickerOpen, setEmojiPickerOpen] = useState<boolean>(false);\n\n return (\n <Popover.Root\n open={emojiPickerOpen}\n onOpenChange={({ open: nextOpen }) => {\n setEmojiPickerOpen(nextOpen);\n }}\n positioning={{ placement: 'bottom' }}\n >\n <Popover.Trigger asChild>\n <Button.Root\n size={size}\n label={t('select-emoji.label')}\n icon='ph--smiley--regular'\n iconOnly\n tooltipSide='bottom'\n disabled={disabled}\n />\n </Popover.Trigger>\n <Popover.Content\n onKeyDownCapture={(event) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n setEmojiPickerOpen(false);\n }\n }}\n >\n <Suspense fallback={null}>\n <EmojiMartPanel\n onEmojiSelect={({ native }: { native?: string }) => {\n if (native) {\n setEmojiValue(native);\n setEmojiPickerOpen(false);\n }\n }}\n themeMode={themeMode}\n />\n </Suspense>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\n/**\n * A button for picking an emoji alongside a button for unsetting it.\n */\nexport const EmojiPickerBlock = ({\n disabled,\n defaultEmoji,\n emoji,\n onChangeEmoji,\n onClickClear,\n triggerVariant = 'ghost',\n classNames,\n}: EmojiPickerProps) => {\n const { t } = Hooks.useTranslation(osTranslations);\n const [isMd] = Hooks.useMediaQuery('md');\n\n const [emojiValue, setEmojiValue] = useControllableState<string>({\n prop: emoji,\n onChange: onChangeEmoji,\n defaultProp: defaultEmoji,\n });\n\n const [emojiPickerOpen, setEmojiPickerOpen] = useState<boolean>(false);\n\n return (\n <Button.Group classNames={classNames}>\n <Popover.Root\n open={emojiPickerOpen}\n onOpenChange={({ open }) => setEmojiPickerOpen(open)}\n positioning={{ placement: 'right', gutter: isMd ? 0 : -310, overflowPadding: 8 }}\n >\n <Popover.Trigger asChild>\n <Button.Root variant={triggerVariant} classNames='text-xl' disabled={disabled}>\n <span className='sr-only'>{t('select-emoji.label')}</span>\n <span>{emojiValue}</span>\n <Icon.Icon icon='ph--caret-down--bold' size='xs' />\n </Button.Root>\n </Popover.Trigger>\n {/* Portalled, like `EmojiPickerToolbarButton` above and `PickerButton` (which is why the hue\n picker never had this problem): rendered in place, a 300px panel is clipped by the first\n scrolling ancestor — in the profile page, the settings panel's own overflow. */}\n <Popover.Content\n classNames='p-0'\n onKeyDownCapture={(event) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n setEmojiPickerOpen(false);\n }\n }}\n >\n <Suspense fallback={null}>\n <EmojiMartPanel\n onEmojiSelect={({ native }: { native?: string }) => {\n if (native) {\n setEmojiValue(native);\n setEmojiPickerOpen(false);\n }\n }}\n />\n </Suspense>\n </Popover.Content>\n </Popover.Root>\n <Button.Root\n icon='ph--arrow-counter-clockwise--regular'\n iconOnly\n label={t('clear.label')}\n tooltipSide='right'\n variant={triggerVariant}\n onClick={onClickClear}\n disabled={disabled}\n />\n </Button.Group>\n );\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useEffect, useState } from 'react';\n\nimport { useControllableState } from '@dxos/react-hooks';\nimport * as Button from '@dxos/react-ui/Button';\nimport * as Icon from '@dxos/react-ui/Icon';\nimport * as Menu from '@dxos/react-ui/Menu';\nimport * as Tooltip from '@dxos/react-ui/Tooltip';\nimport type * as Util from '@dxos/react-ui/Util';\n\nexport type PickerButtonProps = Util.ThemedClassName<{\n Component: FC<{ value: string; size?: Icon.IconProps['size'] }>;\n label: string;\n icon: string;\n values: readonly string[];\n disabled?: boolean;\n defaultValue?: string;\n value?: string;\n onChange?: (value: string) => void;\n onReset?: () => void;\n rootVariant?: 'button' | 'toolbar-button';\n iconSize?: Icon.IconProps['size'];\n}>;\n\n/** Menu value of the reset row; outside every picker's value set. */\nconst RESET = '__reset__';\n\nexport const PickerButton = ({\n Component,\n disabled,\n classNames,\n defaultValue: defaultValueProp,\n value: valueProp,\n values,\n label,\n icon,\n onChange,\n onReset,\n rootVariant = 'button',\n iconSize,\n}: PickerButtonProps) => {\n const [value, setValue] = useControllableState<string>({\n prop: valueProp,\n defaultProp: defaultValueProp,\n onChange,\n });\n // TODO(burdon): useControllableState doesn't update the prop when the value is changed. Replace it.\n useEffect(() => setValue(valueProp), [valueProp]);\n\n const [open, setOpen] = useState<boolean>(false);\n\n return (\n <Menu.Root open={open} onOpenChange={({ open }) => setOpen(open)} positioning={{ placement: 'bottom' }}>\n {/* The menu trigger is outermost: both machines find the button by its id, and the tooltip adopts\n the id it is handed while the menu would lose its own to one set above it. */}\n <Menu.Trigger asChild>\n <Tooltip.Trigger asChild content={label} side='bottom'>\n <Button.Root\n variant={rootVariant === 'toolbar-button' ? 'ghost' : 'default'}\n iconOnly\n showTooltip={false}\n label={label}\n caretDown\n classNames={classNames}\n disabled={disabled}\n >\n {(value && <Component value={value} size={iconSize} />) || <Icon.Icon icon={icon} size={iconSize} />}\n </Button.Root>\n </Tooltip.Trigger>\n </Menu.Trigger>\n <Menu.Content columns={6}>\n {values.map((_value) => {\n return (\n <Menu.CheckboxItem\n key={_value}\n item={{ value: _value, label: _value }}\n checked={_value === value}\n onCheckedChange={() => setValue(_value)}\n >\n <Component value={_value} size={iconSize} />\n </Menu.CheckboxItem>\n );\n })}\n {onReset && (\n <Menu.Item item={{ value: RESET, label: 'Reset' }} onClick={() => onReset()}>\n <Icon.Icon icon='ph--x--regular' size={iconSize} />\n </Menu.Item>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport type * as Button from '@dxos/react-ui/Button';\nimport * as Hooks from '@dxos/react-ui/Hooks';\nimport type * as Util from '@dxos/react-ui/Util';\nimport { getSize, osTranslations } from '@dxos/ui-theme';\nimport { hues } from '@dxos/ui-types';\n\nimport { PickerButton, type PickerButtonProps } from '../PickerButton/index.ts';\n\nexport type HuePickerProps = {\n /** Replaces the generic \"select hue\" label (tooltip and screen-reader text). */\n label?: string;\n disabled?: boolean;\n defaultValue?: string;\n value?: string;\n onChange?: (nextHue: string) => void;\n onReset?: Button.RootProps['onClick'];\n} & Pick<PickerButtonProps, 'disabled' | 'defaultValue' | 'value' | 'onChange' | 'onReset' | 'rootVariant'>;\n\nexport const HuePicker = ({ label, ...props }: Util.ThemedClassName<HuePickerProps>) => {\n const { t } = Hooks.useTranslation(osTranslations);\n\n return (\n <PickerButton\n Component={HuePreview}\n label={label ?? t('select-hue.label')}\n icon='ph--palette--regular'\n values={hues}\n {...props}\n />\n );\n};\n\n/** Next icon sizes as the Tailwind steps the preview's square is drawn at. */\nconst PREVIEW_SIZES: Record<Util.Size, 3 | 3.5 | 4 | 5 | 6> = { xs: 3, sm: 3.5, md: 4, lg: 5, xl: 6 };\n\nconst HuePreview = ({ value, size: iconSize = 'md' }: { value: string; size?: Util.Size }) => {\n const size = PREVIEW_SIZES[iconSize];\n return (\n <div className='flex justify-center items-center'>\n <svg viewBox={`0 0 ${size} ${size}`} className={getSize(size)}>\n <rect x={0} y={0} width={size} height={size} fill={`var(--color-${value}-surface)`} strokeWidth={4} />\n </svg>\n </div>\n );\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport type * as Button from '@dxos/react-ui/Button';\nimport * as Hooks from '@dxos/react-ui/Hooks';\nimport * as Icon from '@dxos/react-ui/Icon';\nimport type * as Util from '@dxos/react-ui/Util';\nimport { osTranslations } from '@dxos/ui-theme';\nimport { iconValues } from '@dxos/ui-types';\n\nimport { PickerButton, type PickerButtonProps } from '../PickerButton/index.ts';\n\nexport type IconPickerProps = {\n disabled?: boolean;\n defaultValue?: string;\n value?: string;\n onChange?: (nextHue: string) => void;\n onReset?: Button.RootProps['onClick'];\n} & Pick<\n PickerButtonProps,\n 'disabled' | 'rootVariant' | 'iconSize' | 'defaultValue' | 'value' | 'onChange' | 'onReset'\n>;\n\nexport const IconPicker = ({ ...props }: Util.ThemedClassName<IconPickerProps>) => {\n const { t } = Hooks.useTranslation(osTranslations);\n\n return (\n <PickerButton\n Component={IconPreview}\n label={t('select-icon.label')}\n icon='ph--selection--regular'\n values={iconValues}\n {...props}\n />\n );\n};\n\nconst IconPreview = ({ value, size }: { value: string; size?: Icon.IconProps['size'] }) => {\n return <Icon.Icon icon={`ph--${value}--regular`} size={size} />;\n};\n"],"mappings":"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"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import './emoji.css';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import * as Button from '@dxos/react-ui/Button';
|
|
4
|
+
import type * as Util from '@dxos/react-ui/Util';
|
|
5
|
+
export type EmojiPickerProps = Util.ThemedClassName<{
|
|
5
6
|
disabled?: boolean;
|
|
7
|
+
size?: Button.RootProps['size'];
|
|
6
8
|
defaultEmoji?: string;
|
|
7
9
|
emoji?: string;
|
|
8
10
|
onChangeEmoji?: (nextEmoji: string) => void;
|
|
9
|
-
onClickClear?:
|
|
10
|
-
triggerVariant?:
|
|
11
|
+
onClickClear?: Button.RootProps['onClick'];
|
|
12
|
+
triggerVariant?: Button.RootProps['variant'];
|
|
11
13
|
}>;
|
|
12
14
|
/**
|
|
13
15
|
* A toolbar button for picking an emoji. Use only in `role=toolbar` elements. Unable to unset the value.
|
|
14
16
|
*/
|
|
15
|
-
export declare const EmojiPickerToolbarButton: ({
|
|
17
|
+
export declare const EmojiPickerToolbarButton: ({ size, emoji, disabled, defaultEmoji, onChangeEmoji, }: Omit<EmojiPickerProps, 'onClickClear'>) => React.JSX.Element;
|
|
16
18
|
/**
|
|
17
19
|
* A button for picking an emoji alongside a button for unsetting it.
|
|
18
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiPicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/EmojiPicker/EmojiPicker.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"EmojiPicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/EmojiPicker/EmojiPicker.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,KAAmC,MAAM,OAAO,CAAC;AAGxD,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAIhD,OAAO,KAAK,KAAK,IAAI,MAAM,qBAAqB,CAAC;AASjD,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9C,CAAC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,wBAAwB,4DAMlC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,sBAoDxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,gGAQ1B,gBAAgB,sBA6DlB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import EmojiPicker from '@emoji-mart/react';
|
|
2
2
|
import { type StoryObj } from '@storybook/react-vite';
|
|
3
|
-
import { type EmojiPickerProps } from './EmojiPicker';
|
|
3
|
+
import { type EmojiPickerProps } from './EmojiPicker.tsx';
|
|
4
4
|
declare const meta: {
|
|
5
5
|
title: string;
|
|
6
6
|
component: typeof EmojiPicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiPicker.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/EmojiPicker/EmojiPicker.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMjE,OAAO,EAAoB,KAAK,gBAAgB,EAA4B,MAAM,
|
|
1
|
+
{"version":3,"file":"EmojiPicker.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/EmojiPicker/EmojiPicker.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMjE,OAAO,EAAoB,KAAK,gBAAgB,EAA4B,MAAM,mBAAmB,CAAC;AAEtG,QAAA,MAAM,IAAI;;;;CAI0B,CAAC;eAEtB,IAAI;AA2BnB,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,gBAAgB,CAKpD,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAK5C,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './EmojiPicker';
|
|
1
|
+
export * from './EmojiPicker.tsx';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/EmojiPicker/index.ts"],"names":[],"mappings":"AAIA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/EmojiPicker/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import type * as Button from '@dxos/react-ui/Button';
|
|
3
|
+
import type * as Util from '@dxos/react-ui/Util';
|
|
4
|
+
import { type PickerButtonProps } from '../PickerButton/index.ts';
|
|
4
5
|
export type HuePickerProps = {
|
|
6
|
+
/** Replaces the generic "select hue" label (tooltip and screen-reader text). */
|
|
7
|
+
label?: string;
|
|
5
8
|
disabled?: boolean;
|
|
6
9
|
defaultValue?: string;
|
|
7
10
|
value?: string;
|
|
8
11
|
onChange?: (nextHue: string) => void;
|
|
9
|
-
onReset?:
|
|
12
|
+
onReset?: Button.RootProps['onClick'];
|
|
10
13
|
} & Pick<PickerButtonProps, 'disabled' | 'defaultValue' | 'value' | 'onChange' | 'onReset' | 'rootVariant'>;
|
|
11
|
-
export declare const HuePicker: (props: ThemedClassName<HuePickerProps>) => React.JSX.Element;
|
|
14
|
+
export declare const HuePicker: ({ label, ...props }: Util.ThemedClassName<HuePickerProps>) => React.JSX.Element;
|
|
12
15
|
//# sourceMappingURL=HuePicker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HuePicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/HuePicker/HuePicker.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,
|
|
1
|
+
{"version":3,"file":"HuePicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/HuePicker/HuePicker.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAIjD,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,MAAM,MAAM,cAAc,GAAG;IAC3B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;CACvC,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC,CAAC;AAE5G,eAAO,MAAM,SAAS,wBAAyB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,sBAYlF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type StoryObj } from '@storybook/react-vite';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { HuePicker, type HuePickerProps } from './HuePicker';
|
|
3
|
+
import { HuePicker, type HuePickerProps } from './HuePicker.tsx';
|
|
4
4
|
declare const DefaultStory: (props: HuePickerProps) => React.JSX.Element;
|
|
5
5
|
declare const meta: {
|
|
6
6
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HuePicker.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/HuePicker/HuePicker.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"HuePicker.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/HuePicker/HuePicker.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjE,QAAA,MAAM,YAAY,UAAW,cAAc,sBAc1C,CAAC;AAEF,QAAA,MAAM,IAAI;;;;;CAKwB,CAAC;eAEpB,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './HuePicker';
|
|
1
|
+
export * from './HuePicker.tsx';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/HuePicker/index.ts"],"names":[],"mappings":"AAIA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/HuePicker/index.ts"],"names":[],"mappings":"AAIA,cAAc,iBAAiB,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import type * as Button from '@dxos/react-ui/Button';
|
|
3
|
+
import type * as Util from '@dxos/react-ui/Util';
|
|
4
|
+
import { type PickerButtonProps } from '../PickerButton/index.ts';
|
|
4
5
|
export type IconPickerProps = {
|
|
5
6
|
disabled?: boolean;
|
|
6
7
|
defaultValue?: string;
|
|
7
8
|
value?: string;
|
|
8
9
|
onChange?: (nextHue: string) => void;
|
|
9
|
-
onReset?:
|
|
10
|
+
onReset?: Button.RootProps['onClick'];
|
|
10
11
|
} & Pick<PickerButtonProps, 'disabled' | 'rootVariant' | 'iconSize' | 'defaultValue' | 'value' | 'onChange' | 'onReset'>;
|
|
11
|
-
export declare const IconPicker: ({ ...props }: ThemedClassName<IconPickerProps>) => React.JSX.Element;
|
|
12
|
+
export declare const IconPicker: ({ ...props }: Util.ThemedClassName<IconPickerProps>) => React.JSX.Element;
|
|
12
13
|
//# sourceMappingURL=IconPicker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconPicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/IconPicker/IconPicker.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,
|
|
1
|
+
{"version":3,"file":"IconPicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/IconPicker/IconPicker.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAGrD,OAAO,KAAK,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAIjD,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;CACvC,GAAG,IAAI,CACN,iBAAiB,EACjB,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAC5F,CAAC;AAEF,eAAO,MAAM,UAAU,iBAAkB,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,sBAY7E,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type StoryObj } from '@storybook/react-vite';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { IconPicker, type IconPickerProps } from './IconPicker';
|
|
3
|
+
import { IconPicker, type IconPickerProps } from './IconPicker.tsx';
|
|
4
4
|
declare const DefaultStory: (props: IconPickerProps) => React.JSX.Element;
|
|
5
5
|
declare const meta: {
|
|
6
6
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconPicker.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/IconPicker/IconPicker.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"IconPicker.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/IconPicker/IconPicker.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEpE,QAAA,MAAM,YAAY,UAAW,eAAe,sBAS3C,CAAC;AAEF,QAAA,MAAM,IAAI;;;;;CAKyB,CAAC;eAErB,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './IconPicker';
|
|
1
|
+
export * from './IconPicker.tsx';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/IconPicker/index.ts"],"names":[],"mappings":"AAIA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/IconPicker/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React, { type FC } from 'react';
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import * as Icon from '@dxos/react-ui/Icon';
|
|
3
|
+
import type * as Util from '@dxos/react-ui/Util';
|
|
4
|
+
export type PickerButtonProps = Util.ThemedClassName<{
|
|
4
5
|
Component: FC<{
|
|
5
6
|
value: string;
|
|
6
|
-
size?: IconProps['size'];
|
|
7
|
+
size?: Icon.IconProps['size'];
|
|
7
8
|
}>;
|
|
8
9
|
label: string;
|
|
9
10
|
icon: string;
|
|
@@ -14,7 +15,7 @@ export type PickerButtonProps = ThemedClassName<{
|
|
|
14
15
|
onChange?: (value: string) => void;
|
|
15
16
|
onReset?: () => void;
|
|
16
17
|
rootVariant?: 'button' | 'toolbar-button';
|
|
17
|
-
iconSize?: IconProps['size'];
|
|
18
|
+
iconSize?: Icon.IconProps['size'];
|
|
18
19
|
}>;
|
|
19
20
|
export declare const PickerButton: ({ Component, disabled, classNames, defaultValue: defaultValueProp, value: valueProp, values, label, icon, onChange, onReset, rootVariant, iconSize, }: PickerButtonProps) => React.JSX.Element;
|
|
20
21
|
//# sourceMappingURL=PickerButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickerButton.d.ts","sourceRoot":"","sources":["../../../../../src/components/PickerButton/PickerButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PickerButton.d.ts","sourceRoot":"","sources":["../../../../../src/components/PickerButton/PickerButton.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAuB,MAAM,OAAO,CAAC;AAI5D,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAG5C,OAAO,KAAK,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;IACnD,SAAS,EAAE,EAAE,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,GAAG,gBAAgB,CAAC;IAC1C,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC,CAAC;AAKH,eAAO,MAAM,YAAY,0JAatB,iBAAiB,sBAmDnB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './PickerButton';
|
|
1
|
+
export * from './PickerButton.tsx';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/PickerButton/index.ts"],"names":[],"mappings":"AAIA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/PickerButton/index.ts"],"names":[],"mappings":"AAIA,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './EmojiPicker';
|
|
2
|
-
export * from './HuePicker';
|
|
3
|
-
export * from './IconPicker';
|
|
4
|
-
export * from './PickerButton';
|
|
1
|
+
export * from './EmojiPicker/index.ts';
|
|
2
|
+
export * from './HuePicker/index.ts';
|
|
3
|
+
export * from './IconPicker/index.ts';
|
|
4
|
+
export * from './PickerButton/index.ts';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|