@rdlabo/ionic-theme-ios26 0.0.2 → 0.0.4
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/.cursor/rules/css-compilation.mdc +34 -0
- package/.cursor/rules/demo-application.mdc +39 -0
- package/.cursor/rules/development-workflow.mdc +41 -0
- package/.cursor/rules/project-role.mdc +21 -0
- package/.github/FUNDING.yml +15 -0
- package/.github/workflows/lint.yml +40 -0
- package/.husky/pre-commit +1 -0
- package/.lintstagedrc.yml +6 -0
- package/.prettierignore +3 -0
- package/FEEDBACK.md +118 -0
- package/FEEDBACK2.md +45 -0
- package/README.md +107 -75
- package/USING_ION_ITEM_GROUP.md +56 -0
- package/demo/ .cursor/rules/angular-20.mdc +136 -0
- package/demo/.browserslistrc +15 -0
- package/demo/.editorconfig +16 -0
- package/demo/.vscode/extensions.json +5 -0
- package/demo/.vscode/settings.json +3 -0
- package/demo/angular.json +141 -0
- package/demo/capacitor.config.ts +9 -0
- package/demo/eslint.config.js +49 -0
- package/demo/ionic.config.json +7 -0
- package/demo/karma.conf.js +44 -0
- package/demo/package-lock.json +20001 -0
- package/demo/package.json +60 -0
- package/demo/src/app/album/album-page.component.html +24 -0
- package/demo/src/app/album/album-page.component.scss +17 -0
- package/demo/src/app/album/album-page.component.spec.ts +21 -0
- package/demo/src/app/album/album-page.component.ts +24 -0
- package/demo/src/app/app.component.html +3 -0
- package/demo/src/app/app.component.ts +16 -0
- package/demo/src/app/app.config.ts +17 -0
- package/demo/src/app/app.routes.ts +8 -0
- package/demo/src/app/health/health-page.component.html +17 -0
- package/demo/src/app/health/health-page.component.scss +0 -0
- package/demo/src/app/health/health-page.component.spec.ts +21 -0
- package/demo/src/app/health/health-page.component.ts +14 -0
- package/demo/src/app/index/index-page.component.html +49 -0
- package/demo/src/app/index/index-page.component.scss +0 -0
- package/demo/src/app/index/index-page.component.spec.ts +21 -0
- package/demo/src/app/index/index-page.component.ts +100 -0
- package/demo/src/app/index/index.routes.ts +89 -0
- package/demo/src/app/index/pages/action-sheet/action-sheet.page.html +33 -0
- package/demo/src/app/index/pages/action-sheet/action-sheet.page.scss +0 -0
- package/demo/src/app/index/pages/action-sheet/action-sheet.page.spec.ts +21 -0
- package/demo/src/app/index/pages/action-sheet/action-sheet.page.ts +73 -0
- package/demo/src/app/index/pages/action-sheet/action-sheet.util.ts +28 -0
- package/demo/src/app/index/pages/alert/alert.page.html +33 -0
- package/demo/src/app/index/pages/alert/alert.page.scss +0 -0
- package/demo/src/app/index/pages/alert/alert.page.spec.ts +21 -0
- package/demo/src/app/index/pages/alert/alert.page.ts +73 -0
- package/demo/src/app/index/pages/alert/alert.util.ts +21 -0
- package/demo/src/app/index/pages/breadcrumbs/breadcrumbs.page.html +41 -0
- package/demo/src/app/index/pages/breadcrumbs/breadcrumbs.page.scss +0 -0
- package/demo/src/app/index/pages/breadcrumbs/breadcrumbs.page.spec.ts +21 -0
- package/demo/src/app/index/pages/breadcrumbs/breadcrumbs.page.ts +47 -0
- package/demo/src/app/index/pages/button/button.page.html +112 -0
- package/demo/src/app/index/pages/button/button.page.scss +3 -0
- package/demo/src/app/index/pages/button/button.page.spec.ts +21 -0
- package/demo/src/app/index/pages/button/button.page.ts +51 -0
- package/demo/src/app/index/pages/card/card.page.html +171 -0
- package/demo/src/app/index/pages/card/card.page.scss +0 -0
- package/demo/src/app/index/pages/card/card.page.spec.ts +21 -0
- package/demo/src/app/index/pages/card/card.page.ts +57 -0
- package/demo/src/app/index/pages/checkbox/checkbox.page.html +66 -0
- package/demo/src/app/index/pages/checkbox/checkbox.page.scss +0 -0
- package/demo/src/app/index/pages/checkbox/checkbox.page.spec.ts +21 -0
- package/demo/src/app/index/pages/checkbox/checkbox.page.ts +45 -0
- package/demo/src/app/index/pages/chip/chip.page.html +72 -0
- package/demo/src/app/index/pages/chip/chip.page.scss +0 -0
- package/demo/src/app/index/pages/chip/chip.page.spec.ts +21 -0
- package/demo/src/app/index/pages/chip/chip.page.ts +47 -0
- package/demo/src/app/index/pages/date-and-time-pickers/date-and-time-pickers.page.html +48 -0
- package/demo/src/app/index/pages/date-and-time-pickers/date-and-time-pickers.page.scss +0 -0
- package/demo/src/app/index/pages/date-and-time-pickers/date-and-time-pickers.page.spec.ts +21 -0
- package/demo/src/app/index/pages/date-and-time-pickers/date-and-time-pickers.page.ts +55 -0
- package/demo/src/app/index/pages/floating-action-button/floating-action-button.page.html +106 -0
- package/demo/src/app/index/pages/floating-action-button/floating-action-button.page.scss +0 -0
- package/demo/src/app/index/pages/floating-action-button/floating-action-button.page.spec.ts +21 -0
- package/demo/src/app/index/pages/floating-action-button/floating-action-button.page.ts +49 -0
- package/demo/src/app/index/pages/menu/menu.page.html +13 -0
- package/demo/src/app/index/pages/menu/menu.page.scss +0 -0
- package/demo/src/app/index/pages/menu/menu.page.spec.ts +21 -0
- package/demo/src/app/index/pages/menu/menu.page.ts +17 -0
- package/demo/src/app/index/pages/modal/modal.page.html +37 -0
- package/demo/src/app/index/pages/modal/modal.page.scss +0 -0
- package/demo/src/app/index/pages/modal/modal.page.spec.ts +21 -0
- package/demo/src/app/index/pages/modal/modal.page.ts +77 -0
- package/demo/src/app/index/pages/popover/popover.page.html +34 -0
- package/demo/src/app/index/pages/popover/popover.page.scss +0 -0
- package/demo/src/app/index/pages/popover/popover.page.spec.ts +21 -0
- package/demo/src/app/index/pages/popover/popover.page.ts +47 -0
- package/demo/src/app/index/pages/progress-indicators/progress-indicators.page.html +28 -0
- package/demo/src/app/index/pages/progress-indicators/progress-indicators.page.scss +0 -0
- package/demo/src/app/index/pages/progress-indicators/progress-indicators.page.spec.ts +21 -0
- package/demo/src/app/index/pages/progress-indicators/progress-indicators.page.ts +47 -0
- package/demo/src/app/index/pages/radio/radio.page.html +39 -0
- package/demo/src/app/index/pages/radio/radio.page.scss +0 -0
- package/demo/src/app/index/pages/radio/radio.page.spec.ts +21 -0
- package/demo/src/app/index/pages/radio/radio.page.ts +47 -0
- package/demo/src/app/index/pages/range/range.page.html +58 -0
- package/demo/src/app/index/pages/range/range.page.scss +0 -0
- package/demo/src/app/index/pages/range/range.page.spec.ts +21 -0
- package/demo/src/app/index/pages/range/range.page.ts +49 -0
- package/demo/src/app/index/pages/searchbar/searchbar.page.html +33 -0
- package/demo/src/app/index/pages/searchbar/searchbar.page.scss +0 -0
- package/demo/src/app/index/pages/searchbar/searchbar.page.spec.ts +21 -0
- package/demo/src/app/index/pages/searchbar/searchbar.page.ts +45 -0
- package/demo/src/app/index/pages/segment/segment.page.html +102 -0
- package/demo/src/app/index/pages/segment/segment.page.scss +0 -0
- package/demo/src/app/index/pages/segment/segment.page.spec.ts +21 -0
- package/demo/src/app/index/pages/segment/segment.page.ts +51 -0
- package/demo/src/app/index/pages/select/select.page.html +74 -0
- package/demo/src/app/index/pages/select/select.page.scss +0 -0
- package/demo/src/app/index/pages/select/select.page.spec.ts +21 -0
- package/demo/src/app/index/pages/select/select.page.ts +50 -0
- package/demo/src/app/index/pages/toast/toast.page.html +32 -0
- package/demo/src/app/index/pages/toast/toast.page.scss +0 -0
- package/demo/src/app/index/pages/toast/toast.page.spec.ts +21 -0
- package/demo/src/app/index/pages/toast/toast.page.ts +66 -0
- package/demo/src/app/index/pages/toggle/toggle.page.html +45 -0
- package/demo/src/app/index/pages/toggle/toggle.page.scss +0 -0
- package/demo/src/app/index/pages/toggle/toggle.page.spec.ts +21 -0
- package/demo/src/app/index/pages/toggle/toggle.page.ts +49 -0
- package/demo/src/app/settings/settings-page.component.html +117 -0
- package/demo/src/app/settings/settings-page.component.scss +33 -0
- package/demo/src/app/settings/settings-page.component.spec.ts +21 -0
- package/demo/src/app/settings/settings-page.component.ts +55 -0
- package/demo/src/app/tabs/tabs.page.html +23 -0
- package/demo/src/app/tabs/tabs.page.scss +9 -0
- package/demo/src/app/tabs/tabs.page.spec.ts +26 -0
- package/demo/src/app/tabs/tabs.page.ts +28 -0
- package/demo/src/app/tabs/tabs.routes.ts +40 -0
- package/demo/src/assets/.gitkeep +0 -0
- package/demo/src/favicon.ico +0 -0
- package/demo/src/global.scss +65 -0
- package/demo/src/index.html +24 -0
- package/demo/src/main.ts +5 -0
- package/demo/src/test.ts +7 -0
- package/demo/src/theme/variables.scss +20 -0
- package/demo/tsconfig.app.json +14 -0
- package/demo/tsconfig.json +30 -0
- package/demo/tsconfig.spec.json +17 -0
- package/demo/util/mocks/angular/angular-delegate.ts +18 -0
- package/demo/util/mocks/angular/ion-router-outlet.ts +39 -0
- package/demo/util/mocks/angular/modal-controller.ts +7 -0
- package/demo/util/mocks/angular/nav-controller.ts +22 -0
- package/demo/util/mocks/angular/popover-controller.ts +7 -0
- package/demo/util/mocks/util/base.mock.ts +13 -0
- package/demo/util/mocks/util/overlay.ts +13 -0
- package/demo/util/test.config.ts +54 -0
- package/package.json +39 -11
- package/prettier.config.js +18 -0
- package/screenshots/ios26.png +0 -0
- package/screenshots/why-ion-list-inset.png +0 -0
- package/src/components/ion-action-sheet.scss +61 -0
- package/src/components/ion-alert.scss +46 -0
- package/src/components/ion-breadcrumbs.scss +24 -0
- package/src/components/ion-button.scss +154 -0
- package/src/components/ion-card.scss +7 -0
- package/src/components/ion-chip.scss +10 -0
- package/src/components/ion-content.scss +13 -0
- package/src/components/ion-datetime.scss +9 -0
- package/src/components/ion-fab.scss +22 -0
- package/src/components/ion-list.scss +38 -0
- package/src/components/ion-loading.scss +9 -0
- package/src/components/ion-modal.scss +31 -0
- package/src/components/ion-picker.scss +4 -0
- package/src/components/ion-popover.scss +13 -0
- package/src/components/ion-range.scss +21 -0
- package/src/components/ion-searchbar.scss +37 -0
- package/src/components/ion-segment.scss +45 -0
- package/src/components/ion-tabs.scss +47 -0
- package/src/components/ion-toast.scss +12 -0
- package/src/components/ion-toggle.scss +56 -0
- package/src/components/ion-toolbar.scss +27 -0
- package/src/default-variables.scss +12 -0
- package/src/ionic-theme-ios26-dark-always.scss +6 -0
- package/src/ionic-theme-ios26-dark-class.scss +6 -0
- package/src/ionic-theme-ios26-dark-system.scss +8 -0
- package/src/ionic-theme-ios26.scss +23 -0
- package/src/md-ion-list-inset.scss +19 -0
- package/src/utils/api.scss +21 -0
- package/src/utils/dark/ion-button.scss +45 -0
- package/src/utils/theme-dark.scss +16 -0
- package/src/utils/theme-list-inset.scss +96 -0
- package/src/utils/translucent.scss +71 -0
- package/tsconfig.json +5 -0
- package/css/ion-list-inset.css +0 -247
- package/css/ion-list-inset.css.map +0 -1
- package/css/ionic-theme-ios26.css +0 -349
- package/css/ionic-theme-ios26.css.map +0 -1
- package/fesm2022/rdlabo-ionic-theme-ios26.mjs +0 -4
- package/fesm2022/rdlabo-ionic-theme-ios26.mjs.map +0 -1
- package/index.d.ts +0 -3
- package/src/assets/ion-list-inset.scss +0 -198
- package/src/assets/ios-design/ion-button.scss +0 -68
- package/src/assets/ios-design/ion-popover.scss +0 -23
- package/src/assets/ios-design/ion-searchbar.scss +0 -44
- package/src/assets/ios-design/ion-segment.scss +0 -12
- package/src/assets/ios-design/ion-tabs.scss +0 -60
- package/src/assets/ios-design/ion-toggle.scss +0 -8
- package/src/assets/ios-design/ios-design-dark.scss +0 -28
- package/src/assets/ios-design.scss +0 -110
- package/src/assets/ios-variables.scss +0 -38
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SCSS to CSS compilation process and build workflow
|
|
3
|
+
globs: *.scss,*.css,package.json
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CSS Compilation Process
|
|
7
|
+
|
|
8
|
+
## ビルドプロセス
|
|
9
|
+
|
|
10
|
+
### ソースファイル
|
|
11
|
+
- **入力**: `src/` ディレクトリ内のSCSSファイル
|
|
12
|
+
- **メインファイル**: [src/ionic-theme-ios26.scss](mdc:src/ionic-theme-ios26.scss)
|
|
13
|
+
|
|
14
|
+
### 出力ファイル
|
|
15
|
+
- **出力**: `dist/css/` ディレクトリ内のCSSファイル
|
|
16
|
+
- **生成ファイル**:
|
|
17
|
+
- [dist/css/ionic-theme-ios26.min.css](mdc:dist/css/ionic-theme-ios26.min.css): メインCSSファイル(圧縮版)
|
|
18
|
+
- [dist/css/ionic-theme-ios26.min.css.map](mdc:dist/css/ionic-theme-ios26.min.css.map): ソースマップ
|
|
19
|
+
- [dist/css/md-ion-list-inset.min.css](mdc:dist/css/md-ion-list-inset.min.css): インセットリスト専用CSS(圧縮版)
|
|
20
|
+
- [dist/css/md-ion-list-inset.min.css.map](mdc:dist/css/md-ion-list-inset.min.css.map): ソースマップ
|
|
21
|
+
|
|
22
|
+
## コンパイル時の注意事項
|
|
23
|
+
|
|
24
|
+
1. **依存関係**: [package.json](mdc:package.json)でビルドツールの依存関係を確認
|
|
25
|
+
2. **ソースマップ**: 開発時のデバッグ用にソースマップファイルも生成
|
|
26
|
+
3. **最適化**: 本番用にはCSSの最適化(minify)を検討
|
|
27
|
+
4. **テスト**: コンパイル後は`demo/`アプリケーションで動作確認
|
|
28
|
+
|
|
29
|
+
## ファイル構造の一貫性
|
|
30
|
+
|
|
31
|
+
- SCSSファイルは`src/`に配置
|
|
32
|
+
- コンパイル後のCSSファイルは`dist/css/`に配置
|
|
33
|
+
- デモアプリケーションは`demo/`に配置
|
|
34
|
+
- スクリーンショットなどのリソースは`screenshots/`に配置
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Angular demo application structure and usage
|
|
3
|
+
globs: demo/**/*
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Demo Application (Angular)
|
|
7
|
+
|
|
8
|
+
## デモアプリケーションの目的
|
|
9
|
+
|
|
10
|
+
`demo/` ディレクトリには、Ionic iOS26テーマの動作確認用のAngularアプリケーションが含まれています。
|
|
11
|
+
|
|
12
|
+
## 主要なコンポーネント
|
|
13
|
+
|
|
14
|
+
### ページコンポーネント
|
|
15
|
+
- [album-page.component](mdc:demo/src/app/album/): アルバムページ(リスト表示の確認)
|
|
16
|
+
- [health-page.component](mdc:demo/src/app/health/): ヘルスページ(ヘルス関連UIの確認)
|
|
17
|
+
- [settings-page.component](mdc:demo/src/app/settings/): 設定ページ(設定UIの確認)
|
|
18
|
+
- [simple-page.component](mdc:demo/src/app/simple/): シンプルページ(基本的なコンポーネントの確認)
|
|
19
|
+
|
|
20
|
+
### ナビゲーション
|
|
21
|
+
- [tabs.page](mdc:demo/src/app/tabs/): タブベースのナビゲーション
|
|
22
|
+
|
|
23
|
+
## テーマファイル
|
|
24
|
+
|
|
25
|
+
- [demo/src/theme/theme-ios26.scss](mdc:demo/src/theme/theme-ios26.scss): デモアプリ用のテーマ設定
|
|
26
|
+
- [demo/src/global.scss](mdc:demo/src/global.scss): グローバルスタイル
|
|
27
|
+
|
|
28
|
+
## 使用方法
|
|
29
|
+
|
|
30
|
+
1. **開発サーバー起動**: `cd demo && npm start` または `ionic serve`
|
|
31
|
+
2. **テーマ確認**: 各ページでiOS26テーマの適用状況を確認
|
|
32
|
+
3. **スタイル調整**: `src/` のSCSSファイルを編集後、デモアプリで確認
|
|
33
|
+
|
|
34
|
+
## 設定ファイル
|
|
35
|
+
|
|
36
|
+
- [demo/angular.json](mdc:demo/angular.json): Angular CLI設定
|
|
37
|
+
- [demo/package.json](mdc:demo/package.json): デモアプリの依存関係
|
|
38
|
+
- [demo/ionic.config.json](mdc:demo/ionic.config.json): Ionic設定
|
|
39
|
+
- [demo/capacitor.config.ts](mdc:demo/capacitor.config.ts): Capacitor設定
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Development workflow and directory structure guidelines
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Development Workflow
|
|
7
|
+
|
|
8
|
+
## ディレクトリ構造の詳細
|
|
9
|
+
|
|
10
|
+
### src/ ディレクトリ
|
|
11
|
+
- **src/components/**: 個別のIonicコンポーネント用のSCSSファイル
|
|
12
|
+
- [ion-button.scss](mdc:src/components/ion-button.scss): ボタンスタイル
|
|
13
|
+
- [ion-list.scss](mdc:src/components/ion-list.scss): リストスタイル
|
|
14
|
+
- [ion-popover.scss](mdc:src/components/ion-popover.scss): ポップオーバースタイル
|
|
15
|
+
- [ion-searchbar.scss](mdc:src/components/ion-searchbar.scss): 検索バースタイル
|
|
16
|
+
- [ion-tabs.scss](mdc:src/components/ion-tabs.scss): タブスタイル
|
|
17
|
+
- [ion-toggle.scss](mdc:src/components/ion-toggle.scss): トグルスタイル
|
|
18
|
+
|
|
19
|
+
- **src/utils/**: ユーティリティファイル
|
|
20
|
+
- [api.scss](mdc:src/utils/api.scss): API関連ユーティリティ
|
|
21
|
+
- [theme-dark.scss](mdc:src/utils/theme-dark.scss): ダークテーマ用ユーティリティ
|
|
22
|
+
- [theme-list-inset.scss](mdc:src/utils/theme-list-inset.scss): インセットリスト用ユーティリティ
|
|
23
|
+
- [translucent.scss](mdc:src/utils/translucent.scss): 半透明効果用ユーティリティ
|
|
24
|
+
|
|
25
|
+
- **src/**: ルートレベルのファイル
|
|
26
|
+
- [default-variables.scss](mdc:src/default-variables.scss): デフォルト変数定義
|
|
27
|
+
- [md-ion-list-inset.scss](mdc:src/md-ion-list-inset.scss): Material Design用インセットリスト
|
|
28
|
+
|
|
29
|
+
- **src/ionic-theme-ios26.scss**: メインのSCSSファイル(全てのコンポーネントを統合)
|
|
30
|
+
|
|
31
|
+
### demo/ ディレクトリ
|
|
32
|
+
- Angular 20ベースのデモアプリケーション
|
|
33
|
+
- 各ページコンポーネントでテーマの動作確認
|
|
34
|
+
- [demo/src/theme/theme-ios26.scss](mdc:demo/src/theme/theme-ios26.scss): デモアプリ用テーマファイル
|
|
35
|
+
|
|
36
|
+
## 開発時の注意事項
|
|
37
|
+
|
|
38
|
+
1. **SCSSファイルの編集**: `src/` ディレクトリ内のSCSSファイルを編集
|
|
39
|
+
2. **コンパイル**: 変更後は適切なビルドコマンドでCSSファイルを生成
|
|
40
|
+
3. **確認**: `demo/` アプリケーションでスタイルの動作確認
|
|
41
|
+
4. **ドキュメント**: READMEは英語で記述(OSS配布のため)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Ionic iOS26 Theme Library Project Overview
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Ionic iOS26 Theme Library Project
|
|
7
|
+
|
|
8
|
+
このプロジェクトは、Ionic FrameworkをiOS26のルックアンドフィールにするためのCSSライブラリです。OSSで配布するため、READMEの記述は基本的に英語になります。
|
|
9
|
+
|
|
10
|
+
## プロジェクト構造
|
|
11
|
+
|
|
12
|
+
- **src/**: コンパイル前のSCSSファイルが配置されます
|
|
13
|
+
- **css/**: コンパイル後のCSSファイルが配置されます
|
|
14
|
+
- **demo/**: 開発と確認に用いるAngularプロジェクトです
|
|
15
|
+
|
|
16
|
+
## 主要なファイル
|
|
17
|
+
|
|
18
|
+
- [package.json](mdc:package.json): プロジェクトの依存関係とビルドスクリプト
|
|
19
|
+
- [src/ionic-theme-ios26.scss](mdc:src/ionic-theme-ios26.scss): メインのSCSSファイル
|
|
20
|
+
- [demo/](mdc:demo/): Angularデモアプリケーション
|
|
21
|
+
- [README.md](mdc:README.md): プロジェクトの説明(英語)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# These are supported funding model platforms
|
|
2
|
+
|
|
3
|
+
github: rdlabo
|
|
4
|
+
patreon: # Replace with a single Patreon username
|
|
5
|
+
open_collective: # Replace with a single Open Collective username
|
|
6
|
+
ko_fi: # Replace with a single Ko-fi username
|
|
7
|
+
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
|
8
|
+
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
|
9
|
+
liberapay: # Replace with a single Liberapay username
|
|
10
|
+
issuehunt: # Replace with a single IssueHunt username
|
|
11
|
+
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
|
12
|
+
polar: # Replace with a single Polar username
|
|
13
|
+
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
|
|
14
|
+
thanks_dev: # Replace with a single thanks.dev username
|
|
15
|
+
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Lint
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- '**'
|
|
6
|
+
pull_request:
|
|
7
|
+
types: [opened]
|
|
8
|
+
jobs:
|
|
9
|
+
prettier:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
- uses: actions/setup-node@v4
|
|
14
|
+
with:
|
|
15
|
+
node-version: 22
|
|
16
|
+
- uses: actions/cache@v4
|
|
17
|
+
with:
|
|
18
|
+
path: node_modules
|
|
19
|
+
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
|
20
|
+
restore-keys: |
|
|
21
|
+
${{ runner.os }}-node-
|
|
22
|
+
- run: npm install
|
|
23
|
+
- run: npm run lint
|
|
24
|
+
lint:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: 22
|
|
31
|
+
- uses: actions/cache@v4
|
|
32
|
+
with:
|
|
33
|
+
path: node_modules
|
|
34
|
+
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
|
35
|
+
restore-keys: |
|
|
36
|
+
${{ runner.os }}-node-
|
|
37
|
+
- run: npm install
|
|
38
|
+
working-directory: './demo'
|
|
39
|
+
- run: npm run lint
|
|
40
|
+
working-directory: './demo'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
npx lint-staged
|
package/.prettierignore
ADDED
package/FEEDBACK.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Feature Requests for Ionic Framework
|
|
2
|
+
|
|
3
|
+
## docs(): Naming conventions for Ionic theme classes
|
|
4
|
+
|
|
5
|
+
After the Ionic Modular release, I expect many themes to be distributed through community activities. Therefore, I would like to establish naming conventions for theme application classes. I would appreciate the Ionic team's opinion on this matter.
|
|
6
|
+
|
|
7
|
+
- Classes for manually applying themes
|
|
8
|
+
- .theme-[theme-name] (ex: .theme-ios26)
|
|
9
|
+
- .theme-[theme-name]-enabled (ex: .theme-ios26-enabled)
|
|
10
|
+
- .[theme-name]-enabled (ex: .ios26-enabled)
|
|
11
|
+
- .ion-[theme-name]-enabled (ex: .ion-ios26-enabled)
|
|
12
|
+
- Classes for manually removing themes
|
|
13
|
+
- .theme-no-[theme-name] (ex: .theme-no-ios26)
|
|
14
|
+
- .theme-[theme-name]-disabled (ex: .theme-ios26-disabled)
|
|
15
|
+
- .[theme-name]-disabled (ex: .ios26-disabled)
|
|
16
|
+
- .ion-[theme-name]-disabled (ex: .ion-ios26-disabled)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## feat(): ion-config new property for `collapse`
|
|
20
|
+
|
|
21
|
+
Currently, `collapse` behavior is automatically enabled in iOS mode, but this should be configurable through `ion-config` for better control.
|
|
22
|
+
|
|
23
|
+
ex:
|
|
24
|
+
```typescript
|
|
25
|
+
export interface IonicConfig {
|
|
26
|
+
...,
|
|
27
|
+
collapseLargeTitle: {
|
|
28
|
+
ios: boolean;
|
|
29
|
+
md: boolean;
|
|
30
|
+
ionic: boolean;
|
|
31
|
+
},
|
|
32
|
+
collapseBackButtonAnimation: {
|
|
33
|
+
ios: boolean;
|
|
34
|
+
md: boolean;
|
|
35
|
+
ionic: boolean;
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### should disable ion-back-button Animation
|
|
41
|
+
|
|
42
|
+
When using `collapse` on the previous screen and specifying `ion-buttons ion-back-button` on the next screen, iOS 18 and earlier animation processing occurs. Since this is unnecessary for iOS 26+, a property to disable this would be beneficial.
|
|
43
|
+
|
|
44
|
+
https://github.com/ionic-team/ionic-framework/blob/3b80473f2fd5ad4da5a9f5d66f783a69909c8965/core/src/utils/transition/ios.transition.ts#L333C31-L337
|
|
45
|
+
- enteringBackButtonTextAnimation
|
|
46
|
+
- enteringBackButtonIconAnimation
|
|
47
|
+
- enteringBackButtonAnimation
|
|
48
|
+
|
|
49
|
+
Currently, I work around this by not placing `ion-back-button` inside `ion-buttons` due to the selector relationship `ion-buttons > ion-back-button`.
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## feat(): ion-content[fullscreen=true] will have .content-fullscreen class
|
|
53
|
+
|
|
54
|
+
For implementing iOS 26's blurred safe area effects, a class indicating whether `ion-content` has fullscreen configuration is needed.
|
|
55
|
+
I would like to use selectors like the following:
|
|
56
|
+
|
|
57
|
+
```css
|
|
58
|
+
.ion-page:has(ion-header.header-translucent) ion-content.content-fullscreen {
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ion-page:has(ion-header.footer-translucent) ion-content.content-fullscreen {
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Currently, I assume fullscreen is specified when using `translucent` elements, but this is not guaranteed.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## feat(): add .range-knob-min and .range-knob-max directly to ion-range
|
|
69
|
+
|
|
70
|
+
Currently, `.range-knob-min` and `.range-knob-max` are applied to DOM elements inside ShadowDOM, but since these represent the state of `ion-range` itself, they should be applied directly to the component.
|
|
71
|
+
This would provide more flexibility for knob styling.
|
|
72
|
+
|
|
73
|
+
Current:
|
|
74
|
+
```html
|
|
75
|
+
<ion-range>
|
|
76
|
+
#shadow-root
|
|
77
|
+
...
|
|
78
|
+
<div class="range-knob-handle ... range-knob-min">...</div>
|
|
79
|
+
</ion-range>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
After:
|
|
83
|
+
```html
|
|
84
|
+
<ion-range class="range-knob-min">
|
|
85
|
+
#shadow-root
|
|
86
|
+
...
|
|
87
|
+
<div class="range-knob-handle ... range-knob-min">...</div>
|
|
88
|
+
</ion-range>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
## feat(): add native shadow-part for design
|
|
93
|
+
|
|
94
|
+
### native-inner(or item-inner) part to ion-item
|
|
95
|
+
The styling for `ion-item[lines=inset]` is applied to `.item-inner`, which cannot be styled directly. This limitation means that for iOS 26 styling, I can only modify the border-bottom style through `::part(native)` with padding-right, preventing me from utilizing the full right side of `ion-item`. Adding `::part(native-inner)` would increase styling flexibility.
|
|
96
|
+
|
|
97
|
+
```diff
|
|
98
|
+
<ion-item>
|
|
99
|
+
<button type="button" class="item-native" part="native">
|
|
100
|
+
- <div class="item-inner">
|
|
101
|
+
+ <div class="item-inner" part="native-inner">
|
|
102
|
+
...
|
|
103
|
+
</div>
|
|
104
|
+
</button>
|
|
105
|
+
</ion-item>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### native part to ion-toast
|
|
109
|
+
The default styling for `ion-toast` is applied to `div.toast-wrapper`, and CSS Custom Properties overrides work similarly. However, there's no way to directly override `div.toast-wrapper`. Currently, I disable this styling using CSS Custom Properties and then apply new styles to `::part(container)`. This is not ideal for styling, so adding `::part(native)` to allow direct override of `div.toast-wrapper` would be preferable.
|
|
110
|
+
|
|
111
|
+
```diff
|
|
112
|
+
<ion-toast>
|
|
113
|
+
- <div class="toast-wrapper">...</div>
|
|
114
|
+
+ <div class="toast-wrapper" part="native">...</div>
|
|
115
|
+
</ion-toast>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
|
package/FEEDBACK2.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Feature Requests for Ionic Framework
|
|
2
|
+
## feat(): native container add at ion-segment
|
|
3
|
+
|
|
4
|
+
現在、`ion-segment` はShadowDOMであるにもかかわらず、container DOMをもっていない。このため、 `ion-segment` にスタイルをあてるためには、`ion-segment` 自身にあてるしか方法がない。このため、子孫要素である `ion-segment-button` のタップエフェクトを、 `ion-segment` の外に表示することができない。
|
|
5
|
+
|
|
6
|
+
Current:
|
|
7
|
+
|
|
8
|
+
```html
|
|
9
|
+
<ion-segment>
|
|
10
|
+
::shadow-root
|
|
11
|
+
// Put child element
|
|
12
|
+
<ion-segment-button></ion-segment-button>
|
|
13
|
+
<ion-segment-button></ion-segment-button>
|
|
14
|
+
</ion-segment>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
After:
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<ion-segment>
|
|
21
|
+
::shadow-root
|
|
22
|
+
<div class="segment-container" part="container">
|
|
23
|
+
// Put child element
|
|
24
|
+
<ion-segment-button></ion-segment-button>
|
|
25
|
+
<ion-segment-button></ion-segment-button>
|
|
26
|
+
</div>
|
|
27
|
+
</ion-segment>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
このことで、以下のようにスタイリングしたい。
|
|
31
|
+
|
|
32
|
+
```scss
|
|
33
|
+
ion-segment {
|
|
34
|
+
&::part(container) {
|
|
35
|
+
overflow: visible;
|
|
36
|
+
margin: 12px; // Enable Effect Area
|
|
37
|
+
background: var(255, 255, 255, 0.7);
|
|
38
|
+
}
|
|
39
|
+
ion-segment-button {
|
|
40
|
+
&.segment-button-checked {
|
|
41
|
+
transform: scale(1.1); // Enable overflow effect
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
A CSS theme library that applies iOS26 design system to Ionic applications.
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
5
7
|
DEMO is here: https://ionic-theme-ios26.netlify.app/
|
|
6
8
|
|
|
7
9
|
## Overview
|
|
@@ -10,130 +12,160 @@ This library provides CSS files to apply the iOS26 design system used in real pr
|
|
|
10
12
|
|
|
11
13
|
> **⚠️ Under Development**: This library is currently in the development and consideration phase as an OSS project, based on files copied from real projects. We are working on API stability and documentation improvement before full-scale use.
|
|
12
14
|
|
|
15
|
+
## 💖 Support This Project
|
|
16
|
+
|
|
17
|
+
Enjoying this project? Your support helps keep it alive and growing!
|
|
18
|
+
Sponsoring means you directly contribute to new features, improvements, and maintenance.
|
|
19
|
+
|
|
20
|
+
[Become a Sponsor →](https://github.com/sponsors/rdlabo)
|
|
13
21
|
|
|
14
22
|
## Setup
|
|
15
23
|
|
|
16
24
|
> **⚠️ Warning**: This library is under development. API changes and breaking changes may occur before full-scale use.
|
|
17
25
|
|
|
18
|
-
### 1. Installation
|
|
19
|
-
|
|
20
26
|
```bash
|
|
21
27
|
npm install @rdlabo/ionic-theme-ios26
|
|
22
28
|
```
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
Import the theme in your project's main CSS file (e.g., `src/styles.scss`) and set the `--max-safe-area` variable:
|
|
30
|
+
And import the theme in your project's main CSS file (e.g., `src/styles.scss`).
|
|
27
31
|
|
|
28
|
-
```
|
|
29
|
-
@import '@rdlabo/ionic-theme-ios26/css/
|
|
30
|
-
@import '@rdlabo/ionic-theme-ios26/css/
|
|
31
|
-
|
|
32
|
-
/*
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
```css
|
|
33
|
+
@import '@rdlabo/ionic-theme-ios26/dist/css/default-variables.css';
|
|
34
|
+
@import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-ios26.min.css';
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* Support Dark Mode
|
|
38
|
+
* We support Ionic Dark Mode. More information is here: https://ionicframework.com/docs/theming/dark-mode
|
|
39
|
+
* use Always: @import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-dark-always.min.css'
|
|
40
|
+
* use System: @import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-dark-system.min.css'
|
|
41
|
+
* use CSS Class: @import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-dark-class.min.css'
|
|
42
|
+
*/
|
|
36
43
|
```
|
|
37
44
|
|
|
38
|
-
|
|
45
|
+
## Important Notes
|
|
39
46
|
|
|
40
|
-
###
|
|
47
|
+
### `ion-back-button` must be used without `ion-buttons`
|
|
41
48
|
|
|
42
|
-
|
|
49
|
+
When the following conditions are met, the Ionic Framework programmatically generates and animates the `ion-back-button`:
|
|
43
50
|
|
|
44
|
-
|
|
51
|
+
- The previous page uses `ion-header[collapse='condense']`
|
|
52
|
+
- The navigated page has `ion-buttons ion-back-button`
|
|
45
53
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
This is not the iOS26 UI behavior. To avoid this programmatic behavior, you need to implement it as follows:
|
|
55
|
+
|
|
56
|
+
```diff
|
|
57
|
+
<ion-header>
|
|
58
|
+
- <ion-buttons slot="start">
|
|
59
|
+
- <ion-back-button></ion-back-button>
|
|
60
|
+
- </ion-buttons>
|
|
61
|
+
+ <ion-back-button slot=start></ion-back-button>
|
|
62
|
+
</ion-header>
|
|
53
63
|
```
|
|
54
64
|
|
|
55
|
-
|
|
65
|
+
### Using `ion-item-group`
|
|
56
66
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
Under specific conditions, you need to use `ion-item-group`.
|
|
68
|
+
|
|
69
|
+
```diff
|
|
70
|
+
<ion-list inset=true>
|
|
71
|
+
<ion-list-header><ion-label>Label</ion-label></ion-list-header>
|
|
72
|
+
+ <ion-item-group>
|
|
73
|
+
<ion-item>...</ion-item>
|
|
74
|
+
<ion-item>...</ion-item>
|
|
75
|
+
+ </ion-item-group>
|
|
76
|
+
</ion-list>
|
|
61
77
|
```
|
|
62
78
|
|
|
63
|
-
|
|
79
|
+
For details, please refer to [USING_ION_ITEM_GROUP.md](./USING_ION_ITEM_GROUP.md).
|
|
64
80
|
|
|
65
|
-
|
|
81
|
+
### You can also use the liquid glass mixin
|
|
66
82
|
|
|
67
|
-
|
|
68
|
-
import '@rdlabo/ionic-theme-ios26/css/ionic-theme-ios26.css';
|
|
69
|
-
import '@rdlabo/ionic-theme-ios26/css/ion-list-inset.css';
|
|
70
|
-
```
|
|
83
|
+
You can use the liquid glass mixin by importing SCSS files from the main package.
|
|
71
84
|
|
|
72
|
-
|
|
85
|
+
```scss
|
|
86
|
+
@use '@rdlabo/ionic-theme-ios26/src/utils/api';
|
|
73
87
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
--max-safe-area: calc(max(10px, var(--ion-safe-area-bottom, 0px)) + var(--admob-safe-area, 0px));
|
|
88
|
+
ion-textarea label.textarea-wrapper {
|
|
89
|
+
@include api.glass-background;
|
|
77
90
|
}
|
|
78
91
|
```
|
|
79
92
|
|
|
80
|
-
|
|
93
|
+
## Selective Theme Application
|
|
81
94
|
|
|
82
|
-
|
|
95
|
+
You may want to apply the iOS26 theme to your Ionic project but find it difficult to apply it to all components. We provide two approaches to selectively control theme application.
|
|
83
96
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
```
|
|
97
|
+
You can use `1. Import Components Individually` or `2. Using the .ios26-disabled Class`
|
|
98
|
+
|
|
99
|
+
### 1. Import Components Individually
|
|
88
100
|
|
|
89
|
-
**
|
|
101
|
+
**Recommended for**: When you want to apply the iOS26 theme only to specific components, or when you want to minimize bundle size.
|
|
102
|
+
|
|
103
|
+
While `@import '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-ios26.min.css'` applies styling to all components at once, you can also import them individually.
|
|
90
104
|
|
|
91
105
|
```css
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
106
|
+
@import '@rdlabo/ionic-theme-ios26/dist/css/utils/translucent';
|
|
107
|
+
@import '@rdlabo/ionic-theme-ios26/dist/css/components/ion-action-sheet';
|
|
108
|
+
@import '@rdlabo/ionic-theme-ios26/dist/css/components/ion-alert';
|
|
109
|
+
@import '@rdlabo/ionic-theme-ios26/dist/css/components/ion-breadcrumbs';
|
|
110
|
+
@import '@rdlabo/ionic-theme-ios26/dist/css/components/ion-button';
|
|
111
|
+
...
|
|
95
112
|
```
|
|
96
113
|
|
|
114
|
+
#### Individual Import for Dark Mode Components
|
|
97
115
|
|
|
98
|
-
|
|
116
|
+
If you're using dark mode, you need to use SCSS because the selectors differ between `Always`, `System`, and `Class` modes, which cannot be handled with CSS files alone.
|
|
99
117
|
|
|
100
|
-
|
|
118
|
+
> **Note**: Currently, only `ion-button` has separate dark mode styling applied.
|
|
101
119
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
- [ ] Performance optimization
|
|
106
|
-
- [ ] Community feedback collection
|
|
120
|
+
Always (Always Dark Mode):
|
|
121
|
+
```scss
|
|
122
|
+
@use '@rdlabo/ionic-theme-ios26/src/utils/theme-dark';
|
|
107
123
|
|
|
108
|
-
|
|
124
|
+
:root {
|
|
125
|
+
@include theme-dark.default-variables;
|
|
126
|
+
}
|
|
127
|
+
@include theme-dark.ion-button;
|
|
128
|
+
```
|
|
109
129
|
|
|
110
|
-
|
|
130
|
+
System (Follow System Settings):
|
|
131
|
+
```scss
|
|
132
|
+
@use '@rdlabo/ionic-theme-ios26/src/utils/theme-dark';
|
|
111
133
|
|
|
112
|
-
|
|
113
|
-
|
|
134
|
+
@media (prefers-color-scheme: dark) {
|
|
135
|
+
:root {
|
|
136
|
+
@include theme-dark.default-variables;
|
|
137
|
+
}
|
|
138
|
+
@include theme-dark.ion-button;
|
|
139
|
+
}
|
|
114
140
|
```
|
|
115
141
|
|
|
116
|
-
|
|
142
|
+
Class (Toggle with CSS Class):
|
|
143
|
+
```scss
|
|
144
|
+
@use '@rdlabo/ionic-theme-ios26/src/utils/theme-dark';
|
|
117
145
|
|
|
118
|
-
|
|
119
|
-
|
|
146
|
+
.ion-palette-dark {
|
|
147
|
+
@include theme-dark.default-variables;
|
|
148
|
+
@include theme-dark.ion-button;
|
|
149
|
+
}
|
|
120
150
|
```
|
|
121
151
|
|
|
122
|
-
## License
|
|
123
152
|
|
|
124
|
-
|
|
153
|
+
### 2. Using the `.ios26-disabled` Class
|
|
125
154
|
|
|
126
|
-
|
|
155
|
+
**Recommended for**: When you want to apply the iOS26 theme to all components in general, but use standard Ionic styling in specific places.
|
|
127
156
|
|
|
128
|
-
|
|
157
|
+
After importing all components, you can disable the iOS26 theme for specific component instances by adding the `.ios26-disabled` class.
|
|
129
158
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
-
|
|
133
|
-
|
|
159
|
+
```html
|
|
160
|
+
<!-- iOS26 theme applied -->
|
|
161
|
+
<ion-button>iOS26 Design</ion-button>
|
|
162
|
+
|
|
163
|
+
<!-- Standard Ionic styling -->
|
|
164
|
+
<ion-button class="ios26-disabled">Standard Ionic Design</ion-button>
|
|
165
|
+
```
|
|
134
166
|
|
|
135
|
-
|
|
167
|
+
This method is useful in the following scenarios:
|
|
136
168
|
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
169
|
+
- When you want to use standard styling only within specific modals or popovers
|
|
170
|
+
- When you want to perform a gradual migration (add `.ios26-disabled` to some screens and remove it later)
|
|
171
|
+
- When you want to conduct A/B testing for designs
|