Skip to content

Ember v6 - Docfy#1676

Open
SmitGala wants to merge 3 commits intodevelopfrom
PD-2208-Ember-Docfy-V6
Open

Ember v6 - Docfy#1676
SmitGala wants to merge 3 commits intodevelopfrom
PD-2208-Ember-Docfy-V6

Conversation

@SmitGala
Copy link
Copy Markdown
Contributor

No description provided.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 18, 2026

Walkthrough

This PR transitions the project from Storybook-based documentation to Docfy, adds comprehensive component documentation (80+ markdown files), upgrades Ember CLI and related dependencies to version 6.7.0, and updates Swagger UI integration imports across public API components.

Changes

Cohort / File(s) Summary
Docfy Configuration & Router Integration
.docfy-config.js, app/router.ts, .eslintrc.js
Adds Docfy configuration file mapping docs directory, integrates addDocfyRoutes into router, and updates ESLint rules for the config file.
Documentation Layout Component
app/components/docs-layout/index.ts, app/components/docs-layout/index.hbs, app/components/docs-layout/index.scss
Introduces new DocsLayoutComponent with scroll-to-top behavior on route change, accompanying Handlebars template with sidebar navigation and main content area, and comprehensive SCSS styling for docs UI with flex layout, sidebar scrolling, and prose typography.
Documentation Template & Service
app/templates/docs.hbs, app/services/store.js
Adds docs outlet wrapper template using DocsLayout component; creates Ember Data store service re-export.
Component Documentation
docs/components/*, docs/index.md
Adds 80+ markdown documentation pages covering all component APIs, usage examples, blocks, and demo sections for accordion, autocomplete, appbar, button, checkbox, checkbox-tree, chip, clipboard, datepicker, divider, drawer, icon, icon-button, link, list, loader, menu, modal, pagination, popover, radio, select, skeleton, stack, table, tabs, text-field, toggle, tooltip, tree, and typography components, plus landing page.
Swagger UI Integration Update
app/components/public-api-docs/index.ts, app/components/public-api-docs/api-endpoints/index.ts, app/components/public-api-docs/schemas/index.ts
Replaces default import from swagger-ui with named imports (SwaggerUIBundle, SwaggerUIStandalonePreset) from swagger-ui-dist and updates presets access pattern accordingly.
Dependency Management
package.json
Removes Storybook packages and scripts; adds @docfy/ember-cli and @docfy/ember; upgrades Ember CLI/Ember from ~5.12.0 to ~6.7.0; upgrades related Babel, testing, and build tooling; adds swagger-ui-dist and path; updates npm overrides for Ember version.
Build Configuration
config/ember-cli-update.json, ember-cli-build.js
Adds Ember CLI update manifest defining version 6.0.0 blueprint; enables topLevelAwait experiment in webpack autoImport config.
Type & Formatting Updates
app/components/ak-tree/index.ts, app/components/ak-tree/provider/index.ts, types/global.d.ts, app/utils/freshdesk.ts
Reformats TypeScript interface extends clauses and global type declarations across multiple lines; minor parentheses adjustment in freshdesk utility for syntactic consistency.
Storybook Story Migration
app/components/ak-clipboard/index.stories.js
Refactors Clipboard story to use context class management instead of story args; updates template binding to use tracked state.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • avzz-19
  • Yibaebi

Poem

🐰 From Storybook's tales to Docfy's light,
Eighty docs bloom, each component bright,
The tree stands tall, the drawer slides wide,
With swagger renewed, there's nowhere to hide,
Ember six points the way forward with glee!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive No description was provided; this is an empty/missing description that should include context about the changes. Add a pull request description explaining the Ember v6 upgrade, Docfy integration, and migration from Storybook, to help reviewers understand the scope and rationale.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title "Ember v6 - Docfy" clearly describes the main change: upgrading Ember to v6 and integrating Docfy for documentation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch PD-2208-Ember-Docfy-V6

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Stylelint (17.5.0)
app/components/docs-layout/index.scss

AllFilesIgnoredError: All input files were ignored because of the ignore pattern. Either change your input, ignore pattern or use "--allow-empty-input" to allow no inputs
at standalone (file:///usr/local/lib/node_modules/stylelint/lib/standalone.mjs:291:43)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@SmitGala SmitGala changed the title Pd 2208 ember docfy v6 Ember v6 - Docfy Mar 18, 2026
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages bot commented Mar 18, 2026

Deploying irenestaging with  Cloudflare Pages  Cloudflare Pages

Latest commit: 2b34d76
Status: ✅  Deploy successful!
Preview URL: https://ce067abf.irenestaging.pages.dev
Branch Preview URL: https://pd-2208-ember-docfy-v6.irenestaging.pages.dev

View logs

@cypress
Copy link
Copy Markdown

cypress bot commented Mar 18, 2026

Irene    Run #817

Run Properties:  status check failed Failed #817  •  git commit c10cb92115 ℹ️: Merge c2936feac2542f9d865a35d593cbac977e3f6383 into 17b412c8b9a13fef9f52528f9a0c...
Project Irene
Branch Review PD-2208-Ember-Docfy-V6
Run status status check failed Failed #817
Run duration 04m 48s
Commit git commit c10cb92115 ℹ️: Merge c2936feac2542f9d865a35d593cbac977e3f6383 into 17b412c8b9a13fef9f52528f9a0c...
Committer SmitGala
View all properties for this run ↗︎

Test results
Tests that failed  Failures 1
Tests that were flaky  Flaky 0
Tests that did not run due to a developer annotating a test with .skip  Pending 1
Tests that did not run due to a failure in a mocha hook  Skipped 1
Tests that passed  Passing 29
View all changes introduced in this branch ↗︎

Tests for review

Failed  cypress/tests/dynamic-scan.spec.ts • 1 failed test

View Output

Test Artifacts
Dynamic Scan > it tests dynamic scan for an apk file: 132571 Test Replay Screenshots

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

🧹 Nitpick comments (4)
docs/components/ak-menu-demo/default.md (1)

27-31: Consider: icon property in menuData is not used in the template.

The menuData array includes an icon property for each item, but the template only renders the label via AkTypography. If icons are intended to be displayed, they should be added to the template. If this is intentional (e.g., to show data structure flexibility), consider adding a comment or using it in the demo.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-menu-demo/default.md` around lines 27 - 31, The demo's
menuData entries include an icon property that isn't rendered; update the
template that renders the menu (where AkTypography currently displays
item.label) to also render the item's icon (e.g., alongside or before label)
using the project's icon component or an <Icon/> equivalent so icons from
menuData are visible, or if icons are intentionally unused, add a clarifying
comment in the demo next to menuData to explain why icon is present but not
rendered.
docs/components/ak-popover.md (1)

18-18: Clarify the arrowColor description.

The description "light or dark" is incomplete. Consider expanding it to clarify the expected values and usage, e.g., "Arrow color theme: 'light' or 'dark'".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-popover.md` at line 18, The table row for the prop
`arrowColor` is vague; update its description to clearly state the expected
values and usage by replacing "light or dark" with a concise phrase such as
"Arrow color theme: 'light' | 'dark' (controls popover arrow styling)" so
readers understand the allowed string values and purpose of `arrowColor`.
docs/components/ak-typography.md (1)

14-14: Consider clarifying the "auto" default value.

The tag prop default is listed as "auto". Consider adding a brief note explaining what "auto" means (e.g., "auto-selected based on variant") to improve clarity for users.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-typography.md` at line 14, Update the docs entry for the
`tag` prop in ak-typography to clarify what the "auto" default means: state that
`tag` defaults to "auto" which causes the component (AKTypography /
<AKTypography>) to choose the HTML element automatically based on the `variant`
(or text purpose) — e.g., headings map to <h1>-<h6>, body text to <p>/span — so
readers understand how the element is selected when `tag` is not provided.
docs/components/ak-accordion-demo/with-icon.md (1)

64-66: Guard dynamic key updates in handleChange.

Using this[id] directly can mutate unintended fields if id is unexpected. A small allowlist keeps the demo safer and clearer.

Suggested refactor
   `@action`
   handleChange(id) {
-    this[id] = !this[id];
+    if (id === 'withIcon1' || id === 'withIcon2' || id === 'withIcon3') {
+      this[id] = !this[id];
+    }
   }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-accordion-demo/with-icon.md` around lines 64 - 66, The
handleChange method currently flips this[id] directly which can mutate
unexpected properties; guard dynamic key updates by implementing an allowlist of
valid accordion keys (e.g., const allowed = ['panel1','panel2','panel3'] or
similar) and only perform the toggle when id is included in that list, otherwise
ignore or log a warning; update the handleChange(id) implementation to validate
id against the allowlist before assigning to this[id] so only known fields are
mutated.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app/components/docs-layout/index.scss`:
- Around line 201-210: The inline code selector :not(pre) > code has
insufficient color contrast; update its styles to match the accessible
inline-code fix used elsewhere (use the same foreground color, e.g., the
darker/accessibility-approved hex or CSS variable and the same background/border
values) so the text color meets contrast guidelines and remains consistent with
other inline code styling.
- Around line 173-181: The inline code color for table cells (selectors "td
code" and "th code") uses `#e83e8c` which fails WCAG AA contrast for small text;
update the color value to a darker shade (for example `#d63384` or `#c21d65`) to
achieve at least a 4.5:1 contrast ratio against the existing background `#f6f8fa`,
then verify the new contrast with an accessibility tool and commit the change in
the docs-layout SCSS where the td code / th code rules are defined.

In `@app/components/public-api-docs/index.ts`:
- Around line 1-2: The current import attempts to pull named exports
SwaggerUIBundle and SwaggerUIStandalonePreset from swagger-ui-dist which doesn't
export them; replace the incorrect import by importing the actual bundle files
(import SwaggerUIBundle from 'swagger-ui-dist/swagger-ui-bundle.js' and import
SwaggerUIStandalonePreset from
'swagger-ui-dist/swagger-ui-standalone-preset.js') or switch to the 'swagger-ui'
package and import from there, and remove the `@ts-expect-error` comment;
reference the symbols SwaggerUIBundle, SwaggerUIStandalonePreset and
getAbsoluteFSPath when updating the import lines in the module initializing the
Swagger UI.

In `@app/services/store.js`:
- Line 1: Delete the duplicate "store.js" file and keep the TypeScript
"store.ts" version; both currently export the same default from
'ember-data/store' so removing store.js will not affect imports (which reference
ember-data/store directly); remove store.js from the repo/commit, confirm no
other files import "store.js" by name, and run the build/tests to ensure no
breakage.

In `@docs/components/ak-accordion-demo/groups.md`:
- Line 9: The `@defaultOpen` value in the AkAccordion::Group demo is using
"accordion-open" which doesn't match the IDs defined in accordionList
("accordion-secondary" and "accordion-primary"), so replace the `@defaultOpen`
entry with a valid ID (e.g., "accordion-secondary") or add an inline comment
explaining the mismatch is intentional; update the AkAccordion::Group line
(symbol: AkAccordion::Group, attribute: `@defaultOpen`) to reference an existing
accordion ID from accordionList (symbols: accordionList, "accordion-secondary",
"accordion-primary") or document the intended behavior.

In `@docs/components/ak-autocomplete-demo/basic.md`:
- Around line 31-36: The property searchQuery in the component is missing the
`@tracked` decorator so template updates won't run when handleChange mutates it;
fix by importing tracked from "@glimmer/tracking" (if not already) and add the
`@tracked` decorator to the searchQuery property declaration (the symbol
searchQuery) so changes performed by the handleChange(searchValue) action
trigger re-rendering.

In `@docs/components/ak-autocomplete-demo/loading.md`:
- Around line 18-27: The demo's searchQuery field is mutated by handleChange but
not marked as reactive, so template updates can be missed; fix by importing and
applying the `@tracked` decorator to the searchQuery property (update the class
export that defines options, searchQuery and handleChange) so changes in
handleChange trigger template re-renders—ensure you add the tracked import and
annotate searchQuery with `@tracked`.

In `@docs/components/ak-autocomplete-demo/with-filter.md`:
- Around line 20-41: The searchQuery field is mutated in the handleChange action
but not reactive; import the tracked decorator from '@glimmer/tracking' and
annotate the searchQuery property with `@tracked` so template bindings update when
handleChange sets this.searchQuery; update the top import list to include
tracked and leave the initial value ('ph') unchanged.

In `@docs/components/ak-icon-button.md`:
- Line 100: The example uses an unsupported prop `@color` on AkIconButton; remove
the `@color`="danger" or replace it with a supported `@borderColor` value. Update
the example line for AkIconButton to omit `@color` or use `@borderColor`="primary"
(or "secondary" / "default") so it matches the component API and documented
props.

In `@docs/components/ak-select-demo/default.md`:
- Around line 23-36: The property selected in the component is mutated by the
handleSelectChange action but lacks reactivity; import the tracked decorator
from `@glimmer/tracking` and annotate the selected field with `@tracked` (e.g., add
"import { tracked } from '@glimmer/tracking';" and change selected to `@tracked`
selected = this.selectItems[0];) so UI updates when handleSelectChange runs;
keep selectItems and handleSelectChange as-is.

In `@docs/components/ak-select-demo/multiple.md`:
- Around line 22-36: The component's selected state is mutated in the
handleSelectChange action but isn't tracked, so add the `@tracked` decorator to
the selected property and import tracked from '@glimmer/tracking'; update the
declaration of selected (the selected property in the default class) to be
decorated with `@tracked` so Glimmer will reactively update the UI when
handleSelectChange assigns a new value.

In `@docs/components/ak-tabs.md`:
- Line 9: Update the docs/components/ak-tabs.md description to correct the
component name: replace the incorrect "Akt.tabItem" reference with the correct
"AkTabs" so the sentence reads that you should use AkTabs with AkTabs.tabItem
(or simply AkTabs for each tab) and ensure any other mentions of "Akt" are
corrected to "AkTabs".

In `@package.json`:
- Around line 214-215: The package.json includes an unused dependency
"swagger-ui" which is not imported anywhere (only "swagger-ui-dist" is used by
the components public-api-docs/api-endpoints, public-api-docs/schemas, and
public-api-docs), so remove the "swagger-ui" entry from package.json to reduce
bundle size and update lockfile by running your package manager (e.g.,
npm/yarn/pnpm install) to ensure the removal is reflected; confirm no imports of
"swagger-ui" remain before committing.
- Line 211: Remove the unused npm package entry "path": "^0.12.7" from
package.json and update lockfiles by running the package manager (e.g., npm
uninstall path or remove the line and run npm install / npm ci) so the
dependency and its lockfile references are cleared; verify no imports reference
the npm package (code references use Node's built-in path in files like
staticserver/index.js and .docfy-config.js).

---

Nitpick comments:
In `@docs/components/ak-accordion-demo/with-icon.md`:
- Around line 64-66: The handleChange method currently flips this[id] directly
which can mutate unexpected properties; guard dynamic key updates by
implementing an allowlist of valid accordion keys (e.g., const allowed =
['panel1','panel2','panel3'] or similar) and only perform the toggle when id is
included in that list, otherwise ignore or log a warning; update the
handleChange(id) implementation to validate id against the allowlist before
assigning to this[id] so only known fields are mutated.

In `@docs/components/ak-menu-demo/default.md`:
- Around line 27-31: The demo's menuData entries include an icon property that
isn't rendered; update the template that renders the menu (where AkTypography
currently displays item.label) to also render the item's icon (e.g., alongside
or before label) using the project's icon component or an <Icon/> equivalent so
icons from menuData are visible, or if icons are intentionally unused, add a
clarifying comment in the demo next to menuData to explain why icon is present
but not rendered.

In `@docs/components/ak-popover.md`:
- Line 18: The table row for the prop `arrowColor` is vague; update its
description to clearly state the expected values and usage by replacing "light
or dark" with a concise phrase such as "Arrow color theme: 'light' | 'dark'
(controls popover arrow styling)" so readers understand the allowed string
values and purpose of `arrowColor`.

In `@docs/components/ak-typography.md`:
- Line 14: Update the docs entry for the `tag` prop in ak-typography to clarify
what the "auto" default means: state that `tag` defaults to "auto" which causes
the component (AKTypography / <AKTypography>) to choose the HTML element
automatically based on the `variant` (or text purpose) — e.g., headings map to
<h1>-<h6>, body text to <p>/span — so readers understand how the element is
selected when `tag` is not provided.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 0acf0557-5455-4bbd-a89b-ae7b3feb3726

📥 Commits

Reviewing files that changed from the base of the PR and between 17b412c and c2936fe.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (74)
  • .docfy-config.js
  • .eslintrc.js
  • app/components/ak-tree/index.ts
  • app/components/ak-tree/provider/index.ts
  • app/components/docs-layout/index.hbs
  • app/components/docs-layout/index.scss
  • app/components/docs-layout/index.ts
  • app/components/public-api-docs/api-endpoints/index.ts
  • app/components/public-api-docs/index.ts
  • app/components/public-api-docs/schemas/index.ts
  • app/router.ts
  • app/services/store.js
  • app/templates/docs.hbs
  • app/utils/freshdesk.ts
  • config/ember-cli-update.json
  • docs/components/ak-accordion-demo/accordion-presets.md
  • docs/components/ak-accordion-demo/custom.md
  • docs/components/ak-accordion-demo/default.md
  • docs/components/ak-accordion-demo/groups.md
  • docs/components/ak-accordion-demo/mount-unmount.md
  • docs/components/ak-accordion-demo/with-icon.md
  • docs/components/ak-accordion.md
  • docs/components/ak-appbar.md
  • docs/components/ak-autocomplete-demo/basic.md
  • docs/components/ak-autocomplete-demo/loading.md
  • docs/components/ak-autocomplete-demo/with-filter.md
  • docs/components/ak-autocomplete.md
  • docs/components/ak-button.md
  • docs/components/ak-checkbox-tree-demo/basic.md
  • docs/components/ak-checkbox-tree-demo/disabled.md
  • docs/components/ak-checkbox-tree-demo/no-cascade.md
  • docs/components/ak-checkbox-tree-demo/without-checkboxes.md
  • docs/components/ak-checkbox-tree.md
  • docs/components/ak-checkbox.md
  • docs/components/ak-chip-demo/deletable.md
  • docs/components/ak-chip.md
  • docs/components/ak-clipboard.md
  • docs/components/ak-date-picker.md
  • docs/components/ak-divider.md
  • docs/components/ak-drawer.md
  • docs/components/ak-icon-button.md
  • docs/components/ak-icon.md
  • docs/components/ak-link.md
  • docs/components/ak-list.md
  • docs/components/ak-loader.md
  • docs/components/ak-menu-demo/default.md
  • docs/components/ak-menu-demo/with-icons.md
  • docs/components/ak-menu.md
  • docs/components/ak-modal.md
  • docs/components/ak-pagination.md
  • docs/components/ak-popover-demo/default.md
  • docs/components/ak-popover.md
  • docs/components/ak-radio.md
  • docs/components/ak-select-demo/default.md
  • docs/components/ak-select-demo/multiple.md
  • docs/components/ak-select.md
  • docs/components/ak-skeleton.md
  • docs/components/ak-stack.md
  • docs/components/ak-table-demo/default.md
  • docs/components/ak-table.md
  • docs/components/ak-tabs-demo/button-variant.md
  • docs/components/ak-tabs-demo/custom-badge-content.md
  • docs/components/ak-tabs-demo/link-variant.md
  • docs/components/ak-tabs.md
  • docs/components/ak-text-field-demo/with-event.md
  • docs/components/ak-text-field.md
  • docs/components/ak-toggle.md
  • docs/components/ak-tooltip.md
  • docs/components/ak-tree.md
  • docs/components/ak-typography.md
  • docs/index.md
  • ember-cli-build.js
  • package.json
  • types/global.d.ts

Comment on lines +173 to +181
td code,
th code {
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
font-size: 13px;
background: #f6f8fa;
padding: 2px 6px;
border-radius: 4px;
color: #e83e8c;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Address contrast ratio for inline code in tables.

SonarCloud flags that #e83e8c on #f6f8fa background may not meet WCAG AA contrast requirements for small text (needs 4.5:1 ratio). Consider using a darker shade like #d63384 or #c21d65 to improve accessibility.

🎨 Proposed fix for better contrast
   td code,
   th code {
     font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
     font-size: 13px;
     background: `#f6f8fa`;
     padding: 2px 6px;
     border-radius: 4px;
-    color: `#e83e8c`;
+    color: `#d63384`;
   }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
td code,
th code {
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
font-size: 13px;
background: #f6f8fa;
padding: 2px 6px;
border-radius: 4px;
color: #e83e8c;
}
td code,
th code {
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
font-size: 13px;
background: `#f6f8fa`;
padding: 2px 6px;
border-radius: 4px;
color: `#d63384`;
}
🧰 Tools
🪛 GitHub Check: SonarCloud Code Analysis

[warning] 180-180: Text does not meet the minimal contrast requirement with its background.

See more on https://sonarcloud.io/project/issues?id=appknox_irene&issues=AZ0AAS1m6xdaFpLMExq9&open=AZ0AAS1m6xdaFpLMExq9&pullRequest=1676

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/components/docs-layout/index.scss` around lines 173 - 181, The inline
code color for table cells (selectors "td code" and "th code") uses `#e83e8c`
which fails WCAG AA contrast for small text; update the color value to a darker
shade (for example `#d63384` or `#c21d65`) to achieve at least a 4.5:1 contrast
ratio against the existing background `#f6f8fa`, then verify the new contrast with
an accessibility tool and commit the change in the docs-layout SCSS where the td
code / th code rules are defined.

Comment thread app/components/docs-layout/index.scss
Comment on lines 1 to +2
// @ts-expect-error no type defs
import SwaggerUI from 'swagger-ui';
import { SwaggerUIBundle, SwaggerUIStandalonePreset } from 'swagger-ui-dist';
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

swagger-ui-dist npm package exports SwaggerUIBundle SwaggerUIStandalonePreset

💡 Result:

The swagger-ui-dist npm package (latest version 5.32.0 as of Feb 2026) exposes Swagger UI's dist folder contents for static serving. Its primary export is getAbsoluteFSPath (also called absolutePath in older docs) to get the filesystem path to the dist assets. Official npm README and Swagger docs claim it supports importing { SwaggerUIBundle, SwaggerUIStandalonePreset } from "swagger-ui-dist", with example: import { SwaggerUIBundle, SwaggerUIStandalonePreset } from "swagger-ui-dist"; However, a 2023 GitHub issue (#9163) reports that require('swagger-ui-dist') only returns { absolutePath: fn, getAbsoluteFSPath: fn }, without exporting SwaggerUIBundle or SwaggerUIStandalonePreset. This issue was for v5.4.2 and is closed, but no resolution snippet shown. The docs may be outdated or the feature unimplemented/inconsistent across versions/environments. The package includes files like swagger-ui-bundle.js (UMD bundle exporting SwaggerUIBundle globally) and swagger-ui-standalone-preset.js. To use these in code, import/require the specific bundle files from the package path, e.g.: import SwaggerUIBundle from 'swagger-ui-dist/swagger-ui-bundle.js'; import SwaggerUIStandalonePreset from 'swagger-ui-dist/swagger-ui-standalone-preset.js'; For static serving (intended use): const path = require('swagger-ui-dist').getAbsoluteFSPath; then serve files from that path. Recommend using 'swagger-ui' package instead for proper module bundling with dependencies.

Citations:


🏁 Script executed:

# Verify the file exists and examine its contents
if [ -f "app/components/public-api-docs/index.ts" ]; then
  echo "=== File exists ==="
  wc -l app/components/public-api-docs/index.ts
  echo ""
  echo "=== Lines 1-10 ==="
  head -10 app/components/public-api-docs/index.ts
  echo ""
  echo "=== Lines around line 72 (SwaggerUI usage) ==="
  sed -n '65,80p' app/components/public-api-docs/index.ts
else
  echo "File not found"
fi

Repository: appknox/irene

Length of output: 1078


🏁 Script executed:

# Check if there are any other imports from swagger-ui or swagger-ui-dist in the codebase
echo "=== Checking for swagger-ui imports ==="
rg "swagger-ui" --type ts --type tsx -n | head -20

Repository: appknox/irene

Length of output: 141


🏁 Script executed:

# Check package.json to see what version of swagger-ui-dist is installed
echo "=== Checking package.json dependencies ==="
if [ -f "package.json" ]; then
  cat package.json | grep -A 5 -B 5 "swagger-ui"
fi

Repository: appknox/irene

Length of output: 388


Incorrect import pattern: swagger-ui-dist does not export SwaggerUIBundle and SwaggerUIStandalonePreset as named exports.

The swagger-ui-dist package is a distribution-only package for serving static assets. Named exports of SwaggerUIBundle and SwaggerUIStandalonePreset are not available; the package only exports getAbsoluteFSPath for locating dist assets.

To use Swagger UI programmatically, either:

  1. Import from the specific bundle files within the package:
    import SwaggerUIBundle from 'swagger-ui-dist/swagger-ui-bundle.js';
    import SwaggerUIStandalonePreset from 'swagger-ui-dist/swagger-ui-standalone-preset.js';
  2. Use the swagger-ui package instead (already in package.json as ^5.30.3).

The @ts-expect-error comment is masking the actual issue.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/components/public-api-docs/index.ts` around lines 1 - 2, The current
import attempts to pull named exports SwaggerUIBundle and
SwaggerUIStandalonePreset from swagger-ui-dist which doesn't export them;
replace the incorrect import by importing the actual bundle files (import
SwaggerUIBundle from 'swagger-ui-dist/swagger-ui-bundle.js' and import
SwaggerUIStandalonePreset from
'swagger-ui-dist/swagger-ui-standalone-preset.js') or switch to the 'swagger-ui'
package and import from there, and remove the `@ts-expect-error` comment;
reference the symbols SwaggerUIBundle, SwaggerUIStandalonePreset and
getAbsoluteFSPath when updating the import lines in the module initializing the
Swagger UI.

Comment thread app/services/store.js
@@ -0,0 +1 @@
export { default } from 'ember-data/store';
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if other service files use TypeScript
fd -e ts -e js . app/services --exec basename {} \; | sort | uniq -c | sort -rn

Repository: appknox/irene

Length of output: 978


🏁 Script executed:

cat app/services/store.js

Repository: appknox/irene

Length of output: 100


🏁 Script executed:

cat app/services/store.ts

Repository: appknox/irene

Length of output: 100


🏁 Script executed:

# Check if store.js is imported anywhere in the codebase
rg "from.*store\.js" --type ts --type js

Repository: appknox/irene

Length of output: 39


🏁 Script executed:

# Check if store.ts is imported anywhere in the codebase
rg "from.*store'" --type ts --type js | head -20

Repository: appknox/irene

Length of output: 1948


🏁 Script executed:

# Check if the store service is injected using `@service` decorator
rg "@service.*store" --type ts --type js | head -20

Repository: appknox/irene

Length of output: 1382


🏁 Script executed:

# Check git history for both files
git log --oneline -- app/services/store.js app/services/store.ts | head -10

Repository: appknox/irene

Length of output: 82


🏁 Script executed:

# Search for any references to app/services/store in test files or config
rg "app/services/store" --type ts --type js

Repository: appknox/irene

Length of output: 39


🏁 Script executed:

# Check if there are any imports that alias the store differently
rg "import.*store" app/services --type ts | grep -v "ember-data"

Repository: appknox/irene

Length of output: 39


🏁 Script executed:

# Check the commit that added these files
git show c2936fea --stat | grep -i store

Repository: appknox/irene

Length of output: 7742


Delete the duplicate store.js file.

Both store.js and store.ts exist in app/services/ with identical content, but neither is used anywhere in the codebase. All imports reference ember-data/store directly. Keep store.ts (the TypeScript version, consistent with the rest of the codebase) and remove store.js.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/services/store.js` at line 1, Delete the duplicate "store.js" file and
keep the TypeScript "store.ts" version; both currently export the same default
from 'ember-data/store' so removing store.js will not affect imports (which
reference ember-data/store directly); remove store.js from the repo/commit,
confirm no other files import "store.js" by name, and run the build/tests to
ensure no breakage.

<AkStack @direction="column" @spacing="3" @width="full">
<AkStack @direction="column" @width="full">
<AkTypography @variant="h4" @color="inherit" @gutterBottom={{true}}>Group with multiple expanded</AkTypography>
<AkAccordion::Group @openMultiple={{true}} @defaultOpen={{array "accordion-open"}} class="w-full" as |actx|>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Potential mismatch in @defaultOpen value.

The @defaultOpen array contains "accordion-open", but the accordionList in the JS component only defines IDs "accordion-secondary" and "accordion-primary". This mismatch means no accordion will be open by default in the "multiple expanded" example.

If this is intentional to demonstrate the behavior when no matching ID exists, consider adding a comment. Otherwise, update to use an existing ID like "accordion-secondary".

💡 Suggested fix if a default open accordion is intended
-    <AkAccordion::Group `@openMultiple`={{true}} `@defaultOpen`={{array "accordion-open"}} class="w-full" as |actx|>
+    <AkAccordion::Group `@openMultiple`={{true}} `@defaultOpen`={{array "accordion-secondary"}} class="w-full" as |actx|>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<AkAccordion::Group @openMultiple={{true}} @defaultOpen={{array "accordion-open"}} class="w-full" as |actx|>
<AkAccordion::Group `@openMultiple`={{true}} `@defaultOpen`={{array "accordion-secondary"}} class="w-full" as |actx|>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-accordion-demo/groups.md` at line 9, The `@defaultOpen`
value in the AkAccordion::Group demo is using "accordion-open" which doesn't
match the IDs defined in accordionList ("accordion-secondary" and
"accordion-primary"), so replace the `@defaultOpen` entry with a valid ID (e.g.,
"accordion-secondary") or add an inline comment explaining the mismatch is
intentional; update the AkAccordion::Group line (symbol: AkAccordion::Group,
attribute: `@defaultOpen`) to reference an existing accordion ID from
accordionList (symbols: accordionList, "accordion-secondary",
"accordion-primary") or document the intended behavior.

Comment on lines +23 to +36
export default class extends Component {
selectItems = [
{ label: 'Maintainer', value: 'maintainer' },
{ label: 'Developer', value: 'developer' },
{ label: 'Reporter', value: 'reporter' },
];

selected = this.selectItems[0];

@action
handleSelectChange(selected) {
this.selected = selected;
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Missing @tracked decorator on reactive property.

The selected property is mutated in the handleSelectChange action (line 34) but is not decorated with @tracked. In Ember Octane, properties that are mutated and should trigger UI updates must be tracked. Without this decorator, the UI will not reactively update when the selection changes.

🔧 Proposed fix
 import Component from '@glimmer/component';
 import { action } from '@ember/object';
+import { tracked } from '@glimmer/tracking';

 export default class extends Component {
   selectItems = [
     { label: 'Maintainer', value: 'maintainer' },
     { label: 'Developer', value: 'developer' },
     { label: 'Reporter', value: 'reporter' },
   ];

-  selected = this.selectItems[0];
+  `@tracked` selected = this.selectItems[0];

   `@action`
   handleSelectChange(selected) {
     this.selected = selected;
   }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-select-demo/default.md` around lines 23 - 36, The property
selected in the component is mutated by the handleSelectChange action but lacks
reactivity; import the tracked decorator from `@glimmer/tracking` and annotate the
selected field with `@tracked` (e.g., add "import { tracked } from
'@glimmer/tracking';" and change selected to `@tracked` selected =
this.selectItems[0];) so UI updates when handleSelectChange runs; keep
selectItems and handleSelectChange as-is.

Comment on lines +22 to +36
import { action } from '@ember/object';

export default class extends Component {
selectItems = [
{ label: 'Maintainer', value: 'maintainer' },
{ label: 'Developer', value: 'developer' },
{ label: 'Reporter', value: 'reporter' },
];

selected = [this.selectItems[0]];

@action
handleSelectChange(selected) {
this.selected = selected;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

find . -type f -name "multiple.md" | grep -i select

Repository: appknox/irene

Length of output: 101


🏁 Script executed:

cat -n ./docs/components/ak-select-demo/multiple.md

Repository: appknox/irene

Length of output: 1094


🏁 Script executed:

find ./docs -type f -name "*.md" -path "*/ak-select-demo/*" | head -5 | xargs -I {} sh -c 'echo "=== {} ===" && grep -A 20 "export default class" {}'

Repository: appknox/irene

Length of output: 819


🏁 Script executed:

find ./app -type f -name "*.js" -path "*/components/*" | head -10 | xargs -I {} sh -c 'head -30 {} | grep -B5 -A5 "@tracked\|selectItems\|selected"'

Repository: appknox/irene

Length of output: 327


🏁 Script executed:

rg "@tracked" ./app --type js -A 2 -B 2 | head -50

Repository: appknox/irene

Length of output: 39


🏁 Script executed:

cat ./package.json | grep -A 5 -B 5 "ember\|glimmer" | head -30

Repository: appknox/irene

Length of output: 1641


🏁 Script executed:

rg '"(ember|glimmer)":\s*"' ./package.json

Repository: appknox/irene

Length of output: 39


🏁 Script executed:

cat ./package.json | grep -E '"(ember|glimmer|@ember|@glimmer)' | head -20

Repository: appknox/irene

Length of output: 900


🏁 Script executed:

rg "@tracked" . --type js -l | head -20

Repository: appknox/irene

Length of output: 308


🏁 Script executed:

rg "@tracked" ./tests/integration/components/upload-app/index-test.js -B 3 -A 3

Repository: appknox/irene

Length of output: 199


🏁 Script executed:

find ./app/components -type f -name "*.js" -exec grep -l "selected\|@action" {} \; | head -5

Repository: appknox/irene

Length of output: 239


🏁 Script executed:

cat ./app/components/ak-select/index.stories.js | head -100

Repository: appknox/irene

Length of output: 2281


🏁 Script executed:

cat ./app/components/ak-select/index.js | head -60

Repository: appknox/irene

Length of output: 124


🏁 Script executed:

find ./app/components/ak-select -type f | head -10

Repository: appknox/irene

Length of output: 364


🏁 Script executed:

cat ./app/components/ak-select/index.ts | head -80

Repository: appknox/irene

Length of output: 2280


🏁 Script executed:

cat ./app/components/ak-select/index.ts | grep -E "@tracked|selected|@action" -A 2 -B 2

Repository: appknox/irene

Length of output: 178


Track selected state to ensure reactive updates in this Glimmer component demo.

The selected property is mutated in the handleSelectChange action but is not marked @tracked, which may prevent reliable UI updates. Add the @tracked decorator to ensure Glimmer properly tracks state changes.

Suggested fix
 import Component from '@glimmer/component';
 import { action } from '@ember/object';
+import { tracked } from '@glimmer/tracking';

 export default class extends Component {
   selectItems = [
     { label: 'Maintainer', value: 'maintainer' },
     { label: 'Developer', value: 'developer' },
     { label: 'Reporter', value: 'reporter' },
   ];

-  selected = [this.selectItems[0]];
+  `@tracked` selected = [this.selectItems[0]];

   `@action`
   handleSelectChange(selected) {
     this.selected = selected;
   }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-select-demo/multiple.md` around lines 22 - 36, The
component's selected state is mutated in the handleSelectChange action but isn't
tracked, so add the `@tracked` decorator to the selected property and import
tracked from '@glimmer/tracking'; update the declaration of selected (the
selected property in the default class) to be decorated with `@tracked` so Glimmer
will reactively update the UI when handleSelectChange assigns a new value.


# AkTabs

Tabbed navigation. Use AkTabs with Akt.tabItem for each tab.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix typo in component usage description.

"Akt.tabItem" should be "AkTabs" in the description.

📝 Proposed fix
-Tabbed navigation. Use AkTabs with Akt.tabItem for each tab.
+Tabbed navigation. Use AkTabs with AkTabs::Item (or yielded tabItem) for each tab.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Tabbed navigation. Use AkTabs with Akt.tabItem for each tab.
Tabbed navigation. Use AkTabs with AkTabs::Item (or yielded tabItem) for each tab.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-tabs.md` at line 9, Update the docs/components/ak-tabs.md
description to correct the component name: replace the incorrect "Akt.tabItem"
reference with the correct "AkTabs" so the sentence reads that you should use
AkTabs with AkTabs.tabItem (or simply AkTabs for each tab) and ensure any other
mentions of "Akt" are corrected to "AkTabs".

Comment thread package.json
"ember-data-resources": "^5.3.2",
"ember-websockets": "^10.2.1",
"iconify-icon": "^2.3.0",
"path": "^0.12.7",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check where path is imported to understand the use case
rg -n "from ['\"]path['\"]" --type ts --type js
rg -n "require\(['\"]path['\"]" --type ts --type js

Repository: appknox/irene

Length of output: 159


🏁 Script executed:

# Check the context of path usage in both files
head -20 staticserver/index.js
echo "---"
head -20 .docfy-config.js

Repository: appknox/irene

Length of output: 766


🏁 Script executed:

# Check package.json to see where path is listed
rg -A 5 -B 5 '"path"' package.json

Repository: appknox/irene

Length of output: 354


🏁 Script executed:

# Check if there's any browser-side code that might use path
rg -l "browser|webpack|bundler" --type ts --type js | head -10

Repository: appknox/irene

Length of output: 660


🏁 Script executed:

# Check if path is imported anywhere else we might have missed
rg "path" package.json | grep -i import

Repository: appknox/irene

Length of output: 39


🏁 Script executed:

# Check if path is explicitly imported from the npm package (not built-in)
# Look for imports that specify path as a dependency
rg "from.*path.*package|require.*path.*from" --type ts --type js

# Check build/webpack config files
fd "webpack|build|rollup|vite" -t f

# Check if path appears in any bundled or app-side code
rg "path" app --type ts --type js | head -20

Repository: appknox/irene

Length of output: 1939


🏁 Script executed:

# Check the actual npm path package to understand what it provides
# Also check if it's listed as a prod or dev dependency
grep -A 2 -B 2 '"path"' package.json | head -20

Repository: appknox/irene

Length of output: 198


🏁 Script executed:

# Search more broadly for any code that might be trying to use path operations in browser context
rg "path\." --type ts --type js app/ | head -30

Repository: appknox/irene

Length of output: 283


🏁 Script executed:

# Check if path is dynamically required or used in any way we missed
rg "require.*path|import.*path" --type ts --type js -A 2 -B 2 | grep -v node_modules | grep -v dist

Repository: appknox/irene

Length of output: 746


🏁 Script executed:

# Check if path is used in package.json scripts or build config
cat package.json | grep -A 30 '"scripts"'

Repository: appknox/irene

Length of output: 1676


Remove the unused path dependency from package.json.

The npm package path@^0.12.7 is listed as a dependency but is never actually imported or used. The only imports of path in the codebase (staticserver/index.js and .docfy-config.js) reference Node.js's built-in path module, not the npm package. Since this is a Node.js/Ember application with no browser-side path operations requiring a polyfill, this dependency can be safely removed.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` at line 211, Remove the unused npm package entry "path":
"^0.12.7" from package.json and update lockfiles by running the package manager
(e.g., npm uninstall path or remove the line and run npm install / npm ci) so
the dependency and its lockfile references are cleared; verify no imports
reference the npm package (code references use Node's built-in path in files
like staticserver/index.js and .docfy-config.js).

Comment thread package.json
Comment on lines +214 to +215
"swagger-ui": "^5.30.3",
"swagger-ui-dist": "^5.31.0"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if swagger-ui (not swagger-ui-dist) is still imported anywhere
rg -n "from ['\"]swagger-ui['\"]" --type ts --type js
rg -n "require\(['\"]swagger-ui['\"]" --type ts --type js

Repository: appknox/irene

Length of output: 39


🏁 Script executed:

#!/bin/bash
# Check if swagger-ui-dist IS being imported
rg -n "swagger-ui-dist" --type ts --type js --type html

Repository: appknox/irene

Length of output: 438


Remove the unused swagger-ui dependency.

The codebase only imports from swagger-ui-dist (used in 3 components: public-api-docs/api-endpoints, public-api-docs/schemas, and public-api-docs). The swagger-ui package at line 214 is not imported anywhere and can be removed to reduce bundle size.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` around lines 214 - 215, The package.json includes an unused
dependency "swagger-ui" which is not imported anywhere (only "swagger-ui-dist"
is used by the components public-api-docs/api-endpoints,
public-api-docs/schemas, and public-api-docs), so remove the "swagger-ui" entry
from package.json to reduce bundle size and update lockfile by running your
package manager (e.g., npm/yarn/pnpm install) to ensure the removal is
reflected; confirm no imports of "swagger-ui" remain before committing.

@SmitGala SmitGala force-pushed the PD-2208-Ember-Docfy-V6 branch from c2936fe to 2b34d76 Compare April 1, 2026 16:22
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud bot commented Apr 1, 2026

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (3)
app/components/ak-clipboard/index.stories.js (1)

59-80: .bind({}) is unnecessary for arrow functions.

WithTargetTemplate is an arrow function that doesn't reference this and instead creates a fresh WithTargetContext() instance. Arrow functions cannot have their this rebound via .bind(), making line 80's .bind({}) a no-op. Consider removing it for clarity.

♻️ Suggested simplification
-export const WithTarget = WithTargetTemplate.bind({});
+export const WithTarget = WithTargetTemplate;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/components/ak-clipboard/index.stories.js` around lines 59 - 80, The
export uses .bind({}) on an arrow function which is a no-op—remove the
unnecessary bind: change the export so WithTarget is assigned directly from
WithTargetTemplate (leave WithTargetTemplate and WithTargetContext as-is) to
avoid confusion and improve clarity.
docs/components/ak-divider.md (1)

8-8: Consider completing the sentence for better clarity.

The description uses a sentence fragment without an explicit subject. While acceptable in technical documentation, completing it would improve readability.

✨ Suggested improvement
-A thin line that separates content. Can be horizontal or vertical.
+A thin line that separates content. It can be horizontal or vertical.

As per static analysis tool hint: "To form a complete sentence, be sure to include a subject."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-divider.md` at line 8, The description for the ak-divider
component is a sentence fragment; update the text to a complete sentence by
adding a clear subject and verb (e.g., "The ak-divider is a thin line that
separates content and can be horizontal or vertical." or "A thin line that
separates content and can be horizontal or vertical." → "It is a thin line that
separates content and can be horizontal or vertical."). Edit the content in
ak-divider.md (the ak-divider component description) to replace the fragment
with one of these complete-sentence variants to improve clarity and satisfy the
static analysis rule.
package.json (1)

199-199: Confirm intentional exact version pinning.

Changed from ^1.5.0 to 1.5.0 (exact version). This prevents automatic patch updates. If this is to avoid a known issue with newer versions, consider adding a comment explaining why.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` at line 199, The dependency entry for "@novnc/novnc" was
changed from a caret range to an exact version ("1.5.0"), which pins patches and
prevents automatic updates; if this is intentional (e.g., to avoid a known
regression), update the package.json dependency comment or repository docs to
state the rationale and include the issue/PR reference and the author/date;
otherwise revert the change back to a semver range (e.g., "^1.5.0") in the
package.json. Ensure you edit the dependency key "@novnc/novnc" to reflect the
chosen approach and add a short comment in package.json or the repo's
CHANGELOG/DEPENDENCIES note describing why exact pinning was chosen (include
link/ID for traceability).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app/components/ak-clipboard/index.stories.js`:
- Around line 38-57: In the WithTargetContext class update the onSuccess
action's alert message to correct the typo: change "successfull" to "successful"
inside the template string in the onSuccess(event) method so the alert reads
`${event.text} is successful.`; ensure only the string spelling is changed and
behavior remains the same.

In `@docs/components/ak-accordion-demo/custom.md`:
- Line 3: The subtitle text "Customized Summary UI / Summary Icon Only / Summary
Text Only" is repetitive and should be tightened into a clearer list-style
subtitle; replace that line with a concise phrase such as "Customized Summary
UI, Summary Icon Only, and Summary Text Only" (or convert it into a short
bullet/list under the section header) to improve readability and tone.
- Line 13: The template currently uses an invalid quoted dynamic argument for
AkIcon's `@iconName`; change it to pass a dynamic value using the if helper so
`@iconName` is bound to the full icon name string based on acs.isExpanded (choose
"arrow-drop-up" when true and "arrow-drop-down" when false) and remove the outer
quotes so the argument is passed as a dynamic expression rather than a literal
string.

In `@docs/components/ak-divider.md`:
- Around line 18-19: Update the prop descriptions for `height` and `width` in
the ak-divider docs to reflect that both control divider dimensions regardless
of orientation: change the `height` description to something like "Length of the
divider (e.g., 200px)" and the `width` description to "Thickness of the divider
(e.g., 1px)"; update the text in docs/components/ak-divider.md where the props
table lists `height` and `width` so examples and text are consistent with the
vertical example that uses both `@height='200px'` and `@width='1px'`.

In `@docs/components/ak-table-demo/full-bordered.md`:
- Around line 5-7: Update the heading and description to use consistent
hyphenation: change “Full bordered” to “Full-bordered” in the document title and
descriptive sentence, and ensure the variant example uses the exact marker
`@variant`='full-bordered' to match the hyphenated label (references: the heading
text and the string `@variant`='full-bordered').

---

Nitpick comments:
In `@app/components/ak-clipboard/index.stories.js`:
- Around line 59-80: The export uses .bind({}) on an arrow function which is a
no-op—remove the unnecessary bind: change the export so WithTarget is assigned
directly from WithTargetTemplate (leave WithTargetTemplate and WithTargetContext
as-is) to avoid confusion and improve clarity.

In `@docs/components/ak-divider.md`:
- Line 8: The description for the ak-divider component is a sentence fragment;
update the text to a complete sentence by adding a clear subject and verb (e.g.,
"The ak-divider is a thin line that separates content and can be horizontal or
vertical." or "A thin line that separates content and can be horizontal or
vertical." → "It is a thin line that separates content and can be horizontal or
vertical."). Edit the content in ak-divider.md (the ak-divider component
description) to replace the fragment with one of these complete-sentence
variants to improve clarity and satisfy the static analysis rule.

In `@package.json`:
- Line 199: The dependency entry for "@novnc/novnc" was changed from a caret
range to an exact version ("1.5.0"), which pins patches and prevents automatic
updates; if this is intentional (e.g., to avoid a known regression), update the
package.json dependency comment or repository docs to state the rationale and
include the issue/PR reference and the author/date; otherwise revert the change
back to a semver range (e.g., "^1.5.0") in the package.json. Ensure you edit the
dependency key "@novnc/novnc" to reflect the chosen approach and add a short
comment in package.json or the repo's CHANGELOG/DEPENDENCIES note describing why
exact pinning was chosen (include link/ID for traceability).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 15a4d5e6-c1ec-43b5-85d4-1749084185f9

📥 Commits

Reviewing files that changed from the base of the PR and between c2936fe and 2b34d76.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (76)
  • .docfy-config.js
  • .eslintrc.js
  • app/components/ak-clipboard/index.stories.js
  • app/components/docs-layout/index.hbs
  • app/components/docs-layout/index.scss
  • app/components/docs-layout/index.ts
  • app/router.ts
  • app/templates/docs.hbs
  • docs/components/ak-accordion-demo/accordion-presets.md
  • docs/components/ak-accordion-demo/custom.md
  • docs/components/ak-accordion-demo/default.md
  • docs/components/ak-accordion-demo/groups.md
  • docs/components/ak-accordion-demo/mount-unmount.md
  • docs/components/ak-accordion-demo/with-icon.md
  • docs/components/ak-accordion.md
  • docs/components/ak-appbar.md
  • docs/components/ak-autocomplete-demo/01-basic.md
  • docs/components/ak-autocomplete-demo/02-loading.md
  • docs/components/ak-autocomplete-demo/03-empty-state.md
  • docs/components/ak-autocomplete-demo/04-with-filter.md
  • docs/components/ak-autocomplete.md
  • docs/components/ak-button.md
  • docs/components/ak-checkbox-tree-demo/basic.md
  • docs/components/ak-checkbox-tree-demo/disabled.md
  • docs/components/ak-checkbox-tree-demo/no-cascade.md
  • docs/components/ak-checkbox-tree-demo/without-checkboxes.md
  • docs/components/ak-checkbox-tree.md
  • docs/components/ak-checkbox.md
  • docs/components/ak-chip-demo/deletable.md
  • docs/components/ak-chip.md
  • docs/components/ak-clipboard-demo/copy-me.md
  • docs/components/ak-clipboard-demo/copy-target.md
  • docs/components/ak-clipboard.md
  • docs/components/ak-date-picker.md
  • docs/components/ak-divider.md
  • docs/components/ak-drawer-demo/basic.md
  • docs/components/ak-drawer-demo/right-anchor.md
  • docs/components/ak-drawer.md
  • docs/components/ak-icon-button.md
  • docs/components/ak-icon.md
  • docs/components/ak-link.md
  • docs/components/ak-list.md
  • docs/components/ak-loader.md
  • docs/components/ak-menu-demo/default.md
  • docs/components/ak-menu-demo/disabled.md
  • docs/components/ak-menu-demo/with-icons.md
  • docs/components/ak-menu.md
  • docs/components/ak-modal.md
  • docs/components/ak-pagination-demo/basic.md
  • docs/components/ak-pagination-demo/compact.md
  • docs/components/ak-pagination-demo/custom-ui.md
  • docs/components/ak-pagination.md
  • docs/components/ak-popover-demo/default.md
  • docs/components/ak-popover.md
  • docs/components/ak-radio-demo/column.md
  • docs/components/ak-radio.md
  • docs/components/ak-select-demo/default.md
  • docs/components/ak-select-demo/multiple.md
  • docs/components/ak-select.md
  • docs/components/ak-skeleton.md
  • docs/components/ak-stack.md
  • docs/components/ak-table-demo/default.md
  • docs/components/ak-table-demo/full-bordered.md
  • docs/components/ak-table.md
  • docs/components/ak-tabs-demo/button-variant.md
  • docs/components/ak-tabs-demo/custom-badge-content.md
  • docs/components/ak-tabs-demo/link-variant.md
  • docs/components/ak-tabs.md
  • docs/components/ak-text-field-demo/with-event.md
  • docs/components/ak-text-field.md
  • docs/components/ak-toggle.md
  • docs/components/ak-tooltip.md
  • docs/components/ak-tree.md
  • docs/components/ak-typography.md
  • docs/index.md
  • package.json
✅ Files skipped from review due to trivial changes (64)
  • app/templates/docs.hbs
  • docs/index.md
  • docs/components/ak-text-field-demo/with-event.md
  • .docfy-config.js
  • docs/components/ak-list.md
  • docs/components/ak-typography.md
  • docs/components/ak-accordion-demo/default.md
  • docs/components/ak-checkbox-tree-demo/no-cascade.md
  • docs/components/ak-link.md
  • docs/components/ak-checkbox-tree.md
  • docs/components/ak-select-demo/default.md
  • docs/components/ak-chip.md
  • docs/components/ak-autocomplete-demo/02-loading.md
  • docs/components/ak-checkbox-tree-demo/disabled.md
  • docs/components/ak-checkbox-tree-demo/basic.md
  • docs/components/ak-accordion-demo/mount-unmount.md
  • docs/components/ak-tooltip.md
  • docs/components/ak-icon-button.md
  • docs/components/ak-select.md
  • docs/components/ak-chip-demo/deletable.md
  • docs/components/ak-modal.md
  • docs/components/ak-drawer-demo/basic.md
  • docs/components/ak-checkbox.md
  • docs/components/ak-checkbox-tree-demo/without-checkboxes.md
  • docs/components/ak-autocomplete.md
  • docs/components/ak-menu-demo/disabled.md
  • docs/components/ak-clipboard-demo/copy-me.md
  • docs/components/ak-icon.md
  • docs/components/ak-accordion-demo/groups.md
  • docs/components/ak-tree.md
  • docs/components/ak-autocomplete-demo/03-empty-state.md
  • docs/components/ak-button.md
  • docs/components/ak-popover-demo/default.md
  • docs/components/ak-radio.md
  • docs/components/ak-loader.md
  • docs/components/ak-popover.md
  • docs/components/ak-clipboard.md
  • docs/components/ak-select-demo/multiple.md
  • docs/components/ak-table.md
  • docs/components/ak-date-picker.md
  • docs/components/ak-toggle.md
  • docs/components/ak-text-field.md
  • docs/components/ak-pagination.md
  • docs/components/ak-drawer.md
  • docs/components/ak-pagination-demo/basic.md
  • docs/components/ak-tabs-demo/custom-badge-content.md
  • docs/components/ak-autocomplete-demo/01-basic.md
  • docs/components/ak-table-demo/default.md
  • docs/components/ak-accordion-demo/accordion-presets.md
  • docs/components/ak-accordion.md
  • docs/components/ak-appbar.md
  • docs/components/ak-radio-demo/column.md
  • docs/components/ak-clipboard-demo/copy-target.md
  • docs/components/ak-drawer-demo/right-anchor.md
  • docs/components/ak-tabs-demo/button-variant.md
  • docs/components/ak-pagination-demo/compact.md
  • docs/components/ak-menu.md
  • docs/components/ak-menu-demo/with-icons.md
  • docs/components/ak-menu-demo/default.md
  • docs/components/ak-autocomplete-demo/04-with-filter.md
  • app/components/docs-layout/index.scss
  • docs/components/ak-pagination-demo/custom-ui.md
  • docs/components/ak-tabs-demo/link-variant.md
  • docs/components/ak-stack.md
🚧 Files skipped from review as they are similar to previous changes (6)
  • docs/components/ak-skeleton.md
  • app/router.ts
  • .eslintrc.js
  • docs/components/ak-tabs.md
  • app/components/docs-layout/index.hbs
  • app/components/docs-layout/index.ts

Comment on lines +38 to +57
class WithTargetContext {
id = '';

@tracked textToCopy = 'I will be copied!';

@action
updateTextToCopy(event) {
this.textToCopy = event.target.value;
}

@action
onSuccess(event) {
alert(`${event.text} is successfull.`);
}

@action
onError(event) {
alert(`${event.action} errored.`);
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Well-structured context class using Ember's reactivity system.

The refactoring to a class-based context with @tracked state and @action methods is a clean approach for managing story state.

Minor typo: "successfull" → "successful" on line 50.

,

🔤 Proposed typo fix
   `@action`
   onSuccess(event) {
-    alert(`${event.text} is successfull.`);
+    alert(`${event.text} is successful.`);
   }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
class WithTargetContext {
id = '';
@tracked textToCopy = 'I will be copied!';
@action
updateTextToCopy(event) {
this.textToCopy = event.target.value;
}
@action
onSuccess(event) {
alert(`${event.text} is successfull.`);
}
@action
onError(event) {
alert(`${event.action} errored.`);
}
}
class WithTargetContext {
id = '';
`@tracked` textToCopy = 'I will be copied!';
`@action`
updateTextToCopy(event) {
this.textToCopy = event.target.value;
}
`@action`
onSuccess(event) {
alert(`${event.text} is successful.`);
}
`@action`
onError(event) {
alert(`${event.action} errored.`);
}
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/components/ak-clipboard/index.stories.js` around lines 38 - 57, In the
WithTargetContext class update the onSuccess action's alert message to correct
the typo: change "successfull" to "successful" inside the template string in the
onSuccess(event) method so the alert reads `${event.text} is successful.`;
ensure only the string spelling is changed and behavior remains the same.

@@ -0,0 +1,70 @@
# Custom Blocks

Customized Summary UI / Summary Icon Only / Summary Text Only
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Tighten the section descriptor text.

This line reads repetitive and can be clearer as a list-style subtitle (for example: “Customized Summary UI, Summary Icon Only, and Summary Text Only”).

🧰 Tools
🪛 LanguageTool

[style] ~3-~3: This adverb was used twice in the sentence. Consider removing one of them or replacing them with a synonym.
Context: ...y UI / Summary Icon Only / Summary Text Only ```hbs template <AkStack @direction="c...

(ADVERB_REPETITION_PREMIUM)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-accordion-demo/custom.md` at line 3, The subtitle text
"Customized Summary UI / Summary Icon Only / Summary Text Only" is repetitive
and should be tightened into a clearer list-style subtitle; replace that line
with a concise phrase such as "Customized Summary UI, Summary Icon Only, and
Summary Text Only" (or convert it into a short bullet/list under the section
header) to improve readability and tone.

<:summary as |acs|>
<AkStack @justifyContent="space-between" @alignItems="center" @width="full" class="p-2" style="border: 1px solid #2db421; cursor: pointer;" {{on 'click' acs.onSummaryClick}}>
<AkTypography @color="success">Custom Summary UI</AkTypography>
<AkIcon @iconName='arrow-drop-{{if acs.isExpanded "up" "down"}}' @color="success" />
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, let's read the file to confirm the exact content at line 13
cat -n docs/components/ak-accordion-demo/custom.md | head -20

Repository: appknox/irene

Length of output: 1418


🌐 Web query:

Ember angle-bracket component arguments dynamic values template syntax

💡 Result:

In Ember.js (Octane edition and later), angle-bracket components use named arguments prefixed with @ to pass dynamic values. The syntax distinguishes component arguments from HTML attributes. To invoke a component with dynamic values: <TodoItem @item={{this.item}} @done={{false}} @maxItems={{10}} /> - Use CapitalCase for the component name (e.g., instead of {{todo-item}}). - Prefix arguments with @ (e.g., @item). - Wrap dynamic values in {{}} (e.g., @item={{this.item}}). - Static values: @title="Hello". - Self-closing for no content: <Component @arg={{value}} />. Inside the component template, access arguments with {}:

{}
Arguments are read-only (one-way binding). HTML attributes (without @) pass directly to the element: <Avatar @title="User" class="current-user" data-test="avatar" /> Use ...attributes in the component template to apply them: <aside ...attributes>
{}
For dynamic/conditional arguments, use helpers like if: {{#if this.model}} <LinkTo @route={} @model={{this.model}} /> {{/if}} Or computed properties in the component class. This syntax is standard since Ember 3.4, preferred in Octane (3.15+).

Citations:


Fix invalid dynamic @iconName template syntax.

@iconName='arrow-drop-{{...}}' violates Ember angle-bracket argument syntax. Dynamic values must use @arg={{expression}} without outer quotes. The if helper should return the full icon name string.

Proposed fix
-          <AkIcon `@iconName`='arrow-drop-{{if acs.isExpanded "up" "down"}}' `@color`="success" />
+          <AkIcon `@iconName`={{if acs.isExpanded "arrow-drop-up" "arrow-drop-down"}} `@color`="success" />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<AkIcon @iconName='arrow-drop-{{if acs.isExpanded "up" "down"}}' @color="success" />
<AkIcon `@iconName`={{if acs.isExpanded "arrow-drop-up" "arrow-drop-down"}} `@color`="success" />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-accordion-demo/custom.md` at line 13, The template
currently uses an invalid quoted dynamic argument for AkIcon's `@iconName`; change
it to pass a dynamic value using the if helper so `@iconName` is bound to the full
icon name string based on acs.isExpanded (choose "arrow-drop-up" when true and
"arrow-drop-down" when false) and remove the outer quotes so the argument is
passed as a dynamic expression rather than a literal string.

Comment on lines +18 to +19
| `height` | string | - | Height for vertical divider |
| `width` | string | - | Width for horizontal divider |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Clarify the height and width prop descriptions.

The current descriptions suggest these props are direction-specific ("Height for vertical divider" and "Width for horizontal divider"), but the vertical example (lines 66-67) uses both @height='200px' and @width='1px'. This indicates that both props can be used on any divider to control its dimensions (length and thickness), not just for specific directions.

Consider revising the descriptions to clarify their actual purpose.

📝 Suggested clarification
-| `height`    | string | -              | Height for vertical divider       |
-| `width`     | string | -              | Width for horizontal divider      |
+| `height`    | string | -              | Sets the height/length of the divider |
+| `width`     | string | -              | Sets the width/thickness of the divider |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| `height` | string | - | Height for vertical divider |
| `width` | string | - | Width for horizontal divider |
| `height` | string | - | Sets the height/length of the divider |
| `width` | string | - | Sets the width/thickness of the divider |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-divider.md` around lines 18 - 19, Update the prop
descriptions for `height` and `width` in the ak-divider docs to reflect that
both control divider dimensions regardless of orientation: change the `height`
description to something like "Length of the divider (e.g., 200px)" and the
`width` description to "Thickness of the divider (e.g., 1px)"; update the text
in docs/components/ak-divider.md where the props table lists `height` and
`width` so examples and text are consistent with the vertical example that uses
both `@height='200px'` and `@width='1px'`.

Comment on lines +5 to +7
# Full bordered

Set **`@variant='full-bordered'`** for a grid: borders on every cell (matches the Storybook **FullBordered** story).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Use consistent hyphenation for the variant label.

“Full bordered” should be hyphenated as “Full-bordered” in the heading/description for correct compound-modifier grammar and consistency with the variant naming style.

✏️ Suggested doc wording update
-# Full bordered
+# Full-bordered

-Set **`@variant='full-bordered'`** for a grid: borders on every cell (matches the Storybook **FullBordered** story).
+Set **`@variant='full-bordered'`** for a full-bordered grid: borders on every cell (matches the Storybook **FullBordered** story).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Full bordered
Set **`@variant='full-bordered'`** for a grid: borders on every cell (matches the Storybook **FullBordered** story).
# Full-bordered
Set **`@variant='full-bordered'`** for a full-bordered grid: borders on every cell (matches the Storybook **FullBordered** story).
🧰 Tools
🪛 LanguageTool

[grammar] ~5-~5: Use a hyphen to join words.
Context: --- order: 2 --- # Full bordered Set **`@variant='full-bordered...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/components/ak-table-demo/full-bordered.md` around lines 5 - 7, Update
the heading and description to use consistent hyphenation: change “Full
bordered” to “Full-bordered” in the document title and descriptive sentence, and
ensure the variant example uses the exact marker `@variant`='full-bordered' to
match the hyphenated label (references: the heading text and the string
`@variant`='full-bordered').

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants