Skip to content

Commit 987d62c

Browse files
Merge branch 'master' into ganastasov/combo-escape-close-master
2 parents 45211ae + eebb3f9 commit 987d62c

File tree

52 files changed

+1416
-964
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1416
-964
lines changed

.github/CONTRIBUTING.md

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -88,38 +88,15 @@ Accessibility is an integral part of any UI component. We as a team are committe
8888
2. `status: localized` this status is for issues that were with a pending translation status and have already been localized. Place this status label once these translation changes have been included in the current pull request, or the changes are already pulled with a different pull request.
8989

9090
## Localization (i18n) - applicable to components' string resources
91-
There are several ways to localize components' string resources:
91+
There are several ways to localize components' string resources. For more information on how it works, refer to our [Documentation - Localization (i18n)](https://www.infragistics.com/products/ignite-ui-angular/angular/components/general/localization#localization-i18n-1).
9292

93-
1. Using custom resource strings:
94-
1.1. Localize a given instance of component - each component which supports localization has input property `resourceStrings`. Setting a newly instantiated object to this property will localize only that given component's instance.
95-
1.2. Localize all resources for a component type - each component which supports localization has input property `resourceStrings`. To localize all instances of a given component in the application the following steps should be performed - get the value of the input property `resourceStrings` of the component to be localized; do not create a new instance but replace the existing strings within the object. By default all components of a given type in an application share one instance of the resource strings. Replacing a value in that instance affects all components of that type in the application.
96-
1.3. Localize all resources for all components - use global method `getCurrentResourceStrings` to get an object containing current resource strings for all components. To provide localized resources just pass an object of type `IResourceStrings` to the global method `changei18n`.
97-
1.4 As of 21.1.x the localization has new implementation and you can use the new API `registerI18n` to register resource string for a component or all components for the whole app, as well as which locale it corresponds to. To localize a single component you will need to get is corresponding resource string keys using one of the available resources and provide only those keys.
93+
**NOTE** As of 21.1.x, the localization resource strings have been moved to the [`igniteui-i18n`](https://github.com/IgniteUI/igniteui-i18n) repository under `projects/igniteui-i18n-resources`. The package `igniteui-angular-i18n` under `./projects/igniteui-angular-i18n` remains as a source of the localization resources for Ignite UI for Angular, that derives the resources from [`igniteui-i18n`](https://github.com/IgniteUI/igniteui-i18n).
9894

99-
2. Using npm package:
100-
We've created new repository which will hold the resource strings for languages different than English:
101-
https://github.com/IgniteUI/igniteui-angular-i18n
102-
103-
**NOTE** The localization repo has been moved to live inside the `igniteui-angular` repository under `./projects/igniteui-angular-i18n`
104-
**NOTE** As of 21.1.x the localization resource strings have been moved to the [`igniteui-i18n`](https://github.com/IgniteUI/igniteui-i18n) repository under `projects/igniteui-i18n-resources`.
95+
**NOTE (21.0.x and lower)** The localization resource strings live inside the `igniteui-angular` repository under `./projects/igniteui-angular-i18n`.
10596

10697
A npm package should be published each time we release new version of Ignite UI for Angular. Its version should correspond to the version of the igniteui-angular npm package.
10798
One could localize an application by importing the corresponding localized resource strings from the localization package (`igniteui-angular-i18n`) and use the methods described in the previous bullet to localize the whole application or part of it.
10899

109-
**Example:**
110-
111-
Inside app.module you can perform:
112-
```ts
113-
import { IgxResouceStringsJA } fromigniteui-angular-i18n’;
114-
changei18n(IgxResouceStringsJA);
115-
```
116-
117-
**Example new API:**
118-
```ts
119-
import { ResouceStringsJA } fromigniteui-i18n-resources’;
120-
registerI18n(IgxResouceStringsJA, 'ja');
121-
```
122-
123100
### Resource strings keys naming convention
124101
Each key in the `IResourceStrings` (and `IGridResourceStrings`, `ITimePickerResourceStrings`, etc.) is prefixed with components' selector and followed by the resource string key. Having components' selectors as prefixes allows us to have same resource strings keys for more than one component.
125102
Example: _igx_grid_groupByArea_message_.

.github/agents/bug-fixing-orchestrator-agent.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,15 @@ Present a brief scope summary to the user:
172172

173173
Keep it short and high-level. Confirm scope, not solution details.
174174

175-
Wait for user confirmation.
175+
Before routing any work, ask:
176176

177-
If a demo/sample is relevant, ask explicitly:
178-
`Do you want a demo/sample update for this change? Yes / No`
177+
**`Do you want me to proceed with this implementation flow?`**
178+
179+
If the fix is user-visible, also ask:
180+
181+
**`Do you want a demo/sample update for this feature?`**
182+
183+
Wait for the user's answer before routing work.
179184

180185
### Step 4 — Route Work
181186

.github/agents/feature-orchestrator-agent.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,15 @@ Present a brief scope summary to the user:
153153

154154
Keep it short and high-level. Confirm scope, not solution details.
155155

156-
Wait for user confirmation.
156+
Before routing any work, ask:
157157

158-
If a demo/sample is relevant, ask explicitly:
159-
`Do you want a demo/sample update for this feature? Yes / No`
158+
**`Do you want me to proceed with this implementation flow?`**
159+
160+
If the feature is user-visible, also ask:
161+
162+
**`Do you want a demo/sample update for this feature?`**
163+
164+
Wait for the user's answer before routing work.
160165

161166
### Step 4 — Route Work
162167

AGENTS.md

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,23 @@ Ignite UI for Angular is a comprehensive UI component library built on the Angul
1414

1515
## Repository Structure
1616

17-
```
18-
.github/ ← contributing docs, templates, workflows, Copilot instructions
17+
```text
18+
.github/ ← contributing docs, agent docs, templates, workflows, Copilot instructions
19+
agents/ ← custom agent definitions and handoff workflows
20+
copilot-instructions.md ← repository coding standards and AI-specific guidance
1921
cypress/ ← repository-level Cypress setup/tests
2022
projects/
2123
bundle-test/ ← auxiliary bundle test project
2224
igniteui-angular/ ← main Angular component library
2325
<component>/ ← component entry points (accordion, combo, slider, etc.)
2426
core/ ← shared core code, styles, and related infrastructure
27+
src/core/styles/ ← shared Sass theme infrastructure used by theming/style work
2528
cypress/ ← library-scoped Cypress tests/assets
29+
directives/ ← shared directives and directive-level documentation areas
2630
grids/ ← grid-related library area
2731
migrations/ ← `ng update` migrations
32+
common/ ← shared migration utilities
33+
migration-collection.json ← registered migration entry points
2834
schematics/ ← `ng add` / schematics
2935
src/ ← shared library sources
3036
test-utils/ ← shared test helpers
@@ -35,7 +41,9 @@ projects/
3541
scripts/ ← build, docs, packaging, and style scripts
3642
skills/ ← AI skill guides for components, grids, and theming
3743
src/app/ ← demo application
44+
<component>/ ← existing demo/sample areas reused for user-visible changes
3845
CHANGELOG.md ← release notes
46+
SECURITY.md ← supported-version policy for multi-branch bug fixes
3947
css-naming-convention.md ← CSS naming rules
4048
```
4149

@@ -48,21 +56,27 @@ css-naming-convention.md ← CSS naming rules
4856
### Always
4957

5058
- Reuse existing repository patterns before introducing new abstractions.
51-
- Read existing source and tests before editing.
52-
- Run `npm run lint:lib` and the relevant test suite before considering work complete.
59+
- Read the original request, existing source, and existing tests before editing.
60+
- Read the relevant skill file before modifying component code.
61+
- If a skill points to reference files, read the relevant reference files before editing.
62+
- If the task changes behavior or fixes a bug, write or update failing tests before production code.
63+
- Reuse the existing spec structure whenever possible.
64+
- Run the smallest relevant test suite and `npm run lint:lib` before considering work complete.
65+
- Run additional checks when applicable, such as `npm run lint:styles`, `npm run test:styles`, `npm run test:schematics`, `npm run build:migrations`, or i18n-specific checks.
5366
- Export new public symbols from `<component>/index.ts`.
5467
- Keep accessibility intact: ARIA, keyboard navigation, focus behavior, and screen reader semantics.
5568
- Keep i18n intact when user-facing text changes.
5669
- Add JSDoc with `@param`, `@returns`, and `@example` on every new public member.
70+
- Treat SCSS, theme wiring, and style-test work as dedicated theming/styles follow-through, and validate it with the relevant style checks when needed.
5771
- Add or update `ng update` migrations for true breaking changes such as removals, renames, moved entry points, selector changes, or incompatible default-behavior changes.
58-
- Update the component `README.md` when the public API surface changes.
59-
- Update relevant Agent skills if a change is significant and/or you need to tell other agents how to use the newly introduced feature.
72+
- Update the component `README.md` when public API, documented usage, or documented behavior changes, including new features, renamed or deprecated API, and behavior changes.
6073
- Consider demo/sample updates in `src/app/` only for explicitly requested user-visible changes.
61-
- Update `CHANGELOG.md` for new features, deprecations, breaking changes, and notable user-visible fixes when they fit the existing changelog section structure.
74+
- Update `CHANGELOG.md` for new features, deprecations, breaking changes, behavioral changes, and notable user-visible fixes when they fit the existing changelog section structure.
75+
- Update relevant Agent skills if a change is significant and/or you need to tell other agents how to use the newly introduced feature.
6276

6377
### Never
6478

65-
- Skip steps in the implementation.
79+
- Skip steps in the implementation.
6680
- Commit secrets, tokens, or credentials.
6781
- Introduce `eval()` or dynamic code execution.
6882
- Modify `package.json`, `package-lock.json`, or any other dependency manifest or lock file. If a dependency change appears truly necessary, ask for approval first. Never commit `package-lock.json` unless you have been explicitly approved to make dependency changes — committing unintended lock file changes can break builds.
@@ -107,23 +121,28 @@ Domain-specific knowledge for AI assistants:
107121

108122
## Custom Agents
109123

110-
Feature implementation is handled by a set of specialized agents in `.github/agents/`:
124+
The repository provides a set of agents in `.github/agents/`. Orchestrators analyze requests, define scope, and route work to the right specialists; they do not implement code directly. Specialists handle focused implementation and follow-through tasks.
111125

112-
| Agent | File | Purpose |
113-
|---|---|---|
114-
| `feature-orchestrator-agent` | `feature-orchestrator-agent.md` | Orchestrates end-to-end feature implementation via TDD |
115-
| `bug-fixing-orchestrator-agent` | `bug-fixing-orchestrator-agent.md` | Orchestrates end-to-end bug fixing via TDD |
116-
| `tdd-test-writer-agent` | `tdd-test-writer-agent.md` | Writes failing tests (RED phase) for features and bug fixes |
117-
| `feature-implementer-agent` | `feature-implementer-agent.md` | Implements features and refactors (GREEN + REFACTOR phases) |
118-
| `bug-fixing-implementer-agent` | `bug-fixing-implementer-agent.md` | Implements the minimum bug fix (GREEN phase) |
119-
| `theming-styles-agent` | `theming-styles-agent.md` | Implements component theming, structural SCSS, theme wiring, and style validation |
120-
| `demo-sample-agent` | `demo-sample-agent.md` | Updates existing demo/sample areas in `src/app/` when a demo is explicitly requested for a user-visible feature or bug fix |
121-
| `component-readme-agent` | `component-readme-agent.md` | Updates affected component `README.md` files for public API and documented behavior changes |
122-
| `migration-agent` | `migration-agent.md` | Creates `ng update` migration schematics for breaking changes |
123-
| `changelog-agent` | `changelog-agent.md` | Updates `CHANGELOG.md` following repo conventions |
124-
125-
Feature and bug orchestrators route work in this order:
126-
TDD → implementer → README (if needed) → migration (if breaking) → changelog (if needed).
126+
| Agent | Role | File | Use it for |
127+
|---|---|---|---|
128+
| `feature-orchestrator-agent` | Orchestrator | `feature-orchestrator-agent.md` | Analyzing feature requests, defining scope, deciding which specialists are needed, and routing the work. Does not implement code directly. |
129+
| `bug-fixing-orchestrator-agent` | Orchestrator | `bug-fixing-orchestrator-agent.md` | Analyzing bug reports, confirming likely scope and root-cause direction, deciding which specialists are needed, and routing the work. Does not implement code directly. |
130+
| `tdd-test-writer-agent` | Specialist | `tdd-test-writer-agent.md` | Writing small failing tests before production code for features and bug fixes |
131+
| `feature-implementer-agent` | Specialist | `feature-implementer-agent.md` | Implementing a feature or feature-side refactor after scope and tests are clear |
132+
| `bug-fixing-implementer-agent` | Specialist | `bug-fixing-implementer-agent.md` | Implementing the minimum safe bug fix once reproduction and root cause are known |
133+
| `theming-styles-agent` | Specialist | `theming-styles-agent.md` | Component SCSS, theme wiring, structural styles, and style validation |
134+
| `demo-sample-agent` | Specialist | `demo-sample-agent.md` | Updating existing `src/app/` demo/sample areas for explicitly requested user-visible changes |
135+
| `component-readme-agent` | Specialist | `component-readme-agent.md` | Updating affected component `README.md` files when public API or documented behavior changes |
136+
| `migration-agent` | Specialist | `migration-agent.md` | Creating `ng update` migrations for true breaking changes |
137+
| `changelog-agent` | Specialist | `changelog-agent.md` | Updating `CHANGELOG.md` for notable user-visible changes |
138+
139+
These agents are available as specialized helpers for repository work. Select and use the relevant subagent when it adds clarity, specialization, or better task separation, but do not treat subagent use as mandatory — an agent may decide to handle the work directly as long as it follows the same repository workflow, standards, and validation steps.
140+
141+
## Workflow
142+
143+
### Standard default flow
144+
145+
TDD (write or update failing tests first) → feature implementation or bug-fix implementation → theming/styles follow-through (only when the change affects SCSS, theme wiring, or style-test validation) → demo/sample update (only if explicitly requested) → component README update (when needed) → migration (for breaking changes) → changelog update (when needed).
127146

128147
## Commit Message Conventions
129148

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,21 @@ All notable changes for each version of this project will be documented in this
66

77
### New Features
88

9+
- `IgxOverlayService`
10+
- `IgxOverlayService.createAbsoluteOverlaySettings` - Added a new overload accepting `useContainerStrategy?: boolean` as the second parameter. When `true`, uses `ContainerPositionStrategy`; otherwise defaults to `GlobalPositionStrategy`. The previous overload accepting `outlet?: IgxOverlayOutletDirective | ElementRef` is still supported but deprecated.
11+
12+
- `IgxSnackbarComponent`, `IgxToastComponent`
13+
- Added a new `positioning` input property. When set to `container`, the components is displayed inside its nearest positioned ancestor in place of the now deprecated `outlet` property .
14+
915
- `IgxCombo`, `IgxSimpleCombo`
1016
- Introduced the `selectionChanged` event for both components. The event is not cancelable and is emitted after the selection is committed and the component state is updated.
1117
- Added `disableClear` input that allows hiding the clear button even when items are selected. Defaults to `false`.
1218

19+
### General
20+
21+
- `IgxOverlayService`
22+
- **Deprecation** - The `outlet` property in `OverlaySettings`, `IgxOverlayOutletDirective`, and `igxToggleOutlet` input on `IgxToggleActionDirective` are deprecated and will be removed in a future version. As overlay service now integrates the HTML Popover API and prefers rendering content in place / in the top layer, significantly reducing the need for outlet containers, new code should rely on the default in-place / top-layer rendering behavior instead of custom outlet containers.
23+
1324
## 21.1.3
1425

1526
### Security Fixes

projects/igniteui-angular/calendar/src/calendar/calendar-multi-view.component.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,7 +1045,7 @@ describe('Multi-View Calendar - ', () => {
10451045
tick(400);
10461046
fixture.detectChanges();
10471047

1048-
let overlay = document.querySelector(HelperTestFunctions.OVERLAY_CSSCLASS);
1048+
let overlay = document.querySelector(HelperTestFunctions.CALENDAR_WRAPPER_CLASS);
10491049
HelperTestFunctions.verifyMonthsViewNumber(overlay, 3);
10501050
HelperTestFunctions.verifyCalendarSubHeaders(overlay, [ymd('2019-09-16'), ymd('2019-10-16'), ymd('2019-11-16')]);
10511051

@@ -1064,7 +1064,7 @@ describe('Multi-View Calendar - ', () => {
10641064
tick(400);
10651065
fixture.detectChanges();
10661066

1067-
overlay = document.querySelector(HelperTestFunctions.OVERLAY_CSSCLASS);
1067+
overlay = document.querySelector(HelperTestFunctions.CALENDAR_WRAPPER_CLASS);
10681068
HelperTestFunctions.verifyMonthsViewNumber(overlay, 2);
10691069
HelperTestFunctions.verifyCalendarSubHeaders(overlay, [ymd('2019-09-16'), ymd('2019-10-16')]);
10701070

@@ -1079,7 +1079,7 @@ describe('Multi-View Calendar - ', () => {
10791079
fixture.detectChanges();
10801080

10811081
expect(datePicker.hideOutsideDays).toBe(true);
1082-
let overlay = document.querySelector(HelperTestFunctions.OVERLAY_CSSCLASS);
1082+
let overlay = document.querySelector(HelperTestFunctions.CALENDAR_WRAPPER_CLASS);
10831083
expect(HelperTestFunctions.getHiddenDays(overlay, 0).length).toBe(HelperTestFunctions.getInactiveDays(overlay, 0).length);
10841084
expect(HelperTestFunctions.getHiddenDays(overlay, 1).length).toBe(HelperTestFunctions.getInactiveDays(overlay, 1).length);
10851085
expect(HelperTestFunctions.getHiddenDays(overlay, 2).length).toBe(HelperTestFunctions.getInactiveDays(overlay, 2).length);
@@ -1098,7 +1098,7 @@ describe('Multi-View Calendar - ', () => {
10981098
fixture.detectChanges();
10991099

11001100
expect(datePicker.hideOutsideDays).toBe(false);
1101-
overlay = document.querySelector(HelperTestFunctions.OVERLAY_CSSCLASS);
1101+
overlay = document.querySelector(HelperTestFunctions.CALENDAR_WRAPPER_CLASS);
11021102
expect(HelperTestFunctions.getHiddenDays(overlay, 0).length).toBe(12);
11031103
expect(HelperTestFunctions.getHiddenDays(overlay, 1).length).toBe(11);
11041104
expect(HelperTestFunctions.getHiddenDays(overlay, 2).length).toBe(5);

0 commit comments

Comments
 (0)