@rdlabo/ionic-theme-ios26 0.0.4 → 0.1.0

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 (38) hide show
  1. package/demo/src/app/index/index-page.component.html +8 -6
  2. package/demo/src/app/index/index-page.component.ts +7 -11
  3. package/demo/src/app/index/index.routes.ts +24 -4
  4. package/demo/src/app/index/pages/accordion/accordion.page.html +45 -0
  5. package/demo/src/app/index/pages/accordion/accordion.page.scss +0 -0
  6. package/demo/src/app/index/pages/accordion/accordion.page.spec.ts +21 -0
  7. package/demo/src/app/index/pages/accordion/accordion.page.ts +47 -0
  8. package/demo/src/app/index/pages/inputs/inputs.page.html +65 -0
  9. package/demo/src/app/index/pages/inputs/inputs.page.scss +0 -0
  10. package/demo/src/app/index/pages/inputs/inputs.page.spec.ts +21 -0
  11. package/demo/src/app/index/pages/inputs/inputs.page.ts +49 -0
  12. package/demo/src/app/index/pages/item-list/item-list.page.html +52 -0
  13. package/demo/src/app/index/pages/item-list/item-list.page.scss +0 -0
  14. package/demo/src/app/index/pages/item-list/item-list.page.spec.ts +21 -0
  15. package/demo/src/app/index/pages/item-list/item-list.page.ts +47 -0
  16. package/demo/src/app/index/pages/reorder/reorder.page.html +52 -0
  17. package/demo/src/app/index/pages/reorder/reorder.page.scss +0 -0
  18. package/demo/src/app/index/pages/reorder/reorder.page.spec.ts +21 -0
  19. package/demo/src/app/index/pages/reorder/reorder.page.ts +47 -0
  20. package/demo/src/app/index/pages/segment/segment.page.html +6 -1
  21. package/demo/src/app/index/pages/segment/segment.page.scss +1 -0
  22. package/demo/src/app/index/pages/tabs/tabs.page.html +78 -0
  23. package/demo/src/app/index/pages/tabs/tabs.page.scss +6 -0
  24. package/demo/src/app/index/pages/tabs/tabs.page.spec.ts +21 -0
  25. package/demo/src/app/index/pages/tabs/tabs.page.ts +47 -0
  26. package/demo/src/app/index/pages/toolbar/toolbar.page.html +121 -0
  27. package/demo/src/app/index/pages/toolbar/toolbar.page.scss +0 -0
  28. package/demo/src/app/index/pages/toolbar/toolbar.page.spec.ts +21 -0
  29. package/demo/src/app/index/pages/toolbar/toolbar.page.ts +55 -0
  30. package/package.json +1 -1
  31. package/src/components/ion-action-sheet.scss +4 -0
  32. package/src/components/ion-alert.scss +0 -1
  33. package/src/components/ion-button.scss +8 -2
  34. package/src/components/ion-list.scss +3 -1
  35. package/src/components/ion-tabs.scss +21 -6
  36. package/src/default-variables.scss +2 -0
  37. package/src/ionic-theme-ios26.scss +0 -1
  38. package/src/utils/theme-list-inset.scss +1 -0
@@ -23,10 +23,10 @@
23
23
  </ion-list>
24
24
 
25
25
  <ion-list [inset]="true">
26
- <ion-list-header><ion-label>Enable Demo</ion-label></ion-list-header>
26
+ <ion-list-header><ion-label>Ready</ion-label></ion-list-header>
27
27
  <ion-item-group>
28
28
  @for (item of enableComponents(); track item.name) {
29
- <ion-item [disabled]="!item.enable" [button]="item.enable" (click)="navigateComponent(item)">
29
+ <ion-item [button]="true" (click)="navigateComponent(item)">
30
30
  <ion-label>{{ item.name }}</ion-label>
31
31
  </ion-item>
32
32
  }
@@ -35,15 +35,17 @@
35
35
  </ion-list>
36
36
 
37
37
  <ion-list [inset]="true">
38
- <ion-list-header><ion-label>Disable Demo</ion-label></ion-list-header>
38
+ <ion-list-header><ion-label>Spec Limitation</ion-label></ion-list-header>
39
39
  <ion-item-group>
40
40
  @for (item of disableComponents(); track item.name) {
41
- <ion-item [disabled]="!item.enable" [button]="item.enable">
41
+ <ion-item [button]="true" (click)="navigateComponent(item)">
42
42
  <ion-label>{{ item.name }}</ion-label>
43
- <ion-text>WIP</ion-text>
44
43
  </ion-item>
45
44
  }
46
45
  </ion-item-group>
47
- <ion-note>These components are under development. However, that doesn't mean they can't be used.</ion-note>
46
+ <ion-note
47
+ >Some HTML elements or APIs are missing, which limits what can be implemented. This is currently being discussed with the Ionic
48
+ team.</ion-note
49
+ >
48
50
  </ion-list>
49
51
  </ion-content>
@@ -53,7 +53,7 @@ interface IComponent {
53
53
  })
54
54
  export class IndexPageComponent {
55
55
  readonly components = signal<IComponent[]>([
56
- { name: 'accordion', enable: false },
56
+ { name: 'accordion', enable: true },
57
57
  { name: 'action-sheet', enable: true },
58
58
  { name: 'alert', enable: true },
59
59
  { name: 'breadcrumbs', enable: true },
@@ -63,22 +63,21 @@ export class IndexPageComponent {
63
63
  { name: 'chip', enable: true },
64
64
  { name: 'date-and-time-pickers', enable: true },
65
65
  { name: 'floating-action-button', enable: true },
66
- { name: 'inputs', enable: false },
67
- { name: 'item-list', enable: false },
68
- { name: 'menu', enable: false },
66
+ { name: 'inputs', enable: true },
67
+ { name: 'item-list', enable: true },
69
68
  { name: 'modal', enable: true },
70
69
  { name: 'popover', enable: true },
71
70
  { name: 'progress-indicators', enable: true },
72
71
  { name: 'radio', enable: true },
73
72
  { name: 'range', enable: true },
74
- { name: 'reorder', enable: false },
73
+ { name: 'reorder', enable: true },
75
74
  { name: 'searchbar', enable: true },
76
- { name: 'segment', enable: true },
75
+ { name: 'segment', enable: false },
77
76
  { name: 'select', enable: true },
78
- { name: 'tabs', enable: false },
77
+ { name: 'tabs', enable: true },
79
78
  { name: 'toast', enable: true },
80
79
  { name: 'toggle', enable: true },
81
- { name: 'toolbar', enable: false },
80
+ { name: 'toolbar', enable: true },
82
81
  ]);
83
82
  readonly enableComponents = computed(() => this.components().filter((c) => c.enable));
84
83
  readonly disableComponents = computed(() => this.components().filter((c) => !c.enable));
@@ -88,9 +87,6 @@ export class IndexPageComponent {
88
87
  readonly #document = inject(DOCUMENT);
89
88
 
90
89
  async navigateComponent(item: IComponent) {
91
- if (!item.enable) {
92
- return;
93
- }
94
90
  await this.#router.navigate([item.name], { relativeTo: this.#route });
95
91
  }
96
92
 
@@ -58,10 +58,6 @@ export const routes: Routes = [
58
58
  path: 'searchbar',
59
59
  loadComponent: () => import('./pages/searchbar/searchbar.page').then((m) => m.SearchbarPage),
60
60
  },
61
- {
62
- path: 'menu',
63
- loadComponent: () => import('./pages/menu/menu.page').then((m) => m.MenuPage),
64
- },
65
61
  {
66
62
  path: 'popover',
67
63
  loadComponent: () => import('./pages/popover/popover.page').then((m) => m.PopoverPage),
@@ -86,4 +82,28 @@ export const routes: Routes = [
86
82
  path: 'date-and-time-pickers',
87
83
  loadComponent: () => import('./pages/date-and-time-pickers/date-and-time-pickers.page').then((m) => m.DateAndTimePickersPage),
88
84
  },
85
+ {
86
+ path: 'accordion',
87
+ loadComponent: () => import('./pages/accordion/accordion.page').then((m) => m.AccordionPage),
88
+ },
89
+ {
90
+ path: 'inputs',
91
+ loadComponent: () => import('./pages/inputs/inputs.page').then((m) => m.InputsPage),
92
+ },
93
+ {
94
+ path: 'item-list',
95
+ loadComponent: () => import('./pages/item-list/item-list.page').then((m) => m.ItemListPage),
96
+ },
97
+ {
98
+ path: 'reorder',
99
+ loadComponent: () => import('./pages/reorder/reorder.page').then((m) => m.ReorderPage),
100
+ },
101
+ {
102
+ path: 'tabs',
103
+ loadComponent: () => import('./pages/tabs/tabs.page').then((m) => m.TabsPage),
104
+ },
105
+ {
106
+ path: 'toolbar',
107
+ loadComponent: () => import('./pages/toolbar/toolbar.page').then((m) => m.ToolbarPage),
108
+ },
89
109
  ];
@@ -0,0 +1,45 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-back-button slot="start" defaultHref="/main/index"></ion-back-button>
4
+ <ion-title>accordion</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>accordion</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
+ <ion-list [inset]="true">
24
+ <ion-accordion-group>
25
+ <ion-accordion value="first">
26
+ <ion-item slot="header">
27
+ <ion-label>First Accordion</ion-label>
28
+ </ion-item>
29
+ <div class="ion-padding" slot="content">First Content</div>
30
+ </ion-accordion>
31
+ <ion-accordion value="second">
32
+ <ion-item slot="header">
33
+ <ion-label>Second Accordion</ion-label>
34
+ </ion-item>
35
+ <div class="ion-padding" slot="content">Second Content</div>
36
+ </ion-accordion>
37
+ <ion-accordion value="third">
38
+ <ion-item slot="header">
39
+ <ion-label>Third Accordion</ion-label>
40
+ </ion-item>
41
+ <div class="ion-padding" slot="content">Third Content</div>
42
+ </ion-accordion>
43
+ </ion-accordion-group>
44
+ </ion-list>
45
+ </ion-content>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { AccordionPage } from './accordion.page';
3
+ import { testConfig } from '../../../../../util/test.config';
4
+
5
+ describe('AccordionPage', () => {
6
+ let component: AccordionPage;
7
+ let fixture: ComponentFixture<AccordionPage>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ providers: testConfig.providers,
12
+ }).compileComponents();
13
+ fixture = TestBed.createComponent(AccordionPage);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -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
+ IonAccordion,
6
+ IonAccordionGroup,
7
+ IonBackButton,
8
+ IonContent,
9
+ IonHeader,
10
+ IonIcon,
11
+ IonItem,
12
+ IonItemGroup,
13
+ IonLabel,
14
+ IonList,
15
+ IonText,
16
+ IonTitle,
17
+ IonToolbar,
18
+ } from '@ionic/angular/standalone';
19
+
20
+ @Component({
21
+ selector: 'app-accordion',
22
+ templateUrl: './accordion.page.html',
23
+ styleUrls: ['./accordion.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
+ IonText,
39
+ IonAccordion,
40
+ IonAccordionGroup,
41
+ ],
42
+ })
43
+ export class AccordionPage implements OnInit {
44
+ constructor() {}
45
+
46
+ ngOnInit() {}
47
+ }
@@ -0,0 +1,65 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-back-button slot="start" defaultHref="/main/index"></ion-back-button>
4
+ <ion-title>inputs</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>inputs</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
+ <ion-list [inset]="true">
24
+ <ion-item-group>
25
+ <ion-item>
26
+ <ion-input label="Default label" placeholder="Enter text"></ion-input>
27
+ </ion-item>
28
+
29
+ <ion-item>
30
+ <ion-input label="Fixed label" labelPlacement="fixed" placeholder="Enter text"></ion-input>
31
+ </ion-item>
32
+
33
+ <ion-item>
34
+ <ion-input label="Stacked label" labelPlacement="stacked" placeholder="Enter text"></ion-input>
35
+ </ion-item>
36
+
37
+ <ion-item>
38
+ <ion-input label="Floating label" labelPlacement="floating" placeholder="Enter text"></ion-input>
39
+ </ion-item>
40
+
41
+ <ion-item>
42
+ <ion-input type="password" label="Password" value="NeverGonnaGiveYouUp">
43
+ <ion-input-password-toggle slot="end"></ion-input-password-toggle>
44
+ </ion-input>
45
+ </ion-item>
46
+ </ion-item-group>
47
+ </ion-list>
48
+
49
+ <ion-list [inset]="true">
50
+ <ion-item-group>
51
+ <ion-item>
52
+ <ion-textarea label="Default label" placeholder="Enter textarea"></ion-textarea>
53
+ </ion-item>
54
+ <ion-item>
55
+ <ion-textarea label="Fixed label" labelPlacement="fixed" placeholder="Enter textarea"></ion-textarea>
56
+ </ion-item>
57
+ <ion-item>
58
+ <ion-textarea label="Stacked label" labelPlacement="stacked" placeholder="Enter textarea"></ion-textarea>
59
+ </ion-item>
60
+ <ion-item>
61
+ <ion-textarea label="Floating label" labelPlacement="floating" placeholder="Enter textarea"></ion-textarea>
62
+ </ion-item>
63
+ </ion-item-group>
64
+ </ion-list>
65
+ </ion-content>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { InputsPage } from './inputs.page';
3
+ import { testConfig } from '../../../../../util/test.config';
4
+
5
+ describe('InputsPage', () => {
6
+ let component: InputsPage;
7
+ let fixture: ComponentFixture<InputsPage>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ providers: testConfig.providers,
12
+ }).compileComponents();
13
+ fixture = TestBed.createComponent(InputsPage);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -0,0 +1,49 @@
1
+ import { Component, OnInit } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import {
5
+ IonBackButton,
6
+ IonContent,
7
+ IonHeader,
8
+ IonIcon,
9
+ IonInput,
10
+ IonInputPasswordToggle,
11
+ IonItem,
12
+ IonItemGroup,
13
+ IonLabel,
14
+ IonList,
15
+ IonText,
16
+ IonTextarea,
17
+ IonTitle,
18
+ IonToolbar,
19
+ } from '@ionic/angular/standalone';
20
+
21
+ @Component({
22
+ selector: 'app-inputs',
23
+ templateUrl: './inputs.page.html',
24
+ styleUrls: ['./inputs.page.scss'],
25
+ standalone: true,
26
+ imports: [
27
+ IonContent,
28
+ IonHeader,
29
+ IonTitle,
30
+ IonToolbar,
31
+ CommonModule,
32
+ FormsModule,
33
+ IonBackButton,
34
+ IonIcon,
35
+ IonItem,
36
+ IonItemGroup,
37
+ IonLabel,
38
+ IonList,
39
+ IonText,
40
+ IonInput,
41
+ IonInputPasswordToggle,
42
+ IonTextarea,
43
+ ],
44
+ })
45
+ export class InputsPage implements OnInit {
46
+ constructor() {}
47
+
48
+ ngOnInit() {}
49
+ }
@@ -0,0 +1,52 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-back-button slot="start" defaultHref="/main/index"></ion-back-button>
4
+ <ion-title>item-list</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>item-list</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
+ <ion-list [inset]="true">
24
+ <ion-list-header><ion-label>Inset List</ion-label></ion-list-header>
25
+ <ion-item-group>
26
+ <ion-item>
27
+ <ion-label>Basic Item</ion-label>
28
+ </ion-item>
29
+ <ion-item>
30
+ <ion-label>
31
+ Multi-line text that should wrap when it is too long to fit on one line. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
32
+ </ion-label>
33
+ </ion-item>
34
+ </ion-item-group>
35
+ <ion-note>Note additional information.</ion-note>
36
+ </ion-list>
37
+
38
+ <ion-list>
39
+ <ion-list-header><ion-label>Default List</ion-label></ion-list-header>
40
+ <ion-item-group>
41
+ <ion-item>
42
+ <ion-label>Basic Item</ion-label>
43
+ </ion-item>
44
+ <ion-item>
45
+ <ion-label>
46
+ Multi-line text that should wrap when it is too long to fit on one line. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
47
+ </ion-label>
48
+ </ion-item>
49
+ </ion-item-group>
50
+ <ion-note>Note additional information.</ion-note>
51
+ </ion-list>
52
+ </ion-content>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { ItemListPage } from './item-list.page';
3
+ import { testConfig } from '../../../../../util/test.config';
4
+
5
+ describe('ItemListPage', () => {
6
+ let component: ItemListPage;
7
+ let fixture: ComponentFixture<ItemListPage>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ providers: testConfig.providers,
12
+ }).compileComponents();
13
+ fixture = TestBed.createComponent(ItemListPage);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -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
+ IonContent,
7
+ IonHeader,
8
+ IonIcon,
9
+ IonItem,
10
+ IonItemGroup,
11
+ IonLabel,
12
+ IonList,
13
+ IonListHeader,
14
+ IonNote,
15
+ IonText,
16
+ IonTitle,
17
+ IonToolbar,
18
+ } from '@ionic/angular/standalone';
19
+
20
+ @Component({
21
+ selector: 'app-item-list',
22
+ templateUrl: './item-list.page.html',
23
+ styleUrls: ['./item-list.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
+ IonText,
39
+ IonListHeader,
40
+ IonNote,
41
+ ],
42
+ })
43
+ export class ItemListPage implements OnInit {
44
+ constructor() {}
45
+
46
+ ngOnInit() {}
47
+ }
@@ -0,0 +1,52 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-back-button slot="start" defaultHref="/main/index"></ion-back-button>
4
+ <ion-title>reorder</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>reorder</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-reorder-group [disabled]="false">
26
+ <ion-item>
27
+ <ion-label> Item 1 </ion-label>
28
+ <ion-reorder slot="end"></ion-reorder>
29
+ </ion-item>
30
+
31
+ <ion-item>
32
+ <ion-label> Item 2 </ion-label>
33
+ <ion-reorder slot="end"></ion-reorder>
34
+ </ion-item>
35
+
36
+ <ion-item>
37
+ <ion-label> Item 3 </ion-label>
38
+ <ion-reorder slot="end"></ion-reorder>
39
+ </ion-item>
40
+
41
+ <ion-item>
42
+ <ion-label> Item 4 </ion-label>
43
+ <ion-reorder slot="end"></ion-reorder>
44
+ </ion-item>
45
+
46
+ <ion-item>
47
+ <ion-label> Item 5 </ion-label>
48
+ <ion-reorder slot="end"></ion-reorder>
49
+ </ion-item>
50
+ </ion-reorder-group>
51
+ </ion-list>
52
+ </ion-content>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { ReorderPage } from './reorder.page';
3
+ import { testConfig } from '../../../../../util/test.config';
4
+
5
+ describe('ReorderPage', () => {
6
+ let component: ReorderPage;
7
+ let fixture: ComponentFixture<ReorderPage>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ providers: testConfig.providers,
12
+ }).compileComponents();
13
+ fixture = TestBed.createComponent(ReorderPage);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -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
+ IonContent,
7
+ IonHeader,
8
+ IonIcon,
9
+ IonItem,
10
+ IonItemGroup,
11
+ IonLabel,
12
+ IonList,
13
+ IonReorder,
14
+ IonReorderGroup,
15
+ IonText,
16
+ IonTitle,
17
+ IonToolbar,
18
+ } from '@ionic/angular/standalone';
19
+
20
+ @Component({
21
+ selector: 'app-reorder',
22
+ templateUrl: './reorder.page.html',
23
+ styleUrls: ['./reorder.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
+ IonText,
39
+ IonReorder,
40
+ IonReorderGroup,
41
+ ],
42
+ })
43
+ export class ReorderPage implements OnInit {
44
+ constructor() {}
45
+
46
+ ngOnInit() {}
47
+ }
@@ -15,7 +15,12 @@
15
15
  <ion-header collapse="condense">
16
16
  <ion-toolbar></ion-toolbar>
17
17
  </ion-header>
18
- <ion-text><code>This page is a component demo for &#64;rdlabo/ionic-theme-ios26.</code></ion-text>
18
+ <!-- <ion-text><code>This page is a component demo for &#64;rdlabo/ionic-theme-ios26.</code></ion-text>-->
19
+
20
+ <ion-text
21
+ >This components is excluded this packages. You should use default ios design util release re-design version.
22
+ <a href="https://github.com/rdlabo-team/ionic-theme-ios26/blob/main/FEEDBACK2.md" target="_blank">Reason is here.</a></ion-text
23
+ >
19
24
  </ion-label>
20
25
  </ion-item>
21
26
  </ion-item-group>
@@ -0,0 +1 @@
1
+ @use '../../../../../../src/components/ion-segment';
@@ -0,0 +1,78 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-back-button slot="start" defaultHref="/main/index"></ion-back-button>
4
+ <ion-title>tabs</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>tabs</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-tab-bar class="ion-margin-bottom">
25
+ <ion-tab-button tab="home">
26
+ <ion-icon name="play-circle"></ion-icon>
27
+ Listen Now
28
+ </ion-tab-button>
29
+ <ion-tab-button tab="radio">
30
+ <ion-icon name="radio"></ion-icon>
31
+ Radio
32
+ </ion-tab-button>
33
+ <ion-tab-button tab="library">
34
+ <ion-icon name="library"></ion-icon>
35
+ Library
36
+ </ion-tab-button>
37
+ </ion-tab-bar>
38
+ <ion-tab-bar class="ion-margin-bottom">
39
+ <ion-tab-button tab="home">
40
+ <ion-icon name="play-circle"></ion-icon>
41
+ Listen Now
42
+ </ion-tab-button>
43
+ <ion-tab-button tab="radio">
44
+ <ion-icon name="radio"></ion-icon>
45
+ Radio
46
+ </ion-tab-button>
47
+ <ion-tab-button tab="library">
48
+ <ion-icon name="library"></ion-icon>
49
+ Library
50
+ </ion-tab-button>
51
+ <ion-tab-button tab="search">
52
+ <ion-icon name="search"></ion-icon>
53
+ Search
54
+ </ion-tab-button>
55
+ </ion-tab-bar>
56
+ <ion-tab-bar class="ion-margin-bottom">
57
+ <ion-tab-button tab="home">
58
+ <ion-icon name="play-circle"></ion-icon>
59
+ Listen Now
60
+ </ion-tab-button>
61
+ <ion-tab-button tab="radio">
62
+ <ion-icon name="radio"></ion-icon>
63
+ Radio
64
+ </ion-tab-button>
65
+ <ion-tab-button tab="library">
66
+ <ion-icon name="library"></ion-icon>
67
+ Library
68
+ </ion-tab-button>
69
+ <ion-tab-button tab="search">
70
+ <ion-icon name="search"></ion-icon>
71
+ Search
72
+ </ion-tab-button>
73
+ <ion-tab-button tab="search">
74
+ <ion-icon name="search"></ion-icon>
75
+ Last
76
+ </ion-tab-button>
77
+ </ion-tab-bar>
78
+ </ion-content>
@@ -0,0 +1,6 @@
1
+ :host {
2
+ ion-tab-bar {
3
+ margin-left: calc(16px + var(--ion-safe-area-left, 0px));
4
+ margin-right: calc(16px + var(--ion-safe-area-right, 0px));
5
+ }
6
+ }
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { TabsPage } from './tabs.page';
3
+ import { testConfig } from '../../../../../util/test.config';
4
+
5
+ describe('TabsPage', () => {
6
+ let component: TabsPage;
7
+ let fixture: ComponentFixture<TabsPage>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ providers: testConfig.providers,
12
+ }).compileComponents();
13
+ fixture = TestBed.createComponent(TabsPage);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -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
+ IonContent,
7
+ IonHeader,
8
+ IonIcon,
9
+ IonItem,
10
+ IonItemGroup,
11
+ IonLabel,
12
+ IonList,
13
+ IonTabBar,
14
+ IonTabButton,
15
+ IonText,
16
+ IonTitle,
17
+ IonToolbar,
18
+ } from '@ionic/angular/standalone';
19
+
20
+ @Component({
21
+ selector: 'app-tabs',
22
+ templateUrl: './tabs.page.html',
23
+ styleUrls: ['./tabs.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
+ IonText,
39
+ IonTabBar,
40
+ IonTabButton,
41
+ ],
42
+ })
43
+ export class TabsPage implements OnInit {
44
+ constructor() {}
45
+
46
+ ngOnInit() {}
47
+ }
@@ -0,0 +1,121 @@
1
+ <ion-header [translucent]="true">
2
+ <ion-toolbar>
3
+ <ion-back-button slot="start" defaultHref="/main/index"></ion-back-button>
4
+ <ion-title>toolbar</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>toolbar</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-toolbar>
25
+ <ion-buttons slot="start">
26
+ <ion-button> Start </ion-button>
27
+ </ion-buttons>
28
+ <ion-title>Start / End Buttons</ion-title>
29
+ <ion-buttons slot="end">
30
+ <ion-button [disabled]="true"> Disable End </ion-button>
31
+ </ion-buttons>
32
+ </ion-toolbar>
33
+
34
+ <ion-toolbar>
35
+ <ion-buttons slot="secondary">
36
+ <ion-button> Secondary </ion-button>
37
+ </ion-buttons>
38
+ <ion-buttons slot="primary">
39
+ <ion-button> Primary </ion-button>
40
+ </ion-buttons>
41
+ <ion-title>Primary / Secondary Buttons</ion-title>
42
+ </ion-toolbar>
43
+
44
+ <ion-toolbar>
45
+ <ion-buttons slot="secondary">
46
+ <ion-button>
47
+ <ion-icon slot="icon-only" name="person-circle"></ion-icon>
48
+ </ion-button>
49
+ <ion-button>
50
+ <ion-icon slot="icon-only" name="search"></ion-icon>
51
+ </ion-button>
52
+ </ion-buttons>
53
+ <ion-buttons slot="primary">
54
+ <ion-button>
55
+ <ion-icon slot="icon-only" ios="ellipsis-horizontal" md="ellipsis-vertical"></ion-icon>
56
+ </ion-button>
57
+ </ion-buttons>
58
+ <ion-title>Icon Buttons</ion-title>
59
+ </ion-toolbar>
60
+
61
+ <ion-toolbar>
62
+ <ion-buttons slot="secondary">
63
+ <ion-button fill="solid">
64
+ <ion-icon slot="start" name="person-circle"></ion-icon>
65
+ Contact
66
+ </ion-button>
67
+ </ion-buttons>
68
+ <ion-buttons slot="primary">
69
+ <ion-button fill="solid">
70
+ Help
71
+ <ion-icon slot="end" name="help-circle"></ion-icon>
72
+ </ion-button>
73
+ </ion-buttons>
74
+ <ion-title>Solid Buttons</ion-title>
75
+ </ion-toolbar>
76
+
77
+ <ion-toolbar>
78
+ <ion-buttons slot="secondary">
79
+ <ion-button fill="outline">
80
+ <ion-icon slot="start" name="star"></ion-icon>
81
+ Star
82
+ </ion-button>
83
+ </ion-buttons>
84
+ <ion-buttons slot="primary">
85
+ <ion-button fill="outline">
86
+ Edit
87
+ <ion-icon slot="end" name="create"></ion-icon>
88
+ </ion-button>
89
+ </ion-buttons>
90
+ <ion-title>Outline Buttons</ion-title>
91
+ </ion-toolbar>
92
+
93
+ <ion-toolbar>
94
+ <ion-buttons slot="start">
95
+ <ion-back-button default-href="#"></ion-back-button>
96
+ </ion-buttons>
97
+ <ion-title>Back Button</ion-title>
98
+ </ion-toolbar>
99
+
100
+ <ion-toolbar>
101
+ <ion-buttons slot="start">
102
+ <ion-menu-button auto-hide="false"></ion-menu-button>
103
+ </ion-buttons>
104
+ <ion-title>Menu Button</ion-title>
105
+ </ion-toolbar>
106
+
107
+ <ion-toolbar>
108
+ <ion-searchbar></ion-searchbar>
109
+ </ion-toolbar>
110
+
111
+ <ion-toolbar>
112
+ <ion-segment [value]="'all'">
113
+ <ion-segment-button [value]="'all'">
114
+ <ion-label>All</ion-label>
115
+ </ion-segment-button>
116
+ <ion-segment-button [value]="'favorites'">
117
+ <ion-label>Favorites</ion-label>
118
+ </ion-segment-button>
119
+ </ion-segment>
120
+ </ion-toolbar>
121
+ </ion-content>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+ import { ToolbarPage } from './toolbar.page';
3
+ import { testConfig } from '../../../../../util/test.config';
4
+
5
+ describe('ToolbarPage', () => {
6
+ let component: ToolbarPage;
7
+ let fixture: ComponentFixture<ToolbarPage>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ providers: testConfig.providers,
12
+ }).compileComponents();
13
+ fixture = TestBed.createComponent(ToolbarPage);
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, 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
+ IonContent,
9
+ IonHeader,
10
+ IonIcon,
11
+ IonItem,
12
+ IonItemGroup,
13
+ IonLabel,
14
+ IonList,
15
+ IonMenuButton,
16
+ IonSearchbar,
17
+ IonSegment,
18
+ IonSegmentButton,
19
+ IonText,
20
+ IonTitle,
21
+ IonToolbar,
22
+ } from '@ionic/angular/standalone';
23
+
24
+ @Component({
25
+ selector: 'app-toolbar',
26
+ templateUrl: './toolbar.page.html',
27
+ styleUrls: ['./toolbar.page.scss'],
28
+ standalone: true,
29
+ imports: [
30
+ IonContent,
31
+ IonHeader,
32
+ IonTitle,
33
+ IonToolbar,
34
+ CommonModule,
35
+ FormsModule,
36
+ IonBackButton,
37
+ IonIcon,
38
+ IonItem,
39
+ IonItemGroup,
40
+ IonLabel,
41
+ IonList,
42
+ IonText,
43
+ IonButtons,
44
+ IonButton,
45
+ IonMenuButton,
46
+ IonSearchbar,
47
+ IonSegment,
48
+ IonSegmentButton,
49
+ ],
50
+ })
51
+ export class ToolbarPage implements OnInit {
52
+ constructor() {}
53
+
54
+ ngOnInit() {}
55
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rdlabo/ionic-theme-ios26",
3
- "version": "0.0.4",
3
+ "version": "0.1.0",
4
4
  "description": "iOS26 CSS Theme for Ionic Framework",
5
5
  "exports": {
6
6
  "./src/*": {
@@ -11,6 +11,10 @@ ion-action-sheet.ios:not(.ios26-disabled) {
11
11
  margin: 0 8px 8px;
12
12
  border-radius: 32px;
13
13
 
14
+ .action-sheet-title,
15
+ .action-sheet-has-sub-title {
16
+ background: none;
17
+ }
14
18
  .action-sheet-title {
15
19
  padding-top: 8px;
16
20
  }
@@ -12,7 +12,6 @@ ion-alert.ios:not(.ios26-disabled) {
12
12
  .alert-head,
13
13
  .alert-message {
14
14
  text-align: left;
15
- padding: 12px 20px;
16
15
  }
17
16
 
18
17
  .alert-radio-group {
@@ -18,7 +18,10 @@
18
18
  ion-button:not(.ios26-disabled),
19
19
  ion-back-button:not(.ios26-disabled) {
20
20
  transform: none;
21
- opacity: 1;
21
+
22
+ &:not(.button-disabled) {
23
+ opacity: 1;
24
+ }
22
25
 
23
26
  &.ion-activated {
24
27
  --color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.1);
@@ -99,7 +102,10 @@
99
102
  &::part(native) {
100
103
  @include api.glass-background;
101
104
  }
102
- opacity: 1; // for ion-back-button
105
+
106
+ &:not(.button-disabled) {
107
+ opacity: 1; // for ion-back-button
108
+ }
103
109
 
104
110
  --color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 1);
105
111
  &.ion-color {
@@ -3,12 +3,14 @@
3
3
  ion-list.list-inset.ios:not(.ios26-disabled) {
4
4
  @include theme-list-inset.ion-list-inset();
5
5
 
6
- ion-radio-group {
6
+ ion-radio-group,
7
+ ion-reorder-group {
7
8
  display: block;
8
9
  }
9
10
 
10
11
  ion-item-group,
11
12
  ion-reorder-group,
13
+ ion-accordion-group,
12
14
  ion-radio-group {
13
15
  border-radius: 24px;
14
16
  overflow: hidden;
@@ -6,13 +6,28 @@ ion-tab-bar.ios:not(.ios26-disabled) {
6
6
 
7
7
  border-radius: 40px;
8
8
 
9
- width: calc(100% - 56px - 16px - 16px - 4px - 16px);
10
- max-width: 400px;
9
+ &[slot='top'] {
10
+ position: absolute;
11
+ top: var(--ios26-floating-safe-area-top);
12
+ right: calc(16px + var(--ion-safe-area-right, 0px));
13
+ }
14
+
15
+ &[slot='bottom'] {
16
+ position: absolute;
17
+ bottom: var(--ios26-floating-safe-area-bottom);
18
+ left: calc(16px + var(--ion-safe-area-left, 0px));
19
+ }
20
+
21
+ /**
22
+ * 100% - margin-left - margin-right - right-fab - margin-right-fab
23
+ */
24
+ width: calc(100% - calc(18px + var(--ion-safe-area-left, 0px)) - calc(18px + var(--ion-safe-area-left, 0px)) - 54px - 18px);
25
+ max-width: 474px;
26
+ &:has(:nth-child(5)) {
27
+ width: calc(100% - calc(18px + var(--ion-safe-area-left, 0px)) - calc(18px + var(--ion-safe-area-left, 0px)));
28
+ max-width: 546px;
29
+ }
11
30
  padding: 2px 2px;
12
- bottom: var(--ios26-floating-safe-area-bottom);
13
- left: calc(16px + var(--ion-safe-area-left, 0px));
14
- position: absolute;
15
- margin: auto;
16
31
 
17
32
  transition: transform 100ms ease-out;
18
33
  will-change: transform;
@@ -1,5 +1,7 @@
1
1
  :root {
2
+ --ios26-floating-safe-area-top: max(10px, var(--ion-safe-area-top, 0px));
2
3
  --ios26-floating-safe-area-bottom: max(10px, var(--ion-safe-area-bottom, 0px));
4
+
3
5
  --ios26-content-box-shadow-opacity: 0.8;
4
6
 
5
7
  --ios26-color-dark-rgb: 0, 0, 0;
@@ -16,7 +16,6 @@
16
16
  @use 'components/ion-popover';
17
17
  @use 'components/ion-range';
18
18
  @use 'components/ion-searchbar';
19
- @use 'components/ion-segment';
20
19
  @use 'components/ion-tabs';
21
20
  @use 'components/ion-toast';
22
21
  @use 'components/ion-toggle';
@@ -57,6 +57,7 @@
57
57
 
58
58
  ion-item-group,
59
59
  ion-reorder-group,
60
+ ion-accordion-group,
60
61
  ion-radio-group {
61
62
  ion-item {
62
63
  ion-text[slot='end'] {