@rdlabo/ionic-theme-ios27 1.2.1 → 2.0.0-beta.pr303.shaf4f5ca16816f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -280
- package/dist/css/components/ion-toolbar.css +1 -1
- package/dist/css/ionic-theme-ios27.css +1 -1
- package/dist/css/vertical-bars.css +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/index.d.ts +18 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +26 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/segment/index.js +3 -3
- package/dist/segment/index.js.map +1 -1
- package/dist/sheets-of-glass/index.js +7 -7
- package/dist/sheets-of-glass/index.js.map +1 -1
- package/dist/tab-bar-searchable/dismiss-button.js +53 -3
- package/dist/tab-bar-searchable/dismiss-button.js.map +1 -1
- package/dist/tab-bar-searchable/index.js +18 -3
- package/dist/tab-bar-searchable/index.js.map +1 -1
- package/dist/transition/ios.transition.d.ts.map +1 -1
- package/dist/transition/ios.transition.js +7 -4
- package/dist/transition/ios.transition.js.map +1 -1
- package/dist/transition/native-ui.d.ts +6 -0
- package/dist/transition/native-ui.d.ts.map +1 -0
- package/dist/{native-integration/index.js → transition/native-ui.js} +16 -30
- package/dist/transition/native-ui.js.map +1 -0
- package/docs/adaptive-themes.md +151 -0
- package/docs/add-native-ui.md +53 -0
- package/docs/animation.md +1 -1
- package/docs/eslint.md +1 -1
- package/docs/features.md +3 -3
- package/docs/iphone-duo-with-original-theme.md +40 -28
- package/docs/iphone-duo.md +29 -32
- package/docs/migration.md +12 -24
- package/docs/setup.md +82 -0
- package/docs/special-markup.md +5 -5
- package/docs/using-ion-item-group.md +2 -2
- package/docs/vertical-bars-layout.md +47 -0
- package/package.json +12 -42
- package/src/index.ts +3 -1
- package/src/layout/index.ts +29 -0
- package/src/segment/index.ts +3 -3
- package/src/sheets-of-glass/index.ts +7 -7
- package/src/styles/components/ion-toolbar.scss +1 -1
- package/src/styles/vertical-bars.scss +15 -18
- package/src/tab-bar-searchable/dismiss-button.ts +73 -4
- package/src/tab-bar-searchable/index.ts +20 -3
- package/src/transition/ios.transition.ts +7 -4
- package/src/{native-integration/index.ts → transition/native-ui.ts} +17 -46
- package/Package.swift +0 -21
- package/dist/_virtual/_rolldown/runtime.js +0 -13
- package/dist/native/components/index.d.ts +0 -19
- package/dist/native/components/index.d.ts.map +0 -1
- package/dist/native/components/index.js +0 -40
- package/dist/native/components/index.js.map +0 -1
- package/dist/native/components/ion-back-button.d.ts +0 -9
- package/dist/native/components/ion-back-button.d.ts.map +0 -1
- package/dist/native/components/ion-back-button.js +0 -20
- package/dist/native/components/ion-back-button.js.map +0 -1
- package/dist/native/components/ion-button.d.ts +0 -10
- package/dist/native/components/ion-button.d.ts.map +0 -1
- package/dist/native/components/ion-button.js +0 -23
- package/dist/native/components/ion-button.js.map +0 -1
- package/dist/native/components/ion-buttons.d.ts +0 -11
- package/dist/native/components/ion-buttons.d.ts.map +0 -1
- package/dist/native/components/ion-buttons.js +0 -30
- package/dist/native/components/ion-buttons.js.map +0 -1
- package/dist/native/components/ion-fab.d.ts +0 -10
- package/dist/native/components/ion-fab.d.ts.map +0 -1
- package/dist/native/components/ion-fab.js +0 -132
- package/dist/native/components/ion-fab.js.map +0 -1
- package/dist/native/components/ion-menu-button.d.ts +0 -13
- package/dist/native/components/ion-menu-button.d.ts.map +0 -1
- package/dist/native/components/ion-menu-button.js +0 -31
- package/dist/native/components/ion-menu-button.js.map +0 -1
- package/dist/native/components/ion-segment.d.ts +0 -11
- package/dist/native/components/ion-segment.d.ts.map +0 -1
- package/dist/native/components/ion-segment.js +0 -30
- package/dist/native/components/ion-segment.js.map +0 -1
- package/dist/native/components/ion-tab-bar.d.ts +0 -11
- package/dist/native/components/ion-tab-bar.d.ts.map +0 -1
- package/dist/native/components/ion-tab-bar.js +0 -50
- package/dist/native/components/ion-tab-bar.js.map +0 -1
- package/dist/native/components/searchable-tabs.d.ts +0 -20
- package/dist/native/components/searchable-tabs.d.ts.map +0 -1
- package/dist/native/components/searchable-tabs.js +0 -383
- package/dist/native/components/searchable-tabs.js.map +0 -1
- package/dist/native/definitions.d.ts +0 -152
- package/dist/native/definitions.d.ts.map +0 -1
- package/dist/native/definitions.js +0 -0
- package/dist/native/foldable/fold-state.d.ts +0 -5
- package/dist/native/foldable/fold-state.d.ts.map +0 -1
- package/dist/native/foldable/fold-state.js +0 -14
- package/dist/native/foldable/fold-state.js.map +0 -1
- package/dist/native/foldable/types.d.ts +0 -12
- package/dist/native/foldable/types.d.ts.map +0 -1
- package/dist/native/foldable/types.js +0 -0
- package/dist/native/index.d.ts +0 -11
- package/dist/native/index.d.ts.map +0 -1
- package/dist/native/index.js +0 -242
- package/dist/native/index.js.map +0 -1
- package/dist/native/prehide.d.ts +0 -7
- package/dist/native/prehide.d.ts.map +0 -1
- package/dist/native/prehide.js +0 -230
- package/dist/native/prehide.js.map +0 -1
- package/dist/native/runtime.d.ts +0 -5
- package/dist/native/runtime.d.ts.map +0 -1
- package/dist/native/runtime.js +0 -640
- package/dist/native/runtime.js.map +0 -1
- package/dist/native/shared/candidate.d.ts +0 -21
- package/dist/native/shared/candidate.d.ts.map +0 -1
- package/dist/native/shared/candidate.js +0 -98
- package/dist/native/shared/candidate.js.map +0 -1
- package/dist/native/shared/crossfade.d.ts +0 -10
- package/dist/native/shared/crossfade.d.ts.map +0 -1
- package/dist/native/shared/crossfade.js +0 -50
- package/dist/native/shared/crossfade.js.map +0 -1
- package/dist/native/shared/dom.d.ts +0 -46
- package/dist/native/shared/dom.d.ts.map +0 -1
- package/dist/native/shared/dom.js +0 -172
- package/dist/native/shared/dom.js.map +0 -1
- package/dist/native/shared/events.d.ts +0 -11
- package/dist/native/shared/events.d.ts.map +0 -1
- package/dist/native/shared/events.js +0 -13
- package/dist/native/shared/events.js.map +0 -1
- package/dist/native/shared/icons.d.ts +0 -8
- package/dist/native/shared/icons.d.ts.map +0 -1
- package/dist/native/shared/icons.js +0 -61
- package/dist/native/shared/icons.js.map +0 -1
- package/dist/native/shared/modal.d.ts +0 -10
- package/dist/native/shared/modal.d.ts.map +0 -1
- package/dist/native/shared/modal.js +0 -160
- package/dist/native/shared/modal.js.map +0 -1
- package/dist/native/vertical-bars-web-search.d.ts +0 -9
- package/dist/native/vertical-bars-web-search.d.ts.map +0 -1
- package/dist/native/vertical-bars-web-search.js +0 -84
- package/dist/native/vertical-bars-web-search.js.map +0 -1
- package/dist/native/vertical-bars-web.d.ts +0 -5
- package/dist/native/vertical-bars-web.d.ts.map +0 -1
- package/dist/native/vertical-bars-web.js +0 -341
- package/dist/native/vertical-bars-web.js.map +0 -1
- package/dist/native-integration/index.d.ts +0 -23
- package/dist/native-integration/index.d.ts.map +0 -1
- package/dist/native-integration/index.js.map +0 -1
- package/dist/native-integration/transition.d.ts +0 -5
- package/dist/native-integration/transition.d.ts.map +0 -1
- package/dist/native-integration/transition.js +0 -16
- package/dist/native-integration/transition.js.map +0 -1
- package/dist/vertical-bars.d.ts +0 -5
- package/dist/vertical-bars.js +0 -4
- package/docs/e2e-testing.md +0 -51
- package/docs/feedback.md +0 -65
- package/docs/native-ui-shell.md +0 -285
- package/docs/vertical-bars.md +0 -285
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellButton.swift +0 -71
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellButtons.swift +0 -24
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellComponents.swift +0 -18
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellFab.swift +0 -83
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellSearchController.swift +0 -432
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellSegment.swift +0 -91
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellTabBar.swift +0 -221
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellVerticalBars.swift +0 -437
- package/ios/Sources/IonicNativeUIShellPlugin/Components/ShellVerticalSearch.swift +0 -118
- package/ios/Sources/IonicNativeUIShellPlugin/IonicNativeUIShellPlugin.swift +0 -396
- package/ios/Sources/IonicNativeUIShellPlugin/Shared/ShellCrossfade.swift +0 -35
- package/ios/Sources/IonicNativeUIShellPlugin/Shared/ShellHost.swift +0 -8
- package/ios/Sources/IonicNativeUIShellPlugin/Shared/ShellRendering.swift +0 -27
- package/ios/Sources/IonicNativeUIShellPlugin/Shared/ShellSnapshot.swift +0 -135
- package/ios/Tests/IonicNativeUIShellPluginTests/ShellSnapshotTests.swift +0 -650
- package/src/native/components/index.ts +0 -53
- package/src/native/components/ion-back-button.ts +0 -19
- package/src/native/components/ion-button.ts +0 -24
- package/src/native/components/ion-buttons.ts +0 -38
- package/src/native/components/ion-fab.ts +0 -151
- package/src/native/components/ion-menu-button.ts +0 -24
- package/src/native/components/ion-segment.ts +0 -27
- package/src/native/components/ion-tab-bar.ts +0 -50
- package/src/native/components/searchable-tabs.ts +0 -459
- package/src/native/definitions.ts +0 -191
- package/src/native/foldable/fold-state.ts +0 -9
- package/src/native/foldable/types.ts +0 -4
- package/src/native/index.ts +0 -281
- package/src/native/prehide.ts +0 -265
- package/src/native/runtime.ts +0 -781
- package/src/native/shared/candidate.ts +0 -150
- package/src/native/shared/crossfade.ts +0 -50
- package/src/native/shared/dom.ts +0 -286
- package/src/native/shared/events.ts +0 -8
- package/src/native/shared/icons.ts +0 -57
- package/src/native/shared/modal.ts +0 -157
- package/src/native/vertical-bars-web-search.ts +0 -80
- package/src/native/vertical-bars-web.ts +0 -411
- package/src/native-integration/transition.ts +0 -15
- package/src/vertical-bars.ts +0 -11
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["button","buttons","backButton","menuButton","tabBar","segment","fab"],"sources":["../../../src/native/components/index.ts"],"mappings":";;;;;;;;;;qBAYa,6BAAUA,6BAAAC,8BAAAC,kCAAAC,kCAAAC,8BAAAC,8BAAAC;YACX,iCAAiC;qBAChC;qBAIA;qBAIA;qBAQA,0BAAuB,SAAA;qBAEvB,gBAAiB,SAAS,aAAa,IAAI,UAAU,UAAS,+BAAkC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { isDisabledButtonGroupChild, isVerticalBarsSource, visible, withoutPrehide } from "../shared/dom.js";
|
|
2
|
-
import { ion_button_exports } from "./ion-button.js";
|
|
3
|
-
import { ion_menu_button_exports } from "./ion-menu-button.js";
|
|
4
|
-
import { ion_buttons_exports } from "./ion-buttons.js";
|
|
5
|
-
import { ion_back_button_exports } from "./ion-back-button.js";
|
|
6
|
-
import { ion_tab_bar_exports } from "./ion-tab-bar.js";
|
|
7
|
-
import { ion_segment_exports } from "./ion-segment.js";
|
|
8
|
-
import { ion_fab_exports } from "./ion-fab.js";
|
|
9
|
-
//#region src/native/components/index.ts
|
|
10
|
-
const components = [
|
|
11
|
-
ion_button_exports,
|
|
12
|
-
ion_buttons_exports,
|
|
13
|
-
ion_back_button_exports,
|
|
14
|
-
ion_menu_button_exports,
|
|
15
|
-
ion_tab_bar_exports,
|
|
16
|
-
ion_segment_exports,
|
|
17
|
-
ion_fab_exports
|
|
18
|
-
];
|
|
19
|
-
const selector = components.map((component) => "selector" in component ? component.selector : component.tag).filter(Boolean).join(", ");
|
|
20
|
-
const shadowSelector = ["ion-icon", ...components.flatMap((component) => "shadowSelector" in component ? [component.shadowSelector] : [])].join(", ");
|
|
21
|
-
const motionSelector = [
|
|
22
|
-
".ion-page",
|
|
23
|
-
"ion-header",
|
|
24
|
-
"ion-footer",
|
|
25
|
-
"ion-toolbar",
|
|
26
|
-
...components.filter((component) => "tracksMotion" in component && component.tracksMotion).map((component) => component.tag)
|
|
27
|
-
].join(", ");
|
|
28
|
-
const isVerticalBarsCandidate = isVerticalBarsSource;
|
|
29
|
-
const readCandidate = (element, id, options = {}) => {
|
|
30
|
-
const verticalBars = isVerticalBarsCandidate(element);
|
|
31
|
-
if (!element.classList.contains("ios") && !verticalBars || !visible(element, verticalBars) || element.closest("ion-popover") || element.closest("ion-modal") && !verticalBars) return;
|
|
32
|
-
const style = getComputedStyle(element);
|
|
33
|
-
if (!isDisabledButtonGroupChild(element) && !style.getPropertyValue("--ios-theme-glass-background-rgb").trim() && !style.getPropertyValue("--ios26-glass-background-rgb").trim() && !verticalBars) return;
|
|
34
|
-
if (element.contains(element.ownerDocument.activeElement)) return;
|
|
35
|
-
return withoutPrehide(element, () => components.find((component) => component.tag === element.localName)?.read(element, id, options));
|
|
36
|
-
};
|
|
37
|
-
//#endregion
|
|
38
|
-
export { components, isVerticalBarsCandidate, motionSelector, readCandidate, selector, shadowSelector };
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["button","buttons","backButton","menuButton","tabBar","segment","fab"],"sources":["../../../src/native/components/index.ts"],"sourcesContent":["import type { VerticalControlAreaOptions } from '../definitions';\nimport * as button from './ion-button';\nimport * as buttons from './ion-buttons';\nimport * as backButton from './ion-back-button';\nimport * as menuButton from './ion-menu-button';\nimport * as tabBar from './ion-tab-bar';\nimport * as segment from './ion-segment';\nimport * as fab from './ion-fab';\nimport { isDisabledButtonGroupChild, isVerticalBarsSource, visible, withoutPrehide } from '../shared/dom';\nimport type { Candidate, Identify } from '../shared/candidate';\n\n// Static composition only. Each component declares its own tag, discovery and reader.\nexport const components = [button, buttons, backButton, menuButton, tabBar, segment, fab] as const;\nexport type NativeUIShellComponent = (typeof components)[number]['tag'];\nexport const selector = components\n .map((component) => ('selector' in component ? component.selector : component.tag))\n .filter(Boolean)\n .join(', ');\nexport const shadowSelector = [\n 'ion-icon',\n ...components.flatMap((component) => ('shadowSelector' in component ? [component.shadowSelector] : [])),\n].join(', ');\nexport const motionSelector = [\n '.ion-page',\n 'ion-header',\n 'ion-footer',\n 'ion-toolbar',\n ...components.filter((component) => 'tracksMotion' in component && component.tracksMotion).map((component) => component.tag),\n].join(', ');\n\nexport const isVerticalBarsCandidate = isVerticalBarsSource;\n\nexport const readCandidate = (element: HTMLElement, id: Identify, options: VerticalControlAreaOptions = {}): Candidate | undefined => {\n const verticalBars = isVerticalBarsCandidate(element);\n if (\n (!element.classList.contains('ios') && !verticalBars) ||\n !visible(element, verticalBars) ||\n element.closest('ion-popover') ||\n (element.closest('ion-modal') && !verticalBars)\n )\n return;\n const style = getComputedStyle(element);\n if (\n !isDisabledButtonGroupChild(element) &&\n !style.getPropertyValue('--ios-theme-glass-background-rgb').trim() &&\n !style.getPropertyValue('--ios26-glass-background-rgb').trim() &&\n !verticalBars\n )\n return;\n if (element.contains(element.ownerDocument.activeElement)) return;\n // Read icon and control geometry before restoring prehide, which can collapse the toolbar.\n return withoutPrehide(element, () => components.find((component) => component.tag === element.localName)?.read(element, id, options));\n};\n"],"mappings":";;;;;;;;;AAYA,MAAa,aAAa;CAACA;CAAQC;CAASC;CAAYC;CAAYC;CAAQC;CAASC;AAAG;AAExF,MAAa,WAAW,WACrB,KAAK,cAAe,cAAc,YAAY,UAAU,WAAW,UAAU,GAAI,CAAC,CAClF,OAAO,OAAO,CAAC,CACf,KAAK,IAAI;AACZ,MAAa,iBAAiB,CAC5B,YACA,GAAG,WAAW,SAAS,cAAe,oBAAoB,YAAY,CAAC,UAAU,cAAc,IAAI,CAAC,CAAE,CACxG,CAAC,CAAC,KAAK,IAAI;AACX,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA,GAAG,WAAW,QAAQ,cAAc,kBAAkB,aAAa,UAAU,YAAY,CAAC,CAAC,KAAK,cAAc,UAAU,GAAG;AAC7H,CAAC,CAAC,KAAK,IAAI;AAEX,MAAa,0BAA0B;AAEvC,MAAa,iBAAiB,SAAsB,IAAc,UAAsC,CAAC,MAA6B;CACpI,MAAM,eAAe,wBAAwB,OAAO;CACpD,IACG,CAAC,QAAQ,UAAU,SAAS,KAAK,KAAK,CAAC,gBACxC,CAAC,QAAQ,SAAS,YAAY,KAC9B,QAAQ,QAAQ,aAAa,KAC5B,QAAQ,QAAQ,WAAW,KAAK,CAAC,cAElC;CACF,MAAM,QAAQ,iBAAiB,OAAO;CACtC,IACE,CAAC,2BAA2B,OAAO,KACnC,CAAC,MAAM,iBAAiB,kCAAkC,CAAC,CAAC,KAAK,KACjE,CAAC,MAAM,iBAAiB,8BAA8B,CAAC,CAAC,KAAK,KAC7D,CAAC,cAED;CACF,IAAI,QAAQ,SAAS,QAAQ,cAAc,aAAa,GAAG;CAE3D,OAAO,eAAe,eAAe,WAAW,MAAM,cAAc,UAAU,QAAQ,QAAQ,SAAS,CAAC,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC;AACtI"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Candidate, Identify } from "../shared/candidate.js";
|
|
2
|
-
declare namespace ion_back_button_d_exports {
|
|
3
|
-
export { read, tag };
|
|
4
|
-
}
|
|
5
|
-
export declare const tag = "ion-back-button";
|
|
6
|
-
export declare const read: (element: HTMLElement, id: Identify) => Candidate | undefined;
|
|
7
|
-
//#endregion
|
|
8
|
-
export { ion_back_button_d_exports };
|
|
9
|
-
//# sourceMappingURL=ion-back-button.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-back-button.d.ts","names":[],"sources":["../../../src/native/components/ion-back-button.ts"],"mappings":";;;;qBAIa;qBAEA,OAAQ,SAAS,aAAa,IAAI,aAAW"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { inFixedToolbar, isVerticalBarsSource } from "../shared/dom.js";
|
|
3
|
-
import { appendItem, createCandidate } from "../shared/candidate.js";
|
|
4
|
-
//#region src/native/components/ion-back-button.ts
|
|
5
|
-
var ion_back_button_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
-
read: () => read,
|
|
7
|
-
tag: () => tag
|
|
8
|
-
});
|
|
9
|
-
const tag = "ion-back-button";
|
|
10
|
-
const read = (element, id) => {
|
|
11
|
-
const button = element;
|
|
12
|
-
if (!button.shadowRoot || button.icon !== void 0 || button.color !== void 0 || !isVerticalBarsSource(element) && !inFixedToolbar(element)) return;
|
|
13
|
-
const candidate = createCandidate(element, tag, id);
|
|
14
|
-
const label = button.shadowRoot.querySelector("[part=\"text\"]")?.textContent?.trim() ?? "";
|
|
15
|
-
return appendItem(candidate, element, id, button.shadowRoot, label) ? candidate : void 0;
|
|
16
|
-
};
|
|
17
|
-
//#endregion
|
|
18
|
-
export { ion_back_button_exports, read, tag };
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=ion-back-button.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-back-button.js","names":[],"sources":["../../../src/native/components/ion-back-button.ts"],"sourcesContent":["import { createCandidate, appendItem } from '../shared/candidate';\nimport type { Candidate, Identify } from '../shared/candidate';\nimport { inFixedToolbar, isVerticalBarsSource } from '../shared/dom';\n\nexport const tag = 'ion-back-button';\n\nexport const read = (element: HTMLElement, id: Identify): Candidate | undefined => {\n const button = element as HTMLIonBackButtonElement;\n if (\n !button.shadowRoot ||\n button.icon !== undefined ||\n button.color !== undefined ||\n (!isVerticalBarsSource(element) && !inFixedToolbar(element))\n )\n return;\n const candidate = createCandidate(element, tag, id);\n const label = button.shadowRoot.querySelector('[part=\"text\"]')?.textContent?.trim() ?? '';\n return appendItem(candidate, element, id, button.shadowRoot, label) ? candidate : undefined;\n};\n"],"mappings":";;;;;;;;AAIA,MAAa,MAAM;AAEnB,MAAa,QAAQ,SAAsB,OAAwC;CACjF,MAAM,SAAS;CACf,IACE,CAAC,OAAO,cACR,OAAO,SAAS,KAAA,KAChB,OAAO,UAAU,KAAA,KAChB,CAAC,qBAAqB,OAAO,KAAK,CAAC,eAAe,OAAO,GAE1D;CACF,MAAM,YAAY,gBAAgB,SAAS,KAAK,EAAE;CAClD,MAAM,QAAQ,OAAO,WAAW,cAAc,iBAAe,CAAC,EAAE,aAAa,KAAK,KAAK;CACvF,OAAO,WAAW,WAAW,SAAS,IAAI,OAAO,YAAY,KAAK,IAAI,YAAY,KAAA;AACpF"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { VerticalControlAreaOptions } from "../definitions.js";
|
|
2
|
-
import { Candidate, Identify } from "../shared/candidate.js";
|
|
3
|
-
declare namespace ion_button_d_exports {
|
|
4
|
-
export { read, tag };
|
|
5
|
-
}
|
|
6
|
-
export declare const tag = "ion-button";
|
|
7
|
-
export declare const read: (element: HTMLElement, id: Identify, options?: VerticalControlAreaOptions) => Candidate | undefined;
|
|
8
|
-
//#endregion
|
|
9
|
-
export { ion_button_d_exports };
|
|
10
|
-
//# sourceMappingURL=ion-button.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-button.d.ts","names":[],"sources":["../../../src/native/components/ion-button.ts"],"mappings":";;;;;qBAMa;qBAEA,OAAQ,SAAS,aAAa,IAAI,UAAU,UAAS,+BAAkC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { modalUsesVerticalBars } from "../shared/modal.js";
|
|
3
|
-
import { inFixedToolbar, isVerticalBarsToolbarAction, isVerticalBarsToolbarGroup } from "../shared/dom.js";
|
|
4
|
-
import { appendItem, createCandidate } from "../shared/candidate.js";
|
|
5
|
-
//#region src/native/components/ion-button.ts
|
|
6
|
-
var ion_button_exports = /* @__PURE__ */ __exportAll({
|
|
7
|
-
read: () => read,
|
|
8
|
-
tag: () => tag
|
|
9
|
-
});
|
|
10
|
-
const tag = "ion-button";
|
|
11
|
-
const read = (element, id, options = {}) => {
|
|
12
|
-
const button = element;
|
|
13
|
-
const verticalBars = !element.closest("ion-menu, ion-popover") && modalUsesVerticalBars(element) && !!element.closest("ion-app.ios-theme-vertical-bars");
|
|
14
|
-
if (verticalBars && element.parentElement && isVerticalBarsToolbarGroup(element.parentElement)) return;
|
|
15
|
-
const fill = button.fill ?? "default";
|
|
16
|
-
if (!inFixedToolbar(element) || verticalBars && !isVerticalBarsToolbarAction(element) || !verticalBars && fill !== "default" || !verticalBars && button.classList.contains("ion-color")) return;
|
|
17
|
-
const candidate = createCandidate(element, tag, id, options);
|
|
18
|
-
return appendItem(candidate, element, id) ? candidate : void 0;
|
|
19
|
-
};
|
|
20
|
-
//#endregion
|
|
21
|
-
export { ion_button_exports, read, tag };
|
|
22
|
-
|
|
23
|
-
//# sourceMappingURL=ion-button.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-button.js","names":[],"sources":["../../../src/native/components/ion-button.ts"],"sourcesContent":["import type { VerticalControlAreaOptions } from '../definitions';\nimport { modalUsesVerticalBars } from '../shared/modal';\nimport { createCandidate, appendItem } from '../shared/candidate';\nimport type { Candidate, Identify } from '../shared/candidate';\nimport { inFixedToolbar, isVerticalBarsToolbarAction, isVerticalBarsToolbarGroup } from '../shared/dom';\n\nexport const tag = 'ion-button';\n\nexport const read = (element: HTMLElement, id: Identify, options: VerticalControlAreaOptions = {}): Candidate | undefined => {\n const button = element as HTMLIonButtonElement;\n const verticalBars =\n !element.closest('ion-menu, ion-popover') && modalUsesVerticalBars(element) && !!element.closest('ion-app.ios-theme-vertical-bars');\n if (verticalBars && element.parentElement && isVerticalBarsToolbarGroup(element.parentElement)) return;\n const fill = button.fill ?? 'default';\n if (\n !inFixedToolbar(element) ||\n (verticalBars && !isVerticalBarsToolbarAction(element)) ||\n (!verticalBars && fill !== 'default') ||\n (!verticalBars && button.classList.contains('ion-color'))\n )\n return;\n const candidate = createCandidate(element, tag, id, options);\n return appendItem(candidate, element, id) ? candidate : undefined;\n};\n"],"mappings":";;;;;;;;;AAMA,MAAa,MAAM;AAEnB,MAAa,QAAQ,SAAsB,IAAc,UAAsC,CAAC,MAA6B;CAC3H,MAAM,SAAS;CACf,MAAM,eACJ,CAAC,QAAQ,QAAQ,uBAAuB,KAAK,sBAAsB,OAAO,KAAK,CAAC,CAAC,QAAQ,QAAQ,iCAAiC;CACpI,IAAI,gBAAgB,QAAQ,iBAAiB,2BAA2B,QAAQ,aAAa,GAAG;CAChG,MAAM,OAAO,OAAO,QAAQ;CAC5B,IACE,CAAC,eAAe,OAAO,KACtB,gBAAgB,CAAC,4BAA4B,OAAO,KACpD,CAAC,gBAAgB,SAAS,aAC1B,CAAC,gBAAgB,OAAO,UAAU,SAAS,WAAW,GAEvD;CACF,MAAM,YAAY,gBAAgB,SAAS,KAAK,IAAI,OAAO;CAC3D,OAAO,WAAW,WAAW,SAAS,EAAE,IAAI,YAAY,KAAA;AAC1D"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { VerticalControlAreaOptions } from "../definitions.js";
|
|
2
|
-
import { Candidate, Identify } from "../shared/candidate.js";
|
|
3
|
-
declare namespace ion_buttons_d_exports {
|
|
4
|
-
export { read, tag, tracksMotion };
|
|
5
|
-
}
|
|
6
|
-
export declare const tag = "ion-buttons";
|
|
7
|
-
export declare const tracksMotion = true;
|
|
8
|
-
export declare const read: (element: HTMLElement, id: Identify, options?: VerticalControlAreaOptions) => Candidate | undefined;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { ion_buttons_d_exports };
|
|
11
|
-
//# sourceMappingURL=ion-buttons.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-buttons.d.ts","names":[],"sources":["../../../src/native/components/ion-buttons.ts"],"mappings":";;;;;qBAOa;qBACA;qBAEA,OAAQ,SAAS,aAAa,IAAI,UAAU,UAAS,+BAAkC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { modalUsesVerticalBars } from "../shared/modal.js";
|
|
3
|
-
import { childElements, inFixedToolbar, isVerticalBarsToolbarGroup, verticalBarsToolbarActions } from "../shared/dom.js";
|
|
4
|
-
import { appendItem, createCandidate } from "../shared/candidate.js";
|
|
5
|
-
import { append, read as read$1 } from "./ion-menu-button.js";
|
|
6
|
-
//#region src/native/components/ion-buttons.ts
|
|
7
|
-
var ion_buttons_exports = /* @__PURE__ */ __exportAll({
|
|
8
|
-
read: () => read,
|
|
9
|
-
tag: () => tag,
|
|
10
|
-
tracksMotion: () => true
|
|
11
|
-
});
|
|
12
|
-
const tag = "ion-buttons";
|
|
13
|
-
const tracksMotion = true;
|
|
14
|
-
const read = (element, id, options = {}) => {
|
|
15
|
-
if (!inFixedToolbar(element)) return;
|
|
16
|
-
let children = childElements(element);
|
|
17
|
-
if (children.length === 1) return read$1(element, id, options);
|
|
18
|
-
const verticalBars = !element.closest("ion-menu, ion-popover") && modalUsesVerticalBars(element) && !!element.closest("ion-app.ios-theme-vertical-bars");
|
|
19
|
-
if (verticalBars && !isVerticalBarsToolbarGroup(element)) return;
|
|
20
|
-
if (verticalBars) children = verticalBarsToolbarActions(element);
|
|
21
|
-
if (!children.length || children.some((child) => !child.matches(`ion-menu-button${verticalBars ? "" : ".ios"}`) && (!child.matches(`ion-button${verticalBars ? "" : ".ios.button-clear"}`) || !verticalBars && child.fill !== "clear"))) return;
|
|
22
|
-
const candidate = createCandidate(element, tag, id, options);
|
|
23
|
-
if (verticalBars && children.length !== childElements(element).length) candidate.sources = children;
|
|
24
|
-
for (const child of children) if (!(child.matches("ion-menu-button") ? append(candidate, child, id) : appendItem(candidate, child, id))) return;
|
|
25
|
-
return candidate;
|
|
26
|
-
};
|
|
27
|
-
//#endregion
|
|
28
|
-
export { ion_buttons_exports, read, tag, tracksMotion };
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=ion-buttons.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-buttons.js","names":["menuButton.read","menuButton.append"],"sources":["../../../src/native/components/ion-buttons.ts"],"sourcesContent":["import type { VerticalControlAreaOptions } from '../definitions';\nimport { modalUsesVerticalBars } from '../shared/modal';\nimport { createCandidate, appendItem } from '../shared/candidate';\nimport type { Candidate, Identify } from '../shared/candidate';\nimport { childElements, verticalBarsToolbarActions, inFixedToolbar, isVerticalBarsToolbarGroup } from '../shared/dom';\nimport * as menuButton from './ion-menu-button';\n\nexport const tag = 'ion-buttons';\nexport const tracksMotion = true;\n\nexport const read = (element: HTMLElement, id: Identify, options: VerticalControlAreaOptions = {}): Candidate | undefined => {\n if (!inFixedToolbar(element)) return;\n let children = childElements(element);\n if (children.length === 1) return menuButton.read(element, id, options);\n const verticalBars =\n !element.closest('ion-menu, ion-popover') && modalUsesVerticalBars(element) && !!element.closest('ion-app.ios-theme-vertical-bars');\n if (verticalBars && !isVerticalBarsToolbarGroup(element)) return;\n if (verticalBars) children = verticalBarsToolbarActions(element);\n if (\n !children.length ||\n children.some(\n (child) =>\n !child.matches(`${menuButton.tag}${verticalBars ? '' : '.ios'}`) &&\n (!child.matches(`ion-button${verticalBars ? '' : '.ios.button-clear'}`) ||\n (!verticalBars && (child as HTMLIonButtonElement).fill !== 'clear')),\n )\n )\n return;\n const candidate = createCandidate(element, tag, id, options);\n if (verticalBars && children.length !== childElements(element).length) candidate.sources = children;\n for (const child of children) {\n const supported = child.matches(menuButton.tag)\n ? menuButton.append(candidate, child as HTMLIonMenuButtonElement, id)\n : appendItem(candidate, child, id);\n if (!supported) return;\n }\n return candidate;\n};\n"],"mappings":";;;;;;;;;;;AAOA,MAAa,MAAM;AACnB,MAAa,eAAe;AAE5B,MAAa,QAAQ,SAAsB,IAAc,UAAsC,CAAC,MAA6B;CAC3H,IAAI,CAAC,eAAe,OAAO,GAAG;CAC9B,IAAI,WAAW,cAAc,OAAO;CACpC,IAAI,SAAS,WAAW,GAAG,OAAOA,OAAgB,SAAS,IAAI,OAAO;CACtE,MAAM,eACJ,CAAC,QAAQ,QAAQ,uBAAuB,KAAK,sBAAsB,OAAO,KAAK,CAAC,CAAC,QAAQ,QAAQ,iCAAiC;CACpI,IAAI,gBAAgB,CAAC,2BAA2B,OAAO,GAAG;CAC1D,IAAI,cAAc,WAAW,2BAA2B,OAAO;CAC/D,IACE,CAAC,SAAS,UACV,SAAS,MACN,UACC,CAAC,MAAM,QAAQ,kBAAoB,eAAe,KAAK,QAAQ,MAC9D,CAAC,MAAM,QAAQ,aAAa,eAAe,KAAK,qBAAqB,KACnE,CAAC,gBAAiB,MAA+B,SAAS,QACjE,GAEA;CACF,MAAM,YAAY,gBAAgB,SAAS,KAAK,IAAI,OAAO;CAC3D,IAAI,gBAAgB,SAAS,WAAW,cAAc,OAAO,CAAC,CAAC,QAAQ,UAAU,UAAU;CAC3F,KAAK,MAAM,SAAS,UAIlB,IAAI,EAHc,MAAM,QAAQ,iBAAc,IAC1CC,OAAkB,WAAW,OAAmC,EAAE,IAClE,WAAW,WAAW,OAAO,EAAE,IACnB;CAElB,OAAO;AACT"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Candidate } from "../shared/candidate.js";
|
|
2
|
-
declare namespace ion_fab_d_exports {
|
|
3
|
-
export { read, shadowSelector, tag };
|
|
4
|
-
}
|
|
5
|
-
export declare const tag = "ion-fab";
|
|
6
|
-
export declare const shadowSelector = "ion-fab-button, ion-fab-list";
|
|
7
|
-
export declare const read: (fab: HTMLElement, id: (element: HTMLElement) => string) => Candidate | undefined;
|
|
8
|
-
//#endregion
|
|
9
|
-
export { ion_fab_d_exports };
|
|
10
|
-
//# sourceMappingURL=ion-fab.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-fab.d.ts","names":[],"sources":["../../../src/native/components/ion-fab.ts"],"mappings":";;;;qBAKa;qBACA;qBAOA,OAAQ,KAAK,aAAa,KAAK,SAAS,2BAAyB"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { childElements, excluded, isDark, text } from "../shared/dom.js";
|
|
3
|
-
import { iconSource } from "../shared/icons.js";
|
|
4
|
-
//#region src/native/components/ion-fab.ts
|
|
5
|
-
var ion_fab_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
-
read: () => read,
|
|
7
|
-
shadowSelector: () => shadowSelector,
|
|
8
|
-
tag: () => tag
|
|
9
|
-
});
|
|
10
|
-
const tag = "ion-fab";
|
|
11
|
-
const shadowSelector = "ion-fab-button, ion-fab-list";
|
|
12
|
-
const hasHostMotion = (style) => style.animationName !== "none" || style.transitionDuration.split(",").some((value) => parseFloat(value) > 0);
|
|
13
|
-
const read = (fab, id) => {
|
|
14
|
-
if (fab.slot !== "fixed" || !fab.parentElement?.matches("ion-content") || fab.contains(fab.ownerDocument.activeElement)) return;
|
|
15
|
-
const children = childElements(fab);
|
|
16
|
-
const main = children.filter((child) => child.matches("ion-fab-button"));
|
|
17
|
-
const lists = children.filter((child) => child.matches("ion-fab-list"));
|
|
18
|
-
if (main.length !== 1 || main.length + lists.length !== children.length) return;
|
|
19
|
-
if (lists.some((list) => list.closest(excluded) || childElements(list).some((child) => !child.matches("ion-fab-button")))) return;
|
|
20
|
-
const buttons = [main[0], ...lists.flatMap((list) => childElements(list))];
|
|
21
|
-
const style = getComputedStyle(fab);
|
|
22
|
-
if (hasHostMotion(style)) return;
|
|
23
|
-
const transform = new DOMMatrixReadOnly(style.transform);
|
|
24
|
-
if (!transform.is2D || transform.a !== 1 || transform.d !== 1 || transform.b || transform.c) return;
|
|
25
|
-
const candidate = {
|
|
26
|
-
element: fab,
|
|
27
|
-
control: {
|
|
28
|
-
id: id(fab),
|
|
29
|
-
kind: tag,
|
|
30
|
-
x: 0,
|
|
31
|
-
y: 0,
|
|
32
|
-
width: innerWidth,
|
|
33
|
-
height: innerHeight,
|
|
34
|
-
dark: isDark(style),
|
|
35
|
-
rtl: style.direction === "rtl",
|
|
36
|
-
items: []
|
|
37
|
-
},
|
|
38
|
-
actions: /* @__PURE__ */ new Map(),
|
|
39
|
-
icons: []
|
|
40
|
-
};
|
|
41
|
-
for (const button of buttons) {
|
|
42
|
-
if (!button.classList.contains("ios") || button.closest(excluded) || button.color || button.type !== "button" || button.href) return;
|
|
43
|
-
if (button.querySelector("input, button, a, img, canvas, video, ion-spinner, ion-avatar, ion-badge")) return;
|
|
44
|
-
const native = button.shadowRoot?.querySelector("[part=native]");
|
|
45
|
-
if (!native) return;
|
|
46
|
-
const s = getComputedStyle(button), n = getComputedStyle(native);
|
|
47
|
-
const alpha = n.backgroundColor.startsWith("rgba(") ? Number(n.backgroundColor.slice(5, -1).split(",")[3]) : 1;
|
|
48
|
-
if (s.backgroundColor !== "rgba(0, 0, 0, 0)" || s.backgroundImage !== "none" || n.backgroundImage.includes("url(") || !n.backdropFilter.includes("blur") || !(alpha > 0 && alpha < 1)) return;
|
|
49
|
-
const width = parseFloat(s.width), height = parseFloat(s.height);
|
|
50
|
-
if (!(width > 0 && height > 0) || Math.abs(width - height) > .5 || !n.borderRadius.includes("50%")) return;
|
|
51
|
-
const list = button.parentElement?.matches("ion-fab-list") ? button.parentElement : void 0;
|
|
52
|
-
const listStyle = list && getComputedStyle(list);
|
|
53
|
-
const laidOut = s.display !== "none" && (!listStyle || listStyle.display !== "none");
|
|
54
|
-
const visible = laidOut && (!list || list.activated && button.show && listStyle.visibility === "visible" && Number(listStyle.opacity) > 0) && s.visibility === "visible" && Number(s.opacity) > 0;
|
|
55
|
-
const matrix = new DOMMatrixReadOnly(s.transform);
|
|
56
|
-
if (!matrix.is2D || matrix.b || matrix.c || matrix.e || matrix.f || matrix.a !== matrix.d || matrix.a < 0) return;
|
|
57
|
-
if (matrix.a !== 1 && (matrix.a !== 0 || !list || button.classList.contains("fab-button-show"))) return;
|
|
58
|
-
if (laidOut && !matrix.isIdentity) {
|
|
59
|
-
const origin = s.transformOrigin.split(" ").map(parseFloat);
|
|
60
|
-
if (Math.abs(origin[0] - width / 2) > .5 || Math.abs(origin[1] - height / 2) > .5) return;
|
|
61
|
-
}
|
|
62
|
-
if (hasHostMotion(s)) return;
|
|
63
|
-
if (listStyle) {
|
|
64
|
-
if (hasHostMotion(listStyle)) return;
|
|
65
|
-
const transform = new DOMMatrixReadOnly(listStyle.transform);
|
|
66
|
-
if (!transform.is2D || transform.a !== 1 || transform.d !== 1 || transform.b || transform.c) return;
|
|
67
|
-
}
|
|
68
|
-
const rect = button.getBoundingClientRect();
|
|
69
|
-
const x = laidOut ? rect.x + rect.width / 2 - width / 2 : 0;
|
|
70
|
-
const y = laidOut ? rect.y + rect.height / 2 - height / 2 : 0;
|
|
71
|
-
if (visible && (x < -1 || y < -1 || x + width > innerWidth + 1 || y + height > innerHeight + 1)) return;
|
|
72
|
-
const label = text(button);
|
|
73
|
-
const item = {
|
|
74
|
-
id: id(button),
|
|
75
|
-
x,
|
|
76
|
-
y,
|
|
77
|
-
width,
|
|
78
|
-
height,
|
|
79
|
-
label,
|
|
80
|
-
accessibilityLabel: button.getAttribute("aria-label") ?? native.getAttribute("aria-label") ?? label,
|
|
81
|
-
disabled: button.disabled || s.pointerEvents === "none",
|
|
82
|
-
selected: button.activated,
|
|
83
|
-
visible,
|
|
84
|
-
fontSize: parseFloat(s.fontSize),
|
|
85
|
-
fontWeight: parseInt(s.fontWeight, 10) || 400,
|
|
86
|
-
color: n.color
|
|
87
|
-
};
|
|
88
|
-
const normal = Array.from(button.querySelectorAll("ion-icon, svg"));
|
|
89
|
-
if (normal.length > 1) return;
|
|
90
|
-
const close = button.shadowRoot?.querySelector("ion-icon[part=close-icon]");
|
|
91
|
-
for (const [index, icon] of [normal[0], close].entries()) {
|
|
92
|
-
if (!icon) {
|
|
93
|
-
if (index === 1 || !label) return;
|
|
94
|
-
else continue;
|
|
95
|
-
}
|
|
96
|
-
const svg = icon.matches("svg") ? icon : icon.shadowRoot?.querySelector("svg");
|
|
97
|
-
if (!svg) return;
|
|
98
|
-
const iconStyle = getComputedStyle(icon);
|
|
99
|
-
const inner = icon.shadowRoot?.querySelector(".icon-inner");
|
|
100
|
-
if (index === 0 && inner && !new DOMMatrixReadOnly(iconStyle.transform).isIdentity) return;
|
|
101
|
-
const transform = new DOMMatrixReadOnly(inner ? getComputedStyle(inner).transform : iconStyle.transform);
|
|
102
|
-
const mirrored = transform.is2D && transform.a === -1 && transform.d === 1 && !transform.b && !transform.c && !transform.e && !transform.f;
|
|
103
|
-
if (index === 0 && !transform.isIdentity && !mirrored) return;
|
|
104
|
-
const source = iconSource(svg, index === 0 && mirrored);
|
|
105
|
-
const iconWidth = parseFloat(iconStyle.width), iconHeight = parseFloat(iconStyle.height);
|
|
106
|
-
const size = index === 1 ? parseFloat(iconStyle.fontSize) : iconWidth;
|
|
107
|
-
const h = index === 1 ? size : iconHeight;
|
|
108
|
-
if (!source || !(size > 0 && h > 0)) return;
|
|
109
|
-
if (index === 0) {
|
|
110
|
-
item.iconWidth = size;
|
|
111
|
-
item.iconHeight = h;
|
|
112
|
-
} else {
|
|
113
|
-
item.closeIconWidth = size;
|
|
114
|
-
item.closeIconHeight = h;
|
|
115
|
-
item.iconTransition = parseFloat(iconStyle.transitionDuration) * (iconStyle.transitionDuration.split(",")[0].trim().endsWith("ms") ? .001 : 1);
|
|
116
|
-
}
|
|
117
|
-
candidate.icons.push({
|
|
118
|
-
item,
|
|
119
|
-
source,
|
|
120
|
-
...index === 1 ? { field: "closeIcon" } : {}
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
if (!visible && !list) return;
|
|
124
|
-
candidate.control.items.push(item);
|
|
125
|
-
if (visible) candidate.actions.set(item.id, button);
|
|
126
|
-
}
|
|
127
|
-
return candidate;
|
|
128
|
-
};
|
|
129
|
-
//#endregion
|
|
130
|
-
export { ion_fab_exports, read, shadowSelector, tag };
|
|
131
|
-
|
|
132
|
-
//# sourceMappingURL=ion-fab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-fab.js","names":[],"sources":["../../../src/native/components/ion-fab.ts"],"sourcesContent":["import type { Candidate } from '../shared/candidate';\nimport { childElements, excluded, isDark, text } from '../shared/dom';\nimport { iconSource } from '../shared/icons';\nimport type { ShellItem } from '../definitions';\n\nexport const tag = 'ion-fab';\nexport const shadowSelector = 'ion-fab-button, ion-fab-list';\n\nconst hasHostMotion = (style: CSSStyleDeclaration): boolean =>\n style.animationName !== 'none' || style.transitionDuration.split(',').some((value) => parseFloat(value) > 0);\n\n// FAB owns the batch; only its buttons draw glass. Closed lists keep their IDs\n// and resolved artwork, without inventing layout for display:none descendants.\nexport const read = (fab: HTMLElement, id: (element: HTMLElement) => string): Candidate | undefined => {\n if (fab.slot !== 'fixed' || !fab.parentElement?.matches('ion-content') || fab.contains(fab.ownerDocument.activeElement)) return;\n const children = childElements(fab);\n const main = children.filter((child) => child.matches('ion-fab-button'));\n const lists = children.filter((child) => child.matches('ion-fab-list'));\n if (main.length !== 1 || main.length + lists.length !== children.length) return;\n if (lists.some((list) => list.closest(excluded) || childElements(list).some((child) => !child.matches('ion-fab-button')))) return;\n const buttons = [main[0], ...lists.flatMap((list) => childElements(list))] as HTMLIonFabButtonElement[];\n const style = getComputedStyle(fab);\n if (hasHostMotion(style)) return;\n const transform = new DOMMatrixReadOnly(style.transform);\n if (!transform.is2D || transform.a !== 1 || transform.d !== 1 || transform.b || transform.c) return;\n const candidate: Candidate = {\n element: fab,\n control: {\n id: id(fab),\n kind: tag,\n x: 0,\n y: 0,\n width: innerWidth,\n height: innerHeight,\n dark: isDark(style),\n rtl: style.direction === 'rtl',\n items: [],\n },\n actions: new Map(),\n icons: [],\n };\n for (const button of buttons) {\n if (!button.classList.contains('ios') || button.closest(excluded) || button.color || button.type !== 'button' || button.href) return;\n if (button.querySelector('input, button, a, img, canvas, video, ion-spinner, ion-avatar, ion-badge')) return;\n const native = button.shadowRoot?.querySelector<HTMLElement>('[part=native]');\n if (!native) return;\n const s = getComputedStyle(button),\n n = getComputedStyle(native);\n // An opaque custom host/background or custom shape cannot be discarded.\n const alpha = n.backgroundColor.startsWith('rgba(') ? Number(n.backgroundColor.slice(5, -1).split(',')[3]) : 1;\n if (\n s.backgroundColor !== 'rgba(0, 0, 0, 0)' ||\n s.backgroundImage !== 'none' ||\n n.backgroundImage.includes('url(') ||\n !n.backdropFilter.includes('blur') ||\n !(alpha > 0 && alpha < 1)\n )\n return;\n const width = parseFloat(s.width),\n height = parseFloat(s.height);\n if (!(width > 0 && height > 0) || Math.abs(width - height) > 0.5 || !n.borderRadius.includes('50%')) return;\n const list = button.parentElement?.matches('ion-fab-list') ? (button.parentElement as HTMLIonFabListElement) : undefined;\n const listStyle = list && getComputedStyle(list);\n const laidOut = s.display !== 'none' && (!listStyle || listStyle.display !== 'none');\n const visible =\n laidOut &&\n (!list || (list.activated && button.show && listStyle!.visibility === 'visible' && Number(listStyle!.opacity) > 0)) &&\n s.visibility === 'visible' &&\n Number(s.opacity) > 0;\n // Standard scale is centered: even scale(0) retains its actual layout center.\n // Static list translation is already included in the DOM rect (including RTL).\n const matrix = new DOMMatrixReadOnly(s.transform);\n if (!matrix.is2D || matrix.b || matrix.c || matrix.e || matrix.f || matrix.a !== matrix.d || matrix.a < 0) return;\n // Only Ionic's hidden list child may use scale(0). Custom static scaling\n // changes the actual glass/hit area and must retain its Web rendering.\n // Stencil updates show before rendering its host class. Judge the rendered\n // scale against that class so this normal one-frame gap keeps its cover.\n if (matrix.a !== 1 && (matrix.a !== 0 || !list || button.classList.contains('fab-button-show'))) return;\n if (laidOut && !matrix.isIdentity) {\n const origin = s.transformOrigin.split(' ').map(parseFloat);\n if (Math.abs(origin[0] - width / 2) > 0.5 || Math.abs(origin[1] - height / 2) > 0.5) return;\n }\n // Ionic's list appearance is staggered show changes, without a host CSS\n // transition. Custom host animations keep their complete Web rendering.\n if (hasHostMotion(s)) return;\n if (listStyle) {\n if (hasHostMotion(listStyle)) return;\n const transform = new DOMMatrixReadOnly(listStyle.transform);\n if (!transform.is2D || transform.a !== 1 || transform.d !== 1 || transform.b || transform.c) return;\n }\n const rect = button.getBoundingClientRect();\n const x = laidOut ? rect.x + rect.width / 2 - width / 2 : 0;\n const y = laidOut ? rect.y + rect.height / 2 - height / 2 : 0;\n if (visible && (x < -1 || y < -1 || x + width > innerWidth + 1 || y + height > innerHeight + 1)) return;\n const label = text(button);\n const item: ShellItem = {\n id: id(button),\n x,\n y,\n width,\n height,\n label,\n accessibilityLabel: button.getAttribute('aria-label') ?? native.getAttribute('aria-label') ?? label,\n disabled: button.disabled || s.pointerEvents === 'none',\n selected: button.activated,\n visible,\n fontSize: parseFloat(s.fontSize),\n fontWeight: parseInt(s.fontWeight, 10) || 400,\n color: n.color,\n };\n const normal = Array.from(button.querySelectorAll('ion-icon, svg'));\n if (normal.length > 1) return;\n const close = button.shadowRoot?.querySelector<HTMLElement>('ion-icon[part=close-icon]');\n for (const [index, icon] of [normal[0], close].entries()) {\n if (!icon) {\n if (index === 1 || !label) return;\n else continue;\n }\n const svg = icon.matches('svg') ? (icon as SVGElement) : icon.shadowRoot?.querySelector<SVGElement>('svg');\n if (!svg) return;\n const iconStyle = getComputedStyle(icon);\n const inner = icon.shadowRoot?.querySelector('.icon-inner');\n if (index === 0 && inner && !new DOMMatrixReadOnly(iconStyle.transform).isIdentity) return;\n const transform = new DOMMatrixReadOnly(inner ? getComputedStyle(inner).transform : iconStyle.transform);\n const mirrored =\n transform.is2D && transform.a === -1 && transform.d === 1 && !transform.b && !transform.c && !transform.e && !transform.f;\n if (index === 0 && !transform.isIdentity && !mirrored) return;\n const source = iconSource(svg, index === 0 && mirrored);\n const iconWidth = parseFloat(iconStyle.width),\n iconHeight = parseFloat(iconStyle.height);\n // The internal close-icon fills the button vertically; its glyph uses font-size.\n const size = index === 1 ? parseFloat(iconStyle.fontSize) : iconWidth;\n const h = index === 1 ? size : iconHeight;\n if (!source || !(size > 0 && h > 0)) return;\n if (index === 0) {\n item.iconWidth = size;\n item.iconHeight = h;\n } else {\n item.closeIconWidth = size;\n item.closeIconHeight = h;\n item.iconTransition =\n parseFloat(iconStyle.transitionDuration) * (iconStyle.transitionDuration.split(',')[0].trim().endsWith('ms') ? 0.001 : 1);\n }\n candidate.icons.push({ item, source, ...(index === 1 ? { field: 'closeIcon' as const } : {}) });\n }\n if (!visible && !list) return;\n candidate.control.items.push(item);\n if (visible) candidate.actions.set(item.id, button);\n }\n return candidate;\n};\n"],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { VerticalControlAreaOptions } from "../definitions.js";
|
|
2
|
-
import { Candidate, Identify } from "../shared/candidate.js";
|
|
3
|
-
declare namespace ion_menu_button_d_exports {
|
|
4
|
-
export { append, read, selector, shadowSelector, tag };
|
|
5
|
-
}
|
|
6
|
-
export declare const tag = "ion-menu-button";
|
|
7
|
-
export declare const selector = "";
|
|
8
|
-
export declare const shadowSelector = "ion-menu-button";
|
|
9
|
-
export declare const append: (candidate: Candidate, button: HTMLIonMenuButtonElement, id: Identify) => boolean;
|
|
10
|
-
export declare const read: (group: HTMLElement, id: Identify, options?: VerticalControlAreaOptions) => Candidate | undefined;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { ion_menu_button_d_exports };
|
|
13
|
-
//# sourceMappingURL=ion-menu-button.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-menu-button.d.ts","names":[],"sources":["../../../src/native/components/ion-menu-button.ts"],"mappings":";;;;;qBAKa;qBAEA;qBACA;qBAEA,SAAU,WAAW,WAAW,QAAQ,0BAA0B,IAAI;qBAMtE,OAAQ,OAAO,aAAa,IAAI,UAAU,UAAS,+BAAkC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { childElements, inFixedToolbar } from "../shared/dom.js";
|
|
3
|
-
import { appendItem, createCandidate } from "../shared/candidate.js";
|
|
4
|
-
//#region src/native/components/ion-menu-button.ts
|
|
5
|
-
var ion_menu_button_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
-
append: () => append,
|
|
7
|
-
read: () => read,
|
|
8
|
-
selector: () => "",
|
|
9
|
-
shadowSelector: () => shadowSelector,
|
|
10
|
-
tag: () => tag
|
|
11
|
-
});
|
|
12
|
-
const tag = "ion-menu-button";
|
|
13
|
-
const selector = "";
|
|
14
|
-
const shadowSelector = tag;
|
|
15
|
-
const append = (candidate, button, id) => {
|
|
16
|
-
if (button.type !== "button") return false;
|
|
17
|
-
const content = !button.shadowRoot?.querySelector("slot")?.assignedNodes().length ? button.shadowRoot : button;
|
|
18
|
-
return !!content && !!appendItem(candidate, button, id, content);
|
|
19
|
-
};
|
|
20
|
-
const read = (group, id, options = {}) => {
|
|
21
|
-
const children = group.matches("ion-buttons") ? childElements(group) : [];
|
|
22
|
-
if (!inFixedToolbar(group) || children.length !== 1) return;
|
|
23
|
-
const button = children[0];
|
|
24
|
-
if (!button?.matches(`ion-menu-button${group.closest("ion-app.ios-theme-vertical-bars") ? "" : ".ios"}`)) return;
|
|
25
|
-
const candidate = createCandidate(group, tag, id, options);
|
|
26
|
-
return append(candidate, button, id) ? candidate : void 0;
|
|
27
|
-
};
|
|
28
|
-
//#endregion
|
|
29
|
-
export { append, ion_menu_button_exports, read, selector, shadowSelector, tag };
|
|
30
|
-
|
|
31
|
-
//# sourceMappingURL=ion-menu-button.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-menu-button.js","names":[],"sources":["../../../src/native/components/ion-menu-button.ts"],"sourcesContent":["import { createCandidate, appendItem } from '../shared/candidate';\nimport type { Candidate, Identify } from '../shared/candidate';\nimport type { VerticalControlAreaOptions } from '../definitions';\nimport { childElements, inFixedToolbar } from '../shared/dom';\n\nexport const tag = 'ion-menu-button';\n// The glass and projection ownership belong to ion-buttons, even for one menu button.\nexport const selector = '';\nexport const shadowSelector = tag;\n\nexport const append = (candidate: Candidate, button: HTMLIonMenuButtonElement, id: Identify): boolean => {\n if (button.type !== 'button') return false;\n const content = !button.shadowRoot?.querySelector('slot')?.assignedNodes().length ? button.shadowRoot : button;\n return !!content && !!appendItem(candidate, button, id, content);\n};\n\nexport const read = (group: HTMLElement, id: Identify, options: VerticalControlAreaOptions = {}): Candidate | undefined => {\n const children = group.matches('ion-buttons') ? childElements(group) : [];\n if (!inFixedToolbar(group) || children.length !== 1) return;\n const button = children[0];\n if (!button?.matches(`${tag}${group.closest('ion-app.ios-theme-vertical-bars') ? '' : '.ios'}`)) return;\n const candidate = createCandidate(group, tag, id, options);\n return append(candidate, button as HTMLIonMenuButtonElement, id) ? candidate : undefined;\n};\n"],"mappings":";;;;;;;;;;;AAKA,MAAa,MAAM;AAEnB,MAAa,WAAW;AACxB,MAAa,iBAAiB;AAE9B,MAAa,UAAU,WAAsB,QAAkC,OAA0B;CACvG,IAAI,OAAO,SAAS,UAAU,OAAO;CACrC,MAAM,UAAU,CAAC,OAAO,YAAY,cAAc,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC,SAAS,OAAO,aAAa;CACxG,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,WAAW,WAAW,QAAQ,IAAI,OAAO;AACjE;AAEA,MAAa,QAAQ,OAAoB,IAAc,UAAsC,CAAC,MAA6B;CACzH,MAAM,WAAW,MAAM,QAAQ,aAAa,IAAI,cAAc,KAAK,IAAI,CAAC;CACxE,IAAI,CAAC,eAAe,KAAK,KAAK,SAAS,WAAW,GAAG;CACrD,MAAM,SAAS,SAAS;CACxB,IAAI,CAAC,QAAQ,QAAQ,kBAAS,MAAM,QAAQ,iCAAiC,IAAI,KAAK,QAAQ,GAAG;CACjG,MAAM,YAAY,gBAAgB,OAAO,KAAK,IAAI,OAAO;CACzD,OAAO,OAAO,WAAW,QAAoC,EAAE,IAAI,YAAY,KAAA;AACjF"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Candidate, Identify } from "../shared/candidate.js";
|
|
2
|
-
declare namespace ion_segment_d_exports {
|
|
3
|
-
export { read, shadowSelector, tag, tracksMotion };
|
|
4
|
-
}
|
|
5
|
-
export declare const tag = "ion-segment";
|
|
6
|
-
export declare const shadowSelector = "ion-segment-button";
|
|
7
|
-
export declare const tracksMotion = true;
|
|
8
|
-
export declare const read: (element: HTMLElement, id: Identify) => Candidate | undefined;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { ion_segment_d_exports };
|
|
11
|
-
//# sourceMappingURL=ion-segment.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-segment.d.ts","names":[],"sources":["../../../src/native/components/ion-segment.ts"],"mappings":";;;;qBAIa;qBACA;qBACA;qBAEA,OAAQ,SAAS,aAAa,IAAI,aAAW"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { inFixedToolbar } from "../shared/dom.js";
|
|
3
|
-
import { appendItem, createCandidate } from "../shared/candidate.js";
|
|
4
|
-
//#region src/native/components/ion-segment.ts
|
|
5
|
-
var ion_segment_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
-
read: () => read,
|
|
7
|
-
shadowSelector: () => shadowSelector,
|
|
8
|
-
tag: () => tag,
|
|
9
|
-
tracksMotion: () => true
|
|
10
|
-
});
|
|
11
|
-
const tag = "ion-segment";
|
|
12
|
-
const shadowSelector = "ion-segment-button";
|
|
13
|
-
const tracksMotion = true;
|
|
14
|
-
const read = (element, id) => {
|
|
15
|
-
const segment = element;
|
|
16
|
-
if (!inFixedToolbar(element) || segment.scrollable || element.classList.contains("segment-expand") || element.querySelector("ion-segment-button[content-id]")) return;
|
|
17
|
-
const children = Array.from(element.querySelectorAll(":scope > ion-segment-button"));
|
|
18
|
-
if (!children.length) return;
|
|
19
|
-
const candidate = createCandidate(element, tag, id);
|
|
20
|
-
for (const child of children) {
|
|
21
|
-
const item = appendItem(candidate, child, id);
|
|
22
|
-
if (!item || item.label && item.iconWidth) return;
|
|
23
|
-
item.selected = segment.value === child.value;
|
|
24
|
-
}
|
|
25
|
-
return candidate;
|
|
26
|
-
};
|
|
27
|
-
//#endregion
|
|
28
|
-
export { ion_segment_exports, read, shadowSelector, tag, tracksMotion };
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=ion-segment.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-segment.js","names":[],"sources":["../../../src/native/components/ion-segment.ts"],"sourcesContent":["import { createCandidate, appendItem } from '../shared/candidate';\nimport type { Candidate, Identify } from '../shared/candidate';\nimport { inFixedToolbar } from '../shared/dom';\n\nexport const tag = 'ion-segment';\nexport const shadowSelector = 'ion-segment-button';\nexport const tracksMotion = true;\n\nexport const read = (element: HTMLElement, id: Identify): Candidate | undefined => {\n const segment = element as HTMLIonSegmentElement;\n if (\n !inFixedToolbar(element) ||\n segment.scrollable ||\n element.classList.contains('segment-expand') ||\n element.querySelector('ion-segment-button[content-id]')\n )\n return;\n const children = Array.from(element.querySelectorAll<HTMLIonSegmentButtonElement>(':scope > ion-segment-button'));\n if (!children.length) return;\n const candidate = createCandidate(element, tag, id);\n for (const child of children) {\n const item = appendItem(candidate, child, id);\n if (!item || (item.label && item.iconWidth)) return;\n item.selected = segment.value === child.value;\n }\n return candidate;\n};\n"],"mappings":";;;;;;;;;;AAIA,MAAa,MAAM;AACnB,MAAa,iBAAiB;AAC9B,MAAa,eAAe;AAE5B,MAAa,QAAQ,SAAsB,OAAwC;CACjF,MAAM,UAAU;CAChB,IACE,CAAC,eAAe,OAAO,KACvB,QAAQ,cACR,QAAQ,UAAU,SAAS,gBAAgB,KAC3C,QAAQ,cAAc,gCAAgC,GAEtD;CACF,MAAM,WAAW,MAAM,KAAK,QAAQ,iBAA8C,6BAA6B,CAAC;CAChH,IAAI,CAAC,SAAS,QAAQ;CACtB,MAAM,YAAY,gBAAgB,SAAS,KAAK,EAAE;CAClD,KAAK,MAAM,SAAS,UAAU;EAC5B,MAAM,OAAO,WAAW,WAAW,OAAO,EAAE;EAC5C,IAAI,CAAC,QAAS,KAAK,SAAS,KAAK,WAAY;EAC7C,KAAK,WAAW,QAAQ,UAAU,MAAM;CAC1C;CACA,OAAO;AACT"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Candidate, Identify } from "../shared/candidate.js";
|
|
2
|
-
declare namespace ion_tab_bar_d_exports {
|
|
3
|
-
export { read, shadowSelector, tag, tracksMotion };
|
|
4
|
-
}
|
|
5
|
-
export declare const tag = "ion-tab-bar";
|
|
6
|
-
export declare const shadowSelector = "ion-tab-button";
|
|
7
|
-
export declare const tracksMotion = true;
|
|
8
|
-
export declare const read: (element: HTMLElement, id: Identify) => Candidate | undefined;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { ion_tab_bar_d_exports };
|
|
11
|
-
//# sourceMappingURL=ion-tab-bar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-tab-bar.d.ts","names":[],"sources":["../../../src/native/components/ion-tab-bar.ts"],"mappings":";;;;qBAGa;qBACA;qBACA;qBAEA,OAAQ,SAAS,aAAa,IAAI,aAAW"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { appendItem, createCandidate } from "../shared/candidate.js";
|
|
3
|
-
//#region src/native/components/ion-tab-bar.ts
|
|
4
|
-
var ion_tab_bar_exports = /* @__PURE__ */ __exportAll({
|
|
5
|
-
read: () => read,
|
|
6
|
-
shadowSelector: () => shadowSelector,
|
|
7
|
-
tag: () => tag,
|
|
8
|
-
tracksMotion: () => true
|
|
9
|
-
});
|
|
10
|
-
const tag = "ion-tab-bar";
|
|
11
|
-
const shadowSelector = "ion-tab-button";
|
|
12
|
-
const tracksMotion = true;
|
|
13
|
-
const read = (element, id) => {
|
|
14
|
-
if (element.closest("ion-content")) return;
|
|
15
|
-
const children = Array.from(element.querySelectorAll(":scope > ion-tab-button:not(.ion-cloned-element)"));
|
|
16
|
-
if (!children.length) return;
|
|
17
|
-
const width = children[0].getBoundingClientRect().width;
|
|
18
|
-
if (children.some((child) => (child.layout ?? "icon-top") !== "icon-top" || Math.abs(child.getBoundingClientRect().width - width) > 1)) return void 0;
|
|
19
|
-
const candidate = createCandidate(element, tag, id);
|
|
20
|
-
const style = getComputedStyle(element);
|
|
21
|
-
const rtl = style.direction === "rtl";
|
|
22
|
-
const position = [
|
|
23
|
-
"start",
|
|
24
|
-
"center",
|
|
25
|
-
"end"
|
|
26
|
-
].find((value) => element.classList.contains(`tab-bar-position-${value}`));
|
|
27
|
-
candidate.control.tabBarAnchor = {
|
|
28
|
-
x: position === "center" ? .5 : position ? position === "start" !== rtl ? 0 : 1 : style.left !== "auto" ? 0 : 1,
|
|
29
|
-
y: element.slot === "bottom" ? 1 : 0
|
|
30
|
-
};
|
|
31
|
-
for (const child of children) {
|
|
32
|
-
const item = appendItem(candidate, child, id);
|
|
33
|
-
if (!item) return;
|
|
34
|
-
const svg = child.querySelector("svg") ?? child.querySelector("ion-icon")?.shadowRoot?.querySelector("svg");
|
|
35
|
-
if (svg) {
|
|
36
|
-
item.iconPosition = "top";
|
|
37
|
-
const color = getComputedStyle(svg).color;
|
|
38
|
-
const shapes = Array.from(svg.querySelectorAll("path, rect, circle, ellipse, line, polygon, polyline"));
|
|
39
|
-
item.iconTemplate = shapes.length > 0 && shapes.every((shape) => {
|
|
40
|
-
const paint = getComputedStyle(shape);
|
|
41
|
-
return [paint.fill, paint.stroke].every((value) => value === "none" || value === color);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return candidate;
|
|
46
|
-
};
|
|
47
|
-
//#endregion
|
|
48
|
-
export { ion_tab_bar_exports, read, shadowSelector, tag, tracksMotion };
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=ion-tab-bar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ion-tab-bar.js","names":[],"sources":["../../../src/native/components/ion-tab-bar.ts"],"sourcesContent":["import { createCandidate, appendItem } from '../shared/candidate';\nimport type { Candidate, Identify } from '../shared/candidate';\n\nexport const tag = 'ion-tab-bar';\nexport const shadowSelector = 'ion-tab-button';\nexport const tracksMotion = true;\n\nexport const read = (element: HTMLElement, id: Identify): Candidate | undefined => {\n if (element.closest('ion-content')) return;\n const children = Array.from(element.querySelectorAll<HTMLElement>(':scope > ion-tab-button:not(.ion-cloned-element)'));\n if (!children.length) return;\n // Only equal items with Ionic's default layout map to UIKit's adaptive tabs.\n const width = children[0].getBoundingClientRect().width;\n if (\n children.some(\n (child) =>\n ((child as HTMLIonTabButtonElement).layout ?? 'icon-top') !== 'icon-top' ||\n Math.abs(child.getBoundingClientRect().width - width) > 1,\n )\n )\n return undefined;\n\n const candidate = createCandidate(element, tag, id);\n const style = getComputedStyle(element);\n const rtl = style.direction === 'rtl';\n const position = ['start', 'center', 'end'].find((value) => element.classList.contains(`tab-bar-position-${value}`));\n candidate.control.tabBarAnchor = {\n x: position === 'center' ? 0.5 : position ? ((position === 'start') !== rtl ? 0 : 1) : style.left !== 'auto' ? 0 : 1,\n y: element.slot === 'bottom' ? 1 : 0,\n };\n\n for (const child of children) {\n const item = appendItem(candidate, child, id);\n if (!item) return;\n const svg = child.querySelector<SVGElement>('svg') ?? child.querySelector('ion-icon')?.shadowRoot?.querySelector<SVGElement>('svg');\n if (svg) {\n item.iconPosition = 'top';\n const color = getComputedStyle(svg).color;\n const shapes = Array.from(svg.querySelectorAll('path, rect, circle, ellipse, line, polygon, polyline'));\n // Only text-colored SVGs follow UIKit selection tint; preserve explicit artwork colors.\n item.iconTemplate =\n shapes.length > 0 &&\n shapes.every((shape) => {\n const paint = getComputedStyle(shape);\n return [paint.fill, paint.stroke].every((value) => value === 'none' || value === color);\n });\n }\n }\n return candidate;\n};\n"],"mappings":";;;;;;;;;AAGA,MAAa,MAAM;AACnB,MAAa,iBAAiB;AAC9B,MAAa,eAAe;AAE5B,MAAa,QAAQ,SAAsB,OAAwC;CACjF,IAAI,QAAQ,QAAQ,aAAa,GAAG;CACpC,MAAM,WAAW,MAAM,KAAK,QAAQ,iBAA8B,kDAAkD,CAAC;CACrH,IAAI,CAAC,SAAS,QAAQ;CAEtB,MAAM,QAAQ,SAAS,EAAE,CAAC,sBAAsB,CAAC,CAAC;CAClD,IACE,SAAS,MACN,WACG,MAAkC,UAAU,gBAAgB,cAC9D,KAAK,IAAI,MAAM,sBAAsB,CAAC,CAAC,QAAQ,KAAK,IAAI,CAC5D,GAEA,OAAO,KAAA;CAET,MAAM,YAAY,gBAAgB,SAAS,KAAK,EAAE;CAClD,MAAM,QAAQ,iBAAiB,OAAO;CACtC,MAAM,MAAM,MAAM,cAAc;CAChC,MAAM,WAAW;EAAC;EAAS;EAAU;CAAK,CAAC,CAAC,MAAM,UAAU,QAAQ,UAAU,SAAS,oBAAoB,OAAO,CAAC;CACnH,UAAU,QAAQ,eAAe;EAC/B,GAAG,aAAa,WAAW,KAAM,WAAa,aAAa,YAAa,MAAM,IAAI,IAAK,MAAM,SAAS,SAAS,IAAI;EACnH,GAAG,QAAQ,SAAS,WAAW,IAAI;CACrC;CAEA,KAAK,MAAM,SAAS,UAAU;EAC5B,MAAM,OAAO,WAAW,WAAW,OAAO,EAAE;EAC5C,IAAI,CAAC,MAAM;EACX,MAAM,MAAM,MAAM,cAA0B,KAAK,KAAK,MAAM,cAAc,UAAU,CAAC,EAAE,YAAY,cAA0B,KAAK;EAClI,IAAI,KAAK;GACP,KAAK,eAAe;GACpB,MAAM,QAAQ,iBAAiB,GAAG,CAAC,CAAC;GACpC,MAAM,SAAS,MAAM,KAAK,IAAI,iBAAiB,sDAAsD,CAAC;GAEtG,KAAK,eACH,OAAO,SAAS,KAChB,OAAO,OAAO,UAAU;IACtB,MAAM,QAAQ,iBAAiB,KAAK;IACpC,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,CAAC,CAAC,OAAO,UAAU,UAAU,UAAU,UAAU,KAAK;GACxF,CAAC;EACL;CACF;CACA,OAAO;AACT"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { NativeSearchBinding } from "../../native-integration/index.js";
|
|
2
|
-
import { ShellSearchEvent } from "../definitions.js";
|
|
3
|
-
import { Candidate } from "../shared/candidate.js";
|
|
4
|
-
//#region src/native/components/searchable-tabs.d.ts
|
|
5
|
-
export declare const createSearchSupport: (doc: Document, id: (element: Element) => string, schedule: () => void) => {
|
|
6
|
-
keyboard(visible: boolean): void;
|
|
7
|
-
keepSearchTabsVisible(): void;
|
|
8
|
-
decorate(candidates: Candidate[], blocked: (element: HTMLElement) => boolean): Candidate[];
|
|
9
|
-
projected: (binding: NativeSearchBinding) => boolean;
|
|
10
|
-
hasActive(): boolean;
|
|
11
|
-
begin(binding: NativeSearchBinding, revision: number): void;
|
|
12
|
-
setStatus(binding: NativeSearchBinding, active: boolean, focused?: boolean): void;
|
|
13
|
-
release(element: HTMLElement): void;
|
|
14
|
-
reject(ids: string[]): void;
|
|
15
|
-
event(event: ShellSearchEvent): void;
|
|
16
|
-
retire(binding: NativeSearchBinding): void;
|
|
17
|
-
destroy(): void;
|
|
18
|
-
};
|
|
19
|
-
//#endregion
|
|
20
|
-
//# sourceMappingURL=searchable-tabs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchable-tabs.d.ts","names":[],"sources":["../../../src/native/components/searchable-tabs.ts"],"mappings":";;;;qBAwBa,sBAAuB,KAAK,UAAU,KAAK,SAAS,oBAAoB;EA8I/D,SAAA;;EAwBG,SAAA,YAAA,aAAW,UAAY,SAAS,0BAA0B;EAvJrD,YAAA,SAAA;;EA+UX,MAAA,SAAA,qBAAmB;EAKf,UAAA,SAAA,qBAAmB,iBAAiB;EAUtC,QAAA,SAAA;EAGL,OAAA;EASC,MAAA,OAAA;EAqCG,OAAA,SAAA"}
|