iryx-ui 0.8.0 → 0.10.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 (164) hide show
  1. package/README.md +279 -7
  2. package/dist/component-names.d.ts +1 -1
  3. package/dist/component-names.js +4 -0
  4. package/dist/{packages/iryx-ui/src/components → components}/Alert.vue_vue_type_script_setup_true_lang.js +1 -1
  5. package/dist/{packages/iryx-ui/src/components → components}/Banner.vue_vue_type_script_setup_true_lang.js +1 -1
  6. package/dist/components/BarChart.js +5 -0
  7. package/dist/components/BarChart.vue.d.ts +95 -0
  8. package/dist/components/BarChart.vue_vue_type_script_setup_true_lang.js +258 -0
  9. package/dist/{packages/iryx-ui/src/components → components}/Breadcrumb.vue_vue_type_script_setup_true_lang.js +1 -1
  10. package/dist/{packages/iryx-ui/src/components → components}/Button.vue_vue_type_script_setup_true_lang.js +1 -1
  11. package/dist/components/ChartLegend.js +5 -0
  12. package/dist/components/ChartLegend.vue.d.ts +12 -0
  13. package/dist/components/ChartLegend.vue_vue_type_script_setup_true_lang.js +31 -0
  14. package/dist/{packages/iryx-ui/src/components → components}/Checkbox.vue_vue_type_script_setup_true_lang.js +1 -1
  15. package/dist/{packages/iryx-ui/src/components → components}/Combobox.vue_vue_type_script_setup_true_lang.js +1 -1
  16. package/dist/{packages/iryx-ui/src/components → components}/DatePicker.vue_vue_type_script_setup_true_lang.js +1 -1
  17. package/dist/{packages/iryx-ui/src/components → components}/DateRangePicker.vue_vue_type_script_setup_true_lang.js +1 -1
  18. package/dist/components/Dialog.vue_vue_type_script_setup_true_lang.js +102 -0
  19. package/dist/{packages/iryx-ui/src/components → components}/DropdownMenuItems.vue_vue_type_script_setup_true_lang.js +1 -1
  20. package/dist/{packages/iryx-ui/src/components → components}/FileUpload.vue_vue_type_script_setup_true_lang.js +1 -1
  21. package/dist/{packages/iryx-ui/src/components → components}/Icon.vue_vue_type_script_setup_true_lang.js +1 -1
  22. package/dist/{packages/iryx-ui/src/components → components}/Input.vue_vue_type_script_setup_true_lang.js +1 -1
  23. package/dist/components/LineChart.js +5 -0
  24. package/dist/components/LineChart.vue.d.ts +100 -0
  25. package/dist/components/LineChart.vue_vue_type_script_setup_true_lang.js +265 -0
  26. package/dist/{packages/iryx-ui/src/components → components}/NumberInput.vue_vue_type_script_setup_true_lang.js +1 -1
  27. package/dist/{packages/iryx-ui/src/components → components}/Pagination.vue_vue_type_script_setup_true_lang.js +1 -1
  28. package/dist/{packages/iryx-ui/src/components → components}/PasswordInput.vue_vue_type_script_setup_true_lang.js +1 -1
  29. package/dist/{packages/iryx-ui/src/components → components}/Select.vue_vue_type_script_setup_true_lang.js +1 -1
  30. package/dist/components/Sparkline.js +5 -0
  31. package/dist/components/Sparkline.vue.d.ts +38 -0
  32. package/dist/components/Sparkline.vue_vue_type_script_setup_true_lang.js +110 -0
  33. package/dist/{packages/iryx-ui/src/components → components}/Stat.vue_vue_type_script_setup_true_lang.js +1 -1
  34. package/dist/{packages/iryx-ui/src/components → components}/Stepper.vue_vue_type_script_setup_true_lang.js +1 -1
  35. package/dist/{packages/iryx-ui/src/components → components}/Table.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/{packages/iryx-ui/src/components → components}/Toaster.vue_vue_type_script_setup_true_lang.js +1 -1
  37. package/dist/components/index.d.ts +4 -0
  38. package/dist/components/index.js +88 -0
  39. package/dist/composables/cartesian.d.ts +105 -0
  40. package/dist/composables/cartesian.js +43 -0
  41. package/dist/{packages/iryx-ui/src/composables → composables}/date.js +4 -4
  42. package/dist/composables/element-size.d.ts +15 -0
  43. package/dist/composables/element-size.js +22 -0
  44. package/dist/composables/scale.d.ts +36 -0
  45. package/dist/composables/scale.js +43 -0
  46. package/dist/index.d.ts +7 -0
  47. package/dist/index.js +94 -83
  48. package/dist/nuxt.js +1 -1
  49. package/dist/theme/bar-chart.d.ts +132 -0
  50. package/dist/theme/bar-chart.js +19 -0
  51. package/dist/theme/breadcrumb.d.ts +3 -3
  52. package/dist/theme/chart-legend.d.ts +55 -0
  53. package/dist/theme/chart-legend.js +10 -0
  54. package/dist/theme/index.d.ts +4 -0
  55. package/dist/theme/line-chart.d.ts +143 -0
  56. package/dist/theme/line-chart.js +22 -0
  57. package/dist/theme/sparkline.d.ts +58 -0
  58. package/dist/theme/sparkline.js +15 -0
  59. package/package.json +8 -8
  60. package/theme.css +42 -0
  61. package/dist/packages/iryx-ui/src/component-names.js +0 -4
  62. package/dist/packages/iryx-ui/src/components/Dialog.vue_vue_type_script_setup_true_lang.js +0 -99
  63. package/dist/packages/iryx-ui/src/components/index.js +0 -80
  64. /package/dist/{packages/iryx-ui/src/components → components}/Alert.js +0 -0
  65. /package/dist/{packages/iryx-ui/src/components → components}/App.js +0 -0
  66. /package/dist/{packages/iryx-ui/src/components → components}/App.vue_vue_type_script_setup_true_lang.js +0 -0
  67. /package/dist/{packages/iryx-ui/src/components → components}/Badge.js +0 -0
  68. /package/dist/{packages/iryx-ui/src/components → components}/Badge.vue_vue_type_script_setup_true_lang.js +0 -0
  69. /package/dist/{packages/iryx-ui/src/components → components}/Banner.js +0 -0
  70. /package/dist/{packages/iryx-ui/src/components → components}/Breadcrumb.js +0 -0
  71. /package/dist/{packages/iryx-ui/src/components → components}/Button.js +0 -0
  72. /package/dist/{packages/iryx-ui/src/components → components}/ButtonGroup.js +0 -0
  73. /package/dist/{packages/iryx-ui/src/components → components}/ButtonGroup.vue_vue_type_script_setup_true_lang.js +0 -0
  74. /package/dist/{packages/iryx-ui/src/components → components}/Card.js +0 -0
  75. /package/dist/{packages/iryx-ui/src/components → components}/Card.vue_vue_type_script_setup_true_lang.js +0 -0
  76. /package/dist/{packages/iryx-ui/src/components → components}/Checkbox.js +0 -0
  77. /package/dist/{packages/iryx-ui/src/components → components}/Combobox.js +0 -0
  78. /package/dist/{packages/iryx-ui/src/components → components}/ConfirmDialog.js +0 -0
  79. /package/dist/{packages/iryx-ui/src/components → components}/ConfirmDialog.vue_vue_type_script_setup_true_lang.js +0 -0
  80. /package/dist/{packages/iryx-ui/src/components → components}/DatePicker.js +0 -0
  81. /package/dist/{packages/iryx-ui/src/components → components}/DateRangePicker.js +0 -0
  82. /package/dist/{packages/iryx-ui/src/components → components}/Dialog.js +0 -0
  83. /package/dist/{packages/iryx-ui/src/components → components}/DropdownMenu.js +0 -0
  84. /package/dist/{packages/iryx-ui/src/components → components}/DropdownMenu.vue_vue_type_script_setup_true_lang.js +0 -0
  85. /package/dist/{packages/iryx-ui/src/components → components}/DropdownMenuItems.js +0 -0
  86. /package/dist/{packages/iryx-ui/src/components → components}/EmptyState.js +0 -0
  87. /package/dist/{packages/iryx-ui/src/components → components}/EmptyState.vue_vue_type_script_setup_true_lang.js +0 -0
  88. /package/dist/{packages/iryx-ui/src/components → components}/FileUpload.js +0 -0
  89. /package/dist/{packages/iryx-ui/src/components → components}/Form.js +0 -0
  90. /package/dist/{packages/iryx-ui/src/components → components}/Form.vue_vue_type_script_setup_true_lang.js +0 -0
  91. /package/dist/{packages/iryx-ui/src/components → components}/FormField.js +0 -0
  92. /package/dist/{packages/iryx-ui/src/components → components}/FormField.vue_vue_type_script_setup_true_lang.js +0 -0
  93. /package/dist/{packages/iryx-ui/src/components → components}/Icon.js +0 -0
  94. /package/dist/{packages/iryx-ui/src/components → components}/Input.js +0 -0
  95. /package/dist/{packages/iryx-ui/src/components → components}/Label.js +0 -0
  96. /package/dist/{packages/iryx-ui/src/components → components}/Label.vue_vue_type_script_setup_true_lang.js +0 -0
  97. /package/dist/{packages/iryx-ui/src/components → components}/NumberInput.js +0 -0
  98. /package/dist/{packages/iryx-ui/src/components → components}/Pagination.js +0 -0
  99. /package/dist/{packages/iryx-ui/src/components → components}/PasswordInput.js +0 -0
  100. /package/dist/{packages/iryx-ui/src/components → components}/Progress.js +0 -0
  101. /package/dist/{packages/iryx-ui/src/components → components}/Progress.vue_vue_type_script_setup_true_lang.js +0 -0
  102. /package/dist/{packages/iryx-ui/src/components → components}/RadioGroup.js +0 -0
  103. /package/dist/{packages/iryx-ui/src/components → components}/RadioGroup.vue_vue_type_script_setup_true_lang.js +0 -0
  104. /package/dist/{packages/iryx-ui/src/components → components}/Select.js +0 -0
  105. /package/dist/{packages/iryx-ui/src/components → components}/Separator.js +0 -0
  106. /package/dist/{packages/iryx-ui/src/components → components}/Separator.vue_vue_type_script_setup_true_lang.js +0 -0
  107. /package/dist/{packages/iryx-ui/src/components → components}/Skeleton.js +0 -0
  108. /package/dist/{packages/iryx-ui/src/components → components}/Skeleton.vue_vue_type_script_setup_true_lang.js +0 -0
  109. /package/dist/{packages/iryx-ui/src/components → components}/Stat.js +0 -0
  110. /package/dist/{packages/iryx-ui/src/components → components}/Stepper.js +0 -0
  111. /package/dist/{packages/iryx-ui/src/components → components}/Switch.js +0 -0
  112. /package/dist/{packages/iryx-ui/src/components → components}/Switch.vue_vue_type_script_setup_true_lang.js +0 -0
  113. /package/dist/{packages/iryx-ui/src/components → components}/Table.js +0 -0
  114. /package/dist/{packages/iryx-ui/src/components → components}/Tabs.js +0 -0
  115. /package/dist/{packages/iryx-ui/src/components → components}/Tabs.vue_vue_type_script_setup_true_lang.js +0 -0
  116. /package/dist/{packages/iryx-ui/src/components → components}/Textarea.js +0 -0
  117. /package/dist/{packages/iryx-ui/src/components → components}/Textarea.vue_vue_type_script_setup_true_lang.js +0 -0
  118. /package/dist/{packages/iryx-ui/src/components → components}/Toaster.js +0 -0
  119. /package/dist/{packages/iryx-ui/src/components → components}/Tooltip.js +0 -0
  120. /package/dist/{packages/iryx-ui/src/components → components}/Tooltip.vue_vue_type_script_setup_true_lang.js +0 -0
  121. /package/dist/{packages/iryx-ui/src/composables → composables}/appearance.js +0 -0
  122. /package/dist/{packages/iryx-ui/src/composables → composables}/button-group.js +0 -0
  123. /package/dist/{packages/iryx-ui/src/composables → composables}/confirm.js +0 -0
  124. /package/dist/{packages/iryx-ui/src/composables → composables}/data-table.js +0 -0
  125. /package/dist/{packages/iryx-ui/src/composables → composables}/decimal.js +0 -0
  126. /package/dist/{packages/iryx-ui/src/composables → composables}/dropdown-menu.js +0 -0
  127. /package/dist/{packages/iryx-ui/src/composables → composables}/form.js +0 -0
  128. /package/dist/{packages/iryx-ui/src/composables → composables}/icon.js +0 -0
  129. /package/dist/{packages/iryx-ui/src/composables → composables}/toast.js +0 -0
  130. /package/dist/{packages/iryx-ui/src/config.js → config.js} +0 -0
  131. /package/dist/{packages/iryx-ui/src/plugin.js → plugin.js} +0 -0
  132. /package/dist/{packages/iryx-ui/src/theme → theme}/alert.js +0 -0
  133. /package/dist/{packages/iryx-ui/src/theme → theme}/badge.js +0 -0
  134. /package/dist/{packages/iryx-ui/src/theme → theme}/banner.js +0 -0
  135. /package/dist/{packages/iryx-ui/src/theme → theme}/breadcrumb.js +0 -0
  136. /package/dist/{packages/iryx-ui/src/theme → theme}/button-group.js +0 -0
  137. /package/dist/{packages/iryx-ui/src/theme → theme}/button.js +0 -0
  138. /package/dist/{packages/iryx-ui/src/theme → theme}/card.js +0 -0
  139. /package/dist/{packages/iryx-ui/src/theme → theme}/checkbox.js +0 -0
  140. /package/dist/{packages/iryx-ui/src/theme → theme}/combobox.js +0 -0
  141. /package/dist/{packages/iryx-ui/src/theme → theme}/date-picker.js +0 -0
  142. /package/dist/{packages/iryx-ui/src/theme → theme}/dialog.js +0 -0
  143. /package/dist/{packages/iryx-ui/src/theme → theme}/dropdown-menu.js +0 -0
  144. /package/dist/{packages/iryx-ui/src/theme → theme}/empty-state.js +0 -0
  145. /package/dist/{packages/iryx-ui/src/theme → theme}/file-upload.js +0 -0
  146. /package/dist/{packages/iryx-ui/src/theme → theme}/form.js +0 -0
  147. /package/dist/{packages/iryx-ui/src/theme → theme}/input.js +0 -0
  148. /package/dist/{packages/iryx-ui/src/theme → theme}/label.js +0 -0
  149. /package/dist/{packages/iryx-ui/src/theme → theme}/number-input.js +0 -0
  150. /package/dist/{packages/iryx-ui/src/theme → theme}/pagination.js +0 -0
  151. /package/dist/{packages/iryx-ui/src/theme → theme}/password-input.js +0 -0
  152. /package/dist/{packages/iryx-ui/src/theme → theme}/presets.js +0 -0
  153. /package/dist/{packages/iryx-ui/src/theme → theme}/progress.js +0 -0
  154. /package/dist/{packages/iryx-ui/src/theme → theme}/radio-group.js +0 -0
  155. /package/dist/{packages/iryx-ui/src/theme → theme}/select.js +0 -0
  156. /package/dist/{packages/iryx-ui/src/theme → theme}/separator.js +0 -0
  157. /package/dist/{packages/iryx-ui/src/theme → theme}/skeleton.js +0 -0
  158. /package/dist/{packages/iryx-ui/src/theme → theme}/stat.js +0 -0
  159. /package/dist/{packages/iryx-ui/src/theme → theme}/stepper.js +0 -0
  160. /package/dist/{packages/iryx-ui/src/theme → theme}/switch.js +0 -0
  161. /package/dist/{packages/iryx-ui/src/theme → theme}/table.js +0 -0
  162. /package/dist/{packages/iryx-ui/src/theme → theme}/tabs.js +0 -0
  163. /package/dist/{packages/iryx-ui/src/theme → theme}/toast.js +0 -0
  164. /package/dist/{packages/iryx-ui/src/theme → theme}/tooltip.js +0 -0
@@ -0,0 +1,265 @@
1
+ import { useIryxUiConfig as e } from "../config.js";
2
+ import { cartesianLayout as t, clampTooltip as n, seriesColor as r, slotOf as i, warnOnSlotOverflow as a } from "../composables/cartesian.js";
3
+ import { useElementSize as o } from "../composables/element-size.js";
4
+ import ee from "./ChartLegend.js";
5
+ import { lineChartTheme as s } from "../theme/line-chart.js";
6
+ import { Fragment as c, computed as l, createBlock as te, createCommentVNode as u, createElementBlock as d, createElementVNode as f, defineComponent as p, guardReactiveProps as m, normalizeClass as h, normalizeProps as g, normalizeStyle as _, openBlock as v, ref as y, renderList as b, renderSlot as x, toDisplayString as S, unref as C } from "vue";
7
+ //#region src/components/LineChart.vue?vue&type=script&setup=true&lang.ts
8
+ var w = ["role", "aria-label"], T = [
9
+ "width",
10
+ "height",
11
+ "viewBox"
12
+ ], E = [
13
+ "x1",
14
+ "y1",
15
+ "x2",
16
+ "y2"
17
+ ], D = ["x", "y"], O = ["d"], k = [
18
+ "x1",
19
+ "y1",
20
+ "x2",
21
+ "y2"
22
+ ], A = ["d"], j = ["cx", "cy"], M = ["cx", "cy"], ne = ["x", "y"], re = [
23
+ "x",
24
+ "y",
25
+ "width",
26
+ "height",
27
+ "onPointerenter"
28
+ ], ie = { scope: "row" }, N = /*@__PURE__*/ p({
29
+ __name: "LineChart",
30
+ props: {
31
+ data: { default: () => [] },
32
+ series: {},
33
+ variant: { default: "line" },
34
+ height: { default: 240 },
35
+ ticks: { default: 5 },
36
+ axis: {
37
+ type: Boolean,
38
+ default: !0
39
+ },
40
+ legend: {
41
+ type: Boolean,
42
+ default: !0
43
+ },
44
+ zero: {
45
+ type: Boolean,
46
+ default: !1
47
+ },
48
+ locale: {},
49
+ format: {},
50
+ label: {},
51
+ unstyled: {
52
+ type: Boolean,
53
+ default: void 0
54
+ },
55
+ class: {},
56
+ ui: {}
57
+ },
58
+ setup(p) {
59
+ let N = p, ae = e(), P = l(() => N.unstyled ?? ae.unstyled), F = y(), { width: I } = o(F), L = l(() => new Intl.NumberFormat(N.locale, N.format));
60
+ function R(e) {
61
+ return L.value.format(e);
62
+ }
63
+ let z = l(() => {
64
+ let e = N.series?.length ? [...N.series] : [{ key: "value" }];
65
+ return a(e.length), e;
66
+ }), B = l(() => z.value.length > 1), V = l(() => B.value || N.legend && z.value[0].name != null);
67
+ function H(e, t) {
68
+ let n = e[t];
69
+ return typeof n == "number" && Number.isFinite(n) ? n : null;
70
+ }
71
+ let U = l(() => t({
72
+ values: N.data.flatMap((e) => z.value.map((t) => H(e, t.key))),
73
+ categories: N.data.length,
74
+ longestLabel: Math.max(...N.data.map((e) => e.label.length), 1),
75
+ width: I.value,
76
+ height: N.height,
77
+ tickCount: N.ticks,
78
+ showAxis: N.axis,
79
+ formatTick: R,
80
+ includeZero: N.zero
81
+ }));
82
+ function W(e) {
83
+ return Math.round(e * 100) / 100;
84
+ }
85
+ let G = l(() => I.value ? z.value.map((e, t) => {
86
+ let n = [], a = [];
87
+ return N.data.forEach((t, r) => {
88
+ let i = H(t, e.key);
89
+ if (i == null) {
90
+ a.length && n.push(a), a = [];
91
+ return;
92
+ }
93
+ a.push({
94
+ x: W(U.value.bandCentre(r)),
95
+ y: W(U.value.y(i)),
96
+ index: r
97
+ });
98
+ }), a.length && n.push(a), {
99
+ runs: n,
100
+ color: r(i(e, t)),
101
+ seriesIndex: t
102
+ };
103
+ }) : []), K = l(() => N.variant === "area" && !B.value && G.value.length > 0);
104
+ function q(e) {
105
+ return e.map((e, t) => `${t === 0 ? "M" : "L"}${e.x} ${e.y}`).join(" ");
106
+ }
107
+ function oe(e) {
108
+ let t = U.value.plot.top + U.value.plot.height, n = e[0], r = e[e.length - 1];
109
+ return `${q(e)} L${r.x} ${t} L${n.x} ${t} Z`;
110
+ }
111
+ let J = y(), Y = l(() => J.value == null ? [] : G.value.flatMap((e) => {
112
+ for (let t of e.runs) {
113
+ let n = t.find((e) => e.index === J.value);
114
+ if (n) return [{
115
+ ...n,
116
+ color: e.color
117
+ }];
118
+ }
119
+ return [];
120
+ })), X = l(() => J.value == null ? void 0 : W(U.value.bandCentre(J.value))), Z = l(() => {
121
+ if (J.value == null) return;
122
+ let e = N.data[J.value];
123
+ if (!e) return;
124
+ let t = z.value.map((t, n) => ({
125
+ name: t.name ?? t.key,
126
+ color: r(i(t, n)),
127
+ value: H(e, t.key)
128
+ })).filter((e) => e.value != null).map((e) => ({
129
+ ...e,
130
+ value: R(e.value)
131
+ }));
132
+ if (!t.length) return;
133
+ let a = B.value ? Math.max(e.label.length, ...t.map((e) => e.name.length + e.value.length + 3)) : e.label.length + t[0].value.length + 2;
134
+ return {
135
+ label: e.label,
136
+ rows: t,
137
+ multi: B.value,
138
+ x: n(U.value.bandCentre(J.value), "x".repeat(a), I.value),
139
+ y: Math.min(...Y.value.map((e) => e.y), U.value.plot.top + U.value.plot.height)
140
+ };
141
+ }), Q = l(() => s());
142
+ function $(e, t) {
143
+ let n = N.ui?.[e];
144
+ return P.value ? [n, t] : Q.value[e]({ class: [n, t] });
145
+ }
146
+ return (e, t) => (v(), d("div", {
147
+ ref_key: "root",
148
+ ref: F,
149
+ role: N.label ? "figure" : void 0,
150
+ "aria-label": N.label,
151
+ class: h($("root", N.class))
152
+ }, [
153
+ V.value ? (v(), te(ee, {
154
+ key: 0,
155
+ series: z.value,
156
+ unstyled: N.unstyled
157
+ }, null, 8, ["series", "unstyled"])) : u("", !0),
158
+ f("div", { class: h(P.value ? void 0 : Q.value.plot()) }, [(v(), d("svg", {
159
+ width: C(I),
160
+ height: N.height,
161
+ viewBox: `0 0 ${C(I)} ${N.height}`,
162
+ "aria-hidden": "true",
163
+ class: h($("svg"))
164
+ }, [
165
+ N.axis ? (v(!0), d(c, { key: 0 }, b(U.value.ticks, (e) => (v(), d("g", { key: `tick-${e}` }, [f("line", {
166
+ x1: U.value.plot.left,
167
+ y1: U.value.y(e),
168
+ x2: U.value.plot.left + U.value.plot.width,
169
+ y2: U.value.y(e),
170
+ "stroke-width": "1",
171
+ class: h($("grid"))
172
+ }, null, 10, E), f("text", {
173
+ x: U.value.plot.left - C(8),
174
+ y: U.value.y(e),
175
+ "text-anchor": "end",
176
+ "dominant-baseline": "middle",
177
+ class: h($("tick"))
178
+ }, S(R(e)), 11, D)]))), 128)) : u("", !0),
179
+ x(e.$slots, "underlay", g(m(U.value))),
180
+ K.value ? (v(!0), d(c, { key: 1 }, b(G.value[0].runs, (e, t) => (v(), d("path", {
181
+ key: `area-${t}`,
182
+ d: oe(e),
183
+ style: _({ fill: G.value[0].color }),
184
+ class: h($("area"))
185
+ }, null, 14, O))), 128)) : u("", !0),
186
+ X.value == null ? u("", !0) : (v(), d("line", {
187
+ key: 2,
188
+ x1: X.value,
189
+ y1: U.value.plot.top,
190
+ x2: X.value,
191
+ y2: U.value.plot.top + U.value.plot.height,
192
+ "stroke-width": "1",
193
+ class: h($("crosshair"))
194
+ }, null, 10, k)),
195
+ (v(!0), d(c, null, b(G.value, (e) => (v(), d(c, { key: `series-${e.seriesIndex}` }, [(v(!0), d(c, null, b(e.runs, (t, n) => (v(), d("path", {
196
+ key: `line-${e.seriesIndex}-${n}`,
197
+ d: q(t),
198
+ style: _({ stroke: e.color }),
199
+ class: h($("line"))
200
+ }, null, 14, A))), 128))], 64))), 128)),
201
+ (v(!0), d(c, null, b(Y.value, (e, t) => (v(), d(c, { key: `marker-${t}` }, [f("circle", {
202
+ cx: e.x,
203
+ cy: e.y,
204
+ r: "6",
205
+ class: h($("markerRing"))
206
+ }, null, 10, j), f("circle", {
207
+ cx: e.x,
208
+ cy: e.y,
209
+ r: "4",
210
+ style: _({ fill: e.color }),
211
+ class: h($("marker"))
212
+ }, null, 14, M)], 64))), 128)),
213
+ (v(!0), d(c, null, b(N.data, (e, t) => (v(), d(c, { key: `label-${e.label}-${t}` }, [t % U.value.labelStep === 0 ? (v(), d("text", {
214
+ key: 0,
215
+ x: U.value.bandCentre(t),
216
+ y: U.value.plot.top + U.value.plot.height + 14,
217
+ "text-anchor": "middle",
218
+ class: h($("category"))
219
+ }, S(e.label), 11, ne)) : u("", !0)], 64))), 128)),
220
+ x(e.$slots, "overlay", g(m(U.value))),
221
+ (v(!0), d(c, null, b(N.data, (e, n) => (v(), d("rect", {
222
+ key: `hit-${e.label}-${n}`,
223
+ x: U.value.plot.left + U.value.bandWidth * n,
224
+ y: U.value.plot.top,
225
+ width: U.value.bandWidth,
226
+ height: U.value.plot.height,
227
+ class: h(P.value ? void 0 : Q.value.hit()),
228
+ onPointerenter: (e) => J.value = n,
229
+ onPointerleave: t[0] ||= (e) => J.value = void 0
230
+ }, null, 42, re))), 128))
231
+ ], 10, T)), Z.value ? (v(), d("div", {
232
+ key: 0,
233
+ class: h($("tooltip", Z.value.multi ? "flex-col items-start gap-1" : void 0)),
234
+ style: _({
235
+ left: `${Z.value.x}px`,
236
+ top: `${Z.value.y}px`,
237
+ transform: "translate(-50%, -100%) translateY(-12px)"
238
+ })
239
+ }, [f("span", { class: h($("tooltipLabel")) }, S(Z.value.label), 3), Z.value.multi ? (v(!0), d(c, { key: 0 }, b(Z.value.rows, (e) => (v(), d("span", {
240
+ key: e.name,
241
+ class: "flex items-center gap-1.5"
242
+ }, [
243
+ f("span", {
244
+ class: "size-2 shrink-0 rounded-full",
245
+ style: _({ background: e.color })
246
+ }, null, 4),
247
+ f("span", { class: h($("tooltipLabel")) }, S(e.name), 3),
248
+ f("span", { class: h($("tooltipValue")) }, S(e.value), 3)
249
+ ]))), 128)) : (v(), d("span", {
250
+ key: 1,
251
+ class: h($("tooltipValue"))
252
+ }, S(Z.value.rows[0].value), 3))], 6)) : u("", !0)], 2),
253
+ f("table", { class: h($("table")) }, [
254
+ f("caption", null, S(N.label), 1),
255
+ f("thead", null, [f("tr", null, [t[1] ||= f("th", { scope: "col" }, " Category ", -1), (v(!0), d(c, null, b(z.value, (e) => (v(), d("th", {
256
+ key: e.key,
257
+ scope: "col"
258
+ }, S(e.name ?? "Value"), 1))), 128))])]),
259
+ f("tbody", null, [(v(!0), d(c, null, b(N.data, (e, t) => (v(), d("tr", { key: `row-${e.label}-${t}` }, [f("th", ie, S(e.label), 1), (v(!0), d(c, null, b(z.value, (t) => (v(), d("td", { key: t.key }, S(H(e, t.key) == null ? "—" : R(H(e, t.key))), 1))), 128))]))), 128))])
260
+ ], 2)
261
+ ], 10, w));
262
+ }
263
+ });
264
+ //#endregion
265
+ export { N as default };
@@ -1,4 +1,4 @@
1
- import { ArrowDown01Icon as e, ArrowUp01Icon as t } from "../../../../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
1
+ import { ArrowDown01Icon as e, ArrowUp01Icon as t } from "../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
2
2
  import { useIryxUiConfig as n } from "../config.js";
3
3
  import r from "./Icon.js";
4
4
  import { useFormField as i } from "../composables/form.js";
@@ -1,4 +1,4 @@
1
- import { ArrowLeft01Icon as e, ArrowRight01Icon as t } from "../../../../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
1
+ import { ArrowLeft01Icon as e, ArrowRight01Icon as t } from "../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
2
2
  import { useIryxUiConfig as n } from "../config.js";
3
3
  import r from "./Icon.js";
4
4
  import { paginationTheme as i } from "../theme/pagination.js";
@@ -1,4 +1,4 @@
1
- import { ViewIcon as e, ViewOffIcon as t } from "../../../../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
1
+ import { ViewIcon as e, ViewOffIcon as t } from "../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
2
2
  import { useIryxUiConfig as n } from "../config.js";
3
3
  import r from "./Icon.js";
4
4
  import i from "./Input.js";
@@ -1,4 +1,4 @@
1
- import { ArrowDown01Icon as e, Tick02Icon as t } from "../../../../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
1
+ import { ArrowDown01Icon as e, Tick02Icon as t } from "../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
2
2
  import { useIryxUiConfig as n } from "../config.js";
3
3
  import r from "./Icon.js";
4
4
  import { selectTheme as i } from "../theme/select.js";
@@ -0,0 +1,5 @@
1
+ import e from "./Sparkline.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/Sparkline.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,38 @@
1
+ import type { SparseValue } from '../composables/scale';
2
+ export interface SparklineProps {
3
+ /** Values, oldest first. `null` is a gap in the series, not a zero. */
4
+ data?: readonly SparseValue[];
5
+ /** `area` adds a wash beneath the same line. */
6
+ variant?: 'line' | 'area';
7
+ /** Mark the most recent point with a dot. */
8
+ endDot?: boolean;
9
+ /** Lower edge of the `area` wash. */
10
+ baseline?: 'min' | 'zero';
11
+ /** Pin the domain — set both to put several sparklines on one scale. */
12
+ min?: number;
13
+ max?: number;
14
+ /** Draw in muted ink, for the de-emphasised trend inside a stat tile. */
15
+ muted?: boolean;
16
+ /**
17
+ * Accessible description of the trend. Without one the sparkline is treated
18
+ * as decorative and hidden from assistive tech — which is correct when it
19
+ * sits beside a value that already states the number.
20
+ */
21
+ label?: string;
22
+ /** Rendered height in px. Width always fills the container. */
23
+ height?: number;
24
+ /** Skip built-in classes; you take over styling entirely. */
25
+ unstyled?: boolean;
26
+ class?: string;
27
+ /** Override classes per slot, e.g. `{ line: 'stroke-[3]' }`. */
28
+ ui?: Partial<Record<'root' | 'plot' | 'line' | 'area' | 'dot' | 'ring', string>>;
29
+ }
30
+ declare const __VLS_export: import("vue").DefineComponent<SparklineProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<SparklineProps> & Readonly<{}>, {
31
+ variant: "line" | "area";
32
+ unstyled: boolean;
33
+ data: readonly SparseValue[];
34
+ height: number;
35
+ baseline: "min" | "zero";
36
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
37
+ declare const _default: typeof __VLS_export;
38
+ export default _default;
@@ -0,0 +1,110 @@
1
+ import { useIryxUiConfig as e } from "../config.js";
2
+ import { extent as t, linearScale as n } from "../composables/scale.js";
3
+ import { sparklineTheme as r } from "../theme/sparkline.js";
4
+ import { Fragment as i, computed as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, defineComponent as l, normalizeClass as u, normalizeStyle as d, openBlock as f, renderList as p } from "vue";
5
+ //#region src/components/Sparkline.vue?vue&type=script&setup=true&lang.ts
6
+ var m = [
7
+ "viewBox",
8
+ "height",
9
+ "role",
10
+ "aria-label",
11
+ "aria-hidden"
12
+ ], h = ["d"], g = ["d"], _ = ["d"], v = ["d"], y = 100, b = /*@__PURE__*/ l({
13
+ __name: "Sparkline",
14
+ props: {
15
+ data: { default: () => [] },
16
+ variant: { default: "line" },
17
+ endDot: { type: Boolean },
18
+ baseline: { default: "min" },
19
+ min: {},
20
+ max: {},
21
+ muted: { type: Boolean },
22
+ label: {},
23
+ height: { default: 32 },
24
+ unstyled: {
25
+ type: Boolean,
26
+ default: void 0
27
+ },
28
+ class: {},
29
+ ui: {}
30
+ },
31
+ setup(l) {
32
+ let b = l, x = e(), S = a(() => b.unstyled ?? x.unstyled), C = a(() => b.endDot ? 6 : 1), w = a(() => Math.max(b.height - C.value * 2, 1)), T = a(() => {
33
+ let e = b.data, r = t(e);
34
+ if (!r) return [];
35
+ let [i, a] = r, o = b.min ?? i, s = b.max ?? a, c = n([0, Math.max(e.length - 1, 0)], [0, y]), l = n([o, s], [y, 0]), u = [], d = [];
36
+ return e.forEach((e, t) => {
37
+ if (typeof e != "number" || !Number.isFinite(e)) {
38
+ d.length && u.push(d), d = [];
39
+ return;
40
+ }
41
+ d.push({
42
+ x: E(c(t)),
43
+ y: E(l(e))
44
+ });
45
+ }), d.length && u.push(d), u;
46
+ });
47
+ function E(e) {
48
+ return Math.round(e * 100) / 100;
49
+ }
50
+ function D(e) {
51
+ return e.map((e, t) => `${t === 0 ? "M" : "L"}${e.x} ${e.y}`).join(" ");
52
+ }
53
+ let O = a(() => {
54
+ let e = t(b.data);
55
+ if (!e) return y;
56
+ let r = b.min ?? e[0], i = b.max ?? e[1];
57
+ return b.baseline === "zero" && r <= 0 && i >= 0 ? E(n([r, i], [y, 0])(0)) : y;
58
+ });
59
+ function k(e) {
60
+ let t = e[0], n = e[e.length - 1];
61
+ return `${D(e)} L${n.x} ${O.value} L${t.x} ${O.value} Z`;
62
+ }
63
+ let A = a(() => {
64
+ let e = T.value[T.value.length - 1];
65
+ return e?.[e.length - 1];
66
+ }), j = a(() => r({ muted: b.muted }));
67
+ function M(e, t) {
68
+ let n = b.ui?.[e];
69
+ return S.value ? [n, t] : j.value[e]({ class: [n, t] });
70
+ }
71
+ return (e, t) => (f(), s("span", {
72
+ class: u(M("root", b.class)),
73
+ style: d({ padding: `${C.value}px` })
74
+ }, [(f(), s("svg", {
75
+ viewBox: `0 0 ${y} ${y}`,
76
+ preserveAspectRatio: "none",
77
+ height: w.value,
78
+ style: d({ height: `${w.value}px` }),
79
+ role: b.label ? "img" : void 0,
80
+ "aria-label": b.label,
81
+ "aria-hidden": b.label ? void 0 : !0,
82
+ class: u(M("plot"))
83
+ }, [
84
+ b.variant === "area" ? (f(!0), s(i, { key: 0 }, p(T.value, (e, t) => (f(), s("path", {
85
+ key: `area-${t}`,
86
+ d: k(e),
87
+ class: u(M("area"))
88
+ }, null, 10, h))), 128)) : o("", !0),
89
+ (f(!0), s(i, null, p(T.value, (e, t) => (f(), s("path", {
90
+ key: `line-${t}`,
91
+ d: D(e),
92
+ "vector-effect": "non-scaling-stroke",
93
+ class: u(M("line"))
94
+ }, null, 10, g))), 128)),
95
+ b.endDot && A.value ? (f(), s(i, { key: 1 }, [c("path", {
96
+ d: `M${A.value.x} ${A.value.y} L${A.value.x} ${A.value.y}`,
97
+ "stroke-width": "12",
98
+ "vector-effect": "non-scaling-stroke",
99
+ class: u(M("ring"))
100
+ }, null, 10, _), c("path", {
101
+ d: `M${A.value.x} ${A.value.y} L${A.value.x} ${A.value.y}`,
102
+ "stroke-width": "8",
103
+ "vector-effect": "non-scaling-stroke",
104
+ class: u(M("dot"))
105
+ }, null, 10, v)], 64)) : o("", !0)
106
+ ], 14, m))], 6));
107
+ }
108
+ });
109
+ //#endregion
110
+ export { b as default };
@@ -1,4 +1,4 @@
1
- import { ArrowDown01Icon as e, ArrowRight01Icon as t, ArrowUp01Icon as n } from "../../../../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
1
+ import { ArrowDown01Icon as e, ArrowRight01Icon as t, ArrowUp01Icon as n } from "../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
2
2
  import { useIryxUiConfig as r } from "../config.js";
3
3
  import i from "./Icon.js";
4
4
  import { statTheme as a } from "../theme/stat.js";
@@ -1,4 +1,4 @@
1
- import { Tick02Icon as e } from "../../../../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
1
+ import { Tick02Icon as e } from "../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
2
2
  import { useIryxUiConfig as t } from "../config.js";
3
3
  import n from "./Icon.js";
4
4
  import { stepperTheme as r } from "../theme/stepper.js";
@@ -1,4 +1,4 @@
1
- import { ArrowDown01Icon as e, ArrowRight01Icon as t, ArrowUp01Icon as n, UnfoldMoreIcon as r } from "../../../../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
1
+ import { ArrowDown01Icon as e, ArrowRight01Icon as t, ArrowUp01Icon as n, UnfoldMoreIcon as r } from "../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
2
2
  import { useIryxUiConfig as i } from "../config.js";
3
3
  import a from "./Icon.js";
4
4
  import o from "./Checkbox.js";
@@ -1,4 +1,4 @@
1
- import { Alert02Icon as e, AlertCircleIcon as t, Cancel01Icon as n, CheckmarkCircle02Icon as r, InformationCircleIcon as i } from "../../../../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
1
+ import { Alert02Icon as e, AlertCircleIcon as t, Cancel01Icon as n, CheckmarkCircle02Icon as r, InformationCircleIcon as i } from "../node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js";
2
2
  import { useIryxUiConfig as a } from "../config.js";
3
3
  import o from "./Icon.js";
4
4
  import { useToast as s, useToastState as c } from "../composables/toast.js";
@@ -2,10 +2,12 @@ export { default as Alert } from './Alert.vue';
2
2
  export { default as App } from './App.vue';
3
3
  export { default as Badge } from './Badge.vue';
4
4
  export { default as Banner } from './Banner.vue';
5
+ export { default as BarChart } from './BarChart.vue';
5
6
  export { default as Breadcrumb } from './Breadcrumb.vue';
6
7
  export { default as Button } from './Button.vue';
7
8
  export { default as ButtonGroup } from './ButtonGroup.vue';
8
9
  export { default as Card } from './Card.vue';
10
+ export { default as ChartLegend } from './ChartLegend.vue';
9
11
  export { default as Checkbox } from './Checkbox.vue';
10
12
  export { default as Combobox } from './Combobox.vue';
11
13
  export { default as ConfirmDialog } from './ConfirmDialog.vue';
@@ -19,6 +21,7 @@ export { default as Form } from './Form.vue';
19
21
  export { default as FormField } from './FormField.vue';
20
22
  export { default as Input } from './Input.vue';
21
23
  export { default as Label } from './Label.vue';
24
+ export { default as LineChart } from './LineChart.vue';
22
25
  export { default as NumberInput } from './NumberInput.vue';
23
26
  export { default as Pagination } from './Pagination.vue';
24
27
  export { default as PasswordInput } from './PasswordInput.vue';
@@ -27,6 +30,7 @@ export { default as RadioGroup } from './RadioGroup.vue';
27
30
  export { default as Select } from './Select.vue';
28
31
  export { default as Separator } from './Separator.vue';
29
32
  export { default as Skeleton } from './Skeleton.vue';
33
+ export { default as Sparkline } from './Sparkline.vue';
30
34
  export { default as Stat } from './Stat.vue';
31
35
  export { default as Stepper } from './Stepper.vue';
32
36
  export { default as Switch } from './Switch.vue';
@@ -0,0 +1,88 @@
1
+ import { __exportAll as e } from "../_virtual/_rolldown/runtime.js";
2
+ import t from "./Alert.js";
3
+ import n from "./App.js";
4
+ import r from "./Badge.js";
5
+ import i from "./Banner.js";
6
+ import a from "./ChartLegend.js";
7
+ import o from "./BarChart.js";
8
+ import s from "./Breadcrumb.js";
9
+ import c from "./Button.js";
10
+ import l from "./ButtonGroup.js";
11
+ import u from "./Card.js";
12
+ import d from "./Checkbox.js";
13
+ import f from "./Combobox.js";
14
+ import p from "./Dialog.js";
15
+ import m from "./ConfirmDialog.js";
16
+ import h from "./DatePicker.js";
17
+ import g from "./DateRangePicker.js";
18
+ import _ from "./DropdownMenu.js";
19
+ import v from "./EmptyState.js";
20
+ import y from "./FileUpload.js";
21
+ import b from "./Form.js";
22
+ import x from "./Label.js";
23
+ import S from "./FormField.js";
24
+ import C from "./Input.js";
25
+ import w from "./LineChart.js";
26
+ import T from "./NumberInput.js";
27
+ import E from "./Pagination.js";
28
+ import D from "./PasswordInput.js";
29
+ import O from "./Progress.js";
30
+ import k from "./RadioGroup.js";
31
+ import A from "./Select.js";
32
+ import j from "./Separator.js";
33
+ import M from "./Skeleton.js";
34
+ import N from "./Sparkline.js";
35
+ import P from "./Stat.js";
36
+ import F from "./Stepper.js";
37
+ import I from "./Switch.js";
38
+ import L from "./Table.js";
39
+ import R from "./Tabs.js";
40
+ import z from "./Textarea.js";
41
+ import B from "./Toaster.js";
42
+ import V from "./Tooltip.js";
43
+ //#region src/components/index.ts
44
+ var H = /* @__PURE__ */ e({
45
+ Alert: () => t,
46
+ App: () => n,
47
+ Badge: () => r,
48
+ Banner: () => i,
49
+ BarChart: () => o,
50
+ Breadcrumb: () => s,
51
+ Button: () => c,
52
+ ButtonGroup: () => l,
53
+ Card: () => u,
54
+ ChartLegend: () => a,
55
+ Checkbox: () => d,
56
+ Combobox: () => f,
57
+ ConfirmDialog: () => m,
58
+ DatePicker: () => h,
59
+ DateRangePicker: () => g,
60
+ Dialog: () => p,
61
+ DropdownMenu: () => _,
62
+ EmptyState: () => v,
63
+ FileUpload: () => y,
64
+ Form: () => b,
65
+ FormField: () => S,
66
+ Input: () => C,
67
+ Label: () => x,
68
+ LineChart: () => w,
69
+ NumberInput: () => T,
70
+ Pagination: () => E,
71
+ PasswordInput: () => D,
72
+ Progress: () => O,
73
+ RadioGroup: () => k,
74
+ Select: () => A,
75
+ Separator: () => j,
76
+ Skeleton: () => M,
77
+ Sparkline: () => N,
78
+ Stat: () => P,
79
+ Stepper: () => F,
80
+ Switch: () => I,
81
+ Table: () => L,
82
+ Tabs: () => R,
83
+ Textarea: () => z,
84
+ Toaster: () => B,
85
+ Tooltip: () => V
86
+ });
87
+ //#endregion
88
+ export { H as components_exports };