@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.
Files changed (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +345 -263
  3. package/_chunks/{calendar-CpaUK7w1.js → calendar-xpZ0v3xf.js} +39 -29
  4. package/_chunks/{chart-frame-BC99KjGa.js → chart-frame-Cmc7xU1i.js} +16 -13
  5. package/_chunks/{choice-chips-Cs4D-3nH.js → choice-chips-CHQTUdLs.js} +10 -10
  6. package/_chunks/clock-BOhPNlW3.js +4 -0
  7. package/_chunks/{color-palette-BBMFmUNA.js → color-palette-D8vyPfld.js} +1 -1
  8. package/_chunks/{color-picker-D90Jg-M8.js → color-picker-CudqPYZo.js} +10 -10
  9. package/_chunks/{component-YDcfoOLz.js → component-C_T2VN5u.js} +182 -178
  10. package/_chunks/{component-metadata-BENbgTjU.js → component-metadata-BMOOmqx5.js} +0 -4
  11. package/_chunks/control-AHKXD5Eu.js +93 -0
  12. package/_chunks/{control-tooltip-ztgmsG7H.js → control-tooltip-uscKfAnV.js} +15 -15
  13. package/_chunks/{controls-DIum-E66.js → controls-DsNi8V8I.js} +144 -129
  14. package/_chunks/{date-control-BJSzu79z.js → date-control-DrVFX13g.js} +1 -1
  15. package/_chunks/{date-time-BxPJusp9.js → date-time-qIhp5vaX.js} +143 -145
  16. package/_chunks/{delete-button-Bblyah10.js → delete-button-CW9vjLnk.js} +6 -6
  17. package/_chunks/{dialog.parts-DBqo3Qwb.js → dialog.parts-CKGkC5zP.js} +20 -20
  18. package/_chunks/{duration-87U2EoMS.js → duration-CL68Em0o.js} +16 -15
  19. package/_chunks/{editor-popup-D3JdS8l3.js → editor-popup-WDdtVDNA.js} +5 -5
  20. package/_chunks/field-context-D57PnBbH.js +5 -0
  21. package/_chunks/{framework-mount-C-Zwm44H.js → framework-mount--RTLIqE-.js} +1 -1
  22. package/_chunks/history-controls-B3u3INEK.js +27 -0
  23. package/_chunks/mount-DQ1cpppK.js +257 -0
  24. package/_chunks/native-control-C_yok8_-.js +605 -0
  25. package/_chunks/{number-input-BeIadZuL.js → number-input-BKwA5FnM.js} +2 -2
  26. package/_chunks/{picker-DpP7iQLA.js → picker-h1P5RUgp.js} +2 -2
  27. package/_chunks/popup-CT2uD3go.js +367 -0
  28. package/_chunks/{rating-choice-Ca8ZBty3.js → rating-choice-DZgmaic0.js} +1 -1
  29. package/_chunks/render-m5eMMwFR.js +83 -0
  30. package/_chunks/{reorder-list-Cc3KmfAN.js → reorder-list-CSlqAGHw.js} +1 -1
  31. package/_chunks/request-trail-DSlFix6i.js +618 -0
  32. package/_chunks/rich-text-CH7gIqOS.js +636 -0
  33. package/_chunks/rotate-right-Iha5ScJ1.js +4 -0
  34. package/_form.scss +1 -1
  35. package/ai/_chat.scss +195 -0
  36. package/ai/_style.scss +105 -34
  37. package/ai/chat.d.ts +63 -0
  38. package/ai/components.d.ts +19 -3
  39. package/ai/index.d.ts +2 -0
  40. package/ai/index.js +3 -3
  41. package/ai/mount.d.ts +30 -1
  42. package/ai/prompt-history.d.ts +13 -0
  43. package/ai/transcript.d.ts +25 -0
  44. package/ai/translations.d.ts +1 -1
  45. package/angular/angular.js +0 -3
  46. package/assignee/index.js +34 -35
  47. package/buttons/delete-button.d.ts +2 -1
  48. package/buttons/delete-button.js +1 -1
  49. package/buttons/remove-button.js +1 -1
  50. package/buttons/svg-button.d.ts +1 -0
  51. package/buttons/svg-button.js +5 -5
  52. package/calendar/_calendar.scss +7 -2
  53. package/calendar/calendar.js +1 -1
  54. package/calendar/index.js +2 -2
  55. package/choice-chips/index.js +1 -1
  56. package/color-palette/color-palette.js +1 -1
  57. package/color-palette/color-picker.js +2 -2
  58. package/component-catalog.d.ts +16 -5
  59. package/control-attributes.js +7 -7
  60. package/controls.d.ts +8 -6
  61. package/controls.js +3 -3
  62. package/core/editor-popup.js +1 -1
  63. package/date-time/index.js +1 -1
  64. package/date-time/style.scss +4 -4
  65. package/dialog/dialog.dom.js +8 -8
  66. package/dialog/dialog.parts.js +1 -1
  67. package/distribution-chart/area-chart.js +1 -1
  68. package/distribution-chart/bar-chart.d.ts +5 -2
  69. package/distribution-chart/bar-chart.js +7 -3
  70. package/distribution-chart/chart-frame.d.ts +2 -1
  71. package/distribution-chart/line-chart.js +1 -1
  72. package/dropdown/content.d.ts +2 -1
  73. package/dropdown/content.js +1 -142
  74. package/dropdown/control.d.ts +14 -0
  75. package/dropdown/control.js +1 -0
  76. package/dropdown/control.view.d.ts +6 -0
  77. package/dropdown/dropdown.types.d.ts +4 -0
  78. package/dropdown/editor-dropdown.style.scss +37 -9
  79. package/dropdown/index.d.ts +1 -1
  80. package/dropdown/index.js +3 -4
  81. package/dropdown/lookup-field.js +1 -1
  82. package/dropdown/popup.js +1 -141
  83. package/duration/index.js +1 -1
  84. package/duration/style.scss +1 -1
  85. package/editor-actions.js +1 -1
  86. package/field-configurator.js +6 -6
  87. package/fieldset.d.ts +3 -0
  88. package/filter/filters/slider/single.js +1 -1
  89. package/filter-badge.js +1 -1
  90. package/filter-controls.js +7 -7
  91. package/form-controls/field-context.d.ts +5 -0
  92. package/form-controls/index.js +7 -12
  93. package/form-controls/index.view.d.ts +2 -4
  94. package/form-controls/presentation.js +51 -43
  95. package/formatting/index.js +25 -21
  96. package/framework.js +215 -207
  97. package/history-controls.d.ts +14 -0
  98. package/history-controls.js +1 -0
  99. package/masked-input/index.js +1 -1
  100. package/native-control.d.ts +6 -4
  101. package/native-control.js +3 -26
  102. package/native-styles.css +1 -1
  103. package/native.js +31 -30
  104. package/number-input/index.js +1 -1
  105. package/package.json +18 -13
  106. package/pagination.d.ts +3 -0
  107. package/pagination.js +43 -33
  108. package/pdf-viewer/index.js +1 -1
  109. package/pdf-viewer/style.scss +3 -4
  110. package/preact.d.ts +2 -0
  111. package/preact.js +62 -62
  112. package/rating-choice.js +1 -1
  113. package/react-control.d.ts +0 -1
  114. package/react-control.js +2 -2
  115. package/react.d.ts +13 -3
  116. package/react.js +71 -88
  117. package/reorder-list.js +1 -1
  118. package/resource-picker/resource-picker-popup.js +1 -1
  119. package/resource-picker/resource-picker.js +4 -4
  120. package/resource-picker/resource-picker.scss +6 -3
  121. package/rich-text/engine.d.ts +16 -19
  122. package/rich-text/index.d.ts +7 -7
  123. package/rich-text/index.js +1 -1
  124. package/rich-text/model.d.ts +4 -3
  125. package/rich-text/render-model.d.ts +4 -5
  126. package/rich-text/style.scss +3 -12
  127. package/rich-text/toolbar.d.ts +6 -6
  128. package/rich-text/translations.d.ts +3 -15
  129. package/select.d.ts +20 -0
  130. package/select.js +1 -0
  131. package/status-feedback/exit-snapshot.js +4 -4
  132. package/status-feedback/index.js +2 -2
  133. package/status-feedback/popover.js +10 -10
  134. package/status-feedback/render.js +3 -44
  135. package/status-feedback/status-feedback.scss +7 -0
  136. package/status-feedback/types.d.ts +4 -0
  137. package/status-feedback/use-auto-dismiss.d.ts +3 -0
  138. package/styles/_compositions.scss +3 -1
  139. package/styles/_control.scss +12 -4
  140. package/styles/_primitives.scss +9 -8
  141. package/styles.css +1 -1
  142. package/surfaces.js +45 -45
  143. package/svelte/UiComponent.server.js +1 -48
  144. package/svelte/UiComponent.svelte +0 -21
  145. package/svelte.js +33 -68
  146. package/time-grid.js +1 -1
  147. package/timeline-track/component.d.ts +5 -1
  148. package/timeline-track/index.js +71 -54
  149. package/timeline-track/model.d.ts +9 -0
  150. package/timeline-track/model.js +10 -1
  151. package/ui.css +1 -1
  152. package/vue.d.ts +24 -5
  153. package/vue.js +140 -164
  154. package/_chunks/compat.module-DDB2pm9O.js +0 -229
  155. package/_chunks/dropdown-voWqmwAe.js +0 -357
  156. package/_chunks/mount-DZe_6VtR.js +0 -90
  157. package/_chunks/request-trail-IdNiFvKH.js +0 -347
  158. package/_chunks/rich-text-BzI1DyfF.js +0 -477
  159. package/react-native-select.d.ts +0 -6
  160. package/rich-text/syntax.d.ts +0 -2
  161. package/vue-native-select.d.ts +0 -9
@@ -1,142 +1 @@
1
- import { c as e, i as t } from "../_chunks/preact.module-BBM36DnO.js";
2
- import { c as n, o as r, t as i } from "../_chunks/hooks.module-CG3gN83z.js";
3
- import { t as a } from "../_chunks/jsxRuntime.module-F6UFnpT-.js";
4
- import "../_chunks/compat.module-DDB2pm9O.js";
5
- import { ButtonControl as o } from "../native-control.js";
6
- import { useDropdownService as s } from "./dropdown.service.js";
7
- //#region src/dropdown/content.tsx
8
- function c({ options: e, selectedValues: t, remote: r, value: c, onChange: u, config: d, multiSelect: f, search: p, searchPlaceholder: m, listboxId: h, searchId: g, renderOption: _, renderNoResults: v, onClose: y, theme: b }) {
9
- let x = i(null), S = i(null), C = i(null), { searchValue: w, focusedIndex: T, selectedOptions: E, filteredOptions: D, handleSelect: O, handleKeyDown: k, handleSearchChange: A, setFocusedIndex: j } = s(e, c, u, d, y, r && {
10
- selected: t ?? [],
11
- search: r.search
12
- }), M = T >= 0 && T < D.length && !D[T].disabled ? `${h}-option-${T}` : void 0;
13
- return n(() => {
14
- if (!d.autoFocus) return;
15
- let e = () => {
16
- p && x.current ? x.current.focus({ preventScroll: !0 }) : S.current?.focus({ preventScroll: !0 });
17
- }, t = S.current?.ownerDocument.defaultView ?? (typeof window < "u" ? window : void 0);
18
- if (!t) return;
19
- e();
20
- let n = t.setTimeout(e, 0), r = t.requestAnimationFrame(e), i = t.setTimeout(e, 16);
21
- return () => {
22
- t.clearTimeout(n), t.cancelAnimationFrame(r), t.clearTimeout(i);
23
- };
24
- }, [d.autoFocus, p]), /* @__PURE__ */ a("div", {
25
- ref: S,
26
- className: "dropdown-listbox",
27
- "data-theme": b ?? "default",
28
- role: "listbox",
29
- id: h,
30
- "aria-multiselectable": f,
31
- "aria-activedescendant": M,
32
- tabIndex: -1,
33
- "aria-busy": r?.loading,
34
- onScrollCapture: (e) => {
35
- let t = e.target;
36
- r && t.scrollHeight - t.scrollTop - t.clientHeight < 48 && r.loadMore();
37
- },
38
- onKeyUp: (e) => e.stopPropagation(),
39
- onKeyDown: (e) => {
40
- e.stopPropagation(), e.key === "Escape" ? (e.preventDefault(), e.stopPropagation(), y(!1)) : e.key === "Tab" ? (e.preventDefault(), e.stopPropagation(), d.closeOnTab && y(!0)) : (e.key !== " " || e.target !== x.current) && k(e);
41
- },
42
- children: [
43
- p && /* @__PURE__ */ a("div", {
44
- className: "dropdown-search",
45
- children: /* @__PURE__ */ a("input", {
46
- ref: x,
47
- type: "text",
48
- id: g,
49
- className: `dropdown-search-input ${b ? `theme-${b}` : ""}`,
50
- placeholder: m,
51
- value: w,
52
- onChange: A,
53
- onInput: A,
54
- "aria-label": d.searchAriaLabel ?? "Search options"
55
- })
56
- }),
57
- r?.loading && /* @__PURE__ */ a("div", {
58
- role: "status",
59
- children: r.text.loading
60
- }),
61
- r?.error && /* @__PURE__ */ a("div", {
62
- role: "alert",
63
- children: [
64
- r.text.error,
65
- " ",
66
- /* @__PURE__ */ a(o, {
67
- onClick: r.retry,
68
- children: r.text.retry
69
- })
70
- ]
71
- }),
72
- /* @__PURE__ */ a(l, {
73
- options: e,
74
- filteredOptions: D,
75
- multiSelect: f,
76
- focusedIndex: T,
77
- selectedOptions: E,
78
- onKeyDown: k,
79
- onSelect: O,
80
- onFocusChange: j,
81
- renderOption: _,
82
- renderNoResults: r ? () => r.loading || r.error ? null : r.text.empty : v,
83
- dropdownListRef: C,
84
- theme: b,
85
- optionIdPrefix: h
86
- }),
87
- r?.hasMore && /* @__PURE__ */ a(o, {
88
- disabled: r.loading,
89
- onClick: r.loadMore,
90
- children: r.text.loadMore
91
- })
92
- ]
93
- });
94
- }
95
- function l({ options: n, filteredOptions: i, multiSelect: o, focusedIndex: s, selectedOptions: c, onKeyDown: l, onSelect: u, onFocusChange: d, renderOption: f, renderNoResults: p, dropdownListRef: m, theme: h, optionIdPrefix: g }) {
96
- let _ = r((e) => c.some((t) => JSON.stringify(t.value) === JSON.stringify(e.value)), [c]), v = r((t, n) => {
97
- let r = _(t), i = s === n;
98
- return /* @__PURE__ */ a("li", {
99
- id: `${g}-option-${n}`,
100
- role: "option",
101
- "aria-selected": r,
102
- "aria-disabled": t.disabled,
103
- tabIndex: -1,
104
- className: `dropdown-option ${r ? "selected" : ""} ${i ? "focused" : ""} ${t.disabled ? "disabled" : ""} ${h ? `theme-${h}` : ""}`,
105
- onClick: () => u(t),
106
- onMouseEnter: () => {
107
- t.disabled || d(n);
108
- },
109
- children: f ? f(e, t, r) : /* @__PURE__ */ a("div", {
110
- className: "option-content",
111
- children: [o && /* @__PURE__ */ a("input", {
112
- type: "checkbox",
113
- checked: r,
114
- readOnly: !0,
115
- disabled: t.disabled,
116
- tabIndex: -1,
117
- "aria-hidden": "true"
118
- }), /* @__PURE__ */ a("span", { children: t.label })]
119
- })
120
- }, `${t.label}-${n}`);
121
- }, [
122
- s,
123
- u,
124
- _,
125
- o,
126
- f,
127
- d,
128
- h
129
- ]);
130
- return /* @__PURE__ */ a(t, { children: /* @__PURE__ */ a("ul", {
131
- ref: m,
132
- className: "dropdown-options",
133
- role: "presentation",
134
- tabIndex: -1,
135
- children: i.length > 0 ? i.map(v) : /* @__PURE__ */ a("li", {
136
- className: "no-results",
137
- children: p ? p(e) : /* @__PURE__ */ a("span", { children: "No results found" })
138
- })
139
- }) });
140
- }
141
- //#endregion
142
- export { l as DropdownContent, c as DropdownPopupContent };
1
+ export { f as DropdownContent, p as DropdownPopupContent } from "../_chunks/native-control-C_yok8_-.js";
@@ -0,0 +1,14 @@
1
+ import { DropdownOption, DropdownProps } from './dropdown.types';
2
+ /** Application-owned state for DOM consumers of the shared Dropdown. */
3
+ export interface DropdownControl<T = string> {
4
+ readonly element: HTMLDivElement;
5
+ value: T;
6
+ source: DropdownOption<T>[];
7
+ disabled: boolean;
8
+ onChange?: (value: T) => void;
9
+ update(props: Partial<DropdownProps<T>>): void;
10
+ destroy(): void;
11
+ }
12
+ export declare function createDropdownControl<T = string>(document: Document, initial: DropdownProps<T>): DropdownControl<T>;
13
+ /** Lifecycle boundary for Stencil/other VNode factories that cannot render Preact components. */
14
+ export declare function renderDropdownControl<T>(h: (tag: any, props: any, ...children: any[]) => T, props: DropdownProps): T;
@@ -0,0 +1 @@
1
+ export { t as createDropdownControl, n as renderDropdownControl } from "../_chunks/control-AHKXD5Eu.js";
@@ -0,0 +1,6 @@
1
+ export declare function createDropdownHost(document: Document): {
2
+ element: HTMLDivElement;
3
+ mount: HTMLDivElement;
4
+ input: HTMLInputElement;
5
+ release: () => void;
6
+ };
@@ -1,3 +1,4 @@
1
+ import { JSX } from '../_vendor/preact/src/index';
1
2
  import { DropdownDataSource, DropdownRemoteText } from './remote';
2
3
  export type { DropdownDataSource, DropdownRemoteText, LookupId, LookupCursor } from './remote';
3
4
  export type DropdownRenderable = any;
@@ -43,6 +44,8 @@ export type DropdownConfig<T = any> = {
43
44
  initialSearch?: string;
44
45
  /** Close the dropdown when Tab is pressed inside the open popup. */
45
46
  closeOnTab?: boolean;
47
+ /** Dismiss then let the browser Tab from the trigger (standalone fields). */
48
+ nativeTabNavigation?: boolean;
46
49
  portalTarget?: HTMLElement | null;
47
50
  topLayer?: boolean;
48
51
  ariaLabel?: string;
@@ -66,6 +69,7 @@ export interface DropdownEnvironment {
66
69
  }
67
70
  export type DropdownProps<T = any> = {
68
71
  environment?: DropdownEnvironment;
72
+ triggerAttributes?: JSX.HTMLAttributes<HTMLDivElement>;
69
73
  source: DropdownOption<T>[];
70
74
  /** Optional application-owned remote search and ID resolver. Values must be string/number IDs. */
71
75
  dataSource?: DropdownDataSource<T>;
@@ -1,5 +1,6 @@
1
1
  @use '../styles/motion';
2
2
  @use '../styles/palette';
3
+ @use '../styles/control';
3
4
 
4
5
 
5
6
  // Mixins
@@ -86,7 +87,7 @@ revo-grid,
86
87
  justify-content: center;
87
88
  margin: 0;
88
89
  position: absolute;
89
- right: var(--rv-dropdown-arrow-right);
90
+ inset-inline-end: var(--rv-dropdown-arrow-right);
90
91
  top: 50%;
91
92
  transform: translateY(-50%);
92
93
  transition: transform var(--rv-ui-motion-normal, 160ms) var(--rv-ui-motion-ease, ease-out);
@@ -112,8 +113,8 @@ revo-grid,
112
113
  align-items: center;
113
114
  min-width: 0;
114
115
  overflow: hidden;
115
- padding-left: 5px;
116
- padding-right: var(--rv-dropdown-value-right-space);
116
+ padding-inline-start: 5px;
117
+ padding-inline-end: var(--rv-dropdown-value-right-space);
117
118
  }
118
119
 
119
120
  .selected-value {
@@ -125,8 +126,8 @@ revo-grid,
125
126
  max-width: 100%;
126
127
  min-width: 0;
127
128
  overflow: hidden;
128
- padding-left: 5px;
129
- padding-right: var(--rv-dropdown-value-right-space);
129
+ padding-inline-start: 5px;
130
+ padding-inline-end: var(--rv-dropdown-value-right-space);
130
131
  text-overflow: ellipsis;
131
132
  white-space: nowrap;
132
133
  width: 100%;
@@ -146,7 +147,7 @@ revo-grid,
146
147
  background-color: var(--rv-dropdown-container-tag-background);
147
148
  border-radius: 3px;
148
149
  padding: 2px 6px;
149
- padding-right: 0;
150
+ padding-inline-end: 0;
150
151
  font-size: 14px;
151
152
 
152
153
  }
@@ -158,7 +159,7 @@ revo-grid,
158
159
  max-width: 100%;
159
160
  min-width: 0;
160
161
  overflow: hidden;
161
- padding-right: var(--rv-dropdown-value-right-space);
162
+ padding-inline-end: var(--rv-dropdown-value-right-space);
162
163
  text-overflow: ellipsis;
163
164
  white-space: nowrap;
164
165
  width: 100%;
@@ -247,6 +248,7 @@ revo-grid,
247
248
  background-color: var(--rv-dropdown-menu-background);
248
249
 
249
250
  .dropdown-option {
251
+ box-sizing: border-box;
250
252
  display: flex;
251
253
  min-height: 38px;
252
254
  align-items: center;
@@ -255,7 +257,7 @@ revo-grid,
255
257
  font-size: 14px;
256
258
  font-weight: 400;
257
259
  list-style: none;
258
- padding: 0;
260
+ padding: 8px 10px;
259
261
  cursor: pointer;
260
262
  user-select: none;
261
263
  margin: 1px 0;
@@ -289,7 +291,7 @@ revo-grid,
289
291
  @include flex-center;
290
292
  gap: 8px;
291
293
  width: 100%;
292
- padding: 8px 10px;
294
+ min-width: 0;
293
295
  }
294
296
  .no-results {
295
297
  padding: 12px;
@@ -306,3 +308,29 @@ revo-grid,
306
308
  opacity: 1;
307
309
  }
308
310
  }
311
+
312
+ // Standalone controls share Dropdown behavior with grid editors and have form chrome.
313
+ .dropdown-container.rv-select {
314
+ height: auto;
315
+ min-width: 0;
316
+ .dropdown-trigger {
317
+ @include control.action-size;
318
+ padding-inline-end: 24px;
319
+ border: 1px solid var(--rv-ui-border);
320
+ border-radius: var(--rv-control-radius, 8px);
321
+ background: var(--rv-ui-surface-sunken);
322
+ color: var(--rv-ui-text);
323
+ &:focus-visible { outline: 2px solid var(--rv-ui-accent); outline-offset: 1px; }
324
+ }
325
+ }
326
+
327
+ // Standalone controls own the padding once; grid editors retain their compact insets.
328
+ .dropdown-container:is(.rv-select, .rv-combobox, .rv-multi-select) .dropdown-trigger {
329
+ --rv-dropdown-arrow-size: 9px;
330
+ --rv-dropdown-arrow-right: 12px;
331
+ padding-inline-end: 32px;
332
+ > .selected-value,
333
+ > .selected-values {
334
+ padding-inline: 0;
335
+ }
336
+ }
@@ -6,7 +6,7 @@ export type { DropdownPopupProps } from './popup';
6
6
  /**
7
7
  * Dropdown component
8
8
  */
9
- export declare function Dropdown<T = any>({ source: localSource, dataSource, dataContext, remoteText, value, onChange, placeholder, disabled, name, id, className, style, config, renderContent, renderOption, renderValue, renderPlaceholder, renderSelectedValue, renderNoResults, onClose, beforeOutsideClose, environment, }: DropdownProps<T>): any;
9
+ export declare function Dropdown<T = any>({ source: localSource, triggerAttributes, dataSource, dataContext, remoteText, value, onChange, placeholder, disabled, name, id, className, style, config, renderContent, renderOption, renderValue, renderPlaceholder, renderSelectedValue, renderNoResults, onClose, beforeOutsideClose, environment, }: DropdownProps<T>): any;
10
10
  /**
11
11
  * Define the dropdown component
12
12
  * @param el - The element to render the dropdown
package/dropdown/index.js CHANGED
@@ -1,4 +1,3 @@
1
- import { DropdownPopup as e } from "./popup.js";
2
- import { n as t, r as n, t as r } from "../_chunks/dropdown-voWqmwAe.js";
3
- import { DropdownPopupContent as i } from "./content.js";
4
- export { r as Dropdown, e as DropdownPopup, i as DropdownPopupContent, t as defineDropdown, n as destroyDropdown };
1
+ import { d as e, l as t, p as n, u as r } from "../_chunks/native-control-C_yok8_-.js";
2
+ import { t as i } from "../_chunks/popup-CT2uD3go.js";
3
+ export { t as Dropdown, i as DropdownPopup, n as DropdownPopupContent, r as defineDropdown, e as destroyDropdown };
@@ -1,6 +1,6 @@
1
1
  import { i as e, t } from "../_chunks/hooks.module-CG3gN83z.js";
2
2
  import { t as n } from "../_chunks/jsxRuntime.module-F6UFnpT-.js";
3
- import { t as r } from "../_chunks/dropdown-voWqmwAe.js";
3
+ import { l as r } from "../_chunks/native-control-C_yok8_-.js";
4
4
  import { n as i } from "../_chunks/editor-commit-Bq3wSgvr.js";
5
5
  import { EditorActions as a } from "../editor-actions.js";
6
6
  //#region src/dropdown/lookup-field.tsx
package/dropdown/popup.js CHANGED
@@ -1,141 +1 @@
1
- import { c as e, i as t, r as n, t as r } from "../_chunks/hooks.module-CG3gN83z.js";
2
- import { t as i } from "../_chunks/jsxRuntime.module-F6UFnpT-.js";
3
- import { t as a } from "../_chunks/compat.module-DDB2pm9O.js";
4
- import { hideTopLayerPopup as o, showTopLayerPopup as s } from "../core/top-layer-popup.js";
5
- import { inheritUiMotion as c } from "../core/motion.js";
6
- //#region src/dropdown/popup.tsx
7
- var l = 5, u = 4;
8
- function d(e, t, n) {
9
- let r = e.ownerDocument.defaultView;
10
- if (!r || r.getComputedStyle(e).position === "fixed") return {
11
- top: t,
12
- left: n,
13
- scaleX: 1,
14
- scaleY: 1
15
- };
16
- let i = e.offsetParent, a = e.ownerDocument;
17
- if (!i || i === a.body || i === a.documentElement) return {
18
- top: t + r.scrollY,
19
- left: n + r.scrollX,
20
- scaleX: 1,
21
- scaleY: 1
22
- };
23
- let o = i.getBoundingClientRect(), s = i, c = s.offsetWidth > 0 ? o.width / s.offsetWidth : 1, l = s.offsetHeight > 0 ? o.height / s.offsetHeight : 1, u = Number.isFinite(c) && c > 0 ? c : 1, d = Number.isFinite(l) && l > 0 ? l : 1;
24
- return {
25
- top: (t - o.top) / d - s.clientTop + s.scrollTop,
26
- left: (n - o.left) / u - s.clientLeft + s.scrollLeft,
27
- scaleX: u,
28
- scaleY: d
29
- };
30
- }
31
- function f({ onPointerRelease: f, triggerRef: p, children: m, portalTarget: h, theme: g, dropdownMenuId: _, popupClassName: v, closeOnClickOutside: y = !1, onClose: b, align: x = "start", matchTriggerWidth: S = !1, maxHeight: C, observePopupResize: w = !0, topLayer: T = !1 }) {
32
- let E = r(null), [D, O] = t({
33
- top: 0,
34
- left: 0,
35
- display: "none"
36
- });
37
- n(() => {
38
- let e = p.current, t = E.current;
39
- if (e && t) return c(e, t);
40
- }, [h, p]), e(() => {
41
- let e = p.current;
42
- if (!e) return;
43
- let t = e.ownerDocument.defaultView ?? window, n = () => {
44
- let t = E.current;
45
- if (!t) return;
46
- let n = e.getBoundingClientRect(), r = d(t, n.bottom + u, n.left);
47
- O({
48
- top: r.top,
49
- left: r.left,
50
- display: "flex",
51
- ...S ? { width: n.width / r.scaleX } : {}
52
- });
53
- }, r = () => {
54
- let n = E.current;
55
- if (!n) return;
56
- let r = e.getBoundingClientRect(), i = n.style.maxHeight;
57
- n.style.maxHeight = "";
58
- let a = n.getBoundingClientRect(), o = d(n, 0, 0), s = Math.max(a.height, n.offsetHeight * o.scaleY, n.scrollHeight * o.scaleY);
59
- n.style.maxHeight = i;
60
- let c = Math.max(a.width, n.offsetWidth * o.scaleX), f = Math.min(s, typeof C == "number" ? Math.max(0, C * o.scaleY) : Infinity), p = t.innerHeight, m = t.innerWidth, h = Math.max(0, r.top - u - l), g = Math.max(0, p - r.bottom - u - l), _ = f > g && h > g, v = Math.min(f, _ ? h : g), y = _ ? r.top - u - v : r.bottom + u, b = x === "end" ? r.right - c : r.left;
61
- y = Math.max(l, Math.min(y, p - l - v)), b = Math.max(l, Math.min(b, m - c - l));
62
- let w = d(n, y, b);
63
- O({
64
- top: w.top,
65
- left: w.left,
66
- display: "flex",
67
- maxHeight: v / w.scaleY,
68
- ...S ? { width: r.width / w.scaleX } : {}
69
- });
70
- };
71
- n();
72
- let i = t.setTimeout(r, 0);
73
- t.addEventListener("resize", r), t.addEventListener("scroll", r, !0);
74
- let a = t.ResizeObserver, o = a ? new a(r) : void 0;
75
- o?.observe(e);
76
- let s = e.closest(".rv-dialog__surface, dialog");
77
- return s && o?.observe(s), w && E.current && o?.observe(E.current), () => {
78
- t.clearTimeout(i), t.removeEventListener("resize", r), t.removeEventListener("scroll", r, !0), o?.disconnect();
79
- };
80
- }, [
81
- x,
82
- S,
83
- C,
84
- w,
85
- h,
86
- p
87
- ]), n(() => {
88
- let e = E.current;
89
- if (!T || !e) return;
90
- let t = s(e);
91
- return () => {
92
- o(e, t);
93
- };
94
- }, [h, T]), n(() => {
95
- if (!y || !b) return;
96
- let e = h?.ownerDocument ?? E.current?.ownerDocument ?? p.current?.ownerDocument ?? (typeof document < "u" ? document : void 0);
97
- if (!e) return;
98
- let t = (e) => {
99
- let t = e.target;
100
- t && (E.current?.contains(t) || p.current?.contains(t) || b());
101
- };
102
- e.addEventListener("mousedown", t);
103
- let n = (t) => {
104
- if (t.key !== "Escape") return;
105
- let n = e.activeElement;
106
- n && (E.current?.contains(n) || p.current?.contains(n)) && (t.preventDefault(), t.stopPropagation(), b(), p.current?.querySelector("button, input, select")?.focus());
107
- };
108
- return e.addEventListener("keydown", n), () => {
109
- e.removeEventListener("mousedown", t), e.removeEventListener("keydown", n);
110
- };
111
- }, [
112
- y,
113
- b,
114
- h,
115
- p
116
- ]);
117
- let k = /* @__PURE__ */ i("div", {
118
- ref: E,
119
- id: _,
120
- className: `revo-dropdown-menu ${v || ""}`,
121
- "data-theme": g ?? "default",
122
- onMouseUp: f,
123
- onTouchEnd: f,
124
- style: {
125
- top: `${D.top}px`,
126
- left: `${D.left}px`,
127
- ...T ? {
128
- right: "auto",
129
- bottom: "auto",
130
- margin: "0"
131
- } : {},
132
- display: D.display,
133
- maxHeight: D.maxHeight === void 0 ? void 0 : `${D.maxHeight}px`,
134
- width: D.width === void 0 ? void 0 : `${D.width}px`
135
- },
136
- children: m
137
- });
138
- return h ? a(k, h) : k;
139
- }
140
- //#endregion
141
- export { f as DropdownPopup };
1
+ export { t as DropdownPopup } from "../_chunks/popup-CT2uD3go.js";
package/duration/index.js CHANGED
@@ -1 +1 @@
1
- export { t as DurationDraft, n as DurationField } from "../_chunks/duration-87U2EoMS.js";
1
+ export { t as DurationDraft, n as DurationField } from "../_chunks/duration-CL68Em0o.js";
@@ -22,7 +22,7 @@
22
22
  flex-wrap: wrap;
23
23
  gap: 8px;
24
24
  }
25
- &__modes > select {
25
+ &__modes > .dropdown-container {
26
26
  flex: 1 1 100px;
27
27
  min-width: 0;
28
28
  width: auto;
package/editor-actions.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { i as e } from "./_chunks/preact.module-BBM36DnO.js";
2
2
  import { t } from "./_chunks/jsxRuntime.module-F6UFnpT-.js";
3
- import { n } from "./_chunks/controls-DIum-E66.js";
3
+ import { n } from "./_chunks/controls-DsNi8V8I.js";
4
4
  //#region src/editor-actions.tsx
5
5
  var r = {
6
6
  apply: "Apply",
@@ -2,9 +2,9 @@ import { c as e } from "./_chunks/preact.module-BBM36DnO.js";
2
2
  import { t } from "./_chunks/hooks.module-CG3gN83z.js";
3
3
  import { t as n } from "./_chunks/jsxRuntime.module-F6UFnpT-.js";
4
4
  import { SvgIcon as r } from "./icons/icon.js";
5
- import { t as i } from "./_chunks/chevron-right-sxHQMSkq.js";
6
- import { n as a } from "./_chunks/delete-button-Bblyah10.js";
7
- import { RemoveButton as o } from "./buttons/remove-button.js";
5
+ import { n as i } from "./_chunks/delete-button-CW9vjLnk.js";
6
+ import { RemoveButton as a } from "./buttons/remove-button.js";
7
+ import { t as o } from "./_chunks/chevron-right-sxHQMSkq.js";
8
8
  import { DisclosureSummary as s } from "./form-controls/presentation.js";
9
9
  import { fieldDropIndex as c, reorderFields as l } from "./field-reorder.js";
10
10
  import { useFieldDropTarget as u, useFieldReorder as d } from "./field-reorder.hook.js";
@@ -20,7 +20,7 @@ function p({ children: e, className: t = "", ...r }) {
20
20
  ...r,
21
21
  className: `rv-configurator-summary ${t}`,
22
22
  iconPosition: "after",
23
- icon: /* @__PURE__ */ n(f, { svg: i }),
23
+ icon: /* @__PURE__ */ n(f, { svg: o }),
24
24
  children: e
25
25
  });
26
26
  }
@@ -133,13 +133,13 @@ function w({ children: e, active: t = !1, label: r, className: i = "" }) {
133
133
  });
134
134
  }
135
135
  function T(e) {
136
- return /* @__PURE__ */ n(o, {
136
+ return /* @__PURE__ */ n(a, {
137
137
  ...e,
138
138
  className: `rv-configurator-remove-button ${e.className ?? ""}`
139
139
  });
140
140
  }
141
141
  function E() {
142
- return /* @__PURE__ */ n(r, { svg: a });
142
+ return /* @__PURE__ */ n(r, { svg: i });
143
143
  }
144
144
  function D({ position: e, index: t, className: r = "" }) {
145
145
  return /* @__PURE__ */ n("span", {
package/fieldset.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { JSX } from './_vendor/preact/src/index';
2
+ /** Carries native fieldset restrictions to custom selection controls. */
3
+ export declare function Fieldset(props: JSX.IntrinsicElements['fieldset']): JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "../../../_chunks/jsxRuntime.module-F6UFnpT-.js";
2
- import { Input as t } from "../../../native-control.js";
2
+ import { n as t } from "../../../_chunks/native-control-C_yok8_-.js";
3
3
  //#region src/filter/filters/slider/single.tsx
4
4
  function n({ min: n, max: r, value: i, step: a = 1, disabled: o = !1, id: s, className: c = "", ariaLabel: l, ariaValueText: u, ariaDescribedBy: d, onChange: f, onCommit: p, onKeyDown: m }) {
5
5
  let h = r - n, g = h > 0 ? Math.max(0, Math.min(100, (i - n) / h * 100)) : 0;
package/filter-badge.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { i as e } from "./_chunks/preact.module-BBM36DnO.js";
2
2
  import { a as t } from "./_chunks/hooks.module-CG3gN83z.js";
3
3
  import { t as n } from "./_chunks/jsxRuntime.module-F6UFnpT-.js";
4
- import { n as r, t as i } from "./_chunks/choice-chips-Cs4D-3nH.js";
4
+ import { n as r, t as i } from "./_chunks/choice-chips-CHQTUdLs.js";
5
5
  //#region src/filter-badge.tsx
6
6
  function a(e) {
7
7
  return /* @__PURE__ */ n(r, {
@@ -1,20 +1,20 @@
1
1
  import { t as e } from "./_chunks/hooks.module-CG3gN83z.js";
2
2
  import { t } from "./_chunks/jsxRuntime.module-F6UFnpT-.js";
3
- import { ButtonControl as n, TextArea as r } from "./native-control.js";
3
+ import { a as n, t as r } from "./_chunks/native-control-C_yok8_-.js";
4
4
  import { Legend as i } from "./legend.js";
5
5
  //#region src/filter-controls.tsx
6
- function a({ label: e, detail: r, selected: i, className: a = "", detailClassName: o = "", ...s }) {
7
- return /* @__PURE__ */ t(n, {
6
+ function a({ label: e, detail: n, selected: i, className: a = "", detailClassName: o = "", ...s }) {
7
+ return /* @__PURE__ */ t(r, {
8
8
  ...s,
9
9
  class: `rv-option-button ${a}`,
10
10
  "aria-pressed": i,
11
11
  children: [/* @__PURE__ */ t("strong", { children: e }), /* @__PURE__ */ t("span", {
12
12
  class: `rv-option-button__detail ${o}`,
13
- children: r
13
+ children: n
14
14
  })]
15
15
  });
16
16
  }
17
- function o({ highlight: n, className: i = "", inputClassName: a = "", highlightClassName: o = "", ...s }) {
17
+ function o({ highlight: r, className: i = "", inputClassName: a = "", highlightClassName: o = "", ...s }) {
18
18
  let c = e(null);
19
19
  return /* @__PURE__ */ t("div", {
20
20
  class: `rv-highlighted-input ${i}`,
@@ -23,8 +23,8 @@ function o({ highlight: n, className: i = "", inputClassName: a = "", highlightC
23
23
  class: `rv-highlighted-input__highlight ${o}`,
24
24
  "aria-hidden": "true",
25
25
  ref: c,
26
- children: n
27
- }), /* @__PURE__ */ t(r, {
26
+ children: r
27
+ }), /* @__PURE__ */ t(n, {
28
28
  ...s,
29
29
  class: `rv-highlighted-input__input ${a}`,
30
30
  spellcheck: s.spellcheck ?? !1,
@@ -0,0 +1,5 @@
1
+ export declare const FormFieldContext: import('../_vendor/preact/src/index').Context<{
2
+ labelId?: string;
3
+ hintId?: string;
4
+ disabled?: boolean;
5
+ }>;
@@ -1,9 +1,10 @@
1
1
  import { t as e } from "../_chunks/jsxRuntime.module-F6UFnpT-.js";
2
- import { createPreactElement as t } from "../preact-mount.js";
3
- import { Input as n, Select as r } from "../native-control.js";
2
+ import { n as t } from "../_chunks/native-control-C_yok8_-.js";
3
+ import { createPreactElement as n } from "../preact-mount.js";
4
+ import { t as r } from "../_chunks/control-AHKXD5Eu.js";
4
5
  //#region src/form-controls/index.view.tsx
5
- function i(n, r) {
6
- return t(n, /* @__PURE__ */ e("label", {
6
+ function i(t, r) {
7
+ return n(t, /* @__PURE__ */ e("label", {
7
8
  class: ["rv-field", r.className].filter(Boolean).join(" "),
8
9
  children: [
9
10
  /* @__PURE__ */ e("span", {
@@ -24,16 +25,10 @@ function i(n, r) {
24
25
  }));
25
26
  }
26
27
  function a(r, i) {
27
- return t(r, /* @__PURE__ */ e(n, {
28
+ return n(r, /* @__PURE__ */ e(t, {
28
29
  type: "text",
29
30
  placeholder: i
30
31
  }));
31
32
  }
32
- function o(n, i) {
33
- return t(n, /* @__PURE__ */ e(r, { children: i.map((t) => /* @__PURE__ */ e("option", {
34
- value: t.value,
35
- children: t.label
36
- }, t.value)) }));
37
- }
38
33
  //#endregion
39
- export { i as createFormField, o as createSelectControl, a as createTextControl };
34
+ export { r as createDropdownControl, i as createFormField, a as createTextControl };
@@ -6,7 +6,5 @@ export interface FormFieldOptions {
6
6
  }
7
7
  export declare function createFormField(document: Document, options: FormFieldOptions): HTMLLabelElement;
8
8
  export declare function createTextControl(document: Document, placeholder: string): HTMLInputElement;
9
- export declare function createSelectControl(document: Document, options: readonly {
10
- value: string;
11
- label: string;
12
- }[]): HTMLSelectElement;
9
+ /** DOM counterpart of Dropdown; callers own its lifetime. */
10
+ export { createDropdownControl } from '../dropdown/control';