@thewhatmatters/wmds 0.4.28 → 0.4.30
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.
- package/CHANGELOG.md +52 -0
- package/CONSUMING.md +2 -1
- package/dist/components/atoms/Badge/Badge.js +1 -1
- package/dist/components/atoms/Badge/badgeStyles.d.ts +1 -1
- package/dist/components/atoms/Badge/badgeStyles.js +1 -1
- package/dist/components/atoms/Band/Band.d.ts +1 -1
- package/dist/components/atoms/Band/Band.d.ts.map +1 -1
- package/dist/components/atoms/Band/bandStyles.d.ts +4 -1
- package/dist/components/atoms/Band/bandStyles.d.ts.map +1 -1
- package/dist/components/atoms/Band/bandStyles.js +1 -1
- package/dist/components/atoms/Button/Button.d.ts +22 -4
- package/dist/components/atoms/Button/Button.d.ts.map +1 -1
- package/dist/components/atoms/Button/Button.js +132 -124
- package/dist/components/atoms/Button/buttonStyles.d.ts +3 -1
- package/dist/components/atoms/Button/buttonStyles.d.ts.map +1 -1
- package/dist/components/atoms/Button/buttonStyles.js +5 -4
- package/dist/components/atoms/IconButton/IconButton.d.ts +5 -0
- package/dist/components/atoms/IconButton/IconButton.d.ts.map +1 -1
- package/dist/components/atoms/IconButton/IconButton.js +4 -3
- package/dist/components/atoms/SectionCaption/SectionCaption.d.ts +5 -1
- package/dist/components/atoms/SectionCaption/SectionCaption.d.ts.map +1 -1
- package/dist/components/atoms/SectionCaption/SectionCaption.js +1 -1
- package/dist/components/atoms/TextLink/TextLink.d.ts +10 -2
- package/dist/components/atoms/TextLink/TextLink.d.ts.map +1 -1
- package/dist/components/atoms/TextLink/TextLink.js +18 -14
- package/dist/components/molecules/Accordion/Accordion.d.ts +9 -4
- package/dist/components/molecules/Accordion/Accordion.d.ts.map +1 -1
- package/dist/components/molecules/Accordion/Accordion.js +58 -51
- package/dist/components/molecules/Accordion/accordionStyles.d.ts +5 -0
- package/dist/components/molecules/Accordion/accordionStyles.d.ts.map +1 -1
- package/dist/components/molecules/Accordion/accordionStyles.js +5 -2
- package/dist/components/molecules/Breadcrumb/breadcrumbStyles.d.ts +4 -1
- package/dist/components/molecules/Breadcrumb/breadcrumbStyles.d.ts.map +1 -1
- package/dist/components/molecules/Breadcrumb/breadcrumbStyles.js +1 -1
- package/dist/components/molecules/HeroIntro/HeroIntro.d.ts +16 -8
- package/dist/components/molecules/HeroIntro/HeroIntro.d.ts.map +1 -1
- package/dist/components/molecules/HeroIntro/HeroIntro.js +21 -17
- package/dist/components/molecules/HeroIntro/heroIntroStyles.d.ts +12 -3
- package/dist/components/molecules/HeroIntro/heroIntroStyles.d.ts.map +1 -1
- package/dist/components/molecules/HeroIntro/heroIntroStyles.js +2 -2
- package/dist/components/molecules/LinkTile/LinkTile.d.ts +6 -4
- package/dist/components/molecules/LinkTile/LinkTile.d.ts.map +1 -1
- package/dist/components/molecules/LinkTile/LinkTile.js +29 -29
- package/dist/components/molecules/PageHeader/PageHeader.d.ts +8 -1
- package/dist/components/molecules/PageHeader/PageHeader.d.ts.map +1 -1
- package/dist/components/molecules/PageHeader/PageHeader.js +19 -15
- package/dist/components/organisms/FooterReveal/FooterReveal.d.ts +4 -2
- package/dist/components/organisms/FooterReveal/FooterReveal.d.ts.map +1 -1
- package/dist/components/organisms/FooterReveal/FooterReveal.js +85 -85
- package/dist/components/organisms/FooterReveal/FooterRevealRuled.d.ts.map +1 -1
- package/dist/components/organisms/FooterReveal/FooterRevealRuled.js +49 -50
- package/dist/components/organisms/FooterReveal/footerRevealStyles.d.ts +9 -7
- package/dist/components/organisms/FooterReveal/footerRevealStyles.d.ts.map +1 -1
- package/dist/components/organisms/FooterReveal/footerRevealStyles.js +2 -9
- package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.d.ts +2 -1
- package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.d.ts.map +1 -1
- package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.js +1 -1
- package/dist/components/organisms/Sheet/Sheet.d.ts +3 -1
- package/dist/components/organisms/Sheet/Sheet.d.ts.map +1 -1
- package/dist/components/organisms/Sheet/Sheet.js +51 -49
- package/dist/components/organisms/SiteNav/SiteNav.d.ts +4 -2
- package/dist/components/organisms/SiteNav/SiteNav.d.ts.map +1 -1
- package/dist/components/organisms/SiteNav/SiteNav.js +191 -187
- package/dist/components/organisms/SiteNav/siteNavStyles.d.ts +2 -2
- package/dist/components/organisms/SiteNav/siteNavStyles.d.ts.map +1 -1
- package/dist/components/organisms/SiteNav/siteNavStyles.js +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +107 -107
- package/dist/lib/motion.d.ts +2 -1
- package/dist/lib/motion.d.ts.map +1 -1
- package/dist/lib/motion.js +1 -1
- package/dist/lib/typography.d.ts +2 -2
- package/dist/lib/typography.d.ts.map +1 -1
- package/dist/lib/typography.js +14 -3
- package/dist/styles.css +1 -1
- package/dist/typography.css +46 -11
- package/docs/components.md +5 -5
- package/docs/exports.json +1 -1
- package/docs/patterns/components-accordion--flush.tsx +1 -1
- package/docs/patterns/components-appshell--portal-dashboard-pattern.tsx +1 -1
- package/docs/patterns/components-avatar--dropdown-row.tsx +1 -1
- package/docs/patterns/components-badge--outline-tags.tsx +1 -1
- package/docs/patterns/components-badge--status-pill.tsx +1 -1
- package/docs/patterns/components-badge--with-avatar.tsx +1 -1
- package/docs/patterns/components-band--page-in-bands.tsx +1 -1
- package/docs/patterns/components-breadcrumb--editorial.tsx +1 -1
- package/docs/patterns/components-breadcrumb--long-path.tsx +1 -1
- package/docs/patterns/components-breadcrumb--path.tsx +1 -1
- package/docs/patterns/components-breadcrumb--router-links.tsx +1 -1
- package/docs/patterns/components-button-button--copy-button.tsx +1 -1
- package/docs/patterns/components-button-button--destructive-action.tsx +1 -1
- package/docs/patterns/components-button-button--external-link.tsx +1 -1
- package/docs/patterns/components-button-button--ghost-action.tsx +1 -1
- package/docs/patterns/components-button-button--inverse-action.tsx +1 -1
- package/docs/patterns/components-button-button--link-render.tsx +1 -1
- package/docs/patterns/components-button-button--multi-state-badge.tsx +1 -1
- package/docs/patterns/components-button-button--outline-mono.tsx +1 -1
- package/docs/patterns/components-button-button--primary-action.tsx +1 -1
- package/docs/patterns/components-button-button--row-hug.tsx +1 -1
- package/docs/patterns/components-button-button--row-layout.tsx +1 -1
- package/docs/patterns/components-button-button--secondary-action.tsx +1 -1
- package/docs/patterns/components-button-button--suggestion-pills.tsx +1 -1
- package/docs/patterns/components-button-button--with-count.tsx +1 -1
- package/docs/patterns/components-button-button--with-icon.tsx +1 -1
- package/docs/patterns/components-button-floatingactionbutton--vertical-actions.tsx +1 -1
- package/docs/patterns/components-calembed--pattern-skip-in-footer.tsx +1 -1
- package/docs/patterns/components-card-card--body-slot-occupancy-history.tsx +1 -1
- package/docs/patterns/components-card-card--headerless-media.tsx +1 -1
- package/docs/patterns/components-card-card--outlined-layout.tsx +1 -1
- package/docs/patterns/components-card-card--pinned-height.tsx +1 -1
- package/docs/patterns/components-card-card--terminal-frame.tsx +1 -1
- package/docs/patterns/components-card-selectablecard--selectable-cards-pattern.tsx +1 -1
- package/docs/patterns/components-carousel--image-carousel.tsx +1 -1
- package/docs/patterns/components-chart--audience-activity-heatmap.tsx +1 -1
- package/docs/patterns/components-chart--cartesian-no-data-gaps.tsx +1 -1
- package/docs/patterns/components-chart--occupancy-history-in-card.tsx +1 -1
- package/docs/patterns/components-chart--occupancy-in-card.tsx +1 -1
- package/docs/patterns/components-chart--post-reach-distribution.tsx +1 -1
- package/docs/patterns/components-chart--ranked-audience-breakdown.tsx +1 -1
- package/docs/patterns/components-chart--revenue-by-line.tsx +1 -1
- package/docs/patterns/components-chart--segmented-ring-pattern.tsx +1 -1
- package/docs/patterns/components-chart--unit-grid-composition.tsx +1 -1
- package/docs/patterns/components-chatdock--pattern-chat-dock.tsx +1 -1
- package/docs/patterns/components-chatdock--pattern-start-project-gate.tsx +1 -1
- package/docs/patterns/components-chatqa--pattern-qa-with-reply.tsx +1 -1
- package/docs/patterns/components-checkbox-checkbox--default.tsx +1 -1
- package/docs/patterns/components-checkbox-checkbox--with-count.tsx +1 -1
- package/docs/patterns/components-checkbox-checkbox--with-description.tsx +1 -1
- package/docs/patterns/components-checkbox-checkboxgroup--default.tsx +1 -1
- package/docs/patterns/components-checkbox-checkboxgroup--option-counts.tsx +1 -1
- package/docs/patterns/components-copyfield--clipboard-blocked.tsx +1 -1
- package/docs/patterns/components-copyfield--copied.tsx +1 -1
- package/docs/patterns/components-copyfield--copy-key.tsx +1 -1
- package/docs/patterns/components-copyfield--on-navy.tsx +1 -1
- package/docs/patterns/components-descriptionlist--details.tsx +1 -1
- package/docs/patterns/components-descriptionlist--post-metadata.tsx +1 -1
- package/docs/patterns/components-dialog--alert-dialog-destructive.tsx +1 -1
- package/docs/patterns/components-dialog--alert-dialog-typed-confirmation.tsx +1 -1
- package/docs/patterns/components-dialog--default-dialog.tsx +1 -1
- package/docs/patterns/components-dialog--form-dialog.tsx +1 -1
- package/docs/patterns/components-displaycontrols--page-utilities.tsx +1 -1
- package/docs/patterns/components-displaycontrols--theme-switch.tsx +1 -1
- package/docs/patterns/components-field--horizontal-input.tsx +1 -1
- package/docs/patterns/components-field--horizontal-text-area.tsx +1 -1
- package/docs/patterns/components-field--multi-control.tsx +1 -1
- package/docs/patterns/components-filterpanel--panel.tsx +1 -1
- package/docs/patterns/components-footerreveal--marketing-hero-pattern.tsx +6 -6
- package/docs/patterns/components-footerreveal--marketing-hero-ruled-pattern.tsx +2 -2
- package/docs/patterns/components-footerreveal--marketing-hero-with-gallery-intro.tsx +6 -6
- package/docs/patterns/components-footerreveal--marketing-page-pattern.tsx +5 -5
- package/docs/patterns/components-footerreveal--ruled-grid-footer-pattern.tsx +1 -1
- package/docs/patterns/components-footerreveal--sequenced-marketing-hero.tsx +5 -5
- package/docs/patterns/components-herointro--two-line-intro.tsx +3 -3
- package/docs/patterns/components-herotilestack--marketing-hero-pattern.tsx +3 -3
- package/docs/patterns/components-herotilestack--marketing-hero-text-sequence.tsx +2 -2
- package/docs/patterns/components-herotilestack--marketing-hero-with-gallery-intro.tsx +3 -3
- package/docs/patterns/components-indexlist--post-index.tsx +1 -1
- package/docs/patterns/components-intakeconfirmation--booked-pattern.tsx +1 -1
- package/docs/patterns/components-intakeconfirmation--emailed-pattern.tsx +1 -1
- package/docs/patterns/components-intakeform--about-you-pattern.tsx +1 -1
- package/docs/patterns/components-intakeform--short-form-pattern.tsx +1 -1
- package/docs/patterns/components-intakemodal--intake-modal-pattern.tsx +1 -1
- package/docs/patterns/components-kbd--command-row.tsx +1 -1
- package/docs/patterns/components-kbd--numbered-choices.tsx +1 -1
- package/docs/patterns/components-kbd--shortcut.tsx +1 -1
- package/docs/patterns/components-linktile--resource-tile.tsx +2 -2
- package/docs/patterns/components-linktile--router-link.tsx +1 -1
- package/docs/patterns/components-logview--detail-pane.tsx +1 -1
- package/docs/patterns/components-logview--log-viewer.tsx +1 -1
- package/docs/patterns/components-moremenu--action-menu.tsx +1 -1
- package/docs/patterns/components-moremenu--in-card-header.tsx +1 -1
- package/docs/patterns/components-navlist--app-sidebar.tsx +1 -1
- package/docs/patterns/components-navlist--side-nav-settings.tsx +1 -1
- package/docs/patterns/components-pageheader--app-header-pattern.tsx +1 -1
- package/docs/patterns/components-pageheader--page-section-header.tsx +1 -1
- package/docs/patterns/components-pageheader--toolbar-header.tsx +1 -1
- package/docs/patterns/components-panel--end-detail-rail.tsx +1 -1
- package/docs/patterns/components-pillgroup--pill-group-pattern.tsx +1 -1
- package/docs/patterns/components-promptbar--pattern-prompt-bar.tsx +1 -1
- package/docs/patterns/components-prose--article-body.tsx +1 -1
- package/docs/patterns/components-radio-radiogroup--default.tsx +1 -1
- package/docs/patterns/components-scrollhorizontal--project-gallery-pattern.tsx +1 -1
- package/docs/patterns/components-scrollhorizontal--with-intro.tsx +1 -1
- package/docs/patterns/components-sectioncaption--column-caption.tsx +1 -1
- package/docs/patterns/components-sectioncaption--with-action.tsx +1 -1
- package/docs/patterns/components-sheet--bottom-sheet.tsx +1 -1
- package/docs/patterns/components-sheet--end-sheet.tsx +1 -1
- package/docs/patterns/components-sheet--side-sheet-header-actions.tsx +1 -1
- package/docs/patterns/components-sheet--side-sheet-url-deep-link.tsx +1 -1
- package/docs/patterns/components-sheet--side-sheet.tsx +1 -1
- package/docs/patterns/components-sitenav--brand-and-cta.tsx +1 -1
- package/docs/patterns/components-sitenav--centered-links.tsx +1 -1
- package/docs/patterns/components-sitenav--compact.tsx +1 -1
- package/docs/patterns/components-sitenav--marketing-header.tsx +1 -1
- package/docs/patterns/components-sitenav--mega-menu.tsx +1 -1
- package/docs/patterns/components-stat--hero-stat.tsx +1 -1
- package/docs/patterns/components-stat--insights-row.tsx +1 -1
- package/docs/patterns/components-stepprogress--step-progress-pattern.tsx +1 -1
- package/docs/patterns/components-switch--default.tsx +1 -1
- package/docs/patterns/components-switch--settings-row.tsx +1 -1
- package/docs/patterns/components-tab--settings-pages.tsx +1 -1
- package/docs/patterns/components-table--approvals-with-sheet.tsx +1 -1
- package/docs/patterns/components-table--approvals.tsx +1 -1
- package/docs/patterns/components-table--basic.tsx +1 -1
- package/docs/patterns/components-taskrows--action-details.tsx +1 -1
- package/docs/patterns/components-taskrows--capsules.tsx +1 -1
- package/docs/patterns/components-taskrows--card-with-status-rows.tsx +1 -1
- package/docs/patterns/components-taskrows--controlled-expand.tsx +1 -1
- package/docs/patterns/components-taskrows--custom-slots.tsx +1 -1
- package/docs/patterns/components-taskrows--needs-you-table.tsx +1 -1
- package/docs/patterns/components-taskrows--status-list.tsx +1 -1
- package/docs/patterns/components-taskrows--tag-chips.tsx +1 -1
- package/docs/patterns/components-textarea--save-status.tsx +1 -1
- package/docs/patterns/components-textlink--external-destination.tsx +1 -1
- package/docs/patterns/components-textlink--inline-prose.tsx +1 -1
- package/docs/patterns/components-textlink--quiet-title.tsx +1 -1
- package/docs/patterns/components-textlink--supporting-copy.tsx +1 -1
- package/docs/patterns/components-textsequence--default.tsx +1 -1
- package/docs/patterns/components-textsequence--reduced-motion.tsx +1 -1
- package/docs/patterns/components-textsequence--shapes.tsx +1 -1
- package/docs/patterns/components-tilegrid--masonry.tsx +2 -2
- package/docs/patterns/components-toast--stacked-notifications.tsx +1 -1
- package/docs/patterns/components-tooltip--controlled.tsx +1 -1
- package/docs/patterns/components-tooltip--disabled-control.tsx +1 -1
- package/docs/patterns/components-tooltip--icon-action.tsx +1 -1
- package/docs/patterns/components-tooltip--keyboard-shortcut.tsx +1 -1
- package/docs/patterns/components-tooltip--placement.tsx +1 -1
- package/docs/patterns/foundations-scroll-fade--horizontal-rail.tsx +1 -1
- package/docs/patterns/foundations-scroll-fade--overflowing-list.tsx +1 -1
- package/docs/patterns/guides-chart-explorations--comparison-gallery.tsx +1 -1
- package/docs/patterns/guides-filter-panel--filtered-grid.tsx +2 -2
- package/docs/patterns/guides-filter-panel--filtered-index.tsx +1 -1
- package/docs/patterns/guides-overlay-flows--notification-preferences.tsx +1 -1
- package/docs/patterns/guides-post-page--post-page.tsx +1 -1
- package/docs/patterns/guides-profile-typography--editorial-profile.tsx +1 -1
- package/docs/patterns/guides-resource-detail--detail.tsx +1 -1
- package/docs/patterns/index.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,58 @@ Every release of `@thewhatmatters/wmds` is listed here, newest first.
|
|
|
7
7
|
- **Pasted patterns:** when a release changes a **Pattern — …** story's Show code, it is named under Consumer actions so apps re-copy it.
|
|
8
8
|
- **How to add an entry** (contributors): add your change to the top entry. If that version is already on npm (`npm view @thewhatmatters/wmds versions`), start a new entry above it and bump `version` in `package.json` to match. `npm run check:changelog` enforces the format.
|
|
9
9
|
|
|
10
|
+
## 0.4.30
|
|
11
|
+
|
|
12
|
+
**Capitals are tracked 0.08–0.12em (Eyebrow rule E3).**
|
|
13
|
+
|
|
14
|
+
- **HeroIntro** is left-aligned on phones, where it runs 3+ lines, and centred from `md` (Headings H8). The default step's heading now spans columns 2–11 from `lg` (was 4–9), so a 12-word intro holds 2 lines; `description` keeps the 6-column measure (4–9). Story copy is 12 words or fewer ("A design studio in Austin, Texas. / We help brands stand out online.") across **HeroIntro**, **HeroTileStack** and **FooterReveal** stories.
|
|
15
|
+
- **`type-lead`, `type-large`, `type-body` and `type-reading`** set `text-wrap: pretty`, so a lone word doesn't end a paragraph.
|
|
16
|
+
- **HeroIntro** `lead` is renamed **`firstLine`** (it's the heading's first line, not a lead paragraph). `lead` still works as a deprecated alias and warns in development. New optional **`description`**: a lead paragraph under the heading, `type-lead` in ink (Lead rules L7, L8). Story Show code updated: **Components/HeroIntro**, **Components/FooterReveal** and **Components/HeroTileStack** marketing hero patterns.
|
|
17
|
+
- **Accordion** `size` (new): `ui` (default, 14px muted panel text) or `reading` (17px regular in ink) for FAQ answers and service descriptions (Body rules B7, B9). New unit test.
|
|
18
|
+
- **IntakeConfirmation** body is `type-large` (regular), not `type-heading-2`: it's a paragraph (B4).
|
|
19
|
+
- **Guides/PostPage** lead sits in ink (was muted) and is shorter, about 2 lines at 390 (B9, L8).
|
|
20
|
+
- **Foundations/Typography** docs: `type-body` 14px is for app UI; marketing paragraphs use `type-large` or `type-reading` (B7); `type-reading` 1.65 is the long-form exception (B1).
|
|
21
|
+
- **`type-large` is regular weight (was semibold; Body rule B4, Randy 2026-10-26: "regular or lighter when it's 1.5rem and below").** `--text-large-weight` is a documented knob for a face that needs more weight.
|
|
22
|
+
- **`type-eyebrow`** tracking is **0.08em** (was 0.05em): `--text-eyebrow-tracking`. Affects **SectionCaption**, **IndexList** captions, **DescriptionList** `variant="mono"`, **FilterPanel** titles and anything on `typographyClass("eyebrow")`.
|
|
23
|
+
- **`typographyClass("overline")`** tracks 0.08em (was `tracking-wider`, 0.05em).
|
|
24
|
+
- **Badge** `mono` and **Button** `mono` track 0.12em (was 0.14em).
|
|
25
|
+
- Story Show code updated: **Components/FooterReveal → Marketing page pattern** (its column labels).
|
|
26
|
+
- New unit test: every uppercase class string in WMDS tracks 0.08–0.12em.
|
|
27
|
+
- **SectionCaption** `as` defaults to **`p`** (was `h2`): a caption in capitals is an eyebrow, not a heading (Headings H6, Eyebrow E6). It still names a region through `id` + `aria-labelledby`. **FilterPanel**'s "/ Filters" title and the post page's "/ Metadata" follow.
|
|
28
|
+
- **PageHeader** `as` (new): `h1` / `h2` / `h3`, so the title's level follows the page outline (Headings H1). Defaults are unchanged (`app` → `h1`, `page` → `h2`).
|
|
29
|
+
- New interaction test **Internal/Interactions/Heading levels**.
|
|
30
|
+
- **Every display step** (`type-display-hero`, `-xl`, `-1`, `-2`, `-3`) sets `overflow-wrap: anywhere` (Display rule D5, WCAG 1.4.10): a long word breaks instead of widening its flex or grid track and scrolling a 320px page sideways. `type-display-hero` and `-xl` used `break-word`, which still overflowed inside flex and grid. Normal copy sets as before. New interaction test **Internal/Interactions/Display type**.
|
|
31
|
+
- **`type-lead`** (new, `typographyClass("lead")`): the one paragraph under a page's H1 that sums the page up (Lead paragraph rule L7). 18px on phones to 21px (`--text-lead-size`, about 1.25× the 17px reading body), regular weight, 1.45 leading; use it at the 42rem measure in `text-fg`. Nothing uses it yet, so nothing changes until you adopt it.
|
|
32
|
+
- **Button** and **IconButton** `disabled` stays in the tab order (Buttons rule U6): it sets `aria-disabled` instead of native `disabled`, ignores clicks, Enter and Space (a disabled submit button no longer submits its form, including on Enter in a field), and shows no hover or press feedback. Disabled dims to **70%** (was 50%), so every role's label keeps 3:1 against its fill in light and dark (unit test). **Button** `disabledReason` (new) shows why beside the button (`type-supporting`, muted) and is read with it through `aria-describedby`. `pressScaleClass` skips `aria-disabled`. Story **Components/Button/Button → Reference — disabled**; new interaction test **Internal/Interactions/Button disabled**.
|
|
33
|
+
- **Band** `spacing="lg"` is **64px on phones** and 96px from `md` (was 96px everywhere; Spacing rule S8). `md` stays 48px. A hero or closing band on a phone loses 32px above and below.
|
|
34
|
+
- **Button**, **LinkTile** and **SiteNav** menu links follow the same rule: `external` keeps the same tab (with the external icon on Button and LinkTile), and new **`newTab`** opts in to a new tab and the spoken hint. **PostPage** share links and **ResourceDetail** "Visit" now stay in the tab. **Minor behaviour change.**
|
|
35
|
+
- **TextLink** `external` opens in the **same tab** (was a new tab; Links K9). It still shows the external icon. New **`newTab`** opt-in sets `target="_blank"`, `rel="noopener noreferrer"` and adds "(opens in a new tab)" to the accessible name. **Minor behaviour change.**
|
|
36
|
+
- **FooterReveal** social links open in the same tab (were a new tab for `https`; K9) and are at least 24px wide (K6). `FooterRevealSocialLink` gains an optional **`ariaLabel`**. **FooterRevealRuled**'s email link no longer opens a new tab. Story hrefs are real-looking, and the X link is named "WhatMatters on X".
|
|
37
|
+
- **IconButton** docs: don't disable icon buttons (U6). Hide the action, or keep it enabled and explain on press. No reason slot was added.
|
|
38
|
+
- **Button** `role` docs: on a page background the secondary level is `outline` (U1/U4). The filled `secondary` pill doesn't reach 3:1 against the page (logged as a gap; no visual change in this release).
|
|
39
|
+
- **SiteNav** docs record the **K7 navigation exception**: nav links have no underline; hover shows the ghost pill and darker ink, and the focus ring stays.
|
|
40
|
+
- **Breadcrumb** link crumbs are 24px tall targets (were 20px; Links rule K6, WCAG 2.5.8). Padding plus an equal negative margin, so the row does not move; the focus ring is 2px taller. New interaction test **Internal/Interactions/Link targets**.
|
|
41
|
+
- **Display type (Rule 3, D1/D2):** `type-display-1` leading **1.05** (was 1.15) and tracking **−0.03em** (was −0.04em); `type-display-2` **1.1** (was 1.2), new `--text-display-2-tracking` **−0.02em**; `type-display-3` **1.15** (was 1.24), new `--text-display-3-tracking` **−0.01em**; `type-display-hero` tracking **−0.03em** (was −0.04em). `--font-display-tracking` still overrides every step for a caps face. New unit test.
|
|
42
|
+
- **FooterReveal** headline is `type-heading-1` (was `type-display-1`): the fitted wordmark is the footer's one display moment (D9). The wordmark stays hidden from screen readers and is exempt from D1/D2 as a logo graphic.
|
|
43
|
+
- **Foundations/Typography** docs: heading steps sit two apart on the 1.2× ramp (≥ 1.25× between levels, Headings H7); an eyebrow and its heading are one spacing unit (H4, E5). The ramp is unchanged.
|
|
44
|
+
- **FooterReveal** sample headline is sentence case, "We build WhatMatters" (was Title Case; Headings H6). Show code changed in **Components/FooterReveal → Marketing page pattern**, **Marketing hero pattern**, **Marketing hero with gallery intro** and **Sequenced marketing hero**.
|
|
45
|
+
|
|
46
|
+
### Consumer actions
|
|
47
|
+
|
|
48
|
+
Re-copy the four **Components/FooterReveal** patterns named above if you pasted them (and write your own headline in sentence case). In your own code, give uppercase text `tracking-[0.08em]` (or use `type-eyebrow`) instead of `tracking-wider`. Labels are slightly wider; check eyebrows and mono badges at 390. A **SectionCaption** that should stay in the heading outline needs `as="h2"`; a test that finds it with `getByRole("heading")` now needs `getByText`. If your app sets subtext in `type-large` and wants the old weight, set `--text-large-weight: 600`. **HeroIntro:** rename `lead=` to `firstLine=` (re-copy the FooterReveal and HeroTileStack hero patterns); `lead` keeps working until a later release. **Disabled buttons are now focusable** (`aria-disabled`): a test that used `toBeDisabled()` on a WMDS Button or IconButton needs `toHaveAttribute("aria-disabled", "true")`, and code that read `button.disabled` reads `aria-disabled`. Prefer an enabled button plus an error on submit; when you keep one disabled, pass `disabledReason`.
|
|
49
|
+
|
|
50
|
+
If a **TextLink**, **Button**, **LinkTile** or **SiteNav** menu link with `external` must keep opening a new tab, add `newTab`. Give a one-letter FooterReveal social label an `ariaLabel`.
|
|
51
|
+
|
|
52
|
+
## 0.4.29
|
|
53
|
+
|
|
54
|
+
**SiteNav's phone menu button says what it does.**
|
|
55
|
+
|
|
56
|
+
- **SiteNav** mobile menu trigger says what it does: its label is "Close menu" while the sheet is open ("Open menu" when closed), it sets `aria-haspopup="dialog"`, and `aria-controls` points at the sheet's dialog while it is open (omitted when closed, since the sheet is unmounted). **Sheet.Content** takes `id` (new), set on the `role="dialog"` panel. New interaction test **Internal/Interactions/SiteNav → mobile menu trigger names its state and controls the sheet**.
|
|
57
|
+
|
|
58
|
+
### Consumer actions
|
|
59
|
+
|
|
60
|
+
None.
|
|
61
|
+
|
|
10
62
|
## 0.4.28
|
|
11
63
|
|
|
12
64
|
**AlertDialog takes a body, Input takes a rich label, and dialogs get a roomier edge.**
|
package/CONSUMING.md
CHANGED
|
@@ -342,6 +342,7 @@ A client's brand on WMDS is a short `brand.css` (imported after `styles.css`, un
|
|
|
342
342
|
| Knob | Default | Reads it |
|
|
343
343
|
|------|---------|----------|
|
|
344
344
|
| `--font-family-heading` | Geist | `type-heading-*`, and every display step when `--font-display` is unset |
|
|
345
|
+
| `--text-large-weight` | `400` (regular) | `type-large` subtext. Body and subtext at 1.5rem and below stay regular or lighter; raise it only for a face that reads too thin |
|
|
345
346
|
| `--font-display` | unset (the heading face) | every `type-display-*` step (`hero`, `xl`, `1`, `2`, `3`) |
|
|
346
347
|
| `--font-display-weight` | each step's own (700 / 600) | display steps: set `400` for a one-weight face, so nothing is faux-bolded |
|
|
347
348
|
| `--font-display-tracking` | each step's own | display steps: `0` for a condensed face |
|
|
@@ -355,7 +356,7 @@ A client's brand on WMDS is a short `brand.css` (imported after `styles.css`, un
|
|
|
355
356
|
|
|
356
357
|
The font knobs also work on a section wrapper (`[--font-display:…]`); set the colour pairs on `:root` (and `[data-theme="dark"]` if they differ there). Load the face yourself (`next/font` or `@fontsource/*`).
|
|
357
358
|
|
|
358
|
-
**Display steps:** `type-display-hero` (fluid to 16vw, 0.92 leading) and `type-display-xl` (44px → 136px, 0.9 leading) sit above `type-display-1`;
|
|
359
|
+
**Display steps:** `type-display-hero` (fluid to 16vw, 0.92 leading) and `type-display-xl` (44px → 136px, 0.9 leading) sit above `type-display-1`; every display step breaks a long word rather than overflow a phone (`overflow-wrap: anywhere`, also inside flex and grid). **TextSequence** word masks keep 0.08em headroom above and to the sides, so tall caps and outline strokes aren't clipped.
|
|
359
360
|
|
|
360
361
|
**Contrast:** every on-colour and muted step needs **4.5:1** on its colour. `npx wmds-check` reads the app's CSS and fails a hex pair under that (`brand-contrast`, an error). Pairs it can't resolve (a `var()` or `color-mix`) aren't checked, so check those yourself.
|
|
361
362
|
|
|
@@ -58,7 +58,7 @@ function T({ children: a, variant: h = "neutral", size: _ = "sm", emphasis: x =
|
|
|
58
58
|
}) : /* @__PURE__ */ b(w, {
|
|
59
59
|
render: E,
|
|
60
60
|
id: N,
|
|
61
|
-
className: e(r, V, R ? p[_] : L ? n[_] : l[_], !R && z && o[_], T && "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !tracking-[0.
|
|
61
|
+
className: e(r, V, R ? p[_] : L ? n[_] : l[_], !R && z && o[_], T && "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !tracking-[0.12em]", E != null && c, E != null && x === "outline" && "hover:border-fg", P),
|
|
62
62
|
"data-variant": h,
|
|
63
63
|
"data-size": _,
|
|
64
64
|
"data-emphasis": R ? "muted" : x,
|
|
@@ -32,7 +32,7 @@ export declare const badgeMutedClasses: Record<BadgeVariant, string>;
|
|
|
32
32
|
export declare const badgeOutlineClasses: Record<BadgeVariant, string>;
|
|
33
33
|
export declare function badgeSurfaceClasses(variant: BadgeVariant, emphasis: BadgeEmphasis): string;
|
|
34
34
|
/** Mono uppercase label — the same face, size, and tracking as **Button** `mono`. `!` beats the sans medium shell. */
|
|
35
|
-
export declare const badgeMonoClasses = "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !tracking-[0.
|
|
35
|
+
export declare const badgeMonoClasses = "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !tracking-[0.12em]";
|
|
36
36
|
/**
|
|
37
37
|
* A badge composed onto a link (`render`): an underline on hover, the hairline darkens on an
|
|
38
38
|
* outline badge, the focus ring, and a 44px-tall hit area around the 20–24px pill.
|
|
@@ -56,7 +56,7 @@ var r = [
|
|
|
56
56
|
function h(e, t) {
|
|
57
57
|
return t === "outline" ? m[e] : t === "muted" ? p[e] : f[e];
|
|
58
58
|
}
|
|
59
|
-
var g = "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !tracking-[0.
|
|
59
|
+
var g = "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !tracking-[0.12em]", _ = e("relative cursor-pointer decoration-1 underline-offset-2 hover:underline", "after:absolute after:inset-x-0 after:top-1/2 after:h-11 after:-translate-y-1/2 after:content-['']", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-2 focus-visible:ring-offset-body", "transition-[border-color,text-decoration-color]", n("fast")), v = "hover:border-fg", y = {
|
|
60
60
|
sm: "h-5 rounded-[var(--radius-control)] px-2 text-xs leading-none",
|
|
61
61
|
md: "h-6 rounded-[var(--radius-control)] px-2.5 text-sm leading-none"
|
|
62
62
|
}, b = {
|
|
@@ -8,7 +8,7 @@ export interface BandProps {
|
|
|
8
8
|
children: ReactNode;
|
|
9
9
|
/** `default` keeps the page's colours; `inverse` (brand surface) and `field` re-skin everything inside. */
|
|
10
10
|
tone?: BandTone;
|
|
11
|
-
/** Space above and below the content: `md` (default) 48px, `lg` 96px
|
|
11
|
+
/** Space above and below the content: `md` (default) 48px, `lg` 64px on phones → 96px from `md`, `none`. */
|
|
12
12
|
spacing?: BandSpacing;
|
|
13
13
|
/** The band element. Default: `section`. */
|
|
14
14
|
as?: BandElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Band.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Band/Band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,SAAS;IACxB,uGAAuG;IACvG,QAAQ,EAAE,SAAS,CAAC;IACpB,2GAA2G;IAC3G,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"Band.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Band/Band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,SAAS;IACxB,uGAAuG;IACvG,QAAQ,EAAE,SAAS,CAAC;IACpB,2GAA2G;IAC3G,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,4GAA4G;IAC5G,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,4CAA4C;IAC5C,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAC5C,iBAAiB,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACtD,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,IAAgB,EAChB,OAAc,EACd,EAAE,EAAE,OAAmB,EACvB,EAAE,EACF,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,SAAS,GACV,EAAE,SAAS,+BAeX"}
|
|
@@ -5,7 +5,10 @@ export declare const bandTones: readonly ["default", "inverse", "field"];
|
|
|
5
5
|
*/
|
|
6
6
|
export type BandTone = (typeof bandTones)[number];
|
|
7
7
|
export declare const bandSpacings: readonly ["md", "lg", "none"];
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Space above and below the content (Spacing rule S8): `md` (default) 48px at every width, `lg` 64px on
|
|
10
|
+
* phones and 96px from `md` (the hero and the closing section), `none` 0.
|
|
11
|
+
*/
|
|
9
12
|
export type BandSpacing = (typeof bandSpacings)[number];
|
|
10
13
|
export declare const bandElements: readonly ["section", "div", "header", "footer", "aside"];
|
|
11
14
|
export type BandElement = (typeof bandElements)[number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bandStyles.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Band/bandStyles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,0CAA2C,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD,eAAO,MAAM,YAAY,+BAAgC,CAAC;AAE1D
|
|
1
|
+
{"version":3,"file":"bandStyles.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Band/bandStyles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,0CAA2C,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD,eAAO,MAAM,YAAY,+BAAgC,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,YAAY,0DAA2D,CAAC;AAErF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,WAAW,6CAA6C,CAAC;AAEtE,mFAAmF;AACnF,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAI1D,CAAC"}
|
|
@@ -16,7 +16,7 @@ var e = [
|
|
|
16
16
|
"aside"
|
|
17
17
|
], r = "relative col-[1/-1] block w-full min-w-0", i = "grid-page !py-0", a = {
|
|
18
18
|
md: "py-[calc(var(--leading-base)*2)]",
|
|
19
|
-
lg: "py-[calc(var(--leading-base)*4)]",
|
|
19
|
+
lg: "py-[calc(var(--grid-baseline)*8)] md:py-[calc(var(--leading-base)*4)]",
|
|
20
20
|
none: ""
|
|
21
21
|
};
|
|
22
22
|
//#endregion
|
|
@@ -10,7 +10,11 @@ export type ButtonLayoutClassName = string;
|
|
|
10
10
|
export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "className" | "role" | "size"> {
|
|
11
11
|
/** Button label. */
|
|
12
12
|
children: ReactNode;
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Action role — primary, secondary, ghost, destructive, inverse, outline, or inverse-outline (on-brand hairline). Default: `primary`.
|
|
15
|
+
* On a page background the secondary level is `outline` (a 3:1 edge, Buttons U1/U4); the filled `secondary` pill
|
|
16
|
+
* sits near 1:1 against the page.
|
|
17
|
+
*/
|
|
14
18
|
role?: ButtonRole;
|
|
15
19
|
/** `pill` (default) or `row` — flat full-width lines for detail / settings rows. */
|
|
16
20
|
layout?: ButtonLayout;
|
|
@@ -30,7 +34,16 @@ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement
|
|
|
30
34
|
*/
|
|
31
35
|
emphasis?: ButtonEmphasis;
|
|
32
36
|
size?: ButtonSize;
|
|
37
|
+
/**
|
|
38
|
+
* Disabled (Buttons rule U6): stays in the tab order (`aria-disabled`), ignores presses, dims to 70%
|
|
39
|
+
* with no hover or press feedback. Prefer an enabled button that explains the error on submit.
|
|
40
|
+
*/
|
|
33
41
|
disabled?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Why it's disabled, shown beside the button (`type-supporting`, muted) and read with it
|
|
44
|
+
* (`aria-describedby`). Renders only while `disabled`. Pill, row and nav layouts.
|
|
45
|
+
*/
|
|
46
|
+
disabledReason?: ReactNode;
|
|
34
47
|
type?: "button" | "submit" | "reset";
|
|
35
48
|
/**
|
|
36
49
|
* Async / submit morph — whole pill animates idle → loading → success → error.
|
|
@@ -65,11 +78,16 @@ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement
|
|
|
65
78
|
*/
|
|
66
79
|
render?: ReactElement;
|
|
67
80
|
/**
|
|
68
|
-
* With `render={<a href />}` to another site:
|
|
69
|
-
*
|
|
81
|
+
* With `render={<a href />}` to another site: shows the trailing external icon **TextLink** uses and
|
|
82
|
+
* opens in the same tab (Links K9). Add `newTab` to open a new tab.
|
|
70
83
|
*/
|
|
71
84
|
external?: boolean;
|
|
72
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* `external` only — opt in to a new tab (`target="_blank"`, a safe `rel`); adds "(opens in a new tab)"
|
|
87
|
+
* to the accessible name. Only when leaving would lose the reader's work.
|
|
88
|
+
*/
|
|
89
|
+
newTab?: boolean;
|
|
90
|
+
/** `external` only — `false` drops the trailing icon. */
|
|
73
91
|
externalIcon?: boolean;
|
|
74
92
|
/** Layout-only: width, margin, flex placement. */
|
|
75
93
|
className?: ButtonLayoutClassName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Button/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Button/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAgBL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACxG,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEpG,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,WACf,SAAQ,IAAI,CACV,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,CAC3C;IACD,oBAAoB;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,oFAAoF;IACpF,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,+EAA+E;IAC/E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gHAAgH;IAChH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoHD,eAAO,MAAM,MAAM,2GAkMjB,CAAC"}
|
|
@@ -1,177 +1,185 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn as e } from "../../../lib/cn.js";
|
|
3
3
|
import { ButtonBadge as t } from "./ButtonBadge.js";
|
|
4
|
-
import { buttonAlignClasses as n, buttonAligns as r, buttonBaseClasses as i, buttonEmphases as a, buttonEndIconSquareClasses as o, buttonExternalIconClasses as
|
|
5
|
-
import { ButtonIcon as
|
|
6
|
-
import { buttonStatusHoldMs as
|
|
7
|
-
import { ButtonStatusButton as
|
|
8
|
-
import { forwardRef as
|
|
9
|
-
import { SquareArrowOutUpRight as
|
|
10
|
-
import { jsx as
|
|
11
|
-
import { useRender as
|
|
4
|
+
import { buttonAlignClasses as n, buttonAligns as r, buttonBaseClasses as i, buttonDisabledReasonClasses as ee, buttonEmphases as a, buttonEndIconSquareClasses as o, buttonExternalIconClasses as te, buttonLayouts as s, buttonMonoLabelClasses as ne, buttonNavLayoutClasses as re, buttonNavStateClasses as ie, buttonOutlineQuietClasses as c, buttonPillClass as l, buttonRoleClasses as u, buttonRoles as d, buttonRowBaseClasses as f, buttonRowLayoutClasses as p, buttonRowWidthClasses as ae, buttonSizeClasses as oe, buttonWidths as m } from "./buttonStyles.js";
|
|
5
|
+
import { ButtonIcon as h } from "./ButtonIcon.js";
|
|
6
|
+
import { buttonStatusHoldMs as g, defaultStatusLabels as _, getNextButtonStatus as v } from "./buttonStatusStyles.js";
|
|
7
|
+
import { ButtonStatusButton as se } from "./ButtonStatusButton.js";
|
|
8
|
+
import { forwardRef as y, useId as ce } from "react";
|
|
9
|
+
import { SquareArrowOutUpRight as b } from "lucide-react";
|
|
10
|
+
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
11
|
+
import { useRender as w } from "@base-ui/react/use-render";
|
|
12
12
|
//#region src/components/atoms/Button/Button.tsx
|
|
13
|
-
function
|
|
13
|
+
function T(e) {
|
|
14
14
|
e.external && (e.render == null || e.layout !== "pill") && console.warn("[WMDS Button] `external` needs `render={<a href />}` on a pill button."), e.external && e.endIcon != null && console.warn("[WMDS Button] `external` is mutually exclusive with `endIcon`."), e.width != null && e.layout !== "row" && console.warn("[WMDS Button] `width` applies to `layout=\"row\"` only."), e.align != null && (e.layout === "row" || e.layout === "nav") && console.warn("[WMDS Button] `align` applies to pill buttons only."), e.emphasis != null && e.role !== "outline" && console.warn("[WMDS Button] `emphasis` applies to `role=\"outline\"` only."), (e.layout === "row" || e.layout === "nav") && (e.status != null || e.icon != null || e.count != null || e.endIcon != null || e.mono) && console.warn(`[WMDS Button] \`layout="${e.layout}"\` is mutually exclusive with \`status\`, \`icon\`, \`count\`, \`endIcon\`, and \`mono\`.`), e.status != null && (e.count != null || e.endIcon != null || e.mono) && console.warn("[WMDS Button] `status` is mutually exclusive with `count`, `endIcon`, and `mono`."), e.endIcon != null && e.count != null && console.warn("[WMDS Button] `endIcon` is mutually exclusive with `count`."), e.render != null && (e.layout === "row" || e.status != null) && console.warn("[WMDS Button] `render` is supported on `layout=\"pill\"` and `layout=\"nav\"` without `status` only.");
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
function E(e) {
|
|
17
|
+
e.preventDefault(), e.stopPropagation();
|
|
18
|
+
}
|
|
19
|
+
var le = y(function({ render: e, type: t, disabled: n, ...r }, i) {
|
|
20
|
+
return w({
|
|
18
21
|
render: e,
|
|
19
22
|
ref: i,
|
|
20
23
|
defaultTagName: "button",
|
|
21
|
-
props:
|
|
24
|
+
props: {
|
|
22
25
|
...r,
|
|
26
|
+
...e ? null : { type: t },
|
|
23
27
|
"aria-disabled": n ? !0 : void 0,
|
|
24
28
|
"data-disabled": n ? "" : void 0,
|
|
25
|
-
|
|
26
|
-
} : {
|
|
27
|
-
...r,
|
|
28
|
-
type: t,
|
|
29
|
-
disabled: n
|
|
29
|
+
onClick: n ? E : r.onClick
|
|
30
30
|
}
|
|
31
31
|
});
|
|
32
|
-
}),
|
|
33
|
-
return
|
|
32
|
+
}), ue = y(function({ render: e, type: t, disabled: n, ...r }, i) {
|
|
33
|
+
return w({
|
|
34
34
|
render: e,
|
|
35
35
|
ref: i,
|
|
36
36
|
defaultTagName: "button",
|
|
37
|
-
props:
|
|
37
|
+
props: {
|
|
38
38
|
...r,
|
|
39
|
+
...e ? null : { type: t },
|
|
39
40
|
"aria-disabled": n ? !0 : void 0,
|
|
40
41
|
"data-disabled": n ? "" : void 0,
|
|
41
|
-
|
|
42
|
-
} : {
|
|
43
|
-
...r,
|
|
44
|
-
type: t,
|
|
45
|
-
disabled: n
|
|
42
|
+
onClick: n ? E : r.onClick
|
|
46
43
|
}
|
|
47
44
|
});
|
|
48
|
-
}),
|
|
49
|
-
|
|
50
|
-
status:
|
|
51
|
-
icon:
|
|
52
|
-
count:
|
|
53
|
-
layout:
|
|
54
|
-
render:
|
|
55
|
-
endIcon:
|
|
56
|
-
mono:
|
|
57
|
-
width:
|
|
58
|
-
align:
|
|
59
|
-
emphasis:
|
|
45
|
+
}), D = y(function({ children: r, role: a = "primary", layout: s = "pill", width: d, align: m, emphasis: g, size: _ = "md", disabled: v, disabledReason: y, type: w = "button", status: D, statusLabels: O, disableOnError: k, icon: A, count: j, mono: M = !1, endIcon: N, selected: P = !1, render: F, external: I = !1, newTab: L = !1, externalIcon: de = !0, className: R, onClick: z, "aria-label": B, "aria-pressed": V, "aria-keyshortcuts": H, id: U, name: W, form: G, ...K }, q) {
|
|
46
|
+
T({
|
|
47
|
+
status: D,
|
|
48
|
+
icon: A,
|
|
49
|
+
count: j,
|
|
50
|
+
layout: s,
|
|
51
|
+
render: F,
|
|
52
|
+
endIcon: N,
|
|
53
|
+
mono: M,
|
|
54
|
+
width: d,
|
|
55
|
+
align: m,
|
|
56
|
+
emphasis: g,
|
|
60
57
|
role: a,
|
|
61
|
-
external:
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
ref: Q,
|
|
65
|
-
status: k,
|
|
66
|
-
role: a,
|
|
67
|
-
size: S,
|
|
68
|
-
statusLabels: N,
|
|
69
|
-
icon: F,
|
|
70
|
-
disableOnError: P,
|
|
71
|
-
disabled: C,
|
|
72
|
-
className: U,
|
|
73
|
-
type: T,
|
|
74
|
-
onClick: W,
|
|
75
|
-
"aria-label": G,
|
|
76
|
-
"aria-pressed": K,
|
|
77
|
-
"aria-keyshortcuts": q,
|
|
58
|
+
external: I
|
|
59
|
+
});
|
|
60
|
+
let J = ce(), Y = !!v && y != null && D == null, X = [K["aria-describedby"], Y ? J : void 0].filter(Boolean).join(" ") || void 0, Z = (e) => Y ? /* @__PURE__ */ C(x, { children: [e, /* @__PURE__ */ S("span", {
|
|
78
61
|
id: J,
|
|
79
|
-
|
|
80
|
-
|
|
62
|
+
className: ee,
|
|
63
|
+
"data-disabled-reason": "",
|
|
64
|
+
children: y
|
|
65
|
+
})] }) : e;
|
|
66
|
+
if (D != null) return /* @__PURE__ */ S(se, {
|
|
67
|
+
...K,
|
|
68
|
+
ref: q,
|
|
69
|
+
status: D,
|
|
70
|
+
role: a,
|
|
71
|
+
size: _,
|
|
72
|
+
statusLabels: O,
|
|
73
|
+
icon: A,
|
|
74
|
+
disableOnError: k,
|
|
75
|
+
disabled: v,
|
|
76
|
+
className: R,
|
|
77
|
+
type: w,
|
|
78
|
+
onClick: z,
|
|
79
|
+
"aria-label": B,
|
|
80
|
+
"aria-pressed": V,
|
|
81
|
+
"aria-keyshortcuts": H,
|
|
82
|
+
id: U,
|
|
83
|
+
name: W,
|
|
84
|
+
form: G,
|
|
81
85
|
children: r
|
|
82
86
|
});
|
|
83
|
-
if (
|
|
84
|
-
...
|
|
85
|
-
ref:
|
|
86
|
-
type:
|
|
87
|
-
disabled:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
"aria-
|
|
91
|
-
"aria-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
87
|
+
if (s === "row") return Z(/* @__PURE__ */ S("button", {
|
|
88
|
+
...K,
|
|
89
|
+
ref: q,
|
|
90
|
+
type: w,
|
|
91
|
+
"aria-disabled": v || void 0,
|
|
92
|
+
"data-disabled": v ? "" : void 0,
|
|
93
|
+
onClick: v ? E : z,
|
|
94
|
+
"aria-label": B,
|
|
95
|
+
"aria-pressed": V,
|
|
96
|
+
"aria-keyshortcuts": H,
|
|
97
|
+
"aria-describedby": X,
|
|
98
|
+
id: U,
|
|
99
|
+
name: W,
|
|
100
|
+
form: G,
|
|
101
|
+
className: e(f, u[a], p, ae[d ?? "fill"], R),
|
|
96
102
|
"data-role": a,
|
|
97
103
|
"data-layout": "row",
|
|
98
|
-
"data-width":
|
|
104
|
+
"data-width": d ?? "fill",
|
|
99
105
|
children: r
|
|
100
|
-
});
|
|
101
|
-
if (
|
|
102
|
-
...
|
|
103
|
-
ref:
|
|
104
|
-
render:
|
|
105
|
-
type:
|
|
106
|
-
disabled:
|
|
107
|
-
onClick:
|
|
108
|
-
"aria-label":
|
|
109
|
-
"aria-pressed":
|
|
110
|
-
"aria-keyshortcuts":
|
|
111
|
-
"aria-current":
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
106
|
+
}));
|
|
107
|
+
if (s === "nav") return Z(/* @__PURE__ */ S(le, {
|
|
108
|
+
...K,
|
|
109
|
+
ref: q,
|
|
110
|
+
render: F,
|
|
111
|
+
type: w,
|
|
112
|
+
disabled: v,
|
|
113
|
+
onClick: z,
|
|
114
|
+
"aria-label": B,
|
|
115
|
+
"aria-pressed": V,
|
|
116
|
+
"aria-keyshortcuts": H,
|
|
117
|
+
"aria-current": P ? "page" : void 0,
|
|
118
|
+
"aria-describedby": X,
|
|
119
|
+
id: U,
|
|
120
|
+
name: W,
|
|
121
|
+
form: G,
|
|
122
|
+
className: e(f, re, ie(P), R),
|
|
116
123
|
"data-role": a,
|
|
117
|
-
"data-size":
|
|
124
|
+
"data-size": _,
|
|
118
125
|
"data-layout": "nav",
|
|
119
|
-
"data-selected":
|
|
126
|
+
"data-selected": P ? "" : void 0,
|
|
120
127
|
children: r
|
|
121
|
-
});
|
|
122
|
-
let
|
|
123
|
-
return /* @__PURE__ */
|
|
124
|
-
...
|
|
128
|
+
}));
|
|
129
|
+
let Q = I && F != null, $ = Q && L;
|
|
130
|
+
return Z(/* @__PURE__ */ C(ue, {
|
|
131
|
+
...K,
|
|
125
132
|
...$ ? {
|
|
126
133
|
target: "_blank",
|
|
127
134
|
rel: "noopener noreferrer"
|
|
128
135
|
} : null,
|
|
129
|
-
ref:
|
|
130
|
-
render:
|
|
131
|
-
type:
|
|
132
|
-
disabled:
|
|
133
|
-
onClick:
|
|
134
|
-
"aria-label":
|
|
135
|
-
"aria-pressed":
|
|
136
|
-
"aria-keyshortcuts":
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
136
|
+
ref: q,
|
|
137
|
+
render: F,
|
|
138
|
+
type: w,
|
|
139
|
+
disabled: v,
|
|
140
|
+
onClick: z,
|
|
141
|
+
"aria-label": B,
|
|
142
|
+
"aria-pressed": V,
|
|
143
|
+
"aria-keyshortcuts": H,
|
|
144
|
+
"aria-describedby": X,
|
|
145
|
+
id: U,
|
|
146
|
+
name: W,
|
|
147
|
+
form: G,
|
|
148
|
+
className: e(i, n[m ?? "center"], a === "outline" && g === "quiet" ? c : u[a], oe[_], l, "gap-2", R),
|
|
141
149
|
"data-role": a,
|
|
142
|
-
"data-size":
|
|
143
|
-
"data-align":
|
|
144
|
-
"data-emphasis": a === "outline" ?
|
|
145
|
-
"data-mono":
|
|
146
|
-
"data-end-icon":
|
|
147
|
-
"data-external":
|
|
150
|
+
"data-size": _,
|
|
151
|
+
"data-align": m,
|
|
152
|
+
"data-emphasis": a === "outline" ? g ?? "strong" : void 0,
|
|
153
|
+
"data-mono": M ? "" : void 0,
|
|
154
|
+
"data-end-icon": N ? "" : void 0,
|
|
155
|
+
"data-external": Q ? "" : void 0,
|
|
148
156
|
children: [
|
|
149
|
-
|
|
150
|
-
size:
|
|
151
|
-
children:
|
|
157
|
+
A ? /* @__PURE__ */ S(h, {
|
|
158
|
+
size: _,
|
|
159
|
+
children: A
|
|
152
160
|
}) : null,
|
|
153
|
-
/* @__PURE__ */
|
|
154
|
-
className:
|
|
155
|
-
children: [r, $ ? /* @__PURE__ */
|
|
161
|
+
/* @__PURE__ */ C("span", {
|
|
162
|
+
className: M ? ne : void 0,
|
|
163
|
+
children: [r, $ ? /* @__PURE__ */ S("span", {
|
|
156
164
|
className: "sr-only",
|
|
157
165
|
children: " (opens in a new tab)"
|
|
158
166
|
}) : null]
|
|
159
167
|
}),
|
|
160
|
-
|
|
161
|
-
className:
|
|
168
|
+
Q && de ? /* @__PURE__ */ S(b, {
|
|
169
|
+
className: te,
|
|
162
170
|
strokeWidth: 2,
|
|
163
171
|
"aria-hidden": !0
|
|
164
172
|
}) : null,
|
|
165
|
-
|
|
173
|
+
N ? /* @__PURE__ */ S("span", {
|
|
166
174
|
className: o,
|
|
167
|
-
children: /* @__PURE__ */
|
|
175
|
+
children: /* @__PURE__ */ S(h, {
|
|
168
176
|
size: "xs",
|
|
169
|
-
children:
|
|
177
|
+
children: N
|
|
170
178
|
})
|
|
171
179
|
}) : null,
|
|
172
|
-
|
|
180
|
+
j == null ? null : /* @__PURE__ */ S(t, { value: j })
|
|
173
181
|
]
|
|
174
|
-
});
|
|
182
|
+
}));
|
|
175
183
|
});
|
|
176
184
|
//#endregion
|
|
177
|
-
export {
|
|
185
|
+
export { D as Button, r as buttonAligns, a as buttonEmphases, s as buttonLayouts, d as buttonRoles, g as buttonStatusHoldMs, m as buttonWidths, _ as defaultStatusLabels, v as getNextButtonStatus };
|
|
@@ -26,7 +26,7 @@ export declare const buttonAlignClasses: Record<ButtonAlign, string>;
|
|
|
26
26
|
* Mono uppercase label. `!` beats the sans medium shell.
|
|
27
27
|
* Size is `--font-size-sm` (12px) — small, still a control label.
|
|
28
28
|
*/
|
|
29
|
-
export declare const buttonMonoLabelClasses = "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !leading-none !tracking-[0.
|
|
29
|
+
export declare const buttonMonoLabelClasses = "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !leading-none !tracking-[0.12em]";
|
|
30
30
|
/** Trailing new-tab glyph on an `external` link button — the icon **TextLink** `external` shows. */
|
|
31
31
|
export declare const buttonExternalIconClasses = "-ml-0.5 size-[0.85em] shrink-0 stroke-current";
|
|
32
32
|
/** Trailing accent square for a Lucide glyph (`endIcon`). */
|
|
@@ -46,4 +46,6 @@ export declare const buttonRowWidthClasses: Record<ButtonWidth, string>;
|
|
|
46
46
|
/** Inset nav row — **NavList** rows (icon + label + optional count as children). */
|
|
47
47
|
export declare const buttonNavLayoutClasses: string;
|
|
48
48
|
export declare function buttonNavStateClasses(selected: boolean): string;
|
|
49
|
+
/** The reason beside a disabled button (Buttons rule U6): supporting type, muted ink (9.8:1). */
|
|
50
|
+
export declare const buttonDisabledReasonClasses = "type-supporting text-muted";
|
|
49
51
|
//# sourceMappingURL=buttonStyles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buttonStyles.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Button/buttonStyles.ts"],"names":[],"mappings":"AAMA,uEAAuE;AACvE,eAAO,MAAM,WAAW,oGAQd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC;AAExC,iGAAiG;AACjG,eAAO,MAAM,eAAe,oCAAoC,CAAC;AAEjE,eAAO,MAAM,aAAa,iCAAkC,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,8FAA8F;AAC9F,eAAO,MAAM,YAAY,0BAA2B,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,uGAAuG;AACvG,eAAO,MAAM,YAAY,8BAA+B,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,sGAAsG;AACtG,eAAO,MAAM,cAAc,8BAA+B,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"buttonStyles.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Button/buttonStyles.ts"],"names":[],"mappings":"AAMA,uEAAuE;AACvE,eAAO,MAAM,WAAW,oGAQd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC;AAExC,iGAAiG;AACjG,eAAO,MAAM,eAAe,oCAAoC,CAAC;AAEjE,eAAO,MAAM,aAAa,iCAAkC,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,8FAA8F;AAC9F,eAAO,MAAM,YAAY,0BAA2B,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,uGAAuG;AACvG,eAAO,MAAM,YAAY,8BAA+B,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,sGAAsG;AACtG,eAAO,MAAM,cAAc,8BAA+B,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,eAAO,MAAM,iBAAiB,QAWd,CAAC;AAEjB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAmBxD,CAAC;AAEF,yGAAyG;AACzG,eAAO,MAAM,yBAAyB,4FACqD,CAAC;AAE5F,4FAA4F;AAC5F,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAG1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,2GACuE,CAAC;AAE3G,oGAAoG;AACpG,eAAO,MAAM,yBAAyB,kDAAkD,CAAC;AAEzF,6DAA6D;AAC7D,eAAO,MAAM,0BAA0B,kGAC0D,CAAC;AAElG,2FAA2F;AAC3F,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAK9D,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAKxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAK5D,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKhE,CAAC;AAEF,kHAAkH;AAClH,eAAO,MAAM,oBAAoB,QAM8D,CAAC;AAEhG,eAAO,MAAM,sBAAsB,QAEqB,CAAC;AAEzD,mHAAmH;AACnH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAG7D,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,sBAAsB,QAGqB,CAAC;AAEzD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAI/D;AAED,iGAAiG;AACjG,eAAO,MAAM,2BAA2B,+BAA+B,CAAC"}
|
|
@@ -14,7 +14,7 @@ var i = [
|
|
|
14
14
|
"pill",
|
|
15
15
|
"row",
|
|
16
16
|
"nav"
|
|
17
|
-
], s = ["fill", "hug"], c = ["center", "start"], l = ["strong", "quiet"], u = "inline-flex cursor-pointer items-center font-sans font-medium normal-case tracking-normal transition-[color,transform,box-shadow,border-color,outline-color,background-color] " + n("fast") + " " + r + " focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-2 focus-visible:ring-offset-body disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-
|
|
17
|
+
], s = ["fill", "hug"], c = ["center", "start"], l = ["strong", "quiet"], u = "inline-flex cursor-pointer items-center font-sans font-medium normal-case tracking-normal transition-[color,transform,box-shadow,border-color,outline-color,background-color] " + n("fast") + " " + r + " focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-2 focus-visible:ring-offset-body disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-70 aria-disabled:cursor-not-allowed aria-disabled:pointer-events-none aria-disabled:opacity-70 no-underline", d = {
|
|
18
18
|
primary: "bg-primary text-primary-foreground hover:bg-primary-hover active:bg-primary-active",
|
|
19
19
|
secondary: "bg-secondary text-secondary-foreground shadow-raised hover:bg-secondary-hover active:bg-secondary-active",
|
|
20
20
|
ghost: "bg-transparent text-ghost-foreground hover:bg-ghost-hover active:bg-ghost-active",
|
|
@@ -25,7 +25,7 @@ var i = [
|
|
|
25
25
|
}, f = "border border-border bg-transparent text-fg hover:bg-ghost-hover active:bg-ghost-active", p = {
|
|
26
26
|
center: "justify-center",
|
|
27
27
|
start: "justify-start text-left"
|
|
28
|
-
}, m = "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !leading-none !tracking-[0.
|
|
28
|
+
}, m = "!font-mono !text-[length:var(--font-size-sm)] !font-normal !uppercase !leading-none !tracking-[0.12em]", h = "-ml-0.5 size-[0.85em] shrink-0 stroke-current", g = "inline-flex size-5 shrink-0 items-center justify-center rounded-none bg-accent text-on-accent", _ = {
|
|
29
29
|
xs: "px-3.5",
|
|
30
30
|
sm: "px-4",
|
|
31
31
|
md: "px-5",
|
|
@@ -45,12 +45,13 @@ var i = [
|
|
|
45
45
|
sm: t.md,
|
|
46
46
|
md: t.lg,
|
|
47
47
|
lg: "size-12 shrink-0"
|
|
48
|
-
}, x = "flex cursor-pointer items-center font-sans tracking-normal transition-[color,background-color,outline-color] " + n("fast") + " focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-
|
|
48
|
+
}, x = "flex cursor-pointer items-center font-sans tracking-normal transition-[color,background-color,outline-color] " + n("fast") + " focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-70 aria-disabled:cursor-not-allowed aria-disabled:pointer-events-none aria-disabled:opacity-70", S = "h-auto min-h-0 rounded-md px-1.5 py-1 text-left font-normal focus-visible:ring-inset focus-visible:ring-offset-0", C = {
|
|
49
49
|
fill: "w-full justify-between gap-3",
|
|
50
50
|
hug: "w-auto justify-start gap-1.5"
|
|
51
51
|
}, w = "h-auto min-h-0 w-full justify-start gap-2.5 rounded-[var(--radius-control-box)] px-2.5 py-2 text-left text-sm font-normal leading-[var(--line-height-sm)] focus-visible:ring-inset focus-visible:ring-offset-0";
|
|
52
52
|
function T(e) {
|
|
53
53
|
return e ? "bg-secondary text-secondary-foreground" : "bg-transparent text-muted hover:bg-ghost-hover hover:text-fg";
|
|
54
54
|
}
|
|
55
|
+
var E = "type-supporting text-muted";
|
|
55
56
|
//#endregion
|
|
56
|
-
export { p as buttonAlignClasses, c as buttonAligns, u as buttonBaseClasses, l as buttonEmphases, g as buttonEndIconSquareClasses, h as buttonExternalIconClasses, _ as buttonHorizontalPadding, y as buttonIconSizeClasses, o as buttonLayouts, m as buttonMonoLabelClasses, w as buttonNavLayoutClasses, T as buttonNavStateClasses, f as buttonOutlineQuietClasses, a as buttonPillClass, d as buttonRoleClasses, i as buttonRoles, x as buttonRowBaseClasses, S as buttonRowLayoutClasses, C as buttonRowWidthClasses, v as buttonSizeClasses, s as buttonWidths, b as iconButtonSizeClasses };
|
|
57
|
+
export { p as buttonAlignClasses, c as buttonAligns, u as buttonBaseClasses, E as buttonDisabledReasonClasses, l as buttonEmphases, g as buttonEndIconSquareClasses, h as buttonExternalIconClasses, _ as buttonHorizontalPadding, y as buttonIconSizeClasses, o as buttonLayouts, m as buttonMonoLabelClasses, w as buttonNavLayoutClasses, T as buttonNavStateClasses, f as buttonOutlineQuietClasses, a as buttonPillClass, d as buttonRoleClasses, i as buttonRoles, x as buttonRowBaseClasses, S as buttonRowLayoutClasses, C as buttonRowWidthClasses, v as buttonSizeClasses, s as buttonWidths, b as iconButtonSizeClasses };
|