@xpell/xdashboard 0.1.0-alpha.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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -0
  3. package/dist/index.cjs +1 -0
  4. package/dist/index.js +2844 -0
  5. package/dist/types/index.d.ts +3 -0
  6. package/dist/types/index.d.ts.map +1 -0
  7. package/dist/types/xbadge.d.ts +53 -0
  8. package/dist/types/xbadge.d.ts.map +1 -0
  9. package/dist/types/xcard.d.ts +72 -0
  10. package/dist/types/xcard.d.ts.map +1 -0
  11. package/dist/types/xcomp.d.ts +48 -0
  12. package/dist/types/xcomp.d.ts.map +1 -0
  13. package/dist/types/xdivider.d.ts +40 -0
  14. package/dist/types/xdivider.d.ts.map +1 -0
  15. package/dist/types/xdrawer.d.ts +69 -0
  16. package/dist/types/xdrawer.d.ts.map +1 -0
  17. package/dist/types/xempty.d.ts +51 -0
  18. package/dist/types/xempty.d.ts.map +1 -0
  19. package/dist/types/xfield.d.ts +68 -0
  20. package/dist/types/xfield.d.ts.map +1 -0
  21. package/dist/types/xgrid.d.ts +65 -0
  22. package/dist/types/xgrid.d.ts.map +1 -0
  23. package/dist/types/xigroup.d.ts +40 -0
  24. package/dist/types/xigroup.d.ts.map +1 -0
  25. package/dist/types/xkpicard.d.ts +52 -0
  26. package/dist/types/xkpicard.d.ts.map +1 -0
  27. package/dist/types/xmodal.d.ts +55 -0
  28. package/dist/types/xmodal.d.ts.map +1 -0
  29. package/dist/types/xnavlist.d.ts +52 -0
  30. package/dist/types/xnavlist.d.ts.map +1 -0
  31. package/dist/types/xscroll.d.ts +39 -0
  32. package/dist/types/xscroll.d.ts.map +1 -0
  33. package/dist/types/xsearch.d.ts +47 -0
  34. package/dist/types/xsearch.d.ts.map +1 -0
  35. package/dist/types/xsection.d.ts +40 -0
  36. package/dist/types/xsection.d.ts.map +1 -0
  37. package/dist/types/xselect.d.ts +44 -0
  38. package/dist/types/xselect.d.ts.map +1 -0
  39. package/dist/types/xsidebar.d.ts +81 -0
  40. package/dist/types/xsidebar.d.ts.map +1 -0
  41. package/dist/types/xsimp.d.ts +11 -0
  42. package/dist/types/xsimp.d.ts.map +1 -0
  43. package/dist/types/xspacer.d.ts +25 -0
  44. package/dist/types/xspacer.d.ts.map +1 -0
  45. package/dist/types/xstack.d.ts +51 -0
  46. package/dist/types/xstack.d.ts.map +1 -0
  47. package/dist/types/xtable.d.ts +75 -0
  48. package/dist/types/xtable.d.ts.map +1 -0
  49. package/dist/types/xtest.d.ts +16 -0
  50. package/dist/types/xtest.d.ts.map +1 -0
  51. package/dist/types/xtoast.d.ts +66 -0
  52. package/dist/types/xtoast.d.ts.map +1 -0
  53. package/dist/types/xtoolbar.d.ts +52 -0
  54. package/dist/types/xtoolbar.d.ts.map +1 -0
  55. package/dist/xdashboard.css +1 -0
  56. package/dist/xlogo.png +0 -0
  57. package/package.json +45 -0
@@ -0,0 +1,66 @@
1
+ import { XUIObject } from "@xpell/ui";
2
+ import type { XUIObjectData } from "@xpell/ui";
3
+ export interface XToastData extends XUIObjectData {
4
+ _type: "toast";
5
+ _open?: boolean;
6
+ _text?: string;
7
+ _variant?: "default" | "success" | "error" | "warn" | "info";
8
+ _icon?: XUIObjectData;
9
+ _actions?: XUIObjectData[];
10
+ _closable?: boolean;
11
+ _auto_close_ms?: number;
12
+ _position?: "top-right" | "top-left" | "bottom-right" | "bottom-left";
13
+ _on_open?: (xobj: XToast) => void;
14
+ _on_close?: (xobj: XToast) => void;
15
+ class?: string;
16
+ }
17
+ type XToastVariant = "default" | "success" | "error" | "warn" | "info";
18
+ type XToastPosition = "top-right" | "top-left" | "bottom-right" | "bottom-left";
19
+ export declare class XToast extends XUIObject {
20
+ static _xtype: string;
21
+ private __open;
22
+ private __text;
23
+ private __variant;
24
+ private __icon?;
25
+ private __actions?;
26
+ private __closable;
27
+ private __auto_close_ms?;
28
+ private __position;
29
+ private __elapsed;
30
+ private __last_tick?;
31
+ private __ready;
32
+ private readonly __container_id;
33
+ private readonly __text_id;
34
+ constructor(data: XToastData);
35
+ private normalizeBoolean;
36
+ private normalizeVariant;
37
+ private normalizePosition;
38
+ private applyProps;
39
+ private buildSkeleton;
40
+ private rebuild;
41
+ private applyLayout;
42
+ private resetTimer;
43
+ onFrame(frameNumber: number): Promise<void>;
44
+ isOpen(): boolean;
45
+ setOpen(v: boolean, silent?: boolean): void;
46
+ open(): void;
47
+ close(): void;
48
+ set _open(value: boolean | undefined);
49
+ get _open(): boolean | undefined;
50
+ set _text(value: string);
51
+ get _text(): string;
52
+ set _variant(value: XToastVariant | undefined);
53
+ get _variant(): XToastVariant | undefined;
54
+ set _position(value: XToastPosition | undefined);
55
+ get _position(): XToastPosition | undefined;
56
+ set _icon(value: XUIObjectData | undefined);
57
+ get _icon(): XUIObjectData | undefined;
58
+ set _actions(value: XUIObjectData[] | undefined);
59
+ get _actions(): XUIObjectData[] | undefined;
60
+ set _closable(value: boolean | undefined);
61
+ get _closable(): boolean | undefined;
62
+ set _auto_close_ms(value: number | undefined);
63
+ get _auto_close_ms(): number | undefined;
64
+ }
65
+ export {};
66
+ //# sourceMappingURL=xtoast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xtoast.d.ts","sourceRoot":"","sources":["../../src/xtoast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7D,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC;IACtE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACvE,KAAK,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC;AAEhF,qBAAa,MAAO,SAAQ,SAAS;IACnC,MAAM,CAAC,MAAM,SAAW;IAExB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,EAAE,UAAU;IAkB5B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,aAAa;IA2CrB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;IAKZ,OAAO,CAAC,WAAW,EAAE,MAAM;IAkBjC,MAAM,IAAI,OAAO;IAIjB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,UAAQ;IAelC,IAAI;IAIJ,KAAK;IAIL,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAInC;IAED,IAAI,KAAK,IANQ,OAAO,GAAG,SAAS,CAQnC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAItB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAG5C;IAED,IAAI,QAAQ,IALQ,aAAa,GAAG,SAAS,CAO5C;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,EAG9C;IAED,IAAI,SAAS,IALQ,cAAc,GAAG,SAAS,CAO9C;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAGzC;IAED,IAAI,KAAK,IALQ,aAAa,GAAG,SAAS,CAOzC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,SAAS,EAG9C;IAED,IAAI,QAAQ,IALQ,aAAa,EAAE,GAAG,SAAS,CAO9C;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAGvC;IAED,IAAI,SAAS,IALQ,OAAO,GAAG,SAAS,CAOvC;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAG3C;IAED,IAAI,cAAc,IALQ,MAAM,GAAG,SAAS,CAO3C;CACF"}
@@ -0,0 +1,52 @@
1
+ import { XUIObject } from "@xpell/ui";
2
+ import type { XUIObjectData } from "@xpell/ui";
3
+ export interface XToolbarData extends XUIObjectData {
4
+ _type?: "toolbar";
5
+ _gap?: number;
6
+ _align?: "start" | "center" | "end" | "stretch";
7
+ _justify?: "start" | "center" | "end" | "space-between";
8
+ _wrap?: boolean;
9
+ _sticky?: boolean;
10
+ _top?: number;
11
+ _elevated?: boolean;
12
+ }
13
+ type XToolbarAlign = "start" | "center" | "end" | "stretch";
14
+ type XToolbarJustify = "start" | "center" | "end" | "space-between";
15
+ export declare class XToolbar extends XUIObject {
16
+ static _xtype: string;
17
+ private __gap;
18
+ private __align;
19
+ private __justify;
20
+ private __wrap;
21
+ private __sticky;
22
+ private __top;
23
+ private __elevated;
24
+ private static readonly managedStyles;
25
+ constructor(data: XToolbarData);
26
+ private normalizeAlign;
27
+ private normalizeJustify;
28
+ private normalizeGap;
29
+ private normalizeBoolean;
30
+ private mapAlign;
31
+ private mapJustify;
32
+ private splitClasses;
33
+ private stripManagedStyles;
34
+ private buildClassName;
35
+ private applyLayout;
36
+ set _gap(value: number | undefined);
37
+ get _gap(): number | undefined;
38
+ set _align(value: XToolbarAlign | undefined);
39
+ get _align(): XToolbarAlign | undefined;
40
+ set _justify(value: XToolbarJustify | undefined);
41
+ get _justify(): XToolbarJustify | undefined;
42
+ set _wrap(value: boolean | undefined);
43
+ get _wrap(): boolean | undefined;
44
+ set _sticky(value: boolean | undefined);
45
+ get _sticky(): boolean | undefined;
46
+ set _top(value: number | undefined);
47
+ get _top(): number | undefined;
48
+ set _elevated(value: boolean | undefined);
49
+ get _elevated(): boolean | undefined;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=xtoolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xtoolbar.d.ts","sourceRoot":"","sources":["../../src/xtoolbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,CAAC;IACxD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,KAAK,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAC5D,KAAK,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,CAAC;AAEpE,qBAAa,QAAS,SAAQ,SAAS;IACrC,MAAM,CAAC,MAAM,SAAa;IAE1B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAQlC;gBAES,IAAI,EAAE,YAAY;IAY9B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,WAAW;IAuBnB,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAGjC;IAED,IAAI,IAAI,IALQ,MAAM,GAAG,SAAS,CAOjC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAG1C;IAED,IAAI,MAAM,IALQ,aAAa,GAAG,SAAS,CAO1C;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,EAG9C;IAED,IAAI,QAAQ,IALQ,eAAe,GAAG,SAAS,CAO9C;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAGnC;IAED,IAAI,KAAK,IALQ,OAAO,GAAG,SAAS,CAOnC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAGrC;IAED,IAAI,OAAO,IALQ,OAAO,GAAG,SAAS,CAOrC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAGjC;IAED,IAAI,IAAI,IALQ,MAAM,GAAG,SAAS,CAOjC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAGvC;IAED,IAAI,SAAS,IALQ,OAAO,GAAG,SAAS,CAOvC;CACF"}
@@ -0,0 +1 @@
1
+ :root,[data-theme]{--x-font: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";--x-radius: 16px;--x-gap: 12px;--x-primary: #2563eb;--x-success: #16a34a;--x-danger: #dc2626;--x-warning: #f59e0b;--x-focus: rgba(37, 99, 235, .28)}:root[data-theme=light],[data-theme=light]{--x-bg: #f6f7fb;--x-surface: #ffffff;--x-surface-2: #fbfbfd;--x-text: #0f172a;--x-muted: #64748b;--x-border: rgba(15, 23, 42, .1);--x-shadow: 0 10px 30px rgba(2, 6, 23, .08);--x-primary: #2563eb;--x-success: #16a34a;--x-danger: #dc2626;--x-warning: #f59e0b}:root[data-theme=dark],[data-theme=dark]{--x-bg: #1e1e1e;--x-surface: #252526;--x-surface-2: #2d2d2d;--x-text: #d4d4d4;--x-muted: #9da3a8;--x-border: #2a2d2e;--x-shadow: 0 16px 40px rgba(0, 0, 0, .6);--x-primary: #007acc;--x-success: #89d185;--x-danger: #f48771;--x-warning: #cca700;--x-focus: rgba(0, 122, 204, .35)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--x-bg: #1e1e1e;--x-surface: #252526;--x-surface-2: #2d2d2d;--x-text: #d4d4d4;--x-muted: #9da3a8;--x-border: #2a2d2e;--x-shadow: 0 16px 40px rgba(0, 0, 0, .6);--x-primary: #007acc;--x-success: #89d185;--x-danger: #f48771;--x-warning: #cca700;--x-focus: rgba(0, 122, 204, .35)}}@media(prefers-color-scheme:light){:root:not([data-theme=dark]){--x-bg: #f6f7fb;--x-surface: #ffffff;--x-surface-2: #fbfbfd;--x-text: #0f172a;--x-muted: #64748b;--x-border: rgba(15, 23, 42, .1);--x-shadow: 0 10px 30px rgba(2, 6, 23, .08);--x-primary: #2563eb;--x-success: #16a34a;--x-danger: #dc2626;--x-warning: #f59e0b}}html[data-theme=dark]{--x-bg: #1e1e1e;--x-surface: #252526;--x-surface-2: #2d2d2d;--x-text: #d4d4d4;--x-muted: #9da3a8;--x-border: #2a2d2e;--x-primary: #007acc;--x-success: #89d185;--x-danger: #f48771;--x-warning: #cca700;--x-focus: rgba(0, 122, 204, .35)}html[data-theme=light]{--x-bg: #f0f0f0;--x-surface: #ffffff;--x-text: #111111;--x-border: #e0e0e0;--x-muted: #666666}html,body{margin:0;padding:0;width:100%;height:100%;background:var(--x-bg);color:var(--x-text)}.xdash,.xdash-bg{font-family:var(--x-font);color:var(--x-text);background:var(--x-bg)}.dash-btn{align-self:flex-start;text-decoration:none;padding:10px 12px;border-radius:12px;font-size:13px;font-weight:700;background:var(--x-primary);color:var(--x-surface);border:1px solid var(--x-border);box-shadow:var(--x-shadow);transition:transform .12s ease,filter .12s ease,box-shadow .12s ease}.xkpi-card{background:var(--x-surface);border:1px solid var(--x-border);border-radius:var(--x-radius);box-shadow:var(--x-shadow)}.xkpi-card .kpi-body{padding:14px 16px;display:flex;flex-direction:column;gap:8px}.xkpi-card .kpi-top{display:flex;align-items:center;justify-content:space-between;gap:10px}.xkpi-card .kpi-icon{font-size:16px;opacity:.9}.xkpi-card .kpi-label{font-size:12px;color:var(--x-muted);letter-spacing:.2px}.xkpi-card .kpi-value{color:var(--x-text);font-size:30px;font-weight:800;line-height:1.1}.xkpi-card .kpi-delta{font-size:12px;font-weight:800}.xkpi-card .kpi-delta--up{color:var(--x-success)}.xkpi-card .kpi-delta--down{color:var(--x-danger)}.xkpi-card .kpi-delta--flat{color:var(--x-muted)}.xgrid{display:grid;gap:var(--x-grid-gap, 12px)}.xgrid{grid-template-columns:repeat(var(--x-grid-cols, 1),minmax(0,1fr))}.xgrid[style*=--x-grid-min-col]{grid-template-columns:repeat(auto-fit,minmax(var(--x-grid-min-col),1fr))}.xsection{width:100%}.xsection__container{border:1px solid var(--dash-border);background:var(--dash-surface);border-radius:var(--dash-radius);box-shadow:var(--dash-shadow);padding:16px}.xsection__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.xsection__headings{display:flex;flex-direction:column;gap:4px;min-width:0}.xsection__title{margin:0;font-size:16px;font-weight:700;color:var(--dash-text);line-height:1.2}.xsection__subtitle{margin:0;font-size:13px;color:var(--dash-text-muted);line-height:1.35}.xsection__actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.xsection__body{width:100%}:root,[data-theme]{--xscroll-thumb: var(--x-border);--xscroll-thumb-hover: var(--x-text);--xscroll-track: var(--x-surface-2, var(--x-surface))}.xscroll{scrollbar-width:thin;scrollbar-color:var(--xscroll-thumb) var(--xscroll-track)}.xscroll::-webkit-scrollbar{width:10px;height:10px}.xscroll::-webkit-scrollbar-track{background:var(--xscroll-track);border-radius:999px}.xscroll::-webkit-scrollbar-thumb{background:var(--xscroll-thumb);border-radius:999px;border:2px solid var(--xscroll-track)}.xscroll::-webkit-scrollbar-thumb:hover{background:var(--xscroll-thumb-hover)}.xscroll--hide{scrollbar-width:none;-ms-overflow-style:none}.xscroll--hide::-webkit-scrollbar{width:0;height:0;display:none}.xdivider{background:var(--x-divider, var(--x-border));flex:0 0 auto}.xdivider--muted{background:var(--x-divider-muted, var(--x-border))}.xdivider--h{width:var(--xdivider-length, 100%);height:var(--xdivider-thickness, 1px);margin-left:var(--xdivider-inset, 0px);margin-right:var(--xdivider-inset, 0px)}.xdivider--v{height:var(--xdivider-length, 100%);width:var(--xdivider-thickness, 1px);margin-top:var(--xdivider-inset, 0px);margin-bottom:var(--xdivider-inset, 0px)}.xspacer{display:block;background:transparent}.xtoolbar{display:flex;flex-direction:row;align-items:center;gap:var(--xtoolbar-gap, 8px);min-height:40px;padding:8px 12px;border-radius:var(--x-radius, 12px)}.xtoolbar--elevated{background:var(--x-surface);border:1px solid var(--x-border);box-shadow:var(--x-shadow)}.xtable{width:100%}.xtable__table{width:100%;border-collapse:collapse}.xtable__head{background:var(--x-surface);border-bottom:1px solid var(--x-border)}.xtable__th,.xtable__td{padding:10px 12px;color:var(--x-text);text-align:left;vertical-align:middle}.xtable__th{font-size:12px;letter-spacing:.2px;text-transform:uppercase}.xtable__td{font-size:13px}.xtable--dense .xtable__th,.xtable--dense .xtable__td{padding:6px 10px}.xtable--bordered .xtable__table{border:1px solid var(--x-border)}.xtable--bordered .xtable__th,.xtable--bordered .xtable__td{border-bottom:1px solid var(--x-border)}.xtable--striped .xtable__body tr:nth-child(2n) .xtable__td{background:var(--x-surface-2, var(--x-surface))}.xtable--hover .xtable__body tr:hover .xtable__td{background:var(--x-hover, var(--x-surface-2, var(--x-surface)))}.xtable__empty{text-align:center;color:var(--x-muted, var(--x-text))}.xtable__badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;background:var(--x-surface-2, var(--x-surface));color:var(--x-text);border:1px solid var(--x-border)}.xbadge{--xbadge-bg: var(--x-surface-2, var(--x-surface));--xbadge-fg: var(--x-text);--xbadge-border: var(--x-border);--xbadge-dot: var(--xbadge-fg);--xbadge-gap: 6px;--xbadge-radius: var(--x-radius, 10px);--xbadge-pad-y: 4px;--xbadge-pad-x: 8px;--xbadge-font: 12px;--xbadge-dot-size: 6px;display:inline-flex;align-items:center;gap:var(--xbadge-gap);padding:var(--xbadge-pad-y) var(--xbadge-pad-x);font-size:var(--xbadge-font);line-height:1;border-radius:var(--xbadge-radius);background:var(--xbadge-bg);color:var(--xbadge-fg);border:1px solid var(--xbadge-border);white-space:nowrap}.xbadge__dot{width:var(--xbadge-dot-size);height:var(--xbadge-dot-size);border-radius:999px;background:var(--xbadge-dot);display:none}.xbadge--dot .xbadge__dot{display:inline-block}.xbadge--pill{border-radius:999px}.xbadge--sm{--xbadge-pad-y: 2px;--xbadge-pad-x: 6px;--xbadge-font: 11px;--xbadge-dot-size: 5px}.xbadge--md{--xbadge-pad-y: 4px;--xbadge-pad-x: 8px;--xbadge-font: 12px;--xbadge-dot-size: 6px}.xbadge--default{--xbadge-bg: var(--x-surface-2, var(--x-surface));--xbadge-fg: var(--x-text);--xbadge-border: var(--x-border);--xbadge-dot: var(--x-text)}.xbadge--success{--xbadge-bg: var(--x-surface-2, var(--x-surface));--xbadge-fg: var(--x-success, var(--x-text));--xbadge-border: var(--x-success, var(--x-border));--xbadge-dot: var(--x-success, var(--x-text))}.xbadge--warn{--xbadge-bg: var(--x-surface-2, var(--x-surface));--xbadge-fg: var(--x-warning, var(--x-text));--xbadge-border: var(--x-warning, var(--x-border));--xbadge-dot: var(--x-warning, var(--x-text))}.xbadge--error{--xbadge-bg: var(--x-surface-2, var(--x-surface));--xbadge-fg: var(--x-danger, var(--x-text));--xbadge-border: var(--x-danger, var(--x-border));--xbadge-dot: var(--x-danger, var(--x-text))}.xbadge--info{--xbadge-bg: var(--x-surface-2, var(--x-surface));--xbadge-fg: var(--x-primary, var(--x-text));--xbadge-border: var(--x-primary, var(--x-border));--xbadge-dot: var(--x-primary, var(--x-text))}.xempty{display:flex;width:100%}.xempty--center{align-items:center;text-align:center}.xempty--start{align-items:flex-start;text-align:left}.xempty__stack{width:100%;--xstack-gap: var(--x-empty-gap, 12px)}.xempty__title{color:var(--x-text);font-weight:700}.xempty__desc{color:var(--x-text-muted, var(--x-muted, var(--x-text)))}.xempty--sm{--x-empty-gap: 8px;--x-empty-title-size: 14px;--x-empty-desc-size: 12px}.xempty--md{--x-empty-gap: 12px;--x-empty-title-size: 16px;--x-empty-desc-size: 13px}.xempty--lg{--x-empty-gap: 16px;--x-empty-title-size: 18px;--x-empty-desc-size: 14px}.xempty--sm .xempty__title,.xempty--md .xempty__title,.xempty--lg .xempty__title{font-size:var(--x-empty-title-size)}.xempty--sm .xempty__desc,.xempty--md .xempty__desc,.xempty--lg .xempty__desc{font-size:var(--x-empty-desc-size)}.xsearch{--xsearch-gap: 8px;--xsearch-pad-y: 6px;--xsearch-pad-x: 10px;--xsearch-font: 13px;--xsearch-height: 34px;display:inline-flex;align-items:center;gap:var(--xsearch-gap);padding:var(--xsearch-pad-y) var(--xsearch-pad-x);min-height:var(--xsearch-height);background:var(--x-surface);border:1px solid var(--x-border);border-radius:var(--x-radius, 12px);color:var(--x-text)}.xsearch--sm{--xsearch-pad-y: 4px;--xsearch-pad-x: 8px;--xsearch-font: 12px;--xsearch-height: 30px}.xsearch--md{--xsearch-pad-y: 6px;--xsearch-pad-x: 10px;--xsearch-font: 13px;--xsearch-height: 34px}.xsearch:focus-within{border-color:var(--x-primary);box-shadow:0 0 0 3px var(--x-focus)}.xsearch--disabled{opacity:.6;pointer-events:none}.xsearch__icon{font-size:14px;color:var(--x-text-muted, var(--x-muted, var(--x-text)))}.xsearch__input{font-size:var(--xsearch-font);color:var(--x-text);background:transparent;border:none;outline:none;flex:1 1 auto;min-width:0}.xsearch__input::placeholder{color:var(--x-text-muted, var(--x-muted, var(--x-text)))}.xsearch__clear{font-size:16px;line-height:1;padding:0 4px;border:none;background:transparent;color:var(--x-text-muted, var(--x-muted, var(--x-text)))}.xsearch__clear:hover{color:var(--x-text)}.xigroup{display:flex;flex-direction:row;align-items:center;gap:var(--xigroup-gap, 8px)}.xigroup--dense{--xigroup-gap: 6px}.xigroup--merged{background:var(--x-surface);border:1px solid var(--x-border);border-radius:var(--x-radius, 12px);padding:4px}.xselect{display:inline-flex;align-items:center}.xselect__control{width:100%;min-width:0;background:var(--x-surface);border:1px solid var(--x-border);border-radius:var(--x-radius, 12px);color:var(--x-text);padding:var(--xselect-pad-y, 6px) var(--xselect-pad-x, 10px);font-size:var(--xselect-font, 13px);outline:none}.xselect__control:focus{border-color:var(--x-primary);box-shadow:0 0 0 3px var(--x-focus)}.xselect--disabled{opacity:.6;cursor:not-allowed}.xselect--disabled .xselect__control{cursor:not-allowed}.xselect--sm{--xselect-pad-y: 4px;--xselect-pad-x: 8px;--xselect-font: 12px}.xselect--md{--xselect-pad-y: 6px;--xselect-pad-x: 10px;--xselect-font: 13px}.xfield{display:flex;width:100%}.xfield__stack{width:100%;--xstack-gap: var(--x-field-gap, 10px)}.xfield__label-row{align-items:center}.xfield__label{color:var(--x-text);font-weight:600}.xfield__required{color:var(--x-danger, var(--x-text))}.xfield__control{width:100%}.xfield__hint{color:var(--x-text-muted, var(--x-muted, var(--x-text)));font-size:var(--x-field-hint-size, 12px)}.xfield__error{color:var(--x-danger, var(--x-text));font-size:var(--x-field-hint-size, 12px)}.xfield--sm{--x-field-gap: 8px;--x-field-label-size: 12px;--x-field-hint-size: 11px}.xfield--md{--x-field-gap: 10px;--x-field-label-size: 13px;--x-field-hint-size: 12px}.xfield--sm .xfield__label,.xfield--md .xfield__label{font-size:var(--x-field-label-size)}.xfield__row--inline{align-items:center}.xdrawer{position:relative;display:flex;flex-direction:column;height:100%;width:var(--xdrawer-width, 360px);background:var(--x-surface);color:var(--x-text);transform:translate(100%);transition:transform .18s ease;border-left:1px solid var(--x-border)}.xdrawer--left{transform:translate(-100%);border-left:none;border-right:1px solid var(--x-border)}.xdrawer--right{transform:translate(100%)}.xdrawer--open{transform:translate(0)}.xdrawer--elevated{box-shadow:var(--x-shadow)}.xdrawer__panel{display:flex;flex-direction:column;height:100%}.xdrawer__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-bottom:1px solid var(--x-border)}.xdrawer__title{font-weight:600;color:var(--x-text)}.xdrawer__close{background:transparent;border:none;color:var(--x-text)}.xdrawer__body{flex:1 1 auto;min-height:0;padding:12px 14px}.xdrawer__scroll{min-height:0}.xnavlist{display:flex;flex-direction:column;gap:var(--xnavlist-gap, 6px)}.xnavlist__list{width:100%}.xnavlist__item{display:flex;align-items:center;gap:var(--xnavlist-item-gap, 10px);padding:var(--xnavlist-item-padding, 8px 10px);border-radius:var(--x-radius, 12px);color:var(--x-text);background:transparent;cursor:pointer}.xnavlist__item:hover{background:var(--x-surface-2)}.xnavlist__item--active{background:var(--x-surface-2);border:1px solid var(--x-border)}.xnavlist__item--disabled{opacity:.5;cursor:not-allowed}.xnavlist__label{flex:1 1 auto}.xnavlist__badge{flex:0 0 auto}.xnavlist--dense{--xnavlist-item-padding: 6px 8px;--xnavlist-item-gap: 8px}.xnavlist--dividers .xnavlist__item{border-bottom:1px solid var(--x-border);border-radius:0}.xnavlist--dividers .xnavlist__item:last-child{border-bottom:none}.xsidebar{width:var(--xsidebar-width, 280px);height:100%;display:flex;flex-direction:column;background:var(--x-surface);color:var(--x-text);border-right:1px solid var(--x-border)}.xsidebar--right{border-right:none;border-left:1px solid var(--x-border)}.xsidebar__panel{display:flex;flex-direction:column;height:100%}.xsidebar__header{padding:var(--xsidebar-pad, 12px 14px)}.xsidebar__title{font-weight:600;color:var(--x-text)}.xsidebar__subtitle{color:var(--x-muted);font-size:12px}.xsidebar__body{flex:1 1 auto;min-height:0;padding:var(--xsidebar-pad, 12px 14px)}.xsidebar__footer{padding:var(--xsidebar-pad, 12px 14px)}.xsidebar__scroll{min-height:0}.xsidebar--collapsed{width:var(--xsidebar-width-collapsed, 72px)}.xmodal{position:fixed;inset:0;display:none;z-index:var(--x-z-modal, 1000)}.xmodal--open{display:block}.xmodal__backdrop{position:absolute;inset:0;background:var(--x-overlay, rgba(0, 0, 0, .5))}.xmodal__panel{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:16px;z-index:1}.xmodal__card{width:var(--xmodal-width, 560px);max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);background:var(--x-surface);color:var(--x-text);border:1px solid var(--x-border);border-radius:var(--x-radius, 12px);box-shadow:var(--x-shadow);display:flex;flex-direction:column}.xmodal__header{padding:12px 14px}.xmodal__title{font-weight:600;color:var(--x-text)}.xmodal__subtitle{color:var(--x-muted);font-size:12px}.xmodal__close{background:transparent;border:none;color:var(--x-text)}.xmodal__body{padding:12px 14px;min-height:0}.xmodal__scroll{max-height:60vh}.xmodal__footer{padding:12px 14px}.xmodal--sm{--xmodal-width: 420px}.xmodal--md{--xmodal-width: 560px}.xmodal--lg{--xmodal-width: 720px}.xtoast{position:fixed;z-index:var(--x-z-toast, 1100);max-width:360px;pointer-events:none;opacity:0}.xtoast--open{pointer-events:auto;opacity:1}.xtoast--top-right{top:var(--x-toast-offset, 16px);right:var(--x-toast-offset, 16px)}.xtoast--top-left{top:var(--x-toast-offset, 16px);left:var(--x-toast-offset, 16px)}.xtoast--bottom-right{bottom:var(--x-toast-offset, 16px);right:var(--x-toast-offset, 16px)}.xtoast--bottom-left{bottom:var(--x-toast-offset, 16px);left:var(--x-toast-offset, 16px)}.xtoast__container{display:flex;align-items:center;gap:var(--x-gap, 12px);padding:10px 12px;background:var(--x-surface);color:var(--x-text);border:1px solid var(--x-border);border-left:4px solid var(--xtoast-accent, var(--x-border));border-radius:var(--x-radius, 10px);box-shadow:var(--x-shadow)}.xtoast__text{flex:1 1 auto}.xtoast__actions{display:flex;gap:8px}.xtoast__close{background:transparent;border:none;color:var(--x-text)}.xtoast--success{--xtoast-accent: var(--x-success)}.xtoast--error{--xtoast-accent: var(--x-danger)}.xtoast--warn{--xtoast-accent: var(--x-warning)}.xtoast--info{--xtoast-accent: var(--x-primary)}:root,[data-theme]{--xstack-gap: 12px;--xstack-accent: var(--x-primary);--xstack-text: var(--x-text)}.xstack{display:flex;gap:var(--xstack-gap, 12px);align-items:stretch;justify-content:flex-start}.xstack--v{flex-direction:column}.xstack--h{flex-direction:row}.xcard{background:var(--x-surface);border:1px solid var(--x-border);border-radius:var(--x-radius);box-shadow:var(--x-shadow);overflow:hidden}.xcard__inner{display:flex;flex-direction:column}.xcard__image{width:100%;height:auto;display:block}.xcard--no-image .xcard__image{display:none}.xcard__body{padding:16px;display:flex;flex-direction:column;gap:10px}.xcard__title{font-size:14px;font-weight:700;letter-spacing:.2px;margin:0;color:var(--x-text)}.xcard__text{font-size:13px;color:var(--x-muted);line-height:1.45;margin:0}.xcard__link{align-self:flex-start;text-decoration:none}.xcard__actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.dash-shell{min-height:100vh;display:flex;flex-direction:column;background:var(--x-bg);color:var(--x-text)}.dash-topbar{background:var(--x-surface);border-bottom:1px solid var(--x-border);padding:12px 16px}.dash-led{width:20px;height:20px;border-radius:999px;display:inline-block;box-shadow:0 0 0 1px var(--x-border)}.dash-led--connected{background:var(--x-success)}.dash-led--connecting{background:var(--x-warning)}.dash-led--disconnected{background:var(--x-danger)}.dash-topbar__title{font-weight:700}.dash-body{flex:1;min-height:0;display:flex}.dash-sidebar{width:248px;min-height:0;display:flex;flex-direction:column;gap:12px;padding:12px;background:var(--x-surface);border-right:1px solid var(--x-border);transition:width .16s ease}.dash-sidebar--collapsed{width:64px}.dash-sidebar__header{display:flex;align-items:center;gap:8px}.dash-sidebar__logo{font-size:18px}.dash-sidebar--collapsed .dash-sidebar__label,.dash-sidebar--collapsed .xnavlist__label{display:none}.dash-sidebar--collapsed .xnavlist__item{justify-content:center}.dash-nav__icon{width:20px;text-align:center}.dash-main{flex:1;min-width:0;padding:16px}.dash-region{min-height:0}
package/dist/xlogo.png ADDED
Binary file
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@xpell/xdashboard",
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "Dashboard XUI component library for Xpell UI",
5
+ "private": false,
6
+ "type": "module",
7
+ "author": "Tamir Fridman",
8
+ "license": "MIT",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "sideEffects": [
13
+ "**/*.css"
14
+ ],
15
+ "main": "./dist/index.cjs",
16
+ "module": "./dist/index.js",
17
+ "types": "./dist/types/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/types/index.d.ts",
21
+ "import": "./dist/index.js",
22
+ "require": "./dist/index.cjs"
23
+ },
24
+ "./xdashboard.css": "./dist/xdashboard.css",
25
+ "./package.json": "./package.json"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "peerDependencies": {
31
+ "@xpell/core": ">=2.0.0-alpha",
32
+ "@xpell/ui": ">=2.0.0-alpha"
33
+ },
34
+ "devDependencies": {
35
+ "@types/node": "^22.0.0",
36
+ "typescript": "^5.9.3",
37
+ "vite": "^7.3.1"
38
+ },
39
+ "scripts": {
40
+ "dev": "vite",
41
+ "typecheck": "tsc -p tsconfig.json --noEmit",
42
+ "clean": "rm -rf dist",
43
+ "build": "vite build && tsc -p tsconfig.build.json"
44
+ }
45
+ }