@latty-ds/web 0.9.0 → 0.10.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.
@@ -925,7 +925,7 @@
925
925
  {
926
926
  "kind": "variable",
927
927
  "name": "buttonStyles",
928
- "default": "css` :host { display: inline-block; font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif); /* Internal state props — set per variant/appearance below */ --_color: var(--lt-text-on-primary); --_bg: var(--lt-interactive-primary-bg); --_border-color: transparent; --_hover-bg: var(--lt-interactive-primary-bg-hover); --_active-bg: var(--lt-interactive-primary-bg-active); } :host([full-width]) { display: block; width: 100%; } :host([full-width]) [part='base'] { width: 100%; } [part='base'] { align-items: center; background: var(--lt-button-bg, var(--_bg)); border-radius: var(--lt-border-radius); border: var(--lt-border-width, 1px) solid var(--lt-button-border-color, var(--_border-color)); box-sizing: border-box; color: var(--lt-button-color, var(--_color)); cursor: pointer; display: inline-flex; font-family: inherit; font-weight: 400; gap: var(--lt-spacing-2); justify-content: center; line-height: 1; min-width: var(--lt-button-min-width, 88px); user-select: none; transition: background-color 120ms ease, border-color 120ms ease, transform 50ms ease; } [part='base']:active { transform: translateY(1px); } [part='base']:focus-visible { outline: 3px solid var(--lt-border-focus); outline-offset: 2px; } [part='base'][disabled], [part='base'][aria-disabled='true'] { cursor: not-allowed; opacity: 0.6; pointer-events: none; transform: none; } /* anchor reset — browsers apply link color + underline by default */ a[part='base'] { text-decoration: none; } /* sizes */ :host([size='sm']) [part='base'] { font-size: 0.875rem; height: 32px; padding-inline: var(--lt-spacing-3); } :host([size='md']) [part='base'] { font-size: 1rem; height: 40px; padding-inline: var(--lt-spacing-4); } :host([size='lg']) [part='base'] { font-size: 1.0625rem; height: 48px; padding-inline: var(--lt-spacing-5); } /* variants — solid */ :host([variant='primary']) { --_bg: var(--lt-interactive-primary-bg); --_color: var(--lt-text-on-primary); --_hover-bg: var(--lt-interactive-primary-bg-hover); --_active-bg: var(--lt-interactive-primary-bg-active); } :host([variant='secondary']) { --_bg: var(--lt-interactive-secondary-bg); --_color: var(--lt-text-on-secondary); --_hover-bg: var(--lt-interactive-secondary-bg-hover); --_active-bg: var(--lt-interactive-secondary-bg-active); } :host([variant='neutral']) { --_bg: var(--lt-color-neutral-500); --_color: var(--lt-color-neutral-50); --_hover-bg: var(--lt-color-neutral-700); --_active-bg: var(--lt-color-neutral-800); } :host([variant='success']) { --_bg: var(--lt-interactive-success-bg); --_color: var(--lt-text-on-success); --_hover-bg: var(--lt-interactive-success-bg-hover); --_active-bg: var(--lt-interactive-success-bg-active); } :host([variant='warning']) { --_bg: var(--lt-interactive-warning-bg); --_color: var(--lt-text-on-warning); --_hover-bg: var(--lt-interactive-warning-bg-hover); --_active-bg: var(--lt-interactive-warning-bg-active); } :host([variant='error']) { --_bg: var(--lt-interactive-error-bg); --_color: var(--lt-text-on-error); --_hover-bg: var(--lt-interactive-error-bg-hover); --_active-bg: var(--lt-interactive-error-bg-active); } :host([variant='info']) { --_bg: var(--lt-interactive-info-bg); --_color: var(--lt-text-on-info); --_hover-bg: var(--lt-interactive-info-bg-hover); --_active-bg: var(--lt-interactive-info-bg-active); } [part='base']:hover:not([disabled]):not([aria-disabled='true']) { background: var(--lt-button-bg, var(--_hover-bg)); } [part='base']:active:not([disabled]):not([aria-disabled='true']) { background: var(--lt-button-bg, var(--_active-bg)); } /* outlined appearance */ :host([appearance='outlined'][variant='primary']) { --_bg: transparent; --_color: var(--lt-text-primary); --_border-color: var(--lt-border-primary-strong); --_hover-bg: var(--lt-bg-primary-subtle); --_active-bg: var(--lt-bg-primary-subtle); } :host([appearance='outlined'][variant='secondary']) { --_bg: transparent; --_color: var(--lt-text-secondary); --_border-color: var(--lt-border-secondary-strong); --_hover-bg: var(--lt-bg-secondary-subtle); --_active-bg: var(--lt-bg-secondary-subtle); } :host([appearance='outlined'][variant='neutral']) { --_bg: transparent; --_color: var(--lt-text-neutral); --_border-color: var(--lt-border-strong); --_hover-bg: var(--lt-bg-subtle); --_active-bg: var(--lt-bg-surface); } :host([appearance='outlined'][variant='success']) { --_bg: transparent; --_color: var(--lt-text-success); --_border-color: var(--lt-border-success-strong); --_hover-bg: var(--lt-bg-success-subtle); --_active-bg: var(--lt-bg-success-subtle); } :host([appearance='outlined'][variant='warning']) { --_bg: transparent; --_color: var(--lt-text-warning); --_border-color: var(--lt-border-warning-strong); --_hover-bg: var(--lt-bg-warning-subtle); --_active-bg: var(--lt-bg-warning-subtle); } :host([appearance='outlined'][variant='error']) { --_bg: transparent; --_color: var(--lt-text-error); --_border-color: var(--lt-border-error-strong); --_hover-bg: var(--lt-bg-error-subtle); --_active-bg: var(--lt-bg-error-subtle); } :host([appearance='outlined'][variant='info']) { --_bg: transparent; --_color: var(--lt-text-info); --_border-color: var(--lt-border-info-strong); --_hover-bg: var(--lt-bg-info-subtle); --_active-bg: var(--lt-bg-info-subtle); } /* ghost appearance — transparent background, no border, low-emphasis text button */ :host([appearance='ghost'][variant='primary']) { --_bg: transparent; --_color: var(--lt-text-primary); --_hover-bg: var(--lt-bg-primary-subtle); --_active-bg: var(--lt-bg-primary-subtle); } :host([appearance='ghost'][variant='secondary']) { --_bg: transparent; --_color: var(--lt-text-secondary); --_hover-bg: var(--lt-bg-secondary-subtle); --_active-bg: var(--lt-bg-secondary-subtle); } :host([appearance='ghost'][variant='neutral']) { --_bg: transparent; --_color: var(--lt-text-neutral); --_hover-bg: var(--lt-bg-subtle); --_active-bg: var(--lt-bg-surface); } :host([appearance='ghost'][variant='success']) { --_bg: transparent; --_color: var(--lt-text-success); --_hover-bg: var(--lt-bg-success-subtle); --_active-bg: var(--lt-bg-success-subtle); } :host([appearance='ghost'][variant='warning']) { --_bg: transparent; --_color: var(--lt-text-warning); --_hover-bg: var(--lt-bg-warning-subtle); --_active-bg: var(--lt-bg-warning-subtle); } :host([appearance='ghost'][variant='error']) { --_bg: transparent; --_color: var(--lt-text-error); --_hover-bg: var(--lt-bg-error-subtle); --_active-bg: var(--lt-bg-error-subtle); } :host([appearance='ghost'][variant='info']) { --_bg: transparent; --_color: var(--lt-text-info); --_hover-bg: var(--lt-bg-info-subtle); --_active-bg: var(--lt-bg-info-subtle); } :host([appearance='outlined']) [part='base']:active:not([disabled]):not([aria-disabled='true']), :host([appearance='ghost']) [part='base']:active:not([disabled]):not([aria-disabled='true']) { opacity: 0.8; } /* loading */ .spinner { animation: spin 700ms linear infinite; border-radius: 999px; border-right-color: transparent; border: 2px solid currentColor; height: 1em; width: 1em; } @keyframes spin { to { transform: rotate(360deg); } } .icon, .end { align-items: center; display: inline-flex; justify-content: center; } :host([uppercase]) [part='base'] { font-variant-caps: small-caps; letter-spacing: 0.05rem; text-transform: lowercase; } `"
928
+ "default": "css` :host { display: inline-block; font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif); /* Internal state props — set per variant/appearance below */ --_color: var(--lt-text-on-primary); --_bg: var(--lt-interactive-primary-bg); --_border-color: transparent; --_hover-bg: var(--lt-interactive-primary-bg-hover); --_active-bg: var(--lt-interactive-primary-bg-active); } :host([full-width]) { display: block; width: 100%; } :host([full-width]) [part='base'] { width: 100%; } [part='base'] { align-items: center; background: var(--lt-button-bg, var(--_bg)); border-radius: var(--lt-border-radius); border: var(--lt-border-width, 1px) solid var(--lt-button-border-color, var(--_border-color)); box-sizing: border-box; color: var(--lt-button-color, var(--_color)); cursor: pointer; display: inline-flex; font-family: inherit; font-weight: 400; gap: var(--lt-spacing-2); justify-content: center; line-height: 1; min-width: var(--lt-button-min-width, 88px); user-select: none; transition: background-color 120ms ease, border-color 120ms ease, transform 50ms ease; } [part='base']:active { transform: translateY(1px); } [part='base']:focus-visible { outline: 3px solid var(--lt-border-focus); outline-offset: 2px; } [part='base'][disabled], [part='base'][aria-disabled='true'] { cursor: not-allowed; opacity: 0.6; pointer-events: none; transform: none; } /* anchor reset — browsers apply link color + underline by default */ a[part='base'] { text-decoration: none; } /* sizes */ :host([size='sm']) [part='base'] { font-size: 0.875rem; height: 32px; padding-inline: var(--lt-spacing-3); } :host([size='md']) [part='base'] { font-size: 1rem; height: 40px; padding-inline: var(--lt-spacing-4); } :host([size='lg']) [part='base'] { font-size: 1.0625rem; height: 48px; padding-inline: var(--lt-spacing-5); } /* variants — solid */ :host([variant='primary']) { --_bg: var(--lt-interactive-primary-bg); --_color: var(--lt-text-on-primary); --_hover-bg: var(--lt-interactive-primary-bg-hover); --_active-bg: var(--lt-interactive-primary-bg-active); } :host([variant='secondary']) { --_bg: var(--lt-interactive-secondary-bg); --_color: var(--lt-text-on-secondary); --_hover-bg: var(--lt-interactive-secondary-bg-hover); --_active-bg: var(--lt-interactive-secondary-bg-active); } :host([variant='neutral']) { --_bg: var(--lt-color-neutral-500); --_color: var(--lt-color-neutral-50); --_hover-bg: var(--lt-color-neutral-700); --_active-bg: var(--lt-color-neutral-800); } :host([variant='success']) { --_bg: var(--lt-interactive-success-bg); --_color: var(--lt-text-on-success); --_hover-bg: var(--lt-interactive-success-bg-hover); --_active-bg: var(--lt-interactive-success-bg-active); } :host([variant='warning']) { --_bg: var(--lt-interactive-warning-bg); --_color: var(--lt-text-on-warning); --_hover-bg: var(--lt-interactive-warning-bg-hover); --_active-bg: var(--lt-interactive-warning-bg-active); } :host([variant='error']) { --_bg: var(--lt-interactive-error-bg); --_color: var(--lt-text-on-error); --_hover-bg: var(--lt-interactive-error-bg-hover); --_active-bg: var(--lt-interactive-error-bg-active); } :host([variant='info']) { --_bg: var(--lt-interactive-info-bg); --_color: var(--lt-text-on-info); --_hover-bg: var(--lt-interactive-info-bg-hover); --_active-bg: var(--lt-interactive-info-bg-active); } [part='base']:hover:not([disabled]):not([aria-disabled='true']) { background: var(--lt-button-bg, var(--_hover-bg)); } [part='base']:active:not([disabled]):not([aria-disabled='true']) { background: var(--lt-button-bg, var(--_active-bg)); } /* outlined appearance */ :host([appearance='outlined'][variant='primary']) { --_bg: transparent; --_color: var(--lt-text-primary); --_border-color: var(--lt-border-primary-strong); --_hover-bg: var(--lt-bg-primary-subtle); --_active-bg: var(--lt-bg-primary-subtle); } :host([appearance='outlined'][variant='secondary']) { --_bg: transparent; --_color: var(--lt-text-secondary); --_border-color: var(--lt-border-secondary-strong); --_hover-bg: var(--lt-bg-secondary-subtle); --_active-bg: var(--lt-bg-secondary-subtle); } :host([appearance='outlined'][variant='neutral']) { --_bg: transparent; --_color: var(--lt-text-neutral); --_border-color: var(--lt-border-strong); --_hover-bg: var(--lt-bg-subtle); --_active-bg: var(--lt-bg-surface); } :host([appearance='outlined'][variant='success']) { --_bg: transparent; --_color: var(--lt-text-success); --_border-color: var(--lt-border-success-strong); --_hover-bg: var(--lt-bg-success-subtle); --_active-bg: var(--lt-bg-success-subtle); } :host([appearance='outlined'][variant='warning']) { --_bg: transparent; --_color: var(--lt-text-warning); --_border-color: var(--lt-border-warning-strong); --_hover-bg: var(--lt-bg-warning-subtle); --_active-bg: var(--lt-bg-warning-subtle); } :host([appearance='outlined'][variant='error']) { --_bg: transparent; --_color: var(--lt-text-error); --_border-color: var(--lt-border-error-strong); --_hover-bg: var(--lt-bg-error-subtle); --_active-bg: var(--lt-bg-error-subtle); } :host([appearance='outlined'][variant='info']) { --_bg: transparent; --_color: var(--lt-text-info); --_border-color: var(--lt-border-info-strong); --_hover-bg: var(--lt-bg-info-subtle); --_active-bg: var(--lt-bg-info-subtle); } /* ghost appearance — transparent background, no border, low-emphasis text button */ :host([appearance='ghost'][variant='primary']) { --_bg: transparent; --_color: var(--lt-text-primary); --_hover-bg: var(--lt-bg-primary-subtle); --_active-bg: var(--lt-bg-primary-subtle); } :host([appearance='ghost'][variant='secondary']) { --_bg: transparent; --_color: var(--lt-text-secondary); --_hover-bg: var(--lt-bg-secondary-subtle); --_active-bg: var(--lt-bg-secondary-subtle); } :host([appearance='ghost'][variant='neutral']) { --_bg: transparent; --_color: var(--lt-text-neutral); --_hover-bg: var(--lt-bg-subtle); --_active-bg: var(--lt-bg-surface); } :host([appearance='ghost'][variant='success']) { --_bg: transparent; --_color: var(--lt-text-success); --_hover-bg: var(--lt-bg-success-subtle); --_active-bg: var(--lt-bg-success-subtle); } :host([appearance='ghost'][variant='warning']) { --_bg: transparent; --_color: var(--lt-text-warning); --_hover-bg: var(--lt-bg-warning-subtle); --_active-bg: var(--lt-bg-warning-subtle); } :host([appearance='ghost'][variant='error']) { --_bg: transparent; --_color: var(--lt-text-error); --_hover-bg: var(--lt-bg-error-subtle); --_active-bg: var(--lt-bg-error-subtle); } :host([appearance='ghost'][variant='info']) { --_bg: transparent; --_color: var(--lt-text-info); --_hover-bg: var(--lt-bg-info-subtle); --_active-bg: var(--lt-bg-info-subtle); } :host([appearance='outlined']) [part='base']:active:not([disabled]):not([aria-disabled='true']), :host([appearance='ghost']) [part='base']:active:not([disabled]):not([aria-disabled='true']) { opacity: 0.8; } /* bordered — adds a border on top of whatever appearance is active; a no-op on outlined, which already sets the same border color. */ :host([bordered][variant='primary']) { --_border-color: var(--lt-border-primary-strong); } :host([bordered][variant='secondary']) { --_border-color: var(--lt-border-secondary-strong); } :host([bordered][variant='neutral']) { --_border-color: var(--lt-border-strong); } :host([bordered][variant='success']) { --_border-color: var(--lt-border-success-strong); } :host([bordered][variant='warning']) { --_border-color: var(--lt-border-warning-strong); } :host([bordered][variant='error']) { --_border-color: var(--lt-border-error-strong); } :host([bordered][variant='info']) { --_border-color: var(--lt-border-info-strong); } /* loading */ .spinner { animation: spin 700ms linear infinite; border-radius: 999px; border-right-color: transparent; border: 2px solid currentColor; height: 1em; width: 1em; } @keyframes spin { to { transform: rotate(360deg); } } .icon, .end { align-items: center; display: inline-flex; justify-content: center; } :host([uppercase]) [part='base'] { font-variant-caps: small-caps; letter-spacing: 0.05rem; text-transform: lowercase; } `"
929
929
  }
930
930
  ],
931
931
  "exports": [
@@ -1008,6 +1008,15 @@
1008
1008
  "default": "'filled'",
1009
1009
  "description": "Appearance style (filled, outlined, or ghost)."
1010
1010
  },
1011
+ {
1012
+ "kind": "field",
1013
+ "name": "bordered",
1014
+ "type": {
1015
+ "text": "boolean"
1016
+ },
1017
+ "default": "false",
1018
+ "description": "Adds a variant-colored border on top of the current appearance. A no-op on\n`outlined` (which already has one); adds a border to `filled`/`ghost`."
1019
+ },
1011
1020
  {
1012
1021
  "kind": "field",
1013
1022
  "name": "size",
@@ -3478,6 +3487,24 @@
3478
3487
  "default": "false",
3479
3488
  "description": "Apply a frosted-glass blur effect to the backdrop."
3480
3489
  },
3490
+ {
3491
+ "kind": "field",
3492
+ "name": "elevation",
3493
+ "type": {
3494
+ "text": "SurfaceElevation"
3495
+ },
3496
+ "default": "'4'",
3497
+ "description": "Elevation level of the internal surface, matching `lt-surface`'s scale."
3498
+ },
3499
+ {
3500
+ "kind": "field",
3501
+ "name": "appearance",
3502
+ "type": {
3503
+ "text": "SurfaceAppearance"
3504
+ },
3505
+ "default": "'filled'",
3506
+ "description": "Visual appearance of the internal surface, matching `lt-surface`'s vocabulary."
3507
+ },
3481
3508
  {
3482
3509
  "kind": "field",
3483
3510
  "name": "dialogElement",
@@ -3895,7 +3922,7 @@
3895
3922
  "type": {
3896
3923
  "text": "array"
3897
3924
  },
3898
- "default": "[ floatingPanelReset, css` :host { display: inline-block; font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif); } .trigger-wrap { display: contents; } lt-surface.menu { display: none; min-width: 10rem; z-index: 1000; } lt-surface.menu::part(surface) { overflow: hidden; } ` ]"
3925
+ "default": "[ floatingPanelReset, css` :host { display: inline-block; font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif); } .trigger-wrap { display: contents; } lt-surface.menu { display: none; min-width: 10rem; z-index: 1000; } lt-surface.menu::part(surface) { overflow: hidden; padding-block: var(--lt-dropdown-menu-padding, var(--lt-spacing-2)); } ` ]"
3899
3926
  }
3900
3927
  ],
3901
3928
  "exports": [
@@ -3917,6 +3944,12 @@
3917
3944
  "kind": "class",
3918
3945
  "description": "A floating menu anchored to a trigger element.",
3919
3946
  "name": "Dropdown",
3947
+ "cssProperties": [
3948
+ {
3949
+ "description": "Overrides the menu surface's default vertical padding.",
3950
+ "name": "--lt-dropdown-menu-padding"
3951
+ }
3952
+ ],
3920
3953
  "slots": [
3921
3954
  {
3922
3955
  "description": "The element that opens/closes the menu (e.g. lt-button)",
@@ -4205,7 +4238,7 @@
4205
4238
  {
4206
4239
  "kind": "variable",
4207
4240
  "name": "iconButtonStyles",
4208
- "default": "css` :host { display: inline-flex; /* Internal state props — set per variant/appearance below */ --_color: var(--lt-text-subtle); --_bg: transparent; --_border-color: transparent; --_hover-bg: var(--lt-bg-subtle); --_hover-color: var(--lt-text-default); --_active-bg: var(--lt-bg-subtle); } [part='base'] { align-items: center; background: var(--lt-icon-button-bg, var(--_bg)); border-radius: var(--lt-border-radius); border: var(--lt-border-width, 1px) solid var(--lt-icon-button-border-color, var(--_border-color)); box-sizing: border-box; color: var(--lt-icon-button-color, var(--_color)); cursor: pointer; display: inline-flex; justify-content: center; padding: 0; transition: background-color 120ms ease, border-color 120ms ease, transform 50ms ease; user-select: none; } [part='base']:hover:not([disabled]) { background: var(--lt-icon-button-hover-bg, var(--_hover-bg)); color: var(--lt-icon-button-hover-color, var(--lt-icon-button-color, var(--_hover-color))); } [part='base']:active { transform: translateY(1px); } [part='base']:active:not([disabled]) { background: var(--lt-icon-button-hover-bg, var(--_active-bg)); } [part='base']:focus-visible { outline: 3px solid var(--lt-border-focus); outline-offset: 2px; } [part='base'][disabled] { cursor: not-allowed; opacity: 0.5; pointer-events: none; transform: none; } a[part='base'] { text-decoration: none; color: inherit; } /* sizes */ :host([size='sm']) [part='base'] { height: 28px; width: 28px; } :host([size='md']) [part='base'] { height: 36px; width: 36px; } :host([size='lg']) [part='base'] { height: 44px; width: 44px; } /* ── ghost ────────────────────────────────────────────────── */ :host([appearance='ghost'][variant='primary']) { --_color: var(--lt-text-primary); --_hover-bg: var(--lt-bg-primary-subtle); --_hover-color: var(--lt-text-primary); --_active-bg: var(--lt-bg-primary-subtle); } :host([appearance='ghost'][variant='secondary']) { --_color: var(--lt-text-secondary); --_hover-bg: var(--lt-bg-secondary-subtle); --_hover-color: var(--lt-text-secondary); --_active-bg: var(--lt-bg-secondary-subtle); } :host([appearance='ghost'][variant='success']) { --_color: var(--lt-text-success); --_hover-bg: var(--lt-bg-success-subtle); --_hover-color: var(--lt-text-success); --_active-bg: var(--lt-bg-success-subtle); } :host([appearance='ghost'][variant='warning']) { --_color: var(--lt-text-warning); --_hover-bg: var(--lt-bg-warning-subtle); --_hover-color: var(--lt-text-warning); --_active-bg: var(--lt-bg-warning-subtle); } :host([appearance='ghost'][variant='error']) { --_color: var(--lt-text-error); --_hover-bg: var(--lt-bg-error-subtle); --_hover-color: var(--lt-text-error); --_active-bg: var(--lt-bg-error-subtle); } :host([appearance='ghost'][variant='info']) { --_color: var(--lt-text-info); --_hover-bg: var(--lt-bg-info-subtle); --_hover-color: var(--lt-text-info); --_active-bg: var(--lt-bg-info-subtle); } /* ── filled ───────────────────────────────────────────────── */ :host([appearance='filled'][variant='primary']) { --_bg: var(--lt-interactive-primary-bg); --_color: var(--lt-text-on-primary); --_hover-bg: var(--lt-interactive-primary-bg-hover); --_hover-color: var(--lt-text-on-primary); --_active-bg: var(--lt-interactive-primary-bg-active); } :host([appearance='filled'][variant='secondary']) { --_bg: var(--lt-interactive-secondary-bg); --_color: var(--lt-text-on-secondary); --_hover-bg: var(--lt-interactive-secondary-bg-hover); --_hover-color: var(--lt-text-on-secondary); --_active-bg: var(--lt-interactive-secondary-bg-active); } :host([appearance='filled'][variant='neutral']) { --_bg: var(--lt-color-neutral-500); --_color: var(--lt-color-neutral-50); --_hover-bg: var(--lt-color-neutral-700); --_hover-color: var(--lt-color-neutral-50); --_active-bg: var(--lt-color-neutral-800); } :host([appearance='filled'][variant='success']) { --_bg: var(--lt-interactive-success-bg); --_color: var(--lt-text-on-success); --_hover-bg: var(--lt-interactive-success-bg-hover); --_hover-color: var(--lt-text-on-success); --_active-bg: var(--lt-interactive-success-bg-active); } :host([appearance='filled'][variant='warning']) { --_bg: var(--lt-interactive-warning-bg); --_color: var(--lt-text-on-warning); --_hover-bg: var(--lt-interactive-warning-bg-hover); --_hover-color: var(--lt-text-on-warning); --_active-bg: var(--lt-interactive-warning-bg-active); } :host([appearance='filled'][variant='error']) { --_bg: var(--lt-interactive-error-bg); --_color: var(--lt-text-on-error); --_hover-bg: var(--lt-interactive-error-bg-hover); --_hover-color: var(--lt-text-on-error); --_active-bg: var(--lt-interactive-error-bg-active); } :host([appearance='filled'][variant='info']) { --_bg: var(--lt-interactive-info-bg); --_color: var(--lt-text-on-info); --_hover-bg: var(--lt-interactive-info-bg-hover); --_hover-color: var(--lt-text-on-info); --_active-bg: var(--lt-interactive-info-bg-active); } /* ── outlined ─────────────────────────────────────────────── */ :host([appearance='outlined'][variant='primary']) { --_color: var(--lt-text-primary); --_border-color: var(--lt-border-primary-strong); --_hover-bg: var(--lt-bg-primary-subtle); --_hover-color: var(--lt-text-primary); --_active-bg: var(--lt-bg-primary-subtle); } :host([appearance='outlined'][variant='secondary']) { --_color: var(--lt-text-secondary); --_border-color: var(--lt-border-secondary-strong); --_hover-bg: var(--lt-bg-secondary-subtle); --_hover-color: var(--lt-text-secondary); --_active-bg: var(--lt-bg-secondary-subtle); } :host([appearance='outlined'][variant='neutral']) { --_color: var(--lt-text-neutral); --_border-color: var(--lt-border-strong); --_hover-bg: var(--lt-bg-subtle); --_hover-color: var(--lt-text-default); --_active-bg: var(--lt-bg-subtle); } :host([appearance='outlined'][variant='success']) { --_color: var(--lt-text-success); --_border-color: var(--lt-border-success-strong); --_hover-bg: var(--lt-bg-success-subtle); --_hover-color: var(--lt-text-success); --_active-bg: var(--lt-bg-success-subtle); } :host([appearance='outlined'][variant='warning']) { --_color: var(--lt-text-warning); --_border-color: var(--lt-border-warning-strong); --_hover-bg: var(--lt-bg-warning-subtle); --_hover-color: var(--lt-text-warning); --_active-bg: var(--lt-bg-warning-subtle); } :host([appearance='outlined'][variant='error']) { --_color: var(--lt-text-error); --_border-color: var(--lt-border-error-strong); --_hover-bg: var(--lt-bg-error-subtle); --_hover-color: var(--lt-text-error); --_active-bg: var(--lt-bg-error-subtle); } :host([appearance='outlined'][variant='info']) { --_color: var(--lt-text-info); --_border-color: var(--lt-border-info-strong); --_hover-bg: var(--lt-bg-info-subtle); --_hover-color: var(--lt-text-info); --_active-bg: var(--lt-bg-info-subtle); } /* round shape */ :host([round]) [part='base'] { border-radius: 50%; } `"
4241
+ "default": "css` :host { display: inline-flex; /* Internal state props — set per variant/appearance below */ --_color: var(--lt-text-subtle); --_bg: transparent; --_border-color: transparent; --_hover-bg: var(--lt-bg-subtle); --_hover-color: var(--lt-text-default); --_active-bg: var(--lt-bg-subtle); } [part='base'] { align-items: center; background: var(--lt-icon-button-bg, var(--_bg)); border-radius: var(--lt-border-radius); border: var(--lt-border-width, 1px) solid var(--lt-icon-button-border-color, var(--_border-color)); box-sizing: border-box; color: var(--lt-icon-button-color, var(--_color)); cursor: pointer; display: inline-flex; justify-content: center; padding: 0; transition: background-color 120ms ease, border-color 120ms ease, transform 50ms ease; user-select: none; } [part='base']:hover:not([disabled]) { background: var(--lt-icon-button-hover-bg, var(--_hover-bg)); color: var(--lt-icon-button-hover-color, var(--lt-icon-button-color, var(--_hover-color))); } [part='base']:active { transform: translateY(1px); } [part='base']:active:not([disabled]) { background: var(--lt-icon-button-hover-bg, var(--_active-bg)); } [part='base']:focus-visible { outline: 3px solid var(--lt-border-focus); outline-offset: 2px; } [part='base'][disabled] { cursor: not-allowed; opacity: 0.5; pointer-events: none; transform: none; } a[part='base'] { text-decoration: none; color: inherit; } /* sizes */ :host([size='sm']) [part='base'] { height: 28px; width: 28px; } :host([size='md']) [part='base'] { height: 36px; width: 36px; } :host([size='lg']) [part='base'] { height: 44px; width: 44px; } /* ── ghost ────────────────────────────────────────────────── */ :host([appearance='ghost'][variant='primary']) { --_color: var(--lt-text-primary); --_hover-bg: var(--lt-bg-primary-subtle); --_hover-color: var(--lt-text-primary); --_active-bg: var(--lt-bg-primary-subtle); } :host([appearance='ghost'][variant='secondary']) { --_color: var(--lt-text-secondary); --_hover-bg: var(--lt-bg-secondary-subtle); --_hover-color: var(--lt-text-secondary); --_active-bg: var(--lt-bg-secondary-subtle); } :host([appearance='ghost'][variant='success']) { --_color: var(--lt-text-success); --_hover-bg: var(--lt-bg-success-subtle); --_hover-color: var(--lt-text-success); --_active-bg: var(--lt-bg-success-subtle); } :host([appearance='ghost'][variant='warning']) { --_color: var(--lt-text-warning); --_hover-bg: var(--lt-bg-warning-subtle); --_hover-color: var(--lt-text-warning); --_active-bg: var(--lt-bg-warning-subtle); } :host([appearance='ghost'][variant='error']) { --_color: var(--lt-text-error); --_hover-bg: var(--lt-bg-error-subtle); --_hover-color: var(--lt-text-error); --_active-bg: var(--lt-bg-error-subtle); } :host([appearance='ghost'][variant='info']) { --_color: var(--lt-text-info); --_hover-bg: var(--lt-bg-info-subtle); --_hover-color: var(--lt-text-info); --_active-bg: var(--lt-bg-info-subtle); } /* ── filled ───────────────────────────────────────────────── */ :host([appearance='filled'][variant='primary']) { --_bg: var(--lt-interactive-primary-bg); --_color: var(--lt-text-on-primary); --_hover-bg: var(--lt-interactive-primary-bg-hover); --_hover-color: var(--lt-text-on-primary); --_active-bg: var(--lt-interactive-primary-bg-active); } :host([appearance='filled'][variant='secondary']) { --_bg: var(--lt-interactive-secondary-bg); --_color: var(--lt-text-on-secondary); --_hover-bg: var(--lt-interactive-secondary-bg-hover); --_hover-color: var(--lt-text-on-secondary); --_active-bg: var(--lt-interactive-secondary-bg-active); } :host([appearance='filled'][variant='neutral']) { --_bg: var(--lt-color-neutral-500); --_color: var(--lt-color-neutral-50); --_hover-bg: var(--lt-color-neutral-700); --_hover-color: var(--lt-color-neutral-50); --_active-bg: var(--lt-color-neutral-800); } :host([appearance='filled'][variant='success']) { --_bg: var(--lt-interactive-success-bg); --_color: var(--lt-text-on-success); --_hover-bg: var(--lt-interactive-success-bg-hover); --_hover-color: var(--lt-text-on-success); --_active-bg: var(--lt-interactive-success-bg-active); } :host([appearance='filled'][variant='warning']) { --_bg: var(--lt-interactive-warning-bg); --_color: var(--lt-text-on-warning); --_hover-bg: var(--lt-interactive-warning-bg-hover); --_hover-color: var(--lt-text-on-warning); --_active-bg: var(--lt-interactive-warning-bg-active); } :host([appearance='filled'][variant='error']) { --_bg: var(--lt-interactive-error-bg); --_color: var(--lt-text-on-error); --_hover-bg: var(--lt-interactive-error-bg-hover); --_hover-color: var(--lt-text-on-error); --_active-bg: var(--lt-interactive-error-bg-active); } :host([appearance='filled'][variant='info']) { --_bg: var(--lt-interactive-info-bg); --_color: var(--lt-text-on-info); --_hover-bg: var(--lt-interactive-info-bg-hover); --_hover-color: var(--lt-text-on-info); --_active-bg: var(--lt-interactive-info-bg-active); } /* ── outlined ─────────────────────────────────────────────── */ :host([appearance='outlined'][variant='primary']) { --_color: var(--lt-text-primary); --_border-color: var(--lt-border-primary-strong); --_hover-bg: var(--lt-bg-primary-subtle); --_hover-color: var(--lt-text-primary); --_active-bg: var(--lt-bg-primary-subtle); } :host([appearance='outlined'][variant='secondary']) { --_color: var(--lt-text-secondary); --_border-color: var(--lt-border-secondary-strong); --_hover-bg: var(--lt-bg-secondary-subtle); --_hover-color: var(--lt-text-secondary); --_active-bg: var(--lt-bg-secondary-subtle); } :host([appearance='outlined'][variant='neutral']) { --_color: var(--lt-text-neutral); --_border-color: var(--lt-border-strong); --_hover-bg: var(--lt-bg-subtle); --_hover-color: var(--lt-text-default); --_active-bg: var(--lt-bg-subtle); } :host([appearance='outlined'][variant='success']) { --_color: var(--lt-text-success); --_border-color: var(--lt-border-success-strong); --_hover-bg: var(--lt-bg-success-subtle); --_hover-color: var(--lt-text-success); --_active-bg: var(--lt-bg-success-subtle); } :host([appearance='outlined'][variant='warning']) { --_color: var(--lt-text-warning); --_border-color: var(--lt-border-warning-strong); --_hover-bg: var(--lt-bg-warning-subtle); --_hover-color: var(--lt-text-warning); --_active-bg: var(--lt-bg-warning-subtle); } :host([appearance='outlined'][variant='error']) { --_color: var(--lt-text-error); --_border-color: var(--lt-border-error-strong); --_hover-bg: var(--lt-bg-error-subtle); --_hover-color: var(--lt-text-error); --_active-bg: var(--lt-bg-error-subtle); } :host([appearance='outlined'][variant='info']) { --_color: var(--lt-text-info); --_border-color: var(--lt-border-info-strong); --_hover-bg: var(--lt-bg-info-subtle); --_hover-color: var(--lt-text-info); --_active-bg: var(--lt-bg-info-subtle); } /* bordered — adds a border on top of whatever appearance is active; a no-op on outlined, which already sets the same border color. */ :host([bordered][variant='primary']) { --_border-color: var(--lt-border-primary-strong); } :host([bordered][variant='secondary']) { --_border-color: var(--lt-border-secondary-strong); } :host([bordered][variant='neutral']) { --_border-color: var(--lt-border-strong); } :host([bordered][variant='success']) { --_border-color: var(--lt-border-success-strong); } :host([bordered][variant='warning']) { --_border-color: var(--lt-border-warning-strong); } :host([bordered][variant='error']) { --_border-color: var(--lt-border-error-strong); } :host([bordered][variant='info']) { --_border-color: var(--lt-border-info-strong); } /* round shape */ :host([round]) [part='base'] { border-radius: 50%; } `"
4209
4242
  }
4210
4243
  ],
4211
4244
  "exports": [
@@ -4276,6 +4309,15 @@
4276
4309
  "default": "'ghost'",
4277
4310
  "description": "Visual treatment."
4278
4311
  },
4312
+ {
4313
+ "kind": "field",
4314
+ "name": "bordered",
4315
+ "type": {
4316
+ "text": "boolean"
4317
+ },
4318
+ "default": "false",
4319
+ "description": "Adds a variant-colored border on top of the current appearance. A no-op on\n`outlined` (which already has one); adds a border to `filled`/`ghost`."
4320
+ },
4279
4321
  {
4280
4322
  "kind": "field",
4281
4323
  "name": "size",
@@ -6581,7 +6623,7 @@
6581
6623
  {
6582
6624
  "kind": "variable",
6583
6625
  "name": "sidepanelStyles",
6584
- "default": "css` :host { display: contents; } /* ── Overlay ────────────────────────────────────────────────────────────── */ [part='overlay'] { position: fixed; inset: 0; background: rgba(0, 0, 0, var(--lt-sidepanel-overlay-opacity, 0.45)); z-index: 400; opacity: 0; pointer-events: none; transition: opacity 200ms ease; } /* ── Panel ──────────────────────────────────────────────────────────────── */ [part='panel'] { position: fixed; background: var(--lt-bg-default); display: flex; flex-direction: column; z-index: 401; pointer-events: none; transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1); } /* ── Anchors — initial off-screen positions ─────────────────────────────── */ :host([anchor='left']) [part='panel'], :host(:not([anchor])) [part='panel'] { inset-block: 0; left: 0; transform: translateX(-100%); box-shadow: 4px 0 24px rgba(0, 0, 0, 0.12); } :host([anchor='right']) [part='panel'] { inset-block: 0; right: 0; transform: translateX(100%); box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12); } :host([anchor='top']) [part='panel'] { inset-inline: 0; top: 0; transform: translateY(-100%); box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12); } :host([anchor='bottom']) [part='panel'] { inset-inline: 0; bottom: 0; transform: translateY(100%); box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.12); } /* ── Open state — must come after anchors to win the cascade ────────────── */ :host([open]) [part='overlay'] { opacity: 1; pointer-events: auto; } :host([open]) [part='panel'] { transform: translate(0, 0); pointer-events: auto; } /* ── Header ─────────────────────────────────────────────────────────────── */ .header { display: flex; align-items: center; gap: var(--lt-spacing-4); padding: var(--lt-spacing-4) var(--lt-spacing-5); border-bottom: 1px solid var(--lt-border-default); flex-shrink: 0; } .panel-label { flex: 1; color: var(--lt-text-default); } .close-button { flex-shrink: 0; margin-left: auto; } /* ── Body ───────────────────────────────────────────────────────────────── */ .body { flex: 1; overflow-y: auto; } /* ── Reduced motion ─────────────────────────────────────────────────────── */ @media (prefers-reduced-motion: reduce) { [part='overlay'], [part='panel'] { transition: none; } } `"
6626
+ "default": "css` :host { display: contents; } /* ── Overlay ────────────────────────────────────────────────────────────── */ [part='overlay'] { position: fixed; inset: 0; background: rgba(0, 0, 0, var(--lt-sidepanel-overlay-opacity, 0.45)); z-index: 400; opacity: 0; pointer-events: none; transition: opacity 200ms ease; } /* ── Panel ──────────────────────────────────────────────────────────────── */ [part='panel'] { position: fixed; background: var(--lt-bg-default); display: flex; flex-direction: column; z-index: 401; pointer-events: none; transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1); } /* ── Anchors — initial off-screen positions ─────────────────────────────── */ :host([anchor='left']) [part='panel'], :host(:not([anchor])) [part='panel'] { inset-block: 0; left: 0; transform: translateX(-100%); box-shadow: var(--lt-sidepanel-shadow, 4px 0 24px rgba(0, 0, 0, 0.12)); } :host([anchor='right']) [part='panel'] { inset-block: 0; right: 0; transform: translateX(100%); box-shadow: var(--lt-sidepanel-shadow, -4px 0 24px rgba(0, 0, 0, 0.12)); } :host([anchor='top']) [part='panel'] { inset-inline: 0; top: 0; transform: translateY(-100%); box-shadow: var(--lt-sidepanel-shadow, 0 4px 24px rgba(0, 0, 0, 0.12)); } :host([anchor='bottom']) [part='panel'] { inset-inline: 0; bottom: 0; transform: translateY(100%); box-shadow: var(--lt-sidepanel-shadow, 0 -4px 24px rgba(0, 0, 0, 0.12)); } /* ── Open state — must come after anchors to win the cascade ────────────── */ :host([open]) [part='overlay'] { opacity: 1; pointer-events: auto; } :host([open]) [part='panel'] { transform: translate(0, 0); pointer-events: auto; } /* ── Header ─────────────────────────────────────────────────────────────── */ .header { display: flex; align-items: center; gap: var(--lt-spacing-4); padding: var(--lt-spacing-4) var(--lt-spacing-5); border-bottom: 1px solid var(--lt-border-default); flex-shrink: 0; } .panel-label { flex: 1; color: var(--lt-text-default); } .close-button { flex-shrink: 0; margin-left: auto; } /* ── Body ───────────────────────────────────────────────────────────────── */ .body { flex: 1; overflow-y: auto; padding: var(--lt-spacing-5); } /* ── Reduced motion ─────────────────────────────────────────────────────── */ @media (prefers-reduced-motion: reduce) { [part='overlay'], [part='panel'] { transition: none; } } `"
6585
6627
  }
6586
6628
  ],
6587
6629
  "exports": [
@@ -6603,6 +6645,12 @@
6603
6645
  "kind": "class",
6604
6646
  "description": "A slide-in panel anchored to any edge of the viewport, with a backdrop overlay.",
6605
6647
  "name": "SidePanel",
6648
+ "cssProperties": [
6649
+ {
6650
+ "description": "Overrides the panel's box-shadow, for all anchor positions.",
6651
+ "name": "--lt-sidepanel-shadow"
6652
+ }
6653
+ ],
6606
6654
  "cssParts": [
6607
6655
  {
6608
6656
  "description": "The backdrop scrim behind the panel",
@@ -7296,6 +7344,24 @@
7296
7344
  "default": "''",
7297
7345
  "description": "Icon to show before the message. Leave empty for auto (shows variant icon for status variants),\nset to `\"none\"` to suppress, or pass any icon name to override."
7298
7346
  },
7347
+ {
7348
+ "kind": "field",
7349
+ "name": "elevation",
7350
+ "type": {
7351
+ "text": "SurfaceElevation"
7352
+ },
7353
+ "default": "'5'",
7354
+ "description": "Elevation level of the internal surface, matching `lt-surface`'s scale."
7355
+ },
7356
+ {
7357
+ "kind": "field",
7358
+ "name": "appearance",
7359
+ "type": {
7360
+ "text": "SurfaceAppearance"
7361
+ },
7362
+ "default": "'filled'",
7363
+ "description": "Visual appearance of the internal surface, matching `lt-surface`'s vocabulary."
7364
+ },
7299
7365
  {
7300
7366
  "kind": "field",
7301
7367
  "name": "_timer",
@@ -8754,7 +8820,7 @@
8754
8820
  {
8755
8821
  "kind": "variable",
8756
8822
  "name": "textStyles",
8757
- "default": "css` :host { display: block; color: inherit; } /* Inline variants sit in text flow */ :host([variant='caption']), :host([variant='overline']), :host([variant='label']) { display: inline; } [part='base'] { margin: 0; color: inherit; font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif); } /* ── Display ─────────────────────────────────────────────────────────── */ :host([variant='display-2xl']) [part='base'] { font-size: clamp(2.5rem, 6vw, 4.5rem); font-weight: var(--lt-text-weight, 200); line-height: 1.1; letter-spacing: -0.02em; } :host([variant='display-xl']) [part='base'] { font-size: clamp(2rem, 5vw, 3.75rem); font-weight: var(--lt-text-weight, 200); line-height: 1.1; letter-spacing: -0.02em; } :host([variant='display-lg']) [part='base'] { font-size: clamp(2rem, 4vw, 3rem); font-weight: var(--lt-text-weight, 200); line-height: 1.15; letter-spacing: -0.01em; } /* ── Headings ─────────────────────────────────────────────────────────── */ :host([variant='h1']) [part='base'] { font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem); font-weight: var(--lt-text-weight, 600); line-height: 1.2; letter-spacing: -0.02em; } :host([variant='h2']) [part='base'] { font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem); font-weight: var(--lt-text-weight, 600); line-height: 1.25; letter-spacing: -0.01em; } :host([variant='h3']) [part='base'] { font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem); font-weight: var(--lt-text-weight, 600); line-height: 1.3; } :host([variant='h4']) [part='base'] { font-size: 1.25rem; font-weight: var(--lt-text-weight, 600); line-height: 1.35; } :host([variant='h5']) [part='base'] { font-size: 1.125rem; font-weight: var(--lt-text-weight, 600); line-height: 1.4; } :host([variant='h6']) [part='base'] { font-size: 1rem; font-weight: var(--lt-text-weight, 600); line-height: 1.4; } /* ── Body ─────────────────────────────────────────────────────────────── */ :host([variant='lead']) [part='base'] { font-size: 1.25rem; font-weight: var(--lt-text-weight, 400); line-height: 1.6; } :host([variant='body']) [part='base'], :host(:not([variant])) [part='base'] { font-size: 1rem; font-weight: var(--lt-text-weight, 400); line-height: 1.6; } :host([variant='body-sm']) [part='base'] { font-size: 0.875rem; font-weight: var(--lt-text-weight, 400); line-height: 1.6; } /* ── Inline ───────────────────────────────────────────────────────────── */ :host([variant='caption']) [part='base'] { font-size: 0.75rem; font-weight: var(--lt-text-weight, 400); line-height: 1.5; } :host([variant='overline']) [part='base'] { font-size: 0.6875rem; font-weight: var(--lt-text-weight, 600); line-height: 1.2; letter-spacing: 0.08em; text-transform: uppercase; } :host([variant='label']) [part='base'] { font-size: 0.875rem; font-weight: var(--lt-text-weight, 600); line-height: 1.4; } `"
8823
+ "default": "css` :host { display: block; color: inherit; } /* Inline variants sit in text flow */ :host([variant='caption']), :host([variant='overline']), :host([variant='label']) { display: inline; } [part='base'] { margin: 0; color: inherit; font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif); } /* ── Display ─────────────────────────────────────────────────────────── */ :host([variant='display-2xl']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: clamp(2.5rem, 6vw, 4.5rem); font-weight: var(--lt-text-weight, 200); line-height: 1.1; letter-spacing: var(--lt-text-tracking, -0.02em); } :host([variant='display-xl']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: clamp(2rem, 5vw, 3.75rem); font-weight: var(--lt-text-weight, 200); line-height: 1.1; letter-spacing: var(--lt-text-tracking, -0.02em); } :host([variant='display-lg']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: clamp(2rem, 4vw, 3rem); font-weight: var(--lt-text-weight, 200); line-height: 1.15; letter-spacing: var(--lt-text-tracking, -0.01em); } /* ── Headings ─────────────────────────────────────────────────────────── */ :host([variant='h1']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem); font-weight: var(--lt-text-weight, 600); line-height: 1.2; letter-spacing: var(--lt-text-tracking, -0.02em); } :host([variant='h2']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem); font-weight: var(--lt-text-weight, 600); line-height: 1.25; letter-spacing: var(--lt-text-tracking, -0.01em); } :host([variant='h3']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem); font-weight: var(--lt-text-weight, 600); line-height: 1.3; } :host([variant='h4']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: 1.25rem; font-weight: var(--lt-text-weight, 600); line-height: 1.35; } :host([variant='h5']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: 1.125rem; font-weight: var(--lt-text-weight, 600); line-height: 1.4; } :host([variant='h6']) [part='base'] { font-family: var( --lt-typography-fontFamilyHeading, var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif) ); font-size: 1rem; font-weight: var(--lt-text-weight, 600); line-height: 1.4; } /* ── Body ─────────────────────────────────────────────────────────────── */ :host([variant='lead']) [part='base'] { font-size: 1.25rem; font-weight: var(--lt-text-weight, 400); line-height: 1.6; } :host([variant='body']) [part='base'], :host(:not([variant])) [part='base'] { font-size: 1rem; font-weight: var(--lt-text-weight, 400); line-height: 1.6; } :host([variant='body-sm']) [part='base'] { font-size: 0.875rem; font-weight: var(--lt-text-weight, 400); line-height: 1.6; } /* ── Inline ───────────────────────────────────────────────────────────── */ :host([variant='caption']) [part='base'] { font-size: 0.75rem; font-weight: var(--lt-text-weight, 400); line-height: 1.5; } :host([variant='overline']) [part='base'] { font-size: 0.6875rem; font-weight: var(--lt-text-weight, 600); line-height: 1.2; letter-spacing: var(--lt-text-tracking, 0.08em); text-transform: uppercase; } :host([variant='label']) [part='base'] { font-size: 0.875rem; font-weight: var(--lt-text-weight, 600); line-height: 1.4; } `"
8758
8824
  }
8759
8825
  ],
8760
8826
  "exports": [
@@ -8780,6 +8846,10 @@
8780
8846
  {
8781
8847
  "description": "Overrides the default font-weight for the variant.",
8782
8848
  "name": "--lt-text-weight"
8849
+ },
8850
+ {
8851
+ "description": "Overrides the default letter-spacing for the variant.",
8852
+ "name": "--lt-text-tracking"
8783
8853
  }
8784
8854
  ],
8785
8855
  "members": [
@@ -204,61 +204,97 @@ var textStyles = css2`
204
204
  /* ── Display ─────────────────────────────────────────────────────────── */
205
205
 
206
206
  :host([variant='display-2xl']) [part='base'] {
207
+ font-family: var(
208
+ --lt-typography-fontFamilyHeading,
209
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
210
+ );
207
211
  font-size: clamp(2.5rem, 6vw, 4.5rem);
208
212
  font-weight: var(--lt-text-weight, 200);
209
213
  line-height: 1.1;
210
- letter-spacing: -0.02em;
214
+ letter-spacing: var(--lt-text-tracking, -0.02em);
211
215
  }
212
216
 
213
217
  :host([variant='display-xl']) [part='base'] {
218
+ font-family: var(
219
+ --lt-typography-fontFamilyHeading,
220
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
221
+ );
214
222
  font-size: clamp(2rem, 5vw, 3.75rem);
215
223
  font-weight: var(--lt-text-weight, 200);
216
224
  line-height: 1.1;
217
- letter-spacing: -0.02em;
225
+ letter-spacing: var(--lt-text-tracking, -0.02em);
218
226
  }
219
227
 
220
228
  :host([variant='display-lg']) [part='base'] {
229
+ font-family: var(
230
+ --lt-typography-fontFamilyHeading,
231
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
232
+ );
221
233
  font-size: clamp(2rem, 4vw, 3rem);
222
234
  font-weight: var(--lt-text-weight, 200);
223
235
  line-height: 1.15;
224
- letter-spacing: -0.01em;
236
+ letter-spacing: var(--lt-text-tracking, -0.01em);
225
237
  }
226
238
 
227
239
  /* ── Headings ─────────────────────────────────────────────────────────── */
228
240
 
229
241
  :host([variant='h1']) [part='base'] {
242
+ font-family: var(
243
+ --lt-typography-fontFamilyHeading,
244
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
245
+ );
230
246
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
231
247
  font-weight: var(--lt-text-weight, 600);
232
248
  line-height: 1.2;
233
- letter-spacing: -0.02em;
249
+ letter-spacing: var(--lt-text-tracking, -0.02em);
234
250
  }
235
251
 
236
252
  :host([variant='h2']) [part='base'] {
253
+ font-family: var(
254
+ --lt-typography-fontFamilyHeading,
255
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
256
+ );
237
257
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
238
258
  font-weight: var(--lt-text-weight, 600);
239
259
  line-height: 1.25;
240
- letter-spacing: -0.01em;
260
+ letter-spacing: var(--lt-text-tracking, -0.01em);
241
261
  }
242
262
 
243
263
  :host([variant='h3']) [part='base'] {
264
+ font-family: var(
265
+ --lt-typography-fontFamilyHeading,
266
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
267
+ );
244
268
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
245
269
  font-weight: var(--lt-text-weight, 600);
246
270
  line-height: 1.3;
247
271
  }
248
272
 
249
273
  :host([variant='h4']) [part='base'] {
274
+ font-family: var(
275
+ --lt-typography-fontFamilyHeading,
276
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
277
+ );
250
278
  font-size: 1.25rem;
251
279
  font-weight: var(--lt-text-weight, 600);
252
280
  line-height: 1.35;
253
281
  }
254
282
 
255
283
  :host([variant='h5']) [part='base'] {
284
+ font-family: var(
285
+ --lt-typography-fontFamilyHeading,
286
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
287
+ );
256
288
  font-size: 1.125rem;
257
289
  font-weight: var(--lt-text-weight, 600);
258
290
  line-height: 1.4;
259
291
  }
260
292
 
261
293
  :host([variant='h6']) [part='base'] {
294
+ font-family: var(
295
+ --lt-typography-fontFamilyHeading,
296
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
297
+ );
262
298
  font-size: 1rem;
263
299
  font-weight: var(--lt-text-weight, 600);
264
300
  line-height: 1.4;
@@ -297,7 +333,7 @@ var textStyles = css2`
297
333
  font-size: 0.6875rem;
298
334
  font-weight: var(--lt-text-weight, 600);
299
335
  line-height: 1.2;
300
- letter-spacing: 0.08em;
336
+ letter-spacing: var(--lt-text-tracking, 0.08em);
301
337
  text-transform: uppercase;
302
338
  }
303
339
 
@@ -408,6 +408,30 @@ var iconButtonStyles = css2`
408
408
  --_active-bg: var(--lt-bg-info-subtle);
409
409
  }
410
410
 
411
+ /* bordered — adds a border on top of whatever appearance is active; a no-op on
412
+ outlined, which already sets the same border color. */
413
+ :host([bordered][variant='primary']) {
414
+ --_border-color: var(--lt-border-primary-strong);
415
+ }
416
+ :host([bordered][variant='secondary']) {
417
+ --_border-color: var(--lt-border-secondary-strong);
418
+ }
419
+ :host([bordered][variant='neutral']) {
420
+ --_border-color: var(--lt-border-strong);
421
+ }
422
+ :host([bordered][variant='success']) {
423
+ --_border-color: var(--lt-border-success-strong);
424
+ }
425
+ :host([bordered][variant='warning']) {
426
+ --_border-color: var(--lt-border-warning-strong);
427
+ }
428
+ :host([bordered][variant='error']) {
429
+ --_border-color: var(--lt-border-error-strong);
430
+ }
431
+ :host([bordered][variant='info']) {
432
+ --_border-color: var(--lt-border-info-strong);
433
+ }
434
+
411
435
  /* round shape */
412
436
  :host([round]) [part='base'] {
413
437
  border-radius: 50%;
@@ -457,6 +481,7 @@ var IconButton = class extends ThemeableElement {
457
481
  this.label = "";
458
482
  this.variant = "neutral";
459
483
  this.appearance = "ghost";
484
+ this.bordered = false;
460
485
  this.size = "md";
461
486
  this.disabled = false;
462
487
  this.href = "";
@@ -503,6 +528,9 @@ __decorateClass([
503
528
  __decorateClass([
504
529
  property2({ reflect: true })
505
530
  ], IconButton.prototype, "appearance", 2);
531
+ __decorateClass([
532
+ property2({ type: Boolean, reflect: true })
533
+ ], IconButton.prototype, "bordered", 2);
506
534
  __decorateClass([
507
535
  property2({ reflect: true })
508
536
  ], IconButton.prototype, "size", 2);
@@ -553,61 +581,97 @@ var textStyles = css3`
553
581
  /* ── Display ─────────────────────────────────────────────────────────── */
554
582
 
555
583
  :host([variant='display-2xl']) [part='base'] {
584
+ font-family: var(
585
+ --lt-typography-fontFamilyHeading,
586
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
587
+ );
556
588
  font-size: clamp(2.5rem, 6vw, 4.5rem);
557
589
  font-weight: var(--lt-text-weight, 200);
558
590
  line-height: 1.1;
559
- letter-spacing: -0.02em;
591
+ letter-spacing: var(--lt-text-tracking, -0.02em);
560
592
  }
561
593
 
562
594
  :host([variant='display-xl']) [part='base'] {
595
+ font-family: var(
596
+ --lt-typography-fontFamilyHeading,
597
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
598
+ );
563
599
  font-size: clamp(2rem, 5vw, 3.75rem);
564
600
  font-weight: var(--lt-text-weight, 200);
565
601
  line-height: 1.1;
566
- letter-spacing: -0.02em;
602
+ letter-spacing: var(--lt-text-tracking, -0.02em);
567
603
  }
568
604
 
569
605
  :host([variant='display-lg']) [part='base'] {
606
+ font-family: var(
607
+ --lt-typography-fontFamilyHeading,
608
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
609
+ );
570
610
  font-size: clamp(2rem, 4vw, 3rem);
571
611
  font-weight: var(--lt-text-weight, 200);
572
612
  line-height: 1.15;
573
- letter-spacing: -0.01em;
613
+ letter-spacing: var(--lt-text-tracking, -0.01em);
574
614
  }
575
615
 
576
616
  /* ── Headings ─────────────────────────────────────────────────────────── */
577
617
 
578
618
  :host([variant='h1']) [part='base'] {
619
+ font-family: var(
620
+ --lt-typography-fontFamilyHeading,
621
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
622
+ );
579
623
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
580
624
  font-weight: var(--lt-text-weight, 600);
581
625
  line-height: 1.2;
582
- letter-spacing: -0.02em;
626
+ letter-spacing: var(--lt-text-tracking, -0.02em);
583
627
  }
584
628
 
585
629
  :host([variant='h2']) [part='base'] {
630
+ font-family: var(
631
+ --lt-typography-fontFamilyHeading,
632
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
633
+ );
586
634
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
587
635
  font-weight: var(--lt-text-weight, 600);
588
636
  line-height: 1.25;
589
- letter-spacing: -0.01em;
637
+ letter-spacing: var(--lt-text-tracking, -0.01em);
590
638
  }
591
639
 
592
640
  :host([variant='h3']) [part='base'] {
641
+ font-family: var(
642
+ --lt-typography-fontFamilyHeading,
643
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
644
+ );
593
645
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
594
646
  font-weight: var(--lt-text-weight, 600);
595
647
  line-height: 1.3;
596
648
  }
597
649
 
598
650
  :host([variant='h4']) [part='base'] {
651
+ font-family: var(
652
+ --lt-typography-fontFamilyHeading,
653
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
654
+ );
599
655
  font-size: 1.25rem;
600
656
  font-weight: var(--lt-text-weight, 600);
601
657
  line-height: 1.35;
602
658
  }
603
659
 
604
660
  :host([variant='h5']) [part='base'] {
661
+ font-family: var(
662
+ --lt-typography-fontFamilyHeading,
663
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
664
+ );
605
665
  font-size: 1.125rem;
606
666
  font-weight: var(--lt-text-weight, 600);
607
667
  line-height: 1.4;
608
668
  }
609
669
 
610
670
  :host([variant='h6']) [part='base'] {
671
+ font-family: var(
672
+ --lt-typography-fontFamilyHeading,
673
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
674
+ );
611
675
  font-size: 1rem;
612
676
  font-weight: var(--lt-text-weight, 600);
613
677
  line-height: 1.4;
@@ -646,7 +710,7 @@ var textStyles = css3`
646
710
  font-size: 0.6875rem;
647
711
  font-weight: var(--lt-text-weight, 600);
648
712
  line-height: 1.2;
649
- letter-spacing: 0.08em;
713
+ letter-spacing: var(--lt-text-tracking, 0.08em);
650
714
  text-transform: uppercase;
651
715
  }
652
716
 
@@ -55,6 +55,12 @@ export declare class Button extends ThemeableElement {
55
55
  * @default 'filled'
56
56
  */
57
57
  appearance: ButtonAppearance;
58
+ /**
59
+ * Adds a variant-colored border on top of the current appearance. A no-op on
60
+ * `outlined` (which already has one); adds a border to `filled`/`ghost`.
61
+ * @default false
62
+ */
63
+ bordered: boolean;
58
64
  /**
59
65
  * Size of the button (affects height, font size, and padding).
60
66
  * @default 'md'
@@ -277,6 +277,30 @@ var buttonStyles = css`
277
277
  opacity: 0.8;
278
278
  }
279
279
 
280
+ /* bordered — adds a border on top of whatever appearance is active; a no-op on
281
+ outlined, which already sets the same border color. */
282
+ :host([bordered][variant='primary']) {
283
+ --_border-color: var(--lt-border-primary-strong);
284
+ }
285
+ :host([bordered][variant='secondary']) {
286
+ --_border-color: var(--lt-border-secondary-strong);
287
+ }
288
+ :host([bordered][variant='neutral']) {
289
+ --_border-color: var(--lt-border-strong);
290
+ }
291
+ :host([bordered][variant='success']) {
292
+ --_border-color: var(--lt-border-success-strong);
293
+ }
294
+ :host([bordered][variant='warning']) {
295
+ --_border-color: var(--lt-border-warning-strong);
296
+ }
297
+ :host([bordered][variant='error']) {
298
+ --_border-color: var(--lt-border-error-strong);
299
+ }
300
+ :host([bordered][variant='info']) {
301
+ --_border-color: var(--lt-border-info-strong);
302
+ }
303
+
280
304
  /* loading */
281
305
  .spinner {
282
306
  animation: spin 700ms linear infinite;
@@ -442,6 +466,7 @@ var Button = class extends ThemeableElement {
442
466
  this._ariaForwarding = new AriaForwardingController(this, () => this.shadowRoot?.querySelector('[part="base"]'));
443
467
  this.variant = "primary";
444
468
  this.appearance = "filled";
469
+ this.bordered = false;
445
470
  this.size = "md";
446
471
  this.disabled = false;
447
472
  this.loading = false;
@@ -504,6 +529,9 @@ __decorateClass([
504
529
  __decorateClass([
505
530
  property3({ reflect: true })
506
531
  ], Button.prototype, "appearance", 2);
532
+ __decorateClass([
533
+ property3({ type: Boolean, reflect: true })
534
+ ], Button.prototype, "bordered", 2);
507
535
  __decorateClass([
508
536
  property3({ reflect: true })
509
537
  ], Button.prototype, "size", 2);