@carto/ps-react-ui 4.3.3 → 4.3.5

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 (301) hide show
  1. package/dist/components.js +3 -3
  2. package/dist/components.js.map +1 -1
  3. package/dist/{lasso-tool-BwRzEW7k.js → lasso-tool-wFqOD6wk.js} +13 -13
  4. package/dist/lasso-tool-wFqOD6wk.js.map +1 -0
  5. package/dist/types/components/common-types.d.ts +41 -0
  6. package/dist/types/components/types.d.ts +1 -1
  7. package/dist/types/widgets/echart/echart-ui.d.ts +1 -1
  8. package/dist/types/widgets/echart/types.d.ts +4 -0
  9. package/dist/widgets/actions.js +1 -1
  10. package/dist/widgets/bar.js +1 -1
  11. package/dist/widgets/category.js +1 -1
  12. package/dist/widgets/echart.js +96 -85
  13. package/dist/widgets/echart.js.map +1 -1
  14. package/dist/widgets/formula.js +1 -1
  15. package/dist/widgets/histogram.js +1 -1
  16. package/dist/widgets/markdown.js +1 -1
  17. package/dist/widgets/pie.js +1 -1
  18. package/dist/widgets/scatterplot.js +1 -1
  19. package/dist/widgets/spread.js +1 -1
  20. package/dist/widgets/table.js +1 -1
  21. package/dist/widgets/timeseries.js +1 -1
  22. package/dist/widgets/toolbar-actions.js.map +1 -1
  23. package/dist/widgets/wrapper.js +1 -1
  24. package/package.json +8 -3
  25. package/src/components/basemaps/basemaps.test.tsx +196 -0
  26. package/src/components/basemaps/basemaps.tsx +128 -0
  27. package/src/components/basemaps/const.ts +13 -0
  28. package/src/components/basemaps/group-wrapper.test.tsx +38 -0
  29. package/src/components/basemaps/group-wrapper.tsx +28 -0
  30. package/src/components/basemaps/group.test.tsx +52 -0
  31. package/src/components/basemaps/group.tsx +42 -0
  32. package/src/components/basemaps/header.test.tsx +54 -0
  33. package/src/components/basemaps/header.tsx +36 -0
  34. package/src/components/basemaps/styles.ts +76 -0
  35. package/src/components/basemaps/types.ts +30 -0
  36. package/src/components/common-types.ts +1 -0
  37. package/src/components/geolocation-controls/const.ts +6 -0
  38. package/src/components/geolocation-controls/geolocation-controls.test.tsx +133 -0
  39. package/src/components/geolocation-controls/geolocation-controls.tsx +95 -0
  40. package/src/components/geolocation-controls/types.ts +17 -0
  41. package/src/components/index.ts +64 -0
  42. package/src/components/lasso-tool/chip.tsx +37 -0
  43. package/src/components/lasso-tool/const.tsx +70 -0
  44. package/src/components/lasso-tool/icons.tsx +91 -0
  45. package/src/components/lasso-tool/lasso-tool-inline.test.tsx +168 -0
  46. package/src/components/lasso-tool/lasso-tool-inline.tsx +245 -0
  47. package/src/components/lasso-tool/lasso-tool.test.tsx +212 -0
  48. package/src/components/lasso-tool/lasso-tool.tsx +479 -0
  49. package/src/components/lasso-tool/styles.ts +143 -0
  50. package/src/components/lasso-tool/types.ts +114 -0
  51. package/src/components/list-data/list-data-skeleton.test.tsx +10 -0
  52. package/src/components/list-data/list-data-skeleton.tsx +40 -0
  53. package/src/components/list-data/list-data.test.tsx +94 -0
  54. package/src/components/list-data/list-data.tsx +106 -0
  55. package/src/components/list-data/styles.ts +37 -0
  56. package/src/components/list-data/types.ts +25 -0
  57. package/src/components/measurement-tools/const.tsx +108 -0
  58. package/src/components/measurement-tools/icons.tsx +54 -0
  59. package/src/components/measurement-tools/measurement-tools.test.tsx +165 -0
  60. package/src/components/measurement-tools/measurement-tools.tsx +443 -0
  61. package/src/components/measurement-tools/styles.ts +91 -0
  62. package/src/components/measurement-tools/types.ts +77 -0
  63. package/src/components/no-data-alert/no-data-alert.test.tsx +31 -0
  64. package/src/components/no-data-alert/no-data-alert.tsx +59 -0
  65. package/src/components/responsive-drawer/responsive-drawer.test.tsx +91 -0
  66. package/src/components/responsive-drawer/responsive-drawer.tsx +53 -0
  67. package/src/components/smart-tooltip/smart-tooltip.test.tsx +168 -0
  68. package/src/components/smart-tooltip/smart-tooltip.tsx +40 -0
  69. package/src/components/tooltip/tooltip.test.tsx +86 -0
  70. package/src/components/tooltip/tooltip.tsx +30 -0
  71. package/src/components/types.ts +1 -0
  72. package/src/components/zoom-controls/styles.ts +27 -0
  73. package/src/components/zoom-controls/types.ts +19 -0
  74. package/src/components/zoom-controls/zoom-controls.test.tsx +101 -0
  75. package/src/components/zoom-controls/zoom-controls.tsx +114 -0
  76. package/src/hooks/index.ts +2 -0
  77. package/src/hooks/use-debounce.ts +55 -0
  78. package/src/hooks/use-skeleton.test.tsx +32 -0
  79. package/src/hooks/use-skeleton.ts +19 -0
  80. package/src/hooks/use-widget-ref.ts +33 -0
  81. package/src/widgets/README.md +277 -0
  82. package/src/widgets/_shared/chart-config/config-factory.ts +67 -0
  83. package/src/widgets/_shared/chart-config/csv-modifiers.ts +56 -0
  84. package/src/widgets/_shared/chart-config/index.ts +21 -0
  85. package/src/widgets/_shared/chart-config/option-builders.ts +203 -0
  86. package/src/widgets/_shared/skeleton/index.ts +5 -0
  87. package/src/widgets/_shared/skeleton/styles.ts +20 -0
  88. package/src/widgets/actions/change-column/change-column-icon.tsx +10 -0
  89. package/src/widgets/actions/change-column/change-column.test.tsx +163 -0
  90. package/src/widgets/actions/change-column/change-column.tsx +141 -0
  91. package/src/widgets/actions/change-column/sortable-column-item.tsx +49 -0
  92. package/src/widgets/actions/change-column/types.ts +20 -0
  93. package/src/widgets/actions/download/download.test.tsx +322 -0
  94. package/src/widgets/actions/download/download.tsx +118 -0
  95. package/src/widgets/actions/download/exports.test.tsx +275 -0
  96. package/src/widgets/actions/download/exports.tsx +103 -0
  97. package/src/widgets/actions/download/types.ts +21 -0
  98. package/src/widgets/actions/fullscreen/fullscreen.test.tsx +269 -0
  99. package/src/widgets/actions/fullscreen/fullscreen.tsx +82 -0
  100. package/src/widgets/actions/fullscreen/styles.ts +17 -0
  101. package/src/widgets/actions/fullscreen/types.ts +27 -0
  102. package/src/widgets/actions/index.ts +51 -0
  103. package/src/widgets/actions/lock-selection/lock-selection.test.tsx +186 -0
  104. package/src/widgets/actions/lock-selection/lock-selection.tsx +133 -0
  105. package/src/widgets/actions/lock-selection/types.ts +41 -0
  106. package/src/widgets/actions/relative-data/relative-data.test.tsx +267 -0
  107. package/src/widgets/actions/relative-data/relative-data.tsx +133 -0
  108. package/src/widgets/actions/relative-data/style.ts +9 -0
  109. package/src/widgets/actions/relative-data/types.ts +31 -0
  110. package/src/widgets/actions/relative-data/utils.test.ts +223 -0
  111. package/src/widgets/actions/relative-data/utils.ts +58 -0
  112. package/src/widgets/actions/searcher/searcher-toggle.test.tsx +354 -0
  113. package/src/widgets/actions/searcher/searcher-toggle.tsx +73 -0
  114. package/src/widgets/actions/searcher/searcher.tsx +205 -0
  115. package/src/widgets/actions/searcher/types.ts +72 -0
  116. package/src/widgets/actions/shared/styles.ts +12 -0
  117. package/src/widgets/actions/stack-toggle/grouped-bar-chart-icon.tsx +14 -0
  118. package/src/widgets/actions/stack-toggle/stack-toggle.test.tsx +270 -0
  119. package/src/widgets/actions/stack-toggle/stack-toggle.tsx +146 -0
  120. package/src/widgets/actions/stack-toggle/types.ts +29 -0
  121. package/src/widgets/actions/zoom-toggle/index.ts +2 -0
  122. package/src/widgets/actions/zoom-toggle/style.ts +14 -0
  123. package/src/widgets/actions/zoom-toggle/types.ts +44 -0
  124. package/src/widgets/actions/zoom-toggle/zoom-toggle.tsx +186 -0
  125. package/src/widgets/bar/config.ts +122 -0
  126. package/src/widgets/bar/index.ts +9 -0
  127. package/src/widgets/bar/skeleton.tsx +60 -0
  128. package/src/widgets/bar/style.ts +33 -0
  129. package/src/widgets/bar/types.ts +16 -0
  130. package/src/widgets/category/category-ui.test.tsx +399 -0
  131. package/src/widgets/category/category-ui.tsx +156 -0
  132. package/src/widgets/category/components/category-bar.tsx +28 -0
  133. package/src/widgets/category/components/category-legend.tsx +30 -0
  134. package/src/widgets/category/components/category-row-multi.tsx +50 -0
  135. package/src/widgets/category/components/category-row-other.tsx +23 -0
  136. package/src/widgets/category/components/category-row-single.tsx +47 -0
  137. package/src/widgets/category/components/index.ts +14 -0
  138. package/src/widgets/category/config.ts +85 -0
  139. package/src/widgets/category/index.ts +30 -0
  140. package/src/widgets/category/skeleton.tsx +24 -0
  141. package/src/widgets/category/style.ts +133 -0
  142. package/src/widgets/category/types.ts +40 -0
  143. package/src/widgets/echart/const.ts +1 -0
  144. package/src/widgets/echart/echart-ui.test.tsx +537 -0
  145. package/src/widgets/echart/echart-ui.tsx +92 -0
  146. package/src/widgets/echart/echart.test.tsx +562 -0
  147. package/src/widgets/echart/echart.tsx +68 -0
  148. package/src/widgets/echart/index.ts +16 -0
  149. package/src/widgets/echart/options.ts +53 -0
  150. package/src/widgets/echart/types.ts +45 -0
  151. package/src/widgets/echart/utils.ts +169 -0
  152. package/src/widgets/error/error.test.tsx +331 -0
  153. package/src/widgets/error/error.tsx +40 -0
  154. package/src/widgets/error/index.ts +2 -0
  155. package/src/widgets/error/types.ts +14 -0
  156. package/src/widgets/formula/components/item.test.tsx +249 -0
  157. package/src/widgets/formula/components/item.tsx +18 -0
  158. package/src/widgets/formula/components/prefix.test.tsx +341 -0
  159. package/src/widgets/formula/components/prefix.tsx +18 -0
  160. package/src/widgets/formula/components/row.test.tsx +364 -0
  161. package/src/widgets/formula/components/row.tsx +21 -0
  162. package/src/widgets/formula/components/series.tsx +34 -0
  163. package/src/widgets/formula/components/suffix.test.tsx +383 -0
  164. package/src/widgets/formula/components/suffix.tsx +28 -0
  165. package/src/widgets/formula/components/value.test.tsx +329 -0
  166. package/src/widgets/formula/components/value.tsx +29 -0
  167. package/src/widgets/formula/config.ts +27 -0
  168. package/src/widgets/formula/formula-ui.test.tsx +399 -0
  169. package/src/widgets/formula/formula-ui.tsx +27 -0
  170. package/src/widgets/formula/index.ts +24 -0
  171. package/src/widgets/formula/serializer.test.tsx +144 -0
  172. package/src/widgets/formula/serializer.ts +28 -0
  173. package/src/widgets/formula/skeleton.tsx +10 -0
  174. package/src/widgets/formula/style.ts +23 -0
  175. package/src/widgets/formula/types.ts +50 -0
  176. package/src/widgets/histogram/config.ts +143 -0
  177. package/src/widgets/histogram/index.ts +8 -0
  178. package/src/widgets/histogram/skeleton.tsx +52 -0
  179. package/src/widgets/histogram/style.ts +8 -0
  180. package/src/widgets/histogram/types.ts +17 -0
  181. package/src/widgets/index.ts +25 -0
  182. package/src/widgets/loader/index.ts +4 -0
  183. package/src/widgets/loader/loader.tsx +70 -0
  184. package/src/widgets/loader/types.ts +11 -0
  185. package/src/widgets/loader/utils.test.ts +112 -0
  186. package/src/widgets/loader/utils.ts +35 -0
  187. package/src/widgets/markdown/config.ts +18 -0
  188. package/src/widgets/markdown/index.ts +14 -0
  189. package/src/widgets/markdown/markdown-ui.test.tsx +341 -0
  190. package/src/widgets/markdown/markdown-ui.tsx +52 -0
  191. package/src/widgets/markdown/markdown.tsx +20 -0
  192. package/src/widgets/markdown/skeleton.tsx +12 -0
  193. package/src/widgets/markdown/style.ts +28 -0
  194. package/src/widgets/markdown/types.ts +28 -0
  195. package/src/widgets/no-data/index.ts +2 -0
  196. package/src/widgets/no-data/no-data.test.tsx +447 -0
  197. package/src/widgets/no-data/no-data.tsx +116 -0
  198. package/src/widgets/no-data/style.ts +18 -0
  199. package/src/widgets/no-data/types.ts +72 -0
  200. package/src/widgets/note/index.ts +2 -0
  201. package/src/widgets/note/note.test.tsx +391 -0
  202. package/src/widgets/note/note.tsx +114 -0
  203. package/src/widgets/note/style.ts +29 -0
  204. package/src/widgets/note/types.ts +9 -0
  205. package/src/widgets/pie/config.ts +177 -0
  206. package/src/widgets/pie/index.ts +8 -0
  207. package/src/widgets/pie/skeleton.tsx +70 -0
  208. package/src/widgets/pie/style.ts +8 -0
  209. package/src/widgets/pie/types.ts +16 -0
  210. package/src/widgets/range/components/range-item.tsx +213 -0
  211. package/src/widgets/range/config.ts +10 -0
  212. package/src/widgets/range/index.ts +16 -0
  213. package/src/widgets/range/range-ui.test.tsx +203 -0
  214. package/src/widgets/range/range-ui.tsx +11 -0
  215. package/src/widgets/range/serializer.test.ts +70 -0
  216. package/src/widgets/range/serializer.ts +27 -0
  217. package/src/widgets/range/skeleton.tsx +14 -0
  218. package/src/widgets/range/style.ts +37 -0
  219. package/src/widgets/range/types.ts +39 -0
  220. package/src/widgets/scatterplot/config.ts +138 -0
  221. package/src/widgets/scatterplot/index.ts +8 -0
  222. package/src/widgets/scatterplot/skeleton.tsx +59 -0
  223. package/src/widgets/scatterplot/style.ts +21 -0
  224. package/src/widgets/scatterplot/types.ts +17 -0
  225. package/src/widgets/selection-summary/index.ts +6 -0
  226. package/src/widgets/selection-summary/selection-summary.tsx +46 -0
  227. package/src/widgets/selection-summary/style.ts +10 -0
  228. package/src/widgets/selection-summary/types.ts +14 -0
  229. package/src/widgets/skeleton-loader/index.ts +2 -0
  230. package/src/widgets/skeleton-loader/skeleton-loader.test.tsx +139 -0
  231. package/src/widgets/skeleton-loader/skeleton-loader.tsx +28 -0
  232. package/src/widgets/skeleton-loader/types.ts +8 -0
  233. package/src/widgets/spread/components/max-value.tsx +29 -0
  234. package/src/widgets/spread/components/min-value.tsx +29 -0
  235. package/src/widgets/spread/components/separator.tsx +6 -0
  236. package/src/widgets/spread/config.ts +34 -0
  237. package/src/widgets/spread/index.ts +23 -0
  238. package/src/widgets/spread/skeleton.tsx +10 -0
  239. package/src/widgets/spread/spread-ui.test.tsx +368 -0
  240. package/src/widgets/spread/spread-ui.tsx +29 -0
  241. package/src/widgets/spread/style.ts +22 -0
  242. package/src/widgets/spread/types.ts +47 -0
  243. package/src/widgets/stores/index.ts +9 -0
  244. package/src/widgets/stores/types.ts +192 -0
  245. package/src/widgets/stores/widget-store.test.ts +601 -0
  246. package/src/widgets/stores/widget-store.ts +239 -0
  247. package/src/widgets/subheader/index.ts +3 -0
  248. package/src/widgets/subheader/style.ts +20 -0
  249. package/src/widgets/subheader/subheader.test.tsx +45 -0
  250. package/src/widgets/subheader/subheader.tsx +16 -0
  251. package/src/widgets/subheader/types.ts +11 -0
  252. package/src/widgets/table/components/cell-header.tsx +58 -0
  253. package/src/widgets/table/components/cell.tsx +80 -0
  254. package/src/widgets/table/components/index.ts +4 -0
  255. package/src/widgets/table/components/pagination-actions.tsx +67 -0
  256. package/src/widgets/table/components/pagination.tsx +41 -0
  257. package/src/widgets/table/components/row.tsx +60 -0
  258. package/src/widgets/table/config.ts +71 -0
  259. package/src/widgets/table/helpers.test.ts +244 -0
  260. package/src/widgets/table/helpers.ts +107 -0
  261. package/src/widgets/table/hooks/index.ts +7 -0
  262. package/src/widgets/table/hooks/use-pagination.test.ts +294 -0
  263. package/src/widgets/table/hooks/use-pagination.ts +155 -0
  264. package/src/widgets/table/hooks/use-selection.test.ts +504 -0
  265. package/src/widgets/table/hooks/use-selection.ts +189 -0
  266. package/src/widgets/table/hooks/use-sort.test.ts +296 -0
  267. package/src/widgets/table/hooks/use-sort.ts +138 -0
  268. package/src/widgets/table/index.ts +53 -0
  269. package/src/widgets/table/serializer.ts +54 -0
  270. package/src/widgets/table/skeleton.tsx +48 -0
  271. package/src/widgets/table/style.ts +34 -0
  272. package/src/widgets/table/table-ui.tsx +64 -0
  273. package/src/widgets/table/types.ts +223 -0
  274. package/src/widgets/timeseries/config.ts +135 -0
  275. package/src/widgets/timeseries/index.ts +8 -0
  276. package/src/widgets/timeseries/skeleton.tsx +55 -0
  277. package/src/widgets/timeseries/style.ts +36 -0
  278. package/src/widgets/timeseries/types.ts +17 -0
  279. package/src/widgets/toolbar-actions/index.ts +6 -0
  280. package/src/widgets/toolbar-actions/styles.ts +38 -0
  281. package/src/widgets/toolbar-actions/toolbar-actions.test.tsx +691 -0
  282. package/src/widgets/toolbar-actions/toolbar-actions.tsx +145 -0
  283. package/src/widgets/toolbar-actions/types.ts +60 -0
  284. package/src/widgets/wrapper/components/actions.test.tsx +101 -0
  285. package/src/widgets/wrapper/components/actions.tsx +30 -0
  286. package/src/widgets/wrapper/components/options.test.tsx +323 -0
  287. package/src/widgets/wrapper/components/options.tsx +73 -0
  288. package/src/widgets/wrapper/components/title.test.tsx +126 -0
  289. package/src/widgets/wrapper/components/title.tsx +32 -0
  290. package/src/widgets/wrapper/index.ts +16 -0
  291. package/src/widgets/wrapper/styles.ts +98 -0
  292. package/src/widgets/wrapper/types.ts +55 -0
  293. package/src/widgets/wrapper/wrapper-ui.test.tsx +232 -0
  294. package/src/widgets/wrapper/wrapper-ui.tsx +57 -0
  295. package/src/widgets/wrapper/wrapper.test.tsx +365 -0
  296. package/src/widgets/wrapper/wrapper.tsx +50 -0
  297. package/dist/lasso-tool-BwRzEW7k.js.map +0 -1
  298. package/dist/types/common/common.d.ts +0 -3
  299. package/dist/types/common/index.d.ts +0 -26
  300. package/dist/types/common/lasso-tools.d.ts +0 -36
  301. package/dist/types/common/measurement-tools.d.ts +0 -65
@@ -0,0 +1,365 @@
1
+ import { describe, test, expect, vi, beforeEach } from 'vitest'
2
+ import { render, screen, fireEvent } from '@testing-library/react'
3
+ import { WidgetWrapper } from './wrapper'
4
+ import { useWidgetStore } from '../stores/widget-store'
5
+ import type { WrapperState } from './types'
6
+
7
+ describe('WidgetWrapper', () => {
8
+ beforeEach(() => {
9
+ useWidgetStore.getState().clearWidgets()
10
+ // Pre-set the widget in the store with required base fields
11
+ useWidgetStore.getState().setWidget<WrapperState>('test-wrapper', {
12
+ type: 'wrapper',
13
+ title: 'Test Title',
14
+ isLoading: false,
15
+ visible: true,
16
+ collapsed: false,
17
+ disabled: false,
18
+ })
19
+ })
20
+
21
+ const defaultProps = {
22
+ id: 'test-wrapper',
23
+ title: 'Test Title',
24
+ children: <div>Test Content</div>,
25
+ }
26
+
27
+ test('renders correctly with default props', () => {
28
+ render(<WidgetWrapper {...defaultProps} />)
29
+ expect(screen.getByText('Test Content')).toBeTruthy()
30
+ })
31
+
32
+ test('initializes widget state in store', () => {
33
+ render(<WidgetWrapper {...defaultProps} />)
34
+
35
+ const widget = useWidgetStore.getState().widgets[
36
+ 'test-wrapper'
37
+ ] as WrapperState
38
+ expect(widget).toBeTruthy()
39
+ expect(widget.id).toBe('test-wrapper')
40
+ expect(widget.title).toBe('Test Title')
41
+ expect(widget.isLoading).toBe(false)
42
+ // collapsed and disabled are set via props, undefined when not passed
43
+ expect(widget.collapsed).toBeUndefined()
44
+ expect(widget.disabled).toBeUndefined()
45
+ expect(widget.visible).toBe(true)
46
+ })
47
+
48
+ test('updates widget state when props change', () => {
49
+ // Render with Title 1
50
+ const { rerender } = render(
51
+ <WidgetWrapper {...defaultProps} title='Title 1' />,
52
+ )
53
+
54
+ let widget = useWidgetStore.getState().widgets[
55
+ 'test-wrapper'
56
+ ] as WrapperState
57
+ expect(widget.title).toBe('Title 1')
58
+
59
+ // Rerender with Title 2
60
+ rerender(<WidgetWrapper {...defaultProps} title='Title 2' />)
61
+
62
+ widget = useWidgetStore.getState().widgets['test-wrapper'] as WrapperState
63
+ expect(widget.title).toBe('Title 2')
64
+ })
65
+
66
+ test('initializes with collapsed state', () => {
67
+ render(<WidgetWrapper {...defaultProps} defaultCollapsed={true} />)
68
+
69
+ const widget = useWidgetStore.getState().widgets[
70
+ 'test-wrapper'
71
+ ] as WrapperState
72
+ expect(widget.collapsed).toBe(true)
73
+ })
74
+
75
+ test('initializes with disabled state', () => {
76
+ render(<WidgetWrapper {...defaultProps} disabled={true} />)
77
+
78
+ const widget = useWidgetStore.getState().widgets[
79
+ 'test-wrapper'
80
+ ] as WrapperState
81
+ expect(widget.disabled).toBe(true)
82
+ })
83
+
84
+ test('initializes with isLoading state', () => {
85
+ useWidgetStore
86
+ .getState()
87
+ .setWidget<WrapperState>('test-wrapper', { isLoading: true })
88
+ render(<WidgetWrapper {...defaultProps} />)
89
+
90
+ const widget = useWidgetStore.getState().widgets[
91
+ 'test-wrapper'
92
+ ] as WrapperState
93
+ expect(widget.isLoading).toBe(true)
94
+ })
95
+
96
+ test('handles collapse toggle correctly', () => {
97
+ const onChangeCollapsed = vi.fn()
98
+ useWidgetStore
99
+ .getState()
100
+ .setWidget<WrapperState>('test-wrapper', { collapsed: false })
101
+ render(
102
+ <WidgetWrapper {...defaultProps} onChangeCollapsed={onChangeCollapsed} />,
103
+ )
104
+
105
+ // Find the accordion and click to collapse
106
+ const accordion = screen.getByRole('button')
107
+ fireEvent.click(accordion)
108
+
109
+ expect(onChangeCollapsed).toHaveBeenCalledTimes(1)
110
+ const widget = useWidgetStore.getState().widgets[
111
+ 'test-wrapper'
112
+ ] as WrapperState
113
+ expect(widget.collapsed).toBe(true)
114
+ })
115
+
116
+ test('handles expand correctly', () => {
117
+ const onChangeCollapsed = vi.fn()
118
+ render(
119
+ <WidgetWrapper
120
+ {...defaultProps}
121
+ defaultCollapsed={true}
122
+ onChangeCollapsed={onChangeCollapsed}
123
+ />,
124
+ )
125
+
126
+ const accordion = screen.getByRole('button')
127
+ fireEvent.click(accordion)
128
+
129
+ expect(onChangeCollapsed).toHaveBeenCalledTimes(1)
130
+ const widget = useWidgetStore.getState().widgets[
131
+ 'test-wrapper'
132
+ ] as WrapperState
133
+ expect(widget.collapsed).toBe(false)
134
+ })
135
+
136
+ test('returns null when widget is not in store', () => {
137
+ // Clear the store to simulate widget not being set
138
+ const { container } = render(<WidgetWrapper {...defaultProps} />)
139
+
140
+ // Force the widget to be removed
141
+ useWidgetStore.getState().removeWidget('test-wrapper')
142
+
143
+ // Re-render to trigger the null check
144
+ render(
145
+ <WidgetWrapper id='non-existent-widget' title='Non-existent'>
146
+ <div>Content</div>
147
+ </WidgetWrapper>,
148
+ )
149
+
150
+ // The component should render initially
151
+ expect(container).toBeTruthy()
152
+ })
153
+
154
+ test('passes sx prop to WrapperUI', () => {
155
+ const sx = { backgroundColor: 'red' }
156
+ render(<WidgetWrapper {...defaultProps} sx={sx} />)
157
+
158
+ // Component should render (sx is passed through)
159
+ expect(screen.getByText('Test Content')).toBeTruthy()
160
+ })
161
+
162
+ test('passes actions to WrapperUI', () => {
163
+ const actions = [<button key='action1'>Action 1</button>]
164
+ render(<WidgetWrapper {...defaultProps} actions={actions} />)
165
+
166
+ expect(screen.getByText('Action 1')).toBeTruthy()
167
+ })
168
+
169
+ test('passes options to WrapperUI', () => {
170
+ const options = [
171
+ {
172
+ label: 'Option 1',
173
+ onClick: vi.fn(),
174
+ },
175
+ ]
176
+ render(<WidgetWrapper {...defaultProps} options={options} />)
177
+
178
+ // Options button should be rendered
179
+ const optionsButton = screen.getByLabelText('Options')
180
+ expect(optionsButton).toBeTruthy()
181
+ })
182
+
183
+ test('passes labels to WrapperUI', () => {
184
+ const labels = {
185
+ options: {
186
+ title: 'Custom Options',
187
+ },
188
+ }
189
+ render(<WidgetWrapper {...defaultProps} labels={labels} />)
190
+
191
+ // Component should render with labels
192
+ expect(screen.getByText('Test Content')).toBeTruthy()
193
+ })
194
+
195
+ test('updates widget when all props change', () => {
196
+ useWidgetStore.getState().setWidget<WrapperState>('test-wrapper', {
197
+ title: 'Initial Title',
198
+ collapsed: false,
199
+ disabled: false,
200
+ isLoading: false,
201
+ })
202
+ const { rerender } = render(<WidgetWrapper {...defaultProps} />)
203
+
204
+ useWidgetStore.getState().setWidget<WrapperState>('test-wrapper', {
205
+ title: 'Updated Title',
206
+ collapsed: true,
207
+ disabled: true,
208
+ isLoading: true,
209
+ })
210
+ rerender(<WidgetWrapper {...defaultProps} />)
211
+
212
+ const widget = useWidgetStore.getState().widgets[
213
+ 'test-wrapper'
214
+ ] as WrapperState
215
+ expect(widget.title).toBe('Updated Title')
216
+ expect(widget.collapsed).toBe(true)
217
+ expect(widget.disabled).toBe(true)
218
+ expect(widget.isLoading).toBe(true)
219
+ })
220
+
221
+ test('handles missing optional props', () => {
222
+ render(
223
+ <WidgetWrapper id='test-wrapper' title='Test Title'>
224
+ <div>Content</div>
225
+ </WidgetWrapper>,
226
+ )
227
+
228
+ const widget = useWidgetStore.getState().widgets[
229
+ 'test-wrapper'
230
+ ] as WrapperState
231
+ expect(widget.isLoading).toBe(false)
232
+ // collapsed and disabled are set via props, undefined when not passed
233
+ expect(widget.collapsed).toBeUndefined()
234
+ expect(widget.disabled).toBeUndefined()
235
+ })
236
+
237
+ test('renders WrapperUI with accordion', () => {
238
+ render(<WidgetWrapper {...defaultProps} />)
239
+
240
+ // Should render WrapperUI with accordion
241
+ const accordion = screen.getByRole('button')
242
+ expect(accordion).toBeTruthy()
243
+ expect(screen.getByText('Test Content')).toBeTruthy()
244
+ })
245
+
246
+ test('reads title from store when widget exists', () => {
247
+ // Pre-populate store with widget
248
+ useWidgetStore.getState().setWidget<WrapperState>('test-wrapper', {
249
+ type: 'wrapper',
250
+ title: 'Store Title',
251
+ isLoading: false,
252
+ visible: true,
253
+ })
254
+
255
+ render(
256
+ <WidgetWrapper id='test-wrapper' title='Store Title'>
257
+ <div>Content</div>
258
+ </WidgetWrapper>,
259
+ )
260
+
261
+ // Should display title from store
262
+ const widget = useWidgetStore.getState().widgets[
263
+ 'test-wrapper'
264
+ ] as WrapperState
265
+ expect(widget.title).toBe('Store Title')
266
+ })
267
+
268
+ test('renders actions even when widget is collapsed', () => {
269
+ const actions = [<button key='action1'>Action 1</button>]
270
+ useWidgetStore
271
+ .getState()
272
+ .setWidget<WrapperState>('test-wrapper', { collapsed: true })
273
+ render(<WidgetWrapper {...defaultProps} actions={actions} />)
274
+
275
+ // Actions are visible in the AccordionSummary even when collapsed
276
+ expect(screen.getByText('Action 1')).toBeTruthy()
277
+ })
278
+
279
+ test('shows actions when widget is expanded', () => {
280
+ const actions = [<button key='action1'>Action 1</button>]
281
+ useWidgetStore
282
+ .getState()
283
+ .setWidget<WrapperState>('test-wrapper', { collapsed: false })
284
+ render(<WidgetWrapper {...defaultProps} actions={actions} />)
285
+
286
+ // Actions should be visible when expanded
287
+ expect(screen.getByText('Action 1')).toBeTruthy()
288
+ })
289
+
290
+ test('actions remain visible when collapsing/expanding', () => {
291
+ const actions = [<button key='action1'>Action 1</button>]
292
+ useWidgetStore
293
+ .getState()
294
+ .setWidget<WrapperState>('test-wrapper', { collapsed: false })
295
+ const { rerender } = render(
296
+ <WidgetWrapper {...defaultProps} actions={actions} />,
297
+ )
298
+
299
+ // Actions visible when expanded
300
+ expect(screen.getByText('Action 1')).toBeTruthy()
301
+
302
+ // Collapse the widget
303
+ useWidgetStore
304
+ .getState()
305
+ .setWidget<WrapperState>('test-wrapper', { collapsed: true })
306
+ rerender(<WidgetWrapper {...defaultProps} actions={actions} />)
307
+
308
+ // Actions remain visible when collapsed (in AccordionSummary)
309
+ expect(screen.getByText('Action 1')).toBeTruthy()
310
+ })
311
+
312
+ test('isLoading state is independent from other states', () => {
313
+ useWidgetStore
314
+ .getState()
315
+ .setWidget<WrapperState>('test-wrapper', { isLoading: true })
316
+ render(<WidgetWrapper {...defaultProps} />)
317
+
318
+ const widget = useWidgetStore.getState().widgets[
319
+ 'test-wrapper'
320
+ ] as WrapperState
321
+
322
+ // isLoading in store
323
+ expect(widget.isLoading).toBe(true)
324
+ })
325
+
326
+ test('updates isLoading when state changes', () => {
327
+ useWidgetStore
328
+ .getState()
329
+ .setWidget<WrapperState>('test-wrapper', { isLoading: false })
330
+ const { rerender } = render(<WidgetWrapper {...defaultProps} />)
331
+
332
+ let widget = useWidgetStore.getState().widgets[
333
+ 'test-wrapper'
334
+ ] as WrapperState
335
+ expect(widget.isLoading).toBe(false)
336
+
337
+ useWidgetStore
338
+ .getState()
339
+ .setWidget<WrapperState>('test-wrapper', { isLoading: true })
340
+ rerender(<WidgetWrapper {...defaultProps} />)
341
+
342
+ widget = useWidgetStore.getState().widgets['test-wrapper'] as WrapperState
343
+ expect(widget.isLoading).toBe(true)
344
+ })
345
+
346
+ test('widget state persists across re-renders', () => {
347
+ const { rerender } = render(
348
+ <WidgetWrapper {...defaultProps} title='Persistent Title' />,
349
+ )
350
+
351
+ const widgetBefore = useWidgetStore.getState().widgets[
352
+ 'test-wrapper'
353
+ ] as WrapperState
354
+ expect(widgetBefore.title).toBe('Persistent Title')
355
+
356
+ // Re-render without changing props
357
+ rerender(<WidgetWrapper {...defaultProps} title='Persistent Title' />)
358
+
359
+ const widgetAfter = useWidgetStore.getState().widgets[
360
+ 'test-wrapper'
361
+ ] as WrapperState
362
+ expect(widgetAfter.title).toBe('Persistent Title')
363
+ expect(widgetAfter).toBeTruthy()
364
+ })
365
+ })
@@ -0,0 +1,50 @@
1
+ import type { WrapperProps, WrapperState } from './types'
2
+ import { WrapperUI } from './wrapper-ui'
3
+ import { useWidgetStore } from '../stores/widget-store'
4
+ import { useEffect } from 'react'
5
+
6
+ export function WidgetWrapper({
7
+ id,
8
+ title,
9
+ defaultCollapsed,
10
+ disabled,
11
+ sx,
12
+ actions,
13
+ options,
14
+ labels,
15
+ children,
16
+ onChangeCollapsed,
17
+ }: WrapperProps) {
18
+ const setWidget = useWidgetStore((state) => state.setWidget)
19
+
20
+ // Consolidated effect: batch all wrapper state updates into a single store update
21
+ // This prevents 3 separate re-render cycles on mount and prop changes
22
+ useEffect(() => {
23
+ setWidget<WrapperState>(id, {
24
+ collapsed: defaultCollapsed,
25
+ disabled,
26
+ title,
27
+ })
28
+ }, [defaultCollapsed, disabled, title, id, setWidget])
29
+
30
+ const handleChangeCollapsed = (
31
+ event: React.SyntheticEvent<Element, Event>,
32
+ expanded: boolean,
33
+ ) => {
34
+ onChangeCollapsed?.(event, expanded)
35
+ setWidget<WrapperState>(id, { collapsed: !expanded })
36
+ }
37
+
38
+ return (
39
+ <WrapperUI
40
+ id={id}
41
+ labels={labels}
42
+ actions={actions}
43
+ options={options}
44
+ sx={sx}
45
+ onChangeCollapsed={handleChangeCollapsed}
46
+ >
47
+ {children}
48
+ </WrapperUI>
49
+ )
50
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"lasso-tool-BwRzEW7k.js","sources":["../src/components/lasso-tool/icons.tsx","../src/components/lasso-tool/const.tsx","../src/components/lasso-tool/styles.ts","../src/components/lasso-tool/chip.tsx","../src/components/lasso-tool/lasso-tool.tsx"],"sourcesContent":["import type { SVGProps } from 'react'\n\nexport function DrawPolygonIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n {...props}\n >\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M4 18a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm16 0a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm-2.829 1a2.996 2.996 0 0 0 0 2H6.829a2.995 2.995 0 0 0 0-2h10.342Zm-2.463-5.707 3.998 4a3.013 3.013 0 0 0-1.414 1.414l-4-3.999a3.014 3.014 0 0 0 1.31-1.214l.106-.201ZM2.998 6.829a2.995 2.995 0 0 0 2.002 0v10.342a2.993 2.993 0 0 0-2.002 0V6.83ZM12 10a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm1.84-3.919c.464.483 1.09.81 1.79.896l-1.47 2.94a2.992 2.992 0 0 0-1.79-.894l1.47-2.942ZM16 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4ZM4 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm9.171.998a2.994 2.994 0 0 0 0 2.002H6.829a2.995 2.995 0 0 0 0-2.002h6.342Z'\n fill='currentColor'\n />\n </svg>\n )\n}\n\nexport function DrawSquareIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n {...props}\n >\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M4 18a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm16 0a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm-2.829 1a2.993 2.993 0 0 0-.17.974l-.001.052.007.183a3 3 0 0 0 .164.79H6.829a2.995 2.995 0 0 0 0-2h10.342ZM2.998 6.828a2.995 2.995 0 0 0 2.002 0V17.17a2.993 2.993 0 0 0-2.002 0V6.83Zm16.001 0a2.995 2.995 0 0 0 2 0V17.17a2.993 2.993 0 0 0-2 0V6.829ZM20 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4ZM4 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4Zm13.171.998a2.991 2.991 0 0 0-.17.976L17 4.026l.007.183a3 3 0 0 0 .164.79H6.829a2.995 2.995 0 0 0 0-2H17.17Z'\n fill='currentColor'\n />\n </svg>\n )\n}\n\nexport function DrawCircleIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n {...props}\n >\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm0 6a2 2 0 1 1 0 4 2 2 0 0 1 0-4Z'\n fill='currentColor'\n />\n </svg>\n )\n}\n\nexport function DrawLassoIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n {...props}\n >\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M12 3c4.935 0 9 3.736 9 9l-.002.343-.012.668c-.012.438-.033.86-.062 1.266l-.05.597C20.498 18.767 19.267 21 17 21c-1.192 0-1.971-.341-2.988-1.122l-.472-.375c-.401-.319-.64-.473-.888-.566a4.938 4.938 0 0 0-.415-.13l-.34-.085-.398-.086-.456-.086-.66-.111-1.708-.273a9.112 9.112 0 0 1-.952-.206C5.46 17.301 3 14.954 3 12.015c0-1.508.485-2.995 1.436-4.458.355.585.906 1.04 1.562 1.272C5.328 9.916 5 10.977 5 12.015c0 1.889 1.78 3.588 3.282 4.025l.085.023.345.076.517.092 1.619.257.583.1.518.098.237.05.433.103c.272.07.512.143.73.224.434.161.783.373 1.235.718l.457.362c.806.646 1.24.857 1.959.857.893 0 1.63-1.518 1.895-4.45l.045-.585c.013-.2.024-.407.033-.62l.02-.655c.005-.224.007-.454.007-.69 0-4.12-3.133-7-7-7a1 1 0 1 1 0-2ZM7 4a2 2 0 1 1 0 4 2 2 0 0 1 0-4Z'\n fill='currentColor'\n />\n </svg>\n )\n}\n\nexport function SelectToolIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n {...props}\n >\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='m10.083 19.394.057.113a1 1 0 0 0 1.72.007l2.869-4.786 4.786-2.87a1 1 0 0 0-.121-1.777l-14-6c-.83-.356-1.669.483-1.313 1.313l6.002 14ZM6.905 6.904l9.903 4.244-3.322 1.995-.102.069a1 1 0 0 0-.242.274l-1.992 3.321-4.245-9.903Z'\n fill='currentColor'\n />\n </svg>\n )\n}\n","import type { LassoToolsMode, LassoToolsModesMapping } from '../types'\nimport {\n DrawPolygonIcon,\n DrawSquareIcon,\n DrawCircleIcon,\n DrawLassoIcon,\n SelectToolIcon,\n} from './icons'\nimport type { LassoToolsComponentProps } from './types'\nimport type { RequiredDeep } from 'type-fest'\n\nexport const LASSO_TOOLS_LABELS: NonNullable<\n RequiredDeep<LassoToolsComponentProps['labels']>\n> = {\n action: {\n tooltip: {\n active: 'Click on the map to draw your spatial filter',\n inactive: 'Click on the map to draw your spatial filter',\n },\n },\n chip: {\n tooltip: {\n active: 'Hide drawing',\n inactive: 'Show drawing',\n },\n },\n options: {\n mode: {\n title: 'Choose a drawing tool',\n options: {\n circle: 'Circle',\n lasso: 'Lasso tool',\n polygon: 'Polygon',\n rectangle: 'Rectangle',\n edit: 'Edit feature',\n },\n },\n },\n noData: {\n title: 'Spatial filter not applied',\n description:\n 'Select a drawing or editing tool and click on the map to define your spatial filter',\n },\n actions: {\n toggleAll: {\n active: 'Hide all',\n inactive: 'Show all',\n },\n deleteAll: 'Remove all',\n },\n} as const\n\nexport const DEFAULT_LASSO_TOOLS_MODES_MAPPING: LassoToolsModesMapping<LassoToolsMode> =\n {\n polygon: {\n icon: DrawPolygonIcon,\n },\n rectangle: {\n icon: DrawSquareIcon,\n },\n circle: {\n icon: DrawCircleIcon,\n },\n lasso: {\n icon: DrawLassoIcon,\n },\n edit: {\n icon: SelectToolIcon,\n },\n } as const\n","import { alpha, type SxProps, type Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n overflow: 'hidden',\n\n '&.inline': {\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: ({ spacing }) => spacing(1),\n },\n },\n actions: {\n icon: {\n width: ({ spacing }) => spacing(4),\n height: ({ spacing }) => spacing(4),\n borderRadius: 0,\n '.MuiTouchRipple-ripple .MuiTouchRipple-child': {\n borderRadius: 0,\n },\n },\n },\n options: {\n menu: {\n paddingTop: ({ spacing }) => spacing(1),\n '&.inline': {\n boxShadow: 'none',\n backgroundColor: 'transparent',\n borderRadius: ({ spacing }) => spacing(0.5),\n\n '& .MuiDivider-root': {\n height: ({ spacing }) => spacing(4),\n\n '&.MuiToggleButtonGroup-groupedHorizontal': {\n height: ({ spacing }) => spacing(4),\n },\n '&.MuiToggleButtonGroup-groupedVertical': {\n height: 'auto',\n width: ({ spacing }) => spacing(4),\n margin: ({ spacing }) => `${spacing(0.5, 0, 1)} !important`,\n borderRadius: '0 !important',\n },\n },\n\n '& .MuiToggleButton-sizeSmall': {\n margin: 0,\n\n '&.MuiToggleButtonGroup-grouped:not(.MuiDivider-root)': {\n margin: 0,\n },\n '& + .MuiDivider-root.MuiToggleButtonGroup-groupedHorizontal': {\n height: ({ spacing }) => spacing(3),\n },\n '& + .MuiDivider-root.MuiToggleButtonGroup-groupedVertical': {\n height: 'auto',\n width: ({ spacing }) => spacing(3),\n },\n },\n\n '.MuiToggleButtonGroup-grouped:not(.MuiDivider-root)': {\n margin: 0,\n\n '&:first-of-type': {\n marginLeft: 0,\n },\n '&:not(:last-of-type)': {\n marginRight: ({ spacing }) => spacing(0.5),\n },\n },\n '&.MuiToggleButtonGroup-horizontal:not(.MuiDivider-root)': {\n '.MuiToggleButtonGroup-grouped': {\n margin: ({ spacing }) => spacing(0, 0.5),\n },\n },\n '&.MuiToggleButtonGroup-vertical:not(.MuiDivider-root)': {\n '.MuiToggleButtonGroup-grouped': {\n margin: ({ spacing }) => spacing(0, 0, 0.5),\n\n '&:not(:last-of-type)': {\n marginRight: 0,\n },\n '&:last-of-type': {\n marginBottom: 0,\n },\n },\n },\n },\n },\n icon: {\n borderRadius: 0,\n width: ({ spacing }) => spacing(3),\n },\n title: {\n paddingX: ({ spacing }) => spacing(2),\n paddingBottom: ({ spacing }) => spacing(0.5),\n\n '&.inline': {\n paddingX: 0,\n paddingBottom: 0,\n },\n },\n icons: {\n color: ({ palette }) => palette.text.primary,\n },\n tag: {\n borderRadius: ({ spacing }) => spacing(0.25),\n border: '1px solid',\n borderColor: ({ palette }) => palette.primary.main,\n paddingX: ({ spacing }) => spacing(0.5),\n color: ({ palette }) => palette.primary.main,\n backgroundColor: ({ palette }) => alpha(palette.primary.main, 0.08),\n },\n more: {\n width: ({ spacing }) => spacing(4),\n },\n },\n chip: {\n container: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(0.5),\n overflowX: 'auto',\n scrollbarWidth: 'none',\n paddingX: ({ spacing }) => spacing(1),\n\n '&.inline': {\n overflowX: 'visible',\n flexWrap: 'wrap',\n },\n },\n chip: {\n marginRight: ({ spacing }) => spacing(0.5),\n },\n disabled: {\n opacity: ({ palette }) => palette.action.disabledOpacity,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Chip } from '@mui/material'\nimport type { PickDeep } from 'type-fest'\nimport { LASSO_TOOLS_LABELS } from './const'\nimport { styles } from './styles'\nimport type { LassoToolsComponentProps, LassoToolsData } from './types'\nimport { Tooltip } from '../tooltip/tooltip'\n\nexport function LassoToolsUIChip({\n chipProps,\n value,\n labels,\n onChipToggle,\n onDelete,\n}: Pick<LassoToolsComponentProps, 'chipProps' | 'onDelete' | 'onChipToggle'> & {\n value: LassoToolsData\n labels?: PickDeep<LassoToolsComponentProps['labels'], 'chip'>['chip']\n}) {\n const chipState = value.visible ? 'active' : 'inactive'\n const chipLabel =\n labels?.tooltip?.[chipState] ?? LASSO_TOOLS_LABELS.chip.tooltip[chipState]\n\n return (\n <Tooltip title={chipLabel} placement='bottom' {...chipProps?.TooltipProps}>\n <Chip\n sx={{\n ...styles.chip.chip,\n }}\n color={value.visible ? 'secondary' : 'default'}\n size='small'\n onDelete={() => onDelete(value.id)}\n label={value.label}\n onClick={() => onChipToggle(value.id, !value.visible)}\n {...chipProps?.ChipsProps}\n />\n </Tooltip>\n )\n}\n","import { ArrowDropDown, MoreVertOutlined } from '@mui/icons-material'\nimport {\n Box,\n Divider,\n IconButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n Paper,\n SvgIcon,\n ToggleButton,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material'\nimport deepmerge from 'deepmerge'\nimport {\n useMemo,\n useState,\n type ComponentProps,\n type JSX,\n type MouseEvent,\n type PropsWithChildren,\n type ReactNode,\n} from 'react'\nimport type { PickDeep } from 'type-fest'\nimport { Tooltip } from '../tooltip/tooltip'\nimport type { LassoToolsModes } from '../types'\nimport { LassoToolsUIChip } from './chip'\nimport { LASSO_TOOLS_LABELS } from './const'\nimport { styles } from './styles'\nimport type { LassoToolsComponentProps, OptionsChildrenProps } from './types'\n\nexport function LassoToolsUI({\n enabled,\n values = [],\n actionProps,\n chipProps,\n labels,\n modes,\n modesMapping,\n modeSelected,\n PaperProps: { sx, ...PaperProps } = {},\n onActionToggle,\n onChipToggle,\n onDelete,\n onChangeMode,\n onAllChipToggle,\n onAllDelete,\n ChipsSlot = LassoToolsUI.Chips,\n ActionSlot = LassoToolsUI.Action,\n SecondaryActionsSlot = LassoToolsUI.SecondaryActions,\n OptionsSlot = LassoToolsUI.Options,\n}: LassoToolsComponentProps): JSX.Element {\n const slotArgs = {\n enabled,\n values,\n actionProps,\n chipProps,\n labels,\n modes,\n modesMapping,\n modeSelected,\n PaperProps,\n onActionToggle,\n onChipToggle,\n onDelete,\n onChangeMode,\n onAllChipToggle,\n onAllDelete,\n }\n return (\n <Paper\n sx={{\n ...styles.container,\n ...sx,\n }}\n {...PaperProps}\n >\n {!!ActionSlot && <ActionSlot {...slotArgs} />}\n {!!OptionsSlot && (\n <Options>\n {(props) => {\n return <OptionsSlot {...slotArgs} {...props} />\n }}\n </Options>\n )}\n {!!ChipsSlot && <ChipsSlot {...slotArgs} />}\n {!!SecondaryActionsSlot && <SecondaryActionsSlot {...slotArgs} />}\n </Paper>\n )\n}\n\nfunction LassoToolsUIAction({\n actionProps,\n labels,\n enabled,\n children,\n onActionToggle,\n}: PropsWithChildren<\n Pick<\n LassoToolsComponentProps,\n 'actionProps' | 'enabled' | 'onActionToggle'\n > & {\n labels?: PickDeep<LassoToolsComponentProps['labels'], 'action'>['action']\n }\n>) {\n const actionState = enabled ? 'active' : 'inactive'\n const actionLabel =\n labels?.tooltip?.[actionState] ??\n LASSO_TOOLS_LABELS.action.tooltip[actionState]\n\n return (\n <Tooltip\n title={actionLabel}\n placement='right'\n {...actionProps?.TooltipProps}\n >\n <ToggleButton\n value='toggle'\n sx={styles.actions.icon}\n onClick={() => onActionToggle(!enabled)}\n aria-label={actionLabel}\n selected={enabled}\n >\n {children}\n </ToggleButton>\n </Tooltip>\n )\n}\n\nfunction Options({\n TriggerProps: { Icon = <ArrowDropDown />, sx } = {},\n MenuProps,\n children,\n}: {\n TriggerProps?: {\n Icon?: ReactNode\n sx?: SxProps<Theme>\n }\n MenuProps?: Partial<ComponentProps<typeof Menu>>\n children: (props: OptionsChildrenProps) => JSX.Element\n}) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n\n const open = Boolean(anchorEl)\n\n const handleToggle = (event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = () => {\n setAnchorEl(null)\n }\n\n return (\n <>\n <IconButton\n sx={{\n ...styles.options.icon,\n ...sx,\n }}\n onClick={handleToggle}\n >\n {Icon}\n </IconButton>\n <Menu\n id='lasso-menu'\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n MenuListProps={{\n 'aria-labelledby': 'lasso-button',\n sx: styles.options.menu,\n }}\n {...MenuProps}\n >\n <div>\n {children({\n onClose: handleClose,\n })}\n </div>\n </Menu>\n </>\n )\n}\n\nfunction ModeList({\n data,\n labels,\n children,\n}: {\n labels?: PickDeep<LassoToolsComponentProps['labels'], 'options'>['options']\n data: LassoToolsComponentProps['modes'][keyof LassoToolsModes][]\n children: ReactNode\n}) {\n if (data.length <= 1) {\n return null\n }\n\n const modeTitle = labels?.mode?.title ?? LASSO_TOOLS_LABELS.options.mode.title\n\n return (\n <>\n <Typography\n variant='subtitle2'\n color='text.secondary'\n sx={styles.options.title}\n >\n {modeTitle}\n </Typography>\n {children}\n </>\n )\n}\n\nfunction OptionsList({\n data,\n modeSelected,\n labels,\n onChangeMode,\n onClose,\n}: Required<Pick<LassoToolsComponentProps, 'modeSelected' | 'onChangeMode'>> & {\n labels?: PickDeep<LassoToolsComponentProps['labels'], 'options'>['options']\n data: (LassoToolsComponentProps['modes'] &\n LassoToolsComponentProps['modesMapping'])[keyof LassoToolsModes][]\n onClose: OptionsChildrenProps['onClose']\n}) {\n const handleClick = (\n e: MouseEvent<HTMLLIElement>,\n value: (typeof data)[number]['value'],\n ) => {\n e.preventDefault()\n onChangeMode?.(value)\n onClose()\n }\n\n return data.map((mode) => {\n const options =\n labels?.mode?.options ?? LASSO_TOOLS_LABELS.options.mode.options\n const label = options[mode.value]\n\n return (\n <MenuItem\n key={mode.value}\n disabled={!!mode.disabled}\n onClick={(e) => handleClick(e, mode.value)}\n selected={mode.value === modeSelected}\n >\n <ListItemIcon sx={styles.options.icons}>\n <SvgIcon>\n <mode.icon />\n </SvgIcon>\n </ListItemIcon>\n <ListItemText>{label}</ListItemText>\n </MenuItem>\n )\n })\n}\n\nfunction SecondaryActionsWrapper({\n values,\n labels,\n onAllChipToggle,\n onAllDelete,\n}: Partial<\n Omit<\n LassoToolsComponentProps,\n 'ChipsSlot' | 'ActionsSlot' | 'OptionsSlot' | 'SecondaryActionsSlot'\n >\n>) {\n if (!values?.length || values.length <= 1) {\n return null\n }\n\n const hasVisible = values?.some((value) => value.visible)\n\n const toggleAllLabel = hasVisible\n ? (labels?.actions?.toggleAll?.active ??\n LASSO_TOOLS_LABELS.actions.toggleAll.active)\n : (labels?.actions?.toggleAll?.inactive ??\n LASSO_TOOLS_LABELS.actions.toggleAll.inactive)\n\n const deleteAllLabel =\n labels?.actions?.deleteAll ?? LASSO_TOOLS_LABELS.actions.deleteAll\n\n return (\n <>\n <Divider orientation='vertical' flexItem />\n <Options\n TriggerProps={{ Icon: <MoreVertOutlined />, sx: styles.options.more }}\n MenuProps={{\n anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'right',\n },\n transformOrigin: {\n vertical: 'top',\n horizontal: 'right',\n },\n }}\n >\n {(props) => {\n return (\n <>\n <MenuItem\n color='inherit'\n onClick={() => {\n onAllChipToggle?.()\n props.onClose()\n }}\n >\n {toggleAllLabel}\n </MenuItem>\n <Divider />\n <MenuItem\n color='error'\n onClick={() => {\n onAllDelete?.()\n props.onClose()\n }}\n >\n <Typography variant='body2' color='error'>\n {deleteAllLabel}\n </Typography>\n </MenuItem>\n </>\n )\n }}\n </Options>\n </>\n )\n}\n\nLassoToolsUI.Action = function ActionsWrapper({\n modes,\n modesMapping,\n modeSelected,\n actionProps,\n enabled,\n labels,\n onActionToggle,\n}: Partial<\n Omit<\n LassoToolsComponentProps,\n 'ChipsSlot' | 'ActionsSlot' | 'OptionsSlot' | 'SecondaryActionsSlot'\n >\n> & {\n labels?: PickDeep<LassoToolsComponentProps['labels'], 'actions'>['actions']\n}) {\n const data = useMemo(() => {\n return deepmerge(modes ?? {}, modesMapping ?? {})\n }, [modes, modesMapping])\n\n const handleToggle: LassoToolsComponentProps['onActionToggle'] = (data) => {\n return onActionToggle?.(data)\n }\n\n const modeExists = modeSelected ? modeSelected in (modes ?? {}) : false\n\n const mode = (\n modeExists ? modeSelected : Object.keys(data)[0]\n ) as keyof typeof data\n\n const modeSelectedValue = data[mode]\n\n return (\n <LassoToolsUIAction\n actionProps={actionProps}\n labels={labels?.action}\n enabled={enabled ?? false}\n onActionToggle={handleToggle}\n >\n {modeSelectedValue?.icon && <modeSelectedValue.icon />}\n </LassoToolsUIAction>\n )\n}\n\nLassoToolsUI.Chips = function ChipsWrapper({\n values,\n labels,\n chipProps,\n onDelete,\n onChipToggle,\n onActionToggle,\n}: Partial<\n Omit<\n LassoToolsComponentProps,\n 'ChipsSlot' | 'ActionsSlot' | 'OptionsSlot' | 'SecondaryActionsSlot'\n >\n>) {\n const handleDelete: LassoToolsComponentProps['onDelete'] = (valueId) => {\n onActionToggle?.(false)\n return onDelete?.(valueId)\n }\n\n return (\n !!values?.length && (\n <Box sx={styles.chip.container}>\n {values?.map((value) => (\n <LassoToolsUIChip\n key={value.id}\n value={value}\n labels={labels?.chip}\n chipProps={chipProps}\n onDelete={handleDelete}\n onChipToggle={(id, data) => onChipToggle?.(id, data)}\n />\n ))}\n </Box>\n )\n )\n}\n\nLassoToolsUI.SecondaryActions = SecondaryActionsWrapper\n\nLassoToolsUI.Options = function OptionsWrapper({\n values,\n modes,\n modesMapping,\n modeSelected,\n labels,\n onChangeMode,\n ...props\n}: Partial<\n Omit<\n LassoToolsComponentProps,\n 'ChipsSlot' | 'ActionsSlot' | 'OptionsSlot' | 'SecondaryActionsSlot'\n >\n> &\n OptionsChildrenProps) {\n const data = useMemo(() => {\n return deepmerge(modes ?? {}, modesMapping ?? {})\n }, [modes, modesMapping])\n\n const { edit, ..._modes } = data\n\n const modeExists = modeSelected ? modeSelected in (modes ?? {}) : false\n\n const mode = (\n modeExists ? modeSelected : Object.keys(data)[0]\n ) as keyof typeof data\n\n const modesValues = Object.values(_modes)\n\n const handleChangeMode: LassoToolsComponentProps['onChangeMode'] = (data) => {\n return onChangeMode?.(data)\n }\n\n return (\n <>\n <ModeList data={modesValues} labels={labels?.options}>\n <OptionsList\n {...props}\n labels={labels?.options}\n data={modesValues}\n modeSelected={mode}\n onChangeMode={handleChangeMode}\n />\n </ModeList>\n {!!edit && (\n <>\n <Divider />\n <OptionsList\n {...props}\n labels={labels?.options}\n data={[\n {\n ...edit,\n disabled: !values?.length,\n },\n ]}\n modeSelected={mode}\n onChangeMode={handleChangeMode}\n />\n </>\n )}\n </>\n )\n}\n"],"names":["DrawPolygonIcon","props","$","_c","t0","Symbol","for","t1","jsx","DrawSquareIcon","DrawCircleIcon","DrawLassoIcon","SelectToolIcon","LASSO_TOOLS_LABELS","action","tooltip","active","inactive","chip","options","mode","title","circle","lasso","polygon","rectangle","edit","noData","description","actions","toggleAll","deleteAll","DEFAULT_LASSO_TOOLS_MODES_MAPPING","icon","styles","container","display","flexDirection","alignItems","justifyContent","overflow","gap","spacing","width","height","borderRadius","menu","paddingTop","boxShadow","backgroundColor","margin","marginLeft","marginRight","marginBottom","paddingX","paddingBottom","icons","color","palette","text","primary","more","overflowX","scrollbarWidth","flexWrap","LassoToolsUIChip","chipProps","value","labels","onChipToggle","onDelete","chipState","visible","chipLabel","TooltipProps","t2","t3","t4","id","t5","t6","ChipsProps","t7","label","Chip","t8","Tooltip","LassoToolsUI","enabled","values","actionProps","modes","modesMapping","modeSelected","PaperProps","onActionToggle","onChangeMode","onAllChipToggle","onAllDelete","ChipsSlot","ActionSlot","SecondaryActionsSlot","OptionsSlot","undefined","sx","Chips","Action","SecondaryActions","Options","t9","slotArgs","t10","t11","t12","t13","t14","t15","jsxs","Paper","LassoToolsUIAction","children","actionState","actionLabel","ToggleButton","TriggerProps","Icon","ArrowDropDown","MenuProps","anchorEl","setAnchorEl","useState","open","Boolean","handleToggle","event","currentTarget","handleClose","Fragment","IconButton","Menu","onClose","ModeList","data","length","modeTitle","Typography","OptionsList","handleClick","e","preventDefault","map","MenuItem","disabled","ListItemIcon","SvgIcon","ListItemText","SecondaryActionsWrapper","toggleAllLabel","some","_temp","deleteAllLabel","Divider","MoreVertOutlined","anchorOrigin","vertical","horizontal","transformOrigin","useMemo","deepmerge","Object","keys","modeSelectedValue","handleDelete","valueId","Box","_modes","modesValues","handleChangeMode"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export interface EditableModesMapping {
2
- icon: ReactNode
3
- }
@@ -1,26 +0,0 @@
1
- export {
2
- CustomMeasureMode,
3
- MeasurementMode,
4
- MeasurementModeOption,
5
- MeasurementModes,
6
- MeasurementOptionsMode,
7
- MeasurementOptionsUnit,
8
- MeasurementSystem,
9
- MeasurementUnit,
10
- MeasurementUnitImperialDistance,
11
- MeasurementUnitMetricDistance,
12
- MeasurementUnitOption,
13
- MeasurementUnits,
14
- MeasurementModesMapping,
15
- MeasurementUnitsMapping,
16
- MeasureUnitMapping,
17
- } from './measurement-tools'
18
-
19
- export {
20
- LassoToolsMode,
21
- LassoToolsModeOption,
22
- LassoToolsModes,
23
- LassoToolOptionsMode,
24
- LassoToolsModesMapping,
25
- CustomLassoToolsMode,
26
- } from './lasso-tools'
@@ -1,36 +0,0 @@
1
- import type { Class } from 'type-fest'
2
- import type { EditableModesMapping } from './common'
3
-
4
- export type LassoToolsMode =
5
- | 'polygon'
6
- | 'rectangle'
7
- | 'circle'
8
- | 'lasso'
9
- | 'edit'
10
-
11
- export interface LassoToolsModeOption<
12
- M extends string = LassoToolsMode,
13
- T = GeoJSONEditMode,
14
- > {
15
- value: M
16
- mode: Class<T>
17
- }
18
-
19
- export type LassoToolsModes<
20
- M extends string = LassoToolsMode,
21
- T = GeoJSONEditMode,
22
- > = Record<M, LassoToolsModeOption<M, T>>
23
-
24
- export type LassoToolOptionsMode<M extends string = LassoToolsMode> = Record<
25
- M,
26
- string | undefined
27
- >
28
-
29
- export type LassoToolsModesMapping<M extends string> = Record<
30
- M,
31
- EditableModesMapping & {
32
- disabled?: boolean
33
- }
34
- >
35
-
36
- export type CustomLassoToolsMode<T> = InstanceType<Class<T>>
@@ -1,65 +0,0 @@
1
- import type { Class } from 'type-fest'
2
- import type { EditableModesMapping } from './common'
3
-
4
- export type MeasurementSystem = 'metric' | 'imperial'
5
-
6
- export type MeasurementUnitMetricDistance =
7
- | 'm-km'
8
- | 'kilometer'
9
- | 'meter'
10
- | 'centimeter'
11
- | 'milimeter'
12
-
13
- export type MeasurementUnitImperialDistance = 'ft-mi' | 'mile' | 'yard' | 'feet'
14
-
15
- export type MeasurementUnit =
16
- | MeasurementUnitMetricDistance
17
- | MeasurementUnitImperialDistance
18
-
19
- export type MeasurementMode = 'distance' | 'buffer' | 'area'
20
-
21
- export interface MeasurementModeOption<
22
- M extends string = MeasurementMode,
23
- T = GeoJSONEditMode,
24
- > {
25
- value: M
26
- mode: Class<T>
27
- }
28
-
29
- export type MeasurementModes<
30
- M extends string = MeasurementMode,
31
- T = GeoJSONEditMode,
32
- > = Record<M, MeasurementModeOption<M, T>>
33
-
34
- export interface MeasurementUnitOption<U extends string = MeasurementUnit> {
35
- value: U
36
- system?: MeasurementSystem
37
- }
38
-
39
- export type MeasurementUnits<
40
- T extends string = keyof MeasurementModes,
41
- U extends string = MeasurementUnit,
42
- > = Record<T, MeasurementUnitOption<U>[]>
43
-
44
- export type MeasurementOptionsMode<T extends string = MeasurementMode> = Record<
45
- T,
46
- string | undefined
47
- >
48
- export type MeasurementOptionsUnit<T extends string = MeasurementUnit> = Record<
49
- T,
50
- string | undefined
51
- >
52
-
53
- export type CustomMeasureMode<T> = InstanceType<Class<T>>
54
-
55
- export type MeasurementModesMapping<T extends string> = Record<
56
- T,
57
- EditableModesMapping
58
- >
59
-
60
- export interface MeasureUnitMapping {
61
- short: string
62
- }
63
-
64
- export type MeasurementUnitsMapping<U extends string = MeasurementUnit> =
65
- Record<U, MeasureUnitMapping>