@mittwald/flow-react-components 0.2.0-alpha.191 → 0.2.0-alpha.193
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 +1919 -1839
- package/dist/css/all.css +1 -1
- package/dist/js/_virtual/_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs +4 -2
- package/dist/js/_virtual/_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs.map +1 -1
- package/dist/js/components/src/components/ContextMenu/components/ContextMenuSection/ContextMenuSection.mjs.map +1 -1
- package/dist/js/components/src/components/List/List.mjs +7 -5
- package/dist/js/components/src/components/List/List.mjs.map +1 -1
- package/dist/js/components/src/components/List/components/Header/Header.mjs +20 -19
- 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 +14 -10
- package/dist/js/components/src/components/List/components/Header/Header.module.css.mjs.map +1 -1
- package/dist/js/components/src/components/List/components/Header/components/Filters/CombinedFilterMenu.mjs +76 -0
- package/dist/js/components/src/components/List/components/Header/components/Filters/CombinedFilterMenu.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/{FilterPicker/FilterPicker.mjs → Filters/FilterMenu.mjs} +19 -20
- package/dist/js/components/src/components/List/components/Header/components/Filters/FilterMenu.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/Filters/FilterMenuItem.mjs +23 -0
- package/dist/js/components/src/components/List/components/Header/components/Filters/FilterMenuItem.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/Filters/FilterMenuList.mjs +38 -0
- package/dist/js/components/src/components/List/components/Header/components/Filters/FilterMenuList.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/SearchField/SearchField.mjs +4 -4
- package/dist/js/components/src/components/List/components/Header/components/SearchField/SearchField.mjs.map +1 -1
- package/dist/js/components/src/components/List/components/Header/components/SearchField/SearchField.module.scss.mjs +9 -0
- package/dist/js/components/src/components/List/components/Header/components/SearchField/SearchField.module.scss.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/Settings/SettingsMenu.mjs +76 -0
- package/dist/js/components/src/components/List/components/Header/components/Settings/SettingsMenu.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/{SortingPicker/SortingPicker.mjs → Settings/SortingMenu.mjs} +23 -17
- package/dist/js/components/src/components/List/components/Header/components/Settings/SortingMenu.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/Settings/SortingMenuItem.mjs +48 -0
- package/dist/js/components/src/components/List/components/Header/components/Settings/SortingMenuItem.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/{ViewModeMenu → Settings}/ViewModeMenu.mjs +6 -27
- package/dist/js/components/src/components/List/components/Header/components/Settings/ViewModeMenu.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/components/Settings/ViewModeMenuItem.mjs +51 -0
- package/dist/js/components/src/components/List/components/Header/components/Settings/ViewModeMenuItem.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/Header/lib.mjs +47 -0
- package/dist/js/components/src/components/List/components/Header/lib.mjs.map +1 -0
- package/dist/js/components/src/components/List/components/ListItemView/ListItemView.mjs +2 -1
- package/dist/js/components/src/components/List/components/ListItemView/ListItemView.mjs.map +1 -1
- package/dist/js/components/src/components/List/components/ListItemView/components/ListItemViewContent/ListItemViewContent.mjs +2 -2
- package/dist/js/components/src/components/List/components/ListItemView/components/ListItemViewContent/ListItemViewContent.mjs.map +1 -1
- package/dist/types/components/ContextMenu/components/ContextMenuSection/ContextMenuSection.d.ts +2 -2
- package/dist/types/components/ContextMenu/components/ContextMenuSection/ContextMenuSection.d.ts.map +1 -1
- package/dist/types/components/List/List.d.ts.map +1 -1
- package/dist/types/components/List/components/Header/Header.d.ts +1 -4
- package/dist/types/components/List/components/Header/Header.d.ts.map +1 -1
- package/dist/types/components/List/components/Header/components/Filters/CombinedFilterMenu.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/Filters/CombinedFilterMenu.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/{FilterPicker/FilterPicker.d.ts → Filters/FilterMenu.d.ts} +2 -2
- package/dist/types/components/List/components/Header/components/Filters/FilterMenu.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/Filters/FilterMenuItem.d.ts +8 -0
- package/dist/types/components/List/components/Header/components/Filters/FilterMenuItem.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/Filters/FilterMenuList.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/Filters/FilterMenuList.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/SearchField/SearchField.d.ts.map +1 -1
- package/dist/types/components/List/components/Header/components/Settings/SettingsMenu.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/Settings/SettingsMenu.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/Settings/SortingMenu.d.ts +3 -0
- package/dist/types/components/List/components/Header/components/Settings/SortingMenu.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/{SortingPickerItem/SortingPickerItem.d.ts → Settings/SortingMenuItem.d.ts} +2 -2
- package/dist/types/components/List/components/Header/components/Settings/SortingMenuItem.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/Settings/ViewModeMenu.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/components/Settings/ViewModeMenuItem.d.ts +8 -0
- package/dist/types/components/List/components/Header/components/Settings/ViewModeMenuItem.d.ts.map +1 -0
- package/dist/types/components/List/components/Header/lib.d.ts +3 -0
- package/dist/types/components/List/components/Header/lib.d.ts.map +1 -0
- package/dist/types/components/List/components/ListItemView/ListItemView.d.ts.map +1 -1
- package/dist/types/components/List/model/search/types.d.ts +1 -1
- package/dist/types/components/List/model/search/types.d.ts.map +1 -1
- package/dist/types/components/List/stories/Default.stories.d.ts.map +1 -1
- package/dist/types/components/List/stories/ListItem.stories.d.ts.map +1 -1
- package/dist/types/components/List/typedList.d.ts +1 -4
- package/dist/types/components/List/typedList.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/js/components/src/components/List/components/Header/components/FilterPicker/FilterPicker.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/FilterPicker/index.mjs +0 -6
- package/dist/js/components/src/components/List/components/Header/components/FilterPicker/index.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/SortingPicker/SortingPicker.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/SortingPickerItem/SortingPickerItem.mjs +0 -13
- package/dist/js/components/src/components/List/components/Header/components/SortingPickerItem/SortingPickerItem.mjs.map +0 -1
- package/dist/js/components/src/components/List/components/Header/components/ViewModeMenu/ViewModeMenu.mjs.map +0 -1
- package/dist/js/components/src/lib/react/deepHas.mjs +0 -8
- package/dist/js/components/src/lib/react/deepHas.mjs.map +0 -1
- package/dist/js/components/src/views/SectionView.mjs +0 -14
- package/dist/js/components/src/views/SectionView.mjs.map +0 -1
- package/dist/types/components/List/components/Header/components/FilterPicker/FilterPicker.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/FilterPicker/index.d.ts +0 -4
- package/dist/types/components/List/components/Header/components/FilterPicker/index.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/SortingPicker/SortingPicker.d.ts +0 -3
- package/dist/types/components/List/components/Header/components/SortingPicker/SortingPicker.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/SortingPicker/index.d.ts +0 -4
- package/dist/types/components/List/components/Header/components/SortingPicker/index.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/SortingPickerItem/SortingPickerItem.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/SortingPickerItem/index.d.ts +0 -4
- package/dist/types/components/List/components/Header/components/SortingPickerItem/index.d.ts.map +0 -1
- package/dist/types/components/List/components/Header/components/ViewModeMenu/ViewModeMenu.d.ts.map +0 -1
- /package/dist/types/components/List/components/Header/components/{ViewModeMenu → Settings}/ViewModeMenu.d.ts +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
|
-
const locales = {"de-DE": { "list.filters
|
|
3
|
+
const locales = {"de-DE": { "list.filters": `Filter`,
|
|
4
|
+
"list.filters.clear": `Filter entfernen`,
|
|
4
5
|
"list.filters.reset": `Filter zurücksetzen`,
|
|
5
6
|
"list.filters.store": `Filter speichern`,
|
|
6
7
|
"list.noResult.heading": `Keine Suchergebnisse gefunden`,
|
|
@@ -16,7 +17,8 @@ const locales = {"de-DE": { "list.filters.clear": `Filter entfernen`,
|
|
|
16
17
|
"list.sorting": `Sortierung`,
|
|
17
18
|
"list.toggleExpandButton.collapse": `Weniger anzeigen`,
|
|
18
19
|
"list.toggleExpandButton.expand": `Mehr anzeigen`,
|
|
19
|
-
},"en-US": { "list.filters
|
|
20
|
+
},"en-US": { "list.filters": `Filters`,
|
|
21
|
+
"list.filters.clear": `Clear filters`,
|
|
20
22
|
"list.filters.reset": `Reset filters`,
|
|
21
23
|
"list.filters.store": `Store filters`,
|
|
22
24
|
"list.noResult.heading": `No search results found`,
|
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenuSection.mjs","sources":["../../../../../../../../src/components/ContextMenu/components/ContextMenuSection/ContextMenuSection.tsx"],"sourcesContent":["import * as Aria from \"react-aria-components\";\nimport type { PropsWithChildren } from \"react\";\nimport React from \"react\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { PropsContextProvider } from \"@/lib/propsContext\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport styles from \"../../ContextMenu.module.scss\";\nimport type { ContextMenuSelectionMode } from \"@/components/ContextMenu/lib\";\nimport {\n getAriaSelectionMode,\n getCloseOverlayType,\n getMenuItemSelectionVariant,\n} from \"@/components/ContextMenu/lib\";\nimport { Action } from \"@/components/Action\";\nimport type { MenuItemProps } from \"@/components/MenuItem\";\n\nexport type ContextMenuSectionProps = PropsWithChildren &\n FlowComponentProps &\n Pick
|
|
1
|
+
{"version":3,"file":"ContextMenuSection.mjs","sources":["../../../../../../../../src/components/ContextMenu/components/ContextMenuSection/ContextMenuSection.tsx"],"sourcesContent":["import * as Aria from \"react-aria-components\";\nimport type { PropsWithChildren } from \"react\";\nimport React from \"react\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { PropsContextProvider } from \"@/lib/propsContext\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport styles from \"../../ContextMenu.module.scss\";\nimport type { ContextMenuSelectionMode } from \"@/components/ContextMenu/lib\";\nimport {\n getAriaSelectionMode,\n getCloseOverlayType,\n getMenuItemSelectionVariant,\n} from \"@/components/ContextMenu/lib\";\nimport { Action } from \"@/components/Action\";\nimport type { MenuItemProps } from \"@/components/MenuItem\";\n\nexport type ContextMenuSectionProps = PropsWithChildren &\n FlowComponentProps &\n Pick<\n Aria.MenuSectionProps<MenuItemProps>,\n \"defaultSelectedKeys\" | \"selectedKeys\"\n > & {\n selectionMode?: ContextMenuSelectionMode;\n };\n\n/** @flr-generate all */\nexport const ContextMenuSection = flowComponent(\n \"ContextMenuSection\",\n (props) => {\n const { children, selectionMode, ref, ...rest } = props;\n\n const selectionVariant = getMenuItemSelectionVariant(selectionMode);\n\n const propsContext: PropsContext = {\n Heading: {\n level: 5,\n wrapWith: <Aria.Header />,\n },\n MenuItem: {\n selectionVariant,\n },\n };\n\n return (\n <Aria.MenuSection\n ref={ref}\n {...rest}\n selectionMode={getAriaSelectionMode(selectionMode)}\n className={styles.section}\n >\n <PropsContextProvider props={propsContext} mergeInParentContext>\n <Action skip>\n <Action closeOverlay={getCloseOverlayType(selectionMode)}>\n {children}\n </Action>\n </Action>\n </PropsContextProvider>\n </Aria.MenuSection>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;;;;AA2BO,MAAM,kBAAqB,GAAA,aAAA;AAAA,EAChC,oBAAA;AAAA,EACA,CAAC,KAAU,KAAA;AACT,IAAA,MAAM,EAAE,QAAU,EAAA,aAAA,EAAe,GAAK,EAAA,GAAG,MAAS,GAAA,KAAA;AAElD,IAAM,MAAA,gBAAA,GAAmB,4BAA4B,aAAa,CAAA;AAElE,IAAA,MAAM,YAA6B,GAAA;AAAA,MACjC,OAAS,EAAA;AAAA,QACP,KAAO,EAAA,CAAA;AAAA,QACP,QAAU,kBAAA,GAAA,CAAC,IAAK,CAAA,MAAA,EAAL,EAAY;AAAA,OACzB;AAAA,MACA,QAAU,EAAA;AAAA,QACR;AAAA;AACF,KACF;AAEA,IACE,uBAAA,GAAA;AAAA,MAAC,IAAK,CAAA,WAAA;AAAA,MAAL;AAAA,QACC,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QACJ,aAAA,EAAe,qBAAqB,aAAa,CAAA;AAAA,QACjD,WAAW,MAAO,CAAA,OAAA;AAAA,QAElB,8BAAC,oBAAqB,EAAA,EAAA,KAAA,EAAO,cAAc,oBAAoB,EAAA,IAAA,EAC7D,8BAAC,MAAO,EAAA,EAAA,IAAA,EAAI,IACV,EAAA,QAAA,kBAAA,GAAA,CAAC,UAAO,YAAc,EAAA,mBAAA,CAAoB,aAAa,CACpD,EAAA,QAAA,EACH,GACF,CACF,EAAA;AAAA;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
3
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
-
import { ActionGroup } from '../ActionGroup/ActionGroup.mjs';
|
|
5
4
|
import { DataLoader } from './components/DataLoader/DataLoader.mjs';
|
|
6
5
|
import { Header } from './components/Header/Header.mjs';
|
|
6
|
+
import headerStyles from './components/Header/Header.module.css.mjs';
|
|
7
7
|
import { Items } from './components/Items/Items.mjs';
|
|
8
8
|
import { Table } from './components/Table/Table.mjs';
|
|
9
9
|
import { List as List$1 } from './model/List.mjs';
|
|
@@ -26,7 +26,6 @@ import 'react';
|
|
|
26
26
|
import '../../lib/viewComponentContext/viewComponentContext.mjs';
|
|
27
27
|
import { PropsContextProvider } from '../../lib/propsContext/PropsContextProvider.mjs';
|
|
28
28
|
import { deepFindOfType, deepFilterByType } from '../../lib/react/deepFindOfType.mjs';
|
|
29
|
-
import { deepHas } from '../../lib/react/deepHas.mjs';
|
|
30
29
|
import DivView from '../../views/DivView.mjs';
|
|
31
30
|
import { TunnelProvider, TunnelExit } from '@mittwald/react-tunnel';
|
|
32
31
|
import { Footer } from './components/Footer/Footer.mjs';
|
|
@@ -113,13 +112,16 @@ const List = flowComponent("List", (props) => {
|
|
|
113
112
|
});
|
|
114
113
|
const propsContext = {
|
|
115
114
|
ActionGroup: {
|
|
116
|
-
tunnelId: "actions"
|
|
115
|
+
tunnelId: "actions",
|
|
116
|
+
className: headerStyles.actions,
|
|
117
|
+
Button: {
|
|
118
|
+
className: headerStyles.action
|
|
119
|
+
}
|
|
117
120
|
},
|
|
118
121
|
ListSummary: {
|
|
119
122
|
tunnelId: "listSummary"
|
|
120
123
|
}
|
|
121
124
|
};
|
|
122
|
-
const hasActionGroup = deepHas(children, ActionGroup);
|
|
123
125
|
return /* @__PURE__ */ jsx(PropsContextProvider, { props: propsContext, children: /* @__PURE__ */ jsx(TunnelProvider, { children: /* @__PURE__ */ jsxs(
|
|
124
126
|
listContext.Provider,
|
|
125
127
|
{
|
|
@@ -130,7 +132,7 @@ const List = flowComponent("List", (props) => {
|
|
|
130
132
|
/* @__PURE__ */ jsx(DataLoader, {}),
|
|
131
133
|
/* @__PURE__ */ jsxs(DivView, { className: styles.list, ref, children: [
|
|
132
134
|
children,
|
|
133
|
-
/* @__PURE__ */ jsx(Header, {
|
|
135
|
+
/* @__PURE__ */ jsx(Header, {}),
|
|
134
136
|
/* @__PURE__ */ jsxs(DivView, { className: styles.listWrapper, children: [
|
|
135
137
|
listModel.items.entries.length > 0 && /* @__PURE__ */ jsx(TunnelExit, { id: "listSummary" }),
|
|
136
138
|
(listModel.viewMode === "list" || listModel.viewMode === "tiles") && /* @__PURE__ */ jsx(Items, {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.mjs","sources":["../../../../../../src/components/List/List.tsx"],"sourcesContent":["import { ActionGroup } from \"@/components/ActionGroup\";\nimport { DataLoader } from \"@/components/List/components/DataLoader\";\nimport { Header } from \"@/components/List/components/Header/Header\";\nimport { Items } from \"@/components/List/components/Items/Items\";\nimport { Table } from \"@/components/List/components/Table\";\nimport ListModel from \"@/components/List/model/List\";\nimport type { IncrementalLoaderShape } from \"@/components/List/model/loading/types\";\nimport type { ListShape } from \"@/components/List/model/types\";\nimport { ListFilter } from \"@/components/List/setupComponents/ListFilter\";\nimport { ListItem } from \"@/components/List/setupComponents/ListItem\";\nimport { ListLoaderAsync } from \"@/components/List/setupComponents/ListLoaderAsync\";\nimport { ListLoaderAsyncResource } from \"@/components/List/setupComponents/ListLoaderAsyncResource\";\nimport { ListSearch } from \"@/components/List/setupComponents/ListSearch\";\nimport { ListSorting } from \"@/components/List/setupComponents/ListSorting\";\nimport { ListStaticData } from \"@/components/List/setupComponents/ListStaticData\";\nimport { Table as TableSetupComponent } from \"@/components/List/setupComponents/Table\";\nimport { TableBody } from \"@/components/List/setupComponents/TableBody\";\nimport { TableCell } from \"@/components/List/setupComponents/TableCell\";\nimport { TableColumn } from \"@/components/List/setupComponents/TableColumn\";\nimport { TableHeader } from \"@/components/List/setupComponents/TableHeader\";\nimport { TableRow } from \"@/components/List/setupComponents/TableRow\";\nimport {\n flowComponent,\n type FlowComponentProps,\n} from \"@/lib/componentFactory/flowComponent\";\nimport { type PropsContext, PropsContextProvider } from \"@/lib/propsContext\";\nimport { deepFilterByType, deepFindOfType } from \"@/lib/react/deepFindOfType\";\nimport { deepHas } from \"@/lib/react/deepHas\";\nimport DivView from \"@/views/DivView\";\nimport { TunnelExit, TunnelProvider } from \"@mittwald/react-tunnel\";\nimport type { PropsWithChildren } from \"react\";\nimport Footer from \"./components/Footer\";\nimport styles from \"./List.module.css\";\nimport { listContext } from \"./listContext\";\n\nexport interface ListProps<T>\n extends PropsWithChildren,\n FlowComponentProps,\n Omit<\n ListShape<T>,\n | \"search\"\n | \"loader\"\n | \"itemView\"\n | \"table\"\n | \"batchesController\"\n | \"filters\"\n | \"sorting\"\n > {\n /** The number of items to be displayed on one page. */\n batchSize?: number;\n}\n\nexport const List = flowComponent(\"List\", (props) => {\n const { children, batchSize, onChange, ref, ...restProps } = props;\n\n const listLoaderAsync = deepFindOfType(\n children,\n ListLoaderAsync<never>,\n )?.props;\n const listLoaderAsyncResource = deepFindOfType(\n children,\n ListLoaderAsyncResource<never>,\n )?.props;\n const listStaticData = deepFindOfType(children, ListStaticData<never>)?.props;\n\n const loaderShape: IncrementalLoaderShape<never> = {\n source: listLoaderAsync\n ? {\n ...listLoaderAsync,\n asyncLoader: listLoaderAsync.children,\n }\n : listLoaderAsyncResource\n ? {\n ...listLoaderAsyncResource,\n asyncResourceFactory: listLoaderAsyncResource.children,\n }\n : listStaticData\n ? {\n staticData: listStaticData.data,\n }\n : undefined,\n };\n\n const searchProps = deepFindOfType(children, ListSearch)?.props;\n const itemViewProps = deepFindOfType(children, ListItem<never>)?.props;\n\n const tableProps = deepFindOfType(children, TableSetupComponent)?.props;\n const tableColumnProps = deepFilterByType(children, TableColumn<never>).map(\n (c) => ({\n ...c.props,\n name: c.props.children,\n }),\n );\n const tableCellProps = deepFilterByType(children, TableCell<never>).map(\n (c) => ({\n ...c.props,\n renderFn: c.props.children,\n }),\n );\n\n const tableRowProps = deepFindOfType(children, TableRow)?.props;\n const tableHeaderProps = deepFindOfType(children, TableHeader)?.props;\n const tableBodyProps = deepFindOfType(children, TableBody)?.props;\n\n const listModel = ListModel.useNew<never>({\n onChange,\n loader: loaderShape,\n filters: deepFilterByType(children, ListFilter<never, never, never>).map(\n (f) => ({\n ...f.props,\n renderItem: f.props.children,\n }),\n ),\n search: searchProps\n ? {\n render: searchProps.children,\n textFieldProps: searchProps,\n defaultValue: searchProps.defaultValue,\n }\n : undefined,\n sorting: deepFilterByType(children, ListSorting<never>).map((s) => s.props),\n\n itemView: itemViewProps\n ? {\n ...itemViewProps,\n renderFn: itemViewProps.children,\n }\n : undefined,\n\n table:\n tableColumnProps.length > 0\n ? {\n header: {\n ...tableHeaderProps,\n columns: tableColumnProps,\n },\n body: {\n ...tableBodyProps,\n row: {\n ...tableRowProps,\n cells: tableCellProps,\n },\n },\n ...tableProps,\n }\n : undefined,\n\n batchesController: {\n batchSize,\n },\n ...restProps,\n });\n\n const propsContext: PropsContext = {\n ActionGroup: {\n tunnelId: \"actions\",\n },\n ListSummary: {\n tunnelId: \"listSummary\",\n },\n };\n\n const hasActionGroup = deepHas(children, ActionGroup);\n\n return (\n <PropsContextProvider props={propsContext}>\n <TunnelProvider>\n <listContext.Provider\n value={{\n list: listModel,\n }}\n >\n <DataLoader />\n <DivView className={styles.list} ref={ref}>\n {children}\n <Header hasActionGroup={hasActionGroup} />\n\n <DivView className={styles.listWrapper}>\n {listModel.items.entries.length > 0 && (\n <TunnelExit id=\"listSummary\" />\n )}\n {(listModel.viewMode === \"list\" ||\n listModel.viewMode === \"tiles\") && <Items />}\n {listModel.viewMode === \"table\" && <Table />}\n </DivView>\n <Footer />\n </DivView>\n </listContext.Provider>\n </TunnelProvider>\n </PropsContextProvider>\n );\n});\n\nexport default List;\n"],"names":["TableSetupComponent","ListModel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"List.mjs","sources":["../../../../../../src/components/List/List.tsx"],"sourcesContent":["import { DataLoader } from \"@/components/List/components/DataLoader\";\nimport { Header } from \"@/components/List/components/Header/Header\";\nimport headerStyles from \"@/components/List/components/Header/Header.module.css\";\nimport { Items } from \"@/components/List/components/Items/Items\";\nimport { Table } from \"@/components/List/components/Table\";\nimport ListModel from \"@/components/List/model/List\";\nimport type { IncrementalLoaderShape } from \"@/components/List/model/loading/types\";\nimport type { ListShape } from \"@/components/List/model/types\";\nimport { ListFilter } from \"@/components/List/setupComponents/ListFilter\";\nimport { ListItem } from \"@/components/List/setupComponents/ListItem\";\nimport { ListLoaderAsync } from \"@/components/List/setupComponents/ListLoaderAsync\";\nimport { ListLoaderAsyncResource } from \"@/components/List/setupComponents/ListLoaderAsyncResource\";\nimport { ListSearch } from \"@/components/List/setupComponents/ListSearch\";\nimport { ListSorting } from \"@/components/List/setupComponents/ListSorting\";\nimport { ListStaticData } from \"@/components/List/setupComponents/ListStaticData\";\nimport { Table as TableSetupComponent } from \"@/components/List/setupComponents/Table\";\nimport { TableBody } from \"@/components/List/setupComponents/TableBody\";\nimport { TableCell } from \"@/components/List/setupComponents/TableCell\";\nimport { TableColumn } from \"@/components/List/setupComponents/TableColumn\";\nimport { TableHeader } from \"@/components/List/setupComponents/TableHeader\";\nimport { TableRow } from \"@/components/List/setupComponents/TableRow\";\nimport {\n flowComponent,\n type FlowComponentProps,\n} from \"@/lib/componentFactory/flowComponent\";\nimport { type PropsContext, PropsContextProvider } from \"@/lib/propsContext\";\nimport { deepFilterByType, deepFindOfType } from \"@/lib/react/deepFindOfType\";\nimport DivView from \"@/views/DivView\";\nimport { TunnelExit, TunnelProvider } from \"@mittwald/react-tunnel\";\nimport type { PropsWithChildren } from \"react\";\nimport Footer from \"./components/Footer\";\nimport styles from \"./List.module.css\";\nimport { listContext } from \"./listContext\";\n\nexport interface ListProps<T>\n extends PropsWithChildren,\n FlowComponentProps,\n Omit<\n ListShape<T>,\n | \"search\"\n | \"loader\"\n | \"itemView\"\n | \"table\"\n | \"batchesController\"\n | \"filters\"\n | \"sorting\"\n > {\n /** The number of items to be displayed on one page. */\n batchSize?: number;\n}\n\nexport const List = flowComponent(\"List\", (props) => {\n const { children, batchSize, onChange, ref, ...restProps } = props;\n\n const listLoaderAsync = deepFindOfType(\n children,\n ListLoaderAsync<never>,\n )?.props;\n const listLoaderAsyncResource = deepFindOfType(\n children,\n ListLoaderAsyncResource<never>,\n )?.props;\n const listStaticData = deepFindOfType(children, ListStaticData<never>)?.props;\n\n const loaderShape: IncrementalLoaderShape<never> = {\n source: listLoaderAsync\n ? {\n ...listLoaderAsync,\n asyncLoader: listLoaderAsync.children,\n }\n : listLoaderAsyncResource\n ? {\n ...listLoaderAsyncResource,\n asyncResourceFactory: listLoaderAsyncResource.children,\n }\n : listStaticData\n ? {\n staticData: listStaticData.data,\n }\n : undefined,\n };\n\n const searchProps = deepFindOfType(children, ListSearch)?.props;\n const itemViewProps = deepFindOfType(children, ListItem<never>)?.props;\n\n const tableProps = deepFindOfType(children, TableSetupComponent)?.props;\n const tableColumnProps = deepFilterByType(children, TableColumn<never>).map(\n (c) => ({\n ...c.props,\n name: c.props.children,\n }),\n );\n const tableCellProps = deepFilterByType(children, TableCell<never>).map(\n (c) => ({\n ...c.props,\n renderFn: c.props.children,\n }),\n );\n\n const tableRowProps = deepFindOfType(children, TableRow)?.props;\n const tableHeaderProps = deepFindOfType(children, TableHeader)?.props;\n const tableBodyProps = deepFindOfType(children, TableBody)?.props;\n\n const listModel = ListModel.useNew<never>({\n onChange,\n loader: loaderShape,\n filters: deepFilterByType(children, ListFilter<never, never, never>).map(\n (f) => ({\n ...f.props,\n renderItem: f.props.children,\n }),\n ),\n search: searchProps\n ? {\n render: searchProps.children,\n textFieldProps: searchProps,\n defaultValue: searchProps.defaultValue,\n }\n : undefined,\n sorting: deepFilterByType(children, ListSorting<never>).map((s) => s.props),\n\n itemView: itemViewProps\n ? {\n ...itemViewProps,\n renderFn: itemViewProps.children,\n }\n : undefined,\n\n table:\n tableColumnProps.length > 0\n ? {\n header: {\n ...tableHeaderProps,\n columns: tableColumnProps,\n },\n body: {\n ...tableBodyProps,\n row: {\n ...tableRowProps,\n cells: tableCellProps,\n },\n },\n ...tableProps,\n }\n : undefined,\n\n batchesController: {\n batchSize,\n },\n ...restProps,\n });\n\n const propsContext: PropsContext = {\n ActionGroup: {\n tunnelId: \"actions\",\n className: headerStyles.actions,\n Button: {\n className: headerStyles.action,\n },\n },\n ListSummary: {\n tunnelId: \"listSummary\",\n },\n };\n\n return (\n <PropsContextProvider props={propsContext}>\n <TunnelProvider>\n <listContext.Provider\n value={{\n list: listModel,\n }}\n >\n <DataLoader />\n <DivView className={styles.list} ref={ref}>\n {children}\n <Header />\n\n <DivView className={styles.listWrapper}>\n {listModel.items.entries.length > 0 && (\n <TunnelExit id=\"listSummary\" />\n )}\n {(listModel.viewMode === \"list\" ||\n listModel.viewMode === \"tiles\") && <Items />}\n {listModel.viewMode === \"table\" && <Table />}\n </DivView>\n <Footer />\n </DivView>\n </listContext.Provider>\n </TunnelProvider>\n </PropsContextProvider>\n );\n});\n\nexport default List;\n"],"names":["TableSetupComponent","ListModel"],"mappings":"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"}
|
|
@@ -1,35 +1,36 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
|
-
import {
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
4
|
import 'react';
|
|
5
|
-
import
|
|
6
|
-
import { FilterPicker } from './components/FilterPicker/FilterPicker.mjs';
|
|
7
|
-
import styles from './Header.module.css.mjs';
|
|
5
|
+
import headerStyles from './Header.module.css.mjs';
|
|
8
6
|
import clsx from 'clsx';
|
|
9
7
|
import { ActiveFilters } from './components/ActiveFilters/ActiveFilters.mjs';
|
|
10
8
|
import { useList } from '../../hooks/useList.mjs';
|
|
11
9
|
import { SearchField } from './components/SearchField/SearchField.mjs';
|
|
12
|
-
import { ViewModeMenu } from './components/
|
|
10
|
+
import { ViewModeMenu } from './components/Settings/ViewModeMenu.mjs';
|
|
13
11
|
import { TunnelExit } from '@mittwald/react-tunnel';
|
|
14
12
|
import DivView from '../../../../views/DivView.mjs';
|
|
13
|
+
import { SettingsMenu } from './components/Settings/SettingsMenu.mjs';
|
|
14
|
+
import { SortingMenu } from './components/Settings/SortingMenu.mjs';
|
|
15
|
+
import { FilterMenuList } from './components/Filters/FilterMenuList.mjs';
|
|
16
|
+
import { CombinedFilterMenu } from './components/Filters/CombinedFilterMenu.mjs';
|
|
17
|
+
import { useAvailableViewModes } from './lib.mjs';
|
|
15
18
|
|
|
16
19
|
const Header = (props) => {
|
|
17
|
-
const { className
|
|
20
|
+
const { className } = props;
|
|
18
21
|
const list = useList();
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
/* @__PURE__ */ jsxs(DivView, { className: styles.pickerList, children: [
|
|
22
|
+
const availableViewModes = useAvailableViewModes();
|
|
23
|
+
const hasOptions = list.filters.length > 0 || list.visibleSorting.length > 0 || list.search || availableViewModes.length > 1;
|
|
24
|
+
return /* @__PURE__ */ jsxs(DivView, { className: clsx(className, headerStyles.header), children: [
|
|
25
|
+
/* @__PURE__ */ jsxs(DivView, { className: headerStyles.headerContent, children: [
|
|
26
|
+
/* @__PURE__ */ jsx(TunnelExit, { id: "actions" }),
|
|
27
|
+
hasOptions && /* @__PURE__ */ jsxs(DivView, { className: headerStyles.options, children: [
|
|
26
28
|
/* @__PURE__ */ jsx(ViewModeMenu, {}),
|
|
27
|
-
/* @__PURE__ */ jsx(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
list.search && /* @__PURE__ */ jsx(SearchField, {
|
|
32
|
-
/* @__PURE__ */ jsx(TunnelExit, { id: "actions" })
|
|
29
|
+
/* @__PURE__ */ jsx(SortingMenu, {}),
|
|
30
|
+
/* @__PURE__ */ jsx(FilterMenuList, {}),
|
|
31
|
+
/* @__PURE__ */ jsx(SettingsMenu, {}),
|
|
32
|
+
/* @__PURE__ */ jsx(CombinedFilterMenu, {}),
|
|
33
|
+
list.search && /* @__PURE__ */ jsx(SearchField, { search: list.search })
|
|
33
34
|
] })
|
|
34
35
|
] }),
|
|
35
36
|
/* @__PURE__ */ jsx(ActiveFilters, {})
|
|
@@ -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
|
|
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 { ViewModeMenu } from \"@/components/List/components/Header/components/Settings/ViewModeMenu\";\nimport { TunnelExit } from \"@mittwald/react-tunnel\";\nimport DivView from \"@/views/DivView\";\nimport { SettingsMenu } from \"@/components/List/components/Header/components/Settings/SettingsMenu\";\nimport { SortingMenu } from \"@/components/List/components/Header/components/Settings/SortingMenu\";\nimport { FilterMenuList } from \"@/components/List/components/Header/components/Filters/FilterMenuList\";\nimport { CombinedFilterMenu } from \"@/components/List/components/Header/components/Filters/CombinedFilterMenu\";\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 className={clsx(className, styles.header)}>\n <DivView className={styles.headerContent}>\n <TunnelExit id=\"actions\" />\n {hasOptions && (\n <DivView className={styles.options}>\n {/* Desktop */}\n <ViewModeMenu />\n <SortingMenu />\n <FilterMenuList />\n\n {/* Mobile */}\n <SettingsMenu />\n <CombinedFilterMenu />\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":";;;;;;;;;;;;;;;;AAiBa,MAAA,MAAA,GAAiC,CAAC,KAAU,KAAA;AACvD,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA;AACtB,EAAA,MAAM,OAAO,OAAQ,EAAA;AAErB,EAAA,MAAM,qBAAqB,qBAAsB,EAAA;AAEjD,EAAA,MAAM,UACJ,GAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,GAAS,CACtB,IAAA,IAAA,CAAK,cAAe,CAAA,MAAA,GAAS,CAC7B,IAAA,IAAA,CAAK,MACL,IAAA,kBAAA,CAAmB,MAAS,GAAA,CAAA;AAE9B,EAAA,4BACG,OAAQ,EAAA,EAAA,SAAA,EAAW,KAAK,SAAW,EAAAA,YAAA,CAAO,MAAM,CAC/C,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,OAAA,EAAA,EAAQ,SAAW,EAAAA,YAAA,CAAO,aACzB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,IAAG,SAAU,EAAA,CAAA;AAAA,MACxB,UACC,oBAAA,IAAA,CAAC,OAAQ,EAAA,EAAA,SAAA,EAAWA,aAAO,OAEzB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,CAAA;AAAA,4BACb,WAAY,EAAA,EAAA,CAAA;AAAA,4BACZ,cAAe,EAAA,EAAA,CAAA;AAAA,4BAGf,YAAa,EAAA,EAAA,CAAA;AAAA,4BACb,kBAAmB,EAAA,EAAA,CAAA;AAAA,QAEnB,KAAK,MAAU,oBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,MAAA,EAAQ,KAAK,MAAQ,EAAA;AAAA,OACpD,EAAA;AAAA,KAEJ,EAAA,CAAA;AAAA,wBACC,aAAc,EAAA,EAAA;AAAA,GACjB,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
3
|
const header = "flow--list--header";
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
4
|
+
const headerContent = "flow--list--header--header-content";
|
|
5
|
+
const actions = "flow--list--header--actions";
|
|
6
|
+
const options = "flow--list--header--options";
|
|
7
|
+
const mobile = "flow--list--header--mobile";
|
|
8
|
+
const desktop = "flow--list--header--desktop";
|
|
9
|
+
const action = "flow--list--header--action";
|
|
10
|
+
const headerStyles = {
|
|
9
11
|
header: header,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
headerContent: headerContent,
|
|
13
|
+
actions: actions,
|
|
14
|
+
options: options,
|
|
15
|
+
mobile: mobile,
|
|
16
|
+
desktop: desktop,
|
|
17
|
+
action: action
|
|
14
18
|
};
|
|
15
19
|
|
|
16
|
-
export {
|
|
20
|
+
export { action, actions, headerStyles as default, desktop, header, headerContent, mobile, options };
|
|
17
21
|
//# sourceMappingURL=Header.module.css.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Header.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '@tabler/icons-react';
|
|
6
|
+
import '../../../../../Icon/Icon.mjs';
|
|
7
|
+
import '../../../../../../lib/viewComponentContext/viewComponentContext.mjs';
|
|
8
|
+
import { IconFilter } from '../../../../../Icon/components/icons/IconFilter.mjs';
|
|
9
|
+
import ButtonView from '../../../../../../views/ButtonView.mjs';
|
|
10
|
+
import { ContextMenu } from '../../../../../ContextMenu/ContextMenu.mjs';
|
|
11
|
+
import '../../../../../MenuItem/MenuItem.mjs';
|
|
12
|
+
import { ContextMenuTrigger } from '../../../../../ContextMenu/components/ContextMenuTrigger/ContextMenuTrigger.mjs';
|
|
13
|
+
import 'react-aria-components';
|
|
14
|
+
import { ContextMenuSection } from '../../../../../ContextMenu/components/ContextMenuSection/ContextMenuSection.mjs';
|
|
15
|
+
import 'invariant';
|
|
16
|
+
import 'luxon';
|
|
17
|
+
import 'clsx';
|
|
18
|
+
import '../../../../../../lib/propsContext/propsContext.mjs';
|
|
19
|
+
import '@mittwald/react-tunnel';
|
|
20
|
+
import '../../../../../../lib/slotContext/slotContext.mjs';
|
|
21
|
+
import '@react-aria/utils';
|
|
22
|
+
import 'remeda';
|
|
23
|
+
import 'dot-prop';
|
|
24
|
+
import '../../../../../Heading/Heading.mjs';
|
|
25
|
+
import '../../../../../Text/Text.mjs';
|
|
26
|
+
import locales from '../../../../../../../../_virtual/_.locale.json@8d5024994f97657f895a4e2a188d2d8a.mjs';
|
|
27
|
+
import { useLocalizedStringFormatter } from 'react-aria';
|
|
28
|
+
import '../../../../../ColumnLayout/ColumnLayout.mjs';
|
|
29
|
+
import '../../../ListSummary/ListSummary.mjs';
|
|
30
|
+
import { useList } from '../../../../hooks/useList.mjs';
|
|
31
|
+
import '../../../../List.mjs';
|
|
32
|
+
import HeadingView from '../../../../../../views/HeadingView.mjs';
|
|
33
|
+
import { Separator } from '../../../../../Separator/Separator.mjs';
|
|
34
|
+
import { FilterMenuItem } from './FilterMenuItem.mjs';
|
|
35
|
+
import headerStyles from '../../Header.module.css.mjs';
|
|
36
|
+
|
|
37
|
+
const CombinedFilterMenu = () => {
|
|
38
|
+
const list = useList();
|
|
39
|
+
const filters = list.filters;
|
|
40
|
+
const stringFormatter = useLocalizedStringFormatter(locales);
|
|
41
|
+
if (filters.length === 0) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return /* @__PURE__ */ jsxs(ContextMenuTrigger, { children: [
|
|
45
|
+
/* @__PURE__ */ jsx(
|
|
46
|
+
ButtonView,
|
|
47
|
+
{
|
|
48
|
+
className: headerStyles.mobile,
|
|
49
|
+
variant: "outline",
|
|
50
|
+
color: "secondary",
|
|
51
|
+
"aria-label": stringFormatter.format("list.filters"),
|
|
52
|
+
children: /* @__PURE__ */ jsx(IconFilter, {})
|
|
53
|
+
}
|
|
54
|
+
),
|
|
55
|
+
/* @__PURE__ */ jsx(ContextMenu, { children: filters.map((f, i) => {
|
|
56
|
+
const activeFilterKeys = f.values.filter((v) => v.isActive).map((v) => v.id);
|
|
57
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
58
|
+
/* @__PURE__ */ jsxs(
|
|
59
|
+
ContextMenuSection,
|
|
60
|
+
{
|
|
61
|
+
selectionMode: f.mode === "one" ? "single" : "multiple",
|
|
62
|
+
selectedKeys: activeFilterKeys,
|
|
63
|
+
children: [
|
|
64
|
+
/* @__PURE__ */ jsx(HeadingView, { children: f.name ?? f.property }),
|
|
65
|
+
f.values.map((v) => /* @__PURE__ */ jsx(FilterMenuItem, { filterValue: v }))
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
i + 1 < filters.length && /* @__PURE__ */ jsx(Separator, {})
|
|
70
|
+
] });
|
|
71
|
+
}) })
|
|
72
|
+
] });
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export { CombinedFilterMenu };
|
|
76
|
+
//# sourceMappingURL=CombinedFilterMenu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CombinedFilterMenu.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/Filters/CombinedFilterMenu.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport { IconFilter } from \"@/components/Icon/components/icons\";\nimport ButtonView from \"@/views/ButtonView\";\nimport ContextMenu, {\n ContextMenuSection,\n ContextMenuTrigger,\n} from \"@/components/ContextMenu\";\nimport { useList } from \"@/components/List\";\nimport HeadingView from \"@/views/HeadingView\";\nimport { Separator } from \"@/components/Separator\";\nimport { FilterMenuItem } from \"@/components/List/components/Header/components/Filters/FilterMenuItem\";\nimport styles from \"@/components/List/components/Header/Header.module.css\";\nimport { useLocalizedStringFormatter } from \"react-aria\";\nimport locales from \"../../../../locales/*.locale.json\";\n\nexport const CombinedFilterMenu: FC = () => {\n const list = useList();\n\n const filters = list.filters;\n\n const stringFormatter = useLocalizedStringFormatter(locales);\n\n if (filters.length === 0) {\n return null;\n }\n\n return (\n <ContextMenuTrigger>\n <ButtonView\n className={styles.mobile}\n variant=\"outline\"\n color=\"secondary\"\n aria-label={stringFormatter.format(\"list.filters\")}\n >\n <IconFilter />\n </ButtonView>\n <ContextMenu>\n {filters.map((f, i) => {\n const activeFilterKeys = f.values\n .filter((v) => v.isActive)\n .map((v) => v.id);\n\n return (\n <>\n <ContextMenuSection\n selectionMode={f.mode === \"one\" ? \"single\" : \"multiple\"}\n selectedKeys={activeFilterKeys}\n >\n <HeadingView>{f.name ?? f.property}</HeadingView>\n {f.values.map((v) => (\n <FilterMenuItem filterValue={v} />\n ))}\n </ContextMenuSection>\n {i + 1 < filters.length && <Separator />}\n </>\n );\n })}\n </ContextMenu>\n </ContextMenuTrigger>\n );\n};\n"],"names":["styles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,MAAM,qBAAyB,MAAM;AAC1C,EAAA,MAAM,OAAO,OAAQ,EAAA;AAErB,EAAA,MAAM,UAAU,IAAK,CAAA,OAAA;AAErB,EAAM,MAAA,eAAA,GAAkB,4BAA4B,OAAO,CAAA;AAE3D,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,4BACG,kBACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,WAAWA,YAAO,CAAA,MAAA;AAAA,QAClB,OAAQ,EAAA,SAAA;AAAA,QACR,KAAM,EAAA,WAAA;AAAA,QACN,YAAA,EAAY,eAAgB,CAAA,MAAA,CAAO,cAAc,CAAA;AAAA,QAEjD,8BAAC,UAAW,EAAA,EAAA;AAAA;AAAA,KACd;AAAA,wBACC,WACE,EAAA,EAAA,QAAA,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,GAAG,CAAM,KAAA;AACrB,MAAA,MAAM,gBAAmB,GAAA,CAAA,CAAE,MACxB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAE,CAAA,QAAQ,CACxB,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAElB,MAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,aAAe,EAAA,CAAA,CAAE,IAAS,KAAA,KAAA,GAAQ,QAAW,GAAA,UAAA;AAAA,YAC7C,YAAc,EAAA,gBAAA;AAAA,YAEd,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,WAAa,EAAA,EAAA,QAAA,EAAA,CAAA,CAAE,IAAQ,IAAA,CAAA,CAAE,QAAS,EAAA,CAAA;AAAA,cAClC,CAAA,CAAE,OAAO,GAAI,CAAA,CAAC,sBACZ,GAAA,CAAA,cAAA,EAAA,EAAe,WAAa,EAAA,CAAA,EAAG,CACjC;AAAA;AAAA;AAAA,SACH;AAAA,QACC,CAAI,GAAA,CAAA,GAAI,OAAQ,CAAA,MAAA,wBAAW,SAAU,EAAA,EAAA;AAAA,OACxC,EAAA,CAAA;AAAA,KAEH,CACH,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -6,7 +6,6 @@ import '@tabler/icons-react';
|
|
|
6
6
|
import '../../../../../Icon/Icon.mjs';
|
|
7
7
|
import '../../../../../../lib/viewComponentContext/viewComponentContext.mjs';
|
|
8
8
|
import { IconFilter } from '../../../../../Icon/components/icons/IconFilter.mjs';
|
|
9
|
-
import MenuItemView from '../../../../../../views/MenuItemView.mjs';
|
|
10
9
|
import TextView from '../../../../../../views/TextView.mjs';
|
|
11
10
|
import ButtonView from '../../../../../../views/ButtonView.mjs';
|
|
12
11
|
import { ContextMenu } from '../../../../../ContextMenu/ContextMenu.mjs';
|
|
@@ -14,37 +13,37 @@ import '../../../../../MenuItem/MenuItem.mjs';
|
|
|
14
13
|
import { ContextMenuTrigger } from '../../../../../ContextMenu/components/ContextMenuTrigger/ContextMenuTrigger.mjs';
|
|
15
14
|
import 'react-aria-components';
|
|
16
15
|
import '../../../../../ContextMenu/components/ContextMenuSection/ContextMenuSection.mjs';
|
|
16
|
+
import { FilterMenuItem } from './FilterMenuItem.mjs';
|
|
17
|
+
import headerStyles from '../../Header.module.css.mjs';
|
|
17
18
|
|
|
18
|
-
const
|
|
19
|
+
const FilterMenu = (props) => {
|
|
19
20
|
const { filter } = props;
|
|
20
21
|
const { values, mode, name, property } = filter;
|
|
21
|
-
const
|
|
22
|
-
MenuItemView,
|
|
23
|
-
{
|
|
24
|
-
id: v.id,
|
|
25
|
-
onAction: () => {
|
|
26
|
-
v.toggle();
|
|
27
|
-
},
|
|
28
|
-
children: v.render()
|
|
29
|
-
},
|
|
30
|
-
v.id
|
|
31
|
-
));
|
|
22
|
+
const filterItems = values.map((v) => /* @__PURE__ */ jsx(FilterMenuItem, { filterValue: v }));
|
|
32
23
|
const activeFilterKeys = values.filter((v) => v.isActive).map((v) => v.id);
|
|
33
24
|
return /* @__PURE__ */ jsxs(ContextMenuTrigger, { children: [
|
|
34
|
-
/* @__PURE__ */ jsxs(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
/* @__PURE__ */ jsxs(
|
|
26
|
+
ButtonView,
|
|
27
|
+
{
|
|
28
|
+
className: headerStyles.desktop,
|
|
29
|
+
variant: "outline",
|
|
30
|
+
color: "secondary",
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ jsx(TextView, { children: name ?? property }),
|
|
33
|
+
/* @__PURE__ */ jsx(IconFilter, {})
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
),
|
|
38
37
|
/* @__PURE__ */ jsx(
|
|
39
38
|
ContextMenu,
|
|
40
39
|
{
|
|
41
40
|
selectionMode: mode === "one" ? "single" : "multiple",
|
|
42
41
|
selectedKeys: activeFilterKeys,
|
|
43
|
-
children:
|
|
42
|
+
children: filterItems
|
|
44
43
|
}
|
|
45
44
|
)
|
|
46
45
|
] });
|
|
47
46
|
};
|
|
48
47
|
|
|
49
|
-
export {
|
|
50
|
-
//# sourceMappingURL=
|
|
48
|
+
export { FilterMenu };
|
|
49
|
+
//# sourceMappingURL=FilterMenu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterMenu.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/Filters/FilterMenu.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport type { Filter } from \"@/components/List/model/filter/Filter\";\nimport { IconFilter } from \"@/components/Icon/components/icons\";\nimport TextView from \"@/views/TextView\";\nimport ButtonView from \"@/views/ButtonView\";\nimport ContextMenu, { ContextMenuTrigger } from \"@/components/ContextMenu\";\nimport { FilterMenuItem } from \"@/components/List/components/Header/components/Filters/FilterMenuItem\";\nimport styles from \"@/components/List/components/Header/Header.module.css\";\n\ninterface Props {\n filter: Filter<never, never, never>;\n}\n\nexport const FilterMenu: FC<Props> = (props) => {\n const { filter } = props;\n\n const { values, mode, name, property } = filter;\n\n const filterItems = values.map((v) => <FilterMenuItem filterValue={v} />);\n\n const activeFilterKeys = values.filter((v) => v.isActive).map((v) => v.id);\n\n return (\n <ContextMenuTrigger>\n <ButtonView\n className={styles.desktop}\n variant=\"outline\"\n color=\"secondary\"\n >\n <TextView>{name ?? property}</TextView>\n <IconFilter />\n </ButtonView>\n <ContextMenu\n selectionMode={mode === \"one\" ? \"single\" : \"multiple\"}\n selectedKeys={activeFilterKeys}\n >\n {filterItems}\n </ContextMenu>\n </ContextMenuTrigger>\n );\n};\n"],"names":["styles"],"mappings":";;;;;;;;;;;;;;;;AAca,MAAA,UAAA,GAAwB,CAAC,KAAU,KAAA;AAC9C,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AAEnB,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAM,EAAA,IAAA,EAAM,UAAa,GAAA,MAAA;AAEzC,EAAM,MAAA,WAAA,GAAc,OAAO,GAAI,CAAA,CAAC,sBAAO,GAAA,CAAA,cAAA,EAAA,EAAe,WAAa,EAAA,CAAA,EAAG,CAAE,CAAA;AAExE,EAAA,MAAM,gBAAmB,GAAA,MAAA,CAAO,MAAO,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,QAAQ,CAAA,CAAE,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,EAAE,CAAA;AAEzE,EAAA,4BACG,kBACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,WAAWA,YAAO,CAAA,OAAA;AAAA,QAClB,OAAQ,EAAA,SAAA;AAAA,QACR,KAAM,EAAA,WAAA;AAAA,QAEN,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,QAAA,EAAA,EAAU,kBAAQ,QAAS,EAAA,CAAA;AAAA,8BAC3B,UAAW,EAAA,EAAA;AAAA;AAAA;AAAA,KACd;AAAA,oBACA,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAe,IAAS,KAAA,KAAA,GAAQ,QAAW,GAAA,UAAA;AAAA,QAC3C,YAAc,EAAA,gBAAA;AAAA,QAEb,QAAA,EAAA;AAAA;AAAA;AACH,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import MenuItemView from '../../../../../../views/MenuItemView.mjs';
|
|
5
|
+
import 'react';
|
|
6
|
+
|
|
7
|
+
const FilterMenuItem = (props) => {
|
|
8
|
+
const { filterValue } = props;
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
MenuItemView,
|
|
11
|
+
{
|
|
12
|
+
id: filterValue.id,
|
|
13
|
+
onAction: () => {
|
|
14
|
+
filterValue.toggle();
|
|
15
|
+
},
|
|
16
|
+
children: filterValue.render()
|
|
17
|
+
},
|
|
18
|
+
filterValue.id
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { FilterMenuItem };
|
|
23
|
+
//# sourceMappingURL=FilterMenuItem.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterMenuItem.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/Filters/FilterMenuItem.tsx"],"sourcesContent":["import MenuItemView from \"@/views/MenuItemView\";\nimport React, { type FC } from \"react\";\nimport type { FilterValue } from \"@/components/List/model/filter/FilterValue\";\n\ninterface Props {\n filterValue: FilterValue;\n}\n\nexport const FilterMenuItem: FC<Props> = (props) => {\n const { filterValue } = props;\n\n return (\n <MenuItemView\n id={filterValue.id}\n key={filterValue.id}\n onAction={() => {\n filterValue.toggle();\n }}\n >\n {filterValue.render()}\n </MenuItemView>\n );\n};\n"],"names":[],"mappings":";;;;AAQa,MAAA,cAAA,GAA4B,CAAC,KAAU,KAAA;AAClD,EAAM,MAAA,EAAE,aAAgB,GAAA,KAAA;AAExB,EACE,uBAAA,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,IAAI,WAAY,CAAA,EAAA;AAAA,MAEhB,UAAU,MAAM;AACd,QAAA,WAAA,CAAY,MAAO,EAAA;AAAA,OACrB;AAAA,MAEC,sBAAY,MAAO;AAAA,KAAA;AAAA,IALf,WAAY,CAAA;AAAA,GAMnB;AAEJ;;;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import 'invariant';
|
|
6
|
+
import 'luxon';
|
|
7
|
+
import 'react-aria-components';
|
|
8
|
+
import 'clsx';
|
|
9
|
+
import '../../../../../../lib/propsContext/propsContext.mjs';
|
|
10
|
+
import '../../../../../../lib/viewComponentContext/viewComponentContext.mjs';
|
|
11
|
+
import '@mittwald/react-tunnel';
|
|
12
|
+
import '../../../../../../lib/slotContext/slotContext.mjs';
|
|
13
|
+
import '@react-aria/utils';
|
|
14
|
+
import 'remeda';
|
|
15
|
+
import 'dot-prop';
|
|
16
|
+
import '@tabler/icons-react';
|
|
17
|
+
import '../../../../../Icon/Icon.mjs';
|
|
18
|
+
import '../../../../../Heading/Heading.mjs';
|
|
19
|
+
import '../../../../../Text/Text.mjs';
|
|
20
|
+
import 'react-aria';
|
|
21
|
+
import '../../../../../Button/Button.mjs';
|
|
22
|
+
import '../../../../../ContextMenu/ContextMenu.mjs';
|
|
23
|
+
import '../../../../../MenuItem/MenuItem.mjs';
|
|
24
|
+
import '../../../../../ContextMenu/components/ContextMenuTrigger/ContextMenuTrigger.mjs';
|
|
25
|
+
import '../../../../../ContextMenu/components/ContextMenuSection/ContextMenuSection.mjs';
|
|
26
|
+
import '../../../../../ColumnLayout/ColumnLayout.mjs';
|
|
27
|
+
import '../../../ListSummary/ListSummary.mjs';
|
|
28
|
+
import { useList } from '../../../../hooks/useList.mjs';
|
|
29
|
+
import '../../../../List.mjs';
|
|
30
|
+
import { FilterMenu } from './FilterMenu.mjs';
|
|
31
|
+
|
|
32
|
+
const FilterMenuList = () => {
|
|
33
|
+
const list = useList();
|
|
34
|
+
return list.filters.map((filter) => /* @__PURE__ */ jsx(FilterMenu, { filter }, filter.property));
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { FilterMenuList };
|
|
38
|
+
//# sourceMappingURL=FilterMenuList.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterMenuList.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/Filters/FilterMenuList.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport { useList } from \"@/components/List\";\nimport { FilterMenu } from \"@/components/List/components/Header/components/Filters/FilterMenu\";\n\nexport const FilterMenuList: FC = () => {\n const list = useList();\n\n return list.filters.map((filter) => (\n <FilterMenu key={filter.property} filter={filter} />\n ));\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,MAAM,iBAAqB,MAAM;AACtC,EAAA,MAAM,OAAO,OAAQ,EAAA;AAErB,EAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAA,yBACtB,UAAiC,EAAA,EAAA,MAAA,EAAA,EAAjB,MAAO,CAAA,QAA0B,CACnD,CAAA;AACH;;;;"}
|
|
@@ -13,10 +13,11 @@ import '../../../../../../lib/slotContext/slotContext.mjs';
|
|
|
13
13
|
import '../../../../../../lib/viewComponentContext/viewComponentContext.mjs';
|
|
14
14
|
import 'dot-prop';
|
|
15
15
|
import SearchFieldView from '../../../../../../views/SearchFieldView.mjs';
|
|
16
|
+
import styles from './SearchField.module.scss.mjs';
|
|
16
17
|
|
|
17
18
|
const autoSubmitTimeout = 800;
|
|
18
19
|
const DefaultSearchFieldRender = (props) => {
|
|
19
|
-
const {
|
|
20
|
+
const { onChange, value, autoSubmit, ...searchFieldProps } = props;
|
|
20
21
|
const [searchString, setSearchString] = useState(value ?? "");
|
|
21
22
|
const submitSearch = () => {
|
|
22
23
|
if (searchString.trim() === "") {
|
|
@@ -48,7 +49,7 @@ const DefaultSearchFieldRender = (props) => {
|
|
|
48
49
|
return /* @__PURE__ */ jsx(
|
|
49
50
|
SearchFieldView,
|
|
50
51
|
{
|
|
51
|
-
className,
|
|
52
|
+
className: styles.searchField,
|
|
52
53
|
value: searchString,
|
|
53
54
|
onKeyUp: handleKeyPress,
|
|
54
55
|
onChange: (value2) => setSearchString(value2),
|
|
@@ -58,10 +59,9 @@ const DefaultSearchFieldRender = (props) => {
|
|
|
58
59
|
);
|
|
59
60
|
};
|
|
60
61
|
const SearchField = (props) => {
|
|
61
|
-
const {
|
|
62
|
+
const { search } = props;
|
|
62
63
|
const render = search.render ?? DefaultSearchFieldRender;
|
|
63
64
|
return createElement(render, {
|
|
64
|
-
className,
|
|
65
65
|
value: search.value,
|
|
66
66
|
onChange: search.setValue.bind(search),
|
|
67
67
|
...search.textFieldProps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchField.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/SearchField/SearchField.tsx"],"sourcesContent":["import type { FC, KeyboardEvent } from \"react\";\nimport React, { createElement, useEffect, useState } from \"react\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport type { Search } from \"@/components/List/model/search/Search\";\nimport type { SearchFieldRenderComponent } from \"@/components/List/model/search/types\";\nimport { useOnChange } from \"@/lib/hooks\";\nimport SearchFieldView from \"@/views/SearchFieldView\";\n\ninterface Props extends PropsWithClassName {\n search: Search<never>;\n}\n\nconst autoSubmitTimeout = 800;\n\nconst DefaultSearchFieldRender: SearchFieldRenderComponent = (props) => {\n const {
|
|
1
|
+
{"version":3,"file":"SearchField.mjs","sources":["../../../../../../../../../../src/components/List/components/Header/components/SearchField/SearchField.tsx"],"sourcesContent":["import type { FC, KeyboardEvent } from \"react\";\nimport React, { createElement, useEffect, useState } from \"react\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport type { Search } from \"@/components/List/model/search/Search\";\nimport type { SearchFieldRenderComponent } from \"@/components/List/model/search/types\";\nimport { useOnChange } from \"@/lib/hooks\";\nimport SearchFieldView from \"@/views/SearchFieldView\";\nimport styles from \"./SearchField.module.scss\";\n\ninterface Props extends PropsWithClassName {\n search: Search<never>;\n}\n\nconst autoSubmitTimeout = 800;\n\nconst DefaultSearchFieldRender: SearchFieldRenderComponent = (props) => {\n const { onChange, value, autoSubmit, ...searchFieldProps } = props;\n\n const [searchString, setSearchString] = useState(value ?? \"\");\n\n const submitSearch = () => {\n if (searchString.trim() === \"\") {\n onChange(undefined);\n } else {\n onChange(searchString);\n }\n };\n\n useEffect(() => {\n if (autoSubmit) {\n const timeout = setTimeout(() => submitSearch(), autoSubmitTimeout);\n return () => clearTimeout(timeout);\n }\n }, [searchString, autoSubmit]);\n\n useOnChange(value, () => {\n setSearchString(value ?? \"\");\n }, [searchString]);\n\n const clearSearch = () => {\n onChange(undefined);\n setSearchString(\"\");\n };\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n submitSearch();\n } else if (e.key === \"Escape\") {\n clearSearch();\n }\n };\n\n return (\n <SearchFieldView\n className={styles.searchField}\n value={searchString}\n onKeyUp={handleKeyPress}\n onChange={(value) => setSearchString(value)}\n onClear={clearSearch}\n {...searchFieldProps}\n />\n );\n};\n\nexport const SearchField: FC<Props> = (props) => {\n const { search } = props;\n const render = search.render ?? DefaultSearchFieldRender;\n\n return createElement(render, {\n value: search.value,\n onChange: search.setValue.bind(search),\n ...search.textFieldProps,\n });\n};\n"],"names":["value"],"mappings":";;;;;;;;;;;;;;;AAaA,MAAM,iBAAoB,GAAA,GAAA;AAE1B,MAAM,wBAAA,GAAuD,CAAC,KAAU,KAAA;AACtE,EAAA,MAAM,EAAE,QAAU,EAAA,KAAA,EAAO,UAAY,EAAA,GAAG,kBAAqB,GAAA,KAAA;AAE7D,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAAS,SAAS,EAAE,CAAA;AAE5D,EAAA,MAAM,eAAe,MAAM;AACzB,IAAI,IAAA,YAAA,CAAa,IAAK,EAAA,KAAM,EAAI,EAAA;AAC9B,MAAA,QAAA,CAAS,MAAS,CAAA;AAAA,KACb,MAAA;AACL,MAAA,QAAA,CAAS,YAAY,CAAA;AAAA;AACvB,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,MAAM,OAAU,GAAA,UAAA,CAAW,MAAM,YAAA,IAAgB,iBAAiB,CAAA;AAClE,MAAO,OAAA,MAAM,aAAa,OAAO,CAAA;AAAA;AACnC,GACC,EAAA,CAAC,YAAc,EAAA,UAAU,CAAC,CAAA;AAE7B,EAAA,WAAA,CAAY,OAAO,MAAM;AACvB,IAAA,eAAA,CAAgB,SAAS,EAAE,CAAA;AAAA,GAC7B,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,QAAA,CAAS,MAAS,CAAA;AAClB,IAAA,eAAA,CAAgB,EAAE,CAAA;AAAA,GACpB;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAqB,KAAA;AAC3C,IAAI,IAAA,CAAA,CAAE,QAAQ,OAAS,EAAA;AACrB,MAAa,YAAA,EAAA;AAAA,KACf,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,QAAU,EAAA;AAC7B,MAAY,WAAA,EAAA;AAAA;AACd,GACF;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,WAAW,MAAO,CAAA,WAAA;AAAA,MAClB,KAAO,EAAA,YAAA;AAAA,MACP,OAAS,EAAA,cAAA;AAAA,MACT,QAAU,EAAA,CAACA,MAAU,KAAA,eAAA,CAAgBA,MAAK,CAAA;AAAA,MAC1C,OAAS,EAAA,WAAA;AAAA,MACR,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AAEa,MAAA,WAAA,GAAyB,CAAC,KAAU,KAAA;AAC/C,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,EAAM,MAAA,MAAA,GAAS,OAAO,MAAU,IAAA,wBAAA;AAEhC,EAAA,OAAO,cAAc,MAAQ,EAAA;AAAA,IAC3B,OAAO,MAAO,CAAA,KAAA;AAAA,IACd,QAAU,EAAA,MAAA,CAAO,QAAS,CAAA,IAAA,CAAK,MAAM,CAAA;AAAA,IACrC,GAAG,MAAO,CAAA;AAAA,GACX,CAAA;AACH;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchField.module.scss.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|