@prolibu-suite/cobalt-form-vue 0.1.3 → 1.0.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.
Files changed (59) hide show
  1. package/dist/FieldObject-Cxd3I0Jv.js +4 -0
  2. package/dist/components/CoFieldRenderer.test.d.ts +2 -0
  3. package/dist/components/CoFieldRenderer.test.d.ts.map +1 -0
  4. package/dist/components/CoFieldRenderer.vue.d.ts +40 -3
  5. package/dist/components/CoFieldRenderer.vue.d.ts.map +1 -1
  6. package/dist/components/CoFieldShell.vue.d.ts +23 -0
  7. package/dist/components/CoFieldShell.vue.d.ts.map +1 -0
  8. package/dist/components/CoFormRenderer.file.test.d.ts +2 -0
  9. package/dist/components/CoFormRenderer.file.test.d.ts.map +1 -0
  10. package/dist/components/CoFormRenderer.vue.d.ts +35 -6
  11. package/dist/components/CoFormRenderer.vue.d.ts.map +1 -1
  12. package/dist/components/fields/FieldBoolean.vue.d.ts.map +1 -1
  13. package/dist/components/fields/FieldColor.vue.d.ts +17 -0
  14. package/dist/components/fields/FieldColor.vue.d.ts.map +1 -0
  15. package/dist/components/fields/FieldDate.vue.d.ts.map +1 -1
  16. package/dist/components/fields/FieldDatePicker.vue.d.ts +18 -0
  17. package/dist/components/fields/FieldDatePicker.vue.d.ts.map +1 -0
  18. package/dist/components/fields/FieldFile.test.d.ts +2 -0
  19. package/dist/components/fields/FieldFile.test.d.ts.map +1 -0
  20. package/dist/components/fields/FieldFile.vue.d.ts +61 -0
  21. package/dist/components/fields/FieldFile.vue.d.ts.map +1 -0
  22. package/dist/components/fields/FieldMasked.test.d.ts +2 -0
  23. package/dist/components/fields/FieldMasked.test.d.ts.map +1 -0
  24. package/dist/components/fields/FieldMasked.vue.d.ts +23 -0
  25. package/dist/components/fields/FieldMasked.vue.d.ts.map +1 -0
  26. package/dist/components/fields/FieldMixed.vue.d.ts +17 -0
  27. package/dist/components/fields/FieldMixed.vue.d.ts.map +1 -0
  28. package/dist/components/fields/FieldMultiple.vue.d.ts +17 -0
  29. package/dist/components/fields/FieldMultiple.vue.d.ts.map +1 -0
  30. package/dist/components/fields/FieldNumber.vue.d.ts.map +1 -1
  31. package/dist/components/fields/FieldObject.vue.d.ts +18 -0
  32. package/dist/components/fields/FieldObject.vue.d.ts.map +1 -0
  33. package/dist/components/fields/FieldPhone.vue.d.ts +16 -0
  34. package/dist/components/fields/FieldPhone.vue.d.ts.map +1 -0
  35. package/dist/components/fields/FieldRef.vue.d.ts +2 -2
  36. package/dist/components/fields/FieldRichText.vue.d.ts +16 -0
  37. package/dist/components/fields/FieldRichText.vue.d.ts.map +1 -0
  38. package/dist/components/fields/FieldSelect.vue.d.ts.map +1 -1
  39. package/dist/components/fields/FieldText.vue.d.ts.map +1 -1
  40. package/dist/components/fields/FieldTextArea.vue.d.ts.map +1 -1
  41. package/dist/index.css +1 -1
  42. package/dist/index.d.ts +23 -8
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +3787 -363
  45. package/dist/utils/formContext.d.ts +40 -0
  46. package/dist/utils/formContext.d.ts.map +1 -0
  47. package/dist/utils/gridCell.d.ts +28 -0
  48. package/dist/utils/gridCell.d.ts.map +1 -0
  49. package/dist/utils/gridCell.test.d.ts +2 -0
  50. package/dist/utils/gridCell.test.d.ts.map +1 -0
  51. package/dist/utils/normalizeMaskConfig.d.ts +23 -0
  52. package/dist/utils/normalizeMaskConfig.d.ts.map +1 -0
  53. package/dist/utils/normalizeMaskConfig.test.d.ts +2 -0
  54. package/dist/utils/normalizeMaskConfig.test.d.ts.map +1 -0
  55. package/dist/utils/sectionPreview.d.ts +26 -0
  56. package/dist/utils/sectionPreview.d.ts.map +1 -0
  57. package/dist/utils/sectionPreview.test.d.ts +2 -0
  58. package/dist/utils/sectionPreview.test.d.ts.map +1 -0
  59. package/package.json +13 -6
@@ -0,0 +1,40 @@
1
+ import type { InjectionKey, Ref } from 'vue';
2
+ /**
3
+ * Nesting depth of an object fieldset within the form tree. Top-level fields
4
+ * inject the default `0`; each `FieldObject` provides `depth + 1` to its
5
+ * descendants so nested objects can render a progressive left indentation.
6
+ */
7
+ export declare const FORM_DEPTH: InjectionKey<number>;
8
+ /**
9
+ * When true, every object fieldset starts expanded regardless of
10
+ * `computeInitialOpen`. Provided once by `CoFormRenderer` (via its `expandAll`
11
+ * prop) and read by every nested `FieldObject`. Defaults to a `false` ref when
12
+ * no provider is present.
13
+ */
14
+ export declare const FORM_EXPAND_ALL: InjectionKey<Ref<boolean>>;
15
+ /**
16
+ * Effective grid column count inherited from the enclosing form/fieldset. The
17
+ * top-level `CoFormRenderer` provides its own column count; each `FieldObject`
18
+ * uses it as the default for its children grid (unless the schema overrides it
19
+ * via `originalAttrs.columns`) and re-provides its resolved value so deeper
20
+ * objects inherit too. Lets a single-column form (e.g. preferences) cascade to
21
+ * every nested object. Defaults to a `ref(2)` when no provider is present.
22
+ */
23
+ export declare const FORM_COLUMNS: InjectionKey<Ref<number>>;
24
+ /**
25
+ * Validation errors keyed by full field dot-path (e.g.
26
+ * `stageRules.restrictProposalViewToStages`). Provided once by `CoFormRenderer`
27
+ * so nested `FieldObject` children can look up their own error by `path`.
28
+ */
29
+ export declare const FORM_ERRORS: InjectionKey<Ref<Record<string, string[]>>>;
30
+ /**
31
+ * Touched map keyed by full field dot-path. A field shows its error only once
32
+ * its path is touched. Provided by `CoFormRenderer`.
33
+ */
34
+ export declare const FORM_TOUCHED: InjectionKey<Ref<Record<string, boolean>>>;
35
+ /**
36
+ * Marks a field path as touched (on blur). Provided by `CoFormRenderer` so
37
+ * nested children can flag themselves touched by their `path`.
38
+ */
39
+ export declare const FORM_TOUCH: InjectionKey<(path: string) => void>;
40
+ //# sourceMappingURL=formContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formContext.d.ts","sourceRoot":"","sources":["../../src/utils/formContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,YAAY,CAAC,MAAM,CAA2B,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAgC,CAAC;AAExF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAA6B,CAAC;AAEjF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAA4B,CAAC;AAEjG;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAA6B,CAAC;AAElG;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAA2B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { FieldDescriptor } from '@prolibu-suite/cobalt-form-core';
2
+ export type FormGap = 'sm' | 'md' | 'lg';
3
+ /** uiComs that traditionally render full-width in Prolibu schemas. Single source
4
+ * of truth (used by both CoFormRenderer and FieldObject). */
5
+ export declare const FULL_WIDTH_UICOMS: Set<string>;
6
+ export declare function isFullWidthField(field: FieldDescriptor): boolean;
7
+ /**
8
+ * Inline grid style for a form/section root. Applied inline (not via a
9
+ * stylesheet) on purpose: suite-v2 consumes form-vue's JS but NOT its CSS
10
+ * bundle, so any layout that lives in a `.css` file never renders there. Inline
11
+ * styles always apply.
12
+ *
13
+ * - `columns <= 1` → a single stacked column.
14
+ * - `columns >= 2` → responsive auto-fit: as many `MIN_COL_TRACK`-wide columns
15
+ * as fit, collapsing to 1 when narrow (no media query needed).
16
+ */
17
+ export declare function gridRootStyle(columns: number, gap: FormGap): Record<string, string>;
18
+ /** Effective span for one cell, clamped to the grid's column count. */
19
+ export declare function cellSpan(field: FieldDescriptor, columns: number): number;
20
+ /**
21
+ * Inline per-cell bindings. Full-width cells span every track; multi-span cells
22
+ * span N tracks (browser clamps to the rendered track count). A plain
23
+ * single-column cell needs no style. Spread on the cell via `v-bind`.
24
+ */
25
+ export declare function cellBindings(field: FieldDescriptor, columns: number, isFull: boolean): {
26
+ style?: Record<string, string>;
27
+ };
28
+ //# sourceMappingURL=gridCell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridCell.d.ts","sourceRoot":"","sources":["../../src/utils/gridCell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAWzC;8DAC8D;AAC9D,eAAO,MAAM,iBAAiB,aAQ5B,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAIhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQnF;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,GACd;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAKpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gridCell.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridCell.test.d.ts","sourceRoot":"","sources":["../../src/utils/gridCell.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import type { MaskNormalizeMode, MaskRawMode } from '@prolibu-suite/cobalt-form-core';
2
+ export declare const DEFAULT_MASK_CONFIG: {
3
+ readonly lazy: true;
4
+ readonly placeholderChar: "_";
5
+ readonly rawMode: "unmasked";
6
+ readonly normalize: "none";
7
+ };
8
+ export interface NormalizedMaskConfig {
9
+ pattern: string;
10
+ lazy: boolean;
11
+ placeholderChar: string;
12
+ rawMode: MaskRawMode;
13
+ normalize: MaskNormalizeMode;
14
+ countryCode: string | null;
15
+ imaskOptions: {
16
+ mask: string;
17
+ lazy: boolean;
18
+ placeholderChar: string;
19
+ };
20
+ cacheKey: string;
21
+ }
22
+ export declare function normalizeMaskConfig(mask: unknown): NormalizedMaskConfig | null;
23
+ //# sourceMappingURL=normalizeMaskConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeMaskConfig.d.ts","sourceRoot":"","sources":["../../src/utils/normalizeMaskConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,iBAAiB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAElG,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAoED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAO9E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=normalizeMaskConfig.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeMaskConfig.test.d.ts","sourceRoot":"","sources":["../../src/utils/normalizeMaskConfig.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import type { FieldDescriptor } from '@prolibu-suite/cobalt-form-core';
2
+ /** A value is "empty" when it carries no user information. */
3
+ export declare function isEmptyValue(v: any): boolean;
4
+ /** True if any value among the children is non-empty. */
5
+ export declare function hasAnyValue(children: FieldDescriptor[], objectValue: Record<string, any>): boolean;
6
+ /** True if a required child is empty (forces the section open). */
7
+ export declare function hasEmptyRequiredChild(children: FieldDescriptor[], objectValue: Record<string, any>): boolean;
8
+ export interface InitialOpenArgs {
9
+ children: FieldDescriptor[];
10
+ objectValue: Record<string, any>;
11
+ errors: string[];
12
+ originalAttrs?: Record<string, any>;
13
+ }
14
+ /**
15
+ * Initial open/collapsed state for a fieldset accordion.
16
+ * Schema override wins: `expanded === true` → open; `collapsed === true` →
17
+ * collapsed (unless errors force open). Otherwise: open when there are errors,
18
+ * an empty required child, or no value at all; collapsed when filled & complete.
19
+ */
20
+ export declare function computeInitialOpen({ children, objectValue, errors, originalAttrs, }: InitialOpenArgs): boolean;
21
+ /**
22
+ * Short, "·"-joined summary of the section's non-empty children. Caps at
23
+ * PREVIEW_CAP entries then "+N". Returns '' when there is nothing to show.
24
+ */
25
+ export declare function formatSectionPreview(children: FieldDescriptor[], objectValue: Record<string, any>, _locale?: string): string;
26
+ //# sourceMappingURL=sectionPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sectionPreview.d.ts","sourceRoot":"","sources":["../../src/utils/sectionPreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIvE,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAK5C;AAMD,yDAAyD;AACzD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,eAAe,EAAE,EAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC/B,OAAO,CAET;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EAAE,EAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC/B,OAAO,CAET;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,WAAW,EACX,MAAM,EACN,aAAa,GACd,EAAE,eAAe,GAAG,OAAO,CAO3B;AA4CD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EAAE,EAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAUR"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sectionPreview.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sectionPreview.test.d.ts","sourceRoot":"","sources":["../../src/utils/sectionPreview.test.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prolibu-suite/cobalt-form-vue",
3
- "version": "0.1.3",
3
+ "version": "1.0.0",
4
4
  "description": "Cobalt Form — Vue 3 adapter. useForm() composable + CoFormRenderer component.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -8,8 +8,9 @@
8
8
  "types": "dist/index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
+ "types": "./dist/index.d.ts",
11
12
  "import": "./dist/index.js",
12
- "types": "./dist/index.d.ts"
13
+ "default": "./dist/index.js"
13
14
  },
14
15
  "./style.css": "./dist/style.css"
15
16
  },
@@ -27,16 +28,20 @@
27
28
  "license": "MIT",
28
29
  "peerDependencies": {
29
30
  "vue": "^3.0.0",
30
- "@prolibu-suite/cobalt-core": "0.1.2",
31
- "@prolibu-suite/cobalt-vue": "0.1.2"
31
+ "@prolibu-suite/cobalt-core": "0.2.0",
32
+ "@prolibu-suite/cobalt-vue": "0.2.0"
32
33
  },
33
34
  "dependencies": {
34
- "@prolibu-suite/cobalt-form-core": "0.2.0"
35
+ "imask": "^7.6.1",
36
+ "@prolibu-suite/cobalt-form-core": "0.3.0"
35
37
  },
36
38
  "devDependencies": {
39
+ "@vue/test-utils": "^2.4.6",
37
40
  "@vitejs/plugin-vue": "^5.2.1",
41
+ "jsdom": "^29.0.2",
38
42
  "typescript": "^6.0.3",
39
43
  "vite": "^6.0.0",
44
+ "vitest": "^4.1.4",
40
45
  "vue": "^3.5.22",
41
46
  "vue-tsc": "^2.2.0"
42
47
  },
@@ -46,6 +51,8 @@
46
51
  "scripts": {
47
52
  "build": "vite build && vue-tsc --emitDeclarationOnly -p tsconfig.json",
48
53
  "dev": "vite build --watch",
49
- "clean": "rm -rf dist"
54
+ "clean": "rm -rf dist",
55
+ "test": "vitest run",
56
+ "test:watch": "vitest"
50
57
  }
51
58
  }