@happyvertical/smrt-svelte 0.53.1 → 0.53.3

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 (254) hide show
  1. package/package.json +15 -15
  2. package/dist/__tests__/app-state.test.js +0 -156
  3. package/dist/__tests__/data-surface-bridge.test.js +0 -351
  4. package/dist/__tests__/provider-mode-harness.svelte +0 -14
  5. package/dist/__tests__/provider-mode-harness.svelte.d.ts +0 -11
  6. package/dist/__tests__/provider-mode-harness.svelte.d.ts.map +0 -1
  7. package/dist/__tests__/provider-mode-probe.svelte +0 -13
  8. package/dist/__tests__/provider-mode-probe.svelte.d.ts +0 -8
  9. package/dist/__tests__/provider-mode-probe.svelte.d.ts.map +0 -1
  10. package/dist/__tests__/provider-webmcp-harness.svelte +0 -14
  11. package/dist/__tests__/provider-webmcp-harness.svelte.d.ts +0 -8
  12. package/dist/__tests__/provider-webmcp-harness.svelte.d.ts.map +0 -1
  13. package/dist/__tests__/success-never-text.test.js +0 -100
  14. package/dist/__tests__/warm-clients.test.js +0 -186
  15. package/dist/browser-ai/adapters/llm/bitgpu-inference-backend.test.js +0 -464
  16. package/dist/browser-ai/adapters/llm/webllm-inference-backend.test.js +0 -646
  17. package/dist/browser-ai/adapters/stt/browser-speech.test.js +0 -113
  18. package/dist/browser-ai/adapters/stt/dictation-source.test.js +0 -52
  19. package/dist/browser-ai/svelte/components/__tests__/ModelStatusControl.test.js +0 -172
  20. package/dist/components/board/__tests__/Board.test.js +0 -498
  21. package/dist/components/board/__tests__/BoardSsrHarness.svelte +0 -30
  22. package/dist/components/board/__tests__/BoardSsrHarness.svelte.d.ts +0 -19
  23. package/dist/components/board/__tests__/BoardSsrHarness.svelte.d.ts.map +0 -1
  24. package/dist/components/forms/__tests__/AddressInput.behavior.test.js +0 -216
  25. package/dist/components/forms/__tests__/CheckboxInput.test.js +0 -92
  26. package/dist/components/forms/__tests__/DateRangeInput.behavior.test.js +0 -135
  27. package/dist/components/forms/__tests__/DateTimeInput.behavior.test.js +0 -113
  28. package/dist/components/forms/__tests__/FileUpload.error-alert.test.js +0 -37
  29. package/dist/components/forms/__tests__/FileUpload.native-form.test.js +0 -249
  30. package/dist/components/forms/__tests__/FileUpload.test.js +0 -90
  31. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte +0 -24
  32. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte.d.ts +0 -10
  33. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte.d.ts.map +0 -1
  34. package/dist/components/forms/__tests__/Form.behavior.test.js +0 -137
  35. package/dist/components/forms/__tests__/Form.extraction.test.js +0 -68
  36. package/dist/components/forms/__tests__/Form.stt-error.test.js +0 -57
  37. package/dist/components/forms/__tests__/Form.test.js +0 -86
  38. package/dist/components/forms/__tests__/Form.ui-controls.test.js +0 -119
  39. package/dist/components/forms/__tests__/Form.webmcp.test.js +0 -2336
  40. package/dist/components/forms/__tests__/FormMicButton.test.js +0 -92
  41. package/dist/components/forms/__tests__/FormScope.test.js +0 -39
  42. package/dist/components/forms/__tests__/MeasurementInput.behavior.test.js +0 -129
  43. package/dist/components/forms/__tests__/MoneyInput.behavior.test.js +0 -124
  44. package/dist/components/forms/__tests__/NumberInput.behavior.test.js +0 -151
  45. package/dist/components/forms/__tests__/PhoneInput.behavior.test.js +0 -96
  46. package/dist/components/forms/__tests__/SearchInput.test.js +0 -79
  47. package/dist/components/forms/__tests__/SelectInput.behavior.test.js +0 -132
  48. package/dist/components/forms/__tests__/TextInput.behavior.test.js +0 -131
  49. package/dist/components/forms/__tests__/TextareaInput.behavior.test.js +0 -96
  50. package/dist/components/forms/__tests__/async-invalid-field.fixture.svelte +0 -30
  51. package/dist/components/forms/__tests__/async-invalid-field.fixture.svelte.d.ts +0 -7
  52. package/dist/components/forms/__tests__/async-invalid-field.fixture.svelte.d.ts.map +0 -1
  53. package/dist/components/forms/__tests__/async-validation-form.fixture.svelte +0 -19
  54. package/dist/components/forms/__tests__/async-validation-form.fixture.svelte.d.ts +0 -9
  55. package/dist/components/forms/__tests__/async-validation-form.fixture.svelte.d.ts.map +0 -1
  56. package/dist/components/forms/__tests__/async-validation-snapshot-form.fixture.svelte +0 -21
  57. package/dist/components/forms/__tests__/async-validation-snapshot-form.fixture.svelte.d.ts +0 -8
  58. package/dist/components/forms/__tests__/async-validation-snapshot-form.fixture.svelte.d.ts.map +0 -1
  59. package/dist/components/forms/__tests__/composite-inputs-a11y.test.js +0 -69
  60. package/dist/components/forms/__tests__/compound-registration-wrapper.fixture.svelte +0 -27
  61. package/dist/components/forms/__tests__/compound-registration-wrapper.fixture.svelte.d.ts +0 -9
  62. package/dist/components/forms/__tests__/compound-registration-wrapper.fixture.svelte.d.ts.map +0 -1
  63. package/dist/components/forms/__tests__/custom-registration-field.fixture.svelte +0 -48
  64. package/dist/components/forms/__tests__/custom-registration-field.fixture.svelte.d.ts +0 -10
  65. package/dist/components/forms/__tests__/custom-registration-field.fixture.svelte.d.ts.map +0 -1
  66. package/dist/components/forms/__tests__/form-extraction-values.fixture.svelte +0 -26
  67. package/dist/components/forms/__tests__/form-extraction-values.fixture.svelte.d.ts +0 -13
  68. package/dist/components/forms/__tests__/form-extraction-values.fixture.svelte.d.ts.map +0 -1
  69. package/dist/components/forms/__tests__/form-registration-lifecycle.fixture.svelte +0 -52
  70. package/dist/components/forms/__tests__/form-registration-lifecycle.fixture.svelte.d.ts +0 -16
  71. package/dist/components/forms/__tests__/form-registration-lifecycle.fixture.svelte.d.ts.map +0 -1
  72. package/dist/components/forms/__tests__/form-scope.fixture.svelte +0 -30
  73. package/dist/components/forms/__tests__/form-scope.fixture.svelte.d.ts +0 -10
  74. package/dist/components/forms/__tests__/form-scope.fixture.svelte.d.ts.map +0 -1
  75. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte +0 -158
  76. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts +0 -51
  77. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts.map +0 -1
  78. package/dist/components/forms/__tests__/form-with-policy-field.fixture.svelte +0 -24
  79. package/dist/components/forms/__tests__/form-with-policy-field.fixture.svelte.d.ts +0 -11
  80. package/dist/components/forms/__tests__/form-with-policy-field.fixture.svelte.d.ts.map +0 -1
  81. package/dist/components/forms/__tests__/form-with-structured-fields.fixture.svelte +0 -105
  82. package/dist/components/forms/__tests__/form-with-structured-fields.fixture.svelte.d.ts +0 -42
  83. package/dist/components/forms/__tests__/form-with-structured-fields.fixture.svelte.d.ts.map +0 -1
  84. package/dist/components/forms/__tests__/form-with-ui-controls.fixture.svelte +0 -84
  85. package/dist/components/forms/__tests__/form-with-ui-controls.fixture.svelte.d.ts +0 -14
  86. package/dist/components/forms/__tests__/form-with-ui-controls.fixture.svelte.d.ts.map +0 -1
  87. package/dist/components/forms/__tests__/legacy-form-context.fixture.svelte +0 -44
  88. package/dist/components/forms/__tests__/legacy-form-context.fixture.svelte.d.ts +0 -9
  89. package/dist/components/forms/__tests__/legacy-form-context.fixture.svelte.d.ts.map +0 -1
  90. package/dist/components/forms/__tests__/mic-keyboard-a11y.test.js +0 -74
  91. package/dist/components/forms/__tests__/policy-field.fixture.svelte +0 -35
  92. package/dist/components/forms/__tests__/policy-field.fixture.svelte.d.ts +0 -8
  93. package/dist/components/forms/__tests__/policy-field.fixture.svelte.d.ts.map +0 -1
  94. package/dist/components/forms/__tests__/rich-inputs-a11y.test.js +0 -87
  95. package/dist/components/settings/__tests__/SettingsCatalog.test.js +0 -69
  96. package/dist/components/settings/__tests__/catalog.test.js +0 -46
  97. package/dist/components/workspace/__tests__/AdminShell.responsive.test.js +0 -597
  98. package/dist/components/workspace/__tests__/AdminShell.test.js +0 -572
  99. package/dist/components/workspace/__tests__/RoleShell.test.js +0 -772
  100. package/dist/components/workspace/__tests__/TenantNav.test.js +0 -208
  101. package/dist/components/workspace/__tests__/WorkspaceAccountMenu.test.js +0 -79
  102. package/dist/components/workspace/__tests__/WorkspaceShell.test.js +0 -630
  103. package/dist/components/workspace/__tests__/admin-shell-header-overflow.test.js +0 -25
  104. package/dist/components/workspace/__tests__/admin-shell-hotkeys.test.js +0 -34
  105. package/dist/components/workspace/__tests__/admin-shell-mobile.test.js +0 -217
  106. package/dist/components/workspace/__tests__/admin-shell-mutation-effect-harness.svelte +0 -52
  107. package/dist/components/workspace/__tests__/admin-shell-mutation-effect-harness.svelte.d.ts +0 -23
  108. package/dist/components/workspace/__tests__/admin-shell-mutation-effect-harness.svelte.d.ts.map +0 -1
  109. package/dist/components/workspace/__tests__/admin-shell-page-contracts.test.js +0 -30
  110. package/dist/components/workspace/__tests__/admin-shell-responsive-state.test.js +0 -184
  111. package/dist/components/workspace/__tests__/admin-shell-settings.test.js +0 -25
  112. package/dist/components/workspace/__tests__/admin-shell-state.test.js +0 -286
  113. package/dist/components/workspace/__tests__/admin-shell-theme-hooks.test.js +0 -36
  114. package/dist/components/workspace/__tests__/breadcrumbs-helpers.test.js +0 -141
  115. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte +0 -45
  116. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts +0 -21
  117. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts.map +0 -1
  118. package/dist/components/workspace/__tests__/define-tools-dock.test.js +0 -1188
  119. package/dist/components/workspace/__tests__/harness.svelte +0 -25
  120. package/dist/components/workspace/__tests__/harness.svelte.d.ts +0 -14
  121. package/dist/components/workspace/__tests__/harness.svelte.d.ts.map +0 -1
  122. package/dist/components/workspace/__tests__/index.test.js +0 -28
  123. package/dist/components/workspace/__tests__/legacy-index.test.js +0 -9
  124. package/dist/components/workspace/__tests__/manifest-nav-helpers.test.js +0 -24
  125. package/dist/components/workspace/__tests__/manifest-nav.test.js +0 -599
  126. package/dist/components/workspace/__tests__/nav-helpers.test.js +0 -95
  127. package/dist/components/workspace/__tests__/render-harness.svelte +0 -66
  128. package/dist/components/workspace/__tests__/render-harness.svelte.d.ts +0 -32
  129. package/dist/components/workspace/__tests__/render-harness.svelte.d.ts.map +0 -1
  130. package/dist/components/workspace/__tests__/render-tools-dock.test.js +0 -260
  131. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte +0 -58
  132. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts +0 -16
  133. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts.map +0 -1
  134. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte +0 -41
  135. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts +0 -13
  136. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts.map +0 -1
  137. package/dist/components/workspace/__tests__/shell-chrome-components.test.js +0 -108
  138. package/dist/components/workspace/__tests__/system-feed.test.js +0 -327
  139. package/dist/components/workspace/__tests__/test-icon.svelte +0 -17
  140. package/dist/components/workspace/__tests__/test-icon.svelte.d.ts +0 -19
  141. package/dist/components/workspace/__tests__/test-icon.svelte.d.ts.map +0 -1
  142. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte +0 -38
  143. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts +0 -22
  144. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts.map +0 -1
  145. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts +0 -66
  146. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts.map +0 -1
  147. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.js +0 -115
  148. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts +0 -15
  149. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts.map +0 -1
  150. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.js +0 -7
  151. package/dist/components/workspace/__tests__/typed-tool-fixture.test.js +0 -115
  152. package/dist/components/workspace/__tests__/use-harness-orphan.svelte +0 -9
  153. package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts +0 -19
  154. package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts.map +0 -1
  155. package/dist/components/workspace/__tests__/use-harness.svelte +0 -23
  156. package/dist/components/workspace/__tests__/use-harness.svelte.d.ts +0 -8
  157. package/dist/components/workspace/__tests__/use-harness.svelte.d.ts.map +0 -1
  158. package/dist/components/workspace/__tests__/use-tools-dock.test.js +0 -33
  159. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte +0 -43
  160. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts +0 -11
  161. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts.map +0 -1
  162. package/dist/components/workspace/server/__tests__/compose-availability.test.js +0 -383
  163. package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts +0 -78
  164. package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts.map +0 -1
  165. package/dist/components/workspace/server/__tests__/typed-context-fixture.js +0 -104
  166. package/dist/hooks/__tests__/stt-consumer.fixture.svelte +0 -25
  167. package/dist/hooks/__tests__/stt-consumer.fixture.svelte.d.ts +0 -15
  168. package/dist/hooks/__tests__/stt-consumer.fixture.svelte.d.ts.map +0 -1
  169. package/dist/hooks/__tests__/stt-ownership-harness.svelte +0 -42
  170. package/dist/hooks/__tests__/stt-ownership-harness.svelte.d.ts +0 -20
  171. package/dist/hooks/__tests__/stt-ownership-harness.svelte.d.ts.map +0 -1
  172. package/dist/hooks/__tests__/useSTT-ownership.test.js +0 -102
  173. package/dist/i18n/__tests__/server.spec.js +0 -57
  174. package/dist/internal/logger.test.js +0 -54
  175. package/dist/provider-mode.test.js +0 -86
  176. package/dist/provider-webmcp.test.js +0 -244
  177. package/dist/state/__tests__/app-state-ai-lifecycle.test.js +0 -240
  178. package/dist/state/__tests__/warm-clients.test.js +0 -40
  179. package/dist/web/__tests__/activity-feed-harness.svelte +0 -32
  180. package/dist/web/__tests__/activity-feed-harness.svelte.d.ts +0 -18
  181. package/dist/web/__tests__/activity-feed-harness.svelte.d.ts.map +0 -1
  182. package/dist/web/__tests__/activity-feed.integration.svelte.test.js +0 -190
  183. package/dist/web/__tests__/activity-feed.svelte.test.js +0 -235
  184. package/dist/web/__tests__/assistant-dock.integration.svelte.test.js +0 -204
  185. package/dist/web/__tests__/data-surface-conformance.integration.svelte.test.js +0 -1392
  186. package/dist/web/__tests__/harness.svelte +0 -25
  187. package/dist/web/__tests__/harness.svelte.d.ts +0 -15
  188. package/dist/web/__tests__/harness.svelte.d.ts.map +0 -1
  189. package/dist/web/__tests__/list-data-surface.fixture.svelte +0 -59
  190. package/dist/web/__tests__/list-data-surface.fixture.svelte.d.ts +0 -14
  191. package/dist/web/__tests__/list-data-surface.fixture.svelte.d.ts.map +0 -1
  192. package/dist/web/__tests__/list-data-surface.svelte.test.js +0 -106
  193. package/dist/web/__tests__/list-data-surface.test.js +0 -651
  194. package/dist/web/__tests__/list-sort-surface.fixture.svelte +0 -41
  195. package/dist/web/__tests__/list-sort-surface.fixture.svelte.d.ts +0 -15
  196. package/dist/web/__tests__/list-sort-surface.fixture.svelte.d.ts.map +0 -1
  197. package/dist/web/__tests__/list-sort-surface.svelte.test.js +0 -59
  198. package/dist/web/__tests__/live-collection.svelte.test.js +0 -185
  199. package/dist/web/__tests__/provider-ui-registry.fixture.svelte +0 -43
  200. package/dist/web/__tests__/provider-ui-registry.fixture.svelte.d.ts +0 -13
  201. package/dist/web/__tests__/provider-ui-registry.fixture.svelte.d.ts.map +0 -1
  202. package/dist/web/__tests__/provider-ui-registry.test.js +0 -235
  203. package/dist/web/__tests__/remote-query-harness.svelte +0 -27
  204. package/dist/web/__tests__/remote-query-harness.svelte.d.ts +0 -11
  205. package/dist/web/__tests__/remote-query-harness.svelte.d.ts.map +0 -1
  206. package/dist/web/__tests__/remote-query.svelte.test.js +0 -101
  207. package/dist/web/__tests__/surfaces.child.fixture.svelte +0 -69
  208. package/dist/web/__tests__/surfaces.child.fixture.svelte.d.ts +0 -16
  209. package/dist/web/__tests__/surfaces.child.fixture.svelte.d.ts.map +0 -1
  210. package/dist/web/__tests__/surfaces.fixture.svelte +0 -26
  211. package/dist/web/__tests__/surfaces.fixture.svelte.d.ts +0 -18
  212. package/dist/web/__tests__/surfaces.fixture.svelte.d.ts.map +0 -1
  213. package/dist/web/__tests__/surfaces.svelte.test.js +0 -140
  214. package/dist/web/__tests__/update-available-harness.svelte +0 -46
  215. package/dist/web/__tests__/update-available-harness.svelte.d.ts +0 -22
  216. package/dist/web/__tests__/update-available-harness.svelte.d.ts.map +0 -1
  217. package/dist/web/__tests__/update-available.svelte.test.js +0 -137
  218. package/dist/web/__tests__/view-intent-provider.fixture.svelte +0 -28
  219. package/dist/web/__tests__/view-intent-provider.fixture.svelte.d.ts +0 -13
  220. package/dist/web/__tests__/view-intent-provider.fixture.svelte.d.ts.map +0 -1
  221. package/dist/web/__tests__/view-intent.fixture.svelte +0 -33
  222. package/dist/web/__tests__/view-intent.fixture.svelte.d.ts +0 -15
  223. package/dist/web/__tests__/view-intent.fixture.svelte.d.ts.map +0 -1
  224. package/dist/web/__tests__/view-intent.intents.d.ts +0 -14
  225. package/dist/web/__tests__/view-intent.intents.d.ts.map +0 -1
  226. package/dist/web/__tests__/view-intent.intents.js +0 -38
  227. package/dist/web/__tests__/view-intent.svelte.test.js +0 -244
  228. package/dist/web/__tests__/webmcp-composed.child.fixture.svelte +0 -73
  229. package/dist/web/__tests__/webmcp-composed.child.fixture.svelte.d.ts +0 -8
  230. package/dist/web/__tests__/webmcp-composed.child.fixture.svelte.d.ts.map +0 -1
  231. package/dist/web/__tests__/webmcp-composed.fixture.svelte +0 -52
  232. package/dist/web/__tests__/webmcp-composed.fixture.svelte.d.ts +0 -12
  233. package/dist/web/__tests__/webmcp-composed.fixture.svelte.d.ts.map +0 -1
  234. package/dist/web/__tests__/webmcp-composed.integration.svelte.test.js +0 -251
  235. package/dist/web/__tests__/webmcp-effects-reactivity.child.fixture.svelte +0 -16
  236. package/dist/web/__tests__/webmcp-effects-reactivity.child.fixture.svelte.d.ts +0 -19
  237. package/dist/web/__tests__/webmcp-effects-reactivity.child.fixture.svelte.d.ts.map +0 -1
  238. package/dist/web/__tests__/webmcp-effects-reactivity.fixture.svelte +0 -11
  239. package/dist/web/__tests__/webmcp-effects-reactivity.fixture.svelte.d.ts +0 -8
  240. package/dist/web/__tests__/webmcp-effects-reactivity.fixture.svelte.d.ts.map +0 -1
  241. package/dist/web/__tests__/webmcp-harness-reactive-samename.svelte +0 -20
  242. package/dist/web/__tests__/webmcp-harness-reactive-samename.svelte.d.ts +0 -7
  243. package/dist/web/__tests__/webmcp-harness-reactive-samename.svelte.d.ts.map +0 -1
  244. package/dist/web/__tests__/webmcp-harness-unannotated.svelte +0 -14
  245. package/dist/web/__tests__/webmcp-harness-unannotated.svelte.d.ts +0 -19
  246. package/dist/web/__tests__/webmcp-harness-unannotated.svelte.d.ts.map +0 -1
  247. package/dist/web/__tests__/webmcp-harness.svelte +0 -18
  248. package/dist/web/__tests__/webmcp-harness.svelte.d.ts +0 -7
  249. package/dist/web/__tests__/webmcp-harness.svelte.d.ts.map +0 -1
  250. package/dist/web/__tests__/webmcp-ssr.fixture.svelte +0 -13
  251. package/dist/web/__tests__/webmcp-ssr.fixture.svelte.d.ts +0 -19
  252. package/dist/web/__tests__/webmcp-ssr.fixture.svelte.d.ts.map +0 -1
  253. package/dist/web/__tests__/webmcp-ui.test.js +0 -723
  254. package/dist/web/__tests__/webmcp.test.js +0 -234
@@ -1,208 +0,0 @@
1
- import { mount, unmount } from 'svelte';
2
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
3
- import TenantNav from '../admin-shell/TenantNav.svelte';
4
- import TestIcon from './test-icon.svelte';
5
- let container;
6
- beforeEach(() => {
7
- container = document.createElement('div');
8
- document.body.appendChild(container);
9
- });
10
- afterEach(() => {
11
- container.remove();
12
- });
13
- describe('TenantNav', () => {
14
- it('renders named groups alongside flat links and keeps grouped active children', () => {
15
- const component = mount(TenantNav, {
16
- target: container,
17
- props: {
18
- 'aria-label': 'Shop navigation',
19
- currentHref: '/orders/open',
20
- items: [{ href: '/home', label: 'Home' }],
21
- groups: [
22
- {
23
- heading: 'Floor',
24
- items: [
25
- {
26
- href: '/orders',
27
- label: 'Orders',
28
- children: [{ href: '/orders/open', label: 'Open orders' }],
29
- },
30
- ],
31
- },
32
- { heading: 'Office', items: [] },
33
- ],
34
- },
35
- });
36
- try {
37
- expect(container.querySelector('nav')).toHaveAttribute('aria-label', 'Shop navigation');
38
- expect(container.querySelector('details[aria-label="Floor"]')).not.toBeNull();
39
- expect(container.querySelectorAll('details')).toHaveLength(2);
40
- expect(container.querySelector('a[href="/orders/open"]')).toHaveAttribute('aria-current', 'page');
41
- expect(container.querySelectorAll('a')).toHaveLength(3);
42
- }
43
- finally {
44
- unmount(component);
45
- }
46
- });
47
- it('keeps collapsed group summaries named and independent of navigation links', () => {
48
- const component = mount(TenantNav, {
49
- target: container,
50
- props: {
51
- items: [],
52
- collapsed: true,
53
- groups: [
54
- { heading: 'Floor', items: [{ href: '/tasks', label: 'Tasks' }] },
55
- ],
56
- },
57
- });
58
- try {
59
- const summary = container.querySelector('summary');
60
- expect(summary?.textContent).toContain('Floor');
61
- expect(container.querySelector('details')).toHaveAttribute('open');
62
- expect(container.querySelectorAll('a')).toHaveLength(1);
63
- }
64
- finally {
65
- unmount(component);
66
- }
67
- });
68
- it('accepts per-instance touch density while leaving the default inherited', () => {
69
- const component = mount(TenantNav, {
70
- target: container,
71
- props: { density: 'touch', items: [{ href: '/tasks', label: 'Tasks' }] },
72
- });
73
- try {
74
- expect(container.querySelector('nav')).toHaveAttribute('data-density', 'touch');
75
- }
76
- finally {
77
- unmount(component);
78
- }
79
- });
80
- it('renders custom icon components for nav items', () => {
81
- const component = mount(TenantNav, {
82
- target: container,
83
- props: {
84
- currentHref: '/admin/tasks',
85
- iconComponent: TestIcon,
86
- items: [
87
- { href: '/admin/tasks', icon: 'tasks', label: 'Tasks' },
88
- {
89
- href: '/admin/opportunities',
90
- icon: 'briefcase',
91
- label: 'Opportunities',
92
- },
93
- ],
94
- },
95
- });
96
- try {
97
- expect(container.querySelectorAll('[data-testid="custom-icon"]')).toHaveLength(2);
98
- expect(container.querySelector('a[aria-current="page"]')?.textContent).toContain('Tasks');
99
- }
100
- finally {
101
- unmount(component);
102
- }
103
- });
104
- it('marks items that need attention with a labelled dot', () => {
105
- const component = mount(TenantNav, {
106
- target: container,
107
- props: {
108
- currentHref: '/admin/tasks',
109
- items: [
110
- { href: '/admin/tasks', label: 'Tasks' },
111
- {
112
- href: '/admin/jobs',
113
- label: 'Jobs',
114
- attention: 'A background job failed recently',
115
- },
116
- { href: '/admin/health', label: 'Health', attention: true },
117
- ],
118
- },
119
- });
120
- try {
121
- const links = [...container.querySelectorAll('a')];
122
- expect(links[0].querySelector('[data-attention]')).toBeNull();
123
- expect(links[1].querySelector('[data-attention]')).not.toBeNull();
124
- expect(links[1].querySelector('[data-attention]')?.getAttribute('aria-hidden')).toBe('true');
125
- expect(links[1].textContent).toContain('(A background job failed recently)');
126
- expect(links[2].textContent).toContain('(Needs attention)');
127
- }
128
- finally {
129
- unmount(component);
130
- }
131
- });
132
- it('keeps the attention dot on a collapsed icon link', () => {
133
- const component = mount(TenantNav, {
134
- target: container,
135
- props: {
136
- collapsed: true,
137
- iconComponent: TestIcon,
138
- items: [
139
- { href: '/admin/jobs', icon: 'jobs', label: 'Jobs', attention: true },
140
- ],
141
- },
142
- });
143
- try {
144
- const link = container.querySelector('a');
145
- expect(link?.querySelector('[data-attention]')).not.toBeNull();
146
- expect(link?.textContent).toContain('Jobs');
147
- expect(link?.textContent).toContain('(Needs attention)');
148
- }
149
- finally {
150
- unmount(component);
151
- }
152
- });
153
- it('uses top-level icon links when collapsed', () => {
154
- const component = mount(TenantNav, {
155
- target: container,
156
- props: {
157
- collapsed: true,
158
- currentHref: '/admin/experience',
159
- iconComponent: TestIcon,
160
- items: [
161
- {
162
- href: '/admin/resume',
163
- icon: 'file-text',
164
- label: 'Career',
165
- children: [
166
- {
167
- href: '/admin/experience',
168
- icon: 'briefcase',
169
- label: 'Experience',
170
- },
171
- ],
172
- },
173
- ],
174
- },
175
- });
176
- try {
177
- expect(container.querySelector('.smrt-tenant-nav--collapsed')).not.toBeNull();
178
- expect(container.querySelectorAll('[data-testid="custom-icon"]')).toHaveLength(1);
179
- expect(container.querySelector('a[href="/admin/experience"]')).toBeNull();
180
- const parentLink = container.querySelector('a[href="/admin/resume"]');
181
- expect(parentLink).not.toHaveAttribute('aria-current');
182
- expect(parentLink).toHaveClass('smrt-tenant-nav__link--visible-active');
183
- expect(container.querySelector('a[href="/admin/resume"]')).toHaveAttribute('title', 'Career');
184
- }
185
- finally {
186
- unmount(component);
187
- }
188
- });
189
- it('renders a visible fallback glyph for iconless collapsed items', () => {
190
- const component = mount(TenantNav, {
191
- target: container,
192
- props: {
193
- collapsed: true,
194
- currentHref: '/admin/memory',
195
- items: [{ href: '/admin/memory', label: 'Memory' }],
196
- },
197
- });
198
- try {
199
- const link = container.querySelector('a[href="/admin/memory"]');
200
- const fallback = link?.querySelector('.smrt-tenant-nav__icon--fallback');
201
- expect(fallback?.textContent?.trim()).toBe('M');
202
- expect(link).toHaveAttribute('aria-current', 'page');
203
- }
204
- finally {
205
- unmount(component);
206
- }
207
- });
208
- });
@@ -1,79 +0,0 @@
1
- import { expectNoA11yViolations } from '@happyvertical/smrt-ui/test-support/a11y';
2
- import { render, screen } from '@testing-library/svelte';
3
- import userEvent from '@testing-library/user-event';
4
- import { describe, expect, it, vi } from 'vitest';
5
- import WorkspaceAccountMenu from '../admin-shell/WorkspaceAccountMenu.svelte';
6
- const tenants = [
7
- { id: 'tenant-a', label: 'Acme', roleLabel: 'Owner' },
8
- { id: 'tenant-b', label: 'Beta', roleLabel: 'Member' },
9
- ];
10
- describe('WorkspaceAccountMenu', () => {
11
- it('exposes typed touch density without changing account actions', () => {
12
- const { container } = render(WorkspaceAccountMenu, {
13
- props: { userName: 'Dana', density: 'touch', onSignOut: vi.fn() },
14
- });
15
- expect(container.querySelector('.smrt-workspace-account-menu')).toHaveAttribute('data-density', 'touch');
16
- });
17
- it('switches tenant and signs out through app-owned callbacks', async () => {
18
- const user = userEvent.setup();
19
- const onTenantSelect = vi.fn();
20
- const onSignOut = vi.fn();
21
- render(WorkspaceAccountMenu, {
22
- props: {
23
- userName: 'Ada Lovelace',
24
- userLabel: 'ada@example.com',
25
- tenantLabel: 'Acme',
26
- roleLabel: 'Owner',
27
- currentTenantId: 'tenant-a',
28
- tenants,
29
- onTenantSelect,
30
- onSignOut,
31
- },
32
- });
33
- const trigger = screen.getByRole('button', {
34
- name: /Open account menu ada@example.com Acme · Owner/,
35
- });
36
- await user.click(trigger);
37
- expect(screen.getByRole('menuitem', { name: 'Acme — current — Owner' })).toBeDisabled();
38
- await user.click(screen.getByRole('menuitem', { name: 'Beta — Member' }));
39
- expect(onTenantSelect).toHaveBeenCalledWith('tenant-b');
40
- await user.click(trigger);
41
- await user.click(screen.getByRole('menuitem', { name: 'Sign out' }));
42
- expect(onSignOut).toHaveBeenCalledOnce();
43
- });
44
- it('keeps tenant switching out of the menu when only one tenant is available', async () => {
45
- const user = userEvent.setup();
46
- render(WorkspaceAccountMenu, {
47
- props: {
48
- userName: 'Ada Lovelace',
49
- userLabel: 'ada@example.com',
50
- tenantLabel: 'Acme',
51
- roleLabel: 'Owner',
52
- currentTenantId: 'tenant-a',
53
- tenants: tenants.slice(0, 1),
54
- onTenantSelect: vi.fn(),
55
- onSignOut: vi.fn(),
56
- },
57
- });
58
- const trigger = screen.getByRole('button', {
59
- name: /Open account menu ada@example.com Acme · Owner/,
60
- });
61
- await user.click(trigger);
62
- expect(screen.queryByRole('menuitem', { name: /Acme/ })).toBeNull();
63
- expect(screen.getByRole('menuitem', { name: 'Sign out' })).toBeVisible();
64
- });
65
- it('is axe-clean', async () => {
66
- const { container } = render(WorkspaceAccountMenu, {
67
- props: {
68
- userName: 'Ada Lovelace',
69
- userLabel: 'ada@example.com',
70
- tenantLabel: 'Acme',
71
- currentTenantId: 'tenant-a',
72
- tenants,
73
- onTenantSelect: vi.fn(),
74
- onSignOut: vi.fn(),
75
- },
76
- });
77
- await expectNoA11yViolations(container);
78
- });
79
- });