@papernote/ui 1.10.18 → 1.10.19

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.
@@ -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"}
@@ -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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"}
package/dist/index.d.ts CHANGED
@@ -2747,6 +2747,12 @@ interface MenuItem {
2747
2747
  danger?: boolean;
2748
2748
  divider?: boolean;
2749
2749
  submenu?: MenuItem[];
2750
+ /**
2751
+ * Custom data attributes to spread on the rendered element.
2752
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
2753
+ * @example { 'data-tour': 'menu-settings', 'data-testid': 'menu-settings' }
2754
+ */
2755
+ dataAttributes?: Record<string, string>;
2750
2756
  }
2751
2757
  interface MenuProps {
2752
2758
  items: MenuItem[];
@@ -3983,6 +3989,12 @@ interface Tab {
3983
3989
  badgeVariant?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
3984
3990
  /** Whether this individual tab can be closed (overrides global closeable) */
3985
3991
  closeable?: boolean;
3992
+ /**
3993
+ * Custom data attributes to spread on the tab trigger element.
3994
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
3995
+ * @example { 'data-tour': 'tab-settings', 'data-testid': 'settings-tab' }
3996
+ */
3997
+ dataAttributes?: Record<string, string>;
3986
3998
  }
3987
3999
  interface TabsProps {
3988
4000
  tabs: Tab[];
@@ -4081,11 +4093,17 @@ interface TabsTriggerProps {
4081
4093
  badgeVariant?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
4082
4094
  /** Additional class name */
4083
4095
  className?: string;
4096
+ /**
4097
+ * Custom data attributes to spread on the tab trigger element.
4098
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
4099
+ * @example { 'data-tour': 'tab-settings', 'data-testid': 'settings-tab' }
4100
+ */
4101
+ dataAttributes?: Record<string, string>;
4084
4102
  }
4085
4103
  /**
4086
4104
  * TabsTrigger - Individual tab button
4087
4105
  */
4088
- declare function TabsTrigger({ children, value, disabled, icon, badge, badgeVariant, className, }: TabsTriggerProps): react_jsx_runtime.JSX.Element;
4106
+ declare function TabsTrigger({ children, value, disabled, icon, badge, badgeVariant, className, dataAttributes, }: TabsTriggerProps): react_jsx_runtime.JSX.Element;
4089
4107
  interface TabsContentProps {
4090
4108
  children: React__default.ReactNode;
4091
4109
  /** Value matching the corresponding TabsTrigger */
@@ -4346,6 +4364,12 @@ interface SidebarItem {
4346
4364
  badge?: string | number;
4347
4365
  separator?: boolean;
4348
4366
  external?: boolean;
4367
+ /**
4368
+ * Custom data attributes to spread on the rendered element.
4369
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
4370
+ * @example { 'data-tour': 'nav-dashboard', 'data-testid': 'sidebar-dashboard' }
4371
+ */
4372
+ dataAttributes?: Record<string, string>;
4349
4373
  }
4350
4374
  interface SidebarProps {
4351
4375
  items: SidebarItem[];
@@ -4422,6 +4446,12 @@ interface BottomNavItem {
4422
4446
  onClick?: () => void;
4423
4447
  /** Disabled state */
4424
4448
  disabled?: boolean;
4449
+ /**
4450
+ * Custom data attributes to spread on the rendered element.
4451
+ * Useful for product tours (e.g., Driver.js) and E2E testing (Playwright, Cypress).
4452
+ * @example { 'data-tour': 'nav-home', 'data-testid': 'bottom-nav-home' }
4453
+ */
4454
+ dataAttributes?: Record<string, string>;
4425
4455
  }
4426
4456
  /**
4427
4457
  * BottomNavigation component props
package/dist/index.esm.js CHANGED
@@ -8425,7 +8425,7 @@ function Menu({ items, className = '', onClose, position, anchor = 'bottom-left'
8425
8425
  `, style: positionStyle, role: "menu", "aria-orientation": "vertical", children: items.map((item, index) => {
8426
8426
  // Handle divider
8427
8427
  if (item.divider) {
8428
- return (jsx("div", { className: "h-px bg-ink-200 my-1", role: "separator" }, `divider-${index}`));
8428
+ 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
8429
  }
8430
8430
  const currentNavIndex = navIndex;
8431
8431
  navIndex++;
@@ -8440,7 +8440,7 @@ function Menu({ items, className = '', onClose, position, anchor = 'bottom-left'
8440
8440
  ? 'text-error-600 hover:bg-error-50'
8441
8441
  : 'text-ink-900 hover:bg-accent-100'}
8442
8442
  ${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));
8443
+ `, 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
8444
  }) }));
8445
8445
  }
8446
8446
  // Convenience component for MenuDivider
@@ -11483,7 +11483,7 @@ function TabsList({ children, className = '' }) {
11483
11483
  /**
11484
11484
  * TabsTrigger - Individual tab button
11485
11485
  */
11486
- function TabsTrigger({ children, value, disabled = false, icon, badge, badgeVariant = 'info', className = '', }) {
11486
+ function TabsTrigger({ children, value, disabled = false, icon, badge, badgeVariant = 'info', className = '', dataAttributes, }) {
11487
11487
  const { activeTab, setActiveTab, variant, orientation, size, registerTab, unregisterTab } = useTabsContext();
11488
11488
  const isActive = activeTab === value;
11489
11489
  // Register this tab on mount
@@ -11513,7 +11513,7 @@ function TabsTrigger({ children, value, disabled = false, icon, badge, badgeVari
11513
11513
  ${disabled ? 'opacity-40 cursor-not-allowed' : 'cursor-pointer'}
11514
11514
  focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-500 focus-visible:ring-offset-1
11515
11515
  ${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 }))] }));
11516
+ `, "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
11517
  }
11518
11518
  /**
11519
11519
  * TabsContent - Content panel for a tab
@@ -11742,7 +11742,7 @@ function Tabs({ tabs, activeTab: controlledActiveTab, defaultTab, variant = 'und
11742
11742
  ${tab.disabled ? 'opacity-40 cursor-not-allowed' : 'cursor-pointer'}
11743
11743
  focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-500 focus-visible:ring-offset-1
11744
11744
  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: `
11745
+ `, "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
11746
  flex-shrink-0 p-0.5 rounded
11747
11747
  text-ink-400 hover:text-ink-700 hover:bg-paper-200
11748
11748
  opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100
@@ -12431,7 +12431,7 @@ function SidebarNavItem({ item, onNavigate, level = 0, currentPath }) {
12431
12431
  ? 'text-ink-600 hover:text-ink-900 hover:bg-paper-50 rounded-lg transition-colors'
12432
12432
  : 'text-ink-600 hover:text-ink-900 hover:bg-paper-100 rounded-lg transition-colors'}
12433
12433
  ${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))) }))] }));
12434
+ `, "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
12435
  }
12436
12436
  function SidebarGroup({ title, items, onNavigate, defaultExpanded = true, currentPath }) {
12437
12437
  const [isExpanded, setIsExpanded] = useState(defaultExpanded);
@@ -12533,7 +12533,7 @@ function Sidebar({ items, onNavigate, className = '', header, footer, currentPat
12533
12533
  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
12534
  // Render separator
12535
12535
  if (item.separator) {
12536
- return jsx("div", { className: "my-4 border-t border-paper-300" }, item.id);
12536
+ 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
12537
  }
12538
12538
  // Render nav item
12539
12539
  return (jsx(SidebarNavItem, { item: item, onNavigate: handleNavigate, currentPath: currentPath }, item.id));
@@ -12625,7 +12625,7 @@ function BottomNavigation({ items, activeId, onNavigate, showLabels = true, clas
12625
12625
  ${isActive
12626
12626
  ? 'text-accent-600'
12627
12627
  : '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: `
12628
+ `, "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
12629
  w-6 h-6 flex items-center justify-center
12630
12630
  transition-transform duration-200
12631
12631
  ${isActive ? 'scale-110' : 'scale-100'}