@olenbetong/appframe-ds 1.3.6 → 1.3.8
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 +16 -0
- package/package.json +6 -6
- package/scripts/copyAssets.mjs +27 -27
- package/src/AfLookup/Lookup.css +130 -129
- package/src/AfLookup/Lookup.tsx +186 -186
- package/src/AfLookup/LookupCombobox.css +72 -78
- package/src/AfLookup/LookupCombobox.tsx +237 -237
- package/src/AfLookup/LookupEdit.tsx +130 -130
- package/src/AfLookup/LookupGrid.css +7 -12
- package/src/AfLookup/LookupGrid.tsx +124 -124
- package/src/AfLookup/index.ts +5 -5
- package/src/autocomplete/Autocomplete.css +256 -256
- package/src/autocomplete/Autocomplete.tsx +320 -320
- package/src/autocomplete/AutocompleteFrame.tsx +168 -168
- package/src/autocomplete/Combobox.tsx +286 -286
- package/src/autocomplete/index.ts +4 -4
- package/src/autocomplete/types.ts +204 -204
- package/src/autocomplete/utils.ts +183 -183
- package/src/binding/BoundNumericTextField.tsx +102 -102
- package/src/binding/BoundTextField.tsx +49 -49
- package/src/binding/CancelButton.tsx +30 -30
- package/src/binding/CancelIconButton.tsx +30 -30
- package/src/binding/DataEditToolbar.css +23 -23
- package/src/binding/DataEditToolbar.tsx +84 -84
- package/src/binding/DeleteButton.tsx +35 -35
- package/src/binding/DeleteIconButton.tsx +35 -35
- package/src/binding/RefreshButton.tsx +31 -31
- package/src/binding/RefreshIconButton.tsx +33 -33
- package/src/binding/RefreshRowIconButton.tsx +33 -33
- package/src/binding/SaveButton.tsx +37 -37
- package/src/binding/SaveIconButton.tsx +38 -38
- package/src/container/Container.tsx +50 -49
- package/src/container/index.ts +1 -1
- package/src/cutoff/CutOffPicker.css +12 -12
- package/src/cutoff/CutOffPicker.tsx +165 -165
- package/src/cutoff/context.tsx +194 -194
- package/src/cutoff/dsCutOffDates.ts +21 -21
- package/src/cutoff/index.ts +4 -4
- package/src/cutoff/utils.test.ts +59 -59
- package/src/cutoff/utils.ts +276 -276
- package/src/filter/ChipListInput.tsx +79 -79
- package/src/filter/FieldFilterPanel.css +150 -150
- package/src/filter/FieldFilterPanel.tsx +309 -309
- package/src/filter/FilterBuilder.css +152 -152
- package/src/filter/FilterBuilder.test.tsx +153 -153
- package/src/filter/FilterBuilder.tsx +435 -435
- package/src/filter/FilterEditor.css +231 -231
- package/src/filter/FilterEditor.test.tsx +285 -285
- package/src/filter/FilterEditor.tsx +75 -75
- package/src/filter/FilterGroupEditor.tsx +160 -160
- package/src/filter/FilterNameDialog.css +22 -22
- package/src/filter/FilterNameDialog.tsx +81 -81
- package/src/filter/FilterRow.tsx +117 -117
- package/src/filter/FilterShareDialog.css +28 -28
- package/src/filter/FilterShareDialog.tsx +201 -201
- package/src/filter/FilterStringField.tsx +78 -78
- package/src/filter/FilterValueEditor.tsx +239 -239
- package/src/filter/SavedFilterTree.css +107 -107
- package/src/filter/SavedFilterTree.test.tsx +94 -94
- package/src/filter/SavedFilterTree.tsx +218 -218
- package/src/filter/fieldFilter.test.ts +158 -158
- package/src/filter/fieldFilter.ts +139 -139
- package/src/filter/index.ts +27 -27
- package/src/filter/types.ts +38 -38
- package/src/filter/useDistinctValues.test.ts +102 -102
- package/src/filter/useDistinctValues.ts +230 -230
- package/src/global.d.ts +11 -11
- package/src/grid/AfGridColumnsPanel.tsx +118 -118
- package/src/grid/AfGridContext.tsx +51 -51
- package/src/grid/AfGridError.tsx +46 -46
- package/src/grid/AfHeaderFilterCell.tsx +147 -147
- package/src/grid/AfHeaderFilterPanel.tsx +111 -111
- package/src/grid/GridEditLookup.css +12 -12
- package/src/grid/GridEditLookup.tsx +121 -121
- package/src/grid/Toolbar.tsx +233 -233
- package/src/grid/editing.ts +100 -100
- package/src/grid/filter.ts +78 -78
- package/src/grid/formatters.ts +48 -48
- package/src/grid/index.css +245 -245
- package/src/grid/index.tsx +503 -503
- package/src/grid/license.ts +48 -48
- package/src/grid/localization.ts +369 -369
- package/src/grid/slots/index.tsx +334 -334
- package/src/grid/slots/slots.css +64 -64
- package/src/grid/slots/slots.test.tsx +39 -39
- package/src/grid/theme.tsx +138 -138
- package/src/grid/useAfColumns.tsx +371 -371
- package/src/grid/useAfCurrentIndex.ts +63 -63
- package/src/grid/useAfData.ts +20 -20
- package/src/grid/useAfFilter.ts +160 -160
- package/src/grid/useAfFilterFields.ts +55 -55
- package/src/grid/useAfGridApi.ts +71 -71
- package/src/grid/useAfKeyBindings.ts +36 -36
- package/src/grid/useAfNewItemRow.ts +258 -258
- package/src/grid/useAfPagination.ts +53 -53
- package/src/grid/useAfPersistedState.ts +230 -230
- package/src/grid/useAfRowEditModel.ts +145 -145
- package/src/grid/useAfRowGrouping.ts +47 -47
- package/src/grid/useAfServerAggregation.test.ts +68 -68
- package/src/grid/useAfServerAggregation.ts +158 -158
- package/src/grid/useAfSortModel.ts +84 -84
- package/src/i18n.ts +13 -13
- package/src/index.ts +14 -14
- package/src/input/InputAdornments.css +84 -84
- package/src/input/InputAdornments.tsx +102 -102
- package/src/input/index.ts +1 -1
- package/src/layout/AppMenu.tsx +74 -74
- package/src/layout/AppMenuDrawer.css +70 -70
- package/src/layout/AppMenuDrawer.tsx +122 -122
- package/src/layout/ErrorBoundary.tsx +162 -162
- package/src/layout/PageContainer.css +48 -48
- package/src/layout/PageContainer.tsx +41 -41
- package/src/layout/ResponsiveDialog.css +86 -86
- package/src/layout/ResponsiveDialog.tsx +55 -55
- package/src/layout/index.tsx +69 -69
- package/src/link/Link.tsx +23 -23
- package/src/link/index.ts +1 -1
- package/src/mdi/Mdi.css +138 -138
- package/src/mdi/Mdi.test.tsx +91 -91
- package/src/mdi/Mdi.tsx +141 -141
- package/src/mdi/MdiConfirmCloseDialog.tsx +47 -47
- package/src/mdi/MdiContext.tsx +59 -59
- package/src/mdi/MdiDocumentContext.tsx +60 -60
- package/src/mdi/MdiPanel.tsx +61 -61
- package/src/mdi/MdiRestore.test.tsx +86 -86
- package/src/mdi/MdiTab.tsx +30 -30
- package/src/mdi/controller.test.ts +382 -382
- package/src/mdi/controller.ts +656 -656
- package/src/mdi/dockviewHost.ts +132 -132
- package/src/mdi/fakeHost.ts +200 -200
- package/src/mdi/host.ts +44 -44
- package/src/mdi/ids.test.ts +20 -20
- package/src/mdi/ids.ts +18 -18
- package/src/mdi/index.ts +31 -31
- package/src/mdi/layoutRestore.test.ts +156 -156
- package/src/mdi/layoutRestore.ts +311 -311
- package/src/mdi/layoutSpec.test.ts +143 -143
- package/src/mdi/layoutSpec.ts +214 -214
- package/src/mdi/layoutStore.test.ts +93 -93
- package/src/mdi/layoutStore.ts +99 -99
- package/src/mdi/memorySettingsStore.ts +21 -21
- package/src/mdi/registry.ts +34 -34
- package/src/mdi/testTypes.ts +37 -37
- package/src/mdi/theme.ts +22 -22
- package/src/mdi/types.ts +214 -214
- package/src/page/Page.css +53 -53
- package/src/page/PageBlock.css +64 -64
- package/src/page/PageBlock.tsx +93 -92
- package/src/page/PageHeader.css +88 -88
- package/src/page/PageHeader.tsx +115 -115
- package/src/page/PageTitle.css +5 -5
- package/src/page/PageTitle.tsx +21 -21
- package/src/page/index.ts +4 -4
- package/src/paper/Paper.tsx +52 -52
- package/src/progress/LinearProgress.css +93 -93
- package/src/progress/LinearProgress.tsx +104 -104
- package/src/progress/index.ts +1 -1
- package/src/report-downloader/ReportDownloader.css +67 -67
- package/src/report-downloader/components/StatusItem.tsx +87 -87
- package/src/report-downloader/components/StatusList.tsx +28 -28
- package/src/report-downloader/index.ts +41 -41
- package/src/report-downloader/status.tsx +92 -92
- package/src/sortable/DropIndicator.css +51 -51
- package/src/sortable/DropIndicator.tsx +27 -27
- package/src/sortable/SortableItemList.css +21 -21
- package/src/sortable/SortableItemList.tsx +264 -264
- package/src/sortable/index.ts +8 -8
- package/src/sortable/reorderSortOrder.ts +126 -126
- package/src/sortable/sortOrder.ts +101 -101
- package/src/sortable/types.ts +9 -9
- package/src/sortable/useSortableContainer.ts +53 -53
- package/src/sortable/useSortableItem.ts +95 -95
- package/src/sortable/useSortableList.ts +117 -117
- package/src/test/happy-dom-document-class.ts +24 -24
- package/src/test/setup.ts +12 -12
- package/src/theme/useDsColorScheme.ts +53 -53
- package/tsconfig.build.json +9 -9
- package/tsconfig.json +8 -8
- package/vitest.config.ts +10 -10
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { Button, type ButtonProps } from "@digdir/designsystemet-react";
|
|
2
|
-
import { ArrowsCirclepathIcon } from "@navikt/aksel-icons";
|
|
3
|
-
import { useRefreshRowButton } from "@olenbetong/appframe-react";
|
|
4
|
-
import { forwardRef } from "react";
|
|
5
|
-
import { getLocalizedString } from "../i18n.js";
|
|
6
|
-
|
|
7
|
-
export type RefreshRowIconButtonProps = Omit<ButtonProps, "icon"> & { index?: number };
|
|
8
|
-
|
|
9
|
-
export const RefreshRowIconButton = forwardRef<HTMLButtonElement, RefreshRowIconButtonProps>(
|
|
10
|
-
function RefreshRowIconButton({ onClick, index, children, loading, ...props }, ref) {
|
|
11
|
-
let { loading: refreshing, refreshRow } = useRefreshRowButton();
|
|
12
|
-
let isLoading = refreshing || loading;
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<Button
|
|
16
|
-
icon
|
|
17
|
-
loading={isLoading}
|
|
18
|
-
aria-label={getLocalizedString("Refresh current row")}
|
|
19
|
-
variant="tertiary"
|
|
20
|
-
onClick={(evt) => {
|
|
21
|
-
onClick?.(evt);
|
|
22
|
-
if (!evt.defaultPrevented) {
|
|
23
|
-
refreshRow(index);
|
|
24
|
-
}
|
|
25
|
-
}}
|
|
26
|
-
{...props}
|
|
27
|
-
ref={ref}
|
|
28
|
-
>
|
|
29
|
-
{children ?? <ArrowsCirclepathIcon />}
|
|
30
|
-
</Button>
|
|
31
|
-
);
|
|
32
|
-
},
|
|
33
|
-
);
|
|
1
|
+
import { Button, type ButtonProps } from "@digdir/designsystemet-react";
|
|
2
|
+
import { ArrowsCirclepathIcon } from "@navikt/aksel-icons";
|
|
3
|
+
import { useRefreshRowButton } from "@olenbetong/appframe-react";
|
|
4
|
+
import { forwardRef } from "react";
|
|
5
|
+
import { getLocalizedString } from "../i18n.js";
|
|
6
|
+
|
|
7
|
+
export type RefreshRowIconButtonProps = Omit<ButtonProps, "icon"> & { index?: number };
|
|
8
|
+
|
|
9
|
+
export const RefreshRowIconButton = forwardRef<HTMLButtonElement, RefreshRowIconButtonProps>(
|
|
10
|
+
function RefreshRowIconButton({ onClick, index, children, loading, ...props }, ref) {
|
|
11
|
+
let { loading: refreshing, refreshRow } = useRefreshRowButton();
|
|
12
|
+
let isLoading = refreshing || loading;
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<Button
|
|
16
|
+
icon
|
|
17
|
+
loading={isLoading}
|
|
18
|
+
aria-label={getLocalizedString("Refresh current row")}
|
|
19
|
+
variant="tertiary"
|
|
20
|
+
onClick={(evt) => {
|
|
21
|
+
onClick?.(evt);
|
|
22
|
+
if (!evt.defaultPrevented) {
|
|
23
|
+
refreshRow(index);
|
|
24
|
+
}
|
|
25
|
+
}}
|
|
26
|
+
{...props}
|
|
27
|
+
ref={ref}
|
|
28
|
+
>
|
|
29
|
+
{children ?? <ArrowsCirclepathIcon />}
|
|
30
|
+
</Button>
|
|
31
|
+
);
|
|
32
|
+
},
|
|
33
|
+
);
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { Badge, BadgePosition, Button, type ButtonProps } from "@digdir/designsystemet-react";
|
|
2
|
-
import { FloppydiskIcon } from "@navikt/aksel-icons";
|
|
3
|
-
import { useSaveButton } from "@olenbetong/appframe-react";
|
|
4
|
-
import { type ForwardRefExoticComponent, forwardRef, type RefAttributes } from "react";
|
|
5
|
-
import { getLocalizedString } from "../i18n.js";
|
|
6
|
-
|
|
7
|
-
export const SaveButton: ForwardRefExoticComponent<ButtonProps & RefAttributes<HTMLButtonElement>> = forwardRef<
|
|
8
|
-
HTMLButtonElement,
|
|
9
|
-
ButtonProps
|
|
10
|
-
>(function SaveButton({ onClick, children, loading, ...props }, ref) {
|
|
11
|
-
let { dirty, saving, save } = useSaveButton();
|
|
12
|
-
let isLoading = saving || loading;
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<Button
|
|
16
|
-
loading={isLoading}
|
|
17
|
-
onClick={(evt) => {
|
|
18
|
-
onClick?.(evt);
|
|
19
|
-
if (!evt.defaultPrevented) {
|
|
20
|
-
save();
|
|
21
|
-
}
|
|
22
|
-
}}
|
|
23
|
-
{...props}
|
|
24
|
-
ref={ref}
|
|
25
|
-
>
|
|
26
|
-
{/* Icon is hidden while loading so the spinner takes its place instead of adding width */}
|
|
27
|
-
{!isLoading && (
|
|
28
|
-
<BadgePosition placement="top-right" overlap="circle">
|
|
29
|
-
<FloppydiskIcon aria-hidden="true" />
|
|
30
|
-
{/* Indicates unsaved changes on the current record */}
|
|
31
|
-
{dirty && <Badge data-color="warning" aria-hidden="true" />}
|
|
32
|
-
</BadgePosition>
|
|
33
|
-
)}
|
|
34
|
-
{children ?? getLocalizedString("Save")}
|
|
35
|
-
</Button>
|
|
36
|
-
);
|
|
37
|
-
});
|
|
1
|
+
import { Badge, BadgePosition, Button, type ButtonProps } from "@digdir/designsystemet-react";
|
|
2
|
+
import { FloppydiskIcon } from "@navikt/aksel-icons";
|
|
3
|
+
import { useSaveButton } from "@olenbetong/appframe-react";
|
|
4
|
+
import { type ForwardRefExoticComponent, forwardRef, type RefAttributes } from "react";
|
|
5
|
+
import { getLocalizedString } from "../i18n.js";
|
|
6
|
+
|
|
7
|
+
export const SaveButton: ForwardRefExoticComponent<ButtonProps & RefAttributes<HTMLButtonElement>> = forwardRef<
|
|
8
|
+
HTMLButtonElement,
|
|
9
|
+
ButtonProps
|
|
10
|
+
>(function SaveButton({ onClick, children, loading, ...props }, ref) {
|
|
11
|
+
let { dirty, saving, save } = useSaveButton();
|
|
12
|
+
let isLoading = saving || loading;
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<Button
|
|
16
|
+
loading={isLoading}
|
|
17
|
+
onClick={(evt) => {
|
|
18
|
+
onClick?.(evt);
|
|
19
|
+
if (!evt.defaultPrevented) {
|
|
20
|
+
save();
|
|
21
|
+
}
|
|
22
|
+
}}
|
|
23
|
+
{...props}
|
|
24
|
+
ref={ref}
|
|
25
|
+
>
|
|
26
|
+
{/* Icon is hidden while loading so the spinner takes its place instead of adding width */}
|
|
27
|
+
{!isLoading && (
|
|
28
|
+
<BadgePosition placement="top-right" overlap="circle">
|
|
29
|
+
<FloppydiskIcon aria-hidden="true" />
|
|
30
|
+
{/* Indicates unsaved changes on the current record */}
|
|
31
|
+
{dirty && <Badge data-color="warning" aria-hidden="true" />}
|
|
32
|
+
</BadgePosition>
|
|
33
|
+
)}
|
|
34
|
+
{children ?? getLocalizedString("Save")}
|
|
35
|
+
</Button>
|
|
36
|
+
);
|
|
37
|
+
});
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { Badge, BadgePosition, Button, type ButtonProps } from "@digdir/designsystemet-react";
|
|
2
|
-
import { FloppydiskIcon } from "@navikt/aksel-icons";
|
|
3
|
-
import { useSaveButton } from "@olenbetong/appframe-react";
|
|
4
|
-
import { forwardRef } from "react";
|
|
5
|
-
import { getLocalizedString } from "../i18n.js";
|
|
6
|
-
|
|
7
|
-
export const SaveIconButton = forwardRef<HTMLButtonElement, Omit<ButtonProps, "icon">>(function SaveIconButton(
|
|
8
|
-
{ onClick, children, loading, ...props },
|
|
9
|
-
ref,
|
|
10
|
-
) {
|
|
11
|
-
let { dirty, saving, save } = useSaveButton();
|
|
12
|
-
let isLoading = saving || loading;
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<Button
|
|
16
|
-
icon
|
|
17
|
-
loading={isLoading}
|
|
18
|
-
aria-label={getLocalizedString("Save")}
|
|
19
|
-
variant="tertiary"
|
|
20
|
-
onClick={(evt) => {
|
|
21
|
-
onClick?.(evt);
|
|
22
|
-
if (!evt.defaultPrevented) {
|
|
23
|
-
save();
|
|
24
|
-
}
|
|
25
|
-
}}
|
|
26
|
-
{...props}
|
|
27
|
-
ref={ref}
|
|
28
|
-
>
|
|
29
|
-
{children ?? (
|
|
30
|
-
<BadgePosition placement="top-right" overlap="circle">
|
|
31
|
-
<FloppydiskIcon />
|
|
32
|
-
{/* Indicates unsaved changes on the current record */}
|
|
33
|
-
{dirty && <Badge data-color="warning" aria-hidden="true" />}
|
|
34
|
-
</BadgePosition>
|
|
35
|
-
)}
|
|
36
|
-
</Button>
|
|
37
|
-
);
|
|
38
|
-
});
|
|
1
|
+
import { Badge, BadgePosition, Button, type ButtonProps } from "@digdir/designsystemet-react";
|
|
2
|
+
import { FloppydiskIcon } from "@navikt/aksel-icons";
|
|
3
|
+
import { useSaveButton } from "@olenbetong/appframe-react";
|
|
4
|
+
import { forwardRef } from "react";
|
|
5
|
+
import { getLocalizedString } from "../i18n.js";
|
|
6
|
+
|
|
7
|
+
export const SaveIconButton = forwardRef<HTMLButtonElement, Omit<ButtonProps, "icon">>(function SaveIconButton(
|
|
8
|
+
{ onClick, children, loading, ...props },
|
|
9
|
+
ref,
|
|
10
|
+
) {
|
|
11
|
+
let { dirty, saving, save } = useSaveButton();
|
|
12
|
+
let isLoading = saving || loading;
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<Button
|
|
16
|
+
icon
|
|
17
|
+
loading={isLoading}
|
|
18
|
+
aria-label={getLocalizedString("Save")}
|
|
19
|
+
variant="tertiary"
|
|
20
|
+
onClick={(evt) => {
|
|
21
|
+
onClick?.(evt);
|
|
22
|
+
if (!evt.defaultPrevented) {
|
|
23
|
+
save();
|
|
24
|
+
}
|
|
25
|
+
}}
|
|
26
|
+
{...props}
|
|
27
|
+
ref={ref}
|
|
28
|
+
>
|
|
29
|
+
{children ?? (
|
|
30
|
+
<BadgePosition placement="top-right" overlap="circle">
|
|
31
|
+
<FloppydiskIcon />
|
|
32
|
+
{/* Indicates unsaved changes on the current record */}
|
|
33
|
+
{dirty && <Badge data-color="warning" aria-hidden="true" />}
|
|
34
|
+
</BadgePosition>
|
|
35
|
+
)}
|
|
36
|
+
</Button>
|
|
37
|
+
);
|
|
38
|
+
});
|
|
@@ -1,49 +1,50 @@
|
|
|
1
|
-
import { PageBlock, type PageBlockProps, type PageBlockWidth } from "../page/PageBlock.js";
|
|
2
|
-
|
|
3
|
-
export const containerMaxWidths = ["xs", "sm", "md", "lg", "xl"] as const;
|
|
4
|
-
|
|
5
|
-
export type ContainerMaxWidth = (typeof containerMaxWidths)[number];
|
|
6
|
-
|
|
7
|
-
const maxWidthToBlockWidth: Record<ContainerMaxWidth, PageBlockWidth> = {
|
|
8
|
-
xs: "text",
|
|
9
|
-
sm: "text",
|
|
10
|
-
md: "md",
|
|
11
|
-
lg: "lg",
|
|
12
|
-
xl: "xl",
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export type ContainerProps = Omit<PageBlockProps, "width"> & {
|
|
16
|
-
/**
|
|
17
|
-
* Predefined max-width,
|
|
18
|
-
* horizontally centered.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* - `
|
|
22
|
-
* - `
|
|
23
|
-
* - `
|
|
24
|
-
* - `
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
1
|
+
import { PageBlock, type PageBlockProps, type PageBlockWidth } from "../page/PageBlock.js";
|
|
2
|
+
|
|
3
|
+
export const containerMaxWidths = ["xs", "sm", "md", "lg", "xl"] as const;
|
|
4
|
+
|
|
5
|
+
export type ContainerMaxWidth = (typeof containerMaxWidths)[number];
|
|
6
|
+
|
|
7
|
+
const maxWidthToBlockWidth: Record<ContainerMaxWidth, PageBlockWidth> = {
|
|
8
|
+
xs: "text",
|
|
9
|
+
sm: "text",
|
|
10
|
+
md: "md",
|
|
11
|
+
lg: "lg",
|
|
12
|
+
xl: "xl",
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type ContainerProps = Omit<PageBlockProps, "width"> & {
|
|
16
|
+
/**
|
|
17
|
+
* Predefined max-width, with the MUI `Container` names on the `Page.Block` scale. Content is
|
|
18
|
+
* horizontally centered. Pixel widths are at the 2026 site's 14px root font size; the
|
|
19
|
+
* rem values follow the browser's font size setting.
|
|
20
|
+
*
|
|
21
|
+
* - `xs`/`sm`: 41rem (574px) — recommended line-length for running text
|
|
22
|
+
* - `md`: 55rem (770px)
|
|
23
|
+
* - `lg`: 73rem (1022px)
|
|
24
|
+
* - `xl`: 110rem (1540px)
|
|
25
|
+
* - `false`: no max-width
|
|
26
|
+
*
|
|
27
|
+
* @default "lg"
|
|
28
|
+
*/
|
|
29
|
+
maxWidth?: ContainerMaxWidth | false;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Centered, max-width content wrapper — the MUI `Container` equivalent.
|
|
34
|
+
*
|
|
35
|
+
* A thin alias over `Page.Block` with gutters enabled by default, for the very
|
|
36
|
+
* common case of "center this content and give it sensible side padding"
|
|
37
|
+
* without having to reach for the full `Page` composition.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```jsx
|
|
41
|
+
* <Container maxWidth="sm">
|
|
42
|
+
* <Heading>Expenses</Heading>
|
|
43
|
+
* </Container>
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export function Container({ gutters = true, maxWidth = "lg", ...props }: ContainerProps) {
|
|
47
|
+
let width = maxWidth === false ? undefined : maxWidthToBlockWidth[maxWidth];
|
|
48
|
+
|
|
49
|
+
return <PageBlock gutters={gutters} width={width} {...props} />;
|
|
50
|
+
}
|
package/src/container/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./Container.js";
|
|
1
|
+
export * from "./Container.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
@layer ds {
|
|
2
|
-
.ObCutOffPicker-root {
|
|
3
|
-
display: flex;
|
|
4
|
-
align-items: center;
|
|
5
|
-
gap: var(--ds-size-2);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
.ObCutOffPicker-root > .ds-select,
|
|
9
|
-
.ObCutOffPicker-root > .ds-field {
|
|
10
|
-
flex: 0 1 auto;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
1
|
+
@layer ds {
|
|
2
|
+
.ObCutOffPicker-root {
|
|
3
|
+
display: flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
gap: var(--ds-size-2);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.ObCutOffPicker-root > .ds-select,
|
|
9
|
+
.ObCutOffPicker-root > .ds-field {
|
|
10
|
+
flex: 0 1 auto;
|
|
11
|
+
}
|
|
12
|
+
}
|