@nxgt/material 3.36.0 → 3.38.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 +33 -0
- package/README.md +1 -1
- package/dist/{async-slice-BNI_F0jz.js → async-slice-DqjtOYlO.js} +2 -2
- package/dist/{button-EMWOFSDB.js → button-D52ron-a.js} +3 -2
- package/dist/charts.js +3 -3
- package/dist/{chip-B6m3yagf.js → chip-0XYwSp9o.js} +1 -1
- package/dist/{code-editor-BdiufnpC.js → code-editor-BetIXpJ6.js} +4 -4
- package/dist/code-editor.js +4 -4
- package/dist/{code-language-items-v5Rnq425.js → code-language-items-C7prxl_7.js} +2 -2
- package/dist/components/components.css +2 -0
- package/dist/components/ui/collections/server-table/server-table-phone-row.css +189 -0
- package/dist/{components-C0WjV2oy.js → components-NoCZ44Ri.js} +15551 -15316
- package/dist/components.js +24 -24
- package/dist/{dialog-DR9rACzY.js → dialog-BCsT_aLo.js} +1 -1
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-CpSnRXd-.js → dropdown-menu-Crt5QvTr.js} +1 -1
- package/dist/editor.js +908 -909
- package/dist/{empty-state-DMr94lsF.js → empty-state-DFWq2CWB.js} +1 -1
- package/dist/hooks.js +2 -2
- package/dist/{i18n-provider-A4mI4vc1.js → i18n-provider-C0RBM8rH.js} +1 -1
- package/dist/i18n.js +5 -5
- package/dist/{icon-badge-DXEBeS1y.js → icon-badge-XBoBIt_R.js} +1 -1
- package/dist/lib/components/ui/actions/button/button.d.ts +8 -0
- package/dist/lib/components/ui/collections/data-table/data-table-list-slots.d.ts +12 -0
- package/dist/lib/components/ui/collections/data-table/hooks.d.ts +6 -1
- package/dist/lib/components/ui/collections/data-table/internal.d.ts +1 -0
- package/dist/lib/components/ui/collections/data-table/partials/layouts/data-table-list-bar.d.ts +11 -1
- package/dist/lib/components/ui/collections/data-table/select-checkbox.d.ts +9 -1
- package/dist/lib/components/ui/collections/filter/bar/filter-bar-view.d.ts +1 -1
- package/dist/lib/components/ui/collections/filter/facets/filter-facets.d.ts +1 -1
- package/dist/lib/components/ui/collections/filter/facets/partials/filter-facets-footer.d.ts +4 -1
- package/dist/lib/components/ui/collections/filter/facets/partials/filter-facets-panel.d.ts +3 -1
- package/dist/lib/components/ui/collections/filter/filter-presets.d.ts +1 -1
- package/dist/lib/components/ui/collections/filter/internal.d.ts +1 -0
- package/dist/lib/components/ui/collections/filter/query/types.d.ts +13 -0
- package/dist/lib/components/ui/collections/filter/sections/sheet/filter-sheet-footer.d.ts +3 -1
- package/dist/lib/components/ui/collections/filter/sections/sheet/filter-sheet.d.ts +3 -1
- package/dist/lib/components/ui/collections/filter/types-props.d.ts +3 -0
- package/dist/lib/components/ui/collections/server-table/partials/server-table-band-classes.d.ts +10 -0
- package/dist/lib/components/ui/collections/server-table/partials/server-table-band.d.ts +13 -2
- package/dist/lib/components/ui/collections/server-table/partials/server-table-bulk-buttons.d.ts +6 -2
- package/dist/lib/components/ui/collections/server-table/partials/server-table-bulk.d.ts +10 -0
- package/dist/lib/components/ui/collections/server-table/partials/server-table-phone-row.d.ts +17 -0
- package/dist/lib/components/ui/feedback/confirm-dialog/confirm-dialog.d.ts +7 -1
- package/dist/lib/components/ui/feedback/confirmation-dialog/confirmation-dialog.d.ts +7 -1
- package/dist/lib/components/ui/fields/attributes/attribute-dialog.d.ts +4 -1
- package/dist/lib/components/ui/fields/attributes/attributes-field/attributes-dialog-field.d.ts +4 -1
- package/dist/lib/components/ui/fields/attributes/attributes-field/attributes-inline-field.d.ts +1 -1
- package/dist/lib/components/ui/fields/contacts/contact-dialog.d.ts +4 -1
- package/dist/lib/components/ui/fields/contacts/contacts-dialog-form-field.d.ts +4 -1
- package/dist/lib/components/ui/fields/contacts/contacts-form-field.d.ts +4 -1
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/fields/opening-hours/opening-hours-dialog-form-field.d.ts +4 -1
- package/dist/lib/components/ui/fields/opening-hours/opening-hours-dialog.d.ts +4 -1
- package/dist/lib/components/ui/fields/opening-hours/opening-hours-form-field.d.ts +4 -1
- package/dist/lib/components/ui/fields/postal-address/postal-address-dialog.d.ts +4 -1
- package/dist/lib/components/ui/fields/postal-address/postal-address-form-field.d.ts +4 -1
- package/dist/lib/components/ui/layout/app-shell/activity-column.d.ts +2 -2
- package/dist/lib/components/ui/layout/app-shell/activity-layout.d.ts +1 -1
- package/dist/lib/components/ui/layout/app-shell/activity-layout.types.d.ts +18 -1
- package/dist/lib/components/ui/layout/app-shell/app-breadcrumb.d.ts +20 -4
- package/dist/lib/components/ui/layout/app-shell/header-context.d.ts +10 -0
- package/dist/lib/components/ui/layout/app-shell/header-title.d.ts +5 -1
- package/dist/lib/components/ui/layout/app-shell/page-title.d.ts +21 -2
- package/dist/lib/components/ui/media/image-cropper/image-cropper.d.ts +4 -1
- package/dist/lib/components/ui/selection/chip-group-field/chip-group-columns.d.ts +3 -0
- package/dist/lib/components/ui/selection/chip-group-field/chip-group-field.d.ts +28 -5
- package/dist/lib/components/ui/selection/chip-group-field/chip-group-field.types.d.ts +17 -0
- package/dist/lib/components/ui/selection/chip-group-field/partials/chip-group-option.d.ts +7 -3
- package/dist/lib/components/ui/selection/chip-group-field/partials/chip-group-sections.d.ts +13 -0
- package/dist/lib/components/ui/selection/choice-group/choice-key-target.d.ts +1 -1
- package/dist/lib/components/ui/selection/choice-group/choice-press.d.ts +2 -0
- package/dist/lib/components/ui/selection/choice-group/use-choice-group-field.d.ts +3 -1
- package/dist/lib/components/ui/selection/choice-group/use-choice-group.d.ts +2 -0
- package/dist/lib/components/ui/widgets/event-calendar/event-calendar-events.utils.d.ts +11 -1
- package/dist/lib/components/ui/widgets/rich-text-editor/types.d.ts +3 -0
- package/dist/lib/i18n/resources/en/en.d.ts +1 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +2 -1
- package/dist/lib/i18n/resources/fr/fr.d.ts +1 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +2 -1
- package/dist/lib/i18n/resources/resources.d.ts +2 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +1 -1
- package/dist/main.js +41 -41
- package/dist/map.js +4 -4
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/print.js +2 -2
- package/dist/{public-f9CBkMZP.js → public-CWIpzLzO.js} +6 -6
- package/dist/{rich-code-block-Bwhfhu7J.js → rich-code-block-C4aBv4cA.js} +4 -4
- package/dist/{sortable-provider-BshacF8v.js → sortable-provider-0uBi0zcP.js} +3 -2
- package/dist/{spinner-CKlDba5I.js → spinner-CuxEwO0d.js} +1 -1
- package/dist/{stored-language-CfQGHLq9.js → stored-language-D8aemZhx.js} +4 -2
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle--Zcf5AM8.js → theme-toggle-ik5nV1P5.js} +1 -1
- package/dist/{toolbar-items-B1W-uVHS.js → toolbar-items-C97E5HRa.js} +2 -2
- package/dist/{translate-material-xDh10aWZ.js → translate-material-B84ufMSF.js} +2 -2
- package/dist/{translator-BbOZntEF.js → translator-Bq8UHmvu.js} +1 -1
- package/dist/{use-chat-composer-C5g_Va_g.js → use-chat-composer-DmDcEGp4.js} +2317 -2190
- package/dist/{use-heading-spy-DXYCeegh.js → use-heading-spy-BgG7Q47k.js} +1 -1
- package/dist/{use-material-translation-BK2YYCY3.js → use-material-translation-CiYhVc39.js} +2 -2
- package/docs/components/buttons-and-actions.md +19 -1
- package/docs/components/data-table-filter-and-lists.md +65 -3
- package/docs/components/feedback-and-status.md +3 -1
- package/docs/components/form-fields.md +10 -4
- package/docs/components/media-and-files.md +1 -0
- package/docs/components/navigation-and-layout.md +4 -2
- package/docs/components/primitives.md +1 -1
- package/docs/components/rich-widgets.md +2 -2
- package/docs/components/selection-and-choice.md +67 -3
- package/docs/guides/app-shell.md +91 -2
- package/docs/guides/cards-and-tiles.md +5 -0
- package/docs/guides/i18n.md +1 -1
- package/docs/roadmap.md +5 -1
- package/lib/components/components.css +2 -0
- package/lib/components/ui/collections/server-table/server-table-phone-row.css +189 -0
- package/package.json +1 -1
|
@@ -32,6 +32,23 @@ export type ActivityLayoutProps = {
|
|
|
32
32
|
* `handle.title`), which it then sits beside.
|
|
33
33
|
*/
|
|
34
34
|
headerTitle?: ReactNode;
|
|
35
|
+
/**
|
|
36
|
+
* A node rendered right after the page's title in the app bar (a record's
|
|
37
|
+
* `Switcher`), outside the `h1` so the heading's name stays the plain
|
|
38
|
+
* title. It stays on screen on a phone and shares the row with the title,
|
|
39
|
+
* which truncates first. Wins over a route's `handle.titleAfter`; ignored
|
|
40
|
+
* while the bar shows no page title (no `handle.title`).
|
|
41
|
+
*/
|
|
42
|
+
titleAfter?: ReactNode;
|
|
43
|
+
/**
|
|
44
|
+
* A small, muted context line (the tenant's name) after the page's title in
|
|
45
|
+
* the app bar, from `md` up: outside the `h1`, truncated, its full text the
|
|
46
|
+
* `title` tooltip once cut off (#629). Not shown on a phone, where the menu
|
|
47
|
+
* sheet's `context` carries the line; independent of `context`, so setting
|
|
48
|
+
* one never duplicates the other. Ignored while the bar shows no page title
|
|
49
|
+
* (`headerTitle` is the context line then).
|
|
50
|
+
*/
|
|
51
|
+
headerContext?: ReactNode;
|
|
35
52
|
/**
|
|
36
53
|
* Whether the breadcrumb trail shows. `false` hides it, for an error page
|
|
37
54
|
* whose matched routes would show a misleading trail. The trail is also
|
|
@@ -40,7 +57,7 @@ export type ActivityLayoutProps = {
|
|
|
40
57
|
* @default true
|
|
41
58
|
*/
|
|
42
59
|
breadcrumb?: boolean;
|
|
43
|
-
/** The breadcrumb's first crumb
|
|
60
|
+
/** The breadcrumb's first crumb: a text link, or (`icon: true`) the home icon alone with its own target and name. */
|
|
44
61
|
breadcrumbRoot?: AppBreadcrumbRoot;
|
|
45
62
|
/** Passed to the header, before the avatar. */
|
|
46
63
|
headerActions?: ReactNode;
|
|
@@ -14,17 +14,33 @@ export declare function AppBreadcrumbItem({ to, children, last, ...props }: AppB
|
|
|
14
14
|
export type AppBreadcrumbSeparatorProps = Omit<ComponentProps<typeof BreadcrumbSeparator>, 'children'>;
|
|
15
15
|
export declare function AppBreadcrumbSeparator({ className, ...props }: AppBreadcrumbSeparatorProps): import("react").JSX.Element;
|
|
16
16
|
/** The trail's first crumb, in place of the home icon: a text link. */
|
|
17
|
-
export type
|
|
17
|
+
export type AppBreadcrumbTextRoot = {
|
|
18
18
|
/** The crumb's text, already translated (a tenant's or an organisation's name). */
|
|
19
19
|
label: ReactNode;
|
|
20
20
|
/** Where it links, through the router's `basename` like every crumb. */
|
|
21
21
|
to: string;
|
|
22
|
+
icon?: false;
|
|
22
23
|
};
|
|
24
|
+
/** The trail's first crumb, the home icon alone, with its own target and name. */
|
|
25
|
+
export type AppBreadcrumbIconRoot = {
|
|
26
|
+
/**
|
|
27
|
+
* The icon link's accessible name and its tooltip, already translated
|
|
28
|
+
* ("Home - Example Org"): a string, since it names an icon.
|
|
29
|
+
*/
|
|
30
|
+
label: string;
|
|
31
|
+
/** Where it links, through the router's `basename` like every crumb. */
|
|
32
|
+
to: string;
|
|
33
|
+
/** Keeps the house icon in place of a text link. */
|
|
34
|
+
icon: true;
|
|
35
|
+
};
|
|
36
|
+
/** The trail's first crumb: a text link, or (`icon: true`) the home icon alone. */
|
|
37
|
+
export type AppBreadcrumbRoot = AppBreadcrumbTextRoot | AppBreadcrumbIconRoot;
|
|
23
38
|
export type AppBreadcrumbProps = {
|
|
24
39
|
/**
|
|
25
40
|
* Replaces the home icon with a text root crumb that links to `to`, as the
|
|
26
|
-
* other parent crumbs do
|
|
27
|
-
*
|
|
41
|
+
* other parent crumbs do; with `icon: true` it keeps the home icon but links
|
|
42
|
+
* it to `to` and names it `label` (also its tooltip). Without it the trail
|
|
43
|
+
* starts with the home icon linking to the router's root.
|
|
28
44
|
*/
|
|
29
45
|
root?: AppBreadcrumbRoot;
|
|
30
46
|
} & ComponentProps<typeof Breadcrumb>;
|
|
@@ -34,7 +50,7 @@ export type AppBreadcrumbProps = {
|
|
|
34
50
|
* A route opts in by exporting `handle = { breadcrumb: (match) => ... }`;
|
|
35
51
|
* routes without one contribute nothing, so intermediate layouts stay out of
|
|
36
52
|
* the trail, and so does a crumb that renders `null`; with none left the trail
|
|
37
|
-
* is hidden. It starts with a home icon, or with `root`'s text link. Hidden on
|
|
53
|
+
* is hidden. It starts with a home icon, or with `root`'s text link or custom icon link. Hidden on
|
|
38
54
|
* mobile, where there is no room for it.
|
|
39
55
|
*/
|
|
40
56
|
export declare function AppBreadcrumb({ root, className, ...props }: AppBreadcrumbProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* The app bar's small muted context line (the tenant), after the page's
|
|
4
|
+
* title: from `md` up only, truncated with an ellipsis, and only then
|
|
5
|
+
* carrying a `title` with the full text (#629). The title truncates before
|
|
6
|
+
* it does (this line never shrinks below its own cap).
|
|
7
|
+
*/
|
|
8
|
+
export declare function HeaderContext({ children }: {
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
}): import("react").JSX.Element;
|
|
@@ -16,8 +16,12 @@ export declare function HeaderTitle({ children, shrinks, }: {
|
|
|
16
16
|
* The app bar's titles: the leading `headerTitle`, then the page's title (a
|
|
17
17
|
* route's `handle.title`, the page's `h1`) after a thin rule when both are set.
|
|
18
18
|
*/
|
|
19
|
-
export declare function AppBarTitles({ headerTitle, pageTitle, titleId, }: {
|
|
19
|
+
export declare function AppBarTitles({ headerTitle, pageTitle, pageTitleAfter, headerContext, titleId, }: {
|
|
20
20
|
headerTitle?: ReactNode;
|
|
21
21
|
pageTitle?: ReactNode;
|
|
22
|
+
/** The slot right after the page's title, outside its `h1`. */
|
|
23
|
+
pageTitleAfter?: ReactNode;
|
|
24
|
+
/** The small muted context line after the title, from `md` up. */
|
|
25
|
+
headerContext?: ReactNode;
|
|
22
26
|
titleId?: string;
|
|
23
27
|
}): import("react").JSX.Element;
|
|
@@ -13,6 +13,14 @@ export type PageTitle<Data = unknown> = ReactNode | ((match: UIMatch<Data>) => R
|
|
|
13
13
|
export type AppShellHandle<Data = unknown> = {
|
|
14
14
|
breadcrumb?: (match: UIMatch<Data>) => ReactNode;
|
|
15
15
|
title?: PageTitle<Data>;
|
|
16
|
+
/**
|
|
17
|
+
* A node rendered right after the page's title in the app bar, outside its
|
|
18
|
+
* `h1` (a record's `Switcher`). A node, or a function of the matched route
|
|
19
|
+
* returning one, as `title` is. The deepest route declaring one wins; the
|
|
20
|
+
* `ActivityLayout` `titleAfter` prop wins over it. Ignored while the bar
|
|
21
|
+
* shows no page title.
|
|
22
|
+
*/
|
|
23
|
+
titleAfter?: PageTitle<Data>;
|
|
16
24
|
};
|
|
17
25
|
/**
|
|
18
26
|
* The title of the deepest matched route that declares a `handle.title`, or
|
|
@@ -20,6 +28,11 @@ export type AppShellHandle<Data = unknown> = {
|
|
|
20
28
|
* anything: the title is in the server HTML, with no client-side effect.
|
|
21
29
|
*/
|
|
22
30
|
export declare function resolvePageTitle(matches: UIMatch[]): ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* The `handle.titleAfter` of the deepest matched route that declares one, or
|
|
33
|
+
* `undefined`: resolved like {@link resolvePageTitle}, from the matches.
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolvePageTitleAfter(matches: UIMatch[]): ReactNode;
|
|
23
36
|
/**
|
|
24
37
|
* The `id` of the page's title in the app bar, or `undefined` when the bar
|
|
25
38
|
* shows none. `ActivityContent` leaves its own large title out while it does
|
|
@@ -28,9 +41,11 @@ export declare function resolvePageTitle(matches: UIMatch[]): ReactNode;
|
|
|
28
41
|
*/
|
|
29
42
|
export declare const PageTitleContext: import('react').Context<string | undefined>;
|
|
30
43
|
/** The layout's page title and the `id` its `h1` and `<main>`'s label share. */
|
|
31
|
-
export declare function usePageTitleScope(): {
|
|
44
|
+
export declare function usePageTitleScope(titleAfter?: ReactNode, headerContext?: ReactNode): {
|
|
32
45
|
pageTitle: ReactNode;
|
|
33
46
|
titleId: string | undefined;
|
|
47
|
+
pageTitleAfter: ReactNode;
|
|
48
|
+
headerContext: ReactNode;
|
|
34
49
|
};
|
|
35
50
|
/** The part of `document` {@link pageStartTarget} reads. */
|
|
36
51
|
type FocusRoot = Pick<Document, 'getElementById' | 'querySelector'>;
|
|
@@ -71,8 +86,12 @@ export declare function usePageTitle(): ReactNode;
|
|
|
71
86
|
* leading title does, #629); the accessible name is the content itself.
|
|
72
87
|
* The display face is `--font-display`, the body face without it.
|
|
73
88
|
*/
|
|
74
|
-
export declare function PageHeading({ children, id, }: {
|
|
89
|
+
export declare function PageHeading({ children, id, after, context, }: {
|
|
75
90
|
children?: ReactNode;
|
|
76
91
|
id?: string;
|
|
92
|
+
/** The slot right after the title, outside the `h1`: it never truncates, the title does. */
|
|
93
|
+
after?: ReactNode;
|
|
94
|
+
/** The small muted context line (the tenant), last in the row, from `md` up. */
|
|
95
|
+
context?: ReactNode;
|
|
77
96
|
}): import("react").JSX.Element | null;
|
|
78
97
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ButtonVariant } from '../../actions/button/button.js';
|
|
1
2
|
import { ImageCropResult, ImageCropShape } from './types.js';
|
|
2
3
|
export type ImageCropperProps = {
|
|
3
4
|
src: string;
|
|
@@ -6,6 +7,8 @@ export type ImageCropperProps = {
|
|
|
6
7
|
fileName?: string;
|
|
7
8
|
onCrop: (result: ImageCropResult) => void;
|
|
8
9
|
onCancel?: () => void;
|
|
10
|
+
/** The Cancel button's variant. Default `'tonal'`; `'ghost'` restores the earlier look. */
|
|
11
|
+
cancelVariant?: ButtonVariant;
|
|
9
12
|
className?: string;
|
|
10
13
|
};
|
|
11
|
-
export declare function ImageCropper({ src, aspect: aspectProp, cropShape, fileName, onCrop, onCancel, className, }: ImageCropperProps): import("react").JSX.Element;
|
|
14
|
+
export declare function ImageCropper({ src, aspect: aspectProp, cropShape, fileName, onCrop, onCancel, cancelVariant, className, }: ImageCropperProps): import("react").JSX.Element;
|
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { ChipSize } from '../../display/chip/chip.variants.js';
|
|
2
2
|
import { ChoiceGroupBase, ChoiceSelection } from '../choice-group/choice-group.types.js';
|
|
3
|
-
import { ChipGroupOption } from './chip-group-field.types.js';
|
|
4
|
-
export type { ChipGroupOption };
|
|
5
|
-
|
|
6
|
-
options: ChipGroupOption[];
|
|
3
|
+
import { ChipGroupColumns, ChipGroupOption, ChipGroupSection } from './chip-group-field.types.js';
|
|
4
|
+
export type { ChipGroupColumns, ChipGroupOption, ChipGroupSection };
|
|
5
|
+
type ChipGroupFieldBase = ChoiceGroupBase & ChoiceSelection & {
|
|
7
6
|
size?: ChipSize;
|
|
7
|
+
/**
|
|
8
|
+
* Lays the chips out in equal-width columns (`4`, or one count per
|
|
9
|
+
* breakpoint: `{ base: 2, md: 4 }`). Up and Down then move by row. Left
|
|
10
|
+
* unset, the chips flow and wrap.
|
|
11
|
+
*/
|
|
12
|
+
columns?: ChipGroupColumns;
|
|
13
|
+
/**
|
|
14
|
+
* Prints a disabled option's `disabledReason` under its chip, so a touch
|
|
15
|
+
* user sees it too. Default `true`; `false` leaves it to the tooltip and
|
|
16
|
+
* the accessible description.
|
|
17
|
+
*/
|
|
18
|
+
showDisabledReason?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type ChipGroupFieldProps = ChipGroupFieldBase & {
|
|
21
|
+
/** The chips, in one flow. Give `options` or `groups`. */
|
|
22
|
+
options?: ChipGroupOption[];
|
|
23
|
+
/**
|
|
24
|
+
* Titled runs of options in one group: each is a `group` named by its
|
|
25
|
+
* heading, and the arrow keys run through all of them in order. Wins over
|
|
26
|
+
* `options` when both are given.
|
|
27
|
+
*/
|
|
28
|
+
groups?: ChipGroupSection[];
|
|
8
29
|
};
|
|
9
30
|
/**
|
|
10
31
|
* Chips that choose: one (`type="single"`, the default; a `radiogroup` of
|
|
@@ -12,6 +33,8 @@ export type ChipGroupFieldProps = ChoiceGroupBase & ChoiceSelection & {
|
|
|
12
33
|
* (`type="multiple"`; a `group` of `checkbox` chips, arrows move the focus,
|
|
13
34
|
* Space toggles). Enter does nothing, so it never submits a form. A disabled
|
|
14
35
|
* option, or any unchosen one once `max` is reached, stays focusable and
|
|
15
|
-
* says why
|
|
36
|
+
* says why: a disabled option's `disabledReason` is printed under the chip
|
|
37
|
+
* and tied to it by `aria-describedby`. `columns` draws an even grid and
|
|
38
|
+
* `groups` titled sections. The `ref` reaches the chip that holds the tab stop.
|
|
16
39
|
*/
|
|
17
40
|
export declare function ChipGroupField(props: ChipGroupFieldProps): import("react").JSX.Element;
|
|
@@ -6,3 +6,20 @@ export type ChipGroupOption = ChoiceOption & {
|
|
|
6
6
|
/** Shown after the label and added to its accessible name. */
|
|
7
7
|
count?: number;
|
|
8
8
|
};
|
|
9
|
+
/** A titled run of options, such as "Morning" or "Afternoon". */
|
|
10
|
+
export type ChipGroupSection = {
|
|
11
|
+
/** The heading, and the accessible name of the section's `group`. */
|
|
12
|
+
label: string;
|
|
13
|
+
options: ChipGroupOption[];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Equal-width columns: one number for every width, or one per breakpoint
|
|
17
|
+
* (`sm` 40rem, `md` 48rem, `lg` 64rem), each holding until the next. Counts
|
|
18
|
+
* run from 1 to 12.
|
|
19
|
+
*/
|
|
20
|
+
export type ChipGroupColumns = number | {
|
|
21
|
+
base?: number;
|
|
22
|
+
sm?: number;
|
|
23
|
+
md?: number;
|
|
24
|
+
lg?: number;
|
|
25
|
+
};
|
|
@@ -10,13 +10,17 @@ export type ChipGroupChipProps = {
|
|
|
10
10
|
dataPw: string;
|
|
11
11
|
/** The field's `name`, on every chip: a lookup by name finds the group. */
|
|
12
12
|
name?: string;
|
|
13
|
+
/** The chips sit in grid cells: each fills its cell and centres its text. */
|
|
14
|
+
columns?: boolean;
|
|
15
|
+
/** Print a disabled option's reason under the chip. */
|
|
16
|
+
showReason?: boolean;
|
|
13
17
|
};
|
|
14
18
|
/**
|
|
15
19
|
* One chip of a `ChipGroupField`: a `Chip` with the group's role (`radio` or
|
|
16
20
|
* `checkbox`), `aria-checked`, and the tab stop. A chosen chip swaps its icon
|
|
17
21
|
* for the chip's own check, so the choice never relies on colour alone. The
|
|
18
|
-
* disabled reason (
|
|
19
|
-
* through `aria-describedby`.
|
|
22
|
+
* disabled reason is printed under it (`showReason`, else it is the tooltip),
|
|
23
|
+
* and the reason and the description are read out through `aria-describedby`.
|
|
20
24
|
*/
|
|
21
|
-
export declare function ChipGroupChip({ group, option, index, size, dataPw, name, }: ChipGroupChipProps): import("react").JSX.Element;
|
|
25
|
+
export declare function ChipGroupChip({ group, option, index, size, dataPw, name, columns, showReason, }: ChipGroupChipProps): import("react").JSX.Element;
|
|
22
26
|
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ChipGroupOption, ChipGroupSection } from '../chip-group-field.types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The titled sections of a `ChipGroupField`: each a `group` named by its
|
|
5
|
+
* heading, its chips in a wrapping row or the field's grid. The chips keep
|
|
6
|
+
* the field-wide index, so one arrow-key sequence runs through all of them.
|
|
7
|
+
*/
|
|
8
|
+
export declare function ChipGroupSections({ groupId, sections, gridClasses, renderChip, }: {
|
|
9
|
+
groupId: string;
|
|
10
|
+
sections: ChipGroupSection[];
|
|
11
|
+
gridClasses?: string;
|
|
12
|
+
renderChip: (option: ChipGroupOption, index: number) => ReactNode;
|
|
13
|
+
}): import("react").JSX.Element[];
|
|
@@ -7,4 +7,4 @@ import { ChoiceOption } from './choice-group.types.js';
|
|
|
7
7
|
* items wrap, as RadioGroup's do. Answers the index the focus moved to,
|
|
8
8
|
* or `null` when it did not move.
|
|
9
9
|
*/
|
|
10
|
-
export declare function choiceKeyTarget(event: KeyboardEvent<HTMLElement>, items: (HTMLElement | null)[], options: ChoiceOption[], disabled?: boolean): number | null;
|
|
10
|
+
export declare function choiceKeyTarget(event: KeyboardEvent<HTMLElement>, items: (HTMLElement | null)[], options: ChoiceOption[], disabled?: boolean, grid?: boolean): number | null;
|
|
@@ -6,6 +6,8 @@ export type ChoiceContext = {
|
|
|
6
6
|
selection: ChoiceSelection;
|
|
7
7
|
disabled?: boolean;
|
|
8
8
|
max?: number;
|
|
9
|
+
/** Up and Down move by row, the options being laid out in a grid. */
|
|
10
|
+
grid?: boolean;
|
|
9
11
|
};
|
|
10
12
|
/**
|
|
11
13
|
* Presses option `index`: a no-op when the group is disabled, or the option
|
|
@@ -5,7 +5,9 @@ import { ChoiceGroupBase, ChoiceOption, ChoiceSelection } from './choice-group.t
|
|
|
5
5
|
* left for the root element. The field takes its own props (`options`,
|
|
6
6
|
* `size`, `columns`...) out first and passes the common rest.
|
|
7
7
|
*/
|
|
8
|
-
export declare function useChoiceGroupField(props: ChoiceGroupBase<HTMLButtonElement> & ChoiceSelection, options: ChoiceOption[]
|
|
8
|
+
export declare function useChoiceGroupField(props: ChoiceGroupBase<HTMLButtonElement> & ChoiceSelection, options: ChoiceOption[], layout?: {
|
|
9
|
+
grid?: boolean;
|
|
10
|
+
}): {
|
|
9
11
|
group: {
|
|
10
12
|
groupId: string;
|
|
11
13
|
ids: {
|
|
@@ -8,6 +8,8 @@ type CallerAria = {
|
|
|
8
8
|
export type UseChoiceGroupOptions<E extends HTMLElement = HTMLElement> = Pick<ChoiceGroupBase<E>, 'label' | 'helperText' | 'error' | 'required' | 'disabled' | 'id' | 'max' | 'min' | 'orientation' | 'ref'> & {
|
|
9
9
|
options: ChoiceOption[];
|
|
10
10
|
selection: ChoiceSelection;
|
|
11
|
+
/** The items sit in rows and columns: Up and Down move by row. */
|
|
12
|
+
grid?: boolean;
|
|
11
13
|
/** The caller's own aria props, which win over the generated ones. */
|
|
12
14
|
aria?: CallerAria;
|
|
13
15
|
};
|
|
@@ -10,5 +10,15 @@ export declare function toAllDayEvent(event: CalendarEvent, day: Date): Calendar
|
|
|
10
10
|
export declare function moveEventToDay(event: CalendarEvent, day: Date): CalendarEvent;
|
|
11
11
|
export declare function moveEventToDateTime(event: CalendarEvent, dateTime: Date): CalendarEvent;
|
|
12
12
|
export declare function resizeEventEnd(event: CalendarEvent, end: Date): CalendarEvent;
|
|
13
|
-
|
|
13
|
+
/** The shortest an event is drawn, in px: WCAG 2.5.8's 24px target. */
|
|
14
|
+
export declare const MIN_EVENT_HEIGHT = 24;
|
|
15
|
+
/** The minutes an event draws over at least, at `hourHeight` px an hour. */
|
|
16
|
+
export declare function minEventMinutes(hourHeight: number): number;
|
|
17
|
+
/**
|
|
18
|
+
* Lays the day's timed events out in columns. A short event is drawn at least
|
|
19
|
+
* `MIN_EVENT_HEIGHT` tall, so it takes the room of `minMinutes` (default: its
|
|
20
|
+
* real duration): one that would then run into the next in its column gets a
|
|
21
|
+
* column of its own, and two targets never overlap.
|
|
22
|
+
*/
|
|
23
|
+
export declare function layoutTimedEvents(events: CalendarEvent[], day: Date, startHour: number, endHour: number, minMinutes?: number): LaidOutEvent[];
|
|
14
24
|
export declare function isToday(day: Date, now?: Date): boolean;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ButtonVariant } from '../../actions/button/button.js';
|
|
1
2
|
import { RichTextMentionSuggestion } from '../editor/extensions/mention/mention-items.js';
|
|
2
3
|
import { LegacyFeatureFlags } from '../editor/kit/legacy-flags.js';
|
|
3
4
|
/** The 15 on/off flags of the old editor (`options.features`); the core owns the type. */
|
|
@@ -9,6 +10,8 @@ export interface RichTextEditorOptions {
|
|
|
9
10
|
save?: string;
|
|
10
11
|
cancel?: string;
|
|
11
12
|
};
|
|
13
|
+
/** The Cancel button's variant. Default `'tonal'`; `'ghost'` restores the earlier look. */
|
|
14
|
+
cancelVariant?: ButtonVariant;
|
|
12
15
|
/**
|
|
13
16
|
* `@` suggestions: plain names, or `MentionItem`s (the type `MentionList`
|
|
14
17
|
* and `ChatComposer` take). An item inserts its `id` and shows its `label`.
|
|
@@ -2065,7 +2065,8 @@ declare const _default: {
|
|
|
2065
2065
|
"error": "Could not load the list",
|
|
2066
2066
|
"error-hint": "Check your connection, then try again.",
|
|
2067
2067
|
"bulk-action": "{label} ({count})",
|
|
2068
|
-
"bulk-action-name": "{label} {count, plural, one {# row} other {# rows}}"
|
|
2068
|
+
"bulk-action-name": "{label} {count, plural, one {# row} other {# rows}}",
|
|
2069
|
+
"bulk-more": "More"
|
|
2069
2070
|
},
|
|
2070
2071
|
"list-empty": {
|
|
2071
2072
|
"clear": "Clear search and filters"
|
|
@@ -2065,7 +2065,8 @@ declare const _default: {
|
|
|
2065
2065
|
"error": "Impossible de charger la liste",
|
|
2066
2066
|
"error-hint": "Vérifiez votre connexion, puis réessayez.",
|
|
2067
2067
|
"bulk-action": "{label} ({count})",
|
|
2068
|
-
"bulk-action-name": "{label} : {count, plural, one {# ligne} other {# lignes}}"
|
|
2068
|
+
"bulk-action-name": "{label} : {count, plural, one {# ligne} other {# lignes}}",
|
|
2069
|
+
"bulk-more": "Plus"
|
|
2069
2070
|
},
|
|
2070
2071
|
"list-empty": {
|
|
2071
2072
|
"clear": "Effacer la recherche et les filtres"
|
|
@@ -2074,6 +2074,7 @@ export declare const resources: {
|
|
|
2074
2074
|
"error-hint": string;
|
|
2075
2075
|
"bulk-action": string;
|
|
2076
2076
|
"bulk-action-name": string;
|
|
2077
|
+
"bulk-more": string;
|
|
2077
2078
|
};
|
|
2078
2079
|
"list-empty": {
|
|
2079
2080
|
clear: string;
|
|
@@ -4888,6 +4889,7 @@ export declare const resources: {
|
|
|
4888
4889
|
"error-hint": string;
|
|
4889
4890
|
"bulk-action": string;
|
|
4890
4891
|
"bulk-action-name": string;
|
|
4892
|
+
"bulk-more": string;
|
|
4891
4893
|
};
|
|
4892
4894
|
"list-empty": {
|
|
4893
4895
|
clear: string;
|