@cratis/components 2.0.1 → 2.1.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 (139) hide show
  1. package/dist/cjs/Filter/FilterEditor.js +28 -0
  2. package/dist/cjs/Filter/FilterEditor.js.map +1 -0
  3. package/dist/cjs/Filter/FilterPanel.css +412 -0
  4. package/dist/cjs/Filter/FilterPanel.js +91 -0
  5. package/dist/cjs/Filter/FilterPanel.js.map +1 -0
  6. package/dist/cjs/{PivotViewer/components → Filter}/RangeHistogramFilter.js +6 -6
  7. package/dist/cjs/Filter/RangeHistogramFilter.js.map +1 -0
  8. package/dist/cjs/Filter/index.js +18 -0
  9. package/dist/cjs/Filter/index.js.map +1 -0
  10. package/dist/cjs/Filter/useFilterState.js +104 -0
  11. package/dist/cjs/Filter/useFilterState.js.map +1 -0
  12. package/dist/cjs/Filter/utils.js +28 -0
  13. package/dist/cjs/Filter/utils.js.map +1 -0
  14. package/dist/cjs/PivotViewer/components/FilterPanel.js +20 -54
  15. package/dist/cjs/PivotViewer/components/FilterPanel.js.map +1 -1
  16. package/dist/cjs/PivotViewer/types.js.map +1 -1
  17. package/dist/cjs/PivotViewer/utils/utils.js +0 -2
  18. package/dist/cjs/PivotViewer/utils/utils.js.map +1 -1
  19. package/dist/cjs/index.js +16 -14
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/esm/CommandDialog/CommandDialog.d.ts +2 -2
  22. package/dist/esm/CommandDialog/CommandStepper.d.ts +2 -2
  23. package/dist/esm/CommandDialog/CommandStepper.d.ts.map +1 -1
  24. package/dist/esm/CommandDialog/StepperCommandDialog.d.ts +1 -1
  25. package/dist/esm/CommandDialog/StepperCommandDialog.d.ts.map +1 -1
  26. package/dist/esm/Common/CratisComponentsProvider.d.ts +1 -1
  27. package/dist/esm/Common/CratisComponentsProvider.d.ts.map +1 -1
  28. package/dist/esm/Common/ErrorBoundary.d.ts +1 -1
  29. package/dist/esm/Common/FormElement.d.ts +1 -1
  30. package/dist/esm/Common/FormElement.d.ts.map +1 -1
  31. package/dist/esm/Common/Icon.d.ts +1 -1
  32. package/dist/esm/Common/Icon.d.ts.map +1 -1
  33. package/dist/esm/Common/Page.d.ts +1 -1
  34. package/dist/esm/Common/Page.d.ts.map +1 -1
  35. package/dist/esm/DataPage/DataPage.d.ts +5 -5
  36. package/dist/esm/DataPage/DataPage.d.ts.map +1 -1
  37. package/dist/esm/DataTables/DataTableForObservableQuery.d.ts +1 -1
  38. package/dist/esm/DataTables/DataTableForObservableQuery.d.ts.map +1 -1
  39. package/dist/esm/DataTables/DataTableForQuery.d.ts +1 -1
  40. package/dist/esm/DataTables/DataTableForQuery.d.ts.map +1 -1
  41. package/dist/esm/Dialogs/BusyIndicatorDialog.d.ts +1 -1
  42. package/dist/esm/Dialogs/BusyIndicatorDialog.d.ts.map +1 -1
  43. package/dist/esm/Dialogs/ConfirmationDialog.d.ts +1 -1
  44. package/dist/esm/Dialogs/ConfirmationDialog.d.ts.map +1 -1
  45. package/dist/esm/Dialogs/Dialog.d.ts +1 -1
  46. package/dist/esm/Dialogs/Dialog.d.ts.map +1 -1
  47. package/dist/esm/Filter/FilterEditor.d.ts +8 -0
  48. package/dist/esm/Filter/FilterEditor.d.ts.map +1 -0
  49. package/dist/esm/Filter/FilterEditor.js +26 -0
  50. package/dist/esm/Filter/FilterEditor.js.map +1 -0
  51. package/dist/esm/Filter/FilterPanel.css +412 -0
  52. package/dist/esm/Filter/FilterPanel.d.ts +24 -0
  53. package/dist/esm/Filter/FilterPanel.d.ts.map +1 -0
  54. package/dist/esm/Filter/FilterPanel.js +89 -0
  55. package/dist/esm/Filter/FilterPanel.js.map +1 -0
  56. package/dist/esm/Filter/RangeHistogramFilter.d.ts +12 -0
  57. package/dist/esm/Filter/RangeHistogramFilter.d.ts.map +1 -0
  58. package/dist/esm/Filter/RangeHistogramFilter.js +122 -0
  59. package/dist/esm/Filter/RangeHistogramFilter.js.map +1 -0
  60. package/dist/esm/Filter/index.d.ts +11 -0
  61. package/dist/esm/Filter/index.d.ts.map +1 -0
  62. package/dist/esm/Filter/index.js +9 -0
  63. package/dist/esm/Filter/index.js.map +1 -0
  64. package/dist/esm/Filter/types.d.ts +28 -0
  65. package/dist/esm/Filter/types.d.ts.map +1 -0
  66. package/dist/esm/Filter/types.js +2 -0
  67. package/dist/esm/Filter/types.js.map +1 -0
  68. package/dist/esm/Filter/useFilterState.d.ts +14 -0
  69. package/dist/esm/Filter/useFilterState.d.ts.map +1 -0
  70. package/dist/esm/Filter/useFilterState.js +102 -0
  71. package/dist/esm/Filter/useFilterState.js.map +1 -0
  72. package/dist/esm/Filter/utils.d.ts +4 -0
  73. package/dist/esm/Filter/utils.d.ts.map +1 -0
  74. package/dist/esm/Filter/utils.js +25 -0
  75. package/dist/esm/Filter/utils.js.map +1 -0
  76. package/dist/esm/ObjectContentEditor/ObjectContentEditor.d.ts +2 -1
  77. package/dist/esm/ObjectContentEditor/ObjectContentEditor.d.ts.map +1 -1
  78. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.d.ts +1 -1
  79. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.d.ts.map +1 -1
  80. package/dist/esm/PivotViewer/PivotViewer.d.ts +1 -1
  81. package/dist/esm/PivotViewer/PivotViewer.d.ts.map +1 -1
  82. package/dist/esm/PivotViewer/components/AxisLabels.d.ts +1 -1
  83. package/dist/esm/PivotViewer/components/AxisLabels.d.ts.map +1 -1
  84. package/dist/esm/PivotViewer/components/DetailPanel.d.ts +1 -1
  85. package/dist/esm/PivotViewer/components/DetailPanel.d.ts.map +1 -1
  86. package/dist/esm/PivotViewer/components/FilterPanel.d.ts +1 -1
  87. package/dist/esm/PivotViewer/components/FilterPanel.d.ts.map +1 -1
  88. package/dist/esm/PivotViewer/components/FilterPanel.js +21 -55
  89. package/dist/esm/PivotViewer/components/FilterPanel.js.map +1 -1
  90. package/dist/esm/PivotViewer/components/FilterPanelContainer.d.ts +1 -1
  91. package/dist/esm/PivotViewer/components/FilterPanelContainer.d.ts.map +1 -1
  92. package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts +1 -1
  93. package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts.map +1 -1
  94. package/dist/esm/PivotViewer/components/RangeHistogramFilter.d.ts +1 -1
  95. package/dist/esm/PivotViewer/components/RangeHistogramFilter.d.ts.map +1 -1
  96. package/dist/esm/PivotViewer/components/RangeHistogramFilter.js +8 -11
  97. package/dist/esm/PivotViewer/components/RangeHistogramFilter.js.map +1 -1
  98. package/dist/esm/PivotViewer/components/Spinner.d.ts +1 -1
  99. package/dist/esm/PivotViewer/components/Spinner.d.ts.map +1 -1
  100. package/dist/esm/PivotViewer/components/Toolbar.d.ts +1 -1
  101. package/dist/esm/PivotViewer/components/Toolbar.d.ts.map +1 -1
  102. package/dist/esm/PivotViewer/components/ToolbarContainer.d.ts +1 -1
  103. package/dist/esm/PivotViewer/components/ToolbarContainer.d.ts.map +1 -1
  104. package/dist/esm/PivotViewer/types.d.ts +3 -1
  105. package/dist/esm/PivotViewer/types.d.ts.map +1 -1
  106. package/dist/esm/PivotViewer/types.js.map +1 -1
  107. package/dist/esm/PivotViewer/utils/utils.js +1 -2
  108. package/dist/esm/PivotViewer/utils/utils.js.map +1 -1
  109. package/dist/esm/SchemaEditor/NameCell.d.ts +1 -1
  110. package/dist/esm/SchemaEditor/NameCell.d.ts.map +1 -1
  111. package/dist/esm/SchemaEditor/SchemaEditor.d.ts +1 -1
  112. package/dist/esm/SchemaEditor/SchemaEditor.d.ts.map +1 -1
  113. package/dist/esm/SchemaEditor/TypeCell.d.ts +1 -1
  114. package/dist/esm/SchemaEditor/TypeCell.d.ts.map +1 -1
  115. package/dist/esm/Toolbar/Toolbar.d.ts +1 -1
  116. package/dist/esm/Toolbar/Toolbar.d.ts.map +1 -1
  117. package/dist/esm/Toolbar/ToolbarButton.d.ts +1 -1
  118. package/dist/esm/Toolbar/ToolbarButton.d.ts.map +1 -1
  119. package/dist/esm/Toolbar/ToolbarFanOutItem.d.ts +1 -1
  120. package/dist/esm/Toolbar/ToolbarFanOutItem.d.ts.map +1 -1
  121. package/dist/esm/Toolbar/ToolbarFolder.d.ts +1 -1
  122. package/dist/esm/Toolbar/ToolbarFolder.d.ts.map +1 -1
  123. package/dist/esm/Toolbar/ToolbarGroup.d.ts +1 -1
  124. package/dist/esm/Toolbar/ToolbarGroup.d.ts.map +1 -1
  125. package/dist/esm/Toolbar/ToolbarLayout.d.ts +1 -1
  126. package/dist/esm/Toolbar/ToolbarLayout.d.ts.map +1 -1
  127. package/dist/esm/Toolbar/ToolbarSection.d.ts +1 -1
  128. package/dist/esm/Toolbar/ToolbarSection.d.ts.map +1 -1
  129. package/dist/esm/Toolbar/ToolbarSeparator.d.ts +1 -1
  130. package/dist/esm/Toolbar/ToolbarSeparator.d.ts.map +1 -1
  131. package/dist/esm/Toolbar/ToolbarSlot.d.ts +1 -1
  132. package/dist/esm/Toolbar/ToolbarSlot.d.ts.map +1 -1
  133. package/dist/esm/index.d.ts +2 -1
  134. package/dist/esm/index.d.ts.map +1 -1
  135. package/dist/esm/index.js +16 -14
  136. package/dist/esm/index.js.map +1 -1
  137. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  138. package/package.json +6 -1
  139. package/dist/cjs/PivotViewer/components/RangeHistogramFilter.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ /**
6
+ * Declares a custom editor for a specific filter group inside `<FilterPanel>`.
7
+ *
8
+ * Place one or more `<FilterEditor>` elements as children of `<FilterPanel>`.
9
+ * The panel will slot each editor into the filter group whose key matches
10
+ * the `filterKey` prop.
11
+ *
12
+ * ```tsx
13
+ * <FilterPanel filters={filters} {...stateProps}>
14
+ * <FilterEditor filterKey="rating">
15
+ * {({ value, onChange }) => <MyRatingPicker value={value} onChange={onChange} />}
16
+ * </FilterEditor>
17
+ * </FilterPanel>
18
+ * ```
19
+ *
20
+ * This component renders nothing itself — it is only used as a slot descriptor
21
+ * by `FilterPanel`.
22
+ */
23
+ function FilterEditor(_props) {
24
+ return null;
25
+ }
26
+
27
+ exports.FilterEditor = FilterEditor;
28
+ //# sourceMappingURL=FilterEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterEditor.js","sources":["../../../Filter/FilterEditor.tsx"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;AACA;AAYA;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,YAAY,CAAC,MAA6B,EAAA;AACxD,IAAA,OAAO,IAAI;AACb;;;;"}
@@ -0,0 +1,412 @@
1
+ /* -----------------------------------------------------------------------
2
+ * Standalone FilterPanel styles.
3
+ *
4
+ * These styles are shared by the standalone FilterPanel component and the
5
+ * PivotViewer which embeds it. All class names use the .pv-filter-* prefix
6
+ * so they can coexist with PivotViewer's other .pv-* rules.
7
+ * ----------------------------------------------------------------------- */
8
+
9
+ .pv-filter-panel {
10
+ position: fixed;
11
+ width: min(280px, calc(100% - 2rem));
12
+ max-height: calc(100vh - 6.5rem);
13
+ background: linear-gradient(180deg, var(--cratis-surface-card), var(--cratis-surface-ground));
14
+ border: 1px solid var(--cratis-surface-border);
15
+ border-radius: 1rem;
16
+ box-shadow: 0 24px 60px rgba(0, 0, 0, 0.3);
17
+ backdrop-filter: blur(14px);
18
+ overflow: hidden;
19
+ z-index: 12;
20
+ display: flex;
21
+ flex-direction: column;
22
+ }
23
+
24
+ .pv-filter-panel.dragging {
25
+ cursor: grabbing;
26
+ user-select: none;
27
+ }
28
+
29
+ .pv-filter-panel.minimized {
30
+ max-height: none;
31
+ }
32
+
33
+ .pv-filter-panel-header {
34
+ display: flex;
35
+ align-items: center;
36
+ gap: 0.5rem;
37
+ padding: 0.75rem 1rem;
38
+ cursor: grab;
39
+ background: var(--cratis-surface-section);
40
+ border-bottom: 1px solid var(--cratis-surface-border);
41
+ flex-shrink: 0;
42
+ }
43
+
44
+ .pv-filter-panel.dragging .pv-filter-panel-header {
45
+ cursor: grabbing;
46
+ }
47
+
48
+ .pv-filter-panel-header h2 {
49
+ margin: 0;
50
+ font-size: 0.85rem;
51
+ letter-spacing: 0.04em;
52
+ text-transform: uppercase;
53
+ color: var(--cratis-text-color);
54
+ flex: 1;
55
+ pointer-events: none;
56
+ }
57
+
58
+ .pv-minimize-btn,
59
+ .pv-close-btn {
60
+ appearance: none;
61
+ border: none;
62
+ border-radius: 0.4rem;
63
+ width: 1.5rem;
64
+ height: 1.5rem;
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ background: var(--cratis-highlight-bg);
69
+ color: var(--cratis-text-color);
70
+ font-size: 1rem;
71
+ font-weight: 500;
72
+ cursor: pointer;
73
+ transition: background 120ms ease;
74
+ }
75
+
76
+ .pv-minimize-btn:hover,
77
+ .pv-close-btn:hover {
78
+ background: var(--cratis-surface-hover);
79
+ }
80
+
81
+ .pv-close-btn {
82
+ font-size: 1.2rem;
83
+ }
84
+
85
+ .pv-filter-panel-content {
86
+ overflow: hidden;
87
+ max-height: 0;
88
+ opacity: 0;
89
+ padding: 0 1.25rem;
90
+ transition: max-height 150ms ease-out, opacity 100ms ease-out, padding 150ms ease-out;
91
+ }
92
+
93
+ .pv-filter-panel-content.expanded {
94
+ overflow-y: auto;
95
+ flex: 1;
96
+ max-height: 600px;
97
+ opacity: 1;
98
+ padding: 1rem 1.25rem 1.25rem;
99
+ }
100
+
101
+ .pv-search {
102
+ padding-bottom: 1rem;
103
+ }
104
+
105
+ .pv-search input {
106
+ width: 100%;
107
+ padding: 0.65rem 0.85rem;
108
+ border-radius: 0.75rem;
109
+ border: 1px solid var(--cratis-surface-border);
110
+ background: var(--cratis-surface-ground);
111
+ color: inherit;
112
+ font-size: 0.95rem;
113
+ box-shadow: inset 0 1px 0 var(--cratis-surface-border);
114
+ }
115
+
116
+ .pv-search input:focus {
117
+ outline: none;
118
+ border-color: var(--cratis-primary-color);
119
+ box-shadow: var(--cratis-focus-ring);
120
+ }
121
+
122
+ .pv-filter-groups {
123
+ display: flex;
124
+ flex-direction: column;
125
+ gap: 0.85rem;
126
+ }
127
+
128
+ .pv-filter {
129
+ background: var(--cratis-surface-overlay);
130
+ border: 1px solid var(--cratis-surface-border);
131
+ border-radius: 0.85rem;
132
+ padding: 0.75rem 0.85rem;
133
+ transition: border-color 180ms ease, box-shadow 180ms ease;
134
+ }
135
+
136
+ .pv-filter.expanded {
137
+ border-color: var(--cratis-primary-color);
138
+ box-shadow: 0 15px 38px rgba(0, 0, 0, 0.3);
139
+ }
140
+
141
+ .pv-filter-trigger {
142
+ display: flex;
143
+ width: 100%;
144
+ align-items: center;
145
+ justify-content: space-between;
146
+ background: none;
147
+ border: none;
148
+ color: inherit;
149
+ padding: 0;
150
+ cursor: pointer;
151
+ font-size: 0.82rem;
152
+ font-weight: 600;
153
+ text-transform: uppercase;
154
+ letter-spacing: 0.05em;
155
+ }
156
+
157
+ .pv-filter-label {
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 0.4rem;
161
+ }
162
+
163
+ .pv-filter-trigger-meta {
164
+ display: inline-flex;
165
+ align-items: center;
166
+ gap: 0.5rem;
167
+ }
168
+
169
+ .pv-filter-count {
170
+ display: inline-flex;
171
+ align-items: center;
172
+ justify-content: center;
173
+ min-width: 1.5rem;
174
+ padding: 0.15rem 0.45rem;
175
+ border-radius: 999px;
176
+ background: var(--cratis-highlight-bg);
177
+ color: var(--cratis-text-color);
178
+ font-size: 0.7rem;
179
+ }
180
+
181
+ .pv-filter-chevron {
182
+ width: 0.65rem;
183
+ height: 0.65rem;
184
+ border-right: 2px solid var(--cratis-text-color);
185
+ border-bottom: 2px solid var(--cratis-text-color);
186
+ transform: rotate(45deg);
187
+ transition: transform 180ms ease;
188
+ }
189
+
190
+ .pv-filter.expanded .pv-filter-chevron {
191
+ transform: rotate(225deg);
192
+ }
193
+
194
+ .pv-filter-content {
195
+ overflow: hidden;
196
+ max-height: 0;
197
+ opacity: 0;
198
+ margin-top: 0;
199
+ padding-top: 0;
200
+ border-top: 1px solid transparent;
201
+ transition: max-height 120ms ease-out, opacity 80ms ease-out, margin-top 120ms ease-out, padding-top 120ms ease-out, border-color 120ms ease-out;
202
+ }
203
+
204
+ .pv-filter-content.expanded {
205
+ max-height: 350px;
206
+ opacity: 1;
207
+ margin-top: 0.75rem;
208
+ padding-top: 0.75rem;
209
+ border-top-color: var(--cratis-surface-border);
210
+ overflow-y: auto;
211
+ }
212
+
213
+ .pv-filter-content ul {
214
+ list-style: none;
215
+ margin: 0;
216
+ padding: 0;
217
+ display: grid;
218
+ gap: 0.45rem;
219
+ }
220
+
221
+ .pv-filter-content li label {
222
+ display: grid;
223
+ grid-template-columns: auto 1fr auto;
224
+ gap: 0.6rem;
225
+ align-items: center;
226
+ padding: 0.45rem 0.5rem;
227
+ border-radius: 0.55rem;
228
+ border: 1px solid transparent;
229
+ cursor: pointer;
230
+ transition: background 160ms ease, border-color 160ms ease;
231
+ }
232
+
233
+ .pv-filter-content li label:hover {
234
+ background: var(--cratis-surface-hover);
235
+ }
236
+
237
+ .pv-filter-content input[type='checkbox'],
238
+ .pv-filter-content input[type='radio'] {
239
+ accent-color: var(--cratis-primary-color);
240
+ }
241
+
242
+ .pv-filter-content li label span {
243
+ font-size: 0.85rem;
244
+ }
245
+
246
+ .pv-filter-clear {
247
+ margin-top: 0.75rem;
248
+ appearance: none;
249
+ border: none;
250
+ border-radius: 0.55rem;
251
+ padding: 0.4rem 0.75rem;
252
+ background: var(--cratis-highlight-bg);
253
+ color: var(--cratis-text-color);
254
+ font-size: 0.72rem;
255
+ text-transform: uppercase;
256
+ letter-spacing: 0.08em;
257
+ cursor: pointer;
258
+ }
259
+
260
+ .pv-option-count {
261
+ font-feature-settings: "tnum";
262
+ font-variant-numeric: tabular-nums;
263
+ color: var(--cratis-text-color-secondary);
264
+ font-size: 0.75rem;
265
+ }
266
+
267
+ /* Filter Dropdown (anchor-positioned panel) */
268
+ .pv-filter-dropdown {
269
+ position: fixed;
270
+ width: min(320px, calc(100vw - 2rem));
271
+ max-height: calc(100vh - 8rem);
272
+ background: linear-gradient(180deg, var(--cratis-surface-card), var(--cratis-surface-ground));
273
+ border: 1px solid var(--cratis-surface-border);
274
+ border-radius: 0.85rem;
275
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.4);
276
+ backdrop-filter: blur(16px);
277
+ overflow: hidden;
278
+ z-index: 1000;
279
+ display: flex;
280
+ flex-direction: column;
281
+ will-change: opacity, transform;
282
+ contain: layout;
283
+ }
284
+
285
+ .pv-filter-dropdown-content {
286
+ padding: 1rem;
287
+ overflow-y: auto;
288
+ flex: 1;
289
+ }
290
+
291
+ /* Range Histogram Filter */
292
+ .pv-range-histogram {
293
+ padding: 0.5rem 0;
294
+ }
295
+
296
+ .pv-histogram-bars {
297
+ display: flex;
298
+ align-items: flex-end;
299
+ gap: 2px;
300
+ height: 80px;
301
+ padding: 0 2px;
302
+ margin-bottom: 0.5rem;
303
+ }
304
+
305
+ .pv-histogram-bar {
306
+ flex: 1;
307
+ min-width: 8px;
308
+ background: var(--cratis-highlight-bg);
309
+ border: none;
310
+ border-radius: 2px 2px 0 0;
311
+ cursor: pointer;
312
+ transition: background 160ms ease, transform 120ms ease;
313
+ padding: 0;
314
+ }
315
+
316
+ .pv-histogram-bar:hover {
317
+ background: var(--cratis-surface-hover);
318
+ transform: scaleY(1.02);
319
+ }
320
+
321
+ .pv-histogram-bar.in-range {
322
+ background: var(--cratis-primary-color);
323
+ }
324
+
325
+ .pv-histogram-bar.partial {
326
+ background: var(--cratis-highlight-bg);
327
+ }
328
+
329
+ .pv-range-slider {
330
+ position: relative;
331
+ height: 24px;
332
+ margin: 0.5rem 0;
333
+ }
334
+
335
+ .pv-range-track {
336
+ position: absolute;
337
+ top: 50%;
338
+ left: 0;
339
+ right: 0;
340
+ height: 4px;
341
+ background: var(--cratis-surface-border);
342
+ border-radius: 2px;
343
+ transform: translateY(-50%);
344
+ }
345
+
346
+ .pv-range-selection {
347
+ position: absolute;
348
+ top: 50%;
349
+ height: 4px;
350
+ background: var(--cratis-primary-color);
351
+ border-radius: 2px;
352
+ transform: translateY(-50%);
353
+ cursor: grab;
354
+ }
355
+
356
+ .pv-range-selection:active {
357
+ cursor: grabbing;
358
+ }
359
+
360
+ .pv-range-handle {
361
+ position: absolute;
362
+ top: 50%;
363
+ width: 16px;
364
+ height: 16px;
365
+ background: var(--cratis-primary-color);
366
+ border: 2px solid var(--cratis-text-color);
367
+ border-radius: 50%;
368
+ transform: translate(-50%, -50%);
369
+ cursor: ew-resize;
370
+ transition: transform 120ms ease, box-shadow 120ms ease;
371
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
372
+ }
373
+
374
+ .pv-range-handle:hover {
375
+ transform: translate(-50%, -50%) scale(1.15);
376
+ box-shadow: 0 4px 12px var(--cratis-primary-color);
377
+ }
378
+
379
+ .pv-range-labels {
380
+ display: flex;
381
+ justify-content: space-between;
382
+ font-size: 0.75rem;
383
+ color: var(--cratis-text-color-secondary);
384
+ font-variant-numeric: tabular-nums;
385
+ }
386
+
387
+ .pv-range-clear {
388
+ margin-top: 0.75rem;
389
+ appearance: none;
390
+ border: none;
391
+ border-radius: 0.55rem;
392
+ padding: 0.4rem 0.75rem;
393
+ background: var(--cratis-highlight-bg);
394
+ color: var(--cratis-text-color);
395
+ font-size: 0.72rem;
396
+ text-transform: uppercase;
397
+ letter-spacing: 0.08em;
398
+ cursor: pointer;
399
+ width: 100%;
400
+ }
401
+
402
+ .pv-range-clear:hover {
403
+ background: var(--cratis-surface-hover);
404
+ }
405
+
406
+ @media (max-width: 900px) {
407
+ .pv-filter-panel {
408
+ width: calc(100% - 2.5rem);
409
+ left: 1.25rem;
410
+ right: 1.25rem;
411
+ }
412
+ }
@@ -0,0 +1,91 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var reactDom = require('react-dom');
6
+ var framerMotion = require('framer-motion');
7
+ var FilterEditor = require('./FilterEditor.js');
8
+ var RangeHistogramFilter = require('./RangeHistogramFilter.js');
9
+ require('./FilterPanel.css');
10
+
11
+ /** Build a map of filterKey → render function from any <FilterEditor> children. */
12
+ function buildEditorMap(children) {
13
+ const map = {};
14
+ React.Children.forEach(children, (child) => {
15
+ if (React.isValidElement(child) && child.type === FilterEditor.FilterEditor) {
16
+ const { filterKey, children: renderFn } = child.props;
17
+ if (filterKey && typeof renderFn === 'function') {
18
+ map[filterKey] = renderFn;
19
+ }
20
+ }
21
+ });
22
+ return map;
23
+ }
24
+ function renderOptionCount(count) {
25
+ return typeof count === 'number' ? count : '';
26
+ }
27
+ function FilterPanel({ isOpen, filters, filterValues, rangeValues, customValues, search, searchPlaceholder = 'Search…', expandedFilterKey, anchorRef, onClose, onSearchChange, onFilterToggle, onFilterClear, onRangeChange, onExpandedFilterChange, onCustomValueChange, children, }) {
28
+ const panelRef = React.useRef(null);
29
+ const [position, setPosition] = React.useState({ top: 0, left: 0 });
30
+ const editorMap = buildEditorMap(children);
31
+ // Calculate position when opening
32
+ React.useEffect(() => {
33
+ if (isOpen && anchorRef.current) {
34
+ const rect = anchorRef.current.getBoundingClientRect();
35
+ setPosition({
36
+ top: rect.bottom + 8,
37
+ left: rect.left,
38
+ });
39
+ }
40
+ }, [isOpen, anchorRef]);
41
+ // Handle click outside to close
42
+ React.useEffect(() => {
43
+ if (!isOpen)
44
+ return;
45
+ const handleClickOutside = (event) => {
46
+ const target = event.target;
47
+ const panel = panelRef.current;
48
+ const anchor = anchorRef.current;
49
+ if (panel && !panel.contains(target) && anchor && !anchor.contains(target)) {
50
+ onClose();
51
+ }
52
+ };
53
+ // Use capture phase to ensure we catch the event before any other handlers.
54
+ // Use timeout to avoid closing immediately when clicking the button to open.
55
+ const timeoutId = setTimeout(() => {
56
+ document.addEventListener('mousedown', handleClickOutside, true);
57
+ }, 0);
58
+ return () => {
59
+ clearTimeout(timeoutId);
60
+ document.removeEventListener('mousedown', handleClickOutside, true);
61
+ };
62
+ }, [isOpen, anchorRef, onClose]);
63
+ return reactDom.createPortal(jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, children: isOpen && (jsxRuntime.jsx(framerMotion.motion.aside, { ref: panelRef, className: "pv-filter-dropdown", style: {
64
+ position: 'fixed',
65
+ left: position.left,
66
+ top: position.top,
67
+ }, initial: { opacity: 0, y: -8 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -8 }, transition: { duration: 0.15 }, children: jsxRuntime.jsxs("div", { className: "pv-filter-dropdown-content", children: [onSearchChange && (jsxRuntime.jsx("div", { className: "pv-search", children: jsxRuntime.jsx("input", { type: "search", placeholder: searchPlaceholder, value: search ?? '', onChange: (event) => onSearchChange(event.target.value) }) })), jsxRuntime.jsx("div", { className: "pv-filter-groups", children: filters.map((filter) => {
68
+ const selections = filterValues[filter.key] ?? new Set();
69
+ const rangeSelection = rangeValues[filter.key];
70
+ const customValue = customValues?.[filter.key];
71
+ const isExpanded = expandedFilterKey === filter.key;
72
+ const isDate = filter.type === 'date';
73
+ const isNumeric = filter.type === 'number' || isDate;
74
+ const editorRender = editorMap[filter.key];
75
+ const isCustom = filter.type === 'custom' || editorRender !== undefined;
76
+ const formatRangeValue = isDate
77
+ ? (value) => new Date(value).toLocaleString()
78
+ : undefined;
79
+ return (jsxRuntime.jsxs("div", { className: `pv-filter ${isExpanded ? 'expanded' : ''}`, children: [jsxRuntime.jsxs("button", { type: "button", className: "pv-filter-trigger", onClick: () => onExpandedFilterChange(isExpanded ? null : filter.key), children: [jsxRuntime.jsx("span", { className: "pv-filter-label", children: filter.label }), jsxRuntime.jsxs("span", { className: "pv-filter-trigger-meta", children: [!isNumeric && !isCustom && selections.size > 0 && (jsxRuntime.jsx("span", { className: "pv-filter-count", children: selections.size })), isNumeric && rangeSelection && (jsxRuntime.jsx("span", { className: "pv-filter-count", children: "Range" })), isCustom && customValue !== undefined && customValue !== null && (jsxRuntime.jsx("span", { className: "pv-filter-count", children: "\u2022" })), jsxRuntime.jsx("span", { className: "pv-filter-chevron" })] })] }), jsxRuntime.jsx("div", { className: `pv-filter-content ${isExpanded ? 'expanded' : ''}`, children: isCustom && editorRender ? (editorRender({
80
+ value: customValue,
81
+ onChange: (value) => onCustomValueChange?.(filter.key, value),
82
+ })) : isNumeric && filter.numericRange ? (jsxRuntime.jsx(RangeHistogramFilter.RangeHistogramFilter, { values: filter.numericRange.values, min: filter.numericRange.min, max: filter.numericRange.max, buckets: filter.buckets ?? 20, selectedRange: rangeSelection ?? null, onChange: (range) => onRangeChange(filter.key, range), formatValue: formatRangeValue })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("ul", { children: (filter.options ?? []).map((option) => {
83
+ const optionKey = option.key;
84
+ const checked = selections.has(optionKey);
85
+ return (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { type: filter.multi ? 'checkbox' : 'radio', name: `filter-${filter.key}`, checked: checked, onChange: () => onFilterToggle(filter.key, optionKey, filter.multi ?? false) }), jsxRuntime.jsx("span", { children: option.label }), jsxRuntime.jsx("span", { className: "pv-option-count", children: renderOptionCount(option.count) })] }) }, option.key));
86
+ }) }), selections.size > 0 && (jsxRuntime.jsx("button", { type: "button", className: "pv-filter-clear", onClick: () => onFilterClear(filter.key), children: "Clear" }))] })) })] }, filter.key));
87
+ }) })] }) })) }), document.body);
88
+ }
89
+
90
+ exports.FilterPanel = FilterPanel;
91
+ //# sourceMappingURL=FilterPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterPanel.js","sources":["../../../Filter/FilterPanel.tsx"],"sourcesContent":[null],"names":["Children","isValidElement","FilterEditor","useRef","useState","useEffect","createPortal","_jsx","AnimatePresence","motion","_jsxs","RangeHistogramFilter","_Fragment"],"mappings":";;;;;;;;;;AAiEA;AACA,SAAS,cAAc,CACrB,QAA+B,EAAA;IAE/B,MAAM,GAAG,GAA4D,EAAE;IACvEA,cAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;QACnC,IAAIC,oBAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAKC,yBAAY,EAAE;YACxD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,KAG/C;AACD,YAAA,IAAI,SAAS,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAC/C,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,QAAQ;YAC3B;QACF;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,iBAAiB,CAAC,KAAyB,EAAA;AAClD,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,EAAE;AAC/C;SAEgB,WAAW,CAAC,EAC1B,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,MAAM,EACN,iBAAiB,GAAG,SAAS,EAC7B,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,GACS,EAAA;AACjB,IAAA,MAAM,QAAQ,GAAGC,YAAM,CAAiB,IAAI,CAAC;AAC7C,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGC,cAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAE7D,IAAA,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC;;IAG1CC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE;YAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACtD,YAAA,WAAW,CAAC;AACV,gBAAA,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;;IAGvBA,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;AAC/C,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;AACnC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;YAEhC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1E,gBAAA,OAAO,EAAE;YACX;AACF,QAAA,CAAC;;;AAID,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAK;YAChC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC;QAClE,CAAC,EAAE,CAAC,CAAC;AAEL,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,SAAS,CAAC;YACvB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC;AACrE,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEhC,OAAOC,qBAAY,CACjBC,cAAA,CAACC,4BAAe,EAAA,EAAC,OAAO,EAAE,KAAK,EAAA,QAAA,EAC5B,MAAM,KACLD,cAAA,CAACE,mBAAM,CAAC,KAAK,EAAA,EACX,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;aAClB,EACD,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAC9B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAC3B,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAE9BC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CACxC,cAAc,KACbH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,YACxBA,cAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,WAAW,EAAE,iBAAiB,EAC9B,KAAK,EAAE,MAAM,IAAI,EAAE,EACnB,QAAQ,EAAE,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA,CACvD,EAAA,CACE,CACP,EACDA,wBAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACtB,4BAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAU;4BAChE,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;4BAC9C,MAAM,WAAW,GAAG,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC;AAC9C,4BAAA,MAAM,UAAU,GAAG,iBAAiB,KAAK,MAAM,CAAC,GAAG;AACnD,4BAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM;4BACrC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM;4BACpD,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;4BAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,KAAK,SAAS;4BACvE,MAAM,gBAAgB,GAAG;AACvB,kCAAE,CAAC,KAAa,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc;kCACjD,SAAS;AAEb,4BAAA,QACEG,eAAA,CAAA,KAAA,EAAA,EAAsB,SAAS,EAAE,aAAa,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAAA,CAC1EA,eAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,EAC7B,OAAO,EAAE,MAAM,sBAAsB,CAAC,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,CAErEH,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAE,MAAM,CAAC,KAAK,EAAA,CAAQ,EACvDG,eAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,wBAAwB,aACrC,CAAC,SAAS,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,KAC7CH,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAE,UAAU,CAAC,IAAI,EAAA,CAAQ,CAC3D,EACA,SAAS,IAAI,cAAc,KAC1BA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,OAAA,EAAA,CAAa,CAC/C,EACA,QAAQ,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,KAC5DA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,CAC3C,EACDA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,mBAAmB,EAAA,CAAG,CAAA,EAAA,CACjC,IACA,EACTA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,qBAAqB,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAChE,QAAQ,IAAI,YAAY,IACvB,YAAY,CAAC;AACX,4CAAA,KAAK,EAAE,WAAW;AAClB,4CAAA,QAAQ,EAAE,CAAC,KAAK,KAAK,mBAAmB,GAAG,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;yCAC9D,CAAC,IACA,SAAS,IAAI,MAAM,CAAC,YAAY,IAClCA,eAACI,yCAAoB,EAAA,EACnB,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,EAClC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,EAC5B,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,EAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAC7B,aAAa,EAAE,cAAc,IAAI,IAAI,EACrC,QAAQ,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,EACrD,WAAW,EAAE,gBAAgB,EAAA,CAC7B,KAEFD,eAAA,CAAAE,mBAAA,EAAA,EAAA,QAAA,EAAA,CACEL,iCACG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,KAAI;AACrC,wDAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG;wDAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,wDAAA,QACEA,cAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EACEG,eAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CACEH,cAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,UAAU,GAAG,OAAO,EACzC,IAAI,EAAE,UAAU,MAAM,CAAC,GAAG,CAAA,CAAE,EAC5B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MACR,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EAAA,CAE9D,EACFA,cAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,MAAM,CAAC,KAAK,GAAQ,EAC3BA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA,CAAQ,CAAA,EAAA,CACpE,IAZD,MAAM,CAAC,GAAG,CAad;AAET,oDAAA,CAAC,CAAC,EAAA,CACC,EACJ,UAAU,CAAC,IAAI,GAAG,CAAC,KAClBA,cAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAE,MAAM,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,OAAA,EAAA,CAGjC,CACV,CAAA,EAAA,CACA,CACJ,GACG,CAAA,EAAA,EAvEE,MAAM,CAAC,GAAG,CAwEd;wBAEV,CAAC,CAAC,EAAA,CACE,CAAA,EAAA,CACF,EAAA,CACO,CAChB,EAAA,CACe,EAClB,QAAQ,CAAC,IAAI,CACd;AACH;;;;"}
@@ -3,7 +3,12 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
 
6
- function RangeHistogramFilter({ values, min, max, buckets = 20, selectedRange, onChange, }) {
6
+ const defaultFormatValue = (value) => {
7
+ if (Number.isInteger(value))
8
+ return value.toString();
9
+ return value.toFixed(1);
10
+ };
11
+ function RangeHistogramFilter({ values, min, max, buckets = 20, selectedRange, onChange, formatValue = defaultFormatValue, }) {
7
12
  const containerRef = React.useRef(null);
8
13
  const [isDragging, setIsDragging] = React.useState(null);
9
14
  const [dragStart, setDragStart] = React.useState(null);
@@ -104,11 +109,6 @@ function RangeHistogramFilter({ values, min, max, buckets = 20, selectedRange, o
104
109
  };
105
110
  const leftPos = getPositionFromValue(currentRange[0]);
106
111
  const rightPos = getPositionFromValue(currentRange[1]);
107
- const formatValue = (value) => {
108
- if (Number.isInteger(value))
109
- return value.toString();
110
- return value.toFixed(1);
111
- };
112
112
  return (jsxRuntime.jsxs("div", { className: "pv-range-histogram", ref: containerRef, children: [jsxRuntime.jsx("div", { className: "pv-histogram-bars", children: histogram.map((bucket, i) => {
113
113
  const heightPercent = (bucket.count / bucket.maxCount) * 100;
114
114
  const isInRange = bucket.start >= currentRange[0] && bucket.end <= currentRange[1];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeHistogramFilter.js","sources":["../../../Filter/RangeHistogramFilter.tsx"],"sourcesContent":[null],"names":["useRef","useState","useMemo","useCallback","useEffect","_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var FilterPanel = require('./FilterPanel.js');
4
+ var FilterEditor = require('./FilterEditor.js');
5
+ var RangeHistogramFilter = require('./RangeHistogramFilter.js');
6
+ var useFilterState = require('./useFilterState.js');
7
+ var utils = require('./utils.js');
8
+
9
+ // Copyright (c) Cratis. All rights reserved.
10
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
11
+
12
+ exports.FilterPanel = FilterPanel.FilterPanel;
13
+ exports.FilterEditor = FilterEditor.FilterEditor;
14
+ exports.RangeHistogramFilter = RangeHistogramFilter.RangeHistogramFilter;
15
+ exports.useFilterState = useFilterState.useFilterState;
16
+ exports.buildFilterValues = utils.buildFilterValues;
17
+ exports.buildRangeValues = utils.buildRangeValues;
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../Filter/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAAA;AACA;;;;;;;;;"}