@sentropic/design-system-vue 0.12.0 → 0.14.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 (58) hide show
  1. package/dist/BoxPlotChart.d.ts +68 -0
  2. package/dist/BoxPlotChart.d.ts.map +1 -0
  3. package/dist/BoxPlotChart.js +226 -0
  4. package/dist/BoxPlotChart.js.map +1 -0
  5. package/dist/Calendar.d.ts.map +1 -1
  6. package/dist/Calendar.js +235 -74
  7. package/dist/Calendar.js.map +1 -1
  8. package/dist/HeatmapChart.d.ts +74 -0
  9. package/dist/HeatmapChart.d.ts.map +1 -0
  10. package/dist/HeatmapChart.js +168 -0
  11. package/dist/HeatmapChart.js.map +1 -0
  12. package/dist/HistogramChart.d.ts +74 -0
  13. package/dist/HistogramChart.d.ts.map +1 -0
  14. package/dist/HistogramChart.js +162 -0
  15. package/dist/HistogramChart.js.map +1 -0
  16. package/dist/Popper.d.ts +58 -0
  17. package/dist/Popper.d.ts.map +1 -1
  18. package/dist/Popper.js +136 -5
  19. package/dist/Popper.js.map +1 -1
  20. package/dist/RadarChart.d.ts +102 -0
  21. package/dist/RadarChart.d.ts.map +1 -0
  22. package/dist/RadarChart.js +151 -0
  23. package/dist/RadarChart.js.map +1 -0
  24. package/dist/Rating.d.ts.map +1 -1
  25. package/dist/Rating.js +111 -18
  26. package/dist/Rating.js.map +1 -1
  27. package/dist/SankeyChart.d.ts +78 -0
  28. package/dist/SankeyChart.d.ts.map +1 -0
  29. package/dist/SankeyChart.js +202 -0
  30. package/dist/SankeyChart.js.map +1 -0
  31. package/dist/SelectableList.d.ts +2 -0
  32. package/dist/SelectableList.d.ts.map +1 -1
  33. package/dist/SelectableList.js +72 -21
  34. package/dist/SelectableList.js.map +1 -1
  35. package/dist/SelectableRow.d.ts +2 -2
  36. package/dist/SelectableRow.d.ts.map +1 -1
  37. package/dist/SelectableRow.js +15 -5
  38. package/dist/SelectableRow.js.map +1 -1
  39. package/dist/SlideIndicator.d.ts.map +1 -1
  40. package/dist/SlideIndicator.js +12 -5
  41. package/dist/SlideIndicator.js.map +1 -1
  42. package/dist/SunburstChart.d.ts +74 -0
  43. package/dist/SunburstChart.d.ts.map +1 -0
  44. package/dist/SunburstChart.js +202 -0
  45. package/dist/SunburstChart.js.map +1 -0
  46. package/dist/TimePicker.d.ts.map +1 -1
  47. package/dist/TimePicker.js +150 -14
  48. package/dist/TimePicker.js.map +1 -1
  49. package/dist/chartContrast.d.ts +2 -0
  50. package/dist/chartContrast.d.ts.map +1 -0
  51. package/dist/chartContrast.js +7 -0
  52. package/dist/chartContrast.js.map +1 -0
  53. package/dist/index.d.ts +14 -2
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +7 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/styles.css +395 -0
  58. package/package.json +1 -1
package/dist/Rating.js CHANGED
@@ -55,6 +55,8 @@ export const Rating = defineComponent({
55
55
  emits: ["change", "update:modelValue"],
56
56
  setup(props, { emit, attrs }) {
57
57
  const internal = ref(props.value ?? 0);
58
+ // Refs des boutons radio pour déplacer le focus programmatiquement (mode entier).
59
+ const radioRefs = ref({});
58
60
  return () => {
59
61
  const current = props.value ?? internal.value;
60
62
  const max = props.max;
@@ -62,6 +64,7 @@ export const Rating = defineComponent({
62
64
  const stars = Array.from({ length: max }, (_, i) => i + 1);
63
65
  // L'étoile « focusable » (tabindex 0) suit la valeur ; à 0 c'est la première.
64
66
  const focusedStar = current > 0 ? Math.ceil(current) : 1;
67
+ const valueText = `${current} / ${max}`;
65
68
  const fill = (star) => {
66
69
  if (current >= star)
67
70
  return "full";
@@ -96,57 +99,147 @@ export const Rating = defineComponent({
96
99
  }
97
100
  commit(next);
98
101
  };
99
- const onKeyDown = (event) => {
102
+ // Clavier pour le mode entier (radiogroup) : déplace le focus DOM.
103
+ const onRadioKeyDown = (event) => {
100
104
  if (props.readonly)
101
105
  return;
102
- const step = props.allowHalf ? 0.5 : 1;
106
+ const step = 1;
103
107
  let handled = true;
108
+ let next = null;
104
109
  switch (event.key) {
105
110
  case "ArrowRight":
106
111
  case "ArrowUp":
107
- commit(Math.min(max, current + step));
112
+ next = Math.min(max, current + step);
108
113
  break;
109
114
  case "ArrowLeft":
110
115
  case "ArrowDown":
111
- commit(Math.max(0, current - step));
116
+ // Ne pas descendre sous 1 (pas de radio "0").
117
+ next = Math.max(1, current - step);
112
118
  break;
113
119
  case "Home":
114
- commit(0);
120
+ // Home → première étoile (1), pas 0.
121
+ next = 1;
115
122
  break;
116
123
  case "End":
117
- commit(max);
124
+ next = max;
118
125
  break;
119
126
  default:
120
127
  handled = false;
121
128
  }
122
- if (handled)
129
+ if (handled) {
123
130
  event.preventDefault();
131
+ if (next !== null) {
132
+ commit(next);
133
+ const targetStar = next > 0 ? Math.ceil(next) : 1;
134
+ const targetEl = radioRefs.value[targetStar];
135
+ if (targetEl)
136
+ targetEl.focus();
137
+ }
138
+ }
139
+ };
140
+ // Clavier pour le mode slider (allowHalf).
141
+ const onSliderKeyDown = (event) => {
142
+ if (props.readonly)
143
+ return;
144
+ const step = 0.5;
145
+ let handled = true;
146
+ let next = null;
147
+ switch (event.key) {
148
+ case "ArrowRight":
149
+ case "ArrowUp":
150
+ next = Math.min(max, current + step);
151
+ break;
152
+ case "ArrowLeft":
153
+ case "ArrowDown":
154
+ next = Math.max(0, current - step);
155
+ break;
156
+ case "Home":
157
+ next = 0;
158
+ break;
159
+ case "End":
160
+ next = max;
161
+ break;
162
+ default:
163
+ handled = false;
164
+ }
165
+ if (handled) {
166
+ event.preventDefault();
167
+ if (next !== null)
168
+ commit(next);
169
+ }
124
170
  };
171
+ const baseClass = classNames("st-rating", `st-rating--${props.size}`, props.readonly && "st-rating--readonly", props.class);
172
+ // --- Mode readonly : role=img sur le conteneur, pas d'éléments interactifs disabled.
173
+ if (props.readonly) {
174
+ return h("div", {
175
+ ...attrs,
176
+ class: baseClass,
177
+ role: "img",
178
+ "aria-label": props.label ? `${props.label} : ${valueText}` : valueText,
179
+ }, stars.map((star) => {
180
+ const state = fill(star);
181
+ return h("span", {
182
+ key: star,
183
+ class: classNames("st-rating__star", state === "full" && "st-rating__star--full", state === "half" && "st-rating__star--half"),
184
+ "aria-hidden": "true",
185
+ }, [
186
+ state === "half"
187
+ ? StarHalfIcon(iconSize)
188
+ : StarIcon(iconSize, state === "full" ? "currentColor" : "none"),
189
+ ]);
190
+ }));
191
+ }
192
+ // --- Mode allowHalf : slider ARIA (valeurs fractionnaires).
193
+ if (props.allowHalf) {
194
+ return h("div", {
195
+ ...attrs,
196
+ class: baseClass,
197
+ role: "slider",
198
+ "aria-label": props.label,
199
+ "aria-valuemin": 0,
200
+ "aria-valuemax": max,
201
+ "aria-valuenow": current,
202
+ "aria-valuetext": valueText,
203
+ tabindex: 0,
204
+ onKeydown: onSliderKeyDown,
205
+ }, stars.map((star) => {
206
+ const state = fill(star);
207
+ return h("span", {
208
+ key: star,
209
+ class: classNames("st-rating__star", state === "full" && "st-rating__star--full", state === "half" && "st-rating__star--half"),
210
+ "aria-hidden": "true",
211
+ onClick: (event) => onStarClick(event, star),
212
+ }, [
213
+ state === "half"
214
+ ? StarHalfIcon(iconSize)
215
+ : StarIcon(iconSize, state === "full" ? "currentColor" : "none"),
216
+ ]);
217
+ }));
218
+ }
219
+ // --- Mode entier : radiogroup / radio avec roving tabindex.
220
+ // onKeydown est aussi sur le conteneur pour capturer les events qui
221
+ // n'ont pas encore bubblé depuis un radio enfant (tests + edge cases).
125
222
  return h("div", {
126
223
  ...attrs,
127
- class: classNames("st-rating", `st-rating--${props.size}`, props.readonly && "st-rating--readonly", props.class),
224
+ class: baseClass,
128
225
  role: "radiogroup",
129
226
  "aria-label": props.label,
130
- "aria-readonly": props.readonly ? "true" : undefined,
227
+ onKeydown: onRadioKeyDown,
131
228
  }, stars.map((star) => {
132
229
  const state = fill(star);
133
230
  return h("button", {
134
231
  key: star,
232
+ ref: (el) => { radioRefs.value[star] = el; },
135
233
  type: "button",
136
234
  class: classNames("st-rating__star", state === "full" && "st-rating__star--full", state === "half" && "st-rating__star--half"),
137
235
  role: "radio",
138
236
  name: props.name,
139
- "aria-checked": Math.ceil(current) === star ? "true" : "false",
237
+ "aria-checked": current === star ? "true" : "false",
140
238
  "aria-label": `${star} / ${max}`,
141
- tabindex: !props.readonly && star === focusedStar ? 0 : -1,
142
- disabled: props.readonly,
239
+ tabindex: star === focusedStar ? 0 : -1,
143
240
  onClick: (event) => onStarClick(event, star),
144
- onKeydown: onKeyDown,
145
- }, [
146
- state === "half"
147
- ? StarHalfIcon(iconSize)
148
- : StarIcon(iconSize, state === "full" ? "currentColor" : "none"),
149
- ]);
241
+ onKeydown: onRadioKeyDown,
242
+ }, [StarIcon(iconSize, state === "full" ? "currentColor" : "none")]);
150
243
  }));
151
244
  };
152
245
  },
@@ -1 +1 @@
1
- {"version":3,"file":"Rating.js","sourceRoot":"","sources":["../src/Rating.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA0B7C,SAAS,QAAQ,CAAC,IAAY,EAAE,IAA6B;IAC3D,OAAO,CAAC,CACN,KAAK,EACL;QACE,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,WAAW;QACpB,IAAI;QACJ,MAAM,EAAE,cAAc;QACtB,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,OAAO;QACzB,iBAAiB,EAAE,OAAO;QAC1B,aAAa,EAAE,MAAM;KACtB,EACD;QACE,CAAC,CAAC,SAAS,EAAE;YACX,MAAM,EACJ,gGAAgG;SACnG,CAAC;KACH,CACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,CAAC,CACN,KAAK,EACL;QACE,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,cAAc;QACtB,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,OAAO;QACzB,iBAAiB,EAAE,OAAO;QAC1B,aAAa,EAAE,MAAM;KACtB,EACD;QACE,CAAC,CAAC,MAAM,EAAE;YACR,CAAC,EAAE,2DAA2D;YAC9D,IAAI,EAAE,cAAc;SACrB,CAAC;QACF,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,yDAAyD,EAAE,CAAC;KAC5E,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC;IACpC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC3C,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;QACjC,QAAQ,EAAE;YACR,IAAI,EAAE,QAAoD;YAC1D,OAAO,EAAE,SAAS;SACnB;QACD,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3C,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,MAA0B,EAAE,OAAO,EAAE,IAAI,EAAE;QACzD,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5C;IACD,KAAK,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACtC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAEvC,OAAO,GAAG,EAAE;YACV,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;YAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,8EAA8E;YAC9E,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzD,MAAM,IAAI,GAAG,CAAC,IAAY,EAA6B,EAAE;gBACvD,IAAI,OAAO,IAAI,IAAI;oBAAE,OAAO,MAAM,CAAC;gBACnC,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,IAAI,IAAI,GAAG,GAAG;oBAAE,OAAO,MAAM,CAAC;gBAC5D,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;gBAC9B,IAAI,KAAK,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;gBACjD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;gBACxD,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;gBACnC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACxB,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,IAAY,EAAE,EAAE;gBACtD,IAAI,KAAK,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B,CAAC;oBAClD,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC9D,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxC,CAAC;gBACD,uDAAuD;gBACvD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrB,MAAM,CAAC,CAAC,CAAC,CAAC;oBACV,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,CAAC;YACf,CAAC,CAAC;YAEF,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAE,EAAE;gBACzC,IAAI,KAAK,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;oBAClB,KAAK,YAAY,CAAC;oBAClB,KAAK,SAAS;wBACZ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;wBACtC,MAAM;oBACR,KAAK,WAAW,CAAC;oBACjB,KAAK,WAAW;wBACd,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;wBACpC,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,CAAC,CAAC,CAAC,CAAC;wBACV,MAAM;oBACR,KAAK,KAAK;wBACR,MAAM,CAAC,GAAG,CAAC,CAAC;wBACZ,MAAM;oBACR;wBACE,OAAO,GAAG,KAAK,CAAC;gBACpB,CAAC;gBACD,IAAI,OAAO;oBAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACtC,CAAC,CAAC;YAEF,OAAO,CAAC,CACN,KAAK,EACL;gBACE,GAAG,KAAK;gBACR,KAAK,EAAE,UAAU,CACf,WAAW,EACX,cAAc,KAAK,CAAC,IAAI,EAAE,EAC1B,KAAK,CAAC,QAAQ,IAAI,qBAAqB,EACvC,KAAK,CAAC,KAAK,CACZ;gBACD,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,KAAK,CAAC,KAAK;gBACzB,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;aACrD,EACD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,OAAO,CAAC,CACN,QAAQ,EACR;oBACE,GAAG,EAAE,IAAI;oBACT,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,UAAU,CACf,iBAAiB,EACjB,KAAK,KAAK,MAAM,IAAI,uBAAuB,EAC3C,KAAK,KAAK,MAAM,IAAI,uBAAuB,CAC5C;oBACD,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBAC9D,YAAY,EAAE,GAAG,IAAI,MAAM,GAAG,EAAE;oBAChC,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;oBACxD,SAAS,EAAE,SAAS;iBACrB,EACD;oBACE,KAAK,KAAK,MAAM;wBACd,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC;wBACxB,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;iBACnE,CACF,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"Rating.js","sourceRoot":"","sources":["../src/Rating.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA0B7C,SAAS,QAAQ,CAAC,IAAY,EAAE,IAA6B;IAC3D,OAAO,CAAC,CACN,KAAK,EACL;QACE,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,WAAW;QACpB,IAAI;QACJ,MAAM,EAAE,cAAc;QACtB,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,OAAO;QACzB,iBAAiB,EAAE,OAAO;QAC1B,aAAa,EAAE,MAAM;KACtB,EACD;QACE,CAAC,CAAC,SAAS,EAAE;YACX,MAAM,EACJ,gGAAgG;SACnG,CAAC;KACH,CACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,CAAC,CACN,KAAK,EACL;QACE,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,cAAc;QACtB,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,OAAO;QACzB,iBAAiB,EAAE,OAAO;QAC1B,aAAa,EAAE,MAAM;KACtB,EACD;QACE,CAAC,CAAC,MAAM,EAAE;YACR,CAAC,EAAE,2DAA2D;YAC9D,IAAI,EAAE,cAAc;SACrB,CAAC;QACF,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,yDAAyD,EAAE,CAAC;KAC5E,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC;IACpC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC3C,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;QACjC,QAAQ,EAAE;YACR,IAAI,EAAE,QAAoD;YAC1D,OAAO,EAAE,SAAS;SACnB;QACD,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3C,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,MAA0B,EAAE,OAAO,EAAE,IAAI,EAAE;QACzD,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5C;IACD,KAAK,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACtC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACvC,kFAAkF;QAClF,MAAM,SAAS,GAAG,GAAG,CAAqC,EAAE,CAAC,CAAC;QAE9D,OAAO,GAAG,EAAE;YACV,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;YAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,8EAA8E;YAC9E,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzD,MAAM,SAAS,GAAG,GAAG,OAAO,MAAM,GAAG,EAAE,CAAC;YAExC,MAAM,IAAI,GAAG,CAAC,IAAY,EAA6B,EAAE;gBACvD,IAAI,OAAO,IAAI,IAAI;oBAAE,OAAO,MAAM,CAAC;gBACnC,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,IAAI,IAAI,GAAG,GAAG;oBAAE,OAAO,MAAM,CAAC;gBAC5D,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;gBAC9B,IAAI,KAAK,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;gBACjD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;gBACxD,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;gBACnC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACxB,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,IAAY,EAAE,EAAE;gBACtD,IAAI,KAAK,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B,CAAC;oBAClD,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC9D,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxC,CAAC;gBACD,uDAAuD;gBACvD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrB,MAAM,CAAC,CAAC,CAAC,CAAC;oBACV,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,CAAC;YACf,CAAC,CAAC;YAEF,mEAAmE;YACnE,MAAM,cAAc,GAAG,CAAC,KAAoB,EAAE,EAAE;gBAC9C,IAAI,KAAK,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,MAAM,IAAI,GAAG,CAAC,CAAC;gBACf,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,IAAI,IAAI,GAAkB,IAAI,CAAC;gBAC/B,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;oBAClB,KAAK,YAAY,CAAC;oBAClB,KAAK,SAAS;wBACZ,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;wBACrC,MAAM;oBACR,KAAK,WAAW,CAAC;oBACjB,KAAK,WAAW;wBACd,8CAA8C;wBAC9C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;wBACnC,MAAM;oBACR,KAAK,MAAM;wBACT,qCAAqC;wBACrC,IAAI,GAAG,CAAC,CAAC;wBACT,MAAM;oBACR,KAAK,KAAK;wBACR,IAAI,GAAG,GAAG,CAAC;wBACX,MAAM;oBACR;wBACE,OAAO,GAAG,KAAK,CAAC;gBACpB,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAClB,MAAM,CAAC,IAAI,CAAC,CAAC;wBACb,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wBAC7C,IAAI,QAAQ;4BAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACjC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YAEF,2CAA2C;YAC3C,MAAM,eAAe,GAAG,CAAC,KAAoB,EAAE,EAAE;gBAC/C,IAAI,KAAK,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,MAAM,IAAI,GAAG,GAAG,CAAC;gBACjB,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,IAAI,IAAI,GAAkB,IAAI,CAAC;gBAC/B,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;oBAClB,KAAK,YAAY,CAAC;oBAClB,KAAK,SAAS;wBACZ,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;wBACrC,MAAM;oBACR,KAAK,WAAW,CAAC;oBACjB,KAAK,WAAW;wBACd,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;wBACnC,MAAM;oBACR,KAAK,MAAM;wBACT,IAAI,GAAG,CAAC,CAAC;wBACT,MAAM;oBACR,KAAK,KAAK;wBACR,IAAI,GAAG,GAAG,CAAC;wBACX,MAAM;oBACR;wBACE,OAAO,GAAG,KAAK,CAAC;gBACpB,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,IAAI,KAAK,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,SAAS,GAAG,UAAU,CAC1B,WAAW,EACX,cAAc,KAAK,CAAC,IAAI,EAAE,EAC1B,KAAK,CAAC,QAAQ,IAAI,qBAAqB,EACvC,KAAK,CAAC,KAAK,CACZ,CAAC;YAEF,sFAAsF;YACtF,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO,CAAC,CACN,KAAK,EACL;oBACE,GAAG,KAAK;oBACR,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,KAAK;oBACX,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;iBACxE,EACD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,CAAC,CACN,MAAM,EACN;wBACE,GAAG,EAAE,IAAI;wBACT,KAAK,EAAE,UAAU,CACf,iBAAiB,EACjB,KAAK,KAAK,MAAM,IAAI,uBAAuB,EAC3C,KAAK,KAAK,MAAM,IAAI,uBAAuB,CAC5C;wBACD,aAAa,EAAE,MAAM;qBACtB,EACD;wBACE,KAAK,KAAK,MAAM;4BACd,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC;4BACxB,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;qBACnE,CACF,CAAC;gBACJ,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,6DAA6D;YAC7D,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,CACN,KAAK,EACL;oBACE,GAAG,KAAK;oBACR,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,KAAK,CAAC,KAAK;oBACzB,eAAe,EAAE,CAAC;oBAClB,eAAe,EAAE,GAAG;oBACpB,eAAe,EAAE,OAAO;oBACxB,gBAAgB,EAAE,SAAS;oBAC3B,QAAQ,EAAE,CAAC;oBACX,SAAS,EAAE,eAAe;iBAC3B,EACD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,CAAC,CACN,MAAM,EACN;wBACE,GAAG,EAAE,IAAI;wBACT,KAAK,EAAE,UAAU,CACf,iBAAiB,EACjB,KAAK,KAAK,MAAM,IAAI,uBAAuB,EAC3C,KAAK,KAAK,MAAM,IAAI,uBAAuB,CAC5C;wBACD,aAAa,EAAE,MAAM;wBACrB,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;qBACzD,EACD;wBACE,KAAK,KAAK,MAAM;4BACd,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC;4BACxB,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;qBACnE,CACF,CAAC;gBACJ,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,6DAA6D;YAC7D,oEAAoE;YACpE,uEAAuE;YACvE,OAAO,CAAC,CACN,KAAK,EACL;gBACE,GAAG,KAAK;gBACR,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,KAAK,CAAC,KAAK;gBACzB,SAAS,EAAE,cAAc;aAC1B,EACD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,OAAO,CAAC,CACN,QAAQ,EACR;oBACE,GAAG,EAAE,IAAI;oBACT,GAAG,EAAE,CAAC,EAAW,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAwB,CAAC,CAAC,CAAC;oBAC3E,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,UAAU,CACf,iBAAiB,EACjB,KAAK,KAAK,MAAM,IAAI,uBAAuB,EAC3C,KAAK,KAAK,MAAM,IAAI,uBAAuB,CAC5C;oBACD,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBACnD,YAAY,EAAE,GAAG,IAAI,MAAM,GAAG,EAAE;oBAChC,QAAQ,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;oBACxD,SAAS,EAAE,cAAc;iBAC1B,EACD,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CACjE,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,78 @@
1
+ export type SankeyChartTone = "category1" | "category2" | "category3" | "category4" | "category5" | "category6" | "category7" | "category8";
2
+ export type SankeyChartNode = {
3
+ id: string;
4
+ label: string;
5
+ tone?: SankeyChartTone;
6
+ };
7
+ export type SankeyChartLink = {
8
+ source: string;
9
+ target: string;
10
+ value: number;
11
+ tone?: SankeyChartTone;
12
+ };
13
+ export type SankeyChartProps = {
14
+ nodes: SankeyChartNode[];
15
+ links: SankeyChartLink[];
16
+ width?: number;
17
+ height?: number;
18
+ label: string;
19
+ class?: string;
20
+ };
21
+ export declare const SankeyChart: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
22
+ nodes: {
23
+ type: () => SankeyChartNode[];
24
+ required: true;
25
+ };
26
+ links: {
27
+ type: () => SankeyChartLink[];
28
+ required: true;
29
+ };
30
+ width: {
31
+ type: NumberConstructor;
32
+ default: number;
33
+ };
34
+ height: {
35
+ type: NumberConstructor;
36
+ default: number;
37
+ };
38
+ label: {
39
+ type: StringConstructor;
40
+ required: true;
41
+ };
42
+ class: {
43
+ type: StringConstructor;
44
+ default: undefined;
45
+ };
46
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
47
+ [key: string]: any;
48
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
49
+ nodes: {
50
+ type: () => SankeyChartNode[];
51
+ required: true;
52
+ };
53
+ links: {
54
+ type: () => SankeyChartLink[];
55
+ required: true;
56
+ };
57
+ width: {
58
+ type: NumberConstructor;
59
+ default: number;
60
+ };
61
+ height: {
62
+ type: NumberConstructor;
63
+ default: number;
64
+ };
65
+ label: {
66
+ type: StringConstructor;
67
+ required: true;
68
+ };
69
+ class: {
70
+ type: StringConstructor;
71
+ default: undefined;
72
+ };
73
+ }>> & Readonly<{}>, {
74
+ class: string;
75
+ width: number;
76
+ height: number;
77
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
78
+ //# sourceMappingURL=SankeyChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SankeyChart.d.ts","sourceRoot":"","sources":["../src/SankeyChart.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA6BF,eAAO,MAAM,WAAW;;cAGI,MAAM,eAAe,EAAE;;;;cACvB,MAAM,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;cADvB,MAAM,eAAe,EAAE;;;;cACvB,MAAM,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;4EA8NjD,CAAC"}
@@ -0,0 +1,202 @@
1
+ import { defineComponent, h, ref } from "vue";
2
+ import { classNames } from "./classNames.js";
3
+ import { chartDataList } from "./chartScale.js";
4
+ const MARGIN = { top: 18, right: 26, bottom: 18, left: 26 };
5
+ const NODE_WIDTH = 14;
6
+ const TONES = [
7
+ "category1",
8
+ "category2",
9
+ "category3",
10
+ "category4",
11
+ "category5",
12
+ "category6",
13
+ "category7",
14
+ "category8",
15
+ ];
16
+ function magnitude(value) {
17
+ return Number.isFinite(value) && value > 0 ? value : 0;
18
+ }
19
+ export const SankeyChart = defineComponent({
20
+ name: "SankeyChart",
21
+ props: {
22
+ nodes: { type: Array, required: true },
23
+ links: { type: Array, required: true },
24
+ width: { type: Number, default: 560 },
25
+ height: { type: Number, default: 280 },
26
+ label: { type: String, required: true },
27
+ class: { type: String, default: undefined },
28
+ },
29
+ setup(props, { attrs }) {
30
+ const hoveredLinkIndex = ref(null);
31
+ function handleLeave() {
32
+ hoveredLinkIndex.value = null;
33
+ }
34
+ function handleVisualPointerMove(event) {
35
+ const target = event.target;
36
+ if (!(target instanceof Element)) {
37
+ hoveredLinkIndex.value = null;
38
+ return;
39
+ }
40
+ const index = Number(target.getAttribute("data-link-index"));
41
+ hoveredLinkIndex.value = Number.isInteger(index) ? index : null;
42
+ }
43
+ return () => {
44
+ const nodes = props.nodes ?? [];
45
+ const links = props.links ?? [];
46
+ const width = props.width ?? 560;
47
+ const height = props.height ?? 280;
48
+ const label = props.label;
49
+ // Compute depths (longest path from root)
50
+ const depths = new Map(nodes.map((node) => [node.id, 0]));
51
+ for (let pass = 0; pass < nodes.length; pass += 1) {
52
+ let changed = false;
53
+ for (const link of links) {
54
+ const sourceDepth = depths.get(link.source) ?? 0;
55
+ const targetDepth = depths.get(link.target) ?? 0;
56
+ if (sourceDepth + 1 > targetDepth) {
57
+ depths.set(link.target, sourceDepth + 1);
58
+ changed = true;
59
+ }
60
+ }
61
+ if (!changed)
62
+ break;
63
+ }
64
+ // Conservation de flux : hauteur nœud = max(Σ flux sortants, Σ flux entrants)
65
+ const valueOut = new Map();
66
+ const valueIn = new Map();
67
+ for (const node of nodes) {
68
+ valueOut.set(node.id, 0);
69
+ valueIn.set(node.id, 0);
70
+ }
71
+ for (const link of links) {
72
+ const v = magnitude(link.value);
73
+ valueOut.set(link.source, (valueOut.get(link.source) ?? 0) + v);
74
+ valueIn.set(link.target, (valueIn.get(link.target) ?? 0) + v);
75
+ }
76
+ const nodeValues = new Map();
77
+ for (const node of nodes) {
78
+ nodeValues.set(node.id, Math.max(valueOut.get(node.id) ?? 0, valueIn.get(node.id) ?? 0));
79
+ }
80
+ const maxDepth = Math.max(0, ...Array.from(depths.values()));
81
+ const plotWidth = Math.max(width - MARGIN.left - MARGIN.right - NODE_WIDTH, 1);
82
+ const plotHeight = Math.max(height - MARGIN.top - MARGIN.bottom, 1);
83
+ const maxNodeValue = Math.max(1, ...Array.from(nodeValues.values()));
84
+ const byDepth = new Map();
85
+ nodes.forEach((node) => {
86
+ const depth = depths.get(node.id) ?? 0;
87
+ const bucket = byDepth.get(depth) ?? [];
88
+ bucket.push(node);
89
+ byDepth.set(depth, bucket);
90
+ });
91
+ const positionedNodes = nodes.map((node, index) => {
92
+ const depth = depths.get(node.id) ?? 0;
93
+ const bucket = byDepth.get(depth) ?? [node];
94
+ const row = Math.max(0, bucket.findIndex((entry) => entry.id === node.id));
95
+ const slot = plotHeight / Math.max(bucket.length, 1);
96
+ const nodeHeight = Math.max(24, Math.min(slot * 0.72, 18 + ((nodeValues.get(node.id) ?? 0) / maxNodeValue) * 54));
97
+ const x = MARGIN.left + (maxDepth === 0 ? plotWidth / 2 : (plotWidth * depth) / maxDepth);
98
+ const y = MARGIN.top + slot * row + (slot - nodeHeight) / 2;
99
+ const tone = node.tone ?? TONES[index % TONES.length];
100
+ return {
101
+ node,
102
+ tone,
103
+ x,
104
+ y,
105
+ width: NODE_WIDTH,
106
+ height: nodeHeight,
107
+ centerY: y + nodeHeight / 2,
108
+ };
109
+ });
110
+ const positionedById = new Map(positionedNodes.map((n) => [n.node.id, n]));
111
+ const maxLinkValue = Math.max(1, ...links.map((link) => magnitude(link.value)));
112
+ const nodeById = new Map(nodes.map((node) => [node.id, node]));
113
+ // No silent drop for orphan links - use fallback position
114
+ const positionedLinks = links.map((link, index) => {
115
+ const source = positionedById.get(link.source);
116
+ const target = positionedById.get(link.target);
117
+ const fallbackY = MARGIN.top + plotHeight / 2;
118
+ const x1 = (source?.x ?? MARGIN.left) + NODE_WIDTH;
119
+ const y1 = source?.centerY ?? fallbackY;
120
+ const x2 = target?.x ?? width - MARGIN.right;
121
+ const y2 = target?.centerY ?? fallbackY;
122
+ const c = Math.max(32, Math.abs(x2 - x1) * 0.5);
123
+ return {
124
+ link,
125
+ source,
126
+ target,
127
+ tone: link.tone ?? source?.tone ?? TONES[index % TONES.length],
128
+ width: Math.max(2, (magnitude(link.value) / maxLinkValue) * 18),
129
+ path: `M ${x1} ${y1} C ${x1 + c} ${y1}, ${x2 - c} ${y2}, ${x2} ${y2}`,
130
+ midX: (x1 + x2) / 2,
131
+ midY: (y1 + y2) / 2,
132
+ };
133
+ });
134
+ const svgChildren = [];
135
+ // Links first (below nodes)
136
+ positionedLinks.forEach((flow, i) => {
137
+ const isDim = hoveredLinkIndex.value !== null && hoveredLinkIndex.value !== i;
138
+ svgChildren.push(h("path", {
139
+ key: `${flow.link.source}-${flow.link.target}-${i}`,
140
+ class: classNames("st-sankeyChart__link", `st-sankeyChart__link--${flow.tone}`, isDim ? "st-sankeyChart__link--dim" : undefined),
141
+ d: flow.path,
142
+ "stroke-width": flow.width,
143
+ "data-link-index": i,
144
+ }));
145
+ });
146
+ // Nodes on top
147
+ positionedNodes.forEach((entry) => {
148
+ svgChildren.push(h("rect", {
149
+ key: `n${entry.node.id}`,
150
+ class: classNames("st-sankeyChart__node", `st-sankeyChart__node--${entry.tone}`),
151
+ x: entry.x,
152
+ y: entry.y,
153
+ width: entry.width,
154
+ height: entry.height,
155
+ rx: "2",
156
+ }), h("text", {
157
+ key: `l${entry.node.id}`,
158
+ class: "st-sankeyChart__nodeLabel",
159
+ x: entry.x + entry.width + 6,
160
+ y: entry.centerY,
161
+ "dominant-baseline": "middle",
162
+ }, entry.node.label));
163
+ });
164
+ const dataValueItems = links.map((link) => {
165
+ const src = nodeById.get(link.source)?.label ?? link.source;
166
+ const tgt = nodeById.get(link.target)?.label ?? link.target;
167
+ return `${src} -> ${tgt}: ${link.value}`;
168
+ });
169
+ const hoveredFlow = hoveredLinkIndex.value !== null ? positionedLinks[hoveredLinkIndex.value] : undefined;
170
+ return h("div", { ...attrs, class: classNames("st-sankeyChart", props.class) }, [
171
+ h("div", {
172
+ class: "st-sankeyChart__visual",
173
+ role: "img",
174
+ "aria-label": label,
175
+ onPointermove: handleVisualPointerMove,
176
+ onPointerleave: handleLeave,
177
+ }, [
178
+ h("svg", {
179
+ viewBox: `0 0 ${width} ${height}`,
180
+ preserveAspectRatio: "xMidYMid meet",
181
+ width: "100%",
182
+ height: "100%",
183
+ focusable: "false",
184
+ "aria-hidden": "true",
185
+ }, svgChildren),
186
+ ]),
187
+ chartDataList(label, dataValueItems),
188
+ hoveredFlow
189
+ ? h("div", {
190
+ class: "st-sankeyChart__tooltip",
191
+ role: "presentation",
192
+ style: `left: ${(hoveredFlow.midX / width) * 100}%; top: ${(hoveredFlow.midY / height) * 100}%`,
193
+ }, [
194
+ h("span", { class: "st-sankeyChart__tooltipLabel" }, `${hoveredFlow.source?.node.label ?? hoveredFlow.link.source} -> ${hoveredFlow.target?.node.label ?? hoveredFlow.link.target}`),
195
+ h("span", { class: "st-sankeyChart__tooltipValue" }, String(hoveredFlow.link.value)),
196
+ ])
197
+ : null,
198
+ ]);
199
+ };
200
+ },
201
+ });
202
+ //# sourceMappingURL=SankeyChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SankeyChart.js","sourceRoot":"","sources":["../src/SankeyChart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAkChD,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAW,CAAC;AACrE,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,KAAK,GAAsB;IAC/B,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;CACZ,CAAC;AAEF,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAYD,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;IACzC,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,KAAgC,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAgC,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;QACtC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5C;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,MAAM,gBAAgB,GAAG,GAAG,CAAgB,IAAI,CAAC,CAAC;QAElD,SAAS,WAAW;YAClB,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,SAAS,uBAAuB,CAAC,KAAmB;YAClD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,OAAO,CAAC,EAAE,CAAC;gBACjC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC7D,gBAAgB,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,CAAC;QAED,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC;YACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAE1B,0CAA0C;YAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBAClD,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACjD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACjD,IAAI,WAAW,GAAG,CAAC,GAAG,WAAW,EAAE,CAAC;wBAClC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;wBACzC,OAAO,GAAG,IAAI,CAAC;oBACjB,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,OAAO;oBAAE,MAAM;YACtB,CAAC;YAED,8EAA8E;YAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3F,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;YAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAErE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;YACrD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACrB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,MAAM,eAAe,GAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3E,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClH,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC1F,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtD,OAAO;oBACL,IAAI;oBACJ,IAAI;oBACJ,CAAC;oBACD,CAAC;oBACD,KAAK,EAAE,UAAU;oBACjB,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,CAAC,GAAG,UAAU,GAAG,CAAC;iBAC5B,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAE/D,0DAA0D;YAC1D,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAChD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,UAAU,GAAG,CAAC,CAAC;gBAC9C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;gBACnD,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,IAAI,SAAS,CAAC;gBACxC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC7C,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,IAAI,SAAS,CAAC;gBACxC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;gBAChD,OAAO;oBACL,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC9D,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;oBAC/D,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBACrE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;iBACpB,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAA2B,EAAE,CAAC;YAE/C,4BAA4B;YAC5B,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAClC,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,KAAK,IAAI,IAAI,gBAAgB,CAAC,KAAK,KAAK,CAAC,CAAC;gBAC9E,WAAW,CAAC,IAAI,CACd,CAAC,CAAC,MAAM,EAAE;oBACR,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;oBACnD,KAAK,EAAE,UAAU,CACf,sBAAsB,EACtB,yBAAyB,IAAI,CAAC,IAAI,EAAE,EACpC,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS,CAChD;oBACD,CAAC,EAAE,IAAI,CAAC,IAAI;oBACZ,cAAc,EAAE,IAAI,CAAC,KAAK;oBAC1B,iBAAiB,EAAE,CAAC;iBACrB,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,eAAe;YACf,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAChC,WAAW,CAAC,IAAI,CACd,CAAC,CAAC,MAAM,EAAE;oBACR,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;oBACxB,KAAK,EAAE,UAAU,CAAC,sBAAsB,EAAE,yBAAyB,KAAK,CAAC,IAAI,EAAE,CAAC;oBAChF,CAAC,EAAE,KAAK,CAAC,CAAC;oBACV,CAAC,EAAE,KAAK,CAAC,CAAC;oBACV,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,EAAE,EAAE,GAAG;iBACR,CAAC,EACF,CAAC,CACC,MAAM,EACN;oBACE,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;oBACxB,KAAK,EAAE,2BAA2B;oBAClC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;oBAC5B,CAAC,EAAE,KAAK,CAAC,OAAO;oBAChB,mBAAmB,EAAE,QAAQ;iBAC9B,EACD,KAAK,CAAC,IAAI,CAAC,KAAK,CACjB,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC5D,OAAO,GAAG,GAAG,OAAO,GAAG,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE1G,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC9E,CAAC,CACC,KAAK,EACL;oBACE,KAAK,EAAE,wBAAwB;oBAC/B,IAAI,EAAE,KAAK;oBACX,YAAY,EAAE,KAAK;oBACnB,aAAa,EAAE,uBAAuB;oBACtC,cAAc,EAAE,WAAW;iBAC5B,EACD;oBACE,CAAC,CACC,KAAK,EACL;wBACE,OAAO,EAAE,OAAO,KAAK,IAAI,MAAM,EAAE;wBACjC,mBAAmB,EAAE,eAAe;wBACpC,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,OAAO;wBAClB,aAAa,EAAE,MAAM;qBACtB,EACD,WAAW,CACZ;iBACF,CACF;gBACD,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC;gBACpC,WAAW;oBACT,CAAC,CAAC,CAAC,CACC,KAAK,EACL;wBACE,KAAK,EAAE,yBAAyB;wBAChC,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG;qBAChG,EACD;wBACE,CAAC,CACC,MAAM,EACN,EAAE,KAAK,EAAE,8BAA8B,EAAE,EACzC,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAC/H;wBACD,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACrF,CACF;oBACH,CAAC,CAAC,IAAI;aACT,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -30,6 +30,8 @@ export type SelectableListProps = {
30
30
  * `multiple` toggles rows independently. Controlled via `value`/`onChange`,
31
31
  * otherwise it keeps its own internal selection. Pilots each child row through
32
32
  * provide/inject (role="option" + the computed tabindex / aria-selected).
33
+ * Disabled rows are registered but skipped during keyboard navigation; if a
34
+ * disabled row holds focus, focus transfers to the next enabled row.
33
35
  */
34
36
  export declare const SelectableList: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
35
37
  label: {
@@ -1 +1 @@
1
- {"version":3,"file":"SelectableList.d.ts","sourceRoot":"","sources":["../src/SelectableList.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,KAAK,CAAC;AAOb,MAAM,MAAM,mBAAmB,GAAG;IAChC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAkBF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;cASI,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;;;;cAIzC,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;;;;;;;;;;qBAMtD,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;;;;;;;;;;;;;;;cAVd,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;;;;cAIzC,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;;;;;;;;;;;;sBAAlC,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI;;;;4EA+IxE,CAAC"}
1
+ {"version":3,"file":"SelectableList.d.ts","sourceRoot":"","sources":["../src/SelectableList.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,QAAQ,EACd,MAAM,KAAK,CAAC;AAOb,MAAM,MAAM,mBAAmB,GAAG;IAChC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAkBF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;cASI,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;;;;cAIzC,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;;;;;;;;;;qBAMtD,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;;;;;;;;;;;;;;;cAVd,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;;;;cAIzC,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;;;;;;;;;;;;sBAAlC,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI;;;;4EAqLxE,CAAC"}