@g9tm/lynxcontrols 1.4.5 → 1.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/base/pressable.d.ts.map +1 -1
  3. package/dist/base/pressable.jsx +2 -1
  4. package/dist/base/pressable.jsx.map +1 -1
  5. package/dist/cascade/cascade-panel.d.ts.map +1 -1
  6. package/dist/cascade/cascade-panel.jsx +2 -2
  7. package/dist/cascade/cascade-panel.jsx.map +1 -1
  8. package/dist/edge-panel/edge-panel.jsx +5 -5
  9. package/dist/edge-panel/edge-panel.jsx.map +1 -1
  10. package/dist/expander/expander.d.ts.map +1 -1
  11. package/dist/expander/expander.jsx +2 -1
  12. package/dist/expander/expander.jsx.map +1 -1
  13. package/dist/host/host.css.map +1 -1
  14. package/dist/host/host.d.ts +3 -2
  15. package/dist/host/host.d.ts.map +1 -1
  16. package/dist/host/host.jsx +2 -2
  17. package/dist/host/host.jsx.map +1 -1
  18. package/dist/plus-button/model.d.ts.map +1 -1
  19. package/dist/plus-button/model.jsx +5 -1
  20. package/dist/plus-button/model.jsx.map +1 -1
  21. package/dist/popup/frame.jsx +2 -2
  22. package/dist/popup/frame.jsx.map +1 -1
  23. package/dist/popup/service.d.ts.map +1 -1
  24. package/dist/popup/service.jsx +2 -2
  25. package/dist/popup/service.jsx.map +1 -1
  26. package/dist/provider/provider.css +4 -0
  27. package/dist/provider/provider.css.map +1 -1
  28. package/dist/provider/provider.d.ts.map +1 -1
  29. package/dist/provider/provider.jsx +4 -2
  30. package/dist/provider/provider.jsx.map +1 -1
  31. package/dist/selection/selection-sheet.d.ts +5 -0
  32. package/dist/selection/selection-sheet.d.ts.map +1 -1
  33. package/dist/selection/selection-sheet.jsx +7 -3
  34. package/dist/selection/selection-sheet.jsx.map +1 -1
  35. package/dist/sheet/frame.d.ts.map +1 -1
  36. package/dist/sheet/frame.jsx +30 -8
  37. package/dist/sheet/frame.jsx.map +1 -1
  38. package/dist/sheet/index.d.ts +1 -0
  39. package/dist/sheet/index.d.ts.map +1 -1
  40. package/dist/sheet/index.jsx +1 -0
  41. package/dist/sheet/motion.d.ts.map +1 -1
  42. package/dist/sheet/motion.jsx +14 -0
  43. package/dist/sheet/motion.jsx.map +1 -1
  44. package/dist/sheet/options.d.ts +6 -0
  45. package/dist/sheet/options.d.ts.map +1 -1
  46. package/dist/sheet/options.jsx.map +1 -1
  47. package/dist/sheet/scroll-indicator.d.ts +33 -0
  48. package/dist/sheet/scroll-indicator.d.ts.map +1 -0
  49. package/dist/sheet/scroll-indicator.jsx +84 -0
  50. package/dist/sheet/scroll-indicator.jsx.map +1 -0
  51. package/dist/sheet/sheet.css +14 -0
  52. package/dist/sheet/sheet.css.map +1 -1
  53. package/dist/tab-bar/tab-bar.d.ts.map +1 -1
  54. package/dist/tab-bar/tab-bar.jsx +11 -6
  55. package/dist/tab-bar/tab-bar.jsx.map +1 -1
  56. package/dist/toast/service.jsx +3 -3
  57. package/dist/toast/service.jsx.map +1 -1
  58. package/dist/toast/store.d.ts.map +1 -1
  59. package/dist/toast/store.jsx +3 -2
  60. package/dist/toast/store.jsx.map +1 -1
  61. package/package.json +3 -3
@@ -99,6 +99,20 @@
99
99
  flex: 1;
100
100
  }
101
101
 
102
+ .g9-sheet__body-frame {
103
+ flex-direction: column;
104
+ flex-shrink: 1;
105
+ display: flex;
106
+ position: relative;
107
+ }
108
+
109
+ .g9-sheet__scroll-thumb {
110
+ background-color: var(--g9-on-surface-variant);
111
+ opacity: .45;
112
+ pointer-events: none;
113
+ position: absolute;
114
+ }
115
+
102
116
  .g9-sheet__content {
103
117
  flex-direction: column;
104
118
  display: flex;
@@ -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;;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;;AAQA;EALE,sBAAsB;EACtB,cAAc;EACd,aAAa;AACf;;AASA;EANE,wDAAwD;AAC1D;;AASA;EANE,cAAc;AAChB;;AASA;EANE,OAAO;AACT;;AASA;EANE,sBAAsB;EACtB,aAAa;EACb,kBAAkB;AACpB;;AAUA;EAPE,sBAAsB;EACtB,WAAW;EACX,aAAa;EACb,gBAAgB;AAClB;;AAYA;EATE,WAAW;AACb;;AAcA;EAXE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAcA;EAXE,6CAA6C;EAC7C,oDAAoD;EACpD,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;AACV;;AAcA;EAXE;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF;;AAaA;EAVE,2CAA2C;AAC7C;;AAaA;EAVE;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF;;AAYA;EATE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAaA;EAVE,kCAAkC;EAClC,mBAAmB;EACnB,mBAAmB;EACnB,kBAAkB;EAClB,aAAa;AACf;;AAeA;EAZE,mBAAmB;EACnB,OAAO;EACP,mBAAmB;EACnB,aAAa;AACf;;AAeA;EAZE,mBAAmB;EACnB,mBAAmB;EACnB,aAAa;AACf;;AAeA;EAZE,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,aAAa;AACf;;AAeA;EAZE,yBAAyB;AAC3B;;AAeA;EAZE,mBAAmB;EACnB,OAAO;EACP,mBAAmB;EACnB,aAAa;AACf;;AAeA;EAZE,cAAc;AAChB;;AAeA;EAZE,2BAA2B;EAC3B,mBAAmB;EACnB,aAAa;AACf;;AAeA;EAZE,0BAA0B;EAC1B,uBAAuB;EACvB,iBAAiB;AACnB;;AAeA;EAZE,mBAAmB;EACnB,eAAe;EACf,aAAa;AACf;;AAgBA;EAbE,sBAAsB;EACtB,cAAc;EACd,aAAa;AACf;;AAgBA;EAbE,uBAAuB;EACvB,qBAAqB;EACrB,2CAA2C;EAC3C,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;EAClB,aAAa;AACf;;AAgBA;EAbE,mBAAmB;EACnB,eAAe;EACf,aAAa;AACf;;AAkBA;EAfE,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/* The grabber, header and body gap, measured as one: a fit sheet's cap includes them (MAUI). */\n.g9-sheet__chrome-top {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n\n/* MAUI UseStandardBodyTopGap: SheetHeaderVerticalGap under the header (10, or the app's scaled value). */\n.g9-sheet__body-gap {\n height: var(--g9-layout-sheet-header-vertical-gap, 10px);\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":""}
1
+ {"version":3,"sources":["webpack://./src/sheet/sheet.css"],"names":[],"mappings":"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","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/* The grabber, header and body gap, measured as one: a fit sheet's cap includes them (MAUI). */\n.g9-sheet__chrome-top {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n\n/* MAUI UseStandardBodyTopGap: SheetHeaderVerticalGap under the header (10, or the app's scaled value). */\n.g9-sheet__body-gap {\n height: var(--g9-layout-sheet-header-vertical-gap, 10px);\n}\n\n.g9-sheet__body {\n flex-shrink: 1;\n}\n\n.g9-sheet__body--fill {\n flex: 1;\n}\n\n/* scrollIndicator: 'always' — the scroller and its thumb (scroll-indicator.tsx). The frame takes the body's place. */\n.g9-sheet__body-frame {\n display: flex;\n flex-direction: column;\n flex-shrink: 1;\n position: relative;\n}\n\n.g9-sheet__scroll-thumb {\n position: absolute;\n background-color: var(--g9-on-surface-variant);\n opacity: 0.45;\n pointer-events: none;\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":""}
@@ -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;;;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"}
1
+ {"version":3,"file":"tab-bar.d.ts","sourceRoot":"","sources":["../../src/tab-bar/tab-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,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;AAeD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CA2WxD"}
@@ -1,4 +1,5 @@
1
1
  import "./tab-bar.css";
2
+ import { g9Ms } from "@g9tm/lynxcontrols-foundation";
2
3
  import { useEffect, useRef, useState } from "@lynx-js/react";
3
4
  import { usePressVisual } from "../base/press.jsx";
4
5
  import { startTimer, stopTimer } from "../base/timers.jsx";
@@ -13,8 +14,12 @@ const PRESS = Object.freeze({
13
14
  rest: g9TabBarMetrics.defaultRestOpacity,
14
15
  pressed: g9TabBarMetrics.itemPressedOpacity,
15
16
  hovered: g9TabBarMetrics.itemHoveredOpacity,
16
- inMs: g9TabBarMetrics.touchAnimationDurationMs,
17
- outMs: g9TabBarMetrics.touchAnimationDurationMs
17
+ get inMs () {
18
+ return g9Ms(g9TabBarMetrics.touchAnimationDurationMs);
19
+ },
20
+ get outMs () {
21
+ return g9Ms(g9TabBarMetrics.touchAnimationDurationMs);
22
+ }
18
23
  });
19
24
  function G9TabBar(props) {
20
25
  var _props_subMenuItems, _props_fabIndex, _props_resetCenterOnMenuSelection, _props_defaultSelectedIndex, _props_className, _items_fab_text;
@@ -196,12 +201,12 @@ function G9TabBar(props) {
196
201
  <svg className="g9-tab-bar__chrome-flat" content={tabBarChromeSvg(barWidth, metrics.barHeight, null, chromeFill, chromeStroke, barStyle)} style={{
197
202
  ...chromeBox,
198
203
  opacity: floating ? 0 : 1,
199
- transition: `opacity ${g9TabBarMetrics.centerStateDurationMs}ms ease-out`
204
+ transition: `opacity ${g9Ms(g9TabBarMetrics.centerStateDurationMs)}ms ease-out`
200
205
  }}/>
201
206
  {fab >= 0 ? <svg className="g9-tab-bar__chrome-notched" content={tabBarChromeSvg(barWidth, metrics.barHeight, fabCenterX - g9TabBarMetrics.barHorizontalGap, chromeFill, chromeStroke, barStyle)} style={{
202
207
  ...chromeBox,
203
208
  opacity: floating ? 1 : 0,
204
- transition: `opacity ${g9TabBarMetrics.centerStateDurationMs}ms ease-out`
209
+ transition: `opacity ${g9Ms(g9TabBarMetrics.centerStateDurationMs)}ms ease-out`
205
210
  }}/> : null}
206
211
  <view className="g9-tab-bar__slots" style={metrics.itemsHorizontalPadding > 0 ? {
207
212
  left: `${metrics.itemsHorizontalPadding}px`,
@@ -209,7 +214,7 @@ function G9TabBar(props) {
209
214
  } : {}}>
210
215
  {indicatorSlot >= 0 && metrics.showsSelectionIndicator ? <view className="g9-tab-bar__indicator" style={{
211
216
  left: `${(visualSlot(slots.findIndex((s)=>'item' === s.kind ? s.index === indicatorSlot : indicatorSlot === tabBarOverflowSlot)) + 0.5) * 100 / slotCount}%`,
212
- transition: `left ${g9TabBarMetrics.indicatorMoveDurationMs}ms cubic-bezier(0.215, 0.61, 0.355, 1)`,
217
+ transition: `left ${g9Ms(g9TabBarMetrics.indicatorMoveDurationMs)}ms cubic-bezier(0.215, 0.61, 0.355, 1)`,
213
218
  top: `${g9TabBarMetrics.indicatorTopOffset + metrics.selectedItemNudgeY}px`
214
219
  }}/> : null}
215
220
  {slotViews}
@@ -227,7 +232,7 @@ function G9TabBar(props) {
227
232
  bottom: `${g9TabBarMetrics.barBottomGap + metrics.barHeight - (metrics.fabSize - metrics.fabProtrusionAboveBar)}px`,
228
233
  opacity: floating ? 1 : 0,
229
234
  transform: floating ? 'translateY(0px) scale(1)' : `translateY(${g9TabBarMetrics.fabIdleVerticalOffset}px) scale(${g9TabBarMetrics.fabIdleScaleMin})`,
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`
235
+ transition: floating ? `transform ${g9Ms(g9TabBarMetrics.centerStateBouncyDurationMs)}ms ${bounce}, opacity ${g9Ms(g9TabBarMetrics.centerStateDurationMs)}ms ease-out` : `transform ${g9Ms(g9TabBarMetrics.centerStateDurationMs)}ms cubic-bezier(0.55, 0.055, 0.675, 0.19), opacity ${g9Ms(g9TabBarMetrics.centerStateDurationMs)}ms ease-in`
231
236
  }} bindtap={floating ? onFab : void 0} user-interaction-enabled={floating}>
232
237
  {fabShadow ? <svg className="g9-tab-bar__fab-shadow" content={fabShadow} style={{
233
238
  left: `${-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 /**\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
+ {"version":3,"file":"tab-bar/tab-bar.jsx","sources":["../../src/tab-bar/tab-bar.tsx"],"sourcesContent":["import './tab-bar.css';\nimport { g9Ms } from '@g9tm/lynxcontrols-foundation';\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 get inMs() {\n return g9Ms(M.touchAnimationDurationMs);\n },\n get outMs() {\n return g9Ms(M.touchAnimationDurationMs);\n },\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 ${g9Ms(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 ${g9Ms(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 ${g9Ms(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 ${g9Ms(M.centerStateBouncyDurationMs)}ms ${bounce}, opacity ${g9Ms(M.centerStateDurationMs)}ms ease-out`\n : `transform ${g9Ms(M.centerStateDurationMs)}ms cubic-bezier(0.55, 0.055, 0.675, 0.19), opacity ${g9Ms(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","g9Ms","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,5 +1,5 @@
1
1
  import "./toast.css";
2
- import { formatColor, toNativeDigits, withAlpha } from "@g9tm/lynxcontrols-foundation";
2
+ import { formatColor, g9Ms, toNativeDigits, withAlpha } from "@g9tm/lynxcontrols-foundation";
3
3
  import { useEffect, useState, useSyncExternalStore } from "@lynx-js/react";
4
4
  import { g9RowStyle } from "../base/control.jsx";
5
5
  import { useG9Press } from "../base/press.jsx";
@@ -69,7 +69,7 @@ function ToastCard(props) {
69
69
  borderColor: paletteColor(palette, onToken, 0.35),
70
70
  opacity: 'shown' === entry.status || 'entering' === entry.status ? 1 : 0,
71
71
  transform: `translateY(${'leaving' === entry.status ? offset : '0px'})`,
72
- transition: `opacity ${'leaving' === entry.status ? g9ToastTimings.exitMs : g9ToastTimings.enterMs}ms, transform ${g9ToastTimings.enterMs}ms`
72
+ transition: `opacity ${g9Ms('leaving' === entry.status ? g9ToastTimings.exitMs : g9ToastTimings.enterMs)}ms, transform ${g9Ms(g9ToastTimings.enterMs)}ms`
73
73
  }}>
74
74
  {entry.durationMs > 0 ? <ToastCountdown key={entry.refreshes} durationMs={entry.durationMs} color={paletteColor(palette, onToken, 0.14)} rtl={'rtl' === direction}/> : null}
75
75
  <G9IconSlot icon={icon} size={20} color={on}/>
@@ -136,7 +136,7 @@ function ToastLayer(props) {
136
136
  const positions = new Set(snap.toasts.map((t)=>t.position));
137
137
  if (snap.loadingToast) positions.add(snap.loadingToast.position);
138
138
  if (snap.progress) positions.add(snap.progress.position);
139
- const glide = snap.reanchorAnimated ? `top ${g9ToastTimings.reanchorMs}ms cubic-bezier(0.215, 0.61, 0.355, 1), bottom ${g9ToastTimings.reanchorMs}ms cubic-bezier(0.215, 0.61, 0.355, 1)` : 'none';
139
+ const glide = snap.reanchorAnimated ? `top ${g9Ms(g9ToastTimings.reanchorMs)}ms cubic-bezier(0.215, 0.61, 0.355, 1), bottom ${g9Ms(g9ToastTimings.reanchorMs)}ms cubic-bezier(0.215, 0.61, 0.355, 1)` : 'none';
140
140
  const percent = (p)=>toNativeDigits(`${Math.round(100 * p)}%`, culture.numberingSystem);
141
141
  return <view className={`g9-toast-layer g9-dir-${rtl ? 'rtl' : 'ltr'}`} event-through={true}>
142
142
  {[
@@ -1 +1 @@
1
- {"version":3,"file":"toast/service.jsx","sources":["../../src/toast/service.tsx"],"sourcesContent":["import './toast.css';\nimport { formatColor, type G9ColorToken, toNativeDigits, withAlpha } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useEffect, useState, useSyncExternalStore } from '@lynx-js/react';\nimport { g9RowStyle } from '../base/control';\nimport { useG9Press } from '../base/press';\nimport { startTimer, stopTimer } from '../base/timers';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport { useG9Host, useG9HostInsets } from '../host/hooks';\nimport { type G9HostHandle, g9Hosts } from '../host/registry';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Culture, useG9Direction, useG9Executor, useG9Settings, useG9Theme } from '../provider/hooks';\nimport {\n type G9LoadingLease,\n type G9ToastEntry,\n type G9ToastHandle,\n type G9ToastOptions,\n type G9ToastPosition,\n G9ToastStore,\n type G9ToastType,\n g9ToastTimings,\n} from './store';\n\n/** Margin between a toast stack and the screen edge (MAUI 16 dp) and between toasts (8 dp). */\nexport const g9ToastMetrics = Object.freeze({ edgeMargin: 16, gap: 8, loaderScrimOpacity: 0.55 });\n\n/** The toasts of a host (MAUI `G9ToastHelper`). */\nexport interface G9ToastService {\n /** A typed, auto-dismissing toast (MAUI `ShowToastAsync`). */\n showToast(message: string, type?: G9ToastType, options?: G9ToastOptions): G9ToastHandle;\n /** Dismisses one toast or every typed toast (MAUI `DismissToastAsync`). */\n dismissToast(id?: number): void;\n /** Full-screen blocking loader, reference-counted (MAUI `ShowLoadingAsync`). */\n showLoading(text?: string): void;\n /** Lease form of `showLoading` (MAUI `BeginLoadingAsync`). */\n beginLoading(text?: string): G9LoadingLease;\n /** Releases one anonymous hold (MAUI `DismissLoadingAsync`). */\n dismissLoading(): void;\n /** Compact non-blocking loading toast (MAUI `ShowLoadingToastAsync`). */\n showLoadingToast(text?: string, position?: G9ToastPosition | null): void;\n dismissLoadingToast(): void;\n /** Progress toast (MAUI `ShowProgressToastAsync`). */\n showProgressToast(title: string, detail?: string | null, progress?: number, position?: G9ToastPosition | null): void;\n updateProgressToast(title?: string | null, detail?: string | null, progress?: number | null): void;\n dismissProgressToast(): void;\n /**\n * Re-anchors live toasts after the bottom clearance changed (MAUI `RefreshBottomInsetsAsync`, ADR-0027: an explicit\n * call, not a subscription). `animate` glides 220 ms; false snaps.\n */\n refreshBottomInsets(animate?: boolean): void;\n /** The space a bottom bar (tab bar) takes above the safe area; call `refreshBottomInsets` after changing it. */\n setBottomClearance(px: number): void;\n /** A bottom-anchored overlay (MAUI `IG9BottomAnchoredOverlay`): bottom stacks sit above its height. */\n setBottomOverlay(key: string, heightPx: number | null): void;\n /** Clears every toast, loader and progress (MAUI `DismissAllAsync`). */\n dismissAll(): void;\n readonly store: G9ToastStore;\n}\n\nconst FEATURE = 'g9.toasts';\n\ninterface State {\n service: G9ToastService;\n clearance: number;\n committedClearance: number;\n rtl: boolean;\n /** Set by the layer (the provider's safe executor); a toast cannot show before the layer renders. */\n run?: (action: () => unknown) => void;\n}\n\n/** MAUI G9ToastHelper.ResolveTypeVisuals: the card is filled with the type's colour, its text and glyph in the On colour. */\nconst ACCENT: Record<G9ToastType, readonly [G9ColorToken, G9ColorToken]> = {\n information: ['Info', 'OnInfo'],\n success: ['Success', 'OnSuccess'],\n warning: ['Warning', 'OnWarning'],\n error: ['Error', 'OnError'],\n};\n\ntype Palette = ReturnType<typeof useG9Theme>['palette'];\n\nconst paletteColor = (palette: Palette, token: G9ColorToken, alpha = 1): string =>\n formatColor(withAlpha(palette[token], alpha));\n\n/**\n * MAUI's countdown: a layer in the On colour at 14 % grows from the reading start over the toast's lifetime (a refresh\n * restarts it). Mounted at scale 0, then the transition to 1 starts on the next frame.\n */\nfunction ToastCountdown(props: {\n readonly durationMs: number;\n readonly color: string;\n readonly rtl: boolean;\n}): ReactNode {\n const [run, setRun] = useState(false);\n useEffect(() => {\n const t = setTimeout(() => setRun(true), 16);\n return () => clearTimeout(t);\n }, []);\n return (\n <view\n className=\"g9-toast__countdown\"\n style={{\n backgroundColor: props.color,\n transformOrigin: props.rtl ? 'right center' : 'left center',\n transform: `scaleX(${run ? 1 : 0})`,\n transition: run ? `transform ${props.durationMs}ms linear` : 'none',\n }}\n />\n );\n}\n\nfunction ToastCard(props: {\n readonly entry: G9ToastEntry;\n readonly store: G9ToastStore;\n readonly bottom: boolean;\n}): ReactNode {\n const { entry, store } = props;\n const glyphs = useG9Settings().glyphs;\n const action = useG9Press(() => store.pressAction(entry.id), { source: 'G9Toast', guardMs: 0 });\n const palette = useG9Theme().palette;\n const [fillToken, onToken] = ACCENT[entry.type];\n const fill = paletteColor(palette, fillToken);\n const on = paletteColor(palette, onToken);\n const icon =\n entry.icon ??\n (entry.type === 'success'\n ? glyphs.success\n : entry.type === 'warning'\n ? glyphs.warning\n : entry.type === 'error'\n ? glyphs.error\n : glyphs.info);\n const offset = props.bottom ? '12px' : '-12px';\n const direction = useG9Direction();\n return (\n <view\n className={`g9-toast g9-toast--${entry.type} g9-toast--${entry.status}`}\n accessibility-element={true}\n accessibility-label={entry.message}\n style={{\n ...g9RowStyle(direction),\n backgroundColor: fill,\n borderColor: paletteColor(palette, onToken, 0.35),\n opacity: entry.status === 'shown' || entry.status === 'entering' ? 1 : 0,\n transform: `translateY(${entry.status === 'leaving' ? offset : '0px'})`,\n transition: `opacity ${entry.status === 'leaving' ? g9ToastTimings.exitMs : g9ToastTimings.enterMs}ms, transform ${g9ToastTimings.enterMs}ms`,\n }}\n >\n {entry.durationMs > 0 ? (\n <ToastCountdown\n key={entry.refreshes}\n durationMs={entry.durationMs}\n color={paletteColor(palette, onToken, 0.14)}\n rtl={direction === 'rtl'}\n />\n ) : null}\n <G9IconSlot icon={icon} size={20} color={on} />\n <text className=\"g9-toast__message\" style={{ color: on }}>\n {entry.message}\n </text>\n {entry.actionText ? (\n <view\n className=\"g9-toast__action\"\n accessibility-element={true}\n accessibility-traits=\"button\"\n bindtap={action}\n style={{ backgroundColor: paletteColor(palette, onToken, 0.16) }}\n >\n <text className=\"g9-toast__action-text\" style={{ color: on }}>\n {entry.actionText}\n </text>\n </view>\n ) : null}\n </view>\n );\n}\n\nfunction anchorStyle(position: G9ToastPosition, top: number, bottom: number): Record<string, string> {\n const m = `${g9ToastMetrics.edgeMargin}px`;\n const style: Record<string, string> = {};\n if (position.startsWith('top')) style.top = `${top}px`;\n else if (position.startsWith('bottom')) style.bottom = `${bottom}px`;\n else {\n style.top = '0px';\n style.bottom = '0px';\n }\n // MAUI: every inline toast fills the width between the margins, whatever the horizontal part of its position.\n style.left = m;\n style.right = m;\n return style;\n}\n\n/** The feedback layer: stacks per position, the compact loading toast, the progress toast, the full-screen loader. */\nfunction ToastLayer(props: { readonly state: State; readonly host: G9HostHandle }): ReactNode {\n const { state, host } = props;\n // MAUI ResolveBottomInset: the tab-bar clearance applies only while no sheet is open — a sheet covers the bar, so a\n // toast then falls back to the plain safe-area gap instead of floating over the sheet's middle. Read when the\n // toasts render (a toast shows), like MAUI's GetOpenSheetCount at show time; a closing sheet no longer counts.\n const sheets = host.getFeature('g9.sheets') as { readonly service?: { getOpenCount(): number } } | undefined;\n const sheetOpen = (sheets?.service?.getOpenCount() ?? 0) > 0;\n const store = state.service.store;\n const snap = useSyncExternalStore(\n (l) => store.subscribe(l),\n () => store.getSnapshot(),\n );\n const insets = useG9HostInsets();\n const culture = useG9Culture();\n const rtl = useG9Direction() === 'rtl';\n state.rtl = rtl;\n const executor = useG9Executor();\n state.run = (action) =>\n void executor.run(() => action(), { source: 'G9Toast', enableThrottle: false, preventConcurrentExecution: false });\n // The clearance is read when insets are refreshed (or a toast shows): a change alone does not move live toasts.\n const [clearance, setClearance] = useState(state.committedClearance);\n useEffect(() => {\n state.committedClearance = state.clearance;\n setClearance(state.clearance);\n }, [snap.insetVersion, snap.toasts.length]);\n useEffect(() => () => store.dispose(), [store]);\n const top = insets.top + g9ToastMetrics.edgeMargin;\n const bottom = insets.bottom + (sheetOpen ? 0 : clearance) + snap.bottomOverlayHeight + g9ToastMetrics.edgeMargin;\n const positions = new Set<G9ToastPosition>(snap.toasts.map((t) => t.position));\n if (snap.loadingToast) positions.add(snap.loadingToast.position);\n if (snap.progress) positions.add(snap.progress.position);\n const glide = snap.reanchorAnimated\n ? `top ${g9ToastTimings.reanchorMs}ms cubic-bezier(0.215, 0.61, 0.355, 1), bottom ${g9ToastTimings.reanchorMs}ms cubic-bezier(0.215, 0.61, 0.355, 1)`\n : 'none';\n const percent = (p: number) => toNativeDigits(`${Math.round(p * 100)}%`, culture.numberingSystem);\n return (\n <view className={`g9-toast-layer g9-dir-${rtl ? 'rtl' : 'ltr'}`} event-through={true}>\n {[...positions].map((position) => {\n const bottomStack = position.startsWith('bottom');\n return (\n <view\n key={position}\n className={`g9-toast-stack g9-toast-stack--${position}${bottomStack ? ' g9-toast-stack--bottom' : ''}`}\n event-through={true}\n style={{ ...anchorStyle(position, top, bottom), transition: glide }}\n >\n {snap.toasts\n .filter((t) => t.position === position)\n .map((t) => (\n <ToastCard key={t.id} entry={t} store={store} bottom={bottomStack} />\n ))}\n {snap.loadingToast && snap.loadingToast.position === position ? (\n <view className=\"g9-toast g9-toast--loading\" accessibility-label={snap.loadingToast.text}>\n <G9ActivityIndicator running size={18} />\n <text className=\"g9-toast__message\">{snap.loadingToast.text}</text>\n </view>\n ) : null}\n {snap.progress && snap.progress.position === position ? (\n <view className=\"g9-toast g9-toast--progress\" accessibility-value={percent(snap.progress.progress)}>\n <view\n className=\"g9-toast__fill\"\n style={{\n transform: `scaleX(${snap.progress.progress})`,\n transformOrigin: rtl ? 'right center' : 'left center',\n }}\n />\n <view className=\"g9-toast__progress-text\">\n <text className=\"g9-toast__message\">{snap.progress.title}</text>\n {snap.progress.detail ? <text className=\"g9-toast__detail\">{snap.progress.detail}</text> : null}\n </view>\n <view className=\"g9-toast__pill\">\n <text className=\"g9-toast__pill-text\">{percent(snap.progress.progress)}</text>\n </view>\n </view>\n ) : null}\n </view>\n );\n })}\n {snap.loader ? (\n <view\n className={`g9-loader g9-loader--${snap.loader.status}`}\n style={{\n opacity: snap.loader.status === 'leaving' ? 0 : 1,\n transition: `opacity ${snap.loader.status === 'leaving' ? g9ToastTimings.loaderFadeOutMs : g9ToastTimings.loaderFadeInMs}ms`,\n }}\n event-through={false}\n bindtap={() => {}}\n >\n <view className=\"g9-loader__scrim\" style={{ opacity: g9ToastMetrics.loaderScrimOpacity }} />\n <view className=\"g9-loader__card\">\n <G9ActivityIndicator running size={36} color=\"var(--g9-inverse-on-surface)\" />\n {snap.loader.text ? <text className=\"g9-loader__text\">{snap.loader.text}</text> : null}\n </view>\n </view>\n ) : null}\n </view>\n );\n}\n\nfunction createToastService(host: G9HostHandle): State {\n const state = { clearance: 0, committedClearance: 0, rtl: false } as State;\n const store = new G9ToastStore({\n setTimer: (cb, ms) => startTimer(cb, ms),\n clearTimer: (h) => stopTimer(h as never),\n runAction: (action) => state.run?.(action),\n defaultPosition: () => (state.rtl ? 'bottomLeft' : 'bottomRight'),\n });\n state.service = {\n store,\n showToast: (message, type, options) => store.show(message, type, options),\n dismissToast: (id) => store.dismissToast(id),\n showLoading: (text) => store.showLoading(text),\n beginLoading: (text) => store.beginLoading(text),\n dismissLoading: () => store.dismissLoading(),\n showLoadingToast: (text, position) => store.showLoadingToast(text, position ?? null),\n dismissLoadingToast: () => store.dismissLoadingToast(),\n showProgressToast: (title, detail, progress, position) =>\n store.showProgress(title, detail ?? null, progress ?? 0, position ?? null),\n updateProgressToast: (title, detail, progress) => store.updateProgress(title, detail, progress),\n dismissProgressToast: () => store.dismissProgress(),\n refreshBottomInsets: (animate = true) => store.refreshBottomInsets(animate),\n setBottomClearance: (px) => {\n state.clearance = Math.max(0, px);\n },\n setBottomOverlay: (key, height) => store.setBottomOverlay(key, height),\n dismissAll: () => store.dismissAll(),\n };\n host.attachFeature(FEATURE, state);\n host.registerLayerItem('feedback', { key: FEATURE, element: <ToastLayer state={state} host={host} />, order: 0 });\n return state;\n}\n\n/** The toast service of a host (created once as a host feature). */\nexport function toastServiceOf(host: G9HostHandle): G9ToastService {\n const existing = host.getFeature(FEATURE) as State | undefined;\n return (existing ?? createToastService(host)).service;\n}\n\n/** The toasts of the nearest `G9Host` (MAUI `G9ToastHelper`), in its `feedback` layer above popups and sheets. */\nexport function useG9Toasts(): G9ToastService {\n return toastServiceOf(useG9Host());\n}\n\n/** The toasts of the active host, for code outside components. Throws `host-missing` without a host. */\nexport function g9Toasts(): G9ToastService {\n return toastServiceOf(g9Hosts.require());\n}\n"],"names":["g9ToastMetrics","Object","FEATURE","ACCENT","paletteColor","palette","token","alpha","formatColor","withAlpha","ToastCountdown","props","run","setRun","useState","useEffect","t","setTimeout","clearTimeout","view","ToastCard","_entry_icon","entry","store","glyphs","useG9Settings","action","useG9Press","useG9Theme","fillToken","onToken","fill","on","icon","offset","direction","useG9Direction","g9RowStyle","g9ToastTimings","G9IconSlot","text","anchorStyle","position","top","bottom","m","style","ToastLayer","_sheets_service","state","host","sheets","sheetOpen","snap","useSyncExternalStore","l","insets","useG9HostInsets","culture","useG9Culture","rtl","executor","useG9Executor","clearance","setClearance","positions","Set","glide","percent","p","toNativeDigits","Math","bottomStack","G9ActivityIndicator","createToastService","G9ToastStore","cb","ms","startTimer","h","stopTimer","message","type","options","id","text1","title","detail","progress","animate","px","key","height","toastServiceOf","existing","useG9Toasts","useG9Host","g9Toasts","g9Hosts"],"mappings":"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"}
1
+ {"version":3,"file":"toast/service.jsx","sources":["../../src/toast/service.tsx"],"sourcesContent":["import './toast.css';\nimport { formatColor, type G9ColorToken, g9Ms, toNativeDigits, withAlpha } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useEffect, useState, useSyncExternalStore } from '@lynx-js/react';\nimport { g9RowStyle } from '../base/control';\nimport { useG9Press } from '../base/press';\nimport { startTimer, stopTimer } from '../base/timers';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport { useG9Host, useG9HostInsets } from '../host/hooks';\nimport { type G9HostHandle, g9Hosts } from '../host/registry';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Culture, useG9Direction, useG9Executor, useG9Settings, useG9Theme } from '../provider/hooks';\nimport {\n type G9LoadingLease,\n type G9ToastEntry,\n type G9ToastHandle,\n type G9ToastOptions,\n type G9ToastPosition,\n G9ToastStore,\n type G9ToastType,\n g9ToastTimings,\n} from './store';\n\n/** Margin between a toast stack and the screen edge (MAUI 16 dp) and between toasts (8 dp). */\nexport const g9ToastMetrics = Object.freeze({ edgeMargin: 16, gap: 8, loaderScrimOpacity: 0.55 });\n\n/** The toasts of a host (MAUI `G9ToastHelper`). */\nexport interface G9ToastService {\n /** A typed, auto-dismissing toast (MAUI `ShowToastAsync`). */\n showToast(message: string, type?: G9ToastType, options?: G9ToastOptions): G9ToastHandle;\n /** Dismisses one toast or every typed toast (MAUI `DismissToastAsync`). */\n dismissToast(id?: number): void;\n /** Full-screen blocking loader, reference-counted (MAUI `ShowLoadingAsync`). */\n showLoading(text?: string): void;\n /** Lease form of `showLoading` (MAUI `BeginLoadingAsync`). */\n beginLoading(text?: string): G9LoadingLease;\n /** Releases one anonymous hold (MAUI `DismissLoadingAsync`). */\n dismissLoading(): void;\n /** Compact non-blocking loading toast (MAUI `ShowLoadingToastAsync`). */\n showLoadingToast(text?: string, position?: G9ToastPosition | null): void;\n dismissLoadingToast(): void;\n /** Progress toast (MAUI `ShowProgressToastAsync`). */\n showProgressToast(title: string, detail?: string | null, progress?: number, position?: G9ToastPosition | null): void;\n updateProgressToast(title?: string | null, detail?: string | null, progress?: number | null): void;\n dismissProgressToast(): void;\n /**\n * Re-anchors live toasts after the bottom clearance changed (MAUI `RefreshBottomInsetsAsync`, ADR-0027: an explicit\n * call, not a subscription). `animate` glides 220 ms; false snaps.\n */\n refreshBottomInsets(animate?: boolean): void;\n /** The space a bottom bar (tab bar) takes above the safe area; call `refreshBottomInsets` after changing it. */\n setBottomClearance(px: number): void;\n /** A bottom-anchored overlay (MAUI `IG9BottomAnchoredOverlay`): bottom stacks sit above its height. */\n setBottomOverlay(key: string, heightPx: number | null): void;\n /** Clears every toast, loader and progress (MAUI `DismissAllAsync`). */\n dismissAll(): void;\n readonly store: G9ToastStore;\n}\n\nconst FEATURE = 'g9.toasts';\n\ninterface State {\n service: G9ToastService;\n clearance: number;\n committedClearance: number;\n rtl: boolean;\n /** Set by the layer (the provider's safe executor); a toast cannot show before the layer renders. */\n run?: (action: () => unknown) => void;\n}\n\n/** MAUI G9ToastHelper.ResolveTypeVisuals: the card is filled with the type's colour, its text and glyph in the On colour. */\nconst ACCENT: Record<G9ToastType, readonly [G9ColorToken, G9ColorToken]> = {\n information: ['Info', 'OnInfo'],\n success: ['Success', 'OnSuccess'],\n warning: ['Warning', 'OnWarning'],\n error: ['Error', 'OnError'],\n};\n\ntype Palette = ReturnType<typeof useG9Theme>['palette'];\n\nconst paletteColor = (palette: Palette, token: G9ColorToken, alpha = 1): string =>\n formatColor(withAlpha(palette[token], alpha));\n\n/**\n * MAUI's countdown: a layer in the On colour at 14 % grows from the reading start over the toast's lifetime (a refresh\n * restarts it). Mounted at scale 0, then the transition to 1 starts on the next frame.\n */\nfunction ToastCountdown(props: {\n readonly durationMs: number;\n readonly color: string;\n readonly rtl: boolean;\n}): ReactNode {\n const [run, setRun] = useState(false);\n useEffect(() => {\n const t = setTimeout(() => setRun(true), 16);\n return () => clearTimeout(t);\n }, []);\n return (\n <view\n className=\"g9-toast__countdown\"\n style={{\n backgroundColor: props.color,\n transformOrigin: props.rtl ? 'right center' : 'left center',\n transform: `scaleX(${run ? 1 : 0})`,\n transition: run ? `transform ${props.durationMs}ms linear` : 'none',\n }}\n />\n );\n}\n\nfunction ToastCard(props: {\n readonly entry: G9ToastEntry;\n readonly store: G9ToastStore;\n readonly bottom: boolean;\n}): ReactNode {\n const { entry, store } = props;\n const glyphs = useG9Settings().glyphs;\n const action = useG9Press(() => store.pressAction(entry.id), { source: 'G9Toast', guardMs: 0 });\n const palette = useG9Theme().palette;\n const [fillToken, onToken] = ACCENT[entry.type];\n const fill = paletteColor(palette, fillToken);\n const on = paletteColor(palette, onToken);\n const icon =\n entry.icon ??\n (entry.type === 'success'\n ? glyphs.success\n : entry.type === 'warning'\n ? glyphs.warning\n : entry.type === 'error'\n ? glyphs.error\n : glyphs.info);\n const offset = props.bottom ? '12px' : '-12px';\n const direction = useG9Direction();\n return (\n <view\n className={`g9-toast g9-toast--${entry.type} g9-toast--${entry.status}`}\n accessibility-element={true}\n accessibility-label={entry.message}\n style={{\n ...g9RowStyle(direction),\n backgroundColor: fill,\n borderColor: paletteColor(palette, onToken, 0.35),\n opacity: entry.status === 'shown' || entry.status === 'entering' ? 1 : 0,\n transform: `translateY(${entry.status === 'leaving' ? offset : '0px'})`,\n transition: `opacity ${g9Ms(entry.status === 'leaving' ? g9ToastTimings.exitMs : g9ToastTimings.enterMs)}ms, transform ${g9Ms(g9ToastTimings.enterMs)}ms`,\n }}\n >\n {entry.durationMs > 0 ? (\n <ToastCountdown\n key={entry.refreshes}\n durationMs={entry.durationMs}\n color={paletteColor(palette, onToken, 0.14)}\n rtl={direction === 'rtl'}\n />\n ) : null}\n <G9IconSlot icon={icon} size={20} color={on} />\n <text className=\"g9-toast__message\" style={{ color: on }}>\n {entry.message}\n </text>\n {entry.actionText ? (\n <view\n className=\"g9-toast__action\"\n accessibility-element={true}\n accessibility-traits=\"button\"\n bindtap={action}\n style={{ backgroundColor: paletteColor(palette, onToken, 0.16) }}\n >\n <text className=\"g9-toast__action-text\" style={{ color: on }}>\n {entry.actionText}\n </text>\n </view>\n ) : null}\n </view>\n );\n}\n\nfunction anchorStyle(position: G9ToastPosition, top: number, bottom: number): Record<string, string> {\n const m = `${g9ToastMetrics.edgeMargin}px`;\n const style: Record<string, string> = {};\n if (position.startsWith('top')) style.top = `${top}px`;\n else if (position.startsWith('bottom')) style.bottom = `${bottom}px`;\n else {\n style.top = '0px';\n style.bottom = '0px';\n }\n // MAUI: every inline toast fills the width between the margins, whatever the horizontal part of its position.\n style.left = m;\n style.right = m;\n return style;\n}\n\n/** The feedback layer: stacks per position, the compact loading toast, the progress toast, the full-screen loader. */\nfunction ToastLayer(props: { readonly state: State; readonly host: G9HostHandle }): ReactNode {\n const { state, host } = props;\n // MAUI ResolveBottomInset: the tab-bar clearance applies only while no sheet is open — a sheet covers the bar, so a\n // toast then falls back to the plain safe-area gap instead of floating over the sheet's middle. Read when the\n // toasts render (a toast shows), like MAUI's GetOpenSheetCount at show time; a closing sheet no longer counts.\n const sheets = host.getFeature('g9.sheets') as { readonly service?: { getOpenCount(): number } } | undefined;\n const sheetOpen = (sheets?.service?.getOpenCount() ?? 0) > 0;\n const store = state.service.store;\n const snap = useSyncExternalStore(\n (l) => store.subscribe(l),\n () => store.getSnapshot(),\n );\n const insets = useG9HostInsets();\n const culture = useG9Culture();\n const rtl = useG9Direction() === 'rtl';\n state.rtl = rtl;\n const executor = useG9Executor();\n state.run = (action) =>\n void executor.run(() => action(), { source: 'G9Toast', enableThrottle: false, preventConcurrentExecution: false });\n // The clearance is read when insets are refreshed (or a toast shows): a change alone does not move live toasts.\n const [clearance, setClearance] = useState(state.committedClearance);\n useEffect(() => {\n state.committedClearance = state.clearance;\n setClearance(state.clearance);\n }, [snap.insetVersion, snap.toasts.length]);\n useEffect(() => () => store.dispose(), [store]);\n const top = insets.top + g9ToastMetrics.edgeMargin;\n const bottom = insets.bottom + (sheetOpen ? 0 : clearance) + snap.bottomOverlayHeight + g9ToastMetrics.edgeMargin;\n const positions = new Set<G9ToastPosition>(snap.toasts.map((t) => t.position));\n if (snap.loadingToast) positions.add(snap.loadingToast.position);\n if (snap.progress) positions.add(snap.progress.position);\n const glide = snap.reanchorAnimated\n ? `top ${g9Ms(g9ToastTimings.reanchorMs)}ms cubic-bezier(0.215, 0.61, 0.355, 1), bottom ${g9Ms(g9ToastTimings.reanchorMs)}ms cubic-bezier(0.215, 0.61, 0.355, 1)`\n : 'none';\n const percent = (p: number) => toNativeDigits(`${Math.round(p * 100)}%`, culture.numberingSystem);\n return (\n <view className={`g9-toast-layer g9-dir-${rtl ? 'rtl' : 'ltr'}`} event-through={true}>\n {[...positions].map((position) => {\n const bottomStack = position.startsWith('bottom');\n return (\n <view\n key={position}\n className={`g9-toast-stack g9-toast-stack--${position}${bottomStack ? ' g9-toast-stack--bottom' : ''}`}\n event-through={true}\n style={{ ...anchorStyle(position, top, bottom), transition: glide }}\n >\n {snap.toasts\n .filter((t) => t.position === position)\n .map((t) => (\n <ToastCard key={t.id} entry={t} store={store} bottom={bottomStack} />\n ))}\n {snap.loadingToast && snap.loadingToast.position === position ? (\n <view className=\"g9-toast g9-toast--loading\" accessibility-label={snap.loadingToast.text}>\n <G9ActivityIndicator running size={18} />\n <text className=\"g9-toast__message\">{snap.loadingToast.text}</text>\n </view>\n ) : null}\n {snap.progress && snap.progress.position === position ? (\n <view className=\"g9-toast g9-toast--progress\" accessibility-value={percent(snap.progress.progress)}>\n <view\n className=\"g9-toast__fill\"\n style={{\n transform: `scaleX(${snap.progress.progress})`,\n transformOrigin: rtl ? 'right center' : 'left center',\n }}\n />\n <view className=\"g9-toast__progress-text\">\n <text className=\"g9-toast__message\">{snap.progress.title}</text>\n {snap.progress.detail ? <text className=\"g9-toast__detail\">{snap.progress.detail}</text> : null}\n </view>\n <view className=\"g9-toast__pill\">\n <text className=\"g9-toast__pill-text\">{percent(snap.progress.progress)}</text>\n </view>\n </view>\n ) : null}\n </view>\n );\n })}\n {snap.loader ? (\n <view\n className={`g9-loader g9-loader--${snap.loader.status}`}\n style={{\n opacity: snap.loader.status === 'leaving' ? 0 : 1,\n transition: `opacity ${snap.loader.status === 'leaving' ? g9ToastTimings.loaderFadeOutMs : g9ToastTimings.loaderFadeInMs}ms`,\n }}\n event-through={false}\n bindtap={() => {}}\n >\n <view className=\"g9-loader__scrim\" style={{ opacity: g9ToastMetrics.loaderScrimOpacity }} />\n <view className=\"g9-loader__card\">\n <G9ActivityIndicator running size={36} color=\"var(--g9-inverse-on-surface)\" />\n {snap.loader.text ? <text className=\"g9-loader__text\">{snap.loader.text}</text> : null}\n </view>\n </view>\n ) : null}\n </view>\n );\n}\n\nfunction createToastService(host: G9HostHandle): State {\n const state = { clearance: 0, committedClearance: 0, rtl: false } as State;\n const store = new G9ToastStore({\n setTimer: (cb, ms) => startTimer(cb, ms),\n clearTimer: (h) => stopTimer(h as never),\n runAction: (action) => state.run?.(action),\n defaultPosition: () => (state.rtl ? 'bottomLeft' : 'bottomRight'),\n });\n state.service = {\n store,\n showToast: (message, type, options) => store.show(message, type, options),\n dismissToast: (id) => store.dismissToast(id),\n showLoading: (text) => store.showLoading(text),\n beginLoading: (text) => store.beginLoading(text),\n dismissLoading: () => store.dismissLoading(),\n showLoadingToast: (text, position) => store.showLoadingToast(text, position ?? null),\n dismissLoadingToast: () => store.dismissLoadingToast(),\n showProgressToast: (title, detail, progress, position) =>\n store.showProgress(title, detail ?? null, progress ?? 0, position ?? null),\n updateProgressToast: (title, detail, progress) => store.updateProgress(title, detail, progress),\n dismissProgressToast: () => store.dismissProgress(),\n refreshBottomInsets: (animate = true) => store.refreshBottomInsets(animate),\n setBottomClearance: (px) => {\n state.clearance = Math.max(0, px);\n },\n setBottomOverlay: (key, height) => store.setBottomOverlay(key, height),\n dismissAll: () => store.dismissAll(),\n };\n host.attachFeature(FEATURE, state);\n host.registerLayerItem('feedback', { key: FEATURE, element: <ToastLayer state={state} host={host} />, order: 0 });\n return state;\n}\n\n/** The toast service of a host (created once as a host feature). */\nexport function toastServiceOf(host: G9HostHandle): G9ToastService {\n const existing = host.getFeature(FEATURE) as State | undefined;\n return (existing ?? createToastService(host)).service;\n}\n\n/** The toasts of the nearest `G9Host` (MAUI `G9ToastHelper`), in its `feedback` layer above popups and sheets. */\nexport function useG9Toasts(): G9ToastService {\n return toastServiceOf(useG9Host());\n}\n\n/** The toasts of the active host, for code outside components. Throws `host-missing` without a host. */\nexport function g9Toasts(): G9ToastService {\n return toastServiceOf(g9Hosts.require());\n}\n"],"names":["g9ToastMetrics","Object","FEATURE","ACCENT","paletteColor","palette","token","alpha","formatColor","withAlpha","ToastCountdown","props","run","setRun","useState","useEffect","t","setTimeout","clearTimeout","view","ToastCard","_entry_icon","entry","store","glyphs","useG9Settings","action","useG9Press","useG9Theme","fillToken","onToken","fill","on","icon","offset","direction","useG9Direction","g9RowStyle","g9Ms","g9ToastTimings","G9IconSlot","text","anchorStyle","position","top","bottom","m","style","ToastLayer","_sheets_service","state","host","sheets","sheetOpen","snap","useSyncExternalStore","l","insets","useG9HostInsets","culture","useG9Culture","rtl","executor","useG9Executor","clearance","setClearance","positions","Set","glide","percent","p","toNativeDigits","Math","bottomStack","G9ActivityIndicator","createToastService","G9ToastStore","cb","ms","startTimer","h","stopTimer","message","type","options","id","text1","title","detail","progress","animate","px","key","height","toastServiceOf","existing","useG9Toasts","useG9Host","g9Toasts","g9Hosts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/toast/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/toast/store.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { g9Ms } from "@g9tm/lynxcontrols-foundation";
1
2
  function _define_property(obj, key, value) {
2
3
  if (key in obj) Object.defineProperty(obj, key, {
3
4
  value: value,
@@ -102,7 +103,7 @@ class G9ToastStore {
102
103
  };
103
104
  this.emit();
104
105
  }
105
- }, g9ToastTimings.enterMs);
106
+ }, g9Ms(g9ToastTimings.enterMs));
106
107
  this.arm(record);
107
108
  this.emit();
108
109
  return {
@@ -250,7 +251,7 @@ class G9ToastStore {
250
251
  this.records = this.records.filter((r)=>r !== record);
251
252
  record.closed();
252
253
  this.emit();
253
- }, g9ToastTimings.exitMs);
254
+ }, g9Ms(g9ToastTimings.exitMs));
254
255
  }
255
256
  hold(hold) {
256
257
  this.holds.push(hold);