@happyvertical/smrt-svelte 0.40.25 → 0.40.27

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.
@@ -113,6 +113,7 @@ function handleChange(e: Event) {
113
113
  <style>
114
114
  .smrt-checkbox-field {
115
115
  display: inline-flex;
116
+ min-width: 0;
116
117
  align-items: center;
117
118
  gap: var(--smrt-spacing-2, 8px);
118
119
  cursor: pointer;
@@ -413,6 +413,8 @@ function handleNativeChange(e: Event) {
413
413
  .smrt-datetime {
414
414
  display: flex;
415
415
  flex-direction: column;
416
+ width: 100%;
417
+ min-width: 0;
416
418
  gap: var(--smrt-spacing-1, 4px);
417
419
  position: relative;
418
420
  }
@@ -435,6 +437,9 @@ function handleNativeChange(e: Event) {
435
437
 
436
438
  .smrt-input {
437
439
  flex: 1;
440
+ box-sizing: border-box;
441
+ min-width: 0;
442
+ width: 100%;
438
443
  padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
439
444
  font-size: var(--smrt-typography-body-large-size, 1rem);
440
445
  border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
@@ -237,6 +237,8 @@ function handleInput(e: Event) {
237
237
  .smrt-number {
238
238
  display: flex;
239
239
  flex-direction: column;
240
+ width: 100%;
241
+ min-width: 0;
240
242
  gap: var(--smrt-spacing-1, 4px);
241
243
  }
242
244
 
@@ -258,6 +260,9 @@ function handleInput(e: Event) {
258
260
 
259
261
  .smrt-input {
260
262
  flex: 1;
263
+ box-sizing: border-box;
264
+ min-width: 0;
265
+ width: 100%;
261
266
  padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
262
267
  font-size: var(--smrt-typography-body-large-size, 1rem);
263
268
  border: 1px solid var(--smrt-color-outline-variant, #d1d5db);
@@ -150,7 +150,7 @@ function handleChange(e: Event) {
150
150
  display: flex;
151
151
  flex-direction: column;
152
152
  width: 100%;
153
- min-width: 240px;
153
+ min-width: 0;
154
154
  }
155
155
 
156
156
  .container {
@@ -321,7 +321,7 @@ function handleInput(e: Event) {
321
321
  display: flex;
322
322
  flex-direction: column;
323
323
  width: 100%;
324
- min-width: 240px;
324
+ min-width: 0;
325
325
  }
326
326
 
327
327
  .container {
@@ -290,6 +290,7 @@ function handleInput(e: Event) {
290
290
  display: flex;
291
291
  flex-direction: column;
292
292
  width: 100%;
293
+ min-width: 0;
293
294
  }
294
295
 
295
296
  .container {
@@ -30,7 +30,17 @@ vi.mock('../../../hooks/useSTT.svelte.js', () => ({
30
30
  }),
31
31
  }));
32
32
  import DateTimeInput from '../DateTimeInput.svelte';
33
+ import dateTimeInputSource from '../DateTimeInput.svelte?raw';
33
34
  describe('DateTimeInput — behavior', () => {
35
+ it('allows its native input to shrink inside a narrow form track', () => {
36
+ const { container } = render(DateTimeInput, {
37
+ props: { name: 'when', label: 'When' },
38
+ });
39
+ container.style.width = '80px';
40
+ const input = screen.getByLabelText('When');
41
+ expect(input).toHaveClass('smrt-input');
42
+ expect(dateTimeInputSource).toMatch(/\.smrt-input\s*\{[^}]*box-sizing:\s*border-box;[^}]*min-width:\s*0;[^}]*width:\s*100%;/);
43
+ });
34
44
  it('renders a datetime-local input when includeTime is true (default)', () => {
35
45
  render(DateTimeInput, { props: { name: 'when', label: 'When' } });
36
46
  expect(screen.getByLabelText('When')).toHaveAttribute('type', 'datetime-local');
@@ -19,6 +19,7 @@ vi.mock('../../../hooks/useAppState.svelte.js', () => ({
19
19
  useAppState: () => ({ state: { mode: 'default' }, setMode: vi.fn() }),
20
20
  }));
21
21
  import NumberInput from '../NumberInput.svelte';
22
+ import numberInputSource from '../NumberInput.svelte?raw';
22
23
  describe('NumberInput — typing & parsing', () => {
23
24
  it('fires onchange with the parsed number as the user types', async () => {
24
25
  const onchange = vi.fn();
@@ -104,6 +105,15 @@ describe('NumberInput — range validation', () => {
104
105
  });
105
106
  });
106
107
  describe('NumberInput — attributes', () => {
108
+ it('allows its native input to shrink inside a narrow form track', () => {
109
+ const { container } = render(NumberInput, {
110
+ props: { name: 'amount', label: 'Amount' },
111
+ });
112
+ container.style.width = '80px';
113
+ const input = screen.getByLabelText('Amount');
114
+ expect(input).toHaveClass('smrt-input');
115
+ expect(numberInputSource).toMatch(/\.smrt-input\s*\{[^}]*box-sizing:\s*border-box;[^}]*min-width:\s*0;[^}]*width:\s*100%;/);
116
+ });
107
117
  it('forwards min, max, and step onto the input', () => {
108
118
  render(NumberInput, {
109
119
  props: { name: 'age', label: 'Age', min: 1, max: 100, step: 5 },
@@ -224,4 +224,93 @@ describe('AdminShell', () => {
224
224
  unmount(component);
225
225
  }
226
226
  });
227
+ it('collapses corner tracks when no corner snippets are mounted', () => {
228
+ const component = mount(AdminShell, {
229
+ target: container,
230
+ props: {
231
+ title: 'Ops',
232
+ children: textSnippet('main work'),
233
+ },
234
+ });
235
+ try {
236
+ const topEdge = container.querySelector('.smrt-admin-shell__edge--top');
237
+ const band = container.querySelector('.smrt-admin-shell__band--top');
238
+ expect(topEdge.style.getPropertyValue('--edge-columns').trim()).toBe('0px minmax(0, 1fr) 0px');
239
+ expect(band.style.getPropertyValue('--band-column').trim()).toBe('2');
240
+ }
241
+ finally {
242
+ unmount(component);
243
+ }
244
+ });
245
+ it('renders a default focus rail from registered tools when no focusRail snippet is given', async () => {
246
+ const state = createShellState();
247
+ state.registerFocusTool({ id: 'chat', label: 'Chat' });
248
+ state.registerFocusTool({ id: 'files', label: 'Files' });
249
+ const component = mount(AdminShell, {
250
+ target: container,
251
+ props: { state, children: textSnippet('main work') },
252
+ });
253
+ try {
254
+ const buttons = container.querySelectorAll('.smrt-admin-shell__focus-tool');
255
+ expect(buttons.length).toBe(2);
256
+ expect(buttons[0].getAttribute('aria-label')).toBe('Chat');
257
+ // Clicking a tool opens the panel; clicking the active one closes it.
258
+ buttons[0].click();
259
+ const { tick } = await import('svelte');
260
+ await tick();
261
+ expect(container
262
+ .querySelector('.smrt-admin-shell__edge--right')
263
+ ?.getAttribute('data-state')).toBe('expanded');
264
+ buttons[0].click();
265
+ await tick();
266
+ expect(container
267
+ .querySelector('.smrt-admin-shell__edge--right')
268
+ ?.getAttribute('data-state')).toBe('collapsed');
269
+ }
270
+ finally {
271
+ unmount(component);
272
+ }
273
+ });
274
+ it('reserves corner tracks only for mounted corner snippets', () => {
275
+ const component = mount(AdminShell, {
276
+ target: container,
277
+ props: {
278
+ title: 'Ops',
279
+ topLeftCorner: textSnippet('corner'),
280
+ children: textSnippet('main work'),
281
+ },
282
+ });
283
+ try {
284
+ const topEdge = container.querySelector('.smrt-admin-shell__edge--top');
285
+ const band = container.querySelector('.smrt-admin-shell__band--top');
286
+ const columns = topEdge.style.getPropertyValue('--edge-columns');
287
+ expect(columns).toContain('--smrt-admin-shell-left-collapsed');
288
+ expect(columns).not.toContain('--smrt-admin-shell-right-collapsed');
289
+ expect(band.style.getPropertyValue('--band-column').trim()).toBe('2');
290
+ }
291
+ finally {
292
+ unmount(component);
293
+ }
294
+ });
295
+ it('keeps a right-only corner in the explicit third grid track', () => {
296
+ const component = mount(AdminShell, {
297
+ target: container,
298
+ props: {
299
+ title: 'Ops',
300
+ topRightCorner: textSnippet('right corner'),
301
+ children: textSnippet('main work'),
302
+ },
303
+ });
304
+ try {
305
+ const topEdge = container.querySelector('.smrt-admin-shell__edge--top');
306
+ const band = container.querySelector('.smrt-admin-shell__band--top');
307
+ const columns = topEdge.style.getPropertyValue('--edge-columns').trim();
308
+ expect(columns).toBe('0px minmax(0, 1fr) var(--smrt-admin-shell-right-collapsed)');
309
+ expect(band.style.getPropertyValue('--band-column').trim()).toBe('2');
310
+ expect(container.querySelector('.smrt-admin-shell__corner--top-right')).not.toBeNull();
311
+ }
312
+ finally {
313
+ unmount(component);
314
+ }
315
+ });
227
316
  });
@@ -158,6 +158,27 @@ describe('ShellState', () => {
158
158
  harness.teardown();
159
159
  }
160
160
  });
161
+ it('keeps imperative open idempotent and toggles only through toggleFocusTool', () => {
162
+ const shell = createShellState();
163
+ shell.registerFocusTool({ id: 'chat', label: 'Chat' });
164
+ shell.openFocusTool('chat');
165
+ expect(shell.panels.right).toBe('expanded');
166
+ expect(shell.activeFocusToolId).toBe('chat');
167
+ // Imperative callers can safely ensure that a tool is open.
168
+ shell.openFocusTool('chat');
169
+ expect(shell.panels.right).toBe('expanded');
170
+ expect(shell.activeFocusToolId).toBe('chat');
171
+ // Rail clicks use the explicit toggle operation.
172
+ shell.toggleFocusTool('chat');
173
+ expect(shell.panels.right).toBe('collapsed');
174
+ shell.toggleFocusTool('chat');
175
+ expect(shell.panels.right).toBe('expanded');
176
+ // Switching tools never collapses.
177
+ shell.registerFocusTool({ id: 'files', label: 'Files' });
178
+ shell.openFocusTool('files');
179
+ expect(shell.panels.right).toBe('expanded');
180
+ expect(shell.activeFocusToolId).toBe('files');
181
+ });
161
182
  it('does not leak panel state reads into consumer effects', () => {
162
183
  const shell = createShellState();
163
184
  const harness = mountMutationEffect(shell, (state) => {
@@ -157,6 +157,20 @@ function buildLayoutStyle(shell: ModuleShellState): string {
157
157
 
158
158
  const layoutStyle = $derived(buildLayoutStyle(shell));
159
159
 
160
+ // Top/bottom edges reserve grid tracks for corner snippets. When a corner
161
+ // isn't mounted its track must collapse, otherwise the band is squeezed
162
+ // between phantom tracks sized by the collapsed panel widths.
163
+ function edgeColumns(left: unknown, right: unknown): string {
164
+ const l = 'var(--smrt-admin-shell-left-collapsed)';
165
+ const r = 'var(--smrt-admin-shell-right-collapsed)';
166
+ return `${left ? l : '0px'} minmax(0, 1fr) ${right ? r : '0px'}`;
167
+ }
168
+
169
+ const topEdgeColumns = $derived(edgeColumns(topLeftCorner, topRightCorner));
170
+ const bottomEdgeColumns = $derived(
171
+ edgeColumns(bottomLeftCorner, bottomRightCorner),
172
+ );
173
+
160
174
  function panelState(edge: PanelEdge) {
161
175
  return shell.panels[edge];
162
176
  }
@@ -273,13 +287,17 @@ function buildLayoutStyle(shell: ModuleShellState): string {
273
287
  class="smrt-admin-shell__edge smrt-admin-shell__edge--top"
274
288
  data-state={panelState('top')}
275
289
  data-presentation={shell.config.panels.top.presentation}
290
+ style:--edge-columns={topEdgeColumns}
276
291
  >
277
292
  {#if topLeftCorner}
278
293
  <div class="smrt-admin-shell__corner smrt-admin-shell__corner--top-left">
279
294
  {@render topLeftCorner()}
280
295
  </div>
281
296
  {/if}
282
- <div class="smrt-admin-shell__band smrt-admin-shell__band--top">
297
+ <div
298
+ class="smrt-admin-shell__band smrt-admin-shell__band--top"
299
+ style:--band-column={2}
300
+ >
283
301
  {#if appBar}
284
302
  {@render appBar()}
285
303
  {:else}
@@ -365,6 +383,34 @@ function buildLayoutStyle(shell: ModuleShellState): string {
365
383
  <div class="smrt-admin-shell__rail">
366
384
  {#if focusRail}
367
385
  {@render focusRail()}
386
+ {:else if shell.focusTools.length > 0}
387
+ <nav class="smrt-admin-shell__focus-rail" aria-label={t(M['ui.admin_shell.focus_tools'])}>
388
+ {#each shell.focusTools as tool (tool.id)}
389
+ <!-- raw-primitive-allow: shell chrome toggle, not a content button -->
390
+ <button
391
+ type="button"
392
+ class="smrt-admin-shell__focus-tool"
393
+ class:active={shell.activeFocusToolId ===
394
+ tool.id && edgeExpanded('right')}
395
+ aria-pressed={shell.activeFocusToolId ===
396
+ tool.id && edgeExpanded('right')}
397
+ aria-label={tool.label}
398
+ title={tool.label}
399
+ onclick={() => shell.toggleFocusTool(tool.id)}
400
+ >
401
+ {#if tool.icon}
402
+ <tool.icon />
403
+ {:else}
404
+ <span aria-hidden="true">{tool.label.charAt(0)}</span>
405
+ {/if}
406
+ {#if tool.badge != null}
407
+ <span class="smrt-admin-shell__focus-tool-badge">
408
+ {tool.badge}
409
+ </span>
410
+ {/if}
411
+ </button>
412
+ {/each}
413
+ </nav>
368
414
  {:else}
369
415
  {@render edgeToggle('right')}
370
416
  {/if}
@@ -385,13 +431,17 @@ function buildLayoutStyle(shell: ModuleShellState): string {
385
431
  class="smrt-admin-shell__edge smrt-admin-shell__edge--bottom"
386
432
  data-state={panelState('bottom')}
387
433
  data-presentation={shell.config.panels.bottom.presentation}
434
+ style:--edge-columns={bottomEdgeColumns}
388
435
  >
389
436
  {#if bottomLeftCorner}
390
437
  <div class="smrt-admin-shell__corner smrt-admin-shell__corner--bottom-left">
391
438
  {@render bottomLeftCorner()}
392
439
  </div>
393
440
  {/if}
394
- <div class="smrt-admin-shell__band smrt-admin-shell__band--bottom">
441
+ <div
442
+ class="smrt-admin-shell__band smrt-admin-shell__band--bottom"
443
+ style:--band-column={2}
444
+ >
395
445
  {#if systemBar}
396
446
  {@render systemBar()}
397
447
  {:else}
@@ -499,9 +549,11 @@ function buildLayoutStyle(shell: ModuleShellState): string {
499
549
  grid-column: 1 / -1;
500
550
  grid-row: 1;
501
551
  display: grid;
502
- grid-template-columns:
552
+ grid-template-columns: var(
553
+ --edge-columns,
503
554
  var(--smrt-admin-shell-left-collapsed) minmax(0, 1fr)
504
- var(--smrt-admin-shell-right-collapsed);
555
+ var(--smrt-admin-shell-right-collapsed)
556
+ );
505
557
  border-block-end: 1px solid var(--smrt-color-outline-variant);
506
558
  z-index: 30;
507
559
  }
@@ -531,9 +583,11 @@ function buildLayoutStyle(shell: ModuleShellState): string {
531
583
  grid-column: 1 / -1;
532
584
  grid-row: 3;
533
585
  display: grid;
534
- grid-template-columns:
586
+ grid-template-columns: var(
587
+ --edge-columns,
535
588
  var(--smrt-admin-shell-left-collapsed) minmax(0, 1fr)
536
- var(--smrt-admin-shell-right-collapsed);
589
+ var(--smrt-admin-shell-right-collapsed)
590
+ );
537
591
  border-block-start: 1px solid var(--smrt-color-outline-variant);
538
592
  z-index: 30;
539
593
  }
@@ -558,7 +612,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
558
612
 
559
613
  .smrt-admin-shell__band--top,
560
614
  .smrt-admin-shell__band--bottom {
561
- grid-column: 2;
615
+ grid-column: var(--band-column, 2);
562
616
  }
563
617
 
564
618
  .smrt-admin-shell__brand {
@@ -579,6 +633,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
579
633
  }
580
634
 
581
635
  .smrt-admin-shell__rail {
636
+ box-sizing: border-box;
582
637
  min-width: 0;
583
638
  min-height: 0;
584
639
  block-size: 100%;
@@ -586,6 +641,49 @@ function buildLayoutStyle(shell: ModuleShellState): string {
586
641
  padding: var(--smrt-spacing-3);
587
642
  }
588
643
 
644
+ .smrt-admin-shell__focus-rail {
645
+ display: grid;
646
+ /* Center tracks, not just items: buttons may be wider than the
647
+ collapsed strip's content box (see ToolsDock). */
648
+ justify-content: center;
649
+ justify-items: center;
650
+ gap: var(--smrt-spacing-2, 0.5rem);
651
+ }
652
+
653
+ .smrt-admin-shell__focus-tool {
654
+ position: relative;
655
+ display: grid;
656
+ place-items: center;
657
+ width: 2.35rem;
658
+ height: 2.35rem;
659
+ border: 1px solid transparent;
660
+ border-radius: var(--smrt-radius-md, 8px);
661
+ background: transparent;
662
+ color: var(--smrt-color-on-surface-variant);
663
+ cursor: pointer;
664
+ font: inherit;
665
+ }
666
+
667
+ .smrt-admin-shell__focus-tool:hover,
668
+ .smrt-admin-shell__focus-tool.active {
669
+ color: var(--smrt-color-primary);
670
+ border-color: var(--smrt-color-primary);
671
+ background: var(--smrt-color-surface-container-high);
672
+ }
673
+
674
+ .smrt-admin-shell__focus-tool-badge {
675
+ position: absolute;
676
+ inset-block-start: -0.25rem;
677
+ inset-inline-end: -0.25rem;
678
+ min-width: 1rem;
679
+ border-radius: var(--smrt-radius-full, 9999px);
680
+ background: var(--smrt-color-error);
681
+ color: var(--smrt-color-on-error);
682
+ font-size: var(--smrt-typography-label-small-size, 0.625rem);
683
+ line-height: 1rem;
684
+ text-align: center;
685
+ }
686
+
589
687
  .smrt-admin-shell__edge--left[data-state='expanded']
590
688
  .smrt-admin-shell__rail {
591
689
  overflow: hidden;
@@ -619,6 +717,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
619
717
  }
620
718
 
621
719
  .smrt-admin-shell__panel {
720
+ box-sizing: border-box;
622
721
  min-width: 0;
623
722
  min-height: 0;
624
723
  block-size: 100%;
@@ -1 +1 @@
1
- {"version":3,"file":"AdminShell.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/AdminShell.svelte.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAStC,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EACR,eAAe,EAEf,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,UAAU,KAAM,SAAQ,eAAe;IACrC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC,CAAC;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAiWH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"AdminShell.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/AdminShell.svelte.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAStC,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EACR,eAAe,EAEf,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,UAAU,KAAM,SAAQ,eAAe;IACrC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC,CAAC;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAmYH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -32,6 +32,7 @@ export declare class ShellState {
32
32
  registerFocusTool(tool: ShellFocusTool): () => void;
33
33
  unregisterFocusTool(id: string): void;
34
34
  openFocusTool(id: string): void;
35
+ toggleFocusTool(id: string): void;
35
36
  upsertActivity(activity: ShellActivity): void;
36
37
  updateActivity(id: string, patch: ShellActivityPatch): void;
37
38
  removeActivity(id: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"state.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/state.svelte.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB,KAAK,gBAAgB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAC5D,KAAK,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAE9C,QAAQ,qBAAkC;IAC1C,MAAM,gCAKH;IACH,UAAU,mBAAgC;IAC1C,iBAAiB,gBAA+B;IAChD,UAAU,kBAA+B;IAEzC,OAAO,CAAC,iBAAiB,CAA+B;gBAE5C,OAAO,GAAE,iBAAsB;IAUrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,QAAQ,IAAI,kBAAkB;IAY9B,aAAa,CACX,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAClC,IAAI;IAkBP,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAUrD,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAezD,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAUlC,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAIlC,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAIpC,oBAAoB,IAAI,OAAO;IAY/B,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,IAAI;IAYnD,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IASrC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAY/B,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IA4B7C,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAc3D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAWhC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAKvD,cAAc,CAAC,MAAM,GAAE,mBAAwB,GAAG,aAAa,EAAE;IASjE,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,kBAAkB;IAsBlD,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS;IAW9C,OAAO,CAAC,mBAAmB;YAmBb,eAAe;IAI7B,OAAO,CAAC,YAAY;CAGrB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAE5E"}
1
+ {"version":3,"file":"state.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/state.svelte.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB,KAAK,gBAAgB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAC5D,KAAK,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAE9C,QAAQ,qBAAkC;IAC1C,MAAM,gCAKH;IACH,UAAU,mBAAgC;IAC1C,iBAAiB,gBAA+B;IAChD,UAAU,kBAA+B;IAEzC,OAAO,CAAC,iBAAiB,CAA+B;gBAE5C,OAAO,GAAE,iBAAsB;IAUrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,QAAQ,IAAI,kBAAkB;IAY9B,aAAa,CACX,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAClC,IAAI;IAkBP,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAUrD,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAezD,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAUlC,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAIlC,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAIpC,oBAAoB,IAAI,OAAO;IAY/B,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,IAAI;IAYnD,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IASrC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAY/B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAWjC,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IA4B7C,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAc3D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAWhC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAKvD,cAAc,CAAC,MAAM,GAAE,mBAAwB,GAAG,aAAa,EAAE;IASjE,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,kBAAkB;IAsBlD,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS;IAW9C,OAAO,CAAC,mBAAmB;YAmBb,eAAe;IAI7B,OAAO,CAAC,YAAY;CAGrB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAE5E"}
@@ -139,6 +139,17 @@ export class ShellState {
139
139
  void this.persistSettings();
140
140
  });
141
141
  }
142
+ toggleFocusTool(id) {
143
+ untrack(() => {
144
+ if (!this.focusTools.some((tool) => tool.id === id))
145
+ return;
146
+ if (this.activeFocusToolId === id && this.panels.right === 'expanded') {
147
+ this.collapsePanel('right');
148
+ return;
149
+ }
150
+ this.openFocusTool(id);
151
+ });
152
+ }
142
153
  upsertActivity(activity) {
143
154
  const nextActivity = snapshotActivity(activity);
144
155
  untrack(() => {
@@ -63,6 +63,8 @@ export interface ShellFocusTool {
63
63
  description?: string;
64
64
  order?: number;
65
65
  badge?: number | string | null;
66
+ /** Optional icon component rendered by the default focus rail. */
67
+ icon?: Component | null;
66
68
  component?: Component | null;
67
69
  render?: Snippet<[{
68
70
  tool: ShellFocusTool;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/types.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export declare const M: {
27
27
  readonly 'ui.tools_dock.select_tool': "ui.tools_dock.select_tool";
28
28
  readonly 'ui.tools_dock.workspace_tools': "ui.tools_dock.workspace_tools";
29
29
  readonly 'ui.admin_shell.no_focus_tools': "ui.admin_shell.no_focus_tools";
30
+ readonly 'ui.admin_shell.focus_tools': "ui.admin_shell.focus_tools";
30
31
  readonly 'ui.admin_shell.no_app_panel': "ui.admin_shell.no_app_panel";
31
32
  readonly 'ui.admin_shell.no_system_panel': "ui.admin_shell.no_system_panel";
32
33
  readonly 'ui.admin_shell.shell_shortcuts': "ui.admin_shell.shell_shortcuts";
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FZ,CAAC"}
1
+ {"version":3,"file":"strings.workspace.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FZ,CAAC"}
@@ -32,6 +32,7 @@ export const M = defineMessages({
32
32
  'ui.tools_dock.workspace_tools': 'Workspace tools',
33
33
  // components/workspace/admin-shell/*
34
34
  'ui.admin_shell.no_focus_tools': 'No focus tools',
35
+ 'ui.admin_shell.focus_tools': 'Focus tools',
35
36
  'ui.admin_shell.no_app_panel': 'No app panel',
36
37
  'ui.admin_shell.no_system_panel': 'No system panel',
37
38
  'ui.admin_shell.shell_shortcuts': 'Shell shortcuts',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-svelte",
3
- "version": "0.40.25",
3
+ "version": "0.40.27",
4
4
  "description": "Svelte 5 components for SMRT user management - auth, users, tenants, roles, permissions, groups",
5
5
  "type": "module",
6
6
  "smrtRawPrimitives": "strict",
@@ -101,14 +101,14 @@
101
101
  "access": "public"
102
102
  },
103
103
  "dependencies": {
104
- "@happyvertical/logger": "^0.80.2",
104
+ "@happyvertical/logger": "^0.84.0",
105
105
  "@tanstack/db": "^0.6.14",
106
106
  "@tanstack/svelte-db": "^0.1.91",
107
107
  "esm-env": "^1.2.2",
108
- "@happyvertical/smrt-types": "0.40.25",
109
- "@happyvertical/smrt-ui": "0.40.25",
110
- "@happyvertical/smrt-languages": "0.40.25",
111
- "@happyvertical/smrt-web": "0.40.25"
108
+ "@happyvertical/smrt-languages": "0.40.27",
109
+ "@happyvertical/smrt-ui": "0.40.27",
110
+ "@happyvertical/smrt-types": "0.40.27",
111
+ "@happyvertical/smrt-web": "0.40.27"
112
112
  },
113
113
  "peerDependencies": {
114
114
  "@huggingface/transformers": ">=3.8.1",