@revolist/ui 4.0.2-rc → 4.0.3-rc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +345 -263
- package/_chunks/{calendar-CpaUK7w1.js → calendar-xpZ0v3xf.js} +39 -29
- package/_chunks/{chart-frame-BC99KjGa.js → chart-frame-Cmc7xU1i.js} +16 -13
- package/_chunks/{choice-chips-Cs4D-3nH.js → choice-chips-CHQTUdLs.js} +10 -10
- package/_chunks/clock-BOhPNlW3.js +4 -0
- package/_chunks/{color-palette-BBMFmUNA.js → color-palette-D8vyPfld.js} +1 -1
- package/_chunks/{color-picker-D90Jg-M8.js → color-picker-CudqPYZo.js} +10 -10
- package/_chunks/{component-YDcfoOLz.js → component-C_T2VN5u.js} +182 -178
- package/_chunks/{component-metadata-BENbgTjU.js → component-metadata-BMOOmqx5.js} +0 -4
- package/_chunks/control-AHKXD5Eu.js +93 -0
- package/_chunks/{control-tooltip-ztgmsG7H.js → control-tooltip-uscKfAnV.js} +15 -15
- package/_chunks/{controls-DIum-E66.js → controls-DsNi8V8I.js} +144 -129
- package/_chunks/{date-control-BJSzu79z.js → date-control-DrVFX13g.js} +1 -1
- package/_chunks/{date-time-BxPJusp9.js → date-time-qIhp5vaX.js} +143 -145
- package/_chunks/{delete-button-Bblyah10.js → delete-button-CW9vjLnk.js} +6 -6
- package/_chunks/{dialog.parts-DBqo3Qwb.js → dialog.parts-CKGkC5zP.js} +20 -20
- package/_chunks/{duration-87U2EoMS.js → duration-CL68Em0o.js} +16 -15
- package/_chunks/{editor-popup-D3JdS8l3.js → editor-popup-WDdtVDNA.js} +5 -5
- package/_chunks/field-context-D57PnBbH.js +5 -0
- package/_chunks/{framework-mount-C-Zwm44H.js → framework-mount--RTLIqE-.js} +1 -1
- package/_chunks/history-controls-B3u3INEK.js +27 -0
- package/_chunks/mount-DQ1cpppK.js +257 -0
- package/_chunks/native-control-C_yok8_-.js +605 -0
- package/_chunks/{number-input-BeIadZuL.js → number-input-BKwA5FnM.js} +2 -2
- package/_chunks/{picker-DpP7iQLA.js → picker-h1P5RUgp.js} +2 -2
- package/_chunks/popup-CT2uD3go.js +367 -0
- package/_chunks/{rating-choice-Ca8ZBty3.js → rating-choice-DZgmaic0.js} +1 -1
- package/_chunks/render-m5eMMwFR.js +83 -0
- package/_chunks/{reorder-list-Cc3KmfAN.js → reorder-list-CSlqAGHw.js} +1 -1
- package/_chunks/request-trail-DSlFix6i.js +618 -0
- package/_chunks/rich-text-CH7gIqOS.js +636 -0
- package/_chunks/rotate-right-Iha5ScJ1.js +4 -0
- package/_form.scss +1 -1
- package/ai/_chat.scss +195 -0
- package/ai/_style.scss +105 -34
- package/ai/chat.d.ts +63 -0
- package/ai/components.d.ts +19 -3
- package/ai/index.d.ts +2 -0
- package/ai/index.js +3 -3
- package/ai/mount.d.ts +30 -1
- package/ai/prompt-history.d.ts +13 -0
- package/ai/transcript.d.ts +25 -0
- package/ai/translations.d.ts +1 -1
- package/angular/angular.js +0 -3
- package/assignee/index.js +34 -35
- package/buttons/delete-button.d.ts +2 -1
- package/buttons/delete-button.js +1 -1
- package/buttons/remove-button.js +1 -1
- package/buttons/svg-button.d.ts +1 -0
- package/buttons/svg-button.js +5 -5
- package/calendar/_calendar.scss +7 -2
- package/calendar/calendar.js +1 -1
- package/calendar/index.js +2 -2
- package/choice-chips/index.js +1 -1
- package/color-palette/color-palette.js +1 -1
- package/color-palette/color-picker.js +2 -2
- package/component-catalog.d.ts +16 -5
- package/control-attributes.js +7 -7
- package/controls.d.ts +8 -6
- package/controls.js +3 -3
- package/core/editor-popup.js +1 -1
- package/date-time/index.js +1 -1
- package/date-time/style.scss +4 -4
- package/dialog/dialog.dom.js +8 -8
- package/dialog/dialog.parts.js +1 -1
- package/distribution-chart/area-chart.js +1 -1
- package/distribution-chart/bar-chart.d.ts +5 -2
- package/distribution-chart/bar-chart.js +7 -3
- package/distribution-chart/chart-frame.d.ts +2 -1
- package/distribution-chart/line-chart.js +1 -1
- package/dropdown/content.d.ts +2 -1
- package/dropdown/content.js +1 -142
- package/dropdown/control.d.ts +14 -0
- package/dropdown/control.js +1 -0
- package/dropdown/control.view.d.ts +6 -0
- package/dropdown/dropdown.types.d.ts +4 -0
- package/dropdown/editor-dropdown.style.scss +37 -9
- package/dropdown/index.d.ts +1 -1
- package/dropdown/index.js +3 -4
- package/dropdown/lookup-field.js +1 -1
- package/dropdown/popup.js +1 -141
- package/duration/index.js +1 -1
- package/duration/style.scss +1 -1
- package/editor-actions.js +1 -1
- package/field-configurator.js +6 -6
- package/fieldset.d.ts +3 -0
- package/filter/filters/slider/single.js +1 -1
- package/filter-badge.js +1 -1
- package/filter-controls.js +7 -7
- package/form-controls/field-context.d.ts +5 -0
- package/form-controls/index.js +7 -12
- package/form-controls/index.view.d.ts +2 -4
- package/form-controls/presentation.js +51 -43
- package/formatting/index.js +25 -21
- package/framework.js +215 -207
- package/history-controls.d.ts +14 -0
- package/history-controls.js +1 -0
- package/masked-input/index.js +1 -1
- package/native-control.d.ts +6 -4
- package/native-control.js +3 -26
- package/native-styles.css +1 -1
- package/native.js +31 -30
- package/number-input/index.js +1 -1
- package/package.json +18 -13
- package/pagination.d.ts +3 -0
- package/pagination.js +43 -33
- package/pdf-viewer/index.js +1 -1
- package/pdf-viewer/style.scss +3 -4
- package/preact.d.ts +2 -0
- package/preact.js +62 -62
- package/rating-choice.js +1 -1
- package/react-control.d.ts +0 -1
- package/react-control.js +2 -2
- package/react.d.ts +13 -3
- package/react.js +71 -88
- package/reorder-list.js +1 -1
- package/resource-picker/resource-picker-popup.js +1 -1
- package/resource-picker/resource-picker.js +4 -4
- package/resource-picker/resource-picker.scss +6 -3
- package/rich-text/engine.d.ts +16 -19
- package/rich-text/index.d.ts +7 -7
- package/rich-text/index.js +1 -1
- package/rich-text/model.d.ts +4 -3
- package/rich-text/render-model.d.ts +4 -5
- package/rich-text/style.scss +3 -12
- package/rich-text/toolbar.d.ts +6 -6
- package/rich-text/translations.d.ts +3 -15
- package/select.d.ts +20 -0
- package/select.js +1 -0
- package/status-feedback/exit-snapshot.js +4 -4
- package/status-feedback/index.js +2 -2
- package/status-feedback/popover.js +10 -10
- package/status-feedback/render.js +3 -44
- package/status-feedback/status-feedback.scss +7 -0
- package/status-feedback/types.d.ts +4 -0
- package/status-feedback/use-auto-dismiss.d.ts +3 -0
- package/styles/_compositions.scss +3 -1
- package/styles/_control.scss +12 -4
- package/styles/_primitives.scss +9 -8
- package/styles.css +1 -1
- package/surfaces.js +45 -45
- package/svelte/UiComponent.server.js +1 -48
- package/svelte/UiComponent.svelte +0 -21
- package/svelte.js +33 -68
- package/time-grid.js +1 -1
- package/timeline-track/component.d.ts +5 -1
- package/timeline-track/index.js +71 -54
- package/timeline-track/model.d.ts +9 -0
- package/timeline-track/model.js +10 -1
- package/ui.css +1 -1
- package/vue.d.ts +24 -5
- package/vue.js +140 -164
- package/_chunks/compat.module-DDB2pm9O.js +0 -229
- package/_chunks/dropdown-voWqmwAe.js +0 -357
- package/_chunks/mount-DZe_6VtR.js +0 -90
- package/_chunks/request-trail-IdNiFvKH.js +0 -347
- package/_chunks/rich-text-BzI1DyfF.js +0 -477
- package/react-native-select.d.ts +0 -6
- package/rich-text/syntax.d.ts +0 -2
- package/vue-native-select.d.ts +0 -9
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as e, i as t, n, o as r, t as i } from "../_chunks/hooks.module-CG3gN83z.js";
|
|
2
2
|
import { t as a } from "../_chunks/jsxRuntime.module-F6UFnpT-.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { t as o } from "../_chunks/chevron-down-GbplLa6s.js";
|
|
4
|
+
import { createControlId as s } from "../core/control-id.js";
|
|
5
5
|
import { t as ee } from "../_chunks/xmark-DD_PBvZI.js";
|
|
6
6
|
import { SearchInput as c } from "../search-input/index.js";
|
|
7
7
|
import { resourcePickerClasses as l, resourcePickerDataAttribute as u, resourcePickerIdKey as d } from "./resource-picker.utils.js";
|
|
@@ -10,7 +10,7 @@ import { ResourcePickerOption as p } from "./resource-picker-option.js";
|
|
|
10
10
|
import { ResourcePickerPopup as m } from "./resource-picker-popup.js";
|
|
11
11
|
//#region src/resource-picker/resource-picker.tsx
|
|
12
12
|
function h({ resources: h, selectedResourceIds: v, text: y, onChange: b, classNames: x, disabled: S = !1, readOnly: C = !1, presentation: w = "inline", multiple: T = !0, preserveOrder: E = !1, unassigned: D, resourceDataAttribute: O, isResourceDisabled: k, getAvatarColor: A }) {
|
|
13
|
-
let j = i(null), M = i(null), N = i(null), P = i(null), F = i(!1), [I] = t(() =>
|
|
13
|
+
let j = i(null), M = i(null), N = i(null), P = i(null), F = i(!1), [I] = t(() => s("rv-resource-list")), L = `${I}-popup`, R = w === "dropdown", [z, B] = t(!1), [V, H] = t(""), [U, W] = t(0), G = r(() => {
|
|
14
14
|
B(!1), H("");
|
|
15
15
|
}, []), K = new Set(v.map(d)), q = n(() => E ? [...h] : [...h].sort((e, t) => e.name.localeCompare(t.name, void 0, {
|
|
16
16
|
numeric: !0,
|
|
@@ -178,7 +178,7 @@ function h({ resources: h, selectedResourceIds: v, text: y, onChange: b, classNa
|
|
|
178
178
|
}), /* @__PURE__ */ a("span", {
|
|
179
179
|
class: "rv-resource-picker__chevron",
|
|
180
180
|
"aria-hidden": "true",
|
|
181
|
-
dangerouslySetInnerHTML: { __html:
|
|
181
|
+
dangerouslySetInnerHTML: { __html: o }
|
|
182
182
|
})]
|
|
183
183
|
}) : null, R ? z && Q ? /* @__PURE__ */ a(m, {
|
|
184
184
|
triggerRef: M,
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
--rv-control-border: var(--rv-resource-picker-border, var(--rv-ui-border));
|
|
19
19
|
}
|
|
20
20
|
.rv-resource-picker__search-control input {
|
|
21
|
-
min-height: var(--rv-resource-picker-search-height,
|
|
21
|
+
min-height: var(--rv-resource-picker-search-height, var(--rv-control-height, 32px));
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
.rv-resource-picker__list {
|
|
@@ -133,13 +133,16 @@
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
.rv-resource-picker__control {
|
|
136
|
+
font-family: inherit;
|
|
137
|
+
font-size: var(--rv-control-font-size, 0.875rem);
|
|
138
|
+
line-height: 1;
|
|
136
139
|
display: flex;
|
|
137
140
|
box-sizing: border-box;
|
|
138
141
|
width: 100%;
|
|
139
|
-
min-height: var(--rv-resource-picker-control-height,
|
|
142
|
+
min-height: var(--rv-resource-picker-control-height, var(--rv-control-height, 32px));
|
|
140
143
|
align-items: center;
|
|
141
144
|
gap: 8px;
|
|
142
|
-
padding: var(--rv-resource-picker-control-padding,
|
|
145
|
+
padding: var(--rv-resource-picker-control-padding, 1px 10px);
|
|
143
146
|
border: 1px solid var(
|
|
144
147
|
--rv-resource-picker-border,
|
|
145
148
|
color-mix(in srgb, currentColor 14%, transparent)
|
package/rich-text/engine.d.ts
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
export type
|
|
3
|
-
export interface
|
|
4
|
-
formats:
|
|
5
|
-
block:
|
|
1
|
+
export type HtmlFormat = 'bold' | 'italic' | 'strikethrough' | 'code';
|
|
2
|
+
export type HtmlBlock = 'paragraph' | 'h1' | 'h2' | 'quote' | 'code' | 'bullet' | 'ordered';
|
|
3
|
+
export interface HtmlSelection {
|
|
4
|
+
formats: HtmlFormat[];
|
|
5
|
+
block: HtmlBlock | null;
|
|
6
6
|
link: boolean;
|
|
7
7
|
}
|
|
8
|
-
export declare const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
format(mark:
|
|
13
|
-
block(value:
|
|
14
|
-
captureSelection()
|
|
15
|
-
link(value: string)
|
|
16
|
-
destroy()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export declare function createMarkdownEngine(root: HTMLElement, markdown: string, onChange: (value: string, unsafe: boolean) => void, onSelectionChange?: (selection: MarkdownSelection) => void): MarkdownEngine;
|
|
20
|
-
/** Parse through Lexical so escaped/entity-encoded Markdown link URLs are checked after decoding. */
|
|
21
|
-
export declare function hasUnsafeMarkdownLinks(markdown: string): boolean;
|
|
8
|
+
export declare const emptyHtmlSelection: HtmlSelection;
|
|
9
|
+
/** Native Range editing and bounded local history. No browser execCommand or editor library. */
|
|
10
|
+
export declare function createHtmlEngine(root: HTMLElement, html: string, onChange: (html: string) => void, onSelectionChange?: (selection: HtmlSelection) => void): {
|
|
11
|
+
setHtml: (value: string) => void;
|
|
12
|
+
format: (mark: HtmlFormat) => void;
|
|
13
|
+
block: (value: HtmlBlock) => void;
|
|
14
|
+
captureSelection: () => void;
|
|
15
|
+
link: (value: string) => boolean;
|
|
16
|
+
destroy: () => void;
|
|
17
|
+
};
|
|
18
|
+
export type HtmlEngine = ReturnType<typeof createHtmlEngine>;
|
package/rich-text/index.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { EditorActionText, EditorCommitOptions } from '../editor-actions';
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
4
|
-
export interface
|
|
2
|
+
import { HtmlEditorText } from './translations';
|
|
3
|
+
export { defaultHtmlEditorText, type HtmlEditorText } from './translations';
|
|
4
|
+
export interface HtmlEditorProps extends EditorCommitOptions {
|
|
5
5
|
value: string;
|
|
6
6
|
onApply: (value: string) => void;
|
|
7
7
|
onCancel: () => void;
|
|
8
8
|
required?: boolean;
|
|
9
9
|
maxLength?: number;
|
|
10
|
-
text?: Partial<
|
|
10
|
+
text?: Partial<HtmlEditorText>;
|
|
11
11
|
actions?: Partial<EditorActionText>;
|
|
12
12
|
}
|
|
13
|
-
export declare function
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
13
|
+
export declare function HtmlEditor(props: HtmlEditorProps): import("../_vendor/preact/src/index").JSX.Element;
|
|
14
|
+
export { sanitizeRichTextHtml, isSafeRichTextLink } from './model';
|
|
15
|
+
export { htmlRenderNodes, type HtmlRenderNode } from './render-model';
|
package/rich-text/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as
|
|
1
|
+
export { t as HtmlEditor, r as defaultHtmlEditorText, n as htmlRenderNodes, i as isSafeRichTextLink, a as sanitizeRichTextHtml } from "../_chunks/rich-text-CH7gIqOS.js";
|
package/rich-text/model.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
1
|
+
export declare function isSafeRichTextLink(value: string): boolean;
|
|
2
|
+
/** Parse inertly, then rebuild nodes; never mount user-provided HTML or attributes. */
|
|
3
|
+
export declare function richTextFragment(html: string, doc?: Document): DocumentFragment;
|
|
4
|
+
export declare function sanitizeRichTextHtml(html: string, doc?: Document): string;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
export interface MarkdownRenderNode {
|
|
1
|
+
export interface HtmlRenderNode {
|
|
3
2
|
tag?: string;
|
|
4
3
|
text?: string;
|
|
5
4
|
attrs?: Record<string, string | number>;
|
|
6
|
-
children?: readonly
|
|
5
|
+
children?: readonly HtmlRenderNode[];
|
|
7
6
|
}
|
|
8
|
-
/**
|
|
9
|
-
export declare function
|
|
7
|
+
/** Only allowlisted nodes reach a framework renderer; fresh VNodes are created per cell. */
|
|
8
|
+
export declare function htmlRenderNodes(html: string): readonly HtmlRenderNode[];
|
package/rich-text/style.scss
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.rv-
|
|
1
|
+
.rv-rich-text-editor {
|
|
2
2
|
width: min(560px, calc(100vw - 48px));
|
|
3
3
|
&__toolbar {
|
|
4
4
|
display: flex;
|
|
@@ -60,22 +60,13 @@
|
|
|
60
60
|
padding-inline-start: 12px;
|
|
61
61
|
margin-inline: 0;
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
font-weight: 700;
|
|
65
|
-
}
|
|
66
|
-
.rv-markdown-italic {
|
|
67
|
-
font-style: italic;
|
|
68
|
-
}
|
|
69
|
-
.rv-markdown-strike {
|
|
70
|
-
text-decoration: line-through;
|
|
71
|
-
}
|
|
72
|
-
.rv-markdown-inline-code {
|
|
63
|
+
&__visual code {
|
|
73
64
|
font-family: ui-monospace, monospace;
|
|
74
65
|
background: var(--rv-ui-surface-sunken);
|
|
75
66
|
}
|
|
76
67
|
}
|
|
77
68
|
|
|
78
|
-
.rv-
|
|
69
|
+
.rv-rich-text-cell {
|
|
79
70
|
color: inherit;
|
|
80
71
|
font: inherit;
|
|
81
72
|
white-space: pre-wrap;
|
package/rich-text/toolbar.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
export declare function
|
|
4
|
-
engine: () =>
|
|
5
|
-
selection:
|
|
6
|
-
text: Required<
|
|
1
|
+
import { HtmlEngine, HtmlSelection } from './engine';
|
|
2
|
+
import { HtmlEditorText } from './translations';
|
|
3
|
+
export declare function HtmlToolbar({ engine, selection, text, showLink, onLink }: {
|
|
4
|
+
engine: () => HtmlEngine | undefined;
|
|
5
|
+
selection: HtmlSelection;
|
|
6
|
+
text: Required<HtmlEditorText>;
|
|
7
7
|
showLink: boolean;
|
|
8
8
|
onLink: () => void;
|
|
9
9
|
}): import("../_vendor/preact/src/index").JSX.Element;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export interface
|
|
1
|
+
/** Visible and accessible labels for the shared HTML editor. */
|
|
2
|
+
export interface HtmlEditorText {
|
|
3
3
|
visual: string;
|
|
4
4
|
source: string;
|
|
5
5
|
label: string;
|
|
6
|
-
unsupported: string;
|
|
7
6
|
unsafeLink: string;
|
|
8
7
|
requiredValue?: string;
|
|
9
8
|
tooLong?: string;
|
|
@@ -25,16 +24,5 @@ export interface MarkdownEditorText {
|
|
|
25
24
|
numberedList?: string;
|
|
26
25
|
quote?: string;
|
|
27
26
|
codeBlock?: string;
|
|
28
|
-
images?: string;
|
|
29
|
-
tables?: string;
|
|
30
|
-
html?: string;
|
|
31
|
-
referenceLinks?: string;
|
|
32
|
-
taskLists?: string;
|
|
33
|
-
horizontalRules?: string;
|
|
34
|
-
alternateHeadings?: string;
|
|
35
|
-
highlight?: string;
|
|
36
|
-
extensions?: string;
|
|
37
|
-
indentedCode?: string;
|
|
38
27
|
}
|
|
39
|
-
export declare const
|
|
40
|
-
export declare function markdownIssueLabels(issues: string[], text: Required<MarkdownEditorText>): string;
|
|
28
|
+
export declare const defaultHtmlEditorText: Required<HtmlEditorText>;
|
package/select.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ComponentChildren, JSX } from './_vendor/preact/src/index';
|
|
2
|
+
import { DropdownOption } from './dropdown/dropdown.types';
|
|
3
|
+
export type SelectOptionProps = JSX.IntrinsicElements['option'];
|
|
4
|
+
type Attributes = Omit<JSX.IntrinsicElements['select'], 'value' | 'defaultValue' | 'onChange' | 'onInput' | 'multiple' | 'ref'>;
|
|
5
|
+
export type SelectProps = Attributes & {
|
|
6
|
+
value?: string | number | readonly string[];
|
|
7
|
+
defaultValue?: string | number | readonly string[];
|
|
8
|
+
/** Optional domain policy for option descriptors; no native option nodes are mounted. */
|
|
9
|
+
optionPolicy?: (props: SelectOptionProps) => SelectOptionProps;
|
|
10
|
+
} & ({
|
|
11
|
+
multiple?: false;
|
|
12
|
+
onValueChange?: (value: string) => void;
|
|
13
|
+
} | {
|
|
14
|
+
multiple: true;
|
|
15
|
+
onValueChange?: (value: string[]) => void;
|
|
16
|
+
});
|
|
17
|
+
/** JSX options are data descriptors for Dropdown, never browser-native controls. */
|
|
18
|
+
export declare function selectOptions(children: ComponentChildren, policy?: SelectProps['optionPolicy'], group?: string, disabled?: boolean): DropdownOption<string>[];
|
|
19
|
+
export declare function Select(props: SelectProps): JSX.Element;
|
|
20
|
+
export {};
|
package/select.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { s as Select, c as selectOptions } from "./_chunks/native-control-C_yok8_-.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { isUiMotionEnabled as e } from "../core/motion.js";
|
|
2
|
+
import { showTopLayerPopup as t } from "../core/top-layer-popup.js";
|
|
3
3
|
import { animateStatusFeedback as n } from "./motion.js";
|
|
4
4
|
//#region src/status-feedback/exit-snapshot.ts
|
|
5
5
|
function r(r) {
|
|
6
6
|
let i = r.ownerDocument.defaultView;
|
|
7
|
-
if (!i || typeof r.animate != "function" || !
|
|
7
|
+
if (!i || typeof r.animate != "function" || !e(r)) return;
|
|
8
8
|
let a = r.getBoundingClientRect(), o = r.cloneNode(!0), s = [r, ...r.querySelectorAll("*")], c = [o, ...o.querySelectorAll("*")];
|
|
9
9
|
o.removeAttribute("popover"), o.removeAttribute("id"), o.querySelectorAll("[id]").forEach((e) => e.removeAttribute("id")), o.querySelectorAll("[role], [aria-live]").forEach((e) => {
|
|
10
10
|
e.removeAttribute("role"), e.removeAttribute("aria-live");
|
|
@@ -24,7 +24,7 @@ function r(r) {
|
|
|
24
24
|
borderColor: l.borderColor,
|
|
25
25
|
fontFamily: l.fontFamily,
|
|
26
26
|
boxShadow: l.boxShadow
|
|
27
|
-
}), r.ownerDocument.body.append(o),
|
|
27
|
+
}), r.ownerDocument.body.append(o), t(o), s.forEach((e, t) => {
|
|
28
28
|
e.scrollTop && (c[t].scrollTop = e.scrollTop), e.scrollLeft && (c[t].scrollLeft = e.scrollLeft);
|
|
29
29
|
});
|
|
30
30
|
let u = () => {
|
package/status-feedback/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { renderStatusBadge as e } from "./badge.js";
|
|
2
|
-
import {
|
|
2
|
+
import { n as t, r as n, t as r } from "../_chunks/render-m5eMMwFR.js";
|
|
3
3
|
import { StatusFeedbackPopoverController as i } from "./popover.js";
|
|
4
|
-
export {
|
|
4
|
+
export { r as StatusBadge, t as StatusFeedbackPanel, i as StatusFeedbackPopoverController, e as renderStatusBadge, n as renderStatusFeedbackPanel };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { calculateAnchoredPopoverPosition as e } from "../core/anchored-popover.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { inheritUiMotion as t } from "../core/motion.js";
|
|
3
|
+
import { hideTopLayerPopup as n, showTopLayerPopup as r } from "../core/top-layer-popup.js";
|
|
4
4
|
import { statusFeedbackSize as i } from "./placement.js";
|
|
5
5
|
import { animateStatusFeedback as a } from "./motion.js";
|
|
6
6
|
import { statusFeedbackExit as o } from "./exit-snapshot.js";
|
|
@@ -46,34 +46,34 @@ var s = 0, c = class {
|
|
|
46
46
|
})));
|
|
47
47
|
};
|
|
48
48
|
hide(e = !1) {
|
|
49
|
-
(!e || this.mode) && (this.removeExit?.(), this.removeExit = void 0), e && this.panel?.isConnected && this.mode && (this.removeExit = o(this.panel)), this.animation?.cancel(), this.animation = void 0, this.releaseMotion?.(), this.releaseMotion = void 0, this.panel && this.mode &&
|
|
49
|
+
(!e || this.mode) && (this.removeExit?.(), this.removeExit = void 0), e && this.panel?.isConnected && this.mode && (this.removeExit = o(this.panel)), this.animation?.cancel(), this.animation = void 0, this.releaseMotion?.(), this.releaseMotion = void 0, this.panel && this.mode && n(this.panel, this.mode), this.mode = void 0, this.stopWatching();
|
|
50
50
|
}
|
|
51
51
|
destroy() {
|
|
52
52
|
this.hide(), this.disposed = !0, this.panel = null, this.anchor = null;
|
|
53
53
|
}
|
|
54
54
|
position() {
|
|
55
|
-
let
|
|
56
|
-
if (!
|
|
55
|
+
let n = this.panel, o = this.anchor, s = this.window;
|
|
56
|
+
if (!n?.isConnected || !o?.isConnected || !s || this.disposed) return;
|
|
57
57
|
let c = this.options.boundary?.getBoundingClientRect(), l = i({
|
|
58
58
|
width: s.innerWidth,
|
|
59
59
|
height: s.innerHeight
|
|
60
60
|
}, c, this.collapsed, this.options), u = l.width;
|
|
61
|
-
|
|
61
|
+
n.style.width = `${u}px`, n.style.maxHeight = `${l.maxHeight}px`, this.releaseMotion ??= t(o, n);
|
|
62
62
|
let d = !this.mode;
|
|
63
|
-
d && (this.removeExit?.(), this.removeExit = void 0, this.mode = n
|
|
63
|
+
d && (this.removeExit?.(), this.removeExit = void 0, this.mode = r(n));
|
|
64
64
|
let f = o.getBoundingClientRect(), p = e({
|
|
65
65
|
left: f.right - u,
|
|
66
66
|
right: f.right,
|
|
67
67
|
top: f.bottom,
|
|
68
68
|
bottom: f.bottom
|
|
69
69
|
}, {
|
|
70
|
-
width:
|
|
71
|
-
height:
|
|
70
|
+
width: n.offsetWidth,
|
|
71
|
+
height: n.offsetHeight
|
|
72
72
|
}, {
|
|
73
73
|
width: s.innerWidth,
|
|
74
74
|
height: s.innerHeight
|
|
75
75
|
}, 0);
|
|
76
|
-
|
|
76
|
+
n.style.left = `${p.left}px`, n.style.top = `${p.top}px`, d && (this.animation?.cancel(), this.animation = a(n, [{ opacity: 0 }, { opacity: 1 }], "rv-status-enter"));
|
|
77
77
|
}
|
|
78
78
|
stopWatching() {
|
|
79
79
|
this.frame !== void 0 && this.window?.cancelAnimationFrame(this.frame), this.frame = void 0, this.observer?.disconnect(), this.observer = void 0, this.window?.removeEventListener("resize", this.refresh), this.window?.removeEventListener("scroll", this.refresh, !0), this.window = null;
|
|
@@ -1,44 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { renderStatusBadge as r } from "./badge.js";
|
|
5
|
-
//#region src/status-feedback/render.ts
|
|
6
|
-
function i(e, r) {
|
|
7
|
-
let { title: i, items: a, ariaLabel: o, className: s, popover: c, onCollapsedChange: l } = r;
|
|
8
|
-
if (!a.length) return c?.hide(!0), null;
|
|
9
|
-
let u = c?.collapsed ?? r.collapsed ?? !1, d = !!(c || l), f = (e, t) => {
|
|
10
|
-
if (e && !c) {
|
|
11
|
-
let e = t.currentTarget.closest(".rv-status-feedback"), n = e?.ownerDocument.activeElement;
|
|
12
|
-
n && e?.contains(n) && e.querySelector(".rv-status-feedback__toggle")?.focus({ preventScroll: !0 });
|
|
13
|
-
}
|
|
14
|
-
c?.setCollapsed(e), l?.(e);
|
|
15
|
-
};
|
|
16
|
-
return c?.refresh(), e("section", {
|
|
17
|
-
onKeyDown: (e) => {
|
|
18
|
-
e.key === "Escape" && d && !u && (e.preventDefault(), e.stopPropagation(), f(!0, e));
|
|
19
|
-
},
|
|
20
|
-
ref: c?.panelRef,
|
|
21
|
-
id: c?.id,
|
|
22
|
-
class: [
|
|
23
|
-
"rv-status-feedback",
|
|
24
|
-
s,
|
|
25
|
-
r.compact ? "rv-status-feedback--compact" : "",
|
|
26
|
-
c ? "rv-status-feedback--popover" : "",
|
|
27
|
-
u ? "rv-status-feedback--collapsed" : ""
|
|
28
|
-
].filter(Boolean).join(" "),
|
|
29
|
-
"aria-label": o ?? i,
|
|
30
|
-
"data-collapsed": String(u)
|
|
31
|
-
}, [t(e, r, u, d, f), e("div", {
|
|
32
|
-
id: c ? `${c.id}-items` : void 0,
|
|
33
|
-
class: "rv-status-feedback__items",
|
|
34
|
-
hidden: u
|
|
35
|
-
}, a.map((t) => n(e, t)))]);
|
|
36
|
-
}
|
|
37
|
-
function a(t) {
|
|
38
|
-
return i(e, t);
|
|
39
|
-
}
|
|
40
|
-
function o(t) {
|
|
41
|
-
return r(e, t);
|
|
42
|
-
}
|
|
43
|
-
//#endregion
|
|
44
|
-
export { o as StatusBadge, a as StatusFeedbackPanel, r as renderStatusBadge, i as renderStatusFeedbackPanel };
|
|
1
|
+
import { renderStatusBadge as e } from "./badge.js";
|
|
2
|
+
import { n as t, r as n, t as r } from "../_chunks/render-m5eMMwFR.js";
|
|
3
|
+
export { r as StatusBadge, t as StatusFeedbackPanel, e as renderStatusBadge, n as renderStatusFeedbackPanel };
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
@use '../styles/motion';
|
|
2
|
+
@keyframes rv-status-item-exit {
|
|
3
|
+
to { opacity: 0; transform: translateY(4px); }
|
|
4
|
+
}
|
|
5
|
+
.rv-status-feedback__item[data-exiting='true'] {
|
|
6
|
+
animation: rv-status-item-exit 160ms ease-in both;
|
|
7
|
+
pointer-events: none;
|
|
8
|
+
}
|
|
2
9
|
.rv-status-feedback,
|
|
3
10
|
.rv-status-badge {
|
|
4
11
|
--rv-status-warning: var(--rv-ui-warning);
|
|
@@ -29,6 +29,10 @@ export interface StatusFeedbackLocaleText {
|
|
|
29
29
|
readonly formatCount: (count: number) => string;
|
|
30
30
|
}
|
|
31
31
|
export interface StatusFeedbackPanelProps {
|
|
32
|
+
/** Component adapters only: dismiss settled neutral/success items after this delay. Disabled by default. */
|
|
33
|
+
readonly autoDismissMs?: number;
|
|
34
|
+
/** The owner removes the item after its exit animation. */
|
|
35
|
+
readonly onDismissItem?: (id: string) => void;
|
|
32
36
|
readonly compact?: boolean;
|
|
33
37
|
readonly onClose?: () => void;
|
|
34
38
|
readonly closeLabel?: string;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { StatusFeedbackItem } from './types';
|
|
2
|
+
/** Timers follow individual items; the consumer remains the owner of removal. */
|
|
3
|
+
export declare function useAutoDismiss(items: readonly StatusFeedbackItem[], duration?: number, onDismiss?: (id: string) => void): StatusFeedbackItem[];
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
@use './disclosure';
|
|
3
3
|
@use './alert';
|
|
4
4
|
@use './loading';
|
|
5
|
+
@use './control';
|
|
5
6
|
|
|
6
7
|
.rv-example-card {
|
|
7
8
|
box-sizing: border-box;
|
|
@@ -52,7 +53,8 @@
|
|
|
52
53
|
|
|
53
54
|
.rv-control { color-scheme: var(--rv-ui-color-scheme, normal); }
|
|
54
55
|
.rv-combobox .dropdown-trigger, .rv-multi-select .dropdown-trigger {
|
|
55
|
-
|
|
56
|
+
@include control.action-size;
|
|
57
|
+
padding-inline-end: 24px;
|
|
56
58
|
border: 1px solid var(--rv-ui-border); border-radius: 8px;
|
|
57
59
|
background: var(--rv-ui-surface-sunken); color: var(--rv-ui-text);
|
|
58
60
|
}
|
package/styles/_control.scss
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
@use './motion';
|
|
2
|
+
// Standalone actions and dropdowns share dimensions and typography across adapters.
|
|
3
|
+
@mixin action-size {
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
min-height: var(--rv-control-height, 32px);
|
|
6
|
+
padding: var(--rv-control-padding, 6px 12px);
|
|
7
|
+
font-family: inherit;
|
|
8
|
+
font-size: var(--rv-control-font-size, 0.875rem);
|
|
9
|
+
line-height: 1;
|
|
10
|
+
}
|
|
11
|
+
|
|
2
12
|
// One native field presentation, also available to legacy consumer selectors.
|
|
3
13
|
@mixin field {
|
|
4
14
|
appearance: none;
|
|
5
15
|
box-sizing: border-box;
|
|
6
16
|
width: 100%;
|
|
7
17
|
min-width: 0;
|
|
8
|
-
|
|
9
|
-
padding: var(--rv-control-padding, 8px 10px);
|
|
18
|
+
@include action-size;
|
|
10
19
|
border: 1px solid var(--rv-control-border, var(--rv-ui-border));
|
|
11
20
|
border-radius: var(--rv-control-radius, 8px);
|
|
12
21
|
background-color: var(--rv-control-bg, var(--rv-ui-surface-sunken));
|
|
13
22
|
color: var(--rv-control-color, inherit);
|
|
14
|
-
|
|
15
|
-
line-height: 1.25;
|
|
23
|
+
|
|
16
24
|
color-scheme: var(--rv-ui-color-scheme, normal);
|
|
17
25
|
transition:
|
|
18
26
|
border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
|
package/styles/_primitives.scss
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use './motion';
|
|
2
2
|
@use './loading';
|
|
3
|
+
@use './control';
|
|
3
4
|
%rv-btn-base {
|
|
4
5
|
position: relative;
|
|
5
6
|
display: inline-flex;
|
|
@@ -7,13 +8,9 @@
|
|
|
7
8
|
justify-content: center;
|
|
8
9
|
gap: 4px;
|
|
9
10
|
border-radius: var(--rv-ui-radius);
|
|
10
|
-
|
|
11
|
-
padding: 6px 12px;
|
|
11
|
+
@include control.action-size;
|
|
12
12
|
border: 1px solid transparent;
|
|
13
|
-
font-family: inherit;
|
|
14
|
-
font-size: 0.875rem;
|
|
15
13
|
font-weight: var(--rv-ui-button-font-weight, 500);
|
|
16
|
-
line-height: 1;
|
|
17
14
|
cursor: pointer;
|
|
18
15
|
user-select: none;
|
|
19
16
|
box-shadow: none;
|
|
@@ -614,8 +611,8 @@ label.rv-switch-label {
|
|
|
614
611
|
.rv-search-input > input:is([type='search'], [type='text']) {
|
|
615
612
|
box-sizing: border-box;
|
|
616
613
|
width: 100%;
|
|
617
|
-
height: var(--rv-search-input-height, 32px);
|
|
618
|
-
min-height: var(--rv-search-input-height, 32px);
|
|
614
|
+
height: var(--rv-search-input-height, var(--rv-control-height, 32px));
|
|
615
|
+
min-height: var(--rv-search-input-height, var(--rv-control-height, 32px));
|
|
619
616
|
appearance: none;
|
|
620
617
|
background: var(--rv-search-input-bg, var(--rv-ah-bg-input, var(--rv-ui-surface-sunken)));
|
|
621
618
|
border: 1px solid var(--rv-search-input-border, var(--rv-ah-border, var(--rv-ui-border)));
|
|
@@ -625,7 +622,7 @@ label.rv-switch-label {
|
|
|
625
622
|
color: var(--rv-search-input-color, var(--rv-ah-text, var(--rv-ui-text)));
|
|
626
623
|
outline: none;
|
|
627
624
|
font: inherit;
|
|
628
|
-
font-size:
|
|
625
|
+
font-size: var(--rv-control-font-size, 0.875rem);
|
|
629
626
|
transition:
|
|
630
627
|
border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
|
|
631
628
|
background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
|
|
@@ -961,3 +958,7 @@ button.rv-choice-chip-info:focus-visible,
|
|
|
961
958
|
border-block-start-color: currentColor;
|
|
962
959
|
}
|
|
963
960
|
.rv-btn-busy.rv-btn-icon > :not(.rv-button-spinner) { display: none; }
|
|
961
|
+
|
|
962
|
+
// Applies uniformly to action variants, icon controls and navigation buttons.
|
|
963
|
+
.rv-btn-rounded.rv-btn-rounded { border-radius: 9999px; }
|
|
964
|
+
.rv-btn-rounded[aria-disabled='true'] { opacity: .5; pointer-events: none; }
|