photon-grid-core 0.0.3 → 1.0.0

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 (68) hide show
  1. package/README.md +304 -304
  2. package/chart/chart-config/chart-controls.d.ts +49 -0
  3. package/chart/chart-config/chart-controls.d.ts.map +1 -0
  4. package/chart/chart-config/chart-controls.js +229 -0
  5. package/chart/chart-config/chart-controls.js.map +1 -0
  6. package/chart/chart-config/chart-tool-panel.d.ts +86 -0
  7. package/chart/chart-config/chart-tool-panel.d.ts.map +1 -0
  8. package/chart/chart-config/chart-tool-panel.js +402 -0
  9. package/chart/chart-config/chart-tool-panel.js.map +1 -0
  10. package/chart/chart-panel.d.ts +97 -0
  11. package/chart/chart-panel.d.ts.map +1 -1
  12. package/chart/chart-panel.js +211 -58
  13. package/chart/chart-panel.js.map +1 -1
  14. package/chart/chart-renderer.d.ts +97 -0
  15. package/chart/chart-renderer.d.ts.map +1 -1
  16. package/chart/chart-renderer.js +335 -72
  17. package/chart/chart-renderer.js.map +1 -1
  18. package/chart/chart-theme.d.ts +38 -0
  19. package/chart/chart-theme.d.ts.map +1 -0
  20. package/chart/chart-theme.js +47 -0
  21. package/chart/chart-theme.js.map +1 -0
  22. package/chart/model/chart-model-mapper.d.ts +38 -0
  23. package/chart/model/chart-model-mapper.d.ts.map +1 -0
  24. package/chart/model/chart-model-mapper.js +128 -0
  25. package/chart/model/chart-model-mapper.js.map +1 -0
  26. package/chart/model/chart-model.d.ts +153 -0
  27. package/chart/model/chart-model.d.ts.map +1 -0
  28. package/chart/model/chart-model.js +79 -0
  29. package/chart/model/chart-model.js.map +1 -0
  30. package/chart/range-chart-controller.d.ts +68 -0
  31. package/chart/range-chart-controller.d.ts.map +1 -0
  32. package/chart/range-chart-controller.js +209 -0
  33. package/chart/range-chart-controller.js.map +1 -0
  34. package/chart/range-chart-service.d.ts +78 -0
  35. package/chart/range-chart-service.d.ts.map +1 -0
  36. package/chart/range-chart-service.js +162 -0
  37. package/chart/range-chart-service.js.map +1 -0
  38. package/core/grid-api.d.ts +20 -0
  39. package/core/grid-api.d.ts.map +1 -1
  40. package/core/grid-api.js +41 -0
  41. package/core/grid-api.js.map +1 -1
  42. package/core/grid-context.d.ts +7 -0
  43. package/core/grid-context.d.ts.map +1 -1
  44. package/core/grid-core.d.ts.map +1 -1
  45. package/core/grid-core.js +21 -9
  46. package/core/grid-core.js.map +1 -1
  47. package/package.json +57 -70
  48. package/styles/base/chart-config.css.d.ts +10 -0
  49. package/styles/base/chart-config.css.d.ts.map +1 -0
  50. package/styles/base/chart-config.css.js +126 -0
  51. package/styles/base/chart-config.css.js.map +1 -0
  52. package/styles/base/chart-controls.css.d.ts +7 -0
  53. package/styles/base/chart-controls.css.d.ts.map +1 -0
  54. package/styles/base/chart-controls.css.js +165 -0
  55. package/styles/base/chart-controls.css.js.map +1 -0
  56. package/styles/base/chart-panel.css.d.ts +1 -1
  57. package/styles/base/chart-panel.css.d.ts.map +1 -1
  58. package/styles/base/chart-panel.css.js +12 -4
  59. package/styles/base/chart-panel.css.js.map +1 -1
  60. package/styles/base-styles.d.ts.map +1 -1
  61. package/styles/base-styles.js +4 -0
  62. package/styles/base-styles.js.map +1 -1
  63. package/types/event.types.d.ts +29 -0
  64. package/types/event.types.d.ts.map +1 -1
  65. package/types/event.types.js +1 -0
  66. package/types/event.types.js.map +1 -1
  67. package/types/grid.types.d.ts +51 -0
  68. package/types/grid.types.d.ts.map +1 -1
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Small, theme-token-styled form-control primitives used to build the chart
3
+ * configuration tool panel. Each factory returns a ready-to-mount element and
4
+ * wires a single `onChange` callback. No control writes inline styles — all
5
+ * appearance comes from `chart-controls.css.ts`.
6
+ */
7
+ const ICON_CHEVRON = `<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>`;
8
+ const ICON_DRAG = `<svg width="10" height="16" viewBox="0 0 10 16" fill="currentColor"><circle cx="2.5" cy="3" r="1.4"/><circle cx="7.5" cy="3" r="1.4"/><circle cx="2.5" cy="8" r="1.4"/><circle cx="7.5" cy="8" r="1.4"/><circle cx="2.5" cy="13" r="1.4"/><circle cx="7.5" cy="13" r="1.4"/></svg>`;
9
+ const ICON_X = `<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>`;
10
+ /** Wraps a control in a labelled row. */
11
+ function labelledRow(labelText, control) {
12
+ const row = document.createElement('label');
13
+ row.className = 'pg-chart-ctrl__row';
14
+ const label = document.createElement('span');
15
+ label.className = 'pg-chart-ctrl__label';
16
+ label.textContent = labelText;
17
+ row.appendChild(label);
18
+ row.appendChild(control);
19
+ return row;
20
+ }
21
+ /** A `<select>` dropdown. */
22
+ export function createDropdown(options, value, onChange, label) {
23
+ const select = document.createElement('select');
24
+ select.className = 'pg-chart-ctrl__select';
25
+ for (const opt of options) {
26
+ const o = document.createElement('option');
27
+ o.value = opt.value;
28
+ o.textContent = opt.label;
29
+ if (opt.value === value)
30
+ o.selected = true;
31
+ select.appendChild(o);
32
+ }
33
+ select.addEventListener('change', () => onChange(select.value));
34
+ return label ? labelledRow(label, select) : select;
35
+ }
36
+ /** A switch-style boolean toggle. */
37
+ export function createToggle(checked, onChange, label) {
38
+ const row = document.createElement('div');
39
+ row.className = 'pg-chart-ctrl__row';
40
+ const span = document.createElement('span');
41
+ span.className = 'pg-chart-ctrl__label';
42
+ span.textContent = label;
43
+ const track = document.createElement('button');
44
+ track.type = 'button';
45
+ track.className = 'pg-chart-ctrl__toggle';
46
+ track.setAttribute('role', 'switch');
47
+ track.setAttribute('aria-checked', String(checked));
48
+ track.classList.toggle('pg-chart-ctrl__toggle--on', checked);
49
+ const knob = document.createElement('span');
50
+ knob.className = 'pg-chart-ctrl__toggle-knob';
51
+ track.appendChild(knob);
52
+ track.addEventListener('click', () => {
53
+ const next = !track.classList.contains('pg-chart-ctrl__toggle--on');
54
+ track.classList.toggle('pg-chart-ctrl__toggle--on', next);
55
+ track.setAttribute('aria-checked', String(next));
56
+ onChange(next);
57
+ });
58
+ row.appendChild(span);
59
+ row.appendChild(track);
60
+ return row;
61
+ }
62
+ /** A color swatch backed by a native color input. */
63
+ export function createColorInput(value, onChange, label) {
64
+ const input = document.createElement('input');
65
+ input.type = 'color';
66
+ input.className = 'pg-chart-ctrl__color';
67
+ if (value)
68
+ input.value = value;
69
+ input.addEventListener('input', () => onChange(input.value));
70
+ return labelledRow(label, input);
71
+ }
72
+ /** A numeric input with optional bounds and step. */
73
+ export function createNumberInput(value, onChange, label, min, max, step) {
74
+ const input = document.createElement('input');
75
+ input.type = 'number';
76
+ input.className = 'pg-chart-ctrl__input';
77
+ input.value = String(value);
78
+ if (min !== undefined)
79
+ input.min = String(min);
80
+ if (max !== undefined)
81
+ input.max = String(max);
82
+ if (step !== undefined)
83
+ input.step = String(step);
84
+ input.addEventListener('input', () => {
85
+ const n = Number(input.value);
86
+ if (!Number.isNaN(n))
87
+ onChange(n);
88
+ });
89
+ return labelledRow(label, input);
90
+ }
91
+ /** A single-line text input. */
92
+ export function createTextInput(value, onChange, label, placeholder = '') {
93
+ const input = document.createElement('input');
94
+ input.type = 'text';
95
+ input.className = 'pg-chart-ctrl__input';
96
+ input.value = value;
97
+ input.placeholder = placeholder;
98
+ input.addEventListener('input', () => onChange(input.value));
99
+ return labelledRow(label, input);
100
+ }
101
+ /** A segmented button group (single selection). */
102
+ export function createSegmented(options, value, onChange, label) {
103
+ const group = document.createElement('div');
104
+ group.className = 'pg-chart-ctrl__segmented';
105
+ for (const opt of options) {
106
+ const btn = document.createElement('button');
107
+ btn.type = 'button';
108
+ btn.className = 'pg-chart-ctrl__segment';
109
+ btn.textContent = opt.label;
110
+ btn.classList.toggle('pg-chart-ctrl__segment--active', opt.value === value);
111
+ btn.addEventListener('click', () => {
112
+ for (const child of Array.from(group.children)) {
113
+ child.classList.remove('pg-chart-ctrl__segment--active');
114
+ }
115
+ btn.classList.add('pg-chart-ctrl__segment--active');
116
+ onChange(opt.value);
117
+ });
118
+ group.appendChild(btn);
119
+ }
120
+ return label ? labelledRow(label, group) : group;
121
+ }
122
+ /**
123
+ * A collapsible section with a header toggle. Returns the outer `section` and
124
+ * the `body` element callers append content to.
125
+ */
126
+ export function createCollapsibleSection(title, expanded = false) {
127
+ const section = document.createElement('div');
128
+ section.className = 'pg-chart-ctrl__section';
129
+ const header = document.createElement('button');
130
+ header.type = 'button';
131
+ header.className = 'pg-chart-ctrl__section-header';
132
+ const chevron = document.createElement('span');
133
+ chevron.className = 'pg-chart-ctrl__section-chevron';
134
+ chevron.innerHTML = ICON_CHEVRON;
135
+ const titleEl = document.createElement('span');
136
+ titleEl.textContent = title;
137
+ header.appendChild(chevron);
138
+ header.appendChild(titleEl);
139
+ const body = document.createElement('div');
140
+ body.className = 'pg-chart-ctrl__section-body';
141
+ section.classList.toggle('pg-chart-ctrl__section--open', expanded);
142
+ header.addEventListener('click', () => {
143
+ section.classList.toggle('pg-chart-ctrl__section--open');
144
+ });
145
+ section.appendChild(header);
146
+ section.appendChild(body);
147
+ return { section, body };
148
+ }
149
+ /**
150
+ * A drag-to-reorder list with per-item remove buttons. Reordering uses a pointer
151
+ * drag (mousedown/move/up), not HTML5 DnD, to match the chart panel's own drag
152
+ * handling and avoid ghost-image quirks.
153
+ *
154
+ * @param items - Items in current order.
155
+ * @param onReorder - Called with the new id order after a drag.
156
+ * @param onRemove - Called with an item id when its remove button is clicked.
157
+ */
158
+ export function createReorderableList(items, onReorder, onRemove) {
159
+ const list = document.createElement('div');
160
+ list.className = 'pg-chart-ctrl__list';
161
+ const order = items.map((it) => it.id);
162
+ items.forEach((item) => {
163
+ const row = document.createElement('div');
164
+ row.className = 'pg-chart-ctrl__list-item';
165
+ row.dataset['id'] = item.id;
166
+ const handle = document.createElement('span');
167
+ handle.className = 'pg-chart-ctrl__list-handle';
168
+ handle.innerHTML = ICON_DRAG;
169
+ if (item.color) {
170
+ const swatch = document.createElement('span');
171
+ swatch.className = 'pg-chart-ctrl__list-swatch';
172
+ swatch.style.setProperty('--pg-chart-swatch', item.color);
173
+ row.appendChild(handle);
174
+ row.appendChild(swatch);
175
+ }
176
+ else {
177
+ row.appendChild(handle);
178
+ }
179
+ const label = document.createElement('span');
180
+ label.className = 'pg-chart-ctrl__list-label';
181
+ label.textContent = item.label;
182
+ row.appendChild(label);
183
+ const remove = document.createElement('button');
184
+ remove.type = 'button';
185
+ remove.className = 'pg-chart-ctrl__list-remove';
186
+ remove.innerHTML = ICON_X;
187
+ remove.addEventListener('click', () => onRemove(item.id));
188
+ row.appendChild(remove);
189
+ attachRowDrag(row, list, order, onReorder);
190
+ list.appendChild(row);
191
+ });
192
+ return list;
193
+ }
194
+ /** Wires pointer-based reordering for a single list row. */
195
+ function attachRowDrag(row, list, order, onReorder) {
196
+ const handle = row.querySelector('.pg-chart-ctrl__list-handle');
197
+ if (!handle)
198
+ return;
199
+ handle.addEventListener('mousedown', (e) => {
200
+ e.preventDefault();
201
+ row.classList.add('pg-chart-ctrl__list-item--dragging');
202
+ const onMove = (mv) => {
203
+ const rows = Array.from(list.querySelectorAll('.pg-chart-ctrl__list-item'));
204
+ const after = rows.find((r) => {
205
+ if (r === row)
206
+ return false;
207
+ const box = r.getBoundingClientRect();
208
+ return mv.clientY < box.top + box.height / 2;
209
+ });
210
+ if (after)
211
+ list.insertBefore(row, after);
212
+ else
213
+ list.appendChild(row);
214
+ };
215
+ const onUp = () => {
216
+ row.classList.remove('pg-chart-ctrl__list-item--dragging');
217
+ document.removeEventListener('mousemove', onMove);
218
+ document.removeEventListener('mouseup', onUp);
219
+ const newOrder = Array.from(list.querySelectorAll('.pg-chart-ctrl__list-item'))
220
+ .map((r) => r.dataset['id'] ?? '')
221
+ .filter((id) => id.length > 0);
222
+ order.splice(0, order.length, ...newOrder);
223
+ onReorder(newOrder);
224
+ };
225
+ document.addEventListener('mousemove', onMove);
226
+ document.addEventListener('mouseup', onUp);
227
+ });
228
+ }
229
+ //# sourceMappingURL=chart-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-controls.js","sourceRoot":"","sources":["../../../src/chart/chart-config/chart-controls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { ChartModel, ChartModelPatch } from '../model/chart-model';
2
+ import type { ChartToolPanelName } from '../../types/grid.types';
3
+ /** A column offered to the Set Up tab for category / series roles. */
4
+ export interface ChartColumnOption {
5
+ readonly colId: string;
6
+ readonly header: string;
7
+ readonly isMeasure: boolean;
8
+ readonly isDimension: boolean;
9
+ }
10
+ /**
11
+ * Controller behind a {@link ChartToolPanel}. Supplies the current model and the
12
+ * available columns, and applies model patches produced by the controls.
13
+ */
14
+ export interface ChartToolPanelHost {
15
+ getModel(): ChartModel;
16
+ updateModel(patch: ChartModelPatch): void;
17
+ getColumnOptions(): ChartColumnOption[];
18
+ getPanels(): ChartToolPanelName[];
19
+ getDefaultPanel(): ChartToolPanelName;
20
+ }
21
+ /**
22
+ * The docked chart configuration panel. Renders the Chart / Set Up / Customize
23
+ * tabs from the current {@link ChartModel} and forwards every edit back to the
24
+ * host as a model patch. Purely presentational — it holds no chart state.
25
+ */
26
+ export declare class ChartToolPanel {
27
+ private readonly containerEl;
28
+ private readonly host;
29
+ /** Notified with the drawer's width on open and 0 on close, so the host can
30
+ * reflow the chart beside the drawer instead of behind it. */
31
+ private readonly onReserveChange?;
32
+ private rootEl;
33
+ private tabsEl;
34
+ private bodyEl;
35
+ private activeTab;
36
+ /** Live renderers backing the Chart-tab preview thumbnails; disposed on rebuild. */
37
+ private thumbRenderers;
38
+ /** Pending slide-in RAF handle, so an immediate destroy can cancel it. */
39
+ private openRaf;
40
+ /** Pending slide-out timer, cleared if the panel is reopened or destroyed. */
41
+ private closeTimer;
42
+ constructor(containerEl: HTMLElement, host: ChartToolPanelHost,
43
+ /** Notified with the drawer's width on open and 0 on close, so the host can
44
+ * reflow the chart beside the drawer instead of behind it. */
45
+ onReserveChange?: ((px: number) => void) | undefined);
46
+ /** Whether the panel is currently mounted. */
47
+ isOpen(): boolean;
48
+ /** Mounts the drawer (optionally on a specific tab), rendering and sliding it in. */
49
+ open(tab?: ChartToolPanelName): void;
50
+ /**
51
+ * Slides the drawer out (left → right) and unmounts it once the transition
52
+ * ends. The instance is retained so a later {@link open} rebuilds cleanly.
53
+ */
54
+ close(): void;
55
+ /** Immediately unmounts and disposes the drawer with no exit animation. */
56
+ destroy(): void;
57
+ /** Removes the DOM and releases the preview renderers. */
58
+ private teardown;
59
+ /** Adds the open modifier on the next frame so the slide-in transition runs. */
60
+ private slideIn;
61
+ /** Rebuilds the tab strip and active tab body from the current model. */
62
+ render(): void;
63
+ private build;
64
+ private renderTabs;
65
+ private renderBody;
66
+ private renderChartTab;
67
+ /**
68
+ * Builds one gallery cell: a real, full-bleed mini-chart of {@link PREVIEW_DATA}
69
+ * rendered in the entry's type. Clicking applies the type to the model, which
70
+ * updates the live chart in real time. The canvas is queued in `pending` for
71
+ * rendering after DOM insertion (so it has a measured size and theme tokens).
72
+ */
73
+ private buildGalleryItem;
74
+ /**
75
+ * Draws a static, full-bleed preview of a chart type into a thumbnail canvas.
76
+ * The backing store is sized to the canvas's measured display size × DPR for a
77
+ * crisp, undistorted image; `compact` collapses the axis gutters so the chart
78
+ * fills the cell edge-to-edge.
79
+ */
80
+ private renderThumbnail;
81
+ /** Disposes every preview renderer created for the Chart tab. */
82
+ private disposeThumbnails;
83
+ private renderSetupTab;
84
+ private renderCustomizeTab;
85
+ }
86
+ //# sourceMappingURL=chart-tool-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-tool-panel.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-config/chart-tool-panel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC;AACnG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAejE,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,IAAI,UAAU,CAAC;IACvB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC1C,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;IACxC,SAAS,IAAI,kBAAkB,EAAE,CAAC;IAClC,eAAe,IAAI,kBAAkB,CAAC;CACvC;AAqGD;;;;GAIG;AACH,qBAAa,cAAc;IAavB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB;kEAC8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAhBnC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAqB;IACtC,oFAAoF;IACpF,OAAO,CAAC,cAAc,CAAuB;IAC7C,0EAA0E;IAC1E,OAAO,CAAC,OAAO,CAAuB;IACtC,8EAA8E;IAC9E,OAAO,CAAC,UAAU,CAAuB;gBAGtB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,kBAAkB;IACzC;kEAC8D;IAC7C,eAAe,CAAC,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,aAAA;IAKzD,8CAA8C;IAC9C,MAAM,IAAI,OAAO;IAIjB,qFAAqF;IACrF,IAAI,CAAC,GAAG,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAcpC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAeb,2EAA2E;IAC3E,OAAO,IAAI,IAAI;IAaf,0DAA0D;IAC1D,OAAO,CAAC,QAAQ;IAQhB,gFAAgF;IAChF,OAAO,CAAC,OAAO;IAUf,yEAAyE;IACzE,MAAM,IAAI,IAAI;IAMd,OAAO,CAAC,KAAK;IA6Bb,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,cAAc;IAuBtB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAkBvB,iEAAiE;IACjE,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,cAAc;IAyEtB,OAAO,CAAC,kBAAkB;CAgE3B"}