@dxos/react-ui-pickers 0.8.4-main.406dc2a → 0.8.4-main.40e3dcdf1b

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 (43) hide show
  1. package/dist/lib/browser/chunk-IEOELSPW.mjs +64 -0
  2. package/dist/lib/browser/chunk-IEOELSPW.mjs.map +7 -0
  3. package/dist/lib/browser/components/IconPicker/icons.mjs +9 -0
  4. package/dist/lib/browser/components/IconPicker/icons.mjs.map +7 -0
  5. package/dist/lib/browser/index.css +2 -2
  6. package/dist/lib/browser/index.css.map +2 -2
  7. package/dist/lib/browser/index.mjs +195 -299
  8. package/dist/lib/browser/index.mjs.map +3 -3
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/node-esm/chunk-OLGXN23I.mjs +66 -0
  11. package/dist/lib/node-esm/chunk-OLGXN23I.mjs.map +7 -0
  12. package/dist/lib/node-esm/components/IconPicker/icons.mjs +10 -0
  13. package/dist/lib/node-esm/components/IconPicker/icons.mjs.map +7 -0
  14. package/dist/lib/node-esm/index.css +2 -2
  15. package/dist/lib/node-esm/index.css.map +2 -2
  16. package/dist/lib/node-esm/index.mjs +194 -299
  17. package/dist/lib/node-esm/index.mjs.map +3 -3
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/types/src/components/EmojiPicker/EmojiPicker.d.ts.map +1 -1
  20. package/dist/types/src/components/EmojiPicker/EmojiPicker.stories.d.ts +0 -3
  21. package/dist/types/src/components/EmojiPicker/EmojiPicker.stories.d.ts.map +1 -1
  22. package/dist/types/src/components/HuePicker/HuePicker.d.ts.map +1 -1
  23. package/dist/types/src/components/HuePicker/HuePicker.stories.d.ts +1 -4
  24. package/dist/types/src/components/HuePicker/HuePicker.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/IconPicker/IconPicker.d.ts +1 -1
  26. package/dist/types/src/components/IconPicker/IconPicker.d.ts.map +1 -1
  27. package/dist/types/src/components/IconPicker/IconPicker.stories.d.ts +1 -4
  28. package/dist/types/src/components/IconPicker/IconPicker.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/IconPicker/icons.d.ts +7 -0
  30. package/dist/types/src/components/IconPicker/icons.d.ts.map +1 -0
  31. package/dist/types/src/components/PickerButton/PickerButton.d.ts +3 -3
  32. package/dist/types/src/components/PickerButton/PickerButton.d.ts.map +1 -1
  33. package/dist/types/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +31 -18
  35. package/src/components/EmojiPicker/EmojiPicker.stories.tsx +2 -5
  36. package/src/components/EmojiPicker/EmojiPicker.tsx +23 -18
  37. package/src/components/EmojiPicker/emoji.css +5 -21
  38. package/src/components/HuePicker/HuePicker.stories.tsx +2 -5
  39. package/src/components/HuePicker/HuePicker.tsx +7 -11
  40. package/src/components/IconPicker/IconPicker.stories.tsx +2 -5
  41. package/src/components/IconPicker/IconPicker.tsx +7 -67
  42. package/src/components/IconPicker/icons.ts +66 -0
  43. package/src/components/PickerButton/PickerButton.tsx +11 -12
@@ -0,0 +1,64 @@
1
+ // src/components/IconPicker/icons.ts
2
+ var icons = [
3
+ "ph--house-line--regular",
4
+ "ph--planet--regular",
5
+ "ph--castle-turret--regular",
6
+ "ph--snowflake--regular",
7
+ "ph--virus--regular",
8
+ "ph--graph--regular",
9
+ "ph--air-traffic-control--regular",
10
+ "ph--asterisk--regular",
11
+ "ph--atom--regular",
12
+ "ph--basketball--regular",
13
+ "ph--butterfly--regular",
14
+ "ph--cactus--regular",
15
+ "ph--cake--regular",
16
+ "ph--calendar-dots--regular",
17
+ "ph--campfire--regular",
18
+ "ph--command--regular",
19
+ "ph--confetti--regular",
20
+ "ph--detective--regular",
21
+ "ph--disco-ball--regular",
22
+ "ph--dna--regular",
23
+ "ph--factory--regular",
24
+ "ph--flag-banner-fold--regular",
25
+ "ph--flask--regular",
26
+ "ph--flower-lotus--regular",
27
+ "ph--flying-saucer--regular",
28
+ "ph--game-controller--regular",
29
+ "ph--gavel--regular",
30
+ "ph--gift--regular",
31
+ "ph--guitar--regular",
32
+ "ph--hamburger--regular",
33
+ "ph--handshake--regular",
34
+ "ph--heart--regular",
35
+ "ph--lightbulb--regular",
36
+ "ph--lock--regular",
37
+ "ph--martini--regular",
38
+ "ph--medal-military--regular",
39
+ "ph--moped-front--regular",
40
+ "ph--office-chair--regular",
41
+ "ph--paint-brush-household--regular",
42
+ "ph--peace--regular",
43
+ "ph--person-simple-hike--regular",
44
+ "ph--piggy-bank--regular",
45
+ "ph--potted-plant--regular",
46
+ "ph--radioactive--regular",
47
+ "ph--rocket-launch--regular",
48
+ "ph--shield-star--regular",
49
+ "ph--shopping-cart--regular",
50
+ "ph--stethoscope--regular",
51
+ "ph--student--regular",
52
+ "ph--sun--regular",
53
+ "ph--tote--regular",
54
+ "ph--tree--regular",
55
+ "ph--users-three--regular",
56
+ "ph--yin-yang--regular"
57
+ ];
58
+ var iconValues = icons.map((icon) => icon.match(/ph--(.+)--regular/)?.[1] ?? icon);
59
+
60
+ export {
61
+ icons,
62
+ iconValues
63
+ };
64
+ //# sourceMappingURL=chunk-IEOELSPW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/IconPicker/icons.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * https://phosphoricons.com\n * NOTE: Select icons that we are unlikely to use for the UI.\n */\nexport const icons = [\n 'ph--house-line--regular',\n 'ph--planet--regular',\n 'ph--castle-turret--regular',\n 'ph--snowflake--regular',\n 'ph--virus--regular',\n 'ph--graph--regular',\n 'ph--air-traffic-control--regular',\n 'ph--asterisk--regular',\n 'ph--atom--regular',\n 'ph--basketball--regular',\n 'ph--butterfly--regular',\n 'ph--cactus--regular',\n 'ph--cake--regular',\n 'ph--calendar-dots--regular',\n 'ph--campfire--regular',\n 'ph--command--regular',\n 'ph--confetti--regular',\n 'ph--detective--regular',\n 'ph--disco-ball--regular',\n 'ph--dna--regular',\n 'ph--factory--regular',\n 'ph--flag-banner-fold--regular',\n 'ph--flask--regular',\n 'ph--flower-lotus--regular',\n 'ph--flying-saucer--regular',\n 'ph--game-controller--regular',\n 'ph--gavel--regular',\n 'ph--gift--regular',\n 'ph--guitar--regular',\n 'ph--hamburger--regular',\n 'ph--handshake--regular',\n 'ph--heart--regular',\n 'ph--lightbulb--regular',\n 'ph--lock--regular',\n 'ph--martini--regular',\n 'ph--medal-military--regular',\n 'ph--moped-front--regular',\n 'ph--office-chair--regular',\n 'ph--paint-brush-household--regular',\n 'ph--peace--regular',\n 'ph--person-simple-hike--regular',\n 'ph--piggy-bank--regular',\n 'ph--potted-plant--regular',\n 'ph--radioactive--regular',\n 'ph--rocket-launch--regular',\n 'ph--shield-star--regular',\n 'ph--shopping-cart--regular',\n 'ph--stethoscope--regular',\n 'ph--student--regular',\n 'ph--sun--regular',\n 'ph--tote--regular',\n 'ph--tree--regular',\n 'ph--users-three--regular',\n 'ph--yin-yang--regular',\n];\n\nexport const iconValues = icons.map((icon) => icon.match(/ph--(.+)--regular/)?.[1] ?? icon);\n"],
5
+ "mappings": ";AAQO,IAAMA,QAAQ;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGK,IAAMC,aAAaD,MAAME,IAAI,CAACC,SAASA,KAAKC,MAAM,mBAAA,IAAuB,CAAA,KAAMD,IAAAA;",
6
+ "names": ["icons", "iconValues", "map", "icon", "match"]
7
+ }
@@ -0,0 +1,9 @@
1
+ import {
2
+ iconValues,
3
+ icons
4
+ } from "../../chunk-IEOELSPW.mjs";
5
+ export {
6
+ iconValues,
7
+ icons
8
+ };
9
+ //# sourceMappingURL=icons.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,7 +1,7 @@
1
1
  /* src/components/EmojiPicker/emoji.css */
2
2
  [data-theme=dark] em-emoji-picker {
3
- --background-rgb: #3B3B3F;
4
- --rgb-background: #3B3B3F;
3
+ --background-rgb: #3b3b3f;
4
+ --rgb-background: #3b3b3f;
5
5
  --font-family: "Inter Variable", ui-sans-serif;
6
6
  }
7
7
  /*# sourceMappingURL=index.css.map */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/EmojiPicker/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;",
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): Use tailwind tokens. */\n --background-rgb: #3b3b3f;\n --rgb-background: #3b3b3f;\n --font-family: 'Inter Variable', ui-sans-serif;\n}\n"],
5
+ "mappings": ";AAGA,CAAC,iBAAmB;AAElB,oBAAkB;AAClB,oBAAkB;AAClB,iBAAe,gBAAgB,EAAE;AACnC;",
6
6
  "names": []
7
7
  }
@@ -1,337 +1,233 @@
1
+ import {
2
+ iconValues
3
+ } from "./chunk-IEOELSPW.mjs";
4
+
1
5
  // src/components/EmojiPicker/EmojiPicker.tsx
2
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
3
6
  import emojiData from "@emoji-mart/data";
4
7
  import EmojiMart from "@emoji-mart/react";
5
8
  import { useControllableState } from "@radix-ui/react-use-controllable-state";
6
9
  import React, { useState } from "react";
7
- import { Button, ButtonGroup, Icon, Popover, Toolbar, Tooltip, useMediaQuery, useThemeContext, useTranslation } from "@dxos/react-ui";
10
+ import { Button, ButtonGroup, Icon, IconButton, Popover, Toolbar, useMediaQuery, useThemeContext, useTranslation } from "@dxos/react-ui";
11
+ import { osTranslations } from "@dxos/ui-theme";
8
12
  var EmojiPickerToolbarButton = ({ classNames, emoji, disabled, defaultEmoji, onChangeEmoji }) => {
9
- var _effect = _useSignals();
10
- try {
11
- const { t } = useTranslation("os");
12
- const { themeMode } = useThemeContext();
13
- const [_emojiValue, setEmojiValue] = useControllableState({
14
- prop: emoji,
15
- onChange: onChangeEmoji,
16
- defaultProp: defaultEmoji
17
- });
18
- const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
19
- return /* @__PURE__ */ React.createElement(Popover.Root, {
20
- open: emojiPickerOpen,
21
- onOpenChange: (nextOpen) => {
22
- setEmojiPickerOpen(nextOpen);
13
+ const { t } = useTranslation(osTranslations);
14
+ const { themeMode } = useThemeContext();
15
+ const [_emojiValue, setEmojiValue] = useControllableState({
16
+ prop: emoji,
17
+ onChange: onChangeEmoji,
18
+ defaultProp: defaultEmoji
19
+ });
20
+ const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
21
+ return /* @__PURE__ */ React.createElement(Popover.Root, {
22
+ open: emojiPickerOpen,
23
+ onOpenChange: (nextOpen) => {
24
+ setEmojiPickerOpen(nextOpen);
25
+ }
26
+ }, /* @__PURE__ */ React.createElement(Popover.Trigger, {
27
+ asChild: true
28
+ }, /* @__PURE__ */ React.createElement(Toolbar.IconButton, {
29
+ icon: "ph--user-circle--regular",
30
+ label: t("select emoji label"),
31
+ iconOnly: true,
32
+ tooltipSide: "bottom",
33
+ disabled
34
+ })), /* @__PURE__ */ React.createElement(Popover.Portal, null, /* @__PURE__ */ React.createElement(Popover.Content, {
35
+ side: "bottom",
36
+ onKeyDownCapture: (event) => {
37
+ if (event.key === "Escape") {
38
+ event.stopPropagation();
39
+ setEmojiPickerOpen(false);
23
40
  }
24
- }, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
25
- asChild: true,
26
- content: t("select emoji label"),
27
- side: "bottom"
28
- }, /* @__PURE__ */ React.createElement(Popover.Trigger, {
29
- asChild: true
30
- }, /* @__PURE__ */ React.createElement(Toolbar.Button, {
31
- classNames: [
32
- "gap-2 text-2xl plb-1",
33
- classNames
34
- ],
35
- disabled
36
- }, /* @__PURE__ */ React.createElement("span", {
37
- className: "sr-only"
38
- }, t("select emoji label")), /* @__PURE__ */ React.createElement(Icon, {
39
- icon: "ph--user-circle--regular",
40
- size: 5
41
- })))), /* @__PURE__ */ React.createElement(Popover.Portal, null, /* @__PURE__ */ React.createElement(Popover.Content, {
42
- side: "bottom",
43
- onKeyDownCapture: (event) => {
44
- if (event.key === "Escape") {
45
- event.stopPropagation();
46
- setEmojiPickerOpen(false);
47
- }
41
+ }
42
+ }, /* @__PURE__ */ React.createElement(EmojiMart, {
43
+ data: emojiData,
44
+ onEmojiSelect: ({ native }) => {
45
+ if (native) {
46
+ setEmojiValue(native);
47
+ setEmojiPickerOpen(false);
48
48
  }
49
- }, /* @__PURE__ */ React.createElement(EmojiMart, {
50
- data: emojiData,
51
- onEmojiSelect: ({ native }) => {
52
- if (native) {
53
- setEmojiValue(native);
54
- setEmojiPickerOpen(false);
55
- }
56
- },
57
- autoFocus: true,
58
- maxFrequentRows: 0,
59
- noCountryFlags: true,
60
- theme: themeMode
61
- }), /* @__PURE__ */ React.createElement(Popover.Arrow, null))));
62
- } finally {
63
- _effect.f();
64
- }
49
+ },
50
+ autoFocus: true,
51
+ maxFrequentRows: 0,
52
+ noCountryFlags: true,
53
+ theme: themeMode
54
+ }), /* @__PURE__ */ React.createElement(Popover.Arrow, null))));
65
55
  };
66
56
  var EmojiPickerBlock = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickClear, triggerVariant = "ghost", classNames }) => {
67
- var _effect = _useSignals();
68
- try {
69
- const { t } = useTranslation("os");
70
- const [isMd] = useMediaQuery("md");
71
- const [emojiValue, setEmojiValue] = useControllableState({
72
- prop: emoji,
73
- onChange: onChangeEmoji,
74
- defaultProp: defaultEmoji
75
- });
76
- const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
77
- return /* @__PURE__ */ React.createElement(ButtonGroup, {
78
- classNames
79
- }, /* @__PURE__ */ React.createElement(Popover.Root, {
80
- open: emojiPickerOpen,
81
- onOpenChange: setEmojiPickerOpen
82
- }, /* @__PURE__ */ React.createElement(Popover.Trigger, {
83
- asChild: true
84
- }, /* @__PURE__ */ React.createElement(Button, {
85
- variant: triggerVariant,
86
- classNames: "grow gap-2 text-2xl plb-1",
87
- disabled
88
- }, /* @__PURE__ */ React.createElement("span", {
89
- className: "sr-only"
90
- }, t("select emoji label")), /* @__PURE__ */ React.createElement("span", null, emojiValue), /* @__PURE__ */ React.createElement(Icon, {
91
- icon: "ph--caret-down--bold",
92
- size: 3
93
- }))), /* @__PURE__ */ React.createElement(Popover.Content, {
94
- side: "right",
95
- sideOffset: isMd ? 0 : -310,
96
- onKeyDownCapture: (event) => {
97
- if (event.key === "Escape") {
98
- event.stopPropagation();
99
- setEmojiPickerOpen(false);
100
- }
57
+ const { t } = useTranslation(osTranslations);
58
+ const [isMd] = useMediaQuery("md");
59
+ const [emojiValue, setEmojiValue] = useControllableState({
60
+ prop: emoji,
61
+ onChange: onChangeEmoji,
62
+ defaultProp: defaultEmoji
63
+ });
64
+ const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
65
+ return /* @__PURE__ */ React.createElement(ButtonGroup, {
66
+ classNames
67
+ }, /* @__PURE__ */ React.createElement(Popover.Root, {
68
+ open: emojiPickerOpen,
69
+ onOpenChange: setEmojiPickerOpen
70
+ }, /* @__PURE__ */ React.createElement(Popover.Trigger, {
71
+ asChild: true
72
+ }, /* @__PURE__ */ React.createElement(Button, {
73
+ variant: triggerVariant,
74
+ classNames: "grow gap-2 text-2xl py-1",
75
+ disabled
76
+ }, /* @__PURE__ */ React.createElement("span", {
77
+ className: "sr-only"
78
+ }, t("select emoji label")), /* @__PURE__ */ React.createElement("span", null, emojiValue), /* @__PURE__ */ React.createElement(Icon, {
79
+ icon: "ph--caret-down--bold",
80
+ size: 3
81
+ }))), /* @__PURE__ */ React.createElement(Popover.Content, {
82
+ side: "right",
83
+ sideOffset: isMd ? 0 : -310,
84
+ onKeyDownCapture: (event) => {
85
+ if (event.key === "Escape") {
86
+ event.stopPropagation();
87
+ setEmojiPickerOpen(false);
88
+ }
89
+ }
90
+ }, /* @__PURE__ */ React.createElement(EmojiMart, {
91
+ data: emojiData,
92
+ onEmojiSelect: ({ native }) => {
93
+ if (native) {
94
+ setEmojiValue(native);
95
+ setEmojiPickerOpen(false);
101
96
  }
102
- }, /* @__PURE__ */ React.createElement(EmojiMart, {
103
- data: emojiData,
104
- onEmojiSelect: ({ native }) => {
105
- if (native) {
106
- setEmojiValue(native);
107
- setEmojiPickerOpen(false);
108
- }
109
- },
110
- autoFocus: true,
111
- maxFrequentRows: 0,
112
- noCountryFlags: true
113
- }), /* @__PURE__ */ React.createElement(Popover.Arrow, null))), /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
114
- asChild: true,
115
- content: t("clear label"),
116
- side: "right"
117
- }, /* @__PURE__ */ React.createElement(Button, {
118
- variant: triggerVariant,
119
- onClick: onClickClear,
120
- disabled
121
- }, /* @__PURE__ */ React.createElement("span", {
122
- className: "sr-only"
123
- }, t("clear label")), /* @__PURE__ */ React.createElement(Icon, {
124
- icon: "ph--arrow-counter-clockwise--regular",
125
- size: 5
126
- }))));
127
- } finally {
128
- _effect.f();
129
- }
97
+ },
98
+ autoFocus: true,
99
+ maxFrequentRows: 0,
100
+ noCountryFlags: true
101
+ }), /* @__PURE__ */ React.createElement(Popover.Arrow, null))), /* @__PURE__ */ React.createElement(IconButton, {
102
+ icon: "ph--arrow-counter-clockwise--regular",
103
+ iconOnly: true,
104
+ label: t("clear label"),
105
+ tooltipSide: "right",
106
+ variant: triggerVariant,
107
+ onClick: onClickClear,
108
+ disabled
109
+ }));
130
110
  };
131
111
 
132
112
  // src/components/HuePicker/HuePicker.tsx
133
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
134
113
  import React3 from "react";
135
114
  import { useTranslation as useTranslation2 } from "@dxos/react-ui";
136
- import { hues } from "@dxos/react-ui-theme";
115
+ import { getSize, hues, osTranslations as osTranslations2 } from "@dxos/ui-theme";
137
116
 
138
117
  // src/components/PickerButton/PickerButton.tsx
139
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
140
118
  import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
141
119
  import React2, { useEffect, useState as useState2 } from "react";
142
- import { Button as Button2, DropdownMenu, Icon as Icon2, Toolbar as Toolbar2, Tooltip as Tooltip2 } from "@dxos/react-ui";
143
- var PickerButton = ({ Component, disabled, classNames, defaultValue: _defaultValue, value: _value, values, label, icon, onChange, onReset, rootVariant = "button", iconSize = 5 }) => {
144
- var _effect = _useSignals2();
145
- try {
146
- const [value, setValue] = useControllableState2({
147
- prop: _value,
148
- defaultProp: _defaultValue,
149
- onChange
150
- });
151
- useEffect(() => setValue(_value), [
152
- _value
153
- ]);
154
- const [open, setOpen] = useState2(false);
155
- const TriggerRoot = rootVariant === "toolbar-button" ? Toolbar2.Button : Button2;
156
- return /* @__PURE__ */ React2.createElement(DropdownMenu.Root, {
157
- modal: false,
158
- open,
159
- onOpenChange: setOpen
160
- }, /* @__PURE__ */ React2.createElement(Tooltip2.Trigger, {
161
- asChild: true,
162
- content: label,
163
- side: "bottom"
164
- }, /* @__PURE__ */ React2.createElement(DropdownMenu.Trigger, {
165
- asChild: true
166
- }, /* @__PURE__ */ React2.createElement(TriggerRoot, {
167
- classNames: [
168
- "gap-2 plb-1",
169
- classNames
170
- ],
171
- disabled
172
- }, /* @__PURE__ */ React2.createElement("span", {
173
- className: "sr-only"
174
- }, label), value && /* @__PURE__ */ React2.createElement(Component, {
175
- value,
176
- iconSize
177
- }) || /* @__PURE__ */ React2.createElement(Icon2, {
178
- icon,
179
- size: iconSize
180
- }), /* @__PURE__ */ React2.createElement(Icon2, {
181
- icon: "ph--caret-down--bold",
182
- size: 3
183
- })))), /* @__PURE__ */ React2.createElement(DropdownMenu.Portal, null, /* @__PURE__ */ React2.createElement(DropdownMenu.Content, {
184
- side: "bottom",
185
- classNames: "!is-min"
186
- }, /* @__PURE__ */ React2.createElement(DropdownMenu.Viewport, {
187
- classNames: "grid grid-cols-[repeat(6,min-content)]"
188
- }, values.map((_value2) => {
189
- return /* @__PURE__ */ React2.createElement(DropdownMenu.CheckboxItem, {
190
- key: _value2,
191
- checked: _value2 === value,
192
- onCheckedChange: () => setValue(_value2),
193
- classNames: "p-1 items-center justify-center aspect-square"
194
- }, /* @__PURE__ */ React2.createElement(Component, {
195
- value: _value2,
196
- iconSize
197
- }));
198
- }), onReset && /* @__PURE__ */ React2.createElement(DropdownMenu.CheckboxItem, {
199
- onCheckedChange: () => onReset(),
120
+ import { Button as Button2, DropdownMenu, Icon as Icon2, Toolbar as Toolbar2, Tooltip } from "@dxos/react-ui";
121
+ var PickerButton = ({ Component, disabled, classNames, defaultValue: defaultValueProp, value: valueProp, values, label, icon, onChange, onReset, rootVariant = "button", iconSize = 5 }) => {
122
+ const [value, setValue] = useControllableState2({
123
+ prop: valueProp,
124
+ defaultProp: defaultValueProp,
125
+ onChange
126
+ });
127
+ useEffect(() => setValue(valueProp), [
128
+ valueProp
129
+ ]);
130
+ const [open, setOpen] = useState2(false);
131
+ const TriggerRoot = rootVariant === "toolbar-button" ? Toolbar2.Button : Button2;
132
+ return /* @__PURE__ */ React2.createElement(DropdownMenu.Root, {
133
+ modal: false,
134
+ open,
135
+ onOpenChange: setOpen
136
+ }, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, {
137
+ asChild: true,
138
+ content: label,
139
+ side: "bottom"
140
+ }, /* @__PURE__ */ React2.createElement(DropdownMenu.Trigger, {
141
+ asChild: true
142
+ }, /* @__PURE__ */ React2.createElement(TriggerRoot, {
143
+ classNames: [
144
+ "gap-2 py-1",
145
+ classNames
146
+ ],
147
+ disabled
148
+ }, /* @__PURE__ */ React2.createElement("span", {
149
+ className: "sr-only"
150
+ }, label), value && /* @__PURE__ */ React2.createElement(Component, {
151
+ value,
152
+ size: iconSize
153
+ }) || /* @__PURE__ */ React2.createElement(Icon2, {
154
+ icon,
155
+ size: iconSize
156
+ }), /* @__PURE__ */ React2.createElement(Icon2, {
157
+ icon: "ph--caret-down--bold",
158
+ size: 3
159
+ })))), /* @__PURE__ */ React2.createElement(DropdownMenu.Portal, null, /* @__PURE__ */ React2.createElement(DropdownMenu.Content, {
160
+ side: "bottom",
161
+ classNames: "!w-min"
162
+ }, /* @__PURE__ */ React2.createElement(DropdownMenu.Viewport, {
163
+ classNames: "grid grid-cols-[repeat(6,min-content)]"
164
+ }, values.map((_value) => {
165
+ return /* @__PURE__ */ React2.createElement(DropdownMenu.CheckboxItem, {
166
+ key: _value,
167
+ checked: _value === value,
168
+ onCheckedChange: () => setValue(_value),
200
169
  classNames: "p-1 items-center justify-center aspect-square"
201
- }, /* @__PURE__ */ React2.createElement(Icon2, {
202
- icon: "ph--x--regular",
170
+ }, /* @__PURE__ */ React2.createElement(Component, {
171
+ value: _value,
203
172
  size: iconSize
204
- }))), /* @__PURE__ */ React2.createElement(DropdownMenu.Arrow, null))));
205
- } finally {
206
- _effect.f();
207
- }
173
+ }));
174
+ }), onReset && /* @__PURE__ */ React2.createElement(DropdownMenu.CheckboxItem, {
175
+ onCheckedChange: () => onReset(),
176
+ classNames: "p-1 items-center justify-center aspect-square"
177
+ }, /* @__PURE__ */ React2.createElement(Icon2, {
178
+ icon: "ph--x--regular",
179
+ size: iconSize
180
+ }))), /* @__PURE__ */ React2.createElement(DropdownMenu.Arrow, null))));
208
181
  };
209
182
 
210
183
  // src/components/HuePicker/HuePicker.tsx
211
184
  var HuePicker = (props) => {
212
- var _effect = _useSignals3();
213
- try {
214
- const { t } = useTranslation2("os");
215
- return /* @__PURE__ */ React3.createElement(PickerButton, {
216
- Component: HuePreview,
217
- label: t("select hue label"),
218
- icon: "ph--palette--regular",
219
- values: hues,
220
- ...props
221
- });
222
- } finally {
223
- _effect.f();
224
- }
185
+ const { t } = useTranslation2(osTranslations2);
186
+ return /* @__PURE__ */ React3.createElement(PickerButton, {
187
+ Component: HuePreview,
188
+ label: t("select hue label"),
189
+ icon: "ph--palette--regular",
190
+ values: hues,
191
+ ...props
192
+ });
225
193
  };
226
- var HuePreview = ({ value }) => {
227
- var _effect = _useSignals3();
228
- try {
229
- const size = 16;
230
- return /* @__PURE__ */ React3.createElement("div", {
231
- className: "flex p-[2px] justify-center items-center"
232
- }, /* @__PURE__ */ React3.createElement("svg", {
233
- viewBox: `0 0 ${size} ${size}`,
234
- className: "is-[var(--hue-preview-size,1rem)] bs-[var(--hue-preview-size,1rem)]"
235
- }, /* @__PURE__ */ React3.createElement("rect", {
236
- x: 0,
237
- y: 0,
238
- width: size,
239
- height: size,
240
- fill: `var(--dx-${value}Fill)`,
241
- strokeWidth: 4
242
- })));
243
- } finally {
244
- _effect.f();
245
- }
194
+ var HuePreview = ({ value, size = 5 }) => {
195
+ return /* @__PURE__ */ React3.createElement("div", {
196
+ role: "none",
197
+ className: "flex justify-center items-center"
198
+ }, /* @__PURE__ */ React3.createElement("svg", {
199
+ viewBox: `0 0 ${size} ${size}`,
200
+ className: getSize(size)
201
+ }, /* @__PURE__ */ React3.createElement("rect", {
202
+ x: 0,
203
+ y: 0,
204
+ width: size,
205
+ height: size,
206
+ fill: `var(--color-${value}-surface)`,
207
+ strokeWidth: 4
208
+ })));
246
209
  };
247
210
 
248
211
  // src/components/IconPicker/IconPicker.tsx
249
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
250
212
  import React4 from "react";
251
213
  import { Icon as Icon3, useTranslation as useTranslation3 } from "@dxos/react-ui";
214
+ import { osTranslations as osTranslations3 } from "@dxos/ui-theme";
252
215
  var IconPicker = ({ ...props }) => {
253
- var _effect = _useSignals4();
254
- try {
255
- const { t } = useTranslation3("os");
256
- return /* @__PURE__ */ React4.createElement(PickerButton, {
257
- Component: IconPreview,
258
- label: t("select icon label"),
259
- icon: "ph--selection--regular",
260
- values: iconValues,
261
- ...props
262
- });
263
- } finally {
264
- _effect.f();
265
- }
216
+ const { t } = useTranslation3(osTranslations3);
217
+ return /* @__PURE__ */ React4.createElement(PickerButton, {
218
+ Component: IconPreview,
219
+ label: t("select icon label"),
220
+ icon: "ph--selection--regular",
221
+ values: iconValues,
222
+ ...props
223
+ });
266
224
  };
267
- var IconPreview = ({ value, iconSize = 5 }) => {
268
- var _effect = _useSignals4();
269
- try {
270
- return /* @__PURE__ */ React4.createElement(Icon3, {
271
- icon: `ph--${value}--regular`,
272
- size: iconSize
273
- });
274
- } finally {
275
- _effect.f();
276
- }
225
+ var IconPreview = ({ value, size }) => {
226
+ return /* @__PURE__ */ React4.createElement(Icon3, {
227
+ icon: `ph--${value}--regular`,
228
+ size
229
+ });
277
230
  };
278
- var icons = [
279
- "ph--house-line--regular",
280
- "ph--planet--regular",
281
- "ph--piggy-bank--regular",
282
- "ph--snowflake--regular",
283
- "ph--virus--regular",
284
- "ph--graph--regular",
285
- "ph--air-traffic-control--regular",
286
- "ph--asterisk--regular",
287
- "ph--atom--regular",
288
- "ph--basketball--regular",
289
- "ph--butterfly--regular",
290
- "ph--cactus--regular",
291
- "ph--cake--regular",
292
- "ph--calendar-dots--regular",
293
- "ph--campfire--regular",
294
- "ph--command--regular",
295
- "ph--confetti--regular",
296
- "ph--detective--regular",
297
- "ph--disco-ball--regular",
298
- "ph--dna--regular",
299
- "ph--factory--regular",
300
- "ph--flag-banner-fold--regular",
301
- "ph--flask--regular",
302
- "ph--flower-lotus--regular",
303
- "ph--flying-saucer--regular",
304
- "ph--game-controller--regular",
305
- "ph--gavel--regular",
306
- "ph--gift--regular",
307
- "ph--guitar--regular",
308
- "ph--hamburger--regular",
309
- "ph--handshake--regular",
310
- "ph--heart--regular",
311
- "ph--lightbulb--regular",
312
- "ph--lock--regular",
313
- "ph--martini--regular",
314
- "ph--medal-military--regular",
315
- "ph--moped-front--regular",
316
- "ph--office-chair--regular",
317
- "ph--paint-brush-household--regular",
318
- "ph--peace--regular",
319
- "ph--person-simple-hike--regular",
320
- "ph--piggy-bank--regular",
321
- "ph--potted-plant--regular",
322
- "ph--radioactive--regular",
323
- "ph--rocket-launch--regular",
324
- "ph--shield-star--regular",
325
- "ph--shopping-cart--regular",
326
- "ph--stethoscope--regular",
327
- "ph--student--regular",
328
- "ph--sun--regular",
329
- "ph--tote--regular",
330
- "ph--tree--regular",
331
- "ph--users-three--regular",
332
- "ph--yin-yang--regular"
333
- ];
334
- var iconValues = icons.map((icon) => icon.match(/ph--(.+)--regular/)?.[1] ?? icon);
335
231
  export {
336
232
  EmojiPickerBlock,
337
233
  EmojiPickerToolbarButton,