mirror of
https://github.com/ever-co/ever-gauzy.git
synced 2026-10-02 01:54:50 +08:00
develop
17
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
91d91ffca3 |
test: make the unit-test run hermetic and fix the Angular jest harness
The Unit Tests workflow has never been green (24 of 97 projects red at
develop
|
||
|
|
d810c81cf3 |
feat(core): persistence invariants, config/boundary validation, migration smoke test and correlation IDs (#10198)
Adds test harnesses for tenant isolation, TypeORM/MikroORM parity, persistence invariants and idempotency; startup validation for DB config; Nx plugin/core boundary rules; a fresh-database migration smoke test; and a correlation id carried from HTTP requests into docs queue jobs and logs. Testing (packages/core/src/lib/core/testing): - tenant-isolation: an in-memory tenant-aware repository, fixtures and strict assertions (a non-empty page, every row in the caller's tenant). Applied to EmployeeService and OrganizationProjectService. - orm-conformance and persistence-invariants: suites that run the same checks under TypeORM and MikroORM (run-both-orms.sh uses yarn nx). - idempotency: assertion helpers and specs for token cleanup (positive control), employee notifications and the Zapier timer webhook. - database/migration-smoke.spec.ts: runs the full migration chain on a fresh better-sqlite3 database. It is excluded from the default core jest run; run it with `nx run core:test-migration-smoke`. Idempotency: - EmployeeNotificationService.create() takes an opt-in `absorbRedelivery`. With it set, an identical unread, unarchived notification under 60 s old (same receiver, entity, type, sender, title and message) is returned instead of inserted, and a missing key or a failed lookup inserts as usual. The event handler does not enable it (the in-process EventBus never redelivers), so every caller inserts one row per event as before. - ZapierWebhookService skips resending a webhook that already succeeded for the same subscription, action and time log within 5 minutes. The key is reserved while in flight, failed deliveries stay retryable, pruning stops at the first unexpired entry, and the cache is capped at 10,000 entries. Config (packages/config): - An unknown DB_TYPE fails fast with the list of supported values; an empty DB_TYPE still means better-sqlite3; mongodb throws an Error. - Pool and timeout variables are parsed with Number.parseInt semantics, only for postgres and mysql. They throw only where tarn already refused to start and warn otherwise. SQLite ignores them and still prints the startup values. Observability: - RequestContextMiddleware accepts an inbound x-correlation-id of 1-128 visible ASCII characters (otherwise it generates a UUIDv4) and echoes it on the response. CORS allows and exposes X-Correlation-Id. RequestContext.currentCorrelationId() is added. - The docs queue carries the correlation id through job payloads (including bulk reindex) into pipeline outcome, error, dead-letter and enqueue-failure logs. Boundaries and build: - Every project gets a type tag. The ESLint depConstraints stop type:core depending on plugins, and plugins may depend only on core, shared libs and the known extension points (ai-chat, job-proposal, integration-ai, job-*-ui). - core declares @gauzy/scheduler (package.json and implicitDependencies); the webapp Dockerfile copies scheduler's package.json. - The integration-zapier jest config can import @gauzy/core (transformIgnorePatterns, allowJs, isolatedModules). - Fixes the stale @nrwl/nx eslint-disable id in the e2e roles-permissions steps and the broken @gauzy/core mock in the docs document-scope spec. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
52ae8427fe |
Fix: make ESLint runnable again across the workspace (#10117)
No lint invocation in this repo could reach a single file. `nx run-many -t lint --all` failed for
93 of 93 projects, and no CI workflow runs lint, so nothing ever noticed. Two independent bugs,
either of which alone was fatal.
1. The root `eslint.config.js` was `module.exports = new FlatESLint({ overrides: [] })`, importing
a `FlatESLint` class from `@nx/eslint-plugin-nx`. That could never have worked: a flat config
must export an array, and no Nx package has ever exported such a class. `@nx/eslint-plugin-nx`
is the beta-only predecessor NAME of `@nx/eslint-plugin` — the repo declared both, the real one
at ^22.5.2 and this one pinned at 16.0.0-beta.1. The v16 beta drags a nested `@nx/devkit@16`
that expects an `nx` internal path nx@22 no longer ships, so every `eslint` invocation died
with `Cannot find module 'nx/src/utils/typescript'`.
2. All 41 project configs did `[...require('../../.eslintrc.json')]`. That file is a JSON object,
so the spread threw `TypeError: baseConfig is not iterable` — a different failure, on the path
`nx lint <project>` actually takes. `packages/mcp-server` also had the wrong depth.
Changes: remove `@nx/eslint-plugin-nx`, add `typescript-eslint@^8.40.0` (the only genuinely
missing package — `@nx/eslint-plugin`'s flat configs require it unconditionally); rewrite the root
config as a real flat array shaped like Nx 22's own generator output, with real `ignores`
replacing the legacy `"ignorePatterns": ["**/*"]` that disabled linting workspace-wide; repoint
all 41 project configs at the root flat config, dropping the FlatCompat bridge the 12 `.cjs` ones
used; disable the deprecated `@typescript-eslint/no-empty-interface`, which Nx's presets still
enable alongside its v8 replacement `no-empty-object-type` and so double-reported every
occurrence; and re-enable `no-dupe-keys`, `no-dupe-class-members`, `no-dupe-args` and
`no-unreachable`, which typescript-eslint's `eslint-recommended` overlay turns off on the grounds
that `tsc` reports them — no CI job here runs `tsc --noEmit`, and a duplicate key in
`packages/core/jest.config.ts` has already silently changed behaviour once.
The legacy `.eslintrc.json` files are deliberately KEPT: `.codacy/codacy.yaml` pins eslint@8.57.0,
which does read them.
The guardrail is proven, not assumed — against the real historical bug:
packages/core/jest.config.ts
29:2 error Duplicate key 'transformIgnorePatterns' no-dupe-keys
Findings are REPORTED, NOT FIXED (a separate job): 8,887 files linted, 2,290 with problems,
2,649 errors / 6,110 warnings, zero parse errors. Lint should not become a required check until
that backlog is triaged.
Verified: packages/core 56/56 suites and 612/612 tests; build-monorepo-root, build-api, build-libs
and build-web all green; all 42 configs load; `nx lint <project>` now runs and reports instead of
crashing.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
5e77f39920 |
feat(docs): close the remaining spec gaps — leaks, broken embeds, activity, OCR, extraction
A second spec audit (all 12 documents, every P0/P1 traced UI -> service -> route ->
persistence, each claimed gap independently refuted before being accepted) confirmed 42
gaps. This closes them across seven disjoint areas.
P0
* **`?relations=` leaked PRIVATE documents, including page content.** `toRelationList()`
had no allowlist and the service spread client relations straight into `findOne()`,
gating only the top-level row — so `GET /documents/:id?relations=children` returned other
users' private `contentJson`. Relations are now allowlisted (`children` deliberately
absent — child listing has its own SQL-scoped route), and any loaded `parent`/`children`
is run through `DocumentAccessService.canRead` per row and replaced with
`{ id: null, restricted: true }`. The allowlist alone would still leak through any
relation added later; the masking is the real fix. Adds `GET /:id/path`, which walks
ancestors server-side so a breadcrumb can render redacted segments.
* **Every embedded image rendered broken.** The editor set `src` to the JWT-guarded
`/raw` route and revoked the blob, and no image node view existed — so an unauthenticated
`<img src>` hit a guarded endpoint on every wiki page. Bytes now resolve through the
authenticated client into an object URL while `/raw` stays the persisted `src`.
* **The activity timeline was never read back.** The subscriber wrote rows and core exposed
`GET /activity-log`, but docs-ui had zero activity code — the detail panel printed only
`updatedAt`. Adds the service, the component, paging, and `System` attribution.
P1/P2 highlights
* Help-center stored-XSS read path; per-route rate limits on upload/search/admin ops;
TipTap `contentJson` schema validation with `contentHtml` derived from the validated JSON;
editor cross-links now become real `DocumentLink` rows; org `defaultVisibility` honoured
on create; `CreateEntitySubscriptionEvent` on create + review-request.
* Chat-tool `FEATURE_DOCUMENTS` gate now reads the per-organization DB flag instead of
process config, so turning the feature off actually turns it off.
* `.pptx` / `.odt` / `.ods` were accepted on upload and then guaranteed to fail extraction.
Rather than de-listing the types, first-party dependency-free extractors were written
(Node `zlib` only): a central-directory ZIP reader with a zip-bomb fuse, and an XML reader
that skips the doctype whole so no declared entity can expand (XXE / billion-laughs).
* Folder creation at the current/root location (on a new organization the tree is empty, so
there was NO path to create the first folder), breadcrumbs in table view and on empty
folders, browse keyboard shortcuts, storage-quota meter (a wire-key mismatch had left it
permanently hidden), record->Documents panels, and a `canDeactivate` guard so leaving a
dirty page can no longer silently lose edits.
🛑 The integration pass caught the defect that would have undone the rest: **the `DOCS`
translation namespace was never merged into ngx-translate.**
`PluginUiModule.bootstrapDeclarativePlugins()` skips any plugin declaring a `module`, and
`DocsUiPlugin` declares one, so the merge callback never ran — every label in the Documents
UI would have rendered as a raw key. Fixed with an opt-in `translateService` on the
declarative registration path (omitting it preserves prior behaviour for every other
plugin), plus a spec pinning the load-order rule that made it invisible.
Also fixed here: `docs-unsaved-changes.guard.spec.ts` drove the guard through
`TestBed.resetTestingModule()` inside its helper, which left no instantiated injector and
threw `Cannot read properties of null (reading 'ngModule')` on all six cases. The guard only
needs an injection context, so it now uses a standalone `Injector`.
Verified: plugin-docs, plugin-docs-ui, plugin-ai-chat, plugin-knowledge-base and ui-core all
build clean; 1105 tests pass (522 plugin-docs + 473 plugin-docs-ui + 110 core).
Known open, deliberately not forced: `DocumentPermissionService.canMutate` (item #36) was
not implemented by any area; item #12 covers 4 of 5 surfaces because the fifth would require
`ui-core/shared` to import `@gauzy/plugin-docs-ui`, a real nx project cycle; and
`IDocumentCreateInput.tags` exists in contracts but not on the DTO, which runs
`forbidNonWhitelisted` — latent today because nothing sends it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
546e0a3a51 |
feat(dashboard): dashboard builder — empty canvas, widget palette (drag & drop), user-created tabs (#9848)
* feat(dashboard): builder foundation — v2 layout contracts, widget registry, tested grid engine - contracts: IDashboardWidgetPlacement / IDashboardTab / IDashboardLayoutV2 (stable instanceId + widgetId + x/y/w/h + per-instance config), v1 kept - widget registry: reactive widgets$, global getWidget(id), cached resolveComponent(), registerOrReplaceWidget(), palette metadata (category/icon/description/defaultSize/configSchema/contextRequirements) - dashboard-layout.utils: parseLayout (crash-proof), normalizeLayout (v1 -> v2 preserving the legacy snapshot), packLayout collision/compaction engine + add/move/remove/resize — 23 unit tests, all green Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(dashboard): wire up the builder — barrels, module, core custom/:id route, widget registration - ui-core/core dashboard barrel exports the widget-context tokens, layout utils, DashboardContextService and TimesheetStatisticsCacheService - ui-core/shared exports the widget-host (BaseDashboardWidgetComponent + DashboardWidgetHostComponent) - dashboard.module: declares the 4 builder components, imports CDK DragDropModule + the standalone widget host - custom/:id moves OUT of the time-track plugin into the core dashboard routes as its own canvas page (a custom dashboard is no longer a saved permutation of the Time Tracking page) - the plugin instead publishes its 6 counters to the palette via provideDashboardTimeTrackWidgets() Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(plugin-ui): make dashboard widgets a first-class declarative capability Registering widgets through a plugin's `providers` was a silent no-op: declarative providers live in a child EnvironmentInjector, and APP_INITIALIZER only fires for the root — so provideAppInitializer there never ran and the palette stayed empty. Widgets are now declared like routes/tabs/nav (`widgets: [...]`) and registered by applyDeclarativeRegistrations via a PLUGIN_WIDGET_REGISTRY token bound to WidgetRegistryService in bootstrap.module. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(dashboard): quality pass on the builder — Sonar, cspell and AI-review findings SonarCloud quality gate (BLOCKER/CRITICAL/MAJOR): - S7651: rename every output that shadowed a native DOM event, so a parent binding can no longer fire twice or bind the wrong thing — tab strip `select|add|rename|duplicate|delete|reorder` -> `tabSelect|addRequested|renameRequested|duplicateRequested|deleteRequested|reordered`, widget host `remove|resize|configure` -> `removed|resized|configureRequested`, palette `add` -> `addRequested`, canvas `configure` -> `configureRequested`. All templates and consumers updated. - S2871: `stableStringify()` sorted with the default comparator. That string IS the statistics cache key, so unstable ordering meant cache misses and duplicate HTTP requests. Now sorts with `localeCompare`. - S6544: `resolveComponent()` used a Promise in a boolean conditional; it now tests the cache entry explicitly. - S2245: `createId()` no longer uses `Math.random()` — Web Crypto (`randomUUID`, then `getRandomValues`) with a time+counter last resort, and a note explaining the ids are document identity, never a security token. - S2933 readonly members, S3358 nested ternary extracted (`toTitleStream`), S7773 `Number.isNaN`/`Number.parseInt`, S6551 no more `[object Object]`, S7784 `structuredClone`, S7744 useless empty object, Web:S6819 `role="group"` -> `<nav>` and `role="status"` -> `<output>`, Web:AvoidCommentedOutCodeCheck comment reworded. Cspell: "affordances"/"artefacts"/"neighbouring" reworded to US English rather than widening the dictionary. Correctness findings from the AI reviewers: - Saving a v1 dashboard that was just arranged in the builder persisted the legacy `Store.widgets` snapshot instead of the canvas; a staged document now selects the v2 save path. - A save no longer discards edits made while the request was in flight, and keeps the editor open for them. - `packLayout()` walked down one row at a time, so a corrupt widget height of a few thousand rows froze the canvas; it now jumps past the colliding edge. - `normalizeLayout()` packs each tab, so a hand-edited document can no longer render overlapping widgets. - `movePlacement()` guards a non-finite drop index (`splice(NaN)` silently inserted at 0). - A synchronously throwing widget loader left the host stuck on its skeleton; a failed load no longer evicts a newer cache entry; `registerWidget()` invalidates the memoized component and warns on cross-location id reuse; `registerOrReplaceWidget()` drops the id from every location. - Dashboard context: the time zone/format fallbacks recompute when role permissions resolve after the organization/user. - `resolvePeriodSeconds()` reaches its documented full-day fallback when the organization has no (or unparseable) working hours. - Members/Projects Worked: the org-scoped count request is deduplicated per organization and retried once, instead of re-firing on every date change. - One malformed plugin widget no longer aborts the rest of plugin bootstrap; `widgets` is structurally typed instead of `unknown[]`. Accessibility: - Width buttons expose `aria-label` + `aria-pressed` (new `WIDTH_COLUMNS` key). - The drag handle answers the arrow keys, so widgets can be reordered without a mouse. - `:focus-visible` rings on the tab chip, kebab and popover actions. - "Configure" is only offered when the widget declares a `configSchema`, so the action is never a dead end. - The rename prompt opens pre-filled with the current tab name (`PromptDialogOptions.value`). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(cspell): allow persistance so the touched dashboard barrel passes CI `packages/ui-core/shared/src/lib/dashboard/index.ts` gained a `export * from './widget-host';` line in this branch. The cspell action runs with `strict: true` over the files a PR changes, so that edit pulls the barrel into the checked set — and its three pre-existing `concretes/contexts/*persistance*` re-exports then fail the job. persistance is a long-standing misspelling baked into 12 files (class names, interfaces and file names across `ui-core` and `desktop-lib`); renaming them is well outside this PR. Adding the word is the minimal fix. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
98bcc4befb |
fix(ai-chat-ui): AI review round — a11y, IME, playground approvals, form-bridge precision
- history delete honors server response; user messages keep line breaks - IME-safe Enter submit; history rows use sibling buttons (no nested interactive controls); range inputs get accessible names; collapsed playground settings are inert - playground now wires tool-approval responses (approve/reject) and auto-resumes after approvals - page bridge: query strings routed correctly via createUrlTree - form bridge: strict formIndex, blank-query guard, value-based radio selection - plugin-ui: child environment injectors destroyed on module teardown - header chat toggle: space-key support Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
bdc7b418e3 |
Merge remote-tracking branch 'origin/develop' into feat/plugin-ai-chat-react-ui
# Conflicts: # apps/gauzy/package.json # apps/gauzy/src/plugin-ui.config.ts # package.json # yarn.lock |
||
|
|
cce9fc6225 |
feat(plugin-ai-chat-react-ui): AI SDK 7 chat with canvas tools, approvals, Streamdown, BYOK settings
- migrate all chat + playground components to @ai-sdk/react v4 (AI SDK 7): transports with the user's JWT, message parts rendering, status model - Streamdown markdown rendering (replaces the regex/dangerouslySetInnerHTML parser); styles.css loaded via apps/gauzy build - ToolCallCard: live tool-call chips with expandable details and inline Approve/Reject for approval-requested parts - client/canvas tools executed in the browser through the ui-core agent bridges; curated page registry (70 route-verified pages) - playground wired to /api/ai-chat + /api/ai-chat/config (real provider/ model selection; unsupported controls visibly disabled) - AI Providers (BYOK) settings page at /pages/settings/ai (AI_CHAT_SETTINGS-gated, masked keys, default provider/model selection) - plugin enabled in all builds; sidebar/header visibility gated by AI_CHAT_ACCESS permission + backend config; availability watcher Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
1e2ce8dc4d |
feat(plugin): add dashboard-time-track-angular-ui plugin package (#9611)
* feat(plugin): add `dashboard-time-track-angular-ui` plugin package * fix(plugin): add dashboard-time-track-react-ui plugin build script * Update .deploy\webapp\Dockerfile * Update packages/plugins/dashboard-time-track-angular-ui/src/i18n/ru.json Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * fix(AI): agent reviewer suggestions * Update packages/plugins/dashboard-time-track-angular-ui/src/i18n/ru.json Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update packages/plugins/dashboard-time-track-angular-ui/src/i18n/es.json Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * Update packages/plugins/dashboard-time-track-angular-ui/src/i18n/ru.json Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update packages/plugins/dashboard-time-track-angular-ui/src/i18n/ru.json Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * Update packages/plugins/dashboard-time-track-angular-ui/README.md Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * Update packages/plugins/dashboard-time-track-angular-ui/src/i18n/zh.json Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Apply suggestion from @coderabbitai[bot] Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Apply suggestion from @coderabbitai[bot] Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update packages/plugins/dashboard-time-track-angular-ui/src/i18n/es.json Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Apply suggestion from @coderabbitai[bot] * Update packages/plugins/dashboard-time-track-angular-ui/src/i18n/ru.json Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Apply suggestion from @coderabbitai[bot] * Apply suggestion from @coderabbitai[bot] Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Apply suggestion from @coderabbitai[bot] Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Apply suggestion from @coderabbitai[bot] * Apply suggestion from @coderabbitai[bot] Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Apply suggestion from @coderabbitai[bot] --------- Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> |
||
|
|
7ab8f80130 | feat(ui): create ai chat reat plugin UI | ||
|
|
4977844643 |
(fix) override default overlay config to disable use of top-layered popovers (#9590)
* fix: override default overlay config to disable use of top-layered popovers * refactor(angular): replace `APP_INITIALIZER` with `provideAppInitializer` * Update app.module.ts * Update app.module.ts * Update packages/plugins/posthog-ui/src/lib/posthog.module.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * Update apps/gauzy/src/app/app.module.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * Update packages/plugins/posthog-ui/src/lib/posthog.module.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update apps/gauzy/src/app/app.module.ts * Update apps/gauzy/src/app/app.module.ts --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> |
||
|
|
6083c8f02e |
[WIP] UI React Plugin (#9532)
* feat(ui-react): ui-plugin bridge for react components * feat(ui-react): ui-plugin bridge for react components * feat(ui-react): ui-plugin bridge for react components * feat(ui-react): ui-plugin bridge for react components * feat(ui-react): ui-plugin bridge for react components * feat(ui-react): ui-plugin bridge for react components * feat(ui-react): react-ui-plugin example * feat(ui-react): react-ui-plugin example * feat(ui-react): react-ui-plugin example * feat(ui-react): ui-react bridge plugin * feat(plugin-ui): add plugin translation system and React hooks * feat(plugin-ui): implemented plugin-ui suggestions by AI * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(dashboard): added back by mistaken removed component * fix(ui-react): rename package to `@gauzy/ui-react` instead of `@gauzy/plugin-ui-react` * fix: rename package to `plugin-react-ui` instead of `dashboard-time-track-react-ui` * fix(build): apply AI suggestion by bot agent reviewers * Update plugin-ui.config.ts * feat(ui-react): dashboard-time-track-react-ui plugin example * feat(ui-react): add shadcn-style Card compound components and dashboard enhancements * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * Update packages/plugin-ui/src/lib/plugin-extension/page-extension-slot.component.ts Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * Update packages/plugin-ui/src/lib/plugin-version-compat.ts Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * fix(build): apply AI suggestion by bot agent reviewers --------- Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> |
||
|
|
c9a475c338 |
[Fix] Hidden Sidebar Menus (#9569)
* feat(utils): parse env variables with fallback value * fix(pages): use `pages.routes` instead of `pages-routing.module` * fix(ui-core): base nav menu standlone component & improve menu category * fix(core): update `tenant-aware-crud.service` to support save many method without checking tenant * fix(core): update `task-metadata.service` for execute tenant update tasks * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * fix(ui-auth): update auth APIs service methods * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * fix(ui-core): build for tooltip directive * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] * Apply suggestion from @greptile-apps[bot] |
||
|
|
c732ccdac2 |
chore(deps): bump @angular/core from 21.0.0 to 21.0.7 (#9492)
* chore(deps): bump nx from 22.3.0 to 22.4.0 * chore(deps): bump nx from 22.3.0 to 22.4.0 * Update package.json * Update package.json * chore(deps): bump @angular/cdk from 21.0.0 to 21.0.1 * chore(deps): bump @angular/cdk from 21.0.1 to 21.0.6 |
||
|
|
b161467904 |
chore: update Angular to v21 (#9390)
* @rahul-rocket chore(deps): chore(deps): bump @angular/core from ^20.2.4 to 21.1.2 * fix(ui): update missing jest.preset.js * fix(nx-migrations): migrate nx from 21.5.1 to 22.4.4 * chore(deps): bump jest-preset-angular to 16.0.0 * chore(deps): bump @nebular/* packages to 17.0.0 for Angular 21 compatibility * chore(deps): upgrade all packages to Angular 21 and compatible dependencies * chore(deps): upgrade all packages to Angular 21 and compatible dependencies * fix(nx-migrations): migrate nx from 21.5.1 to 22.4.4 * Update yarn.lock * Update yarn.lock * fix(nx-migrations): migrate nx from 21.5.1 to 22.4.4 * fix(nx-migrations): migrate nx from 21.5.1 to 22.4.4 Replace 'jest-preset-angular/setup-jest' imports with the new 'setupZoneTestEnv' function. * @nx/jest: replace-removed-matcher-aliases-v22-3 Replace removed matcher aliases in Jest v30 with their corresponding matcher * chore(deps): @angular/common and @angular/core peerDependencies to ^21.1.0 * Update package.json * fix(nx-migrations): migrate nx from 21.5.1 to 22.4.4 * chore(deps): bump @nebular/theme from ^16.0.0 to ^17.0.0 * chore(deps): upgrade all packages to Angular 21 * chore(deps): upgrade all packages to Angular 21 * fix(build): update helmet import to support 8.x default export * fix(build): resolve TypeScript errors and improve code quality - Fix TemplateRef type conflicts caused by duplicate @angular/core packages (ngx-permissions) - Change moment imports from namespace to default imports for ESM compatibility - Convert constructor injection to inject() function in multiple components - Add OnPush change detection strategy to WindowLayoutComponent - Make CountdownConfirmationComponent standalone - Update LayoutWithDraggableObject to use any[] for draggableObject type * fix(build): fix moment & timezone namespace packages * fix(build): add jest config for missing packages * chore(deps): bump swiper from 8.3.1 to 12.1.0 * fix(build): update swiper module and syntax * Update time-tracking.component.ts * chore(deps): downgrade `node-polyfill-webpack-plugin` from 4.1.0 to 1.1.4 * fix(deps): resolve browserslist "Unknown version 143 of and_chr" error Add caniuse-lite and browserslist to yarn resolutions to force all * fix(nx-migrations): migrate nx from 21.5.1 to 22.4.4 * fix(deps): standardize Angular 21.0.0 versions across all packages and fix compatibility issues - Fix @angular/* packages to use exact version 21.0.0 (remove caret ^) across all apps, packages, and plugins - Add @angular/cdk resolution to 21.0.0 to force consistent version * fix(build): `ui-config` replace env files module issue * fix(build): `ui-config` replace env files module issue * fix(build): replace all TemplateRef<HTMLElement> with TemplateRef<any> * Update package.json * Update apps\agent\tsconfig.json * chore(deps): upgrade packages to latest version * Update yarn.lock * Update yarn.lock * fix(build): apply AI suggestion by bot agent reviewers * fix(build): apply AI suggestion by bot agent reviewers * fix(nx-migrations): migrate nx from 21.5.1 to 22.4.4 * chore(deps): bump @nestjs/common and @nestjs/core to 11.1.14 * fix(build): replace all TemplateRef<HTMLElement> with TemplateRef<any> * fix(plugins): apply AI suggestion by bot agent reviewers * Update yarn.lock * chore(deps): bump packages * Update yarn.lock * chore(deps): bump packages * chore(deps): bump packages * fix(plugins): replace 'jest-preset-angular/setup-jest' imports with the new 'setupZoneTestEnv' * fix(plugins): apply AI suggestion by bot agent reviewers * fix(cspell): typo spelling :-) * fix(plugins): apply AI suggestion by bot agent reviewers * fix: fontawesome icon change version to FA 7 * refactor(ui-core): migrate dashboard directives to standalone * refactor(ui-core): migrate pipes/directives to standalone * fix(plugins): apply AI suggestion by bot agent reviewers * fix(plugins): apply AI suggestion by bot agent reviewers * chore(deps): bump packages * refactor(ui-core): migrate directives to standalone * fix(plugins): apply AI suggestion by bot agent reviewers --------- Co-authored-by: Ruslan Konviser <evereq@gmail.com> Co-authored-by: syns2191 <sutralian@gmail.com> |
||
|
|
9ddfec138f | fix(plugins): apply AI suggestion by bot agent reviewers (#9477) | ||
|
|
a78e10876f |
Merge pull request #9449 from ever-co/feat/ui-plugin-integration
[Feat] Plugin UI Integration |