@bug-on/md3-react 2.0.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +33 -0
- package/CHANGELOG.md +55 -0
- package/dist/index.css.d.ts +2 -0
- package/dist/index.d.mts +6127 -0
- package/dist/index.d.ts +6127 -71
- package/dist/index.js +1653 -614
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1566 -547
- package/dist/index.mjs.map +1 -1
- package/dist/material-symbols-cdn.css.d.ts +2 -0
- package/dist/material-symbols-self-hosted.css.d.ts +2 -0
- package/dist/typography.css.d.ts +2 -0
- package/package.json +22 -19
- package/scripts/copy-assets.js +82 -0
- package/src/assets/fonts/GoogleSansFlex-VariableFont.woff2 +0 -0
- package/src/assets/fonts/MaterialSymbolsOutlined-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
- package/src/assets/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
- package/src/assets/fonts/MaterialSymbolsSharp-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
- package/src/assets/loading-indicator.svg +19 -0
- package/src/assets/material-symbols-cdn.css +65 -0
- package/src/assets/material-symbols-self-hosted.css +90 -0
- package/src/css.d.ts +20 -0
- package/src/hooks/useClickOutside.ts +37 -0
- package/src/hooks/useMediaQuery.ts +28 -0
- package/src/hooks/useRipple.ts +88 -0
- package/src/index.css +23 -0
- package/src/index.ts +349 -0
- package/src/lib/material-symbols-preconnect.tsx +82 -0
- package/src/lib/theme-utils.ts +180 -0
- package/src/lib/utils.ts +6 -0
- package/src/test/button.test.tsx +59 -0
- package/src/test/icon.test.tsx +91 -0
- package/src/test/loading-indicator.test.tsx +128 -0
- package/src/test/progress-indicator.test.tsx +306 -0
- package/src/test/setup.ts +80 -0
- package/src/test/typography.test.tsx +206 -0
- package/src/types/index.ts +7 -0
- package/src/types/md3.ts +31 -0
- package/src/ui/Text.tsx +60 -0
- package/src/ui/__snapshots__/divider.test.tsx.snap +63 -0
- package/src/ui/app-bar/app-bar-column.tsx +99 -0
- package/src/ui/app-bar/app-bar-item-button.tsx +71 -0
- package/src/ui/app-bar/app-bar-items.test.tsx +89 -0
- package/src/ui/app-bar/app-bar-overflow-indicator.tsx +108 -0
- package/src/ui/app-bar/app-bar-row.tsx +104 -0
- package/src/ui/app-bar/app-bar.test.tsx +87 -0
- package/src/ui/app-bar/app-bar.tokens.ts +223 -0
- package/src/ui/app-bar/app-bar.types.ts +441 -0
- package/src/ui/app-bar/bottom-app-bar.test.tsx +42 -0
- package/src/ui/app-bar/bottom-app-bar.tsx +84 -0
- package/src/ui/app-bar/docked-toolbar.test.tsx +34 -0
- package/src/ui/app-bar/docked-toolbar.tsx +54 -0
- package/src/ui/app-bar/flexible-app-bar.test.tsx +75 -0
- package/src/ui/app-bar/hooks/use-app-bar-scroll.ts +110 -0
- package/src/ui/app-bar/hooks/use-flexible-app-bar.ts +123 -0
- package/{dist/ui/app-bar/index.d.ts → src/ui/app-bar/index.ts} +35 -2
- package/src/ui/app-bar/large-flexible-app-bar.tsx +165 -0
- package/src/ui/app-bar/medium-flexible-app-bar.tsx +167 -0
- package/src/ui/app-bar/search-app-bar.test.tsx +49 -0
- package/src/ui/app-bar/search-app-bar.tsx +176 -0
- package/src/ui/app-bar/search-view.tsx +227 -0
- package/src/ui/app-bar/small-app-bar.test.tsx +48 -0
- package/src/ui/app-bar/small-app-bar.tsx +203 -0
- package/src/ui/badge.test.tsx +345 -0
- package/src/ui/badge.tsx +282 -0
- package/src/ui/button-group.test.tsx +71 -0
- package/src/ui/button-group.tsx +350 -0
- package/src/ui/button.test.tsx +297 -0
- package/src/ui/button.tsx +669 -0
- package/src/ui/card.test.tsx +187 -0
- package/src/ui/card.tsx +259 -0
- package/src/ui/checkbox.test.tsx +423 -0
- package/src/ui/checkbox.tsx +525 -0
- package/src/ui/chip.test.tsx +292 -0
- package/src/ui/chip.tsx +548 -0
- package/src/ui/code-block.tsx +219 -0
- package/src/ui/dialog.test.tsx +300 -0
- package/src/ui/dialog.tsx +384 -0
- package/src/ui/divider.test.tsx +314 -0
- package/src/ui/divider.tsx +412 -0
- package/src/ui/drawer.tsx +240 -0
- package/src/ui/fab-menu.test.tsx +494 -0
- package/src/ui/fab-menu.tsx +739 -0
- package/src/ui/fab.test.tsx +232 -0
- package/src/ui/fab.tsx +505 -0
- package/src/ui/icon-button.test.tsx +515 -0
- package/src/ui/icon-button.tsx +525 -0
- package/src/ui/icon.test.tsx +197 -0
- package/src/ui/icon.tsx +179 -0
- package/src/ui/loading-indicator.test.tsx +73 -0
- package/src/ui/loading-indicator.tsx +312 -0
- package/src/ui/menu/context-menu.tsx +275 -0
- package/src/ui/menu/index.ts +77 -0
- package/src/ui/menu/menu-animations.ts +102 -0
- package/src/ui/menu/menu-context.tsx +99 -0
- package/src/ui/menu/menu-divider.tsx +47 -0
- package/src/ui/menu/menu-group.tsx +200 -0
- package/src/ui/menu/menu-item.tsx +294 -0
- package/src/ui/menu/menu-tokens.ts +208 -0
- package/src/ui/menu/menu-types.ts +313 -0
- package/src/ui/menu/menu.test.tsx +624 -0
- package/src/ui/menu/menu.tsx +289 -0
- package/src/ui/menu/sub-menu.tsx +223 -0
- package/src/ui/menu/vertical-menu.tsx +382 -0
- package/src/ui/navigation-rail.test.tsx +404 -0
- package/src/ui/navigation-rail.tsx +604 -0
- package/src/ui/progress-indicator/circular.tsx +248 -0
- package/src/ui/progress-indicator/hooks.ts +51 -0
- package/{dist/ui/progress-indicator/index.d.ts → src/ui/progress-indicator/index.tsx} +20 -2
- package/src/ui/progress-indicator/linear-flat.tsx +83 -0
- package/src/ui/progress-indicator/linear-wavy.tsx +243 -0
- package/src/ui/progress-indicator/linear.tsx +143 -0
- package/src/ui/progress-indicator/types.ts +158 -0
- package/src/ui/progress-indicator/utils.ts +73 -0
- package/src/ui/radio-button.test.tsx +407 -0
- package/src/ui/radio-button.tsx +551 -0
- package/src/ui/ripple.test.tsx +72 -0
- package/src/ui/ripple.tsx +234 -0
- package/src/ui/scroll-area.test.tsx +58 -0
- package/src/ui/scroll-area.tsx +139 -0
- package/src/ui/search/animated-placeholder.tsx +145 -0
- package/src/ui/search/hooks/use-search-keyboard.test.ts +202 -0
- package/src/ui/search/hooks/use-search-keyboard.ts +104 -0
- package/src/ui/search/hooks/use-search-view-focus.test.ts +96 -0
- package/src/ui/search/hooks/use-search-view-focus.ts +24 -0
- package/src/ui/search/index.ts +44 -0
- package/src/ui/search/search-bar.tsx +220 -0
- package/src/ui/search/search-context.tsx +42 -0
- package/src/ui/search/search-view-docked.tsx +194 -0
- package/src/ui/search/search-view-fullscreen.tsx +247 -0
- package/src/ui/search/search.test.tsx +233 -0
- package/src/ui/search/search.tokens.ts +134 -0
- package/src/ui/search/search.tsx +131 -0
- package/src/ui/search/search.types.ts +154 -0
- package/src/ui/search/trailing-action.tsx +49 -0
- package/src/ui/shared/constants.ts +122 -0
- package/{dist/ui/shared/touch-target.d.ts → src/ui/shared/touch-target.tsx} +13 -1
- package/src/ui/slider/hooks/useSliderMath.ts +195 -0
- package/{dist/ui/slider/index.d.ts → src/ui/slider/index.ts} +12 -1
- package/src/ui/slider/range-slider.tsx +561 -0
- package/src/ui/slider/slider-thumb.tsx +379 -0
- package/src/ui/slider/slider-track.tsx +912 -0
- package/src/ui/slider/slider.tokens.ts +189 -0
- package/src/ui/slider/slider.tsx +259 -0
- package/src/ui/slider/slider.types.ts +288 -0
- package/src/ui/snackbar/index.ts +20 -0
- package/src/ui/snackbar/snackbar.test.tsx +338 -0
- package/src/ui/snackbar/snackbar.tsx +476 -0
- package/{dist/ui/switch/index.d.ts → src/ui/switch/index.ts} +1 -0
- package/src/ui/switch/switch.stories.tsx +309 -0
- package/src/ui/switch/switch.test.tsx +243 -0
- package/src/ui/switch/switch.tokens.ts +89 -0
- package/src/ui/switch/switch.tsx +504 -0
- package/src/ui/switch/switch.types.ts +62 -0
- package/{dist/ui/tabs/index.d.ts → src/ui/tabs/index.ts} +8 -1
- package/src/ui/tabs/tab.tsx +407 -0
- package/src/ui/tabs/tabs-content.tsx +89 -0
- package/src/ui/tabs/tabs-list.tsx +146 -0
- package/src/ui/tabs/tabs.test.tsx +290 -0
- package/src/ui/tabs/tabs.tokens.ts +121 -0
- package/src/ui/tabs/tabs.tsx +229 -0
- package/src/ui/tabs/tabs.types.ts +185 -0
- package/{dist/ui/text-field/index.d.ts → src/ui/text-field/index.ts} +8 -1
- package/src/ui/text-field/subcomponents/active-indicator.tsx +67 -0
- package/src/ui/text-field/subcomponents/floating-label.tsx +161 -0
- package/src/ui/text-field/subcomponents/leading-icon.tsx +46 -0
- package/src/ui/text-field/subcomponents/outline-container.tsx +170 -0
- package/src/ui/text-field/subcomponents/prefix-suffix.tsx +59 -0
- package/src/ui/text-field/subcomponents/supporting-text.tsx +145 -0
- package/src/ui/text-field/subcomponents/trailing-icon.tsx +199 -0
- package/src/ui/text-field/text-field.test.tsx +454 -0
- package/src/ui/text-field/text-field.tokens.ts +104 -0
- package/src/ui/text-field/text-field.tsx +548 -0
- package/src/ui/text-field/text-field.types.ts +180 -0
- package/src/ui/theme-provider/index.tsx +190 -0
- package/src/ui/toc.test.tsx +108 -0
- package/src/ui/toc.tsx +172 -0
- package/src/ui/tooltip/plain-tooltip.tsx +63 -0
- package/src/ui/tooltip/rich-tooltip.tsx +94 -0
- package/src/ui/tooltip/tooltip-box.tsx +266 -0
- package/src/ui/tooltip/tooltip-caret-shape.tsx +68 -0
- package/src/ui/tooltip/tooltip.tokens.ts +26 -0
- package/src/ui/tooltip/tooltip.types.ts +70 -0
- package/src/ui/tooltip/use-tooltip-position.ts +208 -0
- package/src/ui/tooltip/use-tooltip-state.ts +41 -0
- package/src/ui/typography/__tests__/typography.test.tsx +170 -0
- package/{dist/ui/typography/index.d.ts → src/ui/typography/index.ts} +21 -3
- package/src/ui/typography/type-scale-tokens.ts +205 -0
- package/src/ui/typography/typography-key-tokens.ts +43 -0
- package/src/ui/typography/typography-tokens.ts +360 -0
- package/src/ui/typography/typography.css +22 -0
- package/src/ui/typography/typography.tsx +559 -0
- package/test-render.tsx +4 -0
- package/test-shadow.html +26 -0
- package/test_output.txt +164 -0
- package/test_output_v2.txt +5 -0
- package/tsconfig.build.json +10 -0
- package/tsconfig.json +18 -0
- package/tsup.config.ts +20 -0
- package/vitest.config.ts +11 -0
- package/dist/hooks/useClickOutside.d.ts +0 -8
- package/dist/hooks/useMediaQuery.d.ts +0 -11
- package/dist/hooks/useRipple.d.ts +0 -26
- package/dist/lib/material-symbols-preconnect.d.ts +0 -42
- package/dist/lib/theme-utils.d.ts +0 -63
- package/dist/lib/utils.d.ts +0 -2
- package/dist/types/index.d.ts +0 -1
- package/dist/types/md3.d.ts +0 -14
- package/dist/ui/app-bar/app-bar-column.d.ts +0 -28
- package/dist/ui/app-bar/app-bar-item-button.d.ts +0 -16
- package/dist/ui/app-bar/app-bar-overflow-indicator.d.ts +0 -18
- package/dist/ui/app-bar/app-bar-row.d.ts +0 -36
- package/dist/ui/app-bar/app-bar.tokens.d.ts +0 -184
- package/dist/ui/app-bar/app-bar.types.d.ts +0 -392
- package/dist/ui/app-bar/bottom-app-bar.d.ts +0 -31
- package/dist/ui/app-bar/docked-toolbar.d.ts +0 -25
- package/dist/ui/app-bar/hooks/use-app-bar-scroll.d.ts +0 -42
- package/dist/ui/app-bar/hooks/use-flexible-app-bar.d.ts +0 -37
- package/dist/ui/app-bar/large-flexible-app-bar.d.ts +0 -26
- package/dist/ui/app-bar/medium-flexible-app-bar.d.ts +0 -28
- package/dist/ui/app-bar/search-app-bar.d.ts +0 -43
- package/dist/ui/app-bar/search-view.d.ts +0 -54
- package/dist/ui/app-bar/small-app-bar.d.ts +0 -37
- package/dist/ui/badge.d.ts +0 -125
- package/dist/ui/button-group.d.ts +0 -59
- package/dist/ui/button.d.ts +0 -148
- package/dist/ui/card.d.ts +0 -62
- package/dist/ui/checkbox.d.ts +0 -82
- package/dist/ui/chip.d.ts +0 -110
- package/dist/ui/code-block.d.ts +0 -14
- package/dist/ui/dialog.d.ts +0 -111
- package/dist/ui/divider.d.ts +0 -164
- package/dist/ui/drawer.d.ts +0 -39
- package/dist/ui/dropdown.d.ts +0 -29
- package/dist/ui/fab-menu.d.ts +0 -204
- package/dist/ui/fab.d.ts +0 -162
- package/dist/ui/icon-button.d.ts +0 -131
- package/dist/ui/icon.d.ts +0 -88
- package/dist/ui/loading-indicator.d.ts +0 -42
- package/dist/ui/navigation-rail.d.ts +0 -29
- package/dist/ui/progress-indicator/circular.d.ts +0 -3
- package/dist/ui/progress-indicator/hooks.d.ts +0 -3
- package/dist/ui/progress-indicator/linear-flat.d.ts +0 -10
- package/dist/ui/progress-indicator/linear-wavy.d.ts +0 -18
- package/dist/ui/progress-indicator/linear.d.ts +0 -3
- package/dist/ui/progress-indicator/types.d.ts +0 -151
- package/dist/ui/progress-indicator/utils.d.ts +0 -3
- package/dist/ui/radio-button.d.ts +0 -106
- package/dist/ui/ripple.d.ts +0 -126
- package/dist/ui/scroll-area.d.ts +0 -27
- package/dist/ui/search/animated-placeholder.d.ts +0 -54
- package/dist/ui/search/hooks/use-search-keyboard.d.ts +0 -32
- package/dist/ui/search/hooks/use-search-view-focus.d.ts +0 -6
- package/dist/ui/search/index.d.ts +0 -27
- package/dist/ui/search/search-bar.d.ts +0 -32
- package/dist/ui/search/search-context.d.ts +0 -24
- package/dist/ui/search/search-view-docked.d.ts +0 -25
- package/dist/ui/search/search-view-fullscreen.d.ts +0 -36
- package/dist/ui/search/search.d.ts +0 -50
- package/dist/ui/search/search.tokens.d.ts +0 -112
- package/dist/ui/search/search.types.d.ts +0 -131
- package/dist/ui/search/trailing-action.d.ts +0 -9
- package/dist/ui/shared/constants.d.ts +0 -86
- package/dist/ui/slider/hooks/useSliderMath.d.ts +0 -101
- package/dist/ui/slider/range-slider.d.ts +0 -47
- package/dist/ui/slider/slider-thumb.d.ts +0 -33
- package/dist/ui/slider/slider-track.d.ts +0 -25
- package/dist/ui/slider/slider.d.ts +0 -60
- package/dist/ui/slider/slider.tokens.d.ts +0 -151
- package/dist/ui/slider/slider.types.d.ts +0 -259
- package/dist/ui/snackbar/index.d.ts +0 -6
- package/dist/ui/snackbar/snackbar.d.ts +0 -197
- package/dist/ui/switch/switch.d.ts +0 -30
- package/dist/ui/switch/switch.stories.d.ts +0 -48
- package/dist/ui/switch/switch.tokens.d.ts +0 -67
- package/dist/ui/switch/switch.types.d.ts +0 -59
- package/dist/ui/tabs/tab.d.ts +0 -43
- package/dist/ui/tabs/tabs-content.d.ts +0 -36
- package/dist/ui/tabs/tabs-list.d.ts +0 -40
- package/dist/ui/tabs/tabs.d.ts +0 -60
- package/dist/ui/tabs/tabs.tokens.d.ts +0 -94
- package/dist/ui/tabs/tabs.types.d.ts +0 -172
- package/dist/ui/text-field/subcomponents/active-indicator.d.ts +0 -24
- package/dist/ui/text-field/subcomponents/floating-label.d.ts +0 -43
- package/dist/ui/text-field/subcomponents/leading-icon.d.ts +0 -23
- package/dist/ui/text-field/subcomponents/outline-container.d.ts +0 -42
- package/dist/ui/text-field/subcomponents/prefix-suffix.d.ts +0 -24
- package/dist/ui/text-field/subcomponents/supporting-text.d.ts +0 -37
- package/dist/ui/text-field/subcomponents/trailing-icon.d.ts +0 -41
- package/dist/ui/text-field/text-field.d.ts +0 -49
- package/dist/ui/text-field/text-field.tokens.d.ts +0 -76
- package/dist/ui/text-field/text-field.types.d.ts +0 -126
- package/dist/ui/theme-provider/index.d.ts +0 -48
- package/dist/ui/toc.d.ts +0 -80
- package/dist/ui/tooltip/plain-tooltip.d.ts +0 -2
- package/dist/ui/tooltip/rich-tooltip.d.ts +0 -2
- package/dist/ui/tooltip/tooltip-box.d.ts +0 -2
- package/dist/ui/tooltip/tooltip-caret-shape.d.ts +0 -9
- package/dist/ui/tooltip/tooltip.tokens.d.ts +0 -26
- package/dist/ui/tooltip/tooltip.types.d.ts +0 -56
- package/dist/ui/tooltip/use-tooltip-position.d.ts +0 -8
- package/dist/ui/tooltip/use-tooltip-state.d.ts +0 -2
- package/dist/ui/typography/type-scale-tokens.d.ts +0 -162
- package/dist/ui/typography/typography-key-tokens.d.ts +0 -40
- package/dist/ui/typography/typography-tokens.d.ts +0 -220
- package/dist/ui/typography/typography.d.ts +0 -265
- /package/{dist/hooks/index.d.ts → src/hooks/index.ts} +0 -0
- /package/{dist/ui/tooltip/index.d.ts → src/ui/tooltip/index.ts} +0 -0
package/test_output.txt
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
|
|
2
|
+
> @bug-on/md3-react@2.0.3 test
|
|
3
|
+
> vitest run src/ui/menu/menu.test.tsx
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
RUN v4.1.0 /Users/stark/Documents/GitHub/bug-on-md3-expressive/packages/react
|
|
7
|
+
|
|
8
|
+
❯ src/ui/menu/menu.test.tsx (28 tests | 8 failed) 16014ms
|
|
9
|
+
✓ renders children when open 277ms
|
|
10
|
+
× MenuItem applies correct shape class for each itemPosition 82ms
|
|
11
|
+
✓ MenuItem shows check icon when selected 83ms
|
|
12
|
+
✓ MenuItem applies disabled state — opacity class and aria-disabled 66ms
|
|
13
|
+
× MenuGroup auto-injects correct itemPosition based on child index 56ms
|
|
14
|
+
× MenuDivider renders with correct role and classes 51ms
|
|
15
|
+
× Standard variant applies surface-container-low on MenuGroup 49ms
|
|
16
|
+
× Vibrant variant applies tertiary-container on MenuGroup 49ms
|
|
17
|
+
✓ Keyboard ArrowDown: menu opens via click 91ms
|
|
18
|
+
✓ Keyboard Escape closes menu 77ms
|
|
19
|
+
✓ renders children directly without a trigger 4ms
|
|
20
|
+
✓ gap separatorStyle renders no divider elements between groups 3ms
|
|
21
|
+
✓ divider separatorStyle inserts an hr between each pair of groups 5ms
|
|
22
|
+
✓ VerticalMenuDivider renders as hr with correct classes 2ms
|
|
23
|
+
✓ auto-injects index and count props into group children for shape morphing 3ms
|
|
24
|
+
✓ standard colorVariant gap: root is transparent, MenuGroup has surface-container-low 3ms
|
|
25
|
+
✓ vibrant colorVariant gap: root is transparent, MenuGroup has tertiary-container 2ms
|
|
26
|
+
✓ standard colorVariant divider: VerticalMenuContent has surface-container-low 2ms
|
|
27
|
+
✓ VerticalMenu root has role=menu and aria-orientation=vertical 2ms
|
|
28
|
+
✓ ArrowDown key moves focus to next menuitem 14ms
|
|
29
|
+
✓ ArrowUp from first item wraps to last item 9ms
|
|
30
|
+
✓ MenuItem inside VerticalMenu shows check icon when selected=true 4ms
|
|
31
|
+
✓ renders trigger item correctly 35ms
|
|
32
|
+
× opens after hoverOpenDelay (default 200ms) 5009ms
|
|
33
|
+
× closes after hoverCloseDelay (default 300ms) 5008ms
|
|
34
|
+
✓ useMenuContext returns default values when used outside Provider 4ms
|
|
35
|
+
× MenuGroup updates state on hover for shape morphing 5003ms
|
|
36
|
+
✓ FAST_SPATIAL_SPRING has correct spring parameters 0ms
|
|
37
|
+
|
|
38
|
+
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 8 ⎯⎯⎯⎯⎯⎯⎯
|
|
39
|
+
|
|
40
|
+
FAIL src/ui/menu/menu.test.tsx > Menu > MenuItem applies correct shape class for each itemPosition
|
|
41
|
+
AssertionError: expected 'relative flex w-full cursor-pointer s…' to contain 'rounded-t-[12px]'
|
|
42
|
+
|
|
43
|
+
Expected: "rounded-t-[12px]"
|
|
44
|
+
Received: "relative flex w-full cursor-pointer select-none items-center outline-none min-h-12 min-w-28 max-w-70 px-3 rounded-none transition-[border-radius,background-color] duration-150 ease-in text-m3-on-surface hover:bg-m3-on-surface/8 focus:bg-m3-on-surface/12 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-m3-primary"
|
|
45
|
+
|
|
46
|
+
❯ src/ui/menu/menu.test.tsx:90:29
|
|
47
|
+
88|
|
|
48
|
+
89| // Shape classes based on ITEM_SHAPE_CLASSES token
|
|
49
|
+
90| expect(leading.className).toContain("rounded-t-[12px]");
|
|
50
|
+
| ^
|
|
51
|
+
91| expect(leading.className).toContain("rounded-b-[4px]");
|
|
52
|
+
92| expect(middle.className).toContain("rounded-[4px]");
|
|
53
|
+
|
|
54
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/8]⎯
|
|
55
|
+
|
|
56
|
+
FAIL src/ui/menu/menu.test.tsx > Menu > MenuGroup auto-injects correct itemPosition based on child index
|
|
57
|
+
AssertionError: expected 'relative flex w-full cursor-pointer s…' to contain 'rounded-t-[12px]'
|
|
58
|
+
|
|
59
|
+
Expected: "rounded-t-[12px]"
|
|
60
|
+
Received: "relative flex w-full cursor-pointer select-none items-center outline-none min-h-12 min-w-28 max-w-70 px-3 rounded-none transition-[border-radius,background-color] duration-150 ease-in text-m3-on-surface hover:bg-m3-on-surface/8 focus:bg-m3-on-surface/12 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-m3-primary"
|
|
61
|
+
|
|
62
|
+
❯ src/ui/menu/menu.test.tsx:146:27
|
|
63
|
+
144|
|
|
64
|
+
145| // First item should be "leading" shape: rounded-t-[12px] rounded-b-…
|
|
65
|
+
146| expect(first.className).toContain("rounded-t-[12px]");
|
|
66
|
+
| ^
|
|
67
|
+
147| // Last item should be "trailing" shape: rounded-t-[4px] rounded-b-[…
|
|
68
|
+
148| expect(last.className).toContain("rounded-b-[12px]");
|
|
69
|
+
|
|
70
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/8]⎯
|
|
71
|
+
|
|
72
|
+
FAIL src/ui/menu/menu.test.tsx > Menu > MenuDivider renders with correct role and classes
|
|
73
|
+
AssertionError: expected 'my-2 mx-0 h-px border-0 bg-m3-outline…' to contain 'mx-3'
|
|
74
|
+
|
|
75
|
+
Expected: "mx-3"
|
|
76
|
+
Received: "my-2 mx-0 h-px border-0 bg-m3-outline-variant"
|
|
77
|
+
|
|
78
|
+
❯ src/ui/menu/menu.test.tsx:167:29
|
|
79
|
+
165| const divider = screen.getByTestId("divider");
|
|
80
|
+
166| expect(divider.getAttribute("role")).toBe("separator");
|
|
81
|
+
167| expect(divider.className).toContain("mx-3");
|
|
82
|
+
| ^
|
|
83
|
+
168| expect(divider.className).toContain("bg-m3-outline-variant");
|
|
84
|
+
169| });
|
|
85
|
+
|
|
86
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/8]⎯
|
|
87
|
+
|
|
88
|
+
FAIL src/ui/menu/menu.test.tsx > Menu > Standard variant applies surface-container-low on MenuGroup
|
|
89
|
+
AssertionError: expected 'relative overflow-hidden py-1 bg-tran…' to contain 'bg-m3-surface-container-low'
|
|
90
|
+
|
|
91
|
+
Expected: "bg-m3-surface-container-low"
|
|
92
|
+
Received: "relative overflow-hidden py-1 bg-transparent"
|
|
93
|
+
|
|
94
|
+
❯ src/ui/menu/menu.test.tsx:186:27
|
|
95
|
+
184| );
|
|
96
|
+
185| const group = screen.getByTestId("group-standard");
|
|
97
|
+
186| expect(group.className).toContain("bg-m3-surface-container-low");
|
|
98
|
+
| ^
|
|
99
|
+
187| });
|
|
100
|
+
188|
|
|
101
|
+
|
|
102
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/8]⎯
|
|
103
|
+
|
|
104
|
+
FAIL src/ui/menu/menu.test.tsx > Menu > Vibrant variant applies tertiary-container on MenuGroup
|
|
105
|
+
AssertionError: expected 'relative overflow-hidden py-1 bg-tran…' to contain 'bg-m3-tertiary-container'
|
|
106
|
+
|
|
107
|
+
Expected: "bg-m3-tertiary-container"
|
|
108
|
+
Received: "relative overflow-hidden py-1 bg-transparent"
|
|
109
|
+
|
|
110
|
+
❯ src/ui/menu/menu.test.tsx:204:27
|
|
111
|
+
202| );
|
|
112
|
+
203| const group = screen.getByTestId("group-vibrant");
|
|
113
|
+
204| expect(group.className).toContain("bg-m3-tertiary-container");
|
|
114
|
+
| ^
|
|
115
|
+
205| });
|
|
116
|
+
206|
|
|
117
|
+
|
|
118
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/8]⎯
|
|
119
|
+
|
|
120
|
+
FAIL src/ui/menu/menu.test.tsx > SubMenu > opens after hoverOpenDelay (default 200ms)
|
|
121
|
+
Error: Test timed out in 5000ms.
|
|
122
|
+
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
|
|
123
|
+
❯ src/ui/menu/menu.test.tsx:513:2
|
|
124
|
+
511|
|
|
125
|
+
512| // 2. SubMenu opens after hover delay
|
|
126
|
+
513| it("opens after hoverOpenDelay (default 200ms)", async () => {
|
|
127
|
+
| ^
|
|
128
|
+
514| vi.useFakeTimers();
|
|
129
|
+
515| const user = userEvent.setup({ delay: null });
|
|
130
|
+
|
|
131
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/8]⎯
|
|
132
|
+
|
|
133
|
+
FAIL src/ui/menu/menu.test.tsx > SubMenu > closes after hoverCloseDelay (default 300ms)
|
|
134
|
+
Error: Test timed out in 5000ms.
|
|
135
|
+
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
|
|
136
|
+
❯ src/ui/menu/menu.test.tsx:553:2
|
|
137
|
+
551|
|
|
138
|
+
552| // 3. SubMenu closes after hover close delay
|
|
139
|
+
553| it("closes after hoverCloseDelay (default 300ms)", async () => {
|
|
140
|
+
| ^
|
|
141
|
+
554| vi.useFakeTimers();
|
|
142
|
+
555| const user = userEvent.setup({ delay: null });
|
|
143
|
+
|
|
144
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/8]⎯
|
|
145
|
+
|
|
146
|
+
FAIL src/ui/menu/menu.test.tsx > Menu Internals > MenuGroup updates state on hover for shape morphing
|
|
147
|
+
Error: Test timed out in 5000ms.
|
|
148
|
+
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
|
|
149
|
+
❯ src/ui/menu/menu.test.tsx:616:2
|
|
150
|
+
614|
|
|
151
|
+
615| // 2. MenuGroup shape morphing triggers on hover
|
|
152
|
+
616| it("MenuGroup updates state on hover for shape morphing", async () =>…
|
|
153
|
+
| ^
|
|
154
|
+
617| const user = userEvent.setup();
|
|
155
|
+
618| render(
|
|
156
|
+
|
|
157
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/8]⎯
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
Test Files 1 failed (1)
|
|
161
|
+
Tests 8 failed | 20 passed (28)
|
|
162
|
+
Start at 09:33:33
|
|
163
|
+
Duration 17.69s (transform 152ms, setup 97ms, import 567ms, tests 16.01s, environment 805ms)
|
|
164
|
+
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2017",
|
|
4
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
+
"allowJs": false,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"module": "esnext",
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"jsx": "react-jsx"
|
|
15
|
+
},
|
|
16
|
+
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
|
17
|
+
"exclude": ["node_modules"]
|
|
18
|
+
}
|
package/tsup.config.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Options } from "tsup";
|
|
2
|
+
import { defineConfig } from "tsup";
|
|
3
|
+
|
|
4
|
+
const config: Options = {
|
|
5
|
+
entry: ["src/index.ts"],
|
|
6
|
+
format: ["cjs", "esm"],
|
|
7
|
+
dts: true,
|
|
8
|
+
clean: false, // Tắt clean để tránh nuke mất typography.css khi Next.js đang khởi động
|
|
9
|
+
// externalize peer dependencies — user project sẽ cung cấp
|
|
10
|
+
external: ["react", "react-dom", "motion"],
|
|
11
|
+
// Tree-shaking tối đa, không split vì thư viện nhỏ
|
|
12
|
+
treeshake: true,
|
|
13
|
+
splitting: false,
|
|
14
|
+
sourcemap: true,
|
|
15
|
+
outDir: "dist",
|
|
16
|
+
// "use client" sẽ được chèn thủ công bằng script phía sau (copy-assets.js)
|
|
17
|
+
onSuccess: "node scripts/copy-assets.js",
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default defineConfig(config);
|
package/vitest.config.ts
ADDED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook to detect clicks outside of a specified element.
|
|
3
|
-
*
|
|
4
|
-
* @param handler - Callback function to execute when a click outside occurs.
|
|
5
|
-
* @param enabled - Whether the listener is active.
|
|
6
|
-
* @returns A RefObject to be attached to the target element.
|
|
7
|
-
*/
|
|
8
|
-
export declare function useClickOutside<T extends HTMLElement>(handler: () => void, enabled?: boolean): import("react").RefObject<T | null>;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useMediaQuery — Responsive hook chuẩn SSR-safe
|
|
3
|
-
*
|
|
4
|
-
* Tránh hydration mismatch bằng cách khởi tạo với `false`.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```tsx
|
|
8
|
-
* const isMobile = useMediaQuery('(max-width: 768px)');
|
|
9
|
-
* ```
|
|
10
|
-
*/
|
|
11
|
-
export declare function useMediaQuery(query: string): boolean;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export interface RippleOptions {
|
|
2
|
-
/** Thời gian hiệu ứng ripple (ms). Mặc định: 600 */
|
|
3
|
-
duration?: number;
|
|
4
|
-
/** Màu ripple. Mặc định: 'currentColor' */
|
|
5
|
-
color?: string;
|
|
6
|
-
/** Opacity. Mặc định: 0.12 (chuẩn MD3) */
|
|
7
|
-
opacity?: number;
|
|
8
|
-
/** Tắt ripple (ví dụ khi disabled) */
|
|
9
|
-
disabled?: boolean;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* useRipple — Material Design 3 Expressive Ripple Effect
|
|
13
|
-
*
|
|
14
|
-
* Hook thuần DOM, không phụ thuộc thư viện animation ngoài.
|
|
15
|
-
* Chú ý: Yêu cầu element có `position: relative` và `overflow: hidden`.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```tsx
|
|
19
|
-
* const { rippleRef, onPointerDown } = useRipple();
|
|
20
|
-
* <button ref={rippleRef} onPointerDown={onPointerDown}>Click me</button>
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export declare function useRipple<T extends HTMLElement = HTMLElement>(options?: RippleOptions): {
|
|
24
|
-
rippleRef: import("react").RefObject<T | null>;
|
|
25
|
-
onPointerDown: (event: React.PointerEvent<T>) => void;
|
|
26
|
-
};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MaterialSymbolsPreconnect
|
|
3
|
-
*
|
|
4
|
-
* Inject preconnect resource hints cho Google Fonts CDN và <head>.
|
|
5
|
-
* Đặt component này CÀNG SỚM CÀNG TỐT trong app tree, lý tưởng là
|
|
6
|
-
* ngay trong <head> hoặc root layout.
|
|
7
|
-
*
|
|
8
|
-
* WHY THIS MATTERS:
|
|
9
|
-
* Nếu @import url() nằm trong CSS file, browser phải:
|
|
10
|
-
* 1. Parse HTML -> download JS bundle -> execute CSS -> gặp @import -> mới bắt đầu connect Google Fonts
|
|
11
|
-
* Preconnect hints cho phép browser bắt đầu TCP handshake + TLS ngay từ bước 1,
|
|
12
|
-
* tiết kiệm 100-500ms connection time tùy network.
|
|
13
|
-
*
|
|
14
|
-
* USAGE:
|
|
15
|
-
* ```tsx
|
|
16
|
-
* // app/layout.tsx (Next.js) hoặc index.html equivalent
|
|
17
|
-
* import { MaterialSymbolsPreconnect } from '@bug-on/md3-react';
|
|
18
|
-
*
|
|
19
|
-
* export default function RootLayout({ children }) {
|
|
20
|
-
* return (
|
|
21
|
-
* <html>
|
|
22
|
-
* <head>
|
|
23
|
-
* <MaterialSymbolsPreconnect />
|
|
24
|
-
* </head>
|
|
25
|
-
* <body>{children}</body>
|
|
26
|
-
* </html>
|
|
27
|
-
* );
|
|
28
|
-
* }
|
|
29
|
-
* ```
|
|
30
|
-
*
|
|
31
|
-
* NOTE: Chỉ dùng component này với CDN mode.
|
|
32
|
-
* Với self-hosted fonts thì không cần preconnect đến external origin.
|
|
33
|
-
*/
|
|
34
|
-
export interface MaterialSymbolsPreconnectProps {
|
|
35
|
-
/**
|
|
36
|
-
* Mảng các biến thể font Material Symbols cần tải.
|
|
37
|
-
* Chỉ nên chọn các biến thể mà ứng dụng thực sự sử dụng để tiết kiệm băng thông.
|
|
38
|
-
* @default ["outlined"]
|
|
39
|
-
*/
|
|
40
|
-
variants?: Array<"outlined" | "rounded" | "sharp">;
|
|
41
|
-
}
|
|
42
|
-
export declare function MaterialSymbolsPreconnect({ variants, }: MaterialSymbolsPreconnectProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
export type ThemeMode = "light" | "dark";
|
|
2
|
-
export interface MD3ColorScheme {
|
|
3
|
-
primary: string;
|
|
4
|
-
onPrimary: string;
|
|
5
|
-
primaryContainer: string;
|
|
6
|
-
onPrimaryContainer: string;
|
|
7
|
-
inversePrimary: string;
|
|
8
|
-
primaryFixed: string;
|
|
9
|
-
primaryFixedDim: string;
|
|
10
|
-
onPrimaryFixed: string;
|
|
11
|
-
onPrimaryFixedVariant: string;
|
|
12
|
-
secondary: string;
|
|
13
|
-
onSecondary: string;
|
|
14
|
-
secondaryContainer: string;
|
|
15
|
-
onSecondaryContainer: string;
|
|
16
|
-
secondaryFixed: string;
|
|
17
|
-
secondaryFixedDim: string;
|
|
18
|
-
onSecondaryFixed: string;
|
|
19
|
-
onSecondaryFixedVariant: string;
|
|
20
|
-
tertiary: string;
|
|
21
|
-
onTertiary: string;
|
|
22
|
-
tertiaryContainer: string;
|
|
23
|
-
onTertiaryContainer: string;
|
|
24
|
-
tertiaryFixed: string;
|
|
25
|
-
tertiaryFixedDim: string;
|
|
26
|
-
onTertiaryFixed: string;
|
|
27
|
-
onTertiaryFixedVariant: string;
|
|
28
|
-
error: string;
|
|
29
|
-
onError: string;
|
|
30
|
-
errorContainer: string;
|
|
31
|
-
onErrorContainer: string;
|
|
32
|
-
surface: string;
|
|
33
|
-
onSurface: string;
|
|
34
|
-
surfaceVariant: string;
|
|
35
|
-
onSurfaceVariant: string;
|
|
36
|
-
surfaceTint: string;
|
|
37
|
-
surfaceContainerLowest: string;
|
|
38
|
-
surfaceContainerLow: string;
|
|
39
|
-
surfaceContainer: string;
|
|
40
|
-
surfaceContainerHigh: string;
|
|
41
|
-
surfaceContainerHighest: string;
|
|
42
|
-
inverseSurface: string;
|
|
43
|
-
inverseOnSurface: string;
|
|
44
|
-
background: string;
|
|
45
|
-
onBackground: string;
|
|
46
|
-
outline: string;
|
|
47
|
-
outlineVariant: string;
|
|
48
|
-
shadow: string;
|
|
49
|
-
scrim: string;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Generate a complete MD3 color scheme from a source color hex string.
|
|
53
|
-
* Uses the HCT color space algorithm — same as Material You on Android.
|
|
54
|
-
*/
|
|
55
|
-
export declare function generateM3Theme(sourceColorHex: string, mode?: ThemeMode): MD3ColorScheme;
|
|
56
|
-
/**
|
|
57
|
-
* Apply an MD3 dynamic color scheme to the document root as CSS custom properties.
|
|
58
|
-
* Sets both `--md-sys-color-*` tokens (used by components) and
|
|
59
|
-
* `--color-m3-*` tokens (used by Tailwind arbitrary values in apps).
|
|
60
|
-
*
|
|
61
|
-
* Also sets `data-theme` attribute for dark mode CSS selectors.
|
|
62
|
-
*/
|
|
63
|
-
export declare function applyTheme(sourceColorHex: string, mode?: ThemeMode, root?: HTMLElement): void;
|
package/dist/lib/utils.d.ts
DELETED
package/dist/types/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type { MD3ColorStyle, MD3Shape, MD3Size, PolymorphicProps, PolymorphicRef, } from "./md3";
|
package/dist/types/md3.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithoutRef, ComponentPropsWithRef, ElementType, ReactNode } from "react";
|
|
2
|
-
/** MD3 button color variants */
|
|
3
|
-
export type MD3ColorStyle = "elevated" | "filled" | "tonal" | "outlined" | "text";
|
|
4
|
-
/** MD3 Expressive button sizes */
|
|
5
|
-
export type MD3Size = "xs" | "sm" | "md" | "lg" | "xl";
|
|
6
|
-
/** MD3 shape families */
|
|
7
|
-
export type MD3Shape = "round" | "square";
|
|
8
|
-
/** Helper: PolyMorphic component ref */
|
|
9
|
-
export type PolymorphicRef<C extends ElementType> = ComponentPropsWithRef<C>["ref"];
|
|
10
|
-
/** Helper: Props cho polymorphic components */
|
|
11
|
-
export type PolymorphicProps<C extends ElementType, Props = object> = Props & Omit<ComponentPropsWithoutRef<C>, keyof Props> & {
|
|
12
|
-
as?: C;
|
|
13
|
-
children?: ReactNode;
|
|
14
|
-
};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file app-bar-column.tsx
|
|
3
|
-
* MD3 Expressive App Bar Column DSL.
|
|
4
|
-
*
|
|
5
|
-
* Displays App Bar action items in a vertical column.
|
|
6
|
-
* Overflow items collapse into a dropdown menu.
|
|
7
|
-
*
|
|
8
|
-
* @see docs/m3/app-bars/AppBarColumn.kt
|
|
9
|
-
*/
|
|
10
|
-
import type { AppBarColumnProps } from "./app-bar.types";
|
|
11
|
-
/**
|
|
12
|
-
* MD3 Expressive App Bar Column.
|
|
13
|
-
*
|
|
14
|
-
* Renders action items in a vertical column. Commonly used in
|
|
15
|
-
* side navigation or rail-style App Bars.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```tsx
|
|
19
|
-
* <AppBarColumn
|
|
20
|
-
* maxItemCount={3}
|
|
21
|
-
* items={[
|
|
22
|
-
* { type: 'clickable', icon: <Icon>edit</Icon>, label: 'Edit', onClick: handleEdit },
|
|
23
|
-
* { type: 'clickable', icon: <Icon>delete</Icon>, label: 'Delete', onClick: handleDelete },
|
|
24
|
-
* ]}
|
|
25
|
-
* />
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
export declare function AppBarColumn({ items, maxItemCount, className, }: AppBarColumnProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file app-bar-item-button.tsx
|
|
3
|
-
* Shared icon button renderer for AppBarRow and AppBarColumn items.
|
|
4
|
-
*
|
|
5
|
-
* Extracted from duplicate RowItem/ColumnItem implementations.
|
|
6
|
-
*/
|
|
7
|
-
import type { AppBarItem } from "./app-bar.types";
|
|
8
|
-
interface AppBarItemButtonProps {
|
|
9
|
-
item: AppBarItem;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Renders a single App Bar action item as an icon button.
|
|
13
|
-
* Handles clickable, toggleable, and custom item types.
|
|
14
|
-
*/
|
|
15
|
-
export declare function AppBarItemButton({ item }: AppBarItemButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
export {};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file app-bar-overflow-indicator.tsx
|
|
3
|
-
* MD3 Expressive App Bar Overflow Indicator.
|
|
4
|
-
*
|
|
5
|
-
* Renders a "More" (more_vert) icon button that opens a Radix UI
|
|
6
|
-
* DropdownMenu containing overflow App Bar items.
|
|
7
|
-
*
|
|
8
|
-
* Used internally by <AppBarRow> and <AppBarColumn> when items exceed
|
|
9
|
-
* the visible count.
|
|
10
|
-
*/
|
|
11
|
-
import type { AppBarOverflowIndicatorProps } from "./app-bar.types";
|
|
12
|
-
/**
|
|
13
|
-
* MD3 App Bar Overflow Indicator.
|
|
14
|
-
*
|
|
15
|
-
* Renders a "more_vert" button that opens a dropdown menu
|
|
16
|
-
* with overflow action items.
|
|
17
|
-
*/
|
|
18
|
-
export declare function AppBarOverflowIndicator({ items, className, }: AppBarOverflowIndicatorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file app-bar-row.tsx
|
|
3
|
-
* MD3 Expressive App Bar Row DSL.
|
|
4
|
-
*
|
|
5
|
-
* Displays App Bar action items in a horizontal row.
|
|
6
|
-
* Items that exceed `maxItemCount` or available width collapse into a
|
|
7
|
-
* dropdown menu via <AppBarOverflowIndicator>.
|
|
8
|
-
*
|
|
9
|
-
* Translated from OverflowMeasurePolicy / AppBarRow.kt in Jetpack Compose M3.
|
|
10
|
-
*
|
|
11
|
-
* @see docs/m3/app-bars/AppBarRow.kt
|
|
12
|
-
*/
|
|
13
|
-
import type { AppBarRowProps } from "./app-bar.types";
|
|
14
|
-
/**
|
|
15
|
-
* MD3 Expressive App Bar Row.
|
|
16
|
-
*
|
|
17
|
-
* Renders action items in a row. Compatible with the `actions` prop of any App Bar.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```tsx
|
|
21
|
-
* <SmallAppBar
|
|
22
|
-
* title="Messages"
|
|
23
|
-
* actions={
|
|
24
|
-
* <AppBarRow
|
|
25
|
-
* maxItemCount={2}
|
|
26
|
-
* items={[
|
|
27
|
-
* { type: 'clickable', icon: <Icon>search</Icon>, label: 'Search', onClick: handleSearch },
|
|
28
|
-
* { type: 'clickable', icon: <Icon>bookmark</Icon>, label: 'Bookmarks', onClick: handleBookmark },
|
|
29
|
-
* { type: 'clickable', icon: <Icon>settings</Icon>, label: 'Settings', onClick: handleSettings },
|
|
30
|
-
* ]}
|
|
31
|
-
* />
|
|
32
|
-
* }
|
|
33
|
-
* />
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export declare function AppBarRow({ items, maxItemCount, className }: AppBarRowProps): import("react/jsx-runtime").JSX.Element;
|