@dxos/plugin-status-bar 0.7.5-main.9d26e3a → 0.7.5-main.9d2a38b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +36 -28
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +90 -74
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +36 -27
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/StatusBarPlugin.d.ts +1 -3
- package/dist/types/src/StatusBarPlugin.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -22
- package/src/StatusBarPlugin.tsx +22 -20
- package/src/index.ts +2 -5
- package/src/meta.ts +1 -1
- package/dist/lib/browser/chunk-4KDZC7WS.mjs +0 -14
- package/dist/lib/browser/chunk-4KDZC7WS.mjs.map +0 -7
- package/dist/lib/browser/meta.mjs +0 -9
- package/dist/lib/browser/meta.mjs.map +0 -7
- package/dist/lib/node/chunk-OGG3PMIV.cjs +0 -37
- package/dist/lib/node/chunk-OGG3PMIV.cjs.map +0 -7
- package/dist/lib/node/meta.cjs +0 -30
- package/dist/lib/node/meta.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-UVUSU6KS.mjs +0 -16
- package/dist/lib/node-esm/chunk-UVUSU6KS.mjs.map +0 -7
- package/dist/lib/node-esm/meta.mjs +0 -10
- package/dist/lib/node-esm/meta.mjs.map +0 -7
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
STATUS_BAR_PLUGIN,
|
|
3
|
-
meta_default
|
|
4
|
-
} from "./chunk-4KDZC7WS.mjs";
|
|
5
|
-
|
|
6
|
-
// packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx
|
|
7
|
-
import React4 from "react";
|
|
8
|
-
import { createSurface } from "@dxos/app-framework";
|
|
9
|
-
|
|
10
1
|
// packages/plugins/plugin-status-bar/src/components/StatusBar.tsx
|
|
11
2
|
import { useFocusableGroup } from "@fluentui/react-tabster";
|
|
12
3
|
import { Slot } from "@radix-ui/react-slot";
|
|
@@ -80,6 +71,15 @@ import { Button, Input, Popover, useTranslation } from "@dxos/react-ui";
|
|
|
80
71
|
import { useForm } from "@dxos/react-ui-form";
|
|
81
72
|
import { getSize } from "@dxos/react-ui-theme";
|
|
82
73
|
|
|
74
|
+
// packages/plugins/plugin-status-bar/src/meta.ts
|
|
75
|
+
var STATUS_BAR_PLUGIN = "dxos.org/plugin/status-bar";
|
|
76
|
+
var meta = {
|
|
77
|
+
id: STATUS_BAR_PLUGIN,
|
|
78
|
+
name: "Status Bar",
|
|
79
|
+
description: "Display a bar with status and actions.",
|
|
80
|
+
icon: "ph--info--regular"
|
|
81
|
+
};
|
|
82
|
+
|
|
83
83
|
// packages/plugins/plugin-status-bar/src/translations.ts
|
|
84
84
|
var entry = (translation) => ({
|
|
85
85
|
[STATUS_BAR_PLUGIN]: translation
|
|
@@ -220,28 +220,36 @@ var StatusBarPanel = () => {
|
|
|
220
220
|
};
|
|
221
221
|
|
|
222
222
|
// packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
223
|
+
import React4 from "react";
|
|
224
|
+
import { Capabilities, contributes, createSurface, defineModule, definePlugin, Events } from "@dxos/app-framework";
|
|
225
|
+
var StatusBarPlugin = () => definePlugin(meta, [
|
|
226
|
+
defineModule({
|
|
227
|
+
id: `${meta.id}/module/translations`,
|
|
228
|
+
activatesOn: Events.SetupTranslations,
|
|
229
|
+
activate: () => contributes(Capabilities.Translations, translations_default)
|
|
230
|
+
}),
|
|
231
|
+
defineModule({
|
|
232
|
+
id: `${meta.id}/module/react-surface`,
|
|
233
|
+
activatesOn: Events.Startup,
|
|
234
|
+
activate: () => contributes(Capabilities.ReactSurface, [
|
|
235
|
+
createSurface({
|
|
236
|
+
id: meta.id,
|
|
237
|
+
role: "status-bar",
|
|
238
|
+
component: () => /* @__PURE__ */ React4.createElement(StatusBarPanel, null)
|
|
239
|
+
}),
|
|
240
|
+
createSurface({
|
|
241
|
+
id: meta.id,
|
|
242
|
+
role: "status-bar--sidebar-footer",
|
|
243
|
+
component: () => /* @__PURE__ */ React4.createElement(StatusBarPanel, null)
|
|
244
|
+
})
|
|
245
|
+
])
|
|
246
|
+
})
|
|
247
|
+
]);
|
|
241
248
|
export {
|
|
249
|
+
STATUS_BAR_PLUGIN,
|
|
242
250
|
StatusBar,
|
|
243
251
|
StatusBarPanel,
|
|
244
252
|
StatusBarPlugin,
|
|
245
|
-
|
|
253
|
+
meta
|
|
246
254
|
};
|
|
247
255
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n createSurface,\n type PluginDefinition,\n type SurfaceProvides,\n type TranslationsProvides,\n} 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 definitions: () =>\n createSurface({\n id: meta.id,\n role: 'status-bar',\n component: () => <StatusBarPanel />,\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 { PaperPlaneTilt, X } from '@phosphor-icons/react';\nimport React, { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { ObservabilityAction, UserFeedback } from '@dxos/plugin-observability/types';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\nimport { useForm } from '@dxos/react-ui-form';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { STATUS_BAR_PLUGIN } from '../meta';\nimport { mkTranslation } from '../translations';\n\nconst initialValues: UserFeedback = { name: '', email: '', message: '' };\n\nexport const FeedbackForm = ({ onClose }: { onClose: () => void }) => {\n const { t } = useTranslation(STATUS_BAR_PLUGIN);\n const translation = mkTranslation(t);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const onSave = useCallback(\n (values: UserFeedback) => {\n void dispatch(createIntent(ObservabilityAction.CaptureUserFeedback, values));\n onClose();\n },\n [dispatch, onClose],\n );\n\n const { handleSave, canSave, getStatus, ...inputProps } = useForm<UserFeedback>({\n initialValues,\n schema: UserFeedback,\n onSave,\n });\n\n return (\n <div role='form' className='p-3 flex flex-col gap-2'>\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('name').status}>\n <Input.Label>{translation('name label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('name placeholder')}\n autoFocus\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('name').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('email').status}>\n <Input.Label>{translation('email input label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('email input placeholder')}\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('email').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('message').status}>\n <Input.Label>{translation('feedback text area label')}</Input.Label>\n <Input.TextArea\n classNames={'text-sm'}\n rows={5}\n cols={30}\n placeholder={translation('feedback text area placeholder')}\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('message').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-2'>\n <Button\n type='submit'\n variant='primary'\n classNames='is-full flex gap-2'\n disabled={!canSave}\n onClick={handleSave}\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": "
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../../../src/components/StatusBar.tsx", "../../../src/components/StatusBarPanel.tsx", "../../../src/components/FeedbackForm.tsx", "../../../src/meta.ts", "../../../src/translations.ts", "../../../src/StatusBarPlugin.tsx"],
|
|
4
|
+
"sourcesContent": ["//\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 { PaperPlaneTilt, X } from '@phosphor-icons/react';\nimport React, { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { ObservabilityAction, UserFeedback } from '@dxos/plugin-observability/types';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\nimport { useForm } from '@dxos/react-ui-form';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { STATUS_BAR_PLUGIN } from '../meta';\nimport { mkTranslation } from '../translations';\n\nconst initialValues: UserFeedback = { name: '', email: '', message: '' };\n\nexport const FeedbackForm = ({ onClose }: { onClose: () => void }) => {\n const { t } = useTranslation(STATUS_BAR_PLUGIN);\n const translation = mkTranslation(t);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const onSave = useCallback(\n (values: UserFeedback) => {\n void dispatch(createIntent(ObservabilityAction.CaptureUserFeedback, values));\n onClose();\n },\n [dispatch, onClose],\n );\n\n const { handleSave, canSave, getStatus, ...inputProps } = useForm<UserFeedback>({\n initialValues,\n schema: UserFeedback,\n onSave,\n });\n\n return (\n <div role='form' className='p-3 flex flex-col gap-2'>\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('name').status}>\n <Input.Label>{translation('name label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('name placeholder')}\n autoFocus\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('name').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('email').status}>\n <Input.Label>{translation('email input label')}</Input.Label>\n <Input.TextInput\n classNames={'text-sm'}\n placeholder={translation('email input placeholder')}\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('email').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-1'>\n <Input.Root validationValence={getStatus('message').status}>\n <Input.Label>{translation('feedback text area label')}</Input.Label>\n <Input.TextArea\n classNames={'text-sm'}\n rows={5}\n cols={30}\n placeholder={translation('feedback text area placeholder')}\n {...inputProps}\n />\n <Input.DescriptionAndValidation>\n <Input.Validation>{getStatus('message').error}</Input.Validation>\n </Input.DescriptionAndValidation>\n </Input.Root>\n </div>\n\n <div role='none' className='space-b-2'>\n <Button\n type='submit'\n variant='primary'\n classNames='is-full flex gap-2'\n disabled={!canSave}\n onClick={handleSave}\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//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const STATUS_BAR_PLUGIN = 'dxos.org/plugin/status-bar';\n\nexport const meta = {\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", "//\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//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface, defineModule, definePlugin, Events } from '@dxos/app-framework';\n\nimport { StatusBarPanel } from './components';\nimport { meta } from './meta';\nimport translations from './translations';\n\nexport const StatusBarPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.Startup,\n activate: () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: meta.id,\n role: 'status-bar',\n component: () => <StatusBarPanel />,\n }),\n createSurface({\n id: meta.id,\n role: 'status-bar--sidebar-footer',\n component: () => <StatusBarPanel />,\n }),\n ]),\n }),\n ]);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["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", "PaperPlaneTilt", "X", "React", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "UserFeedback", "Button", "Input", "Popover", "useTranslation", "useForm", "getSize", "STATUS_BAR_PLUGIN", "meta", "id", "name", "description", "icon", "entry", "translation", "STATUS_BAR_PLUGIN", "mkTranslation", "t", "key", "translations", "initialValues", "name", "email", "message", "FeedbackForm", "onClose", "t", "useTranslation", "STATUS_BAR_PLUGIN", "translation", "mkTranslation", "dispatchPromise", "dispatch", "useIntentDispatcher", "onSave", "useCallback", "values", "createIntent", "ObservabilityAction", "CaptureUserFeedback", "handleSave", "canSave", "getStatus", "inputProps", "useForm", "schema", "UserFeedback", "React", "div", "role", "className", "Input", "Root", "validationValence", "status", "Label", "TextInput", "classNames", "placeholder", "autoFocus", "DescriptionAndValidation", "Validation", "error", "TextArea", "rows", "cols", "Button", "type", "variant", "disabled", "onClick", "span", "PaperPlaneTilt", "getSize", "Popover", "Close", "asChild", "ns", "X", "StatusBarPanel", "open", "setOpen", "useState", "React", "Popover", "Root", "onOpenChange", "StatusBar", "Container", "EndContent", "Surface", "role", "Trigger", "asChild", "Button", "aria-label", "data-joyride", "Icon", "icon", "size", "Text", "classNames", "a", "href", "target", "rel", "Content", "FeedbackForm", "onClose", "Arrow", "React", "Capabilities", "contributes", "createSurface", "defineModule", "definePlugin", "Events", "StatusBarPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "Startup", "ReactSurface", "createSurface", "role", "component", "React", "StatusBarPanel"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx":{"bytes":9929,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-status-bar/src/meta.ts":{"bytes":
|
|
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":1289,"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":13476,"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/plugin-observability/types","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-status-bar/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx":{"bytes":6010,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-status-bar/src/components/FeedbackForm.tsx","kind":"import-statement","original":"./FeedbackForm"},{"path":"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx","kind":"import-statement","original":"./StatusBar"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/components/index.ts":{"bytes":624,"imports":[{"path":"packages/plugins/plugin-status-bar/src/components/StatusBar.tsx","kind":"import-statement","original":"./StatusBar"},{"path":"packages/plugins/plugin-status-bar/src/components/StatusBarPanel.tsx","kind":"import-statement","original":"./StatusBarPanel"}],"format":"esm"},"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx":{"bytes":4367,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","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":699,"imports":[{"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/StatusBarPlugin.tsx","kind":"import-statement","original":"./StatusBarPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-status-bar/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":19924},"packages/plugins/plugin-status-bar/dist/lib/browser/index.mjs":{"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},{"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/plugin-observability/types","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true}],"exports":["STATUS_BAR_PLUGIN","StatusBar","StatusBarPanel","StatusBarPlugin","meta"],"entryPoint":"packages/plugins/plugin-status-bar/src/index.ts","inputs":{"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":3972},"packages/plugins/plugin-status-bar/src/meta.ts":{"bytesInOutput":202},"packages/plugins/plugin-status-bar/src/translations.ts":{"bytesInOutput":570},"packages/plugins/plugin-status-bar/src/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-status-bar/src/StatusBarPlugin.tsx":{"bytesInOutput":897}},"bytes":10464}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -28,57 +28,57 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var node_exports = {};
|
|
30
30
|
__export(node_exports, {
|
|
31
|
+
STATUS_BAR_PLUGIN: () => STATUS_BAR_PLUGIN,
|
|
31
32
|
StatusBar: () => StatusBar,
|
|
32
33
|
StatusBarPanel: () => StatusBarPanel,
|
|
33
34
|
StatusBarPlugin: () => StatusBarPlugin,
|
|
34
|
-
|
|
35
|
+
meta: () => meta
|
|
35
36
|
});
|
|
36
37
|
module.exports = __toCommonJS(node_exports);
|
|
37
|
-
var import_chunk_OGG3PMIV = require("./chunk-OGG3PMIV.cjs");
|
|
38
|
-
var import_react = __toESM(require("react"));
|
|
39
|
-
var import_app_framework = require("@dxos/app-framework");
|
|
40
38
|
var import_react_tabster = require("@fluentui/react-tabster");
|
|
41
39
|
var import_react_slot = require("@radix-ui/react-slot");
|
|
42
|
-
var
|
|
40
|
+
var import_react = __toESM(require("react"));
|
|
43
41
|
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
44
|
-
var
|
|
45
|
-
var
|
|
42
|
+
var import_react2 = __toESM(require("react"));
|
|
43
|
+
var import_app_framework = require("@dxos/app-framework");
|
|
46
44
|
var import_react_ui = require("@dxos/react-ui");
|
|
47
|
-
var
|
|
48
|
-
var
|
|
49
|
-
var
|
|
45
|
+
var import_react3 = require("@phosphor-icons/react");
|
|
46
|
+
var import_react4 = __toESM(require("react"));
|
|
47
|
+
var import_app_framework2 = require("@dxos/app-framework");
|
|
50
48
|
var import_types = require("@dxos/plugin-observability/types");
|
|
51
49
|
var import_react_ui2 = require("@dxos/react-ui");
|
|
52
50
|
var import_react_ui_form = require("@dxos/react-ui-form");
|
|
53
51
|
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
|
54
|
-
var
|
|
52
|
+
var import_react5 = __toESM(require("react"));
|
|
53
|
+
var import_app_framework3 = require("@dxos/app-framework");
|
|
54
|
+
var StatusBarText = /* @__PURE__ */ (0, import_react.forwardRef)(({ classNames, children }, forwardedRef) => /* @__PURE__ */ import_react.default.createElement("span", {
|
|
55
55
|
className: (0, import_react_ui_theme.mx)(classNames),
|
|
56
56
|
ref: forwardedRef
|
|
57
57
|
}, children));
|
|
58
|
-
var StatusBarButton = /* @__PURE__ */ (0,
|
|
58
|
+
var StatusBarButton = /* @__PURE__ */ (0, import_react.forwardRef)(({ classNames, children, asChild, ...props }, forwardedRef) => {
|
|
59
59
|
const classes = (0, import_react_ui_theme.mx)("flex items-center gap-2 p-1 px-2 rounded-sm", "select-none cursor-pointer ch-focus-ring", "hover:bg-neutral-75 active:bg-neutral-150 dark:hover:bg-neutral-750 dark:active:bg-neutral-700", classNames);
|
|
60
|
-
return asChild ? /* @__PURE__ */
|
|
60
|
+
return asChild ? /* @__PURE__ */ import_react.default.createElement(import_react_slot.Slot, {
|
|
61
61
|
role: "button",
|
|
62
62
|
ref: forwardedRef,
|
|
63
63
|
className: classes,
|
|
64
64
|
...props
|
|
65
|
-
}, children) : /* @__PURE__ */
|
|
65
|
+
}, children) : /* @__PURE__ */ import_react.default.createElement("button", {
|
|
66
66
|
className: classes,
|
|
67
67
|
ref: forwardedRef,
|
|
68
68
|
...props
|
|
69
69
|
}, children);
|
|
70
70
|
});
|
|
71
|
-
var StatusBarItem = /* @__PURE__ */ (0,
|
|
71
|
+
var StatusBarItem = /* @__PURE__ */ (0, import_react.forwardRef)(({ classNames, children, ...props }, forwardedRef) => /* @__PURE__ */ import_react.default.createElement("div", {
|
|
72
72
|
role: "menuitem",
|
|
73
73
|
className: (0, import_react_ui_theme.mx)("flex items-center gap-2 p-1 px-2 rounded-sm select-none", classNames),
|
|
74
74
|
ref: forwardedRef,
|
|
75
75
|
...props
|
|
76
76
|
}, children));
|
|
77
|
-
var StatusBarContainer = /* @__PURE__ */ (0,
|
|
77
|
+
var StatusBarContainer = /* @__PURE__ */ (0, import_react.forwardRef)(({ classNames, children }, forwardedRef) => {
|
|
78
78
|
const groupAttrs = (0, import_react_tabster.useFocusableGroup)({
|
|
79
79
|
tabBehavior: "limited"
|
|
80
80
|
});
|
|
81
|
-
return /* @__PURE__ */
|
|
81
|
+
return /* @__PURE__ */ import_react.default.createElement("div", {
|
|
82
82
|
role: "menubar",
|
|
83
83
|
tabIndex: 0,
|
|
84
84
|
...groupAttrs,
|
|
@@ -86,12 +86,12 @@ var StatusBarContainer = /* @__PURE__ */ (0, import_react2.forwardRef)(({ classN
|
|
|
86
86
|
ref: forwardedRef
|
|
87
87
|
}, children);
|
|
88
88
|
});
|
|
89
|
-
var StartContent = /* @__PURE__ */ (0,
|
|
89
|
+
var StartContent = /* @__PURE__ */ (0, import_react.forwardRef)(({ classNames, children }, forwardedRef) => /* @__PURE__ */ import_react.default.createElement("div", {
|
|
90
90
|
role: "none",
|
|
91
91
|
className: (0, import_react_ui_theme.mx)("flex-grow flex items-center space-x-2", classNames),
|
|
92
92
|
ref: forwardedRef
|
|
93
93
|
}, children));
|
|
94
|
-
var EndContent = /* @__PURE__ */ (0,
|
|
94
|
+
var EndContent = /* @__PURE__ */ (0, import_react.forwardRef)(({ classNames, children }, forwardedRef) => /* @__PURE__ */ import_react.default.createElement("div", {
|
|
95
95
|
role: "none",
|
|
96
96
|
className: (0, import_react_ui_theme.mx)("flex-grow flex items-center justify-end", classNames),
|
|
97
97
|
ref: forwardedRef
|
|
@@ -104,8 +104,15 @@ var StatusBar = {
|
|
|
104
104
|
StartContent,
|
|
105
105
|
EndContent
|
|
106
106
|
};
|
|
107
|
+
var STATUS_BAR_PLUGIN = "dxos.org/plugin/status-bar";
|
|
108
|
+
var meta = {
|
|
109
|
+
id: STATUS_BAR_PLUGIN,
|
|
110
|
+
name: "Status Bar",
|
|
111
|
+
description: "Display a bar with status and actions.",
|
|
112
|
+
icon: "ph--info--regular"
|
|
113
|
+
};
|
|
107
114
|
var entry = (translation) => ({
|
|
108
|
-
[
|
|
115
|
+
[STATUS_BAR_PLUGIN]: translation
|
|
109
116
|
});
|
|
110
117
|
var mkTranslation = (t) => (key) => t(key);
|
|
111
118
|
var translations = {
|
|
@@ -129,11 +136,11 @@ var initialValues = {
|
|
|
129
136
|
message: ""
|
|
130
137
|
};
|
|
131
138
|
var FeedbackForm = ({ onClose }) => {
|
|
132
|
-
const { t } = (0, import_react_ui2.useTranslation)(
|
|
139
|
+
const { t } = (0, import_react_ui2.useTranslation)(STATUS_BAR_PLUGIN);
|
|
133
140
|
const translation = mkTranslation(t);
|
|
134
|
-
const { dispatchPromise: dispatch } = (0,
|
|
135
|
-
const onSave = (0,
|
|
136
|
-
void dispatch((0,
|
|
141
|
+
const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
|
|
142
|
+
const onSave = (0, import_react4.useCallback)((values) => {
|
|
143
|
+
void dispatch((0, import_app_framework2.createIntent)(import_types.ObservabilityAction.CaptureUserFeedback, values));
|
|
137
144
|
onClose();
|
|
138
145
|
}, [
|
|
139
146
|
dispatch,
|
|
@@ -144,119 +151,128 @@ var FeedbackForm = ({ onClose }) => {
|
|
|
144
151
|
schema: import_types.UserFeedback,
|
|
145
152
|
onSave
|
|
146
153
|
});
|
|
147
|
-
return /* @__PURE__ */
|
|
154
|
+
return /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
148
155
|
role: "form",
|
|
149
156
|
className: "p-3 flex flex-col gap-2"
|
|
150
|
-
}, /* @__PURE__ */
|
|
157
|
+
}, /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
151
158
|
role: "none",
|
|
152
159
|
className: "space-b-1"
|
|
153
|
-
}, /* @__PURE__ */
|
|
160
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, {
|
|
154
161
|
validationValence: getStatus("name").status
|
|
155
|
-
}, /* @__PURE__ */
|
|
162
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, translation("name label")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextInput, {
|
|
156
163
|
classNames: "text-sm",
|
|
157
164
|
placeholder: translation("name placeholder"),
|
|
158
165
|
autoFocus: true,
|
|
159
166
|
...inputProps
|
|
160
|
-
}), /* @__PURE__ */
|
|
167
|
+
}), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.DescriptionAndValidation, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Validation, null, getStatus("name").error)))), /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
161
168
|
role: "none",
|
|
162
169
|
className: "space-b-1"
|
|
163
|
-
}, /* @__PURE__ */
|
|
170
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, {
|
|
164
171
|
validationValence: getStatus("email").status
|
|
165
|
-
}, /* @__PURE__ */
|
|
172
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, translation("email input label")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextInput, {
|
|
166
173
|
classNames: "text-sm",
|
|
167
174
|
placeholder: translation("email input placeholder"),
|
|
168
175
|
...inputProps
|
|
169
|
-
}), /* @__PURE__ */
|
|
176
|
+
}), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.DescriptionAndValidation, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Validation, null, getStatus("email").error)))), /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
170
177
|
role: "none",
|
|
171
178
|
className: "space-b-1"
|
|
172
|
-
}, /* @__PURE__ */
|
|
179
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Root, {
|
|
173
180
|
validationValence: getStatus("message").status
|
|
174
|
-
}, /* @__PURE__ */
|
|
181
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Label, null, translation("feedback text area label")), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.TextArea, {
|
|
175
182
|
classNames: "text-sm",
|
|
176
183
|
rows: 5,
|
|
177
184
|
cols: 30,
|
|
178
185
|
placeholder: translation("feedback text area placeholder"),
|
|
179
186
|
...inputProps
|
|
180
|
-
}), /* @__PURE__ */
|
|
187
|
+
}), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.DescriptionAndValidation, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Validation, null, getStatus("message").error)))), /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
181
188
|
role: "none",
|
|
182
189
|
className: "space-b-2"
|
|
183
|
-
}, /* @__PURE__ */
|
|
190
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Button, {
|
|
184
191
|
type: "submit",
|
|
185
192
|
variant: "primary",
|
|
186
193
|
classNames: "is-full flex gap-2",
|
|
187
194
|
disabled: !canSave,
|
|
188
195
|
onClick: handleSave
|
|
189
|
-
}, /* @__PURE__ */
|
|
196
|
+
}, /* @__PURE__ */ import_react4.default.createElement("span", null, translation("send feedback label")), /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
190
197
|
className: "grow"
|
|
191
|
-
}), /* @__PURE__ */
|
|
198
|
+
}), /* @__PURE__ */ import_react4.default.createElement(import_react3.PaperPlaneTilt, {
|
|
192
199
|
className: (0, import_react_ui_theme2.getSize)(5)
|
|
193
|
-
})), /* @__PURE__ */
|
|
200
|
+
})), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Popover.Close, {
|
|
194
201
|
asChild: true
|
|
195
|
-
}, /* @__PURE__ */
|
|
202
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Button, {
|
|
196
203
|
classNames: "is-full flex gap-2"
|
|
197
|
-
}, /* @__PURE__ */
|
|
204
|
+
}, /* @__PURE__ */ import_react4.default.createElement("span", null, t("cancel label", {
|
|
198
205
|
ns: "os"
|
|
199
|
-
})), /* @__PURE__ */
|
|
206
|
+
})), /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
200
207
|
className: "grow"
|
|
201
|
-
}), /* @__PURE__ */
|
|
208
|
+
}), /* @__PURE__ */ import_react4.default.createElement(import_react3.X, {
|
|
202
209
|
className: (0, import_react_ui_theme2.getSize)(5)
|
|
203
210
|
})))));
|
|
204
211
|
};
|
|
205
212
|
var StatusBarPanel = () => {
|
|
206
|
-
const [open, setOpen] = (0,
|
|
207
|
-
return /* @__PURE__ */
|
|
213
|
+
const [open, setOpen] = (0, import_react2.useState)(false);
|
|
214
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Popover.Root, {
|
|
208
215
|
open,
|
|
209
216
|
onOpenChange: setOpen
|
|
210
|
-
}, /* @__PURE__ */
|
|
217
|
+
}, /* @__PURE__ */ import_react2.default.createElement(StatusBar.Container, null, /* @__PURE__ */ import_react2.default.createElement(StatusBar.EndContent, null, /* @__PURE__ */ import_react2.default.createElement(import_app_framework.Surface, {
|
|
211
218
|
role: "status"
|
|
212
|
-
}), /* @__PURE__ */
|
|
219
|
+
}), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Popover.Trigger, {
|
|
213
220
|
asChild: true
|
|
214
|
-
}, /* @__PURE__ */
|
|
221
|
+
}, /* @__PURE__ */ import_react2.default.createElement(StatusBar.Button, {
|
|
215
222
|
"aria-label": "Give feedback about composer",
|
|
216
223
|
"data-joyride": "welcome/feedback"
|
|
217
|
-
}, /* @__PURE__ */
|
|
224
|
+
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Icon, {
|
|
218
225
|
icon: "ph--paper-plane-tilt--regular",
|
|
219
226
|
size: 4
|
|
220
|
-
}), /* @__PURE__ */
|
|
227
|
+
}), /* @__PURE__ */ import_react2.default.createElement(StatusBar.Text, {
|
|
221
228
|
classNames: "hidden sm:block"
|
|
222
|
-
}, "Feedback"))), /* @__PURE__ */
|
|
229
|
+
}, "Feedback"))), /* @__PURE__ */ import_react2.default.createElement(StatusBar.Button, {
|
|
223
230
|
"aria-label": "Open DXOS Discord",
|
|
224
231
|
asChild: true
|
|
225
|
-
}, /* @__PURE__ */
|
|
232
|
+
}, /* @__PURE__ */ import_react2.default.createElement("a", {
|
|
226
233
|
href: "https://dxos.org/discord",
|
|
227
234
|
target: "_blank",
|
|
228
235
|
rel: "noopener noreferrer"
|
|
229
|
-
}, /* @__PURE__ */
|
|
236
|
+
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Icon, {
|
|
230
237
|
icon: "ph--discord-logo--regular",
|
|
231
238
|
size: 4
|
|
232
|
-
}), /* @__PURE__ */
|
|
239
|
+
}), /* @__PURE__ */ import_react2.default.createElement(StatusBar.Text, {
|
|
233
240
|
classNames: "hidden sm:block"
|
|
234
|
-
}, "Discord"))))), /* @__PURE__ */
|
|
241
|
+
}, "Discord"))))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Popover.Content, {
|
|
235
242
|
classNames: "shadow-lg"
|
|
236
|
-
}, /* @__PURE__ */
|
|
243
|
+
}, /* @__PURE__ */ import_react2.default.createElement(FeedbackForm, {
|
|
237
244
|
onClose: () => setOpen(false)
|
|
238
|
-
}), /* @__PURE__ */
|
|
239
|
-
};
|
|
240
|
-
var StatusBarPlugin = () => {
|
|
241
|
-
return {
|
|
242
|
-
meta: import_chunk_OGG3PMIV.meta_default,
|
|
243
|
-
provides: {
|
|
244
|
-
translations: translations_default,
|
|
245
|
-
surface: {
|
|
246
|
-
definitions: () => (0, import_app_framework.createSurface)({
|
|
247
|
-
id: import_chunk_OGG3PMIV.meta_default.id,
|
|
248
|
-
role: "status-bar",
|
|
249
|
-
component: () => /* @__PURE__ */ import_react.default.createElement(StatusBarPanel, null)
|
|
250
|
-
})
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
};
|
|
245
|
+
}), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Popover.Arrow, null)));
|
|
254
246
|
};
|
|
255
|
-
var
|
|
247
|
+
var StatusBarPlugin = () => (0, import_app_framework3.definePlugin)(meta, [
|
|
248
|
+
(0, import_app_framework3.defineModule)({
|
|
249
|
+
id: `${meta.id}/module/translations`,
|
|
250
|
+
activatesOn: import_app_framework3.Events.SetupTranslations,
|
|
251
|
+
activate: () => (0, import_app_framework3.contributes)(import_app_framework3.Capabilities.Translations, translations_default)
|
|
252
|
+
}),
|
|
253
|
+
(0, import_app_framework3.defineModule)({
|
|
254
|
+
id: `${meta.id}/module/react-surface`,
|
|
255
|
+
activatesOn: import_app_framework3.Events.Startup,
|
|
256
|
+
activate: () => (0, import_app_framework3.contributes)(import_app_framework3.Capabilities.ReactSurface, [
|
|
257
|
+
(0, import_app_framework3.createSurface)({
|
|
258
|
+
id: meta.id,
|
|
259
|
+
role: "status-bar",
|
|
260
|
+
component: () => /* @__PURE__ */ import_react5.default.createElement(StatusBarPanel, null)
|
|
261
|
+
}),
|
|
262
|
+
(0, import_app_framework3.createSurface)({
|
|
263
|
+
id: meta.id,
|
|
264
|
+
role: "status-bar--sidebar-footer",
|
|
265
|
+
component: () => /* @__PURE__ */ import_react5.default.createElement(StatusBarPanel, null)
|
|
266
|
+
})
|
|
267
|
+
])
|
|
268
|
+
})
|
|
269
|
+
]);
|
|
256
270
|
// Annotate the CommonJS export names for ESM import in node:
|
|
257
271
|
0 && (module.exports = {
|
|
272
|
+
STATUS_BAR_PLUGIN,
|
|
258
273
|
StatusBar,
|
|
259
274
|
StatusBarPanel,
|
|
260
|
-
StatusBarPlugin
|
|
275
|
+
StatusBarPlugin,
|
|
276
|
+
meta
|
|
261
277
|
});
|
|
262
278
|
//# sourceMappingURL=index.cjs.map
|