@rdlabo/ionic-theme-ios26 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.cursor/rules/css-compilation.mdc +34 -0
  2. package/.cursor/rules/demo-application.mdc +39 -0
  3. package/.cursor/rules/development-workflow.mdc +41 -0
  4. package/.cursor/rules/project-role.mdc +21 -0
  5. package/.github/FUNDING.yml +15 -0
  6. package/.husky/pre-commit +1 -0
  7. package/.lintstagedrc.yml +6 -0
  8. package/.prettierignore +3 -0
  9. package/FEEDBACK.md +25 -0
  10. package/README.md +58 -87
  11. package/USING_ION_ITEM_GROUP.md +58 -0
  12. package/build-sass.js +25 -0
  13. package/demo/ .cursor/rules/angular-20.mdc +136 -0
  14. package/demo/.browserslistrc +15 -0
  15. package/demo/.editorconfig +16 -0
  16. package/demo/.vscode/extensions.json +5 -0
  17. package/demo/.vscode/settings.json +3 -0
  18. package/demo/angular.json +141 -0
  19. package/demo/capacitor.config.ts +9 -0
  20. package/demo/eslint.config.js +47 -0
  21. package/demo/ionic.config.json +7 -0
  22. package/demo/karma.conf.js +44 -0
  23. package/demo/package-lock.json +20001 -0
  24. package/demo/package.json +60 -0
  25. package/demo/src/app/album/album-page.component.html +24 -0
  26. package/demo/src/app/album/album-page.component.scss +31 -0
  27. package/demo/src/app/album/album-page.component.spec.ts +21 -0
  28. package/demo/src/app/album/album-page.component.ts +24 -0
  29. package/demo/src/app/app.component.html +3 -0
  30. package/demo/src/app/app.component.ts +16 -0
  31. package/demo/src/app/app.config.ts +17 -0
  32. package/demo/src/app/app.routes.ts +8 -0
  33. package/demo/src/app/health/health-page.component.html +17 -0
  34. package/demo/src/app/health/health-page.component.scss +0 -0
  35. package/demo/src/app/health/health-page.component.spec.ts +21 -0
  36. package/demo/src/app/health/health-page.component.ts +14 -0
  37. package/demo/src/app/index/index-page.component.html +41 -0
  38. package/demo/src/app/index/index-page.component.scss +0 -0
  39. package/demo/src/app/index/index-page.component.spec.ts +21 -0
  40. package/demo/src/app/index/index-page.component.ts +102 -0
  41. package/demo/src/app/index/index.routes.ts +25 -0
  42. package/demo/src/app/index/pages/action-sheet/action-sheet.page.html +33 -0
  43. package/demo/src/app/index/pages/action-sheet/action-sheet.page.scss +0 -0
  44. package/demo/src/app/index/pages/action-sheet/action-sheet.page.spec.ts +17 -0
  45. package/demo/src/app/index/pages/action-sheet/action-sheet.page.ts +75 -0
  46. package/demo/src/app/index/pages/action-sheet/action-sheet.util.ts +28 -0
  47. package/demo/src/app/index/pages/alert/alert.page.html +33 -0
  48. package/demo/src/app/index/pages/alert/alert.page.scss +0 -0
  49. package/demo/src/app/index/pages/alert/alert.page.spec.ts +17 -0
  50. package/demo/src/app/index/pages/alert/alert.page.ts +75 -0
  51. package/demo/src/app/index/pages/alert/alert.util.ts +21 -0
  52. package/demo/src/app/index/pages/button/button.page.html +90 -0
  53. package/demo/src/app/index/pages/button/button.page.scss +0 -0
  54. package/demo/src/app/index/pages/button/button.page.spec.ts +17 -0
  55. package/demo/src/app/index/pages/button/button.page.ts +53 -0
  56. package/demo/src/app/index/pages/checkbox/checkbox.page.html +66 -0
  57. package/demo/src/app/index/pages/checkbox/checkbox.page.scss +0 -0
  58. package/demo/src/app/index/pages/checkbox/checkbox.page.spec.ts +17 -0
  59. package/demo/src/app/index/pages/checkbox/checkbox.page.ts +47 -0
  60. package/demo/src/app/settings/settings-page.component.html +120 -0
  61. package/demo/src/app/settings/settings-page.component.scss +33 -0
  62. package/demo/src/app/settings/settings-page.component.spec.ts +21 -0
  63. package/demo/src/app/settings/settings-page.component.ts +55 -0
  64. package/demo/src/app/tabs/tabs.page.html +23 -0
  65. package/demo/src/app/tabs/tabs.page.scss +9 -0
  66. package/demo/src/app/tabs/tabs.page.spec.ts +26 -0
  67. package/demo/src/app/tabs/tabs.page.ts +28 -0
  68. package/demo/src/app/tabs/tabs.routes.ts +41 -0
  69. package/demo/src/assets/.gitkeep +0 -0
  70. package/demo/src/favicon.ico +0 -0
  71. package/demo/src/global.scss +47 -0
  72. package/demo/src/index.html +24 -0
  73. package/demo/src/main.ts +5 -0
  74. package/demo/src/theme/theme-ios26.scss +25 -0
  75. package/demo/src/theme/variables.scss +2 -0
  76. package/demo/tsconfig.app.json +14 -0
  77. package/demo/tsconfig.json +30 -0
  78. package/demo/tsconfig.spec.json +17 -0
  79. package/package.json +38 -11
  80. package/prettier.config.js +18 -0
  81. package/screenshots/ios26.png +0 -0
  82. package/screenshots/why-ion-list-inset.png +0 -0
  83. package/src/components/ion-action-sheet.scss +42 -0
  84. package/src/components/ion-alert.scss +31 -0
  85. package/src/components/ion-button.scss +111 -0
  86. package/src/components/ion-card.scss +3 -0
  87. package/src/components/ion-fab.scss +16 -0
  88. package/src/components/ion-list.scss +33 -0
  89. package/src/components/ion-modal.scss +6 -0
  90. package/src/components/ion-popover.scss +21 -0
  91. package/src/components/ion-searchbar.scss +37 -0
  92. package/src/components/ion-segment.scss +10 -0
  93. package/src/components/ion-tabs.scss +47 -0
  94. package/src/components/ion-toast.scss +3 -0
  95. package/src/components/ion-toggle.scss +47 -0
  96. package/src/components-dark/ion-button.scss +28 -0
  97. package/src/components-dark/theme-dark.scss +14 -0
  98. package/src/ionic-theme-dark-class.scss +6 -0
  99. package/src/ionic-theme-dark-system.scss +8 -0
  100. package/src/ionic-theme-ios26.scss +32 -0
  101. package/src/md-ion-list-inset.scss +19 -0
  102. package/src/utils/api.scss +20 -0
  103. package/src/utils/default-variables.scss +10 -0
  104. package/src/utils/theme-list-inset.scss +92 -0
  105. package/src/utils/translucent.scss +70 -0
  106. package/tsconfig.json +5 -0
  107. package/css/ion-list-inset.css +0 -247
  108. package/css/ion-list-inset.css.map +0 -1
  109. package/css/ionic-theme-ios26.css +0 -349
  110. package/css/ionic-theme-ios26.css.map +0 -1
  111. package/fesm2022/rdlabo-ionic-theme-ios26.mjs +0 -4
  112. package/fesm2022/rdlabo-ionic-theme-ios26.mjs.map +0 -1
  113. package/index.d.ts +0 -3
  114. package/src/assets/ion-list-inset.scss +0 -198
  115. package/src/assets/ios-design/ion-button.scss +0 -68
  116. package/src/assets/ios-design/ion-popover.scss +0 -23
  117. package/src/assets/ios-design/ion-searchbar.scss +0 -44
  118. package/src/assets/ios-design/ion-segment.scss +0 -12
  119. package/src/assets/ios-design/ion-tabs.scss +0 -60
  120. package/src/assets/ios-design/ion-toggle.scss +0 -8
  121. package/src/assets/ios-design/ios-design-dark.scss +0 -28
  122. package/src/assets/ios-design.scss +0 -110
  123. package/src/assets/ios-variables.scss +0 -38
@@ -0,0 +1,26 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { TabsPage } from './tabs.page';
4
+ import { testConfig } from '../../../../util/test.config';
5
+
6
+ describe('TabsPage', () => {
7
+ let component: TabsPage;
8
+ let fixture: ComponentFixture<TabsPage>;
9
+
10
+ beforeEach(async () => {
11
+ await TestBed.configureTestingModule({
12
+ imports: [TabsPage],
13
+ providers: testConfig.providers,
14
+ }).compileComponents();
15
+ });
16
+
17
+ beforeEach(() => {
18
+ fixture = TestBed.createComponent(TabsPage);
19
+ component = fixture.componentInstance;
20
+ fixture.detectChanges();
21
+ });
22
+
23
+ it('should create', () => {
24
+ expect(component).toBeTruthy();
25
+ });
26
+ });
@@ -0,0 +1,28 @@
1
+ import { Component, ElementRef, inject, OnInit } from '@angular/core';
2
+ import { IonIcon, IonLabel, IonTabBar, IonTabButton, IonTabs } from '@ionic/angular/standalone';
3
+ import { NavigationEnd, Router } from '@angular/router';
4
+ import { filter } from 'rxjs';
5
+
6
+ @Component({
7
+ selector: 'app-tabs',
8
+ templateUrl: 'tabs.page.html',
9
+ styleUrls: ['tabs.page.scss'],
10
+ imports: [IonTabs, IonTabBar, IonTabButton, IonIcon, IonLabel],
11
+ })
12
+ export class TabsPage implements OnInit {
13
+ readonly #router = inject(Router);
14
+ readonly #el = inject(ElementRef);
15
+ ngOnInit() {
16
+ this.#router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {
17
+ const tabBar = this.#el.nativeElement.querySelector('ion-tab-bar');
18
+ if (!tabBar) {
19
+ return;
20
+ }
21
+ if (['/main/settings'].includes(params.urlAfterRedirects)) {
22
+ tabBar.classList.add('tab-bar-hide');
23
+ } else if (tabBar) {
24
+ tabBar.classList.remove('tab-bar-hide');
25
+ }
26
+ });
27
+ }
28
+ }
@@ -0,0 +1,41 @@
1
+ import { Routes } from '@angular/router';
2
+ import { TabsPage } from './tabs.page';
3
+ import { IndexPageComponent } from '../index/index-page.component';
4
+ import { AlbumPage } from '../album/album-page.component';
5
+ import { SettingsPage } from '../settings/settings-page.component';
6
+ import { HealthPage } from '../health/health-page.component';
7
+
8
+ export const routes: Routes = [
9
+ {
10
+ path: 'main',
11
+ component: TabsPage,
12
+ children: [
13
+ {
14
+ path: 'index',
15
+ loadChildren: () => import('../index/index.routes').then((m) => m.routes),
16
+ },
17
+ {
18
+ path: 'album',
19
+ component: AlbumPage,
20
+ },
21
+ {
22
+ path: 'settings',
23
+ component: SettingsPage,
24
+ },
25
+ {
26
+ path: 'health',
27
+ component: HealthPage,
28
+ },
29
+ {
30
+ path: '',
31
+ redirectTo: '/main/index',
32
+ pathMatch: 'full',
33
+ },
34
+ ],
35
+ },
36
+ {
37
+ path: '',
38
+ redirectTo: '/main/index',
39
+ pathMatch: 'full',
40
+ },
41
+ ];
File without changes
Binary file
@@ -0,0 +1,47 @@
1
+ /*
2
+ * App Global CSS
3
+ * ----------------------------------------------------------------------------
4
+ * Put style rules here that you want to apply globally. These styles are for
5
+ * the entire app and not just one component. Additionally, this file can be
6
+ * used as an entry point to import other CSS/Sass files to be included in the
7
+ * output CSS.
8
+ * For more information on global stylesheets, visit the documentation:
9
+ * https://ionicframework.com/docs/layout/global-stylesheets
10
+ */
11
+
12
+ /* Core CSS required for Ionic components to work properly */
13
+ @use '@ionic/angular/css/core.css';
14
+
15
+ /* Basic CSS for apps built with Ionic */
16
+ @use '@ionic/angular/css/normalize.css';
17
+ @use '@ionic/angular/css/structure.css';
18
+ @use '@ionic/angular/css/typography.css';
19
+ @use '@ionic/angular/css/display.css';
20
+
21
+ /* Optional CSS utils that can be commented out */
22
+ @use '@ionic/angular/css/padding.css';
23
+ @use '@ionic/angular/css/float-elements.css';
24
+ @use '@ionic/angular/css/text-alignment.css';
25
+ @use '@ionic/angular/css/text-transformation.css';
26
+ @use '@ionic/angular/css/flex-utils.css';
27
+
28
+ /**
29
+ * Ionic Dark Mode
30
+ * -----------------------------------------------------
31
+ * For more info, please see:
32
+ * https://ionicframework.com/docs/theming/dark-mode
33
+ */
34
+
35
+ @use 'theme/theme-ios26';
36
+
37
+ //@use "@ionic/angular/css/palettes/dark.always.css";
38
+
39
+ //@use "@ionic/angular/css/palettes/dark.class.css";
40
+ /**
41
+ * 任意でダークモードを使うことができて便利なため、インポートしています(Library)。
42
+ * 一般的な用途では不要です。
43
+ */
44
+ @use '../../src/ionic-theme-dark-class';
45
+
46
+ @use '@ionic/angular/css/palettes/dark.system.css';
47
+ @use '../../src/ionic-theme-dark-system';
@@ -0,0 +1,24 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Demo of ionic-theme-ios26</title>
6
+ <base href="/" />
7
+ <meta name="color-scheme" content="light dark" />
8
+ <meta
9
+ name="viewport"
10
+ content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
11
+ />
12
+ <meta name="format-detection" content="telephone=no" />
13
+ <meta name="msapplication-tap-highlight" content="no" />
14
+
15
+ <link rel="icon" type="image/x-icon" href="favicon.ico" />
16
+
17
+ <!-- add to homescreen for ios -->
18
+ <meta name="apple-mobile-web-app-capable" content="yes" />
19
+ <meta name="apple-mobile-web-app-status-bar-style" content="black" />
20
+ </head>
21
+ <body>
22
+ <app-root></app-root>
23
+ </body>
24
+ </html>
@@ -0,0 +1,5 @@
1
+ import { bootstrapApplication } from '@angular/platform-browser';
2
+ import { appConfig } from './app/app.config';
3
+ import { AppComponent } from './app/app.component';
4
+
5
+ bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
@@ -0,0 +1,25 @@
1
+ /**
2
+ * You should use:
3
+ * @use '@rdlabo/ionic-theme-ios26/dist/css/ionic-theme-ios26.min.css';
4
+ * Here for development:
5
+ */
6
+ @use '../../../src/ionic-theme-ios26';
7
+
8
+ :root {
9
+ --ios26-color-background-rgb: var(--ion-color-light-rgb);
10
+ }
11
+
12
+ ion-back-button {
13
+ --color: var(--ion-color-dark);
14
+ }
15
+
16
+ section.section-example {
17
+ background: var(--ion-background-color, #fff);
18
+ border-radius: 24px;
19
+ padding: 16px;
20
+ margin: 16px;
21
+ }
22
+
23
+ ion-searchbar .searchbar-input-container {
24
+ margin: 0 20px !important;
25
+ }
@@ -0,0 +1,2 @@
1
+ // For information on how to create your own theme, please see:
2
+ // http://ionicframework.com/docs/theming/
@@ -0,0 +1,14 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "./tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "./out-tsc/app",
6
+ "types": []
7
+ },
8
+ "files": [
9
+ "src/main.ts",
10
+ ],
11
+ "include": [
12
+ "src/**/*.d.ts"
13
+ ]
14
+ }
@@ -0,0 +1,30 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "compileOnSave": false,
4
+ "compilerOptions": {
5
+ "baseUrl": "./",
6
+ "outDir": "./dist/out-tsc",
7
+ "forceConsistentCasingInFileNames": true,
8
+ "esModuleInterop": true,
9
+ "strict": true,
10
+ "noImplicitOverride": true,
11
+ "noPropertyAccessFromIndexSignature": true,
12
+ "noImplicitReturns": true,
13
+ "noFallthroughCasesInSwitch": true,
14
+ "sourceMap": true,
15
+ "declaration": false,
16
+ "experimentalDecorators": true,
17
+ "moduleResolution": "node",
18
+ "importHelpers": true,
19
+ "target": "es2022",
20
+ "module": "es2020",
21
+ "lib": ["es2018", "dom"],
22
+ "useDefineForClassFields": false
23
+ },
24
+ "angularCompilerOptions": {
25
+ "enableI18nLegacyMessageIdFormat": false,
26
+ "strictInjectionParameters": true,
27
+ "strictInputAccessModifiers": true,
28
+ "strictTemplates": true
29
+ }
30
+ }
@@ -0,0 +1,17 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "./tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "./out-tsc/spec",
6
+ "types": [
7
+ "jasmine"
8
+ ]
9
+ },
10
+ "files": [
11
+ "src/test.ts",
12
+ ],
13
+ "include": [
14
+ "src/**/*.spec.ts",
15
+ "src/**/*.d.ts"
16
+ ]
17
+ }
package/package.json CHANGED
@@ -1,22 +1,49 @@
1
1
  {
2
2
  "name": "@rdlabo/ionic-theme-ios26",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
+ "description": "iOS26 CSS Theme for Ionic Framework",
4
5
  "exports": {
6
+ "./src/*": {
7
+ "style": "./src/*"
8
+ },
5
9
  "./css/*": {
6
10
  "style": "./css/*"
7
11
  },
8
12
  "./package.json": {
9
13
  "default": "./package.json"
10
- },
11
- ".": {
12
- "types": "./index.d.ts",
13
- "default": "./fesm2022/rdlabo-ionic-theme-ios26.mjs"
14
14
  }
15
15
  },
16
- "sideEffects": false,
17
- "module": "fesm2022/rdlabo-ionic-theme-ios26.mjs",
18
- "typings": "index.d.ts",
19
- "dependencies": {
20
- "tslib": "^2.3.0"
16
+ "scripts": {
17
+ "build": "node build-sass.js",
18
+ "build:demo": "cd demo && npm install && npm run build -- --configuration=production",
19
+ "prepare": "husky install",
20
+ "fmt": "prettier --write \"./**/*.{scss,ts}\" && prettier --parser angular --write \"./**/*.html\"",
21
+ "release": "np --no-tests"
22
+ },
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+ssh://git@github.com/rdlabo-team/ionic-theme-ios26.git"
26
+ },
27
+ "keywords": [
28
+ "ionic",
29
+ "framework",
30
+ "theme",
31
+ "css",
32
+ "ios26"
33
+ ],
34
+ "author": "Masahiko Sakakibara <sakakibara@rdlabo.jp>",
35
+ "license": "MIT",
36
+ "bugs": {
37
+ "url": "https://github.com/rdlabo-team/ionic-theme-ios26/issues"
38
+ },
39
+ "homepage": "https://github.com/rdlabo-team/ionic-theme-ios26#readme",
40
+ "devDependencies": {
41
+ "@ionic/angular": "^8.7.5",
42
+ "husky": "^9.1.7",
43
+ "lint-staged": "^16.2.1",
44
+ "np": "^10.2.0",
45
+ "prettier": "^3.6.2",
46
+ "sass": "^1.93.2",
47
+ "typescript": "^5.9.2"
21
48
  }
22
- }
49
+ }
@@ -0,0 +1,18 @@
1
+ module.exports = {
2
+ /**
3
+ * Default value is 80. 80 is too small in wide screen.
4
+ */
5
+ printWidth: 140,
6
+ /**
7
+ * Why: Preferred in us.
8
+ */
9
+ singleQuote: true,
10
+ /**
11
+ * Why: ES compatibility is handled by TypeScript compilation.
12
+ */
13
+ trailingComma: 'all',
14
+ /**
15
+ * Why: Follow Angular tslint-rule
16
+ */
17
+ arrowParens: 'always',
18
+ };
Binary file
@@ -0,0 +1,42 @@
1
+ @use '../utils/api';
2
+
3
+ ion-action-sheet.ios {
4
+ --button-color: var(--ion-text-color);
5
+ --button-background-selected: transparent;
6
+ --backdrop-opacity: 0.2;
7
+
8
+ .action-sheet-container {
9
+ @include api.glass-background(0.9);
10
+ margin: 0 8px 8px;
11
+ border-radius: 32px;
12
+
13
+ .action-sheet-title {
14
+ padding-top: 8px;
15
+ }
16
+
17
+ .action-sheet-group {
18
+ background: transparent;
19
+
20
+ button {
21
+ border-radius: 32px;
22
+ background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.08);
23
+ padding: 0 14px;
24
+ min-height: 52px;
25
+ span.action-sheet-button-inner {
26
+ font-size: 1rem;
27
+ ion-icon {
28
+ font-size: 1.2rem;
29
+ }
30
+ }
31
+
32
+ &:not(:last-child) {
33
+ margin-bottom: 8px;
34
+ }
35
+ }
36
+ }
37
+
38
+ button.action-sheet-cancel {
39
+ margin-top: 12px;
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,31 @@
1
+ @use '../utils/api';
2
+
3
+ ion-alert.ios {
4
+ --backdrop-opacity: 0.2;
5
+
6
+ .alert-wrapper {
7
+ @include api.glass-background(0.9);
8
+ border-radius: 32px;
9
+
10
+ .alert-head,
11
+ .alert-message {
12
+ text-align: left;
13
+ }
14
+
15
+ .alert-button-group {
16
+ padding: 0 8px 12px;
17
+ .alert-button {
18
+ border: none;
19
+ border-radius: 32px;
20
+ margin: 0 4px;
21
+ min-width: calc(50% - 8px);
22
+ background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.08);
23
+ color: var(--ion-text-color);
24
+ }
25
+ }
26
+
27
+ button.action-sheet-cancel {
28
+ margin-top: 12px;
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,111 @@
1
+ @use '../utils/api';
2
+
3
+ @mixin theme-button {
4
+ max-height: inherit;
5
+ margin: 8px 4px;
6
+ &:first-child {
7
+ margin-left: 12px;
8
+ }
9
+ &:last-child {
10
+ margin-right: 12px;
11
+ }
12
+
13
+ transition:
14
+ transform 100ms ease-out,
15
+ color 50ms ease;
16
+ will-change: transform;
17
+
18
+ &.ion-activated {
19
+ transform: scale(1.2);
20
+ box-shadow: none;
21
+ ion-icon {
22
+ // 色を指定しなくても半透明に
23
+ //color: var(--ion-color-medium-tint);
24
+ }
25
+ }
26
+
27
+ // button size default
28
+ font-size: 1.05rem;
29
+ &:not(.button-has-icon-only):not(.back-button-has-icon-only)::part(native) {
30
+ padding: 0 16px;
31
+ min-height: 44px;
32
+ }
33
+
34
+ &.button-small {
35
+ font-size: 1.04rem;
36
+ &:not(.button-has-icon-only):not(.back-button-has-icon-only)::part(native) {
37
+ padding: 0 12px;
38
+ min-height: 36px;
39
+ }
40
+ }
41
+
42
+ &.button-large {
43
+ font-size: 1.06rem;
44
+ &:not(.button-has-icon-only):not(.back-button-has-icon-only)::part(native) {
45
+ padding: 0 20px;
46
+ min-height: 52px;
47
+ }
48
+ }
49
+
50
+ &::part(native) {
51
+ border-radius: 25px;
52
+ }
53
+
54
+ &:not(.button-solid):not(.ios26-button-solid):not(.button-outline):not(.ios26-button-outline):not(.button-clear):not(
55
+ .ios26-button-clear
56
+ )::part(native) {
57
+ @include api.glass-background;
58
+ border-radius: 25px;
59
+ }
60
+
61
+ &:not(.button-solid):not(.ios26-button-solid):not(.button-clear):not(.ios26-button-clear) {
62
+ color: var(--color);
63
+ &.ion-activated {
64
+ &::part(native) {
65
+ &::after {
66
+ background: transparent !important;
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ &.button-has-icon-only,
73
+ &.back-button-has-icon-only {
74
+ &::part(native) {
75
+ border-radius: 50%;
76
+ width: 44px;
77
+ height: 44px;
78
+ padding: 2px;
79
+ }
80
+
81
+ ion-icon {
82
+ font-size: 1.4rem !important;
83
+ &[name='close-outline'] {
84
+ font-size: 2rem !important;
85
+ }
86
+ }
87
+ }
88
+ }
89
+
90
+ /**
91
+ * .ios26-no-liquid-glass を適用しない限り、デフォルトスタイル
92
+ */
93
+ ion-header.ios,
94
+ ion-footer.ios {
95
+ ion-buttons:not(.ios26-no-liquid-glass) ion-button:not(.ios26-no-liquid-glass),
96
+ ion-buttons:not(.ios26-no-liquid-glass) ion-back-button:not(.ios26-no-liquid-glass),
97
+ /* collapseのanimateBackButton対策 */
98
+ ion-back-button:not(.ios26-no-liquid-glass) {
99
+ @include theme-button;
100
+ }
101
+ }
102
+
103
+ /**
104
+ * .ios26-liquid-glass を任意で適用した場合のスタイル
105
+ */
106
+ ion-buttons.ios.ios26-liquid-glass ion-button:not(.ios26-no-liquid-glass),
107
+ ion-buttons.ios.ios26-liquid-glass ion-back-button:not(.ios26-no-liquid-glass),
108
+ ion-button.ios.ios26-liquid-glass,
109
+ ion-back-button.ios.ios26-liquid-glass {
110
+ @include theme-button;
111
+ }
@@ -0,0 +1,3 @@
1
+ ion-card.ios {
2
+ border-radius: 24px;
3
+ }
@@ -0,0 +1,16 @@
1
+ @use '../utils/api';
2
+
3
+ ion-fab.ios {
4
+ ion-fab-button {
5
+ &::part(native) {
6
+ @include api.glass-background;
7
+ color: rgb(var(--ios26-color-dark-rgb));
8
+ }
9
+ --background-activated: rgba(var(--ios26-color-light-rgb), 0.3);
10
+ }
11
+ // TODO: これはUtility Classにマイグレートする必要があります
12
+ &.inner-tab-bar {
13
+ right: calc(16px + var(--ion-safe-area-right, 0px));
14
+ bottom: var(--ios26-floating-safe-area-bottom);
15
+ }
16
+ }
@@ -0,0 +1,33 @@
1
+ @use '../utils/theme-list-inset';
2
+
3
+ ion-list.list-inset.ios {
4
+ @include theme-list-inset.ion-list-inset();
5
+
6
+ ion-item-group,
7
+ ion-reorder-group {
8
+ border-radius: 24px;
9
+ overflow: hidden;
10
+
11
+ ion-item {
12
+ // To draw lines inside
13
+ --inner-padding-end: 0;
14
+ &::part(native) {
15
+ padding-right: 18px;
16
+ }
17
+ &::part(detail-icon) {
18
+ //padding-right: 18px;
19
+ margin-inline-end: 0;
20
+ }
21
+
22
+ --min-height: 52px;
23
+
24
+ & > ion-input[labelplacement='floating'] {
25
+ transition: transform 0.2s ease;
26
+
27
+ &:not(.label-floating) {
28
+ transform: translateY(-2px);
29
+ }
30
+ }
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,6 @@
1
+ ion-modal.ios {
2
+ ion-toolbar {
3
+ padding-right: calc(var(--ion-safe-area-right) + 4px) !important;
4
+ padding-left: calc(var(--ion-safe-area-left) + 4px) !important;
5
+ }
6
+ }
@@ -0,0 +1,21 @@
1
+ @use '../utils/api';
2
+
3
+ ion-popover.ios {
4
+ --backdrop-opacity: 0.04;
5
+ &::part(arrow) {
6
+ //display: none;
7
+ }
8
+ &:not(.ios26-no-liquid-glass) {
9
+ &::part(content) {
10
+ @include api.glass-background(0.6);
11
+ border-radius: 24px;
12
+ padding: 0;
13
+ }
14
+ }
15
+ ion-list {
16
+ background: transparent;
17
+ ion-item {
18
+ --background: transparent;
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,37 @@
1
+ @use '../utils/api';
2
+
3
+ ion-modal.ios {
4
+ ion-searchbar:not(.ios26-no-liquid-glass) {
5
+ .searchbar-input-container {
6
+ margin: 0 6px;
7
+ input.searchbar-input {
8
+ // Modal表示でのアイコン非表示の不具合の対応
9
+ backdrop-filter: none;
10
+ }
11
+ }
12
+ }
13
+ }
14
+
15
+ ion-searchbar.ios:not(.ios26-no-liquid-glass) {
16
+ min-height: 60px;
17
+ padding: 0;
18
+
19
+ ion-icon.searchbar-search-icon {
20
+ inset-inline-start: 12px;
21
+ }
22
+
23
+ .searchbar-input-container {
24
+ margin: 0 8px 0 16px;
25
+ align-self: center;
26
+ justify-self: center;
27
+ input.searchbar-input {
28
+ min-height: 44px;
29
+ @include api.glass-background;
30
+ border-radius: 20px;
31
+ padding-inline-start: 2.4rem !important;
32
+ }
33
+ .searchbar-clear-button {
34
+ padding-inline-end: 2rem !important;
35
+ }
36
+ }
37
+ }