@protobase/ui 0.19.9 → 0.19.11
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/app/app.js +4 -4
- package/dist/app/create/create-offered.js +9 -0
- package/dist/app/create/create-page.js +3 -3
- package/dist/app/create/create-record-form.js +26 -62
- package/dist/app/create/create-route.js +29 -0
- package/dist/app/create/form.d.ts +30 -0
- package/dist/app/create/form.js +72 -0
- package/dist/app/custom-section.js +1 -1
- package/dist/app/displays/map-display.js +1 -1
- package/dist/app/displays/record-card.js +3 -3
- package/dist/app/displays/record-link.js +1 -1
- package/dist/app/displays/use-map-records.js +2 -2
- package/dist/app/embedded-list/embedded-columns.js +2 -2
- package/dist/app/embedded-list/embedded-list.js +5 -5
- package/dist/app/embedded-list/use-embedded-rows.js +2 -2
- package/dist/app/field-editor.js +7 -7
- package/dist/app/gallery/gallery-section.js +1 -1
- package/dist/app/gallery/photo-details.js +2 -2
- package/dist/app/list-page.js +18 -17
- package/dist/app/pages/blocks/card-row.js +2 -2
- package/dist/app/pages/blocks/field.js +2 -2
- package/dist/app/pages/blocks/link.js +1 -1
- package/dist/app/pages/blocks/modal-form.js +6 -6
- package/dist/app/pages/blocks/progress.js +1 -1
- package/dist/app/pages/blocks/record-card.js +2 -2
- package/dist/app/pages/blocks/record-row.js +1 -1
- package/dist/app/pages/blocks/show.js +2 -2
- package/dist/app/pages/blocks/stat.js +3 -3
- package/dist/app/pages/blocks/table.js +1 -1
- package/dist/app/pages/field-value.js +3 -3
- package/dist/app/pages/record-actions.js +2 -2
- package/dist/app/pages/use-run-action.js +2 -2
- package/dist/app/record-page.js +8 -8
- package/dist/app/record-row/record-row-body.js +2 -2
- package/dist/app/record-row/saved-record-row.js +1 -1
- package/dist/app/related-section.js +1 -1
- package/dist/app/runtime/runtime-status.js +30 -6
- package/dist/app/runtime/runtime-update-dialog.js +66 -0
- package/dist/app/runtime/runtime-update.js +10 -46
- package/dist/app/runtime/use-runtime-status.js +3 -5
- package/dist/app/searches/saved-search-rows.js +1 -1
- package/dist/app/searches/saved-search-section.js +2 -2
- package/dist/app/searches/saved-searches.js +2 -2
- package/dist/app/searches/search-controls.js +1 -1
- package/dist/app/searches/search-name-dialog.js +1 -1
- package/dist/app/searches/update-search-dialog.js +2 -2
- package/dist/app/searches/use-filter-chips.js +1 -1
- package/dist/app/searches/use-save-search.js +2 -2
- package/dist/app/searches/use-saved-searches.js +1 -1
- package/dist/app/searches/use-search-row.js +1 -1
- package/dist/app/sensitive-field.js +1 -1
- package/dist/app/use-app-address.js +1 -1
- package/dist/app/value-badge.js +1 -1
- package/dist/auth/sign-in-prompt.js +1 -1
- package/dist/data-grid/cells.js +1 -1
- package/dist/format/date.js +7 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +10 -2
- package/dist/live/columns-from-model.js +1 -1
- package/dist/live/grid-loader.js +1 -1
- package/dist/live/use-filter-config.js +1 -1
- package/dist/markdown/markdown-editor.js +1 -1
- package/dist/package.js +1 -1
- package/dist/primitives/choices.d.ts +22 -0
- package/dist/primitives/choices.js +33 -0
- package/dist/primitives/dialog.d.ts +15 -0
- package/dist/primitives/menu-select.d.ts +14 -0
- package/dist/primitives/segmented.d.ts +23 -0
- package/dist/primitives/textarea.d.ts +9 -0
- package/dist/record-view/field.d.ts +27 -0
- package/dist/record-view/section.d.ts +10 -0
- package/dist/shell/assets/app-DQRL4UH0.js +69 -0
- package/dist/shell/assets/{index-d-04ZYJt.js → index-C15EeI8X.js} +1 -1
- package/dist/shell/assets/{index-DLVcUwwG.css → index-DxV5Rp_F.css} +1 -1
- package/dist/shell/assets/{maplibre-BACAMuVa.js → maplibre-CqK5gKEr.js} +2 -2
- package/dist/shell/assets/{markdown-content-CHU2BTHn.js → markdown-content-DS62HyvW.js} +1 -1
- package/dist/shell/assets/{record-map-B6USTMW8.js → record-map-Cp9MkzTk.js} +1 -1
- package/dist/shell/assets/{records-map-DVwLP4Ey.js → records-map-BQm4s9Cw.js} +1 -1
- package/dist/shell/assets/shared-protobase-ui-Cqe5I8UQ.js +1 -0
- package/dist/shell/index.html +4 -4
- package/dist/shell/protobase.shell.json +1 -1
- package/package.json +4 -4
- package/dist/shell/assets/app-CB1ojooV.js +0 -69
- package/dist/shell/assets/shared-protobase-ui-BEvX9eTO.js +0 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { LogoMark } from "./app-shell/logo.js";
|
|
2
|
+
import { Segmented } from "./primitives/segmented.js";
|
|
2
3
|
import { Input } from "./primitives/input.js";
|
|
3
4
|
import { Spinner } from "./primitives/spinner.js";
|
|
4
5
|
import { Button, buttonClass } from "./primitives/button.js";
|
|
6
|
+
import { Dialog } from "./primitives/dialog.js";
|
|
5
7
|
import { OtpInput } from "./primitives/otp-input.js";
|
|
6
8
|
import { ApiProvider, useClient, useResourceClient } from "./data/api-provider.js";
|
|
7
9
|
import { AuthLayout } from "./auth/auth-layout.js";
|
|
@@ -30,14 +32,20 @@ import { AssistantDock } from "./assistant-dock/assistant-dock.js";
|
|
|
30
32
|
import { useAssistant } from "./assistant-dock/use-assistant.js";
|
|
31
33
|
import { useAssistantClient } from "./assistant-dock/use-assistant-client.js";
|
|
32
34
|
import { useMeta } from "./data/use-meta.js";
|
|
35
|
+
import { useLayoutRecord } from "./app/pages/record-scope.js";
|
|
33
36
|
import { AppLink, useAppAddress } from "./app/use-app-address.js";
|
|
37
|
+
import { Field } from "./record-view/field.js";
|
|
38
|
+
import { Section } from "./record-view/section.js";
|
|
39
|
+
import { Textarea } from "./primitives/textarea.js";
|
|
34
40
|
import { ResponsiveDialog } from "./primitives/responsive-dialog.js";
|
|
35
41
|
import { SignInPrompt } from "./auth/sign-in-prompt.js";
|
|
36
42
|
import { useListDisplay } from "./app/displays/display-context.js";
|
|
43
|
+
import { MenuSelect } from "./primitives/menu-select.js";
|
|
44
|
+
import { Form } from "./app/create/form.js";
|
|
37
45
|
import { useFacets, useHistogram, useSeries } from "./data/use-aggregates.js";
|
|
38
|
-
import { useLayoutRecord } from "./app/pages/record-scope.js";
|
|
39
46
|
import { useList } from "./data/use-list.js";
|
|
40
47
|
import { isConflict, useUpdateRecord } from "./data/use-update-record.js";
|
|
41
48
|
import { App } from "./app/app.js";
|
|
42
49
|
import { RecordLink } from "./app/displays/record-link.js";
|
|
43
|
-
|
|
50
|
+
import { Choices } from "./primitives/choices.js";
|
|
51
|
+
export { ActionCard, ApiProvider, App, AppLink, AssistantDock, AuthLayout, Button, ChatMessage, ChatThread, Choices, CodeForm, CompactTable, Composer, Dialog, DiffView, Field, FieldList, Form, Input, LogoMark, MenuSelect, OtpInput, PartView, RecordLink, ResendCodeButton, ResponsiveDialog, Section, Segmented, SidePanel, SignInPrompt, Spinner, StepList, Textarea, buttonClass, definePlugin, defineUi, diffStats, isConflict, mergeUi, parseDiff, pluginApi, protobaseVersion, uiFromModule, useApiToken, useAppAddress, useAssistant, useAssistantClient, useBackendData, useClient, useFacets, useHistogram, useLayoutRecord, useList, useListDisplay, useMeta, usePlugin, useRecord, useResourceClient, useSeries, useUpdateRecord };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { humanize } from "./naming.js";
|
|
2
|
-
import { isMarkdown } from "../markdown/markdown-hint.js";
|
|
3
2
|
import { markdownExcerpt } from "../markdown/markdown-excerpt.js";
|
|
3
|
+
import { isMarkdown } from "../markdown/markdown-hint.js";
|
|
4
4
|
import { enumLabel } from "@protobase/schema";
|
|
5
5
|
//#region src/live/columns-from-model.ts
|
|
6
6
|
const tones = {
|
package/dist/live/grid-loader.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { keys } from "../data/query-keys.js";
|
|
2
2
|
import { recordId } from "./model-helpers.js";
|
|
3
|
-
import { listLabels, withLabels } from "./relation-labels.js";
|
|
4
3
|
import { listPhotos, withPhotos } from "./row-photos.js";
|
|
4
|
+
import { listLabels, withLabels } from "./relation-labels.js";
|
|
5
5
|
//#region src/live/grid-loader.ts
|
|
6
6
|
const exactBelow = 5e3;
|
|
7
7
|
/**
|
|
@@ -5,9 +5,9 @@ import { humanize } from "./naming.js";
|
|
|
5
5
|
import { fetchLabels } from "./relation-labels.js";
|
|
6
6
|
import { setRange } from "../filter-panel/filter-state.js";
|
|
7
7
|
import { stateToText } from "./filter-string.js";
|
|
8
|
+
import { rangeFormat, rangeHistogram, widgetFields } from "./view-fields.js";
|
|
8
9
|
import { labelKeys, matchOptions } from "./reference-options.js";
|
|
9
10
|
import { useReferenceSearch } from "./use-reference-search.js";
|
|
10
|
-
import { rangeFormat, rangeHistogram, widgetFields } from "./view-fields.js";
|
|
11
11
|
import { useQueries, useQueryClient } from "@tanstack/react-query";
|
|
12
12
|
import { enumLabel } from "@protobase/schema";
|
|
13
13
|
//#region src/live/use-filter-config.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Segmented } from "../primitives/segmented.js";
|
|
2
|
-
import { Textarea } from "../primitives/textarea.js";
|
|
3
2
|
import { Markdown } from "./markdown.js";
|
|
3
|
+
import { Textarea } from "../primitives/textarea.js";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
//#region src/markdown/markdown-editor.tsx
|
package/dist/package.js
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
//#region src/primitives/choices.d.ts
|
|
3
|
+
export type ChoiceOption<T extends string> = {
|
|
4
|
+
value: T;
|
|
5
|
+
label: string;
|
|
6
|
+
description?: ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* `name` groups the radio buttons, so that the arrow keys move between them; `label` names the group for screen
|
|
11
|
+
* readers. A disabled option shows and cannot be chosen.
|
|
12
|
+
*/
|
|
13
|
+
export type ChoicesProps<T extends string> = {
|
|
14
|
+
name: string;
|
|
15
|
+
label?: string;
|
|
16
|
+
options: Array<ChoiceOption<T>>;
|
|
17
|
+
value: T | undefined;
|
|
18
|
+
onChange: (value: T) => void;
|
|
19
|
+
};
|
|
20
|
+
/** One of a few options, each a card of its own row with a line that says what it means; the chosen one is outlined. */
|
|
21
|
+
export declare const Choices: <T extends string>({ name, label, options, value, onChange }: ChoicesProps<T>) => import("react").JSX.Element;
|
|
22
|
+
//#endregion
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
//#region src/primitives/choices.tsx
|
|
4
|
+
/** One of a few options, each a card of its own row with a line that says what it means; the chosen one is outlined. */
|
|
5
|
+
const Choices = ({ name, label, options, value, onChange }) => /* @__PURE__ */ jsx("div", {
|
|
6
|
+
role: "radiogroup",
|
|
7
|
+
"aria-label": label,
|
|
8
|
+
className: "flex flex-col gap-2",
|
|
9
|
+
children: options.map((option) => /* @__PURE__ */ jsxs("label", {
|
|
10
|
+
className: cn("block rounded-lg border p-3 transition-colors has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary", option.disabled ? "cursor-default bg-background opacity-60" : option.value === value ? "cursor-pointer border-primary bg-primary-soft" : "cursor-pointer bg-background hover:bg-surface"),
|
|
11
|
+
children: [
|
|
12
|
+
/* @__PURE__ */ jsx("input", {
|
|
13
|
+
type: "radio",
|
|
14
|
+
name,
|
|
15
|
+
value: option.value,
|
|
16
|
+
checked: option.value === value,
|
|
17
|
+
disabled: option.disabled,
|
|
18
|
+
onChange: () => onChange(option.value),
|
|
19
|
+
className: "sr-only"
|
|
20
|
+
}),
|
|
21
|
+
/* @__PURE__ */ jsx("span", {
|
|
22
|
+
className: cn("block font-medium", option.value === value && "text-primary-text"),
|
|
23
|
+
children: option.label
|
|
24
|
+
}),
|
|
25
|
+
option.description && /* @__PURE__ */ jsx("span", {
|
|
26
|
+
className: "mt-0.5 block text-xs leading-snug text-muted-foreground",
|
|
27
|
+
children: option.description
|
|
28
|
+
})
|
|
29
|
+
]
|
|
30
|
+
}, option.value))
|
|
31
|
+
});
|
|
32
|
+
//#endregion
|
|
33
|
+
export { Choices };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
//#region src/primitives/dialog.d.ts
|
|
3
|
+
export type DialogProps = {
|
|
4
|
+
title: string;
|
|
5
|
+
description?: ReactNode;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
/** Buttons, rendered right-aligned. */
|
|
8
|
+
actions: ReactNode;
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
/** Room for a row of cards or a table in the body, instead of a short question. */
|
|
11
|
+
wide?: boolean;
|
|
12
|
+
};
|
|
13
|
+
/** A modal with a title, optional body and action buttons. Closes on Escape and on a click outside. */
|
|
14
|
+
export declare const Dialog: ({ title, description, onClose, actions, children, wide }: DialogProps) => import("react").JSX.Element;
|
|
15
|
+
//#endregion
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SegmentedOption } from "./segmented.js";
|
|
2
|
+
//#region src/primitives/menu-select.d.ts
|
|
3
|
+
export type MenuSelectProps<T extends string> = {
|
|
4
|
+
value: T;
|
|
5
|
+
options: Array<SegmentedOption<T>>;
|
|
6
|
+
onChange: (value: T) => void;
|
|
7
|
+
label: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* The choices of a Segmented switch in a menu, for a row without room for every option: a button with the chosen
|
|
11
|
+
* option's icon and label, opening the options under its right edge.
|
|
12
|
+
*/
|
|
13
|
+
export declare const MenuSelect: <T extends string>({ value, options, onChange, label }: MenuSelectProps<T>) => import("react").JSX.Element;
|
|
14
|
+
//#endregion
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ComponentType } from "react";
|
|
2
|
+
//#region src/primitives/segmented.d.ts
|
|
3
|
+
export type SegmentedOption<T extends string> = {
|
|
4
|
+
value: T;
|
|
5
|
+
label: string;
|
|
6
|
+
icon?: ComponentType<{
|
|
7
|
+
className?: string;
|
|
8
|
+
}>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* `md` matches a medium Button, for a switch that sits among buttons. `iconOnly` draws each option as its icon alone,
|
|
12
|
+
* its label the button's name, for a row without room for the words.
|
|
13
|
+
*/
|
|
14
|
+
export type SegmentedProps<T extends string> = {
|
|
15
|
+
value: T;
|
|
16
|
+
options: Array<SegmentedOption<T>>;
|
|
17
|
+
onChange: (value: T) => void;
|
|
18
|
+
label?: string;
|
|
19
|
+
size?: 'sm' | 'md';
|
|
20
|
+
iconOnly?: boolean;
|
|
21
|
+
};
|
|
22
|
+
export declare const Segmented: <T extends string>({ value, options, onChange, label, size, iconOnly }: SegmentedProps<T>) => import("react").JSX.Element;
|
|
23
|
+
//#endregion
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TextareaHTMLAttributes } from "react";
|
|
2
|
+
//#region src/primitives/textarea.d.ts
|
|
3
|
+
export type TextareaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'> & {
|
|
4
|
+
value: string;
|
|
5
|
+
invalid?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/** A text box of several lines that grows with its text instead of scrolling inside. */
|
|
8
|
+
export declare const Textarea: ({ invalid, className, rows, value, ...rest }: TextareaProps) => import("react").JSX.Element;
|
|
9
|
+
//#endregion
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
//#region src/record-view/field.d.ts
|
|
3
|
+
export type FieldConflict = {
|
|
4
|
+
user: {
|
|
5
|
+
name: string;
|
|
6
|
+
initials: string;
|
|
7
|
+
hue: number;
|
|
8
|
+
};
|
|
9
|
+
ago: string;
|
|
10
|
+
theirValue: string;
|
|
11
|
+
onKeepMine: () => void;
|
|
12
|
+
onUseTheirs: () => void;
|
|
13
|
+
};
|
|
14
|
+
export type FieldProps = {
|
|
15
|
+
label: string;
|
|
16
|
+
/** Marks the label with an asterisk. */
|
|
17
|
+
required?: boolean;
|
|
18
|
+
help?: string;
|
|
19
|
+
example?: string;
|
|
20
|
+
error?: string;
|
|
21
|
+
conflict?: FieldConflict;
|
|
22
|
+
/** Takes the whole row of a grid of two columns, as a text of several lines does. */
|
|
23
|
+
wide?: boolean;
|
|
24
|
+
children: ReactNode;
|
|
25
|
+
};
|
|
26
|
+
export declare const Field: ({ label, required, help, example, error, conflict, wide, children }: FieldProps) => import("react").JSX.Element;
|
|
27
|
+
//#endregion
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
//#region src/record-view/section.d.ts
|
|
3
|
+
/** A titled part of the record page; `actions` sit at the end of the title's line. */
|
|
4
|
+
export declare const Section: ({ title, help, actions, children }: {
|
|
5
|
+
title: string;
|
|
6
|
+
help?: string;
|
|
7
|
+
actions?: ReactNode;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}) => import("react").JSX.Element;
|
|
10
|
+
//#endregion
|