@latty-ds/web 0.10.1 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -742,7 +742,7 @@
742
742
  {
743
743
  "kind": "variable",
744
744
  "name": "breadcrumbStyles",
745
- "default": "css` :host { display: block; } [part='list'] { align-items: center; display: flex; flex-wrap: wrap; gap: 0; list-style: none; margin: 0; padding: 0; } `"
745
+ "default": "css` :host { display: block; } [part='list'] { align-items: center; display: flex; flex-wrap: wrap; gap: 0; margin: 0; padding: 0; } `"
746
746
  },
747
747
  {
748
748
  "kind": "variable",
@@ -4128,7 +4128,7 @@
4128
4128
  {
4129
4129
  "kind": "variable",
4130
4130
  "name": "headerStyles",
4131
- "default": "css` :host { display: block; position: sticky; top: 0; z-index: 100; box-shadow: var(--lt-elevation-1); } :host([background='primary']) { background: var(--lt-bg-primary); color: var(--lt-text-inverse); } :host([background='surface']) { background: var(--lt-bg-default); color: var(--lt-text-default); } header { display: flex; align-items: center; gap: var(--lt-spacing-2); padding: 0 var(--lt-spacing-4); min-height: var(--lt-spacing-px-16); box-sizing: border-box; color: inherit; } .content { flex: 1; display: flex; align-items: center; } `"
4131
+ "default": "css` :host { display: block; position: sticky; top: 0; z-index: 100; box-shadow: var(--lt-elevation-1); } :host([background='primary']) { background: var(--lt-bg-primary); color: var(--lt-text-on-primary); } :host([background='surface']) { background: var(--lt-bg-default); color: var(--lt-text-default); } header { display: flex; align-items: center; gap: var(--lt-spacing-2); padding: 0 var(--lt-spacing-4); min-height: var(--lt-spacing-px-16); box-sizing: border-box; color: inherit; } .content { flex: 1; display: flex; align-items: center; } `"
4132
4132
  }
4133
4133
  ],
4134
4134
  "exports": [
@@ -4238,7 +4238,7 @@
4238
4238
  {
4239
4239
  "kind": "variable",
4240
4240
  "name": "iconButtonStyles",
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%; } `"
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; } /* 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%; } `"
4242
4242
  }
4243
4243
  ],
4244
4244
  "exports": [
@@ -4783,7 +4783,7 @@
4783
4783
  "declarations": [
4784
4784
  {
4785
4785
  "kind": "class",
4786
- "description": "A list item component that renders a `<li>` element in shadow DOM.\n\nThis component solves the HTML parser issue where nested `<lt-list>` components\ncannot contain plain `<li>` elements due to browser parsing rules. By wrapping\nthe `<li>` in a custom element's shadow DOM, we can properly nest lists.\n\nItems can also be interactive: set `clickable` to render the row as a native\n`<button>` (picker rows, settings rows), or `href` to render it as an `<a>`.\nInteractive rows get hover/active/focus states and a disabled state.",
4786
+ "description": "A list item that behaves like a native `<li>` without literally being one.\nThe host sets `display: list-item` and `role=\"listitem\"` on itself (a\ncustom element's tag can never actually be `<li>`), so it still renders a\nnative marker/counter via inherited `list-style-type`/`-position` and\nreads correctly to assistive tech, inside `lt-list`'s `<div role=\"list\">`.\n\nThis also solves the HTML parser issue where nesting a real `<li>` through\na `<lt-list>` boundary auto-closes a still-open ancestor `<li>` (see\n`lt-list`'s own tests) — `<lt-list-item>` isn't `<li>` at the raw-HTML-tag\nlevel, so it never triggers that parser behavior in the first place.\n\nItems can also be interactive: set `clickable` to render the row as a native\n`<button>` (picker rows, settings rows), or `href` to render it as an `<a>`.\nInteractive rows get hover/active/focus states and a disabled state.",
4787
4787
  "name": "ListItem",
4788
4788
  "cssParts": [
4789
4789
  {
@@ -4898,7 +4898,7 @@
4898
4898
  {
4899
4899
  "kind": "variable",
4900
4900
  "name": "listStyles",
4901
- "default": "css` :host { display: block; font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif); --list-marker-color: var(--lt-color-neutral-500); } ul, ol { margin: 0; padding: 0; list-style-position: outside; color: var(--lt-text-default); } ul { padding-left: var(--lt-spacing-5); } ol { padding-left: var(--lt-spacing-5); } ::slotted(li), ::slotted(lt-list-item) { margin-bottom: var(--lt-spacing-2); } ::slotted(li:last-child), ::slotted(lt-list-item:last-child) { margin-bottom: 0; } ::slotted(lt-list) { display: block; margin-top: var(--lt-spacing-2); margin-bottom: var(--lt-spacing-2); padding-left: var(--lt-spacing-5); font-size: 0.9em; } /* No marker */ :host([no-marker]) ul, :host([no-marker]) ol { list-style: none; padding-left: 0; } /* Divider */ :host([divider]) ::slotted(lt-list-item) { border-bottom: 1px solid var(--lt-border-default); padding-bottom: var(--lt-spacing-2); } :host([divider]) ::slotted(lt-list-item:last-child) { border-bottom: none; padding-bottom: 0; } ::slotted(lt-list:first-child) { margin-top: var(--lt-spacing-2); } ::slotted(lt-list:last-child) { margin-bottom: 0; } ul ::slotted(li)::marker { color: var(--list-marker-color); } ol ::slotted(li)::marker { color: var(--list-marker-color); } /* Size variants */ :host([size='sm']) ul, :host([size='sm']) ol { font-size: 0.875rem; line-height: 1.5; } :host([size='sm']) ::slotted(li), :host([size='sm']) ::slotted(lt-list-item) { margin-bottom: var(--lt-spacing-1); } :host([size='md']) ul, :host([size='md']) ol { font-size: 1rem; line-height: 1.6; } :host([size='md']) ::slotted(li), :host([size='md']) ::slotted(lt-list-item) { margin-bottom: var(--lt-spacing-2); } :host([size='lg']) ul, :host([size='lg']) ol { font-size: 1.125rem; line-height: 1.7; } :host([size='lg']) ::slotted(li), :host([size='lg']) ::slotted(lt-list-item) { margin-bottom: var(--lt-spacing-3); } `"
4901
+ "default": "css` :host { display: block; font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif); --list-marker-color: var(--lt-color-neutral-500); } [part='list'] { margin: 0; padding: 0 0 0 var(--lt-spacing-5); list-style-position: outside; list-style-type: disc; color: var(--lt-text-default); } :host([type='ordered']) [part='list'] { list-style-type: decimal; } ::slotted(li), ::slotted(lt-list-item) { margin-bottom: var(--lt-spacing-2); } ::slotted(li:last-child), ::slotted(lt-list-item:last-child) { margin-bottom: 0; } ::slotted(lt-list) { display: block; margin-top: var(--lt-spacing-2); margin-bottom: var(--lt-spacing-2); padding-left: var(--lt-spacing-5); font-size: 0.9em; } /* No marker */ :host([no-marker]) [part='list'] { list-style: none; padding-left: 0; } /* Divider */ :host([divider]) ::slotted(lt-list-item) { border-bottom: 1px solid var(--lt-border-default); padding-bottom: var(--lt-spacing-2); } :host([divider]) ::slotted(lt-list-item:last-child) { border-bottom: none; padding-bottom: 0; } ::slotted(lt-list:first-child) { margin-top: var(--lt-spacing-2); } ::slotted(lt-list:last-child) { margin-bottom: 0; } [part='list'] ::slotted(li)::marker { color: var(--list-marker-color); } /* Size variants */ :host([size='sm']) [part='list'] { font-size: 0.875rem; line-height: 1.5; } :host([size='sm']) ::slotted(li), :host([size='sm']) ::slotted(lt-list-item) { margin-bottom: var(--lt-spacing-1); } :host([size='md']) [part='list'] { font-size: 1rem; line-height: 1.6; } :host([size='md']) ::slotted(li), :host([size='md']) ::slotted(lt-list-item) { margin-bottom: var(--lt-spacing-2); } :host([size='lg']) [part='list'] { font-size: 1.125rem; line-height: 1.7; } :host([size='lg']) ::slotted(li), :host([size='lg']) ::slotted(lt-list-item) { margin-bottom: var(--lt-spacing-3); } `"
4902
4902
  }
4903
4903
  ],
4904
4904
  "exports": [
@@ -4928,7 +4928,7 @@
4928
4928
  ],
4929
4929
  "cssParts": [
4930
4930
  {
4931
- "description": "The underlying `<ul>` or `<ol>` element",
4931
+ "description": "The underlying list container. Renders as a `<div role=\"list\">` rather than a real `<ul>`/`<ol>` — a custom element like `<lt-list-item>` can never itself be a valid `<li>`, so a real `<ul>`/`<ol>` around one fails HTML's list content model (only `<li>`/`<script>`/`<template>` may be direct children). `list-style-type` is still set here and inherited down, so real `<li>` children (and `<lt-list-item>`, which sets `display: list-item` on itself) render their native marker/counter exactly as they would inside a real list.",
4932
4932
  "name": "list"
4933
4933
  }
4934
4934
  ],
@@ -249,7 +249,6 @@ var iconButtonStyles = css2`
249
249
 
250
250
  a[part='base'] {
251
251
  text-decoration: none;
252
- color: inherit;
253
252
  }
254
253
 
255
254
  /* sizes */
@@ -49,5 +49,6 @@ export declare class BreadcrumbItem extends ThemeableElement {
49
49
  * @default ''
50
50
  */
51
51
  separator: string;
52
+ connectedCallback(): void;
52
53
  render(): import("lit").TemplateResult<1>;
53
54
  }
@@ -49,7 +49,6 @@ var breadcrumbStyles = css`
49
49
  display: flex;
50
50
  flex-wrap: wrap;
51
51
  gap: 0;
52
- list-style: none;
53
52
  margin: 0;
54
53
  padding: 0;
55
54
  }
@@ -112,9 +111,9 @@ var Breadcrumb = class extends ThemeableElement {
112
111
  render() {
113
112
  return html`
114
113
  <nav aria-label="breadcrumb">
115
- <ol part="list">
114
+ <div part="list" role="list">
116
115
  <slot></slot>
117
- </ol>
116
+ </div>
118
117
  </nav>
119
118
  `;
120
119
  }
@@ -133,17 +132,21 @@ var BreadcrumbItem = class extends ThemeableElement {
133
132
  this.current = false;
134
133
  this.separator = "";
135
134
  }
135
+ connectedCallback() {
136
+ super.connectedCallback();
137
+ this.setAttribute("role", "listitem");
138
+ }
136
139
  render() {
137
140
  const hasSeparatorOverride = this.separator !== null && this.separator !== void 0 && this.separator !== "";
138
141
  return html`
139
- <li part="item">
142
+ <div part="item">
140
143
  ${this.current || !this.href ? html`<span part="text" aria-current=${this.current ? "page" : "false"}><slot></slot></span>` : html`<a part="link" href=${this.href}><slot></slot></a>`}
141
144
  <span
142
145
  part="separator"
143
146
  aria-hidden="true"
144
147
  style=${hasSeparatorOverride ? `--lt-breadcrumb-separator: "${this.separator}"` : ""}
145
148
  ></span>
146
- </li>
149
+ </div>
147
150
  `;
148
151
  }
149
152
  };
@@ -1963,7 +1963,7 @@ var Combobox = class extends ThemeableElement {
1963
1963
  @input=${this.handleInput}
1964
1964
  @keydown=${this.handleKeydown}
1965
1965
  />
1966
- <lt-icon class="chevron" name="nav-arrow-down" size="sm"></lt-icon>
1966
+ <lt-icon class="chevron" name="caret-down" size="sm"></lt-icon>
1967
1967
  </div>
1968
1968
  `;
1969
1969
  return html2`
@@ -241,7 +241,6 @@ var iconButtonStyles = css3`
241
241
 
242
242
  a[part='base'] {
243
243
  text-decoration: none;
244
- color: inherit;
245
244
  }
246
245
 
247
246
  /* sizes */
@@ -50,7 +50,7 @@ var headerStyles = css`
50
50
 
51
51
  :host([background='primary']) {
52
52
  background: var(--lt-bg-primary);
53
- color: var(--lt-text-inverse);
53
+ color: var(--lt-text-on-primary);
54
54
  }
55
55
 
56
56
  :host([background='surface']) {
@@ -96,7 +96,6 @@ var iconButtonStyles = css`
96
96
 
97
97
  a[part='base'] {
98
98
  text-decoration: none;
99
- color: inherit;
100
99
  }
101
100
 
102
101
  /* sizes */
@@ -47,20 +47,16 @@ var listStyles = css`
47
47
  --list-marker-color: var(--lt-color-neutral-500);
48
48
  }
49
49
 
50
- ul,
51
- ol {
50
+ [part='list'] {
52
51
  margin: 0;
53
- padding: 0;
52
+ padding: 0 0 0 var(--lt-spacing-5);
54
53
  list-style-position: outside;
54
+ list-style-type: disc;
55
55
  color: var(--lt-text-default);
56
56
  }
57
57
 
58
- ul {
59
- padding-left: var(--lt-spacing-5);
60
- }
61
-
62
- ol {
63
- padding-left: var(--lt-spacing-5);
58
+ :host([type='ordered']) [part='list'] {
59
+ list-style-type: decimal;
64
60
  }
65
61
 
66
62
  ::slotted(li),
@@ -82,8 +78,7 @@ var listStyles = css`
82
78
  }
83
79
 
84
80
  /* No marker */
85
- :host([no-marker]) ul,
86
- :host([no-marker]) ol {
81
+ :host([no-marker]) [part='list'] {
87
82
  list-style: none;
88
83
  padding-left: 0;
89
84
  }
@@ -107,17 +102,12 @@ var listStyles = css`
107
102
  margin-bottom: 0;
108
103
  }
109
104
 
110
- ul ::slotted(li)::marker {
111
- color: var(--list-marker-color);
112
- }
113
-
114
- ol ::slotted(li)::marker {
105
+ [part='list'] ::slotted(li)::marker {
115
106
  color: var(--list-marker-color);
116
107
  }
117
108
 
118
109
  /* Size variants */
119
- :host([size='sm']) ul,
120
- :host([size='sm']) ol {
110
+ :host([size='sm']) [part='list'] {
121
111
  font-size: 0.875rem;
122
112
  line-height: 1.5;
123
113
  }
@@ -127,8 +117,7 @@ var listStyles = css`
127
117
  margin-bottom: var(--lt-spacing-1);
128
118
  }
129
119
 
130
- :host([size='md']) ul,
131
- :host([size='md']) ol {
120
+ :host([size='md']) [part='list'] {
132
121
  font-size: 1rem;
133
122
  line-height: 1.6;
134
123
  }
@@ -138,8 +127,7 @@ var listStyles = css`
138
127
  margin-bottom: var(--lt-spacing-2);
139
128
  }
140
129
 
141
- :host([size='lg']) ul,
142
- :host([size='lg']) ol {
130
+ :host([size='lg']) [part='list'] {
143
131
  font-size: 1.125rem;
144
132
  line-height: 1.7;
145
133
  }
@@ -307,13 +295,12 @@ var List = class extends ThemeableElement {
307
295
  this.noMarker = false;
308
296
  }
309
297
  render() {
310
- const isOrdered = this.type === "ordered";
311
298
  const styles = this.markerColor ? { "--list-marker-color": this.markerColor } : {};
312
- return isOrdered ? html2`<ol part="list" style=${styleMap(styles)}>
313
- <slot></slot>
314
- </ol>` : html2`<ul part="list" style=${styleMap(styles)}>
315
- <slot></slot>
316
- </ul>`;
299
+ return html2`
300
+ <div part="list" role="list" style=${styleMap(styles)}>
301
+ <slot></slot>
302
+ </div>
303
+ `;
317
304
  }
318
305
  };
319
306
  List.styles = listStyles;
@@ -1,11 +1,16 @@
1
1
  import { ThemeableElement } from '../../base';
2
2
  import '@latty-ds/icons';
3
3
  /**
4
- * A list item component that renders a `<li>` element in shadow DOM.
4
+ * A list item that behaves like a native `<li>` without literally being one.
5
+ * The host sets `display: list-item` and `role="listitem"` on itself (a
6
+ * custom element's tag can never actually be `<li>`), so it still renders a
7
+ * native marker/counter via inherited `list-style-type`/`-position` and
8
+ * reads correctly to assistive tech, inside `lt-list`'s `<div role="list">`.
5
9
  *
6
- * This component solves the HTML parser issue where nested `<lt-list>` components
7
- * cannot contain plain `<li>` elements due to browser parsing rules. By wrapping
8
- * the `<li>` in a custom element's shadow DOM, we can properly nest lists.
10
+ * This also solves the HTML parser issue where nesting a real `<li>` through
11
+ * a `<lt-list>` boundary auto-closes a still-open ancestor `<li>` (see
12
+ * `lt-list`'s own tests) — `<lt-list-item>` isn't `<li>` at the raw-HTML-tag
13
+ * level, so it never triggers that parser behavior in the first place.
9
14
  *
10
15
  * Items can also be interactive: set `clickable` to render the row as a native
11
16
  * `<button>` (picker rows, settings rows), or `href` to render it as an `<a>`.
@@ -8,7 +8,14 @@ import './list-item';
8
8
  *
9
9
  * @slot - Default slot for list items (`<li>` elements)
10
10
  *
11
- * @csspart list - The underlying `<ul>` or `<ol>` element
11
+ * @csspart list - The underlying list container. Renders as a `<div
12
+ * role="list">` rather than a real `<ul>`/`<ol>` — a custom element like
13
+ * `<lt-list-item>` can never itself be a valid `<li>`, so a real
14
+ * `<ul>`/`<ol>` around one fails HTML's list content model (only
15
+ * `<li>`/`<script>`/`<template>` may be direct children). `list-style-type`
16
+ * is still set here and inherited down, so real `<li>` children (and
17
+ * `<lt-list-item>`, which sets `display: list-item` on itself) render
18
+ * their native marker/counter exactly as they would inside a real list.
12
19
  *
13
20
  * @cssprop --list-marker-color - Color of the bullet points or numbers (default: neutral-500)
14
21
  *
@@ -158,14 +158,14 @@ var Pagination = class extends ThemeableElement {
158
158
  return html`
159
159
  <nav aria-label="Pagination">
160
160
  <button aria-label="First page" ?disabled=${atFirst || this.disabled} @click=${() => this._go(1)}>
161
- <lt-icon name="double-nav-arrow-left" size="sm"></lt-icon>
161
+ <lt-icon name="double-caret-left" size="sm"></lt-icon>
162
162
  </button>
163
163
  <button
164
164
  aria-label="Previous page"
165
165
  ?disabled=${atFirst || this.disabled}
166
166
  @click=${() => this._go(this.page - 1)}
167
167
  >
168
- <lt-icon name="nav-arrow-left" size="sm"></lt-icon>
168
+ <lt-icon name="caret-left" size="sm"></lt-icon>
169
169
  </button>
170
170
 
171
171
  ${pages.map(
@@ -180,10 +180,10 @@ var Pagination = class extends ThemeableElement {
180
180
  )}
181
181
 
182
182
  <button aria-label="Next page" ?disabled=${atLast || this.disabled} @click=${() => this._go(this.page + 1)}>
183
- <lt-icon name="nav-arrow-right" size="sm"></lt-icon>
183
+ <lt-icon name="caret-right" size="sm"></lt-icon>
184
184
  </button>
185
185
  <button aria-label="Last page" ?disabled=${atLast || this.disabled} @click=${() => this._go(this.totalPages)}>
186
- <lt-icon name="double-nav-arrow-right" size="sm"></lt-icon>
186
+ <lt-icon name="double-caret-right" size="sm"></lt-icon>
187
187
  </button>
188
188
  </nav>
189
189
  `;
@@ -228,7 +228,6 @@ var iconButtonStyles = css3`
228
228
 
229
229
  a[part='base'] {
230
230
  text-decoration: none;
231
- color: inherit;
232
231
  }
233
232
 
234
233
  /* sizes */
package/dist/index.cjs CHANGED
@@ -3129,7 +3129,6 @@ var iconButtonStyles = i`
3129
3129
 
3130
3130
  a[part='base'] {
3131
3131
  text-decoration: none;
3132
- color: inherit;
3133
3132
  }
3134
3133
 
3135
3134
  /* sizes */
@@ -3662,20 +3661,16 @@ var listStyles = i`
3662
3661
  --list-marker-color: var(--lt-color-neutral-500);
3663
3662
  }
3664
3663
 
3665
- ul,
3666
- ol {
3664
+ [part='list'] {
3667
3665
  margin: 0;
3668
- padding: 0;
3666
+ padding: 0 0 0 var(--lt-spacing-5);
3669
3667
  list-style-position: outside;
3668
+ list-style-type: disc;
3670
3669
  color: var(--lt-text-default);
3671
3670
  }
3672
3671
 
3673
- ul {
3674
- padding-left: var(--lt-spacing-5);
3675
- }
3676
-
3677
- ol {
3678
- padding-left: var(--lt-spacing-5);
3672
+ :host([type='ordered']) [part='list'] {
3673
+ list-style-type: decimal;
3679
3674
  }
3680
3675
 
3681
3676
  ::slotted(li),
@@ -3697,8 +3692,7 @@ var listStyles = i`
3697
3692
  }
3698
3693
 
3699
3694
  /* No marker */
3700
- :host([no-marker]) ul,
3701
- :host([no-marker]) ol {
3695
+ :host([no-marker]) [part='list'] {
3702
3696
  list-style: none;
3703
3697
  padding-left: 0;
3704
3698
  }
@@ -3722,17 +3716,12 @@ var listStyles = i`
3722
3716
  margin-bottom: 0;
3723
3717
  }
3724
3718
 
3725
- ul ::slotted(li)::marker {
3726
- color: var(--list-marker-color);
3727
- }
3728
-
3729
- ol ::slotted(li)::marker {
3719
+ [part='list'] ::slotted(li)::marker {
3730
3720
  color: var(--list-marker-color);
3731
3721
  }
3732
3722
 
3733
3723
  /* Size variants */
3734
- :host([size='sm']) ul,
3735
- :host([size='sm']) ol {
3724
+ :host([size='sm']) [part='list'] {
3736
3725
  font-size: 0.875rem;
3737
3726
  line-height: 1.5;
3738
3727
  }
@@ -3742,8 +3731,7 @@ var listStyles = i`
3742
3731
  margin-bottom: var(--lt-spacing-1);
3743
3732
  }
3744
3733
 
3745
- :host([size='md']) ul,
3746
- :host([size='md']) ol {
3734
+ :host([size='md']) [part='list'] {
3747
3735
  font-size: 1rem;
3748
3736
  line-height: 1.6;
3749
3737
  }
@@ -3753,8 +3741,7 @@ var listStyles = i`
3753
3741
  margin-bottom: var(--lt-spacing-2);
3754
3742
  }
3755
3743
 
3756
- :host([size='lg']) ul,
3757
- :host([size='lg']) ol {
3744
+ :host([size='lg']) [part='list'] {
3758
3745
  font-size: 1.125rem;
3759
3746
  line-height: 1.7;
3760
3747
  }
@@ -3916,13 +3903,12 @@ var List = class extends ThemeableElement {
3916
3903
  this.noMarker = false;
3917
3904
  }
3918
3905
  render() {
3919
- const isOrdered = this.type === "ordered";
3920
3906
  const styles = this.markerColor ? { "--list-marker-color": this.markerColor } : {};
3921
- return isOrdered ? T`<ol part="list" style=${o9(styles)}>
3922
- <slot></slot>
3923
- </ol>` : T`<ul part="list" style=${o9(styles)}>
3924
- <slot></slot>
3925
- </ul>`;
3907
+ return T`
3908
+ <div part="list" role="list" style=${o9(styles)}>
3909
+ <slot></slot>
3910
+ </div>
3911
+ `;
3926
3912
  }
3927
3913
  };
3928
3914
  List.styles = listStyles;
@@ -9604,7 +9590,7 @@ var headerStyles = i`
9604
9590
 
9605
9591
  :host([background='primary']) {
9606
9592
  background: var(--lt-bg-primary);
9607
- color: var(--lt-text-inverse);
9593
+ color: var(--lt-text-on-primary);
9608
9594
  }
9609
9595
 
9610
9596
  :host([background='surface']) {
@@ -10047,7 +10033,6 @@ var breadcrumbStyles = i`
10047
10033
  display: flex;
10048
10034
  flex-wrap: wrap;
10049
10035
  gap: 0;
10050
- list-style: none;
10051
10036
  margin: 0;
10052
10037
  padding: 0;
10053
10038
  }
@@ -10110,9 +10095,9 @@ var Breadcrumb = class extends ThemeableElement {
10110
10095
  render() {
10111
10096
  return T`
10112
10097
  <nav aria-label="breadcrumb">
10113
- <ol part="list">
10098
+ <div part="list" role="list">
10114
10099
  <slot></slot>
10115
- </ol>
10100
+ </div>
10116
10101
  </nav>
10117
10102
  `;
10118
10103
  }
@@ -10131,17 +10116,21 @@ var BreadcrumbItem = class extends ThemeableElement {
10131
10116
  this.current = false;
10132
10117
  this.separator = "";
10133
10118
  }
10119
+ connectedCallback() {
10120
+ super.connectedCallback();
10121
+ this.setAttribute("role", "listitem");
10122
+ }
10134
10123
  render() {
10135
10124
  const hasSeparatorOverride = this.separator !== null && this.separator !== void 0 && this.separator !== "";
10136
10125
  return T`
10137
- <li part="item">
10126
+ <div part="item">
10138
10127
  ${this.current || !this.href ? T`<span part="text" aria-current=${this.current ? "page" : "false"}><slot></slot></span>` : T`<a part="link" href=${this.href}><slot></slot></a>`}
10139
10128
  <span
10140
10129
  part="separator"
10141
10130
  aria-hidden="true"
10142
10131
  style=${hasSeparatorOverride ? `--lt-breadcrumb-separator: "${this.separator}"` : ""}
10143
10132
  ></span>
10144
- </li>
10133
+ </div>
10145
10134
  `;
10146
10135
  }
10147
10136
  };
@@ -10930,14 +10919,14 @@ var Pagination = class extends ThemeableElement {
10930
10919
  return T`
10931
10920
  <nav aria-label="Pagination">
10932
10921
  <button aria-label="First page" ?disabled=${atFirst || this.disabled} @click=${() => this._go(1)}>
10933
- <lt-icon name="double-nav-arrow-left" size="sm"></lt-icon>
10922
+ <lt-icon name="double-caret-left" size="sm"></lt-icon>
10934
10923
  </button>
10935
10924
  <button
10936
10925
  aria-label="Previous page"
10937
10926
  ?disabled=${atFirst || this.disabled}
10938
10927
  @click=${() => this._go(this.page - 1)}
10939
10928
  >
10940
- <lt-icon name="nav-arrow-left" size="sm"></lt-icon>
10929
+ <lt-icon name="caret-left" size="sm"></lt-icon>
10941
10930
  </button>
10942
10931
 
10943
10932
  ${pages.map(
@@ -10952,10 +10941,10 @@ var Pagination = class extends ThemeableElement {
10952
10941
  )}
10953
10942
 
10954
10943
  <button aria-label="Next page" ?disabled=${atLast || this.disabled} @click=${() => this._go(this.page + 1)}>
10955
- <lt-icon name="nav-arrow-right" size="sm"></lt-icon>
10944
+ <lt-icon name="caret-right" size="sm"></lt-icon>
10956
10945
  </button>
10957
10946
  <button aria-label="Last page" ?disabled=${atLast || this.disabled} @click=${() => this._go(this.totalPages)}>
10958
- <lt-icon name="double-nav-arrow-right" size="sm"></lt-icon>
10947
+ <lt-icon name="double-caret-right" size="sm"></lt-icon>
10959
10948
  </button>
10960
10949
  </nav>
10961
10950
  `;
@@ -12778,7 +12767,7 @@ var Combobox = class extends ThemeableElement {
12778
12767
  @input=${this.handleInput}
12779
12768
  @keydown=${this.handleKeydown}
12780
12769
  />
12781
- <lt-icon class="chevron" name="nav-arrow-down" size="sm"></lt-icon>
12770
+ <lt-icon class="chevron" name="caret-down" size="sm"></lt-icon>
12782
12771
  </div>
12783
12772
  `;
12784
12773
  return T`
package/dist/index.js CHANGED
@@ -1799,7 +1799,6 @@ var iconButtonStyles = css9`
1799
1799
 
1800
1800
  a[part='base'] {
1801
1801
  text-decoration: none;
1802
- color: inherit;
1803
1802
  }
1804
1803
 
1805
1804
  /* sizes */
@@ -2344,20 +2343,16 @@ var listStyles = css11`
2344
2343
  --list-marker-color: var(--lt-color-neutral-500);
2345
2344
  }
2346
2345
 
2347
- ul,
2348
- ol {
2346
+ [part='list'] {
2349
2347
  margin: 0;
2350
- padding: 0;
2348
+ padding: 0 0 0 var(--lt-spacing-5);
2351
2349
  list-style-position: outside;
2350
+ list-style-type: disc;
2352
2351
  color: var(--lt-text-default);
2353
2352
  }
2354
2353
 
2355
- ul {
2356
- padding-left: var(--lt-spacing-5);
2357
- }
2358
-
2359
- ol {
2360
- padding-left: var(--lt-spacing-5);
2354
+ :host([type='ordered']) [part='list'] {
2355
+ list-style-type: decimal;
2361
2356
  }
2362
2357
 
2363
2358
  ::slotted(li),
@@ -2379,8 +2374,7 @@ var listStyles = css11`
2379
2374
  }
2380
2375
 
2381
2376
  /* No marker */
2382
- :host([no-marker]) ul,
2383
- :host([no-marker]) ol {
2377
+ :host([no-marker]) [part='list'] {
2384
2378
  list-style: none;
2385
2379
  padding-left: 0;
2386
2380
  }
@@ -2404,17 +2398,12 @@ var listStyles = css11`
2404
2398
  margin-bottom: 0;
2405
2399
  }
2406
2400
 
2407
- ul ::slotted(li)::marker {
2408
- color: var(--list-marker-color);
2409
- }
2410
-
2411
- ol ::slotted(li)::marker {
2401
+ [part='list'] ::slotted(li)::marker {
2412
2402
  color: var(--list-marker-color);
2413
2403
  }
2414
2404
 
2415
2405
  /* Size variants */
2416
- :host([size='sm']) ul,
2417
- :host([size='sm']) ol {
2406
+ :host([size='sm']) [part='list'] {
2418
2407
  font-size: 0.875rem;
2419
2408
  line-height: 1.5;
2420
2409
  }
@@ -2424,8 +2413,7 @@ var listStyles = css11`
2424
2413
  margin-bottom: var(--lt-spacing-1);
2425
2414
  }
2426
2415
 
2427
- :host([size='md']) ul,
2428
- :host([size='md']) ol {
2416
+ :host([size='md']) [part='list'] {
2429
2417
  font-size: 1rem;
2430
2418
  line-height: 1.6;
2431
2419
  }
@@ -2435,8 +2423,7 @@ var listStyles = css11`
2435
2423
  margin-bottom: var(--lt-spacing-2);
2436
2424
  }
2437
2425
 
2438
- :host([size='lg']) ul,
2439
- :host([size='lg']) ol {
2426
+ :host([size='lg']) [part='list'] {
2440
2427
  font-size: 1.125rem;
2441
2428
  line-height: 1.7;
2442
2429
  }
@@ -2604,13 +2591,12 @@ var List = class extends ThemeableElement {
2604
2591
  this.noMarker = false;
2605
2592
  }
2606
2593
  render() {
2607
- const isOrdered = this.type === "ordered";
2608
2594
  const styles = this.markerColor ? { "--list-marker-color": this.markerColor } : {};
2609
- return isOrdered ? html11`<ol part="list" style=${styleMap3(styles)}>
2610
- <slot></slot>
2611
- </ol>` : html11`<ul part="list" style=${styleMap3(styles)}>
2612
- <slot></slot>
2613
- </ul>`;
2595
+ return html11`
2596
+ <div part="list" role="list" style=${styleMap3(styles)}>
2597
+ <slot></slot>
2598
+ </div>
2599
+ `;
2614
2600
  }
2615
2601
  };
2616
2602
  List.styles = listStyles;
@@ -8281,7 +8267,7 @@ var headerStyles = css31`
8281
8267
 
8282
8268
  :host([background='primary']) {
8283
8269
  background: var(--lt-bg-primary);
8284
- color: var(--lt-text-inverse);
8270
+ color: var(--lt-text-on-primary);
8285
8271
  }
8286
8272
 
8287
8273
  :host([background='surface']) {
@@ -8739,7 +8725,6 @@ var breadcrumbStyles = css34`
8739
8725
  display: flex;
8740
8726
  flex-wrap: wrap;
8741
8727
  gap: 0;
8742
- list-style: none;
8743
8728
  margin: 0;
8744
8729
  padding: 0;
8745
8730
  }
@@ -8802,9 +8787,9 @@ var Breadcrumb = class extends ThemeableElement {
8802
8787
  render() {
8803
8788
  return html33`
8804
8789
  <nav aria-label="breadcrumb">
8805
- <ol part="list">
8790
+ <div part="list" role="list">
8806
8791
  <slot></slot>
8807
- </ol>
8792
+ </div>
8808
8793
  </nav>
8809
8794
  `;
8810
8795
  }
@@ -8823,17 +8808,21 @@ var BreadcrumbItem = class extends ThemeableElement {
8823
8808
  this.current = false;
8824
8809
  this.separator = "";
8825
8810
  }
8811
+ connectedCallback() {
8812
+ super.connectedCallback();
8813
+ this.setAttribute("role", "listitem");
8814
+ }
8826
8815
  render() {
8827
8816
  const hasSeparatorOverride = this.separator !== null && this.separator !== void 0 && this.separator !== "";
8828
8817
  return html33`
8829
- <li part="item">
8818
+ <div part="item">
8830
8819
  ${this.current || !this.href ? html33`<span part="text" aria-current=${this.current ? "page" : "false"}><slot></slot></span>` : html33`<a part="link" href=${this.href}><slot></slot></a>`}
8831
8820
  <span
8832
8821
  part="separator"
8833
8822
  aria-hidden="true"
8834
8823
  style=${hasSeparatorOverride ? `--lt-breadcrumb-separator: "${this.separator}"` : ""}
8835
8824
  ></span>
8836
- </li>
8825
+ </div>
8837
8826
  `;
8838
8827
  }
8839
8828
  };
@@ -9654,14 +9643,14 @@ var Pagination = class extends ThemeableElement {
9654
9643
  return html39`
9655
9644
  <nav aria-label="Pagination">
9656
9645
  <button aria-label="First page" ?disabled=${atFirst || this.disabled} @click=${() => this._go(1)}>
9657
- <lt-icon name="double-nav-arrow-left" size="sm"></lt-icon>
9646
+ <lt-icon name="double-caret-left" size="sm"></lt-icon>
9658
9647
  </button>
9659
9648
  <button
9660
9649
  aria-label="Previous page"
9661
9650
  ?disabled=${atFirst || this.disabled}
9662
9651
  @click=${() => this._go(this.page - 1)}
9663
9652
  >
9664
- <lt-icon name="nav-arrow-left" size="sm"></lt-icon>
9653
+ <lt-icon name="caret-left" size="sm"></lt-icon>
9665
9654
  </button>
9666
9655
 
9667
9656
  ${pages.map(
@@ -9676,10 +9665,10 @@ var Pagination = class extends ThemeableElement {
9676
9665
  )}
9677
9666
 
9678
9667
  <button aria-label="Next page" ?disabled=${atLast || this.disabled} @click=${() => this._go(this.page + 1)}>
9679
- <lt-icon name="nav-arrow-right" size="sm"></lt-icon>
9668
+ <lt-icon name="caret-right" size="sm"></lt-icon>
9680
9669
  </button>
9681
9670
  <button aria-label="Last page" ?disabled=${atLast || this.disabled} @click=${() => this._go(this.totalPages)}>
9682
- <lt-icon name="double-nav-arrow-right" size="sm"></lt-icon>
9671
+ <lt-icon name="double-caret-right" size="sm"></lt-icon>
9683
9672
  </button>
9684
9673
  </nav>
9685
9674
  `;
@@ -11518,7 +11507,7 @@ var Combobox = class extends ThemeableElement {
11518
11507
  @input=${this.handleInput}
11519
11508
  @keydown=${this.handleKeydown}
11520
11509
  />
11521
- <lt-icon class="chevron" name="nav-arrow-down" size="sm"></lt-icon>
11510
+ <lt-icon class="chevron" name="caret-down" size="sm"></lt-icon>
11522
11511
  </div>
11523
11512
  `;
11524
11513
  return html43`
@@ -36,6 +36,8 @@
36
36
  "database",
37
37
  "diamond",
38
38
  "discord",
39
+ "double-caret-left",
40
+ "double-caret-right",
39
41
  "double-circle",
40
42
  "download",
41
43
  "drag",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latty-ds/web",
3
- "version": "0.10.1",
3
+ "version": "0.10.3",
4
4
  "description": "Web Components for the Latty design system — framework-agnostic UI components built with Lit",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -224,8 +224,8 @@
224
224
  },
225
225
  "dependencies": {
226
226
  "@floating-ui/dom": "^1.7.6",
227
- "@latty-ds/icons": "0.10.0"
227
+ "@latty-ds/icons": "0.10.3"
228
228
  },
229
229
  "customElements": "custom-elements.json",
230
- "gitHead": "f492491c8671b91c1717804f64754980ca563097"
230
+ "gitHead": "a708880d34efd89654a429bc2419f9016956c454"
231
231
  }