@papernote/ui 1.10.18 → 1.10.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/components/Alert.d.ts +1 -1
  2. package/dist/components/Alert.d.ts.map +1 -1
  3. package/dist/components/Badge.d.ts +1 -1
  4. package/dist/components/Badge.d.ts.map +1 -1
  5. package/dist/components/BottomNavigation.d.ts +6 -0
  6. package/dist/components/BottomNavigation.d.ts.map +1 -1
  7. package/dist/components/Menu.d.ts +6 -0
  8. package/dist/components/Menu.d.ts.map +1 -1
  9. package/dist/components/Sidebar.d.ts +6 -0
  10. package/dist/components/Sidebar.d.ts.map +1 -1
  11. package/dist/components/StatusBadge.d.ts +1 -1
  12. package/dist/components/StatusBadge.d.ts.map +1 -1
  13. package/dist/components/Tabs.d.ts +13 -1
  14. package/dist/components/Tabs.d.ts.map +1 -1
  15. package/dist/components/Text.d.ts +2 -1
  16. package/dist/components/Text.d.ts.map +1 -1
  17. package/dist/index.d.ts +36 -5
  18. package/dist/index.esm.js +23 -8
  19. package/dist/index.esm.js.map +1 -1
  20. package/dist/index.js +23 -8
  21. package/dist/index.js.map +1 -1
  22. package/dist/styles.css +10 -0
  23. package/package.json +1 -1
  24. package/src/components/Alert.stories.tsx +20 -7
  25. package/src/components/Alert.tsx +7 -1
  26. package/src/components/Badge.stories.tsx +18 -7
  27. package/src/components/Badge.tsx +3 -1
  28. package/src/components/BottomNavigation.stories.tsx +57 -0
  29. package/src/components/BottomNavigation.tsx +10 -2
  30. package/src/components/Menu.tsx +10 -0
  31. package/src/components/Sidebar.stories.tsx +83 -0
  32. package/src/components/Sidebar.tsx +18 -3
  33. package/src/components/StatusBadge.tsx +7 -2
  34. package/src/components/Tabs.stories.tsx +126 -0
  35. package/src/components/Tabs.tsx +17 -0
  36. package/src/components/Text.stories.tsx +30 -6
  37. package/src/components/Text.tsx +5 -3
@@ -5,7 +5,7 @@ export interface AlertAction {
5
5
  variant?: 'primary' | 'secondary';
6
6
  }
7
7
  export interface AlertProps {
8
- variant?: 'success' | 'error' | 'warning' | 'info';
8
+ variant?: 'success' | 'error' | 'warning' | 'caution' | 'info';
9
9
  title?: string;
10
10
  children: React.ReactNode;
11
11
  onClose?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../src/components/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,OAAgB,EAChB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAc,EACd,OAAY,GACb,EAAE,UAAU,2CAkFZ"}
1
+ {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../src/components/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,OAAgB,EAChB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAc,EACd,OAAY,GACb,EAAE,UAAU,2CAwFZ"}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  export interface BadgeProps {
3
3
  children?: React.ReactNode;
4
- variant?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
4
+ variant?: 'success' | 'warning' | 'error' | 'caution' | 'info' | 'neutral';
5
5
  size?: 'sm' | 'md' | 'lg';
6
6
  icon?: React.ReactNode;
7
7
  onRemove?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAC/D,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,QAAQ,EACR,OAAmB,EACnB,IAAW,EACX,IAAI,EACJ,QAAQ,EACR,SAAc,EACd,GAAW,EACX,IAAY,EACZ,QAAgB,EAChB,QAAQ,EACR,OAAe,GAChB,EAAE,UAAU,2CAqFZ"}
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,QAAQ,EACR,OAAmB,EACnB,IAAW,EACX,IAAI,EACJ,QAAQ,EACR,SAAc,EACd,GAAW,EACX,IAAY,EACZ,QAAgB,EAChB,QAAQ,EACR,OAAe,GAChB,EAAE,UAAU,2CAuFZ"}
@@ -17,6 +17,12 @@ export interface BottomNavItem {
17
17
  onClick?: () => void;
18
18
  /** Disabled state */
19
19
  disabled?: boolean;
20
+ /**
21
+ * Custom data attributes to spread on the rendered element.
22
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
23
+ * @example { 'data-tour': 'nav-home', 'data-testid': 'bottom-nav-home' }
24
+ */
25
+ dataAttributes?: Record<string, string>;
20
26
  }
21
27
  /**
22
28
  * BottomNavigation component props
@@ -1 +1 @@
1
- {"version":3,"file":"BottomNavigation.d.ts","sourceRoot":"","sources":["../../src/components/BottomNavigation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,8BAA8B;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAiB,EACjB,SAAc,EACd,QAAe,GAChB,EAAE,qBAAqB,2CAgHvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,QAAe,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,2CAOjF"}
1
+ {"version":3,"file":"BottomNavigation.d.ts","sourceRoot":"","sources":["../../src/components/BottomNavigation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,8BAA8B;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAiB,EACjB,SAAc,EACd,QAAe,GAChB,EAAE,qBAAqB,2CAkHvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,QAAe,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,2CAOjF"}
@@ -8,6 +8,12 @@ export interface MenuItem {
8
8
  danger?: boolean;
9
9
  divider?: boolean;
10
10
  submenu?: MenuItem[];
11
+ /**
12
+ * Custom data attributes to spread on the rendered element.
13
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
14
+ * @example { 'data-tour': 'menu-settings', 'data-testid': 'menu-settings' }
15
+ */
16
+ dataAttributes?: Record<string, string>;
11
17
  }
12
18
  export interface MenuProps {
13
19
  items: MenuItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/components/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAE,MAAM,OAAO,CAAC;AAG/D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;CACpE;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAC3B,KAAK,EACL,SAAc,EACd,OAAO,EACP,QAAQ,EACR,MAAsB,GACvB,EAAE,SAAS,2CAqMX;AAGD,wBAAgB,WAAW,IAC2C,QAAQ,CAC7E"}
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/components/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAE,MAAM,OAAO,CAAC;AAG/D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;CACpE;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAC3B,KAAK,EACL,SAAc,EACd,OAAO,EACP,QAAQ,EACR,MAAsB,GACvB,EAAE,SAAS,2CAyMX;AAGD,wBAAgB,WAAW,IAC2C,QAAQ,CAC7E"}
@@ -10,6 +10,12 @@ export interface SidebarItem {
10
10
  badge?: string | number;
11
11
  separator?: boolean;
12
12
  external?: boolean;
13
+ /**
14
+ * Custom data attributes to spread on the rendered element.
15
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
16
+ * @example { 'data-tour': 'nav-dashboard', 'data-testid': 'sidebar-dashboard' }
17
+ */
18
+ dataAttributes?: Record<string, string>;
13
19
  }
14
20
  export interface SidebarProps {
15
21
  items: SidebarItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/components/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqGD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,eAAsB,EAAE,WAAW,EAAE,EAAE,iBAAiB,2CAoChH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,KAAK,EACL,UAAU,EACV,SAAc,EACd,MAAM,EACN,MAAM,EACN,WAAW,EACX,UAAU,EACV,aAAa,EACb,KAAc,GACf,EAAE,YAAY,kDAyKd"}
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/components/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuGD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,eAAsB,EAAE,WAAW,EAAE,EAAE,iBAAiB,2CAoChH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,KAAK,EACL,UAAU,EACV,SAAc,EACd,MAAM,EACN,MAAM,EACN,WAAW,EACX,UAAU,EACV,aAAa,EACb,KAAc,GACf,EAAE,YAAY,kDAgLd"}
@@ -1,5 +1,5 @@
1
1
  export interface StatusBadgeProps {
2
- status: 'paid' | 'pending' | 'overdue' | 'cancelled' | 'success' | 'warning' | 'error' | 'info';
2
+ status: 'paid' | 'pending' | 'overdue' | 'cancelled' | 'success' | 'warning' | 'caution' | 'error' | 'info';
3
3
  label?: string;
4
4
  size?: 'sm' | 'md' | 'lg';
5
5
  showIcon?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/StatusBadge.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA4DD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,KAAK,EACL,IAAW,EACX,QAAe,EAChB,EAAE,gBAAgB,2CAclB"}
1
+ {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/StatusBadge.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAC5G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAiED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,KAAK,EACL,IAAW,EACX,QAAe,EAChB,EAAE,gBAAgB,2CAclB"}
@@ -11,6 +11,12 @@ export interface Tab {
11
11
  badgeVariant?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
12
12
  /** Whether this individual tab can be closed (overrides global closeable) */
13
13
  closeable?: boolean;
14
+ /**
15
+ * Custom data attributes to spread on the tab trigger element.
16
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
17
+ * @example { 'data-tour': 'tab-settings', 'data-testid': 'settings-tab' }
18
+ */
19
+ dataAttributes?: Record<string, string>;
14
20
  }
15
21
  export interface TabsProps {
16
22
  tabs: Tab[];
@@ -109,11 +115,17 @@ export interface TabsTriggerProps {
109
115
  badgeVariant?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
110
116
  /** Additional class name */
111
117
  className?: string;
118
+ /**
119
+ * Custom data attributes to spread on the tab trigger element.
120
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
121
+ * @example { 'data-tour': 'tab-settings', 'data-testid': 'settings-tab' }
122
+ */
123
+ dataAttributes?: Record<string, string>;
112
124
  }
113
125
  /**
114
126
  * TabsTrigger - Individual tab button
115
127
  */
116
- export declare function TabsTrigger({ children, value, disabled, icon, badge, badgeVariant, className, }: TabsTriggerProps): import("react/jsx-runtime").JSX.Element;
128
+ export declare function TabsTrigger({ children, value, disabled, icon, badge, badgeVariant, className, dataAttributes, }: TabsTriggerProps): import("react/jsx-runtime").JSX.Element;
117
129
  export interface TabsContentProps {
118
130
  children: React.ReactNode;
119
131
  /** Value matching the corresponding TabsTrigger */
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../src/components/Tabs.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../src/components/Tabs.tsx"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export interface TextProps extends Omit<React.HTMLAttributes<HTMLElement>, 'colo
17
17
  /** Weight variant */
18
18
  weight?: 'normal' | 'medium' | 'semibold' | 'bold';
19
19
  /** Color variant */
20
- color?: 'primary' | 'secondary' | 'muted' | 'accent' | 'error' | 'success' | 'warning';
20
+ color?: 'primary' | 'secondary' | 'muted' | 'accent' | 'error' | 'success' | 'warning' | 'caution';
21
21
  /** Text alignment */
22
22
  align?: 'left' | 'center' | 'right';
23
23
  /** Truncate text with ellipsis (single line) */
@@ -49,6 +49,7 @@ export interface TextProps extends Omit<React.HTMLAttributes<HTMLElement>, 'colo
49
49
  * </Text>
50
50
  *
51
51
  * <Text color="warning">Warning message</Text>
52
+ * <Text color="caution">Caution message (informational, not alarming)</Text>
52
53
  *
53
54
  * // With ref
54
55
  * const textRef = useRef<HTMLParagraphElement>(null);
@@ -1 +1 @@
1
- {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,KAAK,WAAW,GAAG,GAAG,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;AAE5F,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IACjF,mBAAmB;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,6BAA6B;IAC7B,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,sEAAsE;IACtE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,sEAAsE;IACtE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,qBAAqB;IACrB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACnD,oBAAoB;IACpB,KAAK,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACvF,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,qBAAqB;IACrB,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;IAChE,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,IAAI,+EAoHf,CAAC;AAIH,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,KAAK,WAAW,GAAG,GAAG,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;AAE5F,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IACjF,mBAAmB;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,6BAA6B;IAC7B,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,sEAAsE;IACtE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,sEAAsE;IACtE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,qBAAqB;IACrB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACnD,oBAAoB;IACpB,KAAK,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACnG,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,qBAAqB;IACrB,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;IAChE,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,IAAI,+EAqHf,CAAC;AAIH,eAAe,IAAI,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1822,7 +1822,7 @@ interface TextProps extends Omit<React__default.HTMLAttributes<HTMLElement>, 'co
1822
1822
  /** Weight variant */
1823
1823
  weight?: 'normal' | 'medium' | 'semibold' | 'bold';
1824
1824
  /** Color variant */
1825
- color?: 'primary' | 'secondary' | 'muted' | 'accent' | 'error' | 'success' | 'warning';
1825
+ color?: 'primary' | 'secondary' | 'muted' | 'accent' | 'error' | 'success' | 'warning' | 'caution';
1826
1826
  /** Text alignment */
1827
1827
  align?: 'left' | 'center' | 'right';
1828
1828
  /** Truncate text with ellipsis (single line) */
@@ -1854,6 +1854,7 @@ interface TextProps extends Omit<React__default.HTMLAttributes<HTMLElement>, 'co
1854
1854
  * </Text>
1855
1855
  *
1856
1856
  * <Text color="warning">Warning message</Text>
1857
+ * <Text color="caution">Caution message (informational, not alarming)</Text>
1857
1858
  *
1858
1859
  * // With ref
1859
1860
  * const textRef = useRef<HTMLParagraphElement>(null);
@@ -1891,7 +1892,7 @@ interface AlertAction {
1891
1892
  variant?: 'primary' | 'secondary';
1892
1893
  }
1893
1894
  interface AlertProps {
1894
- variant?: 'success' | 'error' | 'warning' | 'info';
1895
+ variant?: 'success' | 'error' | 'warning' | 'caution' | 'info';
1895
1896
  title?: string;
1896
1897
  children: React__default.ReactNode;
1897
1898
  onClose?: () => void;
@@ -2747,6 +2748,12 @@ interface MenuItem {
2747
2748
  danger?: boolean;
2748
2749
  divider?: boolean;
2749
2750
  submenu?: MenuItem[];
2751
+ /**
2752
+ * Custom data attributes to spread on the rendered element.
2753
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
2754
+ * @example { 'data-tour': 'menu-settings', 'data-testid': 'menu-settings' }
2755
+ */
2756
+ dataAttributes?: Record<string, string>;
2750
2757
  }
2751
2758
  interface MenuProps {
2752
2759
  items: MenuItem[];
@@ -3983,6 +3990,12 @@ interface Tab {
3983
3990
  badgeVariant?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
3984
3991
  /** Whether this individual tab can be closed (overrides global closeable) */
3985
3992
  closeable?: boolean;
3993
+ /**
3994
+ * Custom data attributes to spread on the tab trigger element.
3995
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
3996
+ * @example { 'data-tour': 'tab-settings', 'data-testid': 'settings-tab' }
3997
+ */
3998
+ dataAttributes?: Record<string, string>;
3986
3999
  }
3987
4000
  interface TabsProps {
3988
4001
  tabs: Tab[];
@@ -4081,11 +4094,17 @@ interface TabsTriggerProps {
4081
4094
  badgeVariant?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
4082
4095
  /** Additional class name */
4083
4096
  className?: string;
4097
+ /**
4098
+ * Custom data attributes to spread on the tab trigger element.
4099
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
4100
+ * @example { 'data-tour': 'tab-settings', 'data-testid': 'settings-tab' }
4101
+ */
4102
+ dataAttributes?: Record<string, string>;
4084
4103
  }
4085
4104
  /**
4086
4105
  * TabsTrigger - Individual tab button
4087
4106
  */
4088
- declare function TabsTrigger({ children, value, disabled, icon, badge, badgeVariant, className, }: TabsTriggerProps): react_jsx_runtime.JSX.Element;
4107
+ declare function TabsTrigger({ children, value, disabled, icon, badge, badgeVariant, className, dataAttributes, }: TabsTriggerProps): react_jsx_runtime.JSX.Element;
4089
4108
  interface TabsContentProps {
4090
4109
  children: React__default.ReactNode;
4091
4110
  /** Value matching the corresponding TabsTrigger */
@@ -4131,7 +4150,7 @@ declare function StepIndicator({ steps, currentStep, variant, onStepClick, }: St
4131
4150
 
4132
4151
  interface BadgeProps {
4133
4152
  children?: React__default.ReactNode;
4134
- variant?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
4153
+ variant?: 'success' | 'warning' | 'error' | 'caution' | 'info' | 'neutral';
4135
4154
  size?: 'sm' | 'md' | 'lg';
4136
4155
  icon?: React__default.ReactNode;
4137
4156
  onRemove?: () => void;
@@ -4346,6 +4365,12 @@ interface SidebarItem {
4346
4365
  badge?: string | number;
4347
4366
  separator?: boolean;
4348
4367
  external?: boolean;
4368
+ /**
4369
+ * Custom data attributes to spread on the rendered element.
4370
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
4371
+ * @example { 'data-tour': 'nav-dashboard', 'data-testid': 'sidebar-dashboard' }
4372
+ */
4373
+ dataAttributes?: Record<string, string>;
4349
4374
  }
4350
4375
  interface SidebarProps {
4351
4376
  items: SidebarItem[];
@@ -4422,6 +4447,12 @@ interface BottomNavItem {
4422
4447
  onClick?: () => void;
4423
4448
  /** Disabled state */
4424
4449
  disabled?: boolean;
4450
+ /**
4451
+ * Custom data attributes to spread on the rendered element.
4452
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
4453
+ * @example { 'data-tour': 'nav-home', 'data-testid': 'bottom-nav-home' }
4454
+ */
4455
+ dataAttributes?: Record<string, string>;
4425
4456
  }
4426
4457
  /**
4427
4458
  * BottomNavigation component props
@@ -6187,7 +6218,7 @@ interface DateDisplayProps {
6187
6218
  declare function DateDisplay({ date, format, fallback, label, showLabel, className, locale, minValidYear, }: DateDisplayProps): react_jsx_runtime.JSX.Element;
6188
6219
 
6189
6220
  interface StatusBadgeProps {
6190
- status: 'paid' | 'pending' | 'overdue' | 'cancelled' | 'success' | 'warning' | 'error' | 'info';
6221
+ status: 'paid' | 'pending' | 'overdue' | 'cancelled' | 'success' | 'warning' | 'caution' | 'error' | 'info';
6191
6222
  label?: string;
6192
6223
  size?: 'sm' | 'md' | 'lg';
6193
6224
  showIcon?: boolean;
package/dist/index.esm.js CHANGED
@@ -4885,6 +4885,7 @@ Stack.displayName = 'Stack';
4885
4885
  * </Text>
4886
4886
  *
4887
4887
  * <Text color="warning">Warning message</Text>
4888
+ * <Text color="caution">Caution message (informational, not alarming)</Text>
4888
4889
  *
4889
4890
  * // With ref
4890
4891
  * const textRef = useRef<HTMLParagraphElement>(null);
@@ -4939,6 +4940,7 @@ const Text = forwardRef(({ children, as: Component = 'p', size = 'base', smSize,
4939
4940
  error: 'text-error-600',
4940
4941
  success: 'text-success-600',
4941
4942
  warning: 'text-warning-600',
4943
+ caution: 'text-warning-700',
4942
4944
  };
4943
4945
  const alignClasses = {
4944
4946
  left: 'text-left',
@@ -5813,6 +5815,10 @@ function Alert({ variant = 'info', title, children, onClose, className = '', act
5813
5815
  container: 'bg-warning-50 border-warning-200 text-warning-900',
5814
5816
  icon: jsx(AlertTriangle, { className: "h-5 w-5 text-warning-600" }),
5815
5817
  },
5818
+ caution: {
5819
+ container: 'bg-warning-100 border-warning-200 text-warning-800',
5820
+ icon: jsx(Info, { className: "h-5 w-5 text-warning-700" }),
5821
+ },
5816
5822
  info: {
5817
5823
  container: 'bg-primary-50 border-primary-200 text-primary-900',
5818
5824
  icon: jsx(Info, { className: "h-5 w-5 text-primary-600" }),
@@ -5826,6 +5832,7 @@ function Alert({ variant = 'info', title, children, onClose, className = '', act
5826
5832
  success: 'bg-success-600 text-white hover:bg-success-700',
5827
5833
  error: 'bg-error-600 text-white hover:bg-error-700',
5828
5834
  warning: 'bg-warning-600 text-white hover:bg-warning-700',
5835
+ caution: 'bg-warning-700 text-white hover:bg-warning-800',
5829
5836
  info: 'bg-primary-600 text-white hover:bg-primary-700',
5830
5837
  };
5831
5838
  return `${base} ${variantClasses[variant]}`;
@@ -5835,6 +5842,7 @@ function Alert({ variant = 'info', title, children, onClose, className = '', act
5835
5842
  success: 'bg-white border border-success-300 text-success-700 hover:bg-success-50',
5836
5843
  error: 'bg-white border border-error-300 text-error-700 hover:bg-error-50',
5837
5844
  warning: 'bg-white border border-warning-300 text-warning-700 hover:bg-warning-50',
5845
+ caution: 'bg-white border border-warning-300 text-warning-800 hover:bg-warning-50',
5838
5846
  info: 'bg-white border border-primary-300 text-primary-700 hover:bg-primary-50',
5839
5847
  };
5840
5848
  return `${base} ${variantClasses[variant]}`;
@@ -8425,7 +8433,7 @@ function Menu({ items, className = '', onClose, position, anchor = 'bottom-left'
8425
8433
  `, style: positionStyle, role: "menu", "aria-orientation": "vertical", children: items.map((item, index) => {
8426
8434
  // Handle divider
8427
8435
  if (item.divider) {
8428
- return (jsx("div", { className: "h-px bg-ink-200 my-1", role: "separator" }, `divider-${index}`));
8436
+ return (jsx("div", { className: "h-px bg-ink-200 my-1", role: "separator", "data-testid": item.dataAttributes?.['data-testid'] || `menu-divider-${index}`, ...item.dataAttributes }, `divider-${index}`));
8429
8437
  }
8430
8438
  const currentNavIndex = navIndex;
8431
8439
  navIndex++;
@@ -8440,7 +8448,7 @@ function Menu({ items, className = '', onClose, position, anchor = 'bottom-left'
8440
8448
  ? 'text-error-600 hover:bg-error-50'
8441
8449
  : 'text-ink-900 hover:bg-accent-100'}
8442
8450
  ${focusedIndex === currentNavIndex ? 'bg-accent-100' : ''}
8443
- `, role: "menuitem", "aria-haspopup": hasSubmenu, "aria-expanded": hasSubmenu && isSubmenuOpen, children: [jsxs("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [item.icon && (jsx("span", { className: "flex-shrink-0 w-4 h-4 flex items-center justify-center", children: item.icon })), jsx("span", { className: "truncate", children: item.label })] }), hasSubmenu && (jsx(ChevronRight, { className: "h-4 w-4 flex-shrink-0 text-ink-400" }))] }), hasSubmenu && isSubmenuOpen && (jsx("div", { className: "absolute left-full top-0 ml-1 z-10", children: jsx(Menu, { items: item.submenu, onClose: onClose, anchor: "top-left" }) }))] }, item.id));
8451
+ `, role: "menuitem", "aria-haspopup": hasSubmenu, "aria-expanded": hasSubmenu && isSubmenuOpen, "data-testid": item.dataAttributes?.['data-testid'] || `menu-item-${item.id}`, ...item.dataAttributes, children: [jsxs("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [item.icon && (jsx("span", { className: "flex-shrink-0 w-4 h-4 flex items-center justify-center", children: item.icon })), jsx("span", { className: "truncate", children: item.label })] }), hasSubmenu && (jsx(ChevronRight, { className: "h-4 w-4 flex-shrink-0 text-ink-400" }))] }), hasSubmenu && isSubmenuOpen && (jsx("div", { className: "absolute left-full top-0 ml-1 z-10", children: jsx(Menu, { items: item.submenu, onClose: onClose, anchor: "top-left" }) }))] }, item.id));
8444
8452
  }) }));
8445
8453
  }
8446
8454
  // Convenience component for MenuDivider
@@ -9480,6 +9488,7 @@ function Badge({ children, variant = 'neutral', size = 'md', icon, onRemove, cla
9480
9488
  success: 'bg-success-50 text-success-700 border-success-200',
9481
9489
  warning: 'bg-warning-50 text-warning-700 border-warning-200',
9482
9490
  error: 'bg-error-50 text-error-700 border-error-200',
9491
+ caution: 'bg-warning-100 text-warning-800 border-warning-200',
9483
9492
  info: 'bg-primary-50 text-primary-700 border-primary-200',
9484
9493
  neutral: 'bg-paper-100 text-ink-700 border-paper-300',
9485
9494
  };
@@ -9487,6 +9496,7 @@ function Badge({ children, variant = 'neutral', size = 'md', icon, onRemove, cla
9487
9496
  success: 'bg-success-500',
9488
9497
  warning: 'bg-warning-500',
9489
9498
  error: 'bg-error-500',
9499
+ caution: 'bg-warning-700',
9490
9500
  info: 'bg-primary-500',
9491
9501
  neutral: 'bg-ink-400',
9492
9502
  };
@@ -11483,7 +11493,7 @@ function TabsList({ children, className = '' }) {
11483
11493
  /**
11484
11494
  * TabsTrigger - Individual tab button
11485
11495
  */
11486
- function TabsTrigger({ children, value, disabled = false, icon, badge, badgeVariant = 'info', className = '', }) {
11496
+ function TabsTrigger({ children, value, disabled = false, icon, badge, badgeVariant = 'info', className = '', dataAttributes, }) {
11487
11497
  const { activeTab, setActiveTab, variant, orientation, size, registerTab, unregisterTab } = useTabsContext();
11488
11498
  const isActive = activeTab === value;
11489
11499
  // Register this tab on mount
@@ -11513,7 +11523,7 @@ function TabsTrigger({ children, value, disabled = false, icon, badge, badgeVari
11513
11523
  ${disabled ? 'opacity-40 cursor-not-allowed' : 'cursor-pointer'}
11514
11524
  focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-500 focus-visible:ring-offset-1
11515
11525
  ${className}
11516
- `, children: [icon && jsx("span", { className: `flex-shrink-0 ${sizeClasses[size].icon}`, children: icon }), jsx("span", { children: children }), badge !== undefined && (jsx(Badge, { variant: badgeVariant, size: sizeClasses[size].badgeSize, children: badge }))] }));
11526
+ `, "data-testid": dataAttributes?.['data-testid'] || `tab-${value}`, ...dataAttributes, children: [icon && jsx("span", { className: `flex-shrink-0 ${sizeClasses[size].icon}`, children: icon }), jsx("span", { children: children }), badge !== undefined && (jsx(Badge, { variant: badgeVariant, size: sizeClasses[size].badgeSize, children: badge }))] }));
11517
11527
  }
11518
11528
  /**
11519
11529
  * TabsContent - Content panel for a tab
@@ -11742,7 +11752,7 @@ function Tabs({ tabs, activeTab: controlledActiveTab, defaultTab, variant = 'und
11742
11752
  ${tab.disabled ? 'opacity-40 cursor-not-allowed' : 'cursor-pointer'}
11743
11753
  focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-500 focus-visible:ring-offset-1
11744
11754
  group
11745
- `, children: [tab.icon && jsx("span", { className: `flex-shrink-0 ${sizeClasses[size].icon}`, children: tab.icon }), jsx("span", { className: isTabCloseable ? 'mr-1' : '', children: tab.label }), tab.badge !== undefined && (jsx(Badge, { variant: tab.badgeVariant || 'info', size: sizeClasses[size].badgeSize, children: tab.badge })), isTabCloseable && onClose && (jsx("span", { role: "button", "aria-label": `Close ${tab.label}`, onClick: (e) => handleClose(e, tab.id), className: `
11755
+ `, "data-testid": tab.dataAttributes?.['data-testid'] || `tab-${tab.id}`, ...tab.dataAttributes, children: [tab.icon && jsx("span", { className: `flex-shrink-0 ${sizeClasses[size].icon}`, children: tab.icon }), jsx("span", { className: isTabCloseable ? 'mr-1' : '', children: tab.label }), tab.badge !== undefined && (jsx(Badge, { variant: tab.badgeVariant || 'info', size: sizeClasses[size].badgeSize, children: tab.badge })), isTabCloseable && onClose && (jsx("span", { role: "button", "aria-label": `Close ${tab.label}`, onClick: (e) => handleClose(e, tab.id), className: `
11746
11756
  flex-shrink-0 p-0.5 rounded
11747
11757
  text-ink-400 hover:text-ink-700 hover:bg-paper-200
11748
11758
  opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100
@@ -12431,7 +12441,7 @@ function SidebarNavItem({ item, onNavigate, level = 0, currentPath }) {
12431
12441
  ? 'text-ink-600 hover:text-ink-900 hover:bg-paper-50 rounded-lg transition-colors'
12432
12442
  : 'text-ink-600 hover:text-ink-900 hover:bg-paper-100 rounded-lg transition-colors'}
12433
12443
  ${paddingLeft} pr-3
12434
- `, children: [jsxs("div", { className: "flex items-center gap-3 min-w-0 flex-1", children: [item.icon && (jsx("span", { className: "flex-shrink-0 w-5 h-5 flex items-center justify-center text-ink-500", children: item.icon })), jsx("span", { className: "truncate", children: item.label }), item.badge && (jsx("span", { className: "ml-auto flex-shrink-0 px-2 py-0.5 text-xs font-medium bg-accent-100 text-accent-700 rounded-full", children: item.badge }))] }), hasChildren && (jsx("span", { className: "flex-shrink-0 ml-2", children: isExpanded ? (jsx(ChevronDown, { className: "h-4 w-4 text-ink-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-ink-400" })) }))] }), hasChildren && isExpanded && (jsx("div", { className: "mt-1 space-y-1", children: item.children?.map((child) => (jsx(SidebarNavItem, { item: child, onNavigate: onNavigate, level: level + 1, currentPath: currentPath }, child.id))) }))] }));
12444
+ `, "data-testid": item.dataAttributes?.['data-testid'] || `sidebar-item-${item.id}`, ...item.dataAttributes, children: [jsxs("div", { className: "flex items-center gap-3 min-w-0 flex-1", children: [item.icon && (jsx("span", { className: "flex-shrink-0 w-5 h-5 flex items-center justify-center text-ink-500", children: item.icon })), jsx("span", { className: "truncate", children: item.label }), item.badge && (jsx("span", { className: "ml-auto flex-shrink-0 px-2 py-0.5 text-xs font-medium bg-accent-100 text-accent-700 rounded-full", children: item.badge }))] }), hasChildren && (jsx("span", { className: "flex-shrink-0 ml-2", children: isExpanded ? (jsx(ChevronDown, { className: "h-4 w-4 text-ink-400" })) : (jsx(ChevronRight, { className: "h-4 w-4 text-ink-400" })) }))] }), hasChildren && isExpanded && (jsx("div", { className: "mt-1 space-y-1", children: item.children?.map((child) => (jsx(SidebarNavItem, { item: child, onNavigate: onNavigate, level: level + 1, currentPath: currentPath }, child.id))) }))] }));
12435
12445
  }
12436
12446
  function SidebarGroup({ title, items, onNavigate, defaultExpanded = true, currentPath }) {
12437
12447
  const [isExpanded, setIsExpanded] = useState(defaultExpanded);
@@ -12533,7 +12543,7 @@ function Sidebar({ items, onNavigate, className = '', header, footer, currentPat
12533
12543
  const sidebarContent = (jsxs("div", { ref: sidebarRef, className: `flex flex-col h-full bg-white border-r border-paper-300 notebook-binding ${width} ${className}`, children: [mobileOpen !== undefined && (jsxs("div", { className: "flex items-center justify-between px-4 pt-4 md:hidden", children: [jsx("div", { className: "flex-1", children: header }), jsx("button", { onClick: onMobileClose, className: "\n flex items-center justify-center\n w-10 h-10 -mr-2\n text-ink-500 hover:text-ink-700\n hover:bg-paper-100 rounded-full\n transition-colors\n ", "aria-label": "Close sidebar", children: jsx(X, { className: "w-5 h-5" }) })] })), header && mobileOpen === undefined && (jsx("div", { className: "px-6 pt-6 pb-4", children: header })), header && mobileOpen !== undefined && (jsx("div", { className: "px-6 pt-2 pb-4 hidden md:block", children: header })), jsx("nav", { className: "flex-1 px-3 py-2 space-y-1 overflow-y-auto", children: items.map((item) => {
12534
12544
  // Render separator
12535
12545
  if (item.separator) {
12536
- return jsx("div", { className: "my-4 border-t border-paper-300" }, item.id);
12546
+ return (jsx("div", { className: "my-4 border-t border-paper-300", "data-testid": item.dataAttributes?.['data-testid'] || `sidebar-separator-${item.id}`, ...item.dataAttributes }, item.id));
12537
12547
  }
12538
12548
  // Render nav item
12539
12549
  return (jsx(SidebarNavItem, { item: item, onNavigate: handleNavigate, currentPath: currentPath }, item.id));
@@ -12625,7 +12635,7 @@ function BottomNavigation({ items, activeId, onNavigate, showLabels = true, clas
12625
12635
  ${isActive
12626
12636
  ? 'text-accent-600'
12627
12637
  : 'text-ink-500 hover:text-ink-700'}
12628
- `, "aria-current": isActive ? 'page' : undefined, "aria-label": item.label, children: [jsxs("div", { className: "relative", children: [jsx("div", { className: `
12638
+ `, "aria-current": isActive ? 'page' : undefined, "aria-label": item.label, "data-testid": item.dataAttributes?.['data-testid'] || `bottom-nav-${item.id}`, ...item.dataAttributes, children: [jsxs("div", { className: "relative", children: [jsx("div", { className: `
12629
12639
  w-6 h-6 flex items-center justify-center
12630
12640
  transition-transform duration-200
12631
12641
  ${isActive ? 'scale-110' : 'scale-100'}
@@ -59795,6 +59805,11 @@ const statusConfig = {
59795
59805
  defaultLabel: 'Warning',
59796
59806
  className: 'bg-warning-100 text-warning-800',
59797
59807
  },
59808
+ caution: {
59809
+ icon: Info,
59810
+ defaultLabel: 'Caution',
59811
+ className: 'bg-warning-100 text-warning-700',
59812
+ },
59798
59813
  overdue: {
59799
59814
  icon: AlertCircle,
59800
59815
  defaultLabel: 'Overdue',