@happyvertical/smrt-fields 0.53.1 → 0.53.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 (83) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/manifest.json +1 -1
  3. package/dist/smrt-knowledge.json +3 -3
  4. package/package.json +10 -10
  5. package/dist/svelte/__tests__/FieldPolicyControlPanel.test.js +0 -277
  6. package/dist/svelte/__tests__/FieldPolicyGear.test.js +0 -503
  7. package/dist/svelte/__tests__/FormHelp.test.js +0 -146
  8. package/dist/svelte/__tests__/ModeUX.test.js +0 -109
  9. package/dist/svelte/__tests__/ObjectForm.test.js +0 -725
  10. package/dist/svelte/__tests__/ObjectFormGeneratedApi.integration.test.js +0 -437
  11. package/dist/svelte/__tests__/PolicyField.test.js +0 -373
  12. package/dist/svelte/__tests__/UsageLearning.test.js +0 -140
  13. package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte +0 -30
  14. package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte.d.ts +0 -9
  15. package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte.d.ts.map +0 -1
  16. package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte +0 -33
  17. package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte.d.ts +0 -10
  18. package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte.d.ts.map +0 -1
  19. package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte +0 -19
  20. package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte.d.ts +0 -10
  21. package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte.d.ts.map +0 -1
  22. package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte +0 -18
  23. package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte.d.ts +0 -11
  24. package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte.d.ts.map +0 -1
  25. package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte +0 -11
  26. package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte.d.ts +0 -19
  27. package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte.d.ts.map +0 -1
  28. package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte +0 -18
  29. package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte.d.ts +0 -8
  30. package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte.d.ts.map +0 -1
  31. package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte +0 -24
  32. package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte.d.ts +0 -13
  33. package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte.d.ts.map +0 -1
  34. package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte +0 -37
  35. package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte.d.ts +0 -15
  36. package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte.d.ts.map +0 -1
  37. package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte +0 -17
  38. package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte.d.ts +0 -10
  39. package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte.d.ts.map +0 -1
  40. package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte +0 -25
  41. package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte.d.ts +0 -10
  42. package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte.d.ts.map +0 -1
  43. package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte +0 -34
  44. package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte.d.ts +0 -10
  45. package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte.d.ts.map +0 -1
  46. package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte +0 -29
  47. package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte.d.ts +0 -11
  48. package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte.d.ts.map +0 -1
  49. package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte +0 -33
  50. package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte.d.ts +0 -9
  51. package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte.d.ts.map +0 -1
  52. package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte +0 -40
  53. package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte.d.ts +0 -8
  54. package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte.d.ts.map +0 -1
  55. package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte +0 -26
  56. package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte.d.ts +0 -13
  57. package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte.d.ts.map +0 -1
  58. package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte +0 -39
  59. package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte.d.ts +0 -17
  60. package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte.d.ts.map +0 -1
  61. package/dist/svelte/__tests__/fixtures/RegistryInput.svelte +0 -15
  62. package/dist/svelte/__tests__/fixtures/RegistryInput.svelte.d.ts +0 -5
  63. package/dist/svelte/__tests__/fixtures/RegistryInput.svelte.d.ts.map +0 -1
  64. package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte +0 -29
  65. package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte.d.ts +0 -14
  66. package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte.d.ts.map +0 -1
  67. package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte +0 -24
  68. package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte.d.ts +0 -14
  69. package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte.d.ts.map +0 -1
  70. package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte +0 -28
  71. package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte.d.ts +0 -13
  72. package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte.d.ts.map +0 -1
  73. package/dist/svelte/__tests__/fixtures/SuggestionGearFixture.svelte +0 -23
  74. package/dist/svelte/__tests__/fixtures/SuggestionGearFixture.svelte.d.ts +0 -10
  75. package/dist/svelte/__tests__/fixtures/SuggestionGearFixture.svelte.d.ts.map +0 -1
  76. package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte +0 -14
  77. package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte.d.ts +0 -19
  78. package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte.d.ts.map +0 -1
  79. package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte +0 -25
  80. package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte.d.ts +0 -14
  81. package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte.d.ts.map +0 -1
  82. package/dist/svelte/__tests__/playground.test.js +0 -66
  83. package/dist/svelte/__tests__/settings-catalog.test.js +0 -161
@@ -1,14 +0,0 @@
1
- /**
2
- * Test fixture: an advanced-tier PolicyField with a resolved default that is
3
- * hidden at mount (basic mode) and revealed by the mode toggle. Verifies
4
- * prefill runs on first reveal, not only at mount.
5
- */
6
- import type { ResolvedObjectFieldPolicy } from '../../../types.js';
7
- type $$ComponentProps = {
8
- policy: ResolvedObjectFieldPolicy;
9
- isNewRecord?: boolean;
10
- };
11
- declare const RevealPrefillFixture: import("svelte").Component<$$ComponentProps, {}, "">;
12
- type RevealPrefillFixture = ReturnType<typeof RevealPrefillFixture>;
13
- export default RevealPrefillFixture;
14
- //# sourceMappingURL=RevealPrefillFixture.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RevealPrefillFixture.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/__tests__/fixtures/RevealPrefillFixture.svelte.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAKlE,KAAK,gBAAgB,GAAI;IACxB,MAAM,EAAE,yBAAyB,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AA0BF,QAAA,MAAM,oBAAoB,sDAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
@@ -1,24 +0,0 @@
1
- <script lang="ts">
2
- import type { Snippet } from 'svelte';
3
- import type {
4
- FieldPolicyDetailItem,
5
- FieldPolicySettingsCatalogPage,
6
- } from '../../../settings-catalog.js';
7
-
8
- interface Props {
9
- page: FieldPolicySettingsCatalogPage;
10
- baseUrl: string;
11
- detail: Snippet<[{ item: FieldPolicyDetailItem }]>;
12
- preservedParams?: Record<string, string>;
13
- }
14
-
15
- let { page, baseUrl, detail, preservedParams = {} }: Props = $props();
16
- const href = $derived(
17
- `${baseUrl}?${new URLSearchParams(preservedParams).toString()}`,
18
- );
19
- </script>
20
-
21
- <a aria-label="catalog navigation" {href}>Catalog navigation</a>
22
- {#if page.selected}
23
- {@render detail({ item: page.selected })}
24
- {/if}
@@ -1,14 +0,0 @@
1
- import type { Snippet } from 'svelte';
2
- import type { FieldPolicyDetailItem, FieldPolicySettingsCatalogPage } from '../../../settings-catalog.js';
3
- interface Props {
4
- page: FieldPolicySettingsCatalogPage;
5
- baseUrl: string;
6
- detail: Snippet<[{
7
- item: FieldPolicyDetailItem;
8
- }]>;
9
- preservedParams?: Record<string, string>;
10
- }
11
- declare const SettingsCatalogStub: import("svelte").Component<Props, {}, "">;
12
- type SettingsCatalogStub = ReturnType<typeof SettingsCatalogStub>;
13
- export default SettingsCatalogStub;
14
- //# sourceMappingURL=SettingsCatalogStub.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsCatalogStub.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/__tests__/fixtures/SettingsCatalogStub.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,qBAAqB,EACrB,8BAA8B,EAC/B,MAAM,8BAA8B,CAAC;AAGtC,UAAU,KAAK;IACb,IAAI,EAAE,8BAA8B,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC,CAAC;QAAE,IAAI,EAAE,qBAAqB,CAAA;KAAE,CAAC,CAAC,CAAC;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAmBD,QAAA,MAAM,mBAAmB,2CAAwC,CAAC;AAClE,KAAK,mBAAmB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAClE,eAAe,mBAAmB,CAAC"}
@@ -1,28 +0,0 @@
1
- <script lang="ts">
2
- /**
3
- * Test fixture: PolicyField snippet escape hatch with full policy data.
4
- * Verifies the snippet receives resolved label, help, required, etc.
5
- */
6
-
7
- import type { ResolvedObjectFieldPolicy } from '../../../types.js';
8
- import FieldPolicyProvider from '../../components/FieldPolicyProvider.svelte';
9
- import PolicyField from '../../components/PolicyField.svelte';
10
-
11
- let {
12
- policy,
13
- mode = 'basic',
14
- }: {
15
- policy: ResolvedObjectFieldPolicy;
16
- mode?: 'basic' | 'advanced';
17
- } = $props();
18
- </script>
19
-
20
- <FieldPolicyProvider {policy} {mode}>
21
- <PolicyField name="name">
22
- {#snippet render({ label, help, required })}
23
- <div data-testid="field-label">{label}</div>
24
- <div data-testid="field-help">{help}</div>
25
- <div data-testid="field-required">{String(required)}</div>
26
- {/snippet}
27
- </PolicyField>
28
- </FieldPolicyProvider>
@@ -1,13 +0,0 @@
1
- /**
2
- * Test fixture: PolicyField snippet escape hatch with full policy data.
3
- * Verifies the snippet receives resolved label, help, required, etc.
4
- */
5
- import type { ResolvedObjectFieldPolicy } from '../../../types.js';
6
- type $$ComponentProps = {
7
- policy: ResolvedObjectFieldPolicy;
8
- mode?: 'basic' | 'advanced';
9
- };
10
- declare const SnippetFixture: import("svelte").Component<$$ComponentProps, {}, "">;
11
- type SnippetFixture = ReturnType<typeof SnippetFixture>;
12
- export default SnippetFixture;
13
- //# sourceMappingURL=SnippetFixture.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SnippetFixture.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/__tests__/fixtures/SnippetFixture.svelte.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAIlE,KAAK,gBAAgB,GAAI;IACxB,MAAM,EAAE,yBAAyB,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;CAC7B,CAAC;AA0BF,QAAA,MAAM,cAAc,sDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -1,23 +0,0 @@
1
- <script lang="ts">
2
- import FieldPolicyGearButton from '../../components/FieldPolicyGearButton.svelte';
3
- import FieldPolicyGearProvider from '../../components/FieldPolicyGearProvider.svelte';
4
- import type { FieldPolicyEditorAdapter } from '../../field-policy-editor.js';
5
- import type { FieldPolicySuggestionAdapter } from '../../suggestions.js';
6
-
7
- let {
8
- adapter,
9
- suggestionAdapter,
10
- }: {
11
- adapter: FieldPolicyEditorAdapter;
12
- suggestionAdapter: FieldPolicySuggestionAdapter;
13
- } = $props();
14
- </script>
15
-
16
- <FieldPolicyGearProvider
17
- objectRef="@test:Widget"
18
- fields={{ title: { type: 'text' } }}
19
- {adapter}
20
- {suggestionAdapter}
21
- >
22
- <FieldPolicyGearButton />
23
- </FieldPolicyGearProvider>
@@ -1,10 +0,0 @@
1
- import type { FieldPolicyEditorAdapter } from '../../field-policy-editor.js';
2
- import type { FieldPolicySuggestionAdapter } from '../../suggestions.js';
3
- type $$ComponentProps = {
4
- adapter: FieldPolicyEditorAdapter;
5
- suggestionAdapter: FieldPolicySuggestionAdapter;
6
- };
7
- declare const SuggestionGearFixture: import("svelte").Component<$$ComponentProps, {}, "">;
8
- type SuggestionGearFixture = ReturnType<typeof SuggestionGearFixture>;
9
- export default SuggestionGearFixture;
10
- //# sourceMappingURL=SuggestionGearFixture.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SuggestionGearFixture.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/__tests__/fixtures/SuggestionGearFixture.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAExE,KAAK,gBAAgB,GAAI;IACxB,OAAO,EAAE,wBAAwB,CAAC;IAClC,iBAAiB,EAAE,4BAA4B,CAAC;CACjD,CAAC;AAmBF,QAAA,MAAM,qBAAqB,sDAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
@@ -1,14 +0,0 @@
1
- <script lang="ts">
2
- /**
3
- * Test helper: a button rendered inside a FieldPolicyProvider that toggles
4
- * the provider's mode state. Captures the context during component
5
- * initialisation (getContext is only valid there in Svelte 5).
6
- */
7
- import { getFieldPolicyContext } from '../../context.svelte.js';
8
-
9
- const context = getFieldPolicyContext();
10
- </script>
11
-
12
- <button onclick={() => context.mode.toggle()}>
13
- Toggle Mode
14
- </button>
@@ -1,19 +0,0 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const ToggleModeButton: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
- [evt: string]: CustomEvent<any>;
16
- }, {}, {}, string>;
17
- type ToggleModeButton = InstanceType<typeof ToggleModeButton>;
18
- export default ToggleModeButton;
19
- //# sourceMappingURL=ToggleModeButton.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToggleModeButton.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/__tests__/fixtures/ToggleModeButton.svelte.ts"],"names":[],"mappings":"AAuBA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,gBAAgB;;kBAA+E,CAAC;AACpF,KAAK,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,eAAe,gBAAgB,CAAC"}
@@ -1,25 +0,0 @@
1
- <script lang="ts">
2
- /**
3
- * Test fixture: PolicyField with helpDensity='tooltip' to verify the help
4
- * text attaches to the label as a title attribute instead of rendering a
5
- * visible hint.
6
- */
7
-
8
- import type { ResolvedObjectFieldPolicy } from '../../../types.js';
9
- import FieldPolicyProvider from '../../components/FieldPolicyProvider.svelte';
10
- import PolicyField from '../../components/PolicyField.svelte';
11
-
12
- let {
13
- policy,
14
- helpDensity = 'tooltip',
15
- }: {
16
- policy: ResolvedObjectFieldPolicy;
17
- helpDensity?: 'hint' | 'tooltip';
18
- } = $props();
19
- </script>
20
-
21
- <FieldPolicyProvider {policy} mode="basic">
22
- <PolicyField name="name" {helpDensity}>
23
- <input id="name" name="name" type="text" />
24
- </PolicyField>
25
- </FieldPolicyProvider>
@@ -1,14 +0,0 @@
1
- /**
2
- * Test fixture: PolicyField with helpDensity='tooltip' to verify the help
3
- * text attaches to the label as a title attribute instead of rendering a
4
- * visible hint.
5
- */
6
- import type { ResolvedObjectFieldPolicy } from '../../../types.js';
7
- type $$ComponentProps = {
8
- policy: ResolvedObjectFieldPolicy;
9
- helpDensity?: 'hint' | 'tooltip';
10
- };
11
- declare const TooltipFixture: import("svelte").Component<$$ComponentProps, {}, "">;
12
- type TooltipFixture = ReturnType<typeof TooltipFixture>;
13
- export default TooltipFixture;
14
- //# sourceMappingURL=TooltipFixture.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TooltipFixture.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/__tests__/fixtures/TooltipFixture.svelte.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAIlE,KAAK,gBAAgB,GAAI;IACxB,MAAM,EAAE,yBAAyB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAAC;AAsBF,QAAA,MAAM,cAAc,sDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -1,66 +0,0 @@
1
- // @vitest-environment jsdom
2
- /**
3
- * Playground smoke tests (#2272).
4
- *
5
- * Registering `@happyvertical/smrt-fields/playground` publishes EVERY entry in
6
- * the module, and `PlaygroundHost` mounts the selected one bare — no
7
- * `<svelte:boundary>` around it. So a preview that throws on mount is not a
8
- * contained failure the host can route around; a host cannot offer the sound
9
- * entry without also offering one that breaks the page.
10
- *
11
- * That is exactly how #2272 shipped: the `Policy-Driven Form` preview rendered
12
- * `<FormHelp>` outside its `<FieldPolicyProvider>`, and no unit test could see
13
- * it, because `FormHelp`'s own tests always mount it through a provider
14
- * fixture — they exercise the component's contract, never the preview's
15
- * composition.
16
- *
17
- * These tests therefore load and MOUNT every exported entry the way
18
- * `PlaygroundHost` does — one mount per declared mode, with the entry props and
19
- * mode props merged (`PlaygroundHost.svelte`). Nothing wraps the component, so
20
- * a preview that needs an ancestor provider must supply its own.
21
- *
22
- * Structural types below: this package must not depend on
23
- * `@happyvertical/smrt-playground`, so the module shape is asserted, not
24
- * imported.
25
- */
26
- import { cleanup, render } from '@happyvertical/smrt-vitest/svelte';
27
- import { afterEach, describe, expect, it } from 'vitest';
28
- import playground from '../playground.js';
29
- const entries = playground.entries;
30
- afterEach(() => {
31
- cleanup();
32
- });
33
- describe('smrt-fields playground module', () => {
34
- it('publishes the field-policy previews', () => {
35
- expect(playground.packageName).toBe('@happyvertical/smrt-fields');
36
- expect(entries.map((entry) => entry.id)).toEqual([
37
- 'policy-form',
38
- 'object-form',
39
- ]);
40
- for (const entry of entries) {
41
- expect(entry.loadComponent).toEqual(expect.any(Function));
42
- expect(entry.modes).toHaveProperty('mock');
43
- }
44
- });
45
- // One case per entry/mode so a failure names the broken preview.
46
- for (const entry of entries) {
47
- for (const [mode, config] of Object.entries(entry.modes ?? {})) {
48
- it(`mounts the "${entry.title}" preview in ${mode} mode`, async () => {
49
- const loaded = await entry.loadComponent();
50
- const component = typeof loaded === 'function'
51
- ? loaded
52
- : loaded.default;
53
- expect(component).toEqual(expect.any(Function));
54
- // Mirror PlaygroundHost: entry props, then mode props. Nothing else.
55
- const props = {
56
- ...(entry.props ?? {}),
57
- ...(config === true ? {} : (config.props ?? {})),
58
- };
59
- const { container } = render(component, {
60
- props: props,
61
- });
62
- expect(container.textContent?.trim()).not.toBe('');
63
- });
64
- }
65
- }
66
- });
@@ -1,161 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { auditObjectRefs, decorateCatalogPage, fieldPolicyCatalogPreservedParams, fieldPolicyControlPanelNavItem, fieldPolicyRollup, orgRowIdsForObject, prunableDriftRows, } from '../settings-catalog.js';
3
- const objectRef = '@test/smrt-fields:Document';
4
- function audit() {
5
- return {
6
- caller: {
7
- tenantId: 'tenant',
8
- userId: 'user',
9
- canManageOrg: true,
10
- canPersonalize: true,
11
- },
12
- appRows: [],
13
- orgRows: [
14
- {
15
- id: 'org-row',
16
- objectRef,
17
- fieldName: 'title',
18
- scopeType: 'tenant',
19
- tenantId: 'tenant',
20
- userId: null,
21
- updatedBy: 'user',
22
- createdAt: null,
23
- updatedAt: null,
24
- defaultValue: null,
25
- displayOrder: null,
26
- help: null,
27
- label: null,
28
- locked: null,
29
- visibility: 'advanced',
30
- },
31
- ],
32
- inheritedOrgKeys: {},
33
- userOverrideCounts: { [objectRef]: { title: 2 } },
34
- driftRows: [
35
- {
36
- id: 'stale',
37
- objectRef: '@gone:Old',
38
- fieldName: 'gone',
39
- scopeType: 'tenant',
40
- tenantId: 'tenant',
41
- userId: null,
42
- updatedBy: null,
43
- createdAt: null,
44
- updatedAt: null,
45
- reason: 'unknown-object',
46
- prunable: true,
47
- },
48
- ],
49
- policies: {
50
- [objectRef]: {
51
- objectRef,
52
- fields: {
53
- title: {
54
- fieldName: 'title',
55
- hasDefault: true,
56
- defaultValue: 'tenant',
57
- visibility: 'advanced',
58
- help: null,
59
- label: null,
60
- order: null,
61
- group: null,
62
- locked: false,
63
- required: false,
64
- },
65
- },
66
- layers: {
67
- title: [
68
- {
69
- layer: 'code',
70
- delta: { default: { value: 'code' }, visibility: 'basic' },
71
- },
72
- {
73
- layer: 'tenant',
74
- tenantId: 'tenant',
75
- delta: { default: { value: 'tenant' }, visibility: 'advanced' },
76
- },
77
- ],
78
- },
79
- },
80
- },
81
- };
82
- }
83
- describe('field-policy control-panel adapters', () => {
84
- it('replays explained layers for code/app/org cells and never exposes user rows', () => {
85
- const rollup = fieldPolicyRollup(audit(), objectRef, 'title');
86
- expect(rollup.code).toMatchObject({
87
- defaultValue: 'code',
88
- visibility: 'basic',
89
- });
90
- expect(rollup.org).toMatchObject({
91
- defaultValue: 'tenant',
92
- visibility: 'advanced',
93
- contributed: true,
94
- });
95
- expect(rollup.userCount).toBe(2);
96
- expect(rollup.orgRow?.id).toBe('org-row');
97
- });
98
- it('keeps a selected off-page object in the capped policy read while count refs remain complete', () => {
99
- const page = {
100
- items: Array.from({ length: 100 }, (_, index) => ({
101
- objectRef: `@test:Thing${index}`,
102
- })),
103
- selected: { objectRef: '@test:Selected' },
104
- };
105
- const refs = auditObjectRefs(page);
106
- expect(refs.objectRefs).toHaveLength(100);
107
- expect(refs.objectRefs[0]).toBe('@test:Selected');
108
- expect(refs.countObjectRefs).toHaveLength(101);
109
- });
110
- it('decorates an off-page selected detail alongside page summaries', () => {
111
- const page = decorateCatalogPage({
112
- items: [],
113
- selected: {
114
- id: 'selected',
115
- objectRef,
116
- fieldName: 'title',
117
- className: 'Document',
118
- packageName: '@test/smrt-fields',
119
- label: 'Raw title',
120
- description: 'Raw description',
121
- fields: {},
122
- },
123
- query: '',
124
- page: 1,
125
- pageSize: 25,
126
- total: 1,
127
- }, audit());
128
- expect(page.selected).toMatchObject({
129
- label: 'Title',
130
- status: 'Organization · 2 user overrides',
131
- fields: {},
132
- });
133
- });
134
- it('selects only caller-prunable drift rows and produces a permission-gated tenant nav item', () => {
135
- expect(prunableDriftRows(audit()).map((row) => row.id)).toEqual(['stale']);
136
- expect(orgRowIdsForObject(audit(), objectRef)).toEqual(['org-row']);
137
- expect(fieldPolicyControlPanelNavItem({
138
- href: '/admin/fields',
139
- permissions: [],
140
- })).toBeNull();
141
- expect(fieldPolicyControlPanelNavItem({
142
- href: '/admin/fields',
143
- permissions: ['fields.policy.manage'],
144
- })).toMatchObject({ href: '/admin/fields', label: 'Field settings' });
145
- });
146
- it('keeps a nondefault page size across catalog search, selection, and pagination links', () => {
147
- expect(fieldPolicyCatalogPreservedParams({
148
- page: { pageSize: 25 },
149
- filters: {
150
- packageFilter: 'package',
151
- objectFilter: 'object',
152
- customizedOnly: true,
153
- },
154
- })).toEqual({
155
- package: 'package',
156
- object: 'object',
157
- customized: '1',
158
- pageSize: '25',
159
- });
160
- });
161
- });