igniteui-cli 15.2.2 → 15.3.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 (130) hide show
  1. package/lib/commands/build.js +7 -12
  2. package/package.json +4 -4
  3. package/templates/blazor/igb/projects/ai-config/files/skills/AGENTS.md +0 -5
  4. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/SKILL.md +2 -0
  5. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/charts.md +7 -35
  6. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/data-display.md +0 -54
  7. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/feedback.md +0 -38
  8. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/form-controls.md +0 -68
  9. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout-manager.md +1 -124
  10. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout.md +0 -62
  11. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/SKILL.md +1 -1
  12. package/templates/react/igr-ts/projects/_base/files/package.json +1 -0
  13. package/templates/react/igr-ts/projects/_base/files/src/app/app.tsx +4 -2
  14. package/templates/react/igr-ts/projects/_base/files/src/setupTests.ts +12 -0
  15. package/templates/react/igr-ts/projects/_base/files/styles.css +6 -0
  16. package/templates/react/igr-ts/projects/_base_with_home/files/index.html +2 -1
  17. package/templates/react/igr-ts/projects/_base_with_home/files/src/app/home/home.tsx +60 -10
  18. package/templates/react/igr-ts/projects/_base_with_home/files/src/app/home/style.module.css +79 -20
  19. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/SKILL.md +0 -8
  20. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/CHARTS-GRIDS.md +6 -36
  21. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/COMPONENT-CATALOGUE.md +8 -142
  22. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/EVENT-HANDLING.md +2 -0
  23. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/SKILL.md +7 -14
  24. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/reference/CSS-THEMING.md +2 -0
  25. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/reference/MCP-SERVER.md +0 -8
  26. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-generate-from-image-design/SKILL.md +2 -2
  27. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-generate-from-image-design/reference/component-mapping.md +60 -74
  28. package/templates/react/igr-ts/projects/empty/index.js +2 -2
  29. package/templates/react/igr-ts/projects/side-nav/files/src/app/app-routes.tsx +5 -0
  30. package/templates/react/igr-ts/projects/side-nav/files/src/app/app.css +82 -0
  31. package/templates/react/igr-ts/projects/side-nav/files/src/app/app.tsx +104 -0
  32. package/templates/react/igr-ts/projects/side-nav/files/src/app/home/home.tsx +69 -0
  33. package/templates/react/igr-ts/projects/side-nav/files/src/app/home/style.module.css +105 -0
  34. package/templates/react/igr-ts/projects/{top-nav → side-nav}/index.d.ts +2 -2
  35. package/templates/react/igr-ts/projects/{top-nav → side-nav}/index.js +7 -7
  36. package/templates/react/igr-ts/projects/side-nav-auth/files/index.html +19 -0
  37. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app-routes.tsx +24 -0
  38. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app.css +84 -0
  39. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app.tsx +124 -0
  40. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/AuthContext.tsx +73 -0
  41. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/AuthGuard.tsx +14 -0
  42. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Login.module.css +93 -0
  43. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Login.tsx +69 -0
  44. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginBar.module.css +42 -0
  45. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginBar.tsx +44 -0
  46. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginDialog.module.css +14 -0
  47. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginDialog.tsx +49 -0
  48. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Register.module.css +74 -0
  49. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Register.tsx +67 -0
  50. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/external-login.ts +10 -0
  51. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/login.ts +4 -0
  52. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/register-info.ts +6 -0
  53. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/user.ts +19 -0
  54. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/Profile.module.css +87 -0
  55. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/Profile.tsx +42 -0
  56. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectFacebook.tsx +44 -0
  57. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectGoogle.tsx +40 -0
  58. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectMicrosoft.tsx +40 -0
  59. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/authentication.ts +37 -0
  60. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/external-auth-config.ts +44 -0
  61. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/externalAuth.ts +272 -0
  62. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/fakeBackend.ts +88 -0
  63. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/jwtUtil.ts +10 -0
  64. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/pkce.ts +29 -0
  65. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/userStore.ts +39 -0
  66. package/templates/react/igr-ts/projects/side-nav-auth/index.d.ts +15 -0
  67. package/templates/react/igr-ts/projects/side-nav-auth/index.js +46 -0
  68. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app-routes.tsx +5 -0
  69. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.css +109 -0
  70. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.test.tsx +20 -0
  71. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.tsx +81 -0
  72. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/home/home.tsx +69 -0
  73. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/home/style.module.css +105 -0
  74. package/templates/react/igr-ts/projects/side-nav-mini/index.d.ts +15 -0
  75. package/templates/react/igr-ts/projects/side-nav-mini/index.js +46 -0
  76. package/templates/react/igr-ts/projects/side-nav-mini-auth/files/src/app/app.css +106 -0
  77. package/templates/react/igr-ts/projects/side-nav-mini-auth/files/src/app/app.tsx +101 -0
  78. package/templates/react/igr-ts/projects/side-nav-mini-auth/index.d.ts +15 -0
  79. package/templates/react/igr-ts/projects/side-nav-mini-auth/index.js +50 -0
  80. package/templates/webcomponents/igc-ts/projects/_base/files/src/app/app.ts +6 -1
  81. package/templates/webcomponents/igc-ts/projects/_base/files/styles.css +1 -0
  82. package/templates/webcomponents/igc-ts/projects/_base_with_home/files/index.html +2 -0
  83. package/templates/webcomponents/igc-ts/projects/_base_with_home/files/src/app/home/home.ts +103 -9
  84. package/templates/webcomponents/igc-ts/projects/_base_with_home/files/src/assets/wc.png +0 -0
  85. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-choose-components/SKILL.md +122 -160
  86. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-customize-component-theme/SKILL.md +83 -311
  87. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-customize-component-theme/references/mcp-setup.md +69 -0
  88. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/SKILL.md +4 -1
  89. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/references/component-mapping.md +60 -61
  90. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +15 -11
  91. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-optimize-bundle-size/SKILL.md +23 -274
  92. package/templates/webcomponents/igc-ts/projects/empty/index.js +1 -1
  93. package/templates/webcomponents/igc-ts/projects/side-nav/files/index.html +21 -0
  94. package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/app-routing.ts +9 -0
  95. package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/app.ts +192 -22
  96. package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/home/home.ts +175 -0
  97. package/templates/webcomponents/igc-ts/projects/side-nav/index.js +1 -1
  98. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/index.html +25 -0
  99. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/app-routing.ts +37 -0
  100. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/app.ts +251 -0
  101. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.ts +124 -0
  102. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.ts +253 -0
  103. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/external-login.ts +10 -0
  104. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/login.ts +4 -0
  105. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/register-info.ts +6 -0
  106. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/user.ts +19 -0
  107. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/authentication.ts +37 -0
  108. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/external-auth-config.ts +44 -0
  109. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/externalAuth.ts +272 -0
  110. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/fakeBackend.ts +88 -0
  111. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/jwtUtil.ts +10 -0
  112. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/pkce.ts +29 -0
  113. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/userStore.ts +39 -0
  114. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/profile/profile.ts +142 -0
  115. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-facebook.ts +57 -0
  116. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-google.ts +53 -0
  117. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-microsoft.ts +53 -0
  118. package/templates/webcomponents/igc-ts/projects/side-nav-auth/index.d.ts +15 -0
  119. package/templates/webcomponents/igc-ts/projects/side-nav-auth/index.js +46 -0
  120. package/templates/webcomponents/igc-ts/projects/side-nav-mini/files/src/app/app-routing.ts +13 -0
  121. package/templates/webcomponents/igc-ts/projects/side-nav-mini/files/src/app/app.ts +238 -0
  122. package/templates/webcomponents/igc-ts/projects/side-nav-mini/index.d.ts +14 -0
  123. package/templates/webcomponents/igc-ts/projects/side-nav-mini/index.js +45 -0
  124. package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/files/src/app/app.ts +258 -0
  125. package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/index.d.ts +15 -0
  126. package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/index.js +50 -0
  127. package/templates/react/igr-ts/projects/top-nav/files/src/app/app.css +0 -62
  128. package/templates/react/igr-ts/projects/top-nav/files/src/app/app.tsx +0 -18
  129. package/templates/react/igr-ts/projects/top-nav/files/src/components/navigation-header/index.tsx +0 -19
  130. /package/templates/react/igr-ts/projects/{top-nav → side-nav}/files/src/app/app.test.tsx +0 -0
@@ -11,17 +11,19 @@
11
11
  - [Package Requirements](#package-requirements)
12
12
  - [Import Patterns](#import-patterns)
13
13
 
14
+ > **For component API details** (props, events, slots, examples), call `get_doc` with `'react'` and the doc name from `list_components` results. Use `search_api` for specific property lookup.
15
+
14
16
  ## Dashboard & Layout Components
15
17
 
16
- | UI Pattern | Ignite UI Component | Key Properties |
17
- |---|---|---|
18
- | Top navigation bar | `IgrNavbar` | children plus named action/content slots |
19
- | Side navigation | `IgrNavDrawer` | `open`, drawer items, `icon` and `content` slots |
20
- | Content cards/panels | `IgrCard` | `IgrCardHeader`, `IgrCardContent`, `IgrCardActions` |
21
- | Tabbed content | `IgrTabs` + `IgrTab` | `label`, `slot="label"` |
22
- | Accordion sections | `IgrAccordion` | `IgrExpansionPanel` children |
23
- | Split layouts | `IgrSplitter` | resizable panes when splitter chrome is visible |
24
- | Tile dashboard | `IgrTileManager` | drag/resize tiles |
18
+ | UI Pattern | Ignite UI Component |
19
+ |---|---|
20
+ | Top navigation bar | `IgrNavbar` |
21
+ | Side navigation | `IgrNavDrawer` |
22
+ | Content cards/panels | `IgrCard` |
23
+ | Tabbed content | `IgrTabs` + `IgrTab` |
24
+ | Accordion sections | `IgrAccordion` |
25
+ | Split layouts | `IgrSplitter` |
26
+ | Tile dashboard | `IgrTileManager` |
25
27
 
26
28
  Decision rule:
27
29
 
@@ -29,33 +31,17 @@ Decision rule:
29
31
  - Use `IgrNavDrawer` for a sidebar or side-navigation panel when drawer structure and behavior match the screenshot. Configure open and mini behavior according to whether the design shows fixed, collapsible, or icon-only navigation. Use a plain `<aside>` when a static custom sidebar matches the screenshot better.
30
32
  - Use `IgrTabs` for a horizontal tab strip when the screenshot clearly shows tabbed state switching. Use label-only tabs for routed navigation and inline tab content for local view switching.
31
33
 
32
- Component decision matrix (by visual pattern, domain-neutral):
33
-
34
- | Visual Pattern | Recommended Component | Notes |
35
- |---|---|---|
36
- | Repeated rows with icon/text/action | `IgrList` | Use when the row anatomy and interaction model match. Compose the row content with React children and the documented slots. Use native `<ul>/<li>` or custom containers when that is a closer visual fit |
37
- | Spreadsheet-like editable or sortable table | `IgrGridLite` or `IgrGrid` | Use only when content is truly tabular. Prefer `IgrGridLite` for lightweight MIT cases and `IgrGrid` when advanced grid features are required |
38
- | Hierarchical or tree-structured table | `IgrTreeGrid` or `IgrTree` | Use `IgrTreeGrid` for hierarchical tables and `IgrTree` for tree-style navigation or nested lists |
39
- | Content blocks / summary cards | `IgrCard` | Use when card chrome helps match the panel shape and structure. Use `IgrCardHeader`, `IgrCardContent`, and `IgrCardActions`, or plain `<div>` containers for flat or highly custom tiles |
40
- | Any text input field | `IgrInput` | Use when the input anatomy matches the screenshot, including search fields and inline editors. Apply CSS to match the screenshot's border/radius style |
41
- | Dropdown or select | `IgrSelect` | Use when the screenshot clearly shows select/dropdown behavior |
42
- | Form fields with labels and inputs | `IgrInput`, `IgrSelect`, `IgrCombo`, `IgrDatePicker`, `IgrDateTimeInput` | Cover text, select, combo, and date/time inputs |
43
- | Multi-step form / wizard | `IgrStepper` | Use when a sequence of steps is visually present |
44
- | Filter chips / tag inputs | `IgrChip` | Use when chip anatomy matches status badges, filter tags, or removable labels in the screenshot |
45
- | Calendar or date picker as a primary view element | `IgrCalendar`, `IgrDatePicker`, `IgrDateRangePicker` | Use when scheduling or date selection is the core UI |
46
- | Top icon/action bar | `IgrNavbar` with `IgrButton` / `IgrIconButton` | Use when a navbar structure matches the screenshot; use plain icon buttons or custom containers when that is a closer fit |
47
-
48
34
  ## Chart Components
49
35
 
50
- | UI Pattern | Ignite UI Component | Key Properties |
51
- |---|---|---|
52
- | Area chart | `IgrCategoryChart` | `chartType`, `markerTypes`, `areaFillOpacity` |
53
- | Line chart | `IgrCategoryChart` | `chartType`, `markerTypes` |
54
- | Column chart | `IgrCategoryChart` | `chartType`, `markerTypes`, `includedProperties` |
55
- | Sparkline (mini chart) | `IgrSparkline` or `IgrDataChart` | `displayType`, `valueMemberPath`, sized container |
56
- | Pie/donut chart | `IgrPieChart` | `valueMemberPath`, `labelMemberPath` |
57
- | Financial chart | `IgrFinancialChart` | OHLC/candlestick data |
58
- | Complex multi-series | `IgrDataChart` | multiple series + axes plus module registration |
36
+ | UI Pattern | Ignite UI Component |
37
+ |---|---|
38
+ | Area chart | `IgrCategoryChart` |
39
+ | Line chart | `IgrCategoryChart` |
40
+ | Column chart | `IgrCategoryChart` |
41
+ | Sparkline (mini chart) | `IgrSparkline` or `IgrDataChart` |
42
+ | Pie/donut chart | `IgrPieChart` |
43
+ | Financial chart | `IgrFinancialChart` |
44
+ | Complex multi-series | `IgrDataChart` |
59
45
 
60
46
  Decision rule:
61
47
 
@@ -65,17 +51,17 @@ Decision rule:
65
51
 
66
52
  ## Data Display Components
67
53
 
68
- | UI Pattern | Ignite UI Component | Key Properties |
69
- |---|---|---|
70
- | Item list | `IgrList` | slot-based row content, selection, and dense list styling |
71
- | User avatar | `IgrAvatar` | `initials`, `shape`, `src` |
72
- | Status badge | `IgrBadge` | value/children plus token-based styling |
73
- | Icons | `IgrIcon` | icon name, collection, styling |
74
- | Progress bar | `IgrLinearProgress` | `value`, `max` |
75
- | Circular progress | `IgrCircularProgress` | `value`, `max` |
76
- | Flat data grid | `IgrGridLite` or `IgrGrid` | choose by feature level and package availability |
77
- | Hierarchical/tree data grid | `IgrTreeGrid` | parent-child data |
78
- | Filter/tag chips | `IgrChip` | selected state, removable UI, token-based styling |
54
+ | UI Pattern | Ignite UI Component |
55
+ |---|---|
56
+ | Item list | `IgrList` |
57
+ | User avatar | `IgrAvatar` |
58
+ | Status badge | `IgrBadge` |
59
+ | Icons | `IgrIcon` |
60
+ | Progress bar | `IgrLinearProgress` |
61
+ | Circular progress | `IgrCircularProgress` |
62
+ | Flat data grid | `IgrGridLite` or `IgrGrid` |
63
+ | Hierarchical/tree data grid | `IgrTreeGrid` |
64
+ | Filter/tag chips | `IgrChip` |
79
65
 
80
66
  Decision rule:
81
67
 
@@ -86,44 +72,44 @@ Decision rule:
86
72
 
87
73
  ## Form & Input Components
88
74
 
89
- | UI Pattern | Ignite UI Component | Key Properties |
90
- |---|---|---|
91
- | Text input | `IgrInput` | `label`, `placeholder`, `type` |
92
- | Dropdown select | `IgrSelect` | option children, label, value |
93
- | Searchable multi-select | `IgrCombo` | `data`, `displayKey`, `valueKey` |
94
- | Date picker | `IgrDatePicker` | value and label props |
95
- | Date/time input | `IgrDateTimeInput` | value, format options |
96
- | Toggle switch | `IgrSwitch` | checked state, change events |
97
- | Checkbox | `IgrCheckbox` | checked state, `indeterminate` |
98
- | Radio button group | `IgrRadioGroup` + `IgrRadio` | `name`, selected value |
99
- | Slider | `IgrSlider` | `min`, `max`, `value` |
100
- | Multi-step wizard | `IgrStepper` | orientation, step composition |
101
- | Chip filter bar | `IgrChip` collection in a flex wrapper | compose removable/filter chips manually |
75
+ | UI Pattern | Ignite UI Component |
76
+ |---|---|
77
+ | Text input | `IgrInput` |
78
+ | Dropdown select | `IgrSelect` |
79
+ | Searchable multi-select | `IgrCombo` |
80
+ | Date picker | `IgrDatePicker` |
81
+ | Date/time input | `IgrDateTimeInput` |
82
+ | Toggle switch | `IgrSwitch` |
83
+ | Checkbox | `IgrCheckbox` |
84
+ | Radio button group | `IgrRadioGroup` + `IgrRadio` |
85
+ | Slider | `IgrSlider` |
86
+ | Multi-step wizard | `IgrStepper` |
87
+ | Chip filter bar | `IgrChip` collection in a flex wrapper |
102
88
 
103
89
  ## Calendar & Scheduling Components
104
90
 
105
- | UI Pattern | Ignite UI Component | Key Properties |
106
- |---|---|---|
107
- | Calendar view | `IgrCalendar` | selection mode, `value`, change events |
108
- | Date range picker | `IgrDateRangePicker` | range value, change events |
109
- | Month/year picker | `IgrCalendar` | month/year view settings per docs |
91
+ | UI Pattern | Ignite UI Component |
92
+ |---|---|
93
+ | Calendar view | `IgrCalendar` |
94
+ | Date range picker | `IgrDateRangePicker` |
95
+ | Month/year picker | `IgrCalendar` |
110
96
 
111
97
  ## Map Components
112
98
 
113
- | UI Pattern | Ignite UI Component | Key Properties |
114
- |---|---|---|
115
- | World map | `IgrGeographicMap` | `zoomable`, `backgroundContent` |
116
- | Map markers | `IgrGeographicSymbolSeries` | `latitudeMemberPath`, `longitudeMemberPath`, `markerType`, `markerBrush` |
117
- | Bubble overlay | `IgrGeographicProportionalSymbolSeries` | sized markers |
118
- | Shape regions | `IgrGeographicShapeSeries` | polygon rendering |
99
+ | UI Pattern | Ignite UI Component |
100
+ |---|---|
101
+ | World map | `IgrGeographicMap` |
102
+ | Map markers | `IgrGeographicSymbolSeries` |
103
+ | Bubble overlay | `IgrGeographicProportionalSymbolSeries` |
104
+ | Shape regions | `IgrGeographicShapeSeries` |
119
105
 
120
106
  ## Gauge Components
121
107
 
122
- | UI Pattern | Ignite UI Component | Key Properties |
123
- |---|---|---|
124
- | Linear gauge | `IgrLinearGauge` | `value`, `minimumValue`, `maximumValue`, `needleBrush` |
125
- | Radial gauge | `IgrRadialGauge` | `value`, `minimumValue`, `maximumValue` |
126
- | Bullet graph | `IgrBulletGraph` | performance vs target |
108
+ | UI Pattern | Ignite UI Component |
109
+ |---|---|
110
+ | Linear gauge | `IgrLinearGauge` |
111
+ | Radial gauge | `IgrRadialGauge` |
112
+ | Bullet graph | `IgrBulletGraph` |
127
113
 
128
114
  ## Package Requirements
129
115
 
@@ -30,8 +30,8 @@ class EmptyIgrTsProject extends _base_with_home_1.BaseWithHomeIgrTsProject {
30
30
  constructor() {
31
31
  super(...arguments);
32
32
  this.id = "empty";
33
- this.name = "Empty project";
34
- this.description = "Empty project structure with home page and routing";
33
+ this.name = "Empty Project";
34
+ this.description = "Starter project with routing and a home page";
35
35
  this.dependencies = [];
36
36
  this.framework = "react";
37
37
  this.projectType = "igr-ts";
@@ -0,0 +1,5 @@
1
+ import Home from './home/home';
2
+
3
+ export const routes = [
4
+ { path: '/', element: <Home />, text: 'Home', icon: 'home' }
5
+ ];
@@ -0,0 +1,82 @@
1
+ .app {
2
+ display: flex;
3
+ flex-flow: column nowrap;
4
+ height: 100%;
5
+ overflow: hidden;
6
+ }
7
+
8
+ .app__navbar {
9
+ display: flex;
10
+ align-items: center;
11
+ flex: 0 0 auto;
12
+ height: 56px;
13
+ padding: 0 16px;
14
+ background: #239ef0;
15
+ box-shadow: 0 2px 4px rgba(0, 0, 0, .24);
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ .app__title {
20
+ margin: 0 0 0 16px;
21
+ font-size: 1.25rem;
22
+ font-weight: 600;
23
+ line-height: 1;
24
+ color: #000;
25
+ }
26
+
27
+ .app__menu-button {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ width: 40px;
32
+ height: 40px;
33
+ padding: 0;
34
+ color: #000;
35
+ border: 0;
36
+ background: transparent;
37
+ cursor: pointer;
38
+ }
39
+
40
+ .app__menu-button igc-icon {
41
+ font-size: 24px;
42
+ }
43
+
44
+ .app__body {
45
+ display: flex;
46
+ flex: 1 1 auto;
47
+ min-height: 0;
48
+ }
49
+
50
+ .app__drawer {
51
+ flex: 0 0 auto;
52
+ height: 100%;
53
+ --menu-full-width: 280px;
54
+ }
55
+
56
+ igc-nav-drawer-item::part(base) {
57
+ min-height: 48px;
58
+ color: #2d2d2d;
59
+ }
60
+
61
+ igc-nav-drawer-item[active]::part(base) {
62
+ background: #e0f2ff;
63
+ color: #0075d2;
64
+ }
65
+
66
+ igc-nav-drawer-item[active] igc-icon {
67
+ color: #0075d2;
68
+ }
69
+
70
+ igc-nav-drawer-item:not([active]) igc-icon {
71
+ color: #2d2d2d;
72
+ }
73
+
74
+ .app__content {
75
+ flex: 1 1 auto;
76
+ display: flex;
77
+ flex-flow: row nowrap;
78
+ justify-content: center;
79
+ align-items: stretch;
80
+ min-width: 0;
81
+ overflow: auto;
82
+ }
@@ -0,0 +1,104 @@
1
+ import { useEffect, useMemo, useState } from "react";
2
+ import { Outlet, useLocation, useNavigate } from "react-router-dom";
3
+ import {
4
+ IgrIcon,
5
+ IgrNavDrawer,
6
+ IgrNavDrawerItem,
7
+ registerIcon,
8
+ } from "igniteui-react";
9
+ import { configureTheme } from "igniteui-webcomponents";
10
+ import { routes } from "./app-routes";
11
+ import "igniteui-webcomponents/themes/light/material.css";
12
+ import "./app.css";
13
+
14
+ configureTheme('material', 'light');
15
+
16
+ const materialIcons = [
17
+ ['home', 'action/svg/production/ic_home_24px.svg'],
18
+ ['menu', 'navigation/svg/production/ic_menu_24px.svg'],
19
+ ['apps', 'navigation/svg/production/ic_apps_24px.svg'],
20
+ ['code', 'action/svg/production/ic_code_24px.svg'],
21
+ ['build', 'action/svg/production/ic_build_24px.svg'],
22
+ ['palette', 'image/svg/production/ic_palette_24px.svg'],
23
+ ] as const;
24
+
25
+ materialIcons.forEach(([name, path]) =>
26
+ registerIcon(name, `https://unpkg.com/material-design-icons@3.0.1/${path}`, "material")
27
+ );
28
+
29
+ export default function App() {
30
+ const name = "$(name)";
31
+ const location = useLocation();
32
+ const navigate = useNavigate();
33
+ const [drawerOpen, setDrawerOpen] = useState(true);
34
+ const [drawerPosition, setDrawerPosition] = useState<"relative" | "start">("relative");
35
+
36
+ const visibleRoutes = useMemo(() => {
37
+ return routes.filter((route) => route.path && route.text);
38
+ }, []);
39
+
40
+ useEffect(() => {
41
+ const mediaQuery = window.matchMedia("(min-width: 1025px)");
42
+ const updateDrawerState = () => {
43
+ setDrawerOpen(mediaQuery.matches);
44
+ setDrawerPosition(mediaQuery.matches ? "relative" : "start");
45
+ };
46
+
47
+ updateDrawerState();
48
+ mediaQuery.addEventListener("change", updateDrawerState);
49
+
50
+ return () => mediaQuery.removeEventListener("change", updateDrawerState);
51
+ }, []);
52
+
53
+ const handleRouteClick = (path: string) => {
54
+ navigate(path);
55
+
56
+ if (window.matchMedia("(max-width: 1024px)").matches) {
57
+ setDrawerOpen(false);
58
+ }
59
+ };
60
+
61
+ return (
62
+ <div className="app">
63
+ <header className="app__navbar">
64
+ <button
65
+ className="app__menu-button"
66
+ type="button"
67
+ aria-label="Toggle navigation"
68
+ onClick={() => setDrawerOpen((open) => !open)}
69
+ >
70
+ <IgrIcon name="menu" collection="material" />
71
+ </button>
72
+ <h1 className="app__title">{name}</h1>
73
+ </header>
74
+ <div className="app__body">
75
+ <IgrNavDrawer
76
+ className="app__drawer"
77
+ open={drawerOpen}
78
+ position={drawerPosition}
79
+ >
80
+ {visibleRoutes.map((route) => (
81
+ <IgrNavDrawerItem
82
+ key={route.path}
83
+ active={location.pathname === route.path}
84
+ onClick={() => handleRouteClick(route.path)}
85
+ >
86
+ <IgrIcon
87
+ slot="icon"
88
+ name={route.icon || "home"}
89
+ collection="material"
90
+ style={{
91
+ color: location.pathname === route.path ? "#0075D2" : undefined,
92
+ }}
93
+ />
94
+ <span slot="content">{route.text}</span>
95
+ </IgrNavDrawerItem>
96
+ ))}
97
+ </IgrNavDrawer>
98
+ <main className="app__content">
99
+ <Outlet />
100
+ </main>
101
+ </div>
102
+ </div>
103
+ );
104
+ }
@@ -0,0 +1,69 @@
1
+ import logo from "/logo.svg";
2
+ import { IgrIcon } from "igniteui-react";
3
+ import styles from "./style.module.css";
4
+
5
+ export default function App() {
6
+ return (
7
+ <main className={styles.home}>
8
+ <div className={styles.intro}>
9
+ <h1 className={styles.header}>Welcome to Ignite UI for React!</h1>
10
+ <p className={styles.description}>
11
+ A routed application shell with a responsive side navigation drawer and curated Ignite UI resources.
12
+ </p>
13
+ </div>
14
+
15
+ <img src={logo} className={styles.logo} alt="Ignite UI for React" />
16
+
17
+ <div className={styles.resources} role="navigation" aria-label="Ignite UI resources">
18
+ <a
19
+ className={styles.resource}
20
+ target="_blank"
21
+ rel="noopener noreferrer"
22
+ href="https://www.infragistics.com/products/ignite-ui-react"
23
+ >
24
+ <IgrIcon className={styles.resourceIcon} name="apps" collection="material" />
25
+ <span>
26
+ <strong>Component Demos</strong>
27
+ <small>Browse React components and examples</small>
28
+ </span>
29
+ </a>
30
+ <a
31
+ className={styles.resource}
32
+ target="_blank"
33
+ rel="noopener noreferrer"
34
+ href="https://github.com/IgniteUI/igniteui-react"
35
+ >
36
+ <IgrIcon className={styles.resourceIcon} name="code" collection="material" />
37
+ <span>
38
+ <strong>React Repository</strong>
39
+ <small>Explore Ignite UI for React on GitHub</small>
40
+ </span>
41
+ </a>
42
+ <a
43
+ className={styles.resource}
44
+ target="_blank"
45
+ rel="noopener noreferrer"
46
+ href="https://github.com/IgniteUI/igniteui-cli"
47
+ >
48
+ <IgrIcon className={styles.resourceIcon} name="build" collection="material" />
49
+ <span>
50
+ <strong>Ignite UI CLI</strong>
51
+ <small>Review the CLI source and project tooling</small>
52
+ </span>
53
+ </a>
54
+ <a
55
+ className={styles.resource}
56
+ target="_blank"
57
+ rel="noopener noreferrer"
58
+ href="https://www.figma.com/@infragistics"
59
+ >
60
+ <IgrIcon className={styles.resourceIcon} name="palette" collection="material" />
61
+ <span>
62
+ <strong>Figma UI Kit</strong>
63
+ <small>Open Infragistics design resources</small>
64
+ </span>
65
+ </a>
66
+ </div>
67
+ </main>
68
+ );
69
+ }
@@ -0,0 +1,105 @@
1
+ :local(.home) {
2
+ width: 100%;
3
+ max-width: 920px;
4
+ margin: auto;
5
+ padding: 48px 24px;
6
+ box-sizing: border-box;
7
+ font-family: "Titillium Web", "Segoe UI", Arial, sans-serif;
8
+ }
9
+
10
+ :local(.intro) {
11
+ max-width: 720px;
12
+ margin: 0 auto 24px;
13
+ text-align: center;
14
+ }
15
+
16
+ :local(.header) {
17
+ margin: 0 0 12px;
18
+ color: #09f;
19
+ font-size: 3rem;
20
+ font-weight: 600;
21
+ line-height: 1.2;
22
+ }
23
+
24
+ :local(.description) {
25
+ margin: 0;
26
+ color: #000;
27
+ font-size: 1.125rem;
28
+ line-height: 1.5;
29
+ }
30
+
31
+ :local(.logo) {
32
+ display: block;
33
+ width: 500px;
34
+ height: 350px;
35
+ margin: 0 auto 28px;
36
+ max-width: 100%;
37
+ object-fit: contain;
38
+ }
39
+
40
+ :local(.resources) {
41
+ display: grid;
42
+ grid-template-columns: repeat(2, 300px);
43
+ justify-content: center;
44
+ margin: 0 auto;
45
+ gap: 4px 64px;
46
+ }
47
+
48
+ :local(.resource) {
49
+ display: flex;
50
+ align-items: center;
51
+ min-height: 64px;
52
+ padding: 6px 0;
53
+ color: rgba(0, 0, 0, .74);
54
+ text-align: left;
55
+ text-decoration: none;
56
+ }
57
+
58
+ :local(.resource):hover strong {
59
+ text-decoration: underline;
60
+ }
61
+
62
+ :local(.resourceIcon) {
63
+ flex: 0 0 28px;
64
+ margin-right: 16px;
65
+ color: #09f;
66
+ font-size: 28px;
67
+ }
68
+
69
+ :local(.resource) strong,
70
+ :local(.resource) small {
71
+ display: block;
72
+ }
73
+
74
+ :local(.resource) strong {
75
+ margin-bottom: 2px;
76
+ color: #731963;
77
+ font-size: 1rem;
78
+ }
79
+
80
+ :local(.resource) small {
81
+ color: #000;
82
+ font-size: 0.875rem;
83
+ line-height: 1.4;
84
+ }
85
+
86
+ @media (max-width: 768px) {
87
+ :local(.home) {
88
+ padding: 32px 16px;
89
+ }
90
+
91
+ :local(.header) {
92
+ font-size: 2.25rem;
93
+ }
94
+
95
+ :local(.logo) {
96
+ width: 100%;
97
+ height: 240px;
98
+ }
99
+
100
+ :local(.resources) {
101
+ grid-template-columns: minmax(0, 300px);
102
+ justify-content: center;
103
+ gap: 4px;
104
+ }
105
+ }
@@ -1,6 +1,6 @@
1
1
  import { ProjectTemplate } from "@igniteui/cli-core";
2
2
  import { BaseWithHomeIgrTsProject } from "../_base_with_home";
3
- export declare class TopNavIgrTsProject extends BaseWithHomeIgrTsProject implements ProjectTemplate {
3
+ export declare class SideNavIgrTsProject extends BaseWithHomeIgrTsProject implements ProjectTemplate {
4
4
  id: string;
5
5
  name: string;
6
6
  description: string;
@@ -11,5 +11,5 @@ export declare class TopNavIgrTsProject extends BaseWithHomeIgrTsProject impleme
11
11
  isHidden: boolean;
12
12
  get templatePaths(): string[];
13
13
  }
14
- declare const _default: TopNavIgrTsProject;
14
+ declare const _default: SideNavIgrTsProject;
15
15
  export default _default;
@@ -23,15 +23,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.TopNavIgrTsProject = void 0;
26
+ exports.SideNavIgrTsProject = void 0;
27
27
  const path = __importStar(require("path"));
28
28
  const _base_with_home_1 = require("../_base_with_home");
29
- class TopNavIgrTsProject extends _base_with_home_1.BaseWithHomeIgrTsProject {
29
+ class SideNavIgrTsProject extends _base_with_home_1.BaseWithHomeIgrTsProject {
30
30
  constructor() {
31
31
  super(...arguments);
32
- this.id = "top-nav";
33
- this.name = "Default top navigation";
34
- this.description = "Project structure with top navigation menu";
32
+ this.id = "side-nav";
33
+ this.name = "Side navigation default";
34
+ this.description = "Project structure with side navigation drawer";
35
35
  this.dependencies = [];
36
36
  this.framework = "react";
37
37
  this.projectType = "igr-ts";
@@ -42,5 +42,5 @@ class TopNavIgrTsProject extends _base_with_home_1.BaseWithHomeIgrTsProject {
42
42
  return [...super.templatePaths, path.join(__dirname, "files")];
43
43
  }
44
44
  }
45
- exports.TopNavIgrTsProject = TopNavIgrTsProject;
46
- exports.default = new TopNavIgrTsProject();
45
+ exports.SideNavIgrTsProject = SideNavIgrTsProject;
46
+ exports.default = new SideNavIgrTsProject();
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Ignite UI for React</title>
8
+ <link href="https://fonts.googleapis.com/css?family=Titillium+Web:300,400,600,700" rel="stylesheet">
9
+ <link rel="stylesheet" href="./styles.css">
10
+ <!-- Facebook JS SDK — required only when facebook is configured in external-auth-config.ts.
11
+ Remove this script if you are not using Facebook login. -->
12
+ <script async defer crossorigin="anonymous"
13
+ src="https://connect.facebook.net/en_US/sdk.js"></script>
14
+ </head>
15
+ <body>
16
+ <div id="root"></div>
17
+ </body>
18
+ <script type="module" src="/src/main.tsx"></script>
19
+ </html>
@@ -0,0 +1,24 @@
1
+ import Home from './home/home';
2
+ import Profile from './authentication/pages/Profile';
3
+ import RedirectGoogle from './authentication/pages/RedirectGoogle';
4
+ import RedirectMicrosoft from './authentication/pages/RedirectMicrosoft';
5
+ import RedirectFacebook from './authentication/pages/RedirectFacebook';
6
+ import { AuthGuard } from './authentication/AuthGuard';
7
+
8
+ export const routes = [
9
+ { path: '/', element: <Home />, text: 'Home', icon: 'home' },
10
+ {
11
+ path: '/auth/profile',
12
+ element: (
13
+ <AuthGuard>
14
+ <Profile />
15
+ </AuthGuard>
16
+ ),
17
+ text: 'Profile',
18
+ icon: 'account_circle',
19
+ requiresAuth: true
20
+ },
21
+ { path: '/auth/redirect-google', element: <RedirectGoogle /> },
22
+ { path: '/auth/redirect-microsoft', element: <RedirectMicrosoft /> },
23
+ { path: '/auth/redirect-facebook', element: <RedirectFacebook /> },
24
+ ];