@happyvertical/smrt-fields 0.40.59 → 0.40.61

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 (184) hide show
  1. package/AGENTS.md +58 -12
  2. package/README.md +90 -2
  3. package/dist/__smrt-register__.d.ts +2 -0
  4. package/dist/__smrt-register__.d.ts.map +1 -0
  5. package/dist/cache.d.ts +18 -0
  6. package/dist/cache.d.ts.map +1 -0
  7. package/dist/collections/FieldPolicyCollection.d.ts +95 -0
  8. package/dist/collections/FieldPolicyCollection.d.ts.map +1 -0
  9. package/dist/field-definitions.d.ts +77 -0
  10. package/dist/field-definitions.d.ts.map +1 -0
  11. package/dist/field-policy-resolver.d.ts +46 -0
  12. package/dist/field-policy-resolver.d.ts.map +1 -0
  13. package/dist/index.d.ts +9 -532
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +752 -55
  16. package/dist/index.js.map +1 -1
  17. package/dist/manifest.json +45 -3
  18. package/dist/models/FieldPolicy.d.ts +163 -0
  19. package/dist/models/FieldPolicy.d.ts.map +1 -0
  20. package/dist/permissions.d.ts +9 -0
  21. package/dist/permissions.d.ts.map +1 -0
  22. package/dist/playground.d.ts +2 -0
  23. package/dist/playground.d.ts.map +1 -0
  24. package/dist/playground.js +39 -0
  25. package/dist/playground.js.map +1 -0
  26. package/dist/settings-catalog.d.ts +73 -0
  27. package/dist/settings-catalog.d.ts.map +1 -0
  28. package/dist/smrt-knowledge.json +50 -7
  29. package/dist/svelte/__tests__/FieldPolicyControlPanel.test.js +223 -0
  30. package/dist/svelte/__tests__/FieldPolicyGear.test.js +503 -0
  31. package/dist/svelte/__tests__/FormHelp.test.js +138 -0
  32. package/dist/svelte/__tests__/ModeUX.test.js +109 -0
  33. package/dist/svelte/__tests__/ObjectForm.test.js +556 -0
  34. package/dist/svelte/__tests__/ObjectFormGeneratedApi.integration.test.js +436 -0
  35. package/dist/svelte/__tests__/PolicyField.test.js +373 -0
  36. package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte +30 -0
  37. package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte.d.ts +9 -0
  38. package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte.d.ts.map +1 -0
  39. package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte +33 -0
  40. package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte.d.ts +10 -0
  41. package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte.d.ts.map +1 -0
  42. package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte +19 -0
  43. package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte.d.ts +10 -0
  44. package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte.d.ts.map +1 -0
  45. package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte +18 -0
  46. package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte.d.ts +11 -0
  47. package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte.d.ts.map +1 -0
  48. package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte +11 -0
  49. package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte.d.ts +19 -0
  50. package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte.d.ts.map +1 -0
  51. package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte +18 -0
  52. package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte.d.ts +8 -0
  53. package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte.d.ts.map +1 -0
  54. package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte +24 -0
  55. package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte.d.ts +13 -0
  56. package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte.d.ts.map +1 -0
  57. package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte +20 -0
  58. package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte.d.ts +11 -0
  59. package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte.d.ts.map +1 -0
  60. package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte +17 -0
  61. package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte.d.ts +10 -0
  62. package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte.d.ts.map +1 -0
  63. package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte +25 -0
  64. package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte.d.ts +10 -0
  65. package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte.d.ts.map +1 -0
  66. package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte +34 -0
  67. package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte.d.ts +10 -0
  68. package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte.d.ts.map +1 -0
  69. package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte +29 -0
  70. package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte.d.ts +11 -0
  71. package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte.d.ts.map +1 -0
  72. package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte +33 -0
  73. package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte.d.ts +9 -0
  74. package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte.d.ts.map +1 -0
  75. package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte +40 -0
  76. package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte.d.ts +8 -0
  77. package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte.d.ts.map +1 -0
  78. package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte +26 -0
  79. package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte.d.ts +13 -0
  80. package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte.d.ts.map +1 -0
  81. package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte +39 -0
  82. package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte.d.ts +17 -0
  83. package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte.d.ts.map +1 -0
  84. package/dist/svelte/__tests__/fixtures/RegistryInput.svelte +15 -0
  85. package/dist/svelte/__tests__/fixtures/RegistryInput.svelte.d.ts +5 -0
  86. package/dist/svelte/__tests__/fixtures/RegistryInput.svelte.d.ts.map +1 -0
  87. package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte +29 -0
  88. package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte.d.ts +14 -0
  89. package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte.d.ts.map +1 -0
  90. package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte +24 -0
  91. package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte.d.ts +14 -0
  92. package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte.d.ts.map +1 -0
  93. package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte +28 -0
  94. package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte.d.ts +13 -0
  95. package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte.d.ts.map +1 -0
  96. package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte +14 -0
  97. package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte.d.ts +19 -0
  98. package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte.d.ts.map +1 -0
  99. package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte +25 -0
  100. package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte.d.ts +14 -0
  101. package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte.d.ts.map +1 -0
  102. package/dist/svelte/__tests__/settings-catalog.test.js +161 -0
  103. package/dist/svelte/components/AdvancedFields.svelte +49 -0
  104. package/dist/svelte/components/AdvancedFields.svelte.d.ts +17 -0
  105. package/dist/svelte/components/AdvancedFields.svelte.d.ts.map +1 -0
  106. package/dist/svelte/components/FieldInput.svelte +159 -0
  107. package/dist/svelte/components/FieldInput.svelte.d.ts +5 -0
  108. package/dist/svelte/components/FieldInput.svelte.d.ts.map +1 -0
  109. package/dist/svelte/components/FieldPolicyControlPanel.svelte +261 -0
  110. package/dist/svelte/components/FieldPolicyControlPanel.svelte.d.ts +26 -0
  111. package/dist/svelte/components/FieldPolicyControlPanel.svelte.d.ts.map +1 -0
  112. package/dist/svelte/components/FieldPolicyEditor.svelte +417 -0
  113. package/dist/svelte/components/FieldPolicyEditor.svelte.d.ts +18 -0
  114. package/dist/svelte/components/FieldPolicyEditor.svelte.d.ts.map +1 -0
  115. package/dist/svelte/components/FieldPolicyGearButton.svelte +17 -0
  116. package/dist/svelte/components/FieldPolicyGearButton.svelte.d.ts +8 -0
  117. package/dist/svelte/components/FieldPolicyGearButton.svelte.d.ts.map +1 -0
  118. package/dist/svelte/components/FieldPolicyGearProvider.svelte +135 -0
  119. package/dist/svelte/components/FieldPolicyGearProvider.svelte.d.ts +17 -0
  120. package/dist/svelte/components/FieldPolicyGearProvider.svelte.d.ts.map +1 -0
  121. package/dist/svelte/components/FieldPolicyProvider.svelte +89 -0
  122. package/dist/svelte/components/FieldPolicyProvider.svelte.d.ts +35 -0
  123. package/dist/svelte/components/FieldPolicyProvider.svelte.d.ts.map +1 -0
  124. package/dist/svelte/components/FormHelp.svelte +157 -0
  125. package/dist/svelte/components/FormHelp.svelte.d.ts +15 -0
  126. package/dist/svelte/components/FormHelp.svelte.d.ts.map +1 -0
  127. package/dist/svelte/components/ModeSwitch.svelte +47 -0
  128. package/dist/svelte/components/ModeSwitch.svelte.d.ts +10 -0
  129. package/dist/svelte/components/ModeSwitch.svelte.d.ts.map +1 -0
  130. package/dist/svelte/components/ObjectForm.svelte +351 -0
  131. package/dist/svelte/components/ObjectForm.svelte.d.ts +40 -0
  132. package/dist/svelte/components/ObjectForm.svelte.d.ts.map +1 -0
  133. package/dist/svelte/components/ObjectFormSourceProvider.svelte +18 -0
  134. package/dist/svelte/components/ObjectFormSourceProvider.svelte.d.ts +11 -0
  135. package/dist/svelte/components/ObjectFormSourceProvider.svelte.d.ts.map +1 -0
  136. package/dist/svelte/components/PolicyField.svelte +338 -0
  137. package/dist/svelte/components/PolicyField.svelte.d.ts +80 -0
  138. package/dist/svelte/components/PolicyField.svelte.d.ts.map +1 -0
  139. package/dist/svelte/context.svelte.d.ts +54 -0
  140. package/dist/svelte/context.svelte.d.ts.map +1 -0
  141. package/dist/svelte/context.svelte.js +55 -0
  142. package/dist/svelte/data-table.d.ts +17 -0
  143. package/dist/svelte/data-table.d.ts.map +1 -0
  144. package/dist/svelte/data-table.js +19 -0
  145. package/dist/svelte/field-policy-editor.d.ts +81 -0
  146. package/dist/svelte/field-policy-editor.d.ts.map +1 -0
  147. package/dist/svelte/field-policy-editor.js +120 -0
  148. package/dist/svelte/gear-context.svelte.d.ts +14 -0
  149. package/dist/svelte/gear-context.svelte.d.ts.map +1 -0
  150. package/dist/svelte/gear-context.svelte.js +15 -0
  151. package/dist/svelte/index.d.ts +58 -0
  152. package/dist/svelte/index.d.ts.map +1 -0
  153. package/dist/svelte/index.js +38 -0
  154. package/dist/svelte/input-registry.d.ts +21 -0
  155. package/dist/svelte/input-registry.d.ts.map +1 -0
  156. package/dist/svelte/input-registry.js +26 -0
  157. package/dist/svelte/object-form-source-context.svelte.d.ts +4 -0
  158. package/dist/svelte/object-form-source-context.svelte.d.ts.map +1 -0
  159. package/dist/svelte/object-form-source-context.svelte.js +8 -0
  160. package/dist/svelte/object-form-source.svelte.d.ts +18 -0
  161. package/dist/svelte/object-form-source.svelte.d.ts.map +1 -0
  162. package/dist/svelte/object-form-source.svelte.js +99 -0
  163. package/dist/svelte/object-form.d.ts +6 -0
  164. package/dist/svelte/object-form.d.ts.map +1 -0
  165. package/dist/svelte/object-form.js +38 -0
  166. package/dist/svelte/playground/FieldPolicyFormPreview.svelte +212 -0
  167. package/dist/svelte/playground/FieldPolicyFormPreview.svelte.d.ts +4 -0
  168. package/dist/svelte/playground/FieldPolicyFormPreview.svelte.d.ts.map +1 -0
  169. package/dist/svelte/playground/ObjectFormPreview.svelte +129 -0
  170. package/dist/svelte/playground/ObjectFormPreview.svelte.d.ts +4 -0
  171. package/dist/svelte/playground/ObjectFormPreview.svelte.d.ts.map +1 -0
  172. package/dist/svelte/playground.d.ts +20 -0
  173. package/dist/svelte/playground.d.ts.map +1 -0
  174. package/dist/svelte/playground.js +38 -0
  175. package/dist/svelte/settings-catalog.d.ts +54 -0
  176. package/dist/svelte/settings-catalog.d.ts.map +1 -0
  177. package/dist/svelte/settings-catalog.js +116 -0
  178. package/dist/svelte/types.d.ts +101 -0
  179. package/dist/svelte/types.d.ts.map +1 -0
  180. package/dist/svelte/types.js +4 -0
  181. package/dist/types.d.ts +276 -203
  182. package/dist/types.d.ts.map +1 -0
  183. package/dist/types.js.map +1 -1
  184. package/package.json +33 -8
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Shared types for the field-policy Svelte primitives.
3
+ */
4
+ /**
5
+ * Props for the PolicyField headless snippet escape hatch — all the data a
6
+ * fully custom renderer needs.
7
+ */
8
+ export interface PolicyFieldSnippetProps {
9
+ id: string;
10
+ helpId: string;
11
+ visible: boolean;
12
+ label: string | null;
13
+ help: string | null;
14
+ defaultValue: unknown;
15
+ required: boolean;
16
+ /** Resolved visibility tier from the policy. */
17
+ tier: 'basic' | 'advanced' | 'hidden';
18
+ }
19
+ /**
20
+ * Browser-safe subset of a generated SMRT web field definition. This mirrors
21
+ * the `@smrt/web` wire contract without making the reusable Svelte package
22
+ * depend on an application's generated virtual module.
23
+ */
24
+ export interface ObjectFormFieldDefinition {
25
+ /**
26
+ * The persisted public wire types emitted by generated web collections.
27
+ * There is deliberately no `select` wire type: applications render
28
+ * select-like controls by registering a field-specific renderer for a text
29
+ * (or other persisted) wire field.
30
+ */
31
+ type: ObjectFormWireType;
32
+ required?: boolean;
33
+ default?: unknown;
34
+ description?: string;
35
+ ui?: {
36
+ basic?: boolean;
37
+ group?: string;
38
+ order?: number;
39
+ locked?: boolean;
40
+ };
41
+ }
42
+ /** Browser-observable scalar types emitted by a generated web collection. */
43
+ export type ObjectFormWireType = 'text' | 'integer' | 'decimal' | 'boolean' | 'datetime' | 'json' | 'foreignKey' | 'crossPackageRef';
44
+ /** Structural subset of a generated `SmrtWebCollectionDefinition`. */
45
+ export interface ObjectFormCollectionDefinition {
46
+ /** Canonical qualified model identity, never a simple class name. */
47
+ objectRef: string;
48
+ /** Browser-safe generated field definitions. */
49
+ fields: Readonly<Record<string, ObjectFormFieldDefinition>>;
50
+ }
51
+ /** Generated custom-action client shape, intentionally independent of smrt-web. */
52
+ export interface ObjectFormPolicyClient {
53
+ resolveBatch(input: {
54
+ objectRefs: string[];
55
+ }): Promise<unknown>;
56
+ }
57
+ /** Resolved definition and policy consumed by `ObjectForm`. */
58
+ export interface ObjectFormResolvedSource {
59
+ definition: ObjectFormCollectionDefinition;
60
+ policy: import('../types.js').ResolvedObjectFieldPolicy;
61
+ }
62
+ /**
63
+ * Per-app source contract. The source owns generated definitions and the
64
+ * app's custom-action transport; ObjectForm never imports a client runtime.
65
+ */
66
+ export interface ObjectFormSource {
67
+ load(objectRef: string): Promise<ObjectFormResolvedSource>;
68
+ }
69
+ /** A field selected from the safe web-definition × resolved-policy overlap. */
70
+ export interface ObjectFormField {
71
+ name: string;
72
+ definition: ObjectFormFieldDefinition;
73
+ group: string | null;
74
+ order: number | null;
75
+ }
76
+ /** Props shared by built-in and app-registered ObjectForm input renderers. */
77
+ export interface FieldInputProps {
78
+ id: string;
79
+ name: string;
80
+ /** Resolved human-facing label for controls whose native name is absent. */
81
+ label?: string | null;
82
+ field: ObjectFormField;
83
+ value: unknown;
84
+ required: boolean;
85
+ disabled: boolean;
86
+ onvaluechange: (value: unknown) => void;
87
+ /** Reports parser validity to the host form/editor. */
88
+ onvaliditychange?: (valid: boolean) => void;
89
+ }
90
+ /** Data exposed to an ObjectForm per-field snippet override. */
91
+ export interface ObjectFormFieldSnippetProps {
92
+ id: string;
93
+ helpId: string;
94
+ field: ObjectFormField;
95
+ value: unknown;
96
+ required: boolean;
97
+ disabled: boolean;
98
+ setValue(value: unknown): void;
99
+ setValidity(valid: boolean): void;
100
+ }
101
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/svelte/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Shared types for the field-policy Svelte primitives.
3
+ */
4
+ export {};
package/dist/types.d.ts CHANGED
@@ -1,203 +1,276 @@
1
- import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
- import { SmrtObjectOptions } from '@happyvertical/smrt-core';
3
-
4
- /**
5
- * `scopeKey` value for app-scope rows. `scopeKey` exists ONLY so the
6
- * `conflictColumns` unique index stays total while `tenantId`/`userId` are
7
- * nullable (nullable columns would allow duplicate NULL rows)the same
8
- * trick as `PromptOverride.context`.
9
- */
10
- export declare const APP_FIELD_POLICY_SCOPE_KEY = "__app__";
11
-
12
- /**
13
- * Explain variant: merged result plus the ordered per-layer contributions for
14
- * each field, so admin/gear UIs (#2049/#2050) never re-derive precedence.
15
- * Layers are listed in application order (code, app, tenant chain root → leaf,
16
- * user) and contain ONLY contributions that survive into the merged result:
17
- * tenant ancestors discarded by a permission-inheritance break and user rows
18
- * suppressed by an effective org lock are omitted, so sequentially replaying
19
- * the listed deltas reproduces the merged policy.
20
- */
21
- export declare interface ExplainedObjectFieldPolicy extends ResolvedObjectFieldPolicy {
22
- layers: Record<string, FieldPolicyLayerContribution[]>;
23
- }
24
-
25
- export declare const FIELD_POLICY_SCOPE_TYPES: readonly FieldPolicyScopeType[];
26
-
27
- export declare const FIELD_POLICY_VISIBILITIES: readonly FieldPolicyVisibility[];
28
-
29
- /** Result shape of the batch resolve action (`FieldPolicyCollection.resolveBatch`). */
30
- export declare interface FieldPolicyBatchResult {
31
- policies: Record<string, ResolvedObjectFieldPolicy>;
32
- }
33
-
34
- /**
35
- * The sparse contribution of one layer (code seed or one stored row).
36
- *
37
- * `default` is boxed so an explicit JSON `null` default (meaning "default to
38
- * null") stays distinguishable from "this layer contributes no default".
39
- */
40
- export declare interface FieldPolicyDelta {
41
- default?: {
42
- value: unknown;
43
- };
44
- visibility?: FieldPolicyVisibility;
45
- help?: string;
46
- label?: string;
47
- order?: number;
48
- locked?: boolean;
49
- }
50
-
51
- /** One layer's contribution to a field's resolved policy (explain variant). */
52
- export declare interface FieldPolicyLayerContribution {
53
- layer: 'code' | 'app' | 'tenant' | 'user';
54
- /** Chain node id for `tenant` layers (root leaf order). */
55
- tenantId?: string;
56
- /** User id for the `user` layer. */
57
- userId?: string;
58
- delta: FieldPolicyDelta;
59
- }
60
-
61
- export declare interface FieldPolicyOptions extends SmrtObjectOptions {
62
- objectRef?: string;
63
- fieldName?: string;
64
- scopeType?: FieldPolicyScopeType;
65
- tenantId?: string | null;
66
- userId?: string | null;
67
- /**
68
- * ENCODED channel: an already-JSON-encoded default, exactly as the column
69
- * stores it (`'"Net 30"'`, `'42'`, `'null'`), or `null` to inherit.
70
- *
71
- * This is the wire contract: the generated write routes hand the request
72
- * body straight to the constructor, and the #2049/#2050 gear posts
73
- * `JSON.stringify(draft.defaultValue)`. It must therefore keep meaning
74
- * "already encoded" — auto-serializing here would double-encode every gear
75
- * write.
76
- *
77
- * Use {@link FieldPolicyOptions.defaultValueRaw} for a plain value. The two
78
- * are mutually exclusive: `'"TBD"'` and `'TBD'` are indistinguishable once
79
- * a single option carries both meanings, so the channel must be explicit
80
- * rather than sniffed.
81
- */
82
- defaultValue?: string | null;
83
- /**
84
- * PLAIN channel: any value, always serialized strings included. The
85
- * constructor-option twin of {@link FieldPolicy.setDefaultValue}, so
86
- * `{ defaultValueRaw: 'Net 30' }` stores `'"Net 30"'` rather than the
87
- * unparseable literal `Net 30`.
88
- */
89
- defaultValueRaw?: unknown;
90
- visibility?: FieldPolicyVisibility | null;
91
- help?: string | null;
92
- label?: string | null;
93
- displayOrder?: number | null;
94
- locked?: boolean | null;
95
- updatedBy?: string | null;
96
- }
97
-
98
- /**
99
- * Scope tier a {@link FieldPolicy} row belongs to.
100
- *
101
- * Resolution precedence is code seed `app` `tenant` (hierarchy walk,
102
- * root → leaf) → `user`. Unlike smrt-features (which ships only
103
- * `global`/`tenant`), the user tier is implemented end to end here — both
104
- * defaults and visibility resolve through it.
105
- */
106
- export declare type FieldPolicyScopeType = 'app' | 'tenant' | 'user';
107
-
108
- /**
109
- * Loader-function DI seam (NOT a container registration): the resolver calls
110
- * it lazily and treats `null` as "no hierarchy available" (flat-tenant
111
- * fallback). The default loader dynamic-imports `@happyvertical/smrt-users`
112
- * and returns `null` when it is not installed.
113
- */
114
- export declare type FieldPolicyTenantHierarchyLoader = (options: SmrtClassOptions) => Promise<FieldPolicyTenantHierarchyProvider | null>;
115
-
116
- /** Provider returning the root → leaf tenant chain (mirrors smrt-features). */
117
- export declare interface FieldPolicyTenantHierarchyProvider {
118
- getChain(tenantId: string): Promise<FieldPolicyTenantNode[]>;
119
- }
120
-
121
- /** Minimal tenant node consumed by the hierarchy walk (mirrors smrt-features). */
122
- export declare interface FieldPolicyTenantNode {
123
- id: string;
124
- inheritPermissions: boolean;
125
- cascadePermissions: boolean;
126
- }
127
-
128
- export declare interface FieldPolicyUsersModule {
129
- TenantCollection: {
130
- create(options: SmrtClassOptions): Promise<{
131
- get(criteria: {
132
- id: string;
133
- }): Promise<FieldPolicyUsersTenantRecord | null>;
134
- getAncestorsFromRoot(tenantId: string): Promise<FieldPolicyUsersTenantRecord[]>;
135
- }>;
136
- };
137
- }
138
-
139
- /**
140
- * Minimal structural shape of the tenant surface loaded from
141
- * `@happyvertical/smrt-users` by the default hierarchy loader. Only the
142
- * permission-cascade fields consumed by the chain walk are modeled.
143
- */
144
- export declare interface FieldPolicyUsersTenantRecord {
145
- id: string;
146
- inheritPermissions?: boolean;
147
- cascadePermissions?: boolean;
148
- }
149
-
150
- /**
151
- * Visibility tier for a field in generated/consuming form UIs.
152
- *
153
- * - `basic`: shown before the advanced disclosure
154
- * - `advanced`: shown behind the advanced disclosure
155
- * - `hidden`: not rendered (requires the field to be optional or have a
156
- * resolved default — the required-field invariant)
157
- */
158
- export declare type FieldPolicyVisibility = 'basic' | 'advanced' | 'hidden';
159
-
160
- /** Fully merged policy for a single field. */
161
- export declare interface ResolvedFieldPolicy {
162
- fieldName: string;
163
- /** True when any layer resolved a default (including an explicit null). */
164
- hasDefault: boolean;
165
- /** Parsed default value; `undefined` when {@link hasDefault} is false. */
166
- defaultValue: unknown;
167
- visibility: FieldPolicyVisibility;
168
- help: string | null;
169
- label: string | null;
170
- order: number | null;
171
- /** Grouping key — code-seed only (`ui.group`), not overridable by rows. */
172
- group: string | null;
173
- locked: boolean;
174
- /** Mirror of the manifest required flag (nullable fields are optional). */
175
- required: boolean;
176
- /**
177
- * True when the resolver forced `basic` visibility because the field is
178
- * required and no usable default resolved (the resolver-side safety net for
179
- * the required-field invariant).
180
- */
181
- visibilityForced?: boolean;
182
- }
183
-
184
- /** Merged policy for every field of one object. */
185
- export declare interface ResolvedObjectFieldPolicy {
186
- objectRef: string;
187
- fields: Record<string, ResolvedFieldPolicy>;
188
- }
189
-
190
- export declare interface ResolveFieldPolicyOptions {
191
- tenantId?: string | null;
192
- userId?: string | null;
193
- /**
194
- * Database holding `_smrt_field_policies`. Without it, only the code seed
195
- * resolves (stored layers are skipped) — the smrt-prompts precedent.
196
- */
197
- db?: SmrtClassOptions['db'];
198
- tenantHierarchyLoader?: FieldPolicyTenantHierarchyLoader;
199
- }
200
-
201
- export { SmrtClassOptions }
202
-
203
- export { }
1
+ import { SmrtClassOptions, SmrtObjectOptions } from '@happyvertical/smrt-core';
2
+ /**
3
+ * Scope tier a {@link FieldPolicy} row belongs to.
4
+ *
5
+ * Resolution precedence is code seed `app` `tenant` (hierarchy walk,
6
+ * root leaf) `user`. Unlike smrt-features (which ships only
7
+ * `global`/`tenant`), the user tier is implemented end to end here both
8
+ * defaults and visibility resolve through it.
9
+ */
10
+ export type FieldPolicyScopeType = 'app' | 'tenant' | 'user';
11
+ /**
12
+ * Visibility tier for a field in generated/consuming form UIs.
13
+ *
14
+ * - `basic`: shown before the advanced disclosure
15
+ * - `advanced`: shown behind the advanced disclosure
16
+ * - `hidden`: not rendered (requires the field to be optional or have a
17
+ * resolved default the required-field invariant)
18
+ */
19
+ export type FieldPolicyVisibility = 'basic' | 'advanced' | 'hidden';
20
+ /**
21
+ * `scopeKey` value for app-scope rows. `scopeKey` exists ONLY so the
22
+ * `conflictColumns` unique index stays total while `tenantId`/`userId` are
23
+ * nullable (nullable columns would allow duplicate NULL rows) — the same
24
+ * trick as `PromptOverride.context`.
25
+ */
26
+ export declare const APP_FIELD_POLICY_SCOPE_KEY = "__app__";
27
+ export declare const FIELD_POLICY_SCOPE_TYPES: readonly FieldPolicyScopeType[];
28
+ export declare const FIELD_POLICY_VISIBILITIES: readonly FieldPolicyVisibility[];
29
+ export interface FieldPolicyOptions extends SmrtObjectOptions {
30
+ objectRef?: string;
31
+ fieldName?: string;
32
+ scopeType?: FieldPolicyScopeType;
33
+ tenantId?: string | null;
34
+ userId?: string | null;
35
+ /**
36
+ * ENCODED channel: an already-JSON-encoded default, exactly as the column
37
+ * stores it (`'"Net 30"'`, `'42'`, `'null'`), or `null` to inherit.
38
+ *
39
+ * This is the wire contract: the generated write routes hand the request
40
+ * body straight to the constructor, and the #2049/#2050 gear posts
41
+ * `JSON.stringify(draft.defaultValue)`. It must therefore keep meaning
42
+ * "already encoded" — auto-serializing here would double-encode every gear
43
+ * write.
44
+ *
45
+ * Use {@link FieldPolicyOptions.defaultValueRaw} for a plain value. The two
46
+ * are mutually exclusive: `'"TBD"'` and `'TBD'` are indistinguishable once
47
+ * a single option carries both meanings, so the channel must be explicit
48
+ * rather than sniffed.
49
+ */
50
+ defaultValue?: string | null;
51
+ /**
52
+ * PLAIN channel: any value, always serialized — strings included. The
53
+ * constructor-option twin of {@link FieldPolicy.setDefaultValue}, so
54
+ * `{ defaultValueRaw: 'Net 30' }` stores `'"Net 30"'` rather than the
55
+ * unparseable literal `Net 30`.
56
+ */
57
+ defaultValueRaw?: unknown;
58
+ visibility?: FieldPolicyVisibility | null;
59
+ help?: string | null;
60
+ label?: string | null;
61
+ displayOrder?: number | null;
62
+ locked?: boolean | null;
63
+ updatedBy?: string | null;
64
+ }
65
+ /**
66
+ * The sparse contribution of one layer (code seed or one stored row).
67
+ *
68
+ * `default` is boxed so an explicit JSON `null` default (meaning "default to
69
+ * null") stays distinguishable from "this layer contributes no default".
70
+ */
71
+ export interface FieldPolicyDelta {
72
+ default?: {
73
+ value: unknown;
74
+ };
75
+ visibility?: FieldPolicyVisibility;
76
+ help?: string;
77
+ label?: string;
78
+ order?: number;
79
+ locked?: boolean;
80
+ }
81
+ /** One layer's contribution to a field's resolved policy (explain variant). */
82
+ export interface FieldPolicyLayerContribution {
83
+ layer: 'code' | 'app' | 'tenant' | 'user';
84
+ /** Chain node id for `tenant` layers (root leaf order). */
85
+ tenantId?: string;
86
+ /** User id for the `user` layer. */
87
+ userId?: string;
88
+ delta: FieldPolicyDelta;
89
+ }
90
+ /** Fully merged policy for a single field. */
91
+ export interface ResolvedFieldPolicy {
92
+ fieldName: string;
93
+ /** True when any layer resolved a default (including an explicit null). */
94
+ hasDefault: boolean;
95
+ /** Parsed default value; `undefined` when {@link hasDefault} is false. */
96
+ defaultValue: unknown;
97
+ visibility: FieldPolicyVisibility;
98
+ help: string | null;
99
+ label: string | null;
100
+ order: number | null;
101
+ /** Grouping key code-seed only (`ui.group`), not overridable by rows. */
102
+ group: string | null;
103
+ locked: boolean;
104
+ /** Mirror of the manifest required flag (nullable fields are optional). */
105
+ required: boolean;
106
+ /**
107
+ * True when the resolver forced `basic` visibility because the field is
108
+ * required and no usable default resolved (the resolver-side safety net for
109
+ * the required-field invariant).
110
+ */
111
+ visibilityForced?: boolean;
112
+ }
113
+ /** Merged policy for every field of one object. */
114
+ export interface ResolvedObjectFieldPolicy {
115
+ objectRef: string;
116
+ fields: Record<string, ResolvedFieldPolicy>;
117
+ }
118
+ /**
119
+ * Explain variant: merged result plus the ordered per-layer contributions for
120
+ * each field, so admin/gear UIs (#2049/#2050) never re-derive precedence.
121
+ * Layers are listed in application order (code, app, tenant chain root → leaf,
122
+ * user) and contain ONLY contributions that survive into the merged result:
123
+ * tenant ancestors discarded by a permission-inheritance break and user rows
124
+ * suppressed by an effective org lock are omitted, so sequentially replaying
125
+ * the listed deltas reproduces the merged policy.
126
+ */
127
+ export interface ExplainedObjectFieldPolicy extends ResolvedObjectFieldPolicy {
128
+ layers: Record<string, FieldPolicyLayerContribution[]>;
129
+ }
130
+ /** Minimal tenant node consumed by the hierarchy walk (mirrors smrt-features). */
131
+ export interface FieldPolicyTenantNode {
132
+ id: string;
133
+ inheritPermissions: boolean;
134
+ cascadePermissions: boolean;
135
+ }
136
+ /** Provider returning the root → leaf tenant chain (mirrors smrt-features). */
137
+ export interface FieldPolicyTenantHierarchyProvider {
138
+ getChain(tenantId: string): Promise<FieldPolicyTenantNode[]>;
139
+ }
140
+ /**
141
+ * Loader-function DI seam (NOT a container registration): the resolver calls
142
+ * it lazily and treats `null` as "no hierarchy available" (flat-tenant
143
+ * fallback). The default loader dynamic-imports `@happyvertical/smrt-users`
144
+ * and returns `null` when it is not installed.
145
+ */
146
+ export type FieldPolicyTenantHierarchyLoader = (options: SmrtClassOptions) => Promise<FieldPolicyTenantHierarchyProvider | null>;
147
+ export interface ResolveFieldPolicyOptions {
148
+ tenantId?: string | null;
149
+ userId?: string | null;
150
+ /**
151
+ * Database holding `_smrt_field_policies`. Without it, only the code seed
152
+ * resolves (stored layers are skipped) — the smrt-prompts precedent.
153
+ */
154
+ db?: SmrtClassOptions['db'];
155
+ tenantHierarchyLoader?: FieldPolicyTenantHierarchyLoader;
156
+ /**
157
+ * Internal write-validation seam: omit persisted rows while evaluating a
158
+ * proposed replacement. Excluded resolutions bypass the shared cache so a
159
+ * projected result can never poison ordinary reads.
160
+ */
161
+ excludePolicyIds?: ReadonlySet<string>;
162
+ }
163
+ /**
164
+ * Minimal structural shape of the tenant surface loaded from
165
+ * `@happyvertical/smrt-users` by the default hierarchy loader. Only the
166
+ * permission-cascade fields consumed by the chain walk are modeled.
167
+ */
168
+ export interface FieldPolicyUsersTenantRecord {
169
+ id: string;
170
+ inheritPermissions?: boolean;
171
+ cascadePermissions?: boolean;
172
+ }
173
+ export interface FieldPolicyUsersModule {
174
+ TenantCollection: {
175
+ create(options: SmrtClassOptions): Promise<{
176
+ get(criteria: {
177
+ id: string;
178
+ }): Promise<FieldPolicyUsersTenantRecord | null>;
179
+ getAncestorsFromRoot(tenantId: string): Promise<FieldPolicyUsersTenantRecord[]>;
180
+ }>;
181
+ };
182
+ }
183
+ /** Result shape of the batch resolve action (`FieldPolicyCollection.resolveBatch`). */
184
+ export interface FieldPolicyBatchResult {
185
+ policies: Record<string, ResolvedObjectFieldPolicy>;
186
+ }
187
+ /** A policy row safe to expose through the context-scoped gear action. */
188
+ export interface FieldPolicyEditorRow {
189
+ defaultValue: string | null;
190
+ displayOrder: number | null;
191
+ fieldName: string;
192
+ help: string | null;
193
+ id: string;
194
+ label: string | null;
195
+ locked: boolean | null;
196
+ scopeType: FieldPolicyScopeType;
197
+ tenantId: string | null;
198
+ updatedBy: string | null;
199
+ userId: string | null;
200
+ visibility: FieldPolicyVisibility | null;
201
+ }
202
+ /** Context-derived authorization state for the field-policy gear. */
203
+ export interface FieldPolicyEditorCapabilities {
204
+ manage: boolean;
205
+ personalize: boolean;
206
+ }
207
+ /**
208
+ * Gear bootstrap response. `policy` is always filtered by the public-field
209
+ * rail; raw rows and explanation layers appear only for scopes the caller is
210
+ * authorized to mutate. Row ids are present for reset/delete operations.
211
+ */
212
+ export interface FieldPolicyEditorState {
213
+ capabilities: FieldPolicyEditorCapabilities;
214
+ /**
215
+ * For the caller's personal layer only, whether removing that layer's
216
+ * default still leaves a usable default at code/app/tenant precedence.
217
+ * This intentionally exposes no lower-layer rows or default values.
218
+ */
219
+ personalLowerDefaultUsable: Record<string, boolean>;
220
+ policy: ExplainedObjectFieldPolicy;
221
+ rows: {
222
+ app: FieldPolicyEditorRow[];
223
+ tenant: FieldPolicyEditorRow[];
224
+ user: FieldPolicyEditorRow[];
225
+ };
226
+ }
227
+ /** A stored organization row with the immutable audit metadata needed by #2050. */
228
+ export interface FieldPolicyAuditRow extends FieldPolicyEditorRow {
229
+ objectRef: string;
230
+ createdAt: string | null;
231
+ updatedAt: string | null;
232
+ }
233
+ /** Why a persisted policy row is no longer usable by the live registry. */
234
+ export type FieldPolicyDriftReason = 'unknown-object' | 'unknown-field' | 'excluded-field';
235
+ /** Drift is deliberately identity-only: stale values are never serialized. */
236
+ export interface FieldPolicyDriftRow {
237
+ id: string;
238
+ objectRef: string;
239
+ fieldName: string;
240
+ scopeType: FieldPolicyScopeType;
241
+ tenantId: string | null;
242
+ userId: string | null;
243
+ updatedBy: string | null;
244
+ createdAt: string | null;
245
+ updatedAt: string | null;
246
+ reason: FieldPolicyDriftReason;
247
+ prunable: boolean;
248
+ }
249
+ /**
250
+ * Tenant-admin catalog read surface. Foreign user rows are represented only
251
+ * by counts; their values and identifiers never leave the collection.
252
+ */
253
+ export interface FieldPolicyAuditSnapshot {
254
+ orgRows: FieldPolicyAuditRow[];
255
+ appRows: FieldPolicyAuditRow[];
256
+ inheritedOrgKeys: Record<string, string[]>;
257
+ userOverrideCounts: Record<string, Record<string, number>>;
258
+ driftRows: FieldPolicyDriftRow[];
259
+ policies: Record<string, ExplainedObjectFieldPolicy>;
260
+ caller: {
261
+ tenantId: string | null;
262
+ userId: string | null;
263
+ canManageOrg: boolean;
264
+ canPersonalize: boolean;
265
+ };
266
+ }
267
+ /** Explicit 403 result used by generated custom-action transports. */
268
+ export interface FieldPolicyEditorStateDenied {
269
+ code: 'permission_denied';
270
+ message: string;
271
+ ok: false;
272
+ status: 403;
273
+ }
274
+ export type FieldPolicyEditorStateResult = FieldPolicyEditorState | FieldPolicyEditorStateDenied;
275
+ export type { SmrtClassOptions };
276
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}