@shwfed/config 2.7.4 → 2.7.6

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 (91) hide show
  1. package/dist/mcp.mjs +25 -5
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{badge-BKq7Eh7r.js → badge-C-IvPZBx.js} +1 -1
  4. package/dist/preview/assets/{config-DD3McP6M.js → config-B7hXY5FF.js} +1 -1
  5. package/dist/preview/assets/{config-CXomiRuI.js → config-Bl8L6943.js} +1 -1
  6. package/dist/preview/assets/{config-Dg3cJb4i.js → config-C947O8za.js} +1 -1
  7. package/dist/preview/assets/{config-De_RAxft.js → config-DXlCQMVi.js} +1 -1
  8. package/dist/preview/assets/{config-DpTBe8_L.js → config-DhAntnE5.js} +1 -1
  9. package/dist/preview/assets/{config-DM58--pQ.js → config-Dj0rEZRq.js} +1 -1
  10. package/dist/preview/assets/{config-C2XmKu42.js → config-DppExb4h.js} +1 -1
  11. package/dist/preview/assets/{config-CnsvNcA2.js → config-_aVQvlhc.js} +1 -1
  12. package/dist/preview/assets/{config-C31gRv6X.js → config-l01zamcS.js} +1 -1
  13. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-D-K8Bmbj.js → definition.vue_vue_type_script_setup_true_lang-BbuC0qEM.js} +1 -1
  14. package/dist/preview/assets/index-B0PL01fm.css +1 -0
  15. package/dist/preview/assets/index-BNaI1T0H.js +680 -0
  16. package/dist/preview/assets/index-BwoBmSxu.js +1 -0
  17. package/dist/preview/assets/{index-4Jigs5K_.js → index-DiC1rvCq.js} +1 -1
  18. package/dist/preview/assets/{item-DnUV5B-b.js → item-GFiAkFW6.js} +1 -1
  19. package/dist/preview/assets/{runtime-ChaoQZI9.js → runtime-5h5U6Ozr.js} +1 -1
  20. package/dist/preview/assets/{runtime-CG4uOgGu.js → runtime-B6dXW6zW.js} +1 -1
  21. package/dist/preview/assets/{runtime-BqhvXsJ-.js → runtime-BEOIc4zU.js} +1 -1
  22. package/dist/preview/assets/{runtime-DnlIppMg.js → runtime-BQnHKogz.js} +1 -1
  23. package/dist/preview/assets/{runtime-W5CcSnyo.js → runtime-Bx7G-5dR.js} +1 -1
  24. package/dist/preview/assets/{runtime-Dj43RjZC.js → runtime-DmV_M4B_.js} +1 -1
  25. package/dist/preview/assets/{runtime-Dhi2Tk84.js → runtime-TNDFpOlo.js} +1 -1
  26. package/dist/preview/assets/{runtime-DAfJmoV1.js → runtime-g9hb36Vh.js} +1 -1
  27. package/dist/preview/assets/{runtime-BCxzICuW.js → runtime-kLWO8JbC.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/runtime.vue +46 -26
  43. package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/schema.js +1 -1
  44. package/dist/runtime/components/config/config.vue +9 -1
  45. package/dist/runtime/components/config/index.vue +11 -1
  46. package/dist/runtime/components/config/schema.d.ts +25 -0
  47. package/dist/runtime/components/config/schema.js +8 -0
  48. package/dist/runtime/components/form/config.vue +49 -1
  49. package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.actions/schema.d.ts +1 -0
  50. package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.actions/schema.js +4 -1
  51. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.list/schema.d.ts +1 -0
  52. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.list/schema.js +4 -1
  53. package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.d.ts +1 -0
  54. package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.js +4 -1
  55. package/dist/runtime/components/form/fields/2026-05-20/com.shwfed.form.field.collapsible/schema.d.ts +1 -0
  56. package/dist/runtime/components/form/fields/2026-05-20/com.shwfed.form.field.collapsible/schema.js +4 -1
  57. package/dist/runtime/components/form/index.d.vue.ts +1 -0
  58. package/dist/runtime/components/form/index.vue +8 -0
  59. package/dist/runtime/components/form/index.vue.d.ts +1 -0
  60. package/dist/runtime/components/form/schema.d.ts +25 -0
  61. package/dist/runtime/components/form/schema.js +17 -0
  62. package/dist/runtime/components/form/unit-config.vue +32 -4
  63. package/dist/runtime/components/form/utils/history.d.ts +8 -0
  64. package/dist/runtime/components/form/utils/history.js +8 -0
  65. package/dist/runtime/components/form/utils/resolve.d.ts +9 -0
  66. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +26 -26
  67. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +26 -26
  68. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +26 -26
  69. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +26 -26
  70. package/dist/runtime/components/table/schema.d.ts +8 -0
  71. package/dist/runtime/components/ui/command/CommandItem.d.vue.ts +2 -2
  72. package/dist/runtime/components/ui/command/CommandItem.vue +1 -0
  73. package/dist/runtime/components/ui/command/CommandItem.vue.d.ts +2 -2
  74. package/dist/runtime/components/ui/context-menu/ContextMenuContent.d.vue.ts +0 -1
  75. package/dist/runtime/components/ui/context-menu/ContextMenuContent.vue +3 -4
  76. package/dist/runtime/components/ui/context-menu/ContextMenuContent.vue.d.ts +0 -1
  77. package/dist/runtime/components/ui/expression-editor/CodeMirrorInput.vue +17 -2
  78. package/dist/runtime/components/ui/input-group/InputGroupCombobox.d.vue.ts +2 -8
  79. package/dist/runtime/components/ui/input-group/InputGroupCombobox.vue +6 -5
  80. package/dist/runtime/components/ui/input-group/InputGroupCombobox.vue.d.ts +2 -8
  81. package/dist/runtime/components/ui/popover/PopoverContent.d.vue.ts +0 -1
  82. package/dist/runtime/components/ui/popover/PopoverContent.vue +3 -4
  83. package/dist/runtime/components/ui/popover/PopoverContent.vue.d.ts +0 -1
  84. package/dist/runtime/components/ui/tooltip/TooltipContent.d.vue.ts +0 -1
  85. package/dist/runtime/components/ui/tooltip/TooltipContent.vue +3 -4
  86. package/dist/runtime/components/ui/tooltip/TooltipContent.vue.d.ts +0 -1
  87. package/dist/runtime/share/event-bus.d.ts +23 -4
  88. package/package.json +1 -1
  89. package/dist/preview/assets/index-CfwL2UCH.js +0 -680
  90. package/dist/preview/assets/index-DNHGrCDe.css +0 -1
  91. package/dist/preview/assets/index-DUo1pTg2.js +0 -1
@@ -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;
@@ -5,6 +5,7 @@ import InputGroupComboboxInput from "./InputGroupComboboxInput.vue";
5
5
  import { Icon } from "@iconify/vue";
6
6
  import { useForwardProps } from "reka-ui";
7
7
  import { reactiveOmit } from "@vueuse/core";
8
+ import { ref } from "vue";
8
9
  import { useI18n } from "vue-i18n";
9
10
  import { getInputGroupReference } from ".";
10
11
  const { t } = useI18n({
@@ -39,20 +40,21 @@ const props = defineProps({
39
40
  as: { type: null, required: false },
40
41
  disableOutsidePointerEvents: { type: Boolean, required: false },
41
42
  disabled: { type: Boolean, required: false },
42
- invalid: { type: Boolean, required: false },
43
- to: { type: null, required: false }
43
+ invalid: { type: Boolean, required: false }
44
44
  });
45
45
  const emits = defineEmits(["blur"]);
46
- const delegatedProps = reactiveOmit(props, "disabled", "invalid", "to");
46
+ const delegatedProps = reactiveOmit(props, "disabled", "invalid");
47
47
  const forwarded = useForwardProps(delegatedProps);
48
+ const open = ref(false);
48
49
  </script>
49
50
 
50
51
  <template>
51
52
  <Command
52
53
  as-child
53
54
  :disabled="props.disabled"
55
+ @update:model-value="open = false"
54
56
  >
55
- <Popover>
57
+ <Popover v-model:open="open">
56
58
  <PopoverTrigger
57
59
  as="input"
58
60
  as-child
@@ -64,7 +66,6 @@ const forwarded = useForwardProps(delegatedProps);
64
66
  </PopoverTrigger>
65
67
  <PopoverContent
66
68
  v-bind="forwarded"
67
- :to="props.to ?? void 0"
68
69
  :reference="getInputGroupReference().value ?? void 0"
69
70
  :style="{
70
71
  width: 'var(--reka-popover-trigger-width)'
@@ -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;
@@ -2,7 +2,6 @@ import type { PopoverContentProps } from 'reka-ui';
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = PopoverContentProps & {
4
4
  class?: HTMLAttributes['class'];
5
- to?: string | HTMLElement | null;
6
5
  };
7
6
  declare var __VLS_14: {};
8
7
  type __VLS_Slots = {} & {
@@ -32,16 +32,15 @@ const props = defineProps({
32
32
  asChild: { type: Boolean, required: false },
33
33
  as: { type: null, required: false },
34
34
  disableOutsidePointerEvents: { type: Boolean, required: false },
35
- class: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true },
36
- to: { type: null, required: false }
35
+ class: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true }
37
36
  });
38
37
  const emits = defineEmits(["escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "openAutoFocus", "closeAutoFocus"]);
39
- const delegatedProps = reactiveOmit(props, "class", "to");
38
+ const delegatedProps = reactiveOmit(props, "class");
40
39
  const forwarded = useForwardPropsEmits(delegatedProps, emits);
41
40
  </script>
42
41
 
43
42
  <template>
44
- <PopoverPortal :to="to ?? void 0">
43
+ <PopoverPortal>
45
44
  <PopoverContent
46
45
  data-slot="popover-content"
47
46
  v-bind="{ ...$attrs, ...forwarded }"
@@ -2,7 +2,6 @@ import type { PopoverContentProps } from 'reka-ui';
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = PopoverContentProps & {
4
4
  class?: HTMLAttributes['class'];
5
- to?: string | HTMLElement | null;
6
5
  };
7
6
  declare var __VLS_14: {};
8
7
  type __VLS_Slots = {} & {
@@ -2,7 +2,6 @@ import type { TooltipContentProps } from 'reka-ui';
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = TooltipContentProps & {
4
4
  class?: HTMLAttributes['class'];
5
- to?: string | HTMLElement | null;
6
5
  };
7
6
  declare var __VLS_14: {};
8
7
  type __VLS_Slots = {} & {
@@ -22,16 +22,15 @@ const props = defineProps({
22
22
  hideWhenDetached: { type: Boolean, required: false },
23
23
  positionStrategy: { type: String, required: false },
24
24
  updatePositionStrategy: { type: String, required: false },
25
- class: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true },
26
- to: { type: null, required: false }
25
+ class: { type: [Boolean, null, String, Object, Array], required: false, skipCheck: true }
27
26
  });
28
27
  const emits = defineEmits(["escapeKeyDown", "pointerDownOutside"]);
29
- const delegatedProps = reactiveOmit(props, "class", "to");
28
+ const delegatedProps = reactiveOmit(props, "class");
30
29
  const forwarded = useForwardPropsEmits(delegatedProps, emits);
31
30
  </script>
32
31
 
33
32
  <template>
34
- <TooltipPortal :to="to ?? void 0">
33
+ <TooltipPortal>
35
34
  <TooltipContent
36
35
  data-slot="tooltip-content"
37
36
  v-bind="{ ...forwarded, ...$attrs }"
@@ -2,7 +2,6 @@ import type { TooltipContentProps } from 'reka-ui';
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  type __VLS_Props = TooltipContentProps & {
4
4
  class?: HTMLAttributes['class'];
5
- to?: string | HTMLElement | null;
6
5
  };
7
6
  declare var __VLS_14: {};
8
7
  type __VLS_Slots = {} & {
@@ -41,10 +41,29 @@ export type EventChannel = Readonly<{
41
41
  }>;
42
42
  /**
43
43
  * Operation id → handler, for one operation-exposing instance. Handlers
44
- * return an Effect so the bus can run them serially and in order. They are
45
- * infallible by contract: an operation that can fail must swallow/log
46
- * internally (mirrors the table's fetch-error contract) so a serial trigger
47
- * chain never aborts halfway because one trigger quietly failed.
44
+ * return an Effect so the bus can run them serially and in order.
45
+ *
46
+ * The `void` error channel pins handlers as infallible *failures* — a handler
47
+ * that hits a recoverable hiccup must swallow/log it internally (mirrors the
48
+ * table's fetch-error contract) rather than surface it, since the bus has no
49
+ * error channel to carry it.
50
+ *
51
+ * A handler MAY still *halt* the chain — the "guard" shape: stop everything
52
+ * queued after it. `dispatchTriggers` runs the list with `Effect.forEach`,
53
+ * which short-circuits the moment one request's effect aborts, so triggers
54
+ * after the guard never dispatch. The page's `close` op is the canonical case
55
+ * (it halts unconditionally — nothing should run after a close). It halts with
56
+ * `Effect.die`, not `Effect.fail`: a defect aborts the chain without widening
57
+ * the `void` error channel here (and `ActionEffect`'s `catchTags` union over in
58
+ * `actions/components/group.vue`). The defect propagates to that runner's
59
+ * `runPromise`, whose outer try/catch absorbs it silently — `catchTags` only
60
+ * intercepts typed failures, so no toast.
61
+ *
62
+ * Pre-submit form validation is the same guard shape but doesn't run over this
63
+ * bus yet — it injects the separate `share/form-validate` seam. The intended
64
+ * end state folds it in as a fallible `validate` operation here, at which point
65
+ * the error channel widens to carry a typed validation failure (see the note in
66
+ * `form-validate.ts`).
48
67
  */
49
68
  export type OperationHandlers = Readonly<Record<string, () => Effect.Effect<void>>>;
50
69
  export declare const EVENT_CHANNEL_KEY: InjectionKey<EventChannel>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shwfed/config",
3
- "version": "2.7.4",
3
+ "version": "2.7.6",
4
4
  "description": "Configurable UI for SHWFED",
5
5
  "type": "module",
6
6
  "publishConfig": {