@rio-cloud/rio-uikit 2.4.2 → 2.5.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.
Files changed (125) hide show
  1. package/CountedInput.d.ts +2 -0
  2. package/CountedInput.js +5 -0
  3. package/CountedInput.js.map +1 -0
  4. package/TabbedPanel.d.ts +2 -0
  5. package/TabbedPanel.js +5 -0
  6. package/TabbedPanel.js.map +1 -0
  7. package/components/applicationHeader/NavItems.js +58 -46
  8. package/components/applicationHeader/NavItems.js.map +1 -1
  9. package/components/applicationLayout/ApplicationLayoutBody.d.ts +1 -1
  10. package/components/applicationLayout/ApplicationLayoutBody.js +29 -29
  11. package/components/applicationLayout/ApplicationLayoutBody.js.map +1 -1
  12. package/components/applicationLayout/ApplicationLayoutHeader.js +22 -7
  13. package/components/applicationLayout/ApplicationLayoutHeader.js.map +1 -1
  14. package/components/assetTree/useTreeHeight.js.map +1 -1
  15. package/components/button/Button.d.ts +11 -3
  16. package/components/button/Button.js.map +1 -1
  17. package/components/clearableInput/ClearableInput.d.ts +4 -0
  18. package/components/clearableInput/ClearableInput.js.map +1 -1
  19. package/components/countedInput/CountedInput.d.ts +91 -0
  20. package/components/countedInput/CountedInput.js +65 -0
  21. package/components/countedInput/CountedInput.js.map +1 -0
  22. package/components/datepicker/DayPicker.js +3 -2
  23. package/components/datepicker/DayPicker.js.map +1 -1
  24. package/components/datepicker/DayPickerInput.d.ts +1 -1
  25. package/components/datepicker/DayPickerInput.js.map +1 -1
  26. package/components/datepicker/dayPickerTypes.d.ts +3 -2
  27. package/components/datepicker/dayPickerTypes.js.map +1 -1
  28. package/components/datepicker/dayPickerUtils.d.ts +1 -1
  29. package/components/datepicker/dayPickerUtils.js +45 -22
  30. package/components/datepicker/dayPickerUtils.js.map +1 -1
  31. package/components/datepicker/useDayPickerInputState.d.ts +1 -1
  32. package/components/dialog/ConfirmationDialog.d.ts +17 -0
  33. package/components/dialog/ConfirmationDialog.js +43 -19
  34. package/components/dialog/ConfirmationDialog.js.map +1 -1
  35. package/components/dialog/DialogHeader.js +20 -19
  36. package/components/dialog/DialogHeader.js.map +1 -1
  37. package/components/dropdown/ButtonDropdown.d.ts +5 -0
  38. package/components/dropdown/ButtonDropdown.js +63 -61
  39. package/components/dropdown/ButtonDropdown.js.map +1 -1
  40. package/components/dropdown/DropdownToggleButton.d.ts +2 -0
  41. package/components/dropdown/DropdownToggleButton.js +39 -35
  42. package/components/dropdown/DropdownToggleButton.js.map +1 -1
  43. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js +103 -105
  44. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js.map +1 -1
  45. package/components/map/utils/eventHandling.js.map +1 -1
  46. package/components/map/utils/mapTypes.d.ts +7 -0
  47. package/components/map/utils/mapTypes.js.map +1 -1
  48. package/components/map/utils/rendering.js +5 -5
  49. package/components/numberControl/NumberControl.js.map +1 -1
  50. package/components/page/Page.d.ts +2 -0
  51. package/components/page/Page.js.map +1 -1
  52. package/components/rioglyph/Rioglyph.d.ts +8 -2
  53. package/components/rioglyph/Rioglyph.js.map +1 -1
  54. package/components/rioglyph/RioglyphIconType.d.ts +1 -1
  55. package/components/selects/BaseSelectDropdown.d.ts +8 -0
  56. package/components/selects/BaseSelectDropdown.js +76 -60
  57. package/components/selects/BaseSelectDropdown.js.map +1 -1
  58. package/components/selects/Multiselect.d.ts +5 -0
  59. package/components/selects/Multiselect.js +60 -58
  60. package/components/selects/Multiselect.js.map +1 -1
  61. package/components/selects/Select.d.ts +5 -0
  62. package/components/selects/Select.js +60 -58
  63. package/components/selects/Select.js.map +1 -1
  64. package/components/sidebars/Sidebar.js +40 -40
  65. package/components/sidebars/Sidebar.js.map +1 -1
  66. package/components/sidebars/SidebarCloseButton.d.ts +3 -1
  67. package/components/sidebars/SidebarCloseButton.js +19 -5
  68. package/components/sidebars/SidebarCloseButton.js.map +1 -1
  69. package/components/states/CustomState.d.ts +7 -1
  70. package/components/states/CustomState.js.map +1 -1
  71. package/components/states/StateButton.d.ts +11 -1
  72. package/components/states/StateButton.js +46 -10
  73. package/components/states/StateButton.js.map +1 -1
  74. package/components/statsWidget/StatsWidgetNumber.d.ts +16 -1
  75. package/components/statsWidget/StatsWidgetNumber.js +29 -12
  76. package/components/statsWidget/StatsWidgetNumber.js.map +1 -1
  77. package/components/tabbedPanel/TabbedPanel.d.ts +99 -0
  78. package/components/tabbedPanel/TabbedPanel.js +119 -0
  79. package/components/tabbedPanel/TabbedPanel.js.map +1 -0
  80. package/components/table/Table.types.d.ts +9 -1
  81. package/components/table/TableColumn.js +20 -19
  82. package/components/table/TableColumn.js.map +1 -1
  83. package/components/table/TableHeaderColumn.d.ts +4 -0
  84. package/components/table/TableHeaderColumn.js +50 -53
  85. package/components/table/TableHeaderColumn.js.map +1 -1
  86. package/components/table/TableToolbar.d.ts +4 -0
  87. package/components/table/TableToolbar.js.map +1 -1
  88. package/components/table/TableToolbarColumn.d.ts +3 -0
  89. package/components/table/TableToolbarColumn.js.map +1 -1
  90. package/components/table/render/header/resolveHeaderCellStyle.d.ts +87 -55
  91. package/components/timepicker/TimePicker.d.ts +6 -0
  92. package/components/timepicker/TimePicker.js +57 -56
  93. package/components/timepicker/TimePicker.js.map +1 -1
  94. package/hooks/useClickOutside.js +3 -3
  95. package/hooks/useClipboard.js.map +1 -1
  96. package/hooks/useScrollPosition.js.map +1 -1
  97. package/package.json +4 -4
  98. package/themes/Volkswagen/components/applicationHeader/VolkswagenApplicationHeader.js +23 -22
  99. package/themes/Volkswagen/components/applicationHeader/VolkswagenApplicationHeader.js.map +1 -1
  100. package/utils/analytics/getTrackingLabelFromNode.d.ts +2 -0
  101. package/utils/analytics/getTrackingLabelFromNode.js +24 -0
  102. package/utils/analytics/getTrackingLabelFromNode.js.map +1 -0
  103. package/utils/analytics/googleAnalyticsUtils.js +21 -28
  104. package/utils/analytics/googleAnalyticsUtils.js.map +1 -1
  105. package/utils/getNodeTextContent.d.ts +2 -0
  106. package/utils/getNodeTextContent.js +22 -0
  107. package/utils/getNodeTextContent.js.map +1 -0
  108. package/utils/init/initCSS.js +5 -5
  109. package/utils/init/initCSS.js.map +1 -1
  110. package/utils/init/initConfig.js +4 -7
  111. package/utils/init/initConfig.js.map +1 -1
  112. package/utils/init/initDocumentBootstrapping.js +14 -14
  113. package/utils/init/initDocumentBootstrapping.js.map +1 -1
  114. package/version.d.ts +1 -1
  115. package/version.js +1 -1
  116. package/version.js.map +1 -1
  117. package/DayPickerPrototype.d.ts +0 -2
  118. package/DayPickerPrototype.js +0 -5
  119. package/DayPickerPrototype.js.map +0 -1
  120. package/TableNext.d.ts +0 -2
  121. package/TableNext.js +0 -25
  122. package/TableNext.js.map +0 -1
  123. package/components/datepicker/DayPickerPrototype.d.ts +0 -53
  124. package/components/datepicker/DayPickerPrototype.js +0 -285
  125. package/components/datepicker/DayPickerPrototype.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonDropdown.js","sources":["../../../src/components/dropdown/ButtonDropdown.tsx"],"sourcesContent":["import React, { useState, useEffect, forwardRef, type PropsWithChildren } from 'react';\nimport ReactDOM from 'react-dom';\nimport { usePopper } from 'react-popper';\nimport { noop } from 'es-toolkit/function';\nimport { isNil } from 'es-toolkit/predicate';\n\nimport classNames from '../../utils/classNames';\nimport { getOrCreatePortalRoot } from '../../utils/portalRoot';\nimport useClickOutside, { DEFAULT_EVENT_TYPES } from '../../hooks/useClickOutside';\nimport MenuItems from '../menuItems/MenuItems';\nimport MenuItemList from '../menuItems/MenuItemList';\nimport DropdownToggleButton, { type DropdownToggleEvent, type DropdownToggleButtonType } from './DropdownToggleButton';\nimport SplitCaretButton from './SplitCaretButton';\nimport Caret from './Caret';\nimport type { MenuItemProps as MenuItem } from '../menuItems/MenuItem';\nimport type { BUTTON_SIZE, BUTTON_STYLE, BUTTON_VARIANT } from '../button/Button';\n\nconst getPlacement = (pullRight: boolean, dropup: boolean) => {\n if (pullRight && dropup) {\n return 'top-end';\n }\n if (!pullRight && dropup) {\n return 'top-start';\n }\n if (pullRight && !dropup) {\n return 'bottom-end';\n }\n return 'bottom-start';\n};\n\nexport type ButtonDropdownProps<T extends DropdownToggleButtonType = 'button'> = {\n /**\n * Unique button id. If not present a random id is generated.\n */\n id?: string;\n\n /**\n * Accessible label applied to the dropdown toggle button.\n */\n 'aria-label'?: string;\n\n /**\n * The button title. This may be also a node, like a <span> or a <FormattedMessage>.\n */\n title: string | React.ReactNode;\n\n /**\n * Defined weather or not the menu is rendered.\n * Use this to control the component from the outside.\n *\n * @default undefined\n */\n open?: boolean;\n\n /**\n * Defines whether the dropdown opens above or below.\n * Set it to \"true\" additionally disables the automatic position feature.\n *\n * @default false\n */\n dropup?: boolean;\n\n /**\n * Defines whether the dropdown opens right aligned to the dropdown or not.\n */\n pullRight?: boolean;\n\n /**\n * Defines how large the button will be rendered.\n *\n * Possible values are: `xs`, `sm`, `md`, `lg`\n *\n * @default 'md'\n */\n bsSize?: BUTTON_SIZE;\n\n /**\n * Defines the button color.\n *\n * Possible values are: `default`, `primary`, `secondary`, `info`, `warning`, `danger`, `success`, `muted`\n *\n * @default 'default'\n */\n bsStyle?: BUTTON_STYLE;\n\n /**\n * Defines the variation of the button design.\n *\n * Possible values are: `link`, `link-inline`, `outline`, `action`\n */\n variant?: BUTTON_VARIANT;\n\n /**\n * Specify the toggle element type.\n * It supports the following types: \"button\" | \"tag\" | \"label\"\n *\n * @default 'button'\n */\n toggleButtonType?: DropdownToggleButtonType;\n\n /**\n * Optional prop to defines whether the dropdown title is icon only which\n * applies different padding so the button is a square.\n *\n * @default false\n */\n iconOnly?: boolean;\n\n /**\n * Optional rioglyph icon name forwarded to the underlying button toggle.\n */\n iconName?: string;\n\n /**\n * Defines whether the caret is shown or not.\n *\n * @default false\n */\n noCaret?: boolean;\n\n /**\n * Defines whether the dropdown-toggle (with caret) should be in a separate button.\n *\n * @default false\n */\n splitButton?: boolean;\n\n /**\n * Renders the dropdown into a dedicated react portal\n *\n * @default false\n */\n usePortal?: boolean;\n\n /**\n * Items to display in the dropdown menu. If you use a custom dropdown you can skip this prop.\n */\n items?: MenuItem[];\n\n /**\n * Disables the dropdown button.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Callback for splitButton label button click.\n */\n onLabelButtonClick?: () => void;\n\n /**\n * Callback for when the toggle button was clicked to open it.\n * @param event\n * @returns\n */\n onOpen?: (event: DropdownToggleEvent<T>) => void;\n\n /**\n * Callback for when the toggle button was clicked to close it.\n * @returns\n */\n onClose?: () => void;\n\n /**\n * Allows to pass in custom dropdown menu content.\n */\n customDropdown?: React.ReactNode;\n\n /**\n * Define custom popper.js configuration for dropdown placement and modifiers.\n */\n popperConfig?: object;\n\n /**\n * Additional classes to be set on the dropdown-toggle button.\n */\n toggleClassName?: string;\n\n /**\n * Additional classes to be set on the dropdown.\n */\n dropdownClassName?: string;\n\n /**\n * Additional classes to be set to the wrapper element.\n */\n className?: string;\n};\n\nconst createButtonDropdown = <T extends DropdownToggleButtonType = 'button'>() => {\n return forwardRef<\n T extends 'button' ? HTMLButtonElement : HTMLDivElement,\n PropsWithChildren<ButtonDropdownProps<T>>\n >((props, ref) => {\n const {\n id = Math.random().toString(36).slice(2, 16),\n 'aria-label': ariaLabel,\n items = [],\n bsSize = 'md',\n bsStyle = 'default',\n variant,\n disabled = false,\n iconName,\n iconOnly = false,\n title,\n splitButton = false,\n customDropdown,\n open,\n dropup = false,\n pullRight = false,\n noCaret = false,\n onOpen = noop,\n onClose = noop,\n onLabelButtonClick = noop,\n usePortal = false,\n popperConfig,\n toggleButtonType = 'button',\n toggleClassName = '',\n dropdownClassName,\n className = '',\n ...remainingProps\n } = props;\n\n const [internalOpen, setInternalOpen] = useState(open);\n\n const [refDropdownToggle, setRefDropdownToggle] = useState<HTMLButtonElement | HTMLDivElement | null>(null);\n const [refDropdownMenu, setRefDropdownMenu] = useState<HTMLUListElement | null>(null);\n const [refSplitButtonToggle, setRefSplitButtonToggle] = useState<HTMLButtonElement | null>(null);\n\n const defaultPopperConfig = {\n placement: getPlacement(pullRight, dropup),\n modifiers: [],\n };\n\n const popperParentRef = splitButton && pullRight ? refSplitButtonToggle : refDropdownToggle;\n\n const { styles, attributes } = usePopper(popperParentRef, refDropdownMenu, popperConfig || defaultPopperConfig);\n\n const isUncontrolled = isNil(open);\n const isOpen = isUncontrolled ? internalOpen : open;\n\n const wrapperRef = useClickOutside(\n event => {\n if (usePortal) {\n // In case the dropdown is rendered via portal the clickOutside the toggle button element is\n // triggered since the dropdown is not a child of the wrapper element.\n // In this case we need to check if the event target is inside the dropdown-menu and prevent closing\n // the dropdown\n if (!refDropdownMenu?.contains(event.target as Node)) {\n closeMenu();\n }\n } else {\n closeMenu();\n }\n },\n DEFAULT_EVENT_TYPES,\n Boolean(isOpen) // only listen to clicks outside when the dropdown is open\n );\n\n const dropdownRoot = getOrCreatePortalRoot();\n\n const shouldShowCaret = !noCaret && !splitButton && !iconOnly;\n\n useEffect(() => {\n if (!isUncontrolled) {\n setInternalOpen(open);\n }\n }, [isUncontrolled, open]);\n\n const toggleOpen = (event?: DropdownToggleEvent<T>) => {\n const isDropdownOpen = isUncontrolled ? internalOpen : open;\n\n if (isDropdownOpen) {\n closeMenu();\n } else {\n openMenu(event);\n }\n };\n\n const openMenu = (event?: DropdownToggleEvent<T>) => {\n if (isUncontrolled) {\n setInternalOpen(true);\n }\n if (event) {\n onOpen(event);\n }\n };\n\n const closeMenu = () => {\n if (isUncontrolled) {\n setInternalOpen(false);\n }\n onClose();\n };\n\n const handleSplitLabelButtonClick = () => {\n closeMenu();\n onLabelButtonClick();\n };\n\n const handleSplitCaretButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n toggleOpen(event as DropdownToggleEvent<T>);\n };\n\n const handleDropdownButtonClick = (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement>) => {\n if (splitButton) {\n handleSplitLabelButtonClick();\n } else {\n toggleOpen(event as DropdownToggleEvent<T>);\n }\n };\n\n const wrapperClasses = classNames('dropdown', 'btn-group', isOpen && 'open', className);\n\n const dropdownClasses = classNames(\n usePortal && 'dropdown-portal',\n splitButton && pullRight && 'pull-right',\n dropdownClassName\n );\n\n const dropdownMenu = (\n <MenuItemList\n className={dropdownClasses}\n ref={setRefDropdownMenu}\n style={styles.popper}\n {...attributes.popper}\n >\n {customDropdown ? customDropdown : <MenuItems items={items} closeMenu={toggleOpen} />}\n </MenuItemList>\n );\n\n return (\n <div {...remainingProps} className={wrapperClasses} ref={wrapperRef}>\n <DropdownToggleButton\n id={id}\n aria-label={ariaLabel}\n splitButton={splitButton}\n bsStyle={bsStyle}\n bsSize={bsSize}\n variant={variant}\n iconOnly={iconOnly}\n iconName={iconName}\n disabled={disabled}\n ref={setRefDropdownToggle}\n onClick={handleDropdownButtonClick}\n outerRef={ref}\n toggleButtonType={toggleButtonType}\n className={toggleClassName}\n >\n {title}\n {shouldShowCaret && <Caret />}\n </DropdownToggleButton>\n {splitButton && (\n <SplitCaretButton\n id={id}\n bsStyle={bsStyle}\n bsSize={bsSize}\n disabled={disabled}\n className={toggleClassName}\n onClick={handleSplitCaretButtonClick}\n ref={setRefSplitButtonToggle}\n />\n )}\n {isOpen && usePortal && ReactDOM.createPortal(dropdownMenu, dropdownRoot)}\n {isOpen && !usePortal && dropdownMenu}\n </div>\n );\n });\n};\n\nconst ButtonDropdown = createButtonDropdown();\n\nexport default ButtonDropdown;\n"],"names":["getPlacement","pullRight","dropup","createButtonDropdown","forwardRef","props","ref","id","ariaLabel","items","bsSize","bsStyle","variant","disabled","iconName","iconOnly","title","splitButton","customDropdown","open","noCaret","onOpen","noop","onClose","onLabelButtonClick","usePortal","popperConfig","toggleButtonType","toggleClassName","dropdownClassName","className","remainingProps","internalOpen","setInternalOpen","useState","refDropdownToggle","setRefDropdownToggle","refDropdownMenu","setRefDropdownMenu","refSplitButtonToggle","setRefSplitButtonToggle","defaultPopperConfig","popperParentRef","styles","attributes","usePopper","isUncontrolled","isNil","isOpen","wrapperRef","useClickOutside","event","closeMenu","DEFAULT_EVENT_TYPES","dropdownRoot","getOrCreatePortalRoot","shouldShowCaret","useEffect","toggleOpen","openMenu","handleSplitLabelButtonClick","handleSplitCaretButtonClick","handleDropdownButtonClick","wrapperClasses","classNames","dropdownClasses","dropdownMenu","jsx","MenuItemList","MenuItems","jsxs","DropdownToggleButton","Caret","SplitCaretButton","ReactDOM","ButtonDropdown"],"mappings":"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"}
1
+ {"version":3,"file":"ButtonDropdown.js","sources":["../../../src/components/dropdown/ButtonDropdown.tsx"],"sourcesContent":["import React, { useState, useEffect, forwardRef, type PropsWithChildren } from 'react';\nimport ReactDOM from 'react-dom';\nimport { usePopper } from 'react-popper';\nimport { noop } from 'es-toolkit/function';\nimport { isNil } from 'es-toolkit/predicate';\n\nimport classNames from '../../utils/classNames';\nimport { getOrCreatePortalRoot } from '../../utils/portalRoot';\nimport useClickOutside, { DEFAULT_EVENT_TYPES } from '../../hooks/useClickOutside';\nimport MenuItems from '../menuItems/MenuItems';\nimport MenuItemList from '../menuItems/MenuItemList';\nimport DropdownToggleButton, { type DropdownToggleEvent, type DropdownToggleButtonType } from './DropdownToggleButton';\nimport SplitCaretButton from './SplitCaretButton';\nimport Caret from './Caret';\nimport type { MenuItemProps as MenuItem } from '../menuItems/MenuItem';\nimport type { BUTTON_SIZE, BUTTON_STYLE, BUTTON_VARIANT } from '../button/Button';\nimport type { TrackingAttributes } from '../../utils/analytics/googleAnalyticsUtils';\n\nconst getPlacement = (pullRight: boolean, dropup: boolean) => {\n if (pullRight && dropup) {\n return 'top-end';\n }\n if (!pullRight && dropup) {\n return 'top-start';\n }\n if (pullRight && !dropup) {\n return 'bottom-end';\n }\n return 'bottom-start';\n};\n\nexport type ButtonDropdownProps<T extends DropdownToggleButtonType = 'button'> = {\n /**\n * Unique button id. If not present a random id is generated.\n */\n id?: string;\n\n /**\n * Accessible label applied to the dropdown toggle button.\n */\n 'aria-label'?: string;\n\n /**\n * The button title. This may be also a node, like a <span> or a <FormattedMessage>.\n */\n title: string | React.ReactNode;\n\n /**\n * Defined weather or not the menu is rendered.\n * Use this to control the component from the outside.\n *\n * @default undefined\n */\n open?: boolean;\n\n /**\n * Defines whether the dropdown opens above or below.\n * Set it to \"true\" additionally disables the automatic position feature.\n *\n * @default false\n */\n dropup?: boolean;\n\n /**\n * Defines whether the dropdown opens right aligned to the dropdown or not.\n */\n pullRight?: boolean;\n\n /**\n * Defines how large the button will be rendered.\n *\n * Possible values are: `xs`, `sm`, `md`, `lg`\n *\n * @default 'md'\n */\n bsSize?: BUTTON_SIZE;\n\n /**\n * Defines the button color.\n *\n * Possible values are: `default`, `primary`, `secondary`, `info`, `warning`, `danger`, `success`, `muted`\n *\n * @default 'default'\n */\n bsStyle?: BUTTON_STYLE;\n\n /**\n * Defines the variation of the button design.\n *\n * Possible values are: `link`, `link-inline`, `outline`, `action`\n */\n variant?: BUTTON_VARIANT;\n\n /**\n * Specify the toggle element type.\n * It supports the following types: \"button\" | \"tag\" | \"label\"\n *\n * @default 'button'\n */\n toggleButtonType?: DropdownToggleButtonType;\n\n /**\n * Optional prop to defines whether the dropdown title is icon only which\n * applies different padding so the button is a square.\n *\n * @default false\n */\n iconOnly?: boolean;\n\n /**\n * Optional rioglyph icon name forwarded to the underlying button toggle.\n */\n iconName?: string;\n\n /**\n * Defines whether the caret is shown or not.\n *\n * @default false\n */\n noCaret?: boolean;\n\n /**\n * Defines whether the dropdown-toggle (with caret) should be in a separate button.\n *\n * @default false\n */\n splitButton?: boolean;\n\n /**\n * Renders the dropdown into a dedicated react portal\n *\n * @default false\n */\n usePortal?: boolean;\n\n /**\n * Items to display in the dropdown menu. If you use a custom dropdown you can skip this prop.\n */\n items?: MenuItem[];\n\n /**\n * Disables the dropdown button.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Callback for splitButton label button click.\n */\n onLabelButtonClick?: () => void;\n\n /**\n * Callback for when the toggle button was clicked to open it.\n * @param event\n * @returns\n */\n onOpen?: (event: DropdownToggleEvent<T>) => void;\n\n /**\n * Callback for when the toggle button was clicked to close it.\n * @returns\n */\n onClose?: () => void;\n\n /**\n * Allows to pass in custom dropdown menu content.\n */\n customDropdown?: React.ReactNode;\n\n /**\n * Define custom popper.js configuration for dropdown placement and modifiers.\n */\n popperConfig?: object;\n\n /**\n * Additional classes to be set on the dropdown-toggle button.\n */\n toggleClassName?: string;\n\n /**\n * Optional tracking attributes added to the dropdown toggle button.\n */\n trackingAttributes?: TrackingAttributes;\n\n /**\n * Additional classes to be set on the dropdown.\n */\n dropdownClassName?: string;\n\n /**\n * Additional classes to be set to the wrapper element.\n */\n className?: string;\n};\n\nconst createButtonDropdown = <T extends DropdownToggleButtonType = 'button'>() => {\n return forwardRef<\n T extends 'button' ? HTMLButtonElement : HTMLDivElement,\n PropsWithChildren<ButtonDropdownProps<T>>\n >((props, ref) => {\n const {\n id = Math.random().toString(36).slice(2, 16),\n 'aria-label': ariaLabel,\n items = [],\n bsSize = 'md',\n bsStyle = 'default',\n variant,\n disabled = false,\n iconName,\n iconOnly = false,\n title,\n splitButton = false,\n customDropdown,\n open,\n dropup = false,\n pullRight = false,\n noCaret = false,\n onOpen = noop,\n onClose = noop,\n onLabelButtonClick = noop,\n usePortal = false,\n popperConfig,\n toggleButtonType = 'button',\n toggleClassName = '',\n trackingAttributes,\n dropdownClassName,\n className = '',\n ...remainingProps\n } = props;\n\n const [internalOpen, setInternalOpen] = useState(open);\n\n const [refDropdownToggle, setRefDropdownToggle] = useState<HTMLButtonElement | HTMLDivElement | null>(null);\n const [refDropdownMenu, setRefDropdownMenu] = useState<HTMLUListElement | null>(null);\n const [refSplitButtonToggle, setRefSplitButtonToggle] = useState<HTMLButtonElement | null>(null);\n\n const defaultPopperConfig = {\n placement: getPlacement(pullRight, dropup),\n modifiers: [],\n };\n\n const popperParentRef = splitButton && pullRight ? refSplitButtonToggle : refDropdownToggle;\n\n const { styles, attributes } = usePopper(popperParentRef, refDropdownMenu, popperConfig || defaultPopperConfig);\n\n const isUncontrolled = isNil(open);\n const isOpen = isUncontrolled ? internalOpen : open;\n\n const wrapperRef = useClickOutside(\n event => {\n if (usePortal) {\n // In case the dropdown is rendered via portal the clickOutside the toggle button element is\n // triggered since the dropdown is not a child of the wrapper element.\n // In this case we need to check if the event target is inside the dropdown-menu and prevent closing\n // the dropdown\n if (!refDropdownMenu?.contains(event.target as Node)) {\n closeMenu();\n }\n } else {\n closeMenu();\n }\n },\n DEFAULT_EVENT_TYPES,\n Boolean(isOpen) // only listen to clicks outside when the dropdown is open\n );\n\n const dropdownRoot = getOrCreatePortalRoot();\n\n const shouldShowCaret = !noCaret && !splitButton && !iconOnly;\n\n useEffect(() => {\n if (!isUncontrolled) {\n setInternalOpen(open);\n }\n }, [isUncontrolled, open]);\n\n const toggleOpen = (event?: DropdownToggleEvent<T>) => {\n const isDropdownOpen = isUncontrolled ? internalOpen : open;\n\n if (isDropdownOpen) {\n closeMenu();\n } else {\n openMenu(event);\n }\n };\n\n const openMenu = (event?: DropdownToggleEvent<T>) => {\n if (isUncontrolled) {\n setInternalOpen(true);\n }\n if (event) {\n onOpen(event);\n }\n };\n\n const closeMenu = () => {\n if (isUncontrolled) {\n setInternalOpen(false);\n }\n onClose();\n };\n\n const handleSplitLabelButtonClick = () => {\n closeMenu();\n onLabelButtonClick();\n };\n\n const handleSplitCaretButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n toggleOpen(event as DropdownToggleEvent<T>);\n };\n\n const handleDropdownButtonClick = (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement>) => {\n if (splitButton) {\n handleSplitLabelButtonClick();\n } else {\n toggleOpen(event as DropdownToggleEvent<T>);\n }\n };\n\n const wrapperClasses = classNames('dropdown', 'btn-group', isOpen && 'open', className);\n\n const dropdownClasses = classNames(\n usePortal && 'dropdown-portal',\n splitButton && pullRight && 'pull-right',\n dropdownClassName\n );\n\n const dropdownMenu = (\n <MenuItemList\n className={dropdownClasses}\n ref={setRefDropdownMenu}\n style={styles.popper}\n {...attributes.popper}\n >\n {customDropdown ? customDropdown : <MenuItems items={items} closeMenu={toggleOpen} />}\n </MenuItemList>\n );\n\n return (\n <div {...remainingProps} className={wrapperClasses} ref={wrapperRef}>\n <DropdownToggleButton\n id={id}\n aria-label={ariaLabel}\n splitButton={splitButton}\n bsStyle={bsStyle}\n bsSize={bsSize}\n variant={variant}\n iconOnly={iconOnly}\n iconName={iconName}\n disabled={disabled}\n ref={setRefDropdownToggle}\n onClick={handleDropdownButtonClick}\n outerRef={ref}\n toggleButtonType={toggleButtonType}\n className={toggleClassName}\n trackingAttributes={trackingAttributes}\n >\n {title}\n {shouldShowCaret && <Caret />}\n </DropdownToggleButton>\n {splitButton && (\n <SplitCaretButton\n id={id}\n bsStyle={bsStyle}\n bsSize={bsSize}\n disabled={disabled}\n className={toggleClassName}\n onClick={handleSplitCaretButtonClick}\n ref={setRefSplitButtonToggle}\n />\n )}\n {isOpen && usePortal && ReactDOM.createPortal(dropdownMenu, dropdownRoot)}\n {isOpen && !usePortal && dropdownMenu}\n </div>\n );\n });\n};\n\nconst ButtonDropdown = createButtonDropdown();\n\nexport default ButtonDropdown;\n"],"names":["getPlacement","pullRight","dropup","createButtonDropdown","forwardRef","props","ref","id","ariaLabel","items","bsSize","bsStyle","variant","disabled","iconName","iconOnly","title","splitButton","customDropdown","open","noCaret","onOpen","noop","onClose","onLabelButtonClick","usePortal","popperConfig","toggleButtonType","toggleClassName","trackingAttributes","dropdownClassName","className","remainingProps","internalOpen","setInternalOpen","useState","refDropdownToggle","setRefDropdownToggle","refDropdownMenu","setRefDropdownMenu","refSplitButtonToggle","setRefSplitButtonToggle","defaultPopperConfig","popperParentRef","styles","attributes","usePopper","isUncontrolled","isNil","isOpen","wrapperRef","useClickOutside","event","closeMenu","DEFAULT_EVENT_TYPES","dropdownRoot","getOrCreatePortalRoot","shouldShowCaret","useEffect","toggleOpen","openMenu","handleSplitLabelButtonClick","handleSplitCaretButtonClick","handleDropdownButtonClick","wrapperClasses","classNames","dropdownClasses","dropdownMenu","jsx","MenuItemList","MenuItems","jsxs","DropdownToggleButton","Caret","SplitCaretButton","ReactDOM","ButtonDropdown"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { HTMLProps, PropsWithChildren } from 'react';
2
2
  import { BUTTON_VARIANT, BUTTON_SIZE, BUTTON_STYLE } from '../button/Button';
3
+ import { TrackingAttributes } from '../../utils/analytics/googleAnalyticsUtils';
3
4
  export type DropdownToggleButtonType = 'button' | 'tag' | 'label';
4
5
  export type DropdownToggleEvent<T extends DropdownToggleButtonType = 'button'> = T extends 'button' ? React.MouseEvent<HTMLButtonElement> : React.MouseEvent<HTMLDivElement>;
5
6
  export type DropdownToggleButtonProps = HTMLProps<HTMLButtonElement> & {
@@ -15,6 +16,7 @@ export type DropdownToggleButtonProps = HTMLProps<HTMLButtonElement> & {
15
16
  toggleButtonType?: DropdownToggleButtonType;
16
17
  outerRef?: React.Ref<HTMLButtonElement | HTMLDivElement>;
17
18
  className?: string;
19
+ trackingAttributes?: TrackingAttributes;
18
20
  };
19
21
  declare const DropdownToggleButton: import('react').ForwardRefExoticComponent<Omit<PropsWithChildren<DropdownToggleButtonProps>, "ref"> & import('react').RefAttributes<HTMLDivElement | HTMLButtonElement>>;
20
22
  export default DropdownToggleButton;
@@ -1,83 +1,87 @@
1
- import { jsx as i } from "react/jsx-runtime";
2
- import { forwardRef as B } from "react";
3
- import C from "../button/Button.js";
4
- import R from "../../hooks/useMergeRefs.js";
5
- import c from "../../utils/classNames.js";
6
- const z = B((f, u) => {
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ import { forwardRef as C } from "react";
3
+ import R from "../button/Button.js";
4
+ import h from "../../hooks/useMergeRefs.js";
5
+ import g from "../../utils/classNames.js";
6
+ const A = C((f, d) => {
7
7
  const {
8
8
  id: e,
9
9
  disabled: t,
10
- iconName: d,
11
- bsSize: g,
12
- bsStyle: m,
13
- variant: b,
10
+ iconName: b,
11
+ bsSize: m,
12
+ bsStyle: p,
13
+ variant: y,
14
14
  splitButton: o = !1,
15
15
  onClick: s,
16
- toggleButtonType: p = "button",
16
+ toggleButtonType: u = "button",
17
17
  className: n = "",
18
- as: h,
18
+ as: k,
19
19
  children: r,
20
- outerRef: y,
21
- iconOnly: N,
22
- ...l
23
- } = f, a = R(y, u), v = c(!o && "dropdown-toggle", !o && n), w = c(
20
+ outerRef: N,
21
+ iconOnly: v,
22
+ trackingAttributes: l,
23
+ ...a
24
+ } = f, i = h(N, d), w = g(!o && "dropdown-toggle", !o && n), x = g(
24
25
  "dropdown-toggle",
25
26
  "label",
26
- `label-${m}`,
27
+ `label-${p}`,
27
28
  "display-flex align-items-center",
28
29
  "user-select-none cursor-pointer",
29
30
  t && "pointer-events-none",
30
31
  n
31
- ), x = c(
32
+ ), B = g(
32
33
  "dropdown-toggle",
33
34
  "tag",
34
35
  "clickable height-auto",
35
- g === "sm" && "tag-small",
36
+ m === "sm" && "tag-small",
36
37
  "display-flex align-items-center",
37
38
  "user-select-none cursor-pointer",
38
39
  t && "pointer-events-none",
39
40
  n
40
41
  );
41
- return p === "tag" ? /* @__PURE__ */ i(
42
+ return u === "tag" ? /* @__PURE__ */ c(
42
43
  "div",
43
44
  {
45
+ ...a,
44
46
  ...l,
45
47
  id: e,
46
- ref: a,
48
+ ref: i,
47
49
  onClick: s,
48
- className: x,
50
+ className: B,
49
51
  children: r
50
52
  }
51
- ) : p === "label" ? /* @__PURE__ */ i(
53
+ ) : u === "label" ? /* @__PURE__ */ c(
52
54
  "div",
53
55
  {
56
+ ...a,
54
57
  ...l,
55
58
  id: e,
56
- ref: a,
59
+ ref: i,
57
60
  onClick: s,
58
- className: w,
61
+ className: x,
59
62
  children: r
60
63
  }
61
- ) : /* @__PURE__ */ i(
62
- C,
64
+ ) : /* @__PURE__ */ c(
65
+ R,
63
66
  {
67
+ ...a,
64
68
  ...l,
65
69
  id: o ? `button-${e}` : e,
66
70
  type: "button",
67
- ref: a,
71
+ ref: i,
68
72
  disabled: t,
69
- bsStyle: m,
70
- bsSize: g,
71
- variant: b,
73
+ bsStyle: p,
74
+ bsSize: m,
75
+ variant: y,
72
76
  onClick: s,
73
- iconName: d,
74
- iconOnly: N,
75
- className: v,
77
+ iconName: b,
78
+ iconOnly: v,
79
+ className: w,
76
80
  children: r
77
81
  }
78
82
  );
79
83
  });
80
84
  export {
81
- z as default
85
+ A as default
82
86
  };
83
87
  //# sourceMappingURL=DropdownToggleButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownToggleButton.js","sources":["../../../src/components/dropdown/DropdownToggleButton.tsx"],"sourcesContent":["import { forwardRef, type HTMLProps, type PropsWithChildren } from 'react';\n\nimport Button, { type BUTTON_VARIANT, type BUTTON_SIZE, type BUTTON_STYLE } from '../button/Button';\nimport useMergeRefs from '../../hooks/useMergeRefs';\nimport classNames from '../../utils/classNames';\n\nexport type DropdownToggleButtonType = 'button' | 'tag' | 'label';\n\nexport type DropdownToggleEvent<T extends DropdownToggleButtonType = 'button'> = T extends 'button'\n ? React.MouseEvent<HTMLButtonElement>\n : React.MouseEvent<HTMLDivElement>;\n\nexport type DropdownToggleButtonProps = HTMLProps<HTMLButtonElement> & {\n id?: string;\n disabled?: boolean;\n iconName?: string;\n splitButton?: boolean;\n iconOnly?: boolean;\n onClick: (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement>) => void;\n bsSize: BUTTON_SIZE;\n bsStyle: BUTTON_STYLE;\n variant?: BUTTON_VARIANT;\n toggleButtonType?: DropdownToggleButtonType;\n outerRef?: React.Ref<HTMLButtonElement | HTMLDivElement>;\n className?: string;\n};\n\nconst DropdownToggleButton = forwardRef<\n HTMLButtonElement | HTMLDivElement,\n PropsWithChildren<DropdownToggleButtonProps>\n>((props, ref) => {\n const {\n id,\n disabled,\n iconName,\n bsSize,\n bsStyle,\n variant,\n splitButton = false,\n onClick,\n toggleButtonType = 'button',\n className = '',\n as: _as,\n children,\n outerRef,\n iconOnly,\n ...remainingProps\n } = props;\n\n const toggleRef = useMergeRefs(outerRef, ref);\n\n const buttonClasses = classNames(!splitButton && 'dropdown-toggle', !splitButton && className);\n\n const labelClasses = classNames(\n 'dropdown-toggle',\n 'label',\n `label-${bsStyle}`,\n 'display-flex align-items-center',\n 'user-select-none cursor-pointer',\n disabled && 'pointer-events-none',\n className\n );\n const tagClasses = classNames(\n 'dropdown-toggle',\n 'tag',\n 'clickable height-auto',\n bsSize === 'sm' && 'tag-small',\n 'display-flex align-items-center',\n 'user-select-none cursor-pointer',\n disabled && 'pointer-events-none',\n className\n );\n\n if (toggleButtonType === 'tag') {\n return (\n <div\n {...(remainingProps as typeof HTMLDivElement)}\n id={id}\n ref={toggleRef}\n onClick={onClick}\n className={tagClasses}\n >\n {children}\n </div>\n );\n }\n\n if (toggleButtonType === 'label') {\n return (\n <div\n {...(remainingProps as typeof HTMLDivElement)}\n id={id}\n ref={toggleRef}\n onClick={onClick}\n className={labelClasses}\n >\n {children}\n </div>\n );\n }\n\n return (\n <Button\n {...remainingProps}\n id={splitButton ? `button-${id}` : id}\n type='button'\n ref={toggleRef}\n disabled={disabled}\n bsStyle={bsStyle}\n bsSize={bsSize}\n variant={variant}\n onClick={onClick}\n iconName={iconName}\n iconOnly={iconOnly}\n className={buttonClasses}\n >\n {children}\n </Button>\n );\n});\n\nexport default DropdownToggleButton;\n"],"names":["DropdownToggleButton","forwardRef","props","ref","id","disabled","iconName","bsSize","bsStyle","variant","splitButton","onClick","toggleButtonType","className","_as","children","outerRef","iconOnly","remainingProps","toggleRef","useMergeRefs","buttonClasses","classNames","labelClasses","tagClasses","jsx","Button"],"mappings":";;;;;AA2BA,MAAMA,IAAuBC,EAG3B,CAACC,GAAOC,MAAQ;AACd,QAAM;AAAA,IACF,IAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,SAAAC;AAAA,IACA,kBAAAC,IAAmB;AAAA,IACnB,WAAAC,IAAY;AAAA,IACZ,IAAIC;AAAA,IACJ,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACHhB,GAEEiB,IAAYC,EAAaJ,GAAUb,CAAG,GAEtCkB,IAAgBC,EAAW,CAACZ,KAAe,mBAAmB,CAACA,KAAeG,CAAS,GAEvFU,IAAeD;AAAA,IACjB;AAAA,IACA;AAAA,IACA,SAASd,CAAO;AAAA,IAChB;AAAA,IACA;AAAA,IACAH,KAAY;AAAA,IACZQ;AAAA,EAAA,GAEEW,IAAaF;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACAf,MAAW,QAAQ;AAAA,IACnB;AAAA,IACA;AAAA,IACAF,KAAY;AAAA,IACZQ;AAAA,EAAA;AAGJ,SAAID,MAAqB,QAEjB,gBAAAa;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAIP;AAAA,MACL,IAAAd;AAAA,MACA,KAAKe;AAAA,MACL,SAAAR;AAAA,MACA,WAAWa;AAAA,MAEV,UAAAT;AAAA,IAAA;AAAA,EAAA,IAKTH,MAAqB,UAEjB,gBAAAa;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAIP;AAAA,MACL,IAAAd;AAAA,MACA,KAAKe;AAAA,MACL,SAAAR;AAAA,MACA,WAAWY;AAAA,MAEV,UAAAR;AAAA,IAAA;AAAA,EAAA,IAMT,gBAAAU;AAAA,IAACC;AAAA,IAAA;AAAA,MACI,GAAGR;AAAA,MACJ,IAAIR,IAAc,UAAUN,CAAE,KAAKA;AAAA,MACnC,MAAK;AAAA,MACL,KAAKe;AAAA,MACL,UAAAd;AAAA,MACA,SAAAG;AAAA,MACA,QAAAD;AAAA,MACA,SAAAE;AAAA,MACA,SAAAE;AAAA,MACA,UAAAL;AAAA,MACA,UAAAW;AAAA,MACA,WAAWI;AAAA,MAEV,UAAAN;AAAA,IAAA;AAAA,EAAA;AAGb,CAAC;"}
1
+ {"version":3,"file":"DropdownToggleButton.js","sources":["../../../src/components/dropdown/DropdownToggleButton.tsx"],"sourcesContent":["import { forwardRef, type HTMLProps, type PropsWithChildren } from 'react';\n\nimport Button, { type BUTTON_VARIANT, type BUTTON_SIZE, type BUTTON_STYLE } from '../button/Button';\nimport useMergeRefs from '../../hooks/useMergeRefs';\nimport classNames from '../../utils/classNames';\nimport type { TrackingAttributes } from '../../utils/analytics/googleAnalyticsUtils';\n\nexport type DropdownToggleButtonType = 'button' | 'tag' | 'label';\n\nexport type DropdownToggleEvent<T extends DropdownToggleButtonType = 'button'> = T extends 'button'\n ? React.MouseEvent<HTMLButtonElement>\n : React.MouseEvent<HTMLDivElement>;\n\nexport type DropdownToggleButtonProps = HTMLProps<HTMLButtonElement> & {\n id?: string;\n disabled?: boolean;\n iconName?: string;\n splitButton?: boolean;\n iconOnly?: boolean;\n onClick: (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement>) => void;\n bsSize: BUTTON_SIZE;\n bsStyle: BUTTON_STYLE;\n variant?: BUTTON_VARIANT;\n toggleButtonType?: DropdownToggleButtonType;\n outerRef?: React.Ref<HTMLButtonElement | HTMLDivElement>;\n className?: string;\n trackingAttributes?: TrackingAttributes;\n};\n\nconst DropdownToggleButton = forwardRef<\n HTMLButtonElement | HTMLDivElement,\n PropsWithChildren<DropdownToggleButtonProps>\n>((props, ref) => {\n const {\n id,\n disabled,\n iconName,\n bsSize,\n bsStyle,\n variant,\n splitButton = false,\n onClick,\n toggleButtonType = 'button',\n className = '',\n as: _as,\n children,\n outerRef,\n iconOnly,\n trackingAttributes,\n ...remainingProps\n } = props;\n\n const toggleRef = useMergeRefs(outerRef, ref);\n\n const buttonClasses = classNames(!splitButton && 'dropdown-toggle', !splitButton && className);\n\n const labelClasses = classNames(\n 'dropdown-toggle',\n 'label',\n `label-${bsStyle}`,\n 'display-flex align-items-center',\n 'user-select-none cursor-pointer',\n disabled && 'pointer-events-none',\n className\n );\n const tagClasses = classNames(\n 'dropdown-toggle',\n 'tag',\n 'clickable height-auto',\n bsSize === 'sm' && 'tag-small',\n 'display-flex align-items-center',\n 'user-select-none cursor-pointer',\n disabled && 'pointer-events-none',\n className\n );\n\n if (toggleButtonType === 'tag') {\n return (\n <div\n {...(remainingProps as typeof HTMLDivElement)}\n {...trackingAttributes}\n id={id}\n ref={toggleRef}\n onClick={onClick}\n className={tagClasses}\n >\n {children}\n </div>\n );\n }\n\n if (toggleButtonType === 'label') {\n return (\n <div\n {...(remainingProps as typeof HTMLDivElement)}\n {...trackingAttributes}\n id={id}\n ref={toggleRef}\n onClick={onClick}\n className={labelClasses}\n >\n {children}\n </div>\n );\n }\n\n return (\n <Button\n {...remainingProps}\n {...trackingAttributes}\n id={splitButton ? `button-${id}` : id}\n type='button'\n ref={toggleRef}\n disabled={disabled}\n bsStyle={bsStyle}\n bsSize={bsSize}\n variant={variant}\n onClick={onClick}\n iconName={iconName}\n iconOnly={iconOnly}\n className={buttonClasses}\n >\n {children}\n </Button>\n );\n});\n\nexport default DropdownToggleButton;\n"],"names":["DropdownToggleButton","forwardRef","props","ref","id","disabled","iconName","bsSize","bsStyle","variant","splitButton","onClick","toggleButtonType","className","_as","children","outerRef","iconOnly","trackingAttributes","remainingProps","toggleRef","useMergeRefs","buttonClasses","classNames","labelClasses","tagClasses","jsx","Button"],"mappings":";;;;;AA6BA,MAAMA,IAAuBC,EAG3B,CAACC,GAAOC,MAAQ;AACd,QAAM;AAAA,IACF,IAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,SAAAC;AAAA,IACA,kBAAAC,IAAmB;AAAA,IACnB,WAAAC,IAAY;AAAA,IACZ,IAAIC;AAAA,IACJ,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACHjB,GAEEkB,IAAYC,EAAaL,GAAUb,CAAG,GAEtCmB,IAAgBC,EAAW,CAACb,KAAe,mBAAmB,CAACA,KAAeG,CAAS,GAEvFW,IAAeD;AAAA,IACjB;AAAA,IACA;AAAA,IACA,SAASf,CAAO;AAAA,IAChB;AAAA,IACA;AAAA,IACAH,KAAY;AAAA,IACZQ;AAAA,EAAA,GAEEY,IAAaF;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACAhB,MAAW,QAAQ;AAAA,IACnB;AAAA,IACA;AAAA,IACAF,KAAY;AAAA,IACZQ;AAAA,EAAA;AAGJ,SAAID,MAAqB,QAEjB,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAIP;AAAA,MACJ,GAAGD;AAAA,MACJ,IAAAd;AAAA,MACA,KAAKgB;AAAA,MACL,SAAAT;AAAA,MACA,WAAWc;AAAA,MAEV,UAAAV;AAAA,IAAA;AAAA,EAAA,IAKTH,MAAqB,UAEjB,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAIP;AAAA,MACJ,GAAGD;AAAA,MACJ,IAAAd;AAAA,MACA,KAAKgB;AAAA,MACL,SAAAT;AAAA,MACA,WAAWa;AAAA,MAEV,UAAAT;AAAA,IAAA;AAAA,EAAA,IAMT,gBAAAW;AAAA,IAACC;AAAA,IAAA;AAAA,MACI,GAAGR;AAAA,MACH,GAAGD;AAAA,MACJ,IAAIR,IAAc,UAAUN,CAAE,KAAKA;AAAA,MACnC,MAAK;AAAA,MACL,KAAKgB;AAAA,MACL,UAAAf;AAAA,MACA,SAAAG;AAAA,MACA,QAAAD;AAAA,MACA,SAAAE;AAAA,MACA,SAAAE;AAAA,MACA,UAAAL;AAAA,MACA,UAAAW;AAAA,MACA,WAAWK;AAAA,MAEV,UAAAP;AAAA,IAAA;AAAA,EAAA;AAGb,CAAC;"}
@@ -1,162 +1,160 @@
1
- import { jsx as e, jsxs as U } from "react/jsx-runtime";
1
+ import { jsx as e, jsxs as j } from "react/jsx-runtime";
2
2
  import { useMemo as N, useEffect as K } from "react";
3
- import { noop as O } from "es-toolkit/function";
4
- import { compact as b } from "es-toolkit/compat";
5
- import { MAP_TYPE_DEFAULT as t, MAP_TYPE_FLEET_STYLE as n, MAP_TYPE_TERRAIN as s, MAP_TYPE_SATELLITE as p, MAP_TYPE_NIGHT as _ } from "../../../constants.js";
6
- import W from "../MapSettingsPanel.js";
7
- import M from "../MapSettingsItem.js";
8
- import $ from "../MapSettingsTile.js";
9
- import { MapIcon as a, MAP_TYPE_NIGHT_INACTIVE as Y, MAP_TYPE_NIGHT_ACTIVE as q, MAP_TYPE_SATELLITE_INACTIVE as V, MAP_TYPE_SATELLITE_ACTIVE as z, MAP_TYPE_TERRAIN_INACTIVE as F, MAP_TYPE_TERRAIN_ACTIVE as B, MAP_TYPE_FLAT_TRUCK_INACTIVE as k, MAP_TYPE_FLAT_TRUCK_ACTIVE as J, MAP_TYPE_FLAT_INACTIVE as D, MAP_TYPE_FLAT_ACTIVE as Q } from "../../../../icons/MapIcon.js";
10
- import X from "../items/MapSettingsDropdownHeader.js";
11
- const le = (R) => {
3
+ import { noop as W } from "es-toolkit/function";
4
+ import { compact as f } from "es-toolkit/compat";
5
+ import { MAP_TYPE_DEFAULT as i, MAP_TYPE_FLEET_STYLE as n, MAP_TYPE_TERRAIN as T, MAP_TYPE_SATELLITE as s, MAP_TYPE_NIGHT as _ } from "../../../constants.js";
6
+ import q from "../MapSettingsPanel.js";
7
+ import A from "../MapSettingsItem.js";
8
+ import z from "../MapSettingsTile.js";
9
+ import { MapIcon as a, MAP_TYPE_NIGHT_INACTIVE as Y, MAP_TYPE_NIGHT_ACTIVE as B, MAP_TYPE_SATELLITE_INACTIVE as d, MAP_TYPE_SATELLITE_ACTIVE as J, MAP_TYPE_TERRAIN_INACTIVE as F, MAP_TYPE_TERRAIN_ACTIVE as O, MAP_TYPE_FLAT_TRUCK_INACTIVE as V, MAP_TYPE_FLAT_TRUCK_ACTIVE as Q, MAP_TYPE_FLAT_INACTIVE as k, MAP_TYPE_FLAT_ACTIVE as X } from "../../../../icons/MapIcon.js";
10
+ import Z from "../items/MapSettingsDropdownHeader.js";
11
+ import "../../../../../../utils/init/initConfig.js";
12
+ const ce = (R) => {
12
13
  const {
13
- mapType: T,
14
- onMapTypeChange: c = O,
15
- enableNightMap: H = !0,
16
- visibleMapTypes: g = [
17
- t,
14
+ mapType: l,
15
+ onMapTypeChange: r = W,
16
+ enableNightMap: D = !0,
17
+ visibleMapTypes: S = [
18
+ i,
18
19
  n,
20
+ T,
19
21
  s,
20
- p,
21
22
  _
22
23
  ],
23
- defaultTypeLabel: A,
24
+ defaultTypeLabel: M,
24
25
  truckTypeLabel: E,
25
26
  terrainTypeLabel: I,
26
- satelliteTypeLabel: y,
27
- nightTypeLabel: P,
28
- dropdownHeaderText: v,
29
- ...w
30
- } = R, l = N(() => new Set(g), [g]), i = (o) => l.has(o), m = i(_) && H, f = N(
31
- () => b([
32
- l.has(t) && !A && t,
33
- l.has(n) && !E && n,
34
- l.has(s) && !I && s,
35
- l.has(p) && !y && p,
36
- m && !P && _
27
+ satelliteTypeLabel: P,
28
+ nightTypeLabel: y,
29
+ dropdownHeaderText: b,
30
+ ...H
31
+ } = R, o = N(() => new Set(S), [S]), t = (p) => o.has(p), m = t(_) && D, w = N(
32
+ () => f([
33
+ o.has(i) && !M && i,
34
+ o.has(n) && !E && n,
35
+ o.has(T) && !I && T,
36
+ o.has(s) && !P && s,
37
+ m && !y && _
37
38
  ]),
38
39
  [
39
- A,
40
+ M,
40
41
  m,
41
- P,
42
42
  y,
43
+ P,
43
44
  I,
44
45
  E,
45
- l
46
+ o
46
47
  ]
47
48
  );
48
49
  K(() => {
49
- typeof process < "u" && process.env.NODE_ENV === "production" || f.length !== 0 && console.warn(
50
- `[MapTypeSettings] Missing labels for visible map types: ${f.join(", ")}. Pass the corresponding \`...TypeLabel\` props to improve clarity.`
51
- );
52
- }, [f]);
53
- const r = N(
50
+ }, [w]);
51
+ const c = N(
54
52
  () => ({
55
- isDefault: T === t,
56
- isFleetStyle: T === n,
57
- isTerrain: T === s,
58
- isSatellite: T === p,
59
- isNight: T === _
53
+ isDefault: l === i,
54
+ isFleetStyle: l === n,
55
+ isTerrain: l === T,
56
+ isSatellite: l === s,
57
+ isNight: l === _
60
58
  }),
61
- [T]
62
- ), x = (o) => {
63
- if (o.isDefault)
64
- return /* @__PURE__ */ e(a, { name: D });
65
- if (o.isFleetStyle)
59
+ [l]
60
+ ), x = (p) => {
61
+ if (p.isDefault)
66
62
  return /* @__PURE__ */ e(a, { name: k });
67
- if (o.isTerrain)
68
- return /* @__PURE__ */ e(a, { name: F });
69
- if (o.isSatellite)
63
+ if (p.isFleetStyle)
70
64
  return /* @__PURE__ */ e(a, { name: V });
71
- if (o.isNight)
65
+ if (p.isTerrain)
66
+ return /* @__PURE__ */ e(a, { name: F });
67
+ if (p.isSatellite)
68
+ return /* @__PURE__ */ e(a, { name: d });
69
+ if (p.isNight)
72
70
  return /* @__PURE__ */ e(a, { name: Y });
73
- }, j = v && /* @__PURE__ */ e(X, { label: v }, "mapTypeDropdownHeader"), S = /* @__PURE__ */ e(
74
- M,
71
+ }, G = b && /* @__PURE__ */ e(Z, { label: b }, "mapTypeDropdownHeader"), v = /* @__PURE__ */ e(
72
+ A,
75
73
  {
76
74
  className: "MapTypeNight",
77
- onClick: () => c(_),
78
- isActive: r.isNight,
79
- activeIcon: /* @__PURE__ */ e(a, { name: q }),
75
+ onClick: () => r(_),
76
+ isActive: c.isNight,
77
+ activeIcon: /* @__PURE__ */ e(a, { name: B }),
80
78
  inactiveIcon: /* @__PURE__ */ e(a, { name: Y }),
81
- label: P
79
+ label: y
82
80
  },
83
81
  "MapTypeNight"
84
- ), h = /* @__PURE__ */ e(
85
- M,
82
+ ), L = /* @__PURE__ */ e(
83
+ A,
86
84
  {
87
85
  className: "MapTypeSatellite",
88
- onClick: () => c(p),
89
- isActive: r.isSatellite,
90
- activeIcon: /* @__PURE__ */ e(a, { name: z }),
91
- inactiveIcon: /* @__PURE__ */ e(a, { name: V }),
92
- label: y
86
+ onClick: () => r(s),
87
+ isActive: c.isSatellite,
88
+ activeIcon: /* @__PURE__ */ e(a, { name: J }),
89
+ inactiveIcon: /* @__PURE__ */ e(a, { name: d }),
90
+ label: P
93
91
  },
94
92
  "MapTypeSatellite"
95
- ), L = /* @__PURE__ */ e(
96
- M,
93
+ ), g = /* @__PURE__ */ e(
94
+ A,
97
95
  {
98
96
  className: "MapTypeTerrain",
99
- onClick: () => c(s),
100
- isActive: r.isTerrain,
101
- activeIcon: /* @__PURE__ */ e(a, { name: B }),
97
+ onClick: () => r(T),
98
+ isActive: c.isTerrain,
99
+ activeIcon: /* @__PURE__ */ e(a, { name: O }),
102
100
  inactiveIcon: /* @__PURE__ */ e(a, { name: F }),
103
101
  label: I
104
102
  },
105
103
  "MapTypeTerrain"
106
- ), u = /* @__PURE__ */ e(
107
- M,
104
+ ), h = /* @__PURE__ */ e(
105
+ A,
108
106
  {
109
107
  className: "MapTypeFlatTruck",
110
- onClick: () => c(n),
111
- isActive: r.isFleetStyle,
112
- activeIcon: /* @__PURE__ */ e(a, { name: J }),
113
- inactiveIcon: /* @__PURE__ */ e(a, { name: k }),
108
+ onClick: () => r(n),
109
+ isActive: c.isFleetStyle,
110
+ activeIcon: /* @__PURE__ */ e(a, { name: Q }),
111
+ inactiveIcon: /* @__PURE__ */ e(a, { name: V }),
114
112
  label: E
115
113
  },
116
114
  "MapTypeFlatTruck"
117
- ), d = /* @__PURE__ */ e(
118
- M,
115
+ ), C = /* @__PURE__ */ e(
116
+ A,
119
117
  {
120
118
  className: "MapTypeFlat",
121
- onClick: () => c(t),
122
- isActive: r.isDefault,
123
- activeIcon: /* @__PURE__ */ e(a, { name: Q }),
124
- inactiveIcon: /* @__PURE__ */ e(a, { name: D }),
125
- label: A
119
+ onClick: () => r(i),
120
+ isActive: c.isDefault,
121
+ activeIcon: /* @__PURE__ */ e(a, { name: X }),
122
+ inactiveIcon: /* @__PURE__ */ e(a, { name: k }),
123
+ label: M
126
124
  },
127
125
  "MapTypeFlat"
128
- ), G = b([
129
- j,
130
- m && S,
131
- i(p) && h,
132
- i(s) && L,
133
- i(n) && u,
134
- i(t) && d
135
- ]), C = b([
136
- i(t) && A,
137
- i(n) && E,
138
- i(s) && I,
139
- i(p) && y,
140
- m && P
126
+ ), U = f([
127
+ G,
128
+ m && v,
129
+ t(s) && L,
130
+ t(T) && g,
131
+ t(n) && h,
132
+ t(i) && C
133
+ ]), u = f([
134
+ t(i) && M,
135
+ t(n) && E,
136
+ t(T) && I,
137
+ t(s) && P,
138
+ m && y
141
139
  ]).length > 0;
142
140
  return /* @__PURE__ */ e(
143
- $,
141
+ z,
144
142
  {
145
143
  className: "MapTypeSettings",
146
- inactiveIcon: x(r),
147
- items: C ? G : void 0,
148
- panel: !C && /* @__PURE__ */ U(W, { children: [
149
- m && S,
150
- i(p) && h,
151
- i(s) && L,
152
- i(n) && u,
153
- i(t) && d
144
+ inactiveIcon: x(c),
145
+ items: u ? U : void 0,
146
+ panel: !u && /* @__PURE__ */ j(q, { children: [
147
+ m && v,
148
+ t(s) && L,
149
+ t(T) && g,
150
+ t(n) && h,
151
+ t(i) && C
154
152
  ] }),
155
- ...w
153
+ ...H
156
154
  }
157
155
  );
158
156
  };
159
157
  export {
160
- le as default
158
+ ce as default
161
159
  };
162
160
  //# sourceMappingURL=MapTypeSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapTypeSettings.js","sources":["../../../../../../../src/components/map/components/features/settings/builtinSettings/MapTypeSettings.tsx"],"sourcesContent":["import type React from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { noop } from 'es-toolkit/function';\nimport { compact } from 'es-toolkit/compat';\n\nimport {\n MAP_TYPE_DEFAULT,\n MAP_TYPE_FLEET_STYLE,\n MAP_TYPE_NIGHT,\n MAP_TYPE_SATELLITE,\n MAP_TYPE_TERRAIN,\n} from '../../../constants';\nimport MapSettingsPanel from '../MapSettingsPanel';\nimport MapSettingsItem from '../MapSettingsItem';\nimport MapSettingsTile from '../MapSettingsTile';\n\nimport {\n MapIcon,\n MAP_TYPE_FLAT_ACTIVE,\n MAP_TYPE_FLAT_INACTIVE,\n MAP_TYPE_FLAT_TRUCK_ACTIVE,\n MAP_TYPE_FLAT_TRUCK_INACTIVE,\n MAP_TYPE_SATELLITE_ACTIVE,\n MAP_TYPE_SATELLITE_INACTIVE,\n MAP_TYPE_TERRAIN_ACTIVE,\n MAP_TYPE_TERRAIN_INACTIVE,\n MAP_TYPE_NIGHT_ACTIVE,\n MAP_TYPE_NIGHT_INACTIVE,\n} from '../../../../icons/MapIcon';\nimport type { MapType } from '../../../../utils/mapTypes';\nimport MapSettingsDropdownHeader from '../items/MapSettingsDropdownHeader';\n\nexport type MapTypeSettingsProps = {\n /**\n * Currently selected base map type.\n */\n mapType?: MapType;\n\n /**\n * Global switch to enable or disable the night map type entry.\n *\n * @deprecated Prefer controlling night visibility via `visibleMapTypes`\n * by including or excluding `MAP_TYPE_NIGHT`.\n */\n enableNightMap?: boolean;\n\n /**\n * Map types that should be shown in the settings panel/dropdown.\n */\n visibleMapTypes?: MapType[];\n\n /**\n * Called when the user selects a different map type.\n */\n onMapTypeChange?: (type: MapType) => void;\n\n /**\n * Custom label for the default map type entry.\n */\n defaultTypeLabel?: string | JSX.Element;\n\n /**\n * Custom label for the truck/fleet-style map type entry.\n */\n truckTypeLabel?: string | JSX.Element;\n\n /**\n * Custom label for the terrain map type entry.\n */\n terrainTypeLabel?: string | JSX.Element;\n\n /**\n * Custom label for the satellite map type entry.\n */\n satelliteTypeLabel?: string | JSX.Element;\n\n /**\n * Custom label for the night map type entry.\n */\n nightTypeLabel?: string | JSX.Element;\n\n /**\n * Tooltip content shown for the map type settings trigger.\n */\n tooltip?: string | React.ReactNode;\n\n /**\n * Optional dropdown header text shown above labeled map type entries.\n */\n dropdownHeaderText?: string | JSX.Element;\n};\n\nconst MapTypeSettings = (props: MapTypeSettingsProps) => {\n const {\n mapType,\n onMapTypeChange = noop,\n enableNightMap = true,\n visibleMapTypes = [\n MAP_TYPE_DEFAULT,\n MAP_TYPE_FLEET_STYLE,\n MAP_TYPE_TERRAIN,\n MAP_TYPE_SATELLITE,\n MAP_TYPE_NIGHT,\n ],\n defaultTypeLabel,\n truckTypeLabel,\n terrainTypeLabel,\n satelliteTypeLabel,\n nightTypeLabel,\n dropdownHeaderText,\n ...remainingProps\n } = props;\n\n const visibleMapTypesSet = useMemo(() => new Set(visibleMapTypes), [visibleMapTypes]);\n\n const isMapTypeVisible = (type: MapType) => visibleMapTypesSet.has(type);\n\n const isNightMapVisible = isMapTypeVisible(MAP_TYPE_NIGHT) && enableNightMap;\n\n const visibleMapTypesWithoutLabel = useMemo(\n () =>\n compact([\n visibleMapTypesSet.has(MAP_TYPE_DEFAULT) && !defaultTypeLabel && MAP_TYPE_DEFAULT,\n visibleMapTypesSet.has(MAP_TYPE_FLEET_STYLE) && !truckTypeLabel && MAP_TYPE_FLEET_STYLE,\n visibleMapTypesSet.has(MAP_TYPE_TERRAIN) && !terrainTypeLabel && MAP_TYPE_TERRAIN,\n visibleMapTypesSet.has(MAP_TYPE_SATELLITE) && !satelliteTypeLabel && MAP_TYPE_SATELLITE,\n isNightMapVisible && !nightTypeLabel && MAP_TYPE_NIGHT,\n ]),\n [\n defaultTypeLabel,\n isNightMapVisible,\n nightTypeLabel,\n satelliteTypeLabel,\n terrainTypeLabel,\n truckTypeLabel,\n visibleMapTypesSet,\n ]\n );\n\n useEffect(() => {\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'production') {\n return;\n }\n\n if (visibleMapTypesWithoutLabel.length === 0) {\n return;\n }\n\n console.warn(\n `[MapTypeSettings] Missing labels for visible map types: ${visibleMapTypesWithoutLabel.join(', ')}. ` +\n 'Pass the corresponding `...TypeLabel` props to improve clarity.'\n );\n }, [visibleMapTypesWithoutLabel]);\n\n const type = useMemo(\n () => ({\n isDefault: mapType === MAP_TYPE_DEFAULT,\n isFleetStyle: mapType === MAP_TYPE_FLEET_STYLE,\n isTerrain: mapType === MAP_TYPE_TERRAIN,\n isSatellite: mapType === MAP_TYPE_SATELLITE,\n isNight: mapType === MAP_TYPE_NIGHT,\n }),\n [mapType]\n );\n\n const getIcon = (currentType: typeof type) => {\n if (currentType.isDefault) {\n return <MapIcon name={MAP_TYPE_FLAT_INACTIVE} />;\n }\n if (currentType.isFleetStyle) {\n return <MapIcon name={MAP_TYPE_FLAT_TRUCK_INACTIVE} />;\n }\n if (currentType.isTerrain) {\n return <MapIcon name={MAP_TYPE_TERRAIN_INACTIVE} />;\n }\n if (currentType.isSatellite) {\n return <MapIcon name={MAP_TYPE_SATELLITE_INACTIVE} />;\n }\n if (currentType.isNight) {\n return <MapIcon name={MAP_TYPE_NIGHT_INACTIVE} />;\n }\n };\n\n const dropdownHeader = dropdownHeaderText && (\n <MapSettingsDropdownHeader key='mapTypeDropdownHeader' label={dropdownHeaderText} />\n );\n\n const mapTypeNight = (\n <MapSettingsItem\n key='MapTypeNight'\n className='MapTypeNight'\n onClick={() => onMapTypeChange(MAP_TYPE_NIGHT)}\n isActive={type.isNight}\n activeIcon={<MapIcon name={MAP_TYPE_NIGHT_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_NIGHT_INACTIVE} />}\n label={nightTypeLabel}\n />\n );\n\n const mapTypeSatellite = (\n <MapSettingsItem\n key='MapTypeSatellite'\n className='MapTypeSatellite'\n onClick={() => onMapTypeChange(MAP_TYPE_SATELLITE)}\n isActive={type.isSatellite}\n activeIcon={<MapIcon name={MAP_TYPE_SATELLITE_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_SATELLITE_INACTIVE} />}\n label={satelliteTypeLabel}\n />\n );\n\n const mapTypeTerrain = (\n <MapSettingsItem\n key='MapTypeTerrain'\n className='MapTypeTerrain'\n onClick={() => onMapTypeChange(MAP_TYPE_TERRAIN)}\n isActive={type.isTerrain}\n activeIcon={<MapIcon name={MAP_TYPE_TERRAIN_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_TERRAIN_INACTIVE} />}\n label={terrainTypeLabel}\n />\n );\n\n const mapTypeTruck = (\n <MapSettingsItem\n key='MapTypeFlatTruck'\n className='MapTypeFlatTruck'\n onClick={() => onMapTypeChange(MAP_TYPE_FLEET_STYLE)}\n isActive={type.isFleetStyle}\n activeIcon={<MapIcon name={MAP_TYPE_FLAT_TRUCK_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_FLAT_TRUCK_INACTIVE} />}\n label={truckTypeLabel}\n />\n );\n\n const mapTypeDefault = (\n <MapSettingsItem\n key='MapTypeFlat'\n className='MapTypeFlat'\n onClick={() => onMapTypeChange(MAP_TYPE_DEFAULT)}\n isActive={type.isDefault}\n activeIcon={<MapIcon name={MAP_TYPE_FLAT_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_FLAT_INACTIVE} />}\n label={defaultTypeLabel}\n />\n );\n\n const mapTypeItems = compact([\n dropdownHeader,\n isNightMapVisible && mapTypeNight,\n isMapTypeVisible(MAP_TYPE_SATELLITE) && mapTypeSatellite,\n isMapTypeVisible(MAP_TYPE_TERRAIN) && mapTypeTerrain,\n isMapTypeVisible(MAP_TYPE_FLEET_STYLE) && mapTypeTruck,\n isMapTypeVisible(MAP_TYPE_DEFAULT) && mapTypeDefault,\n ]);\n\n const hasVisibleLabels =\n compact([\n isMapTypeVisible(MAP_TYPE_DEFAULT) && defaultTypeLabel,\n isMapTypeVisible(MAP_TYPE_FLEET_STYLE) && truckTypeLabel,\n isMapTypeVisible(MAP_TYPE_TERRAIN) && terrainTypeLabel,\n isMapTypeVisible(MAP_TYPE_SATELLITE) && satelliteTypeLabel,\n isNightMapVisible && nightTypeLabel,\n ]).length > 0;\n\n return (\n <MapSettingsTile\n className='MapTypeSettings'\n inactiveIcon={getIcon(type)}\n items={hasVisibleLabels ? mapTypeItems : undefined}\n panel={\n !hasVisibleLabels && (\n <MapSettingsPanel>\n {isNightMapVisible && mapTypeNight}\n {isMapTypeVisible(MAP_TYPE_SATELLITE) && mapTypeSatellite}\n {isMapTypeVisible(MAP_TYPE_TERRAIN) && mapTypeTerrain}\n {isMapTypeVisible(MAP_TYPE_FLEET_STYLE) && mapTypeTruck}\n {isMapTypeVisible(MAP_TYPE_DEFAULT) && mapTypeDefault}\n </MapSettingsPanel>\n )\n }\n {...remainingProps}\n />\n );\n};\n\nexport default MapTypeSettings;\n"],"names":["MapTypeSettings","props","mapType","onMapTypeChange","noop","enableNightMap","visibleMapTypes","MAP_TYPE_DEFAULT","MAP_TYPE_FLEET_STYLE","MAP_TYPE_TERRAIN","MAP_TYPE_SATELLITE","MAP_TYPE_NIGHT","defaultTypeLabel","truckTypeLabel","terrainTypeLabel","satelliteTypeLabel","nightTypeLabel","dropdownHeaderText","remainingProps","visibleMapTypesSet","useMemo","isMapTypeVisible","type","isNightMapVisible","visibleMapTypesWithoutLabel","compact","useEffect","getIcon","currentType","jsx","MapIcon","MAP_TYPE_FLAT_INACTIVE","MAP_TYPE_FLAT_TRUCK_INACTIVE","MAP_TYPE_TERRAIN_INACTIVE","MAP_TYPE_SATELLITE_INACTIVE","MAP_TYPE_NIGHT_INACTIVE","dropdownHeader","MapSettingsDropdownHeader","mapTypeNight","MapSettingsItem","MAP_TYPE_NIGHT_ACTIVE","mapTypeSatellite","MAP_TYPE_SATELLITE_ACTIVE","mapTypeTerrain","MAP_TYPE_TERRAIN_ACTIVE","mapTypeTruck","MAP_TYPE_FLAT_TRUCK_ACTIVE","mapTypeDefault","MAP_TYPE_FLAT_ACTIVE","mapTypeItems","hasVisibleLabels","MapSettingsTile","jsxs","MapSettingsPanel"],"mappings":"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"}
1
+ {"version":3,"file":"MapTypeSettings.js","sources":["../../../../../../../src/components/map/components/features/settings/builtinSettings/MapTypeSettings.tsx"],"sourcesContent":["import type React from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { noop } from 'es-toolkit/function';\nimport { compact } from 'es-toolkit/compat';\n\nimport {\n MAP_TYPE_DEFAULT,\n MAP_TYPE_FLEET_STYLE,\n MAP_TYPE_NIGHT,\n MAP_TYPE_SATELLITE,\n MAP_TYPE_TERRAIN,\n} from '../../../constants';\nimport MapSettingsPanel from '../MapSettingsPanel';\nimport MapSettingsItem from '../MapSettingsItem';\nimport MapSettingsTile from '../MapSettingsTile';\n\nimport {\n MapIcon,\n MAP_TYPE_FLAT_ACTIVE,\n MAP_TYPE_FLAT_INACTIVE,\n MAP_TYPE_FLAT_TRUCK_ACTIVE,\n MAP_TYPE_FLAT_TRUCK_INACTIVE,\n MAP_TYPE_SATELLITE_ACTIVE,\n MAP_TYPE_SATELLITE_INACTIVE,\n MAP_TYPE_TERRAIN_ACTIVE,\n MAP_TYPE_TERRAIN_INACTIVE,\n MAP_TYPE_NIGHT_ACTIVE,\n MAP_TYPE_NIGHT_INACTIVE,\n} from '../../../../icons/MapIcon';\nimport type { MapType } from '../../../../utils/mapTypes';\nimport MapSettingsDropdownHeader from '../items/MapSettingsDropdownHeader';\nimport { isProd } from '../../../../../../utils/init/initConfig';\n\nexport type MapTypeSettingsProps = {\n /**\n * Currently selected base map type.\n */\n mapType?: MapType;\n\n /**\n * Global switch to enable or disable the night map type entry.\n *\n * @deprecated Prefer controlling night visibility via `visibleMapTypes`\n * by including or excluding `MAP_TYPE_NIGHT`.\n */\n enableNightMap?: boolean;\n\n /**\n * Map types that should be shown in the settings panel/dropdown.\n */\n visibleMapTypes?: MapType[];\n\n /**\n * Called when the user selects a different map type.\n */\n onMapTypeChange?: (type: MapType) => void;\n\n /**\n * Custom label for the default map type entry.\n */\n defaultTypeLabel?: string | JSX.Element;\n\n /**\n * Custom label for the truck/fleet-style map type entry.\n */\n truckTypeLabel?: string | JSX.Element;\n\n /**\n * Custom label for the terrain map type entry.\n */\n terrainTypeLabel?: string | JSX.Element;\n\n /**\n * Custom label for the satellite map type entry.\n */\n satelliteTypeLabel?: string | JSX.Element;\n\n /**\n * Custom label for the night map type entry.\n */\n nightTypeLabel?: string | JSX.Element;\n\n /**\n * Tooltip content shown for the map type settings trigger.\n */\n tooltip?: string | React.ReactNode;\n\n /**\n * Optional dropdown header text shown above labeled map type entries.\n */\n dropdownHeaderText?: string | JSX.Element;\n};\n\nconst MapTypeSettings = (props: MapTypeSettingsProps) => {\n const {\n mapType,\n onMapTypeChange = noop,\n enableNightMap = true,\n visibleMapTypes = [\n MAP_TYPE_DEFAULT,\n MAP_TYPE_FLEET_STYLE,\n MAP_TYPE_TERRAIN,\n MAP_TYPE_SATELLITE,\n MAP_TYPE_NIGHT,\n ],\n defaultTypeLabel,\n truckTypeLabel,\n terrainTypeLabel,\n satelliteTypeLabel,\n nightTypeLabel,\n dropdownHeaderText,\n ...remainingProps\n } = props;\n\n const visibleMapTypesSet = useMemo(() => new Set(visibleMapTypes), [visibleMapTypes]);\n\n const isMapTypeVisible = (type: MapType) => visibleMapTypesSet.has(type);\n\n const isNightMapVisible = isMapTypeVisible(MAP_TYPE_NIGHT) && enableNightMap;\n\n const visibleMapTypesWithoutLabel = useMemo(\n () =>\n compact([\n visibleMapTypesSet.has(MAP_TYPE_DEFAULT) && !defaultTypeLabel && MAP_TYPE_DEFAULT,\n visibleMapTypesSet.has(MAP_TYPE_FLEET_STYLE) && !truckTypeLabel && MAP_TYPE_FLEET_STYLE,\n visibleMapTypesSet.has(MAP_TYPE_TERRAIN) && !terrainTypeLabel && MAP_TYPE_TERRAIN,\n visibleMapTypesSet.has(MAP_TYPE_SATELLITE) && !satelliteTypeLabel && MAP_TYPE_SATELLITE,\n isNightMapVisible && !nightTypeLabel && MAP_TYPE_NIGHT,\n ]),\n [\n defaultTypeLabel,\n isNightMapVisible,\n nightTypeLabel,\n satelliteTypeLabel,\n terrainTypeLabel,\n truckTypeLabel,\n visibleMapTypesSet,\n ]\n );\n\n useEffect(() => {\n if (isProd) {\n return;\n }\n\n if (visibleMapTypesWithoutLabel.length === 0) {\n return;\n }\n\n console.warn(\n `[MapTypeSettings] Missing labels for visible map types: ${visibleMapTypesWithoutLabel.join(', ')}. ` +\n 'Pass the corresponding `...TypeLabel` props to improve clarity.'\n );\n }, [visibleMapTypesWithoutLabel]);\n\n const type = useMemo(\n () => ({\n isDefault: mapType === MAP_TYPE_DEFAULT,\n isFleetStyle: mapType === MAP_TYPE_FLEET_STYLE,\n isTerrain: mapType === MAP_TYPE_TERRAIN,\n isSatellite: mapType === MAP_TYPE_SATELLITE,\n isNight: mapType === MAP_TYPE_NIGHT,\n }),\n [mapType]\n );\n\n const getIcon = (currentType: typeof type) => {\n if (currentType.isDefault) {\n return <MapIcon name={MAP_TYPE_FLAT_INACTIVE} />;\n }\n if (currentType.isFleetStyle) {\n return <MapIcon name={MAP_TYPE_FLAT_TRUCK_INACTIVE} />;\n }\n if (currentType.isTerrain) {\n return <MapIcon name={MAP_TYPE_TERRAIN_INACTIVE} />;\n }\n if (currentType.isSatellite) {\n return <MapIcon name={MAP_TYPE_SATELLITE_INACTIVE} />;\n }\n if (currentType.isNight) {\n return <MapIcon name={MAP_TYPE_NIGHT_INACTIVE} />;\n }\n };\n\n const dropdownHeader = dropdownHeaderText && (\n <MapSettingsDropdownHeader key='mapTypeDropdownHeader' label={dropdownHeaderText} />\n );\n\n const mapTypeNight = (\n <MapSettingsItem\n key='MapTypeNight'\n className='MapTypeNight'\n onClick={() => onMapTypeChange(MAP_TYPE_NIGHT)}\n isActive={type.isNight}\n activeIcon={<MapIcon name={MAP_TYPE_NIGHT_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_NIGHT_INACTIVE} />}\n label={nightTypeLabel}\n />\n );\n\n const mapTypeSatellite = (\n <MapSettingsItem\n key='MapTypeSatellite'\n className='MapTypeSatellite'\n onClick={() => onMapTypeChange(MAP_TYPE_SATELLITE)}\n isActive={type.isSatellite}\n activeIcon={<MapIcon name={MAP_TYPE_SATELLITE_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_SATELLITE_INACTIVE} />}\n label={satelliteTypeLabel}\n />\n );\n\n const mapTypeTerrain = (\n <MapSettingsItem\n key='MapTypeTerrain'\n className='MapTypeTerrain'\n onClick={() => onMapTypeChange(MAP_TYPE_TERRAIN)}\n isActive={type.isTerrain}\n activeIcon={<MapIcon name={MAP_TYPE_TERRAIN_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_TERRAIN_INACTIVE} />}\n label={terrainTypeLabel}\n />\n );\n\n const mapTypeTruck = (\n <MapSettingsItem\n key='MapTypeFlatTruck'\n className='MapTypeFlatTruck'\n onClick={() => onMapTypeChange(MAP_TYPE_FLEET_STYLE)}\n isActive={type.isFleetStyle}\n activeIcon={<MapIcon name={MAP_TYPE_FLAT_TRUCK_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_FLAT_TRUCK_INACTIVE} />}\n label={truckTypeLabel}\n />\n );\n\n const mapTypeDefault = (\n <MapSettingsItem\n key='MapTypeFlat'\n className='MapTypeFlat'\n onClick={() => onMapTypeChange(MAP_TYPE_DEFAULT)}\n isActive={type.isDefault}\n activeIcon={<MapIcon name={MAP_TYPE_FLAT_ACTIVE} />}\n inactiveIcon={<MapIcon name={MAP_TYPE_FLAT_INACTIVE} />}\n label={defaultTypeLabel}\n />\n );\n\n const mapTypeItems = compact([\n dropdownHeader,\n isNightMapVisible && mapTypeNight,\n isMapTypeVisible(MAP_TYPE_SATELLITE) && mapTypeSatellite,\n isMapTypeVisible(MAP_TYPE_TERRAIN) && mapTypeTerrain,\n isMapTypeVisible(MAP_TYPE_FLEET_STYLE) && mapTypeTruck,\n isMapTypeVisible(MAP_TYPE_DEFAULT) && mapTypeDefault,\n ]);\n\n const hasVisibleLabels =\n compact([\n isMapTypeVisible(MAP_TYPE_DEFAULT) && defaultTypeLabel,\n isMapTypeVisible(MAP_TYPE_FLEET_STYLE) && truckTypeLabel,\n isMapTypeVisible(MAP_TYPE_TERRAIN) && terrainTypeLabel,\n isMapTypeVisible(MAP_TYPE_SATELLITE) && satelliteTypeLabel,\n isNightMapVisible && nightTypeLabel,\n ]).length > 0;\n\n return (\n <MapSettingsTile\n className='MapTypeSettings'\n inactiveIcon={getIcon(type)}\n items={hasVisibleLabels ? mapTypeItems : undefined}\n panel={\n !hasVisibleLabels && (\n <MapSettingsPanel>\n {isNightMapVisible && mapTypeNight}\n {isMapTypeVisible(MAP_TYPE_SATELLITE) && mapTypeSatellite}\n {isMapTypeVisible(MAP_TYPE_TERRAIN) && mapTypeTerrain}\n {isMapTypeVisible(MAP_TYPE_FLEET_STYLE) && mapTypeTruck}\n {isMapTypeVisible(MAP_TYPE_DEFAULT) && mapTypeDefault}\n </MapSettingsPanel>\n )\n }\n {...remainingProps}\n />\n );\n};\n\nexport default MapTypeSettings;\n"],"names":["MapTypeSettings","props","mapType","onMapTypeChange","noop","enableNightMap","visibleMapTypes","MAP_TYPE_DEFAULT","MAP_TYPE_FLEET_STYLE","MAP_TYPE_TERRAIN","MAP_TYPE_SATELLITE","MAP_TYPE_NIGHT","defaultTypeLabel","truckTypeLabel","terrainTypeLabel","satelliteTypeLabel","nightTypeLabel","dropdownHeaderText","remainingProps","visibleMapTypesSet","useMemo","isMapTypeVisible","type","isNightMapVisible","visibleMapTypesWithoutLabel","compact","useEffect","getIcon","currentType","jsx","MapIcon","MAP_TYPE_FLAT_INACTIVE","MAP_TYPE_FLAT_TRUCK_INACTIVE","MAP_TYPE_TERRAIN_INACTIVE","MAP_TYPE_SATELLITE_INACTIVE","MAP_TYPE_NIGHT_INACTIVE","dropdownHeader","MapSettingsDropdownHeader","mapTypeNight","MapSettingsItem","MAP_TYPE_NIGHT_ACTIVE","mapTypeSatellite","MAP_TYPE_SATELLITE_ACTIVE","mapTypeTerrain","MAP_TYPE_TERRAIN_ACTIVE","mapTypeTruck","MAP_TYPE_FLAT_TRUCK_ACTIVE","mapTypeDefault","MAP_TYPE_FLAT_ACTIVE","mapTypeItems","hasVisibleLabels","MapSettingsTile","jsxs","MapSettingsPanel"],"mappings":"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"}