layerchart 2.0.0-next.4 → 2.0.0-next.41

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 (180) hide show
  1. package/dist/components/AnnotationLine.svelte +15 -2
  2. package/dist/components/AnnotationPoint.svelte +29 -11
  3. package/dist/components/AnnotationRange.svelte +18 -4
  4. package/dist/components/Arc.svelte +5 -5
  5. package/dist/components/Area.svelte +10 -2
  6. package/dist/components/Axis.svelte +175 -58
  7. package/dist/components/Axis.svelte.d.ts +23 -6
  8. package/dist/components/Bar.svelte +20 -15
  9. package/dist/components/Bar.svelte.d.ts +2 -2
  10. package/dist/components/Bars.svelte +4 -4
  11. package/dist/components/Blur.svelte +7 -6
  12. package/dist/components/Blur.svelte.d.ts +2 -5
  13. package/dist/components/BrushContext.svelte +45 -45
  14. package/dist/components/Calendar.svelte +31 -10
  15. package/dist/components/Calendar.svelte.d.ts +2 -1
  16. package/dist/components/Chart.svelte +76 -27
  17. package/dist/components/Chart.svelte.d.ts +26 -8
  18. package/dist/components/ChartClipPath.svelte +1 -1
  19. package/dist/components/Circle.svelte +44 -3
  20. package/dist/components/CircleClipPath.svelte +8 -1
  21. package/dist/components/ClipPath.svelte +1 -2
  22. package/dist/components/ColorRamp.svelte +1 -1
  23. package/dist/components/ComputedStyles.svelte +9 -2
  24. package/dist/components/Connector.svelte +3 -3
  25. package/dist/components/Connector.svelte.d.ts +1 -1
  26. package/dist/components/Ellipse.svelte +228 -0
  27. package/dist/components/Ellipse.svelte.d.ts +64 -0
  28. package/dist/components/ForceSimulation.svelte +184 -50
  29. package/dist/components/ForceSimulation.svelte.d.ts +95 -21
  30. package/dist/components/Frame.svelte +1 -1
  31. package/dist/components/GeoCircle.svelte +1 -1
  32. package/dist/components/GeoEdgeFade.svelte +1 -1
  33. package/dist/components/GeoPath.svelte +30 -8
  34. package/dist/components/GeoPoint.svelte +4 -5
  35. package/dist/components/GeoSpline.svelte +5 -5
  36. package/dist/components/GeoSpline.svelte.d.ts +1 -1
  37. package/dist/components/GeoTile.svelte +1 -1
  38. package/dist/components/Graticule.svelte +5 -5
  39. package/dist/components/Grid.svelte +60 -63
  40. package/dist/components/Group.svelte +13 -8
  41. package/dist/components/Group.svelte.d.ts +10 -3
  42. package/dist/components/Highlight.svelte +55 -28
  43. package/dist/components/Highlight.svelte.d.ts +4 -0
  44. package/dist/components/Hull.svelte +12 -5
  45. package/dist/components/Labels.svelte +24 -13
  46. package/dist/components/Labels.svelte.d.ts +12 -5
  47. package/dist/components/Legend.svelte +143 -70
  48. package/dist/components/Legend.svelte.d.ts +12 -8
  49. package/dist/components/Line.svelte +40 -3
  50. package/dist/components/LinearGradient.svelte +35 -4
  51. package/dist/components/Link.svelte +1 -1
  52. package/dist/components/Marker.svelte +37 -26
  53. package/dist/components/MonthPath.svelte +26 -12
  54. package/dist/components/MonthPath.svelte.d.ts +4 -3
  55. package/dist/components/MotionPath.svelte +1 -1
  56. package/dist/components/Pack.svelte.d.ts +10 -3
  57. package/dist/components/Partition.svelte.d.ts +10 -3
  58. package/dist/components/Pattern.svelte +5 -5
  59. package/dist/components/Pie.svelte +1 -2
  60. package/dist/components/Points.svelte +11 -72
  61. package/dist/components/Points.svelte.d.ts +1 -8
  62. package/dist/components/Polygon.svelte +309 -0
  63. package/dist/components/Polygon.svelte.d.ts +115 -0
  64. package/dist/components/RadialGradient.svelte +4 -6
  65. package/dist/components/Rect.svelte +55 -5
  66. package/dist/components/Rect.svelte.d.ts +2 -2
  67. package/dist/components/RectClipPath.svelte +4 -3
  68. package/dist/components/RectClipPath.svelte.d.ts +2 -2
  69. package/dist/components/Rule.svelte +167 -77
  70. package/dist/components/Rule.svelte.d.ts +7 -2
  71. package/dist/components/Spline.svelte +59 -28
  72. package/dist/components/Spline.svelte.d.ts +12 -4
  73. package/dist/components/Text.svelte +121 -73
  74. package/dist/components/Text.svelte.d.ts +6 -0
  75. package/dist/components/TileImage.svelte +19 -4
  76. package/dist/components/TransformContext.svelte +9 -3
  77. package/dist/components/TransformControls.svelte +89 -38
  78. package/dist/components/Tree.svelte.d.ts +10 -3
  79. package/dist/components/Treemap.svelte +63 -26
  80. package/dist/components/Treemap.svelte.d.ts +21 -14
  81. package/dist/components/Voronoi.svelte +12 -13
  82. package/dist/components/charts/ArcChart.svelte +43 -71
  83. package/dist/components/charts/ArcChart.svelte.d.ts +10 -3
  84. package/dist/components/charts/AreaChart.svelte +29 -59
  85. package/dist/components/charts/AreaChart.svelte.d.ts +10 -3
  86. package/dist/components/charts/BarChart.svelte +79 -71
  87. package/dist/components/charts/BarChart.svelte.d.ts +10 -3
  88. package/dist/components/charts/DefaultTooltip.svelte +3 -3
  89. package/dist/components/charts/DefaultTooltip.svelte.d.ts +1 -1
  90. package/dist/components/charts/LineChart.svelte +69 -75
  91. package/dist/components/charts/LineChart.svelte.d.ts +21 -8
  92. package/dist/components/charts/PieChart.svelte +44 -71
  93. package/dist/components/charts/PieChart.svelte.d.ts +10 -3
  94. package/dist/components/charts/ScatterChart.svelte +10 -39
  95. package/dist/components/charts/ScatterChart.svelte.d.ts +10 -3
  96. package/dist/components/charts/utils.svelte.d.ts +1 -19
  97. package/dist/components/charts/utils.svelte.js +7 -35
  98. package/dist/components/index.d.ts +4 -0
  99. package/dist/components/index.js +5 -1
  100. package/dist/components/layout/Canvas.svelte +96 -69
  101. package/dist/components/layout/Canvas.svelte.d.ts +6 -0
  102. package/dist/components/layout/Html.svelte +15 -9
  103. package/dist/components/layout/Layer.svelte +6 -4
  104. package/dist/components/layout/Layer.svelte.d.ts +6 -4
  105. package/dist/components/layout/Svg.svelte +19 -11
  106. package/dist/components/layout/WebGL.svelte +26 -6
  107. package/dist/components/layout/WebGL.svelte.d.ts +5 -2
  108. package/dist/components/tooltip/Tooltip.svelte +73 -36
  109. package/dist/components/tooltip/Tooltip.svelte.d.ts +10 -3
  110. package/dist/components/tooltip/TooltipContext.svelte +167 -54
  111. package/dist/components/tooltip/TooltipContext.svelte.d.ts +19 -5
  112. package/dist/components/tooltip/TooltipHeader.svelte +32 -18
  113. package/dist/components/tooltip/TooltipHeader.svelte.d.ts +3 -3
  114. package/dist/components/tooltip/TooltipItem.svelte +46 -37
  115. package/dist/components/tooltip/TooltipItem.svelte.d.ts +3 -3
  116. package/dist/components/tooltip/TooltipList.svelte +12 -10
  117. package/dist/components/tooltip/TooltipSeparator.svelte +18 -10
  118. package/dist/components/tooltip/tooltipMetaContext.d.ts +2 -2
  119. package/dist/docs/Blockquote.svelte +6 -4
  120. package/dist/docs/Blockquote.svelte.d.ts +4 -19
  121. package/dist/docs/Code.svelte +70 -28
  122. package/dist/docs/Code.svelte.d.ts +9 -24
  123. package/dist/docs/Header1.svelte +4 -2
  124. package/dist/docs/Header1.svelte.d.ts +4 -28
  125. package/dist/docs/Json.svelte +11 -3
  126. package/dist/docs/Json.svelte.d.ts +9 -21
  127. package/dist/docs/Layout.svelte +10 -7
  128. package/dist/docs/Layout.svelte.d.ts +4 -19
  129. package/dist/docs/Link.svelte +7 -3
  130. package/dist/docs/Link.svelte.d.ts +4 -38
  131. package/dist/docs/Preview.svelte +22 -23
  132. package/dist/docs/Preview.svelte.d.ts +5 -6
  133. package/dist/docs/TilesetField.svelte +20 -19
  134. package/dist/docs/TilesetField.svelte.d.ts +5 -22
  135. package/dist/docs/ViewSourceButton.svelte +10 -7
  136. package/dist/docs/ViewSourceButton.svelte.d.ts +7 -21
  137. package/dist/states/series.svelte.d.ts +30 -0
  138. package/dist/states/series.svelte.js +54 -0
  139. package/dist/styles/daisyui-5.css +6 -0
  140. package/dist/styles/shadcn-svelte.css +11 -0
  141. package/dist/styles/skeleton-3.css +15 -0
  142. package/dist/utils/arcText.svelte.js +4 -4
  143. package/dist/utils/array.d.ts +11 -0
  144. package/dist/utils/array.js +23 -0
  145. package/dist/utils/array.test.d.ts +1 -0
  146. package/dist/utils/array.test.js +200 -0
  147. package/dist/utils/attributes.d.ts +3 -13
  148. package/dist/utils/attributes.js +4 -18
  149. package/dist/utils/canvas.d.ts +77 -0
  150. package/dist/utils/canvas.js +105 -41
  151. package/dist/utils/common.d.ts +9 -0
  152. package/dist/utils/common.js +18 -1
  153. package/dist/utils/common.test.js +26 -1
  154. package/dist/utils/genData.d.ts +22 -8
  155. package/dist/utils/genData.js +34 -14
  156. package/dist/utils/graph/dagre.d.ts +4 -4
  157. package/dist/utils/graph/dagre.js +5 -7
  158. package/dist/utils/index.d.ts +1 -0
  159. package/dist/utils/index.js +1 -0
  160. package/dist/utils/math.d.ts +17 -0
  161. package/dist/utils/math.js +17 -0
  162. package/dist/utils/motion.svelte.js +1 -1
  163. package/dist/utils/path.d.ts +10 -0
  164. package/dist/utils/path.js +30 -0
  165. package/dist/utils/rect.svelte.d.ts +2 -2
  166. package/dist/utils/rect.svelte.js +73 -1
  167. package/dist/utils/scales.svelte.d.ts +9 -3
  168. package/dist/utils/scales.svelte.js +47 -4
  169. package/dist/utils/shape.d.ts +43 -0
  170. package/dist/utils/shape.js +59 -0
  171. package/dist/utils/stack.js +1 -1
  172. package/dist/utils/string.d.ts +49 -0
  173. package/dist/utils/string.js +4 -2
  174. package/dist/utils/ticks.d.ts +15 -4
  175. package/dist/utils/ticks.js +140 -159
  176. package/dist/utils/ticks.test.js +16 -26
  177. package/dist/utils/treemap.d.ts +1 -1
  178. package/dist/utils/types.d.ts +15 -2
  179. package/package.json +36 -35
  180. package/dist/utils/object.js +0 -2
@@ -32,20 +32,15 @@
32
32
  <script lang="ts">
33
33
  import { type ComponentProps } from 'svelte';
34
34
  import { Button, Icon, MenuButton, Tooltip } from 'svelte-ux';
35
- import { cls } from '@layerstack/tailwind';
36
-
37
- // TODO: maybe we include the icons as I think importing them like this
38
- // will bog down the dev server
39
- import {
40
- mdiArrowULeftTop,
41
- mdiMagnifyPlusOutline,
42
- mdiMagnifyMinusOutline,
43
- mdiImageFilterCenterFocus,
44
- mdiChevronDown,
45
- mdiResize,
46
- mdiArrowExpandAll,
47
- mdiCancel,
48
- } from '@mdi/js';
35
+
36
+ import LucideFocus from '~icons/lucide/focus';
37
+ import LucideChevronDown from '~icons/lucide/chevron-down';
38
+ import LucideCircleOff from '~icons/lucide/circle-off';
39
+ import LucideImageUpscale from '~icons/lucide/image-upscale';
40
+ import LucideMove from '~icons/lucide/move';
41
+ import LucideUndo2 from '~icons/lucide/undo-2';
42
+ import LucideZoomIn from '~icons/lucide/zoom-in';
43
+ import LucideZoomOut from '~icons/lucide/zoom-out';
49
44
 
50
45
  import { getTransformContext } from './TransformContext.svelte';
51
46
  import type { Without } from '../utils/types.js';
@@ -89,22 +84,9 @@
89
84
 
90
85
  <!-- svelte-ignore a11y_no_static_element_interactions -->
91
86
  <div
92
- class={cls(
93
- 'bg-surface-300/50 border rounded-full m-1 backdrop-blur-sm z-10 flex',
94
- orientation === 'vertical' && 'flex-col',
95
- {
96
- 'top-left': 'absolute top-0 left-0',
97
- top: 'absolute top-0 left-1/2 -translate-x-1/2',
98
- 'top-right': 'absolute top-0 right-0',
99
- left: 'absolute top-1/2 left-0 -translate-y-1/2',
100
- center: 'absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',
101
- right: 'absolute top-1/2 right-0 -translate-y-1/2',
102
- 'bottom-left': 'absolute bottom-0 left-0',
103
- bottom: 'absolute bottom-0 left-1/2 -translate-x-1/2',
104
- 'bottom-right': 'absolute bottom-0 right-0',
105
- }[placement],
106
- className
107
- )}
87
+ class={['lc-transform-controls', className]}
88
+ data-orientation={orientation}
89
+ data-placement={placement}
108
90
  ondblclick={(e) => {
109
91
  // Stop from propagating to TransformContext
110
92
  e.stopPropagation();
@@ -113,7 +95,7 @@
113
95
  {#if show.includes('zoomIn')}
114
96
  <Tooltip title="Zoom in">
115
97
  <Button
116
- icon={mdiMagnifyPlusOutline}
98
+ icon={LucideZoomIn}
117
99
  on:click={() => transform.zoomIn()}
118
100
  {size}
119
101
  class="text-surface-content p-2"
@@ -124,7 +106,7 @@
124
106
  {#if show.includes('zoomOut')}
125
107
  <Tooltip title="Zoom out">
126
108
  <Button
127
- icon={mdiMagnifyMinusOutline}
109
+ icon={LucideZoomOut}
128
110
  on:click={() => transform.zoomOut()}
129
111
  {size}
130
112
  class="text-surface-content p-2"
@@ -135,7 +117,7 @@
135
117
  {#if show.includes('center')}
136
118
  <Tooltip title="Center">
137
119
  <Button
138
- icon={mdiImageFilterCenterFocus}
120
+ icon={LucideFocus}
139
121
  on:click={() => transform.translateCenter()}
140
122
  {size}
141
123
  class="text-surface-content p-2"
@@ -146,7 +128,7 @@
146
128
  {#if show.includes('reset')}
147
129
  <Tooltip title="Reset">
148
130
  <Button
149
- icon={mdiArrowULeftTop}
131
+ icon={LucideUndo2}
150
132
  on:click={() => transform.reset()}
151
133
  {size}
152
134
  class="text-surface-content p-2"
@@ -159,9 +141,9 @@
159
141
  <MenuButton
160
142
  iconOnly
161
143
  options={[
162
- { label: 'None', value: 'none', icon: mdiCancel },
163
- { label: 'Zoom', value: 'scale', icon: mdiResize },
164
- { label: 'Move', value: 'translate', icon: mdiArrowExpandAll },
144
+ { label: 'None', value: 'none', icon: LucideCircleOff },
145
+ { label: 'Zoom', value: 'scale', icon: LucideImageUpscale },
146
+ { label: 'Move', value: 'translate', icon: LucideMove },
165
147
  ]}
166
148
  menuProps={{ placement: menuPlacementByOrientationAndPlacement[orientation][placement] }}
167
149
  menuIcon={null}
@@ -171,9 +153,78 @@
171
153
  class="text-surface-content"
172
154
  >
173
155
  <svelte:fragment slot="selection" let:value>
174
- <Icon data={value?.icon ?? mdiChevronDown} />
156
+ <Icon data={value?.icon ?? LucideChevronDown} />
175
157
  </svelte:fragment>
176
158
  </MenuButton>
177
159
  </Tooltip>
178
160
  {/if}
179
161
  </div>
162
+
163
+ <style>
164
+ @layer components {
165
+ :where(.lc-transform-controls) {
166
+ display: flex;
167
+ background: color-mix(
168
+ in oklab,
169
+ var(--color-surface-300, light-dark(white, black)) 50%,
170
+ transparent
171
+ );
172
+ border: 1px solid
173
+ color-mix(in oklab, var(--color-surface-content, currentColor) 20%, transparent);
174
+ border-radius: 9999px;
175
+ margin: 4px;
176
+ backdrop-filter: blur(8px);
177
+ z-index: 10;
178
+
179
+ &[data-orientation='vertical'] {
180
+ flex-direction: column;
181
+ }
182
+
183
+ &[data-placement] {
184
+ position: absolute;
185
+ }
186
+
187
+ &[data-placement='top-left'] {
188
+ top: 0;
189
+ left: 0;
190
+ }
191
+ &[data-placement='top'] {
192
+ top: 0;
193
+ left: 50%;
194
+ transform: translateX(-50%);
195
+ }
196
+ &[data-placement='top-right'] {
197
+ top: 0;
198
+ right: 0;
199
+ }
200
+ &[data-placement='left'] {
201
+ top: 50%;
202
+ left: 0;
203
+ transform: translateY(-50%);
204
+ }
205
+ &[data-placement='center'] {
206
+ top: 50%;
207
+ left: 50%;
208
+ transform: translate(-50%, -50%);
209
+ }
210
+ &[data-placement='right'] {
211
+ top: 50%;
212
+ right: 0;
213
+ transform: translateY(-50%);
214
+ }
215
+ &[data-placement='bottom-left'] {
216
+ bottom: 0;
217
+ left: 0;
218
+ }
219
+ &[data-placement='bottom'] {
220
+ bottom: 0;
221
+ left: 50%;
222
+ transform: translateX(-50%);
223
+ }
224
+ &[data-placement='bottom-right'] {
225
+ bottom: 0;
226
+ right: 0;
227
+ }
228
+ }
229
+ }
230
+ </style>
@@ -25,10 +25,17 @@ export type TreeProps<T> = {
25
25
  };
26
26
  import { type HierarchyPointNode, type HierarchyPointLink, type HierarchyNode } from 'd3-hierarchy';
27
27
  import type { Snippet } from 'svelte';
28
+ declare function $$render<T>(): {
29
+ props: TreeProps<T>;
30
+ exports: {};
31
+ bindings: "";
32
+ slots: {};
33
+ events: {};
34
+ };
28
35
  declare class __sveltets_Render<T> {
29
- props(): TreeProps<T>;
30
- events(): {};
31
- slots(): {};
36
+ props(): ReturnType<typeof $$render<T>>['props'];
37
+ events(): ReturnType<typeof $$render<T>>['events'];
38
+ slots(): ReturnType<typeof $$render<T>>['slots'];
32
39
  bindings(): "";
33
40
  exports(): {};
34
41
  }
@@ -18,53 +18,53 @@
18
18
  *
19
19
  * @default 0
20
20
  */
21
- padding?: number;
21
+ padding?: number | ((node: HierarchyRectangularNode<T>) => number);
22
22
 
23
23
  /**
24
24
  * The inner padding between nodes.
25
25
  *
26
26
  * @default 0
27
27
  */
28
- paddingInner?: number;
28
+ paddingInner?: number | ((node: HierarchyRectangularNode<T>) => number);
29
29
 
30
30
  /**
31
31
  * The outer padding between nodes.
32
32
  *
33
33
  * @default 0
34
34
  */
35
- paddingOuter?: number;
35
+ paddingOuter?: number | ((node: HierarchyRectangularNode<T>) => number);
36
36
 
37
37
  /**
38
38
  * The top padding between nodes.
39
39
  *
40
40
  * @default 0
41
41
  */
42
- paddingTop?: number;
42
+ paddingTop?: number | ((node: HierarchyRectangularNode<T>) => number);
43
43
 
44
44
  /**
45
45
  * The bottom padding between nodes.
46
46
  *
47
47
  * @default 0
48
48
  */
49
- paddingBottom?: number;
49
+ paddingBottom?: number | ((node: HierarchyRectangularNode<T>) => number);
50
50
  /**
51
51
  * The left padding between nodes.
52
52
  *
53
53
  */
54
- paddingLeft?: number;
54
+ paddingLeft?: number | ((node: HierarchyRectangularNode<T>) => number);
55
55
 
56
56
  /**
57
57
  * The right padding between nodes.
58
58
  *
59
59
  */
60
- paddingRight?: number;
60
+ paddingRight?: number | ((node: HierarchyRectangularNode<T>) => number);
61
61
 
62
62
  /**
63
- * The selected node.
63
+ * Modify tiling function for approapriate aspect ratio when treemap is zoomed in
64
64
  *
65
- * @default null
65
+ * @default false
66
66
  */
67
- selected?: HierarchyRectangularNode<T> | null;
67
+ maintainAspectRatio?: boolean;
68
68
 
69
69
  hierarchy?: HierarchyNode<T>;
70
70
 
@@ -99,7 +99,7 @@
99
99
  paddingBottom = 0,
100
100
  paddingLeft,
101
101
  paddingRight,
102
- selected = $bindable(null),
102
+ maintainAspectRatio = false,
103
103
  children,
104
104
  }: TreemapProps<T> = $props();
105
105
 
@@ -121,45 +121,82 @@
121
121
  : tile
122
122
  );
123
123
 
124
- const treemap = $derived.by(() => {
124
+ const treemapData = $derived.by(() => {
125
125
  const _treemap = d3treemap<T>()
126
126
  .size([ctx.width, ctx.height])
127
- .tile(aspectTile(tileFunc, ctx.width, ctx.height));
127
+ .tile(maintainAspectRatio ? aspectTile(tileFunc, ctx.width, ctx.height) : tileFunc);
128
128
 
129
129
  if (padding) {
130
- _treemap.padding(padding);
130
+ // Make Typescript happy to pick the correct overload
131
+ // TODO: Better way to do this?
132
+ if (typeof padding === 'number') {
133
+ _treemap.padding(padding);
134
+ } else {
135
+ _treemap.padding(padding);
136
+ }
131
137
  }
132
138
 
133
139
  if (paddingInner) {
134
- _treemap.paddingInner(paddingInner);
140
+ if (typeof paddingInner === 'number') {
141
+ _treemap.paddingInner(typeof paddingInner === 'number' ? paddingInner : paddingInner);
142
+ } else {
143
+ _treemap.paddingInner(paddingInner);
144
+ }
135
145
  }
136
146
 
137
147
  if (paddingOuter) {
138
- _treemap.paddingOuter(paddingOuter);
148
+ if (typeof paddingOuter === 'number') {
149
+ _treemap.paddingOuter(paddingOuter);
150
+ } else {
151
+ _treemap.paddingOuter(paddingOuter);
152
+ }
139
153
  }
140
154
 
141
155
  if (paddingTop) {
142
- _treemap.paddingTop(paddingTop);
156
+ if (typeof paddingTop === 'number') {
157
+ _treemap.paddingTop(paddingTop);
158
+ } else {
159
+ _treemap.paddingTop(paddingTop);
160
+ }
143
161
  }
144
162
 
145
163
  if (paddingBottom) {
146
- _treemap.paddingBottom(paddingBottom);
164
+ if (typeof paddingBottom === 'number') {
165
+ _treemap.paddingBottom(paddingBottom);
166
+ } else {
167
+ _treemap.paddingBottom(paddingBottom);
168
+ }
147
169
  }
148
170
 
149
171
  if (paddingLeft) {
150
- _treemap.paddingLeft(paddingLeft);
172
+ if (typeof paddingLeft === 'number') {
173
+ _treemap.paddingLeft(paddingLeft);
174
+ } else {
175
+ _treemap.paddingLeft(paddingLeft);
176
+ }
151
177
  }
152
178
  if (paddingRight) {
153
- _treemap.paddingRight(paddingRight);
179
+ if (typeof paddingRight === 'number') {
180
+ _treemap.paddingRight(paddingRight);
181
+ } else {
182
+ _treemap.paddingRight(paddingRight);
183
+ }
154
184
  }
155
- return _treemap;
156
- });
157
185
 
158
- const treemapData = $derived(hierarchy ? treemap(hierarchy) : null);
186
+ if (hierarchy) {
187
+ const h = hierarchy.copy();
188
+ const treemapData = _treemap(h);
189
+ return {
190
+ links: treemapData.links(),
191
+ nodes: treemapData.descendants(),
192
+ };
193
+ }
159
194
 
160
- $effect.pre(() => {
161
- selected = treemapData;
195
+ return {
196
+ links: [],
197
+ nodes: [],
198
+ };
162
199
  });
163
200
  </script>
164
201
 
165
- {@render children?.({ nodes: treemapData ? treemapData.descendants() : [] })}
202
+ {@render children?.({ nodes: treemapData.nodes })}
@@ -10,47 +10,47 @@ export type TreemapProps<T> = {
10
10
  *
11
11
  * @default 0
12
12
  */
13
- padding?: number;
13
+ padding?: number | ((node: HierarchyRectangularNode<T>) => number);
14
14
  /**
15
15
  * The inner padding between nodes.
16
16
  *
17
17
  * @default 0
18
18
  */
19
- paddingInner?: number;
19
+ paddingInner?: number | ((node: HierarchyRectangularNode<T>) => number);
20
20
  /**
21
21
  * The outer padding between nodes.
22
22
  *
23
23
  * @default 0
24
24
  */
25
- paddingOuter?: number;
25
+ paddingOuter?: number | ((node: HierarchyRectangularNode<T>) => number);
26
26
  /**
27
27
  * The top padding between nodes.
28
28
  *
29
29
  * @default 0
30
30
  */
31
- paddingTop?: number;
31
+ paddingTop?: number | ((node: HierarchyRectangularNode<T>) => number);
32
32
  /**
33
33
  * The bottom padding between nodes.
34
34
  *
35
35
  * @default 0
36
36
  */
37
- paddingBottom?: number;
37
+ paddingBottom?: number | ((node: HierarchyRectangularNode<T>) => number);
38
38
  /**
39
39
  * The left padding between nodes.
40
40
  *
41
41
  */
42
- paddingLeft?: number;
42
+ paddingLeft?: number | ((node: HierarchyRectangularNode<T>) => number);
43
43
  /**
44
44
  * The right padding between nodes.
45
45
  *
46
46
  */
47
- paddingRight?: number;
47
+ paddingRight?: number | ((node: HierarchyRectangularNode<T>) => number);
48
48
  /**
49
- * The selected node.
49
+ * Modify tiling function for approapriate aspect ratio when treemap is zoomed in
50
50
  *
51
- * @default null
51
+ * @default false
52
52
  */
53
- selected?: HierarchyRectangularNode<T> | null;
53
+ maintainAspectRatio?: boolean;
54
54
  hierarchy?: HierarchyNode<T>;
55
55
  children?: Snippet<[{
56
56
  nodes: HierarchyRectangularNode<T>[];
@@ -58,11 +58,18 @@ export type TreemapProps<T> = {
58
58
  };
59
59
  import { treemapSquarify, type HierarchyNode, type HierarchyRectangularNode } from 'd3-hierarchy';
60
60
  import type { Snippet } from 'svelte';
61
+ declare function $$render<T>(): {
62
+ props: TreemapProps<T>;
63
+ exports: {};
64
+ bindings: "";
65
+ slots: {};
66
+ events: {};
67
+ };
61
68
  declare class __sveltets_Render<T> {
62
- props(): TreemapProps<T>;
63
- events(): {};
64
- slots(): {};
65
- bindings(): "selected";
69
+ props(): ReturnType<typeof $$render<T>>['props'];
70
+ events(): ReturnType<typeof $$render<T>>['events'];
71
+ slots(): ReturnType<typeof $$render<T>>['slots'];
72
+ bindings(): "";
66
73
  exports(): {};
67
74
  }
68
75
  interface $$IsomorphicComponent {
@@ -71,8 +71,6 @@
71
71
  import { getGeoContext } from './GeoContext.svelte';
72
72
  import CircleClipPath from './CircleClipPath.svelte';
73
73
 
74
- import { layerClass } from '../utils/attributes.js';
75
-
76
74
  let {
77
75
  data,
78
76
  r,
@@ -118,7 +116,7 @@
118
116
  const disableClip = $derived(r === 0 || r == null || r === Infinity);
119
117
  </script>
120
118
 
121
- <Group {...restProps} class={cls(layerClass('voronoi-g'), classes.root, className)}>
119
+ <Group {...restProps} class={cls('lc-voronoi-g', classes.root, className)}>
122
120
  {#if geo.projection}
123
121
  {@const polygons = geoVoronoi().polygons(points)}
124
122
  {#each polygons.features as feature}
@@ -131,11 +129,7 @@
131
129
  >
132
130
  <GeoPath
133
131
  geojson={feature}
134
- class={cls(
135
- layerClass('voronoi-geo-path'),
136
- 'fill-transparent stroke-transparent',
137
- classes.path
138
- )}
132
+ class={['lc-voronoi-geo-path', classes.path]}
139
133
  onclick={(e) => onclick?.(e, { data: feature.properties.site.data, feature })}
140
134
  onpointerenter={(e) =>
141
135
  onpointerenter?.(e, { data: feature.properties.site.data, feature })}
@@ -158,11 +152,7 @@
158
152
  <CircleClipPath cx={point[0]} cy={point[1]} r={r ?? 0} disabled={disableClip}>
159
153
  <Spline
160
154
  {pathData}
161
- class={cls(
162
- layerClass('voronoi-path'),
163
- 'fill-transparent stroke-transparent',
164
- classes.path
165
- )}
155
+ class={['lc-voronoi-path', classes.path]}
166
156
  onclick={(e) => onclick?.(e, { data: point.data, point })}
167
157
  onpointerenter={(e) => onpointerenter?.(e, { data: point.data, point })}
168
158
  onpointermove={(e) => onpointermove?.(e, { data: point.data, point })}
@@ -178,3 +168,12 @@
178
168
  {/each}
179
169
  {/if}
180
170
  </Group>
171
+
172
+ <style>
173
+ @layer components {
174
+ :global(:where(.lc-voronoi-path, .lc-voronoi-geo-path)) {
175
+ fill: transparent;
176
+ stroke: transparent;
177
+ }
178
+ }
179
+ </style>