@nxgt/material 3.80.0 → 3.81.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/README.md +3 -2
- package/dist/{alert-dialog-DgHtXZuB.js → alert-dialog-DOZ0SfQs.js} +1 -1
- package/dist/{async-slice-YBQsGtQT.js → async-slice-BfVokA46.js} +1 -1
- package/dist/{button-_vm-xSBU.js → button-CSKUtMI3.js} +2 -2
- package/dist/{calculator-CTd_S23A.js → calculator-Cv00UQgR.js} +10 -10
- package/dist/calculator-field.js +6 -6
- package/dist/{calculator-segment-OI1BT3bA.js → calculator-segment-CwnC2cV_.js} +1 -1
- package/dist/calculator.js +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-DumcVzUO.js → chip-BGn0V6Pt.js} +3 -3
- package/dist/{code-editor-CiwgfSOK.js → code-editor-B25-mWhb.js} +4 -4
- package/dist/code-editor.js +4 -4
- package/dist/{code-language-items-Dip0xnmc.js → code-language-items-oRjtO3qV.js} +2 -2
- package/dist/components/base-content.css +11 -0
- package/dist/components/components.css +2 -0
- package/dist/components/ui/collections/data-table/data-table-items-tiles.css +27 -1
- package/dist/components/ui/display/tube-cap/tube-cap.css +87 -0
- package/dist/{components-CJFHhkZv.js → components-B00kDHzJ.js} +19168 -18815
- package/dist/components.js +37 -37
- package/dist/{conversion-variant-CqrPwPjC.js → conversion-variant-wZd-G6xR.js} +3 -3
- package/dist/{currency-field-CMFvctye.js → currency-field-DizBTAat.js} +4 -4
- package/dist/{date.utils-DUvqcjan.js → date.utils-JTEIo3mM.js} +98 -98
- package/dist/{dialog-B0iU3fmh.js → dialog-B-3s-oXt.js} +3 -3
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-CPOgcajv.js → dropdown-menu-C6rcYGB9.js} +1 -1
- package/dist/editor.js +19 -19
- package/dist/{empty-state-D3Jggupu.js → empty-state-CSkghnD9.js} +1 -1
- package/dist/{financial-variant-BdyfYhnp.js → financial-variant-igpGRbGw.js} +5 -5
- package/dist/{hooks-Z7KKbv4G.js → hooks-DvIsom2p.js} +2 -2
- package/dist/hooks.js +9 -8
- package/dist/{hover-card-CFGIX6kg.js → hover-card-DuaVVKMb.js} +1 -1
- package/dist/i18n.js +3 -3
- package/dist/{icon-badge-kxGWUvcO.js → icon-badge-3ThP6EOl.js} +1 -1
- package/dist/{icon-button-BamxMwZs.js → icon-button-4PKlaI1g.js} +2 -2
- package/dist/lib/components/ui/actions/button/button-tones.d.ts +17 -16
- package/dist/lib/components/ui/collections/day-grouped-list/day-grouped-list.d.ts +6 -1
- package/dist/lib/components/ui/collections/filter/use-filter-field-config.d.ts +2 -0
- package/dist/lib/components/ui/collections/server-table/types-states.d.ts +5 -1
- package/dist/lib/components/ui/display/index.d.ts +1 -0
- package/dist/lib/components/ui/display/tube-cap/index.d.ts +2 -0
- package/dist/lib/components/ui/display/tube-cap/tube-cap.d.ts +27 -0
- package/dist/lib/components/ui/display/tube-cap/tube-cap.kinds.d.ts +7 -0
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/fields/repeatable-group/partials/repeatable-group-row.d.ts +3 -1
- package/dist/lib/components/ui/fields/repeatable-group/partials/repeatable-group-rows.d.ts +2 -1
- package/dist/lib/components/ui/fields/repeatable-group/repeatable-group.d.ts +1 -1
- package/dist/lib/components/ui/fields/repeatable-group/types.d.ts +7 -0
- package/dist/lib/components/ui/media/galleries/gallery.d.ts +1 -1
- package/dist/lib/components/ui/media/galleries/lightbox-gallery.d.ts +1 -1
- package/dist/lib/components/ui/media/galleries/mini-gallery.d.ts +1 -1
- package/dist/lib/components/ui/overlays/dialog/dialog-parts.d.ts +1 -1
- package/dist/lib/components/ui/overlays/sheet/sheet-parts.d.ts +5 -0
- package/dist/lib/components/ui/selection/choice-card-group/choice-card-balance.d.ts +4 -0
- package/dist/lib/components/ui/selection/choice-card-group/choice-card-group.d.ts +3 -1
- package/dist/lib/components/ui/selection/choice-card-group/choice-card-group.types.d.ts +7 -0
- package/dist/lib/components/ui/selection/sortable-list/partials/sortable-list-body.d.ts +5 -1
- package/dist/lib/components/ui/selection/sortable-list/partials/sortable-list-row-parts.d.ts +2 -1
- package/dist/lib/components/ui/selection/sortable-list/partials/sortable-list-row-props.d.ts +8 -5
- package/dist/lib/components/ui/selection/sortable-list/partials/use-owed-focus.d.ts +10 -0
- package/dist/lib/components/ui/selection/sortable-list/sortable-list-context.d.ts +2 -0
- package/dist/lib/components/ui/selection/sortable-list/sortable-list.keyboard.d.ts +1 -1
- package/dist/lib/components/ui/widgets/event-calendar/event-calendar-context.d.ts +3 -0
- package/dist/lib/components/ui/widgets/event-calendar/event-calendar-shell.d.ts +15 -0
- package/dist/lib/components/ui/widgets/event-calendar/event-calendar-template.d.ts +9 -0
- package/dist/lib/components/ui/widgets/event-calendar/event-calendar.d.ts +7 -3
- package/dist/lib/components/ui/widgets/event-calendar/event-calendar.template.d.ts +41 -0
- package/dist/lib/components/ui/widgets/event-calendar/index.d.ts +1 -0
- package/dist/lib/components/ui/widgets/event-calendar/partials/calendar-date-nav.d.ts +2 -0
- package/dist/lib/components/ui/widgets/event-calendar/partials/calendar-lane-toggle.d.ts +5 -0
- package/dist/lib/components/ui/widgets/event-calendar/partials/time-grid-header-template.d.ts +7 -0
- package/dist/lib/components/ui/widgets/event-calendar/template.types.d.ts +73 -0
- package/dist/lib/components/ui/widgets/event-calendar/types.d.ts +2 -0
- package/dist/lib/components/ui/widgets/event-calendar/use-chip-event.d.ts +1 -0
- package/dist/lib/components/ui/widgets/event-calendar/use-drawn-events.d.ts +4 -3
- package/dist/lib/components/ui/widgets/event-calendar/use-template-calendar.d.ts +18 -0
- package/dist/lib/components/ui/widgets/event-calendar/use-template-lane.d.ts +17 -0
- package/dist/lib/hooks/index.d.ts +1 -0
- package/dist/lib/i18n/resources/en/en.d.ts +2 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +2 -0
- package/dist/lib/i18n/resources/fr/fr.d.ts +2 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +2 -0
- package/dist/lib/i18n/resources/resources.d.ts +4 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +2 -2
- package/dist/main.js +53 -52
- package/dist/map.js +7 -7
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/{percent-field-C2LNr8NA.js → percent-field-QwU1l2Q4.js} +1 -1
- package/dist/{picker-surface-BUCFMoAZ.js → picker-surface-CiTycWgV.js} +4 -4
- package/dist/{popover-DFRwQF12.js → popover-YmbzbKQG.js} +1 -1
- package/dist/{pos-types-CXnEdjdy.js → pos-types-BFrapNmx.js} +1 -1
- package/dist/{pos-variant-DMwn_7is.js → pos-variant-CctfqieO.js} +4 -4
- package/dist/print.js +1 -1
- package/dist/{programmer-variant-Bo4eiDFi.js → programmer-variant-Dd0YOixn.js} +2 -2
- package/dist/{public-CyQPkkSR.js → public-CshR_aW7.js} +10 -10
- package/dist/{rich-code-block-iK7UcZdc.js → rich-code-block-BuJLDoBu.js} +5 -5
- package/dist/{scientific-variant-B9ScTgfx.js → scientific-variant-CjErQxuZ.js} +2 -2
- package/dist/{sortable-provider-BZwVjSVU.js → sortable-provider-DU2nvpFc.js} +2 -2
- package/dist/{spinner-RITOxvpH.js → spinner-DH1mm8hH.js} +1 -1
- package/dist/{tabs-DSo4eCUn.js → tabs-Um0SFyf1.js} +1 -1
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-3gbzQX0x.js → theme-toggle-C-Ih4uQU.js} +1 -1
- package/dist/{toolbar-items-Bt5RK-Nx.js → toolbar-items-BoEY5bkt.js} +4 -4
- package/dist/{translate-material-CZTGqgen.js → translate-material-D4rn5UaQ.js} +1 -1
- package/dist/{translator-DTlOlIoq.js → translator-CcEgQ-H7.js} +4 -0
- package/dist/{use-chat-composer-DBY01IpX.js → use-chat-composer-BBF1BI_s.js} +46 -42
- package/dist/{use-click-lock-BZYtTmVt.js → use-click-lock-Bwg_caHO.js} +14 -14
- package/dist/{use-heading-spy-Dt48bBts.js → use-heading-spy-BgyA6SJl.js} +19 -19
- package/dist/{use-material-translation-BJucC_xe.js → use-material-translation-DYrfV_JJ.js} +1 -1
- package/dist/{use-return-focus-BS1JLcnq.js → use-return-focus-C_Qz_yTk.js} +1 -1
- package/docs/components/data-display.md +36 -8
- package/docs/components/data-table-filter-and-lists.md +7 -3
- package/docs/components/form-fields.md +1 -0
- package/docs/components/media-and-files.md +1 -0
- package/docs/components/navigation-and-layout.md +2 -1
- package/docs/components/overlays-and-menus.md +11 -5
- package/docs/components/rich-widgets.md +85 -1
- package/docs/components/selection-and-choice.md +49 -10
- package/docs/guides/forms.md +7 -0
- package/docs/guides/helpers.md +23 -0
- package/docs/guides/layouts.md +2 -2
- package/docs/guides/theming.md +7 -7
- package/docs/previews/data-display-tubecap.webp +0 -0
- package/docs/previews/selection-choice-sortablelist.webp +0 -0
- package/docs/roadmap.md +3 -1
- package/docs/troubleshooting.md +50 -2
- package/lib/components/base-content.css +11 -0
- package/lib/components/components.css +2 -0
- package/lib/components/ui/collections/data-table/data-table-items-tiles.css +27 -1
- package/lib/components/ui/display/tube-cap/tube-cap.css +87 -0
- package/lib/themes/ambre.css +1 -1
- package/lib/themes/ardoise.css +1 -1
- package/lib/themes/bleumono.css +1 -1
- package/lib/themes/bluemoon.css +1 -1
- package/lib/themes/corail.css +2 -2
- package/lib/themes/foret.css +1 -1
- package/lib/themes/lavande.css +1 -1
- package/lib/themes/menthe.css +2 -2
- package/lib/themes/ocean.css +1 -1
- package/lib/themes/pink.css +2 -2
- package/lib/themes/prune.css +1 -1
- package/lib/themes/sable.css +1 -1
- package/lib/themes/slate.css +1 -1
- package/lib/themes/teal.css +2 -2
- package/package.json +2 -2
package/docs/troubleshooting.md
CHANGED
|
@@ -78,6 +78,8 @@ words in your error.
|
|
|
78
78
|
- [`ActivityLayout`'s `backdrop` shows nothing, or the blobs are still there](#activitylayouts-backdrop-shows-nothing-or-the-blobs-are-still-there)
|
|
79
79
|
- [Shapes of an `ActivityLayout` `backdrop` run behind the text of the chrome or a list](#shapes-of-an-activitylayout-backdrop-run-behind-the-text-of-the-chrome-or-a-list)
|
|
80
80
|
- [Shaped Gallery tiles are plain rounded squares](#shaped-gallery-tiles-are-plain-rounded-squares)
|
|
81
|
+
- [ChoiceCardGroup shows 2+2 instead of 3+1](#choicecardgroup-shows-22-instead-of-31)
|
|
82
|
+
- [A `ChoiceCardGroup` collapses to nothing in an inline-flex or centred parent](#a-choicecardgroup-collapses-to-nothing-in-an-inline-flex-or-centred-parent)
|
|
81
83
|
- [A component with my own tone (Shape, Fab, Avatar, StatCard, a metric card) shows no colour, or `tone` is a type error](#a-component-with-my-own-tone-shape-fab-avatar-statcard-a-metric-card-shows-no-colour-or-tone-is-a-type-error)
|
|
82
84
|
- [A test expects the old `bg-muted` Avatar fallback, or a filled fallback shows a grey ring](#a-test-expects-the-old-bg-muted-avatar-fallback-or-a-filled-fallback-shows-a-grey-ring)
|
|
83
85
|
|
|
@@ -341,6 +343,8 @@ words in your error.
|
|
|
341
343
|
- [An `Autocomplete` list covers its helper text, or a chip test no longer finds its markup](#an-autocomplete-list-covers-its-helper-text-or-a-chip-test-no-longer-finds-its-markup)
|
|
342
344
|
- [A `CountryField` lost its chip, or its `renderOption` or `filter` does nothing](#a-countryfield-lost-its-chip-or-its-renderoption-or-filter-does-nothing)
|
|
343
345
|
- [A `CountryField` or `TimezoneField` test no longer finds its field or its options](#a-countryfield-or-timezonefield-test-no-longer-finds-its-field-or-its-options)
|
|
346
|
+
- [A test that queries a `SortableList` by `listbox` or `option` finds nothing](#a-test-that-queries-a-sortablelist-by-listbox-or-option-finds-nothing)
|
|
347
|
+
- [axe reports `nested-interactive` on a list whose rows hold buttons](#axe-reports-nested-interactive-on-a-list-whose-rows-hold-buttons)
|
|
344
348
|
- [A `SearchField` lost the height, radius or fill set through `[&_input]`](#a-searchfield-lost-the-height-radius-or-fill-set-through-_input)
|
|
345
349
|
- [`ComboboxEmpty`'s text shows under the options of a `Combobox`](#comboboxemptys-text-shows-under-the-options-of-a-combobox)
|
|
346
350
|
- [`ConfirmDialog` buttons stay in English](#confirmdialog-buttons-stay-in-english)
|
|
@@ -1744,6 +1748,23 @@ page.locator('[data-slot=chip]').getByRole('button', { name: 'Remove Design' });
|
|
|
1744
1748
|
**Why:** the shapes live in an opt-in stylesheet, `@nxgt/material/galleries.css`, which `styles.css` does not import. Without it a shaped tile keeps the `xl` corner (`--nxgt-shape-corner-xl`, 28px). The same fallback shows in a browser without CSS [`shape()`](https://developer.mozilla.org/en-US/docs/Web/CSS/basic-shape/shape) (Chromium-based and Safari today), which drops the `clip-path`. Under `prefers-reduced-motion` the shapes show but do not morph, by design. Also check that nothing overrides `clip-path` on `[data-slot=gallery-tile-media]`.
|
|
1745
1749
|
**Fix:** import it once, next to `styles.css`: `@import "@nxgt/material/galleries.css";` (or `import '@nxgt/material/galleries.css'`). For a browser without `shape()`, accept the rounded fallback, or use a non-shaped preset and pass `shape` only where you want it.
|
|
1746
1750
|
|
|
1751
|
+
|
|
1752
|
+
### ChoiceCardGroup shows 2+2 instead of 3+1
|
|
1753
|
+
|
|
1754
|
+
**When:** a `ChoiceCardGroup` with `columns={3}` (or 4) and 4 cards (or any count that leaves one card alone on the last row) draws two rows of two, where it used to draw three and one.
|
|
1755
|
+
**Why:** rows are balanced by default (`balance`, `true`): when the last row would hold one orphan card and fewer columns avoid it, the group draws fewer columns. It is decided by CSS container queries on the group's own width, so the server and the client print the same markup.
|
|
1756
|
+
**Fix:** keep it, or restore the old fill with `balance={false}`:
|
|
1757
|
+
|
|
1758
|
+
```tsx
|
|
1759
|
+
<ChoiceCardGroup label="Size" columns={3} balance={false} options={options} />
|
|
1760
|
+
```
|
|
1761
|
+
|
|
1762
|
+
### A `ChoiceCardGroup` collapses to nothing in an inline-flex or centred parent
|
|
1763
|
+
|
|
1764
|
+
**When:** the group sits in an `inline-flex` box, a float or a `w-fit` column and its cards are squeezed to zero width or the label shows alone.
|
|
1765
|
+
**Why:** a balanced group (the default, horizontal) is an inline-size container (`@container`), so that it can balance its rows; a container's width does not come from its content, so a shrink-to-fit parent gives it none. With `balance={false}`, or `orientation="vertical"`, there is no container.
|
|
1766
|
+
**Fix:** give the parent a width (`w-full`, a `max-w-*` or a fixed width), centring it with margins rather than shrink-to-fit, or pass `balance={false}` to restore the previous layout.
|
|
1767
|
+
|
|
1747
1768
|
### A component with my own tone (Shape, Fab, Avatar, StatCard, a metric card) shows no colour, or `tone` is a type error
|
|
1748
1769
|
|
|
1749
1770
|
**When:** `<Shape tone="maths" />`, `<Fab tone="maths" />`, an `Avatar`, a `StatCard` or a metric card with `tone="maths"` draws no colour, or TypeScript reports:
|
|
@@ -3272,6 +3293,9 @@ only in the browser reads the real answer from its first render, as before.
|
|
|
3272
3293
|
`Stepper` logged this line until 2.2.0, and a desktop hydrating its server
|
|
3273
3294
|
HTML showed the mismatch (it asks whether the screen is wide); upgrade and
|
|
3274
3295
|
drop any `clientOnly(Stepper)` you added for it.
|
|
3296
|
+
For a breakpoint of your own, use
|
|
3297
|
+
[`useSsrMediaQuery(query, serverValue)`](guides/helpers.md#usessrmediaquery)
|
|
3298
|
+
instead of `useMedia` or a hand-written `useSyncExternalStore`.
|
|
3275
3299
|
|
|
3276
3300
|
### `useMatches must be used within a data router`
|
|
3277
3301
|
|
|
@@ -5105,7 +5129,7 @@ append({ name: '' }, { shouldFocus: false });
|
|
|
5105
5129
|
`aria-disabled`, still focusable, and does nothing by design; the reason, if
|
|
5106
5130
|
`removeDisabledReason` gave one, is its tooltip, shown on hover, focus, tap and
|
|
5107
5131
|
click, and its description), or `min` is
|
|
5108
|
-
reached (the button is `disabled`).
|
|
5132
|
+
reached (the button is `disabled`, or absent with `removeAtMin="hide"`).
|
|
5109
5133
|
**Fix:** return `true` from `removable` for a row that may go, and say why for
|
|
5110
5134
|
the others, so a user is told instead of left guessing:
|
|
5111
5135
|
|
|
@@ -5202,7 +5226,8 @@ The `*` is now drawn by a CSS pseudo-element with an empty `content`
|
|
|
5202
5226
|
field's own `required` / `aria-required` says it is required, and every field
|
|
5203
5227
|
of this library sets it on the element a screen reader lands on (the input, the
|
|
5204
5228
|
picker's combobox, the select's trigger, the slider thumbs, the rating's
|
|
5205
|
-
radiogroup, the editor's textbox, the
|
|
5229
|
+
radiogroup, the editor's textbox, the `TransferList`'s listbox (a `SortableList` is a `list`
|
|
5230
|
+
and only draws the asterisk, with no `aria-required`), or, for a file picker,
|
|
5206
5231
|
a group described as "This field is required."). A `SelectField`'s trigger is
|
|
5207
5232
|
now named by its label (`aria-labelledby`), so `getByRole('combobox', { name:
|
|
5208
5233
|
'Framework' })` finds it.
|
|
@@ -6353,6 +6378,29 @@ expect(screen.getByRole('combobox', { name: 'Time zone' })).toHaveValue('Paris')
|
|
|
6353
6378
|
screen.getByRole('option', { name: 'Paris GMT+2' });
|
|
6354
6379
|
```
|
|
6355
6380
|
|
|
6381
|
+
### A test that queries a `SortableList` by `listbox` or `option` finds nothing
|
|
6382
|
+
|
|
6383
|
+
**When:** a test queries a `SortableList` by `listbox`, `option` or `aria-selected`, after upgrading.
|
|
6384
|
+
**Why:** a row holds buttons of its own (grip, move, remove), which an `option`
|
|
6385
|
+
may not, so axe reported `nested-interactive`. The list is now a `role="list"`
|
|
6386
|
+
of `listitem` rows; `aria-selected`, `aria-activedescendant` and `aria-required`
|
|
6387
|
+
are gone (`aria-disabled` stays on a disabled row).
|
|
6388
|
+
**Fix:**
|
|
6389
|
+
|
|
6390
|
+
```ts
|
|
6391
|
+
const list = screen.getByRole('list', { name: 'Ranking' });
|
|
6392
|
+
const rows = within(list).getAllByRole('listitem');
|
|
6393
|
+
```
|
|
6394
|
+
|
|
6395
|
+
### axe reports `nested-interactive` on a list whose rows hold buttons
|
|
6396
|
+
|
|
6397
|
+
**When:** axe flags a list whose rows hold buttons or other controls.
|
|
6398
|
+
**Why:** a row with `role="option"` (or `button`, `tab`...) may not contain
|
|
6399
|
+
focusable controls: assistive technology reads its children as text.
|
|
6400
|
+
**Fix:** make the row a `listitem` of a `list` (a roving tab stop on the row,
|
|
6401
|
+
the buttons keep their own names), as `SortableList` does. Do not exclude the
|
|
6402
|
+
list from the axe run.
|
|
6403
|
+
|
|
6356
6404
|
### An input inside an `InputGroup` lost a class or a style of `Input`
|
|
6357
6405
|
|
|
6358
6406
|
**When:** a test or a style relies on a class of `Input` or `Textarea`
|
|
@@ -162,6 +162,17 @@
|
|
|
162
162
|
[data-slot="form-actions"] {
|
|
163
163
|
@apply sticky bottom-0 z-10 flex w-full justify-end gap-2 bg-background/80 border-t-8 border-transparent px-4 pb-[max(1rem,env(safe-area-inset-bottom))] backdrop-blur-sm max-sm:*:flex-1;
|
|
164
164
|
}
|
|
165
|
+
/* `data-padding="none"`: the form sits flush in a container that
|
|
166
|
+
already pads it (a page, a card, a sheet): no inset on the fields or
|
|
167
|
+
the actions, so both align with the container's content edge. */
|
|
168
|
+
&[data-padding="none"] {
|
|
169
|
+
[data-slot="form-fields"] {
|
|
170
|
+
@apply p-0;
|
|
171
|
+
}
|
|
172
|
+
[data-slot="form-actions"] {
|
|
173
|
+
@apply px-0;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
165
176
|
}
|
|
166
177
|
|
|
167
178
|
/* No height cap and no scroll of its own: the page (or the overlay) is
|
|
@@ -144,6 +144,8 @@
|
|
|
144
144
|
@import "./ui/display/seat-ring/seat-ring-ring.css";
|
|
145
145
|
/* VoteTally: ranked bars with counts, shares and voters. */
|
|
146
146
|
@import "./ui/display/vote-tally/vote-tally.css";
|
|
147
|
+
/* TubeCap: a specimen tube chip, cap colours fixed by the tube convention. */
|
|
148
|
+
@import "./ui/display/tube-cap/tube-cap.css";
|
|
147
149
|
/* SecretCard: a face that is not rendered until it is revealed. */
|
|
148
150
|
@import "./ui/display/secret-card/secret-card.css";
|
|
149
151
|
/* Alert and Banner span the row in the form grids (#1497). */
|
|
@@ -65,8 +65,34 @@
|
|
|
65
65
|
) {
|
|
66
66
|
outline-offset: -2px;
|
|
67
67
|
}
|
|
68
|
-
/* The checkbox
|
|
68
|
+
/* The checkbox sits on the tile's title row (#2391): its centre on the
|
|
69
|
+
* title's first line (1rem at 1.4, so 0.7rem under the tile's padding), not
|
|
70
|
+
* the tile's middle, which a multi-line tile moves down to the body text.
|
|
71
|
+
* The 36px box (44px on a coarse pointer) then starts at the padding minus
|
|
72
|
+
* the half-box plus the half-line. The tile's content starts at the top so
|
|
73
|
+
* the title is where the box expects it. */
|
|
74
|
+
[data-slot="data-table-tiles"]
|
|
75
|
+
> [data-slot="data-table-item"]:not(:has([data-slot="data-table-record"])) {
|
|
76
|
+
align-content: start;
|
|
77
|
+
}
|
|
69
78
|
[data-slot="data-table-tiles"] [data-slot="data-table-item-select"] {
|
|
79
|
+
inset-block-start: 0.325rem;
|
|
80
|
+
}
|
|
81
|
+
[data-slot="data-table-tiles"][data-density="compact"]
|
|
82
|
+
[data-slot="data-table-item-select"] {
|
|
83
|
+
inset-block-start: 0.075rem;
|
|
84
|
+
}
|
|
85
|
+
@media (pointer: coarse) {
|
|
86
|
+
[data-slot="data-table-tiles"] [data-slot="data-table-item-select"],
|
|
87
|
+
[data-slot="data-table-tiles"][data-density="compact"]
|
|
88
|
+
[data-slot="data-table-item-select"] {
|
|
89
|
+
inset-block-start: 0.075rem;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/* A record row is one dense line: its box stays centred on it. */
|
|
93
|
+
[data-slot="data-table-tiles"]
|
|
94
|
+
> [data-slot="data-table-item"]:has([data-slot="data-table-record"])
|
|
95
|
+
[data-slot="data-table-item-select"] {
|
|
70
96
|
inset-block-start: 50%;
|
|
71
97
|
translate: 0 -50%;
|
|
72
98
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/* TubeCap: a specimen tube's chip. The cap colours are the international tube
|
|
2
|
+
* convention, so they are fixed values, not theme tokens: the same in light
|
|
3
|
+
* and dark and in every theme. The swatch carries no text; the name beside it
|
|
4
|
+
* keeps the theme's foreground (AA by the theme), and a hairline in the
|
|
5
|
+
* foreground colour keeps a black or pale cap visible on either scheme. */
|
|
6
|
+
@layer components {
|
|
7
|
+
.nxgt-tube-cap {
|
|
8
|
+
--tube-cap: oklch(0.92 0 0);
|
|
9
|
+
--tube-cap-size: 1.75rem;
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
gap: 0.5rem;
|
|
13
|
+
max-inline-size: 100%;
|
|
14
|
+
min-inline-size: 0;
|
|
15
|
+
padding: 0.25rem 0.625rem 0.25rem 0.25rem;
|
|
16
|
+
border: 1px solid var(--border);
|
|
17
|
+
border-radius: 9999px;
|
|
18
|
+
background: var(--card, var(--background));
|
|
19
|
+
color: var(--foreground);
|
|
20
|
+
font-size: 0.875rem;
|
|
21
|
+
line-height: 1.25;
|
|
22
|
+
}
|
|
23
|
+
.nxgt-tube-cap[data-size="sm"] {
|
|
24
|
+
--tube-cap-size: 1.25rem;
|
|
25
|
+
font-size: 0.8125rem;
|
|
26
|
+
}
|
|
27
|
+
.nxgt-tube-cap[data-size="lg"] {
|
|
28
|
+
--tube-cap-size: 2.5rem;
|
|
29
|
+
font-size: 1rem;
|
|
30
|
+
}
|
|
31
|
+
.nxgt-tube-cap[data-kind="edta"] {
|
|
32
|
+
--tube-cap: oklch(0.62 0.13 300);
|
|
33
|
+
}
|
|
34
|
+
.nxgt-tube-cap[data-kind="heparin"] {
|
|
35
|
+
--tube-cap: oklch(0.62 0.17 145);
|
|
36
|
+
}
|
|
37
|
+
.nxgt-tube-cap[data-kind="citrate"] {
|
|
38
|
+
--tube-cap: oklch(0.8 0.1 230);
|
|
39
|
+
}
|
|
40
|
+
.nxgt-tube-cap[data-kind="esr"] {
|
|
41
|
+
--tube-cap: oklch(0.22 0 0);
|
|
42
|
+
}
|
|
43
|
+
.nxgt-tube-cap[data-kind="serum"] {
|
|
44
|
+
--tube-cap: oklch(0.55 0.21 27);
|
|
45
|
+
}
|
|
46
|
+
.nxgt-tube-cap[data-kind="gel"] {
|
|
47
|
+
--tube-cap: oklch(0.82 0.15 85);
|
|
48
|
+
}
|
|
49
|
+
.nxgt-tube-cap[data-kind="fluoride"] {
|
|
50
|
+
--tube-cap: oklch(0.68 0.01 260);
|
|
51
|
+
}
|
|
52
|
+
.nxgt-tube-cap[data-kind="trace"] {
|
|
53
|
+
--tube-cap: oklch(0.45 0.18 262);
|
|
54
|
+
}
|
|
55
|
+
.nxgt-tube-cap [data-slot="tube-cap-swatch"] {
|
|
56
|
+
flex: none;
|
|
57
|
+
box-sizing: border-box;
|
|
58
|
+
inline-size: var(--tube-cap-size);
|
|
59
|
+
block-size: var(--tube-cap-size);
|
|
60
|
+
border-radius: 9999px;
|
|
61
|
+
background: var(--tube-cap);
|
|
62
|
+
box-shadow: 0 0 0 1px
|
|
63
|
+
color-mix(in oklab, var(--foreground) 45%, transparent);
|
|
64
|
+
forced-color-adjust: none;
|
|
65
|
+
}
|
|
66
|
+
.nxgt-tube-cap [data-slot="tube-cap-text"] {
|
|
67
|
+
display: inline-flex;
|
|
68
|
+
flex-wrap: wrap;
|
|
69
|
+
align-items: baseline;
|
|
70
|
+
column-gap: 0.5rem;
|
|
71
|
+
min-inline-size: 0;
|
|
72
|
+
overflow-wrap: anywhere;
|
|
73
|
+
}
|
|
74
|
+
.nxgt-tube-cap [data-slot="tube-cap-label"] {
|
|
75
|
+
font-weight: 600;
|
|
76
|
+
}
|
|
77
|
+
.nxgt-tube-cap [data-slot="tube-cap-volume"],
|
|
78
|
+
.nxgt-tube-cap [data-slot="tube-cap-accession"] {
|
|
79
|
+
color: var(--muted-foreground);
|
|
80
|
+
font-variant-numeric: tabular-nums;
|
|
81
|
+
}
|
|
82
|
+
.nxgt-tube-cap [data-slot="tube-cap-action"] {
|
|
83
|
+
display: inline-flex;
|
|
84
|
+
flex: none;
|
|
85
|
+
margin-inline-start: 0.125rem;
|
|
86
|
+
}
|
|
87
|
+
}
|
package/lib/themes/ambre.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "ambre", generated.
|
|
2
2
|
* Seeds: primary oklch(0.52 0.13 48), secondary oklch(0.5 0.09 95), tertiary oklch(0.5 0.14 350), neutral hue 65, tint 0.85.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
* hue-near-status: The primary's hue 48 is 14° from warning (62): they may read alike. Keep an icon and a word with every status.
|
|
5
5
|
*/
|
|
6
6
|
[data-nxgt-theme="ambre"] {
|
package/lib/themes/ardoise.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "ardoise", generated.
|
|
2
2
|
* Seeds: primary oklch(0.45 0.065 252), secondary oklch(0.48 0.05 215), tertiary oklch(0.48 0.1 290), neutral hue 250, tint 0.7.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="ardoise"] {
|
|
6
6
|
--radius: 0.375rem;
|
package/lib/themes/bleumono.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "bleumono", generated.
|
|
2
2
|
* Seeds: primary oklch(0.46 0.13 255), secondary oklch(0.55 0.06 255), tertiary oklch(0.38 0.17 255), neutral hue 255, tint 1.1.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
* lightness-moved: secondary: lightness 0.550 to 0.520 for AA.
|
|
5
5
|
* chroma-lowered: tertiary: chroma 0.170 to 0.125 (lowered to fit sRGB or AA).
|
|
6
6
|
* hue-near-status: The primary's hue 255 is 0° from info (254.624): they may read alike. Keep an icon and a word with every status.
|
package/lib/themes/bluemoon.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "bluemoon", generated.
|
|
2
2
|
* Seeds: primary oklch(0.45 0.12 265), secondary oklch(0.55 0.02 250), tertiary oklch(0.62 0.08 290), neutral hue 265, tint 1.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
* lightness-moved: secondary: lightness 0.550 to 0.520 for AA.
|
|
5
5
|
* lightness-moved: tertiary: lightness 0.620 to 0.563 for AA.
|
|
6
6
|
* hue-near-status: The primary's hue 265 is 10° from info (254.624): they may read alike. Keep an icon and a word with every status.
|
package/lib/themes/corail.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "corail", generated.
|
|
2
2
|
* Seeds: primary oklch(0.58 0.17 35), secondary oklch(0.52 0.1 70), tertiary oklch(0.5 0.1 200), neutral hue 30, tint 0.8.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
* lightness-moved: primary: lightness 0.580 to 0.575 for AA.
|
|
5
5
|
* chroma-lowered: tertiary: chroma 0.100 to 0.085 (lowered to fit sRGB or AA).
|
|
6
6
|
* hue-near-status: The primary's hue 35 is 8° from error (27.325): they may read alike. Keep an icon and a word with every status.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
--popover-foreground: oklch(0.227 0.0136 30);
|
|
18
18
|
--primary: oklch(0.575 0.17 35);
|
|
19
19
|
--primary-foreground: oklch(0.984 0.003 30);
|
|
20
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
20
|
+
--primary-text: color-mix(in oklab, var(--primary) 88%, black);
|
|
21
21
|
--primary-indicator: var(--primary);
|
|
22
22
|
--secondary: oklch(0.52 0.1 70);
|
|
23
23
|
--secondary-foreground: oklch(0.984 0.003 30);
|
package/lib/themes/foret.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "foret", generated.
|
|
2
2
|
* Seeds: primary oklch(0.48 0.1 152), secondary oklch(0.5 0.08 118), tertiary oklch(0.5 0.1 55), neutral hue 140, tint 0.8.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="foret"] {
|
|
6
6
|
--radius: 0.5rem;
|
package/lib/themes/lavande.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "lavande", generated.
|
|
2
2
|
* Seeds: primary oklch(46% 0.1135 276.35), secondary oklch(48% 0.1135 245.65), tertiary oklch(45.91% 0.1864 310.75), neutral hue 292, tint 1.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="lavande"] {
|
|
6
6
|
--radius: 0.625rem;
|
package/lib/themes/menthe.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "menthe", generated.
|
|
2
2
|
* Seeds: primary oklch(0.5 0.105 168), secondary oklch(0.5 0.09 205), tertiary oklch(0.52 0.11 120), neutral hue 170, tint 0.8.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
* chroma-lowered: primary: chroma 0.105 to 0.101 (lowered to fit sRGB or AA).
|
|
5
5
|
* chroma-lowered: secondary: chroma 0.090 to 0.085 (lowered to fit sRGB or AA).
|
|
6
6
|
* hue-near-status: The primary's hue 168 is 17° from success (184.704): they may read alike. Keep an icon and a word with every status.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
--popover-foreground: oklch(0.227 0.0136 170);
|
|
18
18
|
--primary: oklch(0.5 0.1013 168);
|
|
19
19
|
--primary-foreground: oklch(0.984 0.003 170);
|
|
20
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
20
|
+
--primary-text: color-mix(in oklab, var(--primary) 95%, black);
|
|
21
21
|
--primary-indicator: var(--primary);
|
|
22
22
|
--secondary: oklch(0.5 0.0854 205);
|
|
23
23
|
--secondary-foreground: oklch(0.984 0.003 170);
|
package/lib/themes/ocean.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "ocean", generated.
|
|
2
2
|
* Seeds: primary oklch(0.5 0.12 228), secondary oklch(0.52 0.09 192), tertiary oklch(0.5 0.13 268), neutral hue 230, tint 0.9.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
* chroma-lowered: primary: chroma 0.120 to 0.098 (lowered to fit sRGB or AA).
|
|
5
5
|
* lightness-moved: secondary: lightness 0.520 to 0.505 for AA.
|
|
6
6
|
* chroma-lowered: secondary: chroma 0.090 to 0.087 (lowered to fit sRGB or AA).
|
package/lib/themes/pink.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "pink", generated.
|
|
2
2
|
* Seeds: primary oklch(0.55 0.2 345), secondary oklch(0.5 0.14 320), tertiary oklch(0.5 0.1 200), neutral hue 345, tint 0.7.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
* chroma-lowered: tertiary: chroma 0.100 to 0.085 (lowered to fit sRGB or AA).
|
|
5
5
|
*/
|
|
6
6
|
[data-nxgt-theme="pink"] {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
--popover-foreground: oklch(0.227 0.0119 345);
|
|
16
16
|
--primary: oklch(0.55 0.2 345);
|
|
17
17
|
--primary-foreground: oklch(0.984 0.003 345);
|
|
18
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
18
|
+
--primary-text: color-mix(in oklab, var(--primary) 92%, black);
|
|
19
19
|
--primary-indicator: var(--primary);
|
|
20
20
|
--secondary: oklch(0.5 0.14 320);
|
|
21
21
|
--secondary-foreground: oklch(0.984 0.003 345);
|
package/lib/themes/prune.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "prune", generated.
|
|
2
2
|
* Seeds: primary oklch(0.42 0.15 330), secondary oklch(0.5 0.1 355), tertiary oklch(0.55 0.1 85), neutral hue 330, tint 1.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="prune"] {
|
|
6
6
|
--radius: 0.5rem;
|
package/lib/themes/sable.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "sable", generated.
|
|
2
2
|
* Seeds: primary oklch(0.5 0.06 70), secondary oklch(0.5 0.05 45), tertiary oklch(0.5 0.07 150), neutral hue 75, tint 0.5.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="sable"] {
|
|
6
6
|
--radius: 0.5rem;
|
package/lib/themes/slate.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "slate", generated.
|
|
2
2
|
* Seeds: primary oklch(0.4 0.025 258), secondary oklch(0.48 0.02 230), tertiary oklch(0.46 0.045 275), neutral hue 258, tint 0.35.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="slate"] {
|
|
6
6
|
--radius: 0.25rem;
|
package/lib/themes/teal.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "teal", generated.
|
|
2
2
|
* Seeds: primary oklch(0.5 0.105 185), secondary oklch(0.52 0.09 215), tertiary oklch(0.52 0.12 60), neutral hue 190, tint 0.8.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 67 pairs, 0 failing.
|
|
4
4
|
* chroma-lowered: primary: chroma 0.105 to 0.088 (lowered to fit sRGB or AA).
|
|
5
5
|
* lightness-moved: secondary: lightness 0.520 to 0.490 for AA.
|
|
6
6
|
* chroma-lowered: secondary: chroma 0.090 to 0.087 (lowered to fit sRGB or AA).
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
--popover-foreground: oklch(0.227 0.0136 190);
|
|
20
20
|
--primary: oklch(0.5 0.0881 185);
|
|
21
21
|
--primary-foreground: oklch(0.984 0.003 190);
|
|
22
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
22
|
+
--primary-text: color-mix(in oklab, var(--primary) 92%, black);
|
|
23
23
|
--primary-indicator: var(--primary);
|
|
24
24
|
--secondary: oklch(0.49 0.0866 215);
|
|
25
25
|
--secondary-foreground: oklch(0.984 0.003 190);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxgt/material",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.81.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"email": "stevegires@gmail.com"
|
|
@@ -390,7 +390,7 @@
|
|
|
390
390
|
"docs:previews": "rm -rf node_modules/.cache/nxgt-preview-free/missing && NXGT_PREVIEW_FREE=1 vitest run --project previews && bun .storybook/preview-free-report.ts"
|
|
391
391
|
},
|
|
392
392
|
"dependencies": {
|
|
393
|
-
"@nxgt/material-core": "^0.49.
|
|
393
|
+
"@nxgt/material-core": "^0.49.2",
|
|
394
394
|
"@base-ui/react": "^1.6.0",
|
|
395
395
|
"@dnd-kit/core": "^6.3.1",
|
|
396
396
|
"@dnd-kit/sortable": "^10.0.0",
|