@happyvertical/smrt-fields 0.53.0 → 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.
- package/dist/index.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/smrt-knowledge.json +3 -3
- package/package.json +10 -10
- package/dist/svelte/__tests__/FieldPolicyControlPanel.test.js +0 -277
- package/dist/svelte/__tests__/FieldPolicyGear.test.js +0 -503
- package/dist/svelte/__tests__/FormHelp.test.js +0 -146
- package/dist/svelte/__tests__/ModeUX.test.js +0 -109
- package/dist/svelte/__tests__/ObjectForm.test.js +0 -725
- package/dist/svelte/__tests__/ObjectFormGeneratedApi.integration.test.js +0 -437
- package/dist/svelte/__tests__/PolicyField.test.js +0 -373
- package/dist/svelte/__tests__/UsageLearning.test.js +0 -140
- package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte +0 -30
- package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte.d.ts +0 -9
- package/dist/svelte/__tests__/fixtures/AdvancedFieldsFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte +0 -33
- package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte.d.ts +0 -10
- package/dist/svelte/__tests__/fixtures/DomPrefillFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte +0 -19
- package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte.d.ts +0 -10
- package/dist/svelte/__tests__/fixtures/FormHelpFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte +0 -18
- package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte.d.ts +0 -11
- package/dist/svelte/__tests__/fixtures/GeneratedApiGearFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte +0 -11
- package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte.d.ts +0 -19
- package/dist/svelte/__tests__/fixtures/GracefulDegradeFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte +0 -18
- package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte.d.ts +0 -8
- package/dist/svelte/__tests__/fixtures/ModeSwitchFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte +0 -24
- package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte.d.ts +0 -13
- package/dist/svelte/__tests__/fixtures/NoIdFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte +0 -37
- package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte.d.ts +0 -15
- package/dist/svelte/__tests__/fixtures/ObjectFormActionsFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte +0 -17
- package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte.d.ts +0 -10
- package/dist/svelte/__tests__/fixtures/ObjectFormFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte +0 -25
- package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte.d.ts +0 -10
- package/dist/svelte/__tests__/fixtures/ObjectFormRegistryFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte +0 -34
- package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte.d.ts +0 -10
- package/dist/svelte/__tests__/fixtures/ObjectFormSnippetFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte +0 -29
- package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte.d.ts +0 -11
- package/dist/svelte/__tests__/fixtures/ObjectFormSourceFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte +0 -33
- package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte.d.ts +0 -9
- package/dist/svelte/__tests__/fixtures/ObjectFormSourceSnippetFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte +0 -40
- package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte.d.ts +0 -8
- package/dist/svelte/__tests__/fixtures/PolicyDataTableFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte +0 -26
- package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte.d.ts +0 -13
- package/dist/svelte/__tests__/fixtures/PrefillFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte +0 -39
- package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte.d.ts +0 -17
- package/dist/svelte/__tests__/fixtures/ProviderFieldFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/RegistryInput.svelte +0 -15
- package/dist/svelte/__tests__/fixtures/RegistryInput.svelte.d.ts +0 -5
- package/dist/svelte/__tests__/fixtures/RegistryInput.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte +0 -29
- package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte.d.ts +0 -14
- package/dist/svelte/__tests__/fixtures/RevealPrefillFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte +0 -24
- package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte.d.ts +0 -14
- package/dist/svelte/__tests__/fixtures/SettingsCatalogStub.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte +0 -28
- package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte.d.ts +0 -13
- package/dist/svelte/__tests__/fixtures/SnippetFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/SuggestionGearFixture.svelte +0 -23
- package/dist/svelte/__tests__/fixtures/SuggestionGearFixture.svelte.d.ts +0 -10
- package/dist/svelte/__tests__/fixtures/SuggestionGearFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte +0 -14
- package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte.d.ts +0 -19
- package/dist/svelte/__tests__/fixtures/ToggleModeButton.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte +0 -25
- package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte.d.ts +0 -14
- package/dist/svelte/__tests__/fixtures/TooltipFixture.svelte.d.ts.map +0 -1
- package/dist/svelte/__tests__/playground.test.js +0 -66
- 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
|
-
});
|