@shwfed/config 2.7.3 → 2.7.5

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 (108) hide show
  1. package/dist/mcp.mjs +36 -5
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/badge-DamXUB_x.js +1 -0
  4. package/dist/preview/assets/{config-5JFmp62X.js → config-CXgHZFVu.js} +1 -1
  5. package/dist/preview/assets/{config-BkS5uufU.js → config-CYixJlBY.js} +1 -1
  6. package/dist/preview/assets/{config-DE97oObU.js → config-CtPQb6dK.js} +1 -1
  7. package/dist/preview/assets/{config-Ck5_8YaL.js → config-DBviu6U0.js} +1 -1
  8. package/dist/preview/assets/{config-Bo4cd_u5.js → config-Dtj6xvFB.js} +1 -1
  9. package/dist/preview/assets/{config-CMcqX_mc.js → config-DyKtOYYU.js} +1 -1
  10. package/dist/preview/assets/{config-BoVPp04e.js → config-ISM4vT-S.js} +1 -1
  11. package/dist/preview/assets/{config-dk7L4924.js → config-ulTPyAGw.js} +1 -1
  12. package/dist/preview/assets/{config-L72ON8PT.js → config-v7KXfP3A.js} +1 -1
  13. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-Cr7UNELp.js → definition.vue_vue_type_script_setup_true_lang-C-3KP_in.js} +1 -1
  14. package/dist/preview/assets/index-CqWUukUH.css +1 -0
  15. package/dist/preview/assets/index-CzxZSeNm.js +680 -0
  16. package/dist/preview/assets/{index-DumuGVME.js → index-D6fhWrrp.js} +1 -1
  17. package/dist/preview/assets/index-DUSkLHHf.js +1 -0
  18. package/dist/preview/assets/{item-BhBaPg4Z.js → item-BAj_4_7-.js} +1 -1
  19. package/dist/preview/assets/{runtime-BbGu9CHo.js → runtime-B7NcvR9y.js} +1 -1
  20. package/dist/preview/assets/{runtime-DrxczhTW.js → runtime-BqlrYWt_.js} +1 -1
  21. package/dist/preview/assets/{runtime-luMscNiE.js → runtime-CiWg_Jub.js} +1 -1
  22. package/dist/preview/assets/{runtime-CILO8PDD.js → runtime-CpMT9U1z.js} +1 -1
  23. package/dist/preview/assets/{runtime-C6Pc6N3T.js → runtime-CswN1gKf.js} +1 -1
  24. package/dist/preview/assets/{runtime-iR16bMIx.js → runtime-DOK5OTJn.js} +1 -1
  25. package/dist/preview/assets/{runtime-DZuxXJrv.js → runtime-DldmFxn1.js} +1 -1
  26. package/dist/preview/assets/{runtime-CrNhb4dv.js → runtime-WZBVKYom.js} +1 -1
  27. package/dist/preview/assets/{runtime-KTenCV-J.js → runtime-jVzpCkuu.js} +1 -1
  28. package/dist/preview/index.html +2 -2
  29. package/dist/runtime/components/block-layout-editor/index.d.vue.ts +19 -1
  30. package/dist/runtime/components/block-layout-editor/index.vue +131 -38
  31. package/dist/runtime/components/block-layout-editor/index.vue.d.ts +19 -1
  32. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/config.d.vue.ts +4 -0
  33. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/config.vue.d.ts +4 -0
  34. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/runtime.d.vue.ts +4 -0
  35. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/runtime.vue.d.ts +4 -0
  36. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/schema.d.ts +4 -0
  37. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.d.vue.ts +4 -0
  38. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.vue.d.ts +4 -0
  39. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.d.vue.ts +4 -0
  40. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.vue.d.ts +4 -0
  41. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +6 -0
  42. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/badge.vue +11 -1
  43. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/config.d.vue.ts +2 -0
  44. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/config.vue +48 -21
  45. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/config.vue.d.ts +2 -0
  46. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/runtime.d.vue.ts +2 -0
  47. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/runtime.vue +46 -26
  48. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/runtime.vue.d.ts +2 -0
  49. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/schema.d.ts +2 -0
  50. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/schema.js +12 -1
  51. package/dist/runtime/components/form/FormUnitRenderer.vue +2 -8
  52. package/dist/runtime/components/form/config.vue +49 -1
  53. package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.actions/schema.d.ts +1 -0
  54. package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.actions/schema.js +4 -1
  55. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.date/config.d.vue.ts +16 -16
  56. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.date/config.vue.d.ts +16 -16
  57. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.d.vue.ts +18 -18
  58. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.vue.d.ts +18 -18
  59. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetime/config.d.vue.ts +16 -16
  60. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetime/config.vue.d.ts +16 -16
  61. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.d.vue.ts +18 -18
  62. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.vue.d.ts +18 -18
  63. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.list/schema.d.ts +1 -0
  64. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.list/schema.js +4 -1
  65. package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.d.ts +1 -0
  66. package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.js +4 -1
  67. package/dist/runtime/components/form/fields/2026-05-20/com.shwfed.form.field.collapsible/schema.d.ts +1 -0
  68. package/dist/runtime/components/form/fields/2026-05-20/com.shwfed.form.field.collapsible/schema.js +4 -1
  69. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/config.d.vue.ts +16 -16
  70. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/config.vue.d.ts +16 -16
  71. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.d.vue.ts +18 -18
  72. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.vue.d.ts +18 -18
  73. package/dist/runtime/components/form/index.d.vue.ts +1 -0
  74. package/dist/runtime/components/form/index.vue +8 -0
  75. package/dist/runtime/components/form/index.vue.d.ts +1 -0
  76. package/dist/runtime/components/form/schema.d.ts +25 -0
  77. package/dist/runtime/components/form/schema.js +17 -0
  78. package/dist/runtime/components/form/unit-config.vue +32 -4
  79. package/dist/runtime/components/form/utils/history.d.ts +8 -0
  80. package/dist/runtime/components/form/utils/history.js +8 -0
  81. package/dist/runtime/components/form/utils/resolve.d.ts +9 -0
  82. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +26 -26
  83. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +26 -26
  84. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +26 -26
  85. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +26 -26
  86. package/dist/runtime/components/table/schema.d.ts +8 -0
  87. package/dist/runtime/components/ui/command/CommandItem.d.vue.ts +2 -2
  88. package/dist/runtime/components/ui/command/CommandItem.vue +1 -0
  89. package/dist/runtime/components/ui/command/CommandItem.vue.d.ts +2 -2
  90. package/dist/runtime/components/ui/context-menu/ContextMenuContent.d.vue.ts +0 -1
  91. package/dist/runtime/components/ui/context-menu/ContextMenuContent.vue +3 -4
  92. package/dist/runtime/components/ui/context-menu/ContextMenuContent.vue.d.ts +0 -1
  93. package/dist/runtime/components/ui/expression-editor/CodeMirrorInput.vue +17 -2
  94. package/dist/runtime/components/ui/input-group/InputGroupCombobox.d.vue.ts +2 -8
  95. package/dist/runtime/components/ui/input-group/InputGroupCombobox.vue +6 -5
  96. package/dist/runtime/components/ui/input-group/InputGroupCombobox.vue.d.ts +2 -8
  97. package/dist/runtime/components/ui/popover/PopoverContent.d.vue.ts +0 -1
  98. package/dist/runtime/components/ui/popover/PopoverContent.vue +3 -4
  99. package/dist/runtime/components/ui/popover/PopoverContent.vue.d.ts +0 -1
  100. package/dist/runtime/components/ui/tooltip/TooltipContent.d.vue.ts +0 -1
  101. package/dist/runtime/components/ui/tooltip/TooltipContent.vue +3 -4
  102. package/dist/runtime/components/ui/tooltip/TooltipContent.vue.d.ts +0 -1
  103. package/dist/runtime/share/slot-renderer.vue +2 -8
  104. package/package.json +1 -1
  105. package/dist/preview/assets/badge-CV7CwAKY.js +0 -1
  106. package/dist/preview/assets/index-C2PrdVxC.css +0 -1
  107. package/dist/preview/assets/index-CTZy_nrf.js +0 -680
  108. package/dist/preview/assets/index-CY99yvOi.js +0 -1
@@ -11,6 +11,15 @@ export { commonFieldFields } from "./utils/common.js";
11
11
  export { getStructFieldTitle, getStructFieldDescription } from "./utils/schema-meta.js";
12
12
  export { Align, DEFAULT_GAP, LayoutSet, validatePlacements } from "../../share/layout.js";
13
13
  const KIND = "shwfed.component.form";
14
+ export const metadata = {
15
+ name: "\u8868\u5355",
16
+ icon: "fluent:form-20-regular",
17
+ operations: [
18
+ { id: "undo", name: "\u64A4\u9500", icon: "fluent:arrow-undo-20-regular" },
19
+ { id: "redo", name: "\u91CD\u505A", icon: "fluent:arrow-redo-20-regular" },
20
+ { id: "reset-to-initial", name: "\u91CD\u7F6E\u4E3A\u521D\u59CB\u503C", icon: "fluent:arrow-reset-20-regular" }
21
+ ]
22
+ };
14
23
  function unitFields(configure) {
15
24
  const fieldSchemas = allFieldSchemas(configure);
16
25
  const Field = fieldSchemas.length === 0 ? Schema.Never : fieldSchemas.length === 1 ? fieldSchemas[0] : Schema.Union(...fieldSchemas);
@@ -88,6 +97,13 @@ export function FormConfig(configure) {
88
97
  );
89
98
  return Schema.Struct({
90
99
  kind: Schema.tag(KIND),
100
+ id: Schema.optional(Schema.UUID.annotations({
101
+ description: "\u8868\u5355\u5B9E\u4F8B\u552F\u4E00\u6807\u8BC6\uFF1B\u4F5C\u4E3A\u4E8B\u4EF6\u76EE\u6807\u88AB op-request \u5F15\u7528"
102
+ })),
103
+ displayName: Schema.optional(Schema.String.annotations({
104
+ title: "\u5185\u90E8\u540D\u79F0",
105
+ description: "\u4EC5\u5728\u914D\u7F6E\u754C\u9762\u53EF\u89C1\u7684\u8868\u5355\u540D\u79F0\uFF0C\u7528\u4E8E\u5728\u4E8B\u4EF6\u76EE\u6807\u7B49\u4F4D\u7F6E\u6807\u8BC6\u8BE5\u8868\u5355\uFF1B\u8FD0\u884C\u65F6\u4E0D\u5C55\u793A"
106
+ })),
91
107
  initial: Schema.optional(Initial.annotations({
92
108
  title: "\u521D\u59CB\u503C",
93
109
  description: "\u8868\u5355\u521D\u59CB\u503C\u7684\u6765\u6E90\uFF1A\u53EF\u9009\u7684 HTTP \u8BF7\u6C42\uFF0C\u52A0\u4E00\u4E2A\u8FD4\u56DE\u521D\u59CB\u503C\u5BF9\u8C61\u7684 CEL \u8868\u8FBE\u5F0F"
@@ -118,6 +134,7 @@ export function createFormConfig(body) {
118
134
  export function defaultFormConfig() {
119
135
  return {
120
136
  kind: KIND,
137
+ id: crypto.randomUUID(),
121
138
  fields: [],
122
139
  layouts: [{ name: "\u9ED8\u8BA4", layout: { columns: 1, placements: {} } }]
123
140
  };
@@ -218,15 +218,25 @@ async function pasteFields(target) {
218
218
  }
219
219
  toast.success(`\u5DF2\u7C98\u8D34 ${pasted.length} \u4E2A\u5B57\u6BB5`);
220
220
  }
221
- function updateActiveField(next) {
222
- const id = activeFieldId.value;
223
- if (!id) return;
221
+ function updateField(id, next) {
224
222
  const i = unit.value.fields.findIndex((f) => f.id === id);
225
223
  if (i < 0) return;
226
224
  const fields = [...unit.value.fields];
227
225
  fields[i] = next;
228
226
  unit.value = { ...unit.value, fields };
229
227
  }
228
+ function updateActiveField(next) {
229
+ const id = activeFieldId.value;
230
+ if (!id) return;
231
+ updateField(id, next);
232
+ }
233
+ function fieldById(id) {
234
+ return unit.value.fields.find((f) => f.id === id) ?? null;
235
+ }
236
+ function fieldEntryById(id) {
237
+ const f = fieldById(id);
238
+ return f ? findField(f.type, f.compatibilityDate) ?? null : null;
239
+ }
230
240
  const inheritedCEL = injectCELContext();
231
241
  function celForMigration(expression, context) {
232
242
  return rawCel(expression, { ...celBindings(inheritedCEL), ...context });
@@ -478,7 +488,25 @@ function isExtraActive(id) {
478
488
  @delete-items="removeFields"
479
489
  @copy-items="copyFields"
480
490
  @paste="pasteFields"
481
- />
491
+ >
492
+ <!-- Fullscreen inline-config pane body: render the field's own
493
+ config editor for a simple field opened inline, without
494
+ pushing the drill stack. -->
495
+ <template #inline-config="{ itemId }">
496
+ <component
497
+ :is="fieldEntryById(itemId).config"
498
+ v-if="fieldEntryById(itemId)?.config"
499
+ :model-value="fieldById(itemId)"
500
+ @update:model-value="(next) => updateField(itemId, next)"
501
+ />
502
+ <div
503
+ v-else
504
+ class="text-sm text-red-500"
505
+ >
506
+ 未注册的字段类型
507
+ </div>
508
+ </template>
509
+ </BlockLayoutEditor>
482
510
  </div>
483
511
  </div>
484
512
 
@@ -15,6 +15,14 @@ export declare function deepClone<T>(value: T): T;
15
15
  export type FormHistory = {
16
16
  undo: () => void;
17
17
  redo: () => void;
18
+ /**
19
+ * Restore the form to its initial (post-seed, post-first-derivation)
20
+ * baseline — the same state `undo` can never rewind past. Written through
21
+ * the normal commit path (not the navigate suppression), so the reset is
22
+ * itself recorded as a history entry and can be undone to recover the
23
+ * discarded edits. A no-op until that baseline has been established.
24
+ */
25
+ reset: () => void;
18
26
  canUndo: Ref<boolean>;
19
27
  canRedo: Ref<boolean>;
20
28
  };
@@ -35,6 +35,7 @@ export function useFormHistory(state, options) {
35
35
  let navigating = false;
36
36
  let recording = false;
37
37
  let snapshotPending = false;
38
+ let initialSnapshot;
38
39
  async function scheduleSnapshot() {
39
40
  if (snapshotPending) return;
40
41
  snapshotPending = true;
@@ -54,6 +55,7 @@ export function useFormHistory(state, options) {
54
55
  tracked.value = capture();
55
56
  history.commit();
56
57
  history.clear();
58
+ initialSnapshot = clone(tracked.value);
57
59
  recording = true;
58
60
  });
59
61
  function navigate(run) {
@@ -65,9 +67,15 @@ export function useFormHistory(state, options) {
65
67
  navigating = false;
66
68
  });
67
69
  }
70
+ function reset() {
71
+ if (!initialSnapshot) return;
72
+ state.value = deepClone(initialSnapshot.state);
73
+ dirty.value = new Set(initialSnapshot.dirty);
74
+ }
68
75
  return {
69
76
  undo: () => navigate(() => history.undo()),
70
77
  redo: () => navigate(() => history.redo()),
78
+ reset,
71
79
  canUndo: history.canUndo,
72
80
  canRedo: history.canRedo
73
81
  };
@@ -56,6 +56,15 @@ export type FieldMetadata = Readonly<{
56
56
  icon: string;
57
57
  w: FieldSizeRange;
58
58
  h: FieldSizeRange;
59
+ /**
60
+ * Whether this field can be configured *inline* — in a right-docked pane —
61
+ * while the layout editor is in fullscreen. Absent / `true` → supported
62
+ * (the default for simple fields). Set `false` for fields whose config is
63
+ * too large or too structurally nested to fit a docked pane (list, table,
64
+ * actions, collapsible); those keep the drill-down behavior, which exits
65
+ * fullscreen. See `BlockLayoutEditor`'s inline-config pane.
66
+ */
67
+ inlineConfig?: boolean;
59
68
  }>;
60
69
  /**
61
70
  * Optional creation-time defaults factory. Returns a partial config that
@@ -33,19 +33,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
33
33
  readonly message: string;
34
34
  }[]] | undefined;
35
35
  readonly readonly?: string | undefined;
36
- readonly write: {
37
- readonly kind: "binding";
38
- readonly binding: string;
39
- } | {
40
- readonly onChange?: string | undefined;
41
- readonly kind: "remote";
42
- readonly triggers?: readonly {
43
- readonly target: string;
44
- readonly operation: string;
45
- }[] | undefined;
46
- readonly successMessage?: string | undefined;
47
- readonly accessor: string;
48
- };
49
36
  readonly grow?: boolean | undefined;
50
37
  readonly enableSorting?: boolean | undefined;
51
38
  readonly options: {
@@ -90,6 +77,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
90
77
  }[];
91
78
  };
92
79
  readonly sortKey?: string | undefined;
80
+ readonly write: {
81
+ readonly kind: "binding";
82
+ readonly binding: string;
83
+ } | {
84
+ readonly onChange?: string | undefined;
85
+ readonly kind: "remote";
86
+ readonly triggers?: readonly {
87
+ readonly target: string;
88
+ readonly operation: string;
89
+ }[] | undefined;
90
+ readonly successMessage?: string | undefined;
91
+ readonly accessor: string;
92
+ };
93
93
  }) => any;
94
94
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
95
95
  "onUpdate:modelValue"?: ((value: {
@@ -122,19 +122,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
122
122
  readonly message: string;
123
123
  }[]] | undefined;
124
124
  readonly readonly?: string | undefined;
125
- readonly write: {
126
- readonly kind: "binding";
127
- readonly binding: string;
128
- } | {
129
- readonly onChange?: string | undefined;
130
- readonly kind: "remote";
131
- readonly triggers?: readonly {
132
- readonly target: string;
133
- readonly operation: string;
134
- }[] | undefined;
135
- readonly successMessage?: string | undefined;
136
- readonly accessor: string;
137
- };
138
125
  readonly grow?: boolean | undefined;
139
126
  readonly enableSorting?: boolean | undefined;
140
127
  readonly options: {
@@ -179,6 +166,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
179
166
  }[];
180
167
  };
181
168
  readonly sortKey?: string | undefined;
169
+ readonly write: {
170
+ readonly kind: "binding";
171
+ readonly binding: string;
172
+ } | {
173
+ readonly onChange?: string | undefined;
174
+ readonly kind: "remote";
175
+ readonly triggers?: readonly {
176
+ readonly target: string;
177
+ readonly operation: string;
178
+ }[] | undefined;
179
+ readonly successMessage?: string | undefined;
180
+ readonly accessor: string;
181
+ };
182
182
  }) => any) | undefined;
183
183
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
184
184
  declare const _default: typeof __VLS_export;
@@ -33,19 +33,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
33
33
  readonly message: string;
34
34
  }[]] | undefined;
35
35
  readonly readonly?: string | undefined;
36
- readonly write: {
37
- readonly kind: "binding";
38
- readonly binding: string;
39
- } | {
40
- readonly onChange?: string | undefined;
41
- readonly kind: "remote";
42
- readonly triggers?: readonly {
43
- readonly target: string;
44
- readonly operation: string;
45
- }[] | undefined;
46
- readonly successMessage?: string | undefined;
47
- readonly accessor: string;
48
- };
49
36
  readonly grow?: boolean | undefined;
50
37
  readonly enableSorting?: boolean | undefined;
51
38
  readonly options: {
@@ -90,6 +77,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
90
77
  }[];
91
78
  };
92
79
  readonly sortKey?: string | undefined;
80
+ readonly write: {
81
+ readonly kind: "binding";
82
+ readonly binding: string;
83
+ } | {
84
+ readonly onChange?: string | undefined;
85
+ readonly kind: "remote";
86
+ readonly triggers?: readonly {
87
+ readonly target: string;
88
+ readonly operation: string;
89
+ }[] | undefined;
90
+ readonly successMessage?: string | undefined;
91
+ readonly accessor: string;
92
+ };
93
93
  }) => any;
94
94
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
95
95
  "onUpdate:modelValue"?: ((value: {
@@ -122,19 +122,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
122
122
  readonly message: string;
123
123
  }[]] | undefined;
124
124
  readonly readonly?: string | undefined;
125
- readonly write: {
126
- readonly kind: "binding";
127
- readonly binding: string;
128
- } | {
129
- readonly onChange?: string | undefined;
130
- readonly kind: "remote";
131
- readonly triggers?: readonly {
132
- readonly target: string;
133
- readonly operation: string;
134
- }[] | undefined;
135
- readonly successMessage?: string | undefined;
136
- readonly accessor: string;
137
- };
138
125
  readonly grow?: boolean | undefined;
139
126
  readonly enableSorting?: boolean | undefined;
140
127
  readonly options: {
@@ -179,6 +166,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
179
166
  }[];
180
167
  };
181
168
  readonly sortKey?: string | undefined;
169
+ readonly write: {
170
+ readonly kind: "binding";
171
+ readonly binding: string;
172
+ } | {
173
+ readonly onChange?: string | undefined;
174
+ readonly kind: "remote";
175
+ readonly triggers?: readonly {
176
+ readonly target: string;
177
+ readonly operation: string;
178
+ }[] | undefined;
179
+ readonly successMessage?: string | undefined;
180
+ readonly accessor: string;
181
+ };
182
182
  }) => any) | undefined;
183
183
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
184
184
  declare const _default: typeof __VLS_export;
@@ -33,19 +33,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
33
33
  readonly message: string;
34
34
  }[]] | undefined;
35
35
  readonly readonly?: string | undefined;
36
- readonly write: {
37
- readonly kind: "binding";
38
- readonly binding: string;
39
- } | {
40
- readonly onChange?: string | undefined;
41
- readonly kind: "remote";
42
- readonly triggers?: readonly {
43
- readonly target: string;
44
- readonly operation: string;
45
- }[] | undefined;
46
- readonly successMessage?: string | undefined;
47
- readonly accessor: string;
48
- };
49
36
  readonly grow?: boolean | undefined;
50
37
  readonly enableSorting?: boolean | undefined;
51
38
  readonly options: {
@@ -90,6 +77,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
90
77
  }[];
91
78
  };
92
79
  readonly sortKey?: string | undefined;
80
+ readonly write: {
81
+ readonly kind: "binding";
82
+ readonly binding: string;
83
+ } | {
84
+ readonly onChange?: string | undefined;
85
+ readonly kind: "remote";
86
+ readonly triggers?: readonly {
87
+ readonly target: string;
88
+ readonly operation: string;
89
+ }[] | undefined;
90
+ readonly successMessage?: string | undefined;
91
+ readonly accessor: string;
92
+ };
93
93
  }) => any;
94
94
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
95
95
  "onUpdate:modelValue"?: ((value: {
@@ -122,19 +122,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
122
122
  readonly message: string;
123
123
  }[]] | undefined;
124
124
  readonly readonly?: string | undefined;
125
- readonly write: {
126
- readonly kind: "binding";
127
- readonly binding: string;
128
- } | {
129
- readonly onChange?: string | undefined;
130
- readonly kind: "remote";
131
- readonly triggers?: readonly {
132
- readonly target: string;
133
- readonly operation: string;
134
- }[] | undefined;
135
- readonly successMessage?: string | undefined;
136
- readonly accessor: string;
137
- };
138
125
  readonly grow?: boolean | undefined;
139
126
  readonly enableSorting?: boolean | undefined;
140
127
  readonly options: {
@@ -179,6 +166,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
179
166
  }[];
180
167
  };
181
168
  readonly sortKey?: string | undefined;
169
+ readonly write: {
170
+ readonly kind: "binding";
171
+ readonly binding: string;
172
+ } | {
173
+ readonly onChange?: string | undefined;
174
+ readonly kind: "remote";
175
+ readonly triggers?: readonly {
176
+ readonly target: string;
177
+ readonly operation: string;
178
+ }[] | undefined;
179
+ readonly successMessage?: string | undefined;
180
+ readonly accessor: string;
181
+ };
182
182
  }) => any) | undefined;
183
183
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
184
184
  declare const _default: typeof __VLS_export;
@@ -33,19 +33,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
33
33
  readonly message: string;
34
34
  }[]] | undefined;
35
35
  readonly readonly?: string | undefined;
36
- readonly write: {
37
- readonly kind: "binding";
38
- readonly binding: string;
39
- } | {
40
- readonly onChange?: string | undefined;
41
- readonly kind: "remote";
42
- readonly triggers?: readonly {
43
- readonly target: string;
44
- readonly operation: string;
45
- }[] | undefined;
46
- readonly successMessage?: string | undefined;
47
- readonly accessor: string;
48
- };
49
36
  readonly grow?: boolean | undefined;
50
37
  readonly enableSorting?: boolean | undefined;
51
38
  readonly options: {
@@ -90,6 +77,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
90
77
  }[];
91
78
  };
92
79
  readonly sortKey?: string | undefined;
80
+ readonly write: {
81
+ readonly kind: "binding";
82
+ readonly binding: string;
83
+ } | {
84
+ readonly onChange?: string | undefined;
85
+ readonly kind: "remote";
86
+ readonly triggers?: readonly {
87
+ readonly target: string;
88
+ readonly operation: string;
89
+ }[] | undefined;
90
+ readonly successMessage?: string | undefined;
91
+ readonly accessor: string;
92
+ };
93
93
  }) => any;
94
94
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
95
95
  "onUpdate:modelValue"?: ((value: {
@@ -122,19 +122,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
122
122
  readonly message: string;
123
123
  }[]] | undefined;
124
124
  readonly readonly?: string | undefined;
125
- readonly write: {
126
- readonly kind: "binding";
127
- readonly binding: string;
128
- } | {
129
- readonly onChange?: string | undefined;
130
- readonly kind: "remote";
131
- readonly triggers?: readonly {
132
- readonly target: string;
133
- readonly operation: string;
134
- }[] | undefined;
135
- readonly successMessage?: string | undefined;
136
- readonly accessor: string;
137
- };
138
125
  readonly grow?: boolean | undefined;
139
126
  readonly enableSorting?: boolean | undefined;
140
127
  readonly options: {
@@ -179,6 +166,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
179
166
  }[];
180
167
  };
181
168
  readonly sortKey?: string | undefined;
169
+ readonly write: {
170
+ readonly kind: "binding";
171
+ readonly binding: string;
172
+ } | {
173
+ readonly onChange?: string | undefined;
174
+ readonly kind: "remote";
175
+ readonly triggers?: readonly {
176
+ readonly target: string;
177
+ readonly operation: string;
178
+ }[] | undefined;
179
+ readonly successMessage?: string | undefined;
180
+ readonly accessor: string;
181
+ };
182
182
  }) => any) | undefined;
183
183
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
184
184
  declare const _default: typeof __VLS_export;
@@ -135,10 +135,12 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
135
135
  }[];
136
136
  readonly query?: {
137
137
  readonly style?: string | undefined;
138
+ readonly id?: string | undefined;
138
139
  readonly initial?: {
139
140
  readonly data: string;
140
141
  readonly request?: string | undefined;
141
142
  } | undefined;
143
+ readonly displayName?: string | undefined;
142
144
  readonly kind: "shwfed.component.form";
143
145
  readonly fields: readonly any[];
144
146
  readonly layouts: readonly {
@@ -440,10 +442,12 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
440
442
  }>>;
441
443
  query: Schema.optional<Schema.refine<{
442
444
  readonly style?: string | undefined;
445
+ readonly id?: string | undefined;
443
446
  readonly initial?: {
444
447
  readonly data: string;
445
448
  readonly request?: string | undefined;
446
449
  } | undefined;
450
+ readonly displayName?: string | undefined;
447
451
  readonly kind: "shwfed.component.form";
448
452
  readonly fields: readonly any[];
449
453
  readonly layouts: readonly {
@@ -498,6 +502,8 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
498
502
  }>;
499
503
  }>>>;
500
504
  kind: Schema.tag<"shwfed.component.form">;
505
+ id: Schema.optional<Schema.refine<string, typeof Schema.String>>;
506
+ displayName: Schema.optional<Schema.SchemaClass<string, string, never>>;
501
507
  initial: Schema.optional<Schema.transform<Schema.Union<[Schema.Schema<string, string, never>, Schema.Struct<{
502
508
  request: Schema.optional<Schema.Schema<string, string, never>>;
503
509
  data: Schema.Schema<string, string, never>;
@@ -577,10 +583,12 @@ export declare function createTableConfig(body: Omit<Schema.Schema.Type<ReturnTy
577
583
  }[];
578
584
  query?: {
579
585
  readonly style?: string | undefined;
586
+ readonly id?: string | undefined;
580
587
  readonly initial?: {
581
588
  readonly data: string;
582
589
  readonly request?: string | undefined;
583
590
  } | undefined;
591
+ readonly displayName?: string | undefined;
584
592
  readonly kind: "shwfed.component.form";
585
593
  readonly fields: readonly any[];
586
594
  readonly layouts: readonly {
@@ -10,9 +10,9 @@ type __VLS_Props = ListboxItemProps & {
10
10
  */
11
11
  keywords?: string;
12
12
  };
13
- declare var __VLS_11: {};
13
+ declare var __VLS_12: {};
14
14
  type __VLS_Slots = {} & {
15
- default?: (props: typeof __VLS_11) => any;
15
+ default?: (props: typeof __VLS_12) => any;
16
16
  };
17
17
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
18
  select: (event: import("reka-ui").ListboxItemSelectEvent<import("reka-ui").AcceptableValue>) => any;
@@ -76,6 +76,7 @@ onUnmounted(() => {
76
76
  data-slot="command-item"
77
77
  :class="cn('data-highlighted:bg-zinc-100 data-highlighted:text-zinc-700 hover:bg-zinc-50 [&_svg:not([class*=\'text-\'])]:text-zinc-700 cursor-pointer relative flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\'size-\'])]:size-4', props.class)"
78
78
  @select="handleSelect"
79
+ @mousedown.prevent
79
80
  >
80
81
  <slot />
81
82
  </ListboxItem>
@@ -10,9 +10,9 @@ type __VLS_Props = ListboxItemProps & {
10
10
  */
11
11
  keywords?: string;
12
12
  };
13
- declare var __VLS_11: {};
13
+ declare var __VLS_12: {};
14
14
  type __VLS_Slots = {} & {
15
- default?: (props: typeof __VLS_11) => any;
15
+ default?: (props: typeof __VLS_12) => any;
16
16
  };
17
17
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
18
  select: (event: import("reka-ui").ListboxItemSelectEvent<import("reka-ui").AcceptableValue>) => any;
@@ -2,7 +2,6 @@ import type { ContextMenuContentProps } from 'reka-ui';
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = ContextMenuContentProps & {
4
4
  class?: HTMLAttributes['class'];
5
- to?: string | HTMLElement | null;
6
5
  };
7
6
  declare var __VLS_14: {};
8
7
  type __VLS_Slots = {} & {
@@ -27,16 +27,15 @@ const props = defineProps({
27
27
  reference: { type: null, required: false },
28
28
  asChild: { type: Boolean, required: false },
29
29
  as: { type: null, required: false },
30
- class: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true },
31
- to: { type: null, required: false }
30
+ class: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true }
32
31
  });
33
32
  const emits = defineEmits(["escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "closeAutoFocus"]);
34
- const delegatedProps = reactiveOmit(props, "class", "to");
33
+ const delegatedProps = reactiveOmit(props, "class");
35
34
  const forwarded = useForwardPropsEmits(delegatedProps, emits);
36
35
  </script>
37
36
 
38
37
  <template>
39
- <ContextMenuPortal :to="to ?? void 0">
38
+ <ContextMenuPortal>
40
39
  <ContextMenuContent
41
40
  data-slot="context-menu-content"
42
41
  v-bind="{ ...$attrs, ...forwarded }"
@@ -2,7 +2,6 @@ import type { ContextMenuContentProps } from 'reka-ui';
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = ContextMenuContentProps & {
4
4
  class?: HTMLAttributes['class'];
5
- to?: string | HTMLElement | null;
6
5
  };
7
6
  declare var __VLS_14: {};
8
7
  type __VLS_Slots = {} & {
@@ -41,7 +41,14 @@ const editorTheme = EditorView.theme({
41
41
  },
42
42
  ".cm-scroller": {
43
43
  fontFamily: "var(--font-mono)",
44
- lineHeight: "1.5"
44
+ lineHeight: "1.5",
45
+ // Behave like a native <input>: a single line that outgrows a narrow editor
46
+ // scrolls horizontally with the caret, but never surfaces a scrollbar —
47
+ // whose track would otherwise read as a stray line under the field.
48
+ scrollbarWidth: "none"
49
+ },
50
+ ".cm-scroller::-webkit-scrollbar": {
51
+ display: "none"
45
52
  },
46
53
  ".cm-line": {
47
54
  padding: "0"
@@ -127,8 +134,16 @@ defineExpose({ insertAtSelection, focus });
127
134
  data-slot="input-group-control"
128
135
  :class="cn(
129
136
  'flex-1 min-w-0 self-stretch overflow-x-auto px-3',
130
- props.multiline ? '[&_.cm-content]:min-h-16' : '[&_.cm-scroller]:items-center',
137
+ // Single-line: `overflow-x-auto` on its own makes the browser promote
138
+ // `overflow-y` from `visible` to `auto` (CSS spec quirk), so the 1px gap
139
+ // between the 35px content box and the 34px `h-9` host surfaces a phantom
140
+ // vertical scrollbar. Pin it hidden — one line never scrolls vertically.
141
+ props.multiline ? '[&_.cm-content]:min-h-16' : 'overflow-y-hidden [&_.cm-scroller]:items-center',
131
142
  props.class
132
143
  )"
133
144
  />
134
145
  </template>
146
+
147
+ <style scoped>
148
+ [data-slot=input-group-control]{scrollbar-width:none}[data-slot=input-group-control]::-webkit-scrollbar{display:none}
149
+ </style>
@@ -2,16 +2,10 @@ import { type PopoverContentProps } from 'reka-ui';
2
2
  type __VLS_Props = PopoverContentProps & {
3
3
  disabled?: boolean;
4
4
  invalid?: boolean;
5
- /**
6
- * Render target for the popover portal. Pass a container ref to keep the
7
- * dropdown inside (e.g. a fullscreen ancestor); leave unset for the
8
- * default body-level portal.
9
- */
10
- to?: string | HTMLElement | null;
11
5
  };
12
- declare var __VLS_50: {};
6
+ declare var __VLS_52: {};
13
7
  type __VLS_Slots = {} & {
14
- default?: (props: typeof __VLS_50) => any;
8
+ default?: (props: typeof __VLS_52) => any;
15
9
  };
16
10
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
17
11
  blur: (...args: any[]) => void;