@g9tm/lynxcontrols 1.4.0 → 1.4.2
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/README.md +7 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/base/control.d.ts +24 -0
- package/dist/base/control.d.ts.map +1 -1
- package/dist/base/control.jsx +14 -2
- package/dist/base/control.jsx.map +1 -1
- package/dist/base/index.d.ts +1 -1
- package/dist/base/index.d.ts.map +1 -1
- package/dist/base/index.jsx +1 -1
- package/dist/base/pressable.d.ts.map +1 -1
- package/dist/base/pressable.jsx +1 -1
- package/dist/base/pressable.jsx.map +1 -1
- package/dist/button/button.d.ts.map +1 -1
- package/dist/button/button.jsx +4 -3
- package/dist/button/button.jsx.map +1 -1
- package/dist/button/header-action-button.d.ts.map +1 -1
- package/dist/button/header-action-button.jsx +1 -1
- package/dist/button/header-action-button.jsx.map +1 -1
- package/dist/button/icon-button.d.ts.map +1 -1
- package/dist/button/icon-button.jsx +1 -1
- package/dist/button/icon-button.jsx.map +1 -1
- package/dist/button/nav-card.d.ts.map +1 -1
- package/dist/button/nav-card.jsx +6 -5
- package/dist/button/nav-card.jsx.map +1 -1
- package/dist/button/vertical-icon-text-button.d.ts.map +1 -1
- package/dist/button/vertical-icon-text-button.jsx +1 -1
- package/dist/button/vertical-icon-text-button.jsx.map +1 -1
- package/dist/display/culture-date-time-label.d.ts.map +1 -1
- package/dist/display/culture-date-time-label.jsx +3 -1
- package/dist/display/culture-date-time-label.jsx.map +1 -1
- package/dist/display/progress-bar.jsx +1 -1
- package/dist/display/progress-bar.jsx.map +1 -1
- package/dist/display/separator.jsx +2 -2
- package/dist/display/separator.jsx.map +1 -1
- package/dist/display/title-with-line.jsx +1 -1
- package/dist/display/title-with-line.jsx.map +1 -1
- package/dist/expander/expander.d.ts.map +1 -1
- package/dist/expander/expander.jsx +6 -4
- package/dist/expander/expander.jsx.map +1 -1
- package/dist/fields/fields.css +12 -4
- package/dist/fields/fields.css.map +1 -1
- package/dist/fields/index.d.ts +1 -0
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.jsx +1 -0
- package/dist/fields/notch.d.ts +10 -0
- package/dist/fields/notch.d.ts.map +1 -0
- package/dist/fields/notch.jsx +9 -0
- package/dist/fields/notch.jsx.map +1 -0
- package/dist/fields/outlined-field.d.ts +7 -1
- package/dist/fields/outlined-field.d.ts.map +1 -1
- package/dist/fields/outlined-field.jsx +8 -5
- package/dist/fields/outlined-field.jsx.map +1 -1
- package/dist/fields/pin-entry.d.ts +2 -0
- package/dist/fields/pin-entry.d.ts.map +1 -1
- package/dist/fields/pin-entry.jsx +2 -1
- package/dist/fields/pin-entry.jsx.map +1 -1
- package/dist/fields/text-entry.d.ts.map +1 -1
- package/dist/fields/text-entry.jsx +12 -2
- package/dist/fields/text-entry.jsx.map +1 -1
- package/dist/fields/use-text-input.d.ts.map +1 -1
- package/dist/fields/use-text-input.jsx +11 -1
- package/dist/fields/use-text-input.jsx.map +1 -1
- package/dist/host/hooks.d.ts +5 -0
- package/dist/host/hooks.d.ts.map +1 -1
- package/dist/host/hooks.jsx +4 -1
- package/dist/host/hooks.jsx.map +1 -1
- package/dist/host/index.d.ts +1 -1
- package/dist/host/index.d.ts.map +1 -1
- package/dist/host/index.jsx +1 -1
- package/dist/popup/frame.d.ts.map +1 -1
- package/dist/popup/frame.jsx +11 -3
- package/dist/popup/frame.jsx.map +1 -1
- package/dist/popup/index.d.ts +1 -1
- package/dist/popup/index.d.ts.map +1 -1
- package/dist/popup/popup.css +1 -1
- package/dist/popup/popup.css.map +1 -1
- package/dist/popup/service.d.ts.map +1 -1
- package/dist/popup/service.jsx +12 -4
- package/dist/popup/service.jsx.map +1 -1
- package/dist/popup/types.d.ts +11 -0
- package/dist/popup/types.d.ts.map +1 -1
- package/dist/popup/types.jsx.map +1 -1
- package/dist/selection/selection-sheet.d.ts.map +1 -1
- package/dist/selection/selection-sheet.jsx +7 -3
- package/dist/selection/selection-sheet.jsx.map +1 -1
- package/dist/selection/selection.css +1 -0
- package/dist/selection/selection.css.map +1 -1
- package/dist/sheet/frame.d.ts +2 -0
- package/dist/sheet/frame.d.ts.map +1 -1
- package/dist/sheet/frame.jsx +134 -69
- package/dist/sheet/frame.jsx.map +1 -1
- package/dist/sheet/gesture.d.ts +51 -0
- package/dist/sheet/gesture.d.ts.map +1 -0
- package/dist/sheet/gesture.jsx +107 -0
- package/dist/sheet/gesture.jsx.map +1 -0
- package/dist/sheet/handoff.d.ts +32 -0
- package/dist/sheet/handoff.d.ts.map +1 -0
- package/dist/sheet/handoff.jsx +33 -0
- package/dist/sheet/handoff.jsx.map +1 -0
- package/dist/sheet/header.d.ts +12 -1
- package/dist/sheet/header.d.ts.map +1 -1
- package/dist/sheet/header.jsx +42 -29
- package/dist/sheet/header.jsx.map +1 -1
- package/dist/sheet/index.d.ts +3 -2
- package/dist/sheet/index.d.ts.map +1 -1
- package/dist/sheet/index.jsx +3 -2
- package/dist/sheet/motion.d.ts +59 -0
- package/dist/sheet/motion.d.ts.map +1 -0
- package/dist/sheet/motion.jsx +59 -0
- package/dist/sheet/motion.jsx.map +1 -0
- package/dist/sheet/options.d.ts +34 -2
- package/dist/sheet/options.d.ts.map +1 -1
- package/dist/sheet/options.jsx +2 -1
- package/dist/sheet/options.jsx.map +1 -1
- package/dist/sheet/service.d.ts.map +1 -1
- package/dist/sheet/service.jsx +1 -1
- package/dist/sheet/service.jsx.map +1 -1
- package/dist/sheet/sheet.css +52 -1
- package/dist/sheet/sheet.css.map +1 -1
- package/dist/sheet/sizing.d.ts +21 -3
- package/dist/sheet/sizing.d.ts.map +1 -1
- package/dist/sheet/sizing.jsx +15 -2
- package/dist/sheet/sizing.jsx.map +1 -1
- package/dist/tab-bar/tab-bar.d.ts +5 -0
- package/dist/tab-bar/tab-bar.d.ts.map +1 -1
- package/dist/tab-bar/tab-bar.jsx +5 -2
- package/dist/tab-bar/tab-bar.jsx.map +1 -1
- package/dist/toast/service.d.ts.map +1 -1
- package/dist/toast/service.jsx +58 -21
- package/dist/toast/service.jsx.map +1 -1
- package/dist/toast/store.d.ts +2 -0
- package/dist/toast/store.d.ts.map +1 -1
- package/dist/toast/store.jsx +4 -2
- package/dist/toast/store.jsx.map +1 -1
- package/dist/toast/toast.css +20 -13
- package/dist/toast/toast.css.map +1 -1
- package/dist/toggle/checkbox.d.ts.map +1 -1
- package/dist/toggle/checkbox.jsx +1 -1
- package/dist/toggle/checkbox.jsx.map +1 -1
- package/dist/toggle/chip-group.d.ts.map +1 -1
- package/dist/toggle/chip-group.jsx +5 -5
- package/dist/toggle/chip-group.jsx.map +1 -1
- package/dist/toggle/switch.d.ts.map +1 -1
- package/dist/toggle/switch.jsx +2 -2
- package/dist/toggle/switch.jsx.map +1 -1
- package/dist/toggle/toggle.css +1 -2
- package/dist/toggle/toggle.css.map +1 -1
- package/package.json +2 -2
package/dist/sheet/sheet.css
CHANGED
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
right: 0;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
.g9-sheet__view--passthrough {
|
|
18
|
+
pointer-events: none;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.g9-sheet__view--passthrough .g9-sheet {
|
|
22
|
+
pointer-events: auto;
|
|
23
|
+
}
|
|
24
|
+
|
|
17
25
|
.g9-sheet {
|
|
18
26
|
pointer-events: auto;
|
|
19
27
|
flex-direction: column;
|
|
@@ -21,6 +29,31 @@
|
|
|
21
29
|
overflow: hidden;
|
|
22
30
|
}
|
|
23
31
|
|
|
32
|
+
.g9-sheet__frame {
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
flex-grow: 1;
|
|
35
|
+
flex-shrink: 0;
|
|
36
|
+
display: flex;
|
|
37
|
+
position: relative;
|
|
38
|
+
overflow: visible;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.g9-sheet__surface {
|
|
42
|
+
flex-direction: column;
|
|
43
|
+
flex-grow: 1;
|
|
44
|
+
flex-shrink: 0;
|
|
45
|
+
display: flex;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.g9-sheet__skirt {
|
|
50
|
+
height: 50vh;
|
|
51
|
+
position: absolute;
|
|
52
|
+
top: 100%;
|
|
53
|
+
left: 0;
|
|
54
|
+
right: 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
24
57
|
.g9-sheet__scrim {
|
|
25
58
|
pointer-events: auto;
|
|
26
59
|
position: absolute;
|
|
@@ -62,6 +95,17 @@
|
|
|
62
95
|
position: relative;
|
|
63
96
|
}
|
|
64
97
|
|
|
98
|
+
.g9-sheet__body--static {
|
|
99
|
+
flex-direction: column;
|
|
100
|
+
flex: 1 1 0;
|
|
101
|
+
display: flex;
|
|
102
|
+
overflow: hidden;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.g9-sheet__content--fill {
|
|
106
|
+
flex: 1 1 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
65
109
|
.g9-sheet__placeholder {
|
|
66
110
|
justify-content: center;
|
|
67
111
|
align-items: center;
|
|
@@ -153,7 +197,7 @@
|
|
|
153
197
|
}
|
|
154
198
|
|
|
155
199
|
.g9-sheet-header__back {
|
|
156
|
-
justify-content:
|
|
200
|
+
justify-content: flex-start;
|
|
157
201
|
align-items: center;
|
|
158
202
|
display: flex;
|
|
159
203
|
}
|
|
@@ -170,6 +214,12 @@
|
|
|
170
214
|
display: flex;
|
|
171
215
|
}
|
|
172
216
|
|
|
217
|
+
.g9-sheet__footer-slot {
|
|
218
|
+
flex-direction: column;
|
|
219
|
+
flex-shrink: 0;
|
|
220
|
+
display: flex;
|
|
221
|
+
}
|
|
222
|
+
|
|
173
223
|
.g9-sheet-footer {
|
|
174
224
|
border-top-style: solid;
|
|
175
225
|
border-top-width: 1px;
|
|
@@ -187,6 +237,7 @@
|
|
|
187
237
|
}
|
|
188
238
|
|
|
189
239
|
.g9-sheet-footer__cell {
|
|
240
|
+
flex-direction: column;
|
|
190
241
|
flex: 1;
|
|
191
242
|
display: flex;
|
|
192
243
|
}
|
package/dist/sheet/sheet.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://./src/sheet/sheet.css"],"names":[],"mappings":"AACA;EAAE,oBAAoB;EACpB,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAIA;EADE,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;
|
|
1
|
+
{"version":3,"sources":["webpack://./src/sheet/sheet.css"],"names":[],"mappings":"AACA;EAAE,oBAAoB;EACpB,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAIA;EADE,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAKA;EAFE,oBAAoB;AACtB;;AAKA;EAFE,oBAAoB;AACtB;;AAKA;EAFE,oBAAoB;EACpB,sBAAsB;EACtB,aAAa;EACb,gBAAgB;AAClB;;AAMA;EAHE,sBAAsB;EACtB,YAAY;EACZ,cAAc;EACd,aAAa;EACb,kBAAkB;EAClB,iBAAiB;AACnB;;AAMA;EAHE,sBAAsB;EACtB,YAAY;EACZ,cAAc;EACd,aAAa;EACb,gBAAgB;AAClB;;AAOA;EAJE,YAAY;EACZ,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAOA;EAJE,oBAAoB;EACpB,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAOA;EAJE,oBAAoB;AACtB;;AAOA;EAJE,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;EACZ,aAAa;AACf;;AAOA;EAJE,2CAA2C;EAC3C,mBAAmB;EACnB,WAAW;EACX,WAAW;AACb;;AAOA;EAJE,cAAc;AAChB;;AAOA;EAJE,OAAO;AACT;;AAOA;EAJE,sBAAsB;EACtB,aAAa;EACb,kBAAkB;AACpB;;AAQA;EALE,sBAAsB;EACtB,WAAW;EACX,aAAa;EACb,gBAAgB;AAClB;;AAUA;EAPE,WAAW;AACb;;AAYA;EATE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAYA;EATE,6CAA6C;EAC7C,oDAAoD;EACpD,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;AACV;;AAYA;EATE;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF;;AAWA;EARE,2CAA2C;AAC7C;;AAWA;EARE;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF;;AAUA;EAPE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAWA;EARE,kCAAkC;EAClC,mBAAmB;EACnB,mBAAmB;EACnB,kBAAkB;EAClB,aAAa;AACf;;AAaA;EAVE,mBAAmB;EACnB,OAAO;EACP,mBAAmB;EACnB,aAAa;AACf;;AAaA;EAVE,mBAAmB;EACnB,mBAAmB;EACnB,aAAa;AACf;;AAaA;EAVE,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,aAAa;AACf;;AAaA;EAVE,yBAAyB;AAC3B;;AAaA;EAVE,mBAAmB;EACnB,OAAO;EACP,mBAAmB;EACnB,aAAa;AACf;;AAaA;EAVE,cAAc;AAChB;;AAaA;EAVE,2BAA2B;EAC3B,mBAAmB;EACnB,aAAa;AACf;;AAaA;EAVE,0BAA0B;EAC1B,uBAAuB;EACvB,iBAAiB;AACnB;;AAaA;EAVE,mBAAmB;EACnB,eAAe;EACf,aAAa;AACf;;AAcA;EAXE,sBAAsB;EACtB,cAAc;EACd,aAAa;AACf;;AAcA;EAXE,uBAAuB;EACvB,qBAAqB;EACrB,2CAA2C;EAC3C,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;EAClB,aAAa;AACf;;AAcA;EAXE,mBAAmB;EACnB,eAAe;EACf,aAAa;AACf;;AAgBA;EAbE,sBAAsB;EACtB,OAAO;EACP,aAAa;AACf","sourcesContent":["/* G9 sheets on lynx-ui Sheet (MAUI G9SheetView / header template). No shadows. */\n.g9-sheet-stack {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n pointer-events: none;\n}\n\n/* lynx-ui SheetView (position: fixed): the whole viewport, so the sheet rises from the bottom edge. */\n.g9-sheet__view {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n/* A non-modal sheet's view lets every touch it does not cover through to the page, native views included. */\n.g9-sheet__view--passthrough {\n pointer-events: none;\n}\n\n.g9-sheet__view--passthrough .g9-sheet {\n pointer-events: auto;\n}\n\n.g9-sheet {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n pointer-events: auto;\n}\n\n/* G9's own views inside lynx-ui's SheetContent (whose style a worklet owns): the frame recedes, the surface paints. */\n.g9-sheet__frame {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n flex-shrink: 0;\n position: relative;\n overflow: visible;\n}\n\n.g9-sheet__surface {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n flex-shrink: 0;\n overflow: hidden;\n}\n\n/* Paints below the surface for a drag past the top detent; outside the layout, so fit heights ignore it. */\n.g9-sheet__skirt {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n height: 50vh;\n}\n\n.g9-sheet__scrim {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n pointer-events: auto;\n}\n\n.g9-sheet__scrim--covered {\n pointer-events: none;\n}\n\n.g9-sheet__grabber-area {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 30px;\n}\n\n.g9-sheet__grabber {\n width: 32px;\n height: 4px;\n border-radius: 12px;\n background-color: var(--g9-outline-variant);\n}\n\n.g9-sheet__body {\n flex-shrink: 1;\n}\n\n.g9-sheet__body--fill {\n flex: 1;\n}\n\n.g9-sheet__content {\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n/* scrollBody: false — the content scrolls itself and fills the body (longhands: a definite basis for its children). */\n.g9-sheet__body--static {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n flex-shrink: 1;\n flex-basis: 0px;\n overflow: hidden;\n}\n\n.g9-sheet__content--fill {\n flex-grow: 1;\n flex-shrink: 1;\n flex-basis: 0px;\n}\n\n.g9-sheet__placeholder {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.g9-sheet__cover {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n background-color: var(--g9-surface-container);\n animation: g9-sheet-cover-out 220ms ease-out forwards;\n}\n\n@keyframes g9-sheet-cover-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n.g9-sheet-reveal {\n animation: g9-sheet-reveal-in 140ms ease-out;\n}\n\n@keyframes g9-sheet-reveal-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n.g9-sheet-loading,\n.g9-processing-sheet__loading {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.g9-sheet-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px 16px;\n border-bottom-width: 1px;\n border-bottom-style: solid;\n border-bottom-color: rgba(121, 116, 126, 0.35);\n}\n\n.g9-sheet-header__side {\n display: flex;\n flex-direction: row;\n flex: 1;\n align-items: center;\n}\n\n.g9-sheet-header__start {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.g9-sheet-header__end {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n}\n\n.g9-sheet-header__side.g9-sheet-header__end {\n justify-content: flex-end;\n}\n\n.g9-sheet-header__grow {\n display: flex;\n flex-direction: row;\n flex: 1;\n align-items: center;\n}\n\n.g9-sheet-header__title-near {\n padding: 0px 8px;\n}\n\n.g9-sheet-header__back {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n}\n\n.g9-sheet-header__title {\n font-weight: bold;\n color: var(--g9-secondary);\n text-overflow: ellipsis;\n}\n\n.g9-sheet-header__items {\n display: flex;\n flex-direction: row;\n column-gap: 8px;\n}\n\n/* Holds the footer (or nothing) so its height is measured with the body's for a fit sheet. */\n.g9-sheet__footer-slot {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n\n.g9-sheet-footer {\n display: flex;\n flex-direction: column;\n row-gap: 8px;\n padding: 12px 16px;\n border-top-width: 1px;\n border-top-style: solid;\n border-top-color: var(--g9-outline-variant);\n}\n\n.g9-sheet-footer__row {\n display: flex;\n flex-direction: row;\n column-gap: 8px;\n}\n\n/* A column: whatever a cell holds (a button, a wrapper around one) stretches to the cell's width, as MAUI's footer\n buttons fill their cell. */\n.g9-sheet-footer__cell {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n"],"sourceRoot":""}
|
package/dist/sheet/sizing.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { G9SheetOptions } from './options.js';
|
|
1
|
+
import type { G9SheetDetent, G9SheetOptions } from './options.js';
|
|
2
2
|
/** MAUI `G9SheetView.MinimizedHeight`: default peek height. */
|
|
3
3
|
export declare const g9SheetDefaultPeekHeight = 100;
|
|
4
4
|
/** Absolute minimum of an authoritative fit height (MAUI helper :81). */
|
|
@@ -7,8 +7,13 @@ export declare const g9SheetFitMinHeight = 80;
|
|
|
7
7
|
export declare const g9SheetFitLoadingMinHeight = 180;
|
|
8
8
|
/** Finger travel at release that requests a close (MAUI `DragCloseThreshold`). */
|
|
9
9
|
export declare const g9SheetDragCloseThreshold = 72;
|
|
10
|
-
/**
|
|
11
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Gap between the top safe-area inset and a full-screen sheet's header. MAUI reserves the inset alone
|
|
12
|
+
* (`ResolveFullScreenSheetTopPadding`), but its Android inset is the status-bar band, a few dp below the cutout an
|
|
13
|
+
* immersive Lynx host reports: measured side by side on a Pixel 9 Pro XL (2026-10-10), MAUI's header sat 3 dp lower.
|
|
14
|
+
* (It was 8, which put every full-screen header 5 dp below MAUI's.)
|
|
15
|
+
*/
|
|
16
|
+
export declare const g9SheetTopSafeAreaBaseGap = 3;
|
|
12
17
|
/** The platform the app runs on (Lynx `SystemInfo.platform`), lower-cased; `'unknown'` outside Lynx. */
|
|
13
18
|
export declare function currentPlatform(): 'android' | 'ios' | 'windows' | 'macos' | 'unknown';
|
|
14
19
|
/** What the adapter passes to lynx-ui `SheetRoot` and how the frame behaves. */
|
|
@@ -59,6 +64,19 @@ export declare function sheetVisibleRatio(options: G9SheetOptions, hostHeight: n
|
|
|
59
64
|
export declare function parentRecedeOffset(visibleHeight: number): number;
|
|
60
65
|
/** Top padding of a full-screen sheet (MAUI safe-area rule). */
|
|
61
66
|
export declare function sheetTopPadding(options: G9SheetOptions, topInset: number): number;
|
|
67
|
+
/**
|
|
68
|
+
* Top padding of the sheet surface where it rests. A full-screen sheet always reserves {@link sheetTopPadding}. A
|
|
69
|
+
* detent sheet resting at its `large` detent reserves it too when that detent reaches under the top inset (MAUI
|
|
70
|
+
* state-aware top padding, `G9BottomSheetHelper.ApplyStateAwareTopPadding`): its content never sits under the status
|
|
71
|
+
* bar or the camera cutout. Opted out like MAUI: `useTopSafeAreaPadding: false` with no additional/override padding.
|
|
72
|
+
*/
|
|
73
|
+
export declare function sheetSurfaceTopPadding(options: G9SheetOptions, layout: Pick<G9SheetLayout, 'fullScreen' | 'fit'>, resting: G9SheetDetent | 'fit', topInset: number, hostHeight: number): number;
|
|
74
|
+
/**
|
|
75
|
+
* Bottom padding of the sheet surface: the host's bottom safe inset (a visible navigation bar or gesture handle), so
|
|
76
|
+
* the last row and the footer stay above it. `useBottomSafeAreaPadding: false` lets content run under it. An
|
|
77
|
+
* immersive host (system bars hidden, as the AgriPad MAUI app) reports 0 and nothing changes.
|
|
78
|
+
*/
|
|
79
|
+
export declare function sheetSurfaceBottomPadding(options: G9SheetOptions, bottomInset: number): number;
|
|
62
80
|
/**
|
|
63
81
|
* Size-scaled animation duration (MAUI `SizeScaledAnimationDuration`): a partial traversal takes the matching slice
|
|
64
82
|
* of the full duration (at least 1 ms unless the duration is 0).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../../src/sheet/sizing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../../src/sheet/sizing.ts"],"names":[],"mappings":"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"}
|
package/dist/sheet/sizing.jsx
CHANGED
|
@@ -2,7 +2,7 @@ const g9SheetDefaultPeekHeight = 100;
|
|
|
2
2
|
const g9SheetFitMinHeight = 80;
|
|
3
3
|
const g9SheetFitLoadingMinHeight = 180;
|
|
4
4
|
const g9SheetDragCloseThreshold = 72;
|
|
5
|
-
const g9SheetTopSafeAreaBaseGap =
|
|
5
|
+
const g9SheetTopSafeAreaBaseGap = 3;
|
|
6
6
|
const clamp = (v, lo, hi)=>Math.min(hi, Math.max(lo, v));
|
|
7
7
|
function currentPlatform() {
|
|
8
8
|
var _ref;
|
|
@@ -112,6 +112,19 @@ function sheetTopPadding(options, topInset) {
|
|
|
112
112
|
const inset = false === options.useTopSafeAreaPadding ? 0 : Math.max(0, topInset);
|
|
113
113
|
return inset + g9SheetTopSafeAreaBaseGap + Math.max(0, null != (_options_additionalTopSafeAreaPadding = options.additionalTopSafeAreaPadding) ? _options_additionalTopSafeAreaPadding : 0);
|
|
114
114
|
}
|
|
115
|
+
function sheetSurfaceTopPadding(options, layout, resting, topInset, hostHeight) {
|
|
116
|
+
var _options_additionalTopSafeAreaPadding, _options_topSafeAreaPaddingOverride, _options_fullExpandedRatio;
|
|
117
|
+
if (layout.fullScreen) return sheetTopPadding(options, topInset);
|
|
118
|
+
if (layout.fit || 'large' !== resting) return 0;
|
|
119
|
+
const opted = false !== options.useTopSafeAreaPadding || (null != (_options_additionalTopSafeAreaPadding = options.additionalTopSafeAreaPadding) ? _options_additionalTopSafeAreaPadding : 0) > 0 || (null != (_options_topSafeAreaPaddingOverride = options.topSafeAreaPaddingOverride) ? _options_topSafeAreaPaddingOverride : 0) > 0;
|
|
120
|
+
if (!opted) return 0;
|
|
121
|
+
const full = clamp(null != (_options_fullExpandedRatio = options.fullExpandedRatio) ? _options_fullExpandedRatio : 1, 0.1, 1);
|
|
122
|
+
const top = Math.max(0, hostHeight) * (1 - full);
|
|
123
|
+
return top < Math.max(0, topInset) + g9SheetTopSafeAreaBaseGap ? sheetTopPadding(options, topInset) : 0;
|
|
124
|
+
}
|
|
125
|
+
function sheetSurfaceBottomPadding(options, bottomInset) {
|
|
126
|
+
return false === options.useBottomSafeAreaPadding ? 0 : Math.max(0, bottomInset);
|
|
127
|
+
}
|
|
115
128
|
function scaledSheetDuration(durationMs, traversedRatio, sizeScaled) {
|
|
116
129
|
if (durationMs <= 0) return 0;
|
|
117
130
|
if (!sizeScaled) return durationMs;
|
|
@@ -141,6 +154,6 @@ function platformSheetConstraints(options, platform = currentPlatform()) {
|
|
|
141
154
|
}
|
|
142
155
|
return style;
|
|
143
156
|
}
|
|
144
|
-
export { backdropCardTransform, clampFitHeight, currentPlatform, g9SheetDefaultPeekHeight, g9SheetDragCloseThreshold, g9SheetFitLoadingMinHeight, g9SheetFitMinHeight, g9SheetTopSafeAreaBaseGap, parentRecedeOffset, platformSheetConstraints, resolveSheetLayout, scaledSheetDuration, sheetOverlayOpacity, sheetTopPadding, sheetVisibleRatio };
|
|
157
|
+
export { backdropCardTransform, clampFitHeight, currentPlatform, g9SheetDefaultPeekHeight, g9SheetDragCloseThreshold, g9SheetFitLoadingMinHeight, g9SheetFitMinHeight, g9SheetTopSafeAreaBaseGap, parentRecedeOffset, platformSheetConstraints, resolveSheetLayout, scaledSheetDuration, sheetOverlayOpacity, sheetSurfaceBottomPadding, sheetSurfaceTopPadding, sheetTopPadding, sheetVisibleRatio };
|
|
145
158
|
|
|
146
159
|
//# sourceMappingURL=sizing.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet/sizing.jsx","sources":["../../src/sheet/sizing.ts"],"sourcesContent":["import type { G9SheetDetent, G9SheetOptions } from './options';\n\n// Pure sizing rules of the G9 sheet (MAUI G9SheetView + G9BottomSheetHelper sizing; guide 650–980, ADR-0019/0026).\n\n/** MAUI `G9SheetView.MinimizedHeight`: default peek height. */\nexport const g9SheetDefaultPeekHeight = 100;\n/** Absolute minimum of an authoritative fit height (MAUI helper :81). */\nexport const g9SheetFitMinHeight = 80;\n/** Floor while the height is unknown (loading window). */\nexport const g9SheetFitLoadingMinHeight = 180;\n/** Finger travel at release that requests a close (MAUI `DragCloseThreshold`). */\nexport const g9SheetDragCloseThreshold = 72;\n/** Base gap above full-screen content (MAUI safe-area rule). */\nexport const g9SheetTopSafeAreaBaseGap = 8;\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\n/** The platform the app runs on (Lynx `SystemInfo.platform`), lower-cased; `'unknown'` outside Lynx. */\nexport function currentPlatform(): 'android' | 'ios' | 'windows' | 'macos' | 'unknown' {\n const info = (globalThis as { SystemInfo?: { platform?: string } }).SystemInfo;\n const p = (info?.platform ?? '').toLowerCase();\n if (p === 'android') return 'android';\n if (p === 'ios') return 'ios';\n if (p.startsWith('win')) return 'windows';\n if (p === 'macos' || p === 'mac' || p === 'osx') return 'macos';\n return 'unknown';\n}\n\n/** What the adapter passes to lynx-ui `SheetRoot` and how the frame behaves. */\nexport interface G9SheetLayout {\n /** lynx-ui snap points, small to large: pixels, `'NN%'` of the host, or `'fit'`. */\n readonly snapPoints: Array<number | string>;\n readonly initialSnap: number;\n /** One detent, or fit-to-content (MAUI \"fixed\"): no grabber, no detent dragging. */\n readonly fixed: boolean;\n readonly fit: boolean;\n /** Grabber visible (`hasHandle && isDraggable && !fixed`). */\n readonly showHandle: boolean;\n readonly dragDisabled: boolean;\n /** Drag past the lowest detent may request a close. */\n readonly enableDragToClose: boolean;\n /** Backdrop tap requests a close. */\n readonly closeOnOverlayTap: boolean;\n /** The resting body cap for a fit sheet (`maxFitToContentHeightRatio × host`), else `null`. */\n readonly fitMaxHeight: number | null;\n /** Whether the sheet's largest detent is full screen. */\n readonly fullScreen: boolean;\n}\n\nconst pct = (ratio: number) => `${Math.round(ratio * 10000) / 100}%`;\n\n/**\n * Maps G9 options to a lynx-ui layout (the agreed mapping of MAUI `ApplyOptions`): fit → `['fit']` capped at\n * `maxFitToContentHeightRatio`; states → peek pixels / half ratio / full ratio for the allowed detents, the initial\n * detent from `currentState`. The MAUI quirks (a hidden 100 dp detent under `[medium, large]`, a peek-only sheet that\n * may expand) are not carried over: the detents are exactly `states` (docs/sheets.md \"deliberate differences\").\n */\nexport function resolveSheetLayout(\n options: G9SheetOptions,\n hostHeight: number,\n platform = currentPlatform(),\n): G9SheetLayout {\n const fit = options.sizeMode === 'fitToContent';\n const draggable = options.isDraggable !== false;\n const cancelable = options.isCancelable !== false;\n const intercepted = options.onBackRequested != null;\n if (fit) {\n const ratio = clamp(options.maxFitToContentHeightRatio ?? 0.75, 0.2, 1);\n return {\n snapPoints: ['fit'],\n initialSnap: 0,\n fixed: true,\n fit: true,\n showHandle: false,\n dragDisabled: true,\n enableDragToClose: false,\n closeOnOverlayTap: cancelable,\n fitMaxHeight: Math.max(g9SheetFitMinHeight, Math.floor(hostHeight * ratio)),\n fullScreen: false,\n };\n }\n const order: G9SheetDetent[] = ['peek', 'medium', 'large'];\n const requested = options.states && options.states.length > 0 ? options.states : ['medium', 'large'];\n const states = order.filter((d) => requested.includes(d));\n const androidHalf = platform === 'android' ? options.androidHalfExpandedRatio : null;\n const half = clamp(androidHalf ?? options.halfExpandedRatio ?? 0.5, 0.1, 0.9);\n const full = clamp(options.fullExpandedRatio ?? 1, 0.1, 1);\n const peek = Math.max(1, options.collapsedHeight ?? options.peekHeight ?? g9SheetDefaultPeekHeight);\n const snap = (d: G9SheetDetent): number | string =>\n d === 'peek' ? Math.min(peek, Math.max(1, hostHeight)) : d === 'medium' ? pct(half) : pct(full);\n const snapPoints = states.map(snap);\n if (options.expandedFitsContent && snapPoints.length > 0) snapPoints[snapPoints.length - 1] = 'fit';\n const current = options.currentState ?? 'medium';\n const index = states.indexOf(current);\n const fixed = states.length <= 1;\n return {\n snapPoints,\n initialSnap: index >= 0 ? index : 0,\n fixed,\n fit: false,\n showHandle: options.hasHandle !== false && draggable && !fixed,\n dragDisabled: !draggable || intercepted,\n enableDragToClose: cancelable && draggable && !intercepted,\n closeOnOverlayTap: cancelable,\n fitMaxHeight: options.expandedFitsContent\n ? Math.max(\n g9SheetFitMinHeight,\n Math.floor(hostHeight * clamp(options.maxFitToContentHeightRatio ?? 0.75, 0.2, 1)),\n )\n : null,\n fullScreen: states.length === 1 && states[0] === 'large' && full >= 1,\n };\n}\n\n/** Clamps a measured fit body height: `[80, cap]`, or `[180, cap]` while loading (MAUI fit engine). */\nexport function clampFitHeight(natural: number, cap: number, loading: boolean): number {\n const min = loading ? g9SheetFitLoadingMinHeight : g9SheetFitMinHeight;\n if (!(natural > 0)) return Math.min(min, cap);\n return clamp(natural, Math.min(min, cap), cap);\n}\n\n/**\n * Scrim opacity for a visible ratio (MAUI helper overlay rule): between the smallest and the largest detent it runs\n * from `min` to `max`; a single detent uses `max`; below the smallest detent it fades with the ratio.\n */\nexport function sheetOverlayOpacity(\n visibleRatio: number,\n detentRatios: ReadonlyArray<number>,\n min: number,\n max: number,\n): number {\n if (detentRatios.length === 0) return max;\n const lo = Math.min(...detentRatios);\n const hi = Math.max(...detentRatios);\n if (visibleRatio < lo) return (detentRatios.length === 1 ? max : min) * clamp(visibleRatio / lo, 0, 1);\n if (hi === lo) return max;\n return min + (max - min) * clamp((visibleRatio - lo) / (hi - lo), 0, 1);\n}\n\n/** The page recede behind a tall primary sheet (MAUI backdrop card): scale 1 → 0.93, translateY 0 → 12. */\nexport function backdropCardTransform(visibleRatio: number, threshold = 0.75): { scale: number; translateY: number } {\n const raw = clamp((visibleRatio - threshold) / Math.max(1e-6, 1 - threshold), 0, 1);\n const progress = raw <= 0 ? 0 : 1 - (1 - raw) ** (1 / 3);\n return { scale: 1 - 0.07 * progress, translateY: 12 * progress };\n}\n\n/**\n * The visible share of the host a detent sheet covers: its resting height when known, else its opening detent\n * (peek = peek height, medium = half ratio, large = full ratio; `expandedFitsContent` large counts as the fit cap).\n */\nexport function sheetVisibleRatio(\n options: G9SheetOptions,\n hostHeight: number,\n restingHeightPx: number | null,\n platform = currentPlatform(),\n): number {\n const host = Math.max(1, hostHeight);\n if (restingHeightPx != null) return clamp(restingHeightPx / host, 0, 1);\n const layout = resolveSheetLayout(options, host, platform);\n const point = layout.snapPoints[layout.initialSnap];\n if (typeof point === 'number') return clamp(point / host, 0, 1);\n if (point === 'fit' || point === undefined) return (layout.fitMaxHeight ?? 0) / host;\n return clamp(Number.parseFloat(point) / 100, 0, 1);\n}\n\n/** How far a receded parent sheet sinks: `max(24, visible × 0.25)` (MAUI stack recede). */\nexport function parentRecedeOffset(visibleHeight: number): number {\n return Math.max(24, visibleHeight * 0.25);\n}\n\n/** Top padding of a full-screen sheet (MAUI safe-area rule). */\nexport function sheetTopPadding(options: G9SheetOptions, topInset: number): number {\n if (options.topSafeAreaPaddingOverride != null) return Math.max(0, options.topSafeAreaPaddingOverride);\n const inset = options.useTopSafeAreaPadding === false ? 0 : Math.max(0, topInset);\n return inset + g9SheetTopSafeAreaBaseGap + Math.max(0, options.additionalTopSafeAreaPadding ?? 0);\n}\n\n/**\n * Size-scaled animation duration (MAUI `SizeScaledAnimationDuration`): a partial traversal takes the matching slice\n * of the full duration (at least 1 ms unless the duration is 0).\n */\nexport function scaledSheetDuration(durationMs: number, traversedRatio: number, sizeScaled: boolean): number {\n if (durationMs <= 0) return 0;\n if (!sizeScaled) return durationMs;\n return Math.max(1, Math.round(durationMs * clamp(traversedRatio, 0, 1)));\n}\n\n/** Platform size constraints of the sheet surface (MAUI Android/Windows options, applied where they belong). */\nexport function platformSheetConstraints(\n options: G9SheetOptions,\n platform = currentPlatform(),\n): Record<string, string> {\n const px = (n: number) => `${n}px`;\n const style: Record<string, string> = {};\n if (platform === 'android') {\n if (options.androidMaxWidth != null) style.maxWidth = px(options.androidMaxWidth);\n if (options.androidMaxHeight != null) style.maxHeight = px(options.androidMaxHeight);\n if (options.androidMargin) {\n const [l, t, r, b] = options.androidMargin;\n style.margin = `${t}px ${r}px ${b}px ${l}px`;\n }\n }\n if (platform === 'windows') {\n if (options.windowsMaxWidth != null) style.maxWidth = px(options.windowsMaxWidth);\n if (options.windowsMaxHeight != null) style.maxHeight = px(options.windowsMaxHeight);\n if (options.windowsMinWidth != null) style.minWidth = px(options.windowsMinWidth);\n if (options.windowsMinHeight != null) style.minHeight = px(options.windowsMinHeight);\n }\n if (options.contentWidthMode === 'custom') {\n style.width = px(options.contentWidth ?? 300);\n style.alignSelf = 'center';\n }\n return style;\n}\n"],"names":["g9SheetDefaultPeekHeight","g9SheetFitMinHeight","g9SheetFitLoadingMinHeight","g9SheetDragCloseThreshold","g9SheetTopSafeAreaBaseGap","clamp","v","lo","hi","Math","currentPlatform","info","globalThis","p","pct","ratio","resolveSheetLayout","options","hostHeight","platform","_ref","_options_fullExpandedRatio","_ref1","_options_currentState","_options_maxFitToContentHeightRatio","fit","draggable","cancelable","intercepted","_options_maxFitToContentHeightRatio1","order","requested","states","d","androidHalf","half","full","peek","snap","snapPoints","current","index","fixed","clampFitHeight","natural","cap","loading","min","sheetOverlayOpacity","visibleRatio","detentRatios","max","backdropCardTransform","threshold","raw","progress","sheetVisibleRatio","restingHeightPx","_layout_fitMaxHeight","host","layout","point","undefined","Number","parentRecedeOffset","visibleHeight","sheetTopPadding","topInset","_options_additionalTopSafeAreaPadding","inset","scaledSheetDuration","durationMs","traversedRatio","sizeScaled","platformSheetConstraints","px","n","style","l","t","r","b","_options_contentWidth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sheet/sizing.jsx","sources":["../../src/sheet/sizing.ts"],"sourcesContent":["import type { G9SheetDetent, G9SheetOptions } from './options';\n\n// Pure sizing rules of the G9 sheet (MAUI G9SheetView + G9BottomSheetHelper sizing; guide 650–980, ADR-0019/0026).\n\n/** MAUI `G9SheetView.MinimizedHeight`: default peek height. */\nexport const g9SheetDefaultPeekHeight = 100;\n/** Absolute minimum of an authoritative fit height (MAUI helper :81). */\nexport const g9SheetFitMinHeight = 80;\n/** Floor while the height is unknown (loading window). */\nexport const g9SheetFitLoadingMinHeight = 180;\n/** Finger travel at release that requests a close (MAUI `DragCloseThreshold`). */\nexport const g9SheetDragCloseThreshold = 72;\n/**\n * Gap between the top safe-area inset and a full-screen sheet's header. MAUI reserves the inset alone\n * (`ResolveFullScreenSheetTopPadding`), but its Android inset is the status-bar band, a few dp below the cutout an\n * immersive Lynx host reports: measured side by side on a Pixel 9 Pro XL (2026-10-10), MAUI's header sat 3 dp lower.\n * (It was 8, which put every full-screen header 5 dp below MAUI's.)\n */\nexport const g9SheetTopSafeAreaBaseGap = 3;\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\n/** The platform the app runs on (Lynx `SystemInfo.platform`), lower-cased; `'unknown'` outside Lynx. */\nexport function currentPlatform(): 'android' | 'ios' | 'windows' | 'macos' | 'unknown' {\n const info = (globalThis as { SystemInfo?: { platform?: string } }).SystemInfo;\n const p = (info?.platform ?? '').toLowerCase();\n if (p === 'android') return 'android';\n if (p === 'ios') return 'ios';\n if (p.startsWith('win')) return 'windows';\n if (p === 'macos' || p === 'mac' || p === 'osx') return 'macos';\n return 'unknown';\n}\n\n/** What the adapter passes to lynx-ui `SheetRoot` and how the frame behaves. */\nexport interface G9SheetLayout {\n /** lynx-ui snap points, small to large: pixels, `'NN%'` of the host, or `'fit'`. */\n readonly snapPoints: Array<number | string>;\n readonly initialSnap: number;\n /** One detent, or fit-to-content (MAUI \"fixed\"): no grabber, no detent dragging. */\n readonly fixed: boolean;\n readonly fit: boolean;\n /** Grabber visible (`hasHandle && isDraggable && !fixed`). */\n readonly showHandle: boolean;\n readonly dragDisabled: boolean;\n /** Drag past the lowest detent may request a close. */\n readonly enableDragToClose: boolean;\n /** Backdrop tap requests a close. */\n readonly closeOnOverlayTap: boolean;\n /** The resting body cap for a fit sheet (`maxFitToContentHeightRatio × host`), else `null`. */\n readonly fitMaxHeight: number | null;\n /** Whether the sheet's largest detent is full screen. */\n readonly fullScreen: boolean;\n}\n\nconst pct = (ratio: number) => `${Math.round(ratio * 10000) / 100}%`;\n\n/**\n * Maps G9 options to a lynx-ui layout (the agreed mapping of MAUI `ApplyOptions`): fit → `['fit']` capped at\n * `maxFitToContentHeightRatio`; states → peek pixels / half ratio / full ratio for the allowed detents, the initial\n * detent from `currentState`. The MAUI quirks (a hidden 100 dp detent under `[medium, large]`, a peek-only sheet that\n * may expand) are not carried over: the detents are exactly `states` (docs/sheets.md \"deliberate differences\").\n */\nexport function resolveSheetLayout(\n options: G9SheetOptions,\n hostHeight: number,\n platform = currentPlatform(),\n): G9SheetLayout {\n const fit = options.sizeMode === 'fitToContent';\n const draggable = options.isDraggable !== false;\n const cancelable = options.isCancelable !== false;\n const intercepted = options.onBackRequested != null;\n if (fit) {\n const ratio = clamp(options.maxFitToContentHeightRatio ?? 0.75, 0.2, 1);\n return {\n snapPoints: ['fit'],\n initialSnap: 0,\n fixed: true,\n fit: true,\n showHandle: false,\n dragDisabled: true,\n enableDragToClose: false,\n closeOnOverlayTap: cancelable,\n fitMaxHeight: Math.max(g9SheetFitMinHeight, Math.floor(hostHeight * ratio)),\n fullScreen: false,\n };\n }\n const order: G9SheetDetent[] = ['peek', 'medium', 'large'];\n const requested = options.states && options.states.length > 0 ? options.states : ['medium', 'large'];\n const states = order.filter((d) => requested.includes(d));\n const androidHalf = platform === 'android' ? options.androidHalfExpandedRatio : null;\n const half = clamp(androidHalf ?? options.halfExpandedRatio ?? 0.5, 0.1, 0.9);\n const full = clamp(options.fullExpandedRatio ?? 1, 0.1, 1);\n const peek = Math.max(1, options.collapsedHeight ?? options.peekHeight ?? g9SheetDefaultPeekHeight);\n const snap = (d: G9SheetDetent): number | string =>\n d === 'peek' ? Math.min(peek, Math.max(1, hostHeight)) : d === 'medium' ? pct(half) : pct(full);\n const snapPoints = states.map(snap);\n if (options.expandedFitsContent && snapPoints.length > 0) snapPoints[snapPoints.length - 1] = 'fit';\n const current = options.currentState ?? 'medium';\n const index = states.indexOf(current);\n const fixed = states.length <= 1;\n return {\n snapPoints,\n initialSnap: index >= 0 ? index : 0,\n fixed,\n fit: false,\n showHandle: options.hasHandle !== false && draggable && !fixed,\n dragDisabled: !draggable || intercepted,\n enableDragToClose: cancelable && draggable && !intercepted,\n closeOnOverlayTap: cancelable,\n fitMaxHeight: options.expandedFitsContent\n ? Math.max(\n g9SheetFitMinHeight,\n Math.floor(hostHeight * clamp(options.maxFitToContentHeightRatio ?? 0.75, 0.2, 1)),\n )\n : null,\n fullScreen: states.length === 1 && states[0] === 'large' && full >= 1,\n };\n}\n\n/** Clamps a measured fit body height: `[80, cap]`, or `[180, cap]` while loading (MAUI fit engine). */\nexport function clampFitHeight(natural: number, cap: number, loading: boolean): number {\n const min = loading ? g9SheetFitLoadingMinHeight : g9SheetFitMinHeight;\n if (!(natural > 0)) return Math.min(min, cap);\n return clamp(natural, Math.min(min, cap), cap);\n}\n\n/**\n * Scrim opacity for a visible ratio (MAUI helper overlay rule): between the smallest and the largest detent it runs\n * from `min` to `max`; a single detent uses `max`; below the smallest detent it fades with the ratio.\n */\nexport function sheetOverlayOpacity(\n visibleRatio: number,\n detentRatios: ReadonlyArray<number>,\n min: number,\n max: number,\n): number {\n if (detentRatios.length === 0) return max;\n const lo = Math.min(...detentRatios);\n const hi = Math.max(...detentRatios);\n if (visibleRatio < lo) return (detentRatios.length === 1 ? max : min) * clamp(visibleRatio / lo, 0, 1);\n if (hi === lo) return max;\n return min + (max - min) * clamp((visibleRatio - lo) / (hi - lo), 0, 1);\n}\n\n/** The page recede behind a tall primary sheet (MAUI backdrop card): scale 1 → 0.93, translateY 0 → 12. */\nexport function backdropCardTransform(visibleRatio: number, threshold = 0.75): { scale: number; translateY: number } {\n const raw = clamp((visibleRatio - threshold) / Math.max(1e-6, 1 - threshold), 0, 1);\n const progress = raw <= 0 ? 0 : 1 - (1 - raw) ** (1 / 3);\n return { scale: 1 - 0.07 * progress, translateY: 12 * progress };\n}\n\n/**\n * The visible share of the host a detent sheet covers: its resting height when known, else its opening detent\n * (peek = peek height, medium = half ratio, large = full ratio; `expandedFitsContent` large counts as the fit cap).\n */\nexport function sheetVisibleRatio(\n options: G9SheetOptions,\n hostHeight: number,\n restingHeightPx: number | null,\n platform = currentPlatform(),\n): number {\n const host = Math.max(1, hostHeight);\n if (restingHeightPx != null) return clamp(restingHeightPx / host, 0, 1);\n const layout = resolveSheetLayout(options, host, platform);\n const point = layout.snapPoints[layout.initialSnap];\n if (typeof point === 'number') return clamp(point / host, 0, 1);\n if (point === 'fit' || point === undefined) return (layout.fitMaxHeight ?? 0) / host;\n return clamp(Number.parseFloat(point) / 100, 0, 1);\n}\n\n/** How far a receded parent sheet sinks: `max(24, visible × 0.25)` (MAUI stack recede). */\nexport function parentRecedeOffset(visibleHeight: number): number {\n return Math.max(24, visibleHeight * 0.25);\n}\n\n/** Top padding of a full-screen sheet (MAUI safe-area rule). */\nexport function sheetTopPadding(options: G9SheetOptions, topInset: number): number {\n if (options.topSafeAreaPaddingOverride != null) return Math.max(0, options.topSafeAreaPaddingOverride);\n const inset = options.useTopSafeAreaPadding === false ? 0 : Math.max(0, topInset);\n return inset + g9SheetTopSafeAreaBaseGap + Math.max(0, options.additionalTopSafeAreaPadding ?? 0);\n}\n\n/**\n * Top padding of the sheet surface where it rests. A full-screen sheet always reserves {@link sheetTopPadding}. A\n * detent sheet resting at its `large` detent reserves it too when that detent reaches under the top inset (MAUI\n * state-aware top padding, `G9BottomSheetHelper.ApplyStateAwareTopPadding`): its content never sits under the status\n * bar or the camera cutout. Opted out like MAUI: `useTopSafeAreaPadding: false` with no additional/override padding.\n */\nexport function sheetSurfaceTopPadding(\n options: G9SheetOptions,\n layout: Pick<G9SheetLayout, 'fullScreen' | 'fit'>,\n resting: G9SheetDetent | 'fit',\n topInset: number,\n hostHeight: number,\n): number {\n if (layout.fullScreen) return sheetTopPadding(options, topInset);\n if (layout.fit || resting !== 'large') return 0;\n const opted =\n options.useTopSafeAreaPadding !== false ||\n (options.additionalTopSafeAreaPadding ?? 0) > 0 ||\n (options.topSafeAreaPaddingOverride ?? 0) > 0;\n if (!opted) return 0;\n const full = clamp(options.fullExpandedRatio ?? 1, 0.1, 1);\n const top = Math.max(0, hostHeight) * (1 - full);\n return top < Math.max(0, topInset) + g9SheetTopSafeAreaBaseGap ? sheetTopPadding(options, topInset) : 0;\n}\n\n/**\n * Bottom padding of the sheet surface: the host's bottom safe inset (a visible navigation bar or gesture handle), so\n * the last row and the footer stay above it. `useBottomSafeAreaPadding: false` lets content run under it. An\n * immersive host (system bars hidden, as the AgriPad MAUI app) reports 0 and nothing changes.\n */\nexport function sheetSurfaceBottomPadding(options: G9SheetOptions, bottomInset: number): number {\n return options.useBottomSafeAreaPadding === false ? 0 : Math.max(0, bottomInset);\n}\n\n/**\n * Size-scaled animation duration (MAUI `SizeScaledAnimationDuration`): a partial traversal takes the matching slice\n * of the full duration (at least 1 ms unless the duration is 0).\n */\nexport function scaledSheetDuration(durationMs: number, traversedRatio: number, sizeScaled: boolean): number {\n if (durationMs <= 0) return 0;\n if (!sizeScaled) return durationMs;\n return Math.max(1, Math.round(durationMs * clamp(traversedRatio, 0, 1)));\n}\n\n/** Platform size constraints of the sheet surface (MAUI Android/Windows options, applied where they belong). */\nexport function platformSheetConstraints(\n options: G9SheetOptions,\n platform = currentPlatform(),\n): Record<string, string> {\n const px = (n: number) => `${n}px`;\n const style: Record<string, string> = {};\n if (platform === 'android') {\n if (options.androidMaxWidth != null) style.maxWidth = px(options.androidMaxWidth);\n if (options.androidMaxHeight != null) style.maxHeight = px(options.androidMaxHeight);\n if (options.androidMargin) {\n const [l, t, r, b] = options.androidMargin;\n style.margin = `${t}px ${r}px ${b}px ${l}px`;\n }\n }\n if (platform === 'windows') {\n if (options.windowsMaxWidth != null) style.maxWidth = px(options.windowsMaxWidth);\n if (options.windowsMaxHeight != null) style.maxHeight = px(options.windowsMaxHeight);\n if (options.windowsMinWidth != null) style.minWidth = px(options.windowsMinWidth);\n if (options.windowsMinHeight != null) style.minHeight = px(options.windowsMinHeight);\n }\n if (options.contentWidthMode === 'custom') {\n style.width = px(options.contentWidth ?? 300);\n style.alignSelf = 'center';\n }\n return style;\n}\n"],"names":["g9SheetDefaultPeekHeight","g9SheetFitMinHeight","g9SheetFitLoadingMinHeight","g9SheetDragCloseThreshold","g9SheetTopSafeAreaBaseGap","clamp","v","lo","hi","Math","currentPlatform","info","globalThis","p","pct","ratio","resolveSheetLayout","options","hostHeight","platform","_ref","_options_fullExpandedRatio","_ref1","_options_currentState","_options_maxFitToContentHeightRatio","fit","draggable","cancelable","intercepted","_options_maxFitToContentHeightRatio1","order","requested","states","d","androidHalf","half","full","peek","snap","snapPoints","current","index","fixed","clampFitHeight","natural","cap","loading","min","sheetOverlayOpacity","visibleRatio","detentRatios","max","backdropCardTransform","threshold","raw","progress","sheetVisibleRatio","restingHeightPx","_layout_fitMaxHeight","host","layout","point","undefined","Number","parentRecedeOffset","visibleHeight","sheetTopPadding","topInset","_options_additionalTopSafeAreaPadding","inset","sheetSurfaceTopPadding","resting","_options_topSafeAreaPaddingOverride","opted","top","sheetSurfaceBottomPadding","bottomInset","scaledSheetDuration","durationMs","traversedRatio","sizeScaled","platformSheetConstraints","px","n","style","l","t","r","b","_options_contentWidth"],"mappings":"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"}
|
|
@@ -10,6 +10,11 @@ export interface G9TabBarProps {
|
|
|
10
10
|
readonly subMenuItems?: readonly G9TabBarItem[];
|
|
11
11
|
/** Which item becomes the floating action button; -1 = none (MAUI `FabIndex`). Default 2. */
|
|
12
12
|
readonly fabIndex?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Element id of the floating FAB disc (automation taps it; the item's own `automationId` stays on its bar slot).
|
|
15
|
+
* Keep it to `[A-Za-z0-9_-]`.
|
|
16
|
+
*/
|
|
17
|
+
readonly fabAutomationId?: string;
|
|
13
18
|
/** Controlled selection (MAUI `SelectedIndex`, two-way). */
|
|
14
19
|
readonly selectedIndex?: number;
|
|
15
20
|
/** Initial selection while uncontrolled (MAUI `DefaultSelectedIndex`). Default 0. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tab-bar.d.ts","sourceRoot":"","sources":["../../src/tab-bar/tab-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAO7E,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,iCAAiC,EAyBvC,MAAM,SAAS,CAAC;AAEjB,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAChD,6FAA6F;IAC7F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,qFAAqF;IACrF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,6GAA6G;IAC7G,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAC9C,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,kGAAkG;IAClG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,iCAAiC,KAAK,IAAI,CAAC;IAC5E;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/F;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAWD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"tab-bar.d.ts","sourceRoot":"","sources":["../../src/tab-bar/tab-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAO7E,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,iCAAiC,EAyBvC,MAAM,SAAS,CAAC;AAEjB,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAChD,6FAA6F;IAC7F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,qFAAqF;IACrF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,6GAA6G;IAC7G,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAC9C,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,kGAAkG;IAClG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,iCAAiC,KAAK,IAAI,CAAC;IAC5E;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/F;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAWD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CA2WxD"}
|
package/dist/tab-bar/tab-bar.jsx
CHANGED
|
@@ -215,7 +215,10 @@ function G9TabBar(props) {
|
|
|
215
215
|
{slotViews}
|
|
216
216
|
</view>
|
|
217
217
|
</view>
|
|
218
|
-
{
|
|
218
|
+
{}
|
|
219
|
+
{fab >= 0 ? <view className={`g9-tab-bar__fab${floating ? ' g9-tab-bar__fab--floating' : ''}`} {...props.fabAutomationId ? {
|
|
220
|
+
id: props.fabAutomationId
|
|
221
|
+
} : {}} accessibility-element accessibility-traits="button" accessibility-label={null != (_items_fab_text = items[fab].text) ? _items_fab_text : ''} style={{
|
|
219
222
|
zIndex: 3,
|
|
220
223
|
width: `${metrics.fabSize}px`,
|
|
221
224
|
height: `${metrics.fabSize}px`,
|
|
@@ -225,7 +228,7 @@ function G9TabBar(props) {
|
|
|
225
228
|
opacity: floating ? 1 : 0,
|
|
226
229
|
transform: floating ? 'translateY(0px) scale(1)' : `translateY(${g9TabBarMetrics.fabIdleVerticalOffset}px) scale(${g9TabBarMetrics.fabIdleScaleMin})`,
|
|
227
230
|
transition: floating ? `transform ${g9TabBarMetrics.centerStateBouncyDurationMs}ms ${bounce}, opacity ${g9TabBarMetrics.centerStateDurationMs}ms ease-out` : `transform ${g9TabBarMetrics.centerStateDurationMs}ms cubic-bezier(0.55, 0.055, 0.675, 0.19), opacity ${g9TabBarMetrics.centerStateDurationMs}ms ease-in`
|
|
228
|
-
}} bindtap={floating ? onFab : void 0}>
|
|
231
|
+
}} bindtap={floating ? onFab : void 0} user-interaction-enabled={floating}>
|
|
229
232
|
{fabShadow ? <svg className="g9-tab-bar__fab-shadow" content={fabShadow} style={{
|
|
230
233
|
left: `${-pad}px`,
|
|
231
234
|
top: `${-pad}px`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tab-bar/tab-bar.jsx","sources":["../../src/tab-bar/tab-bar.tsx"],"sourcesContent":["import './tab-bar.css';\nimport { type ReactNode, useEffect, useRef, useState } from '@lynx-js/react';\nimport { usePressVisual } from '../base/press';\nimport { startTimer, stopTimer } from '../base/timers';\nimport { useControllableState } from '../base/use-controllable-state';\nimport { useG9Back } from '../host/hooks';\nimport { G9Icon } from '../icon/icon';\nimport { useG9Diagnostics, useG9Direction, useG9Strings, useG9Theme, useG9Window } from '../provider/hooks';\nimport {\n easeOutBackCss,\n type G9TabBarStyle,\n type G9TabBarStyleMetrics,\n g9TabBarStyleMetrics,\n g9TabBarMetrics as M,\n} from './metrics';\nimport {\n type G9TabBarClickContext,\n type G9TabBarConfig,\n type G9TabBarFabTappedEventArgs,\n type G9TabBarItem,\n type G9TabBarSelectionChangedEventArgs,\n type G9TabBarState,\n type G9TabBarTransition,\n initialTabBarState,\n overflowColumnLayout,\n reconcileTabBarState,\n resolveTabBarFabIndex,\n subMenuRowLayout,\n tabBarBackdropTap,\n tabBarChromeSvg,\n tabBarFabCenterX,\n tabBarFabPlusSvg,\n tabBarFabShadowSvg,\n tabBarFabTap,\n tabBarHasOverflow,\n tabBarIndicatorSlot,\n tabBarItemTap,\n tabBarOverflowIndices,\n tabBarOverflowItemTap,\n tabBarOverflowSlot,\n tabBarOverflowTriggerTap,\n tabBarReservedHeight,\n tabBarSlotCenterX,\n tabBarSlots,\n tabBarSubMenuTap,\n} from './model';\n\n/** Props of {@link G9TabBar}. */\nexport interface G9TabBarProps {\n /** Bar items (MAUI `Items`). More than 5 collapse the extras behind a More trigger. */\n readonly items: readonly G9TabBarItem[];\n /** Items of the FAB's horizontal sub-menu row (MAUI `SubMenuItems`). */\n readonly subMenuItems?: readonly G9TabBarItem[];\n /** Which item becomes the floating action button; -1 = none (MAUI `FabIndex`). Default 2. */\n readonly fabIndex?: number;\n /** Controlled selection (MAUI `SelectedIndex`, two-way). */\n readonly selectedIndex?: number;\n /** Initial selection while uncontrolled (MAUI `DefaultSelectedIndex`). Default 0. */\n readonly defaultSelectedIndex?: number;\n readonly onSelectedIndexChange?: (index: number) => void;\n /** Controlled FAB-floating state (MAUI `IsCenterFloating`, two-way). */\n readonly isCenterFloating?: boolean;\n readonly onCenterFloatingChange?: (floating: boolean) => void;\n /** Controlled sub-menu state (MAUI `IsFabOpen`, two-way). */\n readonly isFabOpen?: boolean;\n readonly onFabOpenChange?: (open: boolean) => void;\n /** Controlled overflow column state (MAUI `IsOverflowOpen`, two-way). */\n readonly isOverflowOpen?: boolean;\n readonly onOverflowOpenChange?: (open: boolean) => void;\n /** Selecting a non-FAB item returns the FAB to the bar (MAUI `ResetCenterOnMenuSelection`). Default true. */\n readonly resetCenterOnMenuSelection?: boolean;\n /** Label of the More trigger (MAUI `OverflowText`). Default: the app's `More` string, else \"More\". */\n readonly overflowText?: string | null;\n /** A bar, overflow or sub-menu item was tapped (MAUI `ItemSelected`), after its own callbacks. */\n readonly onItemSelected?: (args: G9TabBarSelectionChangedEventArgs) => void;\n /**\n * The FAB was tapped, before any state changes (MAUI `FabTapped`). Set `args.handled = true` (or return\n * `'handled'`) to replace the built-in fan-out; the bar then changes nothing.\n */\n readonly onFabTapped?: (args: G9TabBarFabTappedEventArgs) => undefined | 'handled' | undefined;\n /**\n * The visual style (MAUI 1.4.0 `BarStyle`): `'classic'` (default: the glass bar, semicircle notch, selection pill) or\n * `'sculpted'` (the opaque bar with a soft shadow, the S-shouldered cradle, the flat primary disc, filled-icon\n * selection). Behaviour is identical; switching at runtime keeps the selection and the FAB and overflow state. A host\n * reserving the bar's height reads `g9TabBarStyleMetrics.for(barStyle)` (MAUI `CurrentMetrics`).\n */\n readonly barStyle?: G9TabBarStyle;\n readonly className?: string;\n}\n\nconst PRESS = Object.freeze({\n property: 'opacity' as const,\n rest: M.defaultRestOpacity,\n pressed: M.itemPressedOpacity,\n hovered: M.itemHoveredOpacity,\n inMs: M.touchAnimationDurationMs,\n outMs: M.touchAnimationDurationMs,\n});\n\n/**\n * Bottom navigation with a floating action button (MAUI `G9TabBar`): the FAB rises out of a notch and fans out a\n * horizontal sub-menu row; more than five items collapse behind a More trigger with a vertical overflow column; a tap\n * outside the open menus (on the backdrop) closes them. The state machine is the pure transitions in `./model`. Two\n * styles (`barStyle`): Classic (a flat `<svg>` chrome with a 1 px highlight, a semicircular notch, an animated pill on\n * the selection; no shadow) and Sculpted (an opaque chrome over its own blurred outline, the cradle notch, a flat\n * primary disc with its shadow, the selected item in its `selectedIcon` and the primary colour).\n */\nexport function G9TabBar(props: G9TabBarProps): ReactNode {\n const items = props.items;\n const subMenuItems = props.subMenuItems ?? [];\n const barStyle: G9TabBarStyle = props.barStyle === 'sculpted' ? 'sculpted' : 'classic';\n const metrics = g9TabBarStyleMetrics.for(barStyle);\n const sculpted = barStyle === 'sculpted';\n const config: G9TabBarConfig = {\n itemCount: items.length,\n subMenuCount: subMenuItems.length,\n fabIndex: props.fabIndex ?? M.defaultFabIndex,\n resetCenterOnMenuSelection: props.resetCenterOnMenuSelection ?? true,\n barStyle,\n };\n const initial = useRef<G9TabBarState | null>(null);\n if (initial.current === null) initial.current = initialTabBarState(config, props.defaultSelectedIndex ?? 0);\n const [selectedIndex, setSelectedIndex] = useControllableState<number>({\n value: props.selectedIndex,\n defaultValue: initial.current.selectedIndex,\n onChange: props.onSelectedIndexChange,\n name: 'G9TabBar.selectedIndex',\n });\n const [isCenterFloating, setCenterFloating] = useControllableState<boolean>({\n value: props.isCenterFloating,\n defaultValue: initial.current.isCenterFloating,\n onChange: props.onCenterFloatingChange,\n name: 'G9TabBar.isCenterFloating',\n });\n const [isFabOpen, setFabOpen] = useControllableState<boolean>({\n value: props.isFabOpen,\n defaultValue: false,\n onChange: props.onFabOpenChange,\n name: 'G9TabBar.isFabOpen',\n });\n const [isOverflowOpen, setOverflowOpen] = useControllableState<boolean>({\n value: props.isOverflowOpen,\n defaultValue: false,\n onChange: props.onOverflowOpenChange,\n name: 'G9TabBar.isOverflowOpen',\n });\n const state: G9TabBarState = { selectedIndex, isCenterFloating, isFabOpen, isOverflowOpen };\n const apply = (next: G9TabBarState) => {\n if (next.selectedIndex !== state.selectedIndex) setSelectedIndex(next.selectedIndex);\n if (next.isCenterFloating !== state.isCenterFloating) setCenterFloating(next.isCenterFloating);\n if (next.isFabOpen !== state.isFabOpen) setFabOpen(next.isFabOpen);\n if (next.isOverflowOpen !== state.isOverflowOpen) setOverflowOpen(next.isOverflowOpen);\n };\n\n // Programmatic selection / FabIndex / Items changes bring the FAB state with them (MAUI ReconcileFabStateWithSelection).\n useEffect(() => {\n apply(reconcileTabBarState(state, config));\n }, [selectedIndex, config.fabIndex, config.itemCount, config.resetCenterOnMenuSelection]);\n\n // Startup reveal of the selected item, once (MAUI StartupSelectionReveal).\n const [revealing, setRevealing] = useState<boolean>(M.startupSelectionRevealEnabled);\n const revealTimer = useRef<ReturnType<typeof startTimer> | null>(null);\n useEffect(() => {\n if (!revealing) return;\n revealTimer.current = startTimer(() => setRevealing(false), M.startupSelectionRevealDelayMs);\n return () => stopTimer(revealTimer.current);\n }, []);\n const cancelReveal = () => {\n if (!revealing) return;\n stopTimer(revealTimer.current);\n setRevealing(false);\n };\n\n const diagnostics = useG9Diagnostics();\n const run = (effect: G9TabBarTransition['effect']) => {\n if (!effect) return;\n const item = (effect.isSubMenuItem ? subMenuItems : items)[effect.index] as G9TabBarItem;\n const context: G9TabBarClickContext = { index: effect.index, item, isSubMenuItem: effect.isSubMenuItem };\n try {\n item.onClick?.(context);\n if (item.command && item.canExecute !== false) item.command(item.commandParameter);\n props.onItemSelected?.(context);\n } catch (error) {\n diagnostics.log({ level: 'error', message: 'G9TabBar: item handler failed.', source: 'G9TabBar', error });\n }\n };\n const transition = (t: G9TabBarTransition) => {\n cancelReveal();\n apply(t.state);\n run(t.effect);\n };\n const onFab = () => {\n cancelReveal();\n const args: G9TabBarFabTappedEventArgs = { handled: false };\n const result = props.onFabTapped?.(args);\n if (args.handled || result === 'handled') return;\n transition(tabBarFabTap(state, config));\n };\n\n const open = isFabOpen || isOverflowOpen;\n useG9Back(\n () => {\n apply(tabBarBackdropTap(state, config));\n return true;\n },\n { enabled: open },\n );\n\n const rtl = useG9Direction() === 'rtl';\n const strings = useG9Strings();\n const palette = useG9Theme().palette;\n const win = useG9Window();\n const [measured, setMeasured] = useState(0);\n const width = measured > 0 ? measured : win.width;\n const barWidth = Math.max(width - M.barHorizontalGap * 2, 0);\n const slots = tabBarSlots(items.length);\n const slotCount = slots.length;\n const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);\n const floating = isCenterFloating && fab >= 0;\n const fabCenterX = fab >= 0 ? tabBarFabCenterX(fab, slotCount, width, rtl, barStyle) : 0;\n const indicatorSlot = tabBarIndicatorSlot(state, config);\n const overflowLabel = props.overflowText || strings.resolve('More') || 'More';\n const overflowSelected = tabBarHasOverflow(items.length) && selectedIndex >= tabBarOverflowSlot;\n const reserved = tabBarReservedHeight(state, config);\n const bounce = easeOutBackCss(M.fabPopBackCoefficient);\n\n // SVG content cannot read CSS variables: the chrome takes literal palette colours.\n const chromeFill = sculpted ? palette.CardBackground : palette.SurfaceContainerHigh;\n const chromeStroke = palette.OutlineVariant;\n const pad = M.chromeShadowPadding;\n // Sculpted's chrome carries its shadow, so its SVG is `pad` larger on every side and sits `pad` up and left of the bar.\n const chromeBox = sculpted\n ? {\n left: `${-pad}px`,\n top: `${-pad}px`,\n width: `${barWidth + pad * 2}px`,\n height: `${metrics.barHeight + pad * 2}px`,\n }\n : { height: `${metrics.barHeight}px` };\n const fabShadow = tabBarFabShadowSvg(barStyle);\n const visualSlot = (slot: number) => (rtl ? slotCount - 1 - slot : slot);\n\n const slotViews = slots.map((slot, i) => {\n const isOverflow = slot.kind === 'overflow';\n const index = slot.kind === 'item' ? slot.index : -1;\n const item = isOverflow ? { text: overflowLabel, icon: 'menu' } : (items[index] as G9TabBarItem);\n const selected = isOverflow ? overflowSelected : index === selectedIndex;\n const hiddenUnderFab = index === fab && floating;\n const revealPose = revealing && selected && !hiddenUnderFab;\n return (\n <TabBarSlot\n key={isOverflow ? 'overflow' : `item-${index}`}\n item={item as G9TabBarItem}\n selected={selected}\n hidden={hiddenUnderFab}\n revealPose={revealPose}\n order={visualSlot(i)}\n metrics={metrics}\n onTap={() =>\n transition(isOverflow ? tabBarOverflowTriggerTap(state, config) : tabBarItemTap(state, config, index))\n }\n />\n );\n });\n\n const sub = subMenuRowLayout(subMenuItems.length, fabCenterX, width);\n const overflowIndices = tabBarOverflowIndices(items.length);\n const column = overflowColumnLayout(\n overflowIndices.length,\n tabBarSlotCenterX(tabBarOverflowSlot, slotCount, width, rtl, metrics.itemsHorizontalPadding),\n width,\n barStyle,\n );\n\n return (\n <view\n className={`g9-tab-bar${sculpted ? ' g9-tab-bar--sculpted' : ''} ${props.className ?? ''}`}\n style={{ height: `${reserved}px` }}\n bindlayoutchange={(e: { detail?: { width?: number } }) => {\n const w = Number(e.detail?.width);\n if (Number.isFinite(w) && w > 0 && w !== measured) setMeasured(w);\n }}\n >\n {open ? (\n <view\n className=\"g9-tab-bar__backdrop\"\n style={{ zIndex: M.backdropZIndex, top: `${M.backdropTopInset}px` }}\n bindtap={() => apply(tabBarBackdropTap(state, config))}\n />\n ) : null}\n <view className=\"g9-tab-bar__chrome\" style={{ zIndex: 2, height: `${metrics.barHeight}px` }}>\n <svg\n className=\"g9-tab-bar__chrome-flat\"\n content={tabBarChromeSvg(barWidth, metrics.barHeight, null, chromeFill, chromeStroke, barStyle)}\n style={{\n ...chromeBox,\n opacity: floating ? 0 : 1,\n transition: `opacity ${M.centerStateDurationMs}ms ease-out`,\n }}\n />\n {fab >= 0 ? (\n <svg\n className=\"g9-tab-bar__chrome-notched\"\n content={tabBarChromeSvg(\n barWidth,\n metrics.barHeight,\n fabCenterX - M.barHorizontalGap,\n chromeFill,\n chromeStroke,\n barStyle,\n )}\n style={{\n ...chromeBox,\n opacity: floating ? 1 : 0,\n transition: `opacity ${M.centerStateDurationMs}ms ease-out`,\n }}\n />\n ) : null}\n <view\n className=\"g9-tab-bar__slots\"\n style={\n metrics.itemsHorizontalPadding > 0\n ? { left: `${metrics.itemsHorizontalPadding}px`, right: `${metrics.itemsHorizontalPadding}px` }\n : {}\n }\n >\n {indicatorSlot >= 0 && metrics.showsSelectionIndicator ? (\n <view\n className=\"g9-tab-bar__indicator\"\n style={{\n left: `${((visualSlot(slots.findIndex((s) => (s.kind === 'item' ? s.index === indicatorSlot : indicatorSlot === tabBarOverflowSlot))) + 0.5) * 100) / slotCount}%`,\n transition: `left ${M.indicatorMoveDurationMs}ms cubic-bezier(0.215, 0.61, 0.355, 1)`,\n top: `${M.indicatorTopOffset + metrics.selectedItemNudgeY}px`,\n }}\n />\n ) : null}\n {slotViews}\n </view>\n </view>\n {fab >= 0 ? (\n <view\n className={`g9-tab-bar__fab${floating ? ' g9-tab-bar__fab--floating' : ''}`}\n accessibility-element\n accessibility-traits=\"button\"\n accessibility-label={(items[fab] as G9TabBarItem).text ?? ''}\n style={{\n zIndex: 3,\n width: `${metrics.fabSize}px`,\n height: `${metrics.fabSize}px`,\n borderRadius: `${metrics.fabSize / 2}px`,\n left: `${fabCenterX - metrics.fabSize / 2}px`,\n // The box rises fabProtrusionAboveBar above the bar's top edge (Classic: half of it; Sculpted: the disc's\n // centre sinks 9 px into the cradle).\n bottom: `${M.barBottomGap + metrics.barHeight - (metrics.fabSize - metrics.fabProtrusionAboveBar)}px`,\n opacity: floating ? 1 : 0,\n transform: floating\n ? 'translateY(0px) scale(1)'\n : `translateY(${M.fabIdleVerticalOffset}px) scale(${M.fabIdleScaleMin})`,\n transition: floating\n ? `transform ${M.centerStateBouncyDurationMs}ms ${bounce}, opacity ${M.centerStateDurationMs}ms ease-out`\n : `transform ${M.centerStateDurationMs}ms cubic-bezier(0.55, 0.055, 0.675, 0.19), opacity ${M.centerStateDurationMs}ms ease-in`,\n }}\n bindtap={floating ? onFab : undefined}\n >\n {fabShadow ? (\n <svg\n className=\"g9-tab-bar__fab-shadow\"\n content={fabShadow}\n style={{\n left: `${-pad}px`,\n top: `${-pad}px`,\n width: `${metrics.fabSize + pad * 2}px`,\n height: `${metrics.fabSize + pad * 2}px`,\n }}\n />\n ) : null}\n <view\n className=\"g9-tab-bar__fab-inner\"\n style={{\n width: `${metrics.fabInnerSize}px`,\n height: `${metrics.fabInnerSize}px`,\n borderRadius: `${metrics.fabInnerSize / 2}px`,\n }}\n >\n <view\n className=\"g9-tab-bar__fab-icon\"\n style={{\n transform: `rotate(${isFabOpen ? M.fabRotationOpenDegrees : 0}deg)`,\n transition: `transform ${M.openStateDurationMs}ms ease-out`,\n }}\n >\n {sculpted ? (\n <svg\n className=\"g9-tab-bar__fab-plus\"\n content={tabBarFabPlusSvg(\n metrics.fabIconSize,\n metrics.fabPlusArmRatio,\n metrics.fabPlusStrokeRatio,\n palette.OnPrimary,\n )}\n style={{ width: `${metrics.fabIconSize}px`, height: `${metrics.fabIconSize}px` }}\n />\n ) : (\n <G9Icon icon=\"plus\" size={M.fabIconSize * 0.7} color=\"var(--g9-on-primary)\" />\n )}\n </view>\n </view>\n </view>\n ) : null}\n {isFabOpen && subMenuItems.length > 0 ? (\n <view\n className=\"g9-tab-bar__submenu\"\n style={{\n zIndex: 3,\n left: `${sub.left}px`,\n height: `${M.subMenuRowCellHeight}px`,\n bottom: `${M.barBottomGap + metrics.barHeight + metrics.fabProtrusionAboveBar + M.subMenuRowAboveFabGap}px`,\n }}\n >\n {subMenuItems.map((item, i) => (\n <MenuCell\n key={`sub-${i}`}\n className=\"g9-tab-bar__submenu-cell\"\n item={item}\n size={M.subMenuRowItemSize}\n height={M.subMenuRowCellHeight}\n left={(sub.cells[i] as { x: number }).x}\n bottom={0}\n delayMs={(sub.cells[i] as { delayMs: number }).delayMs}\n durationMs={M.openStateDurationMs}\n travelX={M.subMenuRowRevealTravelX * (i < (subMenuItems.length - 1) / 2 ? 1 : -1)}\n travelY={M.subMenuRowRevealTravelY}\n iconSize={M.subMenuRowIconSizeMax}\n fontSize={M.subMenuRowFontSizeMax}\n selected={false}\n onAccent={sculpted}\n onTap={() => transition(tabBarSubMenuTap(state, config, i))}\n />\n ))}\n </view>\n ) : null}\n {isOverflowOpen && overflowIndices.length > 0 ? (\n <view className=\"g9-tab-bar__overflow\" style={{ zIndex: 3, left: `${column.left}px` }}>\n {overflowIndices.map((source, k) => (\n <MenuCell\n key={`overflow-${source}`}\n className=\"g9-tab-bar__overflow-item\"\n item={items[source] as G9TabBarItem}\n size={M.overflowItemSize}\n height={M.overflowItemSize}\n left={0}\n bottom={(column.items[k] as { bottom: number }).bottom}\n delayMs={(column.items[k] as { delayMs: number }).delayMs}\n durationMs={M.overflowStateDurationMs}\n travelX={0}\n travelY={M.overflowRevealTravelY}\n iconSize={M.overflowItemIconSize}\n fontSize={M.overflowItemFontSize}\n selected={source === selectedIndex}\n onAccent={false}\n onTap={() => transition(tabBarOverflowItemTap(state, config, source))}\n />\n ))}\n </view>\n ) : null}\n </view>\n );\n}\n\nfunction TabBarSlot(props: {\n readonly item: G9TabBarItem;\n readonly selected: boolean;\n readonly hidden: boolean;\n readonly revealPose: boolean;\n readonly order: number;\n readonly metrics: G9TabBarStyleMetrics;\n readonly onTap: () => void;\n}): ReactNode {\n const press = usePressVisual(PRESS, false);\n const { item, selected, hidden, revealPose, metrics } = props;\n // Classic: ink on the pill; Sculpted (no pill): the selection IS the primary colour and the filled icon.\n const sculpted = metrics.style === 'sculpted';\n const color = sculpted\n ? selected\n ? 'var(--g9-primary)'\n : 'var(--g9-text-secondary)'\n : selected\n ? 'var(--g9-on-primary-container)'\n : 'var(--g9-on-surface-variant)';\n const icon = sculpted && selected && item.selectedIcon !== undefined ? item.selectedIcon : (item.icon ?? 'check');\n const pose = hidden\n ? {\n opacity: 0,\n transform: `translateY(${M.centerItemHiddenTranslationY}px) scale(${1 - M.centerItemHiddenScaleAmount})`,\n transition: `opacity ${M.centerStateDurationMs}ms ease-out, transform ${M.centerStateDurationMs}ms ease-out`,\n }\n : revealPose\n ? {\n opacity: M.selectedReturnRevealStartOpacity,\n transform: `translateY(${M.selectedReturnRevealTranslationY}px) scale(${M.selectedReturnRevealStartScale})`,\n }\n : {\n opacity: 1,\n transform: `translateY(${M.selectedItemTranslationY}px) scale(1)`,\n transition: `opacity ${M.selectedReturnRevealDurationMs}ms ease-out, transform ${M.selectedReturnRevealDurationMs}ms ease-out`,\n };\n return (\n <view\n className={`g9-tab-bar__slot${selected ? ' g9-tab-bar__slot--selected' : ''}${hidden ? ' g9-tab-bar__slot--hidden' : ''}`}\n {...(item.automationId ? { id: item.automationId } : {})}\n style={{ order: props.order, minWidth: `${M.slotItemMinWidth}px`, maxWidth: `${M.slotItemMaxWidth}px` }}\n accessibility-element\n accessibility-traits=\"button\"\n accessibility-label={item.text ?? ''}\n bindtap={hidden ? undefined : props.onTap}\n {...press}\n >\n <view className=\"g9-tab-bar__slot-body\" style={{ ...pose, rowGap: `${metrics.bottomContentSpacing}px` }}>\n <G9Icon icon={icon} size={metrics.bottomIconSize} color={color} />\n <text\n className=\"g9-tab-bar__label\"\n text-maxline=\"1\"\n style={{ color, fontSize: `${metrics.bottomLabelFontSize}px`, fontWeight: selected ? '700' : '400' }}\n >\n {item.text ?? ''}\n </text>\n </view>\n </view>\n );\n}\n\nfunction MenuCell(props: {\n readonly className: string;\n readonly item: G9TabBarItem;\n readonly size: number;\n readonly height: number;\n readonly left: number;\n readonly bottom: number;\n readonly delayMs: number;\n readonly durationMs: number;\n readonly travelX: number;\n readonly travelY: number;\n readonly iconSize: number;\n readonly fontSize: number;\n readonly selected: boolean;\n /** The icon sits on a solid primary accent (Sculpted sub-menu cells): `OnPrimary`. */\n readonly onAccent: boolean;\n readonly onTap: () => void;\n}): ReactNode {\n const [shown, setShown] = useState(false);\n useEffect(() => {\n const t = startTimer(() => setShown(true), 16);\n return () => stopTimer(t);\n }, []);\n const press = usePressVisual(PRESS, false);\n const bounce = easeOutBackCss(M.fabPopBackCoefficient);\n const color = props.selected ? 'var(--g9-on-primary)' : 'var(--g9-on-surface)';\n const iconColor = props.onAccent ? 'var(--g9-on-primary)' : color;\n return (\n <view\n className={`${props.className}${props.selected ? ` ${props.className}--selected` : ''}`}\n {...(props.item.automationId ? { id: props.item.automationId } : {})}\n accessibility-element\n accessibility-traits=\"button\"\n accessibility-label={props.item.text ?? ''}\n style={{\n left: `${props.left}px`,\n bottom: `${props.bottom}px`,\n width: `${props.size}px`,\n height: `${props.height}px`,\n opacity: shown ? 1 : 0,\n transform: shown\n ? 'translate(0px, 0px) scale(1)'\n : `translate(${props.travelX}px, ${props.travelY}px) scale(${M.fabIdleScaleMin})`,\n transition: `opacity ${props.durationMs}ms ease-out ${props.delayMs}ms, transform ${props.durationMs}ms ${bounce} ${props.delayMs}ms`,\n }}\n bindtap={props.onTap}\n {...press}\n >\n <view className=\"g9-tab-bar__cell-accent\">\n <G9Icon icon={props.item.icon ?? 'check'} size={props.iconSize} color={iconColor} />\n </view>\n <text className=\"g9-tab-bar__cell-label\" text-maxline=\"1\" style={{ fontSize: `${props.fontSize}px`, color }}>\n {props.item.text ?? ''}\n </text>\n </view>\n );\n}\n"],"names":["PRESS","Object","M","G9TabBar","props","_props_subMenuItems","_props_fabIndex","_props_resetCenterOnMenuSelection","_props_defaultSelectedIndex","_props_className","_items_fab_text","items","subMenuItems","barStyle","metrics","g9TabBarStyleMetrics","sculpted","config","initial","useRef","initialTabBarState","selectedIndex","setSelectedIndex","useControllableState","isCenterFloating","setCenterFloating","isFabOpen","setFabOpen","isOverflowOpen","setOverflowOpen","state","apply","next","useEffect","reconcileTabBarState","revealing","setRevealing","useState","revealTimer","startTimer","stopTimer","cancelReveal","diagnostics","useG9Diagnostics","run","effect","item","context","error","transition","t","onFab","args","result","tabBarFabTap","open","useG9Back","tabBarBackdropTap","rtl","useG9Direction","strings","useG9Strings","palette","useG9Theme","win","useG9Window","measured","setMeasured","width","barWidth","Math","slots","tabBarSlots","slotCount","fab","resolveTabBarFabIndex","floating","fabCenterX","tabBarFabCenterX","indicatorSlot","tabBarIndicatorSlot","overflowLabel","overflowSelected","tabBarHasOverflow","tabBarOverflowSlot","reserved","tabBarReservedHeight","bounce","easeOutBackCss","chromeFill","chromeStroke","pad","chromeBox","fabShadow","tabBarFabShadowSvg","visualSlot","slot","slotViews","i","isOverflow","index","selected","hiddenUnderFab","revealPose","TabBarSlot","tabBarOverflowTriggerTap","tabBarItemTap","sub","subMenuRowLayout","overflowIndices","tabBarOverflowIndices","column","overflowColumnLayout","tabBarSlotCenterX","view","e","_e_detail","w","Number","svg","tabBarChromeSvg","s","undefined","tabBarFabPlusSvg","G9Icon","MenuCell","tabBarSubMenuTap","source","k","tabBarOverflowItemTap","_item_icon","_item_text","_item_text1","press","usePressVisual","hidden","color","icon","pose","text","_props_item_text","_props_item_icon","_props_item_text1","shown","setShown","iconColor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tab-bar/tab-bar.jsx","sources":["../../src/tab-bar/tab-bar.tsx"],"sourcesContent":["import './tab-bar.css';\nimport { type ReactNode, useEffect, useRef, useState } from '@lynx-js/react';\nimport { usePressVisual } from '../base/press';\nimport { startTimer, stopTimer } from '../base/timers';\nimport { useControllableState } from '../base/use-controllable-state';\nimport { useG9Back } from '../host/hooks';\nimport { G9Icon } from '../icon/icon';\nimport { useG9Diagnostics, useG9Direction, useG9Strings, useG9Theme, useG9Window } from '../provider/hooks';\nimport {\n easeOutBackCss,\n type G9TabBarStyle,\n type G9TabBarStyleMetrics,\n g9TabBarStyleMetrics,\n g9TabBarMetrics as M,\n} from './metrics';\nimport {\n type G9TabBarClickContext,\n type G9TabBarConfig,\n type G9TabBarFabTappedEventArgs,\n type G9TabBarItem,\n type G9TabBarSelectionChangedEventArgs,\n type G9TabBarState,\n type G9TabBarTransition,\n initialTabBarState,\n overflowColumnLayout,\n reconcileTabBarState,\n resolveTabBarFabIndex,\n subMenuRowLayout,\n tabBarBackdropTap,\n tabBarChromeSvg,\n tabBarFabCenterX,\n tabBarFabPlusSvg,\n tabBarFabShadowSvg,\n tabBarFabTap,\n tabBarHasOverflow,\n tabBarIndicatorSlot,\n tabBarItemTap,\n tabBarOverflowIndices,\n tabBarOverflowItemTap,\n tabBarOverflowSlot,\n tabBarOverflowTriggerTap,\n tabBarReservedHeight,\n tabBarSlotCenterX,\n tabBarSlots,\n tabBarSubMenuTap,\n} from './model';\n\n/** Props of {@link G9TabBar}. */\nexport interface G9TabBarProps {\n /** Bar items (MAUI `Items`). More than 5 collapse the extras behind a More trigger. */\n readonly items: readonly G9TabBarItem[];\n /** Items of the FAB's horizontal sub-menu row (MAUI `SubMenuItems`). */\n readonly subMenuItems?: readonly G9TabBarItem[];\n /** Which item becomes the floating action button; -1 = none (MAUI `FabIndex`). Default 2. */\n readonly fabIndex?: number;\n /**\n * Element id of the floating FAB disc (automation taps it; the item's own `automationId` stays on its bar slot).\n * Keep it to `[A-Za-z0-9_-]`.\n */\n readonly fabAutomationId?: string;\n /** Controlled selection (MAUI `SelectedIndex`, two-way). */\n readonly selectedIndex?: number;\n /** Initial selection while uncontrolled (MAUI `DefaultSelectedIndex`). Default 0. */\n readonly defaultSelectedIndex?: number;\n readonly onSelectedIndexChange?: (index: number) => void;\n /** Controlled FAB-floating state (MAUI `IsCenterFloating`, two-way). */\n readonly isCenterFloating?: boolean;\n readonly onCenterFloatingChange?: (floating: boolean) => void;\n /** Controlled sub-menu state (MAUI `IsFabOpen`, two-way). */\n readonly isFabOpen?: boolean;\n readonly onFabOpenChange?: (open: boolean) => void;\n /** Controlled overflow column state (MAUI `IsOverflowOpen`, two-way). */\n readonly isOverflowOpen?: boolean;\n readonly onOverflowOpenChange?: (open: boolean) => void;\n /** Selecting a non-FAB item returns the FAB to the bar (MAUI `ResetCenterOnMenuSelection`). Default true. */\n readonly resetCenterOnMenuSelection?: boolean;\n /** Label of the More trigger (MAUI `OverflowText`). Default: the app's `More` string, else \"More\". */\n readonly overflowText?: string | null;\n /** A bar, overflow or sub-menu item was tapped (MAUI `ItemSelected`), after its own callbacks. */\n readonly onItemSelected?: (args: G9TabBarSelectionChangedEventArgs) => void;\n /**\n * The FAB was tapped, before any state changes (MAUI `FabTapped`). Set `args.handled = true` (or return\n * `'handled'`) to replace the built-in fan-out; the bar then changes nothing.\n */\n readonly onFabTapped?: (args: G9TabBarFabTappedEventArgs) => undefined | 'handled' | undefined;\n /**\n * The visual style (MAUI 1.4.0 `BarStyle`): `'classic'` (default: the glass bar, semicircle notch, selection pill) or\n * `'sculpted'` (the opaque bar with a soft shadow, the S-shouldered cradle, the flat primary disc, filled-icon\n * selection). Behaviour is identical; switching at runtime keeps the selection and the FAB and overflow state. A host\n * reserving the bar's height reads `g9TabBarStyleMetrics.for(barStyle)` (MAUI `CurrentMetrics`).\n */\n readonly barStyle?: G9TabBarStyle;\n readonly className?: string;\n}\n\nconst PRESS = Object.freeze({\n property: 'opacity' as const,\n rest: M.defaultRestOpacity,\n pressed: M.itemPressedOpacity,\n hovered: M.itemHoveredOpacity,\n inMs: M.touchAnimationDurationMs,\n outMs: M.touchAnimationDurationMs,\n});\n\n/**\n * Bottom navigation with a floating action button (MAUI `G9TabBar`): the FAB rises out of a notch and fans out a\n * horizontal sub-menu row; more than five items collapse behind a More trigger with a vertical overflow column; a tap\n * outside the open menus (on the backdrop) closes them. The state machine is the pure transitions in `./model`. Two\n * styles (`barStyle`): Classic (a flat `<svg>` chrome with a 1 px highlight, a semicircular notch, an animated pill on\n * the selection; no shadow) and Sculpted (an opaque chrome over its own blurred outline, the cradle notch, a flat\n * primary disc with its shadow, the selected item in its `selectedIcon` and the primary colour).\n */\nexport function G9TabBar(props: G9TabBarProps): ReactNode {\n const items = props.items;\n const subMenuItems = props.subMenuItems ?? [];\n const barStyle: G9TabBarStyle = props.barStyle === 'sculpted' ? 'sculpted' : 'classic';\n const metrics = g9TabBarStyleMetrics.for(barStyle);\n const sculpted = barStyle === 'sculpted';\n const config: G9TabBarConfig = {\n itemCount: items.length,\n subMenuCount: subMenuItems.length,\n fabIndex: props.fabIndex ?? M.defaultFabIndex,\n resetCenterOnMenuSelection: props.resetCenterOnMenuSelection ?? true,\n barStyle,\n };\n const initial = useRef<G9TabBarState | null>(null);\n if (initial.current === null) initial.current = initialTabBarState(config, props.defaultSelectedIndex ?? 0);\n const [selectedIndex, setSelectedIndex] = useControllableState<number>({\n value: props.selectedIndex,\n defaultValue: initial.current.selectedIndex,\n onChange: props.onSelectedIndexChange,\n name: 'G9TabBar.selectedIndex',\n });\n const [isCenterFloating, setCenterFloating] = useControllableState<boolean>({\n value: props.isCenterFloating,\n defaultValue: initial.current.isCenterFloating,\n onChange: props.onCenterFloatingChange,\n name: 'G9TabBar.isCenterFloating',\n });\n const [isFabOpen, setFabOpen] = useControllableState<boolean>({\n value: props.isFabOpen,\n defaultValue: false,\n onChange: props.onFabOpenChange,\n name: 'G9TabBar.isFabOpen',\n });\n const [isOverflowOpen, setOverflowOpen] = useControllableState<boolean>({\n value: props.isOverflowOpen,\n defaultValue: false,\n onChange: props.onOverflowOpenChange,\n name: 'G9TabBar.isOverflowOpen',\n });\n const state: G9TabBarState = { selectedIndex, isCenterFloating, isFabOpen, isOverflowOpen };\n const apply = (next: G9TabBarState) => {\n if (next.selectedIndex !== state.selectedIndex) setSelectedIndex(next.selectedIndex);\n if (next.isCenterFloating !== state.isCenterFloating) setCenterFloating(next.isCenterFloating);\n if (next.isFabOpen !== state.isFabOpen) setFabOpen(next.isFabOpen);\n if (next.isOverflowOpen !== state.isOverflowOpen) setOverflowOpen(next.isOverflowOpen);\n };\n\n // Programmatic selection / FabIndex / Items changes bring the FAB state with them (MAUI ReconcileFabStateWithSelection).\n useEffect(() => {\n apply(reconcileTabBarState(state, config));\n }, [selectedIndex, config.fabIndex, config.itemCount, config.resetCenterOnMenuSelection]);\n\n // Startup reveal of the selected item, once (MAUI StartupSelectionReveal).\n const [revealing, setRevealing] = useState<boolean>(M.startupSelectionRevealEnabled);\n const revealTimer = useRef<ReturnType<typeof startTimer> | null>(null);\n useEffect(() => {\n if (!revealing) return;\n revealTimer.current = startTimer(() => setRevealing(false), M.startupSelectionRevealDelayMs);\n return () => stopTimer(revealTimer.current);\n }, []);\n const cancelReveal = () => {\n if (!revealing) return;\n stopTimer(revealTimer.current);\n setRevealing(false);\n };\n\n const diagnostics = useG9Diagnostics();\n const run = (effect: G9TabBarTransition['effect']) => {\n if (!effect) return;\n const item = (effect.isSubMenuItem ? subMenuItems : items)[effect.index] as G9TabBarItem;\n const context: G9TabBarClickContext = { index: effect.index, item, isSubMenuItem: effect.isSubMenuItem };\n try {\n item.onClick?.(context);\n if (item.command && item.canExecute !== false) item.command(item.commandParameter);\n props.onItemSelected?.(context);\n } catch (error) {\n diagnostics.log({ level: 'error', message: 'G9TabBar: item handler failed.', source: 'G9TabBar', error });\n }\n };\n const transition = (t: G9TabBarTransition) => {\n cancelReveal();\n apply(t.state);\n run(t.effect);\n };\n const onFab = () => {\n cancelReveal();\n const args: G9TabBarFabTappedEventArgs = { handled: false };\n const result = props.onFabTapped?.(args);\n if (args.handled || result === 'handled') return;\n transition(tabBarFabTap(state, config));\n };\n\n const open = isFabOpen || isOverflowOpen;\n useG9Back(\n () => {\n apply(tabBarBackdropTap(state, config));\n return true;\n },\n { enabled: open },\n );\n\n const rtl = useG9Direction() === 'rtl';\n const strings = useG9Strings();\n const palette = useG9Theme().palette;\n const win = useG9Window();\n const [measured, setMeasured] = useState(0);\n const width = measured > 0 ? measured : win.width;\n const barWidth = Math.max(width - M.barHorizontalGap * 2, 0);\n const slots = tabBarSlots(items.length);\n const slotCount = slots.length;\n const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);\n const floating = isCenterFloating && fab >= 0;\n const fabCenterX = fab >= 0 ? tabBarFabCenterX(fab, slotCount, width, rtl, barStyle) : 0;\n const indicatorSlot = tabBarIndicatorSlot(state, config);\n const overflowLabel = props.overflowText || strings.resolve('More') || 'More';\n const overflowSelected = tabBarHasOverflow(items.length) && selectedIndex >= tabBarOverflowSlot;\n const reserved = tabBarReservedHeight(state, config);\n const bounce = easeOutBackCss(M.fabPopBackCoefficient);\n\n // SVG content cannot read CSS variables: the chrome takes literal palette colours.\n const chromeFill = sculpted ? palette.CardBackground : palette.SurfaceContainerHigh;\n const chromeStroke = palette.OutlineVariant;\n const pad = M.chromeShadowPadding;\n // Sculpted's chrome carries its shadow, so its SVG is `pad` larger on every side and sits `pad` up and left of the bar.\n const chromeBox = sculpted\n ? {\n left: `${-pad}px`,\n top: `${-pad}px`,\n width: `${barWidth + pad * 2}px`,\n height: `${metrics.barHeight + pad * 2}px`,\n }\n : { height: `${metrics.barHeight}px` };\n const fabShadow = tabBarFabShadowSvg(barStyle);\n const visualSlot = (slot: number) => (rtl ? slotCount - 1 - slot : slot);\n\n const slotViews = slots.map((slot, i) => {\n const isOverflow = slot.kind === 'overflow';\n const index = slot.kind === 'item' ? slot.index : -1;\n const item = isOverflow ? { text: overflowLabel, icon: 'menu' } : (items[index] as G9TabBarItem);\n const selected = isOverflow ? overflowSelected : index === selectedIndex;\n const hiddenUnderFab = index === fab && floating;\n const revealPose = revealing && selected && !hiddenUnderFab;\n return (\n <TabBarSlot\n key={isOverflow ? 'overflow' : `item-${index}`}\n item={item as G9TabBarItem}\n selected={selected}\n hidden={hiddenUnderFab}\n revealPose={revealPose}\n order={visualSlot(i)}\n metrics={metrics}\n onTap={() =>\n transition(isOverflow ? tabBarOverflowTriggerTap(state, config) : tabBarItemTap(state, config, index))\n }\n />\n );\n });\n\n const sub = subMenuRowLayout(subMenuItems.length, fabCenterX, width);\n const overflowIndices = tabBarOverflowIndices(items.length);\n const column = overflowColumnLayout(\n overflowIndices.length,\n tabBarSlotCenterX(tabBarOverflowSlot, slotCount, width, rtl, metrics.itemsHorizontalPadding),\n width,\n barStyle,\n );\n\n return (\n <view\n className={`g9-tab-bar${sculpted ? ' g9-tab-bar--sculpted' : ''} ${props.className ?? ''}`}\n style={{ height: `${reserved}px` }}\n bindlayoutchange={(e: { detail?: { width?: number } }) => {\n const w = Number(e.detail?.width);\n if (Number.isFinite(w) && w > 0 && w !== measured) setMeasured(w);\n }}\n >\n {open ? (\n <view\n className=\"g9-tab-bar__backdrop\"\n style={{ zIndex: M.backdropZIndex, top: `${M.backdropTopInset}px` }}\n bindtap={() => apply(tabBarBackdropTap(state, config))}\n />\n ) : null}\n <view className=\"g9-tab-bar__chrome\" style={{ zIndex: 2, height: `${metrics.barHeight}px` }}>\n <svg\n className=\"g9-tab-bar__chrome-flat\"\n content={tabBarChromeSvg(barWidth, metrics.barHeight, null, chromeFill, chromeStroke, barStyle)}\n style={{\n ...chromeBox,\n opacity: floating ? 0 : 1,\n transition: `opacity ${M.centerStateDurationMs}ms ease-out`,\n }}\n />\n {fab >= 0 ? (\n <svg\n className=\"g9-tab-bar__chrome-notched\"\n content={tabBarChromeSvg(\n barWidth,\n metrics.barHeight,\n fabCenterX - M.barHorizontalGap,\n chromeFill,\n chromeStroke,\n barStyle,\n )}\n style={{\n ...chromeBox,\n opacity: floating ? 1 : 0,\n transition: `opacity ${M.centerStateDurationMs}ms ease-out`,\n }}\n />\n ) : null}\n <view\n className=\"g9-tab-bar__slots\"\n style={\n metrics.itemsHorizontalPadding > 0\n ? { left: `${metrics.itemsHorizontalPadding}px`, right: `${metrics.itemsHorizontalPadding}px` }\n : {}\n }\n >\n {indicatorSlot >= 0 && metrics.showsSelectionIndicator ? (\n <view\n className=\"g9-tab-bar__indicator\"\n style={{\n left: `${((visualSlot(slots.findIndex((s) => (s.kind === 'item' ? s.index === indicatorSlot : indicatorSlot === tabBarOverflowSlot))) + 0.5) * 100) / slotCount}%`,\n transition: `left ${M.indicatorMoveDurationMs}ms cubic-bezier(0.215, 0.61, 0.355, 1)`,\n top: `${M.indicatorTopOffset + metrics.selectedItemNudgeY}px`,\n }}\n />\n ) : null}\n {slotViews}\n </view>\n </view>\n {/* The idle FAB sits, invisible, over the centre slot: it must not take that slot's taps (MAUI InputTransparent). */}\n {fab >= 0 ? (\n <view\n className={`g9-tab-bar__fab${floating ? ' g9-tab-bar__fab--floating' : ''}`}\n {...(props.fabAutomationId ? { id: props.fabAutomationId } : {})}\n accessibility-element\n accessibility-traits=\"button\"\n accessibility-label={(items[fab] as G9TabBarItem).text ?? ''}\n style={{\n zIndex: 3,\n width: `${metrics.fabSize}px`,\n height: `${metrics.fabSize}px`,\n borderRadius: `${metrics.fabSize / 2}px`,\n left: `${fabCenterX - metrics.fabSize / 2}px`,\n // The box rises fabProtrusionAboveBar above the bar's top edge (Classic: half of it; Sculpted: the disc's\n // centre sinks 9 px into the cradle).\n bottom: `${M.barBottomGap + metrics.barHeight - (metrics.fabSize - metrics.fabProtrusionAboveBar)}px`,\n opacity: floating ? 1 : 0,\n transform: floating\n ? 'translateY(0px) scale(1)'\n : `translateY(${M.fabIdleVerticalOffset}px) scale(${M.fabIdleScaleMin})`,\n transition: floating\n ? `transform ${M.centerStateBouncyDurationMs}ms ${bounce}, opacity ${M.centerStateDurationMs}ms ease-out`\n : `transform ${M.centerStateDurationMs}ms cubic-bezier(0.55, 0.055, 0.675, 0.19), opacity ${M.centerStateDurationMs}ms ease-in`,\n }}\n bindtap={floating ? onFab : undefined}\n user-interaction-enabled={floating}\n >\n {fabShadow ? (\n <svg\n className=\"g9-tab-bar__fab-shadow\"\n content={fabShadow}\n style={{\n left: `${-pad}px`,\n top: `${-pad}px`,\n width: `${metrics.fabSize + pad * 2}px`,\n height: `${metrics.fabSize + pad * 2}px`,\n }}\n />\n ) : null}\n <view\n className=\"g9-tab-bar__fab-inner\"\n style={{\n width: `${metrics.fabInnerSize}px`,\n height: `${metrics.fabInnerSize}px`,\n borderRadius: `${metrics.fabInnerSize / 2}px`,\n }}\n >\n <view\n className=\"g9-tab-bar__fab-icon\"\n style={{\n transform: `rotate(${isFabOpen ? M.fabRotationOpenDegrees : 0}deg)`,\n transition: `transform ${M.openStateDurationMs}ms ease-out`,\n }}\n >\n {sculpted ? (\n <svg\n className=\"g9-tab-bar__fab-plus\"\n content={tabBarFabPlusSvg(\n metrics.fabIconSize,\n metrics.fabPlusArmRatio,\n metrics.fabPlusStrokeRatio,\n palette.OnPrimary,\n )}\n style={{ width: `${metrics.fabIconSize}px`, height: `${metrics.fabIconSize}px` }}\n />\n ) : (\n <G9Icon icon=\"plus\" size={M.fabIconSize * 0.7} color=\"var(--g9-on-primary)\" />\n )}\n </view>\n </view>\n </view>\n ) : null}\n {isFabOpen && subMenuItems.length > 0 ? (\n <view\n className=\"g9-tab-bar__submenu\"\n style={{\n zIndex: 3,\n left: `${sub.left}px`,\n height: `${M.subMenuRowCellHeight}px`,\n bottom: `${M.barBottomGap + metrics.barHeight + metrics.fabProtrusionAboveBar + M.subMenuRowAboveFabGap}px`,\n }}\n >\n {subMenuItems.map((item, i) => (\n <MenuCell\n key={`sub-${i}`}\n className=\"g9-tab-bar__submenu-cell\"\n item={item}\n size={M.subMenuRowItemSize}\n height={M.subMenuRowCellHeight}\n left={(sub.cells[i] as { x: number }).x}\n bottom={0}\n delayMs={(sub.cells[i] as { delayMs: number }).delayMs}\n durationMs={M.openStateDurationMs}\n travelX={M.subMenuRowRevealTravelX * (i < (subMenuItems.length - 1) / 2 ? 1 : -1)}\n travelY={M.subMenuRowRevealTravelY}\n iconSize={M.subMenuRowIconSizeMax}\n fontSize={M.subMenuRowFontSizeMax}\n selected={false}\n onAccent={sculpted}\n onTap={() => transition(tabBarSubMenuTap(state, config, i))}\n />\n ))}\n </view>\n ) : null}\n {isOverflowOpen && overflowIndices.length > 0 ? (\n <view className=\"g9-tab-bar__overflow\" style={{ zIndex: 3, left: `${column.left}px` }}>\n {overflowIndices.map((source, k) => (\n <MenuCell\n key={`overflow-${source}`}\n className=\"g9-tab-bar__overflow-item\"\n item={items[source] as G9TabBarItem}\n size={M.overflowItemSize}\n height={M.overflowItemSize}\n left={0}\n bottom={(column.items[k] as { bottom: number }).bottom}\n delayMs={(column.items[k] as { delayMs: number }).delayMs}\n durationMs={M.overflowStateDurationMs}\n travelX={0}\n travelY={M.overflowRevealTravelY}\n iconSize={M.overflowItemIconSize}\n fontSize={M.overflowItemFontSize}\n selected={source === selectedIndex}\n onAccent={false}\n onTap={() => transition(tabBarOverflowItemTap(state, config, source))}\n />\n ))}\n </view>\n ) : null}\n </view>\n );\n}\n\nfunction TabBarSlot(props: {\n readonly item: G9TabBarItem;\n readonly selected: boolean;\n readonly hidden: boolean;\n readonly revealPose: boolean;\n readonly order: number;\n readonly metrics: G9TabBarStyleMetrics;\n readonly onTap: () => void;\n}): ReactNode {\n const press = usePressVisual(PRESS, false);\n const { item, selected, hidden, revealPose, metrics } = props;\n // Classic: ink on the pill; Sculpted (no pill): the selection IS the primary colour and the filled icon.\n const sculpted = metrics.style === 'sculpted';\n const color = sculpted\n ? selected\n ? 'var(--g9-primary)'\n : 'var(--g9-text-secondary)'\n : selected\n ? 'var(--g9-on-primary-container)'\n : 'var(--g9-on-surface-variant)';\n const icon = sculpted && selected && item.selectedIcon !== undefined ? item.selectedIcon : (item.icon ?? 'check');\n const pose = hidden\n ? {\n opacity: 0,\n transform: `translateY(${M.centerItemHiddenTranslationY}px) scale(${1 - M.centerItemHiddenScaleAmount})`,\n transition: `opacity ${M.centerStateDurationMs}ms ease-out, transform ${M.centerStateDurationMs}ms ease-out`,\n }\n : revealPose\n ? {\n opacity: M.selectedReturnRevealStartOpacity,\n transform: `translateY(${M.selectedReturnRevealTranslationY}px) scale(${M.selectedReturnRevealStartScale})`,\n }\n : {\n opacity: 1,\n transform: `translateY(${M.selectedItemTranslationY}px) scale(1)`,\n transition: `opacity ${M.selectedReturnRevealDurationMs}ms ease-out, transform ${M.selectedReturnRevealDurationMs}ms ease-out`,\n };\n return (\n <view\n className={`g9-tab-bar__slot${selected ? ' g9-tab-bar__slot--selected' : ''}${hidden ? ' g9-tab-bar__slot--hidden' : ''}`}\n {...(item.automationId ? { id: item.automationId } : {})}\n style={{ order: props.order, minWidth: `${M.slotItemMinWidth}px`, maxWidth: `${M.slotItemMaxWidth}px` }}\n accessibility-element\n accessibility-traits=\"button\"\n accessibility-label={item.text ?? ''}\n bindtap={hidden ? undefined : props.onTap}\n {...press}\n >\n <view className=\"g9-tab-bar__slot-body\" style={{ ...pose, rowGap: `${metrics.bottomContentSpacing}px` }}>\n <G9Icon icon={icon} size={metrics.bottomIconSize} color={color} />\n <text\n className=\"g9-tab-bar__label\"\n text-maxline=\"1\"\n style={{ color, fontSize: `${metrics.bottomLabelFontSize}px`, fontWeight: selected ? '700' : '400' }}\n >\n {item.text ?? ''}\n </text>\n </view>\n </view>\n );\n}\n\nfunction MenuCell(props: {\n readonly className: string;\n readonly item: G9TabBarItem;\n readonly size: number;\n readonly height: number;\n readonly left: number;\n readonly bottom: number;\n readonly delayMs: number;\n readonly durationMs: number;\n readonly travelX: number;\n readonly travelY: number;\n readonly iconSize: number;\n readonly fontSize: number;\n readonly selected: boolean;\n /** The icon sits on a solid primary accent (Sculpted sub-menu cells): `OnPrimary`. */\n readonly onAccent: boolean;\n readonly onTap: () => void;\n}): ReactNode {\n const [shown, setShown] = useState(false);\n useEffect(() => {\n const t = startTimer(() => setShown(true), 16);\n return () => stopTimer(t);\n }, []);\n const press = usePressVisual(PRESS, false);\n const bounce = easeOutBackCss(M.fabPopBackCoefficient);\n const color = props.selected ? 'var(--g9-on-primary)' : 'var(--g9-on-surface)';\n const iconColor = props.onAccent ? 'var(--g9-on-primary)' : color;\n return (\n <view\n className={`${props.className}${props.selected ? ` ${props.className}--selected` : ''}`}\n {...(props.item.automationId ? { id: props.item.automationId } : {})}\n accessibility-element\n accessibility-traits=\"button\"\n accessibility-label={props.item.text ?? ''}\n style={{\n left: `${props.left}px`,\n bottom: `${props.bottom}px`,\n width: `${props.size}px`,\n height: `${props.height}px`,\n opacity: shown ? 1 : 0,\n transform: shown\n ? 'translate(0px, 0px) scale(1)'\n : `translate(${props.travelX}px, ${props.travelY}px) scale(${M.fabIdleScaleMin})`,\n transition: `opacity ${props.durationMs}ms ease-out ${props.delayMs}ms, transform ${props.durationMs}ms ${bounce} ${props.delayMs}ms`,\n }}\n bindtap={props.onTap}\n {...press}\n >\n <view className=\"g9-tab-bar__cell-accent\">\n <G9Icon icon={props.item.icon ?? 'check'} size={props.iconSize} color={iconColor} />\n </view>\n <text className=\"g9-tab-bar__cell-label\" text-maxline=\"1\" style={{ fontSize: `${props.fontSize}px`, color }}>\n {props.item.text ?? ''}\n </text>\n </view>\n );\n}\n"],"names":["PRESS","Object","M","G9TabBar","props","_props_subMenuItems","_props_fabIndex","_props_resetCenterOnMenuSelection","_props_defaultSelectedIndex","_props_className","_items_fab_text","items","subMenuItems","barStyle","metrics","g9TabBarStyleMetrics","sculpted","config","initial","useRef","initialTabBarState","selectedIndex","setSelectedIndex","useControllableState","isCenterFloating","setCenterFloating","isFabOpen","setFabOpen","isOverflowOpen","setOverflowOpen","state","apply","next","useEffect","reconcileTabBarState","revealing","setRevealing","useState","revealTimer","startTimer","stopTimer","cancelReveal","diagnostics","useG9Diagnostics","run","effect","item","context","error","transition","t","onFab","args","result","tabBarFabTap","open","useG9Back","tabBarBackdropTap","rtl","useG9Direction","strings","useG9Strings","palette","useG9Theme","win","useG9Window","measured","setMeasured","width","barWidth","Math","slots","tabBarSlots","slotCount","fab","resolveTabBarFabIndex","floating","fabCenterX","tabBarFabCenterX","indicatorSlot","tabBarIndicatorSlot","overflowLabel","overflowSelected","tabBarHasOverflow","tabBarOverflowSlot","reserved","tabBarReservedHeight","bounce","easeOutBackCss","chromeFill","chromeStroke","pad","chromeBox","fabShadow","tabBarFabShadowSvg","visualSlot","slot","slotViews","i","isOverflow","index","selected","hiddenUnderFab","revealPose","TabBarSlot","tabBarOverflowTriggerTap","tabBarItemTap","sub","subMenuRowLayout","overflowIndices","tabBarOverflowIndices","column","overflowColumnLayout","tabBarSlotCenterX","view","e","_e_detail","w","Number","svg","tabBarChromeSvg","s","undefined","tabBarFabPlusSvg","G9Icon","MenuCell","tabBarSubMenuTap","source","k","tabBarOverflowItemTap","_item_icon","_item_text","_item_text1","press","usePressVisual","hidden","color","icon","pose","text","_props_item_text","_props_item_icon","_props_item_text1","shown","setShown","iconColor"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/toast/service.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAQrB,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,YAAY,EACZ,KAAK,WAAW,EAEjB,MAAM,SAAS,CAAC;AAEjB,+FAA+F;AAC/F,eAAO,MAAM,cAAc;;;;EAAsE,CAAC;AAElG,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;IACxF,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gFAAgF;IAChF,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,8DAA8D;IAC9D,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAC5C,gEAAgE;IAChE,cAAc,IAAI,IAAI,CAAC;IACvB,yEAAyE;IACzE,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;IACzE,mBAAmB,IAAI,IAAI,CAAC;IAC5B,sDAAsD;IACtD,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;IACrH,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACnG,oBAAoB,IAAI,IAAI,CAAC;IAC7B;;;OAGG;IACH,mBAAmB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,gHAAgH;IAChH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,uGAAuG;IACvG,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7D,wEAAwE;IACxE,UAAU,IAAI,IAAI,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/toast/service.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAQrB,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,YAAY,EACZ,KAAK,WAAW,EAEjB,MAAM,SAAS,CAAC;AAEjB,+FAA+F;AAC/F,eAAO,MAAM,cAAc;;;;EAAsE,CAAC;AAElG,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;IACxF,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gFAAgF;IAChF,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,8DAA8D;IAC9D,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAC5C,gEAAgE;IAChE,cAAc,IAAI,IAAI,CAAC;IACvB,yEAAyE;IACzE,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;IACzE,mBAAmB,IAAI,IAAI,CAAC;IAC5B,sDAAsD;IACtD,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;IACrH,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACnG,oBAAoB,IAAI,IAAI,CAAC;IAC7B;;;OAGG;IACH,mBAAmB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,gHAAgH;IAChH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,uGAAuG;IACvG,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7D,wEAAwE;IACxE,UAAU,IAAI,IAAI,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;AA2QD,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAGjE;AAED,kHAAkH;AAClH,wBAAgB,WAAW,IAAI,cAAc,CAE5C;AAED,wGAAwG;AACxG,wBAAgB,QAAQ,IAAI,cAAc,CAEzC"}
|