@dybo-ai/design 1.2.0 → 1.3.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.
package/dist/index.cjs CHANGED
@@ -579,6 +579,82 @@ function Modal({
579
579
  document.body
580
580
  );
581
581
  }
582
+ function Drawer({
583
+ open,
584
+ onClose,
585
+ title,
586
+ children,
587
+ footer,
588
+ side = "right",
589
+ width,
590
+ closeOnBackdrop = true,
591
+ hideHeader = false
592
+ }) {
593
+ react.useEffect(() => {
594
+ if (!open) return;
595
+ function onKeyDown(e) {
596
+ if (e.key === "Escape") onClose();
597
+ }
598
+ document.addEventListener("keydown", onKeyDown);
599
+ return () => document.removeEventListener("keydown", onKeyDown);
600
+ }, [open, onClose]);
601
+ if (!open) return null;
602
+ const panelClass = side === "left" ? "dybo-drawer-panel dybo-drawer-panel--left" : "dybo-drawer-panel dybo-drawer-panel--right";
603
+ return reactDom.createPortal(
604
+ /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
605
+ /* @__PURE__ */ jsxRuntime.jsx(
606
+ "div",
607
+ {
608
+ className: "dybo-drawer-backdrop",
609
+ onClick: closeOnBackdrop ? onClose : void 0,
610
+ "aria-hidden": true
611
+ }
612
+ ),
613
+ /* @__PURE__ */ jsxRuntime.jsxs(
614
+ "aside",
615
+ {
616
+ className: panelClass,
617
+ style: width !== void 0 ? { width, maxWidth: "100%" } : void 0,
618
+ "aria-modal": "true",
619
+ role: "dialog",
620
+ onClick: (e) => e.stopPropagation(),
621
+ children: [
622
+ !hideHeader && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "dybo-drawer-panel__header", children: [
623
+ title ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "dybo-drawer-panel__title", children: title }) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
624
+ /* @__PURE__ */ jsxRuntime.jsx(
625
+ "button",
626
+ {
627
+ type: "button",
628
+ className: "dybo-drawer-panel__close",
629
+ onClick: onClose,
630
+ "aria-label": "Close",
631
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
632
+ "path",
633
+ {
634
+ d: "M2 2l12 12M14 2L2 14",
635
+ stroke: "currentColor",
636
+ strokeWidth: "2",
637
+ strokeLinecap: "round"
638
+ }
639
+ ) })
640
+ }
641
+ )
642
+ ] }),
643
+ /* @__PURE__ */ jsxRuntime.jsx(
644
+ "div",
645
+ {
646
+ className: hideHeader ? "dybo-drawer-panel__body dybo-drawer-panel__body--flush" : "dybo-drawer-panel__body",
647
+ children
648
+ }
649
+ ),
650
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dybo-drawer-panel__footer", children: footer })
651
+ ]
652
+ }
653
+ )
654
+ ] }),
655
+ document.body
656
+ );
657
+ }
582
658
  var cx19 = (...c) => c.filter(Boolean).join(" ");
583
659
  function LoginCard({
584
660
  logo,
@@ -609,6 +685,7 @@ exports.Badge = Badge;
609
685
  exports.Button = Button;
610
686
  exports.Card = Card;
611
687
  exports.DataTable = DataTable;
688
+ exports.Drawer = Drawer;
612
689
  exports.IconRail = IconRail;
613
690
  exports.IconRailItem = IconRailItem;
614
691
  exports.Input = Input;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/Badge.tsx","../src/components/IconRail.tsx","../src/components/NavTabs.tsx","../src/components/ScopeTabs.tsx","../src/components/PriorityBadge.tsx","../src/components/TicketStatusBadge.tsx","../src/components/AppShell.tsx","../src/components/Sidebar.tsx","../src/components/TopBar.tsx","../src/components/NavItem.tsx","../src/components/DataTable.tsx","../src/components/Tabs.tsx","../src/components/OverviewGrid.tsx","../src/components/Select.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/LoginCard.tsx"],"names":["jsx","cx","jsxs","Fragment","useRef","useEffect","createPortal"],"mappings":";;;;;;;AAWA,IAAM,SAAA,GAAwC;AAAA,EAC5C,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,EAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,uBACEA,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,UAAA;AAAA,QACA,aAAa,OAAO,CAAA,CAAA;AAAA,QACpB,UAAU,IAAI,CAAA;AAAA,QACd;AAAA,OACF;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACrB,GAAG,KAAA;AAAA,MAEH,oBAAU,QAAA,GAAM;AAAA;AAAA,GACnB;AAEJ;ACpCA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,IAAA,CAAK;AAAA,EACnB,OAAA,GAAU,EAAA;AAAA,EACV,KAAA,GAAQ,KAAA;AAAA,EACR,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAe;AACb,EAAA,uBACED,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,GAAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,MACrC,KAAA,EAAO;AAAA,QACL,OAAA;AAAA,QACA,UAAA,EAAY,QAAQ,gCAAA,GAAmC,MAAA;AAAA,QACvD,GAAG;AAAA,OACL;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACrBA,IAAMA,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,KAAA,CAAM,EAAE,KAAA,EAAO,KAAA,EAAO,WAAW,EAAA,EAAI,GAAG,OAAM,EAAgB;AAC5E,EAAA,MAAM,UAAU,EAAA,IAAM,KAAA,EAAO,aAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC9D,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,CAAA,EAAE,EAC5D,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCF,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,0BAAA;AAAA,UACV,UAAA,EAAY,gCAAA;AAAA,UACZ,KAAA,EAAO;AAAA,SACT;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBAEFA,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,OAAA;AAAA,QACJ,SAAA,EAAWC,GAAAA;AAAA,UACT,YAAA;AAAA,UACA,QAAQ,mBAAA,GAAsB,MAAA;AAAA,UAC9B;AAAA,SACF;AAAA,QACA,OACE,KAAA,GACI;AAAA,UACE,WAAA,EAAa,oBAAA;AAAA,UACb,SAAA,EAAW;AAAA,SACb,GACA,MAAA;AAAA,QAEL,GAAG;AAAA;AAAA,KACN;AAAA,IACC,yBACCD,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,0BAAA;AAAA,UACV,KAAA,EAAO,oBAAA;AAAA,UACP,UAAA,EAAY;AAAA,SACd;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;ACzCA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,MAAM,EAAE,MAAA,GAAS,SAAS,SAAA,EAAW,GAAG,OAAM,EAAgB;AAC5E,EAAA,uBACED,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAWC,GAAAA,CAAG,YAAA,EAAc,CAAA,YAAA,EAAe,MAAM,IAAI,SAAS,CAAA;AAAA,MAC7D,GAAG;AAAA;AAAA,GACN;AAEJ;ACVA,IAAMA,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA,GAAS,KAAA;AAAA,EACT,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuB;AACrB,EAAA,uBACED,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,GAAAA;AAAA,QACT,sBAAA;AAAA,QACA,SAAS,8BAAA,GAAiC,MAAA;AAAA,QAC1C;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,QAAA,EAAU,WAAU,EAAmB;AACvE,EAAA,uBACEC,eAAAA,CAAC,OAAA,EAAA,EAAM,WAAWD,GAAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA,EAC9C,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC9CA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EAAyB,QAAA,EAAS,GACnD,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACpCA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,QAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,WAAU,EAAkB;AAC5E,EAAA,uBACED,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,IAAG,cAAA,EAAgB,SAAS,CAAA,EAAG,IAAA,EAAK,SAAA,EACjD,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,wBACTD,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,KAAA;AAAA,MACL,eAAA,EAAe,IAAI,GAAA,KAAQ,MAAA;AAAA,MAC3B,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,SAAA,EAAWC,GAAAA;AAAA,QACT,aAAA;AAAA,QACA,GAAA,CAAI,GAAA,KAAQ,MAAA,GAAS,qBAAA,GAAwB;AAAA,OAC/C;AAAA,MACA,SAAS,MAAM,CAAC,IAAI,QAAA,IAAY,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,MAE/C,QAAA,EAAA,GAAA,CAAI;AAAA,KAAA;AAAA,IAXA,GAAA,CAAI;AAAA,GAaZ,CAAA,EACH,CAAA;AAEJ;ACvBA,IAAMA,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,UAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,WAAU,EAAoB;AAChF,EAAA,uBACED,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,IAAG,YAAA,EAAc,SAAS,CAAA,EAAG,IAAA,EAAK,SAAA,EAC/C,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,wBACTC,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,KAAA;AAAA,MACL,eAAA,EAAe,IAAI,GAAA,KAAQ,MAAA;AAAA,MAC3B,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,SAAA,EAAWD,GAAAA;AAAA,QACT,gBAAA;AAAA,QACA,GAAA,CAAI,GAAA,KAAQ,MAAA,GAAS,wBAAA,GAA2B;AAAA,OAClD;AAAA,MACA,SAAS,MAAM,CAAC,IAAI,QAAA,IAAY,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,MAE/C,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,KAAA;AAAA,QACJ,GAAA,CAAI,UAAU,MAAA,oBACbD,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,GAAA,CAAI,KAAA,EAAM;AAAA;AAAA,KAAA;AAAA,IAb3C,GAAA,CAAI;AAAA,GAgBZ,CAAA,EACH,CAAA;AAEJ;ACjCA,IAAMC,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,uBACED,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAWC,GAAAA,CAAG,eAAA,EAAiB,CAAA,eAAA,EAAkB,QAAQ,IAAI,SAAS,CAAA;AAAA,MACrE,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,QAAA,IAAY;AAAA;AAAA,GACf;AAEJ;ACjBA,IAAMA,GAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAE5B,IAAM,aAAA,GAA8C;AAAA,EAClD,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AAEO,SAAS,iBAAA,CAAkB;AAAA,EAChC,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,uBACED,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,GAAAA;AAAA,QACT,oBAAA;AAAA,QACA,uBAAuB,MAAM,CAAA,CAAA;AAAA,QAC7B;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,QAAA,IAAY,cAAc,MAAM;AAAA;AAAA,GACnC;AAEJ;AC3BA,IAAMA,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,uBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAWD,IAAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA,EAC3C,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,oBACDC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,MAAA,MAAA;AAAA,sBACDF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,KAAA,EAC1C;AAAA,GAAA,EACF,CAAA;AAEJ;ACXA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,uBACEC,eAAAA,CAAC,OAAA,EAAA,EAAM,WAAWD,IAAAA,CAAG,cAAA,EAAgB,SAAS,CAAA,EAC3C,QAAA,EAAA;AAAA,IAAA,KAAA,oBAASD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAuB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACtDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAqB,QAAA,EAAS,CAAA;AAAA,oBAC7CE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,IAAA,oBACCA,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,UAAA,EAAY;AAAA,WACd;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,QAAQ,QAAA,EAAU,MAAA,EAAO,EAAI,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA;AAAA,YACzD,IAAA,CAAK,KAAA,oBACJA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,MAAA,EAAO,EAC/C,eAAK,KAAA,EACR;AAAA;AAAA;AAAA,OAEJ;AAAA,MAED,MAAA;AAAA,MACA,4BACCA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,QAAA;AAAA,UACT,KAAA,EAAO;AAAA,YACL,UAAA,EAAY,aAAA;AAAA,YACZ,MAAA,EAAQ,kCAAA;AAAA,YACR,KAAA,EAAO,0BAAA;AAAA,YACP,OAAA,EAAS,UAAA;AAAA,YACT,QAAA,EAAU,MAAA;AAAA,YACV,YAAA,EAAc,KAAA;AAAA,YACd,MAAA,EAAQ,SAAA;AAAA,YACR,UAAA,EAAY,SAAA;AAAA,YACZ,UAAA,EAAY;AAAA,WACd;AAAA,UACD,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AC/DA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,MAAA,CAAO,EAAE,KAAA,EAAO,QAAA,EAAU,WAAU,EAAiB;AACnE,EAAA,uBACEC,eAAAA,CAAC,QAAA,EAAA,EAAO,WAAWD,IAAAA,CAAG,aAAA,EAAe,SAAS,CAAA,EAC5C,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IAC3C;AAAA,GAAA,EACH,CAAA;AAEJ;ACHA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA,GAAS,KAAA;AAAA,EACT,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,SAAA,GAAYA,IAAAA;AAAA,IAChB,eAAA;AAAA,IACA,SAAS,uBAAA,GAA0B,MAAA;AAAA,IACnC;AAAA,GACF;AAEA,EAAA,MAAM,OAAA,mBACJC,eAAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,mBACCH,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,YAAY,CAAA,EAAG,OAAA,EAAS,MAAA,EAAO,EAAI,gBAAK,CAAA,mBAEvDA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,oBAAA,EAAqB,CAAA;AAAA,IAEtC;AAAA,GAAA,EACH,CAAA;AAGF,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,uBACEA,cAAAA,CAAC,GAAA,EAAA,EAAE,MAAY,SAAA,EAAW,SAAA,EAAW,SAClC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,SAAA,EAAW,SACzC,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AAEO,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAqB;AACtD,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAyB,QAAA,EAAA,KAAA,EAAM,CAAA;AACvD;ACrCA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,SAAA,CAAgD;AAAA,EAC9D,OAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,mBAAA;AAAA,EACf;AACF,CAAA,EAA0B;AACxB,EAAA,SAAS,SAAA,CAAU,KAAW,KAAA,EAAgC;AAC5D,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AAC1D,IAAA,OAAO,IAAI,MAAM,CAAA;AAAA,EACnB;AAEA,EAAA,uBACED,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,IAAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAC7C,QAAA,kBAAAC,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,YAAA,EACf,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,WACC,QAAA,kBAAAA,cAAAA,CAAC,QACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAWC,IAAAA;AAAA,UACT,GAAA,CAAI,KAAA,KAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,UAChC,GAAA,CAAI;AAAA,SACN;AAAA,QAEC,QAAA,EAAA,GAAA,CAAI;AAAA,OAAA;AAAA,MANA,GAAA,CAAI;AAAA,KAQZ,GACH,CAAA,EACF,CAAA;AAAA,oBACAD,eAAC,OAAA,EAAA,EACE,QAAA,EAAA,IAAA,CAAK,WAAW,CAAA,mBACfA,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAS,OAAA,CAAQ,MAAA;AAAA,QACjB,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,QAAA;AAAA,UACX,OAAA,EAAS,MAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACT;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,OAEL,CAAA,GAEA,IAAA,CAAK,IAAI,CAAC,GAAA,EAAK,0BACbA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAWC,IAAAA;AAAA,UACT,aAAa,4BAAA,GAA+B;AAAA,SAC9C;AAAA,QACA,OAAA,EAAS,UAAA,GAAa,MAAM,UAAA,CAAW,GAAG,CAAA,GAAI,MAAA;AAAA,QAE7C,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpB,UAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACzB,UAAA,uBACED,cAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAWC,IAAAA;AAAA,gBACT,GAAA,CAAI,KAAA,KAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,gBAChC,GAAA,CAAI;AAAA,eACN;AAAA,cAEC,QAAA,EAAA,GAAA,CAAI,SACD,GAAA,CAAI,MAAA,CAAO,OAAO,GAAG,CAAA,GACrB,MAAA,CAAO,KAAA,IAAS,EAAE;AAAA,aAAA;AAAA,YARjB,GAAA,CAAI;AAAA,WASX;AAAA,QAEJ,CAAC;AAAA,OAAA;AAAA,MArBI,SAAA,CAAU,KAAK,KAAK;AAAA,KAuB5B,CAAA,EAEL;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AC3FA,IAAMA,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,KAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,WAAU,EAAe;AACtE,EAAA,uBACED,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,KAAG,WAAA,EAAa,SAAS,CAAA,EAAG,IAAA,EAAK,SAAA,EAC9C,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,wBACTD,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,KAAA;AAAA,MACL,eAAA,EAAe,IAAI,GAAA,KAAQ,MAAA;AAAA,MAC3B,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,SAAA,EAAWC,IAAAA;AAAA,QACT,UAAA;AAAA,QACA,GAAA,CAAI,GAAA,KAAQ,MAAA,GAAS,kBAAA,GAAqB;AAAA,OAC5C;AAAA,MACA,SAAS,MAAM,CAAC,IAAI,QAAA,IAAY,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,MAE/C,QAAA,EAAA,GAAA,CAAI;AAAA,KAAA;AAAA,IAXA,GAAA,CAAI;AAAA,GAaZ,CAAA,EACH,CAAA;AAEJ;ACpBA,IAAMA,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,uBACEC,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAWD,KAAG,qBAAA,EAAuB,SAAS,GAAG,KAAA,EACpD,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAA8B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACpDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA8B,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACtD,CAAA;AAEJ;AAEO,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,SAAA,EAAU,EAAuB;AACtE,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,KAAG,oBAAA,EAAsB,SAAS,GAC/C,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,qBAClBD,cAAAA,CAAC,aAAA,EAAA,EAAuB,GAAG,KAAA,EAAA,EAAP,CAAc,CACnC,CAAA,EACH,CAAA;AAEJ;AC3BA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,MAAM,WAAW,EAAA,IAAM,KAAA,EAAO,aAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC/D,EAAA,uBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,CAAA,EAAE,EAC5D,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCF,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,0BAAA;AAAA,UACV,UAAA,EAAY,gCAAA;AAAA,UACZ,KAAA,EAAO;AAAA,SACT;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBAEFE,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,QAAA;AAAA,QACJ,SAAA,EAAWD,IAAAA,CAAG,aAAA,EAAe,SAAS,CAAA;AAAA,QACtC,OACE,KAAA,GACI;AAAA,UACE,WAAA,EAAa,oBAAA;AAAA,UACb,SAAA,EAAW;AAAA,SACb,GACA,MAAA;AAAA,QAEL,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,WAAA,oBACCD,cAAAA,CAAC,QAAA,EAAA,EAAO,OAAM,EAAA,EAAG,QAAA,EAAQ,MACtB,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,UAED,QAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,eAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,UAAU,GAAA,CAAI,QAAA,EACrD,cAAI,KAAA,EAAA,EADM,GAAA,CAAI,KAEjB,CACD;AAAA;AAAA;AAAA,KACH;AAAA,IACC,yBACCA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,0BAAA;AAAA,UACV,KAAA,EAAO,oBAAA;AAAA,UACP,UAAA,EAAY;AAAA,SACd;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;ACpEA,IAAM,KAAA,GAAsC;AAAA,EAC1C,OAAA,EAAS,QAAA;AAAA,EACT,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,KAAA,CAAM;AAAA,EACpB,OAAA,GAAU,MAAA;AAAA,EACV,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAgB;AACd,EAAA,uBACEC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAWD,IAAAA,CAAG,YAAA,EAAc,CAAA,YAAA,EAAe,OAAO,IAAI,SAAS,CAAA;AAAA,MAC/D,IAAA,EAAK,OAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAG,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,CAAM,OAAO,CAAA,EAAE,CAAA;AAAA,wBACjEA,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,IAAM,QAAA,EAAS,CAAA;AAAA,QACvC,2BACCA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,OAAA;AAAA,YACT,YAAA,EAAW,QAAA;AAAA,YACX,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,aAAA;AAAA,cACZ,MAAA,EAAQ,MAAA;AAAA,cACR,MAAA,EAAQ,SAAA;AAAA,cACR,KAAA,EAAO,SAAA;AAAA,cACP,OAAA,EAAS,OAAA;AAAA,cACT,UAAA,EAAY,CAAA;AAAA,cACZ,QAAA,EAAU,MAAA;AAAA,cACV,UAAA,EAAY,CAAA;AAAA,cACZ,OAAA,EAAS;AAAA,aACX;AAAA,YACD,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,GAEJ;AAEJ;AC3CO,SAAS,KAAA,CAAM;AAAA,EACpB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW,GAAA;AAAA,EACX,eAAA,GAAkB;AACpB,CAAA,EAAgB;AACd,EAAA,MAAM,SAAA,GAAYI,aAAuB,IAAI,CAAA;AAE7C,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,SAAS,UAAU,CAAA,EAAkB;AACnC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,EAAQ;AAAA,IAClC;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,SAAS,CAAA;AAAA,EAChE,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAElB,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,OAAOC,qBAAA;AAAA,oBACLN,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qBAAA;AAAA,QACV,OAAA,EAAS,kBAAkB,OAAA,GAAU,MAAA;AAAA,QACrC,YAAA,EAAW,MAAA;AAAA,QACX,IAAA,EAAK,QAAA;AAAA,QAEL,QAAA,kBAAAE,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,SAAA;AAAA,YACL,SAAA,EAAU,YAAA;AAAA,YACV,KAAA,EAAO,EAAE,QAAA,EAAS;AAAA,YAClB,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAElC,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,KAAA,mBAAQF,eAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qBAAqB,QAAA,EAAA,KAAA,EAAM,CAAA,mBAAQA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA;AAAA,gCAChEA,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,SAAA,EAAU,mBAAA;AAAA,oBACV,OAAA,EAAS,OAAA;AAAA,oBACT,YAAA,EAAW,QAAA;AAAA,oBAEX,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EACnD,QAAA,kBAAAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,CAAA,EAAE,sBAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY,GAAA;AAAA,wBACZ,aAAA,EAAc;AAAA;AAAA,qBAChB,EACF;AAAA;AAAA;AACF,eAAA,EACF,CAAA;AAAA,8BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAoB,QAAA,EAAS,CAAA;AAAA,cAC3C,0BAAUA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAsB,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA;AACzD;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;ACjEA,IAAMC,IAAAA,GAAK,IAAI,CAAA,KACb,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErB,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACED,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWD,IAAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAC5C,QAAA,EAAA;AAAA,IAAA,IAAA,oBACCD,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,cAAA,EAAgB,QAAA;AAAA,UAChB,YAAA,EAAc;AAAA,SAChB;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,IAED,4BAAYA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAA6B,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,IAC/D;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ","file":"index.cjs","sourcesContent":["import { type ButtonHTMLAttributes } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface IButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n}\n\nconst sizeClass: Record<ButtonSize, string> = {\n sm: \"dybo-btn--sm\",\n md: \"\",\n lg: \"dybo-btn--lg\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled,\n className,\n children,\n ...props\n}: IButtonProps) {\n return (\n <button\n className={cx(\n \"dybo-btn\",\n `dybo-btn--${variant}`,\n sizeClass[size],\n className,\n )}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? \"…\" : children}\n </button>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport interface ICardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: number | string;\n solid?: boolean;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Card({\n padding = 24,\n solid = false,\n className,\n style,\n ...props\n}: ICardProps) {\n return (\n <div\n className={cx(\"dybo-glass\", className)}\n style={{\n padding,\n background: solid ? \"var(--dybo-surface-card-solid)\" : undefined,\n ...style,\n }}\n {...props}\n />\n );\n}\n","import { type InputHTMLAttributes } from \"react\";\n\nexport interface IInputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Input({ label, error, className, id, ...props }: IInputProps) {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={inputId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <input\n id={inputId}\n className={cx(\n \"dybo-input\",\n error ? \"dybo-input--error\" : undefined,\n className,\n )}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n />\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type BadgeStatus =\n | \"brand\"\n | \"resolved\"\n | \"high\"\n | \"medium\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport interface IBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status?: BadgeStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Badge({ status = \"brand\", className, ...props }: IBadgeProps) {\n return (\n <span\n className={cx(\"dybo-badge\", `dybo-badge--${status}`, className)}\n {...props}\n />\n );\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface IIconRailItemProps extends HTMLAttributes<HTMLAnchorElement> {\n href?: string;\n active?: boolean;\n title?: string;\n children: ReactNode;\n}\n\nexport interface IIconRailProps {\n brand: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function IconRailItem({\n active = false,\n className,\n children,\n ...props\n}: IIconRailItemProps) {\n return (\n <a\n className={cx(\n \"dybo-icon-rail__item\",\n active ? \"dybo-icon-rail__item--active\" : undefined,\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n}\n\nexport function IconRail({ brand, children, className }: IIconRailProps) {\n return (\n <aside className={cx(\"dybo-icon-rail\", className)}>\n <div className=\"dybo-icon-rail__brand\">{brand}</div>\n <div className=\"dybo-icon-rail__nav\">\n <div className=\"dybo-icon-rail__pill\">\n <nav className=\"dybo-icon-rail__items\">{children}</nav>\n </div>\n </div>\n </aside>\n );\n}\n","export interface INavTab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface INavTabsProps {\n tabs: INavTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavTabs({ tabs, active, onChange, className }: INavTabsProps) {\n return (\n <div className={cx(\"dybo-navtabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-navtab\",\n tab.key === active ? \"dybo-navtab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface IScopeTab {\n key: string;\n label: string;\n count?: number;\n disabled?: boolean;\n}\n\nexport interface IScopeTabsProps {\n tabs: IScopeTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function ScopeTabs({ tabs, active, onChange, className }: IScopeTabsProps) {\n return (\n <div className={cx(\"dybo-scope\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-scope-tab\",\n tab.key === active ? \"dybo-scope-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n {tab.count !== undefined && (\n <span className=\"dybo-scope-count\">{tab.count}</span>\n )}\n </button>\n ))}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type PriorityLevel = \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\";\n\nexport interface IPriorityBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n priority: PriorityLevel;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function PriorityBadge({\n priority,\n className,\n children,\n ...props\n}: IPriorityBadgeProps) {\n return (\n <span\n className={cx(\"dybo-priority\", `dybo-priority--${priority}`, className)}\n {...props}\n >\n {children ?? priority}\n </span>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type TicketStatus = \"open\" | \"pending\" | \"snoozed\" | \"resolved\";\n\nexport interface ITicketStatusBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status: TicketStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nconst defaultLabels: Record<TicketStatus, string> = {\n open: \"Open\",\n pending: \"Pending\",\n snoozed: \"Snoozed\",\n resolved: \"Resolved\",\n};\n\nexport function TicketStatusBadge({\n status,\n className,\n children,\n ...props\n}: ITicketStatusBadgeProps) {\n return (\n <span\n className={cx(\n \"dybo-ticket-status\",\n `dybo-ticket-status--${status}`,\n className,\n )}\n {...props}\n >\n {children ?? defaultLabels[status]}\n </span>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface IAppShellProps {\n sidebar: ReactNode;\n topBar?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function AppShell({\n sidebar,\n topBar,\n children,\n className,\n}: IAppShellProps) {\n return (\n <div className={cx(\"dybo-app-shell\", className)}>\n {sidebar}\n <div className=\"dybo-main\">\n {topBar}\n <div className=\"dybo-content\">{children}</div>\n </div>\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ISidebarUser {\n name: string;\n email?: string;\n}\n\nexport interface ISidebarProps {\n brand?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n user?: ISidebarUser;\n onLogout?: () => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Sidebar({\n brand,\n children,\n footer,\n user,\n onLogout,\n className,\n}: ISidebarProps) {\n return (\n <aside className={cx(\"dybo-sidebar\", className)}>\n {brand && <div className=\"dybo-sidebar__brand\">{brand}</div>}\n <nav className=\"dybo-sidebar__nav\">{children}</nav>\n <div className=\"dybo-sidebar__footer\">\n {user && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n lineHeight: 1.3,\n }}\n >\n <b style={{ color: \"#fff\", fontSize: \"13px\" }}>{user.name}</b>\n {user.email && (\n <span style={{ color: \"#7f8592\", fontSize: \"11px\" }}>\n {user.email}\n </span>\n )}\n </div>\n )}\n {footer}\n {onLogout && (\n <button\n type=\"button\"\n onClick={onLogout}\n style={{\n background: \"transparent\",\n border: \"1px solid rgba(255,255,255,0.18)\",\n color: \"var(--dybo-sidebar-text)\",\n padding: \"6px 10px\",\n fontSize: \"12px\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n >\n Log out\n </button>\n )}\n </div>\n </aside>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ITopBarProps {\n title: string;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function TopBar({ title, children, className }: ITopBarProps) {\n return (\n <header className={cx(\"dybo-topbar\", className)}>\n <span className=\"dybo-topbar__title\">{title}</span>\n {children}\n </header>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface INavItemProps {\n label: string;\n href?: string;\n active?: boolean;\n icon?: ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport interface INavSectionProps {\n label: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavItem({\n label,\n href,\n active = false,\n icon,\n onClick,\n className,\n}: INavItemProps) {\n const baseClass = cx(\n \"dybo-nav-item\",\n active ? \"dybo-nav-item--active\" : undefined,\n className,\n );\n\n const content = (\n <>\n {icon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{icon}</span>\n ) : (\n <span className=\"dybo-nav-item__dot\" />\n )}\n {label}\n </>\n );\n\n if (href) {\n return (\n <a href={href} className={baseClass} onClick={onClick}>\n {content}\n </a>\n );\n }\n\n return (\n <button type=\"button\" className={baseClass} onClick={onClick}>\n {content}\n </button>\n );\n}\n\nexport function NavSection({ label }: INavSectionProps) {\n return <div className=\"dybo-sidebar__section\">{label}</div>;\n}\n","import { type ReactNode } from \"react\";\n\nexport type ColumnAlign = \"left\" | \"right\" | \"center\";\n\nexport interface IColumn<TRow = Record<string, unknown>> {\n key: string;\n label: string;\n align?: ColumnAlign;\n format?: (value: unknown, row: TRow) => ReactNode;\n className?: string;\n}\n\nexport interface IDataTableProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: IColumn<TRow>[];\n rows: TRow[];\n rowKey?: keyof TRow | ((row: TRow, index: number) => string | number);\n onRowClick?: (row: TRow) => void;\n emptyMessage?: string;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function DataTable<TRow extends Record<string, unknown>>({\n columns,\n rows,\n rowKey,\n onRowClick,\n emptyMessage = \"Nenhum resultado.\",\n className,\n}: IDataTableProps<TRow>) {\n function getRowKey(row: TRow, index: number): string | number {\n if (!rowKey) return index;\n if (typeof rowKey === \"function\") return rowKey(row, index);\n return row[rowKey] as string | number;\n }\n\n return (\n <div className={cx(\"dybo-table-wrap\", className)}>\n <table className=\"dybo-table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n style={{\n textAlign: \"center\",\n padding: \"32px\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n rows.map((row, index) => (\n <tr\n key={getRowKey(row, index)}\n className={cx(\n onRowClick ? \"dybo-table__row--clickable\" : undefined,\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => {\n const value = row[col.key];\n return (\n <td\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.format\n ? col.format(value, row)\n : String(value ?? \"\")}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","export interface ITab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ITabsProps {\n tabs: ITab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Tabs({ tabs, active, onChange, className }: ITabsProps) {\n return (\n <div className={cx(\"dybo-tabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-tab\",\n tab.key === active ? \"dybo-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","import { type ReactNode, type CSSProperties } from \"react\";\n\nexport interface IOverviewField {\n label: string;\n value: ReactNode;\n className?: string;\n}\n\nexport interface IOverviewGridProps {\n fields: IOverviewField[];\n className?: string;\n}\n\nexport interface IOverviewFieldProps extends IOverviewField {\n style?: CSSProperties;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function OverviewField({\n label,\n value,\n className,\n style,\n}: IOverviewFieldProps) {\n return (\n <div className={cx(\"dybo-overview-field\", className)} style={style}>\n <span className=\"dybo-overview-field__label\">{label}</span>\n <span className=\"dybo-overview-field__value\">{value}</span>\n </div>\n );\n}\n\nexport function OverviewGrid({ fields, className }: IOverviewGridProps) {\n return (\n <div className={cx(\"dybo-overview-grid\", className)}>\n {fields.map((field, i) => (\n <OverviewField key={i} {...field} />\n ))}\n </div>\n );\n}\n","import { type SelectHTMLAttributes } from \"react\";\n\nexport interface ISelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ISelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n options: ISelectOption[];\n placeholder?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Select({\n label,\n error,\n options,\n placeholder,\n className,\n id,\n ...props\n}: ISelectProps) {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={selectId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <select\n id={selectId}\n className={cx(\"dybo-select\", className)}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport type AlertVariant = \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface IAlertProps {\n variant?: AlertVariant;\n children: ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\nconst icons: Record<AlertVariant, string> = {\n success: \"✓\",\n warning: \"⚠\",\n danger: \"✕\",\n info: \"ℹ\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Alert({\n variant = \"info\",\n children,\n onClose,\n className,\n}: IAlertProps) {\n return (\n <div\n className={cx(\"dybo-alert\", `dybo-alert--${variant}`, className)}\n role=\"alert\"\n >\n <span style={{ flexShrink: 0, fontWeight: 700 }}>{icons[variant]}</span>\n <span style={{ flexGrow: 1 }}>{children}</span>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Fechar\"\n style={{\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n color: \"inherit\",\n padding: \"0 4px\",\n flexShrink: 0,\n fontSize: \"16px\",\n lineHeight: 1,\n opacity: 0.7,\n }}\n >\n ×\n </button>\n )}\n </div>\n );\n}\n","import { type ReactNode, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface IModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n maxWidth = 520,\n closeOnBackdrop = true,\n}: IModalProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") onClose();\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n\n return createPortal(\n <div\n className=\"dybo-modal-backdrop\"\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n <div\n ref={dialogRef}\n className=\"dybo-modal\"\n style={{ maxWidth }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"dybo-modal__header\">\n {title ? <h2 className=\"dybo-modal__title\">{title}</h2> : <span />}\n <button\n type=\"button\"\n className=\"dybo-modal__close\"\n onClick={onClose}\n aria-label=\"Fechar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2l12 12M14 2L2 14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n <div className=\"dybo-modal__body\">{children}</div>\n {footer && <div className=\"dybo-modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ILoginCardProps {\n logo?: ReactNode;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function LoginCard({\n logo,\n subtitle,\n children,\n className,\n}: ILoginCardProps) {\n return (\n <div className=\"dybo-login-wrap\">\n <div className={cx(\"dybo-login-card\", className)}>\n {logo && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: 16,\n }}\n >\n {logo}\n </div>\n )}\n {subtitle && <p className=\"dybo-login-card__subtitle\">{subtitle}</p>}\n {children}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/Badge.tsx","../src/components/IconRail.tsx","../src/components/NavTabs.tsx","../src/components/ScopeTabs.tsx","../src/components/PriorityBadge.tsx","../src/components/TicketStatusBadge.tsx","../src/components/AppShell.tsx","../src/components/Sidebar.tsx","../src/components/TopBar.tsx","../src/components/NavItem.tsx","../src/components/DataTable.tsx","../src/components/Tabs.tsx","../src/components/OverviewGrid.tsx","../src/components/Select.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/Drawer.tsx","../src/components/LoginCard.tsx"],"names":["jsx","cx","jsxs","Fragment","useRef","useEffect","createPortal"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ButtonHTMLAttributes } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface IButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n}\n\nconst sizeClass: Record<ButtonSize, string> = {\n sm: \"dybo-btn--sm\",\n md: \"\",\n lg: \"dybo-btn--lg\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled,\n className,\n children,\n ...props\n}: IButtonProps) {\n return (\n <button\n className={cx(\n \"dybo-btn\",\n `dybo-btn--${variant}`,\n sizeClass[size],\n className,\n )}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? \"…\" : children}\n </button>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport interface ICardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: number | string;\n solid?: boolean;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Card({\n padding = 24,\n solid = false,\n className,\n style,\n ...props\n}: ICardProps) {\n return (\n <div\n className={cx(\"dybo-glass\", className)}\n style={{\n padding,\n background: solid ? \"var(--dybo-surface-card-solid)\" : undefined,\n ...style,\n }}\n {...props}\n />\n );\n}\n","import { type InputHTMLAttributes } from \"react\";\n\nexport interface IInputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Input({ label, error, className, id, ...props }: IInputProps) {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={inputId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <input\n id={inputId}\n className={cx(\n \"dybo-input\",\n error ? \"dybo-input--error\" : undefined,\n className,\n )}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n />\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type BadgeStatus =\n | \"brand\"\n | \"resolved\"\n | \"high\"\n | \"medium\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport interface IBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status?: BadgeStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Badge({ status = \"brand\", className, ...props }: IBadgeProps) {\n return (\n <span\n className={cx(\"dybo-badge\", `dybo-badge--${status}`, className)}\n {...props}\n />\n );\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface IIconRailItemProps extends HTMLAttributes<HTMLAnchorElement> {\n href?: string;\n active?: boolean;\n title?: string;\n children: ReactNode;\n}\n\nexport interface IIconRailProps {\n brand: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function IconRailItem({\n active = false,\n className,\n children,\n ...props\n}: IIconRailItemProps) {\n return (\n <a\n className={cx(\n \"dybo-icon-rail__item\",\n active ? \"dybo-icon-rail__item--active\" : undefined,\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n}\n\nexport function IconRail({ brand, children, className }: IIconRailProps) {\n return (\n <aside className={cx(\"dybo-icon-rail\", className)}>\n <div className=\"dybo-icon-rail__brand\">{brand}</div>\n <div className=\"dybo-icon-rail__nav\">\n <div className=\"dybo-icon-rail__pill\">\n <nav className=\"dybo-icon-rail__items\">{children}</nav>\n </div>\n </div>\n </aside>\n );\n}\n","export interface INavTab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface INavTabsProps {\n tabs: INavTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavTabs({ tabs, active, onChange, className }: INavTabsProps) {\n return (\n <div className={cx(\"dybo-navtabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-navtab\",\n tab.key === active ? \"dybo-navtab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface IScopeTab {\n key: string;\n label: string;\n count?: number;\n disabled?: boolean;\n}\n\nexport interface IScopeTabsProps {\n tabs: IScopeTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function ScopeTabs({ tabs, active, onChange, className }: IScopeTabsProps) {\n return (\n <div className={cx(\"dybo-scope\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-scope-tab\",\n tab.key === active ? \"dybo-scope-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n {tab.count !== undefined && (\n <span className=\"dybo-scope-count\">{tab.count}</span>\n )}\n </button>\n ))}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type PriorityLevel = \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\";\n\nexport interface IPriorityBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n priority: PriorityLevel;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function PriorityBadge({\n priority,\n className,\n children,\n ...props\n}: IPriorityBadgeProps) {\n return (\n <span\n className={cx(\"dybo-priority\", `dybo-priority--${priority}`, className)}\n {...props}\n >\n {children ?? priority}\n </span>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type TicketStatus = \"open\" | \"pending\" | \"snoozed\" | \"resolved\";\n\nexport interface ITicketStatusBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status: TicketStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nconst defaultLabels: Record<TicketStatus, string> = {\n open: \"Open\",\n pending: \"Pending\",\n snoozed: \"Snoozed\",\n resolved: \"Resolved\",\n};\n\nexport function TicketStatusBadge({\n status,\n className,\n children,\n ...props\n}: ITicketStatusBadgeProps) {\n return (\n <span\n className={cx(\n \"dybo-ticket-status\",\n `dybo-ticket-status--${status}`,\n className,\n )}\n {...props}\n >\n {children ?? defaultLabels[status]}\n </span>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface IAppShellProps {\n sidebar: ReactNode;\n topBar?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function AppShell({\n sidebar,\n topBar,\n children,\n className,\n}: IAppShellProps) {\n return (\n <div className={cx(\"dybo-app-shell\", className)}>\n {sidebar}\n <div className=\"dybo-main\">\n {topBar}\n <div className=\"dybo-content\">{children}</div>\n </div>\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ISidebarUser {\n name: string;\n email?: string;\n}\n\nexport interface ISidebarProps {\n brand?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n user?: ISidebarUser;\n onLogout?: () => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Sidebar({\n brand,\n children,\n footer,\n user,\n onLogout,\n className,\n}: ISidebarProps) {\n return (\n <aside className={cx(\"dybo-sidebar\", className)}>\n {brand && <div className=\"dybo-sidebar__brand\">{brand}</div>}\n <nav className=\"dybo-sidebar__nav\">{children}</nav>\n <div className=\"dybo-sidebar__footer\">\n {user && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n lineHeight: 1.3,\n }}\n >\n <b style={{ color: \"#fff\", fontSize: \"13px\" }}>{user.name}</b>\n {user.email && (\n <span style={{ color: \"#7f8592\", fontSize: \"11px\" }}>\n {user.email}\n </span>\n )}\n </div>\n )}\n {footer}\n {onLogout && (\n <button\n type=\"button\"\n onClick={onLogout}\n style={{\n background: \"transparent\",\n border: \"1px solid rgba(255,255,255,0.18)\",\n color: \"var(--dybo-sidebar-text)\",\n padding: \"6px 10px\",\n fontSize: \"12px\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n >\n Log out\n </button>\n )}\n </div>\n </aside>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ITopBarProps {\n title: string;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function TopBar({ title, children, className }: ITopBarProps) {\n return (\n <header className={cx(\"dybo-topbar\", className)}>\n <span className=\"dybo-topbar__title\">{title}</span>\n {children}\n </header>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface INavItemProps {\n label: string;\n href?: string;\n active?: boolean;\n icon?: ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport interface INavSectionProps {\n label: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavItem({\n label,\n href,\n active = false,\n icon,\n onClick,\n className,\n}: INavItemProps) {\n const baseClass = cx(\n \"dybo-nav-item\",\n active ? \"dybo-nav-item--active\" : undefined,\n className,\n );\n\n const content = (\n <>\n {icon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{icon}</span>\n ) : (\n <span className=\"dybo-nav-item__dot\" />\n )}\n {label}\n </>\n );\n\n if (href) {\n return (\n <a href={href} className={baseClass} onClick={onClick}>\n {content}\n </a>\n );\n }\n\n return (\n <button type=\"button\" className={baseClass} onClick={onClick}>\n {content}\n </button>\n );\n}\n\nexport function NavSection({ label }: INavSectionProps) {\n return <div className=\"dybo-sidebar__section\">{label}</div>;\n}\n","import { type ReactNode } from \"react\";\n\nexport type ColumnAlign = \"left\" | \"right\" | \"center\";\n\nexport interface IColumn<TRow = Record<string, unknown>> {\n key: string;\n label: string;\n align?: ColumnAlign;\n format?: (value: unknown, row: TRow) => ReactNode;\n className?: string;\n}\n\nexport interface IDataTableProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: IColumn<TRow>[];\n rows: TRow[];\n rowKey?: keyof TRow | ((row: TRow, index: number) => string | number);\n onRowClick?: (row: TRow) => void;\n emptyMessage?: string;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function DataTable<TRow extends Record<string, unknown>>({\n columns,\n rows,\n rowKey,\n onRowClick,\n emptyMessage = \"Nenhum resultado.\",\n className,\n}: IDataTableProps<TRow>) {\n function getRowKey(row: TRow, index: number): string | number {\n if (!rowKey) return index;\n if (typeof rowKey === \"function\") return rowKey(row, index);\n return row[rowKey] as string | number;\n }\n\n return (\n <div className={cx(\"dybo-table-wrap\", className)}>\n <table className=\"dybo-table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n style={{\n textAlign: \"center\",\n padding: \"32px\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n rows.map((row, index) => (\n <tr\n key={getRowKey(row, index)}\n className={cx(\n onRowClick ? \"dybo-table__row--clickable\" : undefined,\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => {\n const value = row[col.key];\n return (\n <td\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.format\n ? col.format(value, row)\n : String(value ?? \"\")}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","export interface ITab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ITabsProps {\n tabs: ITab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Tabs({ tabs, active, onChange, className }: ITabsProps) {\n return (\n <div className={cx(\"dybo-tabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-tab\",\n tab.key === active ? \"dybo-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","import { type ReactNode, type CSSProperties } from \"react\";\n\nexport interface IOverviewField {\n label: string;\n value: ReactNode;\n className?: string;\n}\n\nexport interface IOverviewGridProps {\n fields: IOverviewField[];\n className?: string;\n}\n\nexport interface IOverviewFieldProps extends IOverviewField {\n style?: CSSProperties;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function OverviewField({\n label,\n value,\n className,\n style,\n}: IOverviewFieldProps) {\n return (\n <div className={cx(\"dybo-overview-field\", className)} style={style}>\n <span className=\"dybo-overview-field__label\">{label}</span>\n <span className=\"dybo-overview-field__value\">{value}</span>\n </div>\n );\n}\n\nexport function OverviewGrid({ fields, className }: IOverviewGridProps) {\n return (\n <div className={cx(\"dybo-overview-grid\", className)}>\n {fields.map((field, i) => (\n <OverviewField key={i} {...field} />\n ))}\n </div>\n );\n}\n","import { type SelectHTMLAttributes } from \"react\";\n\nexport interface ISelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ISelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n options: ISelectOption[];\n placeholder?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Select({\n label,\n error,\n options,\n placeholder,\n className,\n id,\n ...props\n}: ISelectProps) {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={selectId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <select\n id={selectId}\n className={cx(\"dybo-select\", className)}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport type AlertVariant = \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface IAlertProps {\n variant?: AlertVariant;\n children: ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\nconst icons: Record<AlertVariant, string> = {\n success: \"✓\",\n warning: \"⚠\",\n danger: \"✕\",\n info: \"ℹ\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Alert({\n variant = \"info\",\n children,\n onClose,\n className,\n}: IAlertProps) {\n return (\n <div\n className={cx(\"dybo-alert\", `dybo-alert--${variant}`, className)}\n role=\"alert\"\n >\n <span style={{ flexShrink: 0, fontWeight: 700 }}>{icons[variant]}</span>\n <span style={{ flexGrow: 1 }}>{children}</span>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Fechar\"\n style={{\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n color: \"inherit\",\n padding: \"0 4px\",\n flexShrink: 0,\n fontSize: \"16px\",\n lineHeight: 1,\n opacity: 0.7,\n }}\n >\n ×\n </button>\n )}\n </div>\n );\n}\n","import { type ReactNode, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface IModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n maxWidth = 520,\n closeOnBackdrop = true,\n}: IModalProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") onClose();\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n\n return createPortal(\n <div\n className=\"dybo-modal-backdrop\"\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n <div\n ref={dialogRef}\n className=\"dybo-modal\"\n style={{ maxWidth }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"dybo-modal__header\">\n {title ? <h2 className=\"dybo-modal__title\">{title}</h2> : <span />}\n <button\n type=\"button\"\n className=\"dybo-modal__close\"\n onClick={onClose}\n aria-label=\"Fechar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2l12 12M14 2L2 14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n <div className=\"dybo-modal__body\">{children}</div>\n {footer && <div className=\"dybo-modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type ReactNode, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface IDrawerProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n side?: \"left\" | \"right\";\n width?: number | string;\n closeOnBackdrop?: boolean;\n hideHeader?: boolean;\n}\n\nexport function Drawer({\n open,\n onClose,\n title,\n children,\n footer,\n side = \"right\",\n width,\n closeOnBackdrop = true,\n hideHeader = false,\n}: IDrawerProps) {\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") onClose();\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n\n const panelClass =\n side === \"left\" ? \"dybo-drawer-panel dybo-drawer-panel--left\" : \"dybo-drawer-panel dybo-drawer-panel--right\";\n\n return createPortal(\n <>\n <div\n className=\"dybo-drawer-backdrop\"\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-hidden\n />\n <aside\n className={panelClass}\n style={width !== undefined ? { width, maxWidth: \"100%\" } : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n onClick={(e) => e.stopPropagation()}\n >\n {!hideHeader && (\n <div className=\"dybo-drawer-panel__header\">\n {title ? <h2 className=\"dybo-drawer-panel__title\">{title}</h2> : <span />}\n <button\n type=\"button\"\n className=\"dybo-drawer-panel__close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2l12 12M14 2L2 14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n )}\n <div\n className={\n hideHeader ? \"dybo-drawer-panel__body dybo-drawer-panel__body--flush\" : \"dybo-drawer-panel__body\"\n }\n >\n {children}\n </div>\n {footer && <div className=\"dybo-drawer-panel__footer\">{footer}</div>}\n </aside>\n </>,\n document.body,\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ILoginCardProps {\n logo?: ReactNode;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function LoginCard({\n logo,\n subtitle,\n children,\n className,\n}: ILoginCardProps) {\n return (\n <div className=\"dybo-login-wrap\">\n <div className={cx(\"dybo-login-card\", className)}>\n {logo && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: 16,\n }}\n >\n {logo}\n </div>\n )}\n {subtitle && <p className=\"dybo-login-card__subtitle\">{subtitle}</p>}\n {children}\n </div>\n </div>\n );\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -203,6 +203,19 @@ interface IModalProps {
203
203
  }
204
204
  declare function Modal({ open, onClose, title, children, footer, maxWidth, closeOnBackdrop, }: IModalProps): react.ReactPortal | null;
205
205
 
206
+ interface IDrawerProps {
207
+ open: boolean;
208
+ onClose: () => void;
209
+ title?: string;
210
+ children: ReactNode;
211
+ footer?: ReactNode;
212
+ side?: "left" | "right";
213
+ width?: number | string;
214
+ closeOnBackdrop?: boolean;
215
+ hideHeader?: boolean;
216
+ }
217
+ declare function Drawer({ open, onClose, title, children, footer, side, width, closeOnBackdrop, hideHeader, }: IDrawerProps): react.ReactPortal | null;
218
+
206
219
  interface ILoginCardProps {
207
220
  logo?: ReactNode;
208
221
  subtitle?: string;
@@ -211,4 +224,4 @@ interface ILoginCardProps {
211
224
  }
212
225
  declare function LoginCard({ logo, subtitle, children, className, }: ILoginCardProps): react.JSX.Element;
213
226
 
214
- export { Alert, type AlertVariant, AppShell, Badge, type BadgeStatus, Button, type ButtonSize, type ButtonVariant, Card, type ColumnAlign, DataTable, type IAlertProps, type IAppShellProps, type IBadgeProps, type IButtonProps, type ICardProps, type IColumn, type IDataTableProps, type IIconRailItemProps, type IIconRailProps, type IInputProps, type ILoginCardProps, type IModalProps, type INavItemProps, type INavSectionProps, type INavTab, type INavTabsProps, type IOverviewField, type IOverviewFieldProps, type IOverviewGridProps, type IPriorityBadgeProps, type IScopeTab, type IScopeTabsProps, type ISelectOption, type ISelectProps, type ISidebarProps, type ISidebarUser, type ITab, type ITabsProps, type ITicketStatusBadgeProps, type ITopBarProps, IconRail, IconRailItem, Input, LoginCard, Modal, NavItem, NavSection, NavTabs, OverviewField, OverviewGrid, PriorityBadge, type PriorityLevel, ScopeTabs, Select, Sidebar, Tabs, type TicketStatus, TicketStatusBadge, TopBar };
227
+ export { Alert, type AlertVariant, AppShell, Badge, type BadgeStatus, Button, type ButtonSize, type ButtonVariant, Card, type ColumnAlign, DataTable, Drawer, type IAlertProps, type IAppShellProps, type IBadgeProps, type IButtonProps, type ICardProps, type IColumn, type IDataTableProps, type IDrawerProps, type IIconRailItemProps, type IIconRailProps, type IInputProps, type ILoginCardProps, type IModalProps, type INavItemProps, type INavSectionProps, type INavTab, type INavTabsProps, type IOverviewField, type IOverviewFieldProps, type IOverviewGridProps, type IPriorityBadgeProps, type IScopeTab, type IScopeTabsProps, type ISelectOption, type ISelectProps, type ISidebarProps, type ISidebarUser, type ITab, type ITabsProps, type ITicketStatusBadgeProps, type ITopBarProps, IconRail, IconRailItem, Input, LoginCard, Modal, NavItem, NavSection, NavTabs, OverviewField, OverviewGrid, PriorityBadge, type PriorityLevel, ScopeTabs, Select, Sidebar, Tabs, type TicketStatus, TicketStatusBadge, TopBar };
package/dist/index.d.ts CHANGED
@@ -203,6 +203,19 @@ interface IModalProps {
203
203
  }
204
204
  declare function Modal({ open, onClose, title, children, footer, maxWidth, closeOnBackdrop, }: IModalProps): react.ReactPortal | null;
205
205
 
206
+ interface IDrawerProps {
207
+ open: boolean;
208
+ onClose: () => void;
209
+ title?: string;
210
+ children: ReactNode;
211
+ footer?: ReactNode;
212
+ side?: "left" | "right";
213
+ width?: number | string;
214
+ closeOnBackdrop?: boolean;
215
+ hideHeader?: boolean;
216
+ }
217
+ declare function Drawer({ open, onClose, title, children, footer, side, width, closeOnBackdrop, hideHeader, }: IDrawerProps): react.ReactPortal | null;
218
+
206
219
  interface ILoginCardProps {
207
220
  logo?: ReactNode;
208
221
  subtitle?: string;
@@ -211,4 +224,4 @@ interface ILoginCardProps {
211
224
  }
212
225
  declare function LoginCard({ logo, subtitle, children, className, }: ILoginCardProps): react.JSX.Element;
213
226
 
214
- export { Alert, type AlertVariant, AppShell, Badge, type BadgeStatus, Button, type ButtonSize, type ButtonVariant, Card, type ColumnAlign, DataTable, type IAlertProps, type IAppShellProps, type IBadgeProps, type IButtonProps, type ICardProps, type IColumn, type IDataTableProps, type IIconRailItemProps, type IIconRailProps, type IInputProps, type ILoginCardProps, type IModalProps, type INavItemProps, type INavSectionProps, type INavTab, type INavTabsProps, type IOverviewField, type IOverviewFieldProps, type IOverviewGridProps, type IPriorityBadgeProps, type IScopeTab, type IScopeTabsProps, type ISelectOption, type ISelectProps, type ISidebarProps, type ISidebarUser, type ITab, type ITabsProps, type ITicketStatusBadgeProps, type ITopBarProps, IconRail, IconRailItem, Input, LoginCard, Modal, NavItem, NavSection, NavTabs, OverviewField, OverviewGrid, PriorityBadge, type PriorityLevel, ScopeTabs, Select, Sidebar, Tabs, type TicketStatus, TicketStatusBadge, TopBar };
227
+ export { Alert, type AlertVariant, AppShell, Badge, type BadgeStatus, Button, type ButtonSize, type ButtonVariant, Card, type ColumnAlign, DataTable, Drawer, type IAlertProps, type IAppShellProps, type IBadgeProps, type IButtonProps, type ICardProps, type IColumn, type IDataTableProps, type IDrawerProps, type IIconRailItemProps, type IIconRailProps, type IInputProps, type ILoginCardProps, type IModalProps, type INavItemProps, type INavSectionProps, type INavTab, type INavTabsProps, type IOverviewField, type IOverviewFieldProps, type IOverviewGridProps, type IPriorityBadgeProps, type IScopeTab, type IScopeTabsProps, type ISelectOption, type ISelectProps, type ISidebarProps, type ISidebarUser, type ITab, type ITabsProps, type ITicketStatusBadgeProps, type ITopBarProps, IconRail, IconRailItem, Input, LoginCard, Modal, NavItem, NavSection, NavTabs, OverviewField, OverviewGrid, PriorityBadge, type PriorityLevel, ScopeTabs, Select, Sidebar, Tabs, type TicketStatus, TicketStatusBadge, TopBar };
package/dist/index.js CHANGED
@@ -577,6 +577,82 @@ function Modal({
577
577
  document.body
578
578
  );
579
579
  }
580
+ function Drawer({
581
+ open,
582
+ onClose,
583
+ title,
584
+ children,
585
+ footer,
586
+ side = "right",
587
+ width,
588
+ closeOnBackdrop = true,
589
+ hideHeader = false
590
+ }) {
591
+ useEffect(() => {
592
+ if (!open) return;
593
+ function onKeyDown(e) {
594
+ if (e.key === "Escape") onClose();
595
+ }
596
+ document.addEventListener("keydown", onKeyDown);
597
+ return () => document.removeEventListener("keydown", onKeyDown);
598
+ }, [open, onClose]);
599
+ if (!open) return null;
600
+ const panelClass = side === "left" ? "dybo-drawer-panel dybo-drawer-panel--left" : "dybo-drawer-panel dybo-drawer-panel--right";
601
+ return createPortal(
602
+ /* @__PURE__ */ jsxs(Fragment, { children: [
603
+ /* @__PURE__ */ jsx(
604
+ "div",
605
+ {
606
+ className: "dybo-drawer-backdrop",
607
+ onClick: closeOnBackdrop ? onClose : void 0,
608
+ "aria-hidden": true
609
+ }
610
+ ),
611
+ /* @__PURE__ */ jsxs(
612
+ "aside",
613
+ {
614
+ className: panelClass,
615
+ style: width !== void 0 ? { width, maxWidth: "100%" } : void 0,
616
+ "aria-modal": "true",
617
+ role: "dialog",
618
+ onClick: (e) => e.stopPropagation(),
619
+ children: [
620
+ !hideHeader && /* @__PURE__ */ jsxs("div", { className: "dybo-drawer-panel__header", children: [
621
+ title ? /* @__PURE__ */ jsx("h2", { className: "dybo-drawer-panel__title", children: title }) : /* @__PURE__ */ jsx("span", {}),
622
+ /* @__PURE__ */ jsx(
623
+ "button",
624
+ {
625
+ type: "button",
626
+ className: "dybo-drawer-panel__close",
627
+ onClick: onClose,
628
+ "aria-label": "Close",
629
+ children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsx(
630
+ "path",
631
+ {
632
+ d: "M2 2l12 12M14 2L2 14",
633
+ stroke: "currentColor",
634
+ strokeWidth: "2",
635
+ strokeLinecap: "round"
636
+ }
637
+ ) })
638
+ }
639
+ )
640
+ ] }),
641
+ /* @__PURE__ */ jsx(
642
+ "div",
643
+ {
644
+ className: hideHeader ? "dybo-drawer-panel__body dybo-drawer-panel__body--flush" : "dybo-drawer-panel__body",
645
+ children
646
+ }
647
+ ),
648
+ footer && /* @__PURE__ */ jsx("div", { className: "dybo-drawer-panel__footer", children: footer })
649
+ ]
650
+ }
651
+ )
652
+ ] }),
653
+ document.body
654
+ );
655
+ }
580
656
  var cx19 = (...c) => c.filter(Boolean).join(" ");
581
657
  function LoginCard({
582
658
  logo,
@@ -601,6 +677,6 @@ function LoginCard({
601
677
  ] }) });
602
678
  }
603
679
 
604
- export { Alert, AppShell, Badge, Button, Card, DataTable, IconRail, IconRailItem, Input, LoginCard, Modal, NavItem, NavSection, NavTabs, OverviewField, OverviewGrid, PriorityBadge, ScopeTabs, Select, Sidebar, Tabs, TicketStatusBadge, TopBar };
680
+ export { Alert, AppShell, Badge, Button, Card, DataTable, Drawer, IconRail, IconRailItem, Input, LoginCard, Modal, NavItem, NavSection, NavTabs, OverviewField, OverviewGrid, PriorityBadge, ScopeTabs, Select, Sidebar, Tabs, TicketStatusBadge, TopBar };
605
681
  //# sourceMappingURL=index.js.map
606
682
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/Badge.tsx","../src/components/IconRail.tsx","../src/components/NavTabs.tsx","../src/components/ScopeTabs.tsx","../src/components/PriorityBadge.tsx","../src/components/TicketStatusBadge.tsx","../src/components/AppShell.tsx","../src/components/Sidebar.tsx","../src/components/TopBar.tsx","../src/components/NavItem.tsx","../src/components/DataTable.tsx","../src/components/Tabs.tsx","../src/components/OverviewGrid.tsx","../src/components/Select.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/LoginCard.tsx"],"names":["cx","jsx","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import { type ButtonHTMLAttributes } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface IButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n}\n\nconst sizeClass: Record<ButtonSize, string> = {\n sm: \"dybo-btn--sm\",\n md: \"\",\n lg: \"dybo-btn--lg\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled,\n className,\n children,\n ...props\n}: IButtonProps) {\n return (\n <button\n className={cx(\n \"dybo-btn\",\n `dybo-btn--${variant}`,\n sizeClass[size],\n className,\n )}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? \"…\" : children}\n </button>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport interface ICardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: number | string;\n solid?: boolean;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Card({\n padding = 24,\n solid = false,\n className,\n style,\n ...props\n}: ICardProps) {\n return (\n <div\n className={cx(\"dybo-glass\", className)}\n style={{\n padding,\n background: solid ? \"var(--dybo-surface-card-solid)\" : undefined,\n ...style,\n }}\n {...props}\n />\n );\n}\n","import { type InputHTMLAttributes } from \"react\";\n\nexport interface IInputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Input({ label, error, className, id, ...props }: IInputProps) {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={inputId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <input\n id={inputId}\n className={cx(\n \"dybo-input\",\n error ? \"dybo-input--error\" : undefined,\n className,\n )}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n />\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type BadgeStatus =\n | \"brand\"\n | \"resolved\"\n | \"high\"\n | \"medium\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport interface IBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status?: BadgeStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Badge({ status = \"brand\", className, ...props }: IBadgeProps) {\n return (\n <span\n className={cx(\"dybo-badge\", `dybo-badge--${status}`, className)}\n {...props}\n />\n );\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface IIconRailItemProps extends HTMLAttributes<HTMLAnchorElement> {\n href?: string;\n active?: boolean;\n title?: string;\n children: ReactNode;\n}\n\nexport interface IIconRailProps {\n brand: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function IconRailItem({\n active = false,\n className,\n children,\n ...props\n}: IIconRailItemProps) {\n return (\n <a\n className={cx(\n \"dybo-icon-rail__item\",\n active ? \"dybo-icon-rail__item--active\" : undefined,\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n}\n\nexport function IconRail({ brand, children, className }: IIconRailProps) {\n return (\n <aside className={cx(\"dybo-icon-rail\", className)}>\n <div className=\"dybo-icon-rail__brand\">{brand}</div>\n <div className=\"dybo-icon-rail__nav\">\n <div className=\"dybo-icon-rail__pill\">\n <nav className=\"dybo-icon-rail__items\">{children}</nav>\n </div>\n </div>\n </aside>\n );\n}\n","export interface INavTab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface INavTabsProps {\n tabs: INavTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavTabs({ tabs, active, onChange, className }: INavTabsProps) {\n return (\n <div className={cx(\"dybo-navtabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-navtab\",\n tab.key === active ? \"dybo-navtab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface IScopeTab {\n key: string;\n label: string;\n count?: number;\n disabled?: boolean;\n}\n\nexport interface IScopeTabsProps {\n tabs: IScopeTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function ScopeTabs({ tabs, active, onChange, className }: IScopeTabsProps) {\n return (\n <div className={cx(\"dybo-scope\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-scope-tab\",\n tab.key === active ? \"dybo-scope-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n {tab.count !== undefined && (\n <span className=\"dybo-scope-count\">{tab.count}</span>\n )}\n </button>\n ))}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type PriorityLevel = \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\";\n\nexport interface IPriorityBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n priority: PriorityLevel;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function PriorityBadge({\n priority,\n className,\n children,\n ...props\n}: IPriorityBadgeProps) {\n return (\n <span\n className={cx(\"dybo-priority\", `dybo-priority--${priority}`, className)}\n {...props}\n >\n {children ?? priority}\n </span>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type TicketStatus = \"open\" | \"pending\" | \"snoozed\" | \"resolved\";\n\nexport interface ITicketStatusBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status: TicketStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nconst defaultLabels: Record<TicketStatus, string> = {\n open: \"Open\",\n pending: \"Pending\",\n snoozed: \"Snoozed\",\n resolved: \"Resolved\",\n};\n\nexport function TicketStatusBadge({\n status,\n className,\n children,\n ...props\n}: ITicketStatusBadgeProps) {\n return (\n <span\n className={cx(\n \"dybo-ticket-status\",\n `dybo-ticket-status--${status}`,\n className,\n )}\n {...props}\n >\n {children ?? defaultLabels[status]}\n </span>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface IAppShellProps {\n sidebar: ReactNode;\n topBar?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function AppShell({\n sidebar,\n topBar,\n children,\n className,\n}: IAppShellProps) {\n return (\n <div className={cx(\"dybo-app-shell\", className)}>\n {sidebar}\n <div className=\"dybo-main\">\n {topBar}\n <div className=\"dybo-content\">{children}</div>\n </div>\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ISidebarUser {\n name: string;\n email?: string;\n}\n\nexport interface ISidebarProps {\n brand?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n user?: ISidebarUser;\n onLogout?: () => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Sidebar({\n brand,\n children,\n footer,\n user,\n onLogout,\n className,\n}: ISidebarProps) {\n return (\n <aside className={cx(\"dybo-sidebar\", className)}>\n {brand && <div className=\"dybo-sidebar__brand\">{brand}</div>}\n <nav className=\"dybo-sidebar__nav\">{children}</nav>\n <div className=\"dybo-sidebar__footer\">\n {user && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n lineHeight: 1.3,\n }}\n >\n <b style={{ color: \"#fff\", fontSize: \"13px\" }}>{user.name}</b>\n {user.email && (\n <span style={{ color: \"#7f8592\", fontSize: \"11px\" }}>\n {user.email}\n </span>\n )}\n </div>\n )}\n {footer}\n {onLogout && (\n <button\n type=\"button\"\n onClick={onLogout}\n style={{\n background: \"transparent\",\n border: \"1px solid rgba(255,255,255,0.18)\",\n color: \"var(--dybo-sidebar-text)\",\n padding: \"6px 10px\",\n fontSize: \"12px\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n >\n Log out\n </button>\n )}\n </div>\n </aside>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ITopBarProps {\n title: string;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function TopBar({ title, children, className }: ITopBarProps) {\n return (\n <header className={cx(\"dybo-topbar\", className)}>\n <span className=\"dybo-topbar__title\">{title}</span>\n {children}\n </header>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface INavItemProps {\n label: string;\n href?: string;\n active?: boolean;\n icon?: ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport interface INavSectionProps {\n label: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavItem({\n label,\n href,\n active = false,\n icon,\n onClick,\n className,\n}: INavItemProps) {\n const baseClass = cx(\n \"dybo-nav-item\",\n active ? \"dybo-nav-item--active\" : undefined,\n className,\n );\n\n const content = (\n <>\n {icon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{icon}</span>\n ) : (\n <span className=\"dybo-nav-item__dot\" />\n )}\n {label}\n </>\n );\n\n if (href) {\n return (\n <a href={href} className={baseClass} onClick={onClick}>\n {content}\n </a>\n );\n }\n\n return (\n <button type=\"button\" className={baseClass} onClick={onClick}>\n {content}\n </button>\n );\n}\n\nexport function NavSection({ label }: INavSectionProps) {\n return <div className=\"dybo-sidebar__section\">{label}</div>;\n}\n","import { type ReactNode } from \"react\";\n\nexport type ColumnAlign = \"left\" | \"right\" | \"center\";\n\nexport interface IColumn<TRow = Record<string, unknown>> {\n key: string;\n label: string;\n align?: ColumnAlign;\n format?: (value: unknown, row: TRow) => ReactNode;\n className?: string;\n}\n\nexport interface IDataTableProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: IColumn<TRow>[];\n rows: TRow[];\n rowKey?: keyof TRow | ((row: TRow, index: number) => string | number);\n onRowClick?: (row: TRow) => void;\n emptyMessage?: string;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function DataTable<TRow extends Record<string, unknown>>({\n columns,\n rows,\n rowKey,\n onRowClick,\n emptyMessage = \"Nenhum resultado.\",\n className,\n}: IDataTableProps<TRow>) {\n function getRowKey(row: TRow, index: number): string | number {\n if (!rowKey) return index;\n if (typeof rowKey === \"function\") return rowKey(row, index);\n return row[rowKey] as string | number;\n }\n\n return (\n <div className={cx(\"dybo-table-wrap\", className)}>\n <table className=\"dybo-table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n style={{\n textAlign: \"center\",\n padding: \"32px\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n rows.map((row, index) => (\n <tr\n key={getRowKey(row, index)}\n className={cx(\n onRowClick ? \"dybo-table__row--clickable\" : undefined,\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => {\n const value = row[col.key];\n return (\n <td\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.format\n ? col.format(value, row)\n : String(value ?? \"\")}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","export interface ITab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ITabsProps {\n tabs: ITab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Tabs({ tabs, active, onChange, className }: ITabsProps) {\n return (\n <div className={cx(\"dybo-tabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-tab\",\n tab.key === active ? \"dybo-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","import { type ReactNode, type CSSProperties } from \"react\";\n\nexport interface IOverviewField {\n label: string;\n value: ReactNode;\n className?: string;\n}\n\nexport interface IOverviewGridProps {\n fields: IOverviewField[];\n className?: string;\n}\n\nexport interface IOverviewFieldProps extends IOverviewField {\n style?: CSSProperties;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function OverviewField({\n label,\n value,\n className,\n style,\n}: IOverviewFieldProps) {\n return (\n <div className={cx(\"dybo-overview-field\", className)} style={style}>\n <span className=\"dybo-overview-field__label\">{label}</span>\n <span className=\"dybo-overview-field__value\">{value}</span>\n </div>\n );\n}\n\nexport function OverviewGrid({ fields, className }: IOverviewGridProps) {\n return (\n <div className={cx(\"dybo-overview-grid\", className)}>\n {fields.map((field, i) => (\n <OverviewField key={i} {...field} />\n ))}\n </div>\n );\n}\n","import { type SelectHTMLAttributes } from \"react\";\n\nexport interface ISelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ISelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n options: ISelectOption[];\n placeholder?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Select({\n label,\n error,\n options,\n placeholder,\n className,\n id,\n ...props\n}: ISelectProps) {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={selectId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <select\n id={selectId}\n className={cx(\"dybo-select\", className)}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport type AlertVariant = \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface IAlertProps {\n variant?: AlertVariant;\n children: ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\nconst icons: Record<AlertVariant, string> = {\n success: \"✓\",\n warning: \"⚠\",\n danger: \"✕\",\n info: \"ℹ\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Alert({\n variant = \"info\",\n children,\n onClose,\n className,\n}: IAlertProps) {\n return (\n <div\n className={cx(\"dybo-alert\", `dybo-alert--${variant}`, className)}\n role=\"alert\"\n >\n <span style={{ flexShrink: 0, fontWeight: 700 }}>{icons[variant]}</span>\n <span style={{ flexGrow: 1 }}>{children}</span>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Fechar\"\n style={{\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n color: \"inherit\",\n padding: \"0 4px\",\n flexShrink: 0,\n fontSize: \"16px\",\n lineHeight: 1,\n opacity: 0.7,\n }}\n >\n ×\n </button>\n )}\n </div>\n );\n}\n","import { type ReactNode, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface IModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n maxWidth = 520,\n closeOnBackdrop = true,\n}: IModalProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") onClose();\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n\n return createPortal(\n <div\n className=\"dybo-modal-backdrop\"\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n <div\n ref={dialogRef}\n className=\"dybo-modal\"\n style={{ maxWidth }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"dybo-modal__header\">\n {title ? <h2 className=\"dybo-modal__title\">{title}</h2> : <span />}\n <button\n type=\"button\"\n className=\"dybo-modal__close\"\n onClick={onClose}\n aria-label=\"Fechar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2l12 12M14 2L2 14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n <div className=\"dybo-modal__body\">{children}</div>\n {footer && <div className=\"dybo-modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ILoginCardProps {\n logo?: ReactNode;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function LoginCard({\n logo,\n subtitle,\n children,\n className,\n}: ILoginCardProps) {\n return (\n <div className=\"dybo-login-wrap\">\n <div className={cx(\"dybo-login-card\", className)}>\n {logo && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: 16,\n }}\n >\n {logo}\n </div>\n )}\n {subtitle && <p className=\"dybo-login-card__subtitle\">{subtitle}</p>}\n {children}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/Badge.tsx","../src/components/IconRail.tsx","../src/components/NavTabs.tsx","../src/components/ScopeTabs.tsx","../src/components/PriorityBadge.tsx","../src/components/TicketStatusBadge.tsx","../src/components/AppShell.tsx","../src/components/Sidebar.tsx","../src/components/TopBar.tsx","../src/components/NavItem.tsx","../src/components/DataTable.tsx","../src/components/Tabs.tsx","../src/components/OverviewGrid.tsx","../src/components/Select.tsx","../src/components/Alert.tsx","../src/components/Modal.tsx","../src/components/Drawer.tsx","../src/components/LoginCard.tsx"],"names":["cx","jsx","jsxs","useEffect","createPortal","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { type ButtonHTMLAttributes } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface IButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n}\n\nconst sizeClass: Record<ButtonSize, string> = {\n sm: \"dybo-btn--sm\",\n md: \"\",\n lg: \"dybo-btn--lg\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled,\n className,\n children,\n ...props\n}: IButtonProps) {\n return (\n <button\n className={cx(\n \"dybo-btn\",\n `dybo-btn--${variant}`,\n sizeClass[size],\n className,\n )}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? \"…\" : children}\n </button>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport interface ICardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: number | string;\n solid?: boolean;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Card({\n padding = 24,\n solid = false,\n className,\n style,\n ...props\n}: ICardProps) {\n return (\n <div\n className={cx(\"dybo-glass\", className)}\n style={{\n padding,\n background: solid ? \"var(--dybo-surface-card-solid)\" : undefined,\n ...style,\n }}\n {...props}\n />\n );\n}\n","import { type InputHTMLAttributes } from \"react\";\n\nexport interface IInputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Input({ label, error, className, id, ...props }: IInputProps) {\n const inputId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={inputId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <input\n id={inputId}\n className={cx(\n \"dybo-input\",\n error ? \"dybo-input--error\" : undefined,\n className,\n )}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n />\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type BadgeStatus =\n | \"brand\"\n | \"resolved\"\n | \"high\"\n | \"medium\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport interface IBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status?: BadgeStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Badge({ status = \"brand\", className, ...props }: IBadgeProps) {\n return (\n <span\n className={cx(\"dybo-badge\", `dybo-badge--${status}`, className)}\n {...props}\n />\n );\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface IIconRailItemProps extends HTMLAttributes<HTMLAnchorElement> {\n href?: string;\n active?: boolean;\n title?: string;\n children: ReactNode;\n}\n\nexport interface IIconRailProps {\n brand: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function IconRailItem({\n active = false,\n className,\n children,\n ...props\n}: IIconRailItemProps) {\n return (\n <a\n className={cx(\n \"dybo-icon-rail__item\",\n active ? \"dybo-icon-rail__item--active\" : undefined,\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n}\n\nexport function IconRail({ brand, children, className }: IIconRailProps) {\n return (\n <aside className={cx(\"dybo-icon-rail\", className)}>\n <div className=\"dybo-icon-rail__brand\">{brand}</div>\n <div className=\"dybo-icon-rail__nav\">\n <div className=\"dybo-icon-rail__pill\">\n <nav className=\"dybo-icon-rail__items\">{children}</nav>\n </div>\n </div>\n </aside>\n );\n}\n","export interface INavTab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface INavTabsProps {\n tabs: INavTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavTabs({ tabs, active, onChange, className }: INavTabsProps) {\n return (\n <div className={cx(\"dybo-navtabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-navtab\",\n tab.key === active ? \"dybo-navtab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface IScopeTab {\n key: string;\n label: string;\n count?: number;\n disabled?: boolean;\n}\n\nexport interface IScopeTabsProps {\n tabs: IScopeTab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function ScopeTabs({ tabs, active, onChange, className }: IScopeTabsProps) {\n return (\n <div className={cx(\"dybo-scope\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-scope-tab\",\n tab.key === active ? \"dybo-scope-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n {tab.count !== undefined && (\n <span className=\"dybo-scope-count\">{tab.count}</span>\n )}\n </button>\n ))}\n </div>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type PriorityLevel = \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\";\n\nexport interface IPriorityBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n priority: PriorityLevel;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function PriorityBadge({\n priority,\n className,\n children,\n ...props\n}: IPriorityBadgeProps) {\n return (\n <span\n className={cx(\"dybo-priority\", `dybo-priority--${priority}`, className)}\n {...props}\n >\n {children ?? priority}\n </span>\n );\n}\n","import { type HTMLAttributes } from \"react\";\n\nexport type TicketStatus = \"open\" | \"pending\" | \"snoozed\" | \"resolved\";\n\nexport interface ITicketStatusBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n status: TicketStatus;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nconst defaultLabels: Record<TicketStatus, string> = {\n open: \"Open\",\n pending: \"Pending\",\n snoozed: \"Snoozed\",\n resolved: \"Resolved\",\n};\n\nexport function TicketStatusBadge({\n status,\n className,\n children,\n ...props\n}: ITicketStatusBadgeProps) {\n return (\n <span\n className={cx(\n \"dybo-ticket-status\",\n `dybo-ticket-status--${status}`,\n className,\n )}\n {...props}\n >\n {children ?? defaultLabels[status]}\n </span>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface IAppShellProps {\n sidebar: ReactNode;\n topBar?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function AppShell({\n sidebar,\n topBar,\n children,\n className,\n}: IAppShellProps) {\n return (\n <div className={cx(\"dybo-app-shell\", className)}>\n {sidebar}\n <div className=\"dybo-main\">\n {topBar}\n <div className=\"dybo-content\">{children}</div>\n </div>\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ISidebarUser {\n name: string;\n email?: string;\n}\n\nexport interface ISidebarProps {\n brand?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n user?: ISidebarUser;\n onLogout?: () => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Sidebar({\n brand,\n children,\n footer,\n user,\n onLogout,\n className,\n}: ISidebarProps) {\n return (\n <aside className={cx(\"dybo-sidebar\", className)}>\n {brand && <div className=\"dybo-sidebar__brand\">{brand}</div>}\n <nav className=\"dybo-sidebar__nav\">{children}</nav>\n <div className=\"dybo-sidebar__footer\">\n {user && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n lineHeight: 1.3,\n }}\n >\n <b style={{ color: \"#fff\", fontSize: \"13px\" }}>{user.name}</b>\n {user.email && (\n <span style={{ color: \"#7f8592\", fontSize: \"11px\" }}>\n {user.email}\n </span>\n )}\n </div>\n )}\n {footer}\n {onLogout && (\n <button\n type=\"button\"\n onClick={onLogout}\n style={{\n background: \"transparent\",\n border: \"1px solid rgba(255,255,255,0.18)\",\n color: \"var(--dybo-sidebar-text)\",\n padding: \"6px 10px\",\n fontSize: \"12px\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n transition: \"background 0.15s, border-color 0.15s\",\n }}\n >\n Log out\n </button>\n )}\n </div>\n </aside>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ITopBarProps {\n title: string;\n children?: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function TopBar({ title, children, className }: ITopBarProps) {\n return (\n <header className={cx(\"dybo-topbar\", className)}>\n <span className=\"dybo-topbar__title\">{title}</span>\n {children}\n </header>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface INavItemProps {\n label: string;\n href?: string;\n active?: boolean;\n icon?: ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport interface INavSectionProps {\n label: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function NavItem({\n label,\n href,\n active = false,\n icon,\n onClick,\n className,\n}: INavItemProps) {\n const baseClass = cx(\n \"dybo-nav-item\",\n active ? \"dybo-nav-item--active\" : undefined,\n className,\n );\n\n const content = (\n <>\n {icon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{icon}</span>\n ) : (\n <span className=\"dybo-nav-item__dot\" />\n )}\n {label}\n </>\n );\n\n if (href) {\n return (\n <a href={href} className={baseClass} onClick={onClick}>\n {content}\n </a>\n );\n }\n\n return (\n <button type=\"button\" className={baseClass} onClick={onClick}>\n {content}\n </button>\n );\n}\n\nexport function NavSection({ label }: INavSectionProps) {\n return <div className=\"dybo-sidebar__section\">{label}</div>;\n}\n","import { type ReactNode } from \"react\";\n\nexport type ColumnAlign = \"left\" | \"right\" | \"center\";\n\nexport interface IColumn<TRow = Record<string, unknown>> {\n key: string;\n label: string;\n align?: ColumnAlign;\n format?: (value: unknown, row: TRow) => ReactNode;\n className?: string;\n}\n\nexport interface IDataTableProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: IColumn<TRow>[];\n rows: TRow[];\n rowKey?: keyof TRow | ((row: TRow, index: number) => string | number);\n onRowClick?: (row: TRow) => void;\n emptyMessage?: string;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function DataTable<TRow extends Record<string, unknown>>({\n columns,\n rows,\n rowKey,\n onRowClick,\n emptyMessage = \"Nenhum resultado.\",\n className,\n}: IDataTableProps<TRow>) {\n function getRowKey(row: TRow, index: number): string | number {\n if (!rowKey) return index;\n if (typeof rowKey === \"function\") return rowKey(row, index);\n return row[rowKey] as string | number;\n }\n\n return (\n <div className={cx(\"dybo-table-wrap\", className)}>\n <table className=\"dybo-table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n style={{\n textAlign: \"center\",\n padding: \"32px\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n rows.map((row, index) => (\n <tr\n key={getRowKey(row, index)}\n className={cx(\n onRowClick ? \"dybo-table__row--clickable\" : undefined,\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => {\n const value = row[col.key];\n return (\n <td\n key={col.key}\n className={cx(\n col.align === \"left\" ? \"left\" : undefined,\n col.className,\n )}\n >\n {col.format\n ? col.format(value, row)\n : String(value ?? \"\")}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","export interface ITab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ITabsProps {\n tabs: ITab[];\n active: string;\n onChange: (key: string) => void;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Tabs({ tabs, active, onChange, className }: ITabsProps) {\n return (\n <div className={cx(\"dybo-tabs\", className)} role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.key === active}\n disabled={tab.disabled}\n className={cx(\n \"dybo-tab\",\n tab.key === active ? \"dybo-tab--active\" : undefined,\n )}\n onClick={() => !tab.disabled && onChange(tab.key)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","import { type ReactNode, type CSSProperties } from \"react\";\n\nexport interface IOverviewField {\n label: string;\n value: ReactNode;\n className?: string;\n}\n\nexport interface IOverviewGridProps {\n fields: IOverviewField[];\n className?: string;\n}\n\nexport interface IOverviewFieldProps extends IOverviewField {\n style?: CSSProperties;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function OverviewField({\n label,\n value,\n className,\n style,\n}: IOverviewFieldProps) {\n return (\n <div className={cx(\"dybo-overview-field\", className)} style={style}>\n <span className=\"dybo-overview-field__label\">{label}</span>\n <span className=\"dybo-overview-field__value\">{value}</span>\n </div>\n );\n}\n\nexport function OverviewGrid({ fields, className }: IOverviewGridProps) {\n return (\n <div className={cx(\"dybo-overview-grid\", className)}>\n {fields.map((field, i) => (\n <OverviewField key={i} {...field} />\n ))}\n </div>\n );\n}\n","import { type SelectHTMLAttributes } from \"react\";\n\nexport interface ISelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ISelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n options: ISelectOption[];\n placeholder?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Select({\n label,\n error,\n options,\n placeholder,\n className,\n id,\n ...props\n}: ISelectProps) {\n const selectId = id ?? label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {label && (\n <label\n htmlFor={selectId}\n style={{\n fontSize: \"var(--dybo-font-size-sm)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n color: \"var(--dybo-color-text-muted)\",\n }}\n >\n {label}\n </label>\n )}\n <select\n id={selectId}\n className={cx(\"dybo-select\", className)}\n style={\n error\n ? {\n borderColor: \"var(--dybo-danger)\",\n boxShadow: \"0 0 0 3px rgba(162,26,23,0.12)\",\n }\n : undefined\n }\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n {error && (\n <span\n style={{\n fontSize: \"var(--dybo-font-size-xs)\",\n color: \"var(--dybo-danger)\",\n fontWeight: \"var(--dybo-font-weight-medium)\",\n }}\n >\n {error}\n </span>\n )}\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport type AlertVariant = \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface IAlertProps {\n variant?: AlertVariant;\n children: ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\nconst icons: Record<AlertVariant, string> = {\n success: \"✓\",\n warning: \"⚠\",\n danger: \"✕\",\n info: \"ℹ\",\n};\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function Alert({\n variant = \"info\",\n children,\n onClose,\n className,\n}: IAlertProps) {\n return (\n <div\n className={cx(\"dybo-alert\", `dybo-alert--${variant}`, className)}\n role=\"alert\"\n >\n <span style={{ flexShrink: 0, fontWeight: 700 }}>{icons[variant]}</span>\n <span style={{ flexGrow: 1 }}>{children}</span>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Fechar\"\n style={{\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n color: \"inherit\",\n padding: \"0 4px\",\n flexShrink: 0,\n fontSize: \"16px\",\n lineHeight: 1,\n opacity: 0.7,\n }}\n >\n ×\n </button>\n )}\n </div>\n );\n}\n","import { type ReactNode, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface IModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n maxWidth = 520,\n closeOnBackdrop = true,\n}: IModalProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") onClose();\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n\n return createPortal(\n <div\n className=\"dybo-modal-backdrop\"\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n <div\n ref={dialogRef}\n className=\"dybo-modal\"\n style={{ maxWidth }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"dybo-modal__header\">\n {title ? <h2 className=\"dybo-modal__title\">{title}</h2> : <span />}\n <button\n type=\"button\"\n className=\"dybo-modal__close\"\n onClick={onClose}\n aria-label=\"Fechar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2l12 12M14 2L2 14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n <div className=\"dybo-modal__body\">{children}</div>\n {footer && <div className=\"dybo-modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type ReactNode, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface IDrawerProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n side?: \"left\" | \"right\";\n width?: number | string;\n closeOnBackdrop?: boolean;\n hideHeader?: boolean;\n}\n\nexport function Drawer({\n open,\n onClose,\n title,\n children,\n footer,\n side = \"right\",\n width,\n closeOnBackdrop = true,\n hideHeader = false,\n}: IDrawerProps) {\n useEffect(() => {\n if (!open) return;\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") onClose();\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n\n const panelClass =\n side === \"left\" ? \"dybo-drawer-panel dybo-drawer-panel--left\" : \"dybo-drawer-panel dybo-drawer-panel--right\";\n\n return createPortal(\n <>\n <div\n className=\"dybo-drawer-backdrop\"\n onClick={closeOnBackdrop ? onClose : undefined}\n aria-hidden\n />\n <aside\n className={panelClass}\n style={width !== undefined ? { width, maxWidth: \"100%\" } : undefined}\n aria-modal=\"true\"\n role=\"dialog\"\n onClick={(e) => e.stopPropagation()}\n >\n {!hideHeader && (\n <div className=\"dybo-drawer-panel__header\">\n {title ? <h2 className=\"dybo-drawer-panel__title\">{title}</h2> : <span />}\n <button\n type=\"button\"\n className=\"dybo-drawer-panel__close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2l12 12M14 2L2 14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n )}\n <div\n className={\n hideHeader ? \"dybo-drawer-panel__body dybo-drawer-panel__body--flush\" : \"dybo-drawer-panel__body\"\n }\n >\n {children}\n </div>\n {footer && <div className=\"dybo-drawer-panel__footer\">{footer}</div>}\n </aside>\n </>,\n document.body,\n );\n}\n","import { type ReactNode } from \"react\";\n\nexport interface ILoginCardProps {\n logo?: ReactNode;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nconst cx = (...c: (string | undefined | false)[]) =>\n c.filter(Boolean).join(\" \");\n\nexport function LoginCard({\n logo,\n subtitle,\n children,\n className,\n}: ILoginCardProps) {\n return (\n <div className=\"dybo-login-wrap\">\n <div className={cx(\"dybo-login-card\", className)}>\n {logo && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: 16,\n }}\n >\n {logo}\n </div>\n )}\n {subtitle && <p className=\"dybo-login-card__subtitle\">{subtitle}</p>}\n {children}\n </div>\n </div>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dybo-ai/design",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "DYBO design system — tokens, Tailwind V4 theme, theme CSS, and React components.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
package/portal-tokens.css CHANGED
@@ -166,14 +166,12 @@ body {
166
166
  line-height: 1.5;
167
167
  }
168
168
 
169
- /* Transição suave entre light/dark */
169
+ /* Transição suave entre light/dark (sem background-color — evita overlays translúcidos no mount) */
170
170
  body,
171
- [class*="bg-"],
172
171
  [class*="text-"],
173
172
  [class*="border-"] {
174
173
  transition:
175
174
  color .3s cubic-bezier(.4,0,.2,1),
176
- background-color .3s cubic-bezier(.4,0,.2,1),
177
175
  border-color .3s cubic-bezier(.4,0,.2,1);
178
176
  }
179
177
 
package/theme.css CHANGED
@@ -21,6 +21,7 @@
21
21
  --dybo-portal-surface-card-high-dark: rgba(18, 26, 45, 0.92);
22
22
  --dybo-portal-shadow-level-1: 0px 4px 8px #1419271f;
23
23
  --dybo-portal-shadow-level-2: 0px 8px 28px #14192729;
24
+ --dybo-portal-drawer-backdrop: rgba(10, 15, 25, 0.3);
24
25
  --dybo-portal-feedback-success-light: #90eabd;
25
26
  --dybo-portal-feedback-success-bg: #d6f0e3;
26
27
  --dybo-portal-feedback-warning: #cc6600;
@@ -768,6 +769,95 @@ body {
768
769
  flex-shrink: 0;
769
770
  }
770
771
 
772
+ .dybo-modal .dybo-input,
773
+ .dybo-modal .dybo-select,
774
+ .dybo-drawer-panel .dybo-input,
775
+ .dybo-drawer-panel .dybo-select {
776
+ background: hsl(var(--popover));
777
+ }
778
+
779
+ /* ---- Drawer (ticket-management Debbie panel pattern) ---- */
780
+ .dybo-drawer-backdrop {
781
+ position: fixed;
782
+ inset: 0;
783
+ z-index: 1000;
784
+ background: var(--dybo-portal-drawer-backdrop);
785
+ }
786
+ .dybo-drawer-panel {
787
+ position: fixed;
788
+ top: 0;
789
+ height: 100%;
790
+ width: min(380px, 90vw);
791
+ max-width: 100%;
792
+ background: hsl(var(--card));
793
+ color: hsl(var(--card-foreground));
794
+ border-color: hsl(var(--border));
795
+ box-shadow: var(--dybo-portal-shadow-level-2);
796
+ display: flex;
797
+ flex-direction: column;
798
+ z-index: 1001;
799
+ overflow: hidden;
800
+ }
801
+ .dybo-drawer-panel--right {
802
+ right: 0;
803
+ border-left: var(--dybo-border-sm) solid hsl(var(--border));
804
+ }
805
+ .dybo-drawer-panel--left {
806
+ left: 0;
807
+ border-right: var(--dybo-border-sm) solid hsl(var(--border));
808
+ }
809
+ .dybo-drawer-panel__header {
810
+ display: flex;
811
+ align-items: center;
812
+ justify-content: space-between;
813
+ flex-shrink: 0;
814
+ padding: 16px 20px;
815
+ border-bottom: 1px solid hsl(var(--border));
816
+ }
817
+ .dybo-drawer-panel__title {
818
+ font-size: var(--dybo-font-size-lg);
819
+ font-weight: var(--dybo-font-weight-semibold);
820
+ color: var(--dybo-color-text-primary);
821
+ margin: 0;
822
+ }
823
+ .dybo-drawer-panel__close {
824
+ background: transparent;
825
+ border: none;
826
+ cursor: pointer;
827
+ color: var(--dybo-color-text-muted);
828
+ padding: 4px;
829
+ border-radius: 6px;
830
+ display: flex;
831
+ align-items: center;
832
+ justify-content: center;
833
+ transition:
834
+ background 0.15s,
835
+ color 0.15s;
836
+ }
837
+ .dybo-drawer-panel__close:hover {
838
+ background: rgba(194, 199, 207, 0.3);
839
+ color: var(--dybo-color-text-primary);
840
+ }
841
+ .dybo-drawer-panel__body {
842
+ flex: 1;
843
+ min-height: 0;
844
+ overflow-y: auto;
845
+ padding: 20px;
846
+ }
847
+ .dybo-drawer-panel__body--flush {
848
+ padding: 0;
849
+ display: flex;
850
+ flex-direction: column;
851
+ }
852
+ .dybo-drawer-panel__footer {
853
+ flex-shrink: 0;
854
+ padding: 16px 20px;
855
+ border-top: 1px solid hsl(var(--border));
856
+ display: flex;
857
+ gap: 12px;
858
+ justify-content: flex-end;
859
+ }
860
+
771
861
  /* =========================================================================
772
862
  Portal / Ticket Management patterns
773
863
  ========================================================================= */
package/tokens.cjs CHANGED
@@ -46,6 +46,7 @@ const portal = {
46
46
  operatorPage: "#e4e4e4",
47
47
  cardHighOpacity: "rgba(240,241,244,0.92)",
48
48
  cardHighOpacityDark: "rgba(18,26,45,0.92)",
49
+ drawerBackdrop: "rgba(10,15,25,0.3)",
49
50
  },
50
51
  shadow: {
51
52
  level1: "0px 4px 8px #1419271f",
package/tokens.json CHANGED
@@ -117,7 +117,8 @@
117
117
  "surface": {
118
118
  "operatorPage": { "value": "#e4e4e4", "desc": "Operator screens background override" },
119
119
  "cardHighOpacity": { "value": "rgba(240,241,244,0.92)", "desc": "Upload zones, dense panels" },
120
- "cardHighOpacityDark": { "value": "rgba(18,26,45,0.92)", "desc": "Dark mode dense panel" }
120
+ "cardHighOpacityDark": { "value": "rgba(18,26,45,0.92)", "desc": "Dark mode dense panel" },
121
+ "drawerBackdrop": { "value": "rgba(10,15,25,0.3)", "desc": "Drawer/sheet scrim — ticket-management Debbie panel" }
121
122
  },
122
123
  "shadow": {
123
124
  "level1": { "value": "0px 4px 8px #1419271f", "desc": "Cards, sidebar pill" },
package/tokens.mjs CHANGED
@@ -48,6 +48,7 @@ export const portal = {
48
48
  operatorPage: "#e4e4e4",
49
49
  cardHighOpacity: "rgba(240,241,244,0.92)",
50
50
  cardHighOpacityDark: "rgba(18,26,45,0.92)",
51
+ drawerBackdrop: "rgba(10,15,25,0.3)",
51
52
  },
52
53
  shadow: {
53
54
  level1: "0px 4px 8px #1419271f",