@schemx/vue 1.0.0-next.0 → 1.0.0-next.2

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 (48) hide show
  1. package/README.md +172 -129
  2. package/dist/analyze.html +1 -1
  3. package/dist/components/Button/index.d.ts +3 -0
  4. package/dist/components/Button/index.d.ts.map +1 -0
  5. package/dist/components/Button/types.d.ts +21 -0
  6. package/dist/components/Button/types.d.ts.map +1 -0
  7. package/dist/components/FormItem/index.d.ts +5 -6
  8. package/dist/components/FormItem/index.d.ts.map +1 -1
  9. package/dist/components/FormItem/slot.d.ts +48 -0
  10. package/dist/components/FormItem/slot.d.ts.map +1 -0
  11. package/dist/config/appConfig.d.ts.map +1 -1
  12. package/dist/form.d.ts.map +1 -1
  13. package/dist/formBridge.d.ts +188 -0
  14. package/dist/formBridge.d.ts.map +1 -0
  15. package/dist/hocs/withRemoteOptions.d.ts.map +1 -1
  16. package/dist/hooks/index.d.ts +4 -2
  17. package/dist/hooks/index.d.ts.map +1 -1
  18. package/dist/hooks/provideFormConfigContext.d.ts +3 -4
  19. package/dist/hooks/provideFormConfigContext.d.ts.map +1 -1
  20. package/dist/hooks/provideFormContext.d.ts +7 -4
  21. package/dist/hooks/provideFormContext.d.ts.map +1 -1
  22. package/dist/hooks/useField.d.ts +4 -30
  23. package/dist/hooks/useField.d.ts.map +1 -1
  24. package/dist/hooks/useForm.d.ts +3 -2
  25. package/dist/hooks/useForm.d.ts.map +1 -1
  26. package/dist/hooks/useFormSelector.d.ts +38 -0
  27. package/dist/hooks/useFormSelector.d.ts.map +1 -0
  28. package/dist/hooks/useViewSchemas.d.ts +23 -3
  29. package/dist/hooks/useViewSchemas.d.ts.map +1 -1
  30. package/dist/hooks/useWatch.d.ts.map +1 -1
  31. package/dist/index.cjs +1 -1
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.ts +2 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.mjs +807 -224
  36. package/dist/index.mjs.map +1 -1
  37. package/dist/style.css +1 -1
  38. package/dist/types/dictionary.d.ts +6 -3
  39. package/dist/types/dictionary.d.ts.map +1 -1
  40. package/dist/types/field.d.ts +1 -1
  41. package/dist/types/form.d.ts +34 -2
  42. package/dist/types/form.d.ts.map +1 -1
  43. package/dist/utils/helpers.d.ts.map +1 -1
  44. package/dist/utils/rendererProvider.d.ts +2 -1
  45. package/dist/utils/rendererProvider.d.ts.map +1 -1
  46. package/package.json +8 -6
  47. package/dist/hooks/useEffect.d.ts +0 -33
  48. package/dist/hooks/useEffect.d.ts.map +0 -1
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- :root{--schemx-primary-color: #2f6bff;--schemx-primary-color-light: #eaf2ff;--schemx-text-color: #323233;--schemx-text-color-secondary: #666666;--schemx-text-color-placeholder: #c8c9cc;--schemx-readonly-color: #969799;--schemx-disabled-color: #c8c9cc;--schemx-disabled-opacity: .6;--schemx-background-color: #ffffff;--schemx-background-color-light: #f3f4f6;--schemx-border-color: #ebedf0;--schemx-danger-color: #ee0a24;--schemx-success-color: #07c160;--schemx-warning-color: #ff976a;--schemx-padding-base: 4px;--schemx-padding-xs: 8px;--schemx-padding-sm: 12px;--schemx-padding-md: 16px;--schemx-padding-lg: 24px;--schemx-font-size-xs: 10px;--schemx-font-size-sm: 12px;--schemx-font-size-md: 14px;--schemx-font-size-lg: 16px;--schemx-border-radius-xs: 2px;--schemx-border-radius-sm: 4px;--schemx-border-radius-md: 8px;--schemx-border-radius-lg: 12px;--schemx-form-padding-bottom: 15px;--schemx-schemas-padding-inline: 6px;--schemx-item-gap: 16px;--schemx-item-line-height: 1.6;--schemx-item-error-line-height: 1.5714285714285714;--schemx-item-label-color: #666666;--schemx-item-label-top-gap: 4px;--schemx-item-content-padding-inline: 6px;--schemx-item-required-gap: 2px;--schemx-item-error-gap: 6px;--schemx-content-align: right;--schemx-error-align: right;--schemx-group-arrow-size: 5px;--schemx-group-arrow-duration: .2s}.schemx-item-wrapper{position:relative;background-color:var(--schemx-background-color)}.schemx-item-wrapper--first{border-top-left-radius:var(--schemx-border-radius-md);border-top-right-radius:var(--schemx-border-radius-md)}.schemx-item-wrapper--last{border-bottom-left-radius:var(--schemx-border-radius-md);border-bottom-right-radius:var(--schemx-border-radius-md);margin-bottom:var(--schemx-padding-sm)}.is-disabled{opacity:.65}.is-readonly{opacity:1}.schemx-item{display:flex;align-items:flex-start;justify-content:space-between;padding-inline:var(--schemx-padding-md);padding-block:var(--schemx-padding-md);line-height:var(--schemx-item-line-height);gap:var(--schemx-item-gap)}.schemx-item:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--schemx-padding-md);bottom:0;left:var(--schemx-padding-md);border-bottom:1px solid var(--schemx-border-color);transform:scaleY(.5)}.schemx-item-wrapper--last .schemx-item:after{display:none}.schemx-item--label-left{flex-direction:row}.schemx-item--label-right{flex-direction:row-reverse}.schemx-item--label-right .schemx-item__label{margin-right:0;margin-left:var(--schemx-padding-xs)}.schemx-item--label-top{flex-direction:column}.schemx-item--label-top .schemx-item__label{margin-right:0;margin-bottom:var(--schemx-item-label-top-gap);width:auto}.schemx-item__label{position:relative;display:flex;align-items:center;flex-shrink:0;color:var(--schemx-item-label-color);font-size:var(--schemx-font-size-md);margin-right:var(--schemx-padding-xs);line-height:var(--schemx-item-line-height)}.schemx-item__required{color:var(--schemx-danger-color);margin-right:var(--schemx-item-required-gap);position:absolute;top:2px;left:-8px}.schemx-item__content{flex:1;min-width:0;max-width:70%;padding:0 var(--schemx-item-content-padding-inline)}.schemx-item__control{text-align:var(--schemx-content-align)}.schemx-item__control .schemx-renderer{width:100%}.schemx-item__error{color:var(--schemx-danger-color);font-size:var(--schemx-font-size-sm);text-align:var(--schemx-error-align, right);line-height:var(--schemx-item-error-line-height);margin-top:var(--schemx-item-error-gap)}.schemx-item--label-top>.schemx-item__content{box-sizing:border-box;width:100%;max-width:none}.schemx-group{margin-bottom:var(--schemx-padding-sm);background-color:var(--schemx-background-color);padding:var(--schemx-padding-base) var(--schemx-padding-md);border-radius:var(--schemx-border-radius-md)}.schemx-group__header{display:flex;align-items:center;justify-content:space-between;padding-block:var(--schemx-padding-sm);-webkit-user-select:none;user-select:none}.schemx-group__header--clickable{cursor:pointer}.schemx-group__title{font-size:var(--schemx-font-size-lg);font-weight:500;color:var(--schemx-text-color)}.schemx-group__arrow{display:inline-block;width:0;height:0;border-left:var(--schemx-group-arrow-size) solid transparent;border-right:var(--schemx-group-arrow-size) solid transparent;border-bottom:var(--schemx-group-arrow-size) solid var(--schemx-text-color-secondary);transition:transform var(--schemx-group-arrow-duration) ease}.schemx-group__arrow--down{transform:rotate(180deg)}.schemx-group__body>.schemx-item-wrapper:last-child .schemx-item:after{display:none}.schemx-group__body>.schemx-item-wrapper>.schemx-item{padding-inline:var(--schemx-padding-xs)}.schemx{box-sizing:border-box;padding-bottom:var(--schemx-form-padding-bottom)}.schemx-schemas{background-color:var(--schemx-background-color);padding:var(--schemx-padding-md) var(--schemx-schemas-padding-inline);border-radius:var(--schemx-border-radius-lg)}.schemx-schemas-title{display:flex;align-items:center;padding-left:var(--schemx-padding-md);padding-bottom:var(--schemx-padding-xs)}.schemx-schemas-title-icon{margin-right:var(--schemx-padding-xs)}.schemx-schemas-title-label{font-size:var(--schemx-font-size-md);color:var(--schemx-text-color)}.schemx-renderer-readonly{color:var(--schemx-readonly-color);cursor:default}
1
+ :root{--schemx-primary-color: #2f6bff;--schemx-primary-color-light: #eaf2ff;--schemx-text-color: #323233;--schemx-text-color-secondary: #666666;--schemx-text-color-placeholder: #c8c9cc;--schemx-readonly-color: #969799;--schemx-disabled-color: #c8c9cc;--schemx-disabled-opacity: .6;--schemx-background-color: #ffffff;--schemx-background-color-light: #f3f4f6;--schemx-border-color: #ebedf0;--schemx-danger-color: #ee0a24;--schemx-success-color: #07c160;--schemx-warning-color: #ff976a;--schemx-padding-base: 4px;--schemx-padding-xs: 8px;--schemx-padding-sm: 12px;--schemx-padding-md: 16px;--schemx-padding-lg: 24px;--schemx-font-size-xs: 10px;--schemx-font-size-sm: 12px;--schemx-font-size-md: 14px;--schemx-font-size-lg: 16px;--schemx-border-radius-xs: 2px;--schemx-border-radius-sm: 4px;--schemx-border-radius-md: 8px;--schemx-border-radius-lg: 12px;--schemx-form-padding-bottom: 15px;--schemx-schemas-padding-inline: 6px;--schemx-item-gap: 16px;--schemx-item-line-height: 1.6;--schemx-item-error-line-height: 1.5714285714285714;--schemx-item-label-color: #666666;--schemx-item-label-top-gap: 4px;--schemx-item-content-padding-inline: 6px;--schemx-item-required-gap: 2px;--schemx-item-error-gap: 6px;--schemx-content-align: right;--schemx-error-align: right;--schemx-group-arrow-size: 5px;--schemx-group-arrow-duration: .2s}.schemx-item-wrapper{position:relative;background-color:var(--schemx-background-color)}.schemx-item-wrapper--first{border-top-left-radius:var(--schemx-border-radius-md);border-top-right-radius:var(--schemx-border-radius-md)}.schemx-item-wrapper--last{border-bottom-left-radius:var(--schemx-border-radius-md);border-bottom-right-radius:var(--schemx-border-radius-md)}.is-disabled{opacity:.65}.is-readonly{opacity:1}.schemx-item{display:flex;align-items:flex-start;justify-content:space-between;padding-inline:var(--schemx-padding-md);padding-block:var(--schemx-padding-md);line-height:var(--schemx-item-line-height);gap:var(--schemx-item-gap)}.schemx-item:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--schemx-padding-md);bottom:0;left:var(--schemx-padding-md);border-bottom:1px solid var(--schemx-border-color);transform:scaleY(.5)}.schemx-item-wrapper--last .schemx-item:after{display:none}.schemx-item--label-left{flex-direction:row}.schemx-item--label-right{flex-direction:row-reverse}.schemx-item--label-right .schemx-item__label{margin-right:0;margin-left:var(--schemx-padding-xs)}.schemx-item--label-top{flex-direction:column}.schemx-item--label-top .schemx-item__label{margin-right:0;margin-bottom:var(--schemx-item-label-top-gap);width:auto}.schemx-item__label{position:relative;display:flex;align-items:center;flex-shrink:0;color:var(--schemx-item-label-color);font-size:var(--schemx-font-size-md);margin-right:var(--schemx-padding-xs);line-height:var(--schemx-item-line-height)}.schemx-item__required{color:var(--schemx-danger-color);margin-right:var(--schemx-item-required-gap);position:absolute;top:2px;left:-8px}.schemx-item__content{flex:1;min-width:0;max-width:70%;padding:0 var(--schemx-item-content-padding-inline)}.schemx-item__control{text-align:var(--schemx-content-align)}.schemx-item__control .schemx-renderer{width:100%}.schemx-item__error{color:var(--schemx-danger-color);font-size:var(--schemx-font-size-sm);text-align:var(--schemx-error-align, right);line-height:var(--schemx-item-error-line-height);margin-top:var(--schemx-item-error-gap)}.schemx-item--label-top>.schemx-item__content{box-sizing:border-box;width:100%;max-width:none}.schemx-group{margin-bottom:var(--schemx-padding-sm);background-color:var(--schemx-background-color);padding:var(--schemx-padding-base) var(--schemx-padding-md);border-radius:var(--schemx-border-radius-md)}.schemx-group__header{display:flex;align-items:center;justify-content:space-between;padding-block:var(--schemx-padding-sm);-webkit-user-select:none;user-select:none}.schemx-group__header--clickable{cursor:pointer}.schemx-group__title{font-size:var(--schemx-font-size-lg);font-weight:500;color:var(--schemx-text-color)}.schemx-group__arrow{display:inline-block;width:0;height:0;border-left:var(--schemx-group-arrow-size) solid transparent;border-right:var(--schemx-group-arrow-size) solid transparent;border-bottom:var(--schemx-group-arrow-size) solid var(--schemx-text-color-secondary);transition:transform var(--schemx-group-arrow-duration) ease}.schemx-group__arrow--down{transform:rotate(180deg)}.schemx-group__body>.schemx-item-wrapper:last-child .schemx-item:after{display:none}.schemx-group__body>.schemx-item-wrapper>.schemx-item{padding-inline:var(--schemx-padding-xs)}.schemx{box-sizing:border-box;padding-bottom:var(--schemx-form-padding-bottom)}.schemx-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--schemx-padding-sm);padding:var(--schemx-padding-md) var(--schemx-schemas-padding-inline) 0}.schemx-schemas{background-color:var(--schemx-background-color);padding:var(--schemx-padding-md) var(--schemx-schemas-padding-inline);border-radius:var(--schemx-border-radius-lg)}.schemx-schemas-title{display:flex;align-items:center;padding-left:var(--schemx-padding-md);padding-bottom:var(--schemx-padding-xs)}.schemx-schemas-title-icon{margin-right:var(--schemx-padding-xs)}.schemx-schemas-title-label{font-size:var(--schemx-font-size-md);color:var(--schemx-text-color)}.schemx-renderer-readonly{color:var(--schemx-readonly-color);cursor:default}.schemx-button{box-sizing:content-box;flex:1;display:inline-flex;align-items:center;justify-content:center;gap:var(--schemx-padding-xs);min-width:72px;height:24px;padding:var(--schemx-padding-xs) var(--schemx-padding-md);border:1px solid var(--schemx-border-color);border-radius:var(--schemx-border-radius-sm);background:var(--schemx-background-color);color:var(--schemx-text-color);cursor:pointer;transition:border-color .15s ease,background-color .15s ease,color .15s ease,transform .1s ease}.schemx-button:not(:disabled):hover{opacity:.8}.schemx-button:not(:disabled):active{transform:scale(.98)}.schemx-button--small{min-width:56px;height:20px;padding:var(--schemx-padding-base) var(--schemx-padding-sm);font-size:var(--schemx-font-size-sm)}.schemx-button--large{min-width:88px;height:28px;padding:var(--schemx-padding-sm) var(--schemx-padding-lg);font-size:var(--schemx-font-size-lg)}.schemx-button__loading{display:inline-block;border-radius:50%;vertical-align:-.15em;animation:schemx-button-loading .8s linear infinite}.schemx-actions-button--submit{border-color:var(--schemx-primary-color);background:var(--schemx-primary-color);color:#fff}.schemx-actions-button--submit:not(:disabled):hover{filter:brightness(.92);color:#fff}.schemx-button:disabled{cursor:not-allowed;opacity:var(--schemx-disabled-opacity)}@keyframes schemx-button-loading{to{transform:rotate(360deg)}}
@@ -126,7 +126,8 @@ export interface SchemxDictionary<TValues extends Values = Values, TResponse = u
126
126
  /**
127
127
  * 为 Props 类型注入可选的 dict 字段
128
128
  *
129
- * 将任意组件 Props 类型 TProps 扩展为包含 `dict?: SchemxDictionary<TValues>` 的新类型。
129
+ * 将任意组件 Props 类型 TProps 扩展为包含可选 `dict` 的新类型。
130
+ * `dict` 可以是完整的字典配置,也可以直接传入其 `api` 函数。
130
131
  * 用于为渲染器组件的 Props 添加字典选项支持。
131
132
  *
132
133
  * @typeParam TProps - 原始组件 Props 类型
@@ -141,10 +142,12 @@ export interface SchemxDictionary<TValues extends Values = Values, TResponse = u
141
142
  *
142
143
  * // 扩展后的类型包含 dict 字段
143
144
  * type MySelectWithDict = SchemxWithDictionary<MySelectProps, MyFormValues>
144
- * // 等价于 MySelectProps & { dict?: SchemxDictionary<MyFormValues> }
145
+ * // 等价于 MySelectProps & {
146
+ * // dict?: SchemxDictionary<MyFormValues> | SchemxDictionary<MyFormValues>["api"]
147
+ * // }
145
148
  * ```
146
149
  */
147
150
  export type SchemxWithDictionary<TProps, TValues extends Values = Values> = TProps & {
148
- dict?: SchemxDictionary<TValues>;
151
+ dict?: SchemxDictionary<TValues> | SchemxDictionary<TValues>["api"];
149
152
  };
150
153
  //# sourceMappingURL=dictionary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../src/types/dictionary.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,gBAAgB,CAC/B,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,SAAS,GAAG,OAAO,EACnB,OAAO,GAAG,OAAO;IAEjB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAEvF;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,EACvB,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAC1B,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAEnC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;IAE/B;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAA;IAE1C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,aAAa;IACb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;IAE/D;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;IAEpE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CACxE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG;IACnF,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;CACjC,CAAA"}
1
+ {"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../src/types/dictionary.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,gBAAgB,CAC/B,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,SAAS,GAAG,OAAO,EACnB,OAAO,GAAG,OAAO;IAEjB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAEvF;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,CACV,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,EACvB,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAC1B,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAEnC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;IAE/B;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAA;IAE1C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,aAAa;IACb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;IAE/D;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;IAEpE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CACxE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG;IACnF,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;CACpE,CAAA"}
@@ -15,7 +15,7 @@ export interface FieldInstance<TValues extends Values = Values> extends SchemxFi
15
15
  */
16
16
  readonly name: NamePath<TValues>;
17
17
  /**
18
- * 当前字段值(Vue shallowRef,由 Signal effect 驱动)。
18
+ * 当前字段值(Vue shallowRef,由共享 Field Bridge 驱动)。
19
19
  */
20
20
  value: Ref<FieldValue<TValues, NamePath<TValues>> | undefined>;
21
21
  /**
@@ -1,5 +1,6 @@
1
1
  import { StyleValue } from 'vue';
2
- import { DefinedFieldValue, FormCallbackOptions, FormLifecycleOptions, NamePath, RequiredRule, SchemxInstance, SchemxSchemasInput, ValidationTrigger, Values, SchemxConfig } from '@schemx/core';
2
+ import { DefinedFieldValue, FormCallbackOptions, FormLifecycleOptions, NamePath, RequiredRule, SchemxConfig, SchemxInstance, SchemxSchemasInput, ValidationTrigger, Values } from '@schemx/core';
3
+ import { SchemxButtonProps } from '../components/Button';
3
4
  /**
4
5
  * Vue 需要在编译 `defineProps` 时直接读取 Props 的字段列表。
5
6
  *
@@ -21,12 +22,31 @@ interface SchemxFormSchemaConfigProps<TValues extends Values = Values> {
21
22
  colon?: boolean;
22
23
  showRequiredMark?: boolean;
23
24
  }
25
+ /**
26
+ * 内置表单操作按钮的显示配置。
27
+ *
28
+ * `buttonProps` 会透传到内置 Button;`type` 和 `onClick` 由表单组件管理,不能覆盖。
29
+ */
30
+ export interface SchemxFormActionConfig {
31
+ /**
32
+ * 按钮展示文本;未提供时使用操作的默认文案。
33
+ */
34
+ text?: string;
35
+ /**
36
+ * 透传给内置 Button 的属性。
37
+ */
38
+ buttonProps?: Omit<SchemxButtonProps, "type" | "onClick">;
39
+ }
40
+ /**
41
+ * 内置表单操作按钮的启用配置。
42
+ */
43
+ export type SchemxFormAction = boolean | SchemxFormActionConfig;
24
44
  /**
25
45
  * schemx 组件 Props
26
46
  *
27
47
  * @typeParam TValues - 表单值类型
28
48
  */
29
- export interface SchemxFormProps<TValues extends Values = Values> extends Omit<SchemxConfig, "schemaConfig">, FormCallbackOptions<TValues>, FormLifecycleOptions<TValues>, SchemxFormSchemaConfigProps<TValues> {
49
+ export interface SchemxFormProps<TValues extends Values = Values> extends Omit<SchemxConfig<TValues>, "schemaConfig">, FormCallbackOptions<TValues>, FormLifecycleOptions<TValues>, SchemxFormSchemaConfigProps<TValues> {
30
50
  /**
31
51
  * 初始 Schema 列表。
32
52
  */
@@ -43,6 +63,18 @@ export interface SchemxFormProps<TValues extends Values = Values> extends Omit<S
43
63
  * 外部传入的表单实例;传入后由组件复用该实例。
44
64
  */
45
65
  form?: SchemxInstance<TValues>;
66
+ /**
67
+ * 覆盖内置操作区展示的提交状态;不改变 Core 的真实提交状态。
68
+ */
69
+ loading?: boolean;
70
+ /**
71
+ * 提交按钮配置;未提供时不渲染。
72
+ */
73
+ submitter?: SchemxFormAction;
74
+ /**
75
+ * 重置按钮配置;未提供时不渲染。
76
+ */
77
+ resetter?: SchemxFormAction;
46
78
  /**
47
79
  * 自定义 CSS 类名
48
80
  */
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/types/form.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAErC,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,EACN,YAAY,EACb,MAAM,cAAc,CAAA;AAErB;;;;;;GAMG;AACH,UAAU,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACnE,QAAQ,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IACxC,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IAC1C,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAA;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAC9D,SACE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAClC,mBAAmB,CAAC,OAAO,CAAC,EAC5B,oBAAoB,CAAC,OAAO,CAAC,EAC7B,2BAA2B,CAAC,OAAO,CAAC;IACtC;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAErC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IAE9B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/types/form.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAErC,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,EACP,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D;;;;;;GAMG;AACH,UAAU,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACnE,QAAQ,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IACxC,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IAC1C,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAA;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAC1D;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,sBAAsB,CAAA;AAE/D;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAC9D,SACE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,EAC3C,mBAAmB,CAAC,OAAO,CAAC,EAC5B,oBAAoB,CAAC,OAAO,CAAC,EAC7B,2BAA2B,CAAC,OAAO,CAAC;IACtC;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAErC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IAE9B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAE3B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,SAAS,gBAAgB,EAC/D,IAAI,EAAE,KAAK,EAAE,EACb,UAAU,EAAE,MAAM;;;;EA2BnB"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAElE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,SAAS,gBAAgB,EAC/D,IAAI,EAAE,KAAK,EAAE,EACb,UAAU,EAAE,MAAM;;;;EA2BnB"}
@@ -1,4 +1,5 @@
1
- import { RendererRegistry, SchemxRendererKey } from '@schemx/core';
1
+ import { RendererRegistry } from '@schemx/core/adapter';
2
+ import { SchemxRendererKey } from '@schemx/core';
2
3
  /**
3
4
  * 全局渲染器注册实例
4
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"rendererProvider.d.ts","sourceRoot":"","sources":["../../src/utils/rendererProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAA;AAErB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,gBAAgB,CAAC,iBAAiB,CACb,CAAA"}
1
+ {"version":3,"file":"rendererProvider.d.ts","sourceRoot":"","sources":["../../src/utils/rendererProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAErD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,gBAAgB,CAAC,iBAAiB,CACb,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@schemx/vue",
4
- "version": "1.0.0-next.0",
4
+ "version": "1.0.0-next.2",
5
5
  "description": "基于 JSON Schema 配置的 Vue 3 动态表单引擎(UI 无关核心)",
6
6
  "keywords": [
7
7
  "schemx",
@@ -48,7 +48,7 @@
48
48
  ],
49
49
  "peerDependencies": {
50
50
  "vue": "^3.0.0",
51
- "@schemx/core": "1.0.0-next.0"
51
+ "@schemx/core": "1.0.0-next.2"
52
52
  },
53
53
  "dependencies": {
54
54
  "classnames": "^2.5.1",
@@ -59,8 +59,9 @@
59
59
  "devDependencies": {
60
60
  "@vue/test-utils": "^2.4.6",
61
61
  "vue": "^3.4.0",
62
+ "vue-tsc": "^3.3.9",
62
63
  "zod": "^4.3.6",
63
- "@schemx/core": "1.0.0-next.0"
64
+ "@schemx/core": "1.0.0-next.2"
64
65
  },
65
66
  "scripts": {
66
67
  "build": "pnpm run type-check && vite build",
@@ -70,8 +71,9 @@
70
71
  "lint:fix": "eslint \"src/**/*.{ts,tsx,vue,js,jsx}\" --fix",
71
72
  "format": "prettier --write \"src/**/*.{ts,tsx,vue,js,jsx,json,css,scss}\"",
72
73
  "format:check": "prettier --check \"src/**/*.{ts,tsx,vue,js,jsx,json,css,scss}\"",
73
- "type-test": "tsc -p tsconfig.type-tests.json --noEmit",
74
- "type-check": "tsc -p tsconfig.json --noEmit && pnpm run type-test",
75
- "check": "pnpm run lint && pnpm run format:check && pnpm run type-check"
74
+ "type-test": "vue-tsc -p tsconfig.type-tests.json --noEmit",
75
+ "type-check": "vue-tsc -p tsconfig.json --noEmit && pnpm run type-test",
76
+ "check": "pnpm run lint && pnpm run format:check && pnpm run type-check",
77
+ "pack-local": "bash ../../scripts/workflow/commands/packages/local-pack.sh --target packages/vue"
76
78
  }
77
79
  }
@@ -1,33 +0,0 @@
1
- import { CreateEffectReturn, EffectCallback } from '@schemx/core';
2
- /**
3
- * 创建 Signal effect 并在组件卸载时自动取消。
4
- *
5
- * 在 effect 回调中访问任何 Signal 值时自动追踪依赖,
6
- * 依赖变化时自动重新执行回调。
7
- * 回调可返回一个清理函数,在 effect 重新执行前或被 dispose 时调用。
8
- *
9
- * @param callback - effect 回调函数,可选返回清理函数
10
- *
11
- * @returns 取消 effect 的 dispose 函数(通常无需手动调用,组件卸载时自动取消)
12
- *
13
- * @example
14
- * ```ts
15
- * // 监听字段值变化
16
- * useEffect(() => {
17
- * const name = form.getFieldValue('name')
18
- * console.log('name changed:', name)
19
- * })
20
- *
21
- * // 带清理函数
22
- * useEffect(() => {
23
- * const timer = setInterval(() => {
24
- * console.log('value:', form.getFieldValue('count'))
25
- * }, 1000)
26
- *
27
- * return () => clearInterval(timer)
28
- * })
29
- * ```
30
- */
31
- export declare function useEffect(callback: EffectCallback): CreateEffectReturn;
32
- export default useEffect;
33
- //# sourceMappingURL=useEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useEffect.d.ts","sourceRoot":"","sources":["../../src/hooks/useEffect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,kBAAkB,CAMtE;AAED,eAAe,SAAS,CAAA"}