@classic-homes/theme-svelte 1.30.0 → 1.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -34,6 +34,7 @@
34
34
  import { cn } from '../utils.js';
35
35
  import Button from './Button.svelte';
36
36
  import Icon from './Icon.svelte';
37
+ import BackButton from './BackButton.svelte';
37
38
  import DropdownMenu, { type DropdownMenuItem } from './DropdownMenu.svelte';
38
39
 
39
40
  interface Props {
@@ -45,9 +46,9 @@
45
46
  caption?: string;
46
47
  /** Heading level for the title (default 1) */
47
48
  headingLevel?: 1 | 2 | 3;
48
- /** Renders a back (arrow) button linking here */
49
+ /** Renders a labelled back link above the title, linking here */
49
50
  backHref?: string;
50
- /** What the back button returns to, e.g. "Signs" → aria-label "Back to Signs" */
51
+ /** What the back link returns to, e.g. "signs" → "Back to signs" */
51
52
  backLabel?: string;
52
53
  /** Header actions; see `ActionHeaderAction.priority` for how they collapse */
53
54
  actions?: ActionHeaderAction[];
@@ -59,7 +60,7 @@
59
60
  collapseAt?: 'auto' | 'sm' | 'md' | 'lg' | 'never';
60
61
  /** Accessible name of the overflow menu trigger */
61
62
  moreLabel?: string;
62
- /** Leading visual after the back button (e.g. a record thumbnail) */
63
+ /** Leading visual beside the title (e.g. a record thumbnail) */
63
64
  media?: Snippet;
64
65
  /** Inline content right after the title (keep it small, e.g. one badge) */
65
66
  titleSuffix?: Snippet;
@@ -131,7 +132,6 @@
131
132
  const narrowMenu = $derived(toMenu([...secondary, ...overflow]));
132
133
 
133
134
  const headingTag = $derived(`h${headingLevel}`);
134
- const hasLead = $derived(Boolean(backHref || media));
135
135
  const hasActions = $derived(primary.length > 0 || secondary.length > 0 || overflow.length > 0);
136
136
 
137
137
  /** Mirrors Button's `outline` variant at `size="sm"` */
@@ -160,22 +160,17 @@
160
160
  {...restProps}
161
161
  >
162
162
  <div class="ah-grid">
163
- {#if hasLead}
163
+ {#if backHref}
164
+ <!-- Text, not a bare arrow: an icon-only back button gets mistaken for
165
+ (and confused with) the sidebar collapse toggle beside it. -->
166
+ <div class="ah-back">
167
+ <BackButton href={backHref} label={backLabel} class="-ms-2" />
168
+ </div>
169
+ {/if}
170
+
171
+ {#if media}
164
172
  <div class="ah-lead">
165
- {#if backHref}
166
- <Button
167
- variant="ghost"
168
- size="icon"
169
- href={backHref}
170
- class="h-9 w-9 shrink-0"
171
- aria-label={backLabel ? `Back to ${backLabel}` : 'Back'}
172
- >
173
- <Icon name="arrow-left" size={18} aria-hidden="true" />
174
- </Button>
175
- {/if}
176
- {#if media}
177
- <div class="shrink-0">{@render media()}</div>
178
- {/if}
173
+ <div class="shrink-0">{@render media()}</div>
179
174
  </div>
180
175
  {/if}
181
176
 
@@ -288,6 +283,7 @@
288
283
  display: grid;
289
284
  grid-template-columns: auto minmax(0, 1fr) auto auto;
290
285
  grid-template-areas:
286
+ 'back back back back'
291
287
  'lead heading actions actions'
292
288
  'lead sub sub sub'
293
289
  'lead caption caption caption'
@@ -309,6 +305,12 @@
309
305
  --ah-title-leading: 1.5rem;
310
306
  }
311
307
 
308
+ .ah-back {
309
+ grid-area: back;
310
+ min-width: 0;
311
+ margin-bottom: 0.25rem;
312
+ }
313
+
312
314
  .ah-lead {
313
315
  grid-area: lead;
314
316
  align-self: start;
@@ -448,6 +450,7 @@
448
450
  --ah-subtitle-size: 1rem;
449
451
  --ah-subtitle-leading: 1.5rem;
450
452
  grid-template-areas:
453
+ 'back back back back'
451
454
  'lead heading actions tools'
452
455
  'lead sub actions tools'
453
456
  'lead badges badges badges';
@@ -456,6 +459,7 @@
456
459
  /* With a caption the actions sit on the title row and the caption under them */
457
460
  [data-has-caption] .ah-grid {
458
461
  grid-template-areas:
462
+ 'back back back back'
459
463
  'lead heading actions tools'
460
464
  'lead sub caption tools'
461
465
  'lead badges badges badges';
@@ -35,9 +35,9 @@ interface Props {
35
35
  caption?: string;
36
36
  /** Heading level for the title (default 1) */
37
37
  headingLevel?: 1 | 2 | 3;
38
- /** Renders a back (arrow) button linking here */
38
+ /** Renders a labelled back link above the title, linking here */
39
39
  backHref?: string;
40
- /** What the back button returns to, e.g. "Signs" → aria-label "Back to Signs" */
40
+ /** What the back link returns to, e.g. "signs" → "Back to signs" */
41
41
  backLabel?: string;
42
42
  /** Header actions; see `ActionHeaderAction.priority` for how they collapse */
43
43
  actions?: ActionHeaderAction[];
@@ -49,7 +49,7 @@ interface Props {
49
49
  collapseAt?: 'auto' | 'sm' | 'md' | 'lg' | 'never';
50
50
  /** Accessible name of the overflow menu trigger */
51
51
  moreLabel?: string;
52
- /** Leading visual after the back button (e.g. a record thumbnail) */
52
+ /** Leading visual beside the title (e.g. a record thumbnail) */
53
53
  media?: Snippet;
54
54
  /** Inline content right after the title (keep it small, e.g. one badge) */
55
55
  titleSuffix?: Snippet;
@@ -0,0 +1,53 @@
1
+ <script lang="ts">
2
+ /**
3
+ * BackButton - a labelled "← Back to {label}" link (or button with `onclick`).
4
+ *
5
+ * The visible text is the point: an icon-only arrow gets confused with other
6
+ * chevron controls (e.g. the sidebar toggle). The label truncates rather
7
+ * than wraps, and the full text stays as the tooltip.
8
+ *
9
+ * @example
10
+ * ```svelte
11
+ * <BackButton href="/marketing/signs" label="signs" />
12
+ * <BackButton onclick={close} label="all links" />
13
+ * ```
14
+ */
15
+ import { cn } from '../utils.js';
16
+ import Icon from './Icon.svelte';
17
+
18
+ interface Props {
19
+ /** Where Back goes; renders a link */
20
+ href?: string;
21
+ /** Click handler; renders a button when there is no `href` */
22
+ onclick?: (event: MouseEvent) => void;
23
+ /** What Back returns to, e.g. "signs" → "Back to signs" (omit for plain "Back") */
24
+ label?: string;
25
+ class?: string;
26
+ [key: string]: unknown;
27
+ }
28
+
29
+ let { href, onclick, label, class: className, ...restProps }: Props = $props();
30
+
31
+ const text = $derived(label ? `Back to ${label}` : 'Back');
32
+
33
+ const classes = $derived(
34
+ cn(
35
+ 'inline-flex h-8 max-w-full items-center gap-1.5 rounded-md px-2 text-sm font-medium text-muted-foreground',
36
+ 'ring-offset-background hover:bg-muted-hover hover:text-foreground',
37
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
38
+ className
39
+ )
40
+ );
41
+ </script>
42
+
43
+ {#if href}
44
+ <a {href} class={classes} title={text} data-back-button {onclick} {...restProps}>
45
+ <Icon name="arrow-left" size={16} class="shrink-0" />
46
+ <span class="truncate">{text}</span>
47
+ </a>
48
+ {:else}
49
+ <button type="button" class={classes} title={text} data-back-button {onclick} {...restProps}>
50
+ <Icon name="arrow-left" size={16} class="shrink-0" />
51
+ <span class="truncate">{text}</span>
52
+ </button>
53
+ {/if}
@@ -0,0 +1,13 @@
1
+ interface Props {
2
+ /** Where Back goes; renders a link */
3
+ href?: string;
4
+ /** Click handler; renders a button when there is no `href` */
5
+ onclick?: (event: MouseEvent) => void;
6
+ /** What Back returns to, e.g. "signs" → "Back to signs" (omit for plain "Back") */
7
+ label?: string;
8
+ class?: string;
9
+ [key: string]: unknown;
10
+ }
11
+ declare const BackButton: import("svelte").Component<Props, {}, "">;
12
+ type BackButton = ReturnType<typeof BackButton>;
13
+ export default BackButton;
@@ -169,6 +169,8 @@
169
169
  | 'list'
170
170
  | 'columns'
171
171
  | 'sidebar'
172
+ | 'panel-left-close'
173
+ | 'panel-left-open'
172
174
  | 'layers'
173
175
  | 'layout'
174
176
  | 'move'
@@ -561,9 +563,13 @@
561
563
  path: 'M20 4H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zM8 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4zM5 17a3 3 0 0 1 6 0M14 9h4M14 13h2',
562
564
  },
563
565
  // === Communication ===
564
- bell: { path: 'M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9M13.73 21a2 2 0 0 1-3.46 0' },
566
+ // Bell / bell-off follow current Lucide: rounded base, centred clapper, and a
567
+ // 2→22 slash that stays inside the glyph (the old Feather slash ran 1→23).
568
+ bell: {
569
+ path: 'M10.268 21a2 2 0 0 0 3.464 0M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',
570
+ },
565
571
  'bell-off': {
566
- path: 'M13.73 21a2 2 0 0 1-3.46 0M18.63 13A17.89 17.89 0 0 1 18 8M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14M1 1l22 22',
572
+ path: 'M10.268 21a2 2 0 0 0 3.464 0M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05M2 2l20 20',
567
573
  },
568
574
  inbox: {
569
575
  path: 'M22 12h-6l-2 3h-4l-2-3H2M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',
@@ -731,6 +737,12 @@
731
737
  sidebar: {
732
738
  path: 'M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zM9 3v18',
733
739
  },
740
+ 'panel-left-close': {
741
+ path: 'M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zM9 3v18M16 15l-3-3 3-3',
742
+ },
743
+ 'panel-left-open': {
744
+ path: 'M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zM9 3v18M14 9l3 3-3 3',
745
+ },
734
746
  layers: { path: 'M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5' },
735
747
  layout: {
736
748
  path: 'M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zM3 9h18M9 21V9',
@@ -2,7 +2,7 @@
2
2
  * Available icon names for the Icon component.
3
3
  * Organized by category for easier discovery.
4
4
  */
5
- export type IconName = 'close' | 'check' | 'plus' | 'minus' | 'edit' | 'trash' | 'info' | 'alert-circle' | 'alert-triangle' | 'search' | 'settings' | 'home' | 'loading' | 'send' | 'more' | 'more-horizontal' | 'grip' | 'history' | 'copy' | 'download' | 'upload' | 'refresh' | 'save' | 'print' | 'share' | 'cut' | 'paste' | 'undo' | 'redo' | 'archive' | 'power' | 'zap' | 'sparkles' | 'pin' | 'chevron-down' | 'chevron-up' | 'chevron-left' | 'chevron-right' | 'chevrons-down' | 'chevrons-up' | 'chevrons-left' | 'chevrons-right' | 'arrow-left' | 'arrow-right' | 'arrow-up' | 'arrow-down' | 'corner-up-left' | 'corner-up-right' | 'corner-down-left' | 'corner-down-right' | 'menu' | 'external-link' | 'expand' | 'collapse' | 'fullscreen' | 'minimize' | 'user' | 'users' | 'user-plus' | 'user-minus' | 'user-check' | 'user-x' | 'shield' | 'shield-check' | 'shield-off' | 'badge' | 'id-card' | 'message' | 'chat' | 'mail' | 'phone' | 'bell' | 'bell-off' | 'inbox' | 'at-sign' | 'hash' | 'rss' | 'send' | 'message-circle' | 'message-square' | 'file' | 'file-text' | 'file-code' | 'file-plus' | 'file-minus' | 'folder' | 'folder-open' | 'folder-plus' | 'folder-minus' | 'clipboard' | 'clipboard-check' | 'clipboard-list' | 'book' | 'book-open' | 'newspaper' | 'link' | 'image' | 'play' | 'pause' | 'stop' | 'skip-forward' | 'skip-back' | 'rewind' | 'fast-forward' | 'volume' | 'volume-1' | 'volume-2' | 'volume-x' | 'video' | 'video-off' | 'mic' | 'mic-off' | 'music' | 'camera' | 'camera-off' | 'shopping-cart' | 'shopping-bag' | 'credit-card' | 'dollar-sign' | 'percent' | 'tag' | 'tags' | 'package' | 'truck' | 'receipt' | 'wallet' | 'briefcase' | 'eye' | 'eye-off' | 'lock' | 'unlock' | 'key' | 'check-circle' | 'x-circle' | 'help-circle' | 'alert-octagon' | 'circle' | 'square' | 'triangle' | 'star' | 'star-half' | 'heart' | 'bookmark' | 'flag' | 'thumbs-up' | 'thumbs-down' | 'award' | 'trophy' | 'gift' | 'grid' | 'list' | 'columns' | 'sidebar' | 'layers' | 'layout' | 'move' | 'maximize' | 'filter' | 'sort' | 'sort-asc' | 'sort-desc' | 'bar-chart' | 'bar-chart-2' | 'line-chart' | 'pie-chart' | 'trending-up' | 'trending-down' | 'activity' | 'target' | 'calendar' | 'calendar-plus' | 'calendar-minus' | 'calendar-check' | 'clock' | 'timer' | 'hourglass' | 'alarm' | 'sun' | 'moon' | 'cloud' | 'cloud-rain' | 'cloud-snow' | 'wind' | 'thermometer' | 'droplet' | 'umbrella' | 'globe' | 'map' | 'map-pin' | 'navigation' | 'compass' | 'crosshair' | 'smartphone' | 'tablet' | 'laptop' | 'monitor' | 'tv' | 'printer' | 'wifi' | 'wifi-off' | 'bluetooth' | 'battery' | 'battery-charging' | 'cpu' | 'hard-drive' | 'server' | 'database' | 'cloud-upload' | 'cloud-download' | 'terminal' | 'code' | 'code-2' | 'bug' | 'git-branch' | 'git-commit' | 'git-merge' | 'git-pull-request' | 'box' | 'package' | 'lightbulb' | 'tool' | 'wrench' | 'scissors' | 'paperclip' | 'anchor' | 'aperture' | 'loader' | 'rotate-cw' | 'rotate-ccw' | 'log-in' | 'log-out' | 'slash' | 'percent' | 'hash' | 'bold' | 'italic' | 'heading' | 'list-ordered' | 'indent' | 'outdent' | 'quote' | 'table' | 'keyboard' | 'unlink';
5
+ export type IconName = 'close' | 'check' | 'plus' | 'minus' | 'edit' | 'trash' | 'info' | 'alert-circle' | 'alert-triangle' | 'search' | 'settings' | 'home' | 'loading' | 'send' | 'more' | 'more-horizontal' | 'grip' | 'history' | 'copy' | 'download' | 'upload' | 'refresh' | 'save' | 'print' | 'share' | 'cut' | 'paste' | 'undo' | 'redo' | 'archive' | 'power' | 'zap' | 'sparkles' | 'pin' | 'chevron-down' | 'chevron-up' | 'chevron-left' | 'chevron-right' | 'chevrons-down' | 'chevrons-up' | 'chevrons-left' | 'chevrons-right' | 'arrow-left' | 'arrow-right' | 'arrow-up' | 'arrow-down' | 'corner-up-left' | 'corner-up-right' | 'corner-down-left' | 'corner-down-right' | 'menu' | 'external-link' | 'expand' | 'collapse' | 'fullscreen' | 'minimize' | 'user' | 'users' | 'user-plus' | 'user-minus' | 'user-check' | 'user-x' | 'shield' | 'shield-check' | 'shield-off' | 'badge' | 'id-card' | 'message' | 'chat' | 'mail' | 'phone' | 'bell' | 'bell-off' | 'inbox' | 'at-sign' | 'hash' | 'rss' | 'send' | 'message-circle' | 'message-square' | 'file' | 'file-text' | 'file-code' | 'file-plus' | 'file-minus' | 'folder' | 'folder-open' | 'folder-plus' | 'folder-minus' | 'clipboard' | 'clipboard-check' | 'clipboard-list' | 'book' | 'book-open' | 'newspaper' | 'link' | 'image' | 'play' | 'pause' | 'stop' | 'skip-forward' | 'skip-back' | 'rewind' | 'fast-forward' | 'volume' | 'volume-1' | 'volume-2' | 'volume-x' | 'video' | 'video-off' | 'mic' | 'mic-off' | 'music' | 'camera' | 'camera-off' | 'shopping-cart' | 'shopping-bag' | 'credit-card' | 'dollar-sign' | 'percent' | 'tag' | 'tags' | 'package' | 'truck' | 'receipt' | 'wallet' | 'briefcase' | 'eye' | 'eye-off' | 'lock' | 'unlock' | 'key' | 'check-circle' | 'x-circle' | 'help-circle' | 'alert-octagon' | 'circle' | 'square' | 'triangle' | 'star' | 'star-half' | 'heart' | 'bookmark' | 'flag' | 'thumbs-up' | 'thumbs-down' | 'award' | 'trophy' | 'gift' | 'grid' | 'list' | 'columns' | 'sidebar' | 'panel-left-close' | 'panel-left-open' | 'layers' | 'layout' | 'move' | 'maximize' | 'filter' | 'sort' | 'sort-asc' | 'sort-desc' | 'bar-chart' | 'bar-chart-2' | 'line-chart' | 'pie-chart' | 'trending-up' | 'trending-down' | 'activity' | 'target' | 'calendar' | 'calendar-plus' | 'calendar-minus' | 'calendar-check' | 'clock' | 'timer' | 'hourglass' | 'alarm' | 'sun' | 'moon' | 'cloud' | 'cloud-rain' | 'cloud-snow' | 'wind' | 'thermometer' | 'droplet' | 'umbrella' | 'globe' | 'map' | 'map-pin' | 'navigation' | 'compass' | 'crosshair' | 'smartphone' | 'tablet' | 'laptop' | 'monitor' | 'tv' | 'printer' | 'wifi' | 'wifi-off' | 'bluetooth' | 'battery' | 'battery-charging' | 'cpu' | 'hard-drive' | 'server' | 'database' | 'cloud-upload' | 'cloud-download' | 'terminal' | 'code' | 'code-2' | 'bug' | 'git-branch' | 'git-commit' | 'git-merge' | 'git-pull-request' | 'box' | 'package' | 'lightbulb' | 'tool' | 'wrench' | 'scissors' | 'paperclip' | 'anchor' | 'aperture' | 'loader' | 'rotate-cw' | 'rotate-ccw' | 'log-in' | 'log-out' | 'slash' | 'percent' | 'hash' | 'bold' | 'italic' | 'heading' | 'list-ordered' | 'indent' | 'outdent' | 'quote' | 'table' | 'keyboard' | 'unlink';
6
6
  interface Props {
7
7
  /** The name of the icon to display */
8
8
  name: IconName;
@@ -55,6 +55,7 @@
55
55
  import type { HeaderSearchConfig } from '../../types/layout.js';
56
56
  import { cn } from '../../utils.js';
57
57
  import HeaderSearch from '../HeaderSearch.svelte';
58
+ import Icon from '../Icon.svelte';
58
59
 
59
60
  type Breakpoint = 'sm' | 'md' | 'lg';
60
61
 
@@ -220,7 +221,9 @@
220
221
  </button>
221
222
  {/if}
222
223
 
223
- <!-- Collapse/Expand Button (Desktop sidebar toggle) -->
224
+ <!-- Collapse/Expand Button (Desktop sidebar toggle). A panel icon, not a
225
+ chevron: a left-pointing arrow next to the page title reads as "Back".
226
+ The divider after it groups it with the sidebar rather than the page. -->
224
227
  {#if showCollapseButton}
225
228
  <button
226
229
  class={cn(
@@ -231,22 +234,15 @@
231
234
  )}
232
235
  onclick={() => onCollapseClick?.()}
233
236
  aria-label={sidebarCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}
237
+ title={sidebarCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}
234
238
  aria-expanded={!sidebarCollapsed}
235
239
  >
236
- <svg
237
- class={cn('h-5 w-5 transition-transform', sidebarCollapsed && 'rotate-180')}
238
- fill="none"
239
- viewBox="0 0 24 24"
240
- stroke="currentColor"
241
- >
242
- <path
243
- stroke-linecap="round"
244
- stroke-linejoin="round"
245
- stroke-width="2"
246
- d="M11 19l-7-7 7-7m8 14l-7-7 7-7"
247
- />
248
- </svg>
240
+ <Icon name={sidebarCollapsed ? 'panel-left-open' : 'panel-left-close'} size={20} />
249
241
  </button>
242
+ <span
243
+ class={cn('-ml-2 h-6 w-px shrink-0 bg-foreground/20', bp.collapseButtonShow)}
244
+ aria-hidden="true"
245
+ ></span>
250
246
  {/if}
251
247
 
252
248
  <!-- Page Title -->
@@ -81,6 +81,7 @@ export { default as AvatarFallback } from './components/AvatarFallback.svelte';
81
81
  export { default as Section } from './components/Section.svelte';
82
82
  export { default as PageHeader } from './components/PageHeader.svelte';
83
83
  export { default as ActionHeader, type ActionHeaderAction } from './components/ActionHeader.svelte';
84
+ export { default as BackButton } from './components/BackButton.svelte';
84
85
  export { default as AppShell } from './components/layout/AppShell.svelte';
85
86
  export { default as DashboardLayout } from './components/layout/DashboardLayout.svelte';
86
87
  export { default as PublicLayout } from './components/layout/PublicLayout.svelte';
package/dist/lib/index.js CHANGED
@@ -106,6 +106,7 @@ export { default as AvatarFallback } from './components/AvatarFallback.svelte';
106
106
  export { default as Section } from './components/Section.svelte';
107
107
  export { default as PageHeader } from './components/PageHeader.svelte';
108
108
  export { default as ActionHeader } from './components/ActionHeader.svelte';
109
+ export { default as BackButton } from './components/BackButton.svelte';
109
110
  // Layout Components
110
111
  export { default as AppShell } from './components/layout/AppShell.svelte';
111
112
  export { default as DashboardLayout } from './components/layout/DashboardLayout.svelte';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@classic-homes/theme-svelte",
3
- "version": "1.30.0",
3
+ "version": "1.31.0",
4
4
  "description": "Svelte components for the Classic theme system",
5
5
  "type": "module",
6
6
  "svelte": "./dist/lib/index.js",