@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.
- 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/.husky/pre-commit +1 -0
- package/.lintstagedrc.yml +6 -0
- package/.prettierignore +3 -0
- package/FEEDBACK.md +25 -0
- package/README.md +58 -87
- package/USING_ION_ITEM_GROUP.md +58 -0
- package/build-sass.js +25 -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 +47 -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 +31 -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 +41 -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 +102 -0
- package/demo/src/app/index/index.routes.ts +25 -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 +17 -0
- package/demo/src/app/index/pages/action-sheet/action-sheet.page.ts +75 -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 +17 -0
- package/demo/src/app/index/pages/alert/alert.page.ts +75 -0
- package/demo/src/app/index/pages/alert/alert.util.ts +21 -0
- package/demo/src/app/index/pages/button/button.page.html +90 -0
- package/demo/src/app/index/pages/button/button.page.scss +0 -0
- package/demo/src/app/index/pages/button/button.page.spec.ts +17 -0
- package/demo/src/app/index/pages/button/button.page.ts +53 -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 +17 -0
- package/demo/src/app/index/pages/checkbox/checkbox.page.ts +47 -0
- package/demo/src/app/settings/settings-page.component.html +120 -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 +41 -0
- package/demo/src/assets/.gitkeep +0 -0
- package/demo/src/favicon.ico +0 -0
- package/demo/src/global.scss +47 -0
- package/demo/src/index.html +24 -0
- package/demo/src/main.ts +5 -0
- package/demo/src/theme/theme-ios26.scss +25 -0
- package/demo/src/theme/variables.scss +2 -0
- package/demo/tsconfig.app.json +14 -0
- package/demo/tsconfig.json +30 -0
- package/demo/tsconfig.spec.json +17 -0
- package/package.json +38 -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 +42 -0
- package/src/components/ion-alert.scss +31 -0
- package/src/components/ion-button.scss +111 -0
- package/src/components/ion-card.scss +3 -0
- package/src/components/ion-fab.scss +16 -0
- package/src/components/ion-list.scss +33 -0
- package/src/components/ion-modal.scss +6 -0
- package/src/components/ion-popover.scss +21 -0
- package/src/components/ion-searchbar.scss +37 -0
- package/src/components/ion-segment.scss +10 -0
- package/src/components/ion-tabs.scss +47 -0
- package/src/components/ion-toast.scss +3 -0
- package/src/components/ion-toggle.scss +47 -0
- package/src/components-dark/ion-button.scss +28 -0
- package/src/components-dark/theme-dark.scss +14 -0
- package/src/ionic-theme-dark-class.scss +6 -0
- package/src/ionic-theme-dark-system.scss +8 -0
- package/src/ionic-theme-ios26.scss +32 -0
- package/src/md-ion-list-inset.scss +19 -0
- package/src/utils/api.scss +20 -0
- package/src/utils/default-variables.scss +10 -0
- package/src/utils/theme-list-inset.scss +92 -0
- package/src/utils/translucent.scss +70 -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,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>
|
package/demo/src/main.ts
ADDED
|
@@ -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,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.
|
|
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
|
-
"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
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
|
|
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,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,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
|
+
}
|