datastake-daf 0.6.759 → 0.6.760

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 (44) hide show
  1. package/dist/components/index.js +924 -1046
  2. package/dist/constants/index.js +76 -0
  3. package/dist/pages/index.js +133 -311
  4. package/dist/services/index.js +91 -0
  5. package/dist/utils/index.js +388 -0
  6. package/package.json +1 -1
  7. package/rollup.config.js +20 -0
  8. package/src/@daf/core/components/EditForm/storyConfig2.js +866 -25029
  9. package/src/@daf/core/components/Screens/FindInformation/index.js +2 -1
  10. package/src/@daf/core/components/Screens/Users/columns.js +0 -6
  11. package/src/@daf/core/components/Table/NavigationAction/index.jsx +24 -0
  12. package/src/@daf/pages/Dashboards/SupplyChain/index.jsx +2 -2
  13. package/src/@daf/pages/Documents/columns.js +5 -22
  14. package/src/@daf/pages/Documents/index.jsx +2 -3
  15. package/src/@daf/pages/Events/Activities/columns.js +7 -59
  16. package/src/@daf/pages/Events/Activities/index.jsx +2 -3
  17. package/src/@daf/pages/Events/Incidents/columns.js +7 -61
  18. package/src/@daf/pages/Events/Incidents/index.jsx +2 -3
  19. package/src/@daf/pages/Events/columns.js +6 -47
  20. package/src/@daf/pages/Events/helper.js +14 -0
  21. package/src/@daf/pages/Events/index.jsx +2 -3
  22. package/src/@daf/pages/Locations/MineSite/columns.js +7 -12
  23. package/src/@daf/pages/Locations/MineSite/index.jsx +5 -4
  24. package/src/@daf/pages/Locations/columns.js +6 -32
  25. package/src/@daf/pages/Locations/index.jsx +2 -3
  26. package/src/@daf/pages/Partners/index.jsx +11 -0
  27. package/src/@daf/pages/Stakeholders/Operators/columns.js +2 -8
  28. package/src/@daf/pages/Stakeholders/Operators/index.jsx +2 -2
  29. package/src/@daf/pages/Stakeholders/Workers/columns.js +10 -49
  30. package/src/@daf/pages/Stakeholders/Workers/index.jsx +2 -3
  31. package/src/@daf/pages/Stakeholders/columns.js +4 -25
  32. package/src/@daf/pages/Stakeholders/index.jsx +2 -3
  33. package/src/@daf/pages/Summary/Minesite/components/LocationMap/index.js +0 -1
  34. package/src/@daf/pages/Summary/Minesite/index.jsx +2 -0
  35. package/src/@daf/pages/Summary/Operator/index.jsx +3 -1
  36. package/src/@daf/services/PartnerService.js +76 -0
  37. package/src/@daf/utils/tags.js +26 -0
  38. package/src/constants/breadCrumbs.js +22 -0
  39. package/src/constants.js +2 -0
  40. package/src/helpers/breadCrumbs.js +347 -0
  41. package/src/index.js +1 -1
  42. package/src/services.js +2 -1
  43. package/src/utils.js +5 -1
  44. package/dist/style/datastake/mapbox-gl.css +0 -330
@@ -0,0 +1,347 @@
1
+
2
+ export const buildBreadCrumbs = ({
3
+ config,
4
+ items,
5
+ t,
6
+ breadCrumbsLabels,
7
+ id,
8
+ getRedirectLink,
9
+ createOnClick,
10
+ goTo,
11
+ view,
12
+ skipInteractions = false,
13
+ }) => {
14
+ const pathConfig = config.path || [];
15
+
16
+ pathConfig.forEach((pathItem) => {
17
+ if (typeof pathItem === 'string') {
18
+ items.push({
19
+ label: t(breadCrumbsLabels[pathItem]),
20
+ onClick: () => {},
21
+ });
22
+ } else if (typeof pathItem === 'object') {
23
+ const { key, link, useRedirect } = pathItem;
24
+
25
+ if (key === 'id' && id) {
26
+ const resolvedLink = typeof link === 'function' ? link(id) : link;
27
+ const finalLink = useRedirect ? getRedirectLink(resolvedLink) : resolvedLink;
28
+
29
+ items.push({
30
+ label: id,
31
+ onClick: skipInteractions ? () => {} : (finalLink ? createOnClick(() => goTo(finalLink)) : () => {}),
32
+ });
33
+ } else {
34
+ const resolvedLink = typeof link === 'function' ? link(view, id) : link;
35
+ const finalLink = resolvedLink && useRedirect ? getRedirectLink(resolvedLink) : resolvedLink;
36
+
37
+ items.push({
38
+ label: t(breadCrumbsLabels[key]),
39
+ onClick: skipInteractions ? () => {} : (finalLink ? createOnClick(() => goTo(finalLink)) : () => {}),
40
+ });
41
+ }
42
+ }
43
+ });
44
+
45
+ if (config.includeId && id && id !== 'user') {
46
+ items.push({ label: id, onClick: () => {} });
47
+ }
48
+
49
+ if (config.suffix) {
50
+ config.suffix.forEach((suffixItem) => {
51
+ items.push({
52
+ label: t(breadCrumbsLabels[suffixItem]),
53
+ onClick: () => {},
54
+ });
55
+ });
56
+ }
57
+ }
58
+
59
+ export const renderBreadCrumbs = ({
60
+ t = () => {},
61
+ goTo = () => {},
62
+ view,
63
+ isAnalysis = false,
64
+ isEdit = false,
65
+ isView = false,
66
+ isDataStore = false,
67
+ id,
68
+ addedItems = [],
69
+ changeNotificationState,
70
+ breadCrumbConfig = {},
71
+ breadCrumbsLabels = {},
72
+ getRedirectLink = () => {},
73
+ condition,
74
+ conditionFallback = 'show-non-interactive', // 'show-non-interactive' | 'hide' | 'show-simplified'
75
+ }) => {
76
+ const items = [];
77
+
78
+ const createOnClick = (callback) => {
79
+ if (!callback) return () => {};
80
+
81
+ return () => {
82
+ if (changeNotificationState) {
83
+ changeNotificationState({ onYes: callback });
84
+ } else {
85
+ callback();
86
+ }
87
+ };
88
+ };
89
+
90
+ const evaluateCondition = (cond, context) => {
91
+ if (cond === undefined) return true; // No condition = always pass
92
+ if (typeof cond === 'function') return cond(context); // Function condition
93
+ return Boolean(cond); // Boolean condition
94
+ };
95
+
96
+ const config = breadCrumbConfig[view];
97
+
98
+ console.log({config, breadCrumbConfig, breadCrumbsLabels, condition})
99
+
100
+ if (config) {
101
+ const conditionContext = {
102
+ isDataStore,
103
+ isAnalysis,
104
+ isEdit,
105
+ isView,
106
+ id,
107
+ view,
108
+ t,
109
+ goTo,
110
+ getRedirectLink,
111
+ changeNotificationState,
112
+ addedItems,
113
+ };
114
+
115
+ const externalConditionPassed = evaluateCondition(condition, conditionContext);
116
+ const configConditionPassed = evaluateCondition(config.condition, conditionContext);
117
+
118
+ const shouldShowBreadcrumbs = externalConditionPassed && configConditionPassed;
119
+
120
+ if (!configConditionPassed) {
121
+ if (config.fallback) {
122
+ buildBreadCrumbs({
123
+ config: config.fallback,
124
+ items,
125
+ t,
126
+ breadCrumbsLabels,
127
+ id,
128
+ getRedirectLink,
129
+ createOnClick,
130
+ goTo,
131
+ view,
132
+ });
133
+ }
134
+ } else if (!externalConditionPassed) {
135
+ if (config.fallback) {
136
+ // Use config fallback when prop condition fails
137
+ buildBreadCrumbs({
138
+ config: config.fallback,
139
+ items,
140
+ t,
141
+ breadCrumbsLabels,
142
+ id,
143
+ getRedirectLink,
144
+ createOnClick,
145
+ goTo,
146
+ view,
147
+ });
148
+ }
149
+ else {
150
+ switch (conditionFallback) {
151
+ case 'hide':
152
+ break;
153
+ case 'show-simplified':{
154
+ const simplifiedConfig = {
155
+ ...config,
156
+ path: config.path.slice(0, 2),
157
+ includeId: false,
158
+ suffix: undefined,
159
+ };
160
+
161
+ buildBreadCrumbs({
162
+ config: simplifiedConfig,
163
+ items,
164
+ t,
165
+ breadCrumbsLabels,
166
+ id,
167
+ getRedirectLink,
168
+ createOnClick,
169
+ goTo,
170
+ view,
171
+ });
172
+ break;
173
+ }
174
+ case 'show-non-interactive':
175
+ default:
176
+ buildBreadCrumbs({
177
+ config,
178
+ items,
179
+ t,
180
+ breadCrumbsLabels,
181
+ id,
182
+ getRedirectLink,
183
+ createOnClick,
184
+ goTo,
185
+ view,
186
+ skipInteractions: true,
187
+ });
188
+ break;
189
+ }
190
+ }
191
+ } else {
192
+ buildBreadCrumbs({
193
+ config,
194
+ items,
195
+ t,
196
+ breadCrumbsLabels,
197
+ id,
198
+ getRedirectLink,
199
+ createOnClick,
200
+ goTo,
201
+ view,
202
+ });
203
+ }
204
+ }
205
+
206
+
207
+ if (isView) {
208
+ items.push({ label: t(breadCrumbsLabels.details) });
209
+ } else if (isEdit) {
210
+ items.push({ label: t(breadCrumbsLabels.edit) });
211
+ } else if (isAnalysis) {
212
+ items.push({ label: t(breadCrumbsLabels.summary) });
213
+ }
214
+
215
+ items.push(...addedItems);
216
+
217
+ return items.filter((v) => !!v.label);
218
+
219
+ }
220
+
221
+ // Breadcrumbs Config Helper
222
+
223
+ // 1.Simple static path
224
+ // 'country-overview': {
225
+ // path: ['analysis', 'country-overview'],
226
+ // }
227
+ // Result: Analysis > Country Overview
228
+ // Neither is clickable
229
+
230
+ // 2.Clickable Parents with Links
231
+ // 'mines': {
232
+ // path: [
233
+ // 'modules', // Not clickable
234
+ // { key: 'mines', link: '/app/mines' } // Clickable, navigates to /app/mines
235
+ // ],
236
+ // }
237
+ // Result: Modules > Mines (clickable)
238
+
239
+ // 3.Include ID at the end
240
+ // 'partners': {
241
+ // path: ['modules', { key: 'partners', link: '/app/partners', useRedirect: true }],
242
+ // includeId: true, // ← ID will be added at the end
243
+ // }
244
+ // With id='ABC123':
245
+ // Result: Modules > Partners (clickable) > ABC123 (not clickable)
246
+
247
+ // 4.Dynamic Id in the middle
248
+ // 'mine-evaluation': {
249
+ // path: [
250
+ // 'modules',
251
+ // { key: 'mines', link: '/app/mines' },
252
+ // { key: 'id', link: (id) => `/app/mines/${id}` }, // ← ID here
253
+ // 'evaluation',
254
+ // ],
255
+ // }
256
+ // With id='MINE-456':
257
+ // Result: Modules > Mines > MINE-456 (clickable to /app/mines/MINE-456) > Evaluation
258
+
259
+ // 5. Dynamic Links using functions
260
+ // 'producers': {
261
+ // path: [
262
+ // 'modules',
263
+ // {
264
+ // key: 'producers',
265
+ // link: (view) => `/app/${view}`, // ← Uses 'view' parameter
266
+ // useRedirect: true
267
+ // }
268
+ // ],
269
+ // includeId: true,
270
+ // }
271
+ // With view='producers':
272
+ // Result: Modules > Producers (navigates to /app/producers)
273
+
274
+ // 6.use Redirect link
275
+ // 'settings': {
276
+ // path: [
277
+ // {
278
+ // key: 'settings',
279
+ // link: '/app/view/settings',
280
+ // useRedirect: true // ← Wraps with getRedirectLink()
281
+ // }
282
+ // ],
283
+ // }
284
+ // Navigation will use getRedirectLink('/app/view/settings')
285
+
286
+ // 7.Conditional Rendering
287
+ // 'entities': {
288
+ // condition: (opts) => opts.isDataStore, // ← Only shows if isDataStore=true
289
+ // path: [
290
+ // 'data',
291
+ // { key: 'data-store', link: '/app/data-store', useRedirect: true },
292
+ // { key: 'entities', link: '/app/data-store/entities', useRedirect: true },
293
+ // ],
294
+ // }
295
+ // With isDataStore=false: No breadcrumbs shown
296
+ // With isDataStore=true: Data > Store > Entities
297
+
298
+ // 8.Conditional Fallback
299
+ // 'locations': {
300
+ // condition: (opts) => opts.isDataStore,
301
+ // path: [
302
+ // 'data',
303
+ // { key: 'data-store', link: '/app/data-store', useRedirect: true },
304
+ // { key: 'locations', link: '/app/data-store/locations', useRedirect: true },
305
+ // ],
306
+ // fallback: { // ← Alternative when condition is false
307
+ // path: [
308
+ // 'modules',
309
+ // 'linkedSubjects',
310
+ // { key: 'locations', link: '/app/locations', useRedirect: true },
311
+ // ],
312
+ // includeId: true,
313
+ // },
314
+ // }
315
+ // isDataStore=true: Data > Store > Locations
316
+ // isDataStore=false: Modules > Associated Information > Locations > {id}
317
+
318
+ // 9. Suffix items
319
+ // 'mine-monitoring': {
320
+ // path: [
321
+ // 'modules',
322
+ // { key: 'mines', link: '/app/mines' }
323
+ // ],
324
+ // includeId: true,
325
+ // suffix: ['visits'], // ← Added at the end
326
+ // }
327
+ // With id='MINE-789':
328
+ // Result: Modules > Mines > MINE-789 > Visits
329
+
330
+ // 10. Complex multi level path
331
+ // 'monitoringReport': {
332
+ // path: [
333
+ // 'modules', // Static label
334
+ // { key: 'mines', link: '/app/mines' }, // Clickable parent
335
+ // { key: 'id', link: (id) => `/app/mines/${id}` }, // Dynamic ID with link
336
+ // 'monitoringReport', // Static label at end
337
+ // ],
338
+ // }
339
+ // With id='MINE-999':
340
+ // Result: Modules > Mines (→/app/mines) > MINE-999 (→/app/mines/MINE-999) > Executive Monitoring Report
341
+
342
+ // 11. Access multiple options in condition
343
+ // 'custom-view': {
344
+ // condition: (opts) => opts.isDataStore && opts.isEdit && opts.id,
345
+ // path: ['data', 'custom'],
346
+ // }
347
+ // Available in opts: { isDataStore, isAnalysis, isEdit, isView, id, view }
package/src/index.js CHANGED
@@ -11,7 +11,7 @@ export { default as Pagination } from "./@daf/core/components/Table/Pagination/i
11
11
  export { default as StickyTable } from "./@daf/core/components/Table/StickyTable/index.jsx";
12
12
  export { default as TableFilters } from "./@daf/core/components/Table/TableFilters/index.jsx";
13
13
  export { default as MoreOptions } from "./@daf/core/components/Table/MoreOptions/index.jsx";
14
-
14
+ export { default as NavigationAction } from "./@daf/core/components/Table/NavigationAction/index.jsx";
15
15
  // Button
16
16
  export { default as Button } from "./@daf/core/components/Button/index.jsx";
17
17
  export { default as FilterButton } from "./@daf/core/components/Button/FilterButton/index.jsx";
package/src/services.js CHANGED
@@ -17,4 +17,5 @@ export { default as UserService } from './@daf/services/UserService.js';
17
17
  export { default as SourceService } from './@daf/services/SourceService.js';
18
18
  export { default as DashboardService } from './@daf/services/DashboardService.js';
19
19
  export { default as LinkedSubjectsService } from './@daf/services/LinkedSubjects.js';
20
- export { default as OperatorService } from './@daf/services/OperatorService.js';
20
+ export { default as OperatorService } from './@daf/services/OperatorService.js';
21
+ export { default as PartnerService } from './@daf/services/PartnerService.js';
package/src/utils.js CHANGED
@@ -58,4 +58,8 @@ export {
58
58
  buildActionWidgetsConfig,
59
59
  buildKeyIndicatorsConfig,
60
60
  buildBreadcrumbs
61
- } from './@daf/utils/adminConfigBuilders.js'
61
+ } from './@daf/utils/adminConfigBuilders.js'
62
+
63
+ export { renderBreadCrumbs, buildBreadCrumbs as buildBreadCrumbsHelper } from './helpers/breadCrumbs.js'
64
+
65
+ export { copyToClipboard } from './helpers/copyToClipboard.js'
@@ -1,330 +0,0 @@
1
- /* Isolated Mapbox GL CSS - Scoped to prevent Leaflet conflicts */
2
-
3
- /* Mapbox GL Core Styles - Scoped with .mapbox-gl-scope */
4
- .mapbox-gl-scope .mapboxgl-map {
5
- font: 12px/20px Helvetica Neue, Arial, Helvetica, sans-serif;
6
- overflow: hidden;
7
- position: relative;
8
- -webkit-tap-highlight-color: rgb(0 0 0/0);
9
- }
10
-
11
- .mapbox-gl-scope .mapboxgl-canvas {
12
- left: 0;
13
- position: absolute;
14
- top: 0;
15
- }
16
-
17
- .mapbox-gl-scope .mapboxgl-map:-webkit-full-screen {
18
- height: 100%;
19
- width: 100%;
20
- }
21
-
22
- .mapbox-gl-scope .mapboxgl-canary {
23
- background-color: salmon;
24
- }
25
-
26
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive,
27
- .mapbox-gl-scope .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass {
28
- cursor: grab;
29
- -webkit-user-select: none;
30
- user-select: none;
31
- }
32
-
33
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer {
34
- cursor: pointer;
35
- }
36
-
37
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive:active,
38
- .mapbox-gl-scope .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active {
39
- cursor: grabbing;
40
- }
41
-
42
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,
43
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas {
44
- touch-action: pan-x pan-y;
45
- }
46
-
47
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-drag-pan,
48
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas {
49
- touch-action: pinch-zoom;
50
- }
51
-
52
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,
53
- .mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas {
54
- touch-action: none;
55
- }
56
-
57
- /* Control positioning */
58
- .mapbox-gl-scope .mapboxgl-ctrl-bottom,
59
- .mapbox-gl-scope .mapboxgl-ctrl-bottom-left,
60
- .mapbox-gl-scope .mapboxgl-ctrl-bottom-right,
61
- .mapbox-gl-scope .mapboxgl-ctrl-left,
62
- .mapbox-gl-scope .mapboxgl-ctrl-right,
63
- .mapbox-gl-scope .mapboxgl-ctrl-top,
64
- .mapbox-gl-scope .mapboxgl-ctrl-top-left,
65
- .mapbox-gl-scope .mapboxgl-ctrl-top-right {
66
- pointer-events: none;
67
- position: absolute;
68
- z-index: 2;
69
- }
70
-
71
- .mapbox-gl-scope .mapboxgl-ctrl-top-left {
72
- left: 0;
73
- top: 0;
74
- }
75
-
76
- .mapbox-gl-scope .mapboxgl-ctrl-top {
77
- left: 50%;
78
- top: 0;
79
- transform: translateX(-50%);
80
- }
81
-
82
- .mapbox-gl-scope .mapboxgl-ctrl-top-right {
83
- right: 0;
84
- top: 0;
85
- }
86
-
87
- .mapbox-gl-scope .mapboxgl-ctrl-right {
88
- right: 0;
89
- top: 50%;
90
- transform: translateY(-50%);
91
- }
92
-
93
- .mapbox-gl-scope .mapboxgl-ctrl-bottom-right {
94
- bottom: 0;
95
- right: 0;
96
- }
97
-
98
- .mapbox-gl-scope .mapboxgl-ctrl-bottom {
99
- bottom: 0;
100
- left: 50%;
101
- transform: translateX(-50%);
102
- }
103
-
104
- .mapbox-gl-scope .mapboxgl-ctrl-bottom-left {
105
- bottom: 0;
106
- left: 0;
107
- }
108
-
109
- .mapbox-gl-scope .mapboxgl-ctrl-left {
110
- left: 0;
111
- top: 50%;
112
- transform: translateY(-50%);
113
- }
114
-
115
- .mapbox-gl-scope .mapboxgl-ctrl {
116
- clear: both;
117
- pointer-events: auto;
118
- transform: translate(0);
119
- }
120
-
121
- .mapbox-gl-scope .mapboxgl-ctrl-top-left .mapboxgl-ctrl {
122
- float: left;
123
- margin: 10px 0 0 10px;
124
- }
125
-
126
- .mapbox-gl-scope .mapboxgl-ctrl-top .mapboxgl-ctrl {
127
- float: left;
128
- margin: 10px 0;
129
- }
130
-
131
- .mapbox-gl-scope .mapboxgl-ctrl-top-right .mapboxgl-ctrl {
132
- float: right;
133
- margin: 10px 10px 0 0;
134
- }
135
-
136
- .mapbox-gl-scope .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl,
137
- .mapbox-gl-scope .mapboxgl-ctrl-right .mapboxgl-ctrl {
138
- float: right;
139
- margin: 0 10px 10px 0;
140
- }
141
-
142
- .mapbox-gl-scope .mapboxgl-ctrl-bottom .mapboxgl-ctrl {
143
- float: left;
144
- margin: 10px 0;
145
- }
146
-
147
- .mapbox-gl-scope .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl,
148
- .mapbox-gl-scope .mapboxgl-ctrl-left .mapboxgl-ctrl {
149
- float: left;
150
- margin: 0 0 10px 10px;
151
- }
152
-
153
- /* Control group styling */
154
- .mapbox-gl-scope .mapboxgl-ctrl-group {
155
- background: #fff;
156
- border-radius: 4px;
157
- }
158
-
159
- .mapbox-gl-scope .mapboxgl-ctrl-group:not(:empty) {
160
- box-shadow: 0 0 0 2px #0000001a;
161
- }
162
-
163
- .mapbox-gl-scope .mapboxgl-ctrl-group button {
164
- background-color: initial;
165
- border: 0;
166
- box-sizing: border-box;
167
- cursor: pointer;
168
- display: block;
169
- height: 29px;
170
- outline: none;
171
- overflow: hidden;
172
- padding: 0;
173
- width: 29px;
174
- }
175
-
176
- .mapbox-gl-scope .mapboxgl-ctrl-group button+button {
177
- border-top: 1px solid #ddd;
178
- }
179
-
180
- .mapbox-gl-scope .mapboxgl-ctrl button .mapboxgl-ctrl-icon {
181
- background-position: 50%;
182
- background-repeat: no-repeat;
183
- display: block;
184
- height: 100%;
185
- width: 100%;
186
- }
187
-
188
- .mapbox-gl-scope .mapboxgl-ctrl-attrib-button:focus,
189
- .mapbox-gl-scope .mapboxgl-ctrl-group button:focus {
190
- box-shadow: 0 0 2px 2px #0096ff;
191
- }
192
-
193
- .mapbox-gl-scope .mapboxgl-ctrl button:disabled {
194
- cursor: not-allowed;
195
- }
196
-
197
- .mapbox-gl-scope .mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon {
198
- opacity: .25;
199
- }
200
-
201
- .mapbox-gl-scope .mapboxgl-ctrl-group button:first-child {
202
- border-radius: 4px 4px 0 0;
203
- }
204
-
205
- .mapbox-gl-scope .mapboxgl-ctrl-group button:last-child {
206
- border-radius: 0 0 4px 4px;
207
- }
208
-
209
- .mapbox-gl-scope .mapboxgl-ctrl-group button:only-child {
210
- border-radius: inherit;
211
- }
212
-
213
- .mapbox-gl-scope .mapboxgl-ctrl button:not(:disabled):hover {
214
- background-color: #0000000d;
215
- }
216
-
217
- /* Marker styles */
218
- .mapbox-gl-scope .mapboxgl-marker {
219
- position: absolute;
220
- z-index: 1;
221
- }
222
-
223
- .mapbox-gl-scope .mapboxgl-marker svg {
224
- display: block;
225
- }
226
-
227
- /* Popup styles */
228
- .mapbox-gl-scope .mapboxgl-popup {
229
- position: absolute;
230
- text-align: center;
231
- margin-bottom: 20px;
232
- }
233
-
234
- .mapbox-gl-scope .mapboxgl-popup-content-wrapper {
235
- padding: 1px;
236
- text-align: left;
237
- border-radius: 12px;
238
- }
239
-
240
- .mapbox-gl-scope .mapboxgl-popup-content {
241
- margin: 13px 24px 13px 20px;
242
- line-height: 1.3;
243
- font-size: 13px;
244
- min-height: 1px;
245
- }
246
-
247
- .mapbox-gl-scope .mapboxgl-popup-content p {
248
- margin: 17px 0;
249
- }
250
-
251
- .mapbox-gl-scope .mapboxgl-popup-tip-container {
252
- width: 40px;
253
- height: 20px;
254
- position: absolute;
255
- left: 50%;
256
- margin-top: -1px;
257
- margin-left: -20px;
258
- overflow: hidden;
259
- pointer-events: none;
260
- }
261
-
262
- .mapbox-gl-scope .mapboxgl-popup-tip {
263
- width: 17px;
264
- height: 17px;
265
- padding: 1px;
266
- margin: -10px auto 0;
267
- pointer-events: auto;
268
- -webkit-transform: rotate(45deg);
269
- -moz-transform: rotate(45deg);
270
- -ms-transform: rotate(45deg);
271
- transform: rotate(45deg);
272
- }
273
-
274
- .mapbox-gl-scope .mapboxgl-popup-content-wrapper,
275
- .mapbox-gl-scope .mapboxgl-popup-tip {
276
- background: white;
277
- color: #333;
278
- box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4);
279
- }
280
-
281
- .mapbox-gl-scope .mapboxgl-popup-close-button {
282
- position: absolute;
283
- top: 0;
284
- right: 0;
285
- border: none;
286
- text-align: center;
287
- width: 24px;
288
- height: 24px;
289
- font: 16px/24px Tahoma, Verdana, sans-serif;
290
- color: #757575;
291
- text-decoration: none;
292
- background: transparent;
293
- }
294
-
295
- .mapbox-gl-scope .mapboxgl-popup-close-button:hover,
296
- .mapbox-gl-scope .mapboxgl-popup-close-button:focus {
297
- color: #585858;
298
- }
299
-
300
- /* Attribution */
301
- .mapbox-gl-scope .mapboxgl-ctrl-attribution {
302
- background: #fff;
303
- background: rgba(255, 255, 255, 0.8);
304
- margin: 0;
305
- }
306
-
307
- .mapbox-gl-scope .mapboxgl-ctrl-attribution,
308
- .mapbox-gl-scope .mapboxgl-ctrl-scale-line {
309
- padding: 0 5px;
310
- color: #333;
311
- line-height: 1.4;
312
- }
313
-
314
- .mapbox-gl-scope .mapboxgl-ctrl-attribution a {
315
- text-decoration: none;
316
- }
317
-
318
- .mapbox-gl-scope .mapboxgl-ctrl-attribution a:hover,
319
- .mapbox-gl-scope .mapboxgl-ctrl-attribution a:focus {
320
- text-decoration: underline;
321
- }
322
-
323
- /* Hide attribution by default */
324
- .mapbox-gl-scope .mapboxgl-ctrl-attribution {
325
- display: none !important;
326
- }
327
-
328
- .mapbox-gl-scope .mapboxgl-ctrl-logo {
329
- display: none !important;
330
- }