@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,17 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { AlertPage } from './alert.page';
3
+
4
+ describe('AlertPage', () => {
5
+ let component: AlertPage;
6
+ let fixture: ComponentFixture<AlertPage>;
7
+
8
+ beforeEach(() => {
9
+ fixture = TestBed.createComponent(AlertPage);
10
+ component = fixture.componentInstance;
11
+ fixture.detectChanges();
12
+ });
13
+
14
+ it('should create', () => {
15
+ expect(component).toBeTruthy();
16
+ });
17
+ });
@@ -0,0 +1,75 @@
1
+ import { Component, inject, OnInit } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import {
5
+ AlertController,
6
+ IonBackButton,
7
+ IonContent,
8
+ IonHeader,
9
+ IonIcon,
10
+ IonItem,
11
+ IonItemGroup,
12
+ IonLabel,
13
+ IonList,
14
+ IonNote,
15
+ IonText,
16
+ IonTitle,
17
+ IonToolbar,
18
+ } from '@ionic/angular/standalone';
19
+ import { ActionSheetController } from '@ionic/angular';
20
+ import { actionSheetUtil } from '../action-sheet/action-sheet.util';
21
+ import { alertUtil } from './alert.util';
22
+
23
+ @Component({
24
+ selector: 'app-alert',
25
+ templateUrl: './alert.page.html',
26
+ styleUrls: ['./alert.page.scss'],
27
+ standalone: true,
28
+ imports: [
29
+ IonContent,
30
+ IonHeader,
31
+ IonTitle,
32
+ IonToolbar,
33
+ CommonModule,
34
+ FormsModule,
35
+ IonBackButton,
36
+ IonIcon,
37
+ IonItem,
38
+ IonItemGroup,
39
+ IonLabel,
40
+ IonList,
41
+ IonNote,
42
+ IonText,
43
+ ],
44
+ })
45
+ export class AlertPage implements OnInit {
46
+ readonly overlayCtrl = inject(AlertController);
47
+
48
+ ngOnInit() {}
49
+
50
+ async present(type: 'all' | 'button-only' | 'no-cancel' | 'force-dark-mode') {
51
+ const applyConfig = ((type) => {
52
+ if (type === 'button-only') {
53
+ return {
54
+ ...alertUtil(),
55
+ header: undefined,
56
+ subHeader: undefined,
57
+ };
58
+ } else if (type === 'no-cancel') {
59
+ return {
60
+ ...alertUtil(),
61
+ buttons: alertUtil().buttons.filter((button) => button.role !== 'cancel'),
62
+ };
63
+ } else if (type === 'force-dark-mode') {
64
+ return {
65
+ ...alertUtil(),
66
+ cssClass: 'ion-palette-dark',
67
+ };
68
+ }
69
+ return alertUtil();
70
+ })(type);
71
+
72
+ const actionSheet = await this.overlayCtrl.create(applyConfig);
73
+ await actionSheet.present();
74
+ }
75
+ }
@@ -0,0 +1,21 @@
1
+ export const alertUtil = () => ({
2
+ header: 'A Short Title Is Best',
3
+ subHeader: 'A Sub Header Is Optional',
4
+ message: 'A message should be a short, complete sentence.',
5
+ buttons: [
6
+ {
7
+ text: 'Cancel',
8
+ role: 'cancel',
9
+ handler: () => {
10
+ console.log('Alert canceled');
11
+ },
12
+ },
13
+ {
14
+ text: 'OK',
15
+ role: 'confirm',
16
+ handler: () => {
17
+ console.log('Alert confirmed');
18
+ },
19
+ },
20
+ ],
21
+ });
@@ -0,0 +1,90 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-back-button slot="start" defaultHref="/main/index"></ion-back-button>
4
+ <ion-title>button</ion-title>
5
+ </ion-toolbar>
6
+ </ion-header>
7
+
8
+ <ion-content [fullscreen]="true" color="light">
9
+ <ion-list [inset]="true">
10
+ <ion-item-group class="header-item-group">
11
+ <ion-item>
12
+ <ion-label>
13
+ <ion-icon name="logo-ionic" style="background: linear-gradient(#489bfd, #2b77f4)"></ion-icon>
14
+ <h2>button</h2>
15
+ <ion-header collapse="condense">
16
+ <ion-toolbar></ion-toolbar>
17
+ </ion-header>
18
+ <ion-text><code>This page is a component demo for &#64;rdlabo/ionic-theme-ios26.</code></ion-text>
19
+ </ion-label>
20
+ </ion-item>
21
+ </ion-item-group>
22
+ </ion-list>
23
+
24
+ <ion-list [inset]="true">
25
+ <ion-list-header><ion-label>Default styles</ion-label></ion-list-header>
26
+ <ion-item-group>
27
+ <ion-item>
28
+ <ion-label><code>buttons > button</code></ion-label>
29
+ <ion-buttons slot="end">
30
+ <ion-button>Link</ion-button>
31
+ </ion-buttons>
32
+ </ion-item>
33
+ <ion-item>
34
+ <ion-label><code>button</code></ion-label>
35
+ <ion-button slot="end">Link</ion-button>
36
+ </ion-item>
37
+ </ion-item-group>
38
+ <ion-note>Should not effect this library.</ion-note>
39
+ </ion-list>
40
+
41
+ <ion-list [inset]="true">
42
+ <ion-list-header><ion-label>Inner ion-buttons</ion-label></ion-list-header>
43
+ <ion-item-group>
44
+ <ion-item>
45
+ <ion-label><code>buttons > button.ios26-liquid-glass</code></ion-label>
46
+ <ion-buttons slot="end">
47
+ <ion-button class="ios26-liquid-glass">Link</ion-button>
48
+ </ion-buttons>
49
+ </ion-item>
50
+ <ion-item>
51
+ <ion-label><code>buttons > button.ios26-liquid-glass[fill=outline]</code></ion-label>
52
+ <ion-buttons slot="end">
53
+ <ion-button class="ios26-liquid-glass" fill="outline">Link</ion-button>
54
+ </ion-buttons>
55
+ </ion-item>
56
+ </ion-item-group>
57
+ </ion-list>
58
+
59
+ <ion-list [inset]="true">
60
+ <ion-list-header><ion-label>Standalone</ion-label></ion-list-header>
61
+ <ion-item-group>
62
+ <ion-item>
63
+ <ion-label><code>button.ios26-liquid-glass[fill=default]</code></ion-label>
64
+ <ion-button slot="end" class="ios26-liquid-glass" fill="default">Link</ion-button>
65
+ </ion-item>
66
+ <ion-item>
67
+ <ion-label><code>button.ios26-liquid-glass[fill=solid]</code></ion-label>
68
+ <ion-button slot="end" class="ios26-liquid-glass" fill="solid">Link</ion-button>
69
+ </ion-item>
70
+ <ion-item>
71
+ <ion-label><code>button.ios26-liquid-glass[fill=outline]</code></ion-label>
72
+ <ion-button slot="end" class="ios26-liquid-glass" fill="outline">Link</ion-button>
73
+ </ion-item>
74
+ <ion-item>
75
+ <ion-label><code>button.ios26-liquid-glass[fill=clear]</code></ion-label>
76
+ <ion-button slot="end" class="ios26-liquid-glass" fill="clear">Link</ion-button>
77
+ </ion-item>
78
+ </ion-item-group>
79
+ </ion-list>
80
+
81
+ <section class="section-example">
82
+ <ion-button class="ios26-liquid-glass" size="small">small</ion-button>
83
+ <ion-button class="ios26-liquid-glass" size="default">default</ion-button>
84
+ <ion-button class="ios26-liquid-glass" size="large">large</ion-button><br />
85
+
86
+ <ion-button class="ios26-liquid-glass" size="small" fill="default">small</ion-button>
87
+ <ion-button class="ios26-liquid-glass" size="default" fill="default">default</ion-button>
88
+ <ion-button class="ios26-liquid-glass" size="large" fill="default">large</ion-button>
89
+ </section>
90
+ </ion-content>
@@ -0,0 +1,17 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { ButtonPage } from './button.page';
3
+
4
+ describe('ButtonPage', () => {
5
+ let component: ButtonPage;
6
+ let fixture: ComponentFixture<ButtonPage>;
7
+
8
+ beforeEach(() => {
9
+ fixture = TestBed.createComponent(ButtonPage);
10
+ component = fixture.componentInstance;
11
+ fixture.detectChanges();
12
+ });
13
+
14
+ it('should create', () => {
15
+ expect(component).toBeTruthy();
16
+ });
17
+ });
@@ -0,0 +1,53 @@
1
+ import { Component, OnInit } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import {
5
+ IonBackButton,
6
+ IonButton,
7
+ IonButtons,
8
+ IonCheckbox,
9
+ IonContent,
10
+ IonHeader,
11
+ IonIcon,
12
+ IonItem,
13
+ IonItemGroup,
14
+ IonLabel,
15
+ IonList,
16
+ IonListHeader,
17
+ IonNote,
18
+ IonText,
19
+ IonTitle,
20
+ IonToolbar,
21
+ } from '@ionic/angular/standalone';
22
+
23
+ @Component({
24
+ selector: 'app-button',
25
+ templateUrl: './button.page.html',
26
+ styleUrls: ['./button.page.scss'],
27
+ standalone: true,
28
+ imports: [
29
+ IonContent,
30
+ IonHeader,
31
+ IonTitle,
32
+ IonToolbar,
33
+ CommonModule,
34
+ FormsModule,
35
+ IonBackButton,
36
+ IonCheckbox,
37
+ IonIcon,
38
+ IonItem,
39
+ IonItemGroup,
40
+ IonLabel,
41
+ IonList,
42
+ IonText,
43
+ IonButtons,
44
+ IonButton,
45
+ IonNote,
46
+ IonListHeader,
47
+ ],
48
+ })
49
+ export class ButtonPage implements OnInit {
50
+ constructor() {}
51
+
52
+ ngOnInit() {}
53
+ }
@@ -0,0 +1,66 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-back-button slot="start" defaultHref="/main/index"></ion-back-button>
4
+ <ion-title>checkbox</ion-title>
5
+ </ion-toolbar>
6
+ </ion-header>
7
+
8
+ <ion-content [fullscreen]="true" color="light">
9
+ <ion-list [inset]="true">
10
+ <ion-item-group class="header-item-group">
11
+ <ion-item>
12
+ <ion-label>
13
+ <ion-icon name="logo-ionic" style="background: linear-gradient(#489bfd, #2b77f4)"></ion-icon>
14
+ <h2>checkbox</h2>
15
+ <ion-header collapse="condense">
16
+ <ion-toolbar></ion-toolbar>
17
+ </ion-header>
18
+ <ion-text><code>This page is a component demo for &#64;rdlabo/ionic-theme-ios26.</code></ion-text>
19
+ </ion-label>
20
+ </ion-item>
21
+ </ion-item-group>
22
+ </ion-list>
23
+
24
+ <ion-list [inset]="true">
25
+ <ion-item-group>
26
+ <ion-item>
27
+ <ion-checkbox label-placement="stacked" alignment="start">Aligned to the Start</ion-checkbox>
28
+ </ion-item>
29
+ <ion-item>
30
+ <ion-checkbox label-placement="stacked" alignment="center">Aligned to the Center</ion-checkbox>
31
+ </ion-item>
32
+
33
+ <ion-item>
34
+ <ion-checkbox justify="start">Packed at the Start of Line</ion-checkbox>
35
+ </ion-item>
36
+ <ion-item>
37
+ <ion-checkbox justify="end">Packed at the End of Line</ion-checkbox>
38
+ </ion-item>
39
+ <ion-item>
40
+ <ion-checkbox justify="space-between">Space Between Label and Control</ion-checkbox>
41
+ </ion-item>
42
+ </ion-item-group>
43
+ </ion-list>
44
+
45
+ <section class="section-example">
46
+ <ion-checkbox labelPlacement="start">Label at the Start</ion-checkbox>
47
+
48
+ <br />
49
+
50
+ <ion-checkbox labelPlacement="end">Label at the End</ion-checkbox>
51
+
52
+ <br />
53
+
54
+ <ion-checkbox labelPlacement="fixed">Fixed Width Label</ion-checkbox>
55
+
56
+ <br />
57
+
58
+ <ion-checkbox labelPlacement="stacked">Stacked Label</ion-checkbox>
59
+
60
+ <br />
61
+
62
+ <ion-checkbox helperText="Agree to the terms before continuing" errorText="You must agree to the terms to continue">
63
+ I agree to the terms and conditions
64
+ </ion-checkbox>
65
+ </section>
66
+ </ion-content>
@@ -0,0 +1,17 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { CheckboxPage } from './checkbox.page';
3
+
4
+ describe('CheckboxPage', () => {
5
+ let component: CheckboxPage;
6
+ let fixture: ComponentFixture<CheckboxPage>;
7
+
8
+ beforeEach(() => {
9
+ fixture = TestBed.createComponent(CheckboxPage);
10
+ component = fixture.componentInstance;
11
+ fixture.detectChanges();
12
+ });
13
+
14
+ it('should create', () => {
15
+ expect(component).toBeTruthy();
16
+ });
17
+ });
@@ -0,0 +1,47 @@
1
+ import { Component, OnInit } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import {
5
+ IonBackButton,
6
+ IonCheckbox,
7
+ IonContent,
8
+ IonHeader,
9
+ IonIcon,
10
+ IonItem,
11
+ IonItemGroup,
12
+ IonLabel,
13
+ IonList,
14
+ IonNote,
15
+ IonText,
16
+ IonTitle,
17
+ IonToolbar,
18
+ } from '@ionic/angular/standalone';
19
+
20
+ @Component({
21
+ selector: 'app-checkbox',
22
+ templateUrl: './checkbox.page.html',
23
+ styleUrls: ['./checkbox.page.scss'],
24
+ standalone: true,
25
+ imports: [
26
+ IonContent,
27
+ IonHeader,
28
+ IonTitle,
29
+ IonToolbar,
30
+ CommonModule,
31
+ FormsModule,
32
+ IonBackButton,
33
+ IonIcon,
34
+ IonItem,
35
+ IonItemGroup,
36
+ IonLabel,
37
+ IonList,
38
+ IonNote,
39
+ IonText,
40
+ IonCheckbox,
41
+ ],
42
+ })
43
+ export class CheckboxPage implements OnInit {
44
+ constructor() {}
45
+
46
+ ngOnInit() {}
47
+ }
@@ -0,0 +1,120 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-buttons slot="start">
4
+ <ion-back-button defaultHref="/"></ion-back-button>
5
+ </ion-buttons>
6
+ <ion-title>Settings</ion-title>
7
+ <ion-buttons slot="end">
8
+ <ion-button color="dark" href="https://github.com/rdlabo-team/ionic-theme-ios26"
9
+ ><ion-icon name="logo-github" slot="icon-only"></ion-icon
10
+ ></ion-button>
11
+ </ion-buttons>
12
+ </ion-toolbar>
13
+ </ion-header>
14
+ <ion-content [fullscreen]="true" color="light">
15
+ <ion-header collapse="condense">
16
+ <ion-toolbar color="light">
17
+ <ion-title size="large">Settings</ion-title>
18
+ </ion-toolbar>
19
+ </ion-header>
20
+ <ion-list [inset]="true" class="user-info">
21
+ <ion-item-group>
22
+ <ion-item [detail]="true">
23
+ <ion-avatar slot="start"><ion-img src="https://picsum.photos/150/150"></ion-img></ion-avatar>
24
+ <div>
25
+ <ion-label>Masahiko Sakakibara</ion-label>
26
+ <ion-note>Apple Account, iCloud+, and more</ion-note>
27
+ </div>
28
+ </ion-item>
29
+ <ion-item></ion-item>
30
+ </ion-item-group>
31
+ </ion-list>
32
+ <ion-list [inset]="true">
33
+ <ion-item-group>
34
+ <ion-item>
35
+ <ion-icon name="airplane" slot="start" style="background: linear-gradient(#f8b250, #f79407)"></ion-icon>
36
+ <ion-label>Airplane Mode</ion-label>
37
+ <ion-toggle slot="end" color="success"></ion-toggle>
38
+ </ion-item>
39
+ <ion-item [detail]="true">
40
+ <ion-icon name="wifi" slot="start" style="background: linear-gradient(#489bfd, #2b77f4)"></ion-icon>
41
+ <ion-label>WiFi</ion-label>
42
+ <ion-note>ionic-framework-a</ion-note>
43
+ </ion-item>
44
+ <ion-item [detail]="true">
45
+ <ion-icon name="bluetooth" slot="start" style="background: linear-gradient(#459cfa, #2d7afc)"></ion-icon>
46
+ <ion-label>Bluetooth</ion-label>
47
+ <ion-note>On</ion-note>
48
+ </ion-item>
49
+ <ion-item [detail]="true">
50
+ <ion-icon name="stats-chart" slot="start" style="background: linear-gradient(#6fdc83, #3ec75d)"></ion-icon>
51
+ <ion-label>Cellular</ion-label>
52
+ <ion-note>Off</ion-note>
53
+ </ion-item>
54
+ <ion-item [detail]="true" [disabled]="true">
55
+ <ion-icon name="unlink" slot="start" style="background: linear-gradient(#6fdc83, #3ec75d)"></ion-icon>
56
+ <ion-label>Personal Hotspot</ion-label>
57
+ <ion-note>Off</ion-note>
58
+ </ion-item>
59
+ <ion-item [detail]="true">
60
+ <ion-icon name="battery-full" slot="start" style="background: linear-gradient(#6fdc83, #3ec75d)"></ion-icon>
61
+ <ion-label>Battery</ion-label>
62
+ </ion-item>
63
+ </ion-item-group>
64
+ </ion-list>
65
+ <ion-list [inset]="true">
66
+ <ion-item-group>
67
+ <ion-item [detail]="true">
68
+ <ion-icon name="cog-outline" slot="start" style="background: linear-gradient(#afafb4, #8e8e93)"></ion-icon>
69
+ <ion-label>General</ion-label>
70
+ </ion-item>
71
+ <ion-item [detail]="true">
72
+ <ion-icon name="accessibility" slot="start" style="background: linear-gradient(#43a6ff, #0288ff)"></ion-icon>
73
+ <ion-label>Accessibility</ion-label>
74
+ </ion-item>
75
+ <ion-item [detail]="true">
76
+ <ion-icon name="log-in-outline" slot="start" style="background: linear-gradient(#43a6ff, #0288ff)"></ion-icon>
77
+ <ion-label>Action Button</ion-label>
78
+ </ion-item>
79
+ <ion-item [detail]="true">
80
+ <ion-icon name="logo-angular" slot="start" style="background: linear-gradient(#f9a432, #e193fb)"></ion-icon>
81
+ <ion-label>Apple Intelligence & Siri</ion-label>
82
+ </ion-item>
83
+ <ion-item [detail]="true">
84
+ <ion-icon name="camera" slot="start" style="background: linear-gradient(#afafb4, #8e8e93)"></ion-icon>
85
+ <ion-label>Camera</ion-label>
86
+ </ion-item>
87
+ <ion-item [detail]="true">
88
+ <ion-icon name="calculator" slot="start" style="background: linear-gradient(#43a6ff, #0288ff)"></ion-icon>
89
+ <ion-label>Home Screen & App Library</ion-label>
90
+ </ion-item>
91
+ <ion-item [detail]="true">
92
+ <ion-icon name="search-outline" slot="start" style="background: linear-gradient(#afafb4, #8e8e93)"></ion-icon>
93
+ <ion-label>Search</ion-label>
94
+ </ion-item>
95
+ <ion-item [detail]="true">
96
+ <ion-icon name="snow" slot="start" style="background: var(--ion-text-color, #000)"></ion-icon>
97
+ <ion-label>StandBy</ion-label>
98
+ </ion-item>
99
+ </ion-item-group>
100
+ </ion-list>
101
+ <ion-list [inset]="true">
102
+ <ion-item-group>
103
+ <ion-item [detail]="true">
104
+ <ion-icon name="hourglass" slot="start" style="background: linear-gradient(#887dff, #6055f5)"></ion-icon>
105
+ <ion-label>Screen Time</ion-label>
106
+ </ion-item>
107
+ </ion-item-group>
108
+ </ion-list>
109
+ <ion-list [inset]="true">
110
+ <ion-item-group>
111
+ <ion-item [detail]="true">
112
+ <ion-icon name="hand-left" slot="start" style="background: linear-gradient(#43a6ff, #0288ff)"></ion-icon>
113
+ <ion-label>Privacy & Security</ion-label>
114
+ </ion-item>
115
+ </ion-item-group>
116
+ </ion-list>
117
+ </ion-content>
118
+ <ion-footer [translucent]="true">
119
+ <ion-toolbar><ion-searchbar></ion-searchbar></ion-toolbar>
120
+ </ion-footer>
@@ -0,0 +1,33 @@
1
+ ion-content:not(.background-transparent)::after {
2
+ box-shadow: none !important;
3
+ }
4
+
5
+ ion-list.list-inset {
6
+ margin-bottom: 36px;
7
+ }
8
+
9
+ ion-item > ion-icon[slot='start'] {
10
+ border-radius: 8px;
11
+ padding: 4px;
12
+ margin-right: 14px;
13
+ color: var(--ion-background-color, #fff);
14
+ font-size: 1.3rem;
15
+ }
16
+
17
+ ion-list.user-info {
18
+ margin-top: 0;
19
+ ion-avatar {
20
+ width: 64px;
21
+ height: 64px;
22
+ margin: 16px 16px 16px 0;
23
+ }
24
+ div {
25
+ ion-label {
26
+ font-weight: bold;
27
+ font-size: 1.2rem;
28
+ }
29
+ ion-note {
30
+ font-size: 0.9rem;
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { SettingsPage } from './settings-page.component';
3
+ import { testConfig } from '../../../../util/test.config';
4
+
5
+ describe('VirtualScrollHeaderPage', () => {
6
+ let component: SettingsPage;
7
+ let fixture: ComponentFixture<SettingsPage>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ providers: testConfig.providers,
12
+ }).compileComponents();
13
+ fixture = TestBed.createComponent(SettingsPage);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -0,0 +1,55 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import {
5
+ IonAvatar,
6
+ IonBackButton,
7
+ IonButton,
8
+ IonButtons,
9
+ IonContent,
10
+ IonFooter,
11
+ IonHeader,
12
+ IonIcon,
13
+ IonImg,
14
+ IonItem,
15
+ IonItemGroup,
16
+ IonLabel,
17
+ IonList,
18
+ IonNote,
19
+ IonSearchbar,
20
+ IonTitle,
21
+ IonToggle,
22
+ IonToolbar,
23
+ Platform,
24
+ } from '@ionic/angular/standalone';
25
+
26
+ @Component({
27
+ selector: 'app-settings-page',
28
+ templateUrl: './settings-page.component.html',
29
+ styleUrls: ['./settings-page.component.scss'],
30
+ imports: [
31
+ IonContent,
32
+ IonHeader,
33
+ IonTitle,
34
+ IonToolbar,
35
+ CommonModule,
36
+ FormsModule,
37
+ IonIcon,
38
+ IonItem,
39
+ IonLabel,
40
+ IonList,
41
+ IonButton,
42
+ IonButtons,
43
+ IonFooter,
44
+ IonSearchbar,
45
+ IonBackButton,
46
+ IonAvatar,
47
+ IonImg,
48
+ IonNote,
49
+ IonItemGroup,
50
+ IonToggle,
51
+ ],
52
+ })
53
+ export class SettingsPage {
54
+ readonly platform = inject(Platform);
55
+ }
@@ -0,0 +1,23 @@
1
+ <ion-tabs>
2
+ <ion-tab-bar slot="bottom">
3
+ <ion-tab-button tab="index" href="/main/index">
4
+ <ion-icon aria-hidden="true" name="documents-outline"></ion-icon>
5
+ <ion-label>Index</ion-label>
6
+ </ion-tab-button>
7
+
8
+ <ion-tab-button tab="album" href="/main/album">
9
+ <ion-icon aria-hidden="true" name="images"></ion-icon>
10
+ <ion-label>Library</ion-label>
11
+ </ion-tab-button>
12
+
13
+ <ion-tab-button tab="settings" href="/main/settings">
14
+ <ion-icon aria-hidden="true" name="cog-outline"></ion-icon>
15
+ <ion-label>Settings</ion-label>
16
+ </ion-tab-button>
17
+
18
+ <ion-tab-button tab="health" href="/main/health">
19
+ <ion-icon aria-hidden="true" name="list-outline"></ion-icon>
20
+ <ion-label>Health</ion-label>
21
+ </ion-tab-button>
22
+ </ion-tab-bar>
23
+ </ion-tabs>
@@ -0,0 +1,9 @@
1
+ ion-label {
2
+ margin-bottom: 4px;
3
+ }
4
+
5
+ ion-tab-bar {
6
+ &.tab-bar-hide {
7
+ display: none;
8
+ }
9
+ }