@incursa/ui-kit 1.7.0 → 1.9.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 (51) hide show
  1. package/NOTICE +8 -0
  2. package/README.md +18 -0
  3. package/dist/icons/index.js +371 -0
  4. package/dist/icons/package.json +3 -0
  5. package/dist/inc-design-language.css +115 -1
  6. package/dist/inc-design-language.css.map +1 -1
  7. package/dist/inc-design-language.js +1558 -1462
  8. package/dist/inc-design-language.min.css +1 -1
  9. package/dist/inc-design-language.min.css.map +1 -1
  10. package/dist/mcp/components/cards.json +3 -3
  11. package/dist/mcp/components/metrics.json +3 -3
  12. package/dist/mcp/components/states.json +3 -3
  13. package/dist/mcp/examples/data-grid-advanced.json +2 -2
  14. package/dist/mcp/examples/demo.json +2 -2
  15. package/dist/mcp/examples/overlay-workflows.json +2 -2
  16. package/dist/mcp/examples/reference.json +2 -2
  17. package/dist/mcp/examples/states.json +2 -2
  18. package/dist/mcp/examples/web-components.json +2 -2
  19. package/dist/mcp/guides/allowed-web-component-families.json +2 -2
  20. package/dist/mcp/guides/latest.json +2 -2
  21. package/dist/mcp/guides/package-metadata.json +2 -2
  22. package/dist/mcp/guides/update.json +2 -2
  23. package/dist/mcp/install.json +1 -1
  24. package/dist/mcp/patterns/data-grid-advanced.json +2 -2
  25. package/dist/mcp/patterns/demo.json +2 -2
  26. package/dist/mcp/patterns/overlay-workflows.json +2 -2
  27. package/dist/mcp/patterns/reference.json +2 -2
  28. package/dist/mcp/patterns/states.json +2 -2
  29. package/dist/mcp/patterns/web-components.json +2 -2
  30. package/dist/mcp/resources.json +81 -78
  31. package/dist/mcp/search-index.json +22 -22
  32. package/dist/mcp/update.json +2 -2
  33. package/dist/mcp/worker.mjs +331 -286
  34. package/dist/mcp/worker.mjs.map +2 -2
  35. package/dist/web-components/README.md +7 -0
  36. package/dist/web-components/RUNTIME-NOTES.md +2 -0
  37. package/dist/web-components/components/actions.js +149 -2
  38. package/dist/web-components/components/feedback.js +63 -12
  39. package/dist/web-components/components/visualizations.js +629 -0
  40. package/dist/web-components/index.js +3642 -139
  41. package/package.json +13 -3
  42. package/src/icons/index.js +229 -0
  43. package/src/icons/package.json +3 -0
  44. package/src/inc-design-language.js +12 -11
  45. package/src/inc-design-language.scss +132 -1
  46. package/src/web-components/README.md +7 -0
  47. package/src/web-components/RUNTIME-NOTES.md +2 -0
  48. package/src/web-components/components/actions.js +149 -2
  49. package/src/web-components/components/feedback.js +63 -12
  50. package/src/web-components/components/visualizations.js +629 -0
  51. package/src/web-components/index.js +8 -0
package/NOTICE CHANGED
@@ -2,3 +2,11 @@ Incursa UI Kit
2
2
  Copyright 2026 Incursa
3
3
 
4
4
  This product includes software developed and maintained by Incursa.
5
+
6
+ Lucide
7
+ Copyright (c) 2026 Lucide Icons and Contributors
8
+ Licensed under the ISC License.
9
+
10
+ Some Lucide icons are derived from Feather icons.
11
+ Copyright (c) 2013-present Cole Bemis
12
+ Licensed under the MIT License.
package/README.md CHANGED
@@ -38,6 +38,7 @@ The v1 Web Component scope covers:
38
38
  - forms and inputs: [`inc-field`](reference.html), [`inc-input-group`](reference.html), [`inc-choice-group`](reference.html), [`inc-readonly-field`](reference.html), [`inc-validation-summary`](reference.html)
39
39
  - feedback and status: [`inc-state-panel`](reference.html), [`inc-live-region`](reference.html), [`inc-auto-refresh`](reference.html), [`inc-theme-switcher`](reference.html), [`inc-badge`](reference.html), [`inc-spinner`](reference.html)
40
40
  - actions and detail shells: [`inc-button`](reference.html), [`inc-button-group`](reference.html), [`inc-button-toolbar`](reference.html), [`inc-close-button`](reference.html), [`inc-alert`](reference.html), [`inc-empty-state`](reference.html), [`inc-list-group`](reference.html), [`inc-key-value-grid`](reference.html), [`inc-key-value`](reference.html)
41
+ - data visualization: [`inc-sparkline`](reference.html)
41
42
  - overlays and disclosures: [`inc-disclosure`](reference.html), [`inc-dialog`](reference.html), [`inc-drawer`](reference.html)
42
43
 
43
44
  The intentionally deferred surfaces stay CSS-first in v1, including tables and the remaining data presentation surfaces, filter and bulk toolbars, file workflows, permission banners, toasts, utility helpers, and the remaining compatibility overlay shells.
@@ -326,12 +327,29 @@ There are three supported ways to use it.
326
327
  - Keep the CSS bundle in place because the custom elements are designed to sit on top of the same class and token vocabulary.
327
328
  - Prefer this layer for declarative shell components, standardized atomic controls, and repeated action/detail or collection hosts, and keep static tables plus the remaining low-value atoms on the CSS surface.
328
329
 
330
+ ### Icons
331
+
332
+ Incursa components use semantic icon names instead of Lucide component names. The default renderer maps names such as `info`, `help`, `success`, `warning`, `error`, `upload`, `document`, `download`, `settings`, and `external-link` to bundled Lucide SVGs.
333
+
334
+ Use `data-inc-icon="warning"` in CSS-first markup loaded with `dist/inc-design-language.js`, or use component attributes such as `<inc-alert tone="warning">` and `<inc-button icon="download">Download</inc-button>` in the Web Component layer. Decorative package icons are rendered with `aria-hidden="true"`; icon-only controls still need an accessible label.
335
+
336
+ Consumers can replace the global renderer without depending on Lucide names:
337
+
338
+ ```js
339
+ import { setIconRenderer } from "@incursa/ui-kit/icons";
340
+
341
+ setIconRenderer((name, options) => {
342
+ // Return an SVG/HTMLElement or an SVG string for the semantic Incursa name.
343
+ });
344
+ ```
345
+
329
346
  Practical recommendation for a .NET Razor Pages or MVC app:
330
347
 
331
348
  - If you just want the finished look, copy or install the package and reference [`dist/inc-design-language.css`](dist/inc-design-language.css) from your layout.
332
349
  - Add [`dist/inc-design-language.js`](dist/inc-design-language.js) if you want the optional [`inc-*`](reference.html) menu/tab/collapse helper behavior or the bundled theme switcher helper.
333
350
  - Add the same-package `./web-components` entrypoint when you want declarative custom elements for the supported v1 component families. Pair it with `./web-components/style.css` for the default look.
334
351
  - Use the native `<details>` and `<dialog>` patterns when you want less JavaScript.
352
+ - Use `<inc-sparkline>` for compact trend evidence beside surrounding metric text. It accepts `values="5120,5400,5310"` for static pages or a `points` property with `{ x, y }` objects for timestamped data.
335
353
  - Use the SCSS source path only if you want this package to become part of your app's own asset build and theme pipeline.
336
354
 
337
355
  ## GitHub repository
@@ -0,0 +1,371 @@
1
+ // node_modules/lucide/dist/esm/defaultAttributes.mjs
2
+ var defaultAttributes = {
3
+ xmlns: "http://www.w3.org/2000/svg",
4
+ width: 24,
5
+ height: 24,
6
+ viewBox: "0 0 24 24",
7
+ fill: "none",
8
+ stroke: "currentColor",
9
+ "stroke-width": 2,
10
+ "stroke-linecap": "round",
11
+ "stroke-linejoin": "round"
12
+ };
13
+
14
+ // node_modules/lucide/dist/esm/createElement.mjs
15
+ var createSVGElement = ([tag, attrs, children]) => {
16
+ const element = document.createElementNS("http://www.w3.org/2000/svg", tag);
17
+ Object.keys(attrs).forEach((name) => {
18
+ element.setAttribute(name, String(attrs[name]));
19
+ });
20
+ if (children?.length) {
21
+ children.forEach((child) => {
22
+ const childElement = createSVGElement(child);
23
+ element.appendChild(childElement);
24
+ });
25
+ }
26
+ return element;
27
+ };
28
+ var createElement = (iconNode, customAttrs = {}) => {
29
+ const tag = "svg";
30
+ const attrs = {
31
+ ...defaultAttributes,
32
+ ...customAttrs
33
+ };
34
+ return createSVGElement([tag, attrs, iconNode]);
35
+ };
36
+
37
+ // node_modules/lucide/dist/esm/icons/circle-check.mjs
38
+ var CircleCheck = [
39
+ ["circle", { cx: "12", cy: "12", r: "10" }],
40
+ ["path", { d: "m9 12 2 2 4-4" }]
41
+ ];
42
+
43
+ // node_modules/lucide/dist/esm/icons/circle-question-mark.mjs
44
+ var CircleQuestionMark = [
45
+ ["circle", { cx: "12", cy: "12", r: "10" }],
46
+ ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }],
47
+ ["path", { d: "M12 17h.01" }]
48
+ ];
49
+
50
+ // node_modules/lucide/dist/esm/icons/circle-x.mjs
51
+ var CircleX = [
52
+ ["circle", { cx: "12", cy: "12", r: "10" }],
53
+ ["path", { d: "m15 9-6 6" }],
54
+ ["path", { d: "m9 9 6 6" }]
55
+ ];
56
+
57
+ // node_modules/lucide/dist/esm/icons/download.mjs
58
+ var Download = [
59
+ ["path", { d: "M12 15V3" }],
60
+ ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }],
61
+ ["path", { d: "m7 10 5 5 5-5" }]
62
+ ];
63
+
64
+ // node_modules/lucide/dist/esm/icons/external-link.mjs
65
+ var ExternalLink = [
66
+ ["path", { d: "M15 3h6v6" }],
67
+ ["path", { d: "M10 14 21 3" }],
68
+ ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }]
69
+ ];
70
+
71
+ // node_modules/lucide/dist/esm/icons/file-text.mjs
72
+ var FileText = [
73
+ [
74
+ "path",
75
+ {
76
+ d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"
77
+ }
78
+ ],
79
+ ["path", { d: "M14 2v5a1 1 0 0 0 1 1h5" }],
80
+ ["path", { d: "M10 9H8" }],
81
+ ["path", { d: "M16 13H8" }],
82
+ ["path", { d: "M16 17H8" }]
83
+ ];
84
+
85
+ // node_modules/lucide/dist/esm/icons/folder-plus.mjs
86
+ var FolderPlus = [
87
+ ["path", { d: "M12 10v6" }],
88
+ ["path", { d: "M9 13h6" }],
89
+ [
90
+ "path",
91
+ {
92
+ d: "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"
93
+ }
94
+ ]
95
+ ];
96
+
97
+ // node_modules/lucide/dist/esm/icons/info.mjs
98
+ var Info = [
99
+ ["circle", { cx: "12", cy: "12", r: "10" }],
100
+ ["path", { d: "M12 16v-4" }],
101
+ ["path", { d: "M12 8h.01" }]
102
+ ];
103
+
104
+ // node_modules/lucide/dist/esm/icons/lock.mjs
105
+ var Lock = [
106
+ ["rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2" }],
107
+ ["path", { d: "M7 11V7a5 5 0 0 1 10 0v4" }]
108
+ ];
109
+
110
+ // node_modules/lucide/dist/esm/icons/pause.mjs
111
+ var Pause = [
112
+ ["rect", { x: "14", y: "3", width: "5", height: "18", rx: "1" }],
113
+ ["rect", { x: "5", y: "3", width: "5", height: "18", rx: "1" }]
114
+ ];
115
+
116
+ // node_modules/lucide/dist/esm/icons/play.mjs
117
+ var Play = [
118
+ [
119
+ "path",
120
+ { d: "M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z" }
121
+ ]
122
+ ];
123
+
124
+ // node_modules/lucide/dist/esm/icons/refresh-cw.mjs
125
+ var RefreshCw = [
126
+ ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" }],
127
+ ["path", { d: "M21 3v5h-5" }],
128
+ ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" }],
129
+ ["path", { d: "M8 16H3v5" }]
130
+ ];
131
+
132
+ // node_modules/lucide/dist/esm/icons/search-x.mjs
133
+ var SearchX = [
134
+ ["path", { d: "m13.5 8.5-5 5" }],
135
+ ["path", { d: "m8.5 8.5 5 5" }],
136
+ ["circle", { cx: "11", cy: "11", r: "8" }],
137
+ ["path", { d: "m21 21-4.3-4.3" }]
138
+ ];
139
+
140
+ // node_modules/lucide/dist/esm/icons/settings.mjs
141
+ var Settings = [
142
+ [
143
+ "path",
144
+ {
145
+ d: "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"
146
+ }
147
+ ],
148
+ ["circle", { cx: "12", cy: "12", r: "3" }]
149
+ ];
150
+
151
+ // node_modules/lucide/dist/esm/icons/shield-check.mjs
152
+ var ShieldCheck = [
153
+ [
154
+ "path",
155
+ {
156
+ d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"
157
+ }
158
+ ],
159
+ ["path", { d: "m9 12 2 2 4-4" }]
160
+ ];
161
+
162
+ // node_modules/lucide/dist/esm/icons/triangle-alert.mjs
163
+ var TriangleAlert = [
164
+ ["path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }],
165
+ ["path", { d: "M12 9v4" }],
166
+ ["path", { d: "M12 17h.01" }]
167
+ ];
168
+
169
+ // node_modules/lucide/dist/esm/icons/upload.mjs
170
+ var Upload = [
171
+ ["path", { d: "M12 3v12" }],
172
+ ["path", { d: "m17 8-5-5-5 5" }],
173
+ ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }]
174
+ ];
175
+
176
+ // src/icons/index.js
177
+ var ICON_NODES = Object.freeze({
178
+ info: Info,
179
+ help: CircleQuestionMark,
180
+ success: CircleCheck,
181
+ warning: TriangleAlert,
182
+ error: CircleX,
183
+ upload: Upload,
184
+ document: FileText,
185
+ download: Download,
186
+ settings: Settings,
187
+ "external-link": ExternalLink,
188
+ empty: FolderPlus,
189
+ "no-results": SearchX,
190
+ loading: RefreshCw,
191
+ lock: Lock,
192
+ pause: Pause,
193
+ play: Play,
194
+ permission: ShieldCheck
195
+ });
196
+ var ICON_NAMES = Object.freeze(Object.keys(ICON_NODES));
197
+ var DEFAULT_SIZE = 16;
198
+ function getNamespace() {
199
+ if (typeof globalThis === "undefined") {
200
+ return null;
201
+ }
202
+ const root = globalThis.IncWebComponents || (globalThis.IncWebComponents = {});
203
+ const icons = root.icons || (root.icons = {});
204
+ if (!icons.names) {
205
+ icons.names = ICON_NAMES;
206
+ }
207
+ if (!icons.defaultRenderer) {
208
+ icons.defaultRenderer = renderDefaultIcon;
209
+ }
210
+ if (!icons.render) {
211
+ icons.render = renderIncIcon;
212
+ }
213
+ if (!icons.setRenderer) {
214
+ icons.setRenderer = setIconRenderer;
215
+ }
216
+ return icons;
217
+ }
218
+ function normalizeIconName(name) {
219
+ return String(name || "").trim().toLowerCase().replace(/[_\s]+/g, "-");
220
+ }
221
+ function normalizeSize(value) {
222
+ const parsed = Number.parseFloat(value);
223
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_SIZE;
224
+ }
225
+ function buildIconAttributes(name, options = {}) {
226
+ const size = normalizeSize(options.size);
227
+ const className = options.className || "inc-icon";
228
+ const attrs = {
229
+ width: size,
230
+ height: size,
231
+ "data-inc-icon": name,
232
+ class: className,
233
+ focusable: "false"
234
+ };
235
+ if (options.decorative !== false) {
236
+ attrs["aria-hidden"] = "true";
237
+ } else {
238
+ attrs.role = "img";
239
+ attrs["aria-label"] = options.label || name;
240
+ }
241
+ return attrs;
242
+ }
243
+ function renderDefaultIcon(name, options = {}) {
244
+ const normalizedName = normalizeIconName(name);
245
+ const iconNode = ICON_NODES[normalizedName] || ICON_NODES.info;
246
+ if (typeof document === "undefined") {
247
+ return "";
248
+ }
249
+ return createElement(iconNode, buildIconAttributes(normalizedName, options));
250
+ }
251
+ function coerceIconResult(result) {
252
+ if (!result || typeof document === "undefined") {
253
+ return null;
254
+ }
255
+ if (result instanceof Node) {
256
+ return result;
257
+ }
258
+ if (typeof result === "string") {
259
+ const template = document.createElement("template");
260
+ template.innerHTML = result.trim();
261
+ return template.content.firstElementChild || null;
262
+ }
263
+ return null;
264
+ }
265
+ function getIconRenderer() {
266
+ const namespace = getNamespace();
267
+ return typeof namespace?.renderer === "function" ? namespace.renderer : renderDefaultIcon;
268
+ }
269
+ function setIconRenderer(renderer) {
270
+ const namespace = getNamespace();
271
+ if (!namespace) {
272
+ return null;
273
+ }
274
+ if (renderer == null) {
275
+ delete namespace.renderer;
276
+ return null;
277
+ }
278
+ if (typeof renderer !== "function") {
279
+ throw new TypeError("Inc icon renderer must be a function.");
280
+ }
281
+ namespace.renderer = renderer;
282
+ return renderer;
283
+ }
284
+ function renderIncIcon(name, options = {}) {
285
+ const normalizedName = normalizeIconName(name) || "info";
286
+ const renderer = getIconRenderer();
287
+ const rendered = renderer(normalizedName, options);
288
+ const icon = coerceIconResult(rendered) || coerceIconResult(renderDefaultIcon(normalizedName, options));
289
+ if (icon instanceof Element && options.decorative !== false) {
290
+ icon.setAttribute("aria-hidden", "true");
291
+ icon.removeAttribute("aria-label");
292
+ icon.removeAttribute("role");
293
+ }
294
+ return icon;
295
+ }
296
+ function replaceIconContents(container, name, options = {}) {
297
+ if (!(container instanceof Element)) {
298
+ return null;
299
+ }
300
+ container.replaceChildren();
301
+ const icon = renderIncIcon(name, options);
302
+ if (icon) {
303
+ icon.setAttribute("data-inc-generated-icon", "true");
304
+ icon.setAttribute("data-inc-icon-upgraded", "true");
305
+ container.append(icon);
306
+ }
307
+ return icon;
308
+ }
309
+ function upgradeIconPlaceholders(root = typeof document !== "undefined" ? document : null) {
310
+ if (!root || typeof root.querySelectorAll !== "function") {
311
+ return [];
312
+ }
313
+ const upgraded = [];
314
+ root.querySelectorAll("[data-inc-icon]").forEach((node) => {
315
+ if (!(node instanceof Element)) {
316
+ return;
317
+ }
318
+ const name = node.getAttribute("data-inc-icon");
319
+ if (!name || node.hasAttribute("data-inc-icon-upgraded") || node.hasAttribute("data-inc-generated-icon")) {
320
+ return;
321
+ }
322
+ replaceIconContents(node, name, {
323
+ className: node.getAttribute("data-inc-icon-class") || "inc-icon",
324
+ decorative: node.getAttribute("aria-hidden") !== "false",
325
+ label: node.getAttribute("aria-label") || void 0,
326
+ size: node.getAttribute("data-inc-icon-size") || void 0
327
+ });
328
+ node.setAttribute("data-inc-icon-upgraded", "true");
329
+ upgraded.push(node);
330
+ });
331
+ return upgraded;
332
+ }
333
+ getNamespace();
334
+ export {
335
+ getIconRenderer,
336
+ ICON_NAMES as incIconNames,
337
+ normalizeIconName,
338
+ renderDefaultIcon,
339
+ renderIncIcon,
340
+ replaceIconContents,
341
+ setIconRenderer,
342
+ upgradeIconPlaceholders
343
+ };
344
+ /*! Bundled license information:
345
+
346
+ lucide/dist/esm/defaultAttributes.mjs:
347
+ lucide/dist/esm/createElement.mjs:
348
+ lucide/dist/esm/icons/circle-check.mjs:
349
+ lucide/dist/esm/icons/circle-question-mark.mjs:
350
+ lucide/dist/esm/icons/circle-x.mjs:
351
+ lucide/dist/esm/icons/download.mjs:
352
+ lucide/dist/esm/icons/external-link.mjs:
353
+ lucide/dist/esm/icons/file-text.mjs:
354
+ lucide/dist/esm/icons/folder-plus.mjs:
355
+ lucide/dist/esm/icons/info.mjs:
356
+ lucide/dist/esm/icons/lock.mjs:
357
+ lucide/dist/esm/icons/pause.mjs:
358
+ lucide/dist/esm/icons/play.mjs:
359
+ lucide/dist/esm/icons/refresh-cw.mjs:
360
+ lucide/dist/esm/icons/search-x.mjs:
361
+ lucide/dist/esm/icons/settings.mjs:
362
+ lucide/dist/esm/icons/shield-check.mjs:
363
+ lucide/dist/esm/icons/triangle-alert.mjs:
364
+ lucide/dist/esm/icons/upload.mjs:
365
+ (**
366
+ * @license lucide v1.17.0 - ISC
367
+ *
368
+ * This source code is licensed under the ISC license.
369
+ * See the LICENSE file in the root directory of this source tree.
370
+ *)
371
+ */
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -12534,6 +12534,12 @@ textarea.form-control-lg, textarea.inc-form__control--lg {
12534
12534
  overflow: hidden !important;
12535
12535
  }
12536
12536
 
12537
+ .inc-icon {
12538
+ display: block;
12539
+ flex: 0 0 auto;
12540
+ stroke: currentColor;
12541
+ }
12542
+
12537
12543
  .inc-btn {
12538
12544
  display: inline-flex;
12539
12545
  align-items: center;
@@ -12542,6 +12548,14 @@ textarea.form-control-lg, textarea.inc-form__control--lg {
12542
12548
  vertical-align: middle;
12543
12549
  transition: color 0.18s ease, background-color 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
12544
12550
  }
12551
+ .inc-btn__icon {
12552
+ display: inline-flex;
12553
+ align-items: center;
12554
+ justify-content: center;
12555
+ width: 1rem;
12556
+ height: 1rem;
12557
+ flex: 0 0 auto;
12558
+ }
12545
12559
  .inc-btn--secondary {
12546
12560
  --bs-btn-color: var(--inc-surface-contrast-text);
12547
12561
  --bs-btn-bg: var(--inc-surface-contrast);
@@ -12673,6 +12687,16 @@ textarea.form-control-lg, textarea.inc-form__control--lg {
12673
12687
  .inc-alert:empty {
12674
12688
  display: none;
12675
12689
  }
12690
+ .inc-alert__icon {
12691
+ display: inline-flex;
12692
+ align-items: center;
12693
+ justify-content: center;
12694
+ width: 1.125rem;
12695
+ height: 1.125rem;
12696
+ margin-inline-end: 0.5rem;
12697
+ vertical-align: -0.2em;
12698
+ color: currentColor;
12699
+ }
12676
12700
  .inc-alert__progress {
12677
12701
  position: absolute;
12678
12702
  inset-inline: 0;
@@ -12961,6 +12985,11 @@ textarea.form-control-lg, textarea.inc-form__control--lg {
12961
12985
  align-items: center;
12962
12986
  justify-content: center;
12963
12987
  }
12988
+ .inc-empty-state__icon svg {
12989
+ display: block;
12990
+ width: 2.125rem;
12991
+ height: 2.125rem;
12992
+ }
12964
12993
  .inc-empty-state__form {
12965
12994
  margin-top: 1.5rem;
12966
12995
  width: 100%;
@@ -14532,7 +14561,6 @@ dialog.inc-native-dialog.inc-native-dialog--drawer .inc-native-dialog__body {
14532
14561
  display: block;
14533
14562
  width: 1rem;
14534
14563
  height: 1rem;
14535
- fill: currentColor;
14536
14564
  }
14537
14565
  .inc-auto-refresh__toggle-text {
14538
14566
  width: 1px !important;
@@ -14639,6 +14667,87 @@ dialog.inc-native-dialog.inc-native-dialog--drawer .inc-native-dialog__body {
14639
14667
  border-radius: inherit;
14640
14668
  }
14641
14669
 
14670
+ .inc-sparkline {
14671
+ --inc-sparkline-stroke: var(--inc-text-secondary);
14672
+ --inc-sparkline-fill: rgba(var(--inc-text-secondary-rgb), 0.12);
14673
+ --inc-sparkline-marker: var(--inc-sparkline-stroke);
14674
+ --inc-sparkline-reference: rgba(var(--inc-text-muted-rgb), 0.68);
14675
+ --inc-sparkline-muted: rgba(var(--inc-text-muted-rgb), 0.54);
14676
+ display: inline-flex;
14677
+ align-items: center;
14678
+ justify-content: center;
14679
+ inline-size: var(--inc-sparkline-width, 7.5rem);
14680
+ block-size: var(--inc-sparkline-height, 2rem);
14681
+ min-inline-size: 1rem;
14682
+ min-block-size: 1rem;
14683
+ vertical-align: middle;
14684
+ color: var(--inc-sparkline-stroke);
14685
+ contain: paint;
14686
+ }
14687
+ .inc-sparkline--tone-positive {
14688
+ --inc-sparkline-stroke: var(--bs-success);
14689
+ --inc-sparkline-fill: rgba(var(--bs-success-rgb), 0.16);
14690
+ --inc-sparkline-marker: var(--bs-success-text-emphasis);
14691
+ }
14692
+ .inc-sparkline--tone-negative {
14693
+ --inc-sparkline-stroke: var(--bs-danger);
14694
+ --inc-sparkline-fill: rgba(var(--bs-danger-rgb), 0.14);
14695
+ --inc-sparkline-marker: var(--bs-danger-text-emphasis);
14696
+ }
14697
+ .inc-sparkline--tone-muted {
14698
+ --inc-sparkline-stroke: var(--inc-text-muted);
14699
+ --inc-sparkline-fill: rgba(var(--inc-text-muted-rgb), 0.1);
14700
+ --inc-sparkline-marker: var(--inc-text-secondary);
14701
+ }
14702
+ .inc-sparkline--tone-accent {
14703
+ --inc-sparkline-stroke: var(--bs-primary);
14704
+ --inc-sparkline-fill: rgba(var(--bs-primary-rgb), 0.14);
14705
+ --inc-sparkline-marker: var(--bs-primary);
14706
+ }
14707
+ .inc-sparkline__svg {
14708
+ display: block;
14709
+ inline-size: 100%;
14710
+ block-size: 100%;
14711
+ overflow: visible;
14712
+ }
14713
+ .inc-sparkline__line, .inc-sparkline__empty-line {
14714
+ fill: none;
14715
+ stroke: var(--inc-sparkline-stroke);
14716
+ stroke-width: 1.6;
14717
+ stroke-linecap: round;
14718
+ stroke-linejoin: round;
14719
+ }
14720
+ .inc-sparkline__area {
14721
+ fill: var(--inc-sparkline-fill);
14722
+ stroke: none;
14723
+ }
14724
+ .inc-sparkline__bar {
14725
+ fill: var(--inc-sparkline-stroke);
14726
+ opacity: 0.82;
14727
+ }
14728
+ .inc-sparkline__marker {
14729
+ fill: var(--inc-sparkline-marker);
14730
+ stroke: var(--inc-surface-primary);
14731
+ stroke-width: 1.5;
14732
+ }
14733
+ .inc-sparkline__reference {
14734
+ stroke: var(--inc-sparkline-reference);
14735
+ stroke-width: 1;
14736
+ stroke-dasharray: 3 3;
14737
+ }
14738
+ .inc-sparkline__empty-line {
14739
+ stroke: var(--inc-sparkline-muted);
14740
+ stroke-dasharray: 2 4;
14741
+ }
14742
+ .inc-sparkline__empty {
14743
+ fill: var(--inc-text-muted);
14744
+ font-family: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
14745
+ font-size: 0.625rem;
14746
+ font-weight: 600;
14747
+ letter-spacing: 0;
14748
+ pointer-events: none;
14749
+ }
14750
+
14642
14751
  .inc-alert-container {
14643
14752
  position: relative;
14644
14753
  width: 100%;
@@ -15477,6 +15586,11 @@ body.inc-offcanvas-open {
15477
15586
  font-weight: 700;
15478
15587
  flex: 0 0 auto;
15479
15588
  }
15589
+ .inc-state-panel__icon svg {
15590
+ display: block;
15591
+ width: 1.375rem;
15592
+ height: 1.375rem;
15593
+ }
15480
15594
  .inc-state-panel__title {
15481
15595
  margin: 0;
15482
15596
  font-size: 1.125rem;