@orbcharts/core 3.0.7 → 4.0.0-pre-alpha.1

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 (196) hide show
  1. package/dist/orbcharts-core.es.js +2795 -6591
  2. package/dist/orbcharts-core.umd.js +6 -6
  3. package/dist/src/OrbCharts.d.ts +18 -0
  4. package/dist/src/chart/createChart.d.ts +3 -0
  5. package/dist/src/chart/createGraphData.d.ts +3 -0
  6. package/dist/src/chart/createGridData.d.ts +3 -0
  7. package/dist/src/chart/createMultivariateData.d.ts +3 -0
  8. package/dist/src/chart/createSeriesData.d.ts +3 -0
  9. package/dist/src/chart/createTreeData.d.ts +3 -0
  10. package/dist/src/chart/defaults.d.ts +5 -0
  11. package/dist/src/defineCanvasLayer.d.ts +16 -0
  12. package/dist/src/defineCanvasPlugin.d.ts +22 -0
  13. package/dist/src/defineSVGLayer.d.ts +16 -0
  14. package/dist/src/defineSVGPlugin.d.ts +22 -0
  15. package/dist/src/index.d.ts +6 -14
  16. package/dist/src/layer/createLayer.d.ts +3 -0
  17. package/dist/src/plugin/createPlugin.d.ts +3 -0
  18. package/dist/src/test/createGraphData.test.d.ts +1 -0
  19. package/dist/src/test/createTreeData.test.d.ts +1 -0
  20. package/dist/src/test/simple-graph-test.d.ts +74 -0
  21. package/dist/src/test/simple-tree-test.d.ts +13 -0
  22. package/dist/src/types/Chart.d.ts +39 -0
  23. package/dist/src/types/ChartContext.d.ts +27 -0
  24. package/dist/src/types/Common.d.ts +3 -0
  25. package/dist/src/types/Encoding.d.ts +33 -0
  26. package/dist/src/types/Event.d.ts +12 -0
  27. package/dist/src/types/Layers.d.ts +55 -0
  28. package/dist/src/types/ModelData.d.ts +70 -0
  29. package/dist/src/types/Plugin.d.ts +39 -0
  30. package/dist/src/types/RawData.d.ts +18 -0
  31. package/dist/src/types/RenderData.d.ts +4 -0
  32. package/dist/src/types/Theme.d.ts +17 -0
  33. package/dist/src/types/Validator.d.ts +20 -0
  34. package/dist/src/types/index.d.ts +12 -0
  35. package/dist/src/utils/aggregateUtils.d.ts +37 -0
  36. package/dist/src/utils/colorUtils.d.ts +22 -0
  37. package/dist/src/utils/commonUtils.d.ts +3 -5
  38. package/dist/src/utils/dom-lifecycle.d.ts +37 -0
  39. package/dist/src/utils/dom.d.ts +6 -0
  40. package/dist/src/utils/index.d.ts +5 -1
  41. package/dist/src/utils/observables.d.ts +1 -25
  42. package/dist/src/utils/orbchartsUtils.d.ts +2 -53
  43. package/dist/src/utils/validator.d.ts +2 -2
  44. package/dist/test/aggregateTest.d.ts +1 -0
  45. package/package.json +26 -13
  46. package/src/OrbCharts.ts +35 -0
  47. package/src/chart/createChart.ts +997 -0
  48. package/src/chart/createGraphData.ts +391 -0
  49. package/src/chart/createGridData.ts +247 -0
  50. package/src/chart/createMultivariateData.ts +181 -0
  51. package/src/chart/createSeriesData.ts +297 -0
  52. package/src/chart/createTreeData.ts +344 -0
  53. package/src/chart/defaults.ts +100 -0
  54. package/src/defineCanvasLayer.ts +24 -0
  55. package/src/defineCanvasPlugin.ts +39 -0
  56. package/src/defineSVGLayer.ts +24 -0
  57. package/src/defineSVGPlugin.ts +39 -0
  58. package/src/index.ts +6 -18
  59. package/src/layer/createLayer.ts +138 -0
  60. package/src/plugin/createPlugin.ts +470 -0
  61. package/src/test/createGraphData.test.ts +103 -0
  62. package/src/test/createTreeData.test.ts +97 -0
  63. package/src/test/simple-graph-test.js +51 -0
  64. package/src/test/simple-tree-test.js +58 -0
  65. package/src/types/Chart.ts +62 -0
  66. package/src/types/ChartContext.ts +42 -0
  67. package/src/types/Common.ts +5 -0
  68. package/src/types/Encoding.ts +43 -0
  69. package/src/types/Event.ts +26 -0
  70. package/src/types/Layers.ts +93 -0
  71. package/src/types/ModelData.ts +95 -0
  72. package/src/types/Plugin.ts +98 -0
  73. package/src/types/RawData.ts +67 -0
  74. package/src/types/RenderData.ts +16 -0
  75. package/src/types/Theme.ts +21 -0
  76. package/src/types/Validator.ts +36 -0
  77. package/src/types/index.ts +12 -0
  78. package/src/utils/aggregateUtils.ts +99 -0
  79. package/src/utils/colorUtils.ts +63 -0
  80. package/src/utils/commonUtils.ts +12 -11
  81. package/src/utils/dom-lifecycle.ts +164 -0
  82. package/src/utils/dom.ts +55 -0
  83. package/src/utils/index.ts +6 -2
  84. package/src/utils/observables.ts +1 -292
  85. package/src/utils/orbchartsUtils.ts +6 -393
  86. package/src/utils/validator.ts +15 -14
  87. package/dist/lib/core-types.d.ts +0 -1
  88. package/dist/src/AbstractChart.d.ts +0 -19
  89. package/dist/src/GridChart.d.ts +0 -6
  90. package/dist/src/MultiGridChart.d.ts +0 -6
  91. package/dist/src/MultiValueChart.d.ts +0 -6
  92. package/dist/src/RelationshipChart.d.ts +0 -6
  93. package/dist/src/SeriesChart.d.ts +0 -6
  94. package/dist/src/TreeChart.d.ts +0 -6
  95. package/dist/src/base/createBaseChart.d.ts +0 -3
  96. package/dist/src/base/createBasePlugin.d.ts +0 -3
  97. package/dist/src/base/validators/chartOptionsValidator.d.ts +0 -3
  98. package/dist/src/base/validators/chartParamsValidator.d.ts +0 -3
  99. package/dist/src/base/validators/elementValidator.d.ts +0 -3
  100. package/dist/src/base/validators/pluginsValidator.d.ts +0 -3
  101. package/dist/src/defaults.d.ts +0 -25
  102. package/dist/src/defineGridPlugin.d.ts +0 -1
  103. package/dist/src/defineMultiGridPlugin.d.ts +0 -1
  104. package/dist/src/defineMultiValuePlugin.d.ts +0 -1
  105. package/dist/src/defineNoneDataPlugin.d.ts +0 -1
  106. package/dist/src/defineRelationshipPlugin.d.ts +0 -1
  107. package/dist/src/defineSeriesPlugin.d.ts +0 -1
  108. package/dist/src/defineTreePlugin.d.ts +0 -1
  109. package/dist/src/grid/computedDataFn.d.ts +0 -4
  110. package/dist/src/grid/contextObserverCallback.d.ts +0 -3
  111. package/dist/src/grid/dataFormatterValidator.d.ts +0 -3
  112. package/dist/src/grid/dataValidator.d.ts +0 -3
  113. package/dist/src/grid/gridObservables.d.ts +0 -64
  114. package/dist/src/multiGrid/computedDataFn.d.ts +0 -3
  115. package/dist/src/multiGrid/contextObserverCallback.d.ts +0 -3
  116. package/dist/src/multiGrid/dataFormatterValidator.d.ts +0 -3
  117. package/dist/src/multiGrid/dataValidator.d.ts +0 -3
  118. package/dist/src/multiGrid/multiGridObservables.d.ts +0 -16
  119. package/dist/src/multiValue/computedDataFn.d.ts +0 -3
  120. package/dist/src/multiValue/contextObserverCallback.d.ts +0 -3
  121. package/dist/src/multiValue/dataFormatterValidator.d.ts +0 -3
  122. package/dist/src/multiValue/dataValidator.d.ts +0 -3
  123. package/dist/src/multiValue/multiValueObservables.d.ts +0 -130
  124. package/dist/src/relationship/computedDataFn.d.ts +0 -3
  125. package/dist/src/relationship/contextObserverCallback.d.ts +0 -3
  126. package/dist/src/relationship/dataFormatterValidator.d.ts +0 -3
  127. package/dist/src/relationship/dataValidator.d.ts +0 -3
  128. package/dist/src/relationship/relationshipObservables.d.ts +0 -13
  129. package/dist/src/series/computedDataFn.d.ts +0 -3
  130. package/dist/src/series/contextObserverCallback.d.ts +0 -3
  131. package/dist/src/series/dataFormatterValidator.d.ts +0 -3
  132. package/dist/src/series/dataValidator.d.ts +0 -3
  133. package/dist/src/series/seriesObservables.d.ts +0 -37
  134. package/dist/src/tree/computedDataFn.d.ts +0 -3
  135. package/dist/src/tree/contextObserverCallback.d.ts +0 -3
  136. package/dist/src/tree/dataFormatterValidator.d.ts +0 -3
  137. package/dist/src/tree/dataValidator.d.ts +0 -3
  138. package/dist/src/tree/treeObservables.d.ts +0 -10
  139. package/dist/src/utils/d3Scale.d.ts +0 -28
  140. package/lib/core-types.ts +0 -7
  141. package/src/AbstractChart.ts +0 -57
  142. package/src/GridChart.ts +0 -25
  143. package/src/MultiGridChart.ts +0 -25
  144. package/src/MultiValueChart.ts +0 -25
  145. package/src/RelationshipChart.ts +0 -25
  146. package/src/SeriesChart.ts +0 -25
  147. package/src/TreeChart.ts +0 -25
  148. package/src/base/createBaseChart.ts +0 -524
  149. package/src/base/createBasePlugin.ts +0 -154
  150. package/src/base/validators/chartOptionsValidator.ts +0 -24
  151. package/src/base/validators/chartParamsValidator.ts +0 -134
  152. package/src/base/validators/elementValidator.ts +0 -14
  153. package/src/base/validators/pluginsValidator.ts +0 -15
  154. package/src/defaults.ts +0 -284
  155. package/src/defineGridPlugin.ts +0 -3
  156. package/src/defineMultiGridPlugin.ts +0 -3
  157. package/src/defineMultiValuePlugin.ts +0 -3
  158. package/src/defineNoneDataPlugin.ts +0 -4
  159. package/src/defineRelationshipPlugin.ts +0 -3
  160. package/src/defineSeriesPlugin.ts +0 -3
  161. package/src/defineTreePlugin.ts +0 -3
  162. package/src/grid/computedDataFn.ts +0 -129
  163. package/src/grid/contextObserverCallback.ts +0 -209
  164. package/src/grid/dataFormatterValidator.ts +0 -126
  165. package/src/grid/dataValidator.ts +0 -13
  166. package/src/grid/gridObservables.ts +0 -699
  167. package/src/multiGrid/computedDataFn.ts +0 -123
  168. package/src/multiGrid/contextObserverCallback.ts +0 -109
  169. package/src/multiGrid/dataFormatterValidator.ts +0 -121
  170. package/src/multiGrid/dataValidator.ts +0 -13
  171. package/src/multiGrid/multiGridObservables.ts +0 -367
  172. package/src/multiValue/computedDataFn.ts +0 -113
  173. package/src/multiValue/contextObserverCallback.ts +0 -328
  174. package/src/multiValue/dataFormatterValidator.ts +0 -95
  175. package/src/multiValue/dataValidator.ts +0 -13
  176. package/src/multiValue/multiValueObservables.ts +0 -865
  177. package/src/relationship/computedDataFn.ts +0 -159
  178. package/src/relationship/contextObserverCallback.ts +0 -80
  179. package/src/relationship/dataFormatterValidator.ts +0 -14
  180. package/src/relationship/dataValidator.ts +0 -14
  181. package/src/relationship/relationshipObservables.ts +0 -85
  182. package/src/series/computedDataFn.ts +0 -88
  183. package/src/series/contextObserverCallback.ts +0 -132
  184. package/src/series/dataFormatterValidator.ts +0 -47
  185. package/src/series/dataValidator.ts +0 -13
  186. package/src/series/seriesObservables.ts +0 -210
  187. package/src/tree/computedDataFn.ts +0 -129
  188. package/src/tree/contextObserverCallback.ts +0 -58
  189. package/src/tree/dataFormatterValidator.ts +0 -14
  190. package/src/tree/dataValidator.ts +0 -14
  191. package/src/tree/treeObservables.ts +0 -106
  192. package/src/utils/d3Scale.ts +0 -198
  193. package/tsconfig.base.json +0 -14
  194. package/tsconfig.json +0 -3
  195. package/vite-env.d.ts +0 -7
  196. package/vite.config.js +0 -23
@@ -1,4 +1,8 @@
1
+ export * from './aggregateUtils'
2
+ export * from './colorUtils'
1
3
  export * from './commonUtils'
2
- export * from './d3Scale'
4
+ export * from './dom'
5
+ export * from './errorMessage'
3
6
  export * from './observables'
4
- export * from './orbchartsUtils'
7
+ export * from './orbchartsUtils'
8
+ export * from './validator'
@@ -1,35 +1,4 @@
1
- import {
2
- combineLatest,
3
- distinctUntilChanged,
4
- filter,
5
- map,
6
- merge,
7
- takeUntil,
8
- shareReplay,
9
- switchMap,
10
- Subject,
11
- Observable } from 'rxjs'
12
- import type {
13
- ChartType,
14
- ChartParams,
15
- ComputedDatumBase,
16
- ComputedDataTypeMap,
17
- ComputedDatumTypeMap,
18
- ContainerPositionScaled,
19
- DataFormatterContainer,
20
- DataFormatterTypeMap,
21
- EventTypeMap,
22
- HighlightTarget,
23
- Layout,
24
- TransformData } from '../../lib/core-types'
25
-
26
- // interface DatumUnknown {
27
- // value: number | null
28
- // id: string
29
- // // label: string
30
- // seriesLabel?: string // 要符合每一種computedData所以不一定會有seriesLabel
31
- // groupLabel?: string // 要符合每一種computedData所以不一定會有groupLabel
32
- // }
1
+ import { Observable, BehaviorSubject } from 'rxjs'
33
2
 
34
3
  export function resizeObservable(elem: HTMLElement | Element): Observable<DOMRectReadOnly> {
35
4
  return new Observable(subscriber => {
@@ -45,264 +14,4 @@ export function resizeObservable(elem: HTMLElement | Element): Observable<DOMRec
45
14
  ro.unobserve(elem)
46
15
  }
47
16
  })
48
- }
49
-
50
- interface HighlightTargetValue {
51
- id: string | null
52
- label: string | null
53
- seriesLabel: string | null
54
- groupLabel: string | null
55
- categoryLabel: string | null
56
- // highlightDefault: string | null
57
- }
58
-
59
- // 通用 highlight Observable
60
- export const highlightObservable = <T extends ChartType, D>({ datumList$, fullChartParams$, event$ }: {
61
- datumList$: Observable<D[]>
62
- fullChartParams$: Observable<ChartParams>
63
- event$: Subject<EventTypeMap<T>>
64
- }): Observable<D[]> => {
65
- const destroy$ = new Subject()
66
-
67
- // 預設的highlight
68
- const highlightDefault$: Observable<HighlightTargetValue> = fullChartParams$.pipe(
69
- takeUntil(destroy$),
70
- map(d => d.highlightDefault || null),
71
- distinctUntilChanged(),
72
- map(highlightDefault => {
73
- return {
74
- id: highlightDefault,
75
- label: highlightDefault,
76
- seriesLabel: highlightDefault,
77
- groupLabel: highlightDefault,
78
- categoryLabel: highlightDefault,
79
- // highlightDefault
80
- } as HighlightTargetValue
81
- }),
82
- shareReplay(1)
83
- )
84
-
85
- const highlightTarget$: Observable<HighlightTarget> = fullChartParams$.pipe(
86
- takeUntil(destroy$),
87
- map(d => d.highlightTarget),
88
- distinctUntilChanged(),
89
- shareReplay(1)
90
- )
91
-
92
- // 事件觸發的highlight
93
- const highlightMouseover$: Observable<HighlightTargetValue> = highlightTarget$.pipe(
94
- switchMap(highlightTarget => {
95
- return event$.pipe(
96
- takeUntil(destroy$),
97
- // filter(d => d.eventName === 'mouseover' || d.eventName === 'mousemove'),
98
- filter(d => d.eventName === 'mouseover'),
99
- // distinctUntilChanged((prev, current) => prev.eventName === current.eventName)
100
- map(_d => {
101
- const d = _d as any
102
- return d.datum
103
- ? {
104
- id: d.datum.id,
105
- label: null, // label有可能重覆所以不做判斷
106
- seriesLabel: highlightTarget === 'series' ? d.datum.seriesLabel : null,
107
- groupLabel: highlightTarget === 'group' ? d.datum.groupLabel : null,
108
- categoryLabel: highlightTarget === 'category' ? d.datum.categoryLabel : null,
109
- // highlightDefault: null
110
- } as HighlightTargetValue
111
- : {
112
- id: null,
113
- label: null,
114
- seriesLabel: null,
115
- groupLabel: null,
116
- categoryLabel: null,
117
- // highlightDefault: null
118
- } as HighlightTargetValue
119
- })
120
- )
121
- })
122
- )
123
-
124
- const highlightMouseout$ = event$.pipe(
125
- takeUntil(destroy$),
126
- filter(d => d.eventName === 'mouseout'),
127
- // distinctUntilChanged((prev, current) => prev.eventName === current.eventName)
128
- // map(d => {
129
- // return { id: '', label: '' }
130
- // })
131
- switchMap(d => highlightDefault$)
132
- )
133
-
134
- // function getDatumIds (datumList: ComputedDatumTypeMap<T>[], id: string | null) {
135
- // const datum = datumList.find(d => (d as ComputedDatumBase).id === id)
136
- // return datum ? [datum] : []
137
- // }
138
- function getDatumIds (datumList: ComputedDatumTypeMap<T>[], id: string | null, label: string | null) {
139
- return id == null && label == null
140
- ? []
141
- : datumList.filter(d => (d as ComputedDatumBase).id === id || (d as ComputedDatumBase).label === label)
142
- }
143
-
144
- function getSeriesIds (datumList: ComputedDatumTypeMap<T>[], seriesLabel: string | null) {
145
- return seriesLabel == null
146
- ? []
147
- : datumList.filter(d => (d as ComputedDatumTypeMap<"series">).seriesLabel === seriesLabel)
148
- }
149
-
150
- function getGroupIds (datumList: ComputedDatumTypeMap<T>[], groupLabel: string | null) {
151
- return groupLabel == null
152
- ? []
153
- : datumList.filter(d => (d as ComputedDatumTypeMap<"grid">).groupLabel === groupLabel)
154
- }
155
-
156
- function getCategoryIds (datumList: ComputedDatumTypeMap<T>[], categoryLabel: string | null) {
157
- return categoryLabel == null
158
- ? []
159
- : datumList.filter(d => (d as ComputedDatumTypeMap<"multiValue" | "relationship" | "tree">).categoryLabel === categoryLabel)
160
- }
161
-
162
- return new Observable<D[]>(subscriber => {
163
- combineLatest({
164
- target: merge(highlightMouseover$, highlightMouseout$, highlightDefault$),
165
- datumList: datumList$,
166
- fullChartParams: fullChartParams$,
167
- }).pipe(
168
- takeUntil(destroy$),
169
- switchMap(async d => d)
170
- ).subscribe(data => {
171
- let datumList: ComputedDatumTypeMap<T>[] = []
172
- if (data.fullChartParams.highlightTarget === 'datum') {
173
- datumList = getDatumIds(data.datumList as ComputedDatumTypeMap<T>[], data.target.id, data.target.label)
174
- } else if (data.fullChartParams.highlightTarget === 'series') {
175
- datumList = getSeriesIds(data.datumList as ComputedDatumTypeMap<T>[], data.target.seriesLabel)
176
- } else if (data.fullChartParams.highlightTarget === 'group') {
177
- datumList = getGroupIds(data.datumList as ComputedDatumTypeMap<T>[], data.target.groupLabel)
178
- } else if (data.fullChartParams.highlightTarget === 'category') {
179
- datumList = getCategoryIds(data.datumList as ComputedDatumTypeMap<T>[], data.target.categoryLabel)
180
- }
181
- subscriber.next(datumList as D[])
182
- })
183
-
184
- return function unsubscribe () {
185
- destroy$.next(undefined)
186
- }
187
- })
188
- }
189
-
190
- export const seriesDataMapObservable = <DatumType extends ComputedDatumTypeMap<'series' | 'grid'>>({ datumList$ }: { datumList$: Observable<DatumType[]> }) => {
191
- return datumList$.pipe(
192
- map(data => {
193
- const SeriesDataMap: Map<string, DatumType[]> = new Map()
194
- data.forEach(d => {
195
- const seriesData = SeriesDataMap.get(d.seriesLabel) ?? []
196
- seriesData.push(d)
197
- SeriesDataMap.set(d.seriesLabel, seriesData)
198
- })
199
- return SeriesDataMap
200
- })
201
- )
202
- }
203
-
204
- export const groupDataMapObservable = <DatumType extends ComputedDatumTypeMap<'grid'>> ({ datumList$ }: { datumList$: Observable<DatumType[]> }) => {
205
- return datumList$.pipe(
206
- map(data => {
207
- const GroupDataMap: Map<string, DatumType[]> = new Map()
208
- data.forEach(d => {
209
- const groupData = GroupDataMap.get(d.groupLabel) ?? []
210
- groupData.push(d)
211
- GroupDataMap.set(d.groupLabel, groupData)
212
- })
213
- return GroupDataMap
214
- })
215
- )
216
- }
217
-
218
- export const categoryDataMapObservable = <DatumType extends ComputedDatumTypeMap<'multiValue' | 'relationship' | 'tree'>> ({ datumList$ }: { datumList$: Observable<DatumType[]> }) => {
219
- return datumList$.pipe(
220
- map(data => {
221
- const GroupDataMap: Map<string, DatumType[]> = new Map()
222
- data
223
- .filter(d => d.categoryLabel != null)
224
- .forEach(d => {
225
- const groupData = GroupDataMap.get(d.categoryLabel) ?? []
226
- groupData.push(d)
227
- GroupDataMap.set(d.categoryLabel, groupData)
228
- })
229
- return GroupDataMap
230
- })
231
- )
232
- }
233
-
234
- export const textSizePxObservable = (chartParams$: Observable<ChartParams>) => {
235
- return chartParams$.pipe(
236
- map(d => d.styles.textSize),
237
- distinctUntilChanged(),
238
- map(data => {
239
- let value = NaN
240
- if (typeof data === 'string') {
241
- if (data.includes('rem')) {
242
- const rootFontSizePx = parseFloat(getComputedStyle(document.documentElement).fontSize)
243
- const num = parseFloat(data)
244
- value = num * rootFontSizePx
245
- } else if (data.includes('px')) {
246
- value = parseFloat(data)
247
- }
248
- } else if (typeof data === 'number') {
249
- return data
250
- }
251
- return value ? value : 14 // default
252
- })
253
- )
254
- }
255
-
256
- export const containerSizeObservable = ({ layout$, containerPosition$, container$ }: {
257
- layout$: Observable<Layout>
258
- containerPosition$: Observable<ContainerPositionScaled[]>
259
- container$: Observable<DataFormatterContainer>
260
- }) => {
261
- const rowAmount$ = containerPosition$.pipe(
262
- map(containerPosition => {
263
- const maxRowIndex = containerPosition.reduce((acc, current) => {
264
- return current.rowIndex > acc ? current.rowIndex : acc
265
- }, 0)
266
- return maxRowIndex + 1
267
- }),
268
- distinctUntilChanged(),
269
- )
270
-
271
- const columnAmount$ = containerPosition$.pipe(
272
- map(containerPosition => {
273
- const maxColumnIndex = containerPosition.reduce((acc, current) => {
274
- return current.columnIndex > acc ? current.columnIndex : acc
275
- }, 0)
276
- return maxColumnIndex + 1
277
- }),
278
- distinctUntilChanged()
279
- )
280
-
281
- return combineLatest({
282
- layout: layout$,
283
- rowAmount: rowAmount$,
284
- columnAmount: columnAmount$,
285
- container: container$
286
- }).pipe(
287
- switchMap(async (d) => d),
288
- map(data => {
289
- // const width = (data.layout.rootWidth / data.columnAmount) - (data.layout.left + data.layout.right)
290
- // const height = (data.layout.rootHeight / data.rowAmount) - (data.layout.top + data.layout.bottom)
291
- const columnGap = data.container.columnGap === 'auto'
292
- ? data.layout.left + data.layout.right
293
- : data.container.columnGap
294
- const rowGap = data.container.rowGap === 'auto'
295
- ? data.layout.top + data.layout.bottom
296
- : data.container.rowGap
297
- const width = (data.layout.rootWidth - data.layout.left - data.layout.right - (columnGap * (data.columnAmount - 1))) / data.columnAmount
298
- const height = (data.layout.rootHeight - data.layout.top - data.layout.bottom - (rowGap * (data.rowAmount - 1))) / data.rowAmount
299
-
300
- return {
301
- width,
302
- height
303
- }
304
- }),
305
- distinctUntilChanged((a, b) => a.width === b.width && a.height === b.height),
306
- // shareReplay(1)
307
- )
308
17
  }