@dxos/plugin-status-bar 0.6.13 → 0.6.14-main.1366248

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/lib/browser/chunk-4KDZC7WS.mjs +14 -0
  2. package/dist/lib/browser/chunk-4KDZC7WS.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +43 -148
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/meta.mjs +1 -1
  7. package/dist/types/src/components/FeedbackForm.d.ts.map +1 -1
  8. package/dist/types/src/components/StatusBar.d.ts.map +1 -1
  9. package/dist/types/src/components/StatusBar.stories.d.ts +6 -47
  10. package/dist/types/src/components/StatusBar.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/StatusBarPanel.d.ts +3 -0
  12. package/dist/types/src/components/StatusBarPanel.d.ts.map +1 -0
  13. package/dist/types/src/components/index.d.ts +1 -1
  14. package/dist/types/src/components/index.d.ts.map +1 -1
  15. package/dist/types/src/meta.d.ts +3 -9
  16. package/dist/types/src/meta.d.ts.map +1 -1
  17. package/package.json +20 -22
  18. package/src/StatusBarPlugin.tsx +2 -2
  19. package/src/components/FeedbackForm.tsx +15 -16
  20. package/src/components/StatusBar.stories.tsx +33 -28
  21. package/src/components/StatusBar.tsx +3 -2
  22. package/src/components/{StatusBarImpl.tsx → StatusBarPanel.tsx} +5 -7
  23. package/src/components/index.ts +1 -1
  24. package/src/meta.ts +14 -0
  25. package/dist/lib/browser/chunk-PL5XPTPX.mjs +0 -18
  26. package/dist/lib/browser/chunk-PL5XPTPX.mjs.map +0 -7
  27. package/dist/types/src/components/StatusBarImpl.d.ts +0 -3
  28. package/dist/types/src/components/StatusBarImpl.d.ts.map +0 -1
  29. package/dist/types/src/hooks/index.d.ts +0 -2
  30. package/dist/types/src/hooks/index.d.ts.map +0 -1
  31. package/dist/types/src/hooks/useForm.d.ts +0 -36
  32. package/dist/types/src/hooks/useForm.d.ts.map +0 -1
  33. package/dist/types/src/util/index.d.ts +0 -2
  34. package/dist/types/src/util/index.d.ts.map +0 -1
  35. package/dist/types/src/util/validation.d.ts +0 -7
  36. package/dist/types/src/util/validation.d.ts.map +0 -1
  37. package/src/hooks/index.ts +0 -5
  38. package/src/hooks/useForm.ts +0 -119
  39. package/src/meta.tsx +0 -18
  40. package/src/util/index.ts +0 -5
  41. package/src/util/validation.ts +0 -22
@@ -0,0 +1,14 @@
1
+ // packages/plugins/plugin-status-bar/src/meta.ts
2
+ var STATUS_BAR_PLUGIN = "dxos.org/plugin/status-bar";
3
+ var meta_default = {
4
+ id: STATUS_BAR_PLUGIN,
5
+ name: "Status Bar",
6
+ description: "Display a bar with status and actions.",
7
+ icon: "ph--info--regular"
8
+ };
9
+
10
+ export {
11
+ STATUS_BAR_PLUGIN,
12
+ meta_default
13
+ };
14
+ //# sourceMappingURL=chunk-4KDZC7WS.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
+ }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  STATUS_BAR_PLUGIN,
3
3
  meta_default
4
- } from "./chunk-PL5XPTPX.mjs";
4
+ } from "./chunk-4KDZC7WS.mjs";
5
5
 
6
6
  // packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx
7
7
  import React4 from "react";
@@ -42,7 +42,7 @@ var StatusBarContainer = /* @__PURE__ */ forwardRef(({ classNames, children }, f
42
42
  role: "menubar",
43
43
  tabIndex: 0,
44
44
  ...groupAttrs,
45
- className: mx("bs-[--statusbar-size] flex justify-end items-center gap-2 border-bs border-separator bg-base text-description text-lg pointer-fine:text-xs ch-focus-ring-inset", classNames),
45
+ 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),
46
46
  ref: forwardedRef
47
47
  }, children);
48
48
  });
@@ -65,112 +65,20 @@ var StatusBar = {
65
65
  EndContent
66
66
  };
67
67
 
68
- // packages/plugins/plugin-status-bar/src/components/StatusBarImpl.tsx
69
- import { DiscordLogo, PaperPlaneTilt as PaperPlaneTilt2 } from "@phosphor-icons/react";
70
- import React3, { useState as useState2 } from "react";
68
+ // packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx
69
+ import React3, { useState } from "react";
71
70
  import { Surface } from "@dxos/app-framework";
72
- import { Popover as Popover2 } from "@dxos/react-ui";
71
+ import { Icon, Popover as Popover2 } from "@dxos/react-ui";
73
72
 
74
73
  // packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx
75
- import { X, PaperPlaneTilt } from "@phosphor-icons/react";
76
- import React2, { useCallback as useCallback2 } from "react";
74
+ import { Schema as S } from "@effect/schema";
75
+ import { PaperPlaneTilt, X } from "@phosphor-icons/react";
76
+ import React2, { useCallback } from "react";
77
77
  import { useIntentDispatcher } from "@dxos/app-framework";
78
- import { S as S2 } from "@dxos/echo-schema";
79
78
  import { Button, Input, Popover, useTranslation } from "@dxos/react-ui";
79
+ import { useForm } from "@dxos/react-ui-data";
80
80
  import { getSize } from "@dxos/react-ui-theme";
81
81
 
82
- // packages/plugins/plugin-status-bar/src/hooks/useForm.ts
83
- import { useCallback, useState } from "react";
84
- var useForm = ({ initialValues: initialValues2, validate: validate2, onSubmit }) => {
85
- const [values, setValues] = useState(initialValues2);
86
- const [errors, setErrors] = useState({});
87
- const [touched, setTouched] = useState(Object.keys(initialValues2).reduce((acc, key) => ({
88
- ...acc,
89
- [key]: false
90
- }), {}));
91
- const runValidation = useCallback((values2) => {
92
- const validationErrors = validate2(values2);
93
- setErrors(collapseErrorArray(validationErrors ?? []));
94
- return validationErrors === void 0;
95
- }, [
96
- validate2
97
- ]);
98
- const handleChange = useCallback((event) => {
99
- const { name, value } = event.target;
100
- const newValues = {
101
- ...values,
102
- [name]: value
103
- };
104
- setValues(newValues);
105
- runValidation(newValues);
106
- }, [
107
- values,
108
- runValidation
109
- ]);
110
- const touchAll = useCallback(() => setTouched(mkAllTouched(values)), [
111
- values,
112
- setTouched
113
- ]);
114
- const handleBlur = useCallback((event) => {
115
- const { name } = event.target;
116
- setTouched((touched2) => ({
117
- ...touched2,
118
- [name]: true
119
- }));
120
- if (event.relatedTarget?.getAttribute("type") === "submit") {
121
- touchAll();
122
- }
123
- runValidation(values);
124
- }, [
125
- runValidation,
126
- values,
127
- touchAll
128
- ]);
129
- const handleSubmit = useCallback(() => {
130
- if (runValidation(values)) {
131
- onSubmit(values);
132
- }
133
- }, [
134
- values,
135
- runValidation,
136
- onSubmit
137
- ]);
138
- const canSubmit = Object.keys(values).every((key) => touched[key] === false || !errors[key]);
139
- const getInputProps = useCallback((key) => ({
140
- name: key,
141
- value: values[key],
142
- onChange: handleChange,
143
- onBlur: handleBlur,
144
- "aria-invalid": errors[key] !== void 0
145
- }), [
146
- values,
147
- handleChange,
148
- handleBlur,
149
- errors
150
- ]);
151
- return {
152
- values,
153
- handleChange,
154
- handleSubmit,
155
- errors,
156
- canSubmit,
157
- touched,
158
- handleBlur,
159
- onValidate: runValidation,
160
- getInputProps
161
- };
162
- };
163
- var mkAllTouched = (values) => {
164
- return Object.keys(values).reduce((acc, key) => ({
165
- ...acc,
166
- [key]: true
167
- }), {});
168
- };
169
- var collapseErrorArray = (errors) => errors.reduce((acc, { path, message }) => {
170
- acc[path] = message;
171
- return acc;
172
- }, {});
173
-
174
82
  // packages/plugins/plugin-status-bar/src/translations.ts
175
83
  var entry = (translation) => ({
176
84
  [STATUS_BAR_PLUGIN]: translation
@@ -192,41 +100,22 @@ var translations_default = [
192
100
  translations
193
101
  ];
194
102
 
195
- // packages/plugins/plugin-status-bar/src/util/validation.ts
196
- import { ArrayFormatter } from "@effect/schema";
197
- import { Effect } from "effect";
198
- import { S } from "@dxos/echo-schema";
199
- var validate = (schema, data) => {
200
- const validator = S.decodeUnknownEither(schema, {
201
- errors: "all"
202
- });
203
- const result = validator(data);
204
- if (result._tag === "Left") {
205
- const errors = Effect.runSync(ArrayFormatter.formatError(result.left));
206
- return errors.map(({ message, path }) => ({
207
- message,
208
- path: path.join(".")
209
- }));
210
- }
211
- return void 0;
212
- };
213
-
214
103
  // packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx
215
- var Email = S2.String.pipe(S2.nonEmpty({
104
+ var Email = S.String.pipe(S.nonEmptyString({
216
105
  message: () => "Email is required."
217
- }), S2.pattern(/^(?!\.)(?!.*\.\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\.)+[A-Z]{2,}$/i, {
106
+ }), S.pattern(/^(?!\.)(?!.*\.\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\.)+[A-Z]{2,}$/i, {
218
107
  message: () => "Invalid email address."
219
108
  }));
220
- var nonEmpty = (field) => S2.nonEmpty({
109
+ var nonEmpty = (field) => S.nonEmptyString({
221
110
  message: () => `${field} is required.`
222
111
  });
223
- var maxLength = (field, length) => S2.maxLength(length, {
112
+ var maxLength = (field, length) => S.maxLength(length, {
224
113
  message: () => `${field} is too long.`
225
114
  });
226
- var FeedbackFormSchema = S2.Struct({
227
- name: S2.String.pipe(nonEmpty("Name"), maxLength("Name", 256)),
115
+ var FeedbackFormSchema = S.Struct({
116
+ name: S.String.pipe(nonEmpty("Name"), maxLength("Name", 256)),
228
117
  email: Email.pipe(maxLength("Email", 256)),
229
- message: S2.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
118
+ message: S.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
230
119
  });
231
120
  var initialValues = {
232
121
  name: "",
@@ -237,7 +126,7 @@ var FeedbackForm = ({ onClose }) => {
237
126
  const { t } = useTranslation(STATUS_BAR_PLUGIN);
238
127
  const translation = mkTranslation(t);
239
128
  const dispatch = useIntentDispatcher();
240
- const onSubmit = useCallback2((values) => {
129
+ const onSubmit = useCallback((values) => {
241
130
  void dispatch({
242
131
  action: "dxos.org/plugin/observability/capture-feedback",
243
132
  data: values
@@ -247,10 +136,10 @@ var FeedbackForm = ({ onClose }) => {
247
136
  dispatch,
248
137
  onClose
249
138
  ]);
250
- const { errors, handleSubmit, canSubmit, touched, getInputProps } = useForm({
139
+ const { handleSubmit, canSubmit, getInputProps, getErrorValence, getErrorMessage } = useForm({
251
140
  initialValues,
252
- validate: (values) => validate(FeedbackFormSchema, values),
253
- onSubmit: (values) => onSubmit(values)
141
+ schema: FeedbackFormSchema,
142
+ onSubmit
254
143
  });
255
144
  return /* @__PURE__ */ React2.createElement("div", {
256
145
  role: "form",
@@ -259,33 +148,33 @@ var FeedbackForm = ({ onClose }) => {
259
148
  role: "none",
260
149
  className: "space-b-1"
261
150
  }, /* @__PURE__ */ React2.createElement(Input.Root, {
262
- validationValence: touched.name && errors.name ? "error" : void 0
151
+ validationValence: getErrorValence("name")
263
152
  }, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("name label")), /* @__PURE__ */ React2.createElement(Input.TextInput, {
264
153
  classNames: "text-sm",
265
154
  placeholder: translation("name placeholder"),
266
155
  autoFocus: true,
267
156
  ...getInputProps("name")
268
- }), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, touched.name && errors.name)))), /* @__PURE__ */ React2.createElement("div", {
157
+ }), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, getErrorMessage("name"))))), /* @__PURE__ */ React2.createElement("div", {
269
158
  role: "none",
270
159
  className: "space-b-1"
271
160
  }, /* @__PURE__ */ React2.createElement(Input.Root, {
272
- validationValence: touched.email && errors.email ? "error" : void 0
161
+ validationValence: getErrorValence("email")
273
162
  }, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("email input label")), /* @__PURE__ */ React2.createElement(Input.TextInput, {
274
163
  classNames: "text-sm",
275
164
  placeholder: translation("email input placeholder"),
276
165
  ...getInputProps("email")
277
- }), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, touched.email && errors.email)))), /* @__PURE__ */ React2.createElement("div", {
166
+ }), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, getErrorMessage("email"))))), /* @__PURE__ */ React2.createElement("div", {
278
167
  role: "none",
279
168
  className: "space-b-1"
280
169
  }, /* @__PURE__ */ React2.createElement(Input.Root, {
281
- validationValence: touched.message && errors.message ? "error" : void 0
170
+ validationValence: getErrorValence("message")
282
171
  }, /* @__PURE__ */ React2.createElement(Input.Label, null, translation("feedback text area label")), /* @__PURE__ */ React2.createElement(Input.TextArea, {
283
172
  classNames: "text-sm",
284
173
  rows: 5,
285
174
  cols: 30,
286
175
  placeholder: translation("feedback text area placeholder"),
287
176
  ...getInputProps("message")
288
- }), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, touched.message && errors.message)))), /* @__PURE__ */ React2.createElement("div", {
177
+ }), /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, null, /* @__PURE__ */ React2.createElement(Input.Validation, null, getErrorMessage("message"))))), /* @__PURE__ */ React2.createElement("div", {
289
178
  role: "none",
290
179
  className: "space-b-2"
291
180
  }, /* @__PURE__ */ React2.createElement(Button, {
@@ -311,18 +200,23 @@ var FeedbackForm = ({ onClose }) => {
311
200
  })))));
312
201
  };
313
202
 
314
- // packages/plugins/plugin-status-bar/src/components/StatusBarImpl.tsx
315
- var StatusBarImpl = () => {
316
- const [open, setOpen] = useState2(false);
203
+ // packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx
204
+ var StatusBarPanel = () => {
205
+ const [open, setOpen] = useState(false);
317
206
  return /* @__PURE__ */ React3.createElement(Popover2.Root, {
318
207
  open,
319
208
  onOpenChange: setOpen
320
- }, /* @__PURE__ */ React3.createElement(StatusBar.Container, null, /* @__PURE__ */ React3.createElement(StatusBar.EndContent, null, /* @__PURE__ */ React3.createElement(Popover2.Trigger, {
209
+ }, /* @__PURE__ */ React3.createElement(StatusBar.Container, null, /* @__PURE__ */ React3.createElement(StatusBar.EndContent, null, /* @__PURE__ */ React3.createElement(Surface, {
210
+ role: "status"
211
+ }), /* @__PURE__ */ React3.createElement(Popover2.Trigger, {
321
212
  asChild: true
322
213
  }, /* @__PURE__ */ React3.createElement(StatusBar.Button, {
323
214
  "aria-label": "Give feedback about composer",
324
215
  "data-joyride": "welcome/feedback"
325
- }, /* @__PURE__ */ React3.createElement(PaperPlaneTilt2, null), /* @__PURE__ */ React3.createElement(StatusBar.Text, {
216
+ }, /* @__PURE__ */ React3.createElement(Icon, {
217
+ icon: "ph--paper-plane-tilt--regular",
218
+ size: 4
219
+ }), /* @__PURE__ */ React3.createElement(StatusBar.Text, {
326
220
  classNames: "hidden sm:block"
327
221
  }, "Feedback"))), /* @__PURE__ */ React3.createElement(StatusBar.Button, {
328
222
  "aria-label": "Open DXOS Discord",
@@ -331,11 +225,12 @@ var StatusBarImpl = () => {
331
225
  href: "https://dxos.org/discord",
332
226
  target: "_blank",
333
227
  rel: "noopener noreferrer"
334
- }, /* @__PURE__ */ React3.createElement(DiscordLogo, null), /* @__PURE__ */ React3.createElement(StatusBar.Text, {
228
+ }, /* @__PURE__ */ React3.createElement(Icon, {
229
+ icon: "ph--discord-logo--regular",
230
+ size: 4
231
+ }), /* @__PURE__ */ React3.createElement(StatusBar.Text, {
335
232
  classNames: "hidden sm:block"
336
- }, "Discord")))), /* @__PURE__ */ React3.createElement(Surface, {
337
- role: "status"
338
- })), /* @__PURE__ */ React3.createElement(Popover2.Content, {
233
+ }, "Discord"))))), /* @__PURE__ */ React3.createElement(Popover2.Content, {
339
234
  classNames: "shadow-lg"
340
235
  }, /* @__PURE__ */ React3.createElement(FeedbackForm, {
341
236
  onClose: () => setOpen(false)
@@ -352,7 +247,7 @@ var StatusBarPlugin = () => {
352
247
  component: ({ role }) => {
353
248
  switch (role) {
354
249
  case "status-bar": {
355
- return /* @__PURE__ */ React4.createElement(StatusBarImpl, null);
250
+ return /* @__PURE__ */ React4.createElement(StatusBarPanel, null);
356
251
  }
357
252
  }
358
253
  return null;
@@ -366,7 +261,7 @@ var StatusBarPlugin = () => {
366
261
  var src_default = StatusBarPlugin;
367
262
  export {
368
263
  StatusBar,
369
- StatusBarImpl,
264
+ StatusBarPanel,
370
265
  StatusBarPlugin,
371
266
  src_default as default
372
267
  };
@@ -1,7 +1,7 @@
1
1
  {
2
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 { 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);\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 border-bs border-separator 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 { 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://dxos.org/discord' 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", "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", "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"]
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-data';\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 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 { handleSubmit, canSubmit, getInputProps, getErrorValence, getErrorMessage } = useForm<FeedbackFormState>({\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={getErrorValence('name')}>\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>{getErrorMessage('name')}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getErrorValence('email')}>\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>{getErrorMessage('email')}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getErrorValence('message')}>\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>{getErrorMessage('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 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", "getInputProps", "getErrorValence", "getErrorMessage", "useForm", "schema", "React", "div", "role", "className", "Input", "Root", "validationValence", "Label", "TextInput", "classNames", "placeholder", "autoFocus", "DescriptionAndValidation", "Validation", "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
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx":{"bytes":9987,"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":6009,"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":28237},"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":2505},"packages/plugins/plugin-status-bar/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-status-bar/src/components/StatusBarImpl.tsx":{"bytesInOutput":1697},"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":13613},"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}}}
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":16125,"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-data","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/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":20188},"packages/plugins/plugin-status-bar/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-status-bar/dist/lib/browser/chunk-4KDZC7WS.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-data","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":4649},"packages/plugins/plugin-status-bar/src/translations.ts":{"bytesInOutput":570},"packages/plugins/plugin-status-bar/src/index.ts":{"bytesInOutput":35}},"bytes":10639},"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-4KDZC7WS.mjs","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/browser/chunk-4KDZC7WS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":600},"packages/plugins/plugin-status-bar/dist/lib/browser/chunk-4KDZC7WS.mjs":{"imports":[],"exports":["STATUS_BAR_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-status-bar/src/meta.ts":{"bytesInOutput":210}},"bytes":353}}}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  STATUS_BAR_PLUGIN,
3
3
  meta_default
4
- } from "./chunk-PL5XPTPX.mjs";
4
+ } from "./chunk-4KDZC7WS.mjs";
5
5
  export {
6
6
  STATUS_BAR_PLUGIN,
7
7
  meta_default as default
@@ -1 +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"}
1
+ {"version":3,"file":"FeedbackForm.d.ts","sourceRoot":"","sources":["../../../../src/components/FeedbackForm.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAsB,MAAM,OAAO,CAAC;AA+B3C,eAAO,MAAM,YAAY,gBAAiB;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,sBAwFhE,CAAC"}
@@ -1 +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;;;qFAsBnF,CAAC;AAEF,eAAe,eAAe,CAAC;AAuD/B,eAAO,MAAM,SAAS;;kBAvCqC,SAAS;;;;;kBAhDd,SAAS;;;;;kBAkCT,SAAS;;;;;kBA1BP,SAAS;kBAAY,OAAO;;;;;kBA+D/B,SAAS;;;;;kBAQX,SAAS;;;;CAe3D,CAAC"}
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;;;qFAsBnF,CAAC;AAEF,eAAe,eAAe,CAAC;AAwD/B,eAAO,MAAM,SAAS;;kBAvCqC,SAAS;;;;;kBAjDd,SAAS;;;;;kBAkCT,SAAS;;;;;kBA1BP,SAAS;kBAAY,OAAO;;;;;kBAgE/B,SAAS;;;;;kBAQX,SAAS;;;;CAe3D,CAAC"}
@@ -1,50 +1,9 @@
1
1
  import '@dxos-theme';
2
+ import { type Meta } from '@storybook/react';
2
3
  import React from 'react';
3
- declare const _default: {
4
- title: string;
5
- component: {
6
- Container: React.ForwardRefExoticComponent<Omit<{
7
- children: React.ReactNode;
8
- }, "className"> & {
9
- classNames?: import("packages/ui/react-ui-types/dist/types/src").ClassNameValue;
10
- } & React.RefAttributes<HTMLDivElement>>;
11
- Text: React.ForwardRefExoticComponent<Omit<{
12
- children: React.ReactNode;
13
- }, "className"> & {
14
- classNames?: import("packages/ui/react-ui-types/dist/types/src").ClassNameValue;
15
- } & React.RefAttributes<HTMLSpanElement>>;
16
- Item: React.ForwardRefExoticComponent<Omit<{
17
- children: React.ReactNode;
18
- }, "className"> & {
19
- classNames?: import("packages/ui/react-ui-types/dist/types/src").ClassNameValue;
20
- } & React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
21
- Button: React.ForwardRefExoticComponent<Omit<{
22
- children: React.ReactNode;
23
- asChild?: boolean;
24
- }, "className"> & {
25
- classNames?: import("packages/ui/react-ui-types/dist/types/src").ClassNameValue;
26
- } & React.HTMLAttributes<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>>;
27
- StartContent: React.ForwardRefExoticComponent<Omit<{
28
- children: React.ReactNode;
29
- }, "className"> & {
30
- classNames?: import("packages/ui/react-ui-types/dist/types/src").ClassNameValue;
31
- } & React.RefAttributes<HTMLDivElement>>;
32
- EndContent: React.ForwardRefExoticComponent<Omit<{
33
- children: React.ReactNode;
34
- }, "className"> & {
35
- classNames?: import("packages/ui/react-ui-types/dist/types/src").ClassNameValue;
36
- } & React.RefAttributes<HTMLDivElement>>;
37
- };
38
- actions: {
39
- argTypesRegex: string;
40
- };
41
- decorators: import("@storybook/react/*").Decorator[];
42
- parameters: {
43
- chromatic: {
44
- disableSnapshot: boolean;
45
- };
46
- };
47
- };
48
- export default _default;
49
- export declare const Normal: (_props: any) => React.JSX.Element;
4
+ import { StatusBar } from './StatusBar';
5
+ export declare const DefaultStory: () => React.JSX.Element;
6
+ export declare const Default: {};
7
+ declare const meta: Meta<typeof StatusBar>;
8
+ export default meta;
50
9
  //# sourceMappingURL=StatusBar.stories.d.ts.map