@open-pioneer/spatial-bookmarks 1.3.0-dev.20260512095810 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -3
- package/SpatialBookmarks.js +1 -2
- package/SpatialBookmarks.js.map +1 -1
- package/package.json +12 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
# @open-pioneer/spatial-bookmarks
|
|
2
2
|
|
|
3
|
-
## 1.3.0
|
|
3
|
+
## 1.3.0
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
7
|
- 9b5d5f3: Support for new common container props (role, aria-\*, data-\* and css)
|
|
8
|
-
- d54ccfd: Update to Chakra UI 3.
|
|
9
|
-
- 206b397: Update to trails core packages 4.
|
|
8
|
+
- d54ccfd: Update to Chakra UI 3.35.0
|
|
9
|
+
- 206b397: Update to trails core packages 4.6.0
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 0704cd6: Use `classnames` from `@open-pioneer/react-utils` instead of `classnames` package.
|
|
10
14
|
|
|
11
15
|
## 1.2.0
|
|
12
16
|
|
package/SpatialBookmarks.js
CHANGED
|
@@ -3,9 +3,8 @@ import { Flex, VStack, Field, Input, List, Icon, Center, Text, Spacer, IconButto
|
|
|
3
3
|
import { Alert } from '@open-pioneer/chakra-snippets/alert';
|
|
4
4
|
import { Tooltip } from '@open-pioneer/chakra-snippets/tooltip';
|
|
5
5
|
import { useMapModelValue } from '@open-pioneer/map';
|
|
6
|
-
import { useCommonComponentProps } from '@open-pioneer/react-utils';
|
|
6
|
+
import { useCommonComponentProps, classNames } from '@open-pioneer/react-utils';
|
|
7
7
|
import { useReactiveSnapshot } from '@open-pioneer/reactivity';
|
|
8
|
-
import classNames from 'classnames';
|
|
9
8
|
import { useService, useIntl } from './_virtual/hooks.js';
|
|
10
9
|
import { useState, useEffect, useRef } from 'react';
|
|
11
10
|
import { LuTrash, LuMap } from 'react-icons/lu';
|
package/SpatialBookmarks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpatialBookmarks.js","sources":["SpatialBookmarks.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport {\n Button,\n ButtonProps,\n Center,\n Field,\n Flex,\n Icon,\n IconButton,\n IconButtonProps,\n Input,\n List,\n Spacer,\n Text,\n VStack\n} from \"@chakra-ui/react\";\nimport { Alert } from \"@open-pioneer/chakra-snippets/alert\";\nimport { Tooltip } from \"@open-pioneer/chakra-snippets/tooltip\";\nimport { LocalStorageService } from \"@open-pioneer/local-storage\";\nimport { MapModel, MapModelProps, useMapModelValue } from \"@open-pioneer/map\";\nimport { CommonComponentProps, useCommonComponentProps } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport classNames from \"classnames\";\nimport { useIntl, useService } from \"open-pioneer:react-hooks\";\nimport { FC, KeyboardEvent, ReactNode, useEffect, useRef, useState } from \"react\";\nimport { LuMap, LuTrash } from \"react-icons/lu\";\nimport { Bookmark, SpatialBookmarkViewModel } from \"./SpatialBookmarksViewModel\";\n\ntype UIMode = \"list\" | \"create\" | \"delete\";\n\nexport interface SpatialBookmarksProps extends CommonComponentProps, MapModelProps {}\n\n/**\n * A component that allows the user to manage a set of spatial bookmarks.\n */\nexport const SpatialBookmarks: FC<SpatialBookmarksProps> = (props) => {\n const map = useMapModelValue(props);\n const localStorageService = useService<LocalStorageService>(\n \"local-storage.LocalStorageService\"\n );\n const viewModel = useViewModel(map, localStorageService);\n return viewModel && <SpatialBookmarkUI {...props} viewModel={viewModel} />;\n};\n\nfunction SpatialBookmarkUI(props: SpatialBookmarksProps & { viewModel: SpatialBookmarkViewModel }) {\n const { viewModel } = props;\n const intl = useIntl();\n const listItemNodes = useRef<HTMLElement[]>([]);\n const [scrollToLastItem, setScrollToLastItem] = useState(false);\n const bookmarks = useReactiveSnapshot(() => viewModel.bookmarks, [viewModel]);\n const [bookmarkName, setBookmarkName] = useState<string>(\"\");\n const isValidBookmarkName = bookmarkName.trim().length > 0; // use trim to avoid bookmarks with space character only\n const { containerProps } = useCommonComponentProps(\"spatial-bookmarks\", props);\n const [uiMode, setUiMode] = useState<UIMode>(\"list\");\n\n const clearBookmarks = () => {\n viewModel.deleteAllBookmarks();\n setUiMode(\"list\");\n };\n\n const addBookmark = () => {\n if (isValidBookmarkName) {\n viewModel.createBookmark(bookmarkName);\n setUiMode(\"list\");\n setBookmarkName(\"\");\n setScrollToLastItem(true);\n }\n };\n\n // Scroll to newly created bookmark after render\n useEffect(() => {\n if (scrollToLastItem) {\n const listItems = listItemNodes.current;\n if (listItems) {\n const lastItem = listItems[bookmarks.length - 1];\n lastItem?.scrollIntoView?.();\n }\n setScrollToLastItem(false);\n }\n }, [bookmarks, scrollToLastItem]);\n\n const deleteContent = () => (\n <VStack>\n <Alert\n rounded=\"md\"\n status=\"warning\"\n title={intl.formatMessage({ id: \"bookmark.alert.delete\" })}\n role=\"alert\"\n />\n <RemoveControls\n intl={intl}\n onClear={clearBookmarks}\n onCancel={() => setUiMode(\"list\")}\n />\n </VStack>\n );\n\n const createContent = () => (\n <VStack>\n <Alert\n rounded=\"md\"\n status=\"info\"\n title={intl.formatMessage({ id: \"bookmark.alert.create\" })}\n role=\"alert\"\n />\n <Field.Root invalid={!isValidBookmarkName} required>\n <Input\n aria-label={intl.formatMessage({ id: \"bookmark.input.label\" })}\n placeholder={intl.formatMessage({ id: \"bookmark.input.placeholder\" })}\n value={bookmarkName}\n onChange={(event) => {\n setBookmarkName(event.target.value);\n }}\n onKeyDown={(e) => {\n // add bookmark only, if valid bookmark name exists\n if (e.key === \"Enter\") {\n addBookmark();\n }\n }}\n autoFocus // eslint-disable-line jsx-a11y/no-autofocus\n />\n </Field.Root>\n <CreateControls\n intl={intl}\n isInvalid={!isValidBookmarkName}\n onCancel={() => {\n setBookmarkName(\"\");\n setUiMode(\"list\");\n }}\n onSave={addBookmark}\n />\n </VStack>\n );\n\n const listContent = () => (\n <>\n {bookmarks.length ? (\n createList(bookmarks, viewModel, intl, listItemNodes)\n ) : (\n <Alert\n rounded=\"md\"\n status=\"info\"\n title={intl.formatMessage({ id: \"bookmark.alert.noSaved\" })}\n role=\"alert\"\n />\n )}\n <ListControls\n intl={intl}\n bookmarks={bookmarks}\n showCreate={() => setUiMode(\"create\")}\n showDelete={() => setUiMode(\"delete\")}\n />\n </>\n );\n\n const content = (\n <>\n {uiMode === \"list\" && listContent()}\n {uiMode === \"create\" && createContent()}\n {uiMode === \"delete\" && deleteContent()}\n </>\n );\n\n return (\n <Flex flexDirection=\"column\" {...containerProps}>\n {content}\n </Flex>\n );\n}\n\nfunction createList(\n bookmarks: Bookmark[],\n viewModel: SpatialBookmarkViewModel,\n intl: PackageIntl,\n listRef: React.RefObject<HTMLElement[]>\n) {\n const bookmarkItems = bookmarks.map((bookmark, idx) => (\n <BookmarkItem\n key={bookmark.id}\n index={idx}\n listItemNodes={listRef}\n bookmark={bookmark}\n onActivate={() => viewModel.activateBookmark(bookmark)}\n onDelete={() => viewModel.deleteBookmark(bookmark.id)}\n intl={intl}\n />\n ));\n\n return (\n <List.Root\n as=\"ul\"\n className=\"spatial-bookmark-list\"\n role=\"listbox\"\n aria-label={intl.formatMessage({\n id: \"bookmark.list.label\"\n })}\n flexShrink={1}\n flexGrow={1}\n p={1} // Some padding for children's box shadow\n gap={1}\n overflowY=\"auto\"\n listStyleType=\"none\"\n >\n {bookmarkItems}\n </List.Root>\n );\n}\n\n// key name -> index\nconst ARROW_INDEX_MAP: Record<string, number> = {\n ArrowDown: 1,\n ArrowUp: -1\n};\n\nfunction BookmarkItem(props: {\n index: number;\n listItemNodes: React.RefObject<HTMLElement[]>;\n bookmark: Bookmark;\n onActivate: () => void;\n onDelete: () => void;\n intl: PackageIntl;\n}): ReactNode {\n const { index, listItemNodes, bookmark, onDelete, onActivate, intl } = props;\n const title = bookmark.title;\n const onKeyDown = (evt: KeyboardEvent) => {\n const key = evt.key;\n if (key === \"Enter\") {\n // Ignore enter from child components (buttons)\n if (evt.target === evt.currentTarget) {\n onActivate();\n }\n return;\n }\n\n if (ARROW_INDEX_MAP[key] != null) {\n const len = listItemNodes.current?.length;\n if (!len) {\n return;\n }\n\n let nextIndex = (index + ARROW_INDEX_MAP[key]) % len;\n if (nextIndex < 0) {\n nextIndex = len - 1;\n }\n listItemNodes.current[nextIndex]?.focus();\n }\n };\n\n return (\n <List.Item\n as=\"li\"\n p={1}\n ref={(el: HTMLElement | null) => {\n if (!el) {\n listItemNodes.current.splice(index, 1);\n return;\n }\n listItemNodes.current[index] = el;\n }}\n className={classNames(\"spatial-bookmarks-item\")}\n tabIndex={0}\n rounded=\"md\"\n role=\"option\"\n cursor=\"pointer\"\n outline={0}\n _hover={{ background: \"trails.50\" }}\n focusVisibleRing=\"outside\"\n onKeyDown={onKeyDown}\n onClick={onActivate}\n aria-label={intl.formatMessage({ id: \"bookmark.ariaLabel\" }, { title: title })}\n >\n <Flex width=\"100%\" flexDirection=\"row\" align=\"center\" gap={1}>\n <Center>\n <Icon>\n <LuMap />\n </Icon>\n </Center>\n <Text ps={2} maxLines={1}>\n {title}\n </Text>\n <Spacer />\n <Tooltip\n key={index}\n showArrow\n content={intl.formatMessage({\n id: \"bookmark.button.deleteOne.tooltip\"\n })}\n positioning={{\n placement: \"right\"\n }}\n >\n <IconButton\n className=\"spatial-bookmarks-item-delete\"\n borderRadius=\"full\"\n padding={0}\n colorPalette=\"red\"\n variant=\"plain\"\n onClick={(event) => {\n onDelete();\n event.stopPropagation();\n }}\n aria-label={intl.formatMessage(\n { id: \"bookmark.button.deleteOne.ariaLabel\" },\n { title: title }\n )}\n >\n <Icon>\n <LuTrash />\n </Icon>\n </IconButton>\n </Tooltip>\n </Flex>\n </List.Item>\n );\n}\n\nfunction ListControls(props: {\n intl: PackageIntl;\n bookmarks: Bookmark[];\n showCreate: () => void;\n showDelete: () => void;\n}): ReactNode {\n const { intl, bookmarks, showCreate, showDelete } = props;\n\n return (\n <ButtonContainer>\n <DialogIconButton\n aria-label={intl.formatMessage({ id: \"bookmark.button.deleteAll\" })}\n disabled={bookmarks.length === 0}\n colorPalette=\"red\"\n onClick={showDelete}\n variant=\"outline\"\n >\n <Icon>\n <LuTrash />\n </Icon>\n </DialogIconButton>\n <DialogButton onClick={showCreate}>\n {intl.formatMessage({ id: \"bookmark.button.create\" })}\n </DialogButton>\n </ButtonContainer>\n );\n}\n\nfunction RemoveControls(props: { intl: PackageIntl; onClear: () => void; onCancel: () => void }) {\n const { intl, onCancel, onClear } = props;\n return (\n <ButtonContainer>\n <DialogButton variant=\"outline\" onClick={onCancel}>\n {intl.formatMessage({ id: \"bookmark.button.cancelDelete\" })}\n </DialogButton>\n <DialogButton onClick={onClear}>\n {intl.formatMessage({ id: \"bookmark.button.confirmDelete\" })}\n </DialogButton>\n </ButtonContainer>\n );\n}\n\nfunction CreateControls(props: {\n intl: PackageIntl;\n isInvalid: boolean;\n onCancel: () => void;\n onSave: () => void;\n}) {\n const { intl, onCancel, onSave, isInvalid } = props;\n return (\n <ButtonContainer>\n <DialogButton variant=\"outline\" onClick={() => onCancel()}>\n {intl.formatMessage({ id: \"bookmark.button.cancel\" })}\n </DialogButton>\n <DialogButton disabled={isInvalid} onClick={() => onSave()}>\n {intl.formatMessage({ id: \"bookmark.button.save\" })}\n </DialogButton>\n </ButtonContainer>\n );\n}\n\nfunction ButtonContainer(props: { children: ReactNode }) {\n return (\n <Flex width=\"100%\" flexDirection=\"row\" mt={2} gap={2} flexGrow={0} flexShrink={0}>\n {props.children}\n </Flex>\n );\n}\n\nfunction DialogButton(props?: ButtonProps): ReactNode {\n return <Button flex=\"1 1 auto\" {...props} />;\n}\n\nfunction DialogIconButton(props: IconButtonProps): ReactNode {\n return <IconButton flex=\"0 0 auto\" px={4} {...props} />;\n}\n\nfunction useViewModel(map: MapModel, localStorageService: LocalStorageService) {\n const [viewModel, setViewModel] = useState<SpatialBookmarkViewModel>();\n useEffect(() => {\n const viewModel = new SpatialBookmarkViewModel(map, localStorageService);\n setViewModel(viewModel);\n return () => viewModel?.destroy();\n }, [map, localStorageService]);\n\n return viewModel;\n}\n"],"names":["viewModel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SpatialBookmarks.js","sources":["SpatialBookmarks.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport {\n Button,\n ButtonProps,\n Center,\n Field,\n Flex,\n Icon,\n IconButton,\n IconButtonProps,\n Input,\n List,\n Spacer,\n Text,\n VStack\n} from \"@chakra-ui/react\";\nimport { Alert } from \"@open-pioneer/chakra-snippets/alert\";\nimport { Tooltip } from \"@open-pioneer/chakra-snippets/tooltip\";\nimport { LocalStorageService } from \"@open-pioneer/local-storage\";\nimport { MapModel, MapModelProps, useMapModelValue } from \"@open-pioneer/map\";\nimport { CommonComponentProps, useCommonComponentProps } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport { classNames } from \"@open-pioneer/react-utils\";\nimport { useIntl, useService } from \"open-pioneer:react-hooks\";\nimport { FC, KeyboardEvent, ReactNode, useEffect, useRef, useState } from \"react\";\nimport { LuMap, LuTrash } from \"react-icons/lu\";\nimport { Bookmark, SpatialBookmarkViewModel } from \"./SpatialBookmarksViewModel\";\n\ntype UIMode = \"list\" | \"create\" | \"delete\";\n\nexport interface SpatialBookmarksProps extends CommonComponentProps, MapModelProps {}\n\n/**\n * A component that allows the user to manage a set of spatial bookmarks.\n */\nexport const SpatialBookmarks: FC<SpatialBookmarksProps> = (props) => {\n const map = useMapModelValue(props);\n const localStorageService = useService<LocalStorageService>(\n \"local-storage.LocalStorageService\"\n );\n const viewModel = useViewModel(map, localStorageService);\n return viewModel && <SpatialBookmarkUI {...props} viewModel={viewModel} />;\n};\n\nfunction SpatialBookmarkUI(props: SpatialBookmarksProps & { viewModel: SpatialBookmarkViewModel }) {\n const { viewModel } = props;\n const intl = useIntl();\n const listItemNodes = useRef<HTMLElement[]>([]);\n const [scrollToLastItem, setScrollToLastItem] = useState(false);\n const bookmarks = useReactiveSnapshot(() => viewModel.bookmarks, [viewModel]);\n const [bookmarkName, setBookmarkName] = useState<string>(\"\");\n const isValidBookmarkName = bookmarkName.trim().length > 0; // use trim to avoid bookmarks with space character only\n const { containerProps } = useCommonComponentProps(\"spatial-bookmarks\", props);\n const [uiMode, setUiMode] = useState<UIMode>(\"list\");\n\n const clearBookmarks = () => {\n viewModel.deleteAllBookmarks();\n setUiMode(\"list\");\n };\n\n const addBookmark = () => {\n if (isValidBookmarkName) {\n viewModel.createBookmark(bookmarkName);\n setUiMode(\"list\");\n setBookmarkName(\"\");\n setScrollToLastItem(true);\n }\n };\n\n // Scroll to newly created bookmark after render\n useEffect(() => {\n if (scrollToLastItem) {\n const listItems = listItemNodes.current;\n if (listItems) {\n const lastItem = listItems[bookmarks.length - 1];\n lastItem?.scrollIntoView?.();\n }\n setScrollToLastItem(false);\n }\n }, [bookmarks, scrollToLastItem]);\n\n const deleteContent = () => (\n <VStack>\n <Alert\n rounded=\"md\"\n status=\"warning\"\n title={intl.formatMessage({ id: \"bookmark.alert.delete\" })}\n role=\"alert\"\n />\n <RemoveControls\n intl={intl}\n onClear={clearBookmarks}\n onCancel={() => setUiMode(\"list\")}\n />\n </VStack>\n );\n\n const createContent = () => (\n <VStack>\n <Alert\n rounded=\"md\"\n status=\"info\"\n title={intl.formatMessage({ id: \"bookmark.alert.create\" })}\n role=\"alert\"\n />\n <Field.Root invalid={!isValidBookmarkName} required>\n <Input\n aria-label={intl.formatMessage({ id: \"bookmark.input.label\" })}\n placeholder={intl.formatMessage({ id: \"bookmark.input.placeholder\" })}\n value={bookmarkName}\n onChange={(event) => {\n setBookmarkName(event.target.value);\n }}\n onKeyDown={(e) => {\n // add bookmark only, if valid bookmark name exists\n if (e.key === \"Enter\") {\n addBookmark();\n }\n }}\n autoFocus // eslint-disable-line jsx-a11y/no-autofocus\n />\n </Field.Root>\n <CreateControls\n intl={intl}\n isInvalid={!isValidBookmarkName}\n onCancel={() => {\n setBookmarkName(\"\");\n setUiMode(\"list\");\n }}\n onSave={addBookmark}\n />\n </VStack>\n );\n\n const listContent = () => (\n <>\n {bookmarks.length ? (\n createList(bookmarks, viewModel, intl, listItemNodes)\n ) : (\n <Alert\n rounded=\"md\"\n status=\"info\"\n title={intl.formatMessage({ id: \"bookmark.alert.noSaved\" })}\n role=\"alert\"\n />\n )}\n <ListControls\n intl={intl}\n bookmarks={bookmarks}\n showCreate={() => setUiMode(\"create\")}\n showDelete={() => setUiMode(\"delete\")}\n />\n </>\n );\n\n const content = (\n <>\n {uiMode === \"list\" && listContent()}\n {uiMode === \"create\" && createContent()}\n {uiMode === \"delete\" && deleteContent()}\n </>\n );\n\n return (\n <Flex flexDirection=\"column\" {...containerProps}>\n {content}\n </Flex>\n );\n}\n\nfunction createList(\n bookmarks: Bookmark[],\n viewModel: SpatialBookmarkViewModel,\n intl: PackageIntl,\n listRef: React.RefObject<HTMLElement[]>\n) {\n const bookmarkItems = bookmarks.map((bookmark, idx) => (\n <BookmarkItem\n key={bookmark.id}\n index={idx}\n listItemNodes={listRef}\n bookmark={bookmark}\n onActivate={() => viewModel.activateBookmark(bookmark)}\n onDelete={() => viewModel.deleteBookmark(bookmark.id)}\n intl={intl}\n />\n ));\n\n return (\n <List.Root\n as=\"ul\"\n className=\"spatial-bookmark-list\"\n role=\"listbox\"\n aria-label={intl.formatMessage({\n id: \"bookmark.list.label\"\n })}\n flexShrink={1}\n flexGrow={1}\n p={1} // Some padding for children's box shadow\n gap={1}\n overflowY=\"auto\"\n listStyleType=\"none\"\n >\n {bookmarkItems}\n </List.Root>\n );\n}\n\n// key name -> index\nconst ARROW_INDEX_MAP: Record<string, number> = {\n ArrowDown: 1,\n ArrowUp: -1\n};\n\nfunction BookmarkItem(props: {\n index: number;\n listItemNodes: React.RefObject<HTMLElement[]>;\n bookmark: Bookmark;\n onActivate: () => void;\n onDelete: () => void;\n intl: PackageIntl;\n}): ReactNode {\n const { index, listItemNodes, bookmark, onDelete, onActivate, intl } = props;\n const title = bookmark.title;\n const onKeyDown = (evt: KeyboardEvent) => {\n const key = evt.key;\n if (key === \"Enter\") {\n // Ignore enter from child components (buttons)\n if (evt.target === evt.currentTarget) {\n onActivate();\n }\n return;\n }\n\n if (ARROW_INDEX_MAP[key] != null) {\n const len = listItemNodes.current?.length;\n if (!len) {\n return;\n }\n\n let nextIndex = (index + ARROW_INDEX_MAP[key]) % len;\n if (nextIndex < 0) {\n nextIndex = len - 1;\n }\n listItemNodes.current[nextIndex]?.focus();\n }\n };\n\n return (\n <List.Item\n as=\"li\"\n p={1}\n ref={(el: HTMLElement | null) => {\n if (!el) {\n listItemNodes.current.splice(index, 1);\n return;\n }\n listItemNodes.current[index] = el;\n }}\n className={classNames(\"spatial-bookmarks-item\")}\n tabIndex={0}\n rounded=\"md\"\n role=\"option\"\n cursor=\"pointer\"\n outline={0}\n _hover={{ background: \"trails.50\" }}\n focusVisibleRing=\"outside\"\n onKeyDown={onKeyDown}\n onClick={onActivate}\n aria-label={intl.formatMessage({ id: \"bookmark.ariaLabel\" }, { title: title })}\n >\n <Flex width=\"100%\" flexDirection=\"row\" align=\"center\" gap={1}>\n <Center>\n <Icon>\n <LuMap />\n </Icon>\n </Center>\n <Text ps={2} maxLines={1}>\n {title}\n </Text>\n <Spacer />\n <Tooltip\n key={index}\n showArrow\n content={intl.formatMessage({\n id: \"bookmark.button.deleteOne.tooltip\"\n })}\n positioning={{\n placement: \"right\"\n }}\n >\n <IconButton\n className=\"spatial-bookmarks-item-delete\"\n borderRadius=\"full\"\n padding={0}\n colorPalette=\"red\"\n variant=\"plain\"\n onClick={(event) => {\n onDelete();\n event.stopPropagation();\n }}\n aria-label={intl.formatMessage(\n { id: \"bookmark.button.deleteOne.ariaLabel\" },\n { title: title }\n )}\n >\n <Icon>\n <LuTrash />\n </Icon>\n </IconButton>\n </Tooltip>\n </Flex>\n </List.Item>\n );\n}\n\nfunction ListControls(props: {\n intl: PackageIntl;\n bookmarks: Bookmark[];\n showCreate: () => void;\n showDelete: () => void;\n}): ReactNode {\n const { intl, bookmarks, showCreate, showDelete } = props;\n\n return (\n <ButtonContainer>\n <DialogIconButton\n aria-label={intl.formatMessage({ id: \"bookmark.button.deleteAll\" })}\n disabled={bookmarks.length === 0}\n colorPalette=\"red\"\n onClick={showDelete}\n variant=\"outline\"\n >\n <Icon>\n <LuTrash />\n </Icon>\n </DialogIconButton>\n <DialogButton onClick={showCreate}>\n {intl.formatMessage({ id: \"bookmark.button.create\" })}\n </DialogButton>\n </ButtonContainer>\n );\n}\n\nfunction RemoveControls(props: { intl: PackageIntl; onClear: () => void; onCancel: () => void }) {\n const { intl, onCancel, onClear } = props;\n return (\n <ButtonContainer>\n <DialogButton variant=\"outline\" onClick={onCancel}>\n {intl.formatMessage({ id: \"bookmark.button.cancelDelete\" })}\n </DialogButton>\n <DialogButton onClick={onClear}>\n {intl.formatMessage({ id: \"bookmark.button.confirmDelete\" })}\n </DialogButton>\n </ButtonContainer>\n );\n}\n\nfunction CreateControls(props: {\n intl: PackageIntl;\n isInvalid: boolean;\n onCancel: () => void;\n onSave: () => void;\n}) {\n const { intl, onCancel, onSave, isInvalid } = props;\n return (\n <ButtonContainer>\n <DialogButton variant=\"outline\" onClick={() => onCancel()}>\n {intl.formatMessage({ id: \"bookmark.button.cancel\" })}\n </DialogButton>\n <DialogButton disabled={isInvalid} onClick={() => onSave()}>\n {intl.formatMessage({ id: \"bookmark.button.save\" })}\n </DialogButton>\n </ButtonContainer>\n );\n}\n\nfunction ButtonContainer(props: { children: ReactNode }) {\n return (\n <Flex width=\"100%\" flexDirection=\"row\" mt={2} gap={2} flexGrow={0} flexShrink={0}>\n {props.children}\n </Flex>\n );\n}\n\nfunction DialogButton(props?: ButtonProps): ReactNode {\n return <Button flex=\"1 1 auto\" {...props} />;\n}\n\nfunction DialogIconButton(props: IconButtonProps): ReactNode {\n return <IconButton flex=\"0 0 auto\" px={4} {...props} />;\n}\n\nfunction useViewModel(map: MapModel, localStorageService: LocalStorageService) {\n const [viewModel, setViewModel] = useState<SpatialBookmarkViewModel>();\n useEffect(() => {\n const viewModel = new SpatialBookmarkViewModel(map, localStorageService);\n setViewModel(viewModel);\n return () => viewModel?.destroy();\n }, [map, localStorageService]);\n\n return viewModel;\n}\n"],"names":["viewModel"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@open-pioneer/spatial-bookmarks",
|
|
4
|
-
"version": "1.3.0
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"description": "This package provides a UI component that allows the user to store, manage, and easily navigate between different map extents by creating bookmarks.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"open-pioneer-trails"
|
|
@@ -14,20 +14,19 @@
|
|
|
14
14
|
"directory": "src/packages/spatial-bookmarks"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@chakra-ui/react": "^3.
|
|
18
|
-
"@open-pioneer/chakra-snippets": "4.6.0
|
|
19
|
-
"@open-pioneer/core": "4.6.0
|
|
20
|
-
"@open-pioneer/local-storage": "4.6.0
|
|
21
|
-
"@open-pioneer/react-utils": "4.6.0
|
|
22
|
-
"@open-pioneer/runtime": "4.6.0
|
|
23
|
-
"classnames": "^2.5.1",
|
|
17
|
+
"@chakra-ui/react": "^3.35.0",
|
|
18
|
+
"@open-pioneer/chakra-snippets": "^4.6.0",
|
|
19
|
+
"@open-pioneer/core": "^4.6.0",
|
|
20
|
+
"@open-pioneer/local-storage": "^4.6.0",
|
|
21
|
+
"@open-pioneer/react-utils": "^4.6.0",
|
|
22
|
+
"@open-pioneer/runtime": "^4.6.0",
|
|
24
23
|
"ol": "^10.9.0",
|
|
25
|
-
"react": "^19.2.
|
|
24
|
+
"react": "^19.2.6",
|
|
26
25
|
"react-icons": "^5.6.0",
|
|
27
|
-
"@conterra/reactivity-core": "^0.8.
|
|
28
|
-
"@open-pioneer/reactivity": "4.6.0
|
|
26
|
+
"@conterra/reactivity-core": "^0.8.5",
|
|
27
|
+
"@open-pioneer/reactivity": "^4.6.0",
|
|
29
28
|
"uuid": "^14.0.0",
|
|
30
|
-
"@open-pioneer/map": "1.3.0
|
|
29
|
+
"@open-pioneer/map": "1.3.0"
|
|
31
30
|
},
|
|
32
31
|
"exports": {
|
|
33
32
|
"./package.json": "./package.json",
|
|
@@ -53,6 +52,6 @@
|
|
|
53
52
|
]
|
|
54
53
|
},
|
|
55
54
|
"properties": [],
|
|
56
|
-
"packageFormatVersion": "1.0.
|
|
55
|
+
"packageFormatVersion": "1.0.1"
|
|
57
56
|
}
|
|
58
57
|
}
|