@rdlabo/ionic-theme-ios27 0.1.0 → 0.2.1-beta.pr185.sha0793981f6cf4

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 (148) hide show
  1. package/README.md +34 -8
  2. package/dist/css/components/ion-button.css +1 -1
  3. package/dist/css/components/ion-fab.css +1 -1
  4. package/dist/css/components/ion-list.css +1 -1
  5. package/dist/css/components/ion-menu.css +1 -1
  6. package/dist/css/components/ion-searchbar.css +1 -1
  7. package/dist/css/components/ion-tabs.css +1 -1
  8. package/dist/css/components/ion-toolbar.css +1 -1
  9. package/dist/css/ionic-theme-ios27.css +1 -1
  10. package/dist/css/md-ion-list-inset.css +1 -1
  11. package/dist/css/utils/translucent.css +1 -1
  12. package/dist/index.d.ts +1 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -2
  15. package/dist/native/components/searchable-tabs.d.ts +2 -0
  16. package/dist/native/components/searchable-tabs.d.ts.map +1 -1
  17. package/dist/native/components/searchable-tabs.js +131 -21
  18. package/dist/native/definitions.d.ts +19 -0
  19. package/dist/native/definitions.d.ts.map +1 -1
  20. package/dist/native/index.d.ts +4 -3
  21. package/dist/native/index.d.ts.map +1 -1
  22. package/dist/native/index.js +22 -9
  23. package/dist/native/lifecycle.d.ts +4 -0
  24. package/dist/native/lifecycle.d.ts.map +1 -0
  25. package/dist/native/lifecycle.js +34 -0
  26. package/dist/native/runtime.d.ts +2 -2
  27. package/dist/native/runtime.d.ts.map +1 -1
  28. package/dist/native/runtime.js +57 -11
  29. package/dist/tab-bar-searchable/animations/enter.d.ts +1 -1
  30. package/dist/tab-bar-searchable/animations/enter.d.ts.map +1 -1
  31. package/dist/tab-bar-searchable/animations/enter.js +1 -1
  32. package/dist/tab-bar-searchable/animations/leave.d.ts +1 -1
  33. package/dist/tab-bar-searchable/animations/leave.d.ts.map +1 -1
  34. package/dist/tab-bar-searchable/animations/leave.js +1 -1
  35. package/dist/tab-bar-searchable/index.d.ts +2 -2
  36. package/dist/tab-bar-searchable/index.d.ts.map +1 -1
  37. package/dist/tab-bar-searchable/index.js +2 -3
  38. package/dist/transition/ios.transition.d.ts +6 -1
  39. package/dist/transition/ios.transition.d.ts.map +1 -1
  40. package/dist/transition/ios.transition.js +10 -385
  41. package/docs/features.md +3 -1
  42. package/docs/ios-adaptive.md +20 -21
  43. package/docs/native-ui-shell.md +117 -3
  44. package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellSearchController.swift +243 -64
  45. package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellTabBar.swift +77 -6
  46. package/ios/Sources/IonicNativeUIShellPlugin/IonicNativeUIShellPlugin.swift +106 -11
  47. package/ios/Tests/IonicNativeUIShellPluginTests/ShellSnapshotTests.swift +258 -2
  48. package/node_modules/@rdlabo/ionic-theme-utils/LICENSE +21 -0
  49. package/node_modules/@rdlabo/ionic-theme-utils/README.md +28 -0
  50. package/node_modules/@rdlabo/ionic-theme-utils/dist/dom.d.ts +3 -0
  51. package/node_modules/@rdlabo/ionic-theme-utils/dist/dom.d.ts.map +1 -0
  52. package/node_modules/@rdlabo/ionic-theme-utils/dist/dom.js +13 -0
  53. package/node_modules/@rdlabo/ionic-theme-utils/dist/dom.js.map +1 -0
  54. package/node_modules/@rdlabo/ionic-theme-utils/dist/focus-controller.d.ts +6 -0
  55. package/node_modules/@rdlabo/ionic-theme-utils/dist/focus-controller.d.ts.map +1 -0
  56. package/node_modules/@rdlabo/ionic-theme-utils/dist/focus-controller.js +37 -0
  57. package/node_modules/@rdlabo/ionic-theme-utils/dist/focus-controller.js.map +1 -0
  58. package/node_modules/@rdlabo/ionic-theme-utils/dist/index.d.ts +13 -0
  59. package/node_modules/@rdlabo/ionic-theme-utils/dist/index.d.ts.map +1 -0
  60. package/node_modules/@rdlabo/ionic-theme-utils/dist/index.js +11 -0
  61. package/node_modules/@rdlabo/ionic-theme-utils/dist/index.js.map +1 -0
  62. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/animations/ios.enter.d.ts +0 -1
  63. package/node_modules/@rdlabo/ionic-theme-utils/dist/popover/animations/ios.enter.d.ts.map +1 -0
  64. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/animations/ios.enter.js +8 -5
  65. package/node_modules/@rdlabo/ionic-theme-utils/dist/popover/animations/ios.enter.js.map +1 -0
  66. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/animations/ios.leave.d.ts.map +1 -1
  67. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/animations/ios.leave.js +11 -5
  68. package/node_modules/@rdlabo/ionic-theme-utils/dist/popover/animations/ios.leave.js.map +1 -0
  69. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/callout-surface.js +1 -0
  70. package/node_modules/@rdlabo/ionic-theme-utils/dist/popover/callout-surface.js.map +1 -0
  71. package/node_modules/@rdlabo/ionic-theme-utils/dist/popover/popover-interface.js +2 -0
  72. package/node_modules/@rdlabo/ionic-theme-utils/dist/popover/popover-interface.js.map +1 -0
  73. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/utils.d.ts +1 -0
  74. package/node_modules/@rdlabo/ionic-theme-utils/dist/popover/utils.d.ts.map +1 -0
  75. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/utils.js +3 -2
  76. package/node_modules/@rdlabo/ionic-theme-utils/dist/popover/utils.js.map +1 -0
  77. package/node_modules/@rdlabo/ionic-theme-utils/dist/sheets-of-glass.d.ts +16 -0
  78. package/node_modules/@rdlabo/ionic-theme-utils/dist/sheets-of-glass.d.ts.map +1 -0
  79. package/node_modules/@rdlabo/ionic-theme-utils/dist/sheets-of-glass.js +2 -0
  80. package/node_modules/@rdlabo/ionic-theme-utils/dist/sheets-of-glass.js.map +1 -0
  81. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/tab-bar-searchable/interfaces.js +1 -0
  82. package/node_modules/@rdlabo/ionic-theme-utils/dist/tab-bar-searchable/interfaces.js.map +1 -0
  83. package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/tab-bar-searchable/utils.js +1 -0
  84. package/node_modules/@rdlabo/ionic-theme-utils/dist/tab-bar-searchable/utils.js.map +1 -0
  85. package/node_modules/@rdlabo/ionic-theme-utils/dist/theme.d.ts +15 -0
  86. package/node_modules/@rdlabo/ionic-theme-utils/dist/theme.d.ts.map +1 -0
  87. package/node_modules/@rdlabo/ionic-theme-utils/dist/theme.js +49 -0
  88. package/node_modules/@rdlabo/ionic-theme-utils/dist/theme.js.map +1 -0
  89. package/node_modules/@rdlabo/ionic-theme-utils/dist/transition/ios.transition.d.ts +18 -0
  90. package/node_modules/@rdlabo/ionic-theme-utils/dist/transition/ios.transition.d.ts.map +1 -0
  91. package/node_modules/@rdlabo/ionic-theme-utils/dist/transition/ios.transition.js +412 -0
  92. package/node_modules/@rdlabo/ionic-theme-utils/dist/transition/ios.transition.js.map +1 -0
  93. package/node_modules/@rdlabo/ionic-theme-utils/package.json +64 -0
  94. package/node_modules/@rdlabo/ionic-theme-utils/src/dom.spec.ts +19 -0
  95. package/node_modules/@rdlabo/ionic-theme-utils/src/dom.ts +16 -0
  96. package/node_modules/@rdlabo/ionic-theme-utils/src/focus-controller.ts +38 -0
  97. package/node_modules/@rdlabo/ionic-theme-utils/src/index.ts +59 -0
  98. package/{src → node_modules/@rdlabo/ionic-theme-utils/src}/popover/animations/ios.enter.ts +7 -5
  99. package/{src → node_modules/@rdlabo/ionic-theme-utils/src}/popover/animations/ios.leave.ts +14 -5
  100. package/node_modules/@rdlabo/ionic-theme-utils/src/popover/utils.spec.ts +58 -0
  101. package/{src → node_modules/@rdlabo/ionic-theme-utils/src}/popover/utils.ts +4 -2
  102. package/node_modules/@rdlabo/ionic-theme-utils/src/sheets-of-glass.ts +17 -0
  103. package/node_modules/@rdlabo/ionic-theme-utils/src/styles/index.scss +1 -0
  104. package/node_modules/@rdlabo/ionic-theme-utils/src/styles/md-ion-list-inset.scss +20 -0
  105. package/node_modules/@rdlabo/ionic-theme-utils/src/styles/structured-list.scss +310 -0
  106. package/node_modules/@rdlabo/ionic-theme-utils/src/tab-bar-searchable/utils.spec.ts +56 -0
  107. package/node_modules/@rdlabo/ionic-theme-utils/src/theme.ts +51 -0
  108. package/node_modules/@rdlabo/ionic-theme-utils/src/transition/ios.transition.spec.ts +52 -0
  109. package/node_modules/@rdlabo/ionic-theme-utils/src/transition/ios.transition.ts +542 -0
  110. package/package.json +13 -5
  111. package/src/index.ts +4 -2
  112. package/src/native/components/searchable-tabs.ts +142 -22
  113. package/src/native/definitions.ts +34 -0
  114. package/src/native/index.ts +38 -11
  115. package/src/native/lifecycle.ts +38 -0
  116. package/src/native/runtime.ts +60 -10
  117. package/src/styles/components/ion-button.scss +21 -10
  118. package/src/styles/components/ion-fab.scss +10 -4
  119. package/src/styles/components/ion-list.scss +12 -3
  120. package/src/styles/components/ion-menu.scss +17 -10
  121. package/src/styles/components/ion-searchbar.scss +1 -1
  122. package/src/styles/components/ion-tabs.scss +14 -10
  123. package/src/styles/components/ion-toolbar.scss +9 -10
  124. package/src/styles/md-ion-list-inset.scss +2 -2
  125. package/src/styles/utils/dark/ion-list.scss +1 -1
  126. package/src/styles/utils/translucent.scss +44 -0
  127. package/src/tab-bar-searchable/animations/enter.ts +1 -2
  128. package/src/tab-bar-searchable/animations/leave.ts +1 -2
  129. package/src/tab-bar-searchable/index.ts +12 -4
  130. package/src/transition/ios.transition.ts +14 -473
  131. package/dist/css/utils/structured-list.css +0 -1
  132. package/dist/popover/animations/ios.enter.d.ts.map +0 -1
  133. package/dist/popover/popover-interface.js +0 -1
  134. package/dist/popover/utils.d.ts.map +0 -1
  135. package/src/styles/utils/structured-list.scss +0 -223
  136. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/animations/ios.leave.d.ts +0 -0
  137. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/callout-surface.d.ts +0 -0
  138. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/callout-surface.d.ts.map +0 -0
  139. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/popover-interface.d.ts +0 -0
  140. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/popover/popover-interface.d.ts.map +0 -0
  141. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/tab-bar-searchable/interfaces.d.ts +0 -0
  142. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/tab-bar-searchable/interfaces.d.ts.map +0 -0
  143. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/tab-bar-searchable/utils.d.ts +0 -0
  144. /package/{dist → node_modules/@rdlabo/ionic-theme-utils/dist}/tab-bar-searchable/utils.d.ts.map +0 -0
  145. /package/{src → node_modules/@rdlabo/ionic-theme-utils/src}/popover/callout-surface.ts +0 -0
  146. /package/{src → node_modules/@rdlabo/ionic-theme-utils/src}/popover/popover-interface.ts +0 -0
  147. /package/{src → node_modules/@rdlabo/ionic-theme-utils/src}/tab-bar-searchable/interfaces.ts +0 -0
  148. /package/{src → node_modules/@rdlabo/ionic-theme-utils/src}/tab-bar-searchable/utils.ts +0 -0
@@ -1 +1 @@
1
- ion-list.md ion-item:has(ion-input.input-fill-outline),ion-list.md ion-item:has(ion-textarea.textarea-fill-outline),ion-list.md ion-item:has(ion-select:is([helpertext]:not([helpertext=""]),[errortext]:not([errortext=""]))),ion-list.md ion-item:has(ion-input .input-bottom>:is(.helper-text:not(:empty),.error-text:not(:empty),.counter:not(:empty))),ion-list.md ion-item:has(ion-textarea .textarea-bottom>:is(.helper-text:not(:empty),.error-text:not(:empty),.counter:not(:empty))){--inner-border-width: 0;--inner-padding-bottom: 4px}ion-list.md ion-item ion-input .input-bottom:not(:has(>:is(.helper-text:not(:empty),.error-text:not(:empty),.counter:not(:empty)))),ion-list.md ion-item ion-textarea .textarea-bottom:not(:has(>:is(.helper-text:not(:empty),.error-text:not(:empty),.counter:not(:empty)))){display:none}ion-list.md.list-inset{background:rgba(0,0,0,0)}ion-list.md.list-inset ion-list-header{display:flex;align-items:center}ion-list.md.list-inset ion-list-header ion-label{font-size:1rem;line-height:1.29rem;font-weight:600;margin:8px 4px 4px}ion-list.md.list-inset ion-list-header ion-label:not(.ion-color){color:var(--ion-color-medium-tint)}ion-list.md.list-inset ion-list-header ion-button{margin-top:8px}ion-list.md.list-inset ion-list-header ion-note{font-size:.76rem;line-height:1.06rem;font-weight:400;margin:8px 16px 4px 0}ion-list.md.list-inset ion-list-header ion-note:not(.ion-color){--color: var(--ion-color-medium-tint)}ion-list.md.list-inset ion-item-group.item-group-header{border-radius:16px}ion-list.md.list-inset ion-item-group.item-group-header>ion-item{--inner-padding-end: 0;--inner-border-width: 0}ion-list.md.list-inset ion-item-group.item-group-header>ion-item::part(native){padding-inline:0}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label{width:100%;margin:0;text-align:start;white-space:normal;padding:16px 20px}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-header.header-collapse-condense>ion-toolbar{--min-height: 0;visibility:hidden}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-icon{font-size:2.82rem;border-radius:20%;padding:6px;vertical-align:top}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-icon:not(.ion-color){color:#fff}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label h2{font-size:1.29rem;font-weight:700;line-height:1.53rem;margin:20px 0 8px}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-text{display:block;font-size:1rem;line-height:1.29rem}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-text:not(.ion-color){color:var(--ion-color-step-500, var(--ion-text-color-step-500, #808080))}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group){display:block;border-radius:16px;overflow:hidden}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):has(>.radio-group-top){display:flex;flex-direction:column;border-radius:0;overflow:visible}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):has(>.radio-group-top)>.radio-group-top{order:1;font-size:.9rem;padding-block-start:8px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):has(>.radio-group-top)>ion-item:first-of-type{--border-radius: 16px 16px 0 0}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):has(>.radio-group-top)>ion-item:last-of-type{--border-radius: 0 0 16px 16px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):not(:first-of-type){margin-top:16px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))::part(container){flex-direction:column;justify-content:center;padding-top:14px;padding-bottom:14px;min-height:64px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))>ion-label,ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))>ion-note{width:auto;align-self:flex-start}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))>ion-label{margin:0;font-weight:500;font-size:1rem;line-height:1.29rem}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))>ion-note{font-size:.88rem;line-height:1.18rem}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item ion-text[slot=end]{padding-left:8px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item.item-disabled{--detail-icon-opacity: 0.1;opacity:1}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item.item-disabled>*{opacity:.4}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item ion-button[slot=end].ion-align-self-end{transform:translateY(-7px)}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item ion-button[slot=end] ion-icon[slot=icon-only]{font-size:1.2rem;transform:translateY(4px)}ion-list.md.list-inset>ion-note{font-size:.76rem;line-height:1.06rem;font-weight:400;display:block;margin:8px calc(var(--ion-safe-area-right, 0) + 8px) 8px calc(var(--ion-safe-area-left, 0) + 8px)}ion-list.md.list-inset>ion-note:not(.ion-color){--color: var(--ion-color-medium-tint)}ion-list.md.list-inset :is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item>ion-input[labelplacement=floating]{transition:transform 200ms ease}ion-list.md.list-inset :is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item>ion-input[labelplacement=floating]:not(.label-floating){transform:translateY(-7px)}ion-list.md.list-inset :is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item>ion-input[labelplacement=floating].label-floating{transform:translateY(-4px)}
1
+ ion-list.md ion-item:has(ion-input.input-fill-outline),ion-list.md ion-item:has(ion-textarea.textarea-fill-outline),ion-list.md ion-item:has(ion-select:is([helpertext]:not([helpertext=""]),[errortext]:not([errortext=""]))),ion-list.md ion-item:has(ion-input .input-bottom>:is(.helper-text:not(:empty),.error-text:not(:empty),.counter:not(:empty))),ion-list.md ion-item:has(ion-textarea .textarea-bottom>:is(.helper-text:not(:empty),.error-text:not(:empty),.counter:not(:empty))){--inner-border-width: 0;--inner-padding-bottom: 4px}ion-list.md ion-item ion-input .input-bottom:not(:has(>:is(.helper-text:not(:empty),.error-text:not(:empty),.counter:not(:empty)))),ion-list.md ion-item ion-textarea .textarea-bottom:not(:has(>:is(.helper-text:not(:empty),.error-text:not(:empty),.counter:not(:empty)))){display:none}ion-list.md.list-inset{background:rgba(0,0,0,0)}ion-list.md.list-inset ion-list-header{display:flex;align-items:center}ion-list.md.list-inset ion-list-header ion-label{font-size:1rem;line-height:1.29rem;font-weight:600;margin:8px 4px 4px}ion-list.md.list-inset ion-list-header ion-label:not(.ion-color){color:var(--ion-color-medium-tint)}ion-list.md.list-inset ion-list-header ion-button{margin-top:8px}ion-list.md.list-inset ion-list-header ion-note{font-size:.76rem;line-height:1.06rem;font-weight:400;margin-block:8px 4px;margin-inline:0 16px}ion-list.md.list-inset ion-list-header ion-note:not(.ion-color){--color: var(--ion-color-medium-tint)}ion-list.md.list-inset ion-item-group.item-group-header{border-radius:16px}ion-list.md.list-inset ion-item-group.item-group-header>ion-item{--inner-padding-end: 0;--inner-border-width: 0}ion-list.md.list-inset ion-item-group.item-group-header>ion-item::part(native){padding-inline:0}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label{width:100%;margin:0;text-align:start;white-space:normal;padding:16px 20px}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-header.header-collapse-condense>ion-toolbar{--min-height: 0;visibility:hidden}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-icon{font-size:2.82rem;border-radius:20%;padding:6px;vertical-align:top}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-icon:not(.ion-color){color:#fff}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label h2{font-size:1.29rem;font-weight:700;line-height:1.53rem;margin:20px 0 8px}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-text{display:block;font-size:1rem;line-height:1.29rem}ion-list.md.list-inset ion-item-group.item-group-header>ion-item>ion-label ion-text:not(.ion-color){color:var(--ion-color-step-500, var(--ion-text-color-step-500, #808080))}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group){display:block;border-radius:16px;overflow:hidden}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):has(>.radio-group-top){display:flex;flex-direction:column;border-radius:0;overflow:visible}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):has(>.radio-group-top)>.radio-group-top{order:1;font-size:.9rem;padding-block-start:8px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):has(>.radio-group-top)>ion-item:first-of-type{--border-radius: 16px 16px 0 0}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):has(>.radio-group-top)>ion-item:last-of-type{--border-radius: 0 0 16px 16px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group):not(:first-of-type){margin-top:16px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))::part(container){flex-direction:column;justify-content:center;padding-top:14px;padding-bottom:14px;min-height:64px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))>ion-label,ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))>ion-note{width:auto;align-self:flex-start}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))>ion-label{margin:0;font-weight:500;font-size:1rem;line-height:1.29rem}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item:has(>ion-label:not([slot])):has(>ion-note:not([slot]))>ion-note{font-size:.88rem;line-height:1.18rem}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item ion-text[slot=end]{padding-inline-start:8px}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item.item-disabled{--detail-icon-opacity: 0.1;opacity:1}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item.item-disabled>*{opacity:.4}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item ion-button[slot=end].ion-align-self-end{transform:translateY(-7px)}ion-list.md.list-inset>:is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item ion-button[slot=end] ion-icon[slot=icon-only]{font-size:1.2rem;transform:translateY(4px)}ion-list.md.list-inset>ion-note{margin-block:8px;margin-inline:calc(var(--ion-safe-area-left, 0) + 8px) calc(var(--ion-safe-area-right, 0) + 8px)}ion-list.md.list-inset>ion-note:dir(rtl){margin-inline:calc(var(--ion-safe-area-right, 0) + 8px) calc(var(--ion-safe-area-left, 0) + 8px)}ion-list.md.list-inset>ion-note{font-size:.76rem;line-height:1.06rem;font-weight:400;display:block}ion-list.md.list-inset>ion-note:not(.ion-color){--color: var(--ion-color-medium-tint)}ion-list.md.list-inset :is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item>ion-input[labelplacement=floating]{transition:transform 200ms ease}ion-list.md.list-inset :is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item>ion-input[labelplacement=floating]:not(.label-floating){transform:translateY(-7px)}ion-list.md.list-inset :is(ion-item-group,ion-reorder-group,ion-accordion-group,ion-radio-group) ion-item>ion-input[labelplacement=floating].label-floating{transform:translateY(-4px)}
@@ -1 +1 @@
1
- ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent .header-background,ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent .footer-background,ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent .header-background,ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent .footer-background{backdrop-filter:none}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent ion-toolbar,ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent ion-toolbar{--border-width: 0;--background: transparent;--opacity: 1}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent ion-toolbar::part(background),ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent ion-toolbar::part(background){--opacity: 0}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent ion-toolbar ion-title,ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent ion-toolbar ion-title{transform:translateY(0)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent:not(.header-collapse-condense):has(>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled)>*)::before{height:100%;background:rgba(var(--ion-color-base-rgb, var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb))), calc(0.2 * var(--opacity-scale, 1)));backdrop-filter:blur(8px)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent:not(.header-collapse-condense):not(.ion-no-border)>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled):has(>*):last-of-type{--border-width: 0 0 0.5px;--border-color: var(--ion-toolbar-border-color, rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.08))}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent:not(.header-collapse-condense):not(.ion-no-border)>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled):has(>*):last-of-type::part(background){--opacity: 1;background:rgba(0,0,0,0)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-collapse-main ion-toolbar.in-toolbar ion-title{transition:opacity .5s ease-in-out,color .5s ease-in-out,text-shadow .5s ease-in-out,transform .5s ease-in-out}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title{color:rgba(0,0,0,0);text-shadow:0 0 1px var(--ion-color-base, var(--ion-toolbar-color, var(--ion-text-color, #000)));transform:translateY(8px)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent::before,ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent::after,ion-content.ios:not(.ios-theme-disabled,.ios26-disabled).content-fullscreen::part(background)::before{content:"";position:absolute;width:100%;pointer-events:none;z-index:1}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent::before{z-index:2;top:0;height:var(--ion-safe-area-top)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent::after{z-index:2;top:0;height:100%;backdrop-filter:blur(2px);mask-image:linear-gradient(rgb(0, 0, 0) 80%, rgba(0, 0, 0, 0) 100%);mask-composite:intersect}.ion-page:has(>ion-header.header-translucent)>ion-content.content-fullscreen::part(background)::before{z-index:2;top:0;height:var(--offset-top, 0px);background:linear-gradient(in oklab, rgba(var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb)), 0.5) 0%, rgba(var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb)), 0.2) 50%, rgba(var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb)), 0) 100%)}
1
+ ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent .header-background,ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent .footer-background,ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent .header-background,ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent .footer-background{backdrop-filter:none}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent ion-toolbar,ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent ion-toolbar{--border-width: 0;--background: transparent;--opacity: 1}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent ion-toolbar::part(background),ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent ion-toolbar::part(background){--opacity: 0}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent ion-toolbar ion-title,ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent ion-toolbar ion-title{transform:translateY(0)}.ion-page:has(>ion-content.ios.content-fullscreen)>ion-header.ios:not(.ios-theme-disabled,.ios26-disabled):not(.header-translucent) ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled),.ion-page:has(>ion-content.ios.content-fullscreen)>ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled):not(.footer-translucent) ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled){--background: transparent;--opacity: 1}.ion-page:has(>ion-content.ios.content-fullscreen)>ion-header.ios:not(.ios-theme-disabled,.ios26-disabled):not(.header-translucent) ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled)::part(background),.ion-page:has(>ion-content.ios.content-fullscreen)>ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled):not(.footer-translucent) ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled)::part(background){--opacity: 0}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent:not(.header-collapse-condense):has(>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled)>*)::before{height:100%;background:rgba(var(--ion-color-base-rgb, var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb))), calc(0.2 * var(--opacity-scale, 1)));backdrop-filter:blur(8px)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent:not(.header-collapse-condense):not(.ion-no-border)>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled):has(>*):last-of-type{--border-width: 0 0 0.5px;--border-color: var(--ion-toolbar-border-color, rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.08))}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent:not(.header-collapse-condense):not(.ion-no-border)>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled):has(>*):last-of-type::part(background){--opacity: 1;background:rgba(0,0,0,0)}.ion-page:has(>ion-content.ios.content-fullscreen)>ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent:has(>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled)>*)::before{bottom:0;height:100%;background:rgba(var(--ion-color-base-rgb, var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb))), calc(0.2 * var(--opacity-scale, 1)));backdrop-filter:blur(8px)}.ion-page:has(>ion-content.ios.content-fullscreen)>ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent:not(.ion-no-border)>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled):has(>*):first-of-type{--border-width: 0.5px 0 0;--border-color: var(--ion-toolbar-border-color, rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.08))}.ion-page:has(>ion-content.ios.content-fullscreen)>ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent:not(.ion-no-border)>ion-toolbar.ios:not(.ios-theme-disabled,.ios26-disabled):has(>*):first-of-type::part(background){--opacity: 1;background:rgba(0,0,0,0)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-collapse-main ion-toolbar.in-toolbar ion-title{transition:opacity .5s ease-in-out,color .5s ease-in-out,text-shadow .5s ease-in-out,transform .5s ease-in-out}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title{color:rgba(0,0,0,0);text-shadow:0 0 1px var(--ion-color-base, var(--ion-toolbar-color, var(--ion-text-color, #000)));transform:translateY(8px)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent::before,ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent::after,.ion-page:has(>ion-content.ios.content-fullscreen)>ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent::before,.ion-page:has(>ion-content.ios.content-fullscreen)>ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent::after,ion-content.ios:not(.ios-theme-disabled,.ios26-disabled).content-fullscreen::part(background)::before{content:"";position:absolute;width:100%;pointer-events:none;z-index:1}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent::before{z-index:2;top:0;height:var(--ion-safe-area-top)}ion-header.ios:not(.ios-theme-disabled,.ios26-disabled).header-translucent::after{z-index:2;top:0;height:100%;backdrop-filter:blur(2px);mask-image:linear-gradient(rgb(0, 0, 0) 80%, rgba(0, 0, 0, 0) 100%);mask-composite:intersect}.ion-page:has(>ion-content.ios.content-fullscreen)>ion-footer.ios:not(.ios-theme-disabled,.ios26-disabled).footer-translucent::after{z-index:2;bottom:0;height:100%;backdrop-filter:blur(2px);mask-image:linear-gradient(rgba(0, 0, 0, 0) 0%, rgb(0, 0, 0) 20%);mask-composite:intersect}.ion-page:has(>ion-header.header-translucent)>ion-content.content-fullscreen::part(background)::before{z-index:2;top:0;height:var(--offset-top, 0px);background:linear-gradient(in oklab, rgba(var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb)), 0.5) 0%, rgba(var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb)), 0.2) 50%, rgba(var(--ios-theme-content-box-shadow-rgb, var(--ios26-content-box-shadow-rgb)), 0) 100%)}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { registeredEffect } from './sheets-of-glass/interfaces';
2
2
  export * from './sheets-of-glass/interfaces';
3
- export { iosEnterAnimation as popoverEnterAnimation } from './popover/animations/ios.enter';
4
- export { iosLeaveAnimation as popoverLeaveAnimation } from './popover/animations/ios.leave';
3
+ export { iosPopoverEnterAnimation as popoverEnterAnimation, iosPopoverLeaveAnimation as popoverLeaveAnimation, } from '@rdlabo/ionic-theme-utils';
5
4
  export * from './tab-bar-searchable';
6
5
  export * from './searchbar';
7
6
  export * from './transition/ios.transition';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,eAAO,MAAM,oBAAoB,GAAI,eAAe,WAAW,KAAG,gBAAgB,GAAG,SAyBpF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EACL,wBAAwB,IAAI,qBAAqB,EACjD,wBAAwB,IAAI,qBAAqB,GAClD,MAAM,2BAA2B,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,eAAO,MAAM,oBAAoB,GAAI,eAAe,WAAW,KAAG,gBAAgB,GAAG,SAyBpF,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { registerEffect } from './sheets-of-glass';
2
2
  export * from './sheets-of-glass/interfaces';
3
- export { iosEnterAnimation as popoverEnterAnimation } from './popover/animations/ios.enter';
4
- export { iosLeaveAnimation as popoverLeaveAnimation } from './popover/animations/ios.leave';
3
+ export { iosPopoverEnterAnimation as popoverEnterAnimation, iosPopoverLeaveAnimation as popoverLeaveAnimation, } from '@rdlabo/ionic-theme-utils';
5
4
  export * from './tab-bar-searchable';
6
5
  export * from './searchbar';
7
6
  export * from './transition/ios.transition';
@@ -6,7 +6,9 @@ export declare const createSearchSupport: (doc: Document, id: (element: Element)
6
6
  keepSearchTabsVisible(): void;
7
7
  decorate(candidates: Candidate[], blocked: (element: HTMLElement) => boolean): Candidate[];
8
8
  projected: (binding: NativeSearchBinding) => boolean;
9
+ hasActive(): boolean;
9
10
  begin(binding: NativeSearchBinding, revision: number): void;
11
+ setStatus(binding: NativeSearchBinding, active: boolean, focused?: boolean): void;
10
12
  release(element: HTMLElement): void;
11
13
  reject(ids: string[]): void;
12
14
  event(event: ShellSearchEvent): void;
@@ -1 +1 @@
1
- {"version":3,"file":"searchable-tabs.d.ts","sourceRoot":"","sources":["../../../src/native/components/searchable-tabs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAA0B,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAmB/E,eAAO,MAAM,mBAAmB,GAAI,KAAK,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,EAAE,UAAU,MAAM,IAAI;sBA8FnF,OAAO;;yBAgBJ,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,SAAS,EAAE;yBA3GhE,mBAAmB;mBAuO9B,mBAAmB,YAAY,MAAM;qBAInC,WAAW;gBAGhB,MAAM,EAAE;iBAUP,gBAAgB;oBAqCb,mBAAmB;;CAkBtC,CAAC"}
1
+ {"version":3,"file":"searchable-tabs.d.ts","sourceRoot":"","sources":["../../../src/native/components/searchable-tabs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAA0B,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAmB/E,eAAO,MAAM,mBAAmB,GAAI,KAAK,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,EAAE,UAAU,MAAM,IAAI;sBA8InF,OAAO;;yBAmBJ,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,SAAS,EAAE;yBAlJhE,mBAAmB;;mBAuU9B,mBAAmB,YAAY,MAAM;uBAKjC,mBAAmB,UAAU,OAAO;qBAUtC,WAAW;gBAGhB,MAAM,EAAE;iBASP,gBAAgB;oBAqCb,mBAAmB;;CAoBtC,CAAC"}
@@ -4,7 +4,52 @@ import { iconSource } from '../shared/icons';
4
4
  export const createSearchSupport = (doc, id, schedule) => {
5
5
  const states = new Map();
6
6
  let keyboardVisible = false;
7
+ let heldKeyboardResize = null;
8
+ let keyboardResizeGeneration = 0;
9
+ const keyboardPlugin = () => doc.defaultView?.Capacitor?.Plugins?.Keyboard;
7
10
  const projected = (binding) => binding.footer.hasAttribute(marker);
11
+ const holdKeyboardResize = () => {
12
+ const keyboard = keyboardPlugin();
13
+ if (!keyboard?.setResizeMode || heldKeyboardResize !== null)
14
+ return;
15
+ const setResizeMode = keyboard.setResizeMode.bind(keyboard);
16
+ const generation = ++keyboardResizeGeneration;
17
+ heldKeyboardResize = 'native';
18
+ void (async () => {
19
+ let restoreMode = 'native';
20
+ try {
21
+ const current = await keyboard.getResizeMode?.();
22
+ if (typeof current?.mode === 'string')
23
+ restoreMode = current.mode;
24
+ }
25
+ catch {
26
+ }
27
+ if (generation !== keyboardResizeGeneration)
28
+ return;
29
+ heldKeyboardResize = restoreMode;
30
+ try {
31
+ await setResizeMode({ mode: 'none' });
32
+ }
33
+ catch {
34
+ if (generation === keyboardResizeGeneration)
35
+ heldKeyboardResize = null;
36
+ return;
37
+ }
38
+ if (generation !== keyboardResizeGeneration)
39
+ void setResizeMode({ mode: restoreMode }).catch(() => undefined);
40
+ })();
41
+ };
42
+ const hasActiveProjection = () => [...states.keys()].some((binding) => binding.active && projected(binding));
43
+ const releaseKeyboardResize = () => {
44
+ if (hasActiveProjection())
45
+ return;
46
+ keyboardResizeGeneration++;
47
+ const mode = heldKeyboardResize;
48
+ heldKeyboardResize = null;
49
+ if (!mode)
50
+ return;
51
+ void keyboardPlugin()?.setResizeMode?.({ mode });
52
+ };
8
53
  const isCurrent = (state) => state.bar.isConnected &&
9
54
  state.binding.footer.querySelector('ion-searchbar') === state.bar &&
10
55
  state.bar.querySelector('input.searchbar-input') === state.input;
@@ -105,8 +150,10 @@ export const createSearchSupport = (doc, id, schedule) => {
105
150
  return {
106
151
  keyboard(visible) {
107
152
  keyboardVisible = visible;
108
- if (!visible)
153
+ if (!visible) {
109
154
  states.forEach((state) => (state.keyboardHidden = false));
155
+ releaseKeyboardResize();
156
+ }
110
157
  schedule();
111
158
  },
112
159
  keepSearchTabsVisible() {
@@ -130,6 +177,11 @@ export const createSearchSupport = (doc, id, schedule) => {
130
177
  }
131
178
  }
132
179
  const inactive = [];
180
+ const pageHidden = (element) => !!element.closest('.ion-page-hidden, .ion-page-invisible');
181
+ const retainInactive = (candidate, state, keepAvailable = false) => {
182
+ if (state?.last)
183
+ inactive.push([candidate, { ...state.last, active: false, available: keepAvailable, focused: false }]);
184
+ };
133
185
  for (const binding of bindings) {
134
186
  const candidate = candidates.find((c) => c.element === binding.tabBar);
135
187
  if (!candidate || candidate.control.search || binding.tabBar.getAttribute('slot') !== 'bottom')
@@ -140,10 +192,36 @@ export const createSearchSupport = (doc, id, schedule) => {
140
192
  continue;
141
193
  if (isShellDisabled(fab) || isShellDisabled(binding.footer))
142
194
  continue;
143
- if (blocked(binding.footer) || !visible(binding.trigger) || binding.footer.closest(excluded)) {
144
- const state = states.get(binding);
145
- if (state?.last)
146
- inactive.push([candidate, { ...state.last, active: false, available: false, focused: false }]);
195
+ const pageUnavailable = blocked(binding.footer) || !!binding.footer.closest(excluded);
196
+ const existing = states.get(binding);
197
+ if (pageUnavailable) {
198
+ retainInactive(candidate, existing, !!existing?.last?.available && !pageHidden(binding.footer));
199
+ if (existing?.last)
200
+ continue;
201
+ }
202
+ if (binding.active && existing && isCurrent(existing) && existing.last && !pageUnavailable) {
203
+ const back = binding.footer.querySelector('ion-buttons[slot=start] ion-button');
204
+ if (back && !back.disabled && !back.closest(excluded)) {
205
+ candidate.control.search = {
206
+ ...existing.last,
207
+ active: true,
208
+ available: true,
209
+ focused: binding.focused,
210
+ value: existing.bar.value ?? '',
211
+ placeholder: existing.bar.placeholder ?? '',
212
+ disabled: existing.bar.disabled,
213
+ editSequence: existing.editSequence,
214
+ valueVersion: existing.valueVersion,
215
+ };
216
+ existing.last = candidate.control.search;
217
+ candidate.sources = [binding.tabBar, binding.trigger.closest('ion-fab') ?? binding.trigger, binding.footer];
218
+ candidate.actions.set(existing.last.trigger.id, binding.trigger);
219
+ candidate.actions.set(existing.last.closeId, back);
220
+ continue;
221
+ }
222
+ }
223
+ if (!visible(binding.trigger) && !pageUnavailable) {
224
+ retainInactive(candidate, existing);
147
225
  continue;
148
226
  }
149
227
  const bar = binding.footer.querySelector('ion-searchbar');
@@ -155,10 +233,12 @@ export const createSearchSupport = (doc, id, schedule) => {
155
233
  !binding.footer.matches('ion-footer') ||
156
234
  !inFixedToolbar(bar) ||
157
235
  !inFixedToolbar(back) ||
158
- bar.closest(excluded) ||
236
+ (!pageUnavailable && bar.closest(excluded)) ||
159
237
  !bar.classList.contains('ios') ||
160
- bar.classList.contains('searchbar-classic'))
238
+ bar.classList.contains('searchbar-classic')) {
239
+ retainInactive(candidate, existing);
161
240
  continue;
241
+ }
162
242
  if (bar.color ||
163
243
  back.fill !== 'default' ||
164
244
  back.color ||
@@ -171,14 +251,18 @@ export const createSearchSupport = (doc, id, schedule) => {
171
251
  ![false, 'off', undefined].includes(bar.autocorrect) ||
172
252
  bar.spellcheck ||
173
253
  bar.showClearButton !== 'always' ||
174
- bar.clearIcon)
254
+ bar.clearIcon) {
255
+ retainInactive(candidate, existing);
175
256
  continue;
176
- if (bar.showCancelButton !== 'never' || bar.type !== 'search' || !getComputedStyle(input).backdropFilter.includes('blur'))
257
+ }
258
+ if (bar.showCancelButton !== 'never' || bar.type !== 'search' || !getComputedStyle(input).backdropFilter.includes('blur')) {
259
+ retainInactive(candidate, existing);
177
260
  continue;
261
+ }
178
262
  const fabButton = binding.trigger;
179
263
  const nativeTrigger = fabButton.shadowRoot?.querySelector('[part=native]');
180
- if (binding.trigger.closest(excluded) ||
181
- back.closest(excluded) ||
264
+ if ((!pageUnavailable && binding.trigger.closest(excluded)) ||
265
+ (!pageUnavailable && back.closest(excluded)) ||
182
266
  back.disabled ||
183
267
  fabButton.disabled ||
184
268
  fabButton.color ||
@@ -186,16 +270,20 @@ export const createSearchSupport = (doc, id, schedule) => {
186
270
  fabButton.href ||
187
271
  !nativeTrigger ||
188
272
  getComputedStyle(fabButton).backgroundColor !== 'rgba(0, 0, 0, 0)' ||
189
- !getComputedStyle(nativeTrigger).backdropFilter.includes('blur'))
273
+ !getComputedStyle(nativeTrigger).backdropFilter.includes('blur')) {
274
+ retainInactive(candidate, existing);
190
275
  continue;
276
+ }
277
+ const state = existing ?? install(binding, bar, input);
191
278
  const trigger = readIcon(binding.trigger, binding.trigger, candidate);
192
279
  const searchIcon = bar.querySelector('.searchbar-search-icon');
193
280
  const field = searchIcon && readIcon(searchIcon, bar, candidate);
194
- if (!trigger || !field)
281
+ if (!trigger || !field) {
282
+ retainInactive(candidate, state);
195
283
  continue;
284
+ }
196
285
  field.label = '';
197
286
  field.accessibilityLabel = bar.getAttribute('aria-label') ?? input.getAttribute('aria-label') ?? 'Search';
198
- const state = states.get(binding) ?? install(binding, bar, input);
199
287
  state.layout = JSON.stringify([
200
288
  innerWidth,
201
289
  innerHeight,
@@ -215,16 +303,19 @@ export const createSearchSupport = (doc, id, schedule) => {
215
303
  bar.placeholder,
216
304
  bar.disabled,
217
305
  ]);
218
- if (state.rejectedLayout === state.layout)
306
+ if (state.rejectedLayout === state.layout) {
307
+ retainInactive(candidate, state);
219
308
  continue;
309
+ }
310
+ const available = !pageUnavailable && visible(binding.trigger);
220
311
  candidate.control.search = {
221
312
  id: id(input),
222
313
  field,
223
314
  trigger,
224
315
  closeId: id(back),
225
- active: binding.active,
226
- available: true,
227
- focused: binding.focused,
316
+ active: available && binding.active,
317
+ available,
318
+ focused: available && binding.focused,
228
319
  value: bar.value ?? '',
229
320
  placeholder: bar.placeholder ?? '',
230
321
  disabled: bar.disabled,
@@ -232,9 +323,11 @@ export const createSearchSupport = (doc, id, schedule) => {
232
323
  valueVersion: state.valueVersion,
233
324
  };
234
325
  state.last = candidate.control.search;
235
- candidate.sources = [binding.tabBar, binding.trigger.closest('ion-fab') ?? binding.trigger, binding.footer];
236
- candidate.actions.set(id(binding.trigger), binding.trigger);
237
- candidate.actions.set(id(back), back);
326
+ if (available) {
327
+ candidate.sources = [binding.tabBar, binding.trigger.closest('ion-fab') ?? binding.trigger, binding.footer];
328
+ candidate.actions.set(id(binding.trigger), binding.trigger);
329
+ candidate.actions.set(id(back), back);
330
+ }
238
331
  }
239
332
  for (const [candidate, configuration] of inactive)
240
333
  (_a = candidate.control).search ?? (_a.search = configuration);
@@ -242,11 +335,26 @@ export const createSearchSupport = (doc, id, schedule) => {
242
335
  return candidates.filter((c) => !groups.some((group) => group !== c && group.sources?.some((source) => source.contains(c.element))));
243
336
  },
244
337
  projected,
338
+ hasActive() {
339
+ for (const [binding] of states)
340
+ if (binding.active && projected(binding))
341
+ return true;
342
+ return false;
343
+ },
245
344
  begin(binding, revision) {
246
345
  const state = states.get(binding);
247
346
  if (state)
248
347
  state.minimumRevision = revision;
249
348
  },
349
+ setStatus(binding, active, focused = false) {
350
+ if (!active) {
351
+ this.retire(binding);
352
+ return;
353
+ }
354
+ binding.active = true;
355
+ binding.focused = focused;
356
+ holdKeyboardResize();
357
+ },
250
358
  release(element) {
251
359
  for (const binding of states.keys())
252
360
  if (binding.footer === element)
@@ -309,6 +417,7 @@ export const createSearchSupport = (doc, id, schedule) => {
309
417
  state.input.dispatchEvent(new FocusEvent('blur'));
310
418
  }
311
419
  binding.active = binding.focused = false;
420
+ releaseKeyboardResize();
312
421
  },
313
422
  destroy() {
314
423
  states.forEach((state) => {
@@ -316,6 +425,7 @@ export const createSearchSupport = (doc, id, schedule) => {
316
425
  state.restore();
317
426
  });
318
427
  states.clear();
428
+ releaseKeyboardResize();
319
429
  },
320
430
  };
321
431
  };
@@ -7,10 +7,24 @@ export interface NativeUIShellStatus {
7
7
  updates: number;
8
8
  reason?: string;
9
9
  }
10
+ export interface NativeUIShellOptions {
11
+ enabled?: boolean;
12
+ controls?: NativeUIShellControls;
13
+ }
14
+ export interface NativeUIShellControls {
15
+ tabs?: boolean;
16
+ toolbar?: boolean;
17
+ segment?: boolean;
18
+ fab?: boolean;
19
+ }
10
20
  export interface NativeUIShellHandle {
11
21
  getStatus(): NativeUIShellStatus;
22
+ suspend(): Promise<NativeUIShellSuspension>;
12
23
  destroy(): Promise<void>;
13
24
  }
25
+ export interface NativeUIShellSuspension {
26
+ resume(): Promise<void>;
27
+ }
14
28
  export interface Frame {
15
29
  x: number;
16
30
  y: number;
@@ -89,10 +103,14 @@ export interface ShellActivation {
89
103
  id: string;
90
104
  sequence: number;
91
105
  }
106
+ export interface WebViewMetrics {
107
+ radius: number;
108
+ }
92
109
  export interface NativeUIShellPlugin {
93
110
  configure(): Promise<{
94
111
  supported: boolean;
95
112
  }>;
113
+ getWebViewMetrics(): Promise<WebViewMetrics>;
96
114
  update(snapshot: ShellSnapshot): Promise<{
97
115
  revision: number;
98
116
  rejectedSearches?: string[];
@@ -103,5 +121,6 @@ export interface NativeUIShellPlugin {
103
121
  }): Promise<void>;
104
122
  addListener(name: 'activate', listener: (event: ShellActivation) => void): Promise<PluginListenerHandle>;
105
123
  addListener(name: 'search', listener: (event: ShellSearchEvent) => void): Promise<PluginListenerHandle>;
124
+ addListener(name: 'webViewMetricsChange', listener: (event: WebViewMetrics) => void): Promise<PluginListenerHandle>;
106
125
  }
107
126
  //# sourceMappingURL=definitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/native/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/native/definitions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { NativeUIShellHandle } from './definitions';
2
- export type { NativeUIShellComponent, NativeUIShellHandle, NativeUIShellStatus } from './definitions';
3
- export declare const enableNativeUIShell: () => Promise<NativeUIShellHandle>;
1
+ import type { NativeUIShellHandle, NativeUIShellOptions, WebViewMetrics } from './definitions';
2
+ export type { NativeUIShellComponent, NativeUIShellControls, NativeUIShellHandle, NativeUIShellOptions, NativeUIShellStatus, NativeUIShellSuspension, WebViewMetrics, } from './definitions';
3
+ export declare const configureNativeTransition: () => Promise<WebViewMetrics>;
4
+ export declare const enableNativeUIShell: (options?: NativeUIShellOptions) => Promise<NativeUIShellHandle>;
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/native/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,eAAe,CAAC;AAE9E,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAUtG,eAAO,MAAM,mBAAmB,QAAO,OAAO,CAAC,mBAAmB,CAqBjE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/native/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAuB,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpH,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,GACf,MAAM,eAAe,CAAC;AAWvB,eAAO,MAAM,yBAAyB,QAAa,OAAO,CAAC,cAAc,CAIxE,CAAC;AAGF,eAAO,MAAM,mBAAmB,GAAI,UAAS,oBAAyB,KAAG,OAAO,CAAC,mBAAmB,CA8BnG,CAAC"}
@@ -1,28 +1,41 @@
1
1
  import { Capacitor, registerPlugin } from '@capacitor/core';
2
+ import { setConfig } from '../transition/ios.transition';
3
+ import { bindMetricsLifecycle } from './lifecycle';
2
4
  import { createRuntime } from './runtime';
3
5
  const plugin = registerPlugin('IonicNativeUIShell');
4
6
  let active;
5
7
  const web = (reason) => ({
6
8
  getStatus: () => ({ state: 'web', projected: 0, updates: 0, reason }),
9
+ suspend: async () => ({ resume: async () => { } }),
7
10
  destroy: async () => { },
8
11
  });
9
- export const enableNativeUIShell = () => {
12
+ export const configureNativeTransition = async () => {
13
+ const metrics = typeof document !== 'undefined' && Capacitor.getPlatform() === 'ios' ? await plugin.getWebViewMetrics() : { radius: 0 };
14
+ setConfig({ radius: metrics.radius });
15
+ return metrics;
16
+ };
17
+ export const enableNativeUIShell = (options = {}) => {
18
+ if (options.enabled === false) {
19
+ const current = active;
20
+ active = undefined;
21
+ return current
22
+ ? current.then(async (handle) => {
23
+ await handle.destroy();
24
+ return web('Disabled');
25
+ })
26
+ : Promise.resolve(web('Disabled'));
27
+ }
10
28
  if (typeof document === 'undefined' || Capacitor.getPlatform() !== 'ios')
11
29
  return Promise.resolve(web('Requires Capacitor iOS'));
12
30
  return (active ?? (active = (async () => {
13
31
  try {
32
+ await configureNativeTransition().catch(() => undefined);
14
33
  if (!(await plugin.configure()).supported) {
15
34
  active = undefined;
16
35
  return web('Requires iOS 26 or later');
17
36
  }
18
- const runtime = await createRuntime(document, plugin);
19
- return {
20
- getStatus: runtime.getStatus,
21
- async destroy() {
22
- await runtime.destroy();
23
- active = undefined;
24
- },
25
- };
37
+ const runtime = await createRuntime(document, plugin, options);
38
+ return await bindMetricsLifecycle(runtime, () => plugin.addListener('webViewMetricsChange', (metrics) => setConfig({ radius: metrics.radius })), () => (active = undefined));
26
39
  }
27
40
  catch (error) {
28
41
  active = undefined;
@@ -0,0 +1,4 @@
1
+ import type { PluginListenerHandle } from '@capacitor/core';
2
+ import type { NativeUIShellHandle } from './definitions';
3
+ export declare const bindMetricsLifecycle: (runtime: NativeUIShellHandle, listen: () => Promise<PluginListenerHandle>, deactivate: () => void) => Promise<NativeUIShellHandle>;
4
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/native/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,eAAO,MAAM,oBAAoB,GAC/B,SAAS,mBAAmB,EAC5B,QAAQ,MAAM,OAAO,CAAC,oBAAoB,CAAC,EAC3C,YAAY,MAAM,IAAI,KACrB,OAAO,CAAC,mBAAmB,CA8B7B,CAAC"}
@@ -0,0 +1,34 @@
1
+ export const bindMetricsLifecycle = async (runtime, listen, deactivate) => {
2
+ let listener;
3
+ try {
4
+ listener = await listen();
5
+ }
6
+ catch (error) {
7
+ await runtime.destroy();
8
+ throw error;
9
+ }
10
+ let destroying;
11
+ return {
12
+ getStatus: runtime.getStatus,
13
+ suspend: runtime.suspend,
14
+ destroy() {
15
+ return (destroying ?? (destroying = (async () => {
16
+ let removalError;
17
+ try {
18
+ await listener.remove();
19
+ }
20
+ catch (error) {
21
+ removalError = error;
22
+ }
23
+ try {
24
+ await runtime.destroy();
25
+ }
26
+ finally {
27
+ deactivate();
28
+ }
29
+ if (removalError)
30
+ throw removalError;
31
+ })()));
32
+ },
33
+ };
34
+ };
@@ -1,3 +1,3 @@
1
- import type { NativeUIShellHandle, NativeUIShellPlugin } from './definitions';
2
- export declare const createRuntime: (doc: Document, plugin: NativeUIShellPlugin) => Promise<NativeUIShellHandle>;
1
+ import type { NativeUIShellHandle, NativeUIShellOptions, NativeUIShellPlugin } from './definitions';
2
+ export declare const createRuntime: (doc: Document, plugin: NativeUIShellPlugin, options?: NativeUIShellOptions) => Promise<NativeUIShellHandle>;
3
3
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/native/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkC,mBAAmB,EAAE,mBAAmB,EAAuB,MAAM,eAAe,CAAC;AAkBnI,eAAO,MAAM,aAAa,GAAU,KAAK,QAAQ,EAAE,QAAQ,mBAAmB,KAAG,OAAO,CAAC,mBAAmB,CA6c3G,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/native/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,eAAe,CAAC;AAkBvB,eAAO,MAAM,aAAa,GACxB,KAAK,QAAQ,EACb,QAAQ,mBAAmB,EAC3B,UAAS,oBAAyB,KACjC,OAAO,CAAC,mBAAmB,CAof7B,CAAC"}