@dxos/plugin-status-bar 0.6.8-main.046e6cf
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/LICENSE +8 -0
- package/README.md +15 -0
- package/dist/lib/browser/chunk-PL5XPTPX.mjs +18 -0
- package/dist/lib/browser/chunk-PL5XPTPX.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +372 -0
- package/dist/lib/browser/index.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -0
- package/dist/lib/browser/meta.mjs +9 -0
- package/dist/lib/browser/meta.mjs.map +7 -0
- package/dist/types/src/StatusBarPlugin.d.ts +4 -0
- package/dist/types/src/StatusBarPlugin.d.ts.map +1 -0
- package/dist/types/src/components/FeedbackForm.d.ts +5 -0
- package/dist/types/src/components/FeedbackForm.d.ts.map +1 -0
- package/dist/types/src/components/StatusBar.d.ts +42 -0
- package/dist/types/src/components/StatusBar.d.ts.map +1 -0
- package/dist/types/src/components/StatusBar.stories.d.ts +50 -0
- package/dist/types/src/components/StatusBar.stories.d.ts.map +1 -0
- package/dist/types/src/components/StatusBarImpl.d.ts +3 -0
- package/dist/types/src/components/StatusBarImpl.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +3 -0
- package/dist/types/src/components/index.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +2 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useForm.d.ts +36 -0
- package/dist/types/src/hooks/useForm.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +5 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +15 -0
- package/dist/types/src/meta.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +13 -0
- package/dist/types/src/translations.d.ts.map +1 -0
- package/dist/types/src/util/index.d.ts +2 -0
- package/dist/types/src/util/index.d.ts.map +1 -0
- package/dist/types/src/util/validation.d.ts +7 -0
- package/dist/types/src/util/validation.d.ts.map +1 -0
- package/package.json +70 -0
- package/src/StatusBarPlugin.tsx +33 -0
- package/src/components/FeedbackForm.tsx +127 -0
- package/src/components/StatusBar.stories.tsx +43 -0
- package/src/components/StatusBar.tsx +110 -0
- package/src/components/StatusBarImpl.tsx +45 -0
- package/src/components/index.ts +6 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/useForm.ts +119 -0
- package/src/index.ts +10 -0
- package/src/meta.tsx +18 -0
- package/src/translations.ts +40 -0
- package/src/util/index.ts +5 -0
- package/src/util/validation.ts +22 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
Copyright (c) 2022 DXOS
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
5
|
+
|
|
6
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# @dxos/plugin-status-bar
|
|
2
|
+
|
|
3
|
+
Plugin status.
|
|
4
|
+
|
|
5
|
+
## DXOS Resources
|
|
6
|
+
|
|
7
|
+
- [Website](https://dxos.org)
|
|
8
|
+
- [Developer Documentation](https://docs.dxos.org)
|
|
9
|
+
- Talk to us on [Discord](https://dxos.org/discord)
|
|
10
|
+
|
|
11
|
+
## Contributions
|
|
12
|
+
|
|
13
|
+
Your ideas, issues, and code are most welcome. Please take a look at our [community code of conduct](https://github.com/dxos/dxos/blob/main/CODE_OF_CONDUCT.md), the [issue guide](https://github.com/dxos/dxos/blob/main/CONTRIBUTING.md#submitting-issues), and the [PR contribution guide](https://github.com/dxos/dxos/blob/main/CONTRIBUTING.md#submitting-prs).
|
|
14
|
+
|
|
15
|
+
License: [MIT](./LICENSE) Copyright 2023 © DXOS
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// packages/plugins/plugin-status-bar/src/meta.tsx
|
|
2
|
+
import { Info } from "@phosphor-icons/react";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { pluginMeta } from "@dxos/app-framework";
|
|
5
|
+
var STATUS_BAR_PLUGIN = "dxos.org/plugin/status-bar";
|
|
6
|
+
var meta_default = pluginMeta({
|
|
7
|
+
id: STATUS_BAR_PLUGIN,
|
|
8
|
+
name: "Status Bar",
|
|
9
|
+
description: "Display a bar with status and actions.",
|
|
10
|
+
iconComponent: (props) => /* @__PURE__ */ React.createElement(Info, props),
|
|
11
|
+
iconSymbol: "ph--info--regular"
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
STATUS_BAR_PLUGIN,
|
|
16
|
+
meta_default
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=chunk-PL5XPTPX.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Info, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { pluginMeta } from '@dxos/app-framework';\n\nexport const STATUS_BAR_PLUGIN = 'dxos.org/plugin/status-bar';\n\nexport default pluginMeta({\n id: STATUS_BAR_PLUGIN,\n name: 'Status Bar',\n description: 'Display a bar with status and actions.',\n iconComponent: (props: IconProps) => <Info {...props} />,\n iconSymbol: 'ph--info--regular',\n});\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,YAA4B;AACrC,OAAOC,WAAW;AAElB,SAASC,kBAAkB;AAEpB,IAAMC,oBAAoB;AAEjC,IAAA,eAAeC,WAAW;EACxBC,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,eAAe,CAACC,UAAqB,sBAAA,cAACC,MAASD,KAAAA;EAC/CE,YAAY;AACd,CAAA;",
|
|
6
|
+
"names": ["Info", "React", "pluginMeta", "STATUS_BAR_PLUGIN", "pluginMeta", "id", "name", "description", "iconComponent", "props", "Info", "iconSymbol"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import {
|
|
2
|
+
STATUS_BAR_PLUGIN,
|
|
3
|
+
meta_default
|
|
4
|
+
} from "./chunk-PL5XPTPX.mjs";
|
|
5
|
+
|
|
6
|
+
// packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx
|
|
7
|
+
import React4 from "react";
|
|
8
|
+
|
|
9
|
+
// packages/plugins/plugin-status-bar/src/components/StatusBar.tsx
|
|
10
|
+
import { useArrowNavigationGroup } from "@fluentui/react-tabster";
|
|
11
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
12
|
+
import React, { forwardRef } from "react";
|
|
13
|
+
import { mx } from "@dxos/react-ui-theme";
|
|
14
|
+
var StatusBarText = /* @__PURE__ */ forwardRef(({ classNames, children }, forwardedRef) => /* @__PURE__ */ React.createElement("span", {
|
|
15
|
+
className: mx(classNames),
|
|
16
|
+
ref: forwardedRef
|
|
17
|
+
}, children));
|
|
18
|
+
var StatusBarButton = /* @__PURE__ */ forwardRef(({ classNames, children, asChild, ...props }, forwardedRef) => {
|
|
19
|
+
const classes = mx("flex items-center gap-2 p-1 px-2 rounded-sm", "select-none cursor-pointer", "hover:bg-neutral-75 active:bg-neutral-150", "dark:hover:bg-neutral-750 dark:active:bg-neutral-700", classNames);
|
|
20
|
+
return asChild ? /* @__PURE__ */ React.createElement(Slot, {
|
|
21
|
+
role: "button",
|
|
22
|
+
ref: forwardedRef,
|
|
23
|
+
className: classes,
|
|
24
|
+
...props
|
|
25
|
+
}, children) : /* @__PURE__ */ React.createElement("button", {
|
|
26
|
+
className: classes,
|
|
27
|
+
ref: forwardedRef,
|
|
28
|
+
...props
|
|
29
|
+
}, children);
|
|
30
|
+
});
|
|
31
|
+
var StatusBarItem = /* @__PURE__ */ forwardRef(({ classNames, children, ...props }, forwardedRef) => /* @__PURE__ */ React.createElement("div", {
|
|
32
|
+
role: "menuitem",
|
|
33
|
+
className: mx("flex items-center gap-2 p-1 px-2 rounded-sm select-none", classNames),
|
|
34
|
+
ref: forwardedRef,
|
|
35
|
+
...props
|
|
36
|
+
}, children));
|
|
37
|
+
var StatusBarContainer = /* @__PURE__ */ forwardRef(({ classNames, children }, forwardedRef) => {
|
|
38
|
+
const groupAttrs = useArrowNavigationGroup({
|
|
39
|
+
axis: "horizontal"
|
|
40
|
+
});
|
|
41
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
42
|
+
...groupAttrs,
|
|
43
|
+
className: mx("bs-[--statusbar-size]", "flex justify-end items-center gap-2", "surface-base fg-description", "border-bs separator-separator", "text-lg pointer-fine:text-xs", classNames),
|
|
44
|
+
ref: forwardedRef,
|
|
45
|
+
role: "menubar"
|
|
46
|
+
}, children);
|
|
47
|
+
});
|
|
48
|
+
var StartContent = /* @__PURE__ */ forwardRef(({ classNames, children }, forwardedRef) => /* @__PURE__ */ React.createElement("div", {
|
|
49
|
+
role: "none",
|
|
50
|
+
className: mx("flex-grow flex items-center space-x-2", classNames),
|
|
51
|
+
ref: forwardedRef
|
|
52
|
+
}, children));
|
|
53
|
+
var EndContent = /* @__PURE__ */ forwardRef(({ classNames, children }, forwardedRef) => /* @__PURE__ */ React.createElement("div", {
|
|
54
|
+
role: "none",
|
|
55
|
+
className: mx("flex-grow flex items-center justify-end", classNames),
|
|
56
|
+
ref: forwardedRef
|
|
57
|
+
}, children));
|
|
58
|
+
var StatusBar = {
|
|
59
|
+
Container: StatusBarContainer,
|
|
60
|
+
Text: StatusBarText,
|
|
61
|
+
Item: StatusBarItem,
|
|
62
|
+
Button: StatusBarButton,
|
|
63
|
+
StartContent,
|
|
64
|
+
EndContent
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// packages/plugins/plugin-status-bar/src/components/StatusBarImpl.tsx
|
|
68
|
+
import { DiscordLogo, PaperPlaneTilt as PaperPlaneTilt2 } from "@phosphor-icons/react";
|
|
69
|
+
import React3, { useState as useState2 } from "react";
|
|
70
|
+
import { Surface } from "@dxos/app-framework";
|
|
71
|
+
import { Popover as Popover2 } from "@dxos/react-ui";
|
|
72
|
+
|
|
73
|
+
// packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx
|
|
74
|
+
import { X, PaperPlaneTilt } from "@phosphor-icons/react";
|
|
75
|
+
import React2, { useCallback as useCallback2 } from "react";
|
|
76
|
+
import { useIntentDispatcher } from "@dxos/app-framework";
|
|
77
|
+
import { S as S2 } from "@dxos/echo-schema";
|
|
78
|
+
import { Button, Input, Popover, useTranslation } from "@dxos/react-ui";
|
|
79
|
+
import { getSize } from "@dxos/react-ui-theme";
|
|
80
|
+
|
|
81
|
+
// packages/plugins/plugin-status-bar/src/hooks/useForm.ts
|
|
82
|
+
import { useCallback, useState } from "react";
|
|
83
|
+
var useForm = ({ initialValues: initialValues2, validate: validate2, onSubmit }) => {
|
|
84
|
+
const [values, setValues] = useState(initialValues2);
|
|
85
|
+
const [errors, setErrors] = useState({});
|
|
86
|
+
const [touched, setTouched] = useState(Object.keys(initialValues2).reduce((acc, key) => ({
|
|
87
|
+
...acc,
|
|
88
|
+
[key]: false
|
|
89
|
+
}), {}));
|
|
90
|
+
const runValidation = useCallback((values2) => {
|
|
91
|
+
const validationErrors = validate2(values2);
|
|
92
|
+
setErrors(collapseErrorArray(validationErrors ?? []));
|
|
93
|
+
return validationErrors === void 0;
|
|
94
|
+
}, [
|
|
95
|
+
validate2
|
|
96
|
+
]);
|
|
97
|
+
const handleChange = useCallback((event) => {
|
|
98
|
+
const { name, value } = event.target;
|
|
99
|
+
const newValues = {
|
|
100
|
+
...values,
|
|
101
|
+
[name]: value
|
|
102
|
+
};
|
|
103
|
+
setValues(newValues);
|
|
104
|
+
runValidation(newValues);
|
|
105
|
+
}, [
|
|
106
|
+
values,
|
|
107
|
+
runValidation
|
|
108
|
+
]);
|
|
109
|
+
const touchAll = useCallback(() => setTouched(mkAllTouched(values)), [
|
|
110
|
+
values,
|
|
111
|
+
setTouched
|
|
112
|
+
]);
|
|
113
|
+
const handleBlur = useCallback((event) => {
|
|
114
|
+
const { name } = event.target;
|
|
115
|
+
setTouched((touched2) => ({
|
|
116
|
+
...touched2,
|
|
117
|
+
[name]: true
|
|
118
|
+
}));
|
|
119
|
+
if (event.relatedTarget?.getAttribute("type") === "submit") {
|
|
120
|
+
touchAll();
|
|
121
|
+
}
|
|
122
|
+
runValidation(values);
|
|
123
|
+
}, [
|
|
124
|
+
runValidation,
|
|
125
|
+
values,
|
|
126
|
+
touchAll
|
|
127
|
+
]);
|
|
128
|
+
const handleSubmit = useCallback(() => {
|
|
129
|
+
if (runValidation(values)) {
|
|
130
|
+
onSubmit(values);
|
|
131
|
+
}
|
|
132
|
+
}, [
|
|
133
|
+
values,
|
|
134
|
+
runValidation,
|
|
135
|
+
onSubmit
|
|
136
|
+
]);
|
|
137
|
+
const canSubmit = Object.keys(values).every((key) => touched[key] === false || !errors[key]);
|
|
138
|
+
const getInputProps = useCallback((key) => ({
|
|
139
|
+
name: key,
|
|
140
|
+
value: values[key],
|
|
141
|
+
onChange: handleChange,
|
|
142
|
+
onBlur: handleBlur,
|
|
143
|
+
"aria-invalid": errors[key] !== void 0
|
|
144
|
+
}), [
|
|
145
|
+
values,
|
|
146
|
+
handleChange,
|
|
147
|
+
handleBlur,
|
|
148
|
+
errors
|
|
149
|
+
]);
|
|
150
|
+
return {
|
|
151
|
+
values,
|
|
152
|
+
handleChange,
|
|
153
|
+
handleSubmit,
|
|
154
|
+
errors,
|
|
155
|
+
canSubmit,
|
|
156
|
+
touched,
|
|
157
|
+
handleBlur,
|
|
158
|
+
onValidate: runValidation,
|
|
159
|
+
getInputProps
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
var mkAllTouched = (values) => {
|
|
163
|
+
return Object.keys(values).reduce((acc, key) => ({
|
|
164
|
+
...acc,
|
|
165
|
+
[key]: true
|
|
166
|
+
}), {});
|
|
167
|
+
};
|
|
168
|
+
var collapseErrorArray = (errors) => errors.reduce((acc, { path, message }) => {
|
|
169
|
+
acc[path] = message;
|
|
170
|
+
return acc;
|
|
171
|
+
}, {});
|
|
172
|
+
|
|
173
|
+
// packages/plugins/plugin-status-bar/src/translations.ts
|
|
174
|
+
var entry = (translation) => ({
|
|
175
|
+
[STATUS_BAR_PLUGIN]: translation
|
|
176
|
+
});
|
|
177
|
+
var mkTranslation = (t) => (key) => t(key);
|
|
178
|
+
var translations = {
|
|
179
|
+
"en-US": entry({
|
|
180
|
+
"plugin name": "Status Bar",
|
|
181
|
+
"name label": "Name",
|
|
182
|
+
"name placeholder": "Preferred name",
|
|
183
|
+
"email input label": "Email",
|
|
184
|
+
"email input placeholder": "hello@example.com",
|
|
185
|
+
"feedback text area label": "Feedback",
|
|
186
|
+
"feedback text area placeholder": "Found a bug? Have a suggestion? Let us know!",
|
|
187
|
+
"send feedback label": "Send Feedback"
|
|
188
|
+
})
|
|
189
|
+
};
|
|
190
|
+
var translations_default = [
|
|
191
|
+
translations
|
|
192
|
+
];
|
|
193
|
+
|
|
194
|
+
// packages/plugins/plugin-status-bar/src/util/validation.ts
|
|
195
|
+
import { ArrayFormatter } from "@effect/schema";
|
|
196
|
+
import { Effect } from "effect";
|
|
197
|
+
import { S } from "@dxos/echo-schema";
|
|
198
|
+
var validate = (schema, data) => {
|
|
199
|
+
const validator = S.decodeUnknownEither(schema, {
|
|
200
|
+
errors: "all"
|
|
201
|
+
});
|
|
202
|
+
const result = validator(data);
|
|
203
|
+
if (result._tag === "Left") {
|
|
204
|
+
const errors = Effect.runSync(ArrayFormatter.formatError(result.left));
|
|
205
|
+
return errors.map(({ message, path }) => ({
|
|
206
|
+
message,
|
|
207
|
+
path: path.join(".")
|
|
208
|
+
}));
|
|
209
|
+
}
|
|
210
|
+
return void 0;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
// packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx
|
|
214
|
+
var Email = S2.String.pipe(S2.nonEmpty({
|
|
215
|
+
message: () => "Email is required."
|
|
216
|
+
}), S2.pattern(/^(?!\.)(?!.*\.\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\.)+[A-Z]{2,}$/i, {
|
|
217
|
+
message: () => "Invalid email address."
|
|
218
|
+
}));
|
|
219
|
+
var nonEmpty = (field) => S2.nonEmpty({
|
|
220
|
+
message: () => `${field} is required.`
|
|
221
|
+
});
|
|
222
|
+
var maxLength = (field, length) => S2.maxLength(length, {
|
|
223
|
+
message: () => `${field} is too long.`
|
|
224
|
+
});
|
|
225
|
+
var FeedbackFormSchema = S2.Struct({
|
|
226
|
+
name: S2.String.pipe(nonEmpty("Name"), maxLength("Name", 256)),
|
|
227
|
+
email: Email.pipe(maxLength("Email", 256)),
|
|
228
|
+
message: S2.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
|
|
229
|
+
});
|
|
230
|
+
var initialValues = {
|
|
231
|
+
name: "",
|
|
232
|
+
email: "",
|
|
233
|
+
message: ""
|
|
234
|
+
};
|
|
235
|
+
var FeedbackForm = ({ onClose }) => {
|
|
236
|
+
const { t } = useTranslation(STATUS_BAR_PLUGIN);
|
|
237
|
+
const translation = mkTranslation(t);
|
|
238
|
+
const dispatch = useIntentDispatcher();
|
|
239
|
+
const onSubmit = useCallback2((values) => {
|
|
240
|
+
void dispatch({
|
|
241
|
+
action: "dxos.org/plugin/observability/capture-feedback",
|
|
242
|
+
data: values
|
|
243
|
+
});
|
|
244
|
+
onClose();
|
|
245
|
+
}, [
|
|
246
|
+
dispatch,
|
|
247
|
+
onClose
|
|
248
|
+
]);
|
|
249
|
+
const { errors, handleSubmit, canSubmit, touched, getInputProps } = useForm({
|
|
250
|
+
initialValues,
|
|
251
|
+
validate: (values) => validate(FeedbackFormSchema, values),
|
|
252
|
+
onSubmit: (values) => onSubmit(values)
|
|
253
|
+
});
|
|
254
|
+
return /* @__PURE__ */ React2.createElement("div", {
|
|
255
|
+
role: "form",
|
|
256
|
+
className: "p-3 flex flex-col gap-2"
|
|
257
|
+
}, /* @__PURE__ */ React2.createElement("div", {
|
|
258
|
+
role: "none",
|
|
259
|
+
className: "space-b-1"
|
|
260
|
+
}, /* @__PURE__ */ React2.createElement(Input.Root, {
|
|
261
|
+
validationValence: touched.name && errors.name ? "error" : void 0
|
|
262
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("name label")), /* @__PURE__ */ React2.createElement(Input.TextInput, {
|
|
263
|
+
classNames: "text-sm",
|
|
264
|
+
placeholder: translation("name placeholder"),
|
|
265
|
+
autoFocus: true,
|
|
266
|
+
...getInputProps("name")
|
|
267
|
+
}), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, touched.name && errors.name)))), /* @__PURE__ */ React2.createElement("div", {
|
|
268
|
+
role: "none",
|
|
269
|
+
className: "space-b-1"
|
|
270
|
+
}, /* @__PURE__ */ React2.createElement(Input.Root, {
|
|
271
|
+
validationValence: touched.email && errors.email ? "error" : void 0
|
|
272
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("email input label")), /* @__PURE__ */ React2.createElement(Input.TextInput, {
|
|
273
|
+
classNames: "text-sm",
|
|
274
|
+
placeholder: translation("email input placeholder"),
|
|
275
|
+
...getInputProps("email")
|
|
276
|
+
}), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, touched.email && errors.email)))), /* @__PURE__ */ React2.createElement("div", {
|
|
277
|
+
role: "none",
|
|
278
|
+
className: "space-b-1"
|
|
279
|
+
}, /* @__PURE__ */ React2.createElement(Input.Root, {
|
|
280
|
+
validationValence: touched.message && errors.message ? "error" : void 0
|
|
281
|
+
}, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("feedback text area label")), /* @__PURE__ */ React2.createElement(Input.TextArea, {
|
|
282
|
+
classNames: "text-sm",
|
|
283
|
+
rows: 5,
|
|
284
|
+
cols: 30,
|
|
285
|
+
placeholder: translation("feedback text area placeholder"),
|
|
286
|
+
...getInputProps("message")
|
|
287
|
+
}), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, touched.message && errors.message)))), /* @__PURE__ */ React2.createElement("div", {
|
|
288
|
+
role: "none",
|
|
289
|
+
className: "space-b-2"
|
|
290
|
+
}, /* @__PURE__ */ React2.createElement(Button, {
|
|
291
|
+
type: "submit",
|
|
292
|
+
variant: "primary",
|
|
293
|
+
classNames: "is-full flex gap-2",
|
|
294
|
+
disabled: !canSubmit,
|
|
295
|
+
onClick: handleSubmit
|
|
296
|
+
}, /* @__PURE__ */ React2.createElement("span", null, translation("send feedback label")), /* @__PURE__ */ React2.createElement("div", {
|
|
297
|
+
className: "grow"
|
|
298
|
+
}), /* @__PURE__ */ React2.createElement(PaperPlaneTilt, {
|
|
299
|
+
className: getSize(5)
|
|
300
|
+
})), /* @__PURE__ */ React2.createElement(Popover.Close, {
|
|
301
|
+
asChild: true
|
|
302
|
+
}, /* @__PURE__ */ React2.createElement(Button, {
|
|
303
|
+
classNames: "is-full flex gap-2"
|
|
304
|
+
}, /* @__PURE__ */ React2.createElement("span", null, t("cancel label", {
|
|
305
|
+
ns: "os"
|
|
306
|
+
})), /* @__PURE__ */ React2.createElement("div", {
|
|
307
|
+
className: "grow"
|
|
308
|
+
}), /* @__PURE__ */ React2.createElement(X, {
|
|
309
|
+
className: getSize(5)
|
|
310
|
+
})))));
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
// packages/plugins/plugin-status-bar/src/components/StatusBarImpl.tsx
|
|
314
|
+
var StatusBarImpl = () => {
|
|
315
|
+
const [open, setOpen] = useState2(false);
|
|
316
|
+
return /* @__PURE__ */ React3.createElement(Popover2.Root, {
|
|
317
|
+
open,
|
|
318
|
+
onOpenChange: setOpen
|
|
319
|
+
}, /* @__PURE__ */ React3.createElement(StatusBar.Container, null, /* @__PURE__ */ React3.createElement(StatusBar.EndContent, null, /* @__PURE__ */ React3.createElement(Popover2.Trigger, {
|
|
320
|
+
asChild: true
|
|
321
|
+
}, /* @__PURE__ */ React3.createElement(StatusBar.Button, {
|
|
322
|
+
"aria-label": "Give feedback about composer",
|
|
323
|
+
"data-joyride": "welcome/feedback"
|
|
324
|
+
}, /* @__PURE__ */ React3.createElement(PaperPlaneTilt2, null), /* @__PURE__ */ React3.createElement(StatusBar.Text, {
|
|
325
|
+
classNames: "hidden sm:block"
|
|
326
|
+
}, "Feedback"))), /* @__PURE__ */ React3.createElement(StatusBar.Button, {
|
|
327
|
+
"aria-label": "Open DXOS Discord",
|
|
328
|
+
asChild: true
|
|
329
|
+
}, /* @__PURE__ */ React3.createElement("a", {
|
|
330
|
+
href: "https://discord.gg/zsxWrKjteV",
|
|
331
|
+
target: "_blank",
|
|
332
|
+
rel: "noopener noreferrer"
|
|
333
|
+
}, /* @__PURE__ */ React3.createElement(DiscordLogo, null), /* @__PURE__ */ React3.createElement(StatusBar.Text, {
|
|
334
|
+
classNames: "hidden sm:block"
|
|
335
|
+
}, "Discord")))), /* @__PURE__ */ React3.createElement(Surface, {
|
|
336
|
+
role: "status"
|
|
337
|
+
})), /* @__PURE__ */ React3.createElement(Popover2.Content, {
|
|
338
|
+
classNames: "shadow-lg"
|
|
339
|
+
}, /* @__PURE__ */ React3.createElement(FeedbackForm, {
|
|
340
|
+
onClose: () => setOpen(false)
|
|
341
|
+
}), /* @__PURE__ */ React3.createElement(Popover2.Arrow, null)));
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
// packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx
|
|
345
|
+
var StatusBarPlugin = () => {
|
|
346
|
+
return {
|
|
347
|
+
meta: meta_default,
|
|
348
|
+
provides: {
|
|
349
|
+
translations: translations_default,
|
|
350
|
+
surface: {
|
|
351
|
+
component: ({ role }) => {
|
|
352
|
+
switch (role) {
|
|
353
|
+
case "status-bar": {
|
|
354
|
+
return /* @__PURE__ */ React4.createElement(StatusBarImpl, null);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
// packages/plugins/plugin-status-bar/src/index.ts
|
|
365
|
+
var src_default = StatusBarPlugin;
|
|
366
|
+
export {
|
|
367
|
+
StatusBar,
|
|
368
|
+
StatusBarImpl,
|
|
369
|
+
StatusBarPlugin,
|
|
370
|
+
src_default as default
|
|
371
|
+
};
|
|
372
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/StatusBarPlugin.tsx", "../../../src/components/StatusBar.tsx", "../../../src/components/StatusBarImpl.tsx", "../../../src/components/FeedbackForm.tsx", "../../../src/hooks/useForm.ts", "../../../src/translations.ts", "../../../src/util/validation.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 { StatusBarImpl } 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 <StatusBarImpl />;\n }\n }\n\n return null;\n },\n },\n },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useArrowNavigationGroup } 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',\n 'hover:bg-neutral-75 active:bg-neutral-150',\n '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);\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 = useArrowNavigationGroup({ axis: 'horizontal' });\n return (\n <div\n {...groupAttrs}\n className={mx(\n 'bs-[--statusbar-size]',\n 'flex justify-end items-center gap-2',\n 'surface-base fg-description',\n 'border-bs separator-separator',\n 'text-lg pointer-fine:text-xs',\n classNames,\n )}\n ref={forwardedRef}\n role='menubar'\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 { DiscordLogo, PaperPlaneTilt } from '@phosphor-icons/react';\nimport React, { useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { Popover } from '@dxos/react-ui';\n\nimport { FeedbackForm } from './FeedbackForm';\nimport { StatusBar } from './StatusBar';\n\n// TODO(wittjosiah): Rename.\nexport const StatusBarImpl = () => {\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 <Popover.Trigger asChild>\n <StatusBar.Button aria-label='Give feedback about composer' data-joyride='welcome/feedback'>\n <PaperPlaneTilt />\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://discord.gg/zsxWrKjteV' target='_blank' rel='noopener noreferrer'>\n <DiscordLogo />\n <StatusBar.Text classNames='hidden sm:block'>Discord</StatusBar.Text>\n </a>\n </StatusBar.Button>\n </StatusBar.EndContent>\n <Surface role='status' />\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 { X, PaperPlaneTilt } from '@phosphor-icons/react';\nimport React, { useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { useForm } from '../hooks';\nimport { STATUS_BAR_PLUGIN } from '../meta';\nimport { mkTranslation } from '../translations';\nimport { validate } from '../util';\n\nconst Email = S.String.pipe(\n S.nonEmpty({ 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.nonEmpty({ 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 FeedbackFormState = S.Schema.Type<typeof FeedbackFormSchema>;\n\nconst initialValues: FeedbackFormState = { 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: FeedbackFormState) => {\n void dispatch({ action: 'dxos.org/plugin/observability/capture-feedback', data: values });\n onClose();\n },\n [dispatch, onClose],\n );\n\n const { errors, handleSubmit, canSubmit, touched, getInputProps } = useForm<FeedbackFormState>({\n initialValues,\n validate: (values) => validate(FeedbackFormSchema, values),\n onSubmit: (values) => onSubmit(values),\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={touched.name && errors.name ? 'error' : undefined}>\n <Input.Label>{translation('name label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('name placeholder')}\n autoFocus\n {...getInputProps('name')}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{touched.name && errors.name}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={touched.email && errors.email ? 'error' : undefined}>\n <Input.Label>{translation('email input label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('email input placeholder')}\n {...getInputProps('email')}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{touched.email && errors.email}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={touched.message && errors.message ? 'error' : undefined}>\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 {...getInputProps('message')}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{touched.message && errors.message}</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 2024 DXOS.org\n//\nimport { type ChangeEvent, useCallback, useState } from 'react';\n\nimport { type ValidationError } from '../util';\n\n// TODO(Zan): This module will be generally useful and we should factor it out after the\n// API crystallizes a bit more.\n\ninterface FormOptions<T> {\n initialValues: T;\n validate: (values: any) => ValidationError[] | undefined;\n onSubmit: (values: T) => void;\n}\n\n/**\n * Creates a hook for managing form state, including values, validation, and submission.\n *\n * @example\n * const { values, handleChange, handleSubmit, errors, canSubmit, getInputProps } = useForm({\n * initialValues: { name: '', email: '' },\n * validate: (values) => { yourValidationLogic(values); },\n * onSubmit: (values) => { submissionLogic(values); },\n * });\n */\nexport const useForm = <T extends object>({ initialValues, validate, onSubmit }: FormOptions<T>) => {\n const [values, setValues] = useState<T>(initialValues);\n const [errors, setErrors] = useState<Record<keyof T, string>>({} as Record<keyof T, string>);\n const [touched, setTouched] = useState<Record<keyof T, boolean>>(\n Object.keys(initialValues).reduce((acc, key) => ({ ...acc, [key]: false }), {} as Record<keyof T, boolean>),\n );\n\n const runValidation = useCallback(\n (values: T) => {\n const validationErrors = validate(values);\n setErrors(collapseErrorArray(validationErrors ?? []));\n\n return validationErrors === undefined;\n },\n [validate],\n );\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { name, value } = event.target;\n const newValues = { ...values, [name]: value };\n setValues(newValues);\n runValidation(newValues);\n },\n [values, runValidation],\n );\n\n const touchAll = useCallback(() => setTouched(mkAllTouched(values)), [values, setTouched]);\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { name } = event.target;\n setTouched((touched) => ({ ...touched, [name]: true }));\n\n // TODO(Zan): This should be configurable behavior.\n if (event.relatedTarget?.getAttribute('type') === 'submit') {\n // NOTE: We do this here instead of onSubmit, because the blur event is triggered before the submit event\n // and results in the submit button being disabled when the form is invalid.\n touchAll();\n }\n\n runValidation(values);\n },\n [runValidation, values, touchAll],\n );\n\n const handleSubmit = useCallback(() => {\n if (runValidation(values)) {\n onSubmit(values);\n }\n }, [values, runValidation, onSubmit]);\n\n // NOTE: We can submit if there is no touched field that has an error.\n // - Basically, if there's a validation message present in the form, submit should be disabled.\n const canSubmit = Object.keys(values).every((key) => touched[key as keyof T] === false || !errors[key as keyof T]);\n\n const getInputProps = useCallback(\n (key: keyof T) => ({\n name: key,\n value: values[key],\n onChange: handleChange,\n onBlur: handleBlur,\n 'aria-invalid': errors[key] !== undefined,\n }),\n [values, handleChange, handleBlur, errors],\n );\n\n return {\n values,\n handleChange,\n handleSubmit,\n errors,\n canSubmit,\n touched,\n handleBlur,\n onValidate: runValidation,\n getInputProps,\n };\n};\n\nconst mkAllTouched = <T extends Record<keyof T, any>>(values: T) => {\n return Object.keys(values).reduce((acc, key) => ({ ...acc, [key]: true }), {} as Record<keyof T, boolean>);\n};\n\nconst collapseErrorArray = <T>(errors: ValidationError[]) =>\n errors.reduce(\n (acc, { path, message }) => {\n // TODO(Zan): This won't play well with nesting.\n acc[path as keyof T] = message;\n return acc;\n },\n {} as Record<keyof T, string>,\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 2024 DXOS.org\n//\nimport { ArrayFormatter } from '@effect/schema';\nimport { Effect } from 'effect';\n\nimport { S } from '@dxos/echo-schema';\n\nexport type ValidationError = { path: string; message: string };\n\nexport const validate = <T>(schema: S.Schema<T>, data: any): ValidationError[] | undefined => {\n const validator = S.decodeUnknownEither(schema, { errors: 'all' });\n const result = validator(data);\n\n if (result._tag === 'Left') {\n const errors = Effect.runSync(ArrayFormatter.formatError(result.left));\n // TODO(Zan): Path.join is an assumption...\n return errors.map(({ message, path }) => ({ message, path: path.join('.') }));\n }\n\n return undefined;\n};\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", "useArrowNavigationGroup", "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", "useArrowNavigationGroup", "axis", "StartContent", "EndContent", "StatusBar", "Container", "Text", "StatusBarText", "Item", "Button", "StatusBarButton", "DiscordLogo", "PaperPlaneTilt", "React", "useState", "Surface", "Popover", "X", "PaperPlaneTilt", "React", "useCallback", "useIntentDispatcher", "S", "Button", "Input", "Popover", "useTranslation", "getSize", "useCallback", "useState", "useForm", "initialValues", "validate", "onSubmit", "values", "setValues", "useState", "errors", "setErrors", "touched", "setTouched", "Object", "keys", "reduce", "acc", "key", "runValidation", "useCallback", "validationErrors", "collapseErrorArray", "undefined", "handleChange", "event", "name", "value", "target", "newValues", "touchAll", "mkAllTouched", "handleBlur", "relatedTarget", "getAttribute", "handleSubmit", "canSubmit", "every", "getInputProps", "onChange", "onBlur", "onValidate", "path", "message", "entry", "translation", "STATUS_BAR_PLUGIN", "mkTranslation", "t", "key", "translations", "ArrayFormatter", "Effect", "S", "validate", "schema", "data", "validator", "S", "decodeUnknownEither", "errors", "result", "_tag", "Effect", "runSync", "ArrayFormatter", "formatError", "left", "map", "message", "path", "join", "undefined", "Email", "S", "String", "pipe", "nonEmpty", "message", "pattern", "field", "maxLength", "length", "FeedbackFormSchema", "Struct", "name", "email", "initialValues", "FeedbackForm", "onClose", "t", "useTranslation", "STATUS_BAR_PLUGIN", "translation", "mkTranslation", "dispatch", "useIntentDispatcher", "onSubmit", "useCallback", "values", "action", "data", "errors", "handleSubmit", "canSubmit", "touched", "getInputProps", "useForm", "validate", "React", "div", "role", "className", "Input", "Root", "validationValence", "undefined", "Label", "TextInput", "classNames", "placeholder", "autoFocus", "DescriptionAndValidation", "Validation", "TextArea", "rows", "cols", "Button", "type", "variant", "disabled", "onClick", "span", "PaperPlaneTilt", "getSize", "Popover", "Close", "asChild", "ns", "X", "StatusBarImpl", "open", "setOpen", "useState", "React", "Popover", "Root", "onOpenChange", "StatusBar", "Container", "EndContent", "Trigger", "asChild", "Button", "aria-label", "data-joyride", "PaperPlaneTilt", "Text", "classNames", "a", "href", "target", "rel", "DiscordLogo", "Surface", "role", "Content", "FeedbackForm", "onClose", "Arrow", "StatusBarPlugin", "meta", "provides", "translations", "surface", "component", "role", "React", "StatusBarImpl", "StatusBarPlugin"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx":{"bytes":10001,"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/hooks/useForm.ts":{"bytes":12419,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-status-bar/src/hooks/index.ts":{"bytes":511,"imports":[{"path":"packages/plugins/plugin-status-bar/src/hooks/useForm.ts","kind":"import-statement","original":"./useForm"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/meta.tsx":{"bytes":1914,"imports":[{"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}],"format":"esm"},"packages/plugins/plugin-status-bar/src/translations.ts":{"bytes":3385,"imports":[{"path":"packages/plugins/plugin-status-bar/src/meta.tsx","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/util/validation.ts":{"bytes":2821,"imports":[{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-status-bar/src/util/index.ts":{"bytes":517,"imports":[{"path":"packages/plugins/plugin-status-bar/src/util/validation.ts","kind":"import-statement","original":"./validation"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx":{"bytes":16753,"imports":[{"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/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/hooks/index.ts","kind":"import-statement","original":"../hooks"},{"path":"packages/plugins/plugin-status-bar/src/meta.tsx","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-status-bar/src/translations.ts","kind":"import-statement","original":"../translations"},{"path":"packages/plugins/plugin-status-bar/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/StatusBarImpl.tsx":{"bytes":6022,"imports":[{"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":"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":623,"imports":[{"path":"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx","kind":"import-statement","original":"./StatusBar"},{"path":"packages/plugins/plugin-status-bar/src/components/StatusBarImpl.tsx","kind":"import-statement","original":"./StatusBarImpl"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx":{"bytes":2657,"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.tsx","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/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":28277},"packages/plugins/plugin-status-bar/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-status-bar/dist/lib/browser/chunk-PL5XPTPX.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":"@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":"@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/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["StatusBar","StatusBarImpl","StatusBarPlugin","default"],"entryPoint":"packages/plugins/plugin-status-bar/src/index.ts","inputs":{"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx":{"bytesInOutput":423},"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx":{"bytesInOutput":2483},"packages/plugins/plugin-status-bar/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-status-bar/src/components/StatusBarImpl.tsx":{"bytesInOutput":1702},"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx":{"bytesInOutput":4748},"packages/plugins/plugin-status-bar/src/hooks/useForm.ts":{"bytesInOutput":2228},"packages/plugins/plugin-status-bar/src/hooks/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-status-bar/src/translations.ts":{"bytesInOutput":570},"packages/plugins/plugin-status-bar/src/util/validation.ts":{"bytesInOutput":497},"packages/plugins/plugin-status-bar/src/util/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-status-bar/src/index.ts":{"bytesInOutput":35}},"bytes":13596},"packages/plugins/plugin-status-bar/dist/lib/browser/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-status-bar/dist/lib/browser/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-status-bar/dist/lib/browser/chunk-PL5XPTPX.mjs","kind":"import-statement"}],"exports":["STATUS_BAR_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-status-bar/src/meta.tsx","inputs":{},"bytes":169},"packages/plugins/plugin-status-bar/dist/lib/browser/chunk-PL5XPTPX.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":946},"packages/plugins/plugin-status-bar/dist/lib/browser/chunk-PL5XPTPX.mjs":{"imports":[{"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}],"exports":["STATUS_BAR_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-status-bar/src/meta.tsx":{"bytesInOutput":429}},"bytes":573}}}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type PluginDefinition, type SurfaceProvides, type TranslationsProvides } from '@dxos/app-framework';
|
|
2
|
+
export type StatusBarPluginProvides = SurfaceProvides & TranslationsProvides;
|
|
3
|
+
export declare const StatusBarPlugin: () => PluginDefinition<StatusBarPluginProvides>;
|
|
4
|
+
//# sourceMappingURL=StatusBarPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBarPlugin.d.ts","sourceRoot":"","sources":["../../../src/StatusBarPlugin.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAM7G,MAAM,MAAM,uBAAuB,GAAG,eAAe,GAAG,oBAAoB,CAAC;AAE7E,eAAO,MAAM,eAAe,QAAO,gBAAgB,CAAC,uBAAuB,CAkB1E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackForm.d.ts","sourceRoot":"","sources":["../../../../src/components/FeedbackForm.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAiC3C,eAAO,MAAM,YAAY,gBAAiB;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,sBAwFhE,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
declare const StatusBarButton: React.ForwardRefExoticComponent<Omit<{
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
asChild?: boolean;
|
|
5
|
+
}, "className"> & {
|
|
6
|
+
classNames?: import("@dxos/react-ui").ClassNameValue;
|
|
7
|
+
} & React.HTMLAttributes<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>>;
|
|
8
|
+
export default StatusBarButton;
|
|
9
|
+
export declare const StatusBar: {
|
|
10
|
+
Container: React.ForwardRefExoticComponent<Omit<{
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}, "className"> & {
|
|
13
|
+
classNames?: import("@dxos/react-ui").ClassNameValue;
|
|
14
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
+
Text: React.ForwardRefExoticComponent<Omit<{
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}, "className"> & {
|
|
18
|
+
classNames?: import("@dxos/react-ui").ClassNameValue;
|
|
19
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
20
|
+
Item: React.ForwardRefExoticComponent<Omit<{
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
}, "className"> & {
|
|
23
|
+
classNames?: import("@dxos/react-ui").ClassNameValue;
|
|
24
|
+
} & React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
+
Button: React.ForwardRefExoticComponent<Omit<{
|
|
26
|
+
children: ReactNode;
|
|
27
|
+
asChild?: boolean;
|
|
28
|
+
}, "className"> & {
|
|
29
|
+
classNames?: import("@dxos/react-ui").ClassNameValue;
|
|
30
|
+
} & React.HTMLAttributes<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>>;
|
|
31
|
+
StartContent: React.ForwardRefExoticComponent<Omit<{
|
|
32
|
+
children: ReactNode;
|
|
33
|
+
}, "className"> & {
|
|
34
|
+
classNames?: import("@dxos/react-ui").ClassNameValue;
|
|
35
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
36
|
+
EndContent: React.ForwardRefExoticComponent<Omit<{
|
|
37
|
+
children: ReactNode;
|
|
38
|
+
}, "className"> & {
|
|
39
|
+
classNames?: import("@dxos/react-ui").ClassNameValue;
|
|
40
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=StatusBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAmC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgB/E,QAAA,MAAM,eAAe;cAHmC,SAAS;cAAY,OAAO;;;qFAuBnF,CAAC;AAEF,eAAe,eAAe,CAAC;AA0D/B,eAAO,MAAM,SAAS;;kBA1CqC,SAAS;;;;;kBAjDd,SAAS;;;;;kBAmCT,SAAS;;;;;kBA3BP,SAAS;kBAAY,OAAO;;;;;kBAmE/B,SAAS;;;;;kBAQX,SAAS;;;;CAe3D,CAAC"}
|