@open-pioneer/toc 0.8.0 → 0.9.0-dev.20250220091855
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 +30 -0
- package/README.md +21 -1
- package/i18n/de.yaml +4 -0
- package/i18n/en.yaml +4 -0
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/model/TocModel.d.ts +76 -0
- package/model/TocModel.js +14 -0
- package/model/TocModel.js.map +1 -0
- package/package.json +5 -4
- package/ui/LayerList/LayerItem.d.ts +9 -0
- package/ui/LayerList/LayerItem.js +153 -0
- package/ui/LayerList/LayerItem.js.map +1 -0
- package/ui/LayerList/LayerItemMenu.d.ts +8 -0
- package/ui/LayerList/LayerItemMenu.js +43 -0
- package/ui/LayerList/LayerItemMenu.js.map +1 -0
- package/ui/LayerList/LayerList.d.ts +18 -0
- package/ui/LayerList/LayerList.js +37 -0
- package/ui/LayerList/LayerList.js.map +1 -0
- package/ui/LayerList/hooks.d.ts +10 -0
- package/ui/LayerList/hooks.js +26 -0
- package/ui/LayerList/hooks.js.map +1 -0
- package/{Toc.d.ts → ui/Toc.d.ts} +25 -1
- package/ui/Toc.js +137 -0
- package/ui/Toc.js.map +1 -0
- package/{Tools.d.ts → ui/Tools.d.ts} +3 -2
- package/ui/Tools.js +82 -0
- package/ui/Tools.js.map +1 -0
- package/utils/slug.d.ts +5 -0
- package/utils/slug.js +6 -0
- package/utils/slug.js.map +1 -0
- package/Context.d.ts +0 -11
- package/Context.js +0 -14
- package/Context.js.map +0 -1
- package/LayerList.d.ts +0 -10
- package/LayerList.js +0 -168
- package/LayerList.js.map +0 -1
- package/Toc.js +0 -80
- package/Toc.js.map +0 -1
- package/Tools.js +0 -52
- package/Tools.js.map +0 -1
package/Toc.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { BasemapSwitcher } from '@open-pioneer/basemap-switcher';
|
|
3
|
-
import { Box, Flex, Text, Spacer } from '@open-pioneer/chakra-integration';
|
|
4
|
-
import { useMapModel } from '@open-pioneer/map';
|
|
5
|
-
import { useCommonComponentProps, TitledSection, SectionHeading } from '@open-pioneer/react-utils';
|
|
6
|
-
import { useIntl } from './_virtual/_virtual-pioneer-module_react-hooks.js';
|
|
7
|
-
import { useId, useMemo } from 'react';
|
|
8
|
-
import { TocWidgetOptionsProvider } from './Context.js';
|
|
9
|
-
import { LayerList } from './LayerList.js';
|
|
10
|
-
import { Tools } from './Tools.js';
|
|
11
|
-
|
|
12
|
-
const PADDING = 2;
|
|
13
|
-
const Toc = (props) => {
|
|
14
|
-
const intl = useIntl();
|
|
15
|
-
const {
|
|
16
|
-
showTools = false,
|
|
17
|
-
toolsConfig,
|
|
18
|
-
showBasemapSwitcher = true,
|
|
19
|
-
basemapSwitcherProps,
|
|
20
|
-
autoShowParents = true
|
|
21
|
-
} = props;
|
|
22
|
-
const { containerProps } = useCommonComponentProps("toc", props);
|
|
23
|
-
const basemapsHeadingId = useId();
|
|
24
|
-
const options = useMemo(() => ({ autoShowParents }), [autoShowParents]);
|
|
25
|
-
const state = useMapModel(props);
|
|
26
|
-
let content;
|
|
27
|
-
switch (state.kind) {
|
|
28
|
-
case "loading":
|
|
29
|
-
content = null;
|
|
30
|
-
break;
|
|
31
|
-
case "rejected":
|
|
32
|
-
content = /* @__PURE__ */ jsx(Text, { className: "toc-error", children: intl.formatMessage({ id: "error" }) });
|
|
33
|
-
break;
|
|
34
|
-
case "resolved": {
|
|
35
|
-
const map = state.map;
|
|
36
|
-
const basemapSwitcher = showBasemapSwitcher && /* @__PURE__ */ jsx(Box, { className: "toc-basemap-switcher", children: /* @__PURE__ */ jsx(
|
|
37
|
-
TitledSection,
|
|
38
|
-
{
|
|
39
|
-
title: /* @__PURE__ */ jsx(SectionHeading, { id: basemapsHeadingId, size: "sm", mb: PADDING, children: intl.formatMessage({ id: "basemapsLabel" }) }),
|
|
40
|
-
children: /* @__PURE__ */ jsx(
|
|
41
|
-
BasemapSwitcher,
|
|
42
|
-
{
|
|
43
|
-
map,
|
|
44
|
-
"aria-labelledby": basemapsHeadingId,
|
|
45
|
-
...basemapSwitcherProps
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
}
|
|
49
|
-
) });
|
|
50
|
-
const layerList = /* @__PURE__ */ jsx(Box, { className: "toc-operational-layers", children: /* @__PURE__ */ jsx(
|
|
51
|
-
TitledSection,
|
|
52
|
-
{
|
|
53
|
-
title: /* @__PURE__ */ jsx(SectionHeading, { size: "sm", mb: 2, children: /* @__PURE__ */ jsxs(Flex, { children: [
|
|
54
|
-
/* @__PURE__ */ jsx(Text, { my: 3, children: intl.formatMessage({
|
|
55
|
-
id: "operationalLayerLabel"
|
|
56
|
-
}) }),
|
|
57
|
-
/* @__PURE__ */ jsx(Spacer, {}),
|
|
58
|
-
showTools && /* @__PURE__ */ jsx(Tools, { map, ...toolsConfig })
|
|
59
|
-
] }) }),
|
|
60
|
-
children: /* @__PURE__ */ jsx(
|
|
61
|
-
LayerList,
|
|
62
|
-
{
|
|
63
|
-
map,
|
|
64
|
-
"aria-label": intl.formatMessage({ id: "operationalLayerLabel" })
|
|
65
|
-
}
|
|
66
|
-
)
|
|
67
|
-
}
|
|
68
|
-
) });
|
|
69
|
-
content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
70
|
-
basemapSwitcher,
|
|
71
|
-
layerList
|
|
72
|
-
] });
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return /* @__PURE__ */ jsx(Flex, { ...containerProps, direction: "column", gap: PADDING, children: /* @__PURE__ */ jsx(TocWidgetOptionsProvider, { value: options, children: content }) });
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
export { Toc };
|
|
80
|
-
//# sourceMappingURL=Toc.js.map
|
package/Toc.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Toc.js","sources":["Toc.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { BasemapSwitcher, BasemapSwitcherProps } from \"@open-pioneer/basemap-switcher\";\nimport { Box, Flex, Spacer, Text } from \"@open-pioneer/chakra-integration\";\nimport { MapModelProps, useMapModel } from \"@open-pioneer/map\";\nimport {\n CommonComponentProps,\n SectionHeading,\n TitledSection,\n useCommonComponentProps\n} from \"@open-pioneer/react-utils\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { FC, useId, useMemo } from \"react\";\nimport { TocWidgetOptions, TocWidgetOptionsProvider } from \"./Context\";\nimport { LayerList } from \"./LayerList\";\nimport { Tools } from \"./Tools\";\n\n/**\n * Props supported by the {@link Toc} component.\n */\nexport interface TocProps extends CommonComponentProps, MapModelProps {\n /**\n * Defines whether the tool component is shown in the toc.\n * Defaults to `false`.\n */\n showTools?: boolean;\n\n /**\n * Properties for the embedded tool component.\n */\n toolsConfig?: ToolsConfig;\n\n /**\n * Defines whether the basemap switcher is shown in the toc.\n * Defaults to `true`.\n */\n showBasemapSwitcher?: boolean;\n\n /**\n * Properties for the embedded basemap switcher.\n * Property \"mapId\" is not applied.\n */\n basemapSwitcherProps?: Omit<BasemapSwitcherProps, \"mapId\">;\n\n /**\n * Show the parent layers when a child layer is made visible.\n * Defaults to `true`.\n */\n autoShowParents?: boolean;\n}\n\n/**\n * Props supported by the {@link Tools} component.\n */\nexport interface ToolsConfig {\n /**\n * Optional property to show the `hide all layers` entry.\n * Defaults to `true`.\n */\n showHideAllLayers?: boolean;\n}\n\nconst PADDING = 2;\n\n/**\n * Displays the layers of the configured map.\n */\nexport const Toc: FC<TocProps> = (props: TocProps) => {\n const intl = useIntl();\n const {\n showTools = false,\n toolsConfig,\n showBasemapSwitcher = true,\n basemapSwitcherProps,\n autoShowParents = true\n } = props;\n const { containerProps } = useCommonComponentProps(\"toc\", props);\n const basemapsHeadingId = useId();\n const options = useMemo((): TocWidgetOptions => ({ autoShowParents }), [autoShowParents]);\n const state = useMapModel(props);\n\n let content: JSX.Element | null;\n switch (state.kind) {\n case \"loading\":\n content = null;\n break;\n case \"rejected\":\n content = <Text className=\"toc-error\">{intl.formatMessage({ id: \"error\" })}</Text>;\n break;\n case \"resolved\": {\n const map = state.map;\n const basemapSwitcher = showBasemapSwitcher && (\n <Box className=\"toc-basemap-switcher\">\n <TitledSection\n title={\n <SectionHeading id={basemapsHeadingId} size={\"sm\"} mb={PADDING}>\n {intl.formatMessage({ id: \"basemapsLabel\" })}\n </SectionHeading>\n }\n >\n <BasemapSwitcher\n map={map}\n aria-labelledby={basemapsHeadingId}\n {...basemapSwitcherProps}\n />\n </TitledSection>\n </Box>\n );\n const layerList = (\n <Box className=\"toc-operational-layers\">\n <TitledSection\n title={\n <SectionHeading size={\"sm\"} mb={2}>\n <Flex>\n <Text my={3}>\n {intl.formatMessage({\n id: \"operationalLayerLabel\"\n })}\n </Text>\n <Spacer />\n {showTools && <Tools map={map} {...toolsConfig} />}\n </Flex>\n </SectionHeading>\n }\n >\n <LayerList\n map={map}\n aria-label={intl.formatMessage({ id: \"operationalLayerLabel\" })}\n />\n </TitledSection>\n </Box>\n );\n\n content = (\n <>\n {basemapSwitcher}\n {layerList}\n </>\n );\n break;\n }\n }\n\n return (\n <Flex {...containerProps} direction=\"column\" gap={PADDING}>\n <TocWidgetOptionsProvider value={options}>{content}</TocWidgetOptionsProvider>\n </Flex>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/Tools.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { Box, Menu, MenuButton, Button, Portal, MenuList, MenuItem } from '@open-pioneer/chakra-integration';
|
|
3
|
-
import { useIntl } from './_virtual/_virtual-pioneer-module_react-hooks.js';
|
|
4
|
-
import { FiMoreVertical } from 'react-icons/fi';
|
|
5
|
-
|
|
6
|
-
const Tools = (props) => {
|
|
7
|
-
const intl = useIntl();
|
|
8
|
-
const { map, showHideAllLayers = true } = props;
|
|
9
|
-
const noEntry = !showHideAllLayers;
|
|
10
|
-
return !noEntry && /* @__PURE__ */ jsx(Box, { className: "toc-tools", children: /* @__PURE__ */ jsxs(Menu, { placement: "bottom-start", children: [
|
|
11
|
-
/* @__PURE__ */ jsx(
|
|
12
|
-
MenuButton,
|
|
13
|
-
{
|
|
14
|
-
as: Button,
|
|
15
|
-
className: "toc-tools-button",
|
|
16
|
-
"aria-label": intl.formatMessage({ id: "toolsLabel" }),
|
|
17
|
-
borderRadius: "full",
|
|
18
|
-
iconSpacing: 0,
|
|
19
|
-
padding: 3,
|
|
20
|
-
variant: "ghost",
|
|
21
|
-
leftIcon: /* @__PURE__ */ jsx(FiMoreVertical, {})
|
|
22
|
-
}
|
|
23
|
-
),
|
|
24
|
-
/* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(MenuList, { className: "tools-menu", children: /* @__PURE__ */ jsx(
|
|
25
|
-
MenuItem,
|
|
26
|
-
{
|
|
27
|
-
"aria-label": intl.formatMessage({ id: "tools.hideAllLayers" }),
|
|
28
|
-
onClick: () => {
|
|
29
|
-
hideAllLayers(map);
|
|
30
|
-
},
|
|
31
|
-
children: intl.formatMessage({ id: "tools.hideAllLayers" })
|
|
32
|
-
}
|
|
33
|
-
) }) })
|
|
34
|
-
] }) });
|
|
35
|
-
};
|
|
36
|
-
function hideAllLayers(map) {
|
|
37
|
-
const hide = (layer) => {
|
|
38
|
-
layer.setVisible(false);
|
|
39
|
-
const children = layer.children?.getItems();
|
|
40
|
-
if (children) {
|
|
41
|
-
for (const child of children) {
|
|
42
|
-
hide(child);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
map?.layers.getOperationalLayers().forEach((layer) => {
|
|
47
|
-
hide(layer);
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export { Tools };
|
|
52
|
-
//# sourceMappingURL=Tools.js.map
|
package/Tools.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tools.js","sources":["Tools.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport {\n Box,\n Button,\n Menu,\n MenuButton,\n MenuItem,\n MenuList,\n Portal\n} from \"@open-pioneer/chakra-integration\";\nimport { AnyLayer, MapModel } from \"@open-pioneer/map\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { FC } from \"react\";\nimport { FiMoreVertical } from \"react-icons/fi\";\nimport { ToolsConfig } from \"./Toc\";\n\nexport const Tools: FC<{ map: MapModel } & ToolsConfig> = (props) => {\n const intl = useIntl();\n const { map, showHideAllLayers = true } = props;\n\n const noEntry = !showHideAllLayers;\n\n return (\n !noEntry && (\n <Box className=\"toc-tools\">\n <Menu placement=\"bottom-start\">\n <MenuButton\n as={Button}\n className=\"toc-tools-button\"\n aria-label={intl.formatMessage({ id: \"toolsLabel\" })}\n borderRadius=\"full\"\n iconSpacing={0}\n padding={3}\n variant=\"ghost\"\n leftIcon={<FiMoreVertical />}\n />\n <Portal>\n <MenuList className=\"tools-menu\">\n <MenuItem\n aria-label={intl.formatMessage({ id: \"tools.hideAllLayers\" })}\n onClick={() => {\n hideAllLayers(map);\n }}\n >\n {intl.formatMessage({ id: \"tools.hideAllLayers\" })}\n </MenuItem>\n </MenuList>\n </Portal>\n </Menu>\n </Box>\n )\n );\n};\n\nfunction hideAllLayers(map: MapModel | undefined) {\n const hide = (layer: AnyLayer) => {\n layer.setVisible(false);\n\n const children = layer.children?.getItems();\n if (children) {\n for (const child of children) {\n hide(child);\n }\n }\n };\n\n map?.layers.getOperationalLayers().forEach((layer) => {\n hide(layer);\n });\n}\n"],"names":[],"mappings":";;;;;AAiBa,MAAA,KAAA,GAA6C,CAAC,KAAU,KAAA;AACjE,EAAA,MAAM,OAAO,OAAQ,EAAA,CAAA;AACrB,EAAA,MAAM,EAAE,GAAA,EAAK,iBAAoB,GAAA,IAAA,EAAS,GAAA,KAAA,CAAA;AAE1C,EAAA,MAAM,UAAU,CAAC,iBAAA,CAAA;AAEjB,EACI,OAAA,CAAC,2BACI,GAAA,CAAA,GAAA,EAAA,EAAI,WAAU,WACX,EAAA,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,cACZ,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACG,EAAI,EAAA,MAAA;AAAA,QACJ,SAAU,EAAA,kBAAA;AAAA,QACV,cAAY,IAAK,CAAA,aAAA,CAAc,EAAE,EAAA,EAAI,cAAc,CAAA;AAAA,QACnD,YAAa,EAAA,MAAA;AAAA,QACb,WAAa,EAAA,CAAA;AAAA,QACb,OAAS,EAAA,CAAA;AAAA,QACT,OAAQ,EAAA,OAAA;AAAA,QACR,QAAA,sBAAW,cAAe,EAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAC9B;AAAA,oBACC,GAAA,CAAA,MAAA,EAAA,EACG,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,WAAU,YAChB,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,cAAY,IAAK,CAAA,aAAA,CAAc,EAAE,EAAA,EAAI,uBAAuB,CAAA;AAAA,QAC5D,SAAS,MAAM;AACX,UAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AAAA,SACrB;AAAA,QAEC,QAAK,EAAA,IAAA,CAAA,aAAA,CAAc,EAAE,EAAA,EAAI,uBAAuB,CAAA;AAAA,OAAA;AAAA,OAEzD,CACJ,EAAA,CAAA;AAAA,GAAA,EACJ,CACJ,EAAA,CAAA,CAAA;AAGZ,EAAA;AAEA,SAAS,cAAc,GAA2B,EAAA;AAC9C,EAAM,MAAA,IAAA,GAAO,CAAC,KAAoB,KAAA;AAC9B,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA,CAAA;AAEtB,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,QAAA,EAAU,QAAS,EAAA,CAAA;AAC1C,IAAA,IAAI,QAAU,EAAA;AACV,MAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC1B,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OACd;AAAA,KACJ;AAAA,GACJ,CAAA;AAEA,EAAA,GAAA,EAAK,MAAO,CAAA,oBAAA,EAAuB,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AAClD,IAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,GACb,CAAA,CAAA;AACL;;;;"}
|