@happyvertical/smrt-fields 0.55.14 → 0.55.17

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.
@@ -2,7 +2,7 @@
2
2
  "version": "1.0.0",
3
3
  "timestamp": 0,
4
4
  "packageName": "@happyvertical/smrt-fields",
5
- "packageVersion": "0.55.14",
5
+ "packageVersion": "0.55.17",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-fields:FieldUsageLearningAgent": {
8
8
  "name": "fieldusagelearningagent",
@@ -3,12 +3,12 @@
3
3
  "sensitiveFieldsExcluded": true,
4
4
  "generatedAt": "1970-01-01T00:00:00.000Z",
5
5
  "packageName": "@happyvertical/smrt-fields",
6
- "packageVersion": "0.55.14",
6
+ "packageVersion": "0.55.17",
7
7
  "sourceManifestPath": "dist/manifest.json",
8
8
  "agentDocPath": "AGENTS.md",
9
9
  "sourceHashes": {
10
- "manifest": "cf2307ca61bd4622adea593356b3845ec1587c308c017dea573c4ffe16a890a2",
11
- "packageJson": "db44c8e509656443bd762788409b9552f26ac0d0f96c652eaa53935e77b3e71d",
10
+ "manifest": "d7dd51e9722ec0c290e6b517a5b004e32e6e26f9ccf0f7e4e45eb946be549ab0",
11
+ "packageJson": "f1bafdc443da37003e50069b6eea34115a55eccde35a2db8c9b3cba31786e29a",
12
12
  "agents": "ae4bf7b69ae3b28a7900b590dd21b53ea0dfc5fd6778f858ceac97dfd8654187"
13
13
  },
14
14
  "exports": [
@@ -156,4 +156,9 @@ function setDateTime(event: Event): void {
156
156
  />
157
157
  {/if}
158
158
 
159
- <style>.field-input__error { color: var(--smrt-color-error, #b42318); margin: 0; }</style>
159
+ <style>
160
+ @layer smrt.reset, smrt.structure, smrt.theme;
161
+ @layer smrt.theme {
162
+ .field-input__error { color: var(--smrt-color-error); margin: 0; }
163
+ }
164
+ </style>
@@ -223,7 +223,7 @@ async function suggestionChanged(): Promise<void> {
223
223
  </script>
224
224
 
225
225
  {#if canManage}
226
- <section class="field-policy-control-panel" aria-label={heading}>
226
+ <section class="field-policy-control-panel" aria-label={heading} data-smrt-component="FieldPolicyControlPanel">
227
227
  <header>
228
228
  <h1>{heading}</h1>
229
229
  <p>Manage inherited defaults, visibility, help, labels, order, and locks for every registered field.</p>
@@ -281,13 +281,16 @@ async function suggestionChanged(): Promise<void> {
281
281
  {/if}
282
282
 
283
283
  <style>
284
+ @layer smrt.reset, smrt.structure, smrt.theme;
285
+ @layer smrt.theme {
284
286
  .field-policy-control-panel { display: grid; gap: var(--smrt-spacing-4); }
285
287
  .field-policy-control-panel header p, .field-policy-control-panel__detail > p { color: var(--smrt-color-on-surface-variant); }
286
- .field-policy-control-panel__error { color: var(--smrt-color-error, #b42318); }
288
+ .field-policy-control-panel__error { color: var(--smrt-color-error); }
287
289
  .field-policy-control-panel__layers { display: grid; gap: var(--smrt-spacing-2); }
288
290
  .field-policy-control-panel__layers div { display: grid; grid-template-columns: 10rem minmax(0, 1fr); gap: var(--smrt-spacing-2); }
289
291
  .field-policy-control-panel__layers dt { font-weight: 600; }
290
292
  .field-policy-control-panel__layers dd { margin: 0; }
291
293
  .field-policy-control-panel__actions { display: flex; flex-wrap: wrap; gap: var(--smrt-spacing-2); }
292
294
  .field-policy-control-panel__drift ul { display: grid; gap: var(--smrt-spacing-2); padding-inline-start: var(--smrt-spacing-5); }
295
+ }
293
296
  </style>
@@ -415,10 +415,13 @@ async function reset(fieldName: string): Promise<void> {
415
415
  </Modal>
416
416
 
417
417
  <style>
418
- .field-policy-editor { background: var(--smrt-color-surface, white); color: var(--smrt-color-on-surface, #1f2937); display: grid; gap: var(--smrt-spacing-4, 1rem); max-block-size: min(90vh, 56rem); overflow: auto; padding: var(--smrt-spacing-5, 1.25rem); }
418
+ @layer smrt.reset, smrt.structure, smrt.theme;
419
+ @layer smrt.theme {
420
+ .field-policy-editor { background: var(--smrt-color-surface, white); color: var(--smrt-color-on-surface); display: grid; gap: var(--smrt-spacing-4, 1rem); max-block-size: min(90vh, 56rem); overflow: auto; padding: var(--smrt-spacing-5, 1.25rem); }
419
421
  .field-policy-editor__actions, .field-policy-editor__tabs { align-items: center; display: flex; gap: var(--smrt-spacing-2, .5rem); justify-content: space-between; }
420
- .field-policy-editor__field { border: 1px solid var(--smrt-color-outline, #d0d5dd); display: grid; gap: var(--smrt-spacing-3, .75rem); margin: 0 0 var(--smrt-spacing-3, .75rem); padding: var(--smrt-spacing-3, .75rem); }
422
+ .field-policy-editor__field { border: 1px solid var(--smrt-color-outline); display: grid; gap: var(--smrt-spacing-3, .75rem); margin: 0 0 var(--smrt-spacing-3, .75rem); padding: var(--smrt-spacing-3, .75rem); }
421
423
  .field-policy-editor__field label { display: grid; gap: var(--smrt-spacing-1, .25rem); }
422
- .field-policy-editor__error { color: var(--smrt-color-error, #b42318); }
424
+ .field-policy-editor__error { color: var(--smrt-color-error); }
423
425
  .field-policy-editor__notice { margin: 0; }
426
+ }
424
427
  </style>
@@ -20,5 +20,8 @@ const gear = getFieldPolicyGearContext();
20
20
  {/if}
21
21
 
22
22
  <style>
23
- .field-policy-gear-button__badge { border-radius: 999px; background: var(--smrt-color-secondary-container, #e8def8); min-inline-size: 1.25rem; padding-inline: 0.25rem; text-align: center; }
23
+ @layer smrt.reset, smrt.structure, smrt.theme;
24
+ @layer smrt.theme {
25
+ .field-policy-gear-button__badge { border-radius: 999px; background: var(--smrt-color-secondary-container); min-inline-size: 1.25rem; padding-inline: 0.25rem; text-align: center; }
26
+ }
24
27
  </style>
@@ -158,16 +158,19 @@ $effect(() => {
158
158
 
159
159
  {@render children?.()}
160
160
  {#if error && !open}
161
- <p class="field-policy-gear__error" role="alert">{error}</p>
161
+ <p class="field-policy-gear__error" role="alert" data-smrt-component="FieldPolicyGearProvider">{error}</p>
162
162
  {/if}
163
163
  {#if open && editorState}
164
164
  <FieldPolicyEditor state={editorState} {adapter} {fields} {inputRegistry} {organizationScope} onclose={() => controller.hide()} onmutated={reload} />
165
165
  {/if}
166
166
  {#if loading}
167
- <span class="field-policy-gear__loading" aria-live="polite">Loading field settings…</span>
167
+ <span class="field-policy-gear__loading" aria-live="polite" data-smrt-component="FieldPolicyGearProvider">Loading field settings…</span>
168
168
  {/if}
169
169
 
170
170
  <style>
171
- .field-policy-gear__error { color: var(--smrt-color-error, #b42318); }
171
+ @layer smrt.reset, smrt.structure, smrt.theme;
172
+ @layer smrt.theme {
173
+ .field-policy-gear__error { color: var(--smrt-color-error); }
172
174
  .field-policy-gear__loading { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
175
+ }
173
176
  </style>
@@ -97,7 +97,7 @@ function description(suggestion: FieldPolicySuggestion): string {
97
97
  }
98
98
  </script>
99
99
 
100
- <section class="field-policy-suggestion-queue" aria-label={heading}>
100
+ <section class="field-policy-suggestion-queue" aria-label={heading} data-smrt-component="FieldPolicySuggestionQueue">
101
101
  <header>
102
102
  <h2>{heading}</h2>
103
103
  {#if !loading}<span class="field-policy-suggestion-queue__count">{total}</span>{/if}
@@ -128,12 +128,15 @@ function description(suggestion: FieldPolicySuggestion): string {
128
128
  </section>
129
129
 
130
130
  <style>
131
+ @layer smrt.reset, smrt.structure, smrt.theme;
132
+ @layer smrt.theme {
131
133
  .field-policy-suggestion-queue { display: grid; gap: var(--smrt-spacing-3, 0.75rem); }
132
134
  .field-policy-suggestion-queue header { align-items: center; display: flex; gap: var(--smrt-spacing-2, 0.5rem); }
133
135
  .field-policy-suggestion-queue h2, .field-policy-suggestion-queue h3 { margin: 0; }
134
- .field-policy-suggestion-queue__count { border-radius: 999px; background: var(--smrt-color-secondary-container, #e8def8); min-inline-size: 1.5rem; padding: 0.125rem 0.4rem; text-align: center; }
136
+ .field-policy-suggestion-queue__count { border-radius: 999px; background: var(--smrt-color-secondary-container); min-inline-size: 1.5rem; padding: 0.125rem 0.4rem; text-align: center; }
135
137
  .field-policy-suggestion-queue ul { display: grid; gap: var(--smrt-spacing-3, 0.75rem); list-style: none; margin: 0; padding: 0; }
136
138
  .field-policy-suggestion-queue article { border: 1px solid var(--smrt-color-outline-variant, currentColor); border-radius: var(--smrt-radius-small, 0.25rem); display: grid; gap: var(--smrt-spacing-2, 0.5rem); padding: var(--smrt-spacing-3, 0.75rem); }
137
139
  .field-policy-suggestion-queue article p { margin: 0; }
138
140
  .field-policy-suggestion-queue__actions { display: flex; flex-wrap: wrap; gap: var(--smrt-spacing-2, 0.5rem); }
141
+ }
139
142
  </style>
@@ -79,7 +79,7 @@ const glossary = $derived.by(() => {
79
79
  });
80
80
  </script>
81
81
 
82
- <details class="form-help {className}">
82
+ <details class="form-help {className}" data-smrt-component="FormHelp">
83
83
  <summary class="form-help__toggle">
84
84
  <span class="form-help__icon" aria-hidden="true">?</span>
85
85
  <span class="form-help__label">{label}</span>
@@ -102,6 +102,8 @@ const glossary = $derived.by(() => {
102
102
  </details>
103
103
 
104
104
  <style>
105
+ @layer smrt.reset, smrt.structure, smrt.theme;
106
+ @layer smrt.theme {
105
107
  .form-help {
106
108
  display: inline-block;
107
109
  }
@@ -121,9 +123,9 @@ const glossary = $derived.by(() => {
121
123
  }
122
124
 
123
125
  .form-help__toggle:focus-visible {
124
- outline: 2px solid var(--smrt-color-primary, #6750a4);
126
+ outline: 2px solid var(--smrt-color-primary);
125
127
  outline-offset: 2px;
126
- border-radius: 4px;
128
+ border-radius: var(--smrt-radius-sm);
127
129
  }
128
130
 
129
131
  .form-help__icon {
@@ -169,4 +171,5 @@ const glossary = $derived.by(() => {
169
171
  font: var(--smrt-typography-body-small-font, inherit);
170
172
  color: var(--smrt-color-on-surface-variant, currentColor);
171
173
  }
174
+ }
172
175
  </style>
@@ -411,17 +411,17 @@ function inputFor(field: ObjectFormField): FieldInputComponent {
411
411
  {/snippet}
412
412
 
413
413
  {#if sourceLoading}
414
- <div class="object-form__status" role="status" aria-live="polite">Loading form…</div>
414
+ <div class="object-form__status" role="status" aria-live="polite" data-smrt-component="ObjectForm">Loading form…</div>
415
415
  {:else if sourceError}
416
- <div class="object-form__status" role="alert">{sourceError}</div>
416
+ <div class="object-form__status" role="alert" data-smrt-component="ObjectForm">{sourceError}</div>
417
417
  {:else if resolvedPolicy}
418
418
  <FieldPolicyProvider policy={resolvedPolicy}>
419
419
  {#if showModeSwitch || (showPolicyGear && fieldPolicyGear)}
420
420
  {#if showModeSwitch}
421
- <div class="object-form__mode"><ModeSwitch /></div>
421
+ <div class="object-form__mode" data-smrt-component="ObjectForm"><ModeSwitch /></div>
422
422
  {/if}
423
423
  {#if showPolicyGear && fieldPolicyGear}
424
- <div class="object-form__gear"><FieldPolicyGearButton /></div>
424
+ <div class="object-form__gear" data-smrt-component="ObjectForm"><FieldPolicyGearButton /></div>
425
425
  {/if}
426
426
  {/if}
427
427
  <Form class="object-form {className}" onsubmit={handleSubmit}>
@@ -437,9 +437,12 @@ function inputFor(field: ObjectFormField): FieldInputComponent {
437
437
  {/if}
438
438
 
439
439
  <style>
440
+ @layer smrt.reset, smrt.structure, smrt.theme;
441
+ @layer smrt.theme {
440
442
  :global(.object-form) { display: grid; gap: var(--smrt-spacing-4, 1rem); }
441
443
  .object-form__mode, .object-form__gear { display: inline-flex; justify-content: flex-end; margin-bottom: var(--smrt-spacing-3, 0.75rem); }
442
444
  .object-form__group { display: grid; gap: var(--smrt-spacing-3, 0.75rem); border: 0; margin: 0; min-inline-size: 0; padding: 0; }
443
445
  .object-form__group legend { font: var(--smrt-typography-title-small-font, inherit); margin-bottom: var(--smrt-spacing-2, 0.5rem); }
444
446
  .object-form__status { color: var(--smrt-color-on-surface-variant, currentColor); }
447
+ }
445
448
  </style>
@@ -289,7 +289,7 @@ $effect(() => {
289
289
  {#if renderSnippet}
290
290
  {@render renderSnippet(snippetProps)}
291
291
  {:else if visible}
292
- <div class="policy-field {className}" bind:this={rootEl}>
292
+ <div class="policy-field {className}" bind:this={rootEl} data-smrt-component="PolicyField">
293
293
  {#if label !== null}
294
294
  <!-- `for` tracks the repaired label↔control association: the `name`
295
295
  convention before the first effect pass (SSR / first paint), the
@@ -314,6 +314,8 @@ $effect(() => {
314
314
  {/if}
315
315
 
316
316
  <style>
317
+ @layer smrt.reset, smrt.structure, smrt.theme;
318
+ @layer smrt.theme {
317
319
  .policy-field {
318
320
  display: flex;
319
321
  flex-direction: column;
@@ -326,7 +328,7 @@ $effect(() => {
326
328
  }
327
329
 
328
330
  .policy-field__required {
329
- color: var(--smrt-color-error, #b3261e);
331
+ color: var(--smrt-color-error);
330
332
  margin-left: 0.25em;
331
333
  }
332
334
 
@@ -335,4 +337,5 @@ $effect(() => {
335
337
  color: var(--smrt-color-on-surface-variant, currentColor);
336
338
  margin: 0;
337
339
  }
340
+ }
338
341
  </style>
@@ -164,6 +164,8 @@ function handleSubmit() {
164
164
  </section>
165
165
 
166
166
  <style>
167
+ @layer smrt.reset, smrt.structure, smrt.theme;
168
+ @layer smrt.theme {
167
169
  .field-policy-preview {
168
170
  display: flex;
169
171
  flex-direction: column;
@@ -213,6 +215,7 @@ function handleSubmit() {
213
215
 
214
216
  .status {
215
217
  font: var(--smrt-typography-body-medium-font, inherit);
216
- color: var(--smrt-color-primary, #6750a4);
218
+ color: var(--smrt-color-primary);
217
219
  }
220
+ }
218
221
  </style>
@@ -123,7 +123,10 @@ let record = $state<Record<string, unknown>>({});
123
123
  </section>
124
124
 
125
125
  <style>
126
+ @layer smrt.reset, smrt.structure, smrt.theme;
127
+ @layer smrt.theme {
126
128
  .object-form-preview { display: grid; gap: var(--smrt-spacing-3, 0.75rem); max-width: 40rem; }
127
129
  h2, p { margin: 0; }
128
130
  .record-preview { font: var(--smrt-typography-body-small-font, monospace); color: var(--smrt-color-on-surface-variant, currentColor); overflow-wrap: anywhere; }
131
+ }
129
132
  </style>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-fields",
3
- "version": "0.55.14",
3
+ "version": "0.55.17",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Layered field policy store and resolver (defaults, visibility tiers, help text) for SMRT objects",
6
6
  "type": "module",
@@ -37,17 +37,17 @@
37
37
  }
38
38
  },
39
39
  "dependencies": {
40
- "@happyvertical/smrt-core": "0.55.14",
41
- "@happyvertical/smrt-tenancy": "0.55.14",
42
- "@happyvertical/smrt-ui": "0.55.14",
43
- "@happyvertical/smrt-users": "0.55.14",
44
- "@happyvertical/sql": "^0.103.2"
40
+ "@happyvertical/smrt-core": "0.55.17",
41
+ "@happyvertical/smrt-tenancy": "0.55.17",
42
+ "@happyvertical/smrt-ui": "0.55.17",
43
+ "@happyvertical/smrt-users": "0.55.17",
44
+ "@happyvertical/sql": "^0.103.4"
45
45
  },
46
46
  "devDependencies": {
47
- "@happyvertical/smrt-cli": "0.55.14",
48
- "@happyvertical/smrt-scanner": "0.55.14",
49
- "@happyvertical/smrt-users": "0.55.14",
50
- "@happyvertical/smrt-vitest": "0.55.14",
47
+ "@happyvertical/smrt-cli": "0.55.17",
48
+ "@happyvertical/smrt-scanner": "0.55.17",
49
+ "@happyvertical/smrt-users": "0.55.17",
50
+ "@happyvertical/smrt-vitest": "0.55.17",
51
51
  "@sveltejs/package": "^2.5.8",
52
52
  "@sveltejs/vite-plugin-svelte": "^7.3.0",
53
53
  "@testing-library/svelte": "^5.4.2",