@elurjs/ionic 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +272 -0
- package/MIGRATION.md +221 -0
- package/README.md +695 -0
- package/dist/lib/IonRouterOutlet.d.ts +134 -0
- package/dist/lib/__tests__/IonRouterOutlet.test.d.ts +1 -0
- package/dist/lib/__tests__/bundles.test.d.ts +1 -0
- package/dist/lib/__tests__/cache-policy.test.d.ts +1 -0
- package/dist/lib/__tests__/capacitor.test.d.ts +1 -0
- package/dist/lib/__tests__/components.test.d.ts +1 -0
- package/dist/lib/__tests__/lifecycle.test.d.ts +1 -0
- package/dist/lib/__tests__/mocks/ionic.d.ts +61 -0
- package/dist/lib/__tests__/navigation.test.d.ts +1 -0
- package/dist/lib/__tests__/overlays.test.d.ts +1 -0
- package/dist/lib/__tests__/page-state.test.d.ts +1 -0
- package/dist/lib/__tests__/phase0-bugs.test.d.ts +1 -0
- package/dist/lib/__tests__/setup.d.ts +1 -0
- package/dist/lib/__tests__/setup.test.d.ts +1 -0
- package/dist/lib/__tests__/tabs.test.d.ts +1 -0
- package/dist/lib/__tests__/vite-plugin.test.d.ts +1 -0
- package/dist/lib/bundles/all.cjs +2 -0
- package/dist/lib/bundles/all.cjs.map +1 -0
- package/dist/lib/bundles/all.d.ts +16 -0
- package/dist/lib/bundles/all.js +21 -0
- package/dist/lib/bundles/all.js.map +1 -0
- package/dist/lib/bundles/buttons.cjs +2 -0
- package/dist/lib/bundles/buttons.cjs.map +1 -0
- package/dist/lib/bundles/buttons.d.ts +7 -0
- package/dist/lib/bundles/buttons.js +17 -0
- package/dist/lib/bundles/buttons.js.map +1 -0
- package/dist/lib/bundles/feedback.cjs +2 -0
- package/dist/lib/bundles/feedback.cjs.map +1 -0
- package/dist/lib/bundles/feedback.d.ts +8 -0
- package/dist/lib/bundles/feedback.js +19 -0
- package/dist/lib/bundles/feedback.js.map +1 -0
- package/dist/lib/bundles/forms.cjs +2 -0
- package/dist/lib/bundles/forms.cjs.map +1 -0
- package/dist/lib/bundles/forms.d.ts +11 -0
- package/dist/lib/bundles/forms.js +47 -0
- package/dist/lib/bundles/forms.js.map +1 -0
- package/dist/lib/bundles/layout.cjs +2 -0
- package/dist/lib/bundles/layout.cjs.map +1 -0
- package/dist/lib/bundles/layout.d.ts +9 -0
- package/dist/lib/bundles/layout.js +33 -0
- package/dist/lib/bundles/layout.js.map +1 -0
- package/dist/lib/bundles/lists.cjs +2 -0
- package/dist/lib/bundles/lists.cjs.map +1 -0
- package/dist/lib/bundles/lists.d.ts +15 -0
- package/dist/lib/bundles/lists.js +65 -0
- package/dist/lib/bundles/lists.js.map +1 -0
- package/dist/lib/bundles/navigation.cjs +2 -0
- package/dist/lib/bundles/navigation.cjs.map +1 -0
- package/dist/lib/bundles/navigation.d.ts +9 -0
- package/dist/lib/bundles/navigation.js +29 -0
- package/dist/lib/bundles/navigation.js.map +1 -0
- package/dist/lib/bundles/overlays.cjs +2 -0
- package/dist/lib/bundles/overlays.cjs.map +1 -0
- package/dist/lib/bundles/overlays.d.ts +9 -0
- package/dist/lib/bundles/overlays.js +25 -0
- package/dist/lib/bundles/overlays.js.map +1 -0
- package/dist/lib/capacitor.cjs +2 -0
- package/dist/lib/capacitor.cjs.map +1 -0
- package/dist/lib/capacitor.d.ts +217 -0
- package/dist/lib/capacitor.js +223 -0
- package/dist/lib/capacitor.js.map +1 -0
- package/dist/lib/components/accordion-group.cjs +1 -0
- package/dist/lib/components/accordion-group.d.ts +11 -0
- package/dist/lib/components/accordion-group.js +2 -0
- package/dist/lib/components/accordion.cjs +1 -0
- package/dist/lib/components/accordion.d.ts +11 -0
- package/dist/lib/components/accordion.js +2 -0
- package/dist/lib/components/action-sheet.cjs +1 -0
- package/dist/lib/components/action-sheet.d.ts +11 -0
- package/dist/lib/components/action-sheet.js +2 -0
- package/dist/lib/components/alert.cjs +1 -0
- package/dist/lib/components/alert.d.ts +11 -0
- package/dist/lib/components/alert.js +2 -0
- package/dist/lib/components/avatar.cjs +1 -0
- package/dist/lib/components/avatar.d.ts +11 -0
- package/dist/lib/components/avatar.js +2 -0
- package/dist/lib/components/backdrop.cjs +1 -0
- package/dist/lib/components/backdrop.d.ts +11 -0
- package/dist/lib/components/backdrop.js +2 -0
- package/dist/lib/components/badge.cjs +1 -0
- package/dist/lib/components/badge.d.ts +11 -0
- package/dist/lib/components/badge.js +2 -0
- package/dist/lib/components/breadcrumb.cjs +1 -0
- package/dist/lib/components/breadcrumb.d.ts +11 -0
- package/dist/lib/components/breadcrumb.js +2 -0
- package/dist/lib/components/breadcrumbs.cjs +1 -0
- package/dist/lib/components/breadcrumbs.d.ts +11 -0
- package/dist/lib/components/breadcrumbs.js +2 -0
- package/dist/lib/components/button.cjs +1 -0
- package/dist/lib/components/button.d.ts +11 -0
- package/dist/lib/components/button.js +2 -0
- package/dist/lib/components/buttons.cjs +1 -0
- package/dist/lib/components/buttons.d.ts +11 -0
- package/dist/lib/components/buttons.js +2 -0
- package/dist/lib/components/card-content.cjs +1 -0
- package/dist/lib/components/card-content.d.ts +11 -0
- package/dist/lib/components/card-content.js +2 -0
- package/dist/lib/components/card-header.cjs +1 -0
- package/dist/lib/components/card-header.d.ts +11 -0
- package/dist/lib/components/card-header.js +2 -0
- package/dist/lib/components/card-subtitle.cjs +1 -0
- package/dist/lib/components/card-subtitle.d.ts +11 -0
- package/dist/lib/components/card-subtitle.js +2 -0
- package/dist/lib/components/card-title.cjs +1 -0
- package/dist/lib/components/card-title.d.ts +11 -0
- package/dist/lib/components/card-title.js +2 -0
- package/dist/lib/components/card.cjs +1 -0
- package/dist/lib/components/card.d.ts +11 -0
- package/dist/lib/components/card.js +2 -0
- package/dist/lib/components/checkbox.cjs +1 -0
- package/dist/lib/components/checkbox.d.ts +11 -0
- package/dist/lib/components/checkbox.js +2 -0
- package/dist/lib/components/chip.cjs +1 -0
- package/dist/lib/components/chip.d.ts +11 -0
- package/dist/lib/components/chip.js +2 -0
- package/dist/lib/components/col.cjs +1 -0
- package/dist/lib/components/col.d.ts +11 -0
- package/dist/lib/components/col.js +2 -0
- package/dist/lib/components/content.cjs +1 -0
- package/dist/lib/components/content.d.ts +11 -0
- package/dist/lib/components/content.js +2 -0
- package/dist/lib/components/datetime-button.cjs +1 -0
- package/dist/lib/components/datetime-button.d.ts +11 -0
- package/dist/lib/components/datetime-button.js +2 -0
- package/dist/lib/components/datetime.cjs +1 -0
- package/dist/lib/components/datetime.d.ts +11 -0
- package/dist/lib/components/datetime.js +2 -0
- package/dist/lib/components/fab-button.cjs +1 -0
- package/dist/lib/components/fab-button.d.ts +11 -0
- package/dist/lib/components/fab-button.js +2 -0
- package/dist/lib/components/fab-list.cjs +1 -0
- package/dist/lib/components/fab-list.d.ts +11 -0
- package/dist/lib/components/fab-list.js +2 -0
- package/dist/lib/components/fab.cjs +1 -0
- package/dist/lib/components/fab.d.ts +11 -0
- package/dist/lib/components/fab.js +2 -0
- package/dist/lib/components/footer.cjs +1 -0
- package/dist/lib/components/footer.d.ts +11 -0
- package/dist/lib/components/footer.js +2 -0
- package/dist/lib/components/grid.cjs +1 -0
- package/dist/lib/components/grid.d.ts +11 -0
- package/dist/lib/components/grid.js +2 -0
- package/dist/lib/components/header.cjs +1 -0
- package/dist/lib/components/header.d.ts +11 -0
- package/dist/lib/components/header.js +2 -0
- package/dist/lib/components/img.cjs +1 -0
- package/dist/lib/components/img.d.ts +11 -0
- package/dist/lib/components/img.js +2 -0
- package/dist/lib/components/infinite-scroll-content.cjs +1 -0
- package/dist/lib/components/infinite-scroll-content.d.ts +11 -0
- package/dist/lib/components/infinite-scroll-content.js +2 -0
- package/dist/lib/components/infinite-scroll.cjs +1 -0
- package/dist/lib/components/infinite-scroll.d.ts +11 -0
- package/dist/lib/components/infinite-scroll.js +2 -0
- package/dist/lib/components/input-otp.cjs +1 -0
- package/dist/lib/components/input-otp.d.ts +11 -0
- package/dist/lib/components/input-otp.js +2 -0
- package/dist/lib/components/input-password-toggle.cjs +1 -0
- package/dist/lib/components/input-password-toggle.d.ts +11 -0
- package/dist/lib/components/input-password-toggle.js +2 -0
- package/dist/lib/components/input.cjs +1 -0
- package/dist/lib/components/input.d.ts +11 -0
- package/dist/lib/components/input.js +2 -0
- package/dist/lib/components/item-divider.cjs +1 -0
- package/dist/lib/components/item-divider.d.ts +11 -0
- package/dist/lib/components/item-divider.js +2 -0
- package/dist/lib/components/item-group.cjs +1 -0
- package/dist/lib/components/item-group.d.ts +11 -0
- package/dist/lib/components/item-group.js +2 -0
- package/dist/lib/components/item-option.cjs +1 -0
- package/dist/lib/components/item-option.d.ts +11 -0
- package/dist/lib/components/item-option.js +2 -0
- package/dist/lib/components/item-options.cjs +1 -0
- package/dist/lib/components/item-options.d.ts +11 -0
- package/dist/lib/components/item-options.js +2 -0
- package/dist/lib/components/item-sliding.cjs +1 -0
- package/dist/lib/components/item-sliding.d.ts +11 -0
- package/dist/lib/components/item-sliding.js +2 -0
- package/dist/lib/components/item.cjs +1 -0
- package/dist/lib/components/item.d.ts +11 -0
- package/dist/lib/components/item.js +2 -0
- package/dist/lib/components/label.cjs +1 -0
- package/dist/lib/components/label.d.ts +11 -0
- package/dist/lib/components/label.js +2 -0
- package/dist/lib/components/list-header.cjs +1 -0
- package/dist/lib/components/list-header.d.ts +11 -0
- package/dist/lib/components/list-header.js +2 -0
- package/dist/lib/components/list.cjs +1 -0
- package/dist/lib/components/list.d.ts +11 -0
- package/dist/lib/components/list.js +2 -0
- package/dist/lib/components/loading.cjs +1 -0
- package/dist/lib/components/loading.d.ts +11 -0
- package/dist/lib/components/loading.js +2 -0
- package/dist/lib/components/manifest.cjs +2 -0
- package/dist/lib/components/manifest.cjs.map +1 -0
- package/dist/lib/components/manifest.d.ts +43 -0
- package/dist/lib/components/manifest.js +647 -0
- package/dist/lib/components/manifest.js.map +1 -0
- package/dist/lib/components/menu-button.cjs +1 -0
- package/dist/lib/components/menu-button.d.ts +11 -0
- package/dist/lib/components/menu-button.js +2 -0
- package/dist/lib/components/menu-toggle.cjs +1 -0
- package/dist/lib/components/menu-toggle.d.ts +11 -0
- package/dist/lib/components/menu-toggle.js +2 -0
- package/dist/lib/components/menu.cjs +1 -0
- package/dist/lib/components/menu.d.ts +11 -0
- package/dist/lib/components/menu.js +2 -0
- package/dist/lib/components/modal.cjs +1 -0
- package/dist/lib/components/modal.d.ts +11 -0
- package/dist/lib/components/modal.js +2 -0
- package/dist/lib/components/nav-link.cjs +1 -0
- package/dist/lib/components/nav-link.d.ts +11 -0
- package/dist/lib/components/nav-link.js +2 -0
- package/dist/lib/components/nav.cjs +1 -0
- package/dist/lib/components/nav.d.ts +11 -0
- package/dist/lib/components/nav.js +2 -0
- package/dist/lib/components/note.cjs +1 -0
- package/dist/lib/components/note.d.ts +11 -0
- package/dist/lib/components/note.js +2 -0
- package/dist/lib/components/picker-column-option.cjs +1 -0
- package/dist/lib/components/picker-column-option.d.ts +11 -0
- package/dist/lib/components/picker-column-option.js +2 -0
- package/dist/lib/components/picker-column.cjs +1 -0
- package/dist/lib/components/picker-column.d.ts +11 -0
- package/dist/lib/components/picker-column.js +2 -0
- package/dist/lib/components/picker.cjs +1 -0
- package/dist/lib/components/picker.d.ts +11 -0
- package/dist/lib/components/picker.js +2 -0
- package/dist/lib/components/popover.cjs +1 -0
- package/dist/lib/components/popover.d.ts +11 -0
- package/dist/lib/components/popover.js +2 -0
- package/dist/lib/components/progress-bar.cjs +1 -0
- package/dist/lib/components/progress-bar.d.ts +11 -0
- package/dist/lib/components/progress-bar.js +2 -0
- package/dist/lib/components/radio-group.cjs +1 -0
- package/dist/lib/components/radio-group.d.ts +11 -0
- package/dist/lib/components/radio-group.js +2 -0
- package/dist/lib/components/radio.cjs +1 -0
- package/dist/lib/components/radio.d.ts +11 -0
- package/dist/lib/components/radio.js +2 -0
- package/dist/lib/components/range.cjs +1 -0
- package/dist/lib/components/range.d.ts +11 -0
- package/dist/lib/components/range.js +2 -0
- package/dist/lib/components/refresher-content.cjs +1 -0
- package/dist/lib/components/refresher-content.d.ts +11 -0
- package/dist/lib/components/refresher-content.js +2 -0
- package/dist/lib/components/refresher.cjs +1 -0
- package/dist/lib/components/refresher.d.ts +11 -0
- package/dist/lib/components/refresher.js +2 -0
- package/dist/lib/components/reorder-group.cjs +1 -0
- package/dist/lib/components/reorder-group.d.ts +11 -0
- package/dist/lib/components/reorder-group.js +2 -0
- package/dist/lib/components/reorder.cjs +1 -0
- package/dist/lib/components/reorder.d.ts +11 -0
- package/dist/lib/components/reorder.js +2 -0
- package/dist/lib/components/ripple-effect.cjs +1 -0
- package/dist/lib/components/ripple-effect.d.ts +11 -0
- package/dist/lib/components/ripple-effect.js +2 -0
- package/dist/lib/components/router-link.cjs +1 -0
- package/dist/lib/components/router-link.d.ts +11 -0
- package/dist/lib/components/router-link.js +2 -0
- package/dist/lib/components/row.cjs +1 -0
- package/dist/lib/components/row.d.ts +11 -0
- package/dist/lib/components/row.js +2 -0
- package/dist/lib/components/searchbar.cjs +1 -0
- package/dist/lib/components/searchbar.d.ts +11 -0
- package/dist/lib/components/searchbar.js +2 -0
- package/dist/lib/components/segment-button.cjs +1 -0
- package/dist/lib/components/segment-button.d.ts +11 -0
- package/dist/lib/components/segment-button.js +2 -0
- package/dist/lib/components/segment-content.cjs +1 -0
- package/dist/lib/components/segment-content.d.ts +11 -0
- package/dist/lib/components/segment-content.js +2 -0
- package/dist/lib/components/segment-view.cjs +1 -0
- package/dist/lib/components/segment-view.d.ts +11 -0
- package/dist/lib/components/segment-view.js +2 -0
- package/dist/lib/components/segment.cjs +1 -0
- package/dist/lib/components/segment.d.ts +11 -0
- package/dist/lib/components/segment.js +2 -0
- package/dist/lib/components/select-modal.cjs +1 -0
- package/dist/lib/components/select-modal.d.ts +11 -0
- package/dist/lib/components/select-modal.js +2 -0
- package/dist/lib/components/select-option.cjs +1 -0
- package/dist/lib/components/select-option.d.ts +11 -0
- package/dist/lib/components/select-option.js +2 -0
- package/dist/lib/components/select-popover.cjs +1 -0
- package/dist/lib/components/select-popover.d.ts +11 -0
- package/dist/lib/components/select-popover.js +2 -0
- package/dist/lib/components/select.cjs +1 -0
- package/dist/lib/components/select.d.ts +11 -0
- package/dist/lib/components/select.js +2 -0
- package/dist/lib/components/skeleton-text.cjs +1 -0
- package/dist/lib/components/skeleton-text.d.ts +11 -0
- package/dist/lib/components/skeleton-text.js +2 -0
- package/dist/lib/components/spinner.cjs +1 -0
- package/dist/lib/components/spinner.d.ts +11 -0
- package/dist/lib/components/spinner.js +2 -0
- package/dist/lib/components/split-pane.cjs +1 -0
- package/dist/lib/components/split-pane.d.ts +11 -0
- package/dist/lib/components/split-pane.js +2 -0
- package/dist/lib/components/tab-bar.cjs +1 -0
- package/dist/lib/components/tab-bar.d.ts +11 -0
- package/dist/lib/components/tab-bar.js +2 -0
- package/dist/lib/components/tab-button.cjs +1 -0
- package/dist/lib/components/tab-button.d.ts +11 -0
- package/dist/lib/components/tab-button.js +2 -0
- package/dist/lib/components/tab.cjs +1 -0
- package/dist/lib/components/tab.d.ts +11 -0
- package/dist/lib/components/tab.js +2 -0
- package/dist/lib/components/tabs.cjs +1 -0
- package/dist/lib/components/tabs.d.ts +11 -0
- package/dist/lib/components/tabs.js +2 -0
- package/dist/lib/components/text.cjs +1 -0
- package/dist/lib/components/text.d.ts +11 -0
- package/dist/lib/components/text.js +2 -0
- package/dist/lib/components/textarea.cjs +1 -0
- package/dist/lib/components/textarea.d.ts +11 -0
- package/dist/lib/components/textarea.js +2 -0
- package/dist/lib/components/thumbnail.cjs +1 -0
- package/dist/lib/components/thumbnail.d.ts +11 -0
- package/dist/lib/components/thumbnail.js +2 -0
- package/dist/lib/components/title.cjs +1 -0
- package/dist/lib/components/title.d.ts +11 -0
- package/dist/lib/components/title.js +2 -0
- package/dist/lib/components/toast.cjs +1 -0
- package/dist/lib/components/toast.d.ts +11 -0
- package/dist/lib/components/toast.js +2 -0
- package/dist/lib/components/toggle.cjs +1 -0
- package/dist/lib/components/toggle.d.ts +11 -0
- package/dist/lib/components/toggle.js +2 -0
- package/dist/lib/components/toolbar.cjs +1 -0
- package/dist/lib/components/toolbar.d.ts +11 -0
- package/dist/lib/components/toolbar.js +2 -0
- package/dist/lib/components.cjs +1 -0
- package/dist/lib/components.d.ts +110 -0
- package/dist/lib/components.js +94 -0
- package/dist/lib/definitions-DZ-6I7Fj.js +282 -0
- package/dist/lib/definitions-DZ-6I7Fj.js.map +1 -0
- package/dist/lib/definitions-Lm2GaF-Z.cjs +2 -0
- package/dist/lib/definitions-Lm2GaF-Z.cjs.map +1 -0
- package/dist/lib/elur-ionic.cjs +1 -0
- package/dist/lib/elur-ionic.cjs.map +1 -0
- package/dist/lib/elur-ionic.js +1 -0
- package/dist/lib/elur-ionic.js.map +1 -0
- package/dist/lib/index.d.ts +47 -0
- package/dist/lib/lifecycle.d.ts +62 -0
- package/dist/lib/navigation.cjs +2 -0
- package/dist/lib/navigation.cjs.map +1 -0
- package/dist/lib/navigation.d.ts +214 -0
- package/dist/lib/navigation.js +193 -0
- package/dist/lib/navigation.js.map +1 -0
- package/dist/lib/overlays.cjs +2 -0
- package/dist/lib/overlays.cjs.map +1 -0
- package/dist/lib/overlays.d.ts +400 -0
- package/dist/lib/overlays.js +161 -0
- package/dist/lib/overlays.js.map +1 -0
- package/dist/lib/page-state.cjs +2 -0
- package/dist/lib/page-state.cjs.map +1 -0
- package/dist/lib/page-state.d.ts +160 -0
- package/dist/lib/page-state.js +91 -0
- package/dist/lib/page-state.js.map +1 -0
- package/dist/lib/setup.d.ts +105 -0
- package/dist/lib/tabs-ByPLrzax.cjs +50 -0
- package/dist/lib/tabs-ByPLrzax.cjs.map +1 -0
- package/dist/lib/tabs-DjD1_PTM.js +178 -0
- package/dist/lib/tabs-DjD1_PTM.js.map +1 -0
- package/dist/lib/tabs.cjs +1 -0
- package/dist/lib/tabs.d.ts +83 -0
- package/dist/lib/tabs.js +2 -0
- package/dist/lib/vite-plugin.cjs +39 -0
- package/dist/lib/vite-plugin.cjs.map +1 -0
- package/dist/lib/vite-plugin.d.ts +61 -0
- package/dist/lib/vite-plugin.js +26703 -0
- package/dist/lib/vite-plugin.js.map +1 -0
- package/dist/lib/web-C-maW8Tl.cjs +2 -0
- package/dist/lib/web-C-maW8Tl.cjs.map +1 -0
- package/dist/lib/web-jkqBWgLD.js +56 -0
- package/dist/lib/web-jkqBWgLD.js.map +1 -0
- package/package.json +204 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [2.0.7]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Nix.js framework delegate for overlays** — `createPopover()` and
|
|
13
|
+
`createModal()` now automatically inject a Nix.js `FrameworkDelegate`
|
|
14
|
+
when `component` is a function (e.g. `() => html\`...\``). This fixes
|
|
15
|
+
the `"framework delegate is missing"` error that occurred when passing
|
|
16
|
+
Nix.js templates as overlay content. The delegate uses `mount()` to
|
|
17
|
+
render the template inside the overlay and `unmount()` on dismiss.
|
|
18
|
+
- **Vite plugin warnings for unlisted icons** — when the plugin detects
|
|
19
|
+
`name="icon-name"` on `<ion-icon>` in templates and the icon is not in
|
|
20
|
+
`allowIcons`, it now emits a warning listing the icons and the file.
|
|
21
|
+
This complements the existing tag warnings and helps catch missing
|
|
22
|
+
icon registrations caused by lazy-loaded pages.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- **Tab IDs no longer have leading hyphens** — `_normalizePath("/search")`
|
|
27
|
+
produced `-search` (with a leading `-`) because the leading `/` was
|
|
28
|
+
replaced with `-`. Now `/search` → `search`, `/profile` → `profile`,
|
|
29
|
+
and `/` → `root`. This fixes the `[ion-tabs] Tab with id: "undefined"
|
|
30
|
+
does not exist` error that occurred on tab clicks.
|
|
31
|
+
- **Tab bar now renders at the bottom** — `ion-tabs` defaults to
|
|
32
|
+
`display: block` with no explicit height, which collapsed the layout
|
|
33
|
+
because `ion-router-outlet` is `position: absolute`. A small CSS
|
|
34
|
+
snippet is now injected by `createTabsLayout()` to force `ion-tabs`
|
|
35
|
+
into a flexbox column layout where the outlet fills the available
|
|
36
|
+
space and the tab bar sits at the bottom.
|
|
37
|
+
- **Tab click no longer triggers Ionic's internal `select()`** — the
|
|
38
|
+
`@click` handler on `ion-tab-button` now uses Nix.js event modifiers
|
|
39
|
+
(`@click.prevent.stop`) to prevent Ionic's internal tab selection
|
|
40
|
+
(which looks for `<ion-tab>` children we don't have). Navigation is
|
|
41
|
+
driven entirely by the Nix.js router.
|
|
42
|
+
- **Invalid `import { foo as "string" }` syntax in generated module** —
|
|
43
|
+
the Vite plugin was generating `import { alertCircleOutline as
|
|
44
|
+
"alert-circle-outline" } from "ionicons/icons"` which is not valid
|
|
45
|
+
JavaScript (alias must be an identifier, not a string). Now generates
|
|
46
|
+
`import { alertCircleOutline } from "ionicons/icons"` and maps
|
|
47
|
+
kebab-case names in the `registerIonicons({ ... })` call instead.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## [2.0.6]
|
|
52
|
+
|
|
53
|
+
### Added
|
|
54
|
+
|
|
55
|
+
- **Vite plugin warnings for unlisted tags** — when the plugin detects
|
|
56
|
+
`<ion-*>` tags in templates that are not in `allowTags`, it now emits a
|
|
57
|
+
warning listing the tags and the file. This helps catch missing
|
|
58
|
+
registrations caused by lazy-loaded pages (the virtual module is served
|
|
59
|
+
before all page files are scanned).
|
|
60
|
+
- **"New tags discovered after registration" warning** — if tags are found
|
|
61
|
+
after the registration module was already served, the plugin warns that
|
|
62
|
+
they were NOT included and the user should add them to `allowTags`.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## [2.0.5]
|
|
67
|
+
|
|
68
|
+
### Added
|
|
69
|
+
|
|
70
|
+
- **`cssVars` option in `BottomTabBarOptions`** — set CSS custom properties
|
|
71
|
+
on `ion-tab-bar` for theming (`--background`, `--color-selected`, etc.).
|
|
72
|
+
- **`layout` option in `BottomTabBarOptions`** — configurable tab button
|
|
73
|
+
layout: `icon-top` (default), `icon-start`, `icon-end`, `icon-bottom`,
|
|
74
|
+
`icon-hide`, `label-hide`.
|
|
75
|
+
- **`badge` + `badgeColor` in `BottomTabItem`** — renders `<ion-badge>` inside
|
|
76
|
+
tab buttons for notification counts.
|
|
77
|
+
- **`TabButtonLayout` type exported** for consumer type-safety.
|
|
78
|
+
- **`ion-buttons` registered as core component** in `initializeNixIonic()`.
|
|
79
|
+
|
|
80
|
+
### Fixed
|
|
81
|
+
|
|
82
|
+
- **Tab button `selected` property now set via JS (not attribute)** — Stencil
|
|
83
|
+
boolean `@Prop` cannot be set via HTML attributes with Nix.js (`selected=""`
|
|
84
|
+
is falsy in Stencil's coercion). `createBottomTabBar` now uses a `ref` +
|
|
85
|
+
`effect` + `nextTick` to set `(btn as any).selected = isActive` directly on
|
|
86
|
+
each `ion-tab-button` after DOM mount and on every route change. This
|
|
87
|
+
triggers Stencil re-renders, applying internal classes (`tab-has-icon`,
|
|
88
|
+
`tab-selected`, `tab-layout-icon-top`) correctly — fixing the icon resize
|
|
89
|
+
and label layout shift.
|
|
90
|
+
- **Tab button class no longer overwritten** — removed `class=${...}` binding
|
|
91
|
+
on `ion-tab-button` that was clobbering Stencil's internal host classes
|
|
92
|
+
(`md`, `tab-has-icon`, `tab-layout-icon-top`, `hydrated`, etc.). Stencil
|
|
93
|
+
manages these classes; external class binding destroyed them on route
|
|
94
|
+
change, causing icon resize and label shift.
|
|
95
|
+
- **Initial load sync** — on first render, `tabBarRef.el` is null (template
|
|
96
|
+
hasn't mounted). Added `nextTick` retry so `selected` is set after the DOM
|
|
97
|
+
is ready.
|
|
98
|
+
- **`IonBackButton` now wrapped in `<ion-buttons slot="start">`** — without
|
|
99
|
+
this wrapper, `ion-back-button` had no flex constraints and could expand
|
|
100
|
+
to fill the toolbar width.
|
|
101
|
+
- **`createPicker` now uses `pickerController`** — Ionic 8's `ion-picker` is
|
|
102
|
+
a wheel-style component without `columns`/`buttons`/`isOpen`. The legacy
|
|
103
|
+
picker (with columns/buttons API) is accessed via `pickerController`, which
|
|
104
|
+
creates `<ion-picker-legacy>` internally. `createPicker` now lazily
|
|
105
|
+
registers `ion-picker-legacy`, `ion-picker-legacy-column`, and
|
|
106
|
+
`ion-backdrop` via dynamic import (preserving tree-shaking).
|
|
107
|
+
- **Removed unused `createInlineOverlayHandle`** — dead code after picker
|
|
108
|
+
migration to controller pattern.
|
|
109
|
+
|
|
110
|
+
### E2E verified
|
|
111
|
+
|
|
112
|
+
- 7 Playwright tests pass: tab bar positioning, `selected` property, icon
|
|
113
|
+
size stability (0px diff on tab switch), internal Stencil classes,
|
|
114
|
+
click switching.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## [2.0.4]
|
|
119
|
+
|
|
120
|
+
### Fixed
|
|
121
|
+
|
|
122
|
+
- **Tab button icon resize / text layout shift**: `ion-tab-button` uses a
|
|
123
|
+
`selected` property (not just a CSS class) to trigger internal Stencil
|
|
124
|
+
re-renders. Without `selected=true`, the component never re-renders, so
|
|
125
|
+
`hasIcon`/`hasLabel` getters (which query the DOM for `ion-icon`/
|
|
126
|
+
`ion-label`) are never re-evaluated. This caused the icon to render at
|
|
127
|
+
the wrong size and the label to shift position. `createBottomTabBar` now
|
|
128
|
+
sets `.selected` reactively based on the active route, in addition to
|
|
129
|
+
the CSS class for backwards compatibility.
|
|
130
|
+
- **Tab button `layout` property**: explicitly set `layout="icon-top"` on
|
|
131
|
+
each `ion-tab-button` to ensure the correct layout class
|
|
132
|
+
(`tab-layout-icon-top`) is applied immediately, preventing layout shifts
|
|
133
|
+
when the component re-renders.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## [2.0.3]
|
|
138
|
+
|
|
139
|
+
### Fixed
|
|
140
|
+
|
|
141
|
+
- **`createTabsLayout` now accepts `IonRouterOutlet`**: `IonRouterOutlet`
|
|
142
|
+
extends `NixComponent`, not `NixTemplate`. `createTabsLayout` now accepts
|
|
143
|
+
both `NixTemplate | NixComponent` and calls `render()` on the component
|
|
144
|
+
to get the template.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## [2.0.2]
|
|
149
|
+
|
|
150
|
+
### Fixed
|
|
151
|
+
|
|
152
|
+
- **Tab bar layout**: `ion-tab-bar` without `ion-tabs` wrapper had no CSS
|
|
153
|
+
positioning — it appeared at the top of the flex flow, behind
|
|
154
|
+
`ion-router-outlet` (which is `position:absolute; inset:0`). Added
|
|
155
|
+
`createTabsLayout(outlet, tabBar)` which wraps both in `<ion-tabs>`,
|
|
156
|
+
providing the correct CSS layout context (flex column, `tabs-inner`
|
|
157
|
+
with `flex:1`, `<slot name="bottom">` for the tab bar).
|
|
158
|
+
- **Tab bar icons**: `createBottomTabBar` uses dynamic `name=${() => tab.icon}`
|
|
159
|
+
expressions which the Vite plugin cannot detect. Added `icons` option to
|
|
160
|
+
`BottomTabBarOptions` — pass icon SVG data and `createBottomTabBar` calls
|
|
161
|
+
`addIcons()` internally.
|
|
162
|
+
|
|
163
|
+
### Added
|
|
164
|
+
|
|
165
|
+
- **`createTabsLayout(outlet, tabBar)`**: wraps an `IonRouterOutlet` and tab
|
|
166
|
+
bar in `<ion-tabs>`, providing the correct CSS layout context. This is the
|
|
167
|
+
recommended way to use tabs with `IonRouterOutlet`.
|
|
168
|
+
- **`BottomTabBarOptions.icons`**: `IconDefinitionMap` for registering tab
|
|
169
|
+
bar icons that can't be auto-detected by the Vite plugin.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## [2.0.1]
|
|
174
|
+
|
|
175
|
+
### Fixed
|
|
176
|
+
|
|
177
|
+
- **Vite plugin: core tags no longer generate invalid imports** —
|
|
178
|
+
`ion-app`, `ion-router-outlet`, `ion-back-button`, and `ion-icon` are
|
|
179
|
+
registered by `initializeNixIonic()` and do not have individual
|
|
180
|
+
component subpaths. The plugin now skips these tags instead of
|
|
181
|
+
generating imports to `@deijose/nix-ionic/components/app` (which
|
|
182
|
+
doesn't exist).
|
|
183
|
+
|
|
184
|
+
### Tests
|
|
185
|
+
|
|
186
|
+
- 236 unit tests (was 235) — added test for core-tag skipping.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## [2.0.0]
|
|
191
|
+
|
|
192
|
+
Major rewrite focused on tree-shakeable components, reactive overlays, cache
|
|
193
|
+
policies, optional Capacitor, and leak-free lifecycle.
|
|
194
|
+
|
|
195
|
+
### Breaking changes
|
|
196
|
+
|
|
197
|
+
- `setupNixIonic()` no longer registers all components by default. Use
|
|
198
|
+
`initializeNixIonic()` + `registerIonicComponents()` or the Vite plugin.
|
|
199
|
+
- `unpkg@latest` asset URL removed. Uses `setAssetPath` — you control assets.
|
|
200
|
+
- Overlay factories renamed from React-style `use*` to Nix.js `create*` pattern:
|
|
201
|
+
`createToast()`, `createAlert()`, `createLoading()`, `createActionSheet()`,
|
|
202
|
+
`createPopover()`, `createModal()`.
|
|
203
|
+
- Single router authority — no more competing Ionic/Nix routers.
|
|
204
|
+
- `createPicker()` reimplemented for Ionic 8 inline `isOpen` pattern (no longer
|
|
205
|
+
uses `pickerController.create()` which hangs in Ionic 8).
|
|
206
|
+
|
|
207
|
+
### Added
|
|
208
|
+
|
|
209
|
+
- **Tree-shakeable components**: per-component subpath imports
|
|
210
|
+
(`@deijose/nix-ionic/components/button`) + bundle subpaths
|
|
211
|
+
(`@deijose/nix-ionic/bundles/layout`).
|
|
212
|
+
- **Vite plugin** `nixIonic()`: auto-detects `<ion-*>` tags in `html```
|
|
213
|
+
templates and generates registration imports.
|
|
214
|
+
- **Reactive overlays**: signal-based `create*` controllers with `presented`
|
|
215
|
+
and `result` signals, latest-wins semantics, stale-result protection.
|
|
216
|
+
- **Cache policies**: LRU/FIFO max eviction, TTL expiry, per-route overrides,
|
|
217
|
+
per-tab cache isolation.
|
|
218
|
+
- **Page-state persistence**: opt-in serializable state across navigation.
|
|
219
|
+
- **NavigationManager + StackManager**: reactive `canGoBack`, single authority.
|
|
220
|
+
- **Optional Capacitor**: `@deijose/nix-ionic/capacitor` subpath with zero web
|
|
221
|
+
bundle cost. StatusBar, SplashScreen, Keyboard, Haptics, and App plugin
|
|
222
|
+
wrappers with graceful web degradation (no-op on web).
|
|
223
|
+
- **Nix.js delegate** for modal/popover overlays: mounts NixTemplate/NixComponent
|
|
224
|
+
inside Ionic overlays.
|
|
225
|
+
- **Bundle measurement script** (`npm run measure-bundles`): validates
|
|
226
|
+
tree-shaking with 4 fixtures (minimal, partial, full, capacitor-only).
|
|
227
|
+
Minimal fixture = 11.3% of full bundle (gzip), capacitor-only = 604 bytes.
|
|
228
|
+
|
|
229
|
+
### Fixed
|
|
230
|
+
|
|
231
|
+
- **Hash-mode navigation race**: transition race condition fixed — rapid
|
|
232
|
+
navigations queue as pending instead of being silently dropped.
|
|
233
|
+
`_isTransitioning` check moved before `cacheKey` early return.
|
|
234
|
+
- **Cached page visibility**: `ion-page-hidden` and inline `display` state
|
|
235
|
+
removed before and after `commit()` to prevent stale hidden state with
|
|
236
|
+
reduced-motion/zero-duration transitions.
|
|
237
|
+
- **Ionic 8 picker**: `createPicker()` reimplemented with `createInlineOverlayHandle()`
|
|
238
|
+
using the `isOpen` property pattern (controller-based `pickerController.create()`
|
|
239
|
+
hangs in Ionic 8).
|
|
240
|
+
|
|
241
|
+
### Tests
|
|
242
|
+
|
|
243
|
+
- 235 unit tests (13 files)
|
|
244
|
+
- 56 E2E tests with real `@ionic/core` (no mocks):
|
|
245
|
+
- 19 application E2E (navigation, lifecycle, overlays, back button)
|
|
246
|
+
- 24 contract tests (custom elements, commit, lifecycle, overlays, properties,
|
|
247
|
+
events, network isolation)
|
|
248
|
+
- 13 accessibility/leak tests (ARIA roles, shadow DOM, focus management,
|
|
249
|
+
repeated navigation, overlay disposal, listener cleanup)
|
|
250
|
+
|
|
251
|
+
### Documentation
|
|
252
|
+
|
|
253
|
+
- [MIGRATION.md](./MIGRATION.md) — full 1.x → 2.0 migration guide
|
|
254
|
+
- Architecture document: `docs/arquitecturas/ARCHITECTURA_TECNICA_NIX_JS_IONIC.md`
|
|
255
|
+
(in the monorepo `docs/` directory)
|
|
256
|
+
- README "Limitations" section: iOS swipe-back documented as unsupported
|
|
257
|
+
|
|
258
|
+
### Migration
|
|
259
|
+
|
|
260
|
+
See [MIGRATION.md](./MIGRATION.md) for the full 1.x → 2.0 migration guide.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## [1.4.14]
|
|
265
|
+
|
|
266
|
+
Previous release — basic Ionic lifecycle & router bridge.
|
|
267
|
+
|
|
268
|
+
- `setupNixIonic()` registered all components from `unpkg@latest`
|
|
269
|
+
- React-style `use*` overlay factories
|
|
270
|
+
- No cache policies
|
|
271
|
+
- No Vite plugin
|
|
272
|
+
- No Capacitor support
|
package/MIGRATION.md
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Migration guide: 1.x → 2.0
|
|
2
|
+
|
|
3
|
+
This guide covers breaking changes, deprecations, and new features when upgrading from `@elurjs/ionic` 1.x to 2.0.
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
2.0 is a major rewrite focused on:
|
|
8
|
+
|
|
9
|
+
- **Tree-shakeable components** — import only what you use, auto-detected by Vite plugin
|
|
10
|
+
- **Reactive overlays** — `create*` pattern controllers with signal-based state
|
|
11
|
+
- **Cache policies** — LRU/FIFO max eviction, TTL expiry, per-route overrides
|
|
12
|
+
- **Page-state persistence** — opt-in serializable state across navigation
|
|
13
|
+
- **Optional Capacitor** — zero web bundle cost, isolated subpath
|
|
14
|
+
- **Single router** — no more competing Ionic/Elur routers
|
|
15
|
+
- **Leak-free lifecycle** — proper cleanup of effects, watchers, timers, overlays
|
|
16
|
+
|
|
17
|
+
## Breaking changes
|
|
18
|
+
|
|
19
|
+
### 1. `setupElurIonic()` no longer registers all components
|
|
20
|
+
|
|
21
|
+
**Before (1.x):**
|
|
22
|
+
```ts
|
|
23
|
+
setupElurIonic(); // registers everything including unpkg@latest assets
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**After (2.0):**
|
|
27
|
+
```ts
|
|
28
|
+
import { initializeElurIonic, registerIonicComponents } from "@elurjs/ionic";
|
|
29
|
+
import { defineIonButton } from "@elurjs/ionic/components/button";
|
|
30
|
+
|
|
31
|
+
initializeElurIonic();
|
|
32
|
+
registerIonicComponents(defineIonButton);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Migration:** Use the compatibility facade or the Vite plugin:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// Option A: compatibility facade (registers everything)
|
|
39
|
+
import { setupElurIonic } from "@elurjs/ionic";
|
|
40
|
+
import { allComponents } from "@elurjs/ionic/bundles/all";
|
|
41
|
+
setupElurIonic({ components: allComponents });
|
|
42
|
+
|
|
43
|
+
// Option B: Vite plugin (auto-detects from html`` templates)
|
|
44
|
+
import { elurIonic } from "@elurjs/ionic/vite-plugin";
|
|
45
|
+
// vite.config.ts: plugins: [elurIonic()]
|
|
46
|
+
// app entry: import "virtual:elur-ionic/registration";
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 2. `unpkg@latest` asset URL removed
|
|
50
|
+
|
|
51
|
+
**Before:** Ionic/Ionicons assets loaded from `unpkg.com@latest` by default.
|
|
52
|
+
**After:** Uses official `setAssetPath` — you control where assets are served from.
|
|
53
|
+
|
|
54
|
+
**Migration:** If you relied on the CDN, configure it explicitly:
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
initializeElurIonic({
|
|
58
|
+
// assets are resolved relative to your bundle by default
|
|
59
|
+
// for CDN: setAssetPath("https://unpkg.com/@ionic/core@8/dist/")
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 3. `@ionic/core` and `ionicons` are now peer dependencies
|
|
64
|
+
|
|
65
|
+
**Before:** Bundled with `@elurjs/ionic`.
|
|
66
|
+
**After:** You install them directly — ensures version compatibility.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
npm install @ionic/core ionicons
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 4. Overlay API renamed from `use*` to `create*`
|
|
73
|
+
|
|
74
|
+
**Before (never released, but if you used the initial overlay API):**
|
|
75
|
+
```ts
|
|
76
|
+
const toast = useToast(); // React-style naming
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**After (2.0):**
|
|
80
|
+
```ts
|
|
81
|
+
const toast = createToast(); // Elur create* pattern
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
| Old | New |
|
|
85
|
+
|---|---|
|
|
86
|
+
| `useToast()` | `createToast()` |
|
|
87
|
+
| `useAlert()` | `createAlert()` |
|
|
88
|
+
| `useLoading()` | `createLoading()` |
|
|
89
|
+
| `useActionSheet()` | `createActionSheet()` |
|
|
90
|
+
| `usePopover()` | `createPopover()` |
|
|
91
|
+
| `useModal()` | `createModal()` |
|
|
92
|
+
|
|
93
|
+
> **Note**: `createPicker()` was also added in 2.0, but it uses the Ionic 8
|
|
94
|
+
> inline `isOpen` pattern instead of `pickerController.create()` (which hangs
|
|
95
|
+
> in Ionic 8). The API is the same `OverlayHandle` as other overlays.
|
|
96
|
+
|
|
97
|
+
### 5. `Signal.set()` removed
|
|
98
|
+
|
|
99
|
+
Elur signals use `.value` for both reads and writes:
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
// Correct
|
|
103
|
+
sig.value = newValue;
|
|
104
|
+
sig.value; // read
|
|
105
|
+
|
|
106
|
+
// Wrong (never existed in Elur, but was incorrectly used in early overlay code)
|
|
107
|
+
sig.set(newValue);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 6. `onCleanup` not exported from Elur
|
|
111
|
+
|
|
112
|
+
Elur uses `effect()` return value or `ElurComponent.onUnmount()` for cleanup:
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
// Correct — effect returns a dispose function
|
|
116
|
+
const dispose = effect(() => { /* ... */ });
|
|
117
|
+
dispose(); // cleanup
|
|
118
|
+
|
|
119
|
+
// Correct — class component lifecycle
|
|
120
|
+
class MyPage extends IonPage {
|
|
121
|
+
override onUnmount() {
|
|
122
|
+
// cleanup here
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## New features in 2.0
|
|
128
|
+
|
|
129
|
+
### Cache policies
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
new IonRouterOutlet(routes, {
|
|
133
|
+
cachePolicy: { max: 10, ttl: 60000, strategy: "lru" },
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
// Per-route override
|
|
137
|
+
{ path: "/volatile", cache: { ttl: 5000 }, component: ... }
|
|
138
|
+
{ path: "/transient", cache: false, component: ... }
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Reactive overlays
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
const modal = createModalController();
|
|
145
|
+
await modal.present({
|
|
146
|
+
component: () => html`<ion-content><h1>Mounted by Elur!</h1></ion-content>`,
|
|
147
|
+
});
|
|
148
|
+
// modal.presented.value → true (reactive)
|
|
149
|
+
// modal.result.value → dismiss detail (reactive)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Page-state persistence
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
const state = createPageState("search", {
|
|
156
|
+
query: searchSignal,
|
|
157
|
+
results: resultsSignal,
|
|
158
|
+
}, { storage: "local" });
|
|
159
|
+
|
|
160
|
+
state.restore(); // on page enter
|
|
161
|
+
state.save(); // on page leave
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Capacitor integration
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
import { createCapacitorApp } from "@elurjs/ionic/capacitor";
|
|
168
|
+
|
|
169
|
+
const app = createCapacitorApp({
|
|
170
|
+
statusBar: { style: "dark" },
|
|
171
|
+
splashScreen: { fadeOutDuration: 200 },
|
|
172
|
+
backButton: { defaultHref: "/" },
|
|
173
|
+
});
|
|
174
|
+
await app.ready();
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Vite plugin
|
|
178
|
+
|
|
179
|
+
```ts
|
|
180
|
+
// vite.config.ts
|
|
181
|
+
import { elurIonic } from "@elurjs/ionic/vite-plugin";
|
|
182
|
+
export default defineConfig({ plugins: [elurIonic()] });
|
|
183
|
+
|
|
184
|
+
// app entry
|
|
185
|
+
import "virtual:elur-ionic/registration";
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Direct component subpaths
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
import { defineIonButton } from "@elurjs/ionic/components/button";
|
|
192
|
+
import { defineIonCard } from "@elurjs/ionic/components/card";
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Deprecations
|
|
196
|
+
|
|
197
|
+
| Deprecated | Replacement | Notes |
|
|
198
|
+
|---|---|---|
|
|
199
|
+
| `setupElurIonic()` | `initializeElurIonic()` + `registerIonicComponents()` | Facade kept for migration |
|
|
200
|
+
| `allComponents` | Vite plugin or explicit imports | Kept for migration only |
|
|
201
|
+
| `components` export | `components/*` subpaths | Use direct subpath imports |
|
|
202
|
+
|
|
203
|
+
## Bug fixes in 2.0
|
|
204
|
+
|
|
205
|
+
1. **`cache:false` cleanup leak** — uncached pages now run lifecycle/effect cleanup before DOM removal
|
|
206
|
+
2. **Active cache invalidation** — invalidating the active page no longer disposes live reactivity
|
|
207
|
+
3. **Lifecycle watcher disposal** — `watch()` disposers are now retained and released on cleanup
|
|
208
|
+
4. **Subclass `onInit()` without `super()`** — lifecycle wiring no longer depends on `super.onInit()`
|
|
209
|
+
5. **Guard double-execution** — guards run exactly once, not twice
|
|
210
|
+
6. **`PageContext.query`** — query parameters now available in page context
|
|
211
|
+
7. **Wildcard route fallback** — `*` routes now work as fallback
|
|
212
|
+
8. **Duplicate route diagnostics** — warns on duplicate paths
|
|
213
|
+
9. **Pending navigation preservation** — navigation intent (direction, animation) preserved across deferred transitions
|
|
214
|
+
10. **Query-only navigation** — same path with different query now triggers a transition; cache keys include query
|
|
215
|
+
|
|
216
|
+
## Test counts
|
|
217
|
+
|
|
218
|
+
| Version | Tests | Description |
|
|
219
|
+
|---|---|---|
|
|
220
|
+
| 1.x | ~63 | Basic routing, lifecycle, setup |
|
|
221
|
+
| 2.0 | 187 | + cache policies, overlays, delegate, page-state, capacitor, vite-plugin |
|