@stephenchenorg/astro 8.4.1 → 8.6.0

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.
@@ -1,4 +1,4 @@
1
- import * as graphql2 from "graphql";
1
+ import * as graphql0 from "graphql";
2
2
 
3
3
  //#region src/company-setting/types.d.ts
4
4
  interface DataCompanySetting {
@@ -42,6 +42,6 @@ declare function createCompanySetting(companySetting: Partial<CompanySetting>):
42
42
  };
43
43
  //#endregion
44
44
  //#region src/company-setting/fragments.d.ts
45
- declare const companySettingFields: graphql2.DocumentNode;
45
+ declare const companySettingFields: graphql0.DocumentNode;
46
46
  //#endregion
47
47
  export { CompanySetting, DataCompanySetting, companySettingFields, createCompanySetting };
@@ -9,19 +9,6 @@ interface FormRule<T = any> {
9
9
  when?: (value: T, form: Record<string, any>) => boolean;
10
10
  }
11
11
  //#endregion
12
- //#region src/form-validator/FormValidator.d.ts
13
- declare class FormValidator {
14
- rules: Record<string, FormRule[]>;
15
- errors: FormErrors;
16
- errorsUpdatedCallbacks: ((errors: FormErrors) => void)[];
17
- validate(data: Record<string, any>): boolean;
18
- prependRules(field: string, rules: FormRule | FormRule[]): void;
19
- appendRules(field: string, rules: FormRule | FormRule[]): void;
20
- setErrors(errors: FormErrors): void;
21
- resetErrors(): void;
22
- onErrorsUpdated(callback: (errors: FormErrors) => void): void;
23
- }
24
- //#endregion
25
12
  //#region src/form-validator/components/FormField.d.ts
26
13
  declare const FormField: vue15.DefineComponent<vue15.ExtractPropTypes<{
27
14
  id: {
@@ -51,6 +38,20 @@ declare const FormField: vue15.DefineComponent<vue15.ExtractPropTypes<{
51
38
  };
52
39
  }>, {}, {}, string, vue15.ComponentProvideOptions, true, {}, any>;
53
40
  //#endregion
41
+ //#region src/form-validator/FormValidator.d.ts
42
+ declare class FormValidator {
43
+ rules: Record<string, FormRule[]>;
44
+ errors: FormErrors;
45
+ errorsUpdatedCallbacks: ((errors: FormErrors) => void)[];
46
+ validate(data: Record<string, any>): boolean;
47
+ prependRules(field: string, rules: FormRule | FormRule[]): void;
48
+ appendRules(field: string, rules: FormRule | FormRule[]): void;
49
+ removeRules(field: string): void;
50
+ setErrors(errors: FormErrors): void;
51
+ resetErrors(): void;
52
+ onErrorsUpdated(callback: (errors: FormErrors) => void): void;
53
+ }
54
+ //#endregion
54
55
  //#region src/form-validator/components/FormValidatorProvider.d.ts
55
56
  interface FormValidatorProviderExposed {
56
57
  formValidator: () => FormValidator;
@@ -72,6 +73,7 @@ declare const FormValidatorProvider: vue15.DefineComponent<vue15.ExtractPropType
72
73
  }, SlotsType<{
73
74
  default: {
74
75
  errors: FormErrors;
76
+ hasErrors: boolean;
75
77
  };
76
78
  }>, {}, {}, string, vue15.ComponentProvideOptions, true, {}, any>;
77
79
  //#endregion
@@ -1,4 +1,4 @@
1
- import { defineComponent, inject, onMounted, provide, ref, toRaw, watch } from "vue";
1
+ import { defineComponent, inject, onBeforeUnmount, onMounted, provide, ref, shallowRef, toRaw, watch } from "vue";
2
2
 
3
3
  //#region src/form-validator/injectionKey.ts
4
4
  const formValidatorInjectionKey = Symbol("");
@@ -33,6 +33,12 @@ const FormField = defineComponent({
33
33
  formValidator.onErrorsUpdated((errors) => {
34
34
  error.value = errors[props.id]?.[0] || null;
35
35
  });
36
+ onBeforeUnmount(() => {
37
+ formValidator.removeRules(props.id);
38
+ const currentErrors = { ...formValidator.errors };
39
+ delete currentErrors[props.id];
40
+ formValidator.setErrors(currentErrors);
41
+ });
36
42
  return () => slots.default?.({ error: error.value });
37
43
  }
38
44
  });
@@ -71,6 +77,9 @@ var FormValidator = class {
71
77
  if (!this.rules[field]) this.rules[field] = [];
72
78
  this.rules[field].push(...Array.isArray(rules) ? rules : [rules]);
73
79
  }
80
+ removeRules(field) {
81
+ delete this.rules[field];
82
+ }
74
83
  setErrors(errors) {
75
84
  this.errors = structuredClone(toRaw(errors));
76
85
  this.errorsUpdatedCallbacks.forEach((callback) => callback(this.errors));
@@ -94,7 +103,13 @@ const FormValidatorProvider = defineComponent({
94
103
  slots: Object,
95
104
  setup(props, { slots, expose }) {
96
105
  const formValidator = new FormValidator();
106
+ const errors = shallowRef({});
107
+ const hasErrors = ref(false);
97
108
  provide(formValidatorInjectionKey, formValidator);
109
+ formValidator.onErrorsUpdated((_errors) => {
110
+ hasErrors.value = Object.keys(_errors).length > 0;
111
+ errors.value = structuredClone(_errors);
112
+ });
98
113
  onMounted(() => {
99
114
  formValidator.setErrors(props.errors);
100
115
  });
@@ -102,7 +117,10 @@ const FormValidatorProvider = defineComponent({
102
117
  formValidator.setErrors(props.errors);
103
118
  }, { deep: true });
104
119
  expose({ formValidator: () => formValidator });
105
- return () => slots.default?.({ errors: formValidator.errors });
120
+ return () => slots.default?.({
121
+ errors: errors.value,
122
+ hasErrors: hasErrors.value
123
+ });
106
124
  }
107
125
  });
108
126
  var FormValidatorProvider_default = FormValidatorProvider;
@@ -1,4 +1,4 @@
1
- import * as graphql3 from "graphql";
1
+ import * as graphql4 from "graphql";
2
2
 
3
3
  //#region src/page/field/fragments.d.ts
4
4
 
@@ -6,7 +6,7 @@ import * as graphql3 from "graphql";
6
6
  * Page fields fragment requires explicit import image
7
7
  * fields fragment `imageFields` from Image module.
8
8
  */
9
- declare const pageFields: graphql3.DocumentNode;
9
+ declare const pageFields: graphql4.DocumentNode;
10
10
  //#endregion
11
11
  //#region src/page/types.d.ts
12
12
  interface DataPage {
@@ -88,7 +88,7 @@ declare function pageTextField(fields: PageField[], key: string): string | null;
88
88
  declare function pageImageFieldForBackground(fields: PageField[], key: string): string;
89
89
  //#endregion
90
90
  //#region src/page/seo-meta/fragments.d.ts
91
- declare const seoMetaFields: (dummyClass: string) => graphql3.DocumentNode;
91
+ declare const seoMetaFields: (dummyClass: string) => graphql4.DocumentNode;
92
92
  //#endregion
93
93
  //#region src/page/seo-meta/helpers.d.ts
94
94
  type UseSeoMetaOptions = Partial<Omit<PageMeta, 'title'>> & {
@@ -1,4 +1,4 @@
1
- import * as vue0 from "vue";
1
+ import * as vue9 from "vue";
2
2
  import { MaybeRefOrGetter } from "vue";
3
3
 
4
4
  //#region src/pagination-vue-client-side/types.d.ts
@@ -16,12 +16,12 @@ declare function usePagination(options: {
16
16
  visiblePages?: MaybeRefOrGetter<number | undefined>;
17
17
  onChange?: (page: number) => void;
18
18
  }): {
19
- items: vue0.ComputedRef<number[]>;
20
- showPagination: vue0.ComputedRef<boolean>;
21
- canFirst: vue0.ComputedRef<boolean>;
22
- canPrev: vue0.ComputedRef<boolean>;
23
- canNext: vue0.ComputedRef<boolean>;
24
- canLast: vue0.ComputedRef<boolean>;
19
+ items: vue9.ComputedRef<number[]>;
20
+ showPagination: vue9.ComputedRef<boolean>;
21
+ canFirst: vue9.ComputedRef<boolean>;
22
+ canPrev: vue9.ComputedRef<boolean>;
23
+ canNext: vue9.ComputedRef<boolean>;
24
+ canLast: vue9.ComputedRef<boolean>;
25
25
  gotoFirst: () => void;
26
26
  gotoPrev: () => void;
27
27
  gotoNext: () => void;
@@ -1,4 +1,4 @@
1
- import * as vue5 from "vue";
1
+ import * as vue0 from "vue";
2
2
  import { MaybeRefOrGetter } from "vue";
3
3
 
4
4
  //#region src/pagination-vue-server-side/types.d.ts
@@ -16,16 +16,16 @@ declare function usePagination(options: {
16
16
  perPage?: MaybeRefOrGetter<number | undefined>;
17
17
  visiblePages?: MaybeRefOrGetter<number | undefined>;
18
18
  }): {
19
- items: vue5.ComputedRef<number[]>;
20
- showPagination: vue5.ComputedRef<boolean>;
21
- canFirst: vue5.ComputedRef<boolean>;
22
- canPrev: vue5.ComputedRef<boolean>;
23
- canNext: vue5.ComputedRef<boolean>;
24
- canLast: vue5.ComputedRef<boolean>;
25
- firstUrl: vue5.ComputedRef<string>;
26
- prevUrl: vue5.ComputedRef<string>;
27
- nextUrl: vue5.ComputedRef<string>;
28
- lastUrl: vue5.ComputedRef<string>;
19
+ items: vue0.ComputedRef<number[]>;
20
+ showPagination: vue0.ComputedRef<boolean>;
21
+ canFirst: vue0.ComputedRef<boolean>;
22
+ canPrev: vue0.ComputedRef<boolean>;
23
+ canNext: vue0.ComputedRef<boolean>;
24
+ canLast: vue0.ComputedRef<boolean>;
25
+ firstUrl: vue0.ComputedRef<string>;
26
+ prevUrl: vue0.ComputedRef<string>;
27
+ nextUrl: vue0.ComputedRef<string>;
28
+ lastUrl: vue0.ComputedRef<string>;
29
29
  getUrl: (page: number) => string;
30
30
  };
31
31
  //#endregion
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stephenchenorg/astro",
3
3
  "type": "module",
4
- "version": "8.4.1",
4
+ "version": "8.6.0",
5
5
  "description": "Stephenchenorg Astro 前端通用套件",
6
6
  "license": "MIT",
7
7
  "homepage": "https://stephenchenorg-astro.netlify.app",
@@ -98,21 +98,21 @@
98
98
  "awesome-graphql-client": "^2.1.0",
99
99
  "graphql": "^16.12.0",
100
100
  "graphql-tag": "^2.12.6",
101
- "nanostores": "^1.0.1",
101
+ "nanostores": "^1.1.0",
102
102
  "query-string": "^9.3.1"
103
103
  },
104
104
  "devDependencies": {
105
- "@astrojs/check": "^0.9.5",
105
+ "@astrojs/check": "^0.9.6",
106
106
  "@astrojs/vue": "^5.1.3",
107
107
  "@ycs77/eslint-config": "^6.1.0",
108
- "astro": "^5.15.9",
109
- "bumpp": "^10.3.1",
108
+ "astro": "^5.16.4",
109
+ "bumpp": "^10.3.2",
110
110
  "eslint": "^9.39.1",
111
111
  "eslint-plugin-astro": "^1.5.0",
112
112
  "eslint-plugin-astro-explicit-wrapper": "^1.0.5",
113
- "tsdown": "^0.16.5",
113
+ "tsdown": "^0.17.2",
114
114
  "typescript": "^5.9.3",
115
- "vitest": "^4.0.10",
116
- "vue": "^3.5.24"
115
+ "vitest": "^4.0.15",
116
+ "vue": "^3.5.25"
117
117
  }
118
118
  }