@shwfed/nuxt 0.11.23 → 0.11.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shwfed/nuxt",
3
3
  "configKey": "shwfed",
4
- "version": "0.11.23",
4
+ "version": "0.11.24",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
@@ -2,10 +2,15 @@
2
2
  import { computed, defineComponent } from "vue";
3
3
  import ShwfedModal from "../../modal.vue";
4
4
  import { useOverlay } from "../../../composables/useOverlay";
5
+ import { provideCELContext } from "../../../plugins/cel/context";
5
6
  const overlay = useOverlay();
6
7
  const OverlayBody = defineComponent({
7
8
  name: "OverlayBody",
8
9
  props: {
10
+ celContext: {
11
+ type: Object,
12
+ required: true
13
+ },
9
14
  render: {
10
15
  type: Function,
11
16
  required: true
@@ -16,6 +21,7 @@ const OverlayBody = defineComponent({
16
21
  }
17
22
  },
18
23
  setup(props) {
24
+ provideCELContext(props.celContext);
19
25
  return () => props.render(props.slotProps);
20
26
  }
21
27
  });
@@ -51,6 +57,7 @@ const renderedSessions = computed(() => {
51
57
  },
52
58
  descriptionSrOnly: session.shell.descriptionSrOnly,
53
59
  props: session.props,
60
+ celContext: session.celContext,
54
61
  definition
55
62
  });
56
63
  }
@@ -95,6 +102,7 @@ const renderedSessions = computed(() => {
95
102
 
96
103
  <template #default="modalSlotProps">
97
104
  <OverlayBody
105
+ :cel-context="session.celContext"
98
106
  :render="session.definition.render"
99
107
  :slot-props="{
100
108
  props: session.props,
@@ -13,6 +13,7 @@ import {
13
13
  provideOverlay,
14
14
  useOverlay
15
15
  } from "../../../composables/useOverlay";
16
+ import { useCELContext } from "../../../plugins/cel/context";
16
17
  import { getLocalizedText, hasVisibleLocaleValue } from "../../../utils/coders";
17
18
  import { cn } from "../../../utils/cn";
18
19
  import ButtonConfiguratorDialog from "../button-configurator/ButtonConfiguratorDialog.vue";
@@ -45,6 +46,7 @@ const attrs = useAttrs();
45
46
  const { locale, t } = useI18n();
46
47
  const { $dsl } = useNuxtApp();
47
48
  const overlay = useOverlay();
49
+ const celContext = useCELContext();
48
50
  const isCheating = useCheating();
49
51
  const isConfiguratorOpen = ref(false);
50
52
  const pendingIds = ref([]);
@@ -253,7 +255,8 @@ function createButtonActionRuntime(button) {
253
255
  locale: locale.value,
254
256
  title: getButtonLabel(button),
255
257
  description: tooltip,
256
- tooltip
258
+ tooltip,
259
+ celContext
257
260
  };
258
261
  }
259
262
  function resolveButtonEffect(button) {
@@ -10,6 +10,7 @@ import { deleteProperty, getProperty, hasProperty, setProperty } from "dot-prop"
10
10
  import { computed, nextTick, readonly, ref, toRaw, useId, watch, watchEffect } from "vue";
11
11
  import { useI18n } from "vue-i18n";
12
12
  import { useCheating } from "#imports";
13
+ import { mergeDslContexts, useCELContext } from "../../../plugins/cel/context";
13
14
  import { Calendar } from "../calendar";
14
15
  import { Button } from "../button";
15
16
  import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "../command";
@@ -33,6 +34,7 @@ const emit = defineEmits(["update:config", "initial-value-ready"]);
33
34
  const config = computedAsync(async () => FieldsConfigC.parse(await props.config.pipe(Effect.runPromise) ?? defaultConfig));
34
35
  const { t, locale } = useI18n();
35
36
  const { $dsl, $md } = useNuxtApp();
37
+ const dslContext = useCELContext();
36
38
  const modelValue = defineModel("modelValue", { type: Object, ...{
37
39
  default: () => ({})
38
40
  } });
@@ -67,7 +69,7 @@ function tryEvaluateExpression(source, context) {
67
69
  try {
68
70
  return {
69
71
  ok: true,
70
- value: $dsl.evaluate`${source}`(context)
72
+ value: $dsl.evaluate`${source}`(mergeDslContexts(context, dslContext))
71
73
  };
72
74
  } catch {
73
75
  return {
@@ -338,7 +340,7 @@ function isFieldRequired(field) {
338
340
  function renderValidationMessage(field) {
339
341
  const error = validationErrors.value[field.path];
340
342
  if (!error) return "";
341
- return $md.inline`${error.message}`(error.context);
343
+ return $md.inline`${error.message}`(mergeDslContexts(error.context, dslContext));
342
344
  }
343
345
  function isCalendarDateDisabled(field, date) {
344
346
  if (!field.disableDate) {
@@ -2,12 +2,17 @@ import z from "zod";
2
2
  import { createComponentConfig, createComponentConfigMetadataShape } from "../../component-config.js";
3
3
  import { dotPropC, expressionC, localeC } from "../../../utils/coders.js";
4
4
  const fieldIdC = z.uuid().describe("\u5B57\u6BB5\u552F\u4E00\u6807\u8BC6\uFF0C\u5FC5\u987B\u662F UUID");
5
+ const inheritedFieldContext = {
6
+ form: "map<string, dyn>",
7
+ row: "map<string, dyn>",
8
+ index: "int"
9
+ };
5
10
  export const KIND = "shwfed.component.fields";
6
11
  export const CURRENT_COMPATIBILITY_DATE = "2026-03-20";
7
12
  export const SUPPORTED_COMPATIBILITY_DATES = [CURRENT_COMPATIBILITY_DATE];
8
13
  export const ValidationRuleC = z.object({
9
- expression: expressionC("bool", { value: "dyn", form: "map<string, dyn>" }).describe("\u8FD4\u56DE\u5E03\u5C14\u503C\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u53EF\u4F7F\u7528 value \u548C form \u53D8\u91CF"),
10
- message: z.string().describe("\u6821\u9A8C\u5931\u8D25\u65F6\u5C55\u793A\u7684 Markdown \u6D88\u606F\uFF0C\u53EF\u5728 {{ expression }} \u4E2D\u4F7F\u7528 value \u548C form \u53D8\u91CF")
14
+ expression: expressionC(["bool", "dyn"], { value: "dyn", ...inheritedFieldContext }).describe("\u8FD4\u56DE\u5E03\u5C14\u503C\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u53EF\u4F7F\u7528 value\u3001form\u3001row \u548C index \u53D8\u91CF"),
15
+ message: z.string().describe("\u6821\u9A8C\u5931\u8D25\u65F6\u5C55\u793A\u7684 Markdown \u6D88\u606F\uFF0C\u53EF\u5728 {{ expression }} \u4E2D\u4F7F\u7528 value\u3001form\u3001row \u548C index \u53D8\u91CF")
11
16
  }).readonly();
12
17
  export const validationC = z.array(ValidationRuleC).readonly().optional().describe("\u5B57\u6BB5\u5931\u7126\u65F6\u6309\u987A\u5E8F\u6267\u884C\u7684\u6821\u9A8C\u89C4\u5219\uFF0C\u547D\u4E2D\u7B2C\u4E00\u4E2A\u5931\u8D25\u89C4\u5219\u540E\u505C\u6B62");
13
18
  export const StringFieldC = z.object({
@@ -19,10 +24,10 @@ export const StringFieldC = z.object({
19
24
  icon: z.string().optional().describe("Iconify \u56FE\u6807\u6807\u8BC6\u7B26\uFF0C\u663E\u793A\u5728\u8F93\u5165\u6846\u5185\u4FA7"),
20
25
  style: z.string().optional().describe("CSS \u6837\u5F0F\u5BF9\u8C61\u8868\u8FBE\u5F0F\uFF0C\u63A7\u5236\u5B57\u6BB5\u7684\u5E03\u5C40\u4E0E\u5916\u89C2"),
21
26
  discardEmptyString: z.boolean().optional().describe("\u4E3A true \u65F6\uFF0C\u7A7A\u5B57\u7B26\u4E32\u4F5C\u4E3A\u6709\u6548\u503C\u5B58\u50A8\uFF1B\u5426\u5219\u6E05\u7A7A\u8F93\u5165\u5C06\u5220\u9664\u5BF9\u5E94\u5C5E\u6027"),
22
- initialValue: expressionC("string", { form: "map<string, dyn>" }).optional().describe("\u8FD4\u56DE string \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form \u53D8\u91CF"),
27
+ initialValue: expressionC(["string", "dyn"], inheritedFieldContext).optional().describe("\u8FD4\u56DE string \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
23
28
  maxLength: expressionC("int").optional().describe('\u8FD4\u56DE\u6574\u6570\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u9650\u5236\u8F93\u5165\u7684\u6700\u5927\u5B57\u7B26\u6570\uFF0C\u5982 "100"'),
24
- hidden: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5"),
25
- disabled: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5"),
29
+ hidden: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
30
+ disabled: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
26
31
  validation: validationC
27
32
  });
28
33
  export const TextareaFieldC = z.object({
@@ -34,10 +39,10 @@ export const TextareaFieldC = z.object({
34
39
  icon: z.string().optional().describe("Iconify \u56FE\u6807\u6807\u8BC6\u7B26\uFF0C\u663E\u793A\u5728\u8F93\u5165\u6846\u5185\u4FA7"),
35
40
  style: z.string().optional().describe("CSS \u6837\u5F0F\u5BF9\u8C61\u8868\u8FBE\u5F0F\uFF0C\u63A7\u5236\u5B57\u6BB5\u7684\u5E03\u5C40\u4E0E\u5916\u89C2"),
36
41
  discardEmptyString: z.boolean().optional().describe("\u4E3A true \u65F6\uFF0C\u7A7A\u5B57\u7B26\u4E32\u4F5C\u4E3A\u6709\u6548\u503C\u5B58\u50A8\uFF1B\u5426\u5219\u6E05\u7A7A\u8F93\u5165\u5C06\u5220\u9664\u5BF9\u5E94\u5C5E\u6027"),
37
- initialValue: expressionC("string", { form: "map<string, dyn>" }).optional().describe("\u8FD4\u56DE string \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form \u53D8\u91CF"),
42
+ initialValue: expressionC(["string", "dyn"], inheritedFieldContext).optional().describe("\u8FD4\u56DE string \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
38
43
  maxLength: expressionC("int").optional().describe('\u8FD4\u56DE\u6574\u6570\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u9650\u5236\u8F93\u5165\u7684\u6700\u5927\u5B57\u7B26\u6570\uFF0C\u5982 "100"'),
39
- hidden: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5"),
40
- disabled: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5"),
44
+ hidden: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
45
+ disabled: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
41
46
  validation: validationC
42
47
  });
43
48
  export const NumberFieldC = z.object({
@@ -48,12 +53,12 @@ export const NumberFieldC = z.object({
48
53
  required: z.boolean().optional().describe("\u4E3A true \u65F6\uFF0C\u4EC5\u5728\u5B57\u6BB5\u6807\u7B7E\u540E\u663E\u793A\u5FC5\u586B\u63D0\u793A\u661F\u53F7\uFF0C\u4E0D\u5F71\u54CD\u5B9E\u9645\u6821\u9A8C\u903B\u8F91"),
49
54
  icon: z.string().optional().describe("Iconify \u56FE\u6807\u6807\u8BC6\u7B26\uFF0C\u663E\u793A\u5728\u8F93\u5165\u6846\u5185\u4FA7"),
50
55
  style: z.string().optional().describe("CSS \u6837\u5F0F\u5BF9\u8C61\u8868\u8FBE\u5F0F\uFF0C\u63A7\u5236\u5B57\u6BB5\u7684\u5E03\u5C40\u4E0E\u5916\u89C2"),
51
- initialValue: expressionC(["int", "double"], { form: "map<string, dyn>" }).optional().describe("\u8FD4\u56DE number \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form \u53D8\u91CF"),
56
+ initialValue: expressionC(["int", "double", "dyn"], inheritedFieldContext).optional().describe("\u8FD4\u56DE number \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
52
57
  min: expressionC("double").optional().describe('\u8FD4\u56DE\u6D6E\u70B9\u6570\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u9650\u5236\u5141\u8BB8\u7684\u6700\u5C0F\u503C\uFF0C\u5982 "0.0"'),
53
58
  max: expressionC("double").optional().describe('\u8FD4\u56DE\u6D6E\u70B9\u6570\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u9650\u5236\u5141\u8BB8\u7684\u6700\u5927\u503C\uFF0C\u5982 "100.0"'),
54
59
  step: expressionC("double").optional().describe('\u8FD4\u56DE\u6D6E\u70B9\u6570\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u63A7\u5236\u6570\u503C\u9012\u589E\u6B65\u957F\uFF0C\u5982 "0.5"'),
55
- hidden: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5"),
56
- disabled: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5"),
60
+ hidden: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
61
+ disabled: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
57
62
  validation: validationC
58
63
  });
59
64
  export const SelectFieldC = z.object({
@@ -68,9 +73,9 @@ export const SelectFieldC = z.object({
68
73
  value: expressionC(/.+/, { option: "dyn" }).describe("\u8FD4\u56DE\u4EFB\u610F\u503C\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u63D0\u4F9B option \u53D8\u91CF\uFF0C\u8FD4\u56DE\u503C\u5C06\u88AB\u5199\u5165\u7ED1\u5B9A\u5B57\u6BB5"),
69
74
  key: expressionC("string", { option: "dyn" }).describe("\u8FD4\u56DE\u5B57\u7B26\u4E32\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u63D0\u4F9B option \u53D8\u91CF\uFF0C\u8FD4\u56DE\u503C\u4E0E\u9009\u9879\u6784\u6210\u5168\u6620\u5C04"),
70
75
  style: z.string().optional().describe("CSS \u6837\u5F0F\u5BF9\u8C61\u8868\u8FBE\u5F0F\uFF0C\u63A7\u5236\u5B57\u6BB5\u7684\u5E03\u5C40\u4E0E\u5916\u89C2"),
71
- initialValue: expressionC(/.+/, { form: "map<string, dyn>" }).optional().describe("\u8FD4\u56DE\u4EFB\u610F\u503C\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form \u53D8\u91CF"),
72
- hidden: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5"),
73
- disabled: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5"),
76
+ initialValue: expressionC(/.+/, inheritedFieldContext).optional().describe("\u8FD4\u56DE\u4EFB\u610F\u503C\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
77
+ hidden: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
78
+ disabled: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
74
79
  validation: validationC
75
80
  });
76
81
  export const CalendarFieldC = z.object({
@@ -84,10 +89,10 @@ export const CalendarFieldC = z.object({
84
89
  mode: z.enum(["year", "month", "date"]).describe("\u65E5\u5386\u9009\u62E9\u7CBE\u5EA6\uFF1Ayear \u4EC5\u9009\u5E74\uFF0Cmonth \u9009\u5E74\u6708\uFF0Cdate \u9009\u5E74\u6708\u65E5"),
85
90
  display: z.string().optional().describe('date-fns \u683C\u5F0F\u5B57\u7B26\u4E32\uFF0C\u63A7\u5236\u8F93\u5165\u6846\u4E2D\u7684\u5C55\u793A\u683C\u5F0F\uFF0C\u5982 "yyyy\u5E74MM\u6708dd\u65E5"\uFF1B\u7559\u7A7A\u5219\u663E\u793A\u539F\u59CB\u5B58\u50A8\u503C'),
86
91
  value: z.string().describe('date-fns \u683C\u5F0F\u5B57\u7B26\u4E32\uFF0C\u5B9A\u4E49\u65E5\u671F\u5728 model \u4E2D\u7684\u5B58\u50A8\u683C\u5F0F\uFF0C\u5982 "yyyy-MM-dd"'),
87
- initialValue: expressionC("string", { form: "map<string, dyn>" }).optional().describe("\u8FD4\u56DE string \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form \u53D8\u91CF"),
88
- disableDate: expressionC("bool", { date: "Date" }).optional().describe("\u8FD4\u56DE\u5E03\u5C14\u503C\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u4EE5 date\uFF08Date \u7C7B\u578B\uFF09\u4E3A\u53D8\u91CF\uFF0C\u8FD4\u56DE true \u65F6\u8BE5\u65E5\u671F\u5728\u65E5\u5386\u4E2D\u88AB\u7981\u7528"),
89
- hidden: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5"),
90
- disabled: expressionC("bool", { form: "map<string, dyn>" }).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5"),
92
+ initialValue: expressionC(["string", "dyn"], inheritedFieldContext).optional().describe("\u8FD4\u56DE string \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u5728\u5B57\u6BB5\u9996\u6B21\u521D\u59CB\u5316\u4E14 path \u4E0D\u5B58\u5728\u65F6\u5199\u5165\u521D\u59CB\u503C\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
93
+ disableDate: expressionC(["bool", "dyn"], { date: "Date" }).optional().describe("\u8FD4\u56DE\u5E03\u5C14\u503C\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u4EE5 date\uFF08Date \u7C7B\u578B\uFF09\u4E3A\u53D8\u91CF\uFF0C\u8FD4\u56DE true \u65F6\u8BE5\u65E5\u671F\u5728\u65E5\u5386\u4E2D\u88AB\u7981\u7528"),
94
+ hidden: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u9690\u85CF\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
95
+ disabled: expressionC(["bool", "dyn"], inheritedFieldContext).optional().describe("\u4E3A true \u65F6\uFF0C\u7981\u7528\u8FD9\u4E2A\u5B57\u6BB5\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF"),
91
96
  validation: validationC
92
97
  });
93
98
  export const SlotFieldC = z.strictObject({
@@ -110,9 +115,9 @@ export const FieldC = z.discriminatedUnion("type", [
110
115
  EmptyFieldC
111
116
  ]);
112
117
  export const FieldsOrientationC = z.enum(["horizontal", "vertical", "floating"]);
113
- export const FieldsStyleC = expressionC(/^map/, {
114
- form: "map<string, dyn>"
115
- }).optional().describe("\u8FD4\u56DE\u5B57\u6BB5\u96C6\u5408\u5BB9\u5668\u6837\u5F0F\u5BF9\u8C61\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u53EF\u4F7F\u7528 form \u53D8\u91CF\u3002");
118
+ export const FieldsStyleC = expressionC([/^map/, "dyn"], {
119
+ ...inheritedFieldContext
120
+ }).optional().describe("\u8FD4\u56DE\u5B57\u6BB5\u96C6\u5408\u5BB9\u5668\u6837\u5F0F\u5BF9\u8C61\u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u53EF\u4F7F\u7528 form\u3001row \u548C index \u53D8\u91CF\u3002");
116
121
  const FieldsBodyObjectC = z.object({
117
122
  orientation: FieldsOrientationC.optional().describe("\u5B57\u6BB5\u5E03\u5C40\u65B9\u5411\uFF0C\u53EF\u9009 horizontal\u3001vertical \u6216 floating\uFF1B\u7559\u7A7A\u65F6\u9ED8\u8BA4 horizontal"),
118
123
  style: FieldsStyleC,
@@ -6,6 +6,7 @@ export type ButtonActionRuntime = Readonly<{
6
6
  title: string;
7
7
  description?: string;
8
8
  tooltip?: string;
9
+ celContext: Record<string, unknown>;
9
10
  }>;
10
11
  declare const ButtonActionService_base: Context.TagClass<ButtonActionService, "shwfed/ButtonActionService", Readonly<{
11
12
  id: string;
@@ -13,6 +14,7 @@ declare const ButtonActionService_base: Context.TagClass<ButtonActionService, "s
13
14
  title: string;
14
15
  description?: string;
15
16
  tooltip?: string;
17
+ celContext: Record<string, unknown>;
16
18
  }>>;
17
19
  export declare class ButtonActionService extends ButtonActionService_base {
18
20
  }
@@ -12,6 +12,7 @@ export type OverlayBodyProps = Readonly<Record<string, unknown>>;
12
12
  export type OverlaySessionInput = Readonly<{
13
13
  shell?: Partial<OverlayShellProps>;
14
14
  props?: Record<string, unknown>;
15
+ celContext?: Record<string, unknown>;
15
16
  }>;
16
17
  export type OverlaySessionPatch = Readonly<{
17
18
  shell?: Partial<OverlayShellProps>;
@@ -41,6 +42,7 @@ type OverlaySession = {
41
42
  open: boolean;
42
43
  shell: OverlayShellState;
43
44
  props: Record<string, unknown>;
45
+ celContext: Record<string, unknown>;
44
46
  deferred: Deferred.Deferred<OverlayResult, never>;
45
47
  pendingResult?: OverlayResult;
46
48
  };
@@ -1,6 +1,7 @@
1
1
  import { Context, Deferred, Effect, Option } from "effect";
2
2
  import { reactive, ref } from "vue";
3
3
  import { ButtonActionService } from "./useButtonAction.js";
4
+ import { mergeDslContexts } from "../plugins/cel/context.js";
4
5
  export class OverlayService extends Context.Tag("shwfed/OverlayService")() {
5
6
  }
6
7
  function createDefinitionNotFoundError(definitionId) {
@@ -180,6 +181,7 @@ function createOverlayRuntime() {
180
181
  props: {
181
182
  ...options?.props
182
183
  },
184
+ celContext: mergeDslContexts(options?.celContext, buttonAction?.celContext),
183
185
  deferred
184
186
  };
185
187
  sessions.value.push(session);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shwfed/nuxt",
3
- "version": "0.11.23",
3
+ "version": "0.11.24",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "type": "module",