@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.
- package/dist/components/BottomNavigation.d.ts +6 -0
- package/dist/components/BottomNavigation.d.ts.map +1 -1
- package/dist/components/Menu.d.ts +6 -0
- package/dist/components/Menu.d.ts.map +1 -1
- package/dist/components/Sidebar.d.ts +6 -0
- package/dist/components/Sidebar.d.ts.map +1 -1
- package/dist/components/Tabs.d.ts +13 -1
- package/dist/components/Tabs.d.ts.map +1 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.esm.js +8 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/BottomNavigation.stories.tsx +57 -0
- package/src/components/BottomNavigation.tsx +10 -2
- package/src/components/Menu.tsx +10 -0
- package/src/components/Sidebar.stories.tsx +83 -0
- package/src/components/Sidebar.tsx +18 -3
- package/src/components/Tabs.stories.tsx +126 -0
- package/src/components/Tabs.tsx +17 -0
|
@@ -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;
|
|
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;
|
|
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;
|
|
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":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAQnG,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACpE,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
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'}
|