alus-ui-mcp 0.3.0 → 0.3.1

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 (3) hide show
  1. package/README.md +20 -20
  2. package/dist/index.js +468 -379
  3. package/package.json +3 -1
package/dist/index.js CHANGED
@@ -5233,6 +5233,9 @@ var BUNDLED_DATA = {
5233
5233
  let listEl = $state<HTMLUListElement | null>(null);
5234
5234
  let highlighted = $state(0);
5235
5235
 
5236
+ // Seed the input value from an initially-provided selected option
5237
+ if (selected && !value) value = selected.label;
5238
+
5236
5239
  const filtered = $derived.by(() => {
5237
5240
  const q = value.trim().toLowerCase();
5238
5241
  if (q.length < minLength) return [];
@@ -5546,7 +5549,7 @@ var BUNDLED_DATA = {
5546
5549
  "files": {
5547
5550
  "Calendar.svelte": `<script lang="ts" module>
5548
5551
  import {
5549
- CalendarDate,
5552
+ CalendarDate as CalendarDateImpl,
5550
5553
  DateFormatter,
5551
5554
  getDayOfWeek,
5552
5555
  getLocalTimeZone,
@@ -5558,6 +5561,12 @@ var BUNDLED_DATA = {
5558
5561
  type DateValue
5559
5562
  } from '@internationalized/date';
5560
5563
 
5564
+ // Re-export CalendarDate through a local binding to satisfy no-import-assign
5565
+ const CalendarDate: typeof CalendarDateImpl = CalendarDateImpl;
5566
+ export { CalendarDate };
5567
+ // Declare DateValue locally to avoid no-import-assign false positive on re-export
5568
+ export type { DateValue }; // eslint-disable-line no-import-assign
5569
+
5561
5570
  export interface CalendarDay {
5562
5571
  date: DateValue;
5563
5572
  jsDate: Date;
@@ -5569,8 +5578,6 @@ var BUNDLED_DATA = {
5569
5578
 
5570
5579
  export type CalendarView = 'days' | 'months' | 'years';
5571
5580
 
5572
- export { CalendarDate, type DateValue };
5573
-
5574
5581
  function isoOf(d: DateValue) {
5575
5582
  return \`\${d.year}-\${d.month}-\${d.day}\`;
5576
5583
  }
@@ -5784,7 +5791,7 @@ var BUNDLED_DATA = {
5784
5791
  }
5785
5792
 
5786
5793
  function onDayKey(e: KeyboardEvent, d: DateValue) {
5787
- let next: DateValue | null = null;
5794
+ let next: DateValue | null;
5788
5795
  switch (e.key) {
5789
5796
  case 'ArrowLeft':
5790
5797
  next = d.subtract({ days: 1 });
@@ -5908,7 +5915,7 @@ var BUNDLED_DATA = {
5908
5915
  {#if view === 'days'}
5909
5916
  <div role="grid" aria-label={ariaLabel} data-calendar={gridId} class={gridClass}>
5910
5917
  <div role="row">
5911
- {#each weekdays as wd}
5918
+ {#each weekdays as wd (wd)}
5912
5919
  <div role="columnheader" aria-label={wd} class={weekdayClass}>{wd}</div>
5913
5920
  {/each}
5914
5921
  </div>
@@ -7800,7 +7807,7 @@ var BUNDLED_DATA = {
7800
7807
 
7801
7808
  function onKeydown(e: KeyboardEvent) {
7802
7809
  if (readonly || disabled) return;
7803
- let next = value;
7810
+ let next: number;
7804
7811
  switch (e.key) {
7805
7812
  case 'ArrowRight':
7806
7813
  case 'ArrowUp':
@@ -7855,7 +7862,7 @@ var BUNDLED_DATA = {
7855
7862
  onkeydown={onKeydown}
7856
7863
  {...ariaAttrs}
7857
7864
  >
7858
- {#each Array(max) as _, i (i)}
7865
+ {#each Array.from({ length: max }, (_, n) => n) as i (i)}
7859
7866
  {@const idx = i + 1}
7860
7867
  {@const filled = idx <= displayed}
7861
7868
  <button
@@ -8842,7 +8849,7 @@ var BUNDLED_DATA = {
8842
8849
  </div>
8843
8850
  {/if}
8844
8851
  `,
8845
- "AccordionItem.svelte": "<script lang=\"ts\">\n import { getAccordionRoot, setAccordionItem } from './context.js';\n\n interface Props {\n children?: import('svelte').Snippet<[{ open: boolean }]>;\n value: string;\n disabled?: boolean;\n class?: string;\n }\n\n let { children, value, disabled = false, class: className = '' }: Props = $props();\n\n const root = getAccordionRoot();\n\n let triggerId = $derived(`${root.baseId}-trigger-${value}`);\n let contentId = $derived(`${root.baseId}-content-${value}`);\n\n setAccordionItem({\n get value() {\n return value;\n },\n disabled: () => disabled || root.disabled(),\n open: () => root.isOpen(value),\n get triggerId() {\n return `${root.baseId}-trigger-${value}`;\n },\n get contentId() {\n return `${root.baseId}-content-${value}`;\n }\n });\n\n let open = $derived(root.isOpen(value));\n</script>\n\n<div\n class={className}\n data-state={open ? 'open' : 'closed'}\n data-disabled={disabled || root.disabled() || undefined}\n>\n {#if children}{@render children({ open })}{/if}\n</div>\n",
8852
+ "AccordionItem.svelte": "<script lang=\"ts\">\n import { getAccordionRoot, setAccordionItem } from './context.js';\n\n interface Props {\n children?: import('svelte').Snippet<[{ open: boolean }]>;\n value: string;\n disabled?: boolean;\n class?: string;\n }\n\n let { children, value, disabled = false, class: className = '' }: Props = $props();\n\n const root = getAccordionRoot();\n\n setAccordionItem({\n get value() {\n return value;\n },\n disabled: () => disabled || root.disabled(),\n open: () => root.isOpen(value),\n get triggerId() {\n return `${root.baseId}-trigger-${value}`;\n },\n get contentId() {\n return `${root.baseId}-content-${value}`;\n }\n });\n\n let open = $derived(root.isOpen(value));\n</script>\n\n<div\n class={className}\n data-state={open ? 'open' : 'closed'}\n data-disabled={disabled || root.disabled() || undefined}\n>\n {#if children}{@render children({ open })}{/if}\n</div>\n",
8846
8853
  "AccordionTrigger.svelte": `<script lang="ts">
8847
8854
  import { getAccordionRoot, getAccordionItem } from './context.js';
8848
8855
  import { interactiveStateAttrs, widgetAttrs, mergeAttrs } from '$utils/a11y/index.js';
@@ -9297,7 +9304,6 @@ var BUNDLED_DATA = {
9297
9304
  </script>
9298
9305
 
9299
9306
  {#if visible}
9300
- <!-- svelte-ignore a11y_click_events_have_key_events -->
9301
9307
  <div
9302
9308
  {id}
9303
9309
  role="option"
@@ -9419,7 +9425,7 @@ var BUNDLED_DATA = {
9419
9425
  <a
9420
9426
  {href}
9421
9427
  target={newTab ? '_blank' : undefined}
9422
- rel={newTab ? 'noopener noreferrer' : undefined}
9428
+ rel="external noopener noreferrer"
9423
9429
  class={className}
9424
9430
  aria-label={ariaLabel}
9425
9431
  aria-describedby={ariaDescribedby}
@@ -9479,7 +9485,6 @@ var BUNDLED_DATA = {
9479
9485
  }: Props = $props();
9480
9486
 
9481
9487
  let isExternal = $derived(external ?? (typeof href === 'string' && /^https?:\\/\\//i.test(href)));
9482
-
9483
9488
  let computedTarget = $derived(target ?? (isExternal ? '_blank' : undefined));
9484
9489
  let computedRel = $derived(rel ?? (isExternal ? 'noopener noreferrer' : undefined));
9485
9490
 
@@ -10245,9 +10250,9 @@ var BUNDLED_DATA = {
10245
10250
  onkeydown={onPanelKey}
10246
10251
  {@attach panelRef}
10247
10252
  >
10248
- {#each items as it, i}
10253
+ {#each items as it, i (i)}
10249
10254
  {#if it.separator}
10250
- <div role="separator" class={separatorClass}></div>
10255
+ <hr class={separatorClass} />
10251
10256
  {:else if item}
10252
10257
  <!-- svelte-ignore a11y_click_events_have_key_events -->
10253
10258
  <div
@@ -10574,7 +10579,7 @@ var BUNDLED_DATA = {
10574
10579
  </script>
10575
10580
 
10576
10581
  {#if open}
10577
- <div
10582
+ <section
10578
10583
  {role}
10579
10584
  aria-live={live ?? (role === 'alert' ? 'assertive' : role === 'status' ? 'polite' : undefined)}
10580
10585
  data-variant={variant}
@@ -10591,7 +10596,7 @@ var BUNDLED_DATA = {
10591
10596
  {#if dismissible}
10592
10597
  <button type="button" aria-label="Dismiss banner" onclick={dismiss}>\xD7</button>
10593
10598
  {/if}
10594
- </div>
10599
+ </section>
10595
10600
  {/if}
10596
10601
  `,
10597
10602
  "index.ts": "export { default as Banner } from './Banner.svelte';\n"
@@ -10971,7 +10976,7 @@ var BUNDLED_DATA = {
10971
10976
  "slug": "tag",
10972
10977
  "files": {
10973
10978
  "Tag.svelte": `<script lang="ts">
10974
- import { labelAttrs, interactiveStateAttrs, widgetAttrs, mergeAttrs } from '$utils/a11y/index.js';
10979
+ import { labelAttrs, interactiveStateAttrs, mergeAttrs } from '$utils/a11y/index.js';
10975
10980
 
10976
10981
  interface Props {
10977
10982
  children?: import('svelte').Snippet;
@@ -11498,7 +11503,6 @@ var BUNDLED_DATA = {
11498
11503
  }
11499
11504
  </script>
11500
11505
 
11501
- <!-- svelte-ignore a11y_no_static_element_interactions -->
11502
11506
  <section
11503
11507
  aria-roledescription="carousel"
11504
11508
  class={className}
@@ -11569,7 +11573,7 @@ var BUNDLED_DATA = {
11569
11573
  onkeydown={onKeydown}
11570
11574
  bind:this={listEl}
11571
11575
  >
11572
- {#each Array(ctx.count()) as _, i (i)}
11576
+ {#each Array.from({ length: ctx.count() }, (_, idx) => idx) as i (i)}
11573
11577
  {@const active = ctx.index() === i}
11574
11578
  <button
11575
11579
  type="button"
@@ -11758,7 +11762,8 @@ var BUNDLED_DATA = {
11758
11762
  class={lineNumbersClass}
11759
11763
  aria-hidden="true"
11760
11764
  data-line-numbers
11761
- >{#each lines as _, i}{i + 1}{#if i < lines.length - 1}{'\\n'}{/if}{/each}</span
11765
+ >{#each Array.from({ length: lines.length }, (_, n) => n) as i (i)}{i +
11766
+ 1}{#if i < lines.length - 1}{/if}{/each}</span
11762
11767
  ><code class={codeClass}>{code}</code>{:else}<code class={codeClass}>{code}</code>{/if}</pre>
11763
11768
  </div>
11764
11769
  `,
@@ -11770,7 +11775,7 @@ var BUNDLED_DATA = {
11770
11775
  "category": "display",
11771
11776
  "slug": "compare",
11772
11777
  "files": {
11773
- "Compare.svelte": "<script lang=\"ts\">\n import type { Attachment } from 'svelte/attachments';\n import { labelAttrs, interactiveStateAttrs, widgetAttrs, mergeAttrs } from '$utils/a11y/index.js';\n\n interface Props {\n before: import('svelte').Snippet;\n after: import('svelte').Snippet;\n handle?: import('svelte').Snippet<[{ position: number; dragging: boolean }]>;\n position?: number;\n min?: number;\n max?: number;\n step?: number;\n largeStep?: number;\n orientation?: 'horizontal' | 'vertical';\n disabled?: boolean;\n class?: string;\n beforeClass?: string;\n afterClass?: string;\n handleClass?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-valuetext'?: string;\n onChange?: (position: number) => void;\n }\n\n let {\n before,\n after,\n handle,\n position = $bindable(50),\n min = 0,\n max = 100,\n step = 2,\n largeStep = 10,\n orientation = 'horizontal',\n disabled = false,\n class: className = '',\n beforeClass = '',\n afterClass = '',\n handleClass = '',\n 'aria-label': ariaLabel = 'Before and after comparison',\n 'aria-labelledby': ariaLabelledby,\n 'aria-valuetext': ariaValuetext,\n onChange\n }: Props = $props();\n\n let dragging = $state(false);\n let containerEl: HTMLElement | null = $state(null);\n let lastCoord = 0;\n let containerSize = 0;\n\n const horiz = $derived(orientation === 'horizontal');\n\n function clamp(v: number): number {\n return Math.min(max, Math.max(min, v));\n }\n\n function setPosition(v: number) {\n const next = clamp(v);\n if (next !== position) {\n position = next;\n onChange?.(next);\n }\n }\n\n const attach: Attachment<HTMLDivElement> = (node) => {\n containerEl = node;\n return () => {\n containerEl = null;\n };\n };\n\n function refreshSize() {\n if (!containerEl) {\n containerSize = 0;\n return;\n }\n const rect = containerEl.getBoundingClientRect();\n containerSize = horiz ? rect.width : rect.height;\n }\n\n function pointFromEvent(e: PointerEvent): number {\n return horiz ? e.clientX : e.clientY;\n }\n\n function pctFromAbsolute(e: PointerEvent): number {\n if (!containerEl) return position;\n const rect = containerEl.getBoundingClientRect();\n const offset = horiz ? e.clientX - rect.left : e.clientY - rect.top;\n const size = horiz ? rect.width : rect.height;\n if (size <= 0) return position;\n return (offset / size) * 100;\n }\n\n function onTrackPointerDown(e: PointerEvent) {\n if (disabled) return;\n e.preventDefault();\n dragging = true;\n refreshSize();\n lastCoord = pointFromEvent(e);\n setPosition(pctFromAbsolute(e));\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }\n\n function onHandlePointerDown(e: PointerEvent) {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n dragging = true;\n refreshSize();\n lastCoord = pointFromEvent(e);\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: PointerEvent) {\n if (!dragging || containerSize <= 0) return;\n const cur = pointFromEvent(e);\n const deltaPx = cur - lastCoord;\n lastCoord = cur;\n if (deltaPx === 0) return;\n const deltaPct = (deltaPx / containerSize) * 100;\n setPosition(position + deltaPct);\n }\n\n function onPointerUp(e: PointerEvent) {\n if (!dragging) return;\n dragging = false;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n }\n\n function onKeydown(e: KeyboardEvent) {\n if (disabled) return;\n const incKey = horiz ? 'ArrowRight' : 'ArrowDown';\n const decKey = horiz ? 'ArrowLeft' : 'ArrowUp';\n let delta = 0;\n if (e.key === incKey) delta = step;\n else if (e.key === decKey) delta = -step;\n else if (e.key === 'PageDown') delta = largeStep;\n else if (e.key === 'PageUp') delta = -largeStep;\n else if (e.key === 'Home') {\n e.preventDefault();\n setPosition(min);\n return;\n } else if (e.key === 'End') {\n e.preventDefault();\n setPosition(max);\n return;\n } else {\n return;\n }\n e.preventDefault();\n setPosition(position + delta);\n }\n\n const afterClipStyle = $derived(\n horiz\n ? `clip-path:inset(0 ${100 - position}% 0 0);`\n : `clip-path:inset(0 0 ${100 - position}% 0);`\n );\n\n const handleStyle = $derived(\n horiz\n ? `left:${position}%;top:0;bottom:0;transform:translateX(-50%);`\n : `top:${position}%;left:0;right:0;transform:translateY(-50%);`\n );\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div\n {@attach attach}\n class={className}\n data-orientation={orientation}\n data-dragging={dragging || undefined}\n data-disabled={disabled || undefined}\n style=\"position:relative;overflow:hidden;touch-action:none;\"\n onpointerdown={onTrackPointerDown}\n onpointermove={onPointerMove}\n onpointerup={onPointerUp}\n onpointercancel={onPointerUp}\n>\n <div class={beforeClass} data-layer=\"before\" style=\"position:absolute;inset:0;\">\n {@render before()}\n </div>\n <div class={afterClass} data-layer=\"after\" style={`position:absolute;inset:0;${afterClipStyle}`}>\n {@render after()}\n </div>\n\n <!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n <div\n role=\"slider\"\n tabindex={disabled ? -1 : 0}\n data-dragging={dragging || undefined}\n data-orientation={orientation}\n class={handleClass}\n style={`position:absolute;${handleStyle}`}\n onpointerdown={onHandlePointerDown}\n onpointermove={onPointerMove}\n onpointerup={onPointerUp}\n onpointercancel={onPointerUp}\n onkeydown={onKeydown}\n {...mergeAttrs(\n labelAttrs({ label: ariaLabel, labelledby: ariaLabelledby }),\n interactiveStateAttrs({ disabled }),\n widgetAttrs({\n orientation,\n valuenow: Math.round(position),\n valuemin: min,\n valuemax: max,\n valuetext: ariaValuetext\n })\n )}\n >\n {#if handle}\n {@render handle({ position, dragging })}\n {/if}\n </div>\n</div>\n",
11778
+ "Compare.svelte": "<script lang=\"ts\">\n import type { Attachment } from 'svelte/attachments';\n import { labelAttrs, interactiveStateAttrs, widgetAttrs, mergeAttrs } from '$utils/a11y/index.js';\n\n interface Props {\n before: import('svelte').Snippet;\n after: import('svelte').Snippet;\n handle?: import('svelte').Snippet<[{ position: number; dragging: boolean }]>;\n position?: number;\n min?: number;\n max?: number;\n step?: number;\n largeStep?: number;\n orientation?: 'horizontal' | 'vertical';\n disabled?: boolean;\n class?: string;\n beforeClass?: string;\n afterClass?: string;\n handleClass?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-valuetext'?: string;\n onChange?: (position: number) => void;\n }\n\n let {\n before,\n after,\n handle,\n position = $bindable(50),\n min = 0,\n max = 100,\n step = 2,\n largeStep = 10,\n orientation = 'horizontal',\n disabled = false,\n class: className = '',\n beforeClass = '',\n afterClass = '',\n handleClass = '',\n 'aria-label': ariaLabel = 'Before and after comparison',\n 'aria-labelledby': ariaLabelledby,\n 'aria-valuetext': ariaValuetext,\n onChange\n }: Props = $props();\n\n let dragging = $state(false);\n let containerEl: HTMLElement | null = $state(null);\n let lastCoord = 0;\n let containerSize = 0;\n\n const horiz = $derived(orientation === 'horizontal');\n\n function clamp(v: number): number {\n return Math.min(max, Math.max(min, v));\n }\n\n function setPosition(v: number) {\n const next = clamp(v);\n if (next !== position) {\n position = next;\n onChange?.(next);\n }\n }\n\n const attach: Attachment<HTMLDivElement> = (node) => {\n containerEl = node;\n return () => {\n containerEl = null;\n };\n };\n\n function refreshSize() {\n if (!containerEl) {\n containerSize = 0;\n return;\n }\n const rect = containerEl.getBoundingClientRect();\n containerSize = horiz ? rect.width : rect.height;\n }\n\n function pointFromEvent(e: PointerEvent): number {\n return horiz ? e.clientX : e.clientY;\n }\n\n function pctFromAbsolute(e: PointerEvent): number {\n if (!containerEl) return position;\n const rect = containerEl.getBoundingClientRect();\n const offset = horiz ? e.clientX - rect.left : e.clientY - rect.top;\n const size = horiz ? rect.width : rect.height;\n if (size <= 0) return position;\n return (offset / size) * 100;\n }\n\n function onTrackPointerDown(e: PointerEvent) {\n if (disabled) return;\n e.preventDefault();\n dragging = true;\n refreshSize();\n lastCoord = pointFromEvent(e);\n setPosition(pctFromAbsolute(e));\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }\n\n function onHandlePointerDown(e: PointerEvent) {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n dragging = true;\n refreshSize();\n lastCoord = pointFromEvent(e);\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: PointerEvent) {\n if (!dragging || containerSize <= 0) return;\n const cur = pointFromEvent(e);\n const deltaPx = cur - lastCoord;\n lastCoord = cur;\n if (deltaPx === 0) return;\n const deltaPct = (deltaPx / containerSize) * 100;\n setPosition(position + deltaPct);\n }\n\n function onPointerUp(e: PointerEvent) {\n if (!dragging) return;\n dragging = false;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n }\n\n function onKeydown(e: KeyboardEvent) {\n if (disabled) return;\n const incKey = horiz ? 'ArrowRight' : 'ArrowDown';\n const decKey = horiz ? 'ArrowLeft' : 'ArrowUp';\n if (e.key === 'Home') {\n e.preventDefault();\n setPosition(min);\n return;\n } else if (e.key === 'End') {\n e.preventDefault();\n setPosition(max);\n return;\n }\n let delta;\n if (e.key === incKey) delta = step;\n else if (e.key === decKey) delta = -step;\n else if (e.key === 'PageDown') delta = largeStep;\n else if (e.key === 'PageUp') delta = -largeStep;\n else return;\n e.preventDefault();\n setPosition(position + delta);\n }\n\n const afterClipStyle = $derived(\n horiz\n ? `clip-path:inset(0 ${100 - position}% 0 0);`\n : `clip-path:inset(0 0 ${100 - position}% 0);`\n );\n\n const handleStyle = $derived(\n horiz\n ? `left:${position}%;top:0;bottom:0;transform:translateX(-50%);`\n : `top:${position}%;left:0;right:0;transform:translateY(-50%);`\n );\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div\n {@attach attach}\n class={className}\n data-orientation={orientation}\n data-dragging={dragging || undefined}\n data-disabled={disabled || undefined}\n style=\"position:relative;overflow:hidden;touch-action:none;\"\n onpointerdown={onTrackPointerDown}\n onpointermove={onPointerMove}\n onpointerup={onPointerUp}\n onpointercancel={onPointerUp}\n>\n <div class={beforeClass} data-layer=\"before\" style=\"position:absolute;inset:0;\">\n {@render before()}\n </div>\n <div class={afterClass} data-layer=\"after\" style={`position:absolute;inset:0;${afterClipStyle}`}>\n {@render after()}\n </div>\n\n <div\n role=\"slider\"\n tabindex={disabled ? -1 : 0}\n data-dragging={dragging || undefined}\n data-orientation={orientation}\n class={handleClass}\n style={`position:absolute;${handleStyle}`}\n onpointerdown={onHandlePointerDown}\n onpointermove={onPointerMove}\n onpointerup={onPointerUp}\n onpointercancel={onPointerUp}\n onkeydown={onKeydown}\n {...mergeAttrs(\n labelAttrs({ label: ariaLabel, labelledby: ariaLabelledby }),\n interactiveStateAttrs({ disabled }),\n widgetAttrs({\n orientation,\n valuenow: Math.round(position),\n valuemin: min,\n valuemax: max,\n valuetext: ariaValuetext\n })\n )}\n >\n {#if handle}\n {@render handle({ position, dragging })}\n {/if}\n </div>\n</div>\n",
11774
11779
  "index.ts": "export { default as Compare } from './Compare.svelte';\n"
11775
11780
  }
11776
11781
  },
@@ -11972,7 +11977,7 @@ var BUNDLED_DATA = {
11972
11977
 
11973
11978
  {#if keys && keys.length > 0}
11974
11979
  <kbd class={className} aria-label={ariaLabel ?? keys.join(' then ')}>
11975
- {#each keys as key, i}
11980
+ {#each keys as key, i (i)}
11976
11981
  <kbd>{key}</kbd>{#if i < keys.length - 1}<span aria-hidden="true">{separator}</span>{/if}
11977
11982
  {/each}
11978
11983
  </kbd>
@@ -12039,7 +12044,7 @@ var BUNDLED_DATA = {
12039
12044
  "category": "display",
12040
12045
  "slug": "stat-card",
12041
12046
  "files": {
12042
- "StatCard.svelte": "<script lang=\"ts\">\n import { generateCounterId } from '$utils/a11y/id.js';\n import { labelAttrs, mergeAttrs } from '$utils/a11y/index.js';\n\n type Trend = 'up' | 'down' | 'flat';\n\n interface Props {\n label: string;\n value: string | number;\n valueClass?: string;\n labelClass?: string;\n hint?: string;\n change?: string | number;\n trend?: Trend;\n icon?: import('svelte').Snippet;\n actions?: import('svelte').Snippet;\n change_snippet?: import('svelte').Snippet<[{ trend: Trend; change: string | number }]>;\n class?: string;\n hintClass?: string;\n changeClass?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n }\n\n let {\n label,\n value,\n valueClass = '',\n labelClass = '',\n hint,\n change,\n trend,\n icon,\n actions,\n change_snippet,\n class: className = '',\n hintClass = '',\n changeClass = '',\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedby\n }: Props = $props();\n\n const labelId = generateCounterId('stat-label');\n const valueId = generateCounterId('stat-value');\n\n const trendText = $derived(trend === 'up' ? ' increased' : trend === 'down' ? ' decreased' : '');\n const inferredLabel = $derived(`${label}: ${value}${trendText}`);\n</script>\n\n<div\n role=\"group\"\n class={className}\n data-trend={trend}\n {...mergeAttrs(\n labelAttrs({\n label: ariaLabel,\n labelledby: labelId,\n describedby: ariaDescribedby ?? valueId\n })\n )}\n>\n {#if icon}{@render icon()}{/if}\n <div>\n <div id={labelId} class={labelClass}>{label}</div>\n <div id={valueId} class={valueClass} {...labelAttrs({ label: inferredLabel })}>{value}</div>\n {#if change !== undefined}\n {#if change_snippet}\n {@render change_snippet({ trend: trend ?? 'flat', change })}\n {:else}\n <div class={changeClass} data-trend={trend}>{change}</div>\n {/if}\n {/if}\n {#if hint}<div class={hintClass}>{hint}</div>{/if}\n </div>\n {#if actions}{@render actions()}{/if}\n</div>\n",
12047
+ "StatCard.svelte": "<script lang=\"ts\">\n import { generateCounterId } from '$utils/a11y/id.js';\n import { labelAttrs, mergeAttrs } from '$utils/a11y/index.js';\n\n type Trend = 'up' | 'down' | 'flat';\n\n interface Props {\n label: string;\n value: string | number;\n valueClass?: string;\n labelClass?: string;\n hint?: string;\n change?: string | number;\n trend?: Trend;\n icon?: import('svelte').Snippet;\n actions?: import('svelte').Snippet;\n change_snippet?: import('svelte').Snippet<[{ trend: Trend; change: string | number }]>;\n class?: string;\n hintClass?: string;\n changeClass?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n }\n\n let {\n label,\n value,\n valueClass = '',\n labelClass = '',\n hint,\n change,\n trend,\n icon,\n actions,\n change_snippet,\n class: className = '',\n hintClass = '',\n changeClass = '',\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedby\n }: Props = $props();\n\n const labelId = generateCounterId('stat-label');\n const valueId = generateCounterId('stat-value');\n\n const trendText = $derived(trend === 'up' ? ' increased' : trend === 'down' ? ' decreased' : '');\n const inferredLabel = $derived(`${label}: ${value}${trendText}`);\n</script>\n\n<article\n class={className}\n data-trend={trend}\n {...mergeAttrs(\n labelAttrs({\n label: ariaLabel,\n labelledby: labelId,\n describedby: ariaDescribedby ?? valueId\n })\n )}\n>\n {#if icon}{@render icon()}{/if}\n <div>\n <div id={labelId} class={labelClass}>{label}</div>\n <div id={valueId} class={valueClass} {...labelAttrs({ label: inferredLabel })}>{value}</div>\n {#if change !== undefined}\n {#if change_snippet}\n {@render change_snippet({ trend: trend ?? 'flat', change })}\n {:else}\n <div class={changeClass} data-trend={trend}>{change}</div>\n {/if}\n {/if}\n {#if hint}<div class={hintClass}>{hint}</div>{/if}\n </div>\n {#if actions}{@render actions()}{/if}\n</article>\n",
12043
12048
  "index.ts": "export { default as StatCard } from './StatCard.svelte';\n"
12044
12049
  }
12045
12050
  },
@@ -12278,8 +12283,6 @@ var BUNDLED_DATA = {
12278
12283
  const hasChildren = $derived(!!children);
12279
12284
  const expanded = $derived(ctx.isExpanded(id));
12280
12285
  const selected = $derived(ctx.isSelected(id));
12281
- const focused = $derived(ctx.focused() === id);
12282
-
12283
12286
  let itemEl = $state<HTMLLIElement | null>(null);
12284
12287
 
12285
12288
  function onClick(e: MouseEvent) {
@@ -12302,7 +12305,6 @@ var BUNDLED_DATA = {
12302
12305
  }
12303
12306
  </script>
12304
12307
 
12305
- <!-- svelte-ignore a11y_click_events_have_key_events -->
12306
12308
  <li
12307
12309
  bind:this={itemEl}
12308
12310
  role="treeitem"
@@ -12726,7 +12728,7 @@ var BUNDLED_DATA = {
12726
12728
  onkeydown={onMenuKey}
12727
12729
  {@attach menuRef}
12728
12730
  >
12729
- {#each items as it, i}
12731
+ {#each items as it, i (i)}
12730
12732
  {#if it.separator}
12731
12733
  <div role="separator" class={separatorClass}></div>
12732
12734
  {:else if item}
@@ -13939,7 +13941,6 @@ var BUNDLED_DATA = {
13939
13941
  }
13940
13942
  </script>
13941
13943
 
13942
- <!-- svelte-ignore a11y_no_static_element_interactions -->
13943
13944
  {#if as === 'span'}
13944
13945
  <span
13945
13946
  class={className}
@@ -14240,7 +14241,7 @@ var BUNDLED_DATA = {
14240
14241
  "category": "interactive",
14241
14242
  "slug": "resizable",
14242
14243
  "files": {
14243
- "Resizable.svelte": "<script lang=\"ts\">\n import { labelAttrs, interactiveStateAttrs, widgetAttrs, mergeAttrs } from '$utils/a11y/index.js';\n\n type Side = 'right' | 'bottom' | 'left' | 'top';\n\n interface Props {\n children?: import('svelte').Snippet;\n size?: number;\n minSize?: number;\n maxSize?: number;\n side?: Side;\n step?: number;\n largeStep?: number;\n disabled?: boolean;\n class?: string;\n handleClass?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n onResize?: (size: number) => void;\n }\n\n let {\n children,\n size = $bindable(200),\n minSize = 50,\n maxSize = Number.POSITIVE_INFINITY,\n side = 'right',\n step = 8,\n largeStep = 32,\n disabled = false,\n class: className = '',\n handleClass = '',\n 'aria-label': ariaLabel = 'Resize',\n 'aria-labelledby': ariaLabelledby,\n onResize\n }: Props = $props();\n\n const axis = $derived<'x' | 'y'>(side === 'left' || side === 'right' ? 'x' : 'y');\n const orientation = $derived<'vertical' | 'horizontal'>(axis === 'x' ? 'vertical' : 'horizontal');\n\n let dragging = $state(false);\n let lastCoord = 0;\n\n function clamp(v: number): number {\n const max = Number.isFinite(maxSize) ? maxSize : v;\n return Math.min(max, Math.max(minSize, v));\n }\n\n function commit(v: number) {\n const next = clamp(v);\n if (next !== size) {\n size = next;\n onResize?.(next);\n }\n }\n\n function onPointerDown(e: PointerEvent) {\n if (disabled) return;\n e.preventDefault();\n dragging = true;\n lastCoord = axis === 'x' ? e.clientX : e.clientY;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: PointerEvent) {\n if (!dragging) return;\n const cur = axis === 'x' ? e.clientX : e.clientY;\n let delta = cur - lastCoord;\n if (side === 'left' || side === 'top') delta = -delta;\n lastCoord = cur;\n if (delta === 0) return;\n commit(size + delta);\n }\n\n function onPointerUp(e: PointerEvent) {\n if (!dragging) return;\n dragging = false;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n }\n\n function onKeydown(e: KeyboardEvent) {\n if (disabled) return;\n const incKey = axis === 'x' ? 'ArrowRight' : 'ArrowDown';\n const decKey = axis === 'x' ? 'ArrowLeft' : 'ArrowUp';\n let delta = 0;\n\n if (e.key === incKey) delta = step;\n else if (e.key === decKey) delta = -step;\n else if (e.key === 'PageDown') delta = largeStep;\n else if (e.key === 'PageUp') delta = -largeStep;\n else if (e.key === 'Home') {\n e.preventDefault();\n commit(minSize);\n return;\n } else if (e.key === 'End') {\n e.preventDefault();\n if (Number.isFinite(maxSize)) commit(maxSize);\n return;\n } else {\n return;\n }\n\n e.preventDefault();\n commit(size + delta);\n }\n\n const containerStyle = $derived(axis === 'x' ? `width:${size}px` : `height:${size}px`);\n</script>\n\n<div\n class={className}\n style={containerStyle}\n data-side={side}\n data-dragging={dragging || undefined}\n>\n {#if children}{@render children()}{/if}\n <!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n <div\n role=\"separator\"\n tabindex={disabled ? -1 : 0}\n data-dragging={dragging || undefined}\n data-side={side}\n class={handleClass}\n onpointerdown={onPointerDown}\n onpointermove={onPointerMove}\n onpointerup={onPointerUp}\n onpointercancel={onPointerUp}\n onkeydown={onKeydown}\n {...mergeAttrs(\n labelAttrs({ label: ariaLabel, labelledby: ariaLabelledby }),\n interactiveStateAttrs({ disabled }),\n widgetAttrs({\n orientation,\n valuenow: size,\n valuemin: minSize,\n valuemax: Number.isFinite(maxSize) ? maxSize : undefined\n })\n )}\n ></div>\n</div>\n",
14244
+ "Resizable.svelte": "<script lang=\"ts\">\n import { labelAttrs, interactiveStateAttrs, widgetAttrs, mergeAttrs } from '$utils/a11y/index.js';\n\n type Side = 'right' | 'bottom' | 'left' | 'top';\n\n interface Props {\n children?: import('svelte').Snippet;\n size?: number;\n minSize?: number;\n maxSize?: number;\n side?: Side;\n step?: number;\n largeStep?: number;\n disabled?: boolean;\n class?: string;\n handleClass?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n onResize?: (size: number) => void;\n }\n\n let {\n children,\n size = $bindable(200),\n minSize = 50,\n maxSize = Number.POSITIVE_INFINITY,\n side = 'right',\n step = 8,\n largeStep = 32,\n disabled = false,\n class: className = '',\n handleClass = '',\n 'aria-label': ariaLabel = 'Resize',\n 'aria-labelledby': ariaLabelledby,\n onResize\n }: Props = $props();\n\n const axis = $derived<'x' | 'y'>(side === 'left' || side === 'right' ? 'x' : 'y');\n const orientation = $derived<'vertical' | 'horizontal'>(axis === 'x' ? 'vertical' : 'horizontal');\n\n let dragging = $state(false);\n let lastCoord = 0;\n\n function clamp(v: number): number {\n const max = Number.isFinite(maxSize) ? maxSize : v;\n return Math.min(max, Math.max(minSize, v));\n }\n\n function commit(v: number) {\n const next = clamp(v);\n if (next !== size) {\n size = next;\n onResize?.(next);\n }\n }\n\n function onPointerDown(e: PointerEvent) {\n if (disabled) return;\n e.preventDefault();\n dragging = true;\n lastCoord = axis === 'x' ? e.clientX : e.clientY;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: PointerEvent) {\n if (!dragging) return;\n const cur = axis === 'x' ? e.clientX : e.clientY;\n let delta = cur - lastCoord;\n if (side === 'left' || side === 'top') delta = -delta;\n lastCoord = cur;\n if (delta === 0) return;\n commit(size + delta);\n }\n\n function onPointerUp(e: PointerEvent) {\n if (!dragging) return;\n dragging = false;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n }\n\n function onKeydown(e: KeyboardEvent) {\n if (disabled) return;\n const incKey = axis === 'x' ? 'ArrowRight' : 'ArrowDown';\n const decKey = axis === 'x' ? 'ArrowLeft' : 'ArrowUp';\n if (e.key === 'Home') {\n e.preventDefault();\n commit(minSize);\n return;\n } else if (e.key === 'End') {\n e.preventDefault();\n if (Number.isFinite(maxSize)) commit(maxSize);\n return;\n }\n let delta;\n if (e.key === incKey) delta = step;\n else if (e.key === decKey) delta = -step;\n else if (e.key === 'PageDown') delta = largeStep;\n else if (e.key === 'PageUp') delta = -largeStep;\n else return;\n\n e.preventDefault();\n commit(size + delta);\n }\n\n const containerStyle = $derived(axis === 'x' ? `width:${size}px` : `height:${size}px`);\n</script>\n\n<div\n class={className}\n style={containerStyle}\n data-side={side}\n data-dragging={dragging || undefined}\n>\n {#if children}{@render children()}{/if}\n <!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n <div\n role=\"separator\"\n tabindex={disabled ? -1 : 0}\n data-dragging={dragging || undefined}\n data-side={side}\n class={handleClass}\n onpointerdown={onPointerDown}\n onpointermove={onPointerMove}\n onpointerup={onPointerUp}\n onpointercancel={onPointerUp}\n onkeydown={onKeydown}\n {...mergeAttrs(\n labelAttrs({ label: ariaLabel, labelledby: ariaLabelledby }),\n interactiveStateAttrs({ disabled }),\n widgetAttrs({\n orientation,\n valuenow: size,\n valuemin: minSize,\n valuemax: Number.isFinite(maxSize) ? maxSize : undefined\n })\n )}\n ></div>\n</div>\n",
14244
14245
  "index.ts": "export { default as Resizable } from './Resizable.svelte';\n"
14245
14246
  }
14246
14247
  },
@@ -14561,7 +14562,7 @@ var BUNDLED_DATA = {
14561
14562
  {#if children}{@render children()}{/if}
14562
14563
  </div>
14563
14564
  `,
14564
- "SplitViewHandle.svelte": "<script lang=\"ts\">\n import type { Attachment } from 'svelte/attachments';\n import { getSplitViewContext } from './SplitView.svelte';\n import { labelAttrs, interactiveStateAttrs, widgetAttrs, mergeAttrs } from '$utils/a11y/index.js';\n\n interface Props {\n class?: string;\n step?: number;\n largeStep?: number;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n }\n\n let {\n class: className = '',\n step = 2,\n largeStep = 10,\n 'aria-label': ariaLabel = 'Resize panes',\n 'aria-labelledby': ariaLabelledby\n }: Props = $props();\n\n const ctx = getSplitViewContext();\n let handleEl: HTMLElement | null = $state(null);\n let lastCoord = 0;\n let containerSize = 0;\n\n function findContainer(node: HTMLElement): HTMLElement {\n return (node.parentElement as HTMLElement) ?? node;\n }\n\n const attach: Attachment<HTMLDivElement> = (node) => {\n handleEl = node;\n return () => {\n handleEl = null;\n };\n };\n\n function onPointerDown(e: PointerEvent) {\n if (ctx.disabled()) return;\n e.preventDefault();\n ctx.setDragging(true);\n const horiz = ctx.orientation() === 'horizontal';\n lastCoord = horiz ? e.clientX : e.clientY;\n const container = handleEl ? findContainer(handleEl) : null;\n const rect = container?.getBoundingClientRect();\n containerSize = rect ? (horiz ? rect.width : rect.height) : 0;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: PointerEvent) {\n if (!ctx.dragging()) return;\n if (containerSize <= 0) return;\n const horiz = ctx.orientation() === 'horizontal';\n const cur = horiz ? e.clientX : e.clientY;\n const deltaPx = cur - lastCoord;\n lastCoord = cur;\n if (deltaPx === 0) return;\n const deltaPct = (deltaPx / containerSize) * 100;\n ctx.setSize(ctx.size() + deltaPct);\n }\n\n function onPointerUp(e: PointerEvent) {\n if (!ctx.dragging()) return;\n ctx.setDragging(false);\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n }\n\n function onKeydown(e: KeyboardEvent) {\n if (ctx.disabled()) return;\n const horiz = ctx.orientation() === 'horizontal';\n const incKey = horiz ? 'ArrowRight' : 'ArrowDown';\n const decKey = horiz ? 'ArrowLeft' : 'ArrowUp';\n let delta = 0;\n if (e.key === incKey) delta = step;\n else if (e.key === decKey) delta = -step;\n else if (e.key === 'PageDown') delta = largeStep;\n else if (e.key === 'PageUp') delta = -largeStep;\n else if (e.key === 'Home') {\n e.preventDefault();\n ctx.setSize(ctx.min());\n return;\n } else if (e.key === 'End') {\n e.preventDefault();\n ctx.setSize(ctx.max());\n return;\n } else {\n return;\n }\n e.preventDefault();\n ctx.setSize(ctx.size() + delta);\n }\n</script>\n\n<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n<div\n {@attach attach}\n role=\"separator\"\n tabindex={ctx.disabled() ? -1 : 0}\n data-dragging={ctx.dragging() || undefined}\n data-orientation={ctx.orientation()}\n class={className}\n onpointerdown={onPointerDown}\n onpointermove={onPointerMove}\n onpointerup={onPointerUp}\n onpointercancel={onPointerUp}\n onkeydown={onKeydown}\n {...mergeAttrs(\n labelAttrs({ label: ariaLabel, labelledby: ariaLabelledby }),\n interactiveStateAttrs({ disabled: ctx.disabled() }),\n widgetAttrs({\n orientation: ctx.orientation() === 'horizontal' ? 'vertical' : 'horizontal',\n valuenow: Math.round(ctx.size()),\n valuemin: ctx.min(),\n valuemax: ctx.max(),\n controls: `${ctx.firstPaneId} ${ctx.secondPaneId}`\n })\n )}\n></div>\n",
14565
+ "SplitViewHandle.svelte": "<script lang=\"ts\">\n import type { Attachment } from 'svelte/attachments';\n import { getSplitViewContext } from './SplitView.svelte';\n import { labelAttrs, interactiveStateAttrs, widgetAttrs, mergeAttrs } from '$utils/a11y/index.js';\n\n interface Props {\n class?: string;\n step?: number;\n largeStep?: number;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n }\n\n let {\n class: className = '',\n step = 2,\n largeStep = 10,\n 'aria-label': ariaLabel = 'Resize panes',\n 'aria-labelledby': ariaLabelledby\n }: Props = $props();\n\n const ctx = getSplitViewContext();\n let handleEl: HTMLElement | null = $state(null);\n let lastCoord = 0;\n let containerSize = 0;\n\n function findContainer(node: HTMLElement): HTMLElement {\n return (node.parentElement as HTMLElement) ?? node;\n }\n\n const attach: Attachment<HTMLDivElement> = (node) => {\n handleEl = node;\n return () => {\n handleEl = null;\n };\n };\n\n function onPointerDown(e: PointerEvent) {\n if (ctx.disabled()) return;\n e.preventDefault();\n ctx.setDragging(true);\n const horiz = ctx.orientation() === 'horizontal';\n lastCoord = horiz ? e.clientX : e.clientY;\n const container = handleEl ? findContainer(handleEl) : null;\n const rect = container?.getBoundingClientRect();\n containerSize = rect ? (horiz ? rect.width : rect.height) : 0;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: PointerEvent) {\n if (!ctx.dragging()) return;\n if (containerSize <= 0) return;\n const horiz = ctx.orientation() === 'horizontal';\n const cur = horiz ? e.clientX : e.clientY;\n const deltaPx = cur - lastCoord;\n lastCoord = cur;\n if (deltaPx === 0) return;\n const deltaPct = (deltaPx / containerSize) * 100;\n ctx.setSize(ctx.size() + deltaPct);\n }\n\n function onPointerUp(e: PointerEvent) {\n if (!ctx.dragging()) return;\n ctx.setDragging(false);\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n }\n\n function onKeydown(e: KeyboardEvent) {\n if (ctx.disabled()) return;\n const horiz = ctx.orientation() === 'horizontal';\n const incKey = horiz ? 'ArrowRight' : 'ArrowDown';\n const decKey = horiz ? 'ArrowLeft' : 'ArrowUp';\n if (e.key === 'Home') {\n e.preventDefault();\n ctx.setSize(ctx.min());\n return;\n } else if (e.key === 'End') {\n e.preventDefault();\n ctx.setSize(ctx.max());\n return;\n }\n let delta;\n if (e.key === incKey) delta = step;\n else if (e.key === decKey) delta = -step;\n else if (e.key === 'PageDown') delta = largeStep;\n else if (e.key === 'PageUp') delta = -largeStep;\n else return;\n e.preventDefault();\n ctx.setSize(ctx.size() + delta);\n }\n</script>\n\n<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<div\n {@attach attach}\n role=\"separator\"\n tabindex={ctx.disabled() ? -1 : 0}\n data-dragging={ctx.dragging() || undefined}\n data-orientation={ctx.orientation()}\n class={className}\n onpointerdown={onPointerDown}\n onpointermove={onPointerMove}\n onpointerup={onPointerUp}\n onpointercancel={onPointerUp}\n onkeydown={onKeydown}\n {...mergeAttrs(\n labelAttrs({ label: ariaLabel, labelledby: ariaLabelledby }),\n interactiveStateAttrs({ disabled: ctx.disabled() }),\n widgetAttrs({\n orientation: ctx.orientation() === 'horizontal' ? 'vertical' : 'horizontal',\n valuenow: Math.round(ctx.size()),\n valuemin: ctx.min(),\n valuemax: ctx.max(),\n controls: `${ctx.firstPaneId} ${ctx.secondPaneId}`\n })\n )}\n></div>\n",
14565
14566
  "SplitViewPane.svelte": "<script lang=\"ts\">\n import { getSplitViewContext } from './SplitView.svelte';\n import { labelAttrs } from '$utils/a11y/index.js';\n\n interface Props {\n children?: import('svelte').Snippet;\n side: 'first' | 'second';\n class?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n }\n\n let {\n children,\n side,\n class: className = '',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby\n }: Props = $props();\n\n const ctx = getSplitViewContext();\n\n const paneStyle = $derived.by(() => {\n const horiz = ctx.orientation() === 'horizontal';\n const size = ctx.size();\n const dim = horiz ? 'width' : 'height';\n const value = side === 'first' ? `${size}%` : `${100 - size}%`;\n return `${dim}:${value};flex:0 0 ${value};`;\n });\n\n const paneId = $derived(side === 'first' ? ctx.firstPaneId : ctx.secondPaneId);\n</script>\n\n<div\n id={paneId}\n role=\"group\"\n data-side={side}\n class={className}\n style={paneStyle}\n {...labelAttrs({ label: ariaLabel, labelledby: ariaLabelledby })}\n>\n {#if children}{@render children()}{/if}\n</div>\n",
14566
14567
  "index.ts": "export { default as SplitView } from './SplitView.svelte';\nexport { default as SplitViewPane } from './SplitViewPane.svelte';\nexport { default as SplitViewHandle } from './SplitViewHandle.svelte';\nexport { getSplitViewContext, setSplitViewContext } from './SplitView.svelte';\nexport type { SplitViewContext } from './SplitView.svelte';\n"
14567
14568
  }
@@ -14918,13 +14919,14 @@ var BUNDLED_DATA = {
14918
14919
  ],
14919
14920
  files: {
14920
14921
  "components/index.ts": "/**\n * UI Components\n * @module components\n */\n\n// Form Components\nexport { Button } from './form/button/index.js';\nexport { Input } from './form/input/index.js';\nexport { Checkbox } from './form/checkbox/index.js';\nexport { Radio } from './form/radio/index.js';\nexport { Textarea } from './form/textarea/index.js';\nexport {\n Select,\n SelectTrigger,\n SelectContent,\n SelectOption,\n getSelectContext,\n setSelectContext\n} from './form/select/index.js';\nexport type { SelectContext, SelectOptionEntry } from './form/select/index.js';\nexport { Fieldset } from './form/fieldset/index.js';\nexport { RadioGroup, getRadioGroup, setRadioGroup } from './form/radio-group/index.js';\nexport type { RadioGroupContext } from './form/radio-group/index.js';\nexport { Form } from './form/form/index.js';\nexport { FieldError } from './form/field-error/index.js';\nexport { Label } from './form/label/index.js';\nexport { Switch } from './form/switch/index.js';\nexport { Slider } from './form/slider/index.js';\nexport { FileInput } from './form/file-input/index.js';\nexport { SearchInput } from './form/search-input/index.js';\nexport { NumberInput } from './form/number-input/index.js';\nexport { InputGroup, InputAddon } from './form/input-group/index.js';\nexport { Rating } from './form/rating/index.js';\nexport { IconButton } from './form/icon-button/index.js';\nexport { ToggleButton } from './form/toggle-button/index.js';\nexport { AutoComplete } from './form/auto-complete/index.js';\nexport type { AutoCompleteOption } from './form/auto-complete/index.js';\nexport { Calendar } from './form/calendar/index.js';\nexport type { CalendarDay, CalendarView } from './form/calendar/index.js';\nexport { DatePicker } from './form/date-picker/index.js';\nexport { DateRange } from './form/date-range/index.js';\nexport type { DateRangeValue } from './form/date-range/index.js';\nexport { DateRangePicker } from './form/date-range-picker/index.js';\nexport { TimePicker } from './form/time-picker/index.js';\nexport type { Time } from './form/time-picker/index.js';\nexport { ColorPicker } from './form/color-picker/index.js';\n\n// Navigation Components\nexport {\n Tabs,\n TabList,\n Tab,\n TabPanel,\n getTabsContext,\n setTabsContext\n} from './navigation/tabs/index.js';\nexport type { TabsContext } from './navigation/tabs/index.js';\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n getAccordionRoot,\n setAccordionRoot,\n getAccordionItem,\n setAccordionItem\n} from './navigation/accordion/index.js';\nexport type {\n AccordionRootContext,\n AccordionItemContext,\n AccordionType\n} from './navigation/accordion/index.js';\nexport { Breadcrumb, BreadcrumbItem, BreadcrumbSeparator } from './navigation/breadcrumb/index.js';\nexport { Pagination } from './navigation/pagination/index.js';\nexport { Link } from './navigation/link/index.js';\nexport { ExternalLink } from './navigation/external-link/index.js';\nexport { Navigation } from './navigation/navigation/index.js';\nexport { SubMenu } from './navigation/sub-menu/index.js';\nexport type { SubMenuItem } from './navigation/sub-menu/index.js';\nexport {\n Menu,\n MenuTrigger,\n MenuContent,\n MenuItem,\n getMenuContext,\n setMenuContext\n} from './navigation/menu/index.js';\nexport type { MenuContext, MenuItemEntry } from './navigation/menu/index.js';\nexport {\n Stepper,\n StepperStep,\n getStepperContext,\n setStepperContext\n} from './navigation/stepper/index.js';\nexport type { StepperContext } from './navigation/stepper/index.js';\nexport {\n CommandMenu,\n CommandMenuTrigger,\n CommandMenuContent,\n CommandMenuInput,\n CommandMenuList,\n CommandMenuItem,\n CommandMenuGroup,\n CommandMenuEmpty,\n getCommandMenuContext,\n setCommandMenuContext\n} from './navigation/command-menu/index.js';\nexport type { CommandMenuContext, CommandItemEntry } from './navigation/command-menu/index.js';\n\n// Feedback Components\nexport { Badge } from './feedback/badge/index.js';\nexport { Tag } from './feedback/tag/index.js';\nexport { Spinner } from './feedback/spinner/index.js';\nexport { Skeleton } from './feedback/skeleton/index.js';\nexport { Progress } from './feedback/progress/index.js';\nexport { Alert } from './feedback/alert/index.js';\nexport { Callout } from './feedback/callout/index.js';\nexport { Banner } from './feedback/banner/index.js';\nexport { InlineMessage } from './feedback/inline-message/index.js';\nexport { LiveRegion } from './feedback/live-region/index.js';\nexport { NotificationBell } from './feedback/notification-bell/index.js';\nexport {\n Toaster,\n ToasterStore,\n Toast,\n createToaster,\n getToasterContext,\n setToasterContext\n} from './feedback/toast/index.js';\nexport type {\n Placement as ToastPlacement,\n ToasterProps,\n AddToastArgs,\n UpdateToastArgs,\n ToastType,\n HoverBehavior,\n TabHiddenBehavior\n} from './feedback/toast/index.js';\n\n// Display Components\nexport { Divider } from './display/divider/index.js';\nexport { Kbd } from './display/kbd/index.js';\nexport { AspectRatio } from './display/aspect-ratio/index.js';\nexport { Frame } from './display/frame/index.js';\nexport { Timestamp } from './display/timestamp/index.js';\nexport { CodeBlock } from './display/code-block/index.js';\nexport { StatCard } from './display/stat-card/index.js';\nexport { Avatar } from './display/avatar/index.js';\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n getCardContext,\n setCardContext\n} from './display/card/index.js';\nexport type { CardContext } from './display/card/index.js';\nexport { Image } from './display/image/index.js';\nexport { List, ListItem } from './display/list/index.js';\nexport { DataList, DataListTerm, DataListDescription } from './display/data-list/index.js';\nexport {\n Table,\n TableCaption,\n TableHead,\n TableBody,\n TableFoot,\n TableRow,\n TableHeader,\n TableCell\n} from './display/table/index.js';\nexport {\n TreeView,\n TreeItem,\n getTreeViewContext,\n setTreeViewContext\n} from './display/tree-view/index.js';\nexport type { TreeViewContext } from './display/tree-view/index.js';\nexport { Timeline, TimelineItem } from './display/timeline/index.js';\nexport { Compare } from './display/compare/index.js';\nexport {\n Carousel,\n CarouselSlides,\n CarouselSlide,\n CarouselPrev,\n CarouselNext,\n CarouselIndicators,\n getCarouselContext,\n setCarouselContext\n} from './display/carousel/index.js';\nexport type { CarouselContext } from './display/carousel/index.js';\n\n// Overlay Components\nexport {\n Modal,\n ModalTrigger,\n ModalContent,\n ModalTitle,\n ModalDescription,\n ModalClose,\n getModalContext,\n setModalContext\n} from './overlay/modal/index.js';\nexport type { ModalContext } from './overlay/modal/index.js';\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose\n} from './overlay/dialog/index.js';\nexport {\n Drawer,\n DrawerTrigger,\n DrawerContent,\n DrawerTitle,\n DrawerDescription,\n DrawerClose\n} from './overlay/drawer/index.js';\nexport type { DrawerSide } from './overlay/drawer/index.js';\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n getTooltipContext,\n setTooltipContext\n} from './overlay/tooltip/index.js';\nexport type { TooltipContext } from './overlay/tooltip/index.js';\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n getPopoverContext,\n setPopoverContext\n} from './overlay/popover/index.js';\nexport type { PopoverContext } from './overlay/popover/index.js';\nexport {\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n getDropdownContext,\n setDropdownContext\n} from './overlay/dropdown/index.js';\nexport type { DropdownContext, DropdownItemEntry } from './overlay/dropdown/index.js';\nexport {\n Sheet,\n SheetContent,\n SheetTrigger,\n SheetTitle,\n SheetDescription,\n SheetClose\n} from './overlay/sheet/index.js';\nexport type { SheetSide } from './overlay/sheet/index.js';\nexport { Overlay } from './overlay/overlay/index.js';\nexport { Lightbox } from './overlay/lightbox/index.js';\nexport type { LightboxImage } from './overlay/lightbox/index.js';\nexport { ContextMenu } from './overlay/context-menu/index.js';\nexport type { ContextMenuItemEntry } from './overlay/context-menu/index.js';\n\n// Layout Components\nexport { Stack } from './layout/stack/index.js';\nexport { Flex } from './layout/flex/index.js';\nexport { Grid } from './layout/grid/index.js';\nexport { Container } from './layout/container/index.js';\nexport { Spacer } from './layout/spacer/index.js';\nexport { Columns } from './layout/columns/index.js';\n\n// Interactive Components\nexport { Sortable } from './interactive/sortable/index.js';\nexport { Swipeable } from './interactive/swipeable/index.js';\nexport type { SwipeDirection } from './interactive/swipeable/index.js';\nexport { Resizable } from './interactive/resizable/index.js';\nexport {\n SplitView,\n SplitViewPane,\n SplitViewHandle,\n getSplitViewContext,\n setSplitViewContext\n} from './interactive/split-view/index.js';\nexport type { SplitViewContext } from './interactive/split-view/index.js';\nexport { Draggable } from './interactive/draggable/index.js';\nexport type { DraggableEvent } from './interactive/draggable/index.js';\nexport { Droppable } from './interactive/droppable/index.js';\nexport type { DroppableEvent } from './interactive/droppable/index.js';\nexport { InfiniteScroll } from './interactive/infinite-scroll/index.js';\nexport { VirtualList } from './interactive/virtual-list/index.js';\n\n// Utility Components\nexport { VisuallyHidden } from './utility/visually-hidden/index.js';\nexport { Portal } from './utility/portal/index.js';\nexport { FocusTrap } from './utility/focus-trap/index.js';\nexport { ScreenReaderOnly } from './utility/screen-reader-only/index.js';\nexport { Conditional } from './utility/conditional/index.js';\n",
14921
- "utils/a11y/aria.ts": "/**\n * ARIA attribute utilities for WCAG compliance\n */\nimport type {\n LabelConfig,\n ValidationConfig,\n InteractiveStateConfig,\n WidgetConfig,\n AriaHaspopup,\n AriaLive,\n AriaOrientation\n} from '$types/index.js';\n\n/**\n * Builds ARIA attributes object from a partial record, filtering out undefined values\n * and converting boolean/number/undefined values to strings for HTML attributes\n *\n * @example\n * ```ts\n * const attrs = buildAriaAttrs({\n * 'aria-label': 'Close',\n * 'aria-expanded': false,\n * 'aria-valuenow': 50,\n * 'aria-hidden': undefined\n * });\n * // { 'aria-label': 'Close', 'aria-expanded': 'false', 'aria-valuenow': '50' }\n * ```\n */\nexport function buildAriaAttrs(\n attrs: Record<string, string | number | boolean | undefined>\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined) {\n result[key] = String(value);\n }\n }\n return result;\n}\n\n/**\n * Creates ARIA attributes for labeling and describing elements\n *\n * @example\n * ```svelte\n * <Input\n * id=\"email\"\n * {...labelAttrs({ label: 'Email address' })}\n * />\n * ```\n */\nexport function labelAttrs(options: LabelConfig = {}) {\n return buildAriaAttrs({\n 'aria-label': options.label,\n 'aria-labelledby': options.labelledby,\n 'aria-describedby': options.describedby\n });\n}\n\n/**\n * Creates ARIA attributes for form validation states\n *\n * @example\n * ```svelte\n * <Input\n * bind:value={email}\n * {...validationAttrs({ invalid: !isValid, errormessage: 'email-error' })}\n * />\n * <p id=\"email-error\" role=\"alert\">{error}</p>\n * ```\n */\nexport function validationAttrs(options: ValidationConfig = {}) {\n return buildAriaAttrs({\n 'aria-invalid': options.invalid,\n 'aria-required': options.required,\n 'aria-errormessage': options.errormessage\n });\n}\n\n/**\n * Creates ARIA attributes for interactive element states\n *\n * @example\n * ```svelte\n * <Button\n * onclick={() => pressed = !pressed}\n * {...interactiveStateAttrs({ pressed })}\n * >\n * Toggle\n * </Button>\n * ```\n */\nexport function interactiveStateAttrs(options: InteractiveStateConfig = {}) {\n return buildAriaAttrs({\n 'aria-pressed': options.pressed,\n 'aria-expanded': options.expanded,\n 'aria-checked': options.checked,\n 'aria-selected': options.selected,\n 'aria-disabled': options.disabled,\n 'aria-busy': options.busy,\n 'aria-current': options.current\n });\n}\n\n/**\n * Creates ARIA attributes for complex widgets and roles\n *\n * @example\n * ```svelte\n * <div role=\"slider\" {...widgetAttrs({\n * valuenow: value,\n * valuemin: 0,\n * valuemax: 100\n * })} />\n * ```\n */\nexport function widgetAttrs(options: WidgetConfig = {}) {\n return buildAriaAttrs({\n 'aria-controls': options.controls,\n 'aria-haspopup': options.haspopup,\n 'aria-valuenow': options.valuenow,\n 'aria-valuetext': options.valuetext,\n 'aria-valuemin': options.valuemin,\n 'aria-valuemax': options.valuemax,\n 'aria-live': options.live,\n 'aria-activedescendant': options.activedescendant,\n 'aria-posinset': options.posinset,\n 'aria-setsize': options.setsize,\n 'aria-level': options.level,\n 'aria-orientation': options.orientation\n });\n}\n\n/**\n * Combines multiple ARIA attribute objects into one\n * Useful for composing different accessibility patterns\n *\n * @example\n * ```svelte\n * <button {...mergeAttrs(\n * labelAttrs({ label: 'Menu' }),\n * interactiveStateAttrs({ expanded: isOpen }),\n * widgetAttrs({ haspopup: 'menu', controls: 'menu-id' })\n * )}>\n * Menu\n * </button>\n * ```\n */\nexport function mergeAttrs(...attrSets: Record<string, string>[]): Record<string, string> {\n return Object.assign({}, ...attrSets);\n}\n",
14922
+ "utils/a11y/aria.ts": "/**\n * ARIA attribute utilities for WCAG compliance\n */\nimport type {\n LabelConfig,\n ValidationConfig,\n InteractiveStateConfig,\n WidgetConfig\n} from '$types/index.js';\n\n/**\n * Builds ARIA attributes object from a partial record, filtering out undefined values\n * and converting boolean/number/undefined values to strings for HTML attributes\n *\n * @example\n * ```ts\n * const attrs = buildAriaAttrs({\n * 'aria-label': 'Close',\n * 'aria-expanded': false,\n * 'aria-valuenow': 50,\n * 'aria-hidden': undefined\n * });\n * // { 'aria-label': 'Close', 'aria-expanded': 'false', 'aria-valuenow': '50' }\n * ```\n */\nexport function buildAriaAttrs(\n attrs: Record<string, string | number | boolean | undefined>\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined) {\n result[key] = String(value);\n }\n }\n return result;\n}\n\n/**\n * Creates ARIA attributes for labeling and describing elements\n *\n * @example\n * ```svelte\n * <Input\n * id=\"email\"\n * {...labelAttrs({ label: 'Email address' })}\n * />\n * ```\n */\nexport function labelAttrs(options: LabelConfig = {}) {\n return buildAriaAttrs({\n 'aria-label': options.label,\n 'aria-labelledby': options.labelledby,\n 'aria-describedby': options.describedby\n });\n}\n\n/**\n * Creates ARIA attributes for form validation states\n *\n * @example\n * ```svelte\n * <Input\n * bind:value={email}\n * {...validationAttrs({ invalid: !isValid, errormessage: 'email-error' })}\n * />\n * <p id=\"email-error\" role=\"alert\">{error}</p>\n * ```\n */\nexport function validationAttrs(options: ValidationConfig = {}) {\n return buildAriaAttrs({\n 'aria-invalid': options.invalid,\n 'aria-required': options.required,\n 'aria-errormessage': options.errormessage\n });\n}\n\n/**\n * Creates ARIA attributes for interactive element states\n *\n * @example\n * ```svelte\n * <Button\n * onclick={() => pressed = !pressed}\n * {...interactiveStateAttrs({ pressed })}\n * >\n * Toggle\n * </Button>\n * ```\n */\nexport function interactiveStateAttrs(options: InteractiveStateConfig = {}) {\n return buildAriaAttrs({\n 'aria-pressed': options.pressed,\n 'aria-expanded': options.expanded,\n 'aria-checked': options.checked,\n 'aria-selected': options.selected,\n 'aria-disabled': options.disabled,\n 'aria-busy': options.busy,\n 'aria-current': options.current\n });\n}\n\n/**\n * Creates ARIA attributes for complex widgets and roles\n *\n * @example\n * ```svelte\n * <div role=\"slider\" {...widgetAttrs({\n * valuenow: value,\n * valuemin: 0,\n * valuemax: 100\n * })} />\n * ```\n */\nexport function widgetAttrs(options: WidgetConfig = {}) {\n return buildAriaAttrs({\n 'aria-controls': options.controls,\n 'aria-haspopup': options.haspopup,\n 'aria-valuenow': options.valuenow,\n 'aria-valuetext': options.valuetext,\n 'aria-valuemin': options.valuemin,\n 'aria-valuemax': options.valuemax,\n 'aria-live': options.live,\n 'aria-activedescendant': options.activedescendant,\n 'aria-posinset': options.posinset,\n 'aria-setsize': options.setsize,\n 'aria-level': options.level,\n 'aria-orientation': options.orientation\n });\n}\n\n/**\n * Combines multiple ARIA attribute objects into one\n * Useful for composing different accessibility patterns\n *\n * @example\n * ```svelte\n * <button {...mergeAttrs(\n * labelAttrs({ label: 'Menu' }),\n * interactiveStateAttrs({ expanded: isOpen }),\n * widgetAttrs({ haspopup: 'menu', controls: 'menu-id' })\n * )}>\n * Menu\n * </button>\n * ```\n */\nexport function mergeAttrs(...attrSets: Record<string, string>[]): Record<string, string> {\n return Object.assign({}, ...attrSets);\n}\n",
14922
14923
  "utils/a11y/focus.ts": "/**\n * Focus management utilities for accessibility\n */\n\n/**\n * Traps focus within a container (for modals, dialogs, dropdowns)\n * Returns a cleanup function that removes the event listener\n *\n * @example\n * ```svelte\n * <script>\n * import { focus } from 'alus-ui';\n * let modalElement;\n *\n * function openModal() {\n * modalElement.showModal();\n * const cleanup = focus.trap(modalElement);\n * // Store cleanup to call when modal closes\n * }\n * </script>\n *\n * <dialog bind:this={modalElement}>\n * <!-- Content -->\n * </dialog>\n * ```\n */\nexport function trap(container: HTMLElement): () => void {\n const focusableElements = container.querySelectorAll(\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n const handleTabKey = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n e.preventDefault();\n lastElement?.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n e.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n container.addEventListener('keydown', handleTabKey);\n return () => container.removeEventListener('keydown', handleTabKey);\n}\n\n/**\n * Moves focus to first focusable element in container\n *\n * @example\n * ```svelte\n * <script>\n * import { focus } from 'alus-ui';\n * let dialogElement;\n *\n * function open() {\n * dialogElement.showModal();\n * focus.focusFirst(dialogElement);\n * }\n * </script>\n * ```\n */\nexport function focusFirst(container: HTMLElement): void {\n const focusable = container.querySelector<HTMLElement>(\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n );\n focusable?.focus();\n}\n\n/**\n * Moves focus to last focusable element in container\n */\nexport function focusLast(container: HTMLElement): void {\n const focusable = container.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n );\n const last = focusable[focusable.length - 1];\n last?.focus();\n}\n\n/**\n * Checks if an element can receive focus\n */\nexport function isFocusable(element: HTMLElement): boolean {\n if (\n element instanceof HTMLButtonElement ||\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n ) {\n return !element.disabled && element.tabIndex >= 0;\n }\n\n if (element instanceof HTMLAnchorElement) {\n return element.href !== '';\n }\n\n return element.tabIndex >= 0;\n}\n",
14923
14924
  "utils/a11y/id.ts": "/**\n * ID generation utilities for accessibility associations\n */\n\nlet counter = 0;\n\n/**\n * Creates a unique ID for accessibility associations\n * Useful for generating IDs for aria-describedby, aria-labelledby, etc.\n *\n * @param prefix - Descriptive prefix for the ID (e.g., 'label', 'desc', 'error')\n * @returns A unique ID string\n *\n * @example\n * ```svelte\n * <script>\n * import { generateId } from 'alus-ui';\n *\n * const labelId = generateId('label');\n * const errorId = generateId('error');\n * </script>\n *\n * <Input id=\"email\" {...labelAttrs({ labelledby: labelId, describedby: errorId })} />\n * <label {for}>Email</label>\n * <p id={errorId} role=\"alert\">{error}</p>\n * ```\n */\nexport function generateId(prefix: string): string {\n return `alus-${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Creates a sequential ID (useful for lists, radios, checkboxes)\n *\n * @param prefix - Descriptive prefix for the ID\n * @returns A sequential ID string\n *\n * @example\n * ```svelte\n * {#each items as item, i}\n * <Radio id={generateSequentialId('option', i)} />\n * {/each}\n * ```\n */\nexport function generateSequentialId(prefix: string, index: number): string {\n return `alus-${prefix}-${index}`;\n}\n\n/**\n * Creates a counter-based ID (guaranteed unique per session)\n *\n * @param prefix - Descriptive prefix for the ID\n * @returns A unique counter-based ID\n */\nexport function generateCounterId(prefix: string): string {\n return `alus-${prefix}-${counter++}`;\n}\n\n/**\n * ID generation utilities object\n */\nexport const id = {\n generate: generateId,\n sequential: generateSequentialId,\n counter: generateCounterId\n};\n",
14924
14925
  "utils/a11y/keyboard.ts": "/**\n * Keyboard event utilities for accessibility\n */\n\n/**\n * Checks if Enter or Space was pressed (for button-like behavior)\n *\n * @example\n * ```svelte\n * <script>\n * import { keyboard } from 'alus-ui';\n *\n * function handleKeydown(e: KeyboardEvent) {\n * if (keyboard.isActivationKey(e)) {\n * // Activate button\n * }\n * }\n * </script>\n * ```\n */\nexport function isActivationKey(event: KeyboardEvent): boolean {\n return event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar';\n}\n\n/**\n * Checks if Escape was pressed\n */\nexport function isEscape(event: KeyboardEvent): boolean {\n return event.key === 'Escape';\n}\n\n/**\n * Checks if Arrow key was pressed\n */\nexport function isArrow(event: KeyboardEvent): boolean {\n return (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight'\n );\n}\n\n/**\n * Checks if Home or End was pressed\n */\nexport function isHomeEnd(event: KeyboardEvent): boolean {\n return event.key === 'Home' || event.key === 'End';\n}\n\n/**\n * Checks if Page Up or Page Down was pressed\n */\nexport function isPageUpDown(event: KeyboardEvent): boolean {\n return event.key === 'PageUp' || event.key === 'PageDown';\n}\n\n/**\n * Prevents default behavior for activation keys (Space key scrolling)\n *\n * @example\n * ```svelte\n * <div\n * role=\"button\"\n * onkeydown={(e) => {\n * keyboard.preventActivation(e);\n * if (keyboard.isActivationKey(e)) {\n * // Handle activation\n * }\n * }}\n * >\n * Custom Button\n * </div>\n * ```\n */\nexport function preventActivation(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n }\n}\n\n/**\n * Gets the direction from an arrow key event\n */\nexport function getArrowDirection(event: KeyboardEvent): 'up' | 'down' | 'left' | 'right' | null {\n switch (event.key) {\n case 'ArrowUp':\n return 'up';\n case 'ArrowDown':\n return 'down';\n case 'ArrowLeft':\n return 'left';\n case 'ArrowRight':\n return 'right';\n default:\n return null;\n }\n}\n\n/**\n * Keyboard event handler utility object\n */\nexport const keyboard = {\n isActivationKey,\n isEscape,\n isArrow,\n isHomeEnd,\n isPageUpDown,\n preventActivation,\n getArrowDirection\n};\n",
14925
14926
  "utils/a11y/index.ts": "/**\n * Accessibility utilities for WCAG compliance and ARIA attributes\n * @module a11y\n */\n\n// Export all ARIA utilities\nexport * from './aria.js';\n\n// Export focus management\nexport * from './focus.js';\n\n// Export keyboard utilities\nexport * from './keyboard.js';\n\n// Export ID generation\nexport * from './id.js';\n",
14926
14927
  "utils/form/state.ts": "/**\n * Form field state management\n * @module form/state\n */\n\n/**\n * Form field state interface\n */\nexport interface FormFieldState<T = string> {\n value: T;\n error: string | undefined;\n touched: boolean;\n dirty: boolean;\n}\n\n/**\n * Create a reactive form field state\n * @param initialValue - Initial value for the field\n * @returns Form field state object\n *\n * @example\n * ```svelte\n * <script>\n * import { createFormField } from 'alus-ui/utils/form';\n *\n * let email = createFormField('');\n * </script>\n *\n * <Input\n * bind:value={email.value}\n * aria-invalid={email.error !== undefined}\n * onblur={() => email.touched = true}\n * />\n *\n * {#if email.error && email.touched}\n * <p class=\"error\">{email.error}</p>\n * {/if}\n * ```\n */\nexport function createFormField<T = string>(initialValue: T): FormFieldState<T> {\n return {\n value: initialValue,\n error: undefined,\n touched: false,\n dirty: false\n };\n}\n\n/**\n * Form state manager for multiple fields\n */\nexport interface FormState<T extends Record<string, unknown>> {\n values: T;\n errors: Record<keyof T, string | undefined>;\n touched: Record<keyof T, boolean>;\n dirty: Record<keyof T, boolean>;\n}\n\n/**\n * Create a form state manager\n * @param initialValues - Initial values for all fields\n * @returns Form state object\n *\n * @example\n * ```svelte\n * <script>\n * import { createFormState } from 'alus-ui/utils/form';\n *\n * let form = createFormState({\n * email: '',\n * password: '',\n * terms: false\n * });\n * </script>\n *\n * <Input bind:value={form.values.email} />\n * <Input bind:value={form.values.password} />\n * ```\n */\nexport function createFormState<T extends Record<string, unknown>>(initialValues: T): FormState<T> {\n const keys = Object.keys(initialValues) as Array<keyof T>;\n\n const touched = {} as Record<keyof T, boolean>;\n const dirty = {} as Record<keyof T, boolean>;\n const errors = {} as Record<keyof T, string | undefined>;\n\n for (const key of keys) {\n touched[key] = false;\n dirty[key] = false;\n errors[key] = undefined;\n }\n\n return {\n values: initialValues,\n errors,\n touched,\n dirty\n };\n}\n\n/**\n * Check if form has any errors\n * @param form - Form state object\n * @returns Whether any field has an error\n */\nexport function hasFormErrors<T extends Record<string, unknown>>(form: FormState<T>): boolean {\n return Object.values(form.errors).some((error) => error !== undefined);\n}\n\n/**\n * Check if form is valid (no errors and all required fields touched)\n * @param form - Form state object\n * @returns Whether form is valid\n */\nexport function isFormValid<T extends Record<string, unknown>>(form: FormState<T>): boolean {\n return !hasFormErrors(form) && Object.values(form.touched).every((t) => t);\n}\n\n/**\n * Reset form to initial state\n * @param form - Form state object\n * @param initialValues - Initial values to reset to\n */\nexport function resetForm<T extends Record<string, unknown>>(\n form: FormState<T>,\n initialValues: T\n): void {\n for (const key of Object.keys(initialValues) as Array<keyof T>) {\n (form.values as Record<keyof T, unknown>)[key] = initialValues[key];\n form.errors[key] = undefined;\n form.touched[key] = false;\n form.dirty[key] = false;\n }\n}\n",
14927
14928
  "demos/accordion/+page.svelte": `<script lang="ts">
14929
+ import { resolve } from '$app/paths';
14928
14930
  import { CaretLeft, Plus } from 'phosphor-svelte';
14929
14931
  import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from 'alus-ui';
14930
14932
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -14949,7 +14951,7 @@ var BUNDLED_DATA = {
14949
14951
  </svelte:head>
14950
14952
 
14951
14953
  <a
14952
- href="/"
14954
+ href={resolve('/')}
14953
14955
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
14954
14956
  >
14955
14957
  <CaretLeft class="h-5 w-5" />
@@ -15006,7 +15008,7 @@ var BUNDLED_DATA = {
15006
15008
 
15007
15009
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
15008
15010
  <Accordion type="multiple" bind:value={multi} class="divide-y divide-(--indigo-dye)/10">
15009
- {#each ['One', 'Two', 'Three'] as label, i}
15011
+ {#each ['One', 'Two', 'Three'] as label, i (i)}
15010
15012
  <AccordionItem value={\`m\${i}\`}>
15011
15013
  <AccordionTrigger class="py-4 text-left text-(--ink) hover:text-(--vermilion)">
15012
15014
  {label}
@@ -15066,6 +15068,7 @@ var BUNDLED_DATA = {
15066
15068
  </main>
15067
15069
  `,
15068
15070
  "demos/alert/+page.svelte": `<script lang="ts">
15071
+ import { resolve } from '$app/paths';
15069
15072
  import { CaretLeft, Info, CheckCircle, Warning, XCircle } from 'phosphor-svelte';
15070
15073
  import { Alert } from 'alus-ui';
15071
15074
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -15083,7 +15086,7 @@ var BUNDLED_DATA = {
15083
15086
  </svelte:head>
15084
15087
 
15085
15088
  <a
15086
- href="/"
15089
+ href={resolve('/')}
15087
15090
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
15088
15091
  >
15089
15092
  <CaretLeft class="h-5 w-5" />
@@ -15208,6 +15211,7 @@ var BUNDLED_DATA = {
15208
15211
  </main>
15209
15212
  `,
15210
15213
  "demos/aspect-ratio/+page.svelte": `<script lang="ts">
15214
+ import { resolve } from '$app/paths';
15211
15215
  import { CaretLeft } from 'phosphor-svelte';
15212
15216
  import { AspectRatio } from 'alus-ui';
15213
15217
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -15230,7 +15234,7 @@ var BUNDLED_DATA = {
15230
15234
  </svelte:head>
15231
15235
 
15232
15236
  <a
15233
- href="/"
15237
+ href={resolve('/')}
15234
15238
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
15235
15239
  >
15236
15240
  <CaretLeft class="h-5 w-5" />
@@ -15258,7 +15262,7 @@ var BUNDLED_DATA = {
15258
15262
  <div
15259
15263
  class="japanese-border grid grid-cols-2 gap-6 bg-white/50 p-8 backdrop-blur-sm md:grid-cols-3 lg:grid-cols-5"
15260
15264
  >
15261
- {#each ratios as r}
15265
+ {#each ratios as r, i (i)}
15262
15266
  <div class="flex flex-col items-center gap-2">
15263
15267
  <AspectRatio
15264
15268
  ratio={r.value}
@@ -15295,6 +15299,7 @@ var BUNDLED_DATA = {
15295
15299
  </main>
15296
15300
  `,
15297
15301
  "demos/auto-complete/+page.svelte": `<script lang="ts">
15302
+ import { resolve } from '$app/paths';
15298
15303
  import { CaretLeft, MapPin, MagnifyingGlass, CircleNotch } from 'phosphor-svelte';
15299
15304
  import { AutoComplete, type AutoCompleteOption } from 'alus-ui';
15300
15305
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -15377,7 +15382,7 @@ var BUNDLED_DATA = {
15377
15382
  </svelte:head>
15378
15383
 
15379
15384
  <a
15380
- href="/"
15385
+ href={resolve('/')}
15381
15386
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
15382
15387
  >
15383
15388
  <CaretLeft class="h-5 w-5" />
@@ -15552,6 +15557,7 @@ var BUNDLED_DATA = {
15552
15557
  </main>
15553
15558
  `,
15554
15559
  "demos/avatar/+page.svelte": `<script lang="ts">
15560
+ import { resolve } from '$app/paths';
15555
15561
  import { CaretLeft } from 'phosphor-svelte';
15556
15562
  import { Avatar } from 'alus-ui';
15557
15563
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -15572,7 +15578,7 @@ var BUNDLED_DATA = {
15572
15578
  </svelte:head>
15573
15579
 
15574
15580
  <a
15575
- href="/"
15581
+ href={resolve('/')}
15576
15582
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
15577
15583
  >
15578
15584
  <CaretLeft class="h-5 w-5" />
@@ -15730,6 +15736,7 @@ var BUNDLED_DATA = {
15730
15736
  </main>
15731
15737
  `,
15732
15738
  "demos/badge/+page.svelte": `<script lang="ts">
15739
+ import { resolve } from '$app/paths';
15733
15740
  import { CaretLeft } from 'phosphor-svelte';
15734
15741
  import { Badge } from 'alus-ui';
15735
15742
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -15748,7 +15755,7 @@ var BUNDLED_DATA = {
15748
15755
  </svelte:head>
15749
15756
 
15750
15757
  <a
15751
- href="/"
15758
+ href={resolve('/')}
15752
15759
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
15753
15760
  >
15754
15761
  <CaretLeft class="h-5 w-5" />
@@ -15890,6 +15897,7 @@ var BUNDLED_DATA = {
15890
15897
  </main>
15891
15898
  `,
15892
15899
  "demos/banner/+page.svelte": `<script lang="ts">
15900
+ import { resolve } from '$app/paths';
15893
15901
  import { CaretLeft, Info, CheckCircle, Warning, XCircle, Megaphone } from 'phosphor-svelte';
15894
15902
  import { Banner, Button } from 'alus-ui';
15895
15903
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -15914,7 +15922,7 @@ var BUNDLED_DATA = {
15914
15922
  </svelte:head>
15915
15923
 
15916
15924
  <a
15917
- href="/"
15925
+ href={resolve('/')}
15918
15926
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
15919
15927
  >
15920
15928
  <CaretLeft class="h-5 w-5" />
@@ -16027,6 +16035,7 @@ var BUNDLED_DATA = {
16027
16035
  </main>
16028
16036
  `,
16029
16037
  "demos/breadcrumb/+page.svelte": `<script lang="ts">
16038
+ import { resolve } from '$app/paths';
16030
16039
  import { CaretLeft, CaretRight, House } from 'phosphor-svelte';
16031
16040
  import { Breadcrumb, BreadcrumbItem, BreadcrumbSeparator } from 'alus-ui';
16032
16041
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -16045,7 +16054,7 @@ var BUNDLED_DATA = {
16045
16054
  </svelte:head>
16046
16055
 
16047
16056
  <a
16048
- href="/"
16057
+ href={resolve('/')}
16049
16058
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
16050
16059
  >
16051
16060
  <CaretLeft class="h-5 w-5" />
@@ -16075,11 +16084,17 @@ var BUNDLED_DATA = {
16075
16084
 
16076
16085
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
16077
16086
  <Breadcrumb listClass="flex flex-wrap items-center gap-2 text-sm">
16078
- <BreadcrumbItem href="/" linkClass="text-(--indigo-dye) hover:text-(--vermilion)">
16087
+ <BreadcrumbItem
16088
+ href={resolve('/')}
16089
+ linkClass="text-(--indigo-dye) hover:text-(--vermilion)"
16090
+ >
16079
16091
  Home
16080
16092
  </BreadcrumbItem>
16081
16093
  <BreadcrumbSeparator class="text-(--charcoal)/30">/</BreadcrumbSeparator>
16082
- <BreadcrumbItem href="/components" linkClass="text-(--indigo-dye) hover:text-(--vermilion)">
16094
+ <BreadcrumbItem
16095
+ href={resolve('/components')}
16096
+ linkClass="text-(--indigo-dye) hover:text-(--vermilion)"
16097
+ >
16083
16098
  Components
16084
16099
  </BreadcrumbItem>
16085
16100
  <BreadcrumbSeparator class="text-(--charcoal)/30">/</BreadcrumbSeparator>
@@ -16097,7 +16112,7 @@ var BUNDLED_DATA = {
16097
16112
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
16098
16113
  <Breadcrumb listClass="flex flex-wrap items-center gap-2 text-sm">
16099
16114
  <BreadcrumbItem
16100
- href="/"
16115
+ href={resolve('/')}
16101
16116
  linkClass="inline-flex items-center gap-1 text-(--indigo-dye) hover:text-(--vermilion)"
16102
16117
  >
16103
16118
  <House class="h-4 w-4" />
@@ -16106,7 +16121,10 @@ var BUNDLED_DATA = {
16106
16121
  <BreadcrumbSeparator class="text-(--charcoal)/30">
16107
16122
  <CaretRight class="h-3 w-3" />
16108
16123
  </BreadcrumbSeparator>
16109
- <BreadcrumbItem href="/docs" linkClass="text-(--indigo-dye) hover:text-(--vermilion)">
16124
+ <BreadcrumbItem
16125
+ href={resolve('/docs')}
16126
+ linkClass="text-(--indigo-dye) hover:text-(--vermilion)"
16127
+ >
16110
16128
  Docs
16111
16129
  </BreadcrumbItem>
16112
16130
  <BreadcrumbSeparator class="text-(--charcoal)/30">
@@ -16149,6 +16167,7 @@ var BUNDLED_DATA = {
16149
16167
  </main>
16150
16168
  `,
16151
16169
  "demos/button/+page.svelte": `<script lang="ts">
16170
+ import { resolve } from '$app/paths';
16152
16171
  import { CaretLeft } from 'phosphor-svelte';
16153
16172
  import { Button } from 'alus-ui';
16154
16173
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -16180,7 +16199,7 @@ var BUNDLED_DATA = {
16180
16199
  </svelte:head>
16181
16200
 
16182
16201
  <a
16183
- href="/"
16202
+ href={resolve('/')}
16184
16203
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
16185
16204
  >
16186
16205
  <CaretLeft class="h-5 w-5" />
@@ -16319,6 +16338,7 @@ var BUNDLED_DATA = {
16319
16338
  </main>
16320
16339
  `,
16321
16340
  "demos/calendar/+page.svelte": `<script lang="ts">
16341
+ import { resolve } from '$app/paths';
16322
16342
  import { CaretLeft } from 'phosphor-svelte';
16323
16343
  import { Calendar } from 'alus-ui';
16324
16344
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -16398,7 +16418,7 @@ var BUNDLED_DATA = {
16398
16418
  </svelte:head>
16399
16419
 
16400
16420
  <a
16401
- href="/"
16421
+ href={resolve('/')}
16402
16422
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
16403
16423
  >
16404
16424
  <CaretLeft class="h-5 w-5" />
@@ -16612,6 +16632,7 @@ var BUNDLED_DATA = {
16612
16632
  </main>
16613
16633
  `,
16614
16634
  "demos/callout/+page.svelte": `<script lang="ts">
16635
+ import { resolve } from '$app/paths';
16615
16636
  import { CaretLeft, Info, CheckCircle, Warning, XCircle, Lightbulb, Note } from 'phosphor-svelte';
16616
16637
  import { Callout } from 'alus-ui';
16617
16638
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -16672,7 +16693,7 @@ var BUNDLED_DATA = {
16672
16693
  </svelte:head>
16673
16694
 
16674
16695
  <a
16675
- href="/"
16696
+ href={resolve('/')}
16676
16697
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
16677
16698
  >
16678
16699
  <CaretLeft class="h-5 w-5" />
@@ -16698,7 +16719,7 @@ var BUNDLED_DATA = {
16698
16719
  <h2 class="font-display mb-8 text-2xl text-(--ink)">Variants</h2>
16699
16720
 
16700
16721
  <div class="japanese-border space-y-4 bg-white/50 p-8 backdrop-blur-sm">
16701
- {#each items as item}
16722
+ {#each items as item, i (i)}
16702
16723
  {@const Icon = icon(item.variant)}
16703
16724
  <Callout
16704
16725
  variant={item.variant}
@@ -16741,6 +16762,7 @@ var BUNDLED_DATA = {
16741
16762
  </main>
16742
16763
  `,
16743
16764
  "demos/card/+page.svelte": `<script lang="ts">
16765
+ import { resolve } from '$app/paths';
16744
16766
  import { CaretLeft } from 'phosphor-svelte';
16745
16767
  import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from 'alus-ui';
16746
16768
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -16762,7 +16784,7 @@ var BUNDLED_DATA = {
16762
16784
  </svelte:head>
16763
16785
 
16764
16786
  <a
16765
- href="/"
16787
+ href={resolve('/')}
16766
16788
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
16767
16789
  >
16768
16790
  <CaretLeft class="h-5 w-5" />
@@ -16835,6 +16857,7 @@ var BUNDLED_DATA = {
16835
16857
  </main>
16836
16858
  `,
16837
16859
  "demos/carousel/+page.svelte": `<script lang="ts">
16860
+ import { resolve } from '$app/paths';
16838
16861
  import { CaretLeft, CaretRight, ArrowLeft, ArrowRight } from 'phosphor-svelte';
16839
16862
  import {
16840
16863
  Carousel,
@@ -16876,7 +16899,7 @@ var BUNDLED_DATA = {
16876
16899
  </svelte:head>
16877
16900
 
16878
16901
  <a
16879
- href="/"
16902
+ href={resolve('/')}
16880
16903
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
16881
16904
  >
16882
16905
  <CaretLeft class="h-5 w-5" />
@@ -16982,6 +17005,7 @@ var BUNDLED_DATA = {
16982
17005
  </main>
16983
17006
  `,
16984
17007
  "demos/checkbox/+page.svelte": `<script lang="ts">
17008
+ import { resolve } from '$app/paths';
16985
17009
  import { CaretLeft, Check } from 'phosphor-svelte';
16986
17010
  import { Checkbox } from 'alus-ui';
16987
17011
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -17043,7 +17067,7 @@ var BUNDLED_DATA = {
17043
17067
  </svelte:head>
17044
17068
 
17045
17069
  <a
17046
- href="/"
17070
+ href={resolve('/')}
17047
17071
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
17048
17072
  >
17049
17073
  <CaretLeft class="h-5 w-5" />
@@ -17389,6 +17413,7 @@ var BUNDLED_DATA = {
17389
17413
  </main>
17390
17414
  `,
17391
17415
  "demos/code-block/+page.svelte": `<script lang="ts">
17416
+ import { resolve } from '$app/paths';
17392
17417
  import { CaretLeft, Copy, Check } from 'phosphor-svelte';
17393
17418
  import { CodeBlock } from 'alus-ui';
17394
17419
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -17424,7 +17449,7 @@ sum(1, 2);\`;
17424
17449
  </svelte:head>
17425
17450
 
17426
17451
  <a
17427
- href="/"
17452
+ href={resolve('/')}
17428
17453
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
17429
17454
  >
17430
17455
  <CaretLeft class="h-5 w-5" />
@@ -17523,6 +17548,7 @@ sum(1, 2);\`;
17523
17548
  </main>
17524
17549
  `,
17525
17550
  "demos/color-picker/+page.svelte": `<script lang="ts">
17551
+ import { resolve } from '$app/paths';
17526
17552
  import { CaretLeft, Lock, Drop } from 'phosphor-svelte';
17527
17553
  import { ColorPicker } from 'alus-ui';
17528
17554
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -17575,7 +17601,7 @@ sum(1, 2);\`;
17575
17601
  </svelte:head>
17576
17602
 
17577
17603
  <a
17578
- href="/"
17604
+ href={resolve('/')}
17579
17605
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
17580
17606
  >
17581
17607
  <CaretLeft class="h-5 w-5" />
@@ -17758,6 +17784,7 @@ sum(1, 2);\`;
17758
17784
  </main>
17759
17785
  `,
17760
17786
  "demos/command-menu/+page.svelte": `<script lang="ts">
17787
+ import { resolve } from '$app/paths';
17761
17788
  import {
17762
17789
  CaretLeft,
17763
17790
  MagnifyingGlass,
@@ -17818,7 +17845,7 @@ sum(1, 2);\`;
17818
17845
  </svelte:head>
17819
17846
 
17820
17847
  <a
17821
- href="/"
17848
+ href={resolve('/')}
17822
17849
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
17823
17850
  >
17824
17851
  <CaretLeft class="h-5 w-5" />
@@ -17876,127 +17903,111 @@ sum(1, 2);\`;
17876
17903
  </CommandMenuEmpty>
17877
17904
 
17878
17905
  <CommandMenuGroup class="mb-1">
17879
- {#snippet children()}
17880
- <div
17881
- class="font-display px-2 py-1 text-xs tracking-widest text-(--bamboo) uppercase"
17882
- >
17883
- Files
17884
- </div>
17885
- <CommandMenuItem
17886
- value="New file"
17887
- keywords="create document \u65B0\u898F \u30D5\u30A1\u30A4\u30EB \u4F5C\u6210"
17888
- onSelect={() => handle('New file')}
17889
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17890
- >
17891
- <File class="h-4 w-4 text-(--indigo-dye)" />
17892
- <span>New file</span>
17893
- <kbd class="ml-auto font-mono text-xs text-(--charcoal)/50">\u2318N</kbd>
17894
- </CommandMenuItem>
17895
- <CommandMenuItem
17896
- value="Open folder"
17897
- keywords="directory browse \u30D5\u30A9\u30EB\u30C0 \u958B\u304F"
17898
- onSelect={() => handle('Open folder')}
17899
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17900
- >
17901
- <Folder class="h-4 w-4 text-(--indigo-dye)" />
17902
- <span>Open folder</span>
17903
- <kbd class="ml-auto font-mono text-xs text-(--charcoal)/50">\u2318O</kbd>
17904
- </CommandMenuItem>
17905
- {/snippet}
17906
+ <div class="font-display px-2 py-1 text-xs tracking-widest text-(--bamboo) uppercase">
17907
+ Files
17908
+ </div>
17909
+ <CommandMenuItem
17910
+ value="New file"
17911
+ keywords="create document \u65B0\u898F \u30D5\u30A1\u30A4\u30EB \u4F5C\u6210"
17912
+ onSelect={() => handle('New file')}
17913
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17914
+ >
17915
+ <File class="h-4 w-4 text-(--indigo-dye)" />
17916
+ <span>New file</span>
17917
+ <kbd class="ml-auto font-mono text-xs text-(--charcoal)/50">\u2318N</kbd>
17918
+ </CommandMenuItem>
17919
+ <CommandMenuItem
17920
+ value="Open folder"
17921
+ keywords="directory browse \u30D5\u30A9\u30EB\u30C0 \u958B\u304F"
17922
+ onSelect={() => handle('Open folder')}
17923
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17924
+ >
17925
+ <Folder class="h-4 w-4 text-(--indigo-dye)" />
17926
+ <span>Open folder</span>
17927
+ <kbd class="ml-auto font-mono text-xs text-(--charcoal)/50">\u2318O</kbd>
17928
+ </CommandMenuItem>
17906
17929
  </CommandMenuGroup>
17907
17930
 
17908
17931
  <CommandMenuGroup>
17909
- {#snippet children()}
17910
- <div
17911
- class="font-display px-2 py-1 text-xs tracking-widest text-(--bamboo) uppercase"
17912
- >
17913
- Account
17914
- </div>
17915
- <CommandMenuItem
17916
- value="Profile"
17917
- keywords="account user me \u30D7\u30ED\u30D5\u30A3\u30FC\u30EB \u81EA\u5206"
17918
- onSelect={() => handle('Profile')}
17919
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17920
- >
17921
- <User class="h-4 w-4 text-(--indigo-dye)" />
17922
- <span>View profile</span>
17923
- </CommandMenuItem>
17924
- <CommandMenuItem
17925
- value="Settings"
17926
- keywords="preferences config gear \u8A2D\u5B9A \u74B0\u5883"
17927
- onSelect={() => handle('Settings')}
17928
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17929
- >
17930
- <Gear class="h-4 w-4 text-(--indigo-dye)" />
17931
- <span>Settings</span>
17932
- <kbd class="ml-auto font-mono text-xs text-(--charcoal)/50">\u2318,</kbd>
17933
- </CommandMenuItem>
17934
- {/snippet}
17932
+ <div class="font-display px-2 py-1 text-xs tracking-widest text-(--bamboo) uppercase">
17933
+ Account
17934
+ </div>
17935
+ <CommandMenuItem
17936
+ value="Profile"
17937
+ keywords="account user me \u30D7\u30ED\u30D5\u30A3\u30FC\u30EB \u81EA\u5206"
17938
+ onSelect={() => handle('Profile')}
17939
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17940
+ >
17941
+ <User class="h-4 w-4 text-(--indigo-dye)" />
17942
+ <span>View profile</span>
17943
+ </CommandMenuItem>
17944
+ <CommandMenuItem
17945
+ value="Settings"
17946
+ keywords="preferences config gear \u8A2D\u5B9A \u74B0\u5883"
17947
+ onSelect={() => handle('Settings')}
17948
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17949
+ >
17950
+ <Gear class="h-4 w-4 text-(--indigo-dye)" />
17951
+ <span>Settings</span>
17952
+ <kbd class="ml-auto font-mono text-xs text-(--charcoal)/50">\u2318,</kbd>
17953
+ </CommandMenuItem>
17935
17954
  </CommandMenuGroup>
17936
17955
 
17937
17956
  <CommandMenuGroup>
17938
- {#snippet children()}
17939
- <div
17940
- class="font-display px-2 py-1 text-xs tracking-widest text-(--bamboo) uppercase"
17941
- >
17942
- Theme
17943
- </div>
17944
- <CommandMenuItem
17945
- value="Light theme"
17946
- keywords="day bright sun \u660E\u308B\u3044 \u592A\u967D \u663C"
17947
- onSelect={() => handle('Light theme')}
17948
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17949
- >
17950
- <Sun class="h-4 w-4 text-(--muted-gold)" />
17951
- <span>Switch to light</span>
17952
- </CommandMenuItem>
17953
- <CommandMenuItem
17954
- value="Dark theme"
17955
- keywords="night moon \u6697\u3044 \u591C \u6708"
17956
- onSelect={() => handle('Dark theme')}
17957
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17958
- >
17959
- <Moon class="h-4 w-4 text-(--indigo-dye)" />
17960
- <span>Switch to dark</span>
17961
- </CommandMenuItem>
17962
- {/snippet}
17957
+ <div class="font-display px-2 py-1 text-xs tracking-widest text-(--bamboo) uppercase">
17958
+ Theme
17959
+ </div>
17960
+ <CommandMenuItem
17961
+ value="Light theme"
17962
+ keywords="day bright sun \u660E\u308B\u3044 \u592A\u967D \u663C"
17963
+ onSelect={() => handle('Light theme')}
17964
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17965
+ >
17966
+ <Sun class="h-4 w-4 text-(--muted-gold)" />
17967
+ <span>Switch to light</span>
17968
+ </CommandMenuItem>
17969
+ <CommandMenuItem
17970
+ value="Dark theme"
17971
+ keywords="night moon \u6697\u3044 \u591C \u6708"
17972
+ onSelect={() => handle('Dark theme')}
17973
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17974
+ >
17975
+ <Moon class="h-4 w-4 text-(--indigo-dye)" />
17976
+ <span>Switch to dark</span>
17977
+ </CommandMenuItem>
17963
17978
  </CommandMenuGroup>
17964
17979
 
17965
17980
  <CommandMenuGroup>
17966
- {#snippet children()}
17967
- <div
17968
- class="font-display px-2 py-1 text-xs tracking-widest text-(--bamboo) uppercase"
17969
- >
17970
- Actions
17971
- </div>
17972
- <CommandMenuItem
17973
- value="Open terminal"
17974
- keywords="shell command line cli \u7AEF\u672B \u30BF\u30FC\u30DF\u30CA\u30EB"
17975
- onSelect={() => handle('Open terminal')}
17976
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17977
- >
17978
- <Terminal class="h-4 w-4 text-(--indigo-dye)" />
17979
- <span>Open terminal</span>
17980
- </CommandMenuItem>
17981
- <CommandMenuItem
17982
- value="Reload"
17983
- keywords="refresh restart \u66F4\u65B0 \u518D\u8AAD\u307F\u8FBC\u307F"
17984
- onSelect={() => handle('Reload')}
17985
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17986
- >
17987
- <ArrowsClockwise class="h-4 w-4 text-(--indigo-dye)" />
17988
- <span>Reload window</span>
17989
- </CommandMenuItem>
17990
- <CommandMenuItem
17991
- value="Clear cache"
17992
- keywords="delete trash purge \u524A\u9664 \u6D88\u53BB \u30B4\u30DF\u7BB1"
17993
- onSelect={() => handle('Clear cache')}
17994
- class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17995
- >
17996
- <Trash class="h-4 w-4 text-(--vermilion)" />
17997
- <span>Clear cache</span>
17998
- </CommandMenuItem>
17999
- {/snippet}
17981
+ <div class="font-display px-2 py-1 text-xs tracking-widest text-(--bamboo) uppercase">
17982
+ Actions
17983
+ </div>
17984
+ <CommandMenuItem
17985
+ value="Open terminal"
17986
+ keywords="shell command line cli \u7AEF\u672B \u30BF\u30FC\u30DF\u30CA\u30EB"
17987
+ onSelect={() => handle('Open terminal')}
17988
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17989
+ >
17990
+ <Terminal class="h-4 w-4 text-(--indigo-dye)" />
17991
+ <span>Open terminal</span>
17992
+ </CommandMenuItem>
17993
+ <CommandMenuItem
17994
+ value="Reload"
17995
+ keywords="refresh restart \u66F4\u65B0 \u518D\u8AAD\u307F\u8FBC\u307F"
17996
+ onSelect={() => handle('Reload')}
17997
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
17998
+ >
17999
+ <ArrowsClockwise class="h-4 w-4 text-(--indigo-dye)" />
18000
+ <span>Reload window</span>
18001
+ </CommandMenuItem>
18002
+ <CommandMenuItem
18003
+ value="Clear cache"
18004
+ keywords="delete trash purge \u524A\u9664 \u6D88\u53BB \u30B4\u30DF\u7BB1"
18005
+ onSelect={() => handle('Clear cache')}
18006
+ class="flex cursor-pointer items-center gap-3 rounded px-3 py-2 text-sm transition-colors data-highlighted:bg-(--cream)"
18007
+ >
18008
+ <Trash class="h-4 w-4 text-(--vermilion)" />
18009
+ <span>Clear cache</span>
18010
+ </CommandMenuItem>
18000
18011
  </CommandMenuGroup>
18001
18012
  </CommandMenuList>
18002
18013
  </CommandMenuContent>
@@ -18057,6 +18068,7 @@ sum(1, 2);\`;
18057
18068
  </main>
18058
18069
  `,
18059
18070
  "demos/compare/+page.svelte": `<script lang="ts">
18071
+ import { resolve } from '$app/paths';
18060
18072
  import { CaretLeft, CaretLeft as Left, CaretRight as Right } from 'phosphor-svelte';
18061
18073
  import { Compare } from 'alus-ui';
18062
18074
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -18075,7 +18087,7 @@ sum(1, 2);\`;
18075
18087
  </svelte:head>
18076
18088
 
18077
18089
  <a
18078
- href="/"
18090
+ href={resolve('/')}
18079
18091
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
18080
18092
  >
18081
18093
  <CaretLeft class="h-5 w-5" />
@@ -18185,6 +18197,7 @@ sum(1, 2);\`;
18185
18197
  </main>
18186
18198
  `,
18187
18199
  "demos/conditional/+page.svelte": `<script lang="ts">
18200
+ import { resolve } from '$app/paths';
18188
18201
  import { CaretLeft } from 'phosphor-svelte';
18189
18202
  import { Conditional, Button } from 'alus-ui';
18190
18203
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -18205,7 +18218,7 @@ sum(1, 2);\`;
18205
18218
  </svelte:head>
18206
18219
 
18207
18220
  <a
18208
- href="/"
18221
+ href={resolve('/')}
18209
18222
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
18210
18223
  >
18211
18224
  <CaretLeft class="h-5 w-5" />
@@ -18285,6 +18298,7 @@ sum(1, 2);\`;
18285
18298
  </main>
18286
18299
  `,
18287
18300
  "demos/context-menu/+page.svelte": `<script lang="ts">
18301
+ import { resolve } from '$app/paths';
18288
18302
  import { CaretLeft, Copy, Scissors, Clipboard, Trash, ArrowsClockwise } from 'phosphor-svelte';
18289
18303
  import { ContextMenu, type ContextMenuItemEntry } from 'alus-ui';
18290
18304
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -18336,7 +18350,7 @@ sum(1, 2);\`;
18336
18350
  </svelte:head>
18337
18351
 
18338
18352
  <a
18339
- href="/"
18353
+ href={resolve('/')}
18340
18354
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
18341
18355
  >
18342
18356
  <CaretLeft class="h-5 w-5" />
@@ -18416,6 +18430,7 @@ sum(1, 2);\`;
18416
18430
  </main>
18417
18431
  `,
18418
18432
  "demos/data-list/+page.svelte": `<script lang="ts">
18433
+ import { resolve } from '$app/paths';
18419
18434
  import { CaretLeft } from 'phosphor-svelte';
18420
18435
  import { DataList, DataListTerm, DataListDescription } from 'alus-ui';
18421
18436
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -18433,7 +18448,7 @@ sum(1, 2);\`;
18433
18448
  </svelte:head>
18434
18449
 
18435
18450
  <a
18436
- href="/"
18451
+ href={resolve('/')}
18437
18452
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
18438
18453
  >
18439
18454
  <CaretLeft class="h-5 w-5" />
@@ -18488,6 +18503,7 @@ sum(1, 2);\`;
18488
18503
  </main>
18489
18504
  `,
18490
18505
  "demos/date-picker/+page.svelte": `<script lang="ts">
18506
+ import { resolve } from '$app/paths';
18491
18507
  import { CaretLeft, Calendar as CalIcon, Lock } from 'phosphor-svelte';
18492
18508
  import { DatePicker } from 'alus-ui';
18493
18509
  import { type DateValue, getLocalTimeZone, today } from '@internationalized/date';
@@ -18545,7 +18561,7 @@ sum(1, 2);\`;
18545
18561
  </svelte:head>
18546
18562
 
18547
18563
  <a
18548
- href="/"
18564
+ href={resolve('/')}
18549
18565
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
18550
18566
  >
18551
18567
  <CaretLeft class="h-5 w-5" />
@@ -18773,6 +18789,7 @@ sum(1, 2);\`;
18773
18789
  </main>
18774
18790
  `,
18775
18791
  "demos/date-range/+page.svelte": `<script lang="ts">
18792
+ import { resolve } from '$app/paths';
18776
18793
  import { CaretLeft } from 'phosphor-svelte';
18777
18794
  import { DateRange, type DateRangeValue } from 'alus-ui';
18778
18795
  import { type DateValue, getLocalTimeZone, today } from '@internationalized/date';
@@ -18836,7 +18853,7 @@ sum(1, 2);\`;
18836
18853
  </svelte:head>
18837
18854
 
18838
18855
  <a
18839
- href="/"
18856
+ href={resolve('/')}
18840
18857
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
18841
18858
  >
18842
18859
  <CaretLeft class="h-5 w-5" />
@@ -18951,9 +18968,10 @@ sum(1, 2);\`;
18951
18968
  </main>
18952
18969
  `,
18953
18970
  "demos/date-range-picker/+page.svelte": `<script lang="ts">
18971
+ import { resolve } from '$app/paths';
18954
18972
  import { CaretLeft, CalendarBlank } from 'phosphor-svelte';
18955
18973
  import { DateRangePicker } from 'alus-ui';
18956
- import { type DateValue, getLocalTimeZone, today } from '@internationalized/date';
18974
+ import { type DateValue } from '@internationalized/date';
18957
18975
  import DemoFooter from '$components/DemoFooter.svelte';
18958
18976
 
18959
18977
  const code = \`<script lang="ts">
@@ -18965,9 +18983,6 @@ sum(1, 2);\`;
18965
18983
 
18966
18984
  <DateRangePicker bind:start bind:end placeholder="Pick dates\u2026" aria-label="Trip dates" />\`;
18967
18985
 
18968
- const tz = getLocalTimeZone();
18969
- const now = today(tz);
18970
-
18971
18986
  let start = $state<DateValue | null>(null);
18972
18987
  let end = $state<DateValue | null>(null);
18973
18988
 
@@ -19006,7 +19021,7 @@ sum(1, 2);\`;
19006
19021
  </svelte:head>
19007
19022
 
19008
19023
  <a
19009
- href="/"
19024
+ href={resolve('/')}
19010
19025
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19011
19026
  >
19012
19027
  <CaretLeft class="h-5 w-5" />
@@ -19104,6 +19119,7 @@ sum(1, 2);\`;
19104
19119
  </main>
19105
19120
  `,
19106
19121
  "demos/dialog/+page.svelte": `<script lang="ts">
19122
+ import { resolve } from '$app/paths';
19107
19123
  import { CaretLeft } from 'phosphor-svelte';
19108
19124
  import {
19109
19125
  Dialog,
@@ -19130,7 +19146,7 @@ sum(1, 2);\`;
19130
19146
  </svelte:head>
19131
19147
 
19132
19148
  <a
19133
- href="/"
19149
+ href={resolve('/')}
19134
19150
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19135
19151
  >
19136
19152
  <CaretLeft class="h-5 w-5" />
@@ -19199,6 +19215,7 @@ sum(1, 2);\`;
19199
19215
  </main>
19200
19216
  `,
19201
19217
  "demos/divider/+page.svelte": `<script lang="ts">
19218
+ import { resolve } from '$app/paths';
19202
19219
  import { CaretLeft } from 'phosphor-svelte';
19203
19220
  import { Divider } from 'alus-ui';
19204
19221
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -19213,7 +19230,7 @@ sum(1, 2);\`;
19213
19230
  </svelte:head>
19214
19231
 
19215
19232
  <a
19216
- href="/"
19233
+ href={resolve('/')}
19217
19234
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19218
19235
  >
19219
19236
  <CaretLeft class="h-5 w-5" />
@@ -19287,6 +19304,7 @@ sum(1, 2);\`;
19287
19304
  </main>
19288
19305
  `,
19289
19306
  "demos/draggable/+page.svelte": `<script lang="ts">
19307
+ import { resolve } from '$app/paths';
19290
19308
  import { CaretLeft } from 'phosphor-svelte';
19291
19309
  import { Draggable, Droppable } from 'alus-ui';
19292
19310
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -19333,7 +19351,7 @@ sum(1, 2);\`;
19333
19351
  </svelte:head>
19334
19352
 
19335
19353
  <a
19336
- href="/"
19354
+ href={resolve('/')}
19337
19355
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19338
19356
  >
19339
19357
  <CaretLeft class="h-5 w-5" />
@@ -19421,6 +19439,7 @@ sum(1, 2);\`;
19421
19439
  </main>
19422
19440
  `,
19423
19441
  "demos/drawer/+page.svelte": `<script lang="ts">
19442
+ import { resolve } from '$app/paths';
19424
19443
  import { CaretLeft, X } from 'phosphor-svelte';
19425
19444
  import {
19426
19445
  Drawer,
@@ -19449,7 +19468,7 @@ sum(1, 2);\`;
19449
19468
  </svelte:head>
19450
19469
 
19451
19470
  <a
19452
- href="/"
19471
+ href={resolve('/')}
19453
19472
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19454
19473
  >
19455
19474
  <CaretLeft class="h-5 w-5" />
@@ -19540,6 +19559,7 @@ sum(1, 2);\`;
19540
19559
  </main>
19541
19560
  `,
19542
19561
  "demos/dropdown/+page.svelte": `<script lang="ts">
19562
+ import { resolve } from '$app/paths';
19543
19563
  import { CaretLeft, CaretDown } from 'phosphor-svelte';
19544
19564
  import { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from 'alus-ui';
19545
19565
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -19561,7 +19581,7 @@ sum(1, 2);\`;
19561
19581
  </svelte:head>
19562
19582
 
19563
19583
  <a
19564
- href="/"
19584
+ href={resolve('/')}
19565
19585
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19566
19586
  >
19567
19587
  <CaretLeft class="h-5 w-5" />
@@ -19645,8 +19665,9 @@ sum(1, 2);\`;
19645
19665
  />
19646
19666
  </main>
19647
19667
  `,
19648
- "demos/droppable/+page.svelte": "<script>\n import { goto } from '$app/navigation';\n import { onMount } from 'svelte';\n onMount(() => goto('/components/draggable'));\n</script>\n\n<p>Redirecting\u2026</p>\n",
19668
+ "demos/droppable/+page.svelte": "<script>\n import { goto } from '$app/navigation';\n import { resolve } from '$app/paths';\n import { onMount } from 'svelte';\n onMount(() => goto(resolve('/components/draggable')));\n</script>\n\n<p>Redirecting\u2026</p>\n",
19649
19669
  "demos/external-link/+page.svelte": `<script lang="ts">
19670
+ import { resolve } from '$app/paths';
19650
19671
  import { CaretLeft, ArrowSquareOut } from 'phosphor-svelte';
19651
19672
  import { ExternalLink } from 'alus-ui';
19652
19673
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -19661,7 +19682,7 @@ sum(1, 2);\`;
19661
19682
  </svelte:head>
19662
19683
 
19663
19684
  <a
19664
- href="/"
19685
+ href={resolve('/')}
19665
19686
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19666
19687
  >
19667
19688
  <CaretLeft class="h-5 w-5" />
@@ -19740,6 +19761,7 @@ sum(1, 2);\`;
19740
19761
  </main>
19741
19762
  `,
19742
19763
  "demos/fieldset/+page.svelte": `<script lang="ts">
19764
+ import { resolve } from '$app/paths';
19743
19765
  import { CaretLeft } from 'phosphor-svelte';
19744
19766
  import { Fieldset, Input } from 'alus-ui';
19745
19767
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -19759,7 +19781,7 @@ sum(1, 2);\`;
19759
19781
  </svelte:head>
19760
19782
 
19761
19783
  <a
19762
- href="/"
19784
+ href={resolve('/')}
19763
19785
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19764
19786
  >
19765
19787
  <CaretLeft class="h-5 w-5" />
@@ -19862,6 +19884,7 @@ sum(1, 2);\`;
19862
19884
  </main>
19863
19885
  `,
19864
19886
  "demos/file-input/+page.svelte": `<script lang="ts">
19887
+ import { resolve } from '$app/paths';
19865
19888
  import { CaretLeft, UploadSimple } from 'phosphor-svelte';
19866
19889
  import { FileInput, Label } from 'alus-ui';
19867
19890
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -19886,7 +19909,7 @@ sum(1, 2);\`;
19886
19909
  </svelte:head>
19887
19910
 
19888
19911
  <a
19889
- href="/"
19912
+ href={resolve('/')}
19890
19913
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
19891
19914
  >
19892
19915
  <CaretLeft class="h-5 w-5" />
@@ -19945,7 +19968,7 @@ sum(1, 2);\`;
19945
19968
  </button>
19946
19969
  {#if f?.length}
19947
19970
  <ul class="mt-3 space-y-1 text-sm text-(--charcoal)/70">
19948
- {#each Array.from(f) as file}
19971
+ {#each Array.from(f) as file, i (i)}
19949
19972
  <li>{file.name}</li>
19950
19973
  {/each}
19951
19974
  </ul>
@@ -19984,6 +20007,7 @@ sum(1, 2);\`;
19984
20007
  </main>
19985
20008
  `,
19986
20009
  "demos/focus-trap/+page.svelte": `<script lang="ts">
20010
+ import { resolve } from '$app/paths';
19987
20011
  import { CaretLeft } from 'phosphor-svelte';
19988
20012
  import { FocusTrap, Portal } from 'alus-ui';
19989
20013
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -20006,7 +20030,7 @@ sum(1, 2);\`;
20006
20030
  </svelte:head>
20007
20031
 
20008
20032
  <a
20009
- href="/"
20033
+ href={resolve('/')}
20010
20034
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
20011
20035
  >
20012
20036
  <CaretLeft class="h-5 w-5" />
@@ -20114,6 +20138,7 @@ sum(1, 2);\`;
20114
20138
  </main>
20115
20139
  `,
20116
20140
  "demos/form/+page.svelte": `<script lang="ts">
20141
+ import { resolve } from '$app/paths';
20117
20142
  import { CaretLeft } from 'phosphor-svelte';
20118
20143
  import { Form, Input, Textarea, Button, FieldError } from 'alus-ui';
20119
20144
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -20156,7 +20181,7 @@ sum(1, 2);\`;
20156
20181
  </svelte:head>
20157
20182
 
20158
20183
  <a
20159
- href="/"
20184
+ href={resolve('/')}
20160
20185
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
20161
20186
  >
20162
20187
  <CaretLeft class="h-5 w-5" />
@@ -20304,6 +20329,7 @@ sum(1, 2);\`;
20304
20329
  </main>
20305
20330
  `,
20306
20331
  "demos/frame/+page.svelte": `<script lang="ts">
20332
+ import { resolve } from '$app/paths';
20307
20333
  import { CaretLeft } from 'phosphor-svelte';
20308
20334
  import { Frame } from 'alus-ui';
20309
20335
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -20318,7 +20344,7 @@ sum(1, 2);\`;
20318
20344
  </svelte:head>
20319
20345
 
20320
20346
  <a
20321
- href="/"
20347
+ href={resolve('/')}
20322
20348
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
20323
20349
  >
20324
20350
  <CaretLeft class="h-5 w-5" />
@@ -20402,6 +20428,7 @@ sum(1, 2);\`;
20402
20428
  </main>
20403
20429
  `,
20404
20430
  "demos/icon-button/+page.svelte": `<script lang="ts">
20431
+ import { resolve } from '$app/paths';
20405
20432
  import { CaretLeft, Heart, Bell, Gear, Trash, Plus, Star } from 'phosphor-svelte';
20406
20433
  import { IconButton } from 'alus-ui';
20407
20434
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -20419,7 +20446,7 @@ sum(1, 2);\`;
20419
20446
  </svelte:head>
20420
20447
 
20421
20448
  <a
20422
- href="/"
20449
+ href={resolve('/')}
20423
20450
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
20424
20451
  >
20425
20452
  <CaretLeft class="h-5 w-5" />
@@ -20534,6 +20561,7 @@ sum(1, 2);\`;
20534
20561
  </main>
20535
20562
  `,
20536
20563
  "demos/image/+page.svelte": `<script lang="ts">
20564
+ import { resolve } from '$app/paths';
20537
20565
  import { CaretLeft, ImageBroken } from 'phosphor-svelte';
20538
20566
  import { Image } from 'alus-ui';
20539
20567
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -20552,7 +20580,7 @@ sum(1, 2);\`;
20552
20580
  </svelte:head>
20553
20581
 
20554
20582
  <a
20555
- href="/"
20583
+ href={resolve('/')}
20556
20584
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
20557
20585
  >
20558
20586
  <CaretLeft class="h-5 w-5" />
@@ -20636,6 +20664,7 @@ sum(1, 2);\`;
20636
20664
  </main>
20637
20665
  `,
20638
20666
  "demos/infinite-scroll/+page.svelte": `<script lang="ts">
20667
+ import { resolve } from '$app/paths';
20639
20668
  import { CaretLeft, CircleNotch, WarningCircle, ArrowClockwise } from 'phosphor-svelte';
20640
20669
  import { InfiniteScroll, Button } from 'alus-ui';
20641
20670
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -20699,7 +20728,7 @@ sum(1, 2);\`;
20699
20728
  </svelte:head>
20700
20729
 
20701
20730
  <a
20702
- href="/"
20731
+ href={resolve('/')}
20703
20732
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
20704
20733
  >
20705
20734
  <CaretLeft class="h-5 w-5" />
@@ -20840,6 +20869,7 @@ sum(1, 2);\`;
20840
20869
  </main>
20841
20870
  `,
20842
20871
  "demos/inline-message/+page.svelte": `<script lang="ts">
20872
+ import { resolve } from '$app/paths';
20843
20873
  import { CaretLeft, Info, CheckCircle, Warning, XCircle } from 'phosphor-svelte';
20844
20874
  import { InlineMessage, Input, Button } from 'alus-ui';
20845
20875
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -20862,7 +20892,7 @@ sum(1, 2);\`;
20862
20892
  </svelte:head>
20863
20893
 
20864
20894
  <a
20865
- href="/"
20895
+ href={resolve('/')}
20866
20896
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
20867
20897
  >
20868
20898
  <CaretLeft class="h-5 w-5" />
@@ -20984,6 +21014,7 @@ sum(1, 2);\`;
20984
21014
  </main>
20985
21015
  `,
20986
21016
  "demos/input/+page.svelte": `<script lang="ts">
21017
+ import { resolve } from '$app/paths';
20987
21018
  import { CaretLeft, Warning, Check } from 'phosphor-svelte';
20988
21019
  import { Input } from 'alus-ui';
20989
21020
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -21043,7 +21074,7 @@ sum(1, 2);\`;
21043
21074
  </svelte:head>
21044
21075
 
21045
21076
  <a
21046
- href="/"
21077
+ href={resolve('/')}
21047
21078
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
21048
21079
  >
21049
21080
  <CaretLeft class="h-5 w-5" />
@@ -21503,6 +21534,7 @@ sum(1, 2);\`;
21503
21534
  </main>
21504
21535
  `,
21505
21536
  "demos/input-group/+page.svelte": `<script lang="ts">
21537
+ import { resolve } from '$app/paths';
21506
21538
  import { CaretLeft, At, MagnifyingGlass, CurrencyDollar } from 'phosphor-svelte';
21507
21539
  import { InputGroup, Input } from 'alus-ui';
21508
21540
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -21519,7 +21551,7 @@ sum(1, 2);\`;
21519
21551
  </svelte:head>
21520
21552
 
21521
21553
  <a
21522
- href="/"
21554
+ href={resolve('/')}
21523
21555
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
21524
21556
  >
21525
21557
  <CaretLeft class="h-5 w-5" />
@@ -21615,6 +21647,7 @@ sum(1, 2);\`;
21615
21647
  </main>
21616
21648
  `,
21617
21649
  "demos/kbd/+page.svelte": `<script lang="ts">
21650
+ import { resolve } from '$app/paths';
21618
21651
  import { CaretLeft } from 'phosphor-svelte';
21619
21652
  import { Kbd } from 'alus-ui';
21620
21653
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -21629,7 +21662,7 @@ sum(1, 2);\`;
21629
21662
  </svelte:head>
21630
21663
 
21631
21664
  <a
21632
- href="/"
21665
+ href={resolve('/')}
21633
21666
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
21634
21667
  >
21635
21668
  <CaretLeft class="h-5 w-5" />
@@ -21718,6 +21751,7 @@ sum(1, 2);\`;
21718
21751
  </main>
21719
21752
  `,
21720
21753
  "demos/label/+page.svelte": `<script lang="ts">
21754
+ import { resolve } from '$app/paths';
21721
21755
  import { CaretLeft } from 'phosphor-svelte';
21722
21756
  import { Label, Input } from 'alus-ui';
21723
21757
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -21731,7 +21765,7 @@ sum(1, 2);\`;
21731
21765
  </svelte:head>
21732
21766
 
21733
21767
  <a
21734
- href="/"
21768
+ href={resolve('/')}
21735
21769
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
21736
21770
  >
21737
21771
  <CaretLeft class="h-5 w-5" />
@@ -21811,6 +21845,7 @@ sum(1, 2);\`;
21811
21845
  </main>
21812
21846
  `,
21813
21847
  "demos/layout/+page.svelte": `<script lang="ts">
21848
+ import { resolve } from '$app/paths';
21814
21849
  import { CaretLeft } from 'phosphor-svelte';
21815
21850
  import { Stack, Flex, Grid, Container, Spacer, Columns } from 'alus-ui';
21816
21851
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -21847,7 +21882,7 @@ sum(1, 2);\`;
21847
21882
  </svelte:head>
21848
21883
 
21849
21884
  <a
21850
- href="/"
21885
+ href={resolve('/')}
21851
21886
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
21852
21887
  >
21853
21888
  <CaretLeft class="h-5 w-5" />
@@ -21874,7 +21909,7 @@ sum(1, 2);\`;
21874
21909
  <h2 class="font-display mb-6 text-2xl text-(--ink)">Stack \u2014 vertical</h2>
21875
21910
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
21876
21911
  <Stack gap="0.75rem" align="stretch">
21877
- {#each tiles.slice(0, 4) as n}
21912
+ {#each tiles.slice(0, 4) as n, i (i)}
21878
21913
  <div class="{card} h-12">{n}</div>
21879
21914
  {/each}
21880
21915
  </Stack>
@@ -21885,7 +21920,7 @@ sum(1, 2);\`;
21885
21920
  <h2 class="font-display mb-6 text-2xl text-(--ink)">Stack \u2014 horizontal with wrap</h2>
21886
21921
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
21887
21922
  <Stack direction="horizontal" gap="0.5rem" wrap>
21888
- {#each tiles as n}
21923
+ {#each tiles as n, i (i)}
21889
21924
  <div class="{card} h-12 w-24">{n}</div>
21890
21925
  {/each}
21891
21926
  </Stack>
@@ -21922,7 +21957,7 @@ sum(1, 2);\`;
21922
21957
  <h2 class="font-display mb-6 text-2xl text-(--ink)">Grid \u2014 fixed columns</h2>
21923
21958
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
21924
21959
  <Grid cols={4} gap="0.75rem">
21925
- {#each tiles as n}
21960
+ {#each tiles as n, i (i)}
21926
21961
  <div class="{card} h-20">{n}</div>
21927
21962
  {/each}
21928
21963
  </Grid>
@@ -21933,7 +21968,7 @@ sum(1, 2);\`;
21933
21968
  <h2 class="font-display mb-6 text-2xl text-(--ink)">Grid \u2014 auto-fill with minColWidth</h2>
21934
21969
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
21935
21970
  <Grid minColWidth="140px" gap="0.75rem">
21936
- {#each tiles as n}
21971
+ {#each tiles as n, i (i)}
21937
21972
  <div class="{card} h-20">{n}</div>
21938
21973
  {/each}
21939
21974
  </Grid>
@@ -21960,7 +21995,7 @@ sum(1, 2);\`;
21960
21995
  <h2 class="font-display mb-6 text-2xl text-(--ink)">Columns \u2014 multi-column text flow</h2>
21961
21996
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
21962
21997
  <Columns count={3} gap="2rem" class="text-sm text-(--charcoal)/80">
21963
- {#each paragraphs as p, i}
21998
+ {#each paragraphs as p, i (i)}
21964
21999
  <p class="mb-3" style={i === 0 ? '' : 'break-inside:avoid;'}>{p}</p>
21965
22000
  {/each}
21966
22001
  </Columns>
@@ -22019,6 +22054,7 @@ sum(1, 2);\`;
22019
22054
  </main>
22020
22055
  `,
22021
22056
  "demos/lightbox/+page.svelte": `<script lang="ts">
22057
+ import { resolve } from '$app/paths';
22022
22058
  import { CaretLeft, X, CaretLeft as Prev, CaretRight as Next } from 'phosphor-svelte';
22023
22059
  import { Lightbox, type LightboxImage } from 'alus-ui';
22024
22060
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -22067,7 +22103,7 @@ sum(1, 2);\`;
22067
22103
  </svelte:head>
22068
22104
 
22069
22105
  <a
22070
- href="/"
22106
+ href={resolve('/')}
22071
22107
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
22072
22108
  >
22073
22109
  <CaretLeft class="h-5 w-5" />
@@ -22091,7 +22127,7 @@ sum(1, 2);\`;
22091
22127
  <section class="mb-16">
22092
22128
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
22093
22129
  <div class="grid grid-cols-3 gap-2">
22094
- {#each images as img, i}
22130
+ {#each images as img, i (i)}
22095
22131
  <button
22096
22132
  class="overflow-hidden rounded border border-(--charcoal)/15"
22097
22133
  onclick={() => openAt(i)}
@@ -22170,6 +22206,7 @@ sum(1, 2);\`;
22170
22206
  </Lightbox>
22171
22207
  `,
22172
22208
  "demos/link/+page.svelte": `<script lang="ts">
22209
+ import { resolve } from '$app/paths';
22173
22210
  import { CaretLeft, ArrowSquareOut } from 'phosphor-svelte';
22174
22211
  import { Link } from 'alus-ui';
22175
22212
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -22183,7 +22220,7 @@ sum(1, 2);\`;
22183
22220
  </svelte:head>
22184
22221
 
22185
22222
  <a
22186
- href="/"
22223
+ href={resolve('/')}
22187
22224
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
22188
22225
  >
22189
22226
  <CaretLeft class="h-5 w-5" />
@@ -22213,7 +22250,7 @@ sum(1, 2);\`;
22213
22250
 
22214
22251
  <div class="japanese-border space-y-4 bg-white/50 p-8 backdrop-blur-sm">
22215
22252
  <p>
22216
- <Link href="/" class="text-(--indigo-dye) underline hover:text-(--vermilion)">
22253
+ <Link href={resolve('/')} class="text-(--indigo-dye) underline hover:text-(--vermilion)">
22217
22254
  Internal link
22218
22255
  </Link>
22219
22256
  \u2014 points within the app.
@@ -22230,7 +22267,7 @@ sum(1, 2);\`;
22230
22267
  </p>
22231
22268
  <p>
22232
22269
  <Link
22233
- href="/components"
22270
+ href={resolve('/components')}
22234
22271
  current="page"
22235
22272
  class="text-(--vermilion) underline aria-[current=page]:font-semibold"
22236
22273
  >
@@ -22268,6 +22305,7 @@ sum(1, 2);\`;
22268
22305
  </main>
22269
22306
  `,
22270
22307
  "demos/list/+page.svelte": `<script lang="ts">
22308
+ import { resolve } from '$app/paths';
22271
22309
  import { CaretLeft, Circle } from 'phosphor-svelte';
22272
22310
  import { List, ListItem } from 'alus-ui';
22273
22311
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -22287,7 +22325,7 @@ sum(1, 2);\`;
22287
22325
  </svelte:head>
22288
22326
 
22289
22327
  <a
22290
- href="/"
22328
+ href={resolve('/')}
22291
22329
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
22292
22330
  >
22293
22331
  <CaretLeft class="h-5 w-5" />
@@ -22353,6 +22391,7 @@ sum(1, 2);\`;
22353
22391
  </main>
22354
22392
  `,
22355
22393
  "demos/live-region/+page.svelte": `<script lang="ts">
22394
+ import { resolve } from '$app/paths';
22356
22395
  import { CaretLeft } from 'phosphor-svelte';
22357
22396
  import { LiveRegion, Button } from 'alus-ui';
22358
22397
  import DemoFooter from '$components/DemoFooter.svelte';
@@ -22379,7 +22418,7 @@ sum(1, 2);\`;
22379
22418
  </svelte:head>
22380
22419
 
22381
22420
  <a
22382
- href="/"
22421
+ href={resolve('/')}
22383
22422
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
22384
22423
  >
22385
22424
  <CaretLeft class="h-5 w-5" />
@@ -22465,6 +22504,7 @@ sum(1, 2);\`;
22465
22504
  import { CaretLeft, CaretDown, PencilSimple, Trash, Copy, Share } from 'phosphor-svelte';
22466
22505
  import { Menu, MenuTrigger, MenuContent, MenuItem } from 'alus-ui';
22467
22506
  import DemoFooter from '$components/DemoFooter.svelte';
22507
+ import { resolve } from '$app/paths';
22468
22508
 
22469
22509
  const code = \`<Menu>
22470
22510
  <MenuTrigger>File</MenuTrigger>
@@ -22483,7 +22523,7 @@ sum(1, 2);\`;
22483
22523
  </svelte:head>
22484
22524
 
22485
22525
  <a
22486
- href="/"
22526
+ href={resolve('/')}
22487
22527
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
22488
22528
  >
22489
22529
  <CaretLeft class="h-5 w-5" />
@@ -22607,6 +22647,7 @@ sum(1, 2);\`;
22607
22647
  ModalClose
22608
22648
  } from 'alus-ui';
22609
22649
  import DemoFooter from '$components/DemoFooter.svelte';
22650
+ import { resolve } from '$app/paths';
22610
22651
 
22611
22652
  const code = \`<Modal>
22612
22653
  <ModalTrigger>Open</ModalTrigger>
@@ -22624,7 +22665,7 @@ sum(1, 2);\`;
22624
22665
  </svelte:head>
22625
22666
 
22626
22667
  <a
22627
- href="/"
22668
+ href={resolve('/')}
22628
22669
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
22629
22670
  >
22630
22671
  <CaretLeft class="h-5 w-5" />
@@ -22724,6 +22765,7 @@ sum(1, 2);\`;
22724
22765
  import { CaretLeft, House, Compass, BookOpen, Gear } from 'phosphor-svelte';
22725
22766
  import { Navigation } from 'alus-ui';
22726
22767
  import DemoFooter from '$components/DemoFooter.svelte';
22768
+ import { resolve } from '$app/paths';
22727
22769
 
22728
22770
  const code = \`<Navigation aria-label="Primary">
22729
22771
  <a href="/" aria-current="page">Home</a>
@@ -22737,7 +22779,7 @@ sum(1, 2);\`;
22737
22779
  </svelte:head>
22738
22780
 
22739
22781
  <a
22740
- href="/"
22782
+ href={resolve('/')}
22741
22783
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
22742
22784
  >
22743
22785
  <CaretLeft class="h-5 w-5" />
@@ -22767,26 +22809,26 @@ sum(1, 2);\`;
22767
22809
  class="flex items-center gap-1 rounded border border-(--charcoal)/15 bg-white p-1"
22768
22810
  >
22769
22811
  <a
22770
- href="/"
22812
+ href={resolve('/')}
22771
22813
  aria-current="page"
22772
22814
  class="inline-flex items-center gap-2 rounded px-3 py-1.5 text-sm text-(--ink) aria-[current=page]:bg-(--indigo-dye) aria-[current=page]:text-white"
22773
22815
  >
22774
22816
  <House class="h-4 w-4" />Home
22775
22817
  </a>
22776
22818
  <a
22777
- href="/components"
22819
+ href={resolve('/components')}
22778
22820
  class="inline-flex items-center gap-2 rounded px-3 py-1.5 text-sm text-(--ink) hover:bg-(--cream)"
22779
22821
  >
22780
22822
  <Compass class="h-4 w-4" />Components
22781
22823
  </a>
22782
22824
  <a
22783
- href="/docs"
22825
+ href={resolve('/docs')}
22784
22826
  class="inline-flex items-center gap-2 rounded px-3 py-1.5 text-sm text-(--ink) hover:bg-(--cream)"
22785
22827
  >
22786
22828
  <BookOpen class="h-4 w-4" />Docs
22787
22829
  </a>
22788
22830
  <a
22789
- href="/settings"
22831
+ href={resolve('/settings')}
22790
22832
  class="inline-flex items-center gap-2 rounded px-3 py-1.5 text-sm text-(--ink) hover:bg-(--cream)"
22791
22833
  >
22792
22834
  <Gear class="h-4 w-4" />Settings
@@ -22838,6 +22880,7 @@ sum(1, 2);\`;
22838
22880
  import { CaretLeft, Bell, BellRinging } from 'phosphor-svelte';
22839
22881
  import { NotificationBell, Button } from 'alus-ui';
22840
22882
  import DemoFooter from '$components/DemoFooter.svelte';
22883
+ import { resolve } from '$app/paths';
22841
22884
 
22842
22885
  const code = \`<NotificationBell count={3} max={99} onclick={open}>
22843
22886
  {#snippet children({ hasUnread })}
@@ -22855,7 +22898,7 @@ sum(1, 2);\`;
22855
22898
  </svelte:head>
22856
22899
 
22857
22900
  <a
22858
- href="/"
22901
+ href={resolve('/')}
22859
22902
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
22860
22903
  >
22861
22904
  <CaretLeft class="h-5 w-5" />
@@ -22920,9 +22963,7 @@ sum(1, 2);\`;
22920
22963
  class="relative rounded-full border border-(--charcoal)/15 bg-white p-3 text-(--ink) hover:border-(--vermilion)"
22921
22964
  badgeClass="absolute -top-1 -right-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-(--vermilion) px-1 text-[10px] font-bold text-white"
22922
22965
  >
22923
- {#snippet children()}
22924
- <BellRinging class="h-6 w-6" weight="duotone" />
22925
- {/snippet}
22966
+ <BellRinging class="h-6 w-6" weight="duotone" />
22926
22967
  </NotificationBell>
22927
22968
  <span class="font-mono text-xs text-(--charcoal)/60">count: {big} (capped)</span>
22928
22969
  <Button
@@ -22940,9 +22981,7 @@ sum(1, 2);\`;
22940
22981
  class="relative rounded-full border border-(--charcoal)/15 bg-white p-3 text-(--charcoal)/50"
22941
22982
  badgeClass="absolute -top-1 -right-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-(--charcoal)/20 px-1 text-[10px] font-bold text-(--ink)"
22942
22983
  >
22943
- {#snippet children()}
22944
- <Bell class="h-6 w-6" />
22945
- {/snippet}
22984
+ <Bell class="h-6 w-6" />
22946
22985
  </NotificationBell>
22947
22986
  <span class="font-mono text-xs text-(--charcoal)/60">count: 0 (showZero)</span>
22948
22987
  </div>
@@ -22982,9 +23021,11 @@ sum(1, 2);\`;
22982
23021
  import { CaretLeft, Plus, Minus } from 'phosphor-svelte';
22983
23022
  import { NumberInput, Label } from 'alus-ui';
22984
23023
  import DemoFooter from '$components/DemoFooter.svelte';
23024
+ import { resolve } from '$app/paths';
22985
23025
 
22986
23026
  const code = \`<script lang="ts">
22987
23027
  import { NumberInput } from 'alus-ui';
23028
+ import { resolve } from '$app/paths';
22988
23029
  let qty = $state(1);
22989
23030
  <\\/script>
22990
23031
 
@@ -22999,7 +23040,7 @@ sum(1, 2);\`;
22999
23040
  </svelte:head>
23000
23041
 
23001
23042
  <a
23002
- href="/"
23043
+ href={resolve('/')}
23003
23044
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
23004
23045
  >
23005
23046
  <CaretLeft class="h-5 w-5" />
@@ -23092,11 +23133,13 @@ sum(1, 2);\`;
23092
23133
  `,
23093
23134
  "demos/overlay/+page.svelte": `<script lang="ts">
23094
23135
  import { CaretLeft } from 'phosphor-svelte';
23136
+ import { resolve } from '$app/paths';
23095
23137
  import { Overlay, Button } from 'alus-ui';
23096
23138
  import DemoFooter from '$components/DemoFooter.svelte';
23097
23139
 
23098
23140
  const code = \`<script lang="ts">
23099
23141
  import { Overlay, Button } from 'alus-ui';
23142
+ import { resolve } from '$app/paths';
23100
23143
  let open = $state(false);
23101
23144
  <\\/script>
23102
23145
 
@@ -23115,7 +23158,7 @@ sum(1, 2);\`;
23115
23158
  </svelte:head>
23116
23159
 
23117
23160
  <a
23118
- href="/"
23161
+ href={resolve('/')}
23119
23162
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
23120
23163
  >
23121
23164
  <CaretLeft class="h-5 w-5" />
@@ -23182,11 +23225,13 @@ sum(1, 2);\`;
23182
23225
  `,
23183
23226
  "demos/pagination/+page.svelte": `<script lang="ts">
23184
23227
  import { CaretLeft, CaretRight, CaretDoubleLeft, CaretDoubleRight } from 'phosphor-svelte';
23228
+ import { resolve } from '$app/paths';
23185
23229
  import { Pagination } from 'alus-ui';
23186
23230
  import DemoFooter from '$components/DemoFooter.svelte';
23187
23231
 
23188
23232
  const code = \`<script lang="ts">
23189
23233
  import { Pagination } from 'alus-ui';
23234
+ import { resolve } from '$app/paths';
23190
23235
  let page = $state(1);
23191
23236
  <\\/script>
23192
23237
 
@@ -23200,7 +23245,7 @@ sum(1, 2);\`;
23200
23245
  </svelte:head>
23201
23246
 
23202
23247
  <a
23203
- href="/"
23248
+ href={resolve('/')}
23204
23249
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
23205
23250
  >
23206
23251
  <CaretLeft class="h-5 w-5" />
@@ -23249,7 +23294,7 @@ sum(1, 2);\`;
23249
23294
  >
23250
23295
  <CaretLeft class="h-4 w-4" />
23251
23296
  </button>
23252
- {#each pages as item}
23297
+ {#each pages as item, i (i)}
23253
23298
  {#if item === 'ellipsis'}
23254
23299
  <span class="px-2 text-(--charcoal)/40">\u2026</span>
23255
23300
  {:else}
@@ -23322,6 +23367,7 @@ sum(1, 2);\`;
23322
23367
  import { CaretLeft } from 'phosphor-svelte';
23323
23368
  import { Popover, PopoverTrigger, PopoverContent } from 'alus-ui';
23324
23369
  import DemoFooter from '$components/DemoFooter.svelte';
23370
+ import { resolve } from '$app/paths';
23325
23371
 
23326
23372
  const code = \`<Popover>
23327
23373
  <PopoverTrigger>Open</PopoverTrigger>
@@ -23336,7 +23382,7 @@ sum(1, 2);\`;
23336
23382
  </svelte:head>
23337
23383
 
23338
23384
  <a
23339
- href="/"
23385
+ href={resolve('/')}
23340
23386
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
23341
23387
  >
23342
23388
  <CaretLeft class="h-5 w-5" />
@@ -23411,6 +23457,7 @@ sum(1, 2);\`;
23411
23457
  import { CaretLeft } from 'phosphor-svelte';
23412
23458
  import { Portal } from 'alus-ui';
23413
23459
  import DemoFooter from '$components/DemoFooter.svelte';
23460
+ import { resolve } from '$app/paths';
23414
23461
 
23415
23462
  const code = \`{#if open}
23416
23463
  <Portal>
@@ -23427,7 +23474,7 @@ sum(1, 2);\`;
23427
23474
  </svelte:head>
23428
23475
 
23429
23476
  <a
23430
- href="/"
23477
+ href={resolve('/')}
23431
23478
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
23432
23479
  >
23433
23480
  <CaretLeft class="h-5 w-5" />
@@ -23508,6 +23555,7 @@ sum(1, 2);\`;
23508
23555
  import { Progress } from 'alus-ui';
23509
23556
  import { onMount } from 'svelte';
23510
23557
  import DemoFooter from '$components/DemoFooter.svelte';
23558
+ import { resolve } from '$app/paths';
23511
23559
 
23512
23560
  const code = \`<Progress
23513
23561
  value={45}
@@ -23531,7 +23579,7 @@ sum(1, 2);\`;
23531
23579
  </svelte:head>
23532
23580
 
23533
23581
  <a
23534
- href="/"
23582
+ href={resolve('/')}
23535
23583
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
23536
23584
  >
23537
23585
  <CaretLeft class="h-5 w-5" />
@@ -23616,11 +23664,13 @@ sum(1, 2);\`;
23616
23664
  `,
23617
23665
  "demos/radio/+page.svelte": `<script lang="ts">
23618
23666
  import { CaretLeft, Check } from 'phosphor-svelte';
23667
+ import { resolve } from '$app/paths';
23619
23668
  import { Radio } from 'alus-ui';
23620
23669
  import DemoFooter from '$components/DemoFooter.svelte';
23621
23670
 
23622
23671
  const code = \`<script lang="ts">
23623
23672
  import { Radio } from 'alus-ui';
23673
+ import { resolve } from '$app/paths';
23624
23674
  let choice = $state('email');
23625
23675
  <\\/script>
23626
23676
 
@@ -23642,7 +23692,7 @@ sum(1, 2);\`;
23642
23692
  </svelte:head>
23643
23693
 
23644
23694
  <a
23645
- href="/"
23695
+ href={resolve('/')}
23646
23696
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
23647
23697
  >
23648
23698
  <CaretLeft class="h-5 w-5" />
@@ -24137,11 +24187,13 @@ sum(1, 2);\`;
24137
24187
  `,
24138
24188
  "demos/radio-group/+page.svelte": `<script lang="ts">
24139
24189
  import { CaretLeft } from 'phosphor-svelte';
24190
+ import { resolve } from '$app/paths';
24140
24191
  import { RadioGroup, Radio } from 'alus-ui';
24141
24192
  import DemoFooter from '$components/DemoFooter.svelte';
24142
24193
 
24143
24194
  const code = \`<script lang="ts">
24144
24195
  import { RadioGroup, Radio } from 'alus-ui';
24196
+ import { resolve } from '$app/paths';
24145
24197
  let plan = $state('pro');
24146
24198
  <\\/script>
24147
24199
 
@@ -24161,7 +24213,7 @@ sum(1, 2);\`;
24161
24213
  </svelte:head>
24162
24214
 
24163
24215
  <a
24164
- href="/"
24216
+ href={resolve('/')}
24165
24217
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
24166
24218
  >
24167
24219
  <CaretLeft class="h-5 w-5" />
@@ -24221,7 +24273,7 @@ sum(1, 2);\`;
24221
24273
  aria-label="Size"
24222
24274
  class="flex gap-6"
24223
24275
  >
24224
- {#each ['s', 'm', 'l', 'xl'] as s}
24276
+ {#each ['s', 'm', 'l', 'xl'] as s, i (i)}
24225
24277
  <label class="flex items-center gap-2 text-(--charcoal) uppercase">
24226
24278
  <Radio name="size" value={s} bind:group={size} class="accent-(--vermilion)" />
24227
24279
  <span>{s}</span>
@@ -24254,11 +24306,13 @@ sum(1, 2);\`;
24254
24306
  `,
24255
24307
  "demos/rating/+page.svelte": `<script lang="ts">
24256
24308
  import { CaretLeft, Star } from 'phosphor-svelte';
24309
+ import { resolve } from '$app/paths';
24257
24310
  import { Rating } from 'alus-ui';
24258
24311
  import DemoFooter from '$components/DemoFooter.svelte';
24259
24312
 
24260
24313
  const code = \`<script lang="ts">
24261
24314
  import { Rating } from 'alus-ui';
24315
+ import { resolve } from '$app/paths';
24262
24316
  let score = $state(3);
24263
24317
  <\\/script>
24264
24318
 
@@ -24273,7 +24327,7 @@ sum(1, 2);\`;
24273
24327
  </svelte:head>
24274
24328
 
24275
24329
  <a
24276
- href="/"
24330
+ href={resolve('/')}
24277
24331
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
24278
24332
  >
24279
24333
  <CaretLeft class="h-5 w-5" />
@@ -24367,9 +24421,10 @@ sum(1, 2);\`;
24367
24421
  </main>
24368
24422
  `,
24369
24423
  "demos/resizable/+page.svelte": `<script lang="ts">
24370
- import { CaretLeft, DotsSixVertical, DotsSix } from 'phosphor-svelte';
24424
+ import { CaretLeft } from 'phosphor-svelte';
24371
24425
  import { Resizable } from 'alus-ui';
24372
24426
  import DemoFooter from '$components/DemoFooter.svelte';
24427
+ import { resolve } from '$app/paths';
24373
24428
 
24374
24429
  const code = \`<Resizable
24375
24430
  bind:size={width}
@@ -24390,7 +24445,7 @@ sum(1, 2);\`;
24390
24445
  </svelte:head>
24391
24446
 
24392
24447
  <a
24393
- href="/"
24448
+ href={resolve('/')}
24394
24449
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
24395
24450
  >
24396
24451
  <CaretLeft class="h-5 w-5" />
@@ -24479,6 +24534,7 @@ sum(1, 2);\`;
24479
24534
  import { CaretLeft, Trash, MagnifyingGlass } from 'phosphor-svelte';
24480
24535
  import { ScreenReaderOnly } from 'alus-ui';
24481
24536
  import DemoFooter from '$components/DemoFooter.svelte';
24537
+ import { resolve } from '$app/paths';
24482
24538
 
24483
24539
  const code = \`<button>
24484
24540
  <Trash class="h-5 w-5" />
@@ -24491,7 +24547,7 @@ sum(1, 2);\`;
24491
24547
  </svelte:head>
24492
24548
 
24493
24549
  <a
24494
- href="/"
24550
+ href={resolve('/')}
24495
24551
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
24496
24552
  >
24497
24553
  <CaretLeft class="h-5 w-5" />
@@ -24557,11 +24613,13 @@ sum(1, 2);\`;
24557
24613
  `,
24558
24614
  "demos/search-input/+page.svelte": `<script lang="ts">
24559
24615
  import { CaretLeft, MagnifyingGlass, X } from 'phosphor-svelte';
24616
+ import { resolve } from '$app/paths';
24560
24617
  import { SearchInput, Label } from 'alus-ui';
24561
24618
  import DemoFooter from '$components/DemoFooter.svelte';
24562
24619
 
24563
24620
  const code = \`<script lang="ts">
24564
24621
  import { SearchInput } from 'alus-ui';
24622
+ import { resolve } from '$app/paths';
24565
24623
  let q = $state('');
24566
24624
  <\\/script>
24567
24625
 
@@ -24576,7 +24634,7 @@ sum(1, 2);\`;
24576
24634
  </svelte:head>
24577
24635
 
24578
24636
  <a
24579
- href="/"
24637
+ href={resolve('/')}
24580
24638
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
24581
24639
  >
24582
24640
  <CaretLeft class="h-5 w-5" />
@@ -24677,11 +24735,13 @@ sum(1, 2);\`;
24677
24735
  `,
24678
24736
  "demos/select/+page.svelte": `<script lang="ts">
24679
24737
  import { CaretLeft, CaretDown, Check } from 'phosphor-svelte';
24738
+ import { resolve } from '$app/paths';
24680
24739
  import { Select, SelectTrigger, SelectContent, SelectOption } from 'alus-ui';
24681
24740
  import DemoFooter from '$components/DemoFooter.svelte';
24682
24741
 
24683
24742
  const code = \`<script lang="ts">
24684
24743
  import { Select, SelectTrigger, SelectContent, SelectOption } from 'alus-ui';
24744
+ import { resolve } from '$app/paths';
24685
24745
  let value = $state('');
24686
24746
  <\\/script>
24687
24747
 
@@ -24728,7 +24788,7 @@ sum(1, 2);\`;
24728
24788
  </svelte:head>
24729
24789
 
24730
24790
  <a
24731
- href="/"
24791
+ href={resolve('/')}
24732
24792
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
24733
24793
  >
24734
24794
  <CaretLeft class="h-5 w-5" />
@@ -24918,6 +24978,7 @@ sum(1, 2);\`;
24918
24978
  SheetClose
24919
24979
  } from 'alus-ui';
24920
24980
  import DemoFooter from '$components/DemoFooter.svelte';
24981
+ import { resolve } from '$app/paths';
24921
24982
 
24922
24983
  const code = \`<Sheet side="bottom">
24923
24984
  <SheetTrigger>Open</SheetTrigger>
@@ -24935,7 +24996,7 @@ sum(1, 2);\`;
24935
24996
  </svelte:head>
24936
24997
 
24937
24998
  <a
24938
- href="/"
24999
+ href={resolve('/')}
24939
25000
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
24940
25001
  >
24941
25002
  <CaretLeft class="h-5 w-5" />
@@ -25029,6 +25090,7 @@ sum(1, 2);\`;
25029
25090
  import { CaretLeft } from 'phosphor-svelte';
25030
25091
  import { Skeleton } from 'alus-ui';
25031
25092
  import DemoFooter from '$components/DemoFooter.svelte';
25093
+ import { resolve } from '$app/paths';
25032
25094
 
25033
25095
  const code = \`<Skeleton class="block h-4 w-1/3 animate-pulse rounded bg-gray-200" />
25034
25096
  <Skeleton class="block h-32 w-full animate-pulse bg-gray-200" />\`;
@@ -25039,7 +25101,7 @@ sum(1, 2);\`;
25039
25101
  </svelte:head>
25040
25102
 
25041
25103
  <a
25042
- href="/"
25104
+ href={resolve('/')}
25043
25105
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
25044
25106
  >
25045
25107
  <CaretLeft class="h-5 w-5" />
@@ -25102,11 +25164,13 @@ sum(1, 2);\`;
25102
25164
  `,
25103
25165
  "demos/slider/+page.svelte": `<script lang="ts">
25104
25166
  import { CaretLeft } from 'phosphor-svelte';
25167
+ import { resolve } from '$app/paths';
25105
25168
  import { Slider, Label } from 'alus-ui';
25106
25169
  import DemoFooter from '$components/DemoFooter.svelte';
25107
25170
 
25108
25171
  const code = \`<script lang="ts">
25109
25172
  import { Slider } from 'alus-ui';
25173
+ import { resolve } from '$app/paths';
25110
25174
  let volume = $state(50);
25111
25175
  <\\/script>
25112
25176
 
@@ -25121,7 +25185,7 @@ sum(1, 2);\`;
25121
25185
  </svelte:head>
25122
25186
 
25123
25187
  <a
25124
- href="/"
25188
+ href={resolve('/')}
25125
25189
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
25126
25190
  >
25127
25191
  <CaretLeft class="h-5 w-5" />
@@ -25193,6 +25257,7 @@ sum(1, 2);\`;
25193
25257
  import { CaretLeft, DotsSixVertical } from 'phosphor-svelte';
25194
25258
  import { Sortable } from 'alus-ui';
25195
25259
  import DemoFooter from '$components/DemoFooter.svelte';
25260
+ import { resolve } from '$app/paths';
25196
25261
 
25197
25262
  const code = \`<Sortable bind:items={tasks} getKey={(t) => t.id} aria-label="Tasks">
25198
25263
  {#snippet item({ value, grabbed, itemAttrs })}
@@ -25218,7 +25283,7 @@ sum(1, 2);\`;
25218
25283
  </svelte:head>
25219
25284
 
25220
25285
  <a
25221
- href="/"
25286
+ href={resolve('/')}
25222
25287
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
25223
25288
  >
25224
25289
  <CaretLeft class="h-5 w-5" />
@@ -25340,6 +25405,7 @@ sum(1, 2);\`;
25340
25405
  import { CaretLeft } from 'phosphor-svelte';
25341
25406
  import { Spinner } from 'alus-ui';
25342
25407
  import DemoFooter from '$components/DemoFooter.svelte';
25408
+ import { resolve } from '$app/paths';
25343
25409
 
25344
25410
  const code = \`<Spinner
25345
25411
  label="Loading content"
@@ -25352,7 +25418,7 @@ sum(1, 2);\`;
25352
25418
  </svelte:head>
25353
25419
 
25354
25420
  <a
25355
- href="/"
25421
+ href={resolve('/')}
25356
25422
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
25357
25423
  >
25358
25424
  <CaretLeft class="h-5 w-5" />
@@ -25425,6 +25491,7 @@ sum(1, 2);\`;
25425
25491
  import { CaretLeft } from 'phosphor-svelte';
25426
25492
  import { SplitView, SplitViewPane, SplitViewHandle } from 'alus-ui';
25427
25493
  import DemoFooter from '$components/DemoFooter.svelte';
25494
+ import { resolve } from '$app/paths';
25428
25495
 
25429
25496
  const code = \`<SplitView bind:size={pct} min={20} max={80} orientation="horizontal" aria-label="Editor">
25430
25497
  <SplitViewPane side="first">Left</SplitViewPane>
@@ -25441,7 +25508,7 @@ sum(1, 2);\`;
25441
25508
  </svelte:head>
25442
25509
 
25443
25510
  <a
25444
- href="/"
25511
+ href={resolve('/')}
25445
25512
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
25446
25513
  >
25447
25514
  <CaretLeft class="h-5 w-5" />
@@ -25568,6 +25635,7 @@ sum(1, 2);\`;
25568
25635
  } from 'phosphor-svelte';
25569
25636
  import { StatCard } from 'alus-ui';
25570
25637
  import DemoFooter from '$components/DemoFooter.svelte';
25638
+ import { resolve } from '$app/paths';
25571
25639
 
25572
25640
  const code = \`<StatCard
25573
25641
  label="Active users"
@@ -25591,7 +25659,7 @@ sum(1, 2);\`;
25591
25659
  </svelte:head>
25592
25660
 
25593
25661
  <a
25594
- href="/"
25662
+ href={resolve('/')}
25595
25663
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
25596
25664
  >
25597
25665
  <CaretLeft class="h-5 w-5" />
@@ -25735,6 +25803,7 @@ sum(1, 2);\`;
25735
25803
  import { CaretLeft, Check } from 'phosphor-svelte';
25736
25804
  import { Stepper, StepperStep, Button } from 'alus-ui';
25737
25805
  import DemoFooter from '$components/DemoFooter.svelte';
25806
+ import { resolve } from '$app/paths';
25738
25807
 
25739
25808
  const code = \`<Stepper value={1} steps={3}>
25740
25809
  <StepperStep index={0}>Account</StepperStep>
@@ -25756,7 +25825,7 @@ sum(1, 2);\`;
25756
25825
  </svelte:head>
25757
25826
 
25758
25827
  <a
25759
- href="/"
25828
+ href={resolve('/')}
25760
25829
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
25761
25830
  >
25762
25831
  <CaretLeft class="h-5 w-5" />
@@ -25782,7 +25851,7 @@ sum(1, 2);\`;
25782
25851
 
25783
25852
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
25784
25853
  <Stepper bind:current aria-label="Onboarding" class="mb-8 flex items-center gap-2">
25785
- {#each steps as step, i}
25854
+ {#each steps as step, i (i)}
25786
25855
  <StepperStep index={i} class="flex flex-1 items-center gap-3">
25787
25856
  {#snippet children({ status })}
25788
25857
  <span
@@ -25867,6 +25936,7 @@ sum(1, 2);\`;
25867
25936
  import { CaretLeft, CaretRight, File, Folder, Image, Code } from 'phosphor-svelte';
25868
25937
  import { Menu, MenuTrigger, MenuContent, MenuItem, SubMenu, type SubMenuItem } from 'alus-ui';
25869
25938
  import DemoFooter from '$components/DemoFooter.svelte';
25939
+ import { resolve } from '$app/paths';
25870
25940
 
25871
25941
  const code = \`<Menu>
25872
25942
  <MenuTrigger>File</MenuTrigger>
@@ -25908,7 +25978,7 @@ sum(1, 2);\`;
25908
25978
  </svelte:head>
25909
25979
 
25910
25980
  <a
25911
- href="/"
25981
+ href={resolve('/')}
25912
25982
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
25913
25983
  >
25914
25984
  <CaretLeft class="h-5 w-5" />
@@ -25956,10 +26026,8 @@ sum(1, 2);\`;
25956
26026
  separatorClass="my-1 h-px bg-(--charcoal)/15"
25957
26027
  class="flex items-center justify-between rounded px-3 py-1.5 text-sm text-(--ink) hover:bg-(--cream) data-highlighted:bg-(--indigo-dye) data-highlighted:text-white data-[state=open]:bg-(--indigo-dye)/10"
25958
26028
  >
25959
- {#snippet children()}
25960
- <span>New</span>
25961
- <CaretRight class="h-3 w-3" />
25962
- {/snippet}
26029
+ <span>New</span>
26030
+ <CaretRight class="h-3 w-3" />
25963
26031
  {#snippet item({ item })}
25964
26032
  {#if item.label}
25965
26033
  {@const Icon = iconMap[item.label]}
@@ -26015,6 +26083,7 @@ sum(1, 2);\`;
26015
26083
  import { CaretLeft, ArrowLeft, ArrowRight, ArrowUp, ArrowDown } from 'phosphor-svelte';
26016
26084
  import { Swipeable, type SwipeDirection } from 'alus-ui';
26017
26085
  import DemoFooter from '$components/DemoFooter.svelte';
26086
+ import { resolve } from '$app/paths';
26018
26087
 
26019
26088
  const code = \`<Swipeable
26020
26089
  onSwipe={(d) => handle(d)}
@@ -26046,7 +26115,7 @@ sum(1, 2);\`;
26046
26115
  </svelte:head>
26047
26116
 
26048
26117
  <a
26049
- href="/"
26118
+ href={resolve('/')}
26050
26119
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
26051
26120
  >
26052
26121
  <CaretLeft class="h-5 w-5" />
@@ -26163,11 +26232,13 @@ sum(1, 2);\`;
26163
26232
  `,
26164
26233
  "demos/switch/+page.svelte": `<script lang="ts">
26165
26234
  import { CaretLeft } from 'phosphor-svelte';
26235
+ import { resolve } from '$app/paths';
26166
26236
  import { Switch, Label } from 'alus-ui';
26167
26237
  import DemoFooter from '$components/DemoFooter.svelte';
26168
26238
 
26169
26239
  const code = \`<script lang="ts">
26170
26240
  import { Switch } from 'alus-ui';
26241
+ import { resolve } from '$app/paths';
26171
26242
  let on = $state(true);
26172
26243
  <\\/script>
26173
26244
 
@@ -26187,7 +26258,7 @@ sum(1, 2);\`;
26187
26258
  </svelte:head>
26188
26259
 
26189
26260
  <a
26190
- href="/"
26261
+ href={resolve('/')}
26191
26262
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
26192
26263
  >
26193
26264
  <CaretLeft class="h-5 w-5" />
@@ -26288,6 +26359,7 @@ sum(1, 2);\`;
26288
26359
  TableCell
26289
26360
  } from 'alus-ui';
26290
26361
  import DemoFooter from '$components/DemoFooter.svelte';
26362
+ import { resolve } from '$app/paths';
26291
26363
 
26292
26364
  const code = \`<Table>
26293
26365
  <TableCaption>Team scoreboard</TableCaption>
@@ -26346,7 +26418,7 @@ sum(1, 2);\`;
26346
26418
  </svelte:head>
26347
26419
 
26348
26420
  <a
26349
- href="/"
26421
+ href={resolve('/')}
26350
26422
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
26351
26423
  >
26352
26424
  <CaretLeft class="h-5 w-5" />
@@ -26377,7 +26449,7 @@ sum(1, 2);\`;
26377
26449
  </TableCaption>
26378
26450
  <TableHead>
26379
26451
  <TableRow>
26380
- {#each [{ k: 'name', label: 'Name' }, { k: 'role', label: 'Role' }, { k: 'score', label: 'Score' }] as col}
26452
+ {#each [{ k: 'name', label: 'Name' }, { k: 'role', label: 'Role' }, { k: 'score', label: 'Score' }] as col (col.k)}
26381
26453
  <TableHeader
26382
26454
  scope="col"
26383
26455
  sort={sortKey === col.k ? sortDir : 'none'}
@@ -26453,6 +26525,7 @@ sum(1, 2);\`;
26453
26525
  import { CaretLeft } from 'phosphor-svelte';
26454
26526
  import { Tabs, TabList, Tab, TabPanel } from 'alus-ui';
26455
26527
  import DemoFooter from '$components/DemoFooter.svelte';
26528
+ import { resolve } from '$app/paths';
26456
26529
 
26457
26530
  const code = \`<Tabs value="overview">
26458
26531
  <TabList>
@@ -26471,7 +26544,7 @@ sum(1, 2);\`;
26471
26544
  </svelte:head>
26472
26545
 
26473
26546
  <a
26474
- href="/"
26547
+ href={resolve('/')}
26475
26548
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
26476
26549
  >
26477
26550
  <CaretLeft class="h-5 w-5" />
@@ -26564,6 +26637,7 @@ sum(1, 2);\`;
26564
26637
  import { CaretLeft } from 'phosphor-svelte';
26565
26638
  import { Tag } from 'alus-ui';
26566
26639
  import DemoFooter from '$components/DemoFooter.svelte';
26640
+ import { resolve } from '$app/paths';
26567
26641
 
26568
26642
  const code = \`<Tag removable onremove={() => remove(id)} aria-label="React tag">
26569
26643
  React
@@ -26587,7 +26661,7 @@ sum(1, 2);\`;
26587
26661
  </svelte:head>
26588
26662
 
26589
26663
  <a
26590
- href="/"
26664
+ href={resolve('/')}
26591
26665
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
26592
26666
  >
26593
26667
  <CaretLeft class="h-5 w-5" />
@@ -26698,11 +26772,13 @@ sum(1, 2);\`;
26698
26772
  `,
26699
26773
  "demos/textarea/+page.svelte": `<script lang="ts">
26700
26774
  import { CaretLeft } from 'phosphor-svelte';
26775
+ import { resolve } from '$app/paths';
26701
26776
  import { Textarea } from 'alus-ui';
26702
26777
  import DemoFooter from '$components/DemoFooter.svelte';
26703
26778
 
26704
26779
  const code = \`<script lang="ts">
26705
26780
  import { Textarea } from 'alus-ui';
26781
+ import { resolve } from '$app/paths';
26706
26782
  let bio = $state('');
26707
26783
  <\\/script>
26708
26784
 
@@ -26723,7 +26799,7 @@ sum(1, 2);\`;
26723
26799
  </svelte:head>
26724
26800
 
26725
26801
  <a
26726
- href="/"
26802
+ href={resolve('/')}
26727
26803
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
26728
26804
  >
26729
26805
  <CaretLeft class="h-5 w-5" />
@@ -26813,11 +26889,13 @@ sum(1, 2);\`;
26813
26889
  `,
26814
26890
  "demos/time-picker/+page.svelte": `<script lang="ts">
26815
26891
  import { CaretLeft, Lock, WarningCircle, CheckCircle } from 'phosphor-svelte';
26892
+ import { resolve } from '$app/paths';
26816
26893
  import { TimePicker, type Time } from 'alus-ui';
26817
26894
  import DemoFooter from '$components/DemoFooter.svelte';
26818
26895
 
26819
26896
  const code = \`<script lang="ts">
26820
26897
  import { TimePicker, type Time } from 'alus-ui';
26898
+ import { resolve } from '$app/paths';
26821
26899
  let t = $state<Time | null>({ hour: 9, minute: 30 });
26822
26900
  <\\/script>
26823
26901
 
@@ -26843,7 +26921,7 @@ sum(1, 2);\`;
26843
26921
  </svelte:head>
26844
26922
 
26845
26923
  <a
26846
- href="/"
26924
+ href={resolve('/')}
26847
26925
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
26848
26926
  >
26849
26927
  <CaretLeft class="h-5 w-5" />
@@ -27033,6 +27111,7 @@ sum(1, 2);\`;
27033
27111
  import { CaretLeft, Check, Circle, CircleNotch } from 'phosphor-svelte';
27034
27112
  import { Timeline, TimelineItem } from 'alus-ui';
27035
27113
  import DemoFooter from '$components/DemoFooter.svelte';
27114
+ import { resolve } from '$app/paths';
27036
27115
 
27037
27116
  const code = \`<Timeline aria-label="Project milestones">
27038
27117
  <TimelineItem status="completed" time="Q1" datetime="2026-01-01">
@@ -27050,7 +27129,7 @@ sum(1, 2);\`;
27050
27129
  </svelte:head>
27051
27130
 
27052
27131
  <a
27053
- href="/"
27132
+ href={resolve('/')}
27054
27133
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
27055
27134
  >
27056
27135
  <CaretLeft class="h-5 w-5" />
@@ -27173,6 +27252,7 @@ sum(1, 2);\`;
27173
27252
  import { CaretLeft } from 'phosphor-svelte';
27174
27253
  import { Timestamp } from 'alus-ui';
27175
27254
  import DemoFooter from '$components/DemoFooter.svelte';
27255
+ import { resolve } from '$app/paths';
27176
27256
 
27177
27257
  const code = \`<Timestamp value={Date.now() - 60_000} />
27178
27258
  <Timestamp value={ts} mode="absolute" />
@@ -27195,7 +27275,7 @@ sum(1, 2);\`;
27195
27275
  </svelte:head>
27196
27276
 
27197
27277
  <a
27198
- href="/"
27278
+ href={resolve('/')}
27199
27279
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
27200
27280
  >
27201
27281
  <CaretLeft class="h-5 w-5" />
@@ -27222,7 +27302,7 @@ sum(1, 2);\`;
27222
27302
  <h2 class="font-display mb-6 text-2xl text-(--ink)">Relative</h2>
27223
27303
  <div class="japanese-border bg-white/50 p-8 backdrop-blur-sm">
27224
27304
  <ul class="divide-y divide-(--charcoal)/10">
27225
- {#each samples as s}
27305
+ {#each samples as s, i (i)}
27226
27306
  <li class="flex items-center justify-between py-3">
27227
27307
  <span class="text-(--ink)">{s.label}</span>
27228
27308
  <Timestamp value={s.value} class="font-mono text-sm text-(--charcoal)/70" />
@@ -27292,11 +27372,13 @@ sum(1, 2);\`;
27292
27372
  `,
27293
27373
  "demos/toast/+page.svelte": `<script lang="ts">
27294
27374
  import { CaretLeft, CheckCircle, Warning, XCircle, Info, X } from 'phosphor-svelte';
27375
+ import { resolve } from '$app/paths';
27295
27376
  import { Toaster, createToaster, Button, type ToastPlacement } from 'alus-ui';
27296
27377
  import DemoFooter from '$components/DemoFooter.svelte';
27297
27378
 
27298
27379
  const code = \`<script lang="ts">
27299
27380
  import { Toaster, createToaster } from 'alus-ui';
27381
+ import { resolve } from '$app/paths';
27300
27382
  const tt = createToaster<{ title: string }>();
27301
27383
  <\\/script>
27302
27384
 
@@ -27373,7 +27455,7 @@ sum(1, 2);\`;
27373
27455
  </svelte:head>
27374
27456
 
27375
27457
  <a
27376
- href="/"
27458
+ href={resolve('/')}
27377
27459
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
27378
27460
  >
27379
27461
  <CaretLeft class="h-5 w-5" />
@@ -27451,108 +27533,106 @@ sum(1, 2);\`;
27451
27533
  </div>
27452
27534
  {/snippet}
27453
27535
 
27454
- {#snippet children()}
27455
- <section class="mb-12">
27456
- <h2 class="font-display mb-6 text-2xl text-(--ink)">Placement</h2>
27457
- <div class="japanese-border bg-white/50 p-6 backdrop-blur-sm">
27458
- <div role="radiogroup" aria-label="Toast placement" class="grid grid-cols-3 gap-2">
27459
- {#each placements as p}
27460
- <button
27461
- type="button"
27462
- role="radio"
27463
- aria-checked={placement === p.value}
27464
- onclick={() => (placement = p.value)}
27465
- class="rounded border px-3 py-2 text-sm transition-colors"
27466
- style={placement === p.value
27467
- ? 'background:var(--indigo-dye);border-color:var(--indigo-dye);color:white;'
27468
- : 'border-color:rgba(45,45,45,0.2);color:var(--ink);'}
27469
- >
27470
- {p.label}
27471
- </button>
27472
- {/each}
27473
- </div>
27474
- <p class="mt-3 font-mono text-xs text-(--charcoal)/60">
27475
- current: <code>{placement}</code>
27476
- </p>
27536
+ <section class="mb-12">
27537
+ <h2 class="font-display mb-6 text-2xl text-(--ink)">Placement</h2>
27538
+ <div class="japanese-border bg-white/50 p-6 backdrop-blur-sm">
27539
+ <div role="radiogroup" aria-label="Toast placement" class="grid grid-cols-3 gap-2">
27540
+ {#each placements as p, i (i)}
27541
+ <button
27542
+ type="button"
27543
+ role="radio"
27544
+ aria-checked={placement === p.value}
27545
+ onclick={() => (placement = p.value)}
27546
+ class="rounded border px-3 py-2 text-sm transition-colors"
27547
+ style={placement === p.value
27548
+ ? 'background:var(--indigo-dye);border-color:var(--indigo-dye);color:white;'
27549
+ : 'border-color:rgba(45,45,45,0.2);color:var(--ink);'}
27550
+ >
27551
+ {p.label}
27552
+ </button>
27553
+ {/each}
27477
27554
  </div>
27478
- </section>
27555
+ <p class="mt-3 font-mono text-xs text-(--charcoal)/60">
27556
+ current: <code>{placement}</code>
27557
+ </p>
27558
+ </div>
27559
+ </section>
27479
27560
 
27480
- <section class="mb-16">
27481
- <h2 class="font-display mb-8 text-2xl text-(--ink)">Trigger variants</h2>
27561
+ <section class="mb-16">
27562
+ <h2 class="font-display mb-8 text-2xl text-(--ink)">Trigger variants</h2>
27482
27563
 
27483
- <div class="japanese-border flex flex-wrap gap-3 bg-white/50 p-8 backdrop-blur-sm">
27484
- <Button
27485
- onclick={() =>
27486
- tt.addToast({
27487
- data: {
27488
- title: 'Saved',
27489
- description: 'Settings synced to the cloud.',
27490
- variant: 'success'
27491
- }
27492
- })}
27493
- class="rounded border border-(--matcha) bg-(--matcha) px-4 py-2 text-sm text-white"
27494
- >
27495
- Success
27496
- </Button>
27497
- <Button
27498
- onclick={() =>
27499
- tt.addToast({
27500
- type: 'assertive',
27501
- data: {
27502
- title: 'Heads up',
27503
- description: 'Token expires in 5 minutes.',
27504
- variant: 'warning'
27505
- }
27506
- })}
27507
- class="rounded border border-(--muted-gold) bg-(--muted-gold) px-4 py-2 text-sm text-(--ink)"
27508
- >
27509
- Warning
27510
- </Button>
27511
- <Button
27512
- onclick={() =>
27513
- tt.addToast({
27514
- type: 'assertive',
27515
- data: {
27516
- title: 'Upload failed',
27517
- description: 'Could not reach the server.',
27518
- variant: 'error',
27519
- action: {
27520
- label: 'Retry',
27521
- onClick: () => tt.addToast({ data: { title: 'Retrying\u2026', variant: 'info' } })
27522
- }
27523
- }
27524
- })}
27525
- class="rounded border border-(--vermilion) bg-(--vermilion) px-4 py-2 text-sm text-white"
27526
- >
27527
- Error + action
27528
- </Button>
27529
- <Button
27530
- onclick={() =>
27531
- tt.addToast({
27532
- closeDelay: 0,
27533
- data: {
27534
- title: 'Persistent',
27535
- description: 'Stays until dismissed.',
27536
- variant: 'info'
27564
+ <div class="japanese-border flex flex-wrap gap-3 bg-white/50 p-8 backdrop-blur-sm">
27565
+ <Button
27566
+ onclick={() =>
27567
+ tt.addToast({
27568
+ data: {
27569
+ title: 'Saved',
27570
+ description: 'Settings synced to the cloud.',
27571
+ variant: 'success'
27572
+ }
27573
+ })}
27574
+ class="rounded border border-(--matcha) bg-(--matcha) px-4 py-2 text-sm text-white"
27575
+ >
27576
+ Success
27577
+ </Button>
27578
+ <Button
27579
+ onclick={() =>
27580
+ tt.addToast({
27581
+ type: 'assertive',
27582
+ data: {
27583
+ title: 'Heads up',
27584
+ description: 'Token expires in 5 minutes.',
27585
+ variant: 'warning'
27586
+ }
27587
+ })}
27588
+ class="rounded border border-(--muted-gold) bg-(--muted-gold) px-4 py-2 text-sm text-(--ink)"
27589
+ >
27590
+ Warning
27591
+ </Button>
27592
+ <Button
27593
+ onclick={() =>
27594
+ tt.addToast({
27595
+ type: 'assertive',
27596
+ data: {
27597
+ title: 'Upload failed',
27598
+ description: 'Could not reach the server.',
27599
+ variant: 'error',
27600
+ action: {
27601
+ label: 'Retry',
27602
+ onClick: () => tt.addToast({ data: { title: 'Retrying\u2026', variant: 'info' } })
27537
27603
  }
27538
- })}
27539
- class="rounded border border-(--indigo-dye) px-4 py-2 text-sm text-(--indigo-dye)"
27540
- >
27541
- Persistent
27542
- </Button>
27543
- <Button
27544
- onclick={() => tt.clear()}
27545
- class="rounded border border-(--charcoal)/30 px-4 py-2 text-sm text-(--charcoal)"
27546
- >
27547
- Clear all
27548
- </Button>
27549
- </div>
27604
+ }
27605
+ })}
27606
+ class="rounded border border-(--vermilion) bg-(--vermilion) px-4 py-2 text-sm text-white"
27607
+ >
27608
+ Error + action
27609
+ </Button>
27610
+ <Button
27611
+ onclick={() =>
27612
+ tt.addToast({
27613
+ closeDelay: 0,
27614
+ data: {
27615
+ title: 'Persistent',
27616
+ description: 'Stays until dismissed.',
27617
+ variant: 'info'
27618
+ }
27619
+ })}
27620
+ class="rounded border border-(--indigo-dye) px-4 py-2 text-sm text-(--indigo-dye)"
27621
+ >
27622
+ Persistent
27623
+ </Button>
27624
+ <Button
27625
+ onclick={() => tt.clear()}
27626
+ class="rounded border border-(--charcoal)/30 px-4 py-2 text-sm text-(--charcoal)"
27627
+ >
27628
+ Clear all
27629
+ </Button>
27630
+ </div>
27550
27631
 
27551
- <p class="mt-4 font-mono text-sm text-(--charcoal)/60">
27552
- Hover any toast to pause its timer. Switch tabs to pause all.
27553
- </p>
27554
- </section>
27555
- {/snippet}
27632
+ <p class="mt-4 font-mono text-sm text-(--charcoal)/60">
27633
+ Hover any toast to pause its timer. Switch tabs to pause all.
27634
+ </p>
27635
+ </section>
27556
27636
  </Toaster>
27557
27637
 
27558
27638
  <DemoFooter
@@ -27586,11 +27666,13 @@ sum(1, 2);\`;
27586
27666
  `,
27587
27667
  "demos/toggle-button/+page.svelte": `<script lang="ts">
27588
27668
  import { CaretLeft, TextB, TextItalic, TextUnderline, Sun, Moon } from 'phosphor-svelte';
27669
+ import { resolve } from '$app/paths';
27589
27670
  import { ToggleButton } from 'alus-ui';
27590
27671
  import DemoFooter from '$components/DemoFooter.svelte';
27591
27672
 
27592
27673
  const code = \`<script lang="ts">
27593
27674
  import { ToggleButton } from 'alus-ui';
27675
+ import { resolve } from '$app/paths';
27594
27676
  let bold = $state(false);
27595
27677
  <\\/script>
27596
27678
 
@@ -27609,7 +27691,7 @@ sum(1, 2);\`;
27609
27691
  </svelte:head>
27610
27692
 
27611
27693
  <a
27612
- href="/"
27694
+ href={resolve('/')}
27613
27695
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
27614
27696
  >
27615
27697
  <CaretLeft class="h-5 w-5" />
@@ -27699,6 +27781,7 @@ sum(1, 2);\`;
27699
27781
  import { CaretLeft, Info } from 'phosphor-svelte';
27700
27782
  import { Tooltip, TooltipTrigger, TooltipContent } from 'alus-ui';
27701
27783
  import DemoFooter from '$components/DemoFooter.svelte';
27784
+ import { resolve } from '$app/paths';
27702
27785
 
27703
27786
  const code = \`<Tooltip>
27704
27787
  <TooltipTrigger>Hover me</TooltipTrigger>
@@ -27711,7 +27794,7 @@ sum(1, 2);\`;
27711
27794
  </svelte:head>
27712
27795
 
27713
27796
  <a
27714
- href="/"
27797
+ href={resolve('/')}
27715
27798
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
27716
27799
  >
27717
27800
  <CaretLeft class="h-5 w-5" />
@@ -27787,6 +27870,7 @@ sum(1, 2);\`;
27787
27870
  import { CaretLeft, CaretRight, Folder, FolderOpen, File } from 'phosphor-svelte';
27788
27871
  import { TreeView, TreeItem } from 'alus-ui';
27789
27872
  import DemoFooter from '$components/DemoFooter.svelte';
27873
+ import { resolve } from '$app/paths';
27790
27874
 
27791
27875
  const code = \`<TreeView bind:selected aria-label="Project files">
27792
27876
  <TreeItem id="src">
@@ -27805,7 +27889,7 @@ sum(1, 2);\`;
27805
27889
  </svelte:head>
27806
27890
 
27807
27891
  <a
27808
- href="/"
27892
+ href={resolve('/')}
27809
27893
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
27810
27894
  >
27811
27895
  <CaretLeft class="h-5 w-5" />
@@ -27963,6 +28047,7 @@ sum(1, 2);\`;
27963
28047
  import { CaretLeft, Plus, Trash, Shuffle } from 'phosphor-svelte';
27964
28048
  import { VirtualList } from 'alus-ui';
27965
28049
  import DemoFooter from '$components/DemoFooter.svelte';
28050
+ import { resolve } from '$app/paths';
27966
28051
 
27967
28052
  const code = \`<VirtualList items={rows} itemHeight={56} overscan={4} aria-label="Rows">
27968
28053
  {#snippet item({ item, index })}
@@ -28016,7 +28101,7 @@ sum(1, 2);\`;
28016
28101
  </svelte:head>
28017
28102
 
28018
28103
  <a
28019
- href="/"
28104
+ href={resolve('/')}
28020
28105
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
28021
28106
  >
28022
28107
  <CaretLeft class="h-5 w-5" />
@@ -28176,6 +28261,7 @@ sum(1, 2);\`;
28176
28261
  import { CaretLeft } from 'phosphor-svelte';
28177
28262
  import { VisuallyHidden } from 'alus-ui';
28178
28263
  import DemoFooter from '$components/DemoFooter.svelte';
28264
+ import { resolve } from '$app/paths';
28179
28265
 
28180
28266
  const code = \`<button>
28181
28267
  <span aria-hidden="true">\xD7</span>
@@ -28189,7 +28275,7 @@ sum(1, 2);\`;
28189
28275
  </svelte:head>
28190
28276
 
28191
28277
  <a
28192
- href="/"
28278
+ href={resolve('/')}
28193
28279
  class="mb-8 inline-flex items-center gap-2 text-(--indigo-dye) transition-colors duration-300 hover:text-(--vermilion)"
28194
28280
  >
28195
28281
  <CaretLeft class="h-5 w-5" />
@@ -28260,7 +28346,7 @@ sum(1, 2);\`;
28260
28346
  </main>
28261
28347
  `
28262
28348
  },
28263
- generated_at: "2026-05-31T12:31:38.888Z"
28349
+ generated_at: "2026-05-31T14:52:05.218Z"
28264
28350
  };
28265
28351
 
28266
28352
  // ../mcp-server/src/lib/fs.ts
@@ -28327,9 +28413,7 @@ function truncate(text, hint) {
28327
28413
 
28328
28414
  // ../mcp-server/src/mcp/handlers/tools/list-components.ts
28329
28415
  var schema = object({
28330
- category: optional(
28331
- picklist(CATEGORIES, "Must be one of the alus-ui component categories")
28332
- ),
28416
+ category: optional(picklist(CATEGORIES, "Must be one of the alus-ui component categories")),
28333
28417
  response_format: optional(picklist(["markdown", "json"]), "markdown")
28334
28418
  });
28335
28419
  async function list_components_handler(params) {
@@ -28398,9 +28482,7 @@ function get_component(server2) {
28398
28482
  try {
28399
28483
  const all = await list_all_components();
28400
28484
  const needle = name.toLowerCase().replace(/[-_\s]/g, "");
28401
- let matches = all.filter(
28402
- (c) => c.name.toLowerCase().replace(/[-_\s]/g, "") === needle
28403
- );
28485
+ let matches = all.filter((c) => c.name.toLowerCase().replace(/[-_\s]/g, "") === needle);
28404
28486
  if (category) matches = matches.filter((c) => c.category === category);
28405
28487
  if (!matches.length) {
28406
28488
  const similar = all.filter(
@@ -28490,7 +28572,9 @@ function search_components(server2) {
28490
28572
  ""
28491
28573
  );
28492
28574
  }
28493
- return tool.text(truncate(lines.join("\n"), "Narrow with category or a more specific query."));
28575
+ return tool.text(
28576
+ truncate(lines.join("\n"), "Narrow with category or a more specific query.")
28577
+ );
28494
28578
  } catch (e) {
28495
28579
  return tool.error(e.message);
28496
28580
  }
@@ -28503,7 +28587,9 @@ import { readFile as readFile3, readdir as readdir2 } from "fs/promises";
28503
28587
  var schema4 = object({
28504
28588
  name: pipe(
28505
28589
  string(),
28506
- description("Component route folder name, lowercase hyphenated (e.g. 'button', 'date-picker')")
28590
+ description(
28591
+ "Component route folder name, lowercase hyphenated (e.g. 'button', 'date-picker')"
28592
+ )
28507
28593
  )
28508
28594
  });
28509
28595
  function get_component_demo(server2) {
@@ -28578,7 +28664,10 @@ ${content}
28578
28664
  import { readFile as readFile5 } from "fs/promises";
28579
28665
  var MODULES = ["aria", "focus", "id", "keyboard", "index", "form/state"];
28580
28666
  var schema5 = object({
28581
- module: picklist(MODULES, "Utility module \u2014 one of: aria, focus, id, keyboard, index, form/state")
28667
+ module: picklist(
28668
+ MODULES,
28669
+ "Utility module \u2014 one of: aria, focus, id, keyboard, index, form/state"
28670
+ )
28582
28671
  });
28583
28672
  function get_utils(server2) {
28584
28673
  server2.tool(