From dfda4decd0ba6bce3dbb3a0695f11a290eda2b03 Mon Sep 17 00:00:00 2001 From: Agustin Delgado Date: Sat, 19 Sep 2026 16:00:55 -0300 Subject: [PATCH 1/4] feat: add Breadcrumbs, Separator and Avatar Breadcrumbs is a nav landmark named Breadcrumb in six languages, with an ordered list that keeps its role in writing, aria-current on the current page, aria-hidden separators in the items, and a span for a link without an address or with disabled. Separator is a role=separator line, vertical on request, or role=none when decorative. Avatar loads the image off the screen and renders the img once it is there, shows the fallback at once for a failure or a missing source, and holds it back for a delay while the image loads. --- .changeset/avatar-v1.md | 5 + .changeset/breadcrumbs-v1.md | 5 + .changeset/separator-v1.md | 5 + docs/src/content/avatar/api.json | 133 +++++++++++ docs/src/content/avatar/demos/hero.svelte | 31 +++ docs/src/content/avatar/demos/status.svelte | 32 +++ docs/src/content/avatar/index.md | 64 ++++++ docs/src/content/breadcrumbs/api.json | 206 ++++++++++++++++++ .../content/breadcrumbs/demos/disabled.svelte | 33 +++ .../src/content/breadcrumbs/demos/hero.svelte | 35 +++ docs/src/content/breadcrumbs/index.md | 82 +++++++ docs/src/content/separator/api.json | 53 +++++ docs/src/content/separator/demos/hero.svelte | 16 ++ docs/src/content/separator/index.md | 53 +++++ docs/src/lib/docs/nav.ts | 3 + packages/ui/package.json | 15 ++ packages/ui/src/lib/avatar/README.md | 43 ++++ packages/ui/src/lib/avatar/TODO.md | 13 ++ .../avatar/fallback/avatar-fallback.svelte | 57 +++++ .../src/lib/avatar/image/avatar-image.svelte | 72 ++++++ packages/ui/src/lib/avatar/index.parts.ts | 3 + packages/ui/src/lib/avatar/index.ts | 23 ++ .../ui/src/lib/avatar/root/avatar-root.svelte | 53 +++++ .../ui/src/lib/avatar/root/avatar-ssr.test.ts | 20 ++ .../ui/src/lib/avatar/root/avatar-test.svelte | 28 +++ .../ui/src/lib/avatar/root/avatar.test.ts | 89 ++++++++ packages/ui/src/lib/avatar/root/context.ts | 27 +++ packages/ui/src/lib/avatar/types.ts | 46 ++++ packages/ui/src/lib/breadcrumbs/README.md | 59 +++++ packages/ui/src/lib/breadcrumbs/TODO.md | 13 ++ .../ui/src/lib/breadcrumbs/index.parts.ts | 5 + packages/ui/src/lib/breadcrumbs/index.ts | 22 ++ .../breadcrumbs/item/breadcrumbs-item.svelte | 30 +++ .../breadcrumbs/link/breadcrumbs-link.svelte | 47 ++++ .../breadcrumbs/list/breadcrumbs-list.svelte | 31 +++ .../breadcrumbs/root/breadcrumbs-root.svelte | 47 ++++ .../breadcrumbs/root/breadcrumbs-ssr.test.ts | 16 ++ .../breadcrumbs/root/breadcrumbs-test.svelte | 39 ++++ .../lib/breadcrumbs/root/breadcrumbs.test.ts | 99 +++++++++ .../separator/breadcrumbs-separator.svelte | 35 +++ packages/ui/src/lib/breadcrumbs/types.ts | 67 ++++++ packages/ui/src/lib/index.ts | 6 + .../ui/src/lib/internal/localized-strings.ts | 8 + packages/ui/src/lib/separator/README.md | 33 +++ packages/ui/src/lib/separator/TODO.md | 11 + packages/ui/src/lib/separator/index.ts | 8 + .../src/lib/separator/separator-ssr.test.ts | 20 ++ .../src/lib/separator/separator-test.svelte | 20 ++ .../ui/src/lib/separator/separator.svelte | 62 ++++++ .../ui/src/lib/separator/separator.test.ts | 59 +++++ packages/ui/src/lib/separator/types.ts | 1 + 51 files changed, 1983 insertions(+) create mode 100644 .changeset/avatar-v1.md create mode 100644 .changeset/breadcrumbs-v1.md create mode 100644 .changeset/separator-v1.md create mode 100644 docs/src/content/avatar/api.json create mode 100644 docs/src/content/avatar/demos/hero.svelte create mode 100644 docs/src/content/avatar/demos/status.svelte create mode 100644 docs/src/content/avatar/index.md create mode 100644 docs/src/content/breadcrumbs/api.json create mode 100644 docs/src/content/breadcrumbs/demos/disabled.svelte create mode 100644 docs/src/content/breadcrumbs/demos/hero.svelte create mode 100644 docs/src/content/breadcrumbs/index.md create mode 100644 docs/src/content/separator/api.json create mode 100644 docs/src/content/separator/demos/hero.svelte create mode 100644 docs/src/content/separator/index.md create mode 100644 packages/ui/src/lib/avatar/README.md create mode 100644 packages/ui/src/lib/avatar/TODO.md create mode 100644 packages/ui/src/lib/avatar/fallback/avatar-fallback.svelte create mode 100644 packages/ui/src/lib/avatar/image/avatar-image.svelte create mode 100644 packages/ui/src/lib/avatar/index.parts.ts create mode 100644 packages/ui/src/lib/avatar/index.ts create mode 100644 packages/ui/src/lib/avatar/root/avatar-root.svelte create mode 100644 packages/ui/src/lib/avatar/root/avatar-ssr.test.ts create mode 100644 packages/ui/src/lib/avatar/root/avatar-test.svelte create mode 100644 packages/ui/src/lib/avatar/root/avatar.test.ts create mode 100644 packages/ui/src/lib/avatar/root/context.ts create mode 100644 packages/ui/src/lib/avatar/types.ts create mode 100644 packages/ui/src/lib/breadcrumbs/README.md create mode 100644 packages/ui/src/lib/breadcrumbs/TODO.md create mode 100644 packages/ui/src/lib/breadcrumbs/index.parts.ts create mode 100644 packages/ui/src/lib/breadcrumbs/index.ts create mode 100644 packages/ui/src/lib/breadcrumbs/item/breadcrumbs-item.svelte create mode 100644 packages/ui/src/lib/breadcrumbs/link/breadcrumbs-link.svelte create mode 100644 packages/ui/src/lib/breadcrumbs/list/breadcrumbs-list.svelte create mode 100644 packages/ui/src/lib/breadcrumbs/root/breadcrumbs-root.svelte create mode 100644 packages/ui/src/lib/breadcrumbs/root/breadcrumbs-ssr.test.ts create mode 100644 packages/ui/src/lib/breadcrumbs/root/breadcrumbs-test.svelte create mode 100644 packages/ui/src/lib/breadcrumbs/root/breadcrumbs.test.ts create mode 100644 packages/ui/src/lib/breadcrumbs/separator/breadcrumbs-separator.svelte create mode 100644 packages/ui/src/lib/breadcrumbs/types.ts create mode 100644 packages/ui/src/lib/separator/README.md create mode 100644 packages/ui/src/lib/separator/TODO.md create mode 100644 packages/ui/src/lib/separator/index.ts create mode 100644 packages/ui/src/lib/separator/separator-ssr.test.ts create mode 100644 packages/ui/src/lib/separator/separator-test.svelte create mode 100644 packages/ui/src/lib/separator/separator.svelte create mode 100644 packages/ui/src/lib/separator/separator.test.ts create mode 100644 packages/ui/src/lib/separator/types.ts diff --git a/.changeset/avatar-v1.md b/.changeset/avatar-v1.md new file mode 100644 index 00000000..44f5fff9 --- /dev/null +++ b/.changeset/avatar-v1.md @@ -0,0 +1,5 @@ +--- +'@human-kit/ui': minor +--- + +Add the Avatar primitive with `Root`, `Image` and `Fallback`. The image loads off the screen first, and the `` renders once it is there, thus a broken image icon never shows. The fallback shows while the image is not on the screen, at once for a failure or a missing `src`, and after `delay` milliseconds while a slow image loads. The root has `data-status` and `onStatusChange` for `loading`, `loaded` and `error`. diff --git a/.changeset/breadcrumbs-v1.md b/.changeset/breadcrumbs-v1.md new file mode 100644 index 00000000..9c51279b --- /dev/null +++ b/.changeset/breadcrumbs-v1.md @@ -0,0 +1,5 @@ +--- +'@human-kit/ui': minor +--- + +Add the Breadcrumbs primitive with `Root`, `List`, `Item`, `Link` and `Separator`. The root is a `