@dxos/react-ui-pickers 0.7.5-labs.071a3e2

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.
Files changed (38) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +3 -0
  3. package/dist/lib/browser/index.css +7 -0
  4. package/dist/lib/browser/index.css.map +7 -0
  5. package/dist/lib/browser/index.mjs +268 -0
  6. package/dist/lib/browser/index.mjs.map +7 -0
  7. package/dist/lib/browser/meta.json +1 -0
  8. package/dist/lib/node/index.cjs +302 -0
  9. package/dist/lib/node/index.cjs.map +7 -0
  10. package/dist/lib/node/index.css +7 -0
  11. package/dist/lib/node/index.css.map +7 -0
  12. package/dist/lib/node/meta.json +1 -0
  13. package/dist/lib/node-esm/index.css +7 -0
  14. package/dist/lib/node-esm/index.css.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +270 -0
  16. package/dist/lib/node-esm/index.mjs.map +7 -0
  17. package/dist/lib/node-esm/meta.json +1 -0
  18. package/dist/types/src/components/EmojiPicker.d.ts +19 -0
  19. package/dist/types/src/components/EmojiPicker.d.ts.map +1 -0
  20. package/dist/types/src/components/EmojiPicker.stories.d.ts +8 -0
  21. package/dist/types/src/components/EmojiPicker.stories.d.ts.map +1 -0
  22. package/dist/types/src/components/HuePicker.d.ts +18 -0
  23. package/dist/types/src/components/HuePicker.d.ts.map +1 -0
  24. package/dist/types/src/components/HuePicker.stories.d.ts +8 -0
  25. package/dist/types/src/components/HuePicker.stories.d.ts.map +1 -0
  26. package/dist/types/src/components/index.d.ts +3 -0
  27. package/dist/types/src/components/index.d.ts.map +1 -0
  28. package/dist/types/src/index.d.ts +2 -0
  29. package/dist/types/src/index.d.ts.map +1 -0
  30. package/dist/types/tsconfig.tsbuildinfo +1 -0
  31. package/package.json +52 -0
  32. package/src/components/EmojiPicker.stories.tsx +59 -0
  33. package/src/components/EmojiPicker.tsx +189 -0
  34. package/src/components/HuePicker.stories.tsx +55 -0
  35. package/src/components/HuePicker.tsx +184 -0
  36. package/src/components/emoji.css +25 -0
  37. package/src/components/index.ts +6 -0
  38. package/src/index.ts +5 -0
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var node_exports = {};
30
+ __export(node_exports, {
31
+ EmojiPickerBlock: () => EmojiPickerBlock,
32
+ EmojiPickerToolbarButton: () => EmojiPickerToolbarButton,
33
+ HuePickerBlock: () => HuePickerBlock,
34
+ HuePickerToolbarButton: () => HuePickerToolbarButton
35
+ });
36
+ module.exports = __toCommonJS(node_exports);
37
+ var import_data = __toESM(require("@emoji-mart/data"));
38
+ var import_react = __toESM(require("@emoji-mart/react"));
39
+ var import_react2 = require("@phosphor-icons/react");
40
+ var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
41
+ var import_react3 = __toESM(require("react"));
42
+ var import_react_ui = require("@dxos/react-ui");
43
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
44
+ var import_react4 = require("@phosphor-icons/react");
45
+ var import_react_use_controllable_state2 = require("@radix-ui/react-use-controllable-state");
46
+ var import_react5 = __toESM(require("react"));
47
+ var import_react_ui2 = require("@dxos/react-ui");
48
+ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
49
+ var EmojiPickerToolbarButton = ({ disabled, defaultEmoji, emoji, onChangeEmoji, classNames }) => {
50
+ const { t } = (0, import_react_ui.useTranslation)("os");
51
+ const { themeMode } = (0, import_react_ui.useThemeContext)();
52
+ const [_emojiValue, setEmojiValue] = (0, import_react_use_controllable_state.useControllableState)({
53
+ prop: emoji,
54
+ onChange: onChangeEmoji,
55
+ defaultProp: defaultEmoji
56
+ });
57
+ const [emojiPickerOpen, setEmojiPickerOpen] = (0, import_react3.useState)(false);
58
+ const suppressNextTooltip = (0, import_react3.useRef)(false);
59
+ const [triggerTooltipOpen, setTriggerTooltipOpen] = (0, import_react3.useState)(false);
60
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Root, {
61
+ open: triggerTooltipOpen,
62
+ onOpenChange: (nextOpen) => {
63
+ if (suppressNextTooltip.current) {
64
+ setTriggerTooltipOpen(false);
65
+ suppressNextTooltip.current = false;
66
+ } else {
67
+ setTriggerTooltipOpen(nextOpen);
68
+ }
69
+ }
70
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Root, {
71
+ open: emojiPickerOpen,
72
+ onOpenChange: (nextOpen) => {
73
+ setEmojiPickerOpen(nextOpen);
74
+ suppressNextTooltip.current = true;
75
+ }
76
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Trigger, {
77
+ asChild: true
78
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Trigger, {
79
+ asChild: true
80
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Toolbar.Button, {
81
+ classNames: [
82
+ "gap-2 text-2xl plb-1",
83
+ classNames
84
+ ],
85
+ disabled
86
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
87
+ className: "sr-only"
88
+ }, t("select emoji label")), /* @__PURE__ */ import_react3.default.createElement(import_react2.UserCircle, {
89
+ className: (0, import_react_ui_theme.getSize)(5)
90
+ })))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Content, {
91
+ side: "bottom"
92
+ }, t("select emoji label"), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Arrow, null))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Content, {
93
+ side: "bottom",
94
+ onKeyDownCapture: (event) => {
95
+ if (event.key === "Escape") {
96
+ event.stopPropagation();
97
+ setEmojiPickerOpen(false);
98
+ suppressNextTooltip.current = true;
99
+ }
100
+ }
101
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react.default, {
102
+ data: import_data.default,
103
+ onEmojiSelect: ({ native }) => {
104
+ if (native) {
105
+ setEmojiValue(native);
106
+ setEmojiPickerOpen(false);
107
+ }
108
+ },
109
+ autoFocus: true,
110
+ maxFrequentRows: 0,
111
+ noCountryFlags: true,
112
+ theme: themeMode
113
+ }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Arrow, null)))));
114
+ };
115
+ var EmojiPickerBlock = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickClear }) => {
116
+ const { t } = (0, import_react_ui.useTranslation)("os");
117
+ const [isMd] = (0, import_react_ui.useMediaQuery)("md", {
118
+ ssr: false
119
+ });
120
+ const [emojiValue, setEmojiValue] = (0, import_react_use_controllable_state.useControllableState)({
121
+ prop: emoji,
122
+ onChange: onChangeEmoji,
123
+ defaultProp: defaultEmoji
124
+ });
125
+ const [emojiPickerOpen, setEmojiPickerOpen] = (0, import_react3.useState)(false);
126
+ return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Root, {
127
+ open: emojiPickerOpen,
128
+ onOpenChange: setEmojiPickerOpen
129
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Trigger, {
130
+ asChild: true
131
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Button, {
132
+ variant: "ghost",
133
+ classNames: "gap-2 text-2xl plb-1",
134
+ disabled
135
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
136
+ className: "sr-only"
137
+ }, t("select emoji label")), /* @__PURE__ */ import_react3.default.createElement("span", {
138
+ className: "grow pis-14"
139
+ }, emojiValue), /* @__PURE__ */ import_react3.default.createElement(import_react2.CaretDown, {
140
+ className: (0, import_react_ui_theme.getSize)(4)
141
+ }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Content, {
142
+ side: "right",
143
+ sideOffset: isMd ? 0 : -310,
144
+ onKeyDownCapture: (event) => {
145
+ if (event.key === "Escape") {
146
+ event.stopPropagation();
147
+ setEmojiPickerOpen(false);
148
+ }
149
+ }
150
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react.default, {
151
+ data: import_data.default,
152
+ onEmojiSelect: ({ native }) => {
153
+ if (native) {
154
+ setEmojiValue(native);
155
+ setEmojiPickerOpen(false);
156
+ }
157
+ },
158
+ autoFocus: true,
159
+ maxFrequentRows: 0,
160
+ noCountryFlags: true
161
+ }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Arrow, null))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Trigger, {
162
+ asChild: true
163
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Button, {
164
+ variant: "ghost",
165
+ onClick: onClickClear,
166
+ disabled
167
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
168
+ className: "sr-only"
169
+ }, t("clear label")), /* @__PURE__ */ import_react3.default.createElement(import_react2.ArrowCounterClockwise, null))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Content, {
170
+ side: "right"
171
+ }, t("clear label"), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Tooltip.Arrow, null)))));
172
+ };
173
+ var HuePreview = ({ hue }) => {
174
+ const { tx } = (0, import_react_ui2.useThemeContext)();
175
+ const size = 20;
176
+ return /* @__PURE__ */ import_react5.default.createElement("svg", {
177
+ width: size,
178
+ height: size,
179
+ viewBox: `0 0 ${size} ${size}`
180
+ }, /* @__PURE__ */ import_react5.default.createElement("rect", {
181
+ x: 0,
182
+ y: 0,
183
+ width: size,
184
+ height: size,
185
+ className: tx("hue.fill", "select--hue__preview", {
186
+ hue
187
+ })
188
+ }));
189
+ };
190
+ var hueTokens = Object.keys(import_react_ui_theme2.hueTokenThemes).slice(0, 16);
191
+ var HuePickerToolbarButton = ({ disabled, hue, onChangeHue, classNames, defaultHue }) => {
192
+ const { t } = (0, import_react_ui2.useTranslation)("os");
193
+ const [hueValue, setHueValue] = (0, import_react_use_controllable_state2.useControllableState)({
194
+ prop: hue,
195
+ onChange: onChangeHue,
196
+ defaultProp: defaultHue
197
+ });
198
+ const [huePickerOpen, setHuePickerOpen] = (0, import_react5.useState)(false);
199
+ const suppressNextTooltip = (0, import_react5.useRef)(false);
200
+ const [triggerTooltipOpen, setTriggerTooltipOpen] = (0, import_react5.useState)(false);
201
+ return /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Root, {
202
+ open: triggerTooltipOpen,
203
+ onOpenChange: (nextOpen) => {
204
+ if (suppressNextTooltip.current) {
205
+ setTriggerTooltipOpen(false);
206
+ suppressNextTooltip.current = false;
207
+ } else {
208
+ setTriggerTooltipOpen(nextOpen);
209
+ }
210
+ }
211
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Root, {
212
+ modal: false,
213
+ open: huePickerOpen,
214
+ onOpenChange: (nextOpen) => {
215
+ setHuePickerOpen(nextOpen);
216
+ suppressNextTooltip.current = true;
217
+ }
218
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Trigger, {
219
+ asChild: true
220
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Trigger, {
221
+ asChild: true
222
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toolbar.Button, {
223
+ classNames: (0, import_react_ui_theme2.mx)("gap-2 plb-1", classNames),
224
+ disabled
225
+ }, /* @__PURE__ */ import_react5.default.createElement("span", {
226
+ className: "sr-only"
227
+ }, t("select hue label")), /* @__PURE__ */ import_react5.default.createElement(import_react4.Palette, {
228
+ className: (0, import_react_ui_theme2.getSize)(5)
229
+ })))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Content, {
230
+ side: "bottom"
231
+ }, t("select hue label"), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Arrow, null))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Content, {
232
+ side: "bottom",
233
+ classNames: "!w-40"
234
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Viewport, {
235
+ classNames: "grid grid-cols-4"
236
+ }, hueTokens.map((hue2) => {
237
+ return /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.CheckboxItem, {
238
+ key: hue2,
239
+ checked: hue2 === hueValue,
240
+ onCheckedChange: () => setHueValue(hue2),
241
+ classNames: "px-0 py-2 items-center justify-center"
242
+ }, /* @__PURE__ */ import_react5.default.createElement(HuePreview, {
243
+ hue: hue2
244
+ }));
245
+ })), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Arrow, null)))));
246
+ };
247
+ var HuePickerBlock = ({ disabled, hue, onChangeHue, defaultHue, onClickClear }) => {
248
+ const { t } = (0, import_react_ui2.useTranslation)("os");
249
+ const [hueValue, setHueValue] = (0, import_react_use_controllable_state2.useControllableState)({
250
+ prop: hue,
251
+ onChange: onChangeHue,
252
+ defaultProp: defaultHue
253
+ });
254
+ return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Root, {
255
+ modal: false
256
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Trigger, {
257
+ asChild: true
258
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Button, {
259
+ variant: "ghost",
260
+ classNames: "gap-2 plb-1",
261
+ disabled
262
+ }, /* @__PURE__ */ import_react5.default.createElement("span", {
263
+ className: "sr-only"
264
+ }, t("select hue label")), /* @__PURE__ */ import_react5.default.createElement("div", {
265
+ role: "none",
266
+ className: "pis-14 grow flex items-center justify-center gap-2"
267
+ }, /* @__PURE__ */ import_react5.default.createElement(HuePreview, {
268
+ hue: hueValue
269
+ }), /* @__PURE__ */ import_react5.default.createElement("span", null, t(`${hueValue} label`))), /* @__PURE__ */ import_react5.default.createElement(import_react4.CaretDown, {
270
+ className: (0, import_react_ui_theme2.getSize)(4)
271
+ }))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Content, {
272
+ side: "right"
273
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Viewport, null, Object.keys(import_react_ui_theme2.hueTokenThemes).map((hue2) => {
274
+ return /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.CheckboxItem, {
275
+ key: hue2,
276
+ checked: hue2 === hueValue,
277
+ onCheckedChange: () => setHueValue(hue2)
278
+ }, /* @__PURE__ */ import_react5.default.createElement(HuePreview, {
279
+ hue: hue2
280
+ }), /* @__PURE__ */ import_react5.default.createElement("span", {
281
+ className: "grow"
282
+ }, t(`${hue2} label`)), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.ItemIndicator, null, /* @__PURE__ */ import_react5.default.createElement(import_react4.Check, null)));
283
+ })), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.DropdownMenu.Arrow, null))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Trigger, {
284
+ asChild: true
285
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Button, {
286
+ variant: "ghost",
287
+ onClick: onClickClear,
288
+ disabled
289
+ }, /* @__PURE__ */ import_react5.default.createElement("span", {
290
+ className: "sr-only"
291
+ }, t("clear label")), /* @__PURE__ */ import_react5.default.createElement(import_react4.ArrowCounterClockwise, null))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Content, {
292
+ side: "right"
293
+ }, t("clear label"), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Tooltip.Arrow, null)))));
294
+ };
295
+ // Annotate the CommonJS export names for ESM import in node:
296
+ 0 && (module.exports = {
297
+ EmojiPickerBlock,
298
+ EmojiPickerToolbarButton,
299
+ HuePickerBlock,
300
+ HuePickerToolbarButton
301
+ });
302
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/EmojiPicker.tsx", "../../../src/components/HuePicker.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport emojiData from '@emoji-mart/data';\nimport EmojiMart from '@emoji-mart/react';\nimport { ArrowCounterClockwise, CaretDown, UserCircle } from '@phosphor-icons/react';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { useRef, useState } from 'react';\n\nimport {\n Button,\n type ButtonProps,\n Popover,\n type ThemedClassName,\n Toolbar,\n Tooltip,\n useMediaQuery,\n useThemeContext,\n useTranslation,\n} from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport './emoji.css';\n\nexport type EmojiPickerProps = {\n disabled?: boolean;\n defaultEmoji?: string;\n emoji?: string;\n onChangeEmoji?: (nextEmoji: string) => void;\n onClickClear?: ButtonProps['onClick'];\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 disabled,\n defaultEmoji,\n emoji,\n onChangeEmoji,\n classNames,\n}: ThemedClassName<Omit<EmojiPickerProps, 'onClickClear'>>) => {\n const { t } = useTranslation('os');\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 const suppressNextTooltip = useRef<boolean>(false);\n const [triggerTooltipOpen, setTriggerTooltipOpen] = useState(false);\n\n return (\n <Tooltip.Root\n open={triggerTooltipOpen}\n onOpenChange={(nextOpen) => {\n if (suppressNextTooltip.current) {\n setTriggerTooltipOpen(false);\n suppressNextTooltip.current = false;\n } else {\n setTriggerTooltipOpen(nextOpen);\n }\n }}\n >\n <Popover.Root\n open={emojiPickerOpen}\n onOpenChange={(nextOpen) => {\n setEmojiPickerOpen(nextOpen);\n suppressNextTooltip.current = true;\n }}\n >\n <Tooltip.Trigger asChild>\n <Popover.Trigger asChild>\n <Toolbar.Button classNames={['gap-2 text-2xl plb-1', classNames]} disabled={disabled}>\n <span className='sr-only'>{t('select emoji label')}</span>\n <UserCircle className={getSize(5)} />\n </Toolbar.Button>\n </Popover.Trigger>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>\n {t('select emoji label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n <Popover.Portal>\n <Popover.Content\n side='bottom'\n onKeyDownCapture={(event) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n setEmojiPickerOpen(false);\n suppressNextTooltip.current = true;\n }\n }}\n >\n {/* https://github.com/missive/emoji-mart?tab=readme-ov-file#options--props */}\n <EmojiMart\n data={emojiData}\n onEmojiSelect={({ native }: { native?: string }) => {\n if (native) {\n setEmojiValue(native);\n setEmojiPickerOpen(false);\n }\n }}\n autoFocus={true}\n maxFrequentRows={0}\n noCountryFlags={true}\n theme={themeMode}\n />\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Tooltip.Root>\n );\n};\n\n/**\n * A button for picking an emoji alongside a button for unsetting it.\n */\nexport const EmojiPickerBlock = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickClear }: EmojiPickerProps) => {\n const { t } = useTranslation('os');\n const [isMd] = useMediaQuery('md', { ssr: false });\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 <>\n <Popover.Root open={emojiPickerOpen} onOpenChange={setEmojiPickerOpen}>\n <Popover.Trigger asChild>\n <Button variant='ghost' classNames='gap-2 text-2xl plb-1' disabled={disabled}>\n <span className='sr-only'>{t('select emoji label')}</span>\n <span className='grow pis-14'>{emojiValue}</span>\n <CaretDown className={getSize(4)} />\n </Button>\n </Popover.Trigger>\n <Popover.Content\n side='right'\n sideOffset={isMd ? 0 : -310}\n onKeyDownCapture={(event) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n setEmojiPickerOpen(false);\n }\n }}\n >\n <EmojiMart\n data={emojiData}\n onEmojiSelect={({ native }: { native?: string }) => {\n if (native) {\n setEmojiValue(native);\n setEmojiPickerOpen(false);\n }\n }}\n autoFocus={true}\n maxFrequentRows={0}\n noCountryFlags={true}\n />\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Root>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' onClick={onClickClear} disabled={disabled}>\n <span className='sr-only'>{t('clear label')}</span>\n <ArrowCounterClockwise />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='right'>\n {t('clear label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ArrowCounterClockwise, CaretDown, Check, Palette } from '@phosphor-icons/react';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { useRef, useState } from 'react';\n\nimport {\n Button,\n type ButtonProps,\n DropdownMenu,\n type ThemedClassName,\n Toolbar,\n Tooltip,\n useThemeContext,\n useTranslation,\n} from '@dxos/react-ui';\nimport { getSize, hueTokenThemes, mx } from '@dxos/react-ui-theme';\n\nconst HuePreview = ({ hue }: { hue: string }) => {\n const { tx } = useThemeContext();\n const size = 20;\n return (\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n <rect x={0} y={0} width={size} height={size} className={tx('hue.fill', 'select--hue__preview', { hue })} />\n </svg>\n );\n};\n\nconst hueTokens = Object.keys(hueTokenThemes).slice(0, 16);\n\nexport type HuePickerProps = {\n disabled?: boolean;\n defaultHue?: string;\n hue?: string;\n onChangeHue?: (nextHue: string) => void;\n onClickClear?: ButtonProps['onClick'];\n};\n\n/**\n * A toolbar button for picking hue. Use only in `role=toolbar` elements. Unable to unset the value.\n */\nexport const HuePickerToolbarButton = ({\n disabled,\n hue,\n onChangeHue,\n classNames,\n defaultHue,\n}: ThemedClassName<Omit<HuePickerProps, 'onClickClear'>>) => {\n const { t } = useTranslation('os');\n\n const [hueValue, setHueValue] = useControllableState<string>({\n prop: hue,\n onChange: onChangeHue,\n defaultProp: defaultHue,\n });\n\n const [huePickerOpen, setHuePickerOpen] = useState<boolean>(false);\n\n const suppressNextTooltip = useRef<boolean>(false);\n const [triggerTooltipOpen, setTriggerTooltipOpen] = useState(false);\n\n return (\n <Tooltip.Root\n open={triggerTooltipOpen}\n onOpenChange={(nextOpen) => {\n if (suppressNextTooltip.current) {\n setTriggerTooltipOpen(false);\n suppressNextTooltip.current = false;\n } else {\n setTriggerTooltipOpen(nextOpen);\n }\n }}\n >\n <DropdownMenu.Root\n modal={false}\n open={huePickerOpen}\n onOpenChange={(nextOpen) => {\n setHuePickerOpen(nextOpen);\n suppressNextTooltip.current = true;\n }}\n >\n <Tooltip.Trigger asChild>\n <DropdownMenu.Trigger asChild>\n <Toolbar.Button classNames={mx('gap-2 plb-1', classNames)} disabled={disabled}>\n <span className='sr-only'>{t('select hue label')}</span>\n <Palette className={getSize(5)} />\n </Toolbar.Button>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>\n {t('select hue label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n <DropdownMenu.Portal>\n <DropdownMenu.Content side='bottom' classNames='!w-40'>\n <DropdownMenu.Viewport classNames='grid grid-cols-4'>\n {hueTokens.map((hue) => {\n return (\n <DropdownMenu.CheckboxItem\n key={hue}\n checked={hue === hueValue}\n onCheckedChange={() => setHueValue(hue)}\n classNames={'px-0 py-2 items-center justify-center'}\n >\n <HuePreview hue={hue} />\n </DropdownMenu.CheckboxItem>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </Tooltip.Root>\n );\n};\n\n/**\n * A button for picking hue alongside a button for unsetting it.\n */\nexport const HuePickerBlock = ({ disabled, hue, onChangeHue, defaultHue, onClickClear }: HuePickerProps) => {\n const { t } = useTranslation('os');\n\n const [hueValue, setHueValue] = useControllableState<string>({\n prop: hue,\n onChange: onChangeHue,\n defaultProp: defaultHue,\n });\n\n return (\n <>\n <DropdownMenu.Root modal={false}>\n <DropdownMenu.Trigger asChild>\n <Button variant='ghost' classNames='gap-2 plb-1' disabled={disabled}>\n <span className='sr-only'>{t('select hue label')}</span>\n <div role='none' className='pis-14 grow flex items-center justify-center gap-2'>\n <HuePreview hue={hueValue!} />\n <span>{t(`${hueValue} label`)}</span>\n </div>\n <CaretDown className={getSize(4)} />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content side='right'>\n <DropdownMenu.Viewport>\n {Object.keys(hueTokenThemes).map((hue) => {\n return (\n <DropdownMenu.CheckboxItem\n key={hue}\n checked={hue === hueValue}\n onCheckedChange={() => setHueValue(hue)}\n >\n <HuePreview hue={hue} />\n <span className='grow'>{t(`${hue} label`)}</span>\n <DropdownMenu.ItemIndicator>\n <Check />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.CheckboxItem>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' onClick={onClickClear} disabled={disabled}>\n <span className='sr-only'>{t('clear label')}</span>\n <ArrowCounterClockwise />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='right'>\n {t('clear label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_react_use_controllable_state", "import_react_ui", "import_react_ui_theme", "EmojiPickerToolbarButton", "disabled", "defaultEmoji", "emoji", "onChangeEmoji", "classNames", "t", "useTranslation", "themeMode", "useThemeContext", "_emojiValue", "setEmojiValue", "useControllableState", "prop", "onChange", "defaultProp", "emojiPickerOpen", "setEmojiPickerOpen", "useState", "suppressNextTooltip", "useRef", "triggerTooltipOpen", "setTriggerTooltipOpen", "React", "Tooltip", "Root", "open", "onOpenChange", "nextOpen", "current", "Popover", "Trigger", "asChild", "Toolbar", "Button", "span", "className", "UserCircle", "getSize", "Portal", "Content", "side", "Arrow", "onKeyDownCapture", "event", "key", "stopPropagation", "EmojiMart", "data", "emojiData", "onEmojiSelect", "native", "autoFocus", "maxFrequentRows", "noCountryFlags", "theme", "EmojiPickerBlock", "onClickClear", "isMd", "useMediaQuery", "ssr", "emojiValue", "variant", "CaretDown", "sideOffset", "onClick", "ArrowCounterClockwise", "HuePreview", "hue", "tx", "size", "svg", "width", "height", "viewBox", "rect", "x", "y", "hueTokens", "Object", "keys", "hueTokenThemes", "slice", "HuePickerToolbarButton", "onChangeHue", "defaultHue", "hueValue", "setHueValue", "huePickerOpen", "setHuePickerOpen", "DropdownMenu", "modal", "mx", "Palette", "Viewport", "map", "CheckboxItem", "checked", "onCheckedChange", "HuePickerBlock", "div", "role", "ItemIndicator", "Check"]
7
+ }
@@ -0,0 +1,7 @@
1
+ /* packages/ui/react-ui-pickers/src/components/emoji.css */
2
+ [data-theme=dark] em-emoji-picker {
3
+ --background-rgb: #3B3B3F;
4
+ --rgb-background: #3B3B3F;
5
+ --font-family: "Inter Variable", ui-sans-serif;
6
+ }
7
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/emoji.css"],
4
+ "sourcesContent": ["/**\n * https://github.com/missive/emoji-mart/blob/main/packages/emoji-mart-website/example-custom-styles.html\n */\n[data-theme=\"dark\"] em-emoji-picker {\n /* TODO(burdon): Get from TW defs: modal-surface? */\n --background-rgb: #3B3B3F;\n --rgb-background: #3B3B3F;\n\n --font-family: \"Inter Variable\", ui-sans-serif;\n\n /*--font-size: 16px;*/\n /*--color-border-over: rgba(0, 0, 0, 0.1);*/\n /*--color-border: rgba(0, 0, 0, 0.05);*/\n /*--category-icon-size: 24px;*/\n /*--border-radius: 24px;*/\n /*--font-family: 'Comic Sans MS', 'Chalkboard SE', cursive;*/\n /*--rgb-accent: 255, 105, 180;*/\n /*--rgb-color: 102, 51, 153;*/\n /*--rgb-input: 255, 235, 235;*/\n /*--shadow: 5px 5px 15px -8px rebeccapurple;*/\n\n /*height: 50vh;*/\n /*min-height: 400px;*/\n /*max-height: 800px;*/\n}\n"],
5
+ "mappings": ";AAGA,CAAC,iBAAmB;AAElB,oBAAkB;AAClB,oBAAkB;AAElB,iBAAe,gBAAgB,EAAE;AAgBnC;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ {"inputs":{"packages/ui/react-ui-pickers/src/components/emoji.css":{"bytes":783,"imports":[]},"packages/ui/react-ui-pickers/src/components/EmojiPicker.tsx":{"bytes":19368,"imports":[{"path":"@emoji-mart/data","kind":"import-statement","external":true},{"path":"@emoji-mart/react","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-pickers/src/components/emoji.css","kind":"import-statement","original":"./emoji.css"}],"format":"esm"},"packages/ui/react-ui-pickers/src/components/HuePicker.tsx":{"bytes":20029,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-pickers/src/components/index.ts":{"bytes":611,"imports":[{"path":"packages/ui/react-ui-pickers/src/components/EmojiPicker.tsx","kind":"import-statement","original":"./EmojiPicker"},{"path":"packages/ui/react-ui-pickers/src/components/HuePicker.tsx","kind":"import-statement","original":"./HuePicker"}],"format":"esm"},"packages/ui/react-ui-pickers/src/index.ts":{"bytes":506,"imports":[{"path":"packages/ui/react-ui-pickers/src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-pickers/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":21267},"packages/ui/react-ui-pickers/dist/lib/node/index.cjs":{"imports":[{"path":"@emoji-mart/data","kind":"import-statement","external":true},{"path":"@emoji-mart/react","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["EmojiPickerBlock","EmojiPickerToolbarButton","HuePickerBlock","HuePickerToolbarButton"],"entryPoint":"packages/ui/react-ui-pickers/src/index.ts","cssBundle":"packages/ui/react-ui-pickers/dist/lib/node/index.css","inputs":{"packages/ui/react-ui-pickers/src/components/EmojiPicker.tsx":{"bytesInOutput":5216},"packages/ui/react-ui-pickers/src/components/emoji.css":{"bytesInOutput":0},"packages/ui/react-ui-pickers/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-pickers/src/components/HuePicker.tsx":{"bytesInOutput":5891},"packages/ui/react-ui-pickers/src/index.ts":{"bytesInOutput":0}},"bytes":11370},"packages/ui/react-ui-pickers/dist/lib/node/index.css.map":{"imports":[],"exports":[],"inputs":{},"bytes":1017},"packages/ui/react-ui-pickers/dist/lib/node/index.css":{"imports":[],"inputs":{"packages/ui/react-ui-pickers/src/components/emoji.css":{"bytesInOutput":146}},"bytes":244}}}
@@ -0,0 +1,7 @@
1
+ /* packages/ui/react-ui-pickers/src/components/emoji.css */
2
+ [data-theme=dark] em-emoji-picker {
3
+ --background-rgb: #3B3B3F;
4
+ --rgb-background: #3B3B3F;
5
+ --font-family: "Inter Variable", ui-sans-serif;
6
+ }
7
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/emoji.css"],
4
+ "sourcesContent": ["/**\n * https://github.com/missive/emoji-mart/blob/main/packages/emoji-mart-website/example-custom-styles.html\n */\n[data-theme=\"dark\"] em-emoji-picker {\n /* TODO(burdon): Get from TW defs: modal-surface? */\n --background-rgb: #3B3B3F;\n --rgb-background: #3B3B3F;\n\n --font-family: \"Inter Variable\", ui-sans-serif;\n\n /*--font-size: 16px;*/\n /*--color-border-over: rgba(0, 0, 0, 0.1);*/\n /*--color-border: rgba(0, 0, 0, 0.05);*/\n /*--category-icon-size: 24px;*/\n /*--border-radius: 24px;*/\n /*--font-family: 'Comic Sans MS', 'Chalkboard SE', cursive;*/\n /*--rgb-accent: 255, 105, 180;*/\n /*--rgb-color: 102, 51, 153;*/\n /*--rgb-input: 255, 235, 235;*/\n /*--shadow: 5px 5px 15px -8px rebeccapurple;*/\n\n /*height: 50vh;*/\n /*min-height: 400px;*/\n /*max-height: 800px;*/\n}\n"],
5
+ "mappings": ";AAGA,CAAC,iBAAmB;AAElB,oBAAkB;AAClB,oBAAkB;AAElB,iBAAe,gBAAgB,EAAE;AAgBnC;",
6
+ "names": []
7
+ }