@happyvertical/smrt-svelte 0.52.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +47 -0
  2. package/agents/components.md +8 -1
  3. package/dist/Provider.svelte +19 -15
  4. package/dist/Provider.svelte.d.ts +2 -2
  5. package/dist/Provider.svelte.d.ts.map +1 -1
  6. package/dist/__tests__/provider-mode-harness.svelte +14 -0
  7. package/dist/__tests__/provider-mode-harness.svelte.d.ts +11 -0
  8. package/dist/__tests__/provider-mode-harness.svelte.d.ts.map +1 -0
  9. package/dist/__tests__/provider-mode-probe.svelte +13 -0
  10. package/dist/__tests__/provider-mode-probe.svelte.d.ts +8 -0
  11. package/dist/__tests__/provider-mode-probe.svelte.d.ts.map +1 -0
  12. package/dist/components/forms/FileUpload.svelte +120 -16
  13. package/dist/components/forms/FileUpload.svelte.d.ts +7 -1
  14. package/dist/components/forms/FileUpload.svelte.d.ts.map +1 -1
  15. package/dist/components/forms/__tests__/FileUpload.native-form.test.js +249 -0
  16. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte +24 -0
  17. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte.d.ts +10 -0
  18. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte.d.ts.map +1 -0
  19. package/dist/components/workspace/__tests__/AdminShell.responsive.test.js +12 -1
  20. package/dist/components/workspace/__tests__/AdminShell.test.js +172 -1
  21. package/dist/components/workspace/__tests__/TenantNav.test.js +66 -0
  22. package/dist/components/workspace/__tests__/WorkspaceAccountMenu.test.js +6 -0
  23. package/dist/components/workspace/__tests__/admin-shell-state.test.js +25 -0
  24. package/dist/components/workspace/admin-shell/AdminShell.svelte +108 -26
  25. package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts +2 -0
  26. package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts.map +1 -1
  27. package/dist/components/workspace/admin-shell/TenantNav.svelte +70 -12
  28. package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts +8 -2
  29. package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts.map +1 -1
  30. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte +16 -2
  31. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts +2 -0
  32. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts.map +1 -1
  33. package/dist/components/workspace/admin-shell/state.svelte.d.ts +2 -0
  34. package/dist/components/workspace/admin-shell/state.svelte.d.ts.map +1 -1
  35. package/dist/components/workspace/admin-shell/state.svelte.js +7 -0
  36. package/dist/components/workspace/admin-shell/types.d.ts +18 -1
  37. package/dist/components/workspace/admin-shell/types.d.ts.map +1 -1
  38. package/dist/components/workspace/index.d.ts +1 -1
  39. package/dist/components/workspace/index.d.ts.map +1 -1
  40. package/dist/i18n/strings.forms.d.ts +3 -0
  41. package/dist/i18n/strings.forms.d.ts.map +1 -1
  42. package/dist/i18n/strings.forms.js +3 -0
  43. package/dist/i18n/strings.workspace.d.ts +4 -0
  44. package/dist/i18n/strings.workspace.d.ts.map +1 -1
  45. package/dist/i18n/strings.workspace.js +4 -0
  46. package/dist/provider-mode.test.js +86 -0
  47. package/dist/state/app-state.svelte.d.ts.map +1 -1
  48. package/dist/state/app-state.svelte.js +8 -8
  49. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,YAAY,EACZ,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,aAAa,EAClB,aAAa,EACb,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,GACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,gCAAgC,EAChC,uBAAuB,EACvB,aAAa,EACb,uBAAuB,EACvB,aAAa,EACb,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAE5F,OAAO,EACL,KAAK,UAAU,EACf,KAAK,0BAA0B,EAC/B,mBAAmB,IAAI,qBAAqB,EAC5C,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC"}
@@ -8,6 +8,9 @@ export declare const M: {
8
8
  readonly 'ui.date_time_input.mic_aria_label': "ui.date_time_input.mic_aria_label";
9
9
  readonly 'ui.date_time_input.parsing': "ui.date_time_input.parsing";
10
10
  readonly 'ui.file_upload.remove_file': "ui.file_upload.remove_file";
11
+ readonly 'ui.file_upload.required': "ui.file_upload.required";
12
+ readonly 'ui.file_upload.rejected_type': "ui.file_upload.rejected_type";
13
+ readonly 'ui.file_upload.exceeds_max_size': "ui.file_upload.exceeds_max_size";
11
14
  readonly 'ui.form.extracting': "ui.form.extracting";
12
15
  readonly 'ui.form.listening_status': "ui.form.listening_status";
13
16
  readonly 'ui.form.listening_button': "ui.form.listening_button";
@@ -1 +1 @@
1
- {"version":3,"file":"strings.forms.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.forms.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DZ,CAAC"}
1
+ {"version":3,"file":"strings.forms.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.forms.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEZ,CAAC"}
@@ -20,6 +20,9 @@ export const M = defineMessages({
20
20
  'ui.date_time_input.parsing': 'Parsing date...',
21
21
  // FileUpload
22
22
  'ui.file_upload.remove_file': 'Remove {name}',
23
+ 'ui.file_upload.required': 'Select a file to upload',
24
+ 'ui.file_upload.rejected_type': '{count} file(s) rejected: type not allowed',
25
+ 'ui.file_upload.exceeds_max_size': '{count} file(s) exceed the maximum size of {size}',
23
26
  // Form
24
27
  'ui.form.extracting': 'Extracting form fields…',
25
28
  'ui.form.listening_status': 'Listening. Say "done" to finish.',
@@ -34,6 +34,10 @@ export declare const M: {
34
34
  readonly 'ui.admin_shell.close_shortcuts': "ui.admin_shell.close_shortcuts";
35
35
  readonly 'ui.admin_shell.shortcuts': "ui.admin_shell.shortcuts";
36
36
  readonly 'ui.admin_shell.close': "ui.admin_shell.close";
37
+ readonly 'ui.admin_shell.home': "ui.admin_shell.home";
38
+ readonly 'ui.admin_shell.menu': "ui.admin_shell.menu";
39
+ readonly 'ui.admin_shell.expand_panel': "ui.admin_shell.expand_panel";
40
+ readonly 'ui.admin_shell.collapse_panel': "ui.admin_shell.collapse_panel";
37
41
  readonly 'ui.admin_shell.close_panel': "ui.admin_shell.close_panel";
38
42
  readonly 'ui.admin_shell.resize_panel': "ui.admin_shell.resize_panel";
39
43
  readonly 'ui.shell_nav_toggle.collapse': "ui.shell_nav_toggle.collapse";
@@ -1 +1 @@
1
- {"version":3,"file":"strings.workspace.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGZ,CAAC"}
1
+ {"version":3,"file":"strings.workspace.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GZ,CAAC"}
@@ -39,6 +39,10 @@ export const M = defineMessages({
39
39
  'ui.admin_shell.close_shortcuts': 'Close shortcuts',
40
40
  'ui.admin_shell.shortcuts': 'Shortcuts',
41
41
  'ui.admin_shell.close': 'Close',
42
+ 'ui.admin_shell.home': 'Home',
43
+ 'ui.admin_shell.menu': 'Menu',
44
+ 'ui.admin_shell.expand_panel': 'Expand {panel}',
45
+ 'ui.admin_shell.collapse_panel': 'Collapse {panel}',
42
46
  'ui.admin_shell.close_panel': 'Close {label}',
43
47
  'ui.admin_shell.resize_panel': 'Resize {label}',
44
48
  'ui.shell_nav_toggle.collapse': 'Collapse {label}',
@@ -0,0 +1,86 @@
1
+ import { render, screen, waitFor } from '@testing-library/svelte';
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
3
+ import Harness from './__tests__/provider-mode-harness.svelte';
4
+ import { createAppState, SmrtAppStateManager, } from './state/app-state.svelte.js';
5
+ let initializationModes;
6
+ let manager;
7
+ const capture = (state) => {
8
+ manager = state;
9
+ };
10
+ beforeEach(() => {
11
+ initializationModes = [];
12
+ vi.stubGlobal('SpeechRecognition', class {
13
+ });
14
+ const initialize = SmrtAppStateManager.prototype.initialize;
15
+ vi.spyOn(SmrtAppStateManager.prototype, 'initialize').mockImplementation(function () {
16
+ const result = initialize.call(this);
17
+ // Inspect the real initialization boundary before a later reactive effect
18
+ // can hide a transient auto-enabled mode.
19
+ initializationModes.push(this.state.mode);
20
+ return result;
21
+ });
22
+ vi.spyOn(SmrtAppStateManager.prototype, 'initializeSTT').mockResolvedValue({});
23
+ });
24
+ afterEach(() => {
25
+ vi.restoreAllMocks();
26
+ vi.unstubAllGlobals();
27
+ });
28
+ describe('Provider voice opt-in', () => {
29
+ it('keeps defaults in standard mode even with speech capabilities', async () => {
30
+ render(Harness, { props: { capture } });
31
+ await waitFor(() => expect(manager.state.initialized).toBe(true));
32
+ expect(manager.state.capabilities?.stt.browserSpeechAPI).toBe(true);
33
+ expect(manager.state.mode).toBe('default');
34
+ expect(initializationModes).toEqual(['default']);
35
+ expect(manager.initializeSTT).not.toHaveBeenCalled();
36
+ });
37
+ it('honors explicit default before initialization despite auto-detection opt-in', async () => {
38
+ render(Harness, {
39
+ props: { capture, mode: 'default', autoEnableSmrt: true },
40
+ });
41
+ await waitFor(() => expect(manager.state.initialized).toBe(true));
42
+ expect(initializationModes).toEqual(['default']);
43
+ expect(manager.state.modeSource).toBe('explicit');
44
+ expect(manager.initializeSTT).not.toHaveBeenCalled();
45
+ });
46
+ it('preserves explicit smrt mode and reactive mode updates', async () => {
47
+ const view = render(Harness, { props: { capture, mode: 'smrt' } });
48
+ await waitFor(() => expect(manager.state.initialized).toBe(true));
49
+ expect(initializationModes).toEqual(['smrt']);
50
+ expect(manager.state.modeSource).toBe('explicit');
51
+ await view.rerender({ capture, mode: 'default' });
52
+ expect(screen.getByRole('status', { name: 'App mode' })).toHaveTextContent('default');
53
+ });
54
+ it('retains auto-detection behind the explicit flag', async () => {
55
+ render(Harness, { props: { capture, autoEnableSmrt: true } });
56
+ await waitFor(() => expect(manager.state.initialized).toBe(true));
57
+ expect(manager.state.mode).toBe('smrt');
58
+ expect(manager.state.modeSource).toBe('auto');
59
+ });
60
+ it('does not auto-enable when capabilities are unavailable', async () => {
61
+ vi.stubGlobal('SpeechRecognition', undefined);
62
+ const capability = await import('./browser-ai/capabilities/detector.js');
63
+ vi.spyOn(capability, 'canEnableSmrtMode').mockReturnValue(false);
64
+ render(Harness, { props: { capture, autoEnableSmrt: true } });
65
+ await waitFor(() => expect(manager.state.initialized).toBe(true));
66
+ expect(manager.state.mode).toBe('default');
67
+ });
68
+ it('standalone state also requires explicit opt-in and respects initial session preferences', async () => {
69
+ const standard = createAppState();
70
+ await standard.initialize();
71
+ expect(standard.state.mode).toBe('default');
72
+ const auto = createAppState({
73
+ session: { preferences: { autoEnableSmrt: true } },
74
+ });
75
+ await auto.initialize();
76
+ expect(auto.state.mode).toBe('smrt');
77
+ const explicit = createAppState({
78
+ initialMode: 'default',
79
+ session: { preferences: { autoEnableSmrt: true } },
80
+ });
81
+ await explicit.initialize();
82
+ expect(explicit.state.mode).toBe('default');
83
+ expect(explicit.state.modeSource).toBe('explicit');
84
+ await Promise.all([standard.dispose(), auto.dispose(), explicit.dispose()]);
85
+ });
86
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"app-state.svelte.d.ts","sourceRoot":"","sources":["../../src/state/app-state.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-state.svelte.d.ts","sourceRoot":"","sources":["../../src/state/app-state.svelte.ts"],"names":[],"mappings":"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"}
@@ -116,6 +116,13 @@ export class SmrtAppStateManager {
116
116
  this._state.capabilities = capabilities;
117
117
  // Notify callback
118
118
  this.options.onCapabilitiesDetected?.(capabilities);
119
+ // Apply initial session if provided
120
+ if (this.options.session) {
121
+ this._state.session = {
122
+ ...this._state.session,
123
+ ...this.options.session,
124
+ };
125
+ }
119
126
  // Determine initial mode
120
127
  if (this.options.initialMode) {
121
128
  this._state.mode = this.options.initialMode;
@@ -123,19 +130,12 @@ export class SmrtAppStateManager {
123
130
  }
124
131
  else {
125
132
  // Auto-detect based on capabilities and preferences
126
- const autoEnable = this._state.session.preferences.autoEnableSmrt ?? true;
133
+ const autoEnable = this._state.session.preferences.autoEnableSmrt ?? false;
127
134
  if (autoEnable && canEnableSmrtMode(capabilities)) {
128
135
  this._state.mode = 'smrt';
129
136
  this._state.modeSource = 'auto';
130
137
  }
131
138
  }
132
- // Apply initial session if provided
133
- if (this.options.session) {
134
- this._state.session = {
135
- ...this._state.session,
136
- ...this.options.session,
137
- };
138
- }
139
139
  this._state.initialized = true;
140
140
  // Schedule AI preloading based on strategy
141
141
  this.schedulePreload();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-svelte",
3
- "version": "0.52.0",
3
+ "version": "0.53.0",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Svelte 5 components for SMRT user management - auth, users, tenants, roles, permissions, groups",
6
6
  "type": "module",
@@ -126,12 +126,12 @@
126
126
  "access": "public"
127
127
  },
128
128
  "dependencies": {
129
- "@happyvertical/logger": "^0.96.1",
130
- "@happyvertical/smrt-languages": "0.52.0",
131
- "@happyvertical/smrt-mcp-apps": "0.52.0",
132
- "@happyvertical/smrt-types": "0.52.0",
133
- "@happyvertical/smrt-ui": "0.52.0",
134
- "@happyvertical/smrt-web": "0.52.0",
129
+ "@happyvertical/logger": "^0.98.0",
130
+ "@happyvertical/smrt-languages": "0.53.0",
131
+ "@happyvertical/smrt-mcp-apps": "0.53.0",
132
+ "@happyvertical/smrt-types": "0.53.0",
133
+ "@happyvertical/smrt-ui": "0.53.0",
134
+ "@happyvertical/smrt-web": "0.53.0",
135
135
  "@tanstack/db": "^0.6.14",
136
136
  "@tanstack/svelte-db": "^0.1.91",
137
137
  "esm-env": "^1.2.2"
@@ -166,14 +166,14 @@
166
166
  }
167
167
  },
168
168
  "devDependencies": {
169
- "@happyvertical/smrt-agents": "0.52.0",
170
- "@happyvertical/smrt-chat": "0.52.0",
171
- "@happyvertical/smrt-content": "0.52.0",
172
- "@happyvertical/smrt-core": "0.52.0",
173
- "@happyvertical/smrt-reports": "0.52.0",
174
- "@happyvertical/smrt-scanner": "0.52.0",
175
- "@happyvertical/smrt-tenancy": "0.52.0",
176
- "@happyvertical/smrt-users": "0.52.0",
169
+ "@happyvertical/smrt-agents": "0.53.0",
170
+ "@happyvertical/smrt-chat": "0.53.0",
171
+ "@happyvertical/smrt-content": "0.53.0",
172
+ "@happyvertical/smrt-core": "0.53.0",
173
+ "@happyvertical/smrt-reports": "0.53.0",
174
+ "@happyvertical/smrt-scanner": "0.53.0",
175
+ "@happyvertical/smrt-tenancy": "0.53.0",
176
+ "@happyvertical/smrt-users": "0.53.0",
177
177
  "@sveltejs/package": "^2.5.8",
178
178
  "@sveltejs/vite-plugin-svelte": "^7.3.0",
179
179
  "@testing-library/jest-dom": "^7.0.1",
@@ -192,7 +192,7 @@
192
192
  "dev": "svelte-package -i src --watch",
193
193
  "check": "pnpm exec svelte-check --tsconfig ./tsconfig.svelte.json",
194
194
  "test": "pnpm run test:unit && pnpm run test:conformance",
195
- "test:unit": "vitest run --exclude src/web/__tests__/data-surface-conformance.integration.svelte.test.ts && node --test scripts/ensure-conformance-build.test.mjs",
195
+ "test:unit": "vitest run --exclude src/web/__tests__/data-surface-conformance.integration.svelte.test.ts && node --test scripts/*.test.mjs",
196
196
  "test:conformance": "node scripts/ensure-conformance-build.mjs && SMRT_SVELTE_PUBLISHED_ENTRY=1 vitest run src/web/__tests__/data-surface-conformance.integration.svelte.test.ts",
197
197
  "typecheck:conformance": "tsc --noEmit -p ./tsconfig.conformance.json",
198
198
  "typecheck": "tsc --noEmit && pnpm run typecheck:conformance && node ../../scripts/svelte-check-a11y.mjs --tsconfig ./tsconfig.svelte.json",