@mittwald/flow-react-components 0.2.0-alpha.661 → 0.2.0-alpha.662
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 +10 -0
- package/dist/assets/doc-properties.json +25815 -25229
- package/dist/css/all.css +1 -1
- package/dist/js/_virtual/_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs +6 -0
- package/dist/js/_virtual/_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs.map +1 -1
- package/dist/js/components/src/components/CartesianChart/CartesianChart.mjs +4 -2
- package/dist/js/components/src/components/CartesianChart/CartesianChart.mjs.map +1 -1
- package/dist/js/components/src/components/CartesianChart/components/ChartTooltip/ChartTooltip.mjs +20 -14
- package/dist/js/components/src/components/CartesianChart/components/ChartTooltip/ChartTooltip.mjs.map +1 -1
- package/dist/js/components/src/components/CartesianChart/components/ChartTooltip/TooltipContent.mjs +22 -20
- package/dist/js/components/src/components/CartesianChart/components/ChartTooltip/TooltipContent.mjs.map +1 -1
- package/dist/js/components/src/components/CartesianChart/components/ChartTooltip/TooltipLegendItem.mjs +26 -0
- package/dist/js/components/src/components/CartesianChart/components/ChartTooltip/TooltipLegendItem.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/Header.mjs +8 -8
- package/dist/js/components/src/components/List/components/Header/Header.mjs.map +1 -1
- package/dist/js/components/src/components/List/components/Header/Header.module.css.mjs +5 -5
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs +114 -0
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordion.mjs +26 -0
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordion.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/SortingAccordion.mjs +57 -0
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/SortingAccordion.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion.mjs +50 -0
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/{Filters/FilterMenu.mjs → FilterContextMenu/FilterContextMenu.mjs} +4 -4
- package/dist/js/components/src/components/List/components/Header/components/FilterContextMenu/FilterContextMenu.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/{Filters/FilterMenuList.mjs → FilterContextMenu/FilterContextMenus.mjs} +5 -5
- package/dist/js/components/src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/FilterContextMenu/FilterMenuItem.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/{Settings/SortingMenu.mjs → SortingContextMenu/SortingContextMenu.mjs} +4 -4
- package/dist/js/components/src/components/List/components/Header/components/SortingContextMenu/SortingContextMenu.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/SortingContextMenu/SortingMenuItem.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/{Settings/ViewModeMenu.mjs → ViewModeContextMenu/ViewModeContextMenu.mjs} +4 -4
- package/dist/js/components/src/components/List/components/Header/components/ViewModeContextMenu/ViewModeContextMenu.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/ViewModeContextMenu/ViewModeMenuItem.mjs.map +1 -0
- package/dist/js/components/src/components/List/model/filter/Filter.mjs +2 -0
- package/dist/js/components/src/components/List/model/filter/Filter.mjs.map +1 -1
- package/dist/js/components/src/views/AccordionView.mjs +15 -0
- package/dist/js/components/src/views/AccordionView.mjs.map +1 -0
- package/dist/js/components/src/views/ActionGroupView.mjs +15 -0
- package/dist/js/components/src/views/ActionGroupView.mjs.map +1 -0
- package/dist/js/components/src/views/CheckboxGroupView.mjs +15 -0
- package/dist/js/components/src/views/CheckboxGroupView.mjs.map +1 -0
- package/dist/js/components/src/views/CheckboxView.mjs +15 -0
- package/dist/js/components/src/views/CheckboxView.mjs.map +1 -0
- package/dist/js/components/src/views/ContentView.mjs +15 -0
- package/dist/js/components/src/views/ContentView.mjs.map +1 -0
- package/dist/js/components/src/views/RadioGroupView.mjs +15 -0
- package/dist/js/components/src/views/RadioGroupView.mjs.map +1 -0
- package/dist/js/components/src/views/RadioView.mjs +15 -0
- package/dist/js/components/src/views/RadioView.mjs.map +1 -0
- package/dist/js/components/src/views/SectionView.mjs +15 -0
- package/dist/js/components/src/views/SectionView.mjs.map +1 -0
- package/dist/js/flr-universal.mjs +4 -2
- package/dist/js/flr-universal.mjs.map +1 -1
- package/dist/types/components/CartesianChart/components/ChartTooltip/ChartTooltip.d.ts +5 -4
- package/dist/types/components/CartesianChart/components/ChartTooltip/ChartTooltip.d.ts.map +1 -1
- package/dist/types/components/CartesianChart/components/ChartTooltip/TooltipContent.d.ts +0 -6
- package/dist/types/components/CartesianChart/components/ChartTooltip/TooltipContent.d.ts.map +1 -1
- package/dist/types/components/CartesianChart/components/ChartTooltip/TooltipLegendItem.d.ts +2 -0
- package/dist/types/components/CartesianChart/components/ChartTooltip/TooltipLegendItem.d.ts.map +1 -0
- package/dist/types/components/CartesianChart/stories/Default.stories.d.ts.map +1 -1
- package/dist/types/components/List/components/Header/Header.d.ts.map +1 -1
- package/dist/types/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/{Filters/FilterMenu.d.ts → AllFiltersModal/FilterAccordion.d.ts} +2 -2
- package/dist/types/components/List/components/Header/components/AllFiltersModal/FilterAccordion.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/AllFiltersModal/SortingAccordion.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/AllFiltersModal/SortingAccordion.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/FilterContextMenu/FilterContextMenu.d.ts +8 -0
- package/dist/types/components/List/components/Header/components/FilterContextMenu/FilterContextMenu.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/FilterContextMenu/FilterMenuItem.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/SortingContextMenu/SortingContextMenu.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/SortingContextMenu/SortingContextMenu.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/SortingContextMenu/SortingMenuItem.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/ViewModeContextMenu/ViewModeContextMenu.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/ViewModeContextMenu/ViewModeContextMenu.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/ViewModeContextMenu/ViewModeMenuItem.d.ts.map +1 -0
- package/dist/types/components/List/model/filter/Filter.d.ts +1 -0
- package/dist/types/components/List/model/filter/Filter.d.ts.map +1 -1
- package/dist/types/components/List/model/filter/types.d.ts +1 -0
- package/dist/types/components/List/model/filter/types.d.ts.map +1 -1
- package/dist/types/components/List/stories/Default.stories.d.ts +1 -0
- package/dist/types/components/List/stories/Default.stories.d.ts.map +1 -1
- package/package.json +9 -10
- package/dist/js/components/src/components/List/components/Header/components/Filters/CombinedFilterMenu.mjs +0 -106
- package/dist/js/components/src/components/List/components/Header/components/Filters/CombinedFilterMenu.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/Filters/FilterMenu.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/Filters/FilterMenuItem.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/Filters/FilterMenuList.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/Settings/SortingMenu.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/Settings/SortingMenuItem.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/Settings/ViewModeMenu.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/Settings/ViewModeMenuItem.mjs.map +0 -1
- package/dist/js/components/src/views/SeparatorView.mjs +0 -15
- package/dist/js/components/src/views/SeparatorView.mjs.map +0 -1
- package/dist/types/components/List/components/Header/components/Filters/CombinedFilterMenu.d.ts +0 -3
- package/dist/types/components/List/components/Header/components/Filters/CombinedFilterMenu.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/Filters/FilterMenu.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/Filters/FilterMenuItem.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/Filters/FilterMenuList.d.ts +0 -3
- package/dist/types/components/List/components/Header/components/Filters/FilterMenuList.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/Settings/SortingMenu.d.ts +0 -3
- package/dist/types/components/List/components/Header/components/Settings/SortingMenu.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/Settings/SortingMenuItem.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/Settings/ViewModeMenu.d.ts +0 -3
- package/dist/types/components/List/components/Header/components/Settings/ViewModeMenu.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/Settings/ViewModeMenuItem.d.ts.map +0 -1
- package/dist/types/components/Modal/view.d.ts +0 -8
- package/dist/types/components/Modal/view.d.ts.map +0 -1
- /package/dist/js/components/src/components/List/components/Header/components/{Filters → FilterContextMenu}/FilterMenuItem.mjs +0 -0
- /package/dist/js/components/src/components/List/components/Header/components/{Settings → SortingContextMenu}/SortingMenuItem.mjs +0 -0
- /package/dist/js/components/src/components/List/components/Header/components/{Settings → ViewModeContextMenu}/ViewModeMenuItem.mjs +0 -0
- /package/dist/types/components/List/components/Header/components/{Filters → FilterContextMenu}/FilterMenuItem.d.ts +0 -0
- /package/dist/types/components/List/components/Header/components/{Settings → SortingContextMenu}/SortingMenuItem.d.ts +0 -0
- /package/dist/types/components/List/components/Header/components/{Settings → ViewModeContextMenu}/ViewModeMenuItem.d.ts +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
3
|
const locales = {"de-DE": { "list.filters": `Filter`,
|
|
4
|
+
"list.filters.all": `Alle Filter`,
|
|
4
5
|
"list.filters.clear": `Filter entfernen`,
|
|
5
6
|
"list.filters.reset": `Filter zurücksetzen`,
|
|
6
7
|
"list.filters.store": `Filter speichern`,
|
|
@@ -8,6 +9,8 @@ const locales = {"de-DE": { "list.filters": `Filter`,
|
|
|
8
9
|
"list.noResult.text": `Deine Suche ergab keine Ergebnisse. Bitte passe die Suchanfrage oder deine Filter an.`,
|
|
9
10
|
"list.options": `Optionen`,
|
|
10
11
|
"list.paginationInfo": (args) => `${args.visibleItemsCount} von insgesamt ${args.totalItemsCount} angezeigt`,
|
|
12
|
+
"list.reset": `Zurücksetzen`,
|
|
13
|
+
"list.results.show": (args, formatter) => `${formatter.select({1: () => `${args.totalItemCount} Ergebnis`, other: () => `${args.totalItemCount} Ergebnisse`}, args.totalItemCount)} anzeigen`,
|
|
11
14
|
"list.search.announce.noResult": (args) => `Keine Treffer für "${args.searchTerm}"`,
|
|
12
15
|
"list.search.announce.result": (args) => `${args.resultCount} Treffer für "${args.searchTerm}"`,
|
|
13
16
|
"list.settings": `Einstellungen`,
|
|
@@ -20,6 +23,7 @@ const locales = {"de-DE": { "list.filters": `Filter`,
|
|
|
20
23
|
"list.toggleExpandButton.collapse": `Weniger anzeigen`,
|
|
21
24
|
"list.toggleExpandButton.expand": `Mehr anzeigen`,
|
|
22
25
|
},"en-US": { "list.filters": `Filters`,
|
|
26
|
+
"list.filters.all": `All filters`,
|
|
23
27
|
"list.filters.clear": `Clear filters`,
|
|
24
28
|
"list.filters.reset": `Reset filters`,
|
|
25
29
|
"list.filters.store": `Store filters`,
|
|
@@ -27,6 +31,8 @@ const locales = {"de-DE": { "list.filters": `Filter`,
|
|
|
27
31
|
"list.noResult.text": `Your search did not return any results. Please adjust the search query or your filters.`,
|
|
28
32
|
"list.options": `Options`,
|
|
29
33
|
"list.paginationInfo": (args) => `Showing ${args.visibleItemsCount} of ${args.totalItemsCount}`,
|
|
34
|
+
"list.reset": `Reset`,
|
|
35
|
+
"list.results.show": (args, formatter) => `Show ${formatter.select({1: () => `${args.totalItemCount} result`, other: () => `${args.totalItemCount} Results`}, args.totalItemCount)}`,
|
|
30
36
|
"list.search.announce.noResult": (args) => `${args.resultCount} matches for "${args.searchTerm}"`,
|
|
31
37
|
"list.search.announce.result": (args) => `No matches for "${args.searchTerm}"`,
|
|
32
38
|
"list.settings": `Settings`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -33,8 +33,11 @@ import 'remeda';
|
|
|
33
33
|
import '@react-aria/utils';
|
|
34
34
|
import 'dot-prop';
|
|
35
35
|
import '../../lib/tokens/CategoricalColors.mjs';
|
|
36
|
-
import '../Heading/Heading.mjs';
|
|
37
36
|
import '../Text/Text.mjs';
|
|
37
|
+
import '@mittwald/react-use-promise';
|
|
38
|
+
import '../Heading/Heading.mjs';
|
|
39
|
+
import '../../views/SkeletonTextView.mjs';
|
|
40
|
+
import '../../views/LoadingSpinnerView.mjs';
|
|
38
41
|
import { CartesianGrid } from './components/CartesianGrid/CartesianGrid.mjs';
|
|
39
42
|
import '../Checkbox/Checkbox.mjs';
|
|
40
43
|
import '../CheckboxButton/CheckboxButton.mjs';
|
|
@@ -91,7 +94,6 @@ import 'luxon';
|
|
|
91
94
|
import '../NumberField/NumberField.mjs';
|
|
92
95
|
import '../Option/Option.mjs';
|
|
93
96
|
import '../../views/OverlayContentView.mjs';
|
|
94
|
-
import '../../views/LoadingSpinnerView.mjs';
|
|
95
97
|
import '../PasswordCreationField/PasswordCreationField.mjs';
|
|
96
98
|
import '../Popover/components/PopoverTrigger/PopoverTrigger.mjs';
|
|
97
99
|
import '../Popover/Popover.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CartesianChart.mjs","sources":["../../../../../../src/components/CartesianChart/CartesianChart.tsx"],"sourcesContent":["import * as Recharts from \"recharts\";\nimport React, {\n Children,\n useEffect,\n useRef,\n useState,\n type ComponentProps,\n type FC,\n type PropsWithChildren,\n type ReactElement,\n type SVGProps,\n} from \"react\";\nimport clsx from \"clsx\";\nimport styles from \"./CartesianChart.module.scss\";\nimport Wrap from \"../Wrap\";\nimport { CartesianGrid } from \"../public\";\n\nexport interface CartesianChartEmptyViewProps {\n data?: ComponentProps<typeof Recharts.ComposedChart>[\"data\"];\n}\n\nexport interface CartesianChartProps\n extends\n Pick<\n ComponentProps<typeof Recharts.ComposedChart>,\n \"data\" | \"className\" | \"syncId\" | \"syncMethod\"\n >,\n PropsWithChildren {\n height?: string;\n /** View that is provided when data is empty/undefined */\n emptyView?: React.ComponentType<CartesianChartEmptyViewProps>;\n /**\n * Allow the height controlling container to set flex-grow: 1. Can only be\n * used in combination with `height`\n */\n flexGrow?: boolean;\n}\n\n/** @flr-generate all */\nexport const CartesianChart: FC<CartesianChartProps> = (props) => {\n const {\n children,\n data,\n className,\n height,\n flexGrow,\n emptyView: EmptyView,\n ...rest\n } = props;\n const rootClassName = clsx(styles.cartesianChart, className);\n\n const otherChildren: ReactElement[] = [];\n const gridChildren: ReactElement[] = [];\n\n Children.forEach(children, (child) => {\n if (!child) return;\n const element = child as ReactElement;\n\n if (element.type === CartesianGrid) {\n gridChildren.push(element);\n } else {\n otherChildren.push(element);\n }\n });\n\n const showEmptyView = (!data || data.length === 0) && EmptyView;\n\n const chartContainerRef = useRef<HTMLDivElement>(null);\n const [viewDimensions, setViewDimensions] = useState<Partial<\n SVGProps<SVGForeignObjectElement>\n > | null>(null);\n\n // resizing the foreignObject for the EmptyView on size changes\n useEffect(() => {\n if (showEmptyView) {\n const updateDimensions = () => {\n const svg = chartContainerRef.current?.querySelector(\n \"svg\",\n ) as SVGSVGElement | null;\n if (!svg) return;\n\n const clip = svg.querySelector(\"clipPath rect\");\n if (clip) {\n const x = parseFloat(clip.getAttribute(\"x\") ?? \"0\");\n const y = parseFloat(clip.getAttribute(\"y\") ?? \"0\");\n const width = parseFloat(clip.getAttribute(\"width\") ?? \"0\");\n const height = parseFloat(clip.getAttribute(\"height\") ?? \"0\");\n setViewDimensions({ x, y, width, height });\n }\n };\n\n updateDimensions();\n\n const container = chartContainerRef.current;\n const observer = new ResizeObserver(updateDimensions);\n if (container) observer.observe(container);\n\n return () => {\n observer.disconnect();\n };\n }\n }, [showEmptyView, chartContainerRef.current]);\n\n return (\n <Wrap if={height}>\n <div\n style={{ height, flex: flexGrow ? 1 : undefined }}\n ref={chartContainerRef}\n >\n <Recharts.ResponsiveContainer\n initialDimension={{\n // fix warning on initial render\n width: 1,\n height: 1,\n }}\n >\n <Recharts.ComposedChart\n data={data}\n className={rootClassName}\n {...rest}\n >\n {!showEmptyView && gridChildren}\n {otherChildren}\n {showEmptyView && viewDimensions && (\n <foreignObject {...viewDimensions}>\n <div className={styles.emptyViewContainer}>\n <EmptyView data={data} />\n </div>\n </foreignObject>\n )}\n </Recharts.ComposedChart>\n </Recharts.ResponsiveContainer>\n </div>\n </Wrap>\n );\n};\n\nexport default CartesianChart;\n"],"names":["height"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CartesianChart.mjs","sources":["../../../../../../src/components/CartesianChart/CartesianChart.tsx"],"sourcesContent":["import * as Recharts from \"recharts\";\nimport React, {\n Children,\n useEffect,\n useRef,\n useState,\n type ComponentProps,\n type FC,\n type PropsWithChildren,\n type ReactElement,\n type SVGProps,\n} from \"react\";\nimport clsx from \"clsx\";\nimport styles from \"./CartesianChart.module.scss\";\nimport Wrap from \"../Wrap\";\nimport { CartesianGrid } from \"../public\";\n\nexport interface CartesianChartEmptyViewProps {\n data?: ComponentProps<typeof Recharts.ComposedChart>[\"data\"];\n}\n\nexport interface CartesianChartProps\n extends\n Pick<\n ComponentProps<typeof Recharts.ComposedChart>,\n \"data\" | \"className\" | \"syncId\" | \"syncMethod\"\n >,\n PropsWithChildren {\n height?: string;\n /** View that is provided when data is empty/undefined */\n emptyView?: React.ComponentType<CartesianChartEmptyViewProps>;\n /**\n * Allow the height controlling container to set flex-grow: 1. Can only be\n * used in combination with `height`\n */\n flexGrow?: boolean;\n}\n\n/** @flr-generate all */\nexport const CartesianChart: FC<CartesianChartProps> = (props) => {\n const {\n children,\n data,\n className,\n height,\n flexGrow,\n emptyView: EmptyView,\n ...rest\n } = props;\n const rootClassName = clsx(styles.cartesianChart, className);\n\n const otherChildren: ReactElement[] = [];\n const gridChildren: ReactElement[] = [];\n\n Children.forEach(children, (child) => {\n if (!child) return;\n const element = child as ReactElement;\n\n if (element.type === CartesianGrid) {\n gridChildren.push(element);\n } else {\n otherChildren.push(element);\n }\n });\n\n const showEmptyView = (!data || data.length === 0) && EmptyView;\n\n const chartContainerRef = useRef<HTMLDivElement>(null);\n const [viewDimensions, setViewDimensions] = useState<Partial<\n SVGProps<SVGForeignObjectElement>\n > | null>(null);\n\n // resizing the foreignObject for the EmptyView on size changes\n useEffect(() => {\n if (showEmptyView) {\n const updateDimensions = () => {\n const svg = chartContainerRef.current?.querySelector(\n \"svg\",\n ) as SVGSVGElement | null;\n if (!svg) return;\n\n const clip = svg.querySelector(\"clipPath rect\");\n if (clip) {\n const x = parseFloat(clip.getAttribute(\"x\") ?? \"0\");\n const y = parseFloat(clip.getAttribute(\"y\") ?? \"0\");\n const width = parseFloat(clip.getAttribute(\"width\") ?? \"0\");\n const height = parseFloat(clip.getAttribute(\"height\") ?? \"0\");\n setViewDimensions({ x, y, width, height });\n }\n };\n\n updateDimensions();\n\n const container = chartContainerRef.current;\n const observer = new ResizeObserver(updateDimensions);\n if (container) observer.observe(container);\n\n return () => {\n observer.disconnect();\n };\n }\n }, [showEmptyView, chartContainerRef.current]);\n\n return (\n <Wrap if={height}>\n <div\n style={{ height, flex: flexGrow ? 1 : undefined }}\n ref={chartContainerRef}\n >\n <Recharts.ResponsiveContainer\n initialDimension={{\n // fix warning on initial render\n width: 1,\n height: 1,\n }}\n >\n <Recharts.ComposedChart\n data={data}\n className={rootClassName}\n {...rest}\n >\n {!showEmptyView && gridChildren}\n {otherChildren}\n {showEmptyView && viewDimensions && (\n <foreignObject {...viewDimensions}>\n <div className={styles.emptyViewContainer}>\n <EmptyView data={data} />\n </div>\n </foreignObject>\n )}\n </Recharts.ComposedChart>\n </Recharts.ResponsiveContainer>\n </div>\n </Wrap>\n );\n};\n\nexport default CartesianChart;\n"],"names":["height"],"mappings":"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"}
|
package/dist/js/components/src/components/CartesianChart/components/ChartTooltip/ChartTooltip.mjs
CHANGED
|
@@ -1,31 +1,37 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
3
|
import { jsx } from 'react/jsx-runtime';
|
|
4
|
-
import
|
|
4
|
+
import { Suspense } from 'react';
|
|
5
|
+
import { Tooltip } from 'recharts';
|
|
6
|
+
import '../../../Text/Text.mjs';
|
|
7
|
+
import clsx from 'clsx';
|
|
8
|
+
import '../../../../lib/tokens/CategoricalColors.mjs';
|
|
9
|
+
import '@mittwald/react-use-promise';
|
|
5
10
|
import { TooltipContent } from './TooltipContent.mjs';
|
|
11
|
+
import styles from './ChartTooltip.module.scss.mjs';
|
|
12
|
+
import LoadingSpinnerView from '../../../../views/LoadingSpinnerView.mjs';
|
|
6
13
|
|
|
7
14
|
const ChartTooltip = (props) => {
|
|
8
|
-
const {
|
|
15
|
+
const { headingFormatter, formatter, ...rest } = props;
|
|
9
16
|
return /* @__PURE__ */ jsx(
|
|
10
|
-
|
|
17
|
+
Tooltip,
|
|
11
18
|
{
|
|
12
19
|
...rest,
|
|
20
|
+
cursor: false,
|
|
13
21
|
content: (props2) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
return /* @__PURE__ */ jsx(
|
|
22
|
+
if (!props2.active || !props2.payload || props2.payload.length === 0) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const className = clsx(props2.wrapperClassName, styles.tooltip);
|
|
26
|
+
return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(LoadingSpinnerView, {}), children: /* @__PURE__ */ jsx(
|
|
20
27
|
TooltipContent,
|
|
21
28
|
{
|
|
22
|
-
|
|
29
|
+
...props2,
|
|
23
30
|
headingFormatter,
|
|
24
|
-
|
|
31
|
+
formatter
|
|
25
32
|
}
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
cursor: false
|
|
33
|
+
) }) });
|
|
34
|
+
}
|
|
29
35
|
}
|
|
30
36
|
);
|
|
31
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartTooltip.mjs","sources":["../../../../../../../../src/components/CartesianChart/components/ChartTooltip/ChartTooltip.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"ChartTooltip.mjs","sources":["../../../../../../../../src/components/CartesianChart/components/ChartTooltip/ChartTooltip.tsx"],"sourcesContent":["import React, { type FC, Suspense } from \"react\";\nimport { Tooltip, type TooltipProps } from \"recharts\";\nimport type {\n NameType,\n ValueType,\n} from \"recharts/types/component/DefaultTooltipContent\";\nimport { type TooltipPayloadItem } from \"@/components/CartesianChart/components/ChartTooltip/TooltipLegendItem\";\nimport { TooltipContent } from \"@/components/CartesianChart/components/ChartTooltip/TooltipContent\";\nimport clsx from \"clsx\";\nimport styles from \"./ChartTooltip.module.scss\";\nimport LoadingSpinnerView from \"@/views/LoadingSpinnerView\";\n\nexport type TooltipLineFormatter = (\n value: TooltipPayloadItem[\"value\"],\n name: TooltipPayloadItem[\"dataKey\"],\n index: number,\n unit?: TooltipPayloadItem[\"unit\"],\n) => Promise<string> | string;\n\nexport type TooltipHeadingFormatter = (\n title: string | number | undefined,\n) => Promise<string> | string;\n\nexport interface WithTooltipFormatters {\n /**\n * A formatter function for the lines in the tooltip. Can be used for purposes\n * like translations.\n */\n formatter?: TooltipLineFormatter;\n /**\n * A formatter function for the heading of the tooltip. Can be used for\n * purposes like translations.\n */\n headingFormatter?: TooltipHeadingFormatter;\n}\n\nexport interface ChartTooltipProps\n extends\n Pick<\n TooltipProps<ValueType, NameType>,\n \"wrapperClassName\" | \"allowEscapeViewBox\"\n >,\n WithTooltipFormatters {}\n\n/** @flr-generate all */\nexport const ChartTooltip: FC<ChartTooltipProps> = (props) => {\n const { headingFormatter, formatter, ...rest } = props;\n\n return (\n <Tooltip\n {...rest}\n cursor={false}\n content={(props) => {\n if (!props.active || !props.payload || props.payload.length === 0) {\n return null;\n }\n\n const className = clsx(props.wrapperClassName, styles.tooltip);\n return (\n <div className={className}>\n <Suspense fallback={<LoadingSpinnerView />}>\n <TooltipContent\n {...props}\n headingFormatter={headingFormatter}\n formatter={formatter}\n />\n </Suspense>\n </div>\n );\n }}\n />\n );\n};\n\nexport default ChartTooltip;\n"],"names":["props"],"mappings":";;;;;;;;;;;AA6CO,MAAM,YAAA,GAAsC,CAAC,KAAA,KAAU;AAC5D,EAAA,MAAM,EAAE,gBAAA,EAAkB,SAAA,EAAW,GAAG,MAAK,GAAI,KAAA;AAEjD,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA,EAAS,CAACA,MAAAA,KAAU;AAClB,QAAA,IAAI,CAACA,OAAM,MAAA,IAAU,CAACA,OAAM,OAAA,IAAWA,MAAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACjE,UAAA,OAAO,IAAA;AAAA,QACT;AAEA,QAAA,MAAM,SAAA,GAAY,IAAA,CAAKA,MAAAA,CAAM,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAC7D,QAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EACH,QAAA,kBAAA,GAAA,CAAC,YAAS,QAAA,kBAAU,GAAA,CAAC,sBAAmB,CAAA,EACtC,QAAA,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACE,GAAGA,MAAAA;AAAA,YACJ,gBAAA;AAAA,YACA;AAAA;AAAA,WAEJ,CAAA,EACF,CAAA;AAAA,MAEJ;AAAA;AAAA,GACF;AAEJ;;;;"}
|
package/dist/js/components/src/components/CartesianChart/components/ChartTooltip/TooltipContent.mjs
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
|
-
import { jsxs,
|
|
4
|
-
import
|
|
3
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
|
+
import { Suspense } from 'react';
|
|
5
|
+
import { usePromise } from '@mittwald/react-use-promise';
|
|
5
6
|
import { Heading } from '../../../Heading/Heading.mjs';
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
7
|
+
import { TooltipLegendItem } from './TooltipLegendItem.mjs';
|
|
8
|
+
import SkeletonTextView from '../../../../views/SkeletonTextView.mjs';
|
|
8
9
|
|
|
9
10
|
const TooltipContent = (props) => {
|
|
10
|
-
const {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
const { headingFormatter, formatter, label, payload } = props;
|
|
12
|
+
const formattedHeading = usePromise(
|
|
13
|
+
async (label2, formatter2) => {
|
|
14
|
+
if (!formatter2) {
|
|
15
|
+
return label2;
|
|
16
|
+
}
|
|
17
|
+
return formatter2(label2);
|
|
18
|
+
},
|
|
19
|
+
[label, headingFormatter]
|
|
20
|
+
);
|
|
21
|
+
const items = payload.filter((item) => item.fill !== "none").map((item, index) => {
|
|
22
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(SkeletonTextView, {}), children: /* @__PURE__ */ jsx(TooltipLegendItem, { formatter, item, index }) }, item.dataKey);
|
|
23
|
+
});
|
|
24
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
25
|
+
/* @__PURE__ */ jsx(Heading, { level: 4, children: formattedHeading }),
|
|
26
|
+
items
|
|
27
|
+
] });
|
|
26
28
|
};
|
|
27
29
|
|
|
28
30
|
export { TooltipContent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipContent.mjs","sources":["../../../../../../../../src/components/CartesianChart/components/ChartTooltip/TooltipContent.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"TooltipContent.mjs","sources":["../../../../../../../../src/components/CartesianChart/components/ChartTooltip/TooltipContent.tsx"],"sourcesContent":["import React, { type FC, Suspense } from \"react\";\nimport type { TooltipContentProps } from \"recharts\";\nimport type {\n NameType,\n ValueType,\n} from \"recharts/types/component/DefaultTooltipContent\";\nimport { usePromise } from \"@mittwald/react-use-promise\";\nimport Heading from \"@/components/Heading\";\nimport type { WithTooltipFormatters } from \"@/components/CartesianChart\";\nimport { TooltipLegendItem } from \"@/components/CartesianChart/components/ChartTooltip/TooltipLegendItem\";\nimport SkeletonTextView from \"@/views/SkeletonTextView\";\n\n/** @internal */\nexport const TooltipContent: FC<\n WithTooltipFormatters &\n Omit<TooltipContentProps<ValueType, NameType>, \"formatter\">\n> = (props) => {\n const { headingFormatter, formatter, label, payload } = props;\n\n const formattedHeading = usePromise(\n async (label, formatter) => {\n if (!formatter) {\n return label;\n }\n\n return formatter(label);\n },\n [label, headingFormatter] as const,\n );\n\n const items = payload\n .filter((item) => item.fill !== \"none\")\n .map((item, index) => {\n return (\n <Suspense key={item.dataKey} fallback={<SkeletonTextView />}>\n <TooltipLegendItem formatter={formatter} item={item} index={index} />\n </Suspense>\n );\n });\n\n return (\n <>\n <Heading level={4}>{formattedHeading}</Heading>\n {items}\n </>\n );\n};\n"],"names":["label","formatter"],"mappings":";;;;;;;AAaO,MAAM,cAAA,GAGT,CAAC,KAAA,KAAU;AACb,EAAA,MAAM,EAAE,gBAAA,EAAkB,SAAA,EAAW,KAAA,EAAO,SAAQ,GAAI,KAAA;AAExD,EAAA,MAAM,gBAAA,GAAmB,UAAA;AAAA,IACvB,OAAOA,QAAOC,UAAAA,KAAc;AAC1B,MAAA,IAAI,CAACA,UAAAA,EAAW;AACd,QAAA,OAAOD,MAAAA;AAAA,MACT;AAEA,MAAA,OAAOC,WAAUD,MAAK,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,OAAO,gBAAgB;AAAA,GAC1B;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CACX,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,KAAS,MAAM,CAAA,CACrC,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AACpB,IAAA,uBACE,GAAA,CAAC,QAAA,EAAA,EAA4B,QAAA,kBAAU,GAAA,CAAC,gBAAA,EAAA,EAAiB,CAAA,EACvD,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAsB,IAAA,EAAY,KAAA,EAAc,CAAA,EAAA,EADtD,KAAK,OAEpB,CAAA;AAAA,EAEJ,CAAC,CAAA;AAEH,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,EAAI,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,IACpC;AAAA,GAAA,EACH,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { LegendItem } from '../../../Legend/components/LegendItem/LegendItem.mjs';
|
|
5
|
+
import { usePromise } from '@mittwald/react-use-promise';
|
|
6
|
+
|
|
7
|
+
const TooltipLegendItem = ({
|
|
8
|
+
formatter,
|
|
9
|
+
item,
|
|
10
|
+
index
|
|
11
|
+
}) => {
|
|
12
|
+
const { value, dataKey, unit, fill } = item;
|
|
13
|
+
const formattedLabel = usePromise(
|
|
14
|
+
async (value2, dataKey2, index2, unit2, formatter2) => {
|
|
15
|
+
if (!formatter2) {
|
|
16
|
+
return `${dataKey2}: ${value2}${unit2 ? ` ${unit2}` : ""}`;
|
|
17
|
+
}
|
|
18
|
+
return formatter2(value2, dataKey2, index2, unit2);
|
|
19
|
+
},
|
|
20
|
+
[value, dataKey, index, unit, formatter]
|
|
21
|
+
);
|
|
22
|
+
return /* @__PURE__ */ jsx(LegendItem, { color: fill, children: formattedLabel });
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { TooltipLegendItem };
|
|
26
|
+
//# sourceMappingURL=TooltipLegendItem.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipLegendItem.mjs","sources":["../../../../../../../../src/components/CartesianChart/components/ChartTooltip/TooltipLegendItem.tsx"],"sourcesContent":["import { LegendItem } from \"@/components/Legend/components/LegendItem\";\nimport type { WithTooltipFormatters } from \"./ChartTooltip\";\nimport type { FC } from \"react\";\nimport type { DefaultTooltipContentProps } from \"recharts\";\nimport type {\n NameType,\n ValueType,\n} from \"recharts/types/component/DefaultTooltipContent\";\nimport { usePromise } from \"@mittwald/react-use-promise\";\n\n/** @internal */\nexport type TooltipPayloadItem = NonNullable<\n DefaultTooltipContentProps<ValueType, NameType>[\"payload\"]\n>[number];\n\n/** @internal */\ninterface LegendItemLabelProps extends Pick<\n WithTooltipFormatters,\n \"formatter\"\n> {\n item: TooltipPayloadItem;\n index: number;\n}\n\n/** @internal */\nexport const TooltipLegendItem: FC<LegendItemLabelProps> = ({\n formatter,\n item,\n index,\n}) => {\n const { value, dataKey, unit, fill } = item;\n\n const formattedLabel = usePromise(\n async (value, dataKey, index, unit, formatter) => {\n if (!formatter) {\n return `${dataKey}: ${value}${unit ? ` ${unit}` : \"\"}`;\n }\n\n return formatter(value, dataKey, index, unit);\n },\n [value, dataKey, index, unit, formatter] as const,\n );\n\n return <LegendItem color={fill}>{formattedLabel}</LegendItem>;\n};\n"],"names":["value","dataKey","index","unit","formatter"],"mappings":";;;;AAyBO,MAAM,oBAA8C,CAAC;AAAA,EAC1D,SAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,MAAK,GAAI,IAAA;AAEvC,EAAA,MAAM,cAAA,GAAiB,UAAA;AAAA,IACrB,OAAOA,MAAAA,EAAOC,QAAAA,EAASC,MAAAA,EAAOC,OAAMC,UAAAA,KAAc;AAChD,MAAA,IAAI,CAACA,UAAAA,EAAW;AACd,QAAA,OAAO,CAAA,EAAGH,QAAO,CAAA,EAAA,EAAKD,MAAK,GAAGG,KAAAA,GAAO,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAAA,MACtD;AAEA,MAAA,OAAOC,UAAAA,CAAUJ,MAAAA,EAAOC,QAAAA,EAASC,MAAAA,EAAOC,KAAI,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,MAAM,SAAS;AAAA,GACzC;AAEA,EAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,IAAA,EAAO,QAAA,EAAA,cAAA,EAAe,CAAA;AAClD;;;;"}
|
|
@@ -7,12 +7,12 @@ import clsx from 'clsx';
|
|
|
7
7
|
import { ActiveFilters } from './components/ActiveFilters/ActiveFilters.mjs';
|
|
8
8
|
import { useList } from '../../hooks/useList.mjs';
|
|
9
9
|
import { SearchField } from './components/SearchField/SearchField.mjs';
|
|
10
|
-
import {
|
|
10
|
+
import { ViewModeContextMenu } from './components/ViewModeContextMenu/ViewModeContextMenu.mjs';
|
|
11
11
|
import { TunnelExit } from '@mittwald/react-tunnel';
|
|
12
12
|
import DivView from '../../../../views/DivView.mjs';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
13
|
+
import { SortingContextMenu } from './components/SortingContextMenu/SortingContextMenu.mjs';
|
|
14
|
+
import { FilterContextMenus } from './components/FilterContextMenu/FilterContextMenus.mjs';
|
|
15
|
+
import { AllFiltersModal } from './components/AllFiltersModal/AllFiltersModal.mjs';
|
|
16
16
|
import { useAvailableViewModes } from './lib.mjs';
|
|
17
17
|
|
|
18
18
|
const Header = (props) => {
|
|
@@ -32,10 +32,10 @@ const Header = (props) => {
|
|
|
32
32
|
/* @__PURE__ */ jsxs(DivView, { className: headerStyles.headerContent, children: [
|
|
33
33
|
/* @__PURE__ */ jsx(TunnelExit, { id: "actions" }),
|
|
34
34
|
hasOptions && /* @__PURE__ */ jsxs(DivView, { className: headerStyles.options, children: [
|
|
35
|
-
/* @__PURE__ */ jsx(
|
|
36
|
-
/* @__PURE__ */ jsx(
|
|
37
|
-
/* @__PURE__ */ jsx(
|
|
38
|
-
/* @__PURE__ */ jsx(
|
|
35
|
+
/* @__PURE__ */ jsx(ViewModeContextMenu, {}),
|
|
36
|
+
/* @__PURE__ */ jsx(SortingContextMenu, {}),
|
|
37
|
+
/* @__PURE__ */ jsx(FilterContextMenus, {}),
|
|
38
|
+
/* @__PURE__ */ jsx(AllFiltersModal, {}),
|
|
39
39
|
list.search && /* @__PURE__ */ jsx(SearchField, { search: list.search })
|
|
40
40
|
] })
|
|
41
41
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.mjs","sources":["../../../../../../../../src/components/List/components/Header/Header.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport styles from \"./Header.module.css\";\nimport clsx from \"clsx\";\nimport { ActiveFilters } from \"@/components/List/components/Header/components/ActiveFilters\";\nimport { useList } from \"@/components/List/hooks/useList\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport { SearchField } from \"@/components/List/components/Header/components/SearchField/SearchField\";\nimport {
|
|
1
|
+
{"version":3,"file":"Header.mjs","sources":["../../../../../../../../src/components/List/components/Header/Header.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport styles from \"./Header.module.css\";\nimport clsx from \"clsx\";\nimport { ActiveFilters } from \"@/components/List/components/Header/components/ActiveFilters\";\nimport { useList } from \"@/components/List/hooks/useList\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport { SearchField } from \"@/components/List/components/Header/components/SearchField/SearchField\";\nimport { ViewModeContextMenu } from \"@/components/List/components/Header/components/ViewModeContextMenu/ViewModeContextMenu\";\nimport { TunnelExit } from \"@mittwald/react-tunnel\";\nimport DivView from \"@/views/DivView\";\nimport { SortingContextMenu } from \"@/components/List/components/Header/components/SortingContextMenu/SortingContextMenu\";\nimport { FilterContextMenus } from \"@/components/List/components/Header/components/FilterContextMenu/FilterContextMenus\";\nimport { AllFiltersModal } from \"@/components/List/components/Header/components/AllFiltersModal/AllFiltersModal\";\nimport { useAvailableViewModes } from \"@/components/List/components/Header/lib\";\n\nexport const Header: FC<PropsWithClassName> = (props) => {\n const { className } = props;\n const list = useList();\n\n const availableViewModes = useAvailableViewModes();\n\n const hasOptions =\n list.filters.length > 0 ||\n list.visibleSorting.length > 0 ||\n list.search ||\n availableViewModes.length > 1;\n\n return (\n <DivView\n className={clsx(\n className,\n styles.header,\n list.search && styles.withSearch,\n )}\n >\n <DivView className={styles.headerContent}>\n <TunnelExit id=\"actions\" />\n {hasOptions && (\n <DivView className={styles.options}>\n <ViewModeContextMenu />\n <SortingContextMenu />\n <FilterContextMenus />\n <AllFiltersModal />\n\n {list.search && <SearchField search={list.search} />}\n </DivView>\n )}\n </DivView>\n <ActiveFilters />\n </DivView>\n );\n};\n\nexport default Header;\n"],"names":["styles"],"mappings":";;;;;;;;;;;;;;;AAgBO,MAAM,MAAA,GAAiC,CAAC,KAAA,KAAU;AACvD,EAAA,MAAM,EAAE,WAAU,GAAI,KAAA;AACtB,EAAA,MAAM,OAAO,OAAA,EAAQ;AAErB,EAAA,MAAM,qBAAqB,qBAAA,EAAsB;AAEjD,EAAA,MAAM,UAAA,GACJ,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAA,IACtB,IAAA,CAAK,cAAA,CAAe,MAAA,GAAS,CAAA,IAC7B,IAAA,CAAK,MAAA,IACL,kBAAA,CAAmB,MAAA,GAAS,CAAA;AAE9B,EAAA,uBACE,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,IAAA;AAAA,QACT,SAAA;AAAA,QACAA,YAAA,CAAO,MAAA;AAAA,QACP,IAAA,CAAK,UAAUA,YAAA,CAAO;AAAA,OACxB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAWA,YAAA,CAAO,aAAA,EACzB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,IAAG,SAAA,EAAU,CAAA;AAAA,UACxB,UAAA,oBACC,IAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAWA,aAAO,OAAA,EACzB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA;AAAA,gCACpB,kBAAA,EAAA,EAAmB,CAAA;AAAA,gCACnB,kBAAA,EAAA,EAAmB,CAAA;AAAA,gCACnB,eAAA,EAAA,EAAgB,CAAA;AAAA,YAEhB,KAAK,MAAA,oBAAU,GAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAQ,KAAK,MAAA,EAAQ;AAAA,WAAA,EACpD;AAAA,SAAA,EAEJ,CAAA;AAAA,4BACC,aAAA,EAAA,EAAc;AAAA;AAAA;AAAA,GACjB;AAEJ;;;;"}
|
|
@@ -5,8 +5,8 @@ const headerContent = "flow--list--header--header-content";
|
|
|
5
5
|
const actions = "flow--list--header--actions";
|
|
6
6
|
const options = "flow--list--header--options";
|
|
7
7
|
const withSearch = "flow--list--header--with-search";
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const hideOnDesktop = "flow--list--header--hide-on-desktop";
|
|
9
|
+
const hideOnMobile = "flow--list--header--hide-on-mobile";
|
|
10
10
|
const action = "flow--list--header--action";
|
|
11
11
|
const headerStyles = {
|
|
12
12
|
header: header,
|
|
@@ -14,10 +14,10 @@ const headerStyles = {
|
|
|
14
14
|
actions: actions,
|
|
15
15
|
options: options,
|
|
16
16
|
withSearch: withSearch,
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
hideOnDesktop: hideOnDesktop,
|
|
18
|
+
hideOnMobile: hideOnMobile,
|
|
19
19
|
action: action
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
-
export { action, actions, headerStyles as default,
|
|
22
|
+
export { action, actions, headerStyles as default, header, headerContent, hideOnDesktop, hideOnMobile, options, withSearch };
|
|
23
23
|
//# sourceMappingURL=Header.module.css.mjs.map
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '@tabler/icons-react';
|
|
6
|
+
import '../../../../../Icon/Icon.mjs';
|
|
7
|
+
import '../../../../../../views/IconView.mjs';
|
|
8
|
+
import { IconFilter } from '../../../../../Icon/components/icons/IconFilter.mjs';
|
|
9
|
+
import ButtonView from '../../../../../../views/ButtonView.mjs';
|
|
10
|
+
import 'invariant';
|
|
11
|
+
import 'react-aria-components';
|
|
12
|
+
import '../../../../../IllustratedMessage/IllustratedMessage.mjs';
|
|
13
|
+
import '../../../../../Heading/Heading.mjs';
|
|
14
|
+
import '../../../../../Text/Text.mjs';
|
|
15
|
+
import locales from '../../../../../../../../_virtual/_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs';
|
|
16
|
+
import { useLocalizedStringFormatter } from 'react-aria';
|
|
17
|
+
import clsx from 'clsx';
|
|
18
|
+
import '@mittwald/react-tunnel';
|
|
19
|
+
import '../../../../../../views/ListItemViewContentView.mjs';
|
|
20
|
+
import '../../../../../../lib/propsContext/propsContext.mjs';
|
|
21
|
+
import '../../../../../../lib/propsContext/components/PropsContextProvider.mjs';
|
|
22
|
+
import '../../../../../../views/ContextMenuTriggerView.mjs';
|
|
23
|
+
import '../../../../../ColumnLayout/ColumnLayout.mjs';
|
|
24
|
+
import '../../../ListSummary/ListSummary.mjs';
|
|
25
|
+
import { useList } from '../../../../hooks/useList.mjs';
|
|
26
|
+
import '../../../../listContext.mjs';
|
|
27
|
+
import 'mobx';
|
|
28
|
+
import '../../../../List.mjs';
|
|
29
|
+
import headerStyles from '../../Header.module.css.mjs';
|
|
30
|
+
import ContentView from '../../../../../../views/ContentView.mjs';
|
|
31
|
+
import SectionView from '../../../../../../views/SectionView.mjs';
|
|
32
|
+
import { FilterAccordion } from './FilterAccordion.mjs';
|
|
33
|
+
import { ViewModeAccordion } from './ViewModeAccordion.mjs';
|
|
34
|
+
import TextView from '../../../../../../views/TextView.mjs';
|
|
35
|
+
import { SortingAccordion } from './SortingAccordion.mjs';
|
|
36
|
+
import ActionGroupView from '../../../../../../views/ActionGroupView.mjs';
|
|
37
|
+
import { useOverlayController } from '../../../../../../lib/controller/overlay/useOverlayController.mjs';
|
|
38
|
+
import HeadingView from '../../../../../../views/HeadingView.mjs';
|
|
39
|
+
import { ModalTrigger } from '../../../../../Modal/components/ModalTrigger/ModalTrigger.mjs';
|
|
40
|
+
import { Modal } from '../../../../../Modal/Modal.mjs';
|
|
41
|
+
import { SkeletonText } from '../../../../../SkeletonText/SkeletonText.mjs';
|
|
42
|
+
|
|
43
|
+
const AllFiltersModal = () => {
|
|
44
|
+
const list = useList();
|
|
45
|
+
const stringFormatter = useLocalizedStringFormatter(locales);
|
|
46
|
+
const isInitiallyLoading = list.loader.useIsInitiallyLoading();
|
|
47
|
+
const totalItemCount = list.batches.getTotalItemsCount() ?? list.items.entries.length;
|
|
48
|
+
const filterAccordions = list.filters.map((f) => /* @__PURE__ */ jsx(FilterAccordion, { filter: f }, f.name));
|
|
49
|
+
const accordions = [
|
|
50
|
+
/* @__PURE__ */ jsx(ViewModeAccordion, {}, "viewMode"),
|
|
51
|
+
/* @__PURE__ */ jsx(SortingAccordion, {}, "sorting"),
|
|
52
|
+
...filterAccordions
|
|
53
|
+
].filter(Boolean);
|
|
54
|
+
const hasSecondaryFilters = list.filters.some(
|
|
55
|
+
(f) => f.priority === "secondary"
|
|
56
|
+
);
|
|
57
|
+
const controller = useOverlayController("Modal");
|
|
58
|
+
if (accordions.length === 0) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return /* @__PURE__ */ jsxs(ModalTrigger, { controller, children: [
|
|
62
|
+
/* @__PURE__ */ jsxs(
|
|
63
|
+
ButtonView,
|
|
64
|
+
{
|
|
65
|
+
className: clsx(
|
|
66
|
+
headerStyles.hideOnMobile,
|
|
67
|
+
hasSecondaryFilters ? void 0 : headerStyles.hideOnDesktop
|
|
68
|
+
),
|
|
69
|
+
variant: "outline",
|
|
70
|
+
color: "secondary",
|
|
71
|
+
children: [
|
|
72
|
+
/* @__PURE__ */ jsx(TextView, { children: stringFormatter.format("list.filters.all") }),
|
|
73
|
+
/* @__PURE__ */ jsx(IconFilter, {})
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
/* @__PURE__ */ jsx(
|
|
78
|
+
ButtonView,
|
|
79
|
+
{
|
|
80
|
+
className: headerStyles.hideOnDesktop,
|
|
81
|
+
variant: "outline",
|
|
82
|
+
color: "secondary",
|
|
83
|
+
"aria-label": stringFormatter.format("list.filters.all"),
|
|
84
|
+
children: /* @__PURE__ */ jsx(IconFilter, {})
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
/* @__PURE__ */ jsxs(Modal, { offCanvas: true, controller, children: [
|
|
88
|
+
/* @__PURE__ */ jsx(HeadingView, { children: stringFormatter.format("list.filters.all") }),
|
|
89
|
+
/* @__PURE__ */ jsx(ContentView, { children: /* @__PURE__ */ jsxs(SectionView, { children: [
|
|
90
|
+
...accordions
|
|
91
|
+
] }) }),
|
|
92
|
+
/* @__PURE__ */ jsxs(ActionGroupView, { children: [
|
|
93
|
+
/* @__PURE__ */ jsx(ButtonView, { onPress: () => controller.close(), children: /* @__PURE__ */ jsx(TextView, { children: isInitiallyLoading ? /* @__PURE__ */ jsx(SkeletonText, { width: "16ch" }) : stringFormatter.format("list.results.show", {
|
|
94
|
+
totalItemCount
|
|
95
|
+
}) }) }),
|
|
96
|
+
/* @__PURE__ */ jsx(
|
|
97
|
+
ButtonView,
|
|
98
|
+
{
|
|
99
|
+
color: "secondary",
|
|
100
|
+
variant: "soft",
|
|
101
|
+
onPress: () => {
|
|
102
|
+
list.resetFilters();
|
|
103
|
+
controller.close();
|
|
104
|
+
},
|
|
105
|
+
children: stringFormatter.format("list.reset")
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
] })
|
|
109
|
+
] })
|
|
110
|
+
] });
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export { AllFiltersModal };
|
|
114
|
+
//# sourceMappingURL=AllFiltersModal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AllFiltersModal.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport { IconFilter } from \"@/components/Icon/components/icons\";\nimport ButtonView from \"@/views/ButtonView\";\nimport { useList } from \"@/components/List\";\nimport styles from \"@/components/List/components/Header/Header.module.css\";\nimport { useLocalizedStringFormatter } from \"react-aria\";\nimport locales from \"../../../../locales/*.locale.json\";\nimport ContentView from \"@/views/ContentView\";\nimport SectionView from \"@/views/SectionView\";\nimport { FilterAccordion } from \"@/components/List/components/Header/components/AllFiltersModal/FilterAccordion\";\nimport { ViewModeAccordion } from \"@/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion\";\nimport TextView from \"@/views/TextView\";\nimport { SortingAccordion } from \"@/components/List/components/Header/components/AllFiltersModal/SortingAccordion\";\nimport ActionGroupView from \"@/views/ActionGroupView\";\nimport { useOverlayController } from \"@/lib/controller\";\nimport HeadingView from \"@/views/HeadingView\";\nimport clsx from \"clsx\";\nimport Modal, { ModalTrigger } from \"@/components/Modal\";\nimport { SkeletonText } from \"@/components/SkeletonText\";\n\nexport const AllFiltersModal: FC = () => {\n const list = useList();\n const stringFormatter = useLocalizedStringFormatter(locales);\n\n const isInitiallyLoading = list.loader.useIsInitiallyLoading();\n const totalItemCount =\n list.batches.getTotalItemsCount() ?? list.items.entries.length;\n\n const filterAccordions = list.filters.map((f) => (\n <FilterAccordion filter={f} key={f.name} />\n ));\n\n const accordions = [\n <ViewModeAccordion key=\"viewMode\" />,\n <SortingAccordion key=\"sorting\" />,\n ...filterAccordions,\n ].filter(Boolean);\n\n const hasSecondaryFilters = list.filters.some(\n (f) => f.priority === \"secondary\",\n );\n\n const controller = useOverlayController(\"Modal\");\n\n if (accordions.length === 0) {\n return null;\n }\n\n return (\n <ModalTrigger controller={controller}>\n <ButtonView\n className={clsx(\n styles.hideOnMobile,\n hasSecondaryFilters ? undefined : styles.hideOnDesktop,\n )}\n variant=\"outline\"\n color=\"secondary\"\n >\n <TextView>{stringFormatter.format(\"list.filters.all\")}</TextView>\n <IconFilter />\n </ButtonView>\n\n <ButtonView\n className={styles.hideOnDesktop}\n variant=\"outline\"\n color=\"secondary\"\n aria-label={stringFormatter.format(\"list.filters.all\")}\n >\n <IconFilter />\n </ButtonView>\n\n <Modal offCanvas controller={controller}>\n <HeadingView>{stringFormatter.format(\"list.filters.all\")}</HeadingView>\n <ContentView>\n <SectionView>{...accordions}</SectionView>\n </ContentView>\n\n <ActionGroupView>\n <ButtonView onPress={() => controller.close()}>\n <TextView>\n {isInitiallyLoading ? (\n <SkeletonText width=\"16ch\" />\n ) : (\n stringFormatter.format(\"list.results.show\", {\n totalItemCount,\n })\n )}\n </TextView>\n </ButtonView>\n <ButtonView\n color=\"secondary\"\n variant=\"soft\"\n onPress={() => {\n list.resetFilters();\n controller.close();\n }}\n >\n {stringFormatter.format(\"list.reset\")}\n </ButtonView>\n </ActionGroupView>\n </Modal>\n </ModalTrigger>\n );\n};\n"],"names":["styles"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import AccordionView from '../../../../../../views/AccordionView.mjs';
|
|
6
|
+
import HeadingView from '../../../../../../views/HeadingView.mjs';
|
|
7
|
+
import ContentView from '../../../../../../views/ContentView.mjs';
|
|
8
|
+
import RadioGroupView from '../../../../../../views/RadioGroupView.mjs';
|
|
9
|
+
import RadioView from '../../../../../../views/RadioView.mjs';
|
|
10
|
+
import CheckboxGroupView from '../../../../../../views/CheckboxGroupView.mjs';
|
|
11
|
+
import CheckboxView from '../../../../../../views/CheckboxView.mjs';
|
|
12
|
+
|
|
13
|
+
const FilterAccordion = (props) => {
|
|
14
|
+
const { filter } = props;
|
|
15
|
+
const activeKeys = filter.values.filter((v) => v.isActive).map((v) => v.id);
|
|
16
|
+
return /* @__PURE__ */ jsxs(AccordionView, { children: [
|
|
17
|
+
/* @__PURE__ */ jsx(HeadingView, { children: filter.name ?? filter.property }),
|
|
18
|
+
/* @__PURE__ */ jsxs(ContentView, { children: [
|
|
19
|
+
filter.mode === "one" && /* @__PURE__ */ jsx(RadioGroupView, { value: activeKeys[0], m: [1, 1], children: filter.values.map((v) => /* @__PURE__ */ jsx(RadioView, { value: v.id, onPress: () => v.toggle(), children: v.render() }, v.id)) }),
|
|
20
|
+
filter.mode !== "one" && /* @__PURE__ */ jsx(CheckboxGroupView, { value: activeKeys, m: [1, 1], children: filter.values.map((v) => /* @__PURE__ */ jsx(CheckboxView, { value: v.id, onPress: () => v.toggle(), children: v.render() }, v.id)) })
|
|
21
|
+
] })
|
|
22
|
+
] });
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { FilterAccordion };
|
|
26
|
+
//# sourceMappingURL=FilterAccordion.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterAccordion.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/AllFiltersModal/FilterAccordion.tsx"],"sourcesContent":["import React, { type FC } from \"react\";\nimport AccordionView from \"@/views/AccordionView\";\nimport HeadingView from \"@/views/HeadingView\";\nimport ContentView from \"@/views/ContentView\";\nimport RadioGroupView from \"@/views/RadioGroupView\";\nimport RadioView from \"@/views/RadioView\";\nimport CheckboxGroupView from \"@/views/CheckboxGroupView\";\nimport CheckboxView from \"@/views/CheckboxView\";\nimport type { Filter } from \"@/components/List/model/filter/Filter\";\n\ninterface Props {\n filter: Filter<never, never, never>;\n}\n\nexport const FilterAccordion: FC<Props> = (props) => {\n const { filter } = props;\n\n const activeKeys = filter.values.filter((v) => v.isActive).map((v) => v.id);\n\n return (\n <AccordionView>\n <HeadingView>{filter.name ?? filter.property}</HeadingView>\n <ContentView>\n {filter.mode === \"one\" && (\n <RadioGroupView value={activeKeys[0]} m={[1, 1]}>\n {filter.values.map((v) => (\n <RadioView key={v.id} value={v.id} onPress={() => v.toggle()}>\n {v.render()}\n </RadioView>\n ))}\n </RadioGroupView>\n )}\n {filter.mode !== \"one\" && (\n <CheckboxGroupView value={activeKeys} m={[1, 1]}>\n {filter.values.map((v) => (\n <CheckboxView key={v.id} value={v.id} onPress={() => v.toggle()}>\n {v.render()}\n </CheckboxView>\n ))}\n </CheckboxGroupView>\n )}\n </ContentView>\n </AccordionView>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAcO,MAAM,eAAA,GAA6B,CAAC,KAAA,KAAU;AACnD,EAAA,MAAM,EAAE,QAAO,GAAI,KAAA;AAEnB,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAE1E,EAAA,4BACG,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,QAAA,EAAS,CAAA;AAAA,yBAC5C,WAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,IAAA,KAAS,KAAA,oBACf,GAAA,CAAC,cAAA,EAAA,EAAe,OAAO,UAAA,CAAW,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAC3C,QAAA,EAAA,MAAA,CAAO,OAAO,GAAA,CAAI,CAAC,CAAA,qBAClB,GAAA,CAAC,SAAA,EAAA,EAAqB,KAAA,EAAO,CAAA,CAAE,EAAA,EAAI,SAAS,MAAM,CAAA,CAAE,MAAA,EAAO,EACxD,YAAE,MAAA,EAAO,EAAA,EADI,CAAA,CAAE,EAElB,CACD,CAAA,EACH,CAAA;AAAA,MAED,MAAA,CAAO,IAAA,KAAS,KAAA,oBACf,GAAA,CAAC,qBAAkB,KAAA,EAAO,UAAA,EAAY,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAC3C,QAAA,EAAA,MAAA,CAAO,OAAO,GAAA,CAAI,CAAC,CAAA,qBAClB,GAAA,CAAC,YAAA,EAAA,EAAwB,KAAA,EAAO,CAAA,CAAE,EAAA,EAAI,SAAS,MAAM,CAAA,CAAE,MAAA,EAAO,EAC3D,YAAE,MAAA,EAAO,EAAA,EADO,CAAA,CAAE,EAErB,CACD,CAAA,EACH;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import AccordionView from '../../../../../../views/AccordionView.mjs';
|
|
6
|
+
import HeadingView from '../../../../../../views/HeadingView.mjs';
|
|
7
|
+
import { useLocalizedStringFormatter } from 'react-aria';
|
|
8
|
+
import ContentView from '../../../../../../views/ContentView.mjs';
|
|
9
|
+
import RadioGroupView from '../../../../../../views/RadioGroupView.mjs';
|
|
10
|
+
import RadioView from '../../../../../../views/RadioView.mjs';
|
|
11
|
+
import 'invariant';
|
|
12
|
+
import 'react-aria-components';
|
|
13
|
+
import '../../../../../IllustratedMessage/IllustratedMessage.mjs';
|
|
14
|
+
import '@tabler/icons-react';
|
|
15
|
+
import '../../../../../Icon/Icon.mjs';
|
|
16
|
+
import '../../../../../../views/IconView.mjs';
|
|
17
|
+
import '../../../../../Heading/Heading.mjs';
|
|
18
|
+
import '../../../../../Text/Text.mjs';
|
|
19
|
+
import locales from '../../../../../../../../_virtual/_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs';
|
|
20
|
+
import 'clsx';
|
|
21
|
+
import '@mittwald/react-tunnel';
|
|
22
|
+
import '../../../../../../views/ListItemViewContentView.mjs';
|
|
23
|
+
import '../../../../../../lib/propsContext/propsContext.mjs';
|
|
24
|
+
import '../../../../../../lib/propsContext/components/PropsContextProvider.mjs';
|
|
25
|
+
import '../../../../../../views/ButtonView.mjs';
|
|
26
|
+
import '../../../../../../views/ContextMenuTriggerView.mjs';
|
|
27
|
+
import '../../../../../ColumnLayout/ColumnLayout.mjs';
|
|
28
|
+
import '../../../ListSummary/ListSummary.mjs';
|
|
29
|
+
import { useList } from '../../../../hooks/useList.mjs';
|
|
30
|
+
import '../../../../listContext.mjs';
|
|
31
|
+
import 'mobx';
|
|
32
|
+
import '../../../../List.mjs';
|
|
33
|
+
|
|
34
|
+
const SortingAccordion = () => {
|
|
35
|
+
const list = useList();
|
|
36
|
+
const stringFormatter = useLocalizedStringFormatter(locales);
|
|
37
|
+
const sorting = list.visibleSorting;
|
|
38
|
+
const activeSorting = sorting.find((s) => s.isSorted());
|
|
39
|
+
if (sorting.length === 0) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return /* @__PURE__ */ jsxs(AccordionView, { children: [
|
|
43
|
+
/* @__PURE__ */ jsx(HeadingView, { children: stringFormatter.format("list.sorting") }),
|
|
44
|
+
/* @__PURE__ */ jsx(ContentView, { children: /* @__PURE__ */ jsx(RadioGroupView, { value: activeSorting?.id, m: [1, 1], children: sorting.map((s) => /* @__PURE__ */ jsx(
|
|
45
|
+
RadioView,
|
|
46
|
+
{
|
|
47
|
+
value: s.id,
|
|
48
|
+
onPress: () => list.getSorting(s.id).enable(),
|
|
49
|
+
children: s.name ?? s.property
|
|
50
|
+
},
|
|
51
|
+
s.id
|
|
52
|
+
)) }) })
|
|
53
|
+
] });
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export { SortingAccordion };
|
|
57
|
+
//# sourceMappingURL=SortingAccordion.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortingAccordion.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/AllFiltersModal/SortingAccordion.tsx"],"sourcesContent":["import React, { type FC } from \"react\";\nimport AccordionView from \"@/views/AccordionView\";\nimport HeadingView from \"@/views/HeadingView\";\nimport { useLocalizedStringFormatter } from \"react-aria\";\nimport ContentView from \"@/views/ContentView\";\nimport RadioGroupView from \"@/views/RadioGroupView\";\nimport RadioView from \"@/views/RadioView\";\nimport { useList } from \"@/components/List\";\nimport locales from \"../../../../locales/*.locale.json\";\n\nexport const SortingAccordion: FC = () => {\n const list = useList();\n const stringFormatter = useLocalizedStringFormatter(locales);\n\n const sorting = list.visibleSorting;\n const activeSorting = sorting.find((s) => s.isSorted());\n\n if (sorting.length === 0) {\n return null;\n }\n\n return (\n <AccordionView>\n <HeadingView>{stringFormatter.format(\"list.sorting\")}</HeadingView>\n <ContentView>\n <RadioGroupView value={activeSorting?.id} m={[1, 1]}>\n {sorting.map((s) => (\n <RadioView\n key={s.id}\n value={s.id}\n onPress={() => list.getSorting(s.id).enable()}\n >\n {s.name ?? s.property}\n </RadioView>\n ))}\n </RadioGroupView>\n </ContentView>\n </AccordionView>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,MAAM,mBAAuB,MAAM;AACxC,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,eAAA,GAAkB,4BAA4B,OAAO,CAAA;AAE3D,EAAA,MAAM,UAAU,IAAA,CAAK,cAAA;AACrB,EAAA,MAAM,gBAAgB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA;AAEtD,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,4BACG,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,eAAA,CAAgB,MAAA,CAAO,cAAc,CAAA,EAAE,CAAA;AAAA,oBACrD,GAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAO,aAAA,EAAe,EAAA,EAAI,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,EAC/C,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZ,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEC,OAAO,CAAA,CAAE,EAAA;AAAA,QACT,SAAS,MAAM,IAAA,CAAK,WAAW,CAAA,CAAE,EAAE,EAAE,MAAA,EAAO;AAAA,QAE3C,QAAA,EAAA,CAAA,CAAE,QAAQ,CAAA,CAAE;AAAA,OAAA;AAAA,MAJR,CAAA,CAAE;AAAA,KAMV,GACH,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|