@dxos/plugin-status-bar 0.7.1-staging.8709ba7 → 0.7.2-staging.6d26b2a
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/node/chunk-OGG3PMIV.cjs +37 -0
- package/dist/lib/node/chunk-OGG3PMIV.cjs.map +7 -0
- package/dist/lib/node/index.cjs +283 -0
- package/dist/lib/node/index.cjs.map +7 -0
- package/dist/lib/node/meta.cjs +30 -0
- package/dist/lib/node/meta.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -0
- package/dist/lib/node-esm/chunk-UVUSU6KS.mjs +16 -0
- package/dist/lib/node-esm/chunk-UVUSU6KS.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +269 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/meta.mjs +10 -0
- package/dist/lib/node-esm/meta.mjs.map +7 -0
- package/package.json +15 -13
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var chunk_OGG3PMIV_exports = {};
|
|
20
|
+
__export(chunk_OGG3PMIV_exports, {
|
|
21
|
+
STATUS_BAR_PLUGIN: () => STATUS_BAR_PLUGIN,
|
|
22
|
+
meta_default: () => meta_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(chunk_OGG3PMIV_exports);
|
|
25
|
+
var STATUS_BAR_PLUGIN = "dxos.org/plugin/status-bar";
|
|
26
|
+
var meta_default = {
|
|
27
|
+
id: STATUS_BAR_PLUGIN,
|
|
28
|
+
name: "Status Bar",
|
|
29
|
+
description: "Display a bar with status and actions.",
|
|
30
|
+
icon: "ph--info--regular"
|
|
31
|
+
};
|
|
32
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
33
|
+
0 && (module.exports = {
|
|
34
|
+
STATUS_BAR_PLUGIN,
|
|
35
|
+
meta_default
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=chunk-OGG3PMIV.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const STATUS_BAR_PLUGIN = 'dxos.org/plugin/status-bar';\n\nexport default {\n id: STATUS_BAR_PLUGIN,\n name: 'Status Bar',\n description: 'Display a bar with status and actions.',\n icon: 'ph--info--regular',\n} satisfies PluginMeta;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,oBAAoB;AAEjC,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;AACR;",
|
|
6
|
+
"names": ["STATUS_BAR_PLUGIN", "id", "name", "description", "icon"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
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
|
+
StatusBar: () => StatusBar,
|
|
32
|
+
StatusBarPanel: () => StatusBarPanel,
|
|
33
|
+
StatusBarPlugin: () => StatusBarPlugin,
|
|
34
|
+
default: () => src_default
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(node_exports);
|
|
37
|
+
var import_chunk_OGG3PMIV = require("./chunk-OGG3PMIV.cjs");
|
|
38
|
+
var import_react = __toESM(require("react"));
|
|
39
|
+
var import_react_tabster = require("@fluentui/react-tabster");
|
|
40
|
+
var import_react_slot = require("@radix-ui/react-slot");
|
|
41
|
+
var import_react2 = __toESM(require("react"));
|
|
42
|
+
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
43
|
+
var import_react3 = __toESM(require("react"));
|
|
44
|
+
var import_app_framework = require("@dxos/app-framework");
|
|
45
|
+
var import_react_ui = require("@dxos/react-ui");
|
|
46
|
+
var import_schema = require("@effect/schema");
|
|
47
|
+
var import_react4 = require("@phosphor-icons/react");
|
|
48
|
+
var import_react5 = __toESM(require("react"));
|
|
49
|
+
var import_app_framework2 = require("@dxos/app-framework");
|
|
50
|
+
var import_react_ui2 = require("@dxos/react-ui");
|
|
51
|
+
var import_react_ui_form = require("@dxos/react-ui-form");
|
|
52
|
+
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
|
53
|
+
var StatusBarText = /* @__PURE__ */ (0, import_react2.forwardRef)(({ classNames, children }, forwardedRef) => /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
54
|
+
className: (0, import_react_ui_theme.mx)(classNames),
|
|
55
|
+
ref: forwardedRef
|
|
56
|
+
}, children));
|
|
57
|
+
var StatusBarButton = /* @__PURE__ */ (0, import_react2.forwardRef)(({ classNames, children, asChild, ...props }, forwardedRef) => {
|
|
58
|
+
const classes = (0, import_react_ui_theme.mx)("flex items-center gap-2 p-1 px-2 rounded-sm", "select-none cursor-pointer ch-focus-ring", "hover:bg-neutral-75 active:bg-neutral-150 dark:hover:bg-neutral-750 dark:active:bg-neutral-700", classNames);
|
|
59
|
+
return asChild ? /* @__PURE__ */ import_react2.default.createElement(import_react_slot.Slot, {
|
|
60
|
+
role: "button",
|
|
61
|
+
ref: forwardedRef,
|
|
62
|
+
className: classes,
|
|
63
|
+
...props
|
|
64
|
+
}, children) : /* @__PURE__ */ import_react2.default.createElement("button", {
|
|
65
|
+
className: classes,
|
|
66
|
+
ref: forwardedRef,
|
|
67
|
+
...props
|
|
68
|
+
}, children);
|
|
69
|
+
});
|
|
70
|
+
var StatusBarItem = /* @__PURE__ */ (0, import_react2.forwardRef)(({ classNames, children, ...props }, forwardedRef) => /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
71
|
+
role: "menuitem",
|
|
72
|
+
className: (0, import_react_ui_theme.mx)("flex items-center gap-2 p-1 px-2 rounded-sm select-none", classNames),
|
|
73
|
+
ref: forwardedRef,
|
|
74
|
+
...props
|
|
75
|
+
}, children));
|
|
76
|
+
var StatusBarContainer = /* @__PURE__ */ (0, import_react2.forwardRef)(({ classNames, children }, forwardedRef) => {
|
|
77
|
+
const groupAttrs = (0, import_react_tabster.useFocusableGroup)({
|
|
78
|
+
tabBehavior: "limited"
|
|
79
|
+
});
|
|
80
|
+
return /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
81
|
+
role: "menubar",
|
|
82
|
+
tabIndex: 0,
|
|
83
|
+
...groupAttrs,
|
|
84
|
+
className: (0, import_react_ui_theme.mx)("bs-[--statusbar-size] flex justify-end items-center gap-2 bg-base text-description text-lg pointer-fine:text-xs ch-focus-ring-inset", classNames),
|
|
85
|
+
ref: forwardedRef
|
|
86
|
+
}, children);
|
|
87
|
+
});
|
|
88
|
+
var StartContent = /* @__PURE__ */ (0, import_react2.forwardRef)(({ classNames, children }, forwardedRef) => /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
89
|
+
role: "none",
|
|
90
|
+
className: (0, import_react_ui_theme.mx)("flex-grow flex items-center space-x-2", classNames),
|
|
91
|
+
ref: forwardedRef
|
|
92
|
+
}, children));
|
|
93
|
+
var EndContent = /* @__PURE__ */ (0, import_react2.forwardRef)(({ classNames, children }, forwardedRef) => /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
94
|
+
role: "none",
|
|
95
|
+
className: (0, import_react_ui_theme.mx)("flex-grow flex items-center justify-end", classNames),
|
|
96
|
+
ref: forwardedRef
|
|
97
|
+
}, children));
|
|
98
|
+
var StatusBar = {
|
|
99
|
+
Container: StatusBarContainer,
|
|
100
|
+
Text: StatusBarText,
|
|
101
|
+
Item: StatusBarItem,
|
|
102
|
+
Button: StatusBarButton,
|
|
103
|
+
StartContent,
|
|
104
|
+
EndContent
|
|
105
|
+
};
|
|
106
|
+
var entry = (translation) => ({
|
|
107
|
+
[import_chunk_OGG3PMIV.STATUS_BAR_PLUGIN]: translation
|
|
108
|
+
});
|
|
109
|
+
var mkTranslation = (t) => (key) => t(key);
|
|
110
|
+
var translations = {
|
|
111
|
+
"en-US": entry({
|
|
112
|
+
"plugin name": "Status Bar",
|
|
113
|
+
"name label": "Name",
|
|
114
|
+
"name placeholder": "Preferred name",
|
|
115
|
+
"email input label": "Email",
|
|
116
|
+
"email input placeholder": "hello@example.com",
|
|
117
|
+
"feedback text area label": "Feedback",
|
|
118
|
+
"feedback text area placeholder": "Found a bug? Have a suggestion? Let us know!",
|
|
119
|
+
"send feedback label": "Send Feedback"
|
|
120
|
+
})
|
|
121
|
+
};
|
|
122
|
+
var translations_default = [
|
|
123
|
+
translations
|
|
124
|
+
];
|
|
125
|
+
var Email = import_schema.Schema.String.pipe(import_schema.Schema.nonEmptyString({
|
|
126
|
+
message: () => "Email is required."
|
|
127
|
+
}), import_schema.Schema.pattern(/^(?!\.)(?!.*\.\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\.)+[A-Z]{2,}$/i, {
|
|
128
|
+
message: () => "Invalid email address."
|
|
129
|
+
}));
|
|
130
|
+
var nonEmpty = (field) => import_schema.Schema.nonEmptyString({
|
|
131
|
+
message: () => `${field} is required.`
|
|
132
|
+
});
|
|
133
|
+
var maxLength = (field, length) => import_schema.Schema.maxLength(length, {
|
|
134
|
+
message: () => `${field} is too long.`
|
|
135
|
+
});
|
|
136
|
+
var FeedbackFormSchema = import_schema.Schema.Struct({
|
|
137
|
+
name: import_schema.Schema.String.pipe(nonEmpty("Name"), maxLength("Name", 256)),
|
|
138
|
+
email: Email.pipe(maxLength("Email", 256)),
|
|
139
|
+
message: import_schema.Schema.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
|
|
140
|
+
});
|
|
141
|
+
var initialValues = {
|
|
142
|
+
name: "",
|
|
143
|
+
email: "",
|
|
144
|
+
message: ""
|
|
145
|
+
};
|
|
146
|
+
var FeedbackForm = ({ onClose }) => {
|
|
147
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_OGG3PMIV.STATUS_BAR_PLUGIN);
|
|
148
|
+
const translation = mkTranslation(t);
|
|
149
|
+
const dispatch = (0, import_app_framework2.useIntentDispatcher)();
|
|
150
|
+
const onSubmit = (0, import_react5.useCallback)((values) => {
|
|
151
|
+
void dispatch({
|
|
152
|
+
action: "dxos.org/plugin/observability/capture-feedback",
|
|
153
|
+
data: values
|
|
154
|
+
});
|
|
155
|
+
onClose();
|
|
156
|
+
}, [
|
|
157
|
+
dispatch,
|
|
158
|
+
onClose
|
|
159
|
+
]);
|
|
160
|
+
const { handleSubmit, canSubmit, getStatus, ...inputProps } = (0, import_react_ui_form.useForm)({
|
|
161
|
+
initialValues,
|
|
162
|
+
schema: FeedbackFormSchema,
|
|
163
|
+
onSubmit
|
|
164
|
+
});
|
|
165
|
+
return /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
166
|
+
role: "form",
|
|
167
|
+
className: "p-3 flex flex-col gap-2"
|
|
168
|
+
}, /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
169
|
+
role: "none",
|
|
170
|
+
className: "space-b-1"
|
|
171
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Root, {
|
|
172
|
+
validationValence: getStatus("name").status
|
|
173
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Label, null, translation("name label")), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.TextInput, {
|
|
174
|
+
classNames: "text-sm",
|
|
175
|
+
placeholder: translation("name placeholder"),
|
|
176
|
+
autoFocus: true,
|
|
177
|
+
...inputProps
|
|
178
|
+
}), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.DescriptionAndValidation, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Validation, null, getStatus("name").error)))), /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
179
|
+
role: "none",
|
|
180
|
+
className: "space-b-1"
|
|
181
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Root, {
|
|
182
|
+
validationValence: getStatus("email").status
|
|
183
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Label, null, translation("email input label")), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.TextInput, {
|
|
184
|
+
classNames: "text-sm",
|
|
185
|
+
placeholder: translation("email input placeholder"),
|
|
186
|
+
...inputProps
|
|
187
|
+
}), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.DescriptionAndValidation, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Validation, null, getStatus("email").error)))), /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
188
|
+
role: "none",
|
|
189
|
+
className: "space-b-1"
|
|
190
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Root, {
|
|
191
|
+
validationValence: getStatus("message").status
|
|
192
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Label, null, translation("feedback text area label")), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.TextArea, {
|
|
193
|
+
classNames: "text-sm",
|
|
194
|
+
rows: 5,
|
|
195
|
+
cols: 30,
|
|
196
|
+
placeholder: translation("feedback text area placeholder"),
|
|
197
|
+
...inputProps
|
|
198
|
+
}), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.DescriptionAndValidation, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Input.Validation, null, getStatus("message").error)))), /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
199
|
+
role: "none",
|
|
200
|
+
className: "space-b-2"
|
|
201
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Button, {
|
|
202
|
+
type: "submit",
|
|
203
|
+
variant: "primary",
|
|
204
|
+
classNames: "is-full flex gap-2",
|
|
205
|
+
disabled: !canSubmit,
|
|
206
|
+
onClick: handleSubmit
|
|
207
|
+
}, /* @__PURE__ */ import_react5.default.createElement("span", null, translation("send feedback label")), /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
208
|
+
className: "grow"
|
|
209
|
+
}), /* @__PURE__ */ import_react5.default.createElement(import_react4.PaperPlaneTilt, {
|
|
210
|
+
className: (0, import_react_ui_theme2.getSize)(5)
|
|
211
|
+
})), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Popover.Close, {
|
|
212
|
+
asChild: true
|
|
213
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Button, {
|
|
214
|
+
classNames: "is-full flex gap-2"
|
|
215
|
+
}, /* @__PURE__ */ import_react5.default.createElement("span", null, t("cancel label", {
|
|
216
|
+
ns: "os"
|
|
217
|
+
})), /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
218
|
+
className: "grow"
|
|
219
|
+
}), /* @__PURE__ */ import_react5.default.createElement(import_react4.X, {
|
|
220
|
+
className: (0, import_react_ui_theme2.getSize)(5)
|
|
221
|
+
})))));
|
|
222
|
+
};
|
|
223
|
+
var StatusBarPanel = () => {
|
|
224
|
+
const [open, setOpen] = (0, import_react3.useState)(false);
|
|
225
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Root, {
|
|
226
|
+
open,
|
|
227
|
+
onOpenChange: setOpen
|
|
228
|
+
}, /* @__PURE__ */ import_react3.default.createElement(StatusBar.Container, null, /* @__PURE__ */ import_react3.default.createElement(StatusBar.EndContent, null, /* @__PURE__ */ import_react3.default.createElement(import_app_framework.Surface, {
|
|
229
|
+
role: "status"
|
|
230
|
+
}), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Trigger, {
|
|
231
|
+
asChild: true
|
|
232
|
+
}, /* @__PURE__ */ import_react3.default.createElement(StatusBar.Button, {
|
|
233
|
+
"aria-label": "Give feedback about composer",
|
|
234
|
+
"data-joyride": "welcome/feedback"
|
|
235
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Icon, {
|
|
236
|
+
icon: "ph--paper-plane-tilt--regular",
|
|
237
|
+
size: 4
|
|
238
|
+
}), /* @__PURE__ */ import_react3.default.createElement(StatusBar.Text, {
|
|
239
|
+
classNames: "hidden sm:block"
|
|
240
|
+
}, "Feedback"))), /* @__PURE__ */ import_react3.default.createElement(StatusBar.Button, {
|
|
241
|
+
"aria-label": "Open DXOS Discord",
|
|
242
|
+
asChild: true
|
|
243
|
+
}, /* @__PURE__ */ import_react3.default.createElement("a", {
|
|
244
|
+
href: "https://dxos.org/discord",
|
|
245
|
+
target: "_blank",
|
|
246
|
+
rel: "noopener noreferrer"
|
|
247
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Icon, {
|
|
248
|
+
icon: "ph--discord-logo--regular",
|
|
249
|
+
size: 4
|
|
250
|
+
}), /* @__PURE__ */ import_react3.default.createElement(StatusBar.Text, {
|
|
251
|
+
classNames: "hidden sm:block"
|
|
252
|
+
}, "Discord"))))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Content, {
|
|
253
|
+
classNames: "shadow-lg"
|
|
254
|
+
}, /* @__PURE__ */ import_react3.default.createElement(FeedbackForm, {
|
|
255
|
+
onClose: () => setOpen(false)
|
|
256
|
+
}), /* @__PURE__ */ import_react3.default.createElement(import_react_ui.Popover.Arrow, null)));
|
|
257
|
+
};
|
|
258
|
+
var StatusBarPlugin = () => {
|
|
259
|
+
return {
|
|
260
|
+
meta: import_chunk_OGG3PMIV.meta_default,
|
|
261
|
+
provides: {
|
|
262
|
+
translations: translations_default,
|
|
263
|
+
surface: {
|
|
264
|
+
component: ({ role }) => {
|
|
265
|
+
switch (role) {
|
|
266
|
+
case "status-bar": {
|
|
267
|
+
return /* @__PURE__ */ import_react.default.createElement(StatusBarPanel, null);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
};
|
|
276
|
+
var src_default = StatusBarPlugin;
|
|
277
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
278
|
+
0 && (module.exports = {
|
|
279
|
+
StatusBar,
|
|
280
|
+
StatusBarPanel,
|
|
281
|
+
StatusBarPlugin
|
|
282
|
+
});
|
|
283
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/StatusBarPlugin.tsx", "../../../src/components/StatusBar.tsx", "../../../src/components/StatusBarPanel.tsx", "../../../src/components/FeedbackForm.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type PluginDefinition, type SurfaceProvides, type TranslationsProvides } from '@dxos/app-framework';\n\nimport { StatusBarPanel } from './components';\nimport meta from './meta';\nimport translations from './translations';\n\nexport type StatusBarPluginProvides = SurfaceProvides & TranslationsProvides;\n\nexport const StatusBarPlugin = (): PluginDefinition<StatusBarPluginProvides> => {\n return {\n meta,\n provides: {\n translations,\n surface: {\n component: ({ role }) => {\n switch (role) {\n case 'status-bar': {\n return <StatusBarPanel />;\n }\n }\n\n return null;\n },\n },\n },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\ntype StatusBarTextProps = ThemedClassName<{ children: ReactNode }>;\n\nconst StatusBarText = forwardRef<HTMLSpanElement, StatusBarTextProps>(({ classNames, children }, forwardedRef) => (\n <span className={mx(classNames)} ref={forwardedRef}>\n {children}\n </span>\n));\n\ntype StatusBarButtonProps = ThemedClassName<{ children: ReactNode; asChild?: boolean }> &\n HTMLAttributes<HTMLButtonElement>;\n\nconst StatusBarButton = forwardRef<HTMLButtonElement, StatusBarButtonProps>(\n ({ classNames, children, asChild, ...props }, forwardedRef) => {\n const classes = mx(\n 'flex items-center gap-2 p-1 px-2 rounded-sm',\n 'select-none cursor-pointer ch-focus-ring',\n 'hover:bg-neutral-75 active:bg-neutral-150 dark:hover:bg-neutral-750 dark:active:bg-neutral-700',\n classNames,\n );\n\n return asChild ? (\n <Slot role='button' ref={forwardedRef} className={classes} {...props}>\n {children}\n </Slot>\n ) : (\n <button className={classes} ref={forwardedRef} {...props}>\n {children}\n </button>\n );\n },\n);\n\nexport default StatusBarButton;\n\ntype StatusBarItemProps = ThemedClassName<{ children: ReactNode }> & HTMLAttributes<HTMLDivElement>;\n\nconst StatusBarItem = forwardRef<HTMLDivElement, StatusBarItemProps>(\n ({ classNames, children, ...props }, forwardedRef) => (\n <div\n role='menuitem'\n className={mx('flex items-center gap-2 p-1 px-2 rounded-sm select-none', classNames)}\n ref={forwardedRef}\n {...props}\n >\n {children}\n </div>\n ),\n);\n\ntype StatusBarContainerProps = ThemedClassName<{ children: ReactNode }>;\n\n// TODO(zan): tabable group with tabster.\nconst StatusBarContainer = forwardRef<HTMLDivElement, StatusBarContainerProps>(\n ({ classNames, children }, forwardedRef) => {\n const groupAttrs = useFocusableGroup({ tabBehavior: 'limited' });\n return (\n <div\n role='menubar'\n tabIndex={0}\n {...groupAttrs}\n className={mx(\n 'bs-[--statusbar-size] flex justify-end items-center gap-2 bg-base text-description text-lg pointer-fine:text-xs ch-focus-ring-inset',\n classNames,\n )}\n ref={forwardedRef}\n >\n {children}\n </div>\n );\n },\n);\n\ntype StartContentProps = ThemedClassName<{ children: ReactNode }>;\n\nconst StartContent = forwardRef<HTMLDivElement, StartContentProps>(({ classNames, children }, forwardedRef) => (\n <div role='none' className={mx('flex-grow flex items-center space-x-2', classNames)} ref={forwardedRef}>\n {children}\n </div>\n));\n\ntype EndContentProps = ThemedClassName<{ children: ReactNode }>;\n\nconst EndContent = forwardRef<HTMLDivElement, EndContentProps>(({ classNames, children }, forwardedRef) => (\n <div role='none' className={mx('flex-grow flex items-center justify-end', classNames)} ref={forwardedRef}>\n {children}\n </div>\n));\n\nexport const StatusBar = {\n Container: StatusBarContainer,\n Text: StatusBarText,\n Item: StatusBarItem,\n Button: StatusBarButton,\n StartContent,\n EndContent,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { Icon, Popover } from '@dxos/react-ui';\n\nimport { FeedbackForm } from './FeedbackForm';\nimport { StatusBar } from './StatusBar';\n\nexport const StatusBarPanel = () => {\n const [open, setOpen] = useState(false);\n\n // TODO(wittjosiah): Factor out feedback and discord buttons.\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <StatusBar.Container>\n <StatusBar.EndContent>\n <Surface role='status' />\n <Popover.Trigger asChild>\n <StatusBar.Button aria-label='Give feedback about composer' data-joyride='welcome/feedback'>\n <Icon icon='ph--paper-plane-tilt--regular' size={4} />\n <StatusBar.Text classNames='hidden sm:block'>Feedback</StatusBar.Text>\n </StatusBar.Button>\n </Popover.Trigger>\n {/* TODO(zan): Configure this label? */}\n <StatusBar.Button aria-label='Open DXOS Discord' asChild>\n <a href='https://dxos.org/discord' target='_blank' rel='noopener noreferrer'>\n <Icon icon='ph--discord-logo--regular' size={4} />\n <StatusBar.Text classNames='hidden sm:block'>Discord</StatusBar.Text>\n </a>\n </StatusBar.Button>\n </StatusBar.EndContent>\n </StatusBar.Container>\n <Popover.Content classNames='shadow-lg'>\n <FeedbackForm onClose={() => setOpen(false)} />\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema as S } from '@effect/schema';\nimport { PaperPlaneTilt, X } from '@phosphor-icons/react';\nimport React, { useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\nimport { useForm } from '@dxos/react-ui-form';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { STATUS_BAR_PLUGIN } from '../meta';\nimport { mkTranslation } from '../translations';\n\nconst Email = S.String.pipe(\n S.nonEmptyString({ message: () => 'Email is required.' }),\n S.pattern(/^(?!\\.)(?!.*\\.\\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\\.)+[A-Z]{2,}$/i, {\n message: () => 'Invalid email address.',\n }),\n);\n\nconst nonEmpty = (field: string) => S.nonEmptyString({ message: () => `${field} is required.` });\nconst maxLength = (field: string, length: number) => S.maxLength(length, { message: () => `${field} is too long.` });\n\n// Types and validation.\nconst FeedbackFormSchema = S.Struct({\n name: S.String.pipe(nonEmpty('Name'), maxLength('Name', 256)),\n email: Email.pipe(maxLength('Email', 256)),\n message: S.String.pipe(nonEmpty('Feedback'), maxLength('Feedback', 32_768)),\n});\n\ntype FeedbackFormType = S.Schema.Type<typeof FeedbackFormSchema>;\n\nconst initialValues: FeedbackFormType = { name: '', email: '', message: '' };\n\nexport const FeedbackForm = ({ onClose }: { onClose: () => void }) => {\n const { t } = useTranslation(STATUS_BAR_PLUGIN);\n const translation = mkTranslation(t);\n const dispatch = useIntentDispatcher();\n\n const onSubmit = useCallback(\n (values: FeedbackFormType) => {\n void dispatch({ action: 'dxos.org/plugin/observability/capture-feedback', data: values });\n onClose();\n },\n [dispatch, onClose],\n );\n\n const { handleSubmit, canSubmit, getStatus, ...inputProps } = useForm<FeedbackFormType>({\n initialValues,\n schema: FeedbackFormSchema,\n onSubmit,\n });\n\n return (\n <div role='form' className='p-3 flex flex-col gap-2'>\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('name').status}>\n <Input.Label>{translation('name label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('name placeholder')}\n autoFocus\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('name').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('email').status}>\n <Input.Label>{translation('email input label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('email input placeholder')}\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('email').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('message').status}>\n <Input.Label>{translation('feedback text area label')}</Input.Label>\n <Input.TextArea\n classNames={'text-sm'}\n rows={5}\n cols={30}\n placeholder={translation('feedback text area placeholder')}\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('message').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-2'>\n <Button\n type='submit'\n variant='primary'\n classNames='is-full flex gap-2'\n disabled={!canSubmit}\n onClick={handleSubmit}\n >\n <span>{translation('send feedback label')}</span>\n <div className='grow' />\n <PaperPlaneTilt className={getSize(5)} />\n </Button>\n <Popover.Close asChild>\n <Button classNames='is-full flex gap-2'>\n <span>{t('cancel label', { ns: 'os' })}</span>\n <div className='grow' />\n <X className={getSize(5)} />\n </Button>\n </Popover.Close>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type useTranslation } from '@dxos/react-ui';\n\nimport { STATUS_BAR_PLUGIN } from './meta';\n\ntype StatusBarTranslationKeys =\n | 'plugin name'\n | 'email input label'\n | 'email input placeholder'\n | 'feedback text area label'\n | 'feedback text area placeholder'\n | 'send feedback label'\n | 'name label'\n | 'name placeholder';\n\ntype RequiredTranslation = { [key in StatusBarTranslationKeys]: string };\ntype TranslationEntry = { [STATUS_BAR_PLUGIN]: RequiredTranslation };\ntype Language = string;\n\n// -- helpers.\nconst entry = (translation: RequiredTranslation): TranslationEntry => ({ [STATUS_BAR_PLUGIN]: translation });\nexport const mkTranslation = (t: ReturnType<typeof useTranslation>['t']) => (key: StatusBarTranslationKeys) => t(key);\n\nconst translations: Record<Language, TranslationEntry> = {\n 'en-US': entry({\n 'plugin name': 'Status Bar',\n 'name label': 'Name',\n 'name placeholder': 'Preferred name',\n 'email input label': 'Email',\n 'email input placeholder': 'hello@example.com',\n 'feedback text area label': 'Feedback',\n 'feedback text area placeholder': 'Found a bug? Have a suggestion? Let us know!',\n 'send feedback label': 'Send Feedback',\n }),\n};\n\nexport default [translations];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { StatusBarPlugin } from './StatusBarPlugin';\n\nexport default StatusBarPlugin;\n\nexport * from './StatusBarPlugin';\nexport * from './components';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_app_framework", "import_react_ui", "import_react_ui_theme", "StatusBarText", "forwardRef", "classNames", "children", "forwardedRef", "React", "span", "className", "mx", "ref", "StatusBarButton", "asChild", "props", "classes", "Slot", "role", "button", "StatusBarItem", "div", "StatusBarContainer", "groupAttrs", "useFocusableGroup", "tabBehavior", "tabIndex", "StartContent", "EndContent", "StatusBar", "Container", "Text", "Item", "Button", "entry", "translation", "STATUS_BAR_PLUGIN", "mkTranslation", "t", "key", "translations", "Email", "S", "String", "pipe", "nonEmptyString", "message", "pattern", "nonEmpty", "field", "maxLength", "length", "FeedbackFormSchema", "Struct", "name", "email", "initialValues", "FeedbackForm", "onClose", "useTranslation", "dispatch", "useIntentDispatcher", "onSubmit", "useCallback", "values", "action", "data", "handleSubmit", "canSubmit", "getStatus", "inputProps", "useForm", "schema", "Input", "Root", "validationValence", "status", "Label", "TextInput", "placeholder", "autoFocus", "DescriptionAndValidation", "Validation", "error", "TextArea", "rows", "cols", "type", "variant", "disabled", "onClick", "PaperPlaneTilt", "getSize", "Popover", "Close", "ns", "X", "StatusBarPanel", "open", "setOpen", "useState", "onOpenChange", "Surface", "Trigger", "aria-label", "data-joyride", "Icon", "icon", "size", "a", "href", "target", "rel", "Content", "Arrow", "StatusBarPlugin", "meta", "provides", "surface", "component"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var meta_exports = {};
|
|
20
|
+
__export(meta_exports, {
|
|
21
|
+
STATUS_BAR_PLUGIN: () => import_chunk_OGG3PMIV.STATUS_BAR_PLUGIN,
|
|
22
|
+
default: () => import_chunk_OGG3PMIV.meta_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(meta_exports);
|
|
25
|
+
var import_chunk_OGG3PMIV = require("./chunk-OGG3PMIV.cjs");
|
|
26
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
27
|
+
0 && (module.exports = {
|
|
28
|
+
STATUS_BAR_PLUGIN
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=meta.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["meta.cjs"],
|
|
4
|
+
"sourcesContent": ["import {\n STATUS_BAR_PLUGIN,\n meta_default\n} from \"./chunk-OGG3PMIV.cjs\";\nexport {\n STATUS_BAR_PLUGIN,\n meta_default as default\n};\n//# sourceMappingURL=meta.cjs.map\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAGO;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx":{"bytes":9929,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-status-bar/src/meta.ts":{"bytes":1252,"imports":[],"format":"esm"},"packages/plugins/plugin-status-bar/src/translations.ts":{"bytes":3385,"imports":[{"path":"packages/plugins/plugin-status-bar/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx":{"bytes":16012,"imports":[{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-status-bar/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx":{"bytes":6010,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx","kind":"import-statement","original":"./FeedbackForm"},{"path":"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx","kind":"import-statement","original":"./StatusBar"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/index.ts":{"bytes":624,"imports":[{"path":"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx","kind":"import-statement","original":"./StatusBar"},{"path":"packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx","kind":"import-statement","original":"./StatusBarPanel"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx":{"bytes":2663,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-status-bar/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-status-bar/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/index.ts":{"bytes":916,"imports":[{"path":"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx","kind":"import-statement","original":"./StatusBarPlugin"},{"path":"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx","kind":"import-statement","original":"./StatusBarPlugin"},{"path":"packages/plugins/plugin-status-bar/src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-status-bar/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":20104},"packages/plugins/plugin-status-bar/dist/lib/node/index.cjs":{"imports":[{"path":"packages/plugins/plugin-status-bar/dist/lib/node/chunk-OGG3PMIV.cjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["StatusBar","StatusBarPanel","StatusBarPlugin","default"],"entryPoint":"packages/plugins/plugin-status-bar/src/index.ts","inputs":{"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx":{"bytesInOutput":424},"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx":{"bytesInOutput":2478},"packages/plugins/plugin-status-bar/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx":{"bytesInOutput":1692},"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx":{"bytesInOutput":4592},"packages/plugins/plugin-status-bar/src/translations.ts":{"bytesInOutput":570},"packages/plugins/plugin-status-bar/src/index.ts":{"bytesInOutput":35}},"bytes":10582},"packages/plugins/plugin-status-bar/dist/lib/node/meta.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-status-bar/dist/lib/node/meta.cjs":{"imports":[{"path":"packages/plugins/plugin-status-bar/dist/lib/node/chunk-OGG3PMIV.cjs","kind":"import-statement"}],"exports":["STATUS_BAR_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-status-bar/src/meta.ts","inputs":{},"bytes":169},"packages/plugins/plugin-status-bar/dist/lib/node/chunk-OGG3PMIV.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":600},"packages/plugins/plugin-status-bar/dist/lib/node/chunk-OGG3PMIV.cjs":{"imports":[],"exports":["STATUS_BAR_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-status-bar/src/meta.ts":{"bytesInOutput":210}},"bytes":353}}}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// packages/plugins/plugin-status-bar/src/meta.ts
|
|
4
|
+
var STATUS_BAR_PLUGIN = "dxos.org/plugin/status-bar";
|
|
5
|
+
var meta_default = {
|
|
6
|
+
id: STATUS_BAR_PLUGIN,
|
|
7
|
+
name: "Status Bar",
|
|
8
|
+
description: "Display a bar with status and actions.",
|
|
9
|
+
icon: "ph--info--regular"
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
STATUS_BAR_PLUGIN,
|
|
14
|
+
meta_default
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chunk-UVUSU6KS.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const STATUS_BAR_PLUGIN = 'dxos.org/plugin/status-bar';\n\nexport default {\n id: STATUS_BAR_PLUGIN,\n name: 'Status Bar',\n description: 'Display a bar with status and actions.',\n icon: 'ph--info--regular',\n} satisfies PluginMeta;\n"],
|
|
5
|
+
"mappings": ";;;AAMO,IAAMA,oBAAoB;AAEjC,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;AACR;",
|
|
6
|
+
"names": ["STATUS_BAR_PLUGIN", "id", "name", "description", "icon"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
STATUS_BAR_PLUGIN,
|
|
4
|
+
meta_default
|
|
5
|
+
} from "./chunk-UVUSU6KS.mjs";
|
|
6
|
+
|
|
7
|
+
// packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx
|
|
8
|
+
import React4 from "react";
|
|
9
|
+
|
|
10
|
+
// packages/plugins/plugin-status-bar/src/components/StatusBar.tsx
|
|
11
|
+
import { useFocusableGroup } from "@fluentui/react-tabster";
|
|
12
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
13
|
+
import React, { forwardRef } from "react";
|
|
14
|
+
import { mx } from "@dxos/react-ui-theme";
|
|
15
|
+
var StatusBarText = /* @__PURE__ */ forwardRef(({ classNames, children }, forwardedRef) => /* @__PURE__ */ React.createElement("span", {
|
|
16
|
+
className: mx(classNames),
|
|
17
|
+
ref: forwardedRef
|
|
18
|
+
}, children));
|
|
19
|
+
var StatusBarButton = /* @__PURE__ */ forwardRef(({ classNames, children, asChild, ...props }, forwardedRef) => {
|
|
20
|
+
const classes = mx("flex items-center gap-2 p-1 px-2 rounded-sm", "select-none cursor-pointer ch-focus-ring", "hover:bg-neutral-75 active:bg-neutral-150 dark:hover:bg-neutral-750 dark:active:bg-neutral-700", classNames);
|
|
21
|
+
return asChild ? /* @__PURE__ */ React.createElement(Slot, {
|
|
22
|
+
role: "button",
|
|
23
|
+
ref: forwardedRef,
|
|
24
|
+
className: classes,
|
|
25
|
+
...props
|
|
26
|
+
}, children) : /* @__PURE__ */ React.createElement("button", {
|
|
27
|
+
className: classes,
|
|
28
|
+
ref: forwardedRef,
|
|
29
|
+
...props
|
|
30
|
+
}, children);
|
|
31
|
+
});
|
|
32
|
+
var StatusBarItem = /* @__PURE__ */ forwardRef(({ classNames, children, ...props }, forwardedRef) => /* @__PURE__ */ React.createElement("div", {
|
|
33
|
+
role: "menuitem",
|
|
34
|
+
className: mx("flex items-center gap-2 p-1 px-2 rounded-sm select-none", classNames),
|
|
35
|
+
ref: forwardedRef,
|
|
36
|
+
...props
|
|
37
|
+
}, children));
|
|
38
|
+
var StatusBarContainer = /* @__PURE__ */ forwardRef(({ classNames, children }, forwardedRef) => {
|
|
39
|
+
const groupAttrs = useFocusableGroup({
|
|
40
|
+
tabBehavior: "limited"
|
|
41
|
+
});
|
|
42
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
43
|
+
role: "menubar",
|
|
44
|
+
tabIndex: 0,
|
|
45
|
+
...groupAttrs,
|
|
46
|
+
className: mx("bs-[--statusbar-size] flex justify-end items-center gap-2 bg-base text-description text-lg pointer-fine:text-xs ch-focus-ring-inset", classNames),
|
|
47
|
+
ref: forwardedRef
|
|
48
|
+
}, children);
|
|
49
|
+
});
|
|
50
|
+
var StartContent = /* @__PURE__ */ forwardRef(({ classNames, children }, forwardedRef) => /* @__PURE__ */ React.createElement("div", {
|
|
51
|
+
role: "none",
|
|
52
|
+
className: mx("flex-grow flex items-center space-x-2", classNames),
|
|
53
|
+
ref: forwardedRef
|
|
54
|
+
}, children));
|
|
55
|
+
var EndContent = /* @__PURE__ */ forwardRef(({ classNames, children }, forwardedRef) => /* @__PURE__ */ React.createElement("div", {
|
|
56
|
+
role: "none",
|
|
57
|
+
className: mx("flex-grow flex items-center justify-end", classNames),
|
|
58
|
+
ref: forwardedRef
|
|
59
|
+
}, children));
|
|
60
|
+
var StatusBar = {
|
|
61
|
+
Container: StatusBarContainer,
|
|
62
|
+
Text: StatusBarText,
|
|
63
|
+
Item: StatusBarItem,
|
|
64
|
+
Button: StatusBarButton,
|
|
65
|
+
StartContent,
|
|
66
|
+
EndContent
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx
|
|
70
|
+
import React3, { useState } from "react";
|
|
71
|
+
import { Surface } from "@dxos/app-framework";
|
|
72
|
+
import { Icon, Popover as Popover2 } from "@dxos/react-ui";
|
|
73
|
+
|
|
74
|
+
// packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx
|
|
75
|
+
import { Schema as S } from "@effect/schema";
|
|
76
|
+
import { PaperPlaneTilt, X } from "@phosphor-icons/react";
|
|
77
|
+
import React2, { useCallback } from "react";
|
|
78
|
+
import { useIntentDispatcher } from "@dxos/app-framework";
|
|
79
|
+
import { Button, Input, Popover, useTranslation } from "@dxos/react-ui";
|
|
80
|
+
import { useForm } from "@dxos/react-ui-form";
|
|
81
|
+
import { getSize } from "@dxos/react-ui-theme";
|
|
82
|
+
|
|
83
|
+
// packages/plugins/plugin-status-bar/src/translations.ts
|
|
84
|
+
var entry = (translation) => ({
|
|
85
|
+
[STATUS_BAR_PLUGIN]: translation
|
|
86
|
+
});
|
|
87
|
+
var mkTranslation = (t) => (key) => t(key);
|
|
88
|
+
var translations = {
|
|
89
|
+
"en-US": entry({
|
|
90
|
+
"plugin name": "Status Bar",
|
|
91
|
+
"name label": "Name",
|
|
92
|
+
"name placeholder": "Preferred name",
|
|
93
|
+
"email input label": "Email",
|
|
94
|
+
"email input placeholder": "hello@example.com",
|
|
95
|
+
"feedback text area label": "Feedback",
|
|
96
|
+
"feedback text area placeholder": "Found a bug? Have a suggestion? Let us know!",
|
|
97
|
+
"send feedback label": "Send Feedback"
|
|
98
|
+
})
|
|
99
|
+
};
|
|
100
|
+
var translations_default = [
|
|
101
|
+
translations
|
|
102
|
+
];
|
|
103
|
+
|
|
104
|
+
// packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx
|
|
105
|
+
var Email = S.String.pipe(S.nonEmptyString({
|
|
106
|
+
message: () => "Email is required."
|
|
107
|
+
}), S.pattern(/^(?!\.)(?!.*\.\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\.)+[A-Z]{2,}$/i, {
|
|
108
|
+
message: () => "Invalid email address."
|
|
109
|
+
}));
|
|
110
|
+
var nonEmpty = (field) => S.nonEmptyString({
|
|
111
|
+
message: () => `${field} is required.`
|
|
112
|
+
});
|
|
113
|
+
var maxLength = (field, length) => S.maxLength(length, {
|
|
114
|
+
message: () => `${field} is too long.`
|
|
115
|
+
});
|
|
116
|
+
var FeedbackFormSchema = S.Struct({
|
|
117
|
+
name: S.String.pipe(nonEmpty("Name"), maxLength("Name", 256)),
|
|
118
|
+
email: Email.pipe(maxLength("Email", 256)),
|
|
119
|
+
message: S.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
|
|
120
|
+
});
|
|
121
|
+
var initialValues = {
|
|
122
|
+
name: "",
|
|
123
|
+
email: "",
|
|
124
|
+
message: ""
|
|
125
|
+
};
|
|
126
|
+
var FeedbackForm = ({ onClose }) => {
|
|
127
|
+
const { t } = useTranslation(STATUS_BAR_PLUGIN);
|
|
128
|
+
const translation = mkTranslation(t);
|
|
129
|
+
const dispatch = useIntentDispatcher();
|
|
130
|
+
const onSubmit = useCallback((values) => {
|
|
131
|
+
void dispatch({
|
|
132
|
+
action: "dxos.org/plugin/observability/capture-feedback",
|
|
133
|
+
data: values
|
|
134
|
+
});
|
|
135
|
+
onClose();
|
|
136
|
+
}, [
|
|
137
|
+
dispatch,
|
|
138
|
+
onClose
|
|
139
|
+
]);
|
|
140
|
+
const { handleSubmit, canSubmit, getStatus, ...inputProps } = useForm({
|
|
141
|
+
initialValues,
|
|
142
|
+
schema: FeedbackFormSchema,
|
|
143
|
+
onSubmit
|
|
144
|
+
});
|
|
145
|
+
return /* @__PURE__ */ React2.createElement("div", {
|
|
146
|
+
role: "form",
|
|
147
|
+
className: "p-3 flex flex-col gap-2"
|
|
148
|
+
}, /* @__PURE__ */ React2.createElement("div", {
|
|
149
|
+
role: "none",
|
|
150
|
+
className: "space-b-1"
|
|
151
|
+
}, /* @__PURE__ */ React2.createElement(Input.Root, {
|
|
152
|
+
validationValence: getStatus("name").status
|
|
153
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("name label")), /* @__PURE__ */ React2.createElement(Input.TextInput, {
|
|
154
|
+
classNames: "text-sm",
|
|
155
|
+
placeholder: translation("name placeholder"),
|
|
156
|
+
autoFocus: true,
|
|
157
|
+
...inputProps
|
|
158
|
+
}), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, getStatus("name").error)))), /* @__PURE__ */ React2.createElement("div", {
|
|
159
|
+
role: "none",
|
|
160
|
+
className: "space-b-1"
|
|
161
|
+
}, /* @__PURE__ */ React2.createElement(Input.Root, {
|
|
162
|
+
validationValence: getStatus("email").status
|
|
163
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("email input label")), /* @__PURE__ */ React2.createElement(Input.TextInput, {
|
|
164
|
+
classNames: "text-sm",
|
|
165
|
+
placeholder: translation("email input placeholder"),
|
|
166
|
+
...inputProps
|
|
167
|
+
}), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, getStatus("email").error)))), /* @__PURE__ */ React2.createElement("div", {
|
|
168
|
+
role: "none",
|
|
169
|
+
className: "space-b-1"
|
|
170
|
+
}, /* @__PURE__ */ React2.createElement(Input.Root, {
|
|
171
|
+
validationValence: getStatus("message").status
|
|
172
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("feedback text area label")), /* @__PURE__ */ React2.createElement(Input.TextArea, {
|
|
173
|
+
classNames: "text-sm",
|
|
174
|
+
rows: 5,
|
|
175
|
+
cols: 30,
|
|
176
|
+
placeholder: translation("feedback text area placeholder"),
|
|
177
|
+
...inputProps
|
|
178
|
+
}), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, getStatus("message").error)))), /* @__PURE__ */ React2.createElement("div", {
|
|
179
|
+
role: "none",
|
|
180
|
+
className: "space-b-2"
|
|
181
|
+
}, /* @__PURE__ */ React2.createElement(Button, {
|
|
182
|
+
type: "submit",
|
|
183
|
+
variant: "primary",
|
|
184
|
+
classNames: "is-full flex gap-2",
|
|
185
|
+
disabled: !canSubmit,
|
|
186
|
+
onClick: handleSubmit
|
|
187
|
+
}, /* @__PURE__ */ React2.createElement("span", null, translation("send feedback label")), /* @__PURE__ */ React2.createElement("div", {
|
|
188
|
+
className: "grow"
|
|
189
|
+
}), /* @__PURE__ */ React2.createElement(PaperPlaneTilt, {
|
|
190
|
+
className: getSize(5)
|
|
191
|
+
})), /* @__PURE__ */ React2.createElement(Popover.Close, {
|
|
192
|
+
asChild: true
|
|
193
|
+
}, /* @__PURE__ */ React2.createElement(Button, {
|
|
194
|
+
classNames: "is-full flex gap-2"
|
|
195
|
+
}, /* @__PURE__ */ React2.createElement("span", null, t("cancel label", {
|
|
196
|
+
ns: "os"
|
|
197
|
+
})), /* @__PURE__ */ React2.createElement("div", {
|
|
198
|
+
className: "grow"
|
|
199
|
+
}), /* @__PURE__ */ React2.createElement(X, {
|
|
200
|
+
className: getSize(5)
|
|
201
|
+
})))));
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx
|
|
205
|
+
var StatusBarPanel = () => {
|
|
206
|
+
const [open, setOpen] = useState(false);
|
|
207
|
+
return /* @__PURE__ */ React3.createElement(Popover2.Root, {
|
|
208
|
+
open,
|
|
209
|
+
onOpenChange: setOpen
|
|
210
|
+
}, /* @__PURE__ */ React3.createElement(StatusBar.Container, null, /* @__PURE__ */ React3.createElement(StatusBar.EndContent, null, /* @__PURE__ */ React3.createElement(Surface, {
|
|
211
|
+
role: "status"
|
|
212
|
+
}), /* @__PURE__ */ React3.createElement(Popover2.Trigger, {
|
|
213
|
+
asChild: true
|
|
214
|
+
}, /* @__PURE__ */ React3.createElement(StatusBar.Button, {
|
|
215
|
+
"aria-label": "Give feedback about composer",
|
|
216
|
+
"data-joyride": "welcome/feedback"
|
|
217
|
+
}, /* @__PURE__ */ React3.createElement(Icon, {
|
|
218
|
+
icon: "ph--paper-plane-tilt--regular",
|
|
219
|
+
size: 4
|
|
220
|
+
}), /* @__PURE__ */ React3.createElement(StatusBar.Text, {
|
|
221
|
+
classNames: "hidden sm:block"
|
|
222
|
+
}, "Feedback"))), /* @__PURE__ */ React3.createElement(StatusBar.Button, {
|
|
223
|
+
"aria-label": "Open DXOS Discord",
|
|
224
|
+
asChild: true
|
|
225
|
+
}, /* @__PURE__ */ React3.createElement("a", {
|
|
226
|
+
href: "https://dxos.org/discord",
|
|
227
|
+
target: "_blank",
|
|
228
|
+
rel: "noopener noreferrer"
|
|
229
|
+
}, /* @__PURE__ */ React3.createElement(Icon, {
|
|
230
|
+
icon: "ph--discord-logo--regular",
|
|
231
|
+
size: 4
|
|
232
|
+
}), /* @__PURE__ */ React3.createElement(StatusBar.Text, {
|
|
233
|
+
classNames: "hidden sm:block"
|
|
234
|
+
}, "Discord"))))), /* @__PURE__ */ React3.createElement(Popover2.Content, {
|
|
235
|
+
classNames: "shadow-lg"
|
|
236
|
+
}, /* @__PURE__ */ React3.createElement(FeedbackForm, {
|
|
237
|
+
onClose: () => setOpen(false)
|
|
238
|
+
}), /* @__PURE__ */ React3.createElement(Popover2.Arrow, null)));
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
// packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx
|
|
242
|
+
var StatusBarPlugin = () => {
|
|
243
|
+
return {
|
|
244
|
+
meta: meta_default,
|
|
245
|
+
provides: {
|
|
246
|
+
translations: translations_default,
|
|
247
|
+
surface: {
|
|
248
|
+
component: ({ role }) => {
|
|
249
|
+
switch (role) {
|
|
250
|
+
case "status-bar": {
|
|
251
|
+
return /* @__PURE__ */ React4.createElement(StatusBarPanel, null);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// packages/plugins/plugin-status-bar/src/index.ts
|
|
262
|
+
var src_default = StatusBarPlugin;
|
|
263
|
+
export {
|
|
264
|
+
StatusBar,
|
|
265
|
+
StatusBarPanel,
|
|
266
|
+
StatusBarPlugin,
|
|
267
|
+
src_default as default
|
|
268
|
+
};
|
|
269
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/StatusBarPlugin.tsx", "../../../src/components/StatusBar.tsx", "../../../src/components/StatusBarPanel.tsx", "../../../src/components/FeedbackForm.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type PluginDefinition, type SurfaceProvides, type TranslationsProvides } from '@dxos/app-framework';\n\nimport { StatusBarPanel } from './components';\nimport meta from './meta';\nimport translations from './translations';\n\nexport type StatusBarPluginProvides = SurfaceProvides & TranslationsProvides;\n\nexport const StatusBarPlugin = (): PluginDefinition<StatusBarPluginProvides> => {\n return {\n meta,\n provides: {\n translations,\n surface: {\n component: ({ role }) => {\n switch (role) {\n case 'status-bar': {\n return <StatusBarPanel />;\n }\n }\n\n return null;\n },\n },\n },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\ntype StatusBarTextProps = ThemedClassName<{ children: ReactNode }>;\n\nconst StatusBarText = forwardRef<HTMLSpanElement, StatusBarTextProps>(({ classNames, children }, forwardedRef) => (\n <span className={mx(classNames)} ref={forwardedRef}>\n {children}\n </span>\n));\n\ntype StatusBarButtonProps = ThemedClassName<{ children: ReactNode; asChild?: boolean }> &\n HTMLAttributes<HTMLButtonElement>;\n\nconst StatusBarButton = forwardRef<HTMLButtonElement, StatusBarButtonProps>(\n ({ classNames, children, asChild, ...props }, forwardedRef) => {\n const classes = mx(\n 'flex items-center gap-2 p-1 px-2 rounded-sm',\n 'select-none cursor-pointer ch-focus-ring',\n 'hover:bg-neutral-75 active:bg-neutral-150 dark:hover:bg-neutral-750 dark:active:bg-neutral-700',\n classNames,\n );\n\n return asChild ? (\n <Slot role='button' ref={forwardedRef} className={classes} {...props}>\n {children}\n </Slot>\n ) : (\n <button className={classes} ref={forwardedRef} {...props}>\n {children}\n </button>\n );\n },\n);\n\nexport default StatusBarButton;\n\ntype StatusBarItemProps = ThemedClassName<{ children: ReactNode }> & HTMLAttributes<HTMLDivElement>;\n\nconst StatusBarItem = forwardRef<HTMLDivElement, StatusBarItemProps>(\n ({ classNames, children, ...props }, forwardedRef) => (\n <div\n role='menuitem'\n className={mx('flex items-center gap-2 p-1 px-2 rounded-sm select-none', classNames)}\n ref={forwardedRef}\n {...props}\n >\n {children}\n </div>\n ),\n);\n\ntype StatusBarContainerProps = ThemedClassName<{ children: ReactNode }>;\n\n// TODO(zan): tabable group with tabster.\nconst StatusBarContainer = forwardRef<HTMLDivElement, StatusBarContainerProps>(\n ({ classNames, children }, forwardedRef) => {\n const groupAttrs = useFocusableGroup({ tabBehavior: 'limited' });\n return (\n <div\n role='menubar'\n tabIndex={0}\n {...groupAttrs}\n className={mx(\n 'bs-[--statusbar-size] flex justify-end items-center gap-2 bg-base text-description text-lg pointer-fine:text-xs ch-focus-ring-inset',\n classNames,\n )}\n ref={forwardedRef}\n >\n {children}\n </div>\n );\n },\n);\n\ntype StartContentProps = ThemedClassName<{ children: ReactNode }>;\n\nconst StartContent = forwardRef<HTMLDivElement, StartContentProps>(({ classNames, children }, forwardedRef) => (\n <div role='none' className={mx('flex-grow flex items-center space-x-2', classNames)} ref={forwardedRef}>\n {children}\n </div>\n));\n\ntype EndContentProps = ThemedClassName<{ children: ReactNode }>;\n\nconst EndContent = forwardRef<HTMLDivElement, EndContentProps>(({ classNames, children }, forwardedRef) => (\n <div role='none' className={mx('flex-grow flex items-center justify-end', classNames)} ref={forwardedRef}>\n {children}\n </div>\n));\n\nexport const StatusBar = {\n Container: StatusBarContainer,\n Text: StatusBarText,\n Item: StatusBarItem,\n Button: StatusBarButton,\n StartContent,\n EndContent,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { Icon, Popover } from '@dxos/react-ui';\n\nimport { FeedbackForm } from './FeedbackForm';\nimport { StatusBar } from './StatusBar';\n\nexport const StatusBarPanel = () => {\n const [open, setOpen] = useState(false);\n\n // TODO(wittjosiah): Factor out feedback and discord buttons.\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <StatusBar.Container>\n <StatusBar.EndContent>\n <Surface role='status' />\n <Popover.Trigger asChild>\n <StatusBar.Button aria-label='Give feedback about composer' data-joyride='welcome/feedback'>\n <Icon icon='ph--paper-plane-tilt--regular' size={4} />\n <StatusBar.Text classNames='hidden sm:block'>Feedback</StatusBar.Text>\n </StatusBar.Button>\n </Popover.Trigger>\n {/* TODO(zan): Configure this label? */}\n <StatusBar.Button aria-label='Open DXOS Discord' asChild>\n <a href='https://dxos.org/discord' target='_blank' rel='noopener noreferrer'>\n <Icon icon='ph--discord-logo--regular' size={4} />\n <StatusBar.Text classNames='hidden sm:block'>Discord</StatusBar.Text>\n </a>\n </StatusBar.Button>\n </StatusBar.EndContent>\n </StatusBar.Container>\n <Popover.Content classNames='shadow-lg'>\n <FeedbackForm onClose={() => setOpen(false)} />\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema as S } from '@effect/schema';\nimport { PaperPlaneTilt, X } from '@phosphor-icons/react';\nimport React, { useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\nimport { useForm } from '@dxos/react-ui-form';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { STATUS_BAR_PLUGIN } from '../meta';\nimport { mkTranslation } from '../translations';\n\nconst Email = S.String.pipe(\n S.nonEmptyString({ message: () => 'Email is required.' }),\n S.pattern(/^(?!\\.)(?!.*\\.\\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\\.)+[A-Z]{2,}$/i, {\n message: () => 'Invalid email address.',\n }),\n);\n\nconst nonEmpty = (field: string) => S.nonEmptyString({ message: () => `${field} is required.` });\nconst maxLength = (field: string, length: number) => S.maxLength(length, { message: () => `${field} is too long.` });\n\n// Types and validation.\nconst FeedbackFormSchema = S.Struct({\n name: S.String.pipe(nonEmpty('Name'), maxLength('Name', 256)),\n email: Email.pipe(maxLength('Email', 256)),\n message: S.String.pipe(nonEmpty('Feedback'), maxLength('Feedback', 32_768)),\n});\n\ntype FeedbackFormType = S.Schema.Type<typeof FeedbackFormSchema>;\n\nconst initialValues: FeedbackFormType = { name: '', email: '', message: '' };\n\nexport const FeedbackForm = ({ onClose }: { onClose: () => void }) => {\n const { t } = useTranslation(STATUS_BAR_PLUGIN);\n const translation = mkTranslation(t);\n const dispatch = useIntentDispatcher();\n\n const onSubmit = useCallback(\n (values: FeedbackFormType) => {\n void dispatch({ action: 'dxos.org/plugin/observability/capture-feedback', data: values });\n onClose();\n },\n [dispatch, onClose],\n );\n\n const { handleSubmit, canSubmit, getStatus, ...inputProps } = useForm<FeedbackFormType>({\n initialValues,\n schema: FeedbackFormSchema,\n onSubmit,\n });\n\n return (\n <div role='form' className='p-3 flex flex-col gap-2'>\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('name').status}>\n <Input.Label>{translation('name label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('name placeholder')}\n autoFocus\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('name').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('email').status}>\n <Input.Label>{translation('email input label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('email input placeholder')}\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('email').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('message').status}>\n <Input.Label>{translation('feedback text area label')}</Input.Label>\n <Input.TextArea\n classNames={'text-sm'}\n rows={5}\n cols={30}\n placeholder={translation('feedback text area placeholder')}\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('message').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-2'>\n <Button\n type='submit'\n variant='primary'\n classNames='is-full flex gap-2'\n disabled={!canSubmit}\n onClick={handleSubmit}\n >\n <span>{translation('send feedback label')}</span>\n <div className='grow' />\n <PaperPlaneTilt className={getSize(5)} />\n </Button>\n <Popover.Close asChild>\n <Button classNames='is-full flex gap-2'>\n <span>{t('cancel label', { ns: 'os' })}</span>\n <div className='grow' />\n <X className={getSize(5)} />\n </Button>\n </Popover.Close>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type useTranslation } from '@dxos/react-ui';\n\nimport { STATUS_BAR_PLUGIN } from './meta';\n\ntype StatusBarTranslationKeys =\n | 'plugin name'\n | 'email input label'\n | 'email input placeholder'\n | 'feedback text area label'\n | 'feedback text area placeholder'\n | 'send feedback label'\n | 'name label'\n | 'name placeholder';\n\ntype RequiredTranslation = { [key in StatusBarTranslationKeys]: string };\ntype TranslationEntry = { [STATUS_BAR_PLUGIN]: RequiredTranslation };\ntype Language = string;\n\n// -- helpers.\nconst entry = (translation: RequiredTranslation): TranslationEntry => ({ [STATUS_BAR_PLUGIN]: translation });\nexport const mkTranslation = (t: ReturnType<typeof useTranslation>['t']) => (key: StatusBarTranslationKeys) => t(key);\n\nconst translations: Record<Language, TranslationEntry> = {\n 'en-US': entry({\n 'plugin name': 'Status Bar',\n 'name label': 'Name',\n 'name placeholder': 'Preferred name',\n 'email input label': 'Email',\n 'email input placeholder': 'hello@example.com',\n 'feedback text area label': 'Feedback',\n 'feedback text area placeholder': 'Found a bug? Have a suggestion? Let us know!',\n 'send feedback label': 'Send Feedback',\n }),\n};\n\nexport default [translations];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { StatusBarPlugin } from './StatusBarPlugin';\n\nexport default StatusBarPlugin;\n\nexport * from './StatusBarPlugin';\nexport * from './components';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useFocusableGroup", "Slot", "React", "forwardRef", "mx", "StatusBarText", "forwardRef", "classNames", "children", "forwardedRef", "span", "className", "mx", "ref", "StatusBarButton", "asChild", "props", "classes", "Slot", "role", "button", "StatusBarItem", "forwardRef", "classNames", "children", "props", "forwardedRef", "div", "role", "className", "mx", "ref", "StatusBarContainer", "groupAttrs", "useFocusableGroup", "tabBehavior", "tabIndex", "StartContent", "EndContent", "StatusBar", "Container", "Text", "StatusBarText", "Item", "Button", "StatusBarButton", "React", "useState", "Surface", "Icon", "Popover", "Schema", "S", "PaperPlaneTilt", "X", "React", "useCallback", "useIntentDispatcher", "Button", "Input", "Popover", "useTranslation", "useForm", "getSize", "entry", "translation", "STATUS_BAR_PLUGIN", "mkTranslation", "t", "key", "translations", "Email", "S", "String", "pipe", "nonEmptyString", "message", "pattern", "nonEmpty", "field", "maxLength", "length", "FeedbackFormSchema", "Struct", "name", "email", "initialValues", "FeedbackForm", "onClose", "t", "useTranslation", "STATUS_BAR_PLUGIN", "translation", "mkTranslation", "dispatch", "useIntentDispatcher", "onSubmit", "useCallback", "values", "action", "data", "handleSubmit", "canSubmit", "getStatus", "inputProps", "useForm", "schema", "React", "div", "role", "className", "Input", "Root", "validationValence", "status", "Label", "TextInput", "classNames", "placeholder", "autoFocus", "DescriptionAndValidation", "Validation", "error", "TextArea", "rows", "cols", "Button", "type", "variant", "disabled", "onClick", "span", "PaperPlaneTilt", "getSize", "Popover", "Close", "asChild", "ns", "X", "StatusBarPanel", "open", "setOpen", "useState", "React", "Popover", "Root", "onOpenChange", "StatusBar", "Container", "EndContent", "Surface", "role", "Trigger", "asChild", "Button", "aria-label", "data-joyride", "Icon", "icon", "size", "Text", "classNames", "a", "href", "target", "rel", "Content", "FeedbackForm", "onClose", "Arrow", "StatusBarPlugin", "meta", "provides", "translations", "surface", "component", "role", "React", "StatusBarPanel", "StatusBarPlugin"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx":{"bytes":9929,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-status-bar/src/meta.ts":{"bytes":1252,"imports":[],"format":"esm"},"packages/plugins/plugin-status-bar/src/translations.ts":{"bytes":3385,"imports":[{"path":"packages/plugins/plugin-status-bar/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx":{"bytes":16012,"imports":[{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-status-bar/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx":{"bytes":6010,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx","kind":"import-statement","original":"./FeedbackForm"},{"path":"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx","kind":"import-statement","original":"./StatusBar"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/index.ts":{"bytes":624,"imports":[{"path":"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx","kind":"import-statement","original":"./StatusBar"},{"path":"packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx","kind":"import-statement","original":"./StatusBarPanel"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx":{"bytes":2663,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-status-bar/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-status-bar/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/index.ts":{"bytes":916,"imports":[{"path":"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx","kind":"import-statement","original":"./StatusBarPlugin"},{"path":"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx","kind":"import-statement","original":"./StatusBarPlugin"},{"path":"packages/plugins/plugin-status-bar/src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-status-bar/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":20105},"packages/plugins/plugin-status-bar/dist/lib/node-esm/index.mjs":{"imports":[{"path":"packages/plugins/plugin-status-bar/dist/lib/node-esm/chunk-UVUSU6KS.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["StatusBar","StatusBarPanel","StatusBarPlugin","default"],"entryPoint":"packages/plugins/plugin-status-bar/src/index.ts","inputs":{"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx":{"bytesInOutput":424},"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx":{"bytesInOutput":2478},"packages/plugins/plugin-status-bar/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx":{"bytesInOutput":1692},"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx":{"bytesInOutput":4592},"packages/plugins/plugin-status-bar/src/translations.ts":{"bytesInOutput":570},"packages/plugins/plugin-status-bar/src/index.ts":{"bytesInOutput":35}},"bytes":10674},"packages/plugins/plugin-status-bar/dist/lib/node-esm/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-status-bar/dist/lib/node-esm/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-status-bar/dist/lib/node-esm/chunk-UVUSU6KS.mjs","kind":"import-statement"}],"exports":["STATUS_BAR_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-status-bar/src/meta.ts","inputs":{},"bytes":261},"packages/plugins/plugin-status-bar/dist/lib/node-esm/chunk-UVUSU6KS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":602},"packages/plugins/plugin-status-bar/dist/lib/node-esm/chunk-UVUSU6KS.mjs":{"imports":[],"exports":["STATUS_BAR_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-status-bar/src/meta.ts":{"bytesInOutput":210}},"bytes":446}}}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
STATUS_BAR_PLUGIN,
|
|
4
|
+
meta_default
|
|
5
|
+
} from "./chunk-UVUSU6KS.mjs";
|
|
6
|
+
export {
|
|
7
|
+
STATUS_BAR_PLUGIN,
|
|
8
|
+
meta_default as default
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=meta.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-status-bar",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2-staging.6d26b2a",
|
|
4
4
|
"description": "Status bar plugin",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -10,11 +10,13 @@
|
|
|
10
10
|
"exports": {
|
|
11
11
|
".": {
|
|
12
12
|
"types": "./dist/types/src/index.d.ts",
|
|
13
|
-
"browser": "./dist/lib/browser/index.mjs"
|
|
13
|
+
"browser": "./dist/lib/browser/index.mjs",
|
|
14
|
+
"node": "./dist/lib/node-esm/index.mjs"
|
|
14
15
|
},
|
|
15
16
|
"./meta": {
|
|
16
17
|
"types": "./dist/types/src/meta.d.ts",
|
|
17
|
-
"browser": "./dist/lib/browser/meta.mjs"
|
|
18
|
+
"browser": "./dist/lib/browser/meta.mjs",
|
|
19
|
+
"node": "./dist/lib/node-esm/meta.mjs"
|
|
18
20
|
}
|
|
19
21
|
},
|
|
20
22
|
"types": "dist/types/src/index.d.ts",
|
|
@@ -36,11 +38,11 @@
|
|
|
36
38
|
"@radix-ui/react-slot": "^1.0.1",
|
|
37
39
|
"effect": "^3.9.2",
|
|
38
40
|
"react-resize-detector": "^11.0.1",
|
|
39
|
-
"@dxos/app-framework": "0.7.
|
|
40
|
-
"@dxos/
|
|
41
|
-
"@dxos/echo-schema": "0.7.
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
41
|
+
"@dxos/app-framework": "0.7.2-staging.6d26b2a",
|
|
42
|
+
"@dxos/async": "0.7.2-staging.6d26b2a",
|
|
43
|
+
"@dxos/echo-schema": "0.7.2-staging.6d26b2a",
|
|
44
|
+
"@dxos/react-ui-form": "0.7.2-staging.6d26b2a",
|
|
45
|
+
"@dxos/schema": "0.7.2-staging.6d26b2a"
|
|
44
46
|
},
|
|
45
47
|
"devDependencies": {
|
|
46
48
|
"@phosphor-icons/react": "^2.1.5",
|
|
@@ -49,16 +51,16 @@
|
|
|
49
51
|
"react": "~18.2.0",
|
|
50
52
|
"react-dom": "~18.2.0",
|
|
51
53
|
"vite": "5.4.7",
|
|
52
|
-
"@dxos/react-ui": "0.7.
|
|
53
|
-
"@dxos/react-ui-theme": "0.7.
|
|
54
|
-
"@dxos/storybook-utils": "0.7.
|
|
54
|
+
"@dxos/react-ui": "0.7.2-staging.6d26b2a",
|
|
55
|
+
"@dxos/react-ui-theme": "0.7.2-staging.6d26b2a",
|
|
56
|
+
"@dxos/storybook-utils": "0.7.2-staging.6d26b2a"
|
|
55
57
|
},
|
|
56
58
|
"peerDependencies": {
|
|
57
59
|
"@phosphor-icons/react": "^2.0.5",
|
|
58
60
|
"react": "~18.2.0",
|
|
59
61
|
"react-dom": "~18.2.0",
|
|
60
|
-
"@dxos/react-ui": "0.7.
|
|
61
|
-
"@dxos/react-ui-theme": "0.7.
|
|
62
|
+
"@dxos/react-ui": "0.7.2-staging.6d26b2a",
|
|
63
|
+
"@dxos/react-ui-theme": "0.7.2-staging.6d26b2a"
|
|
62
64
|
},
|
|
63
65
|
"publishConfig": {
|
|
64
66
|
"access": "public"
|