diff --git a/.prettierrc.cjs b/.prettierrc.cjs index 1b9d10d4d..c987613b0 100644 --- a/.prettierrc.cjs +++ b/.prettierrc.cjs @@ -1,23 +1,5 @@ // @ts-check -/** @type {import('prettier-plugin-organize-attributes').PrettierPluginOrganizeAttributesParserOptions} */ -const organizeAttributesPluginAngularConfig = { - attributeGroups: [ - '$ANGULAR_STRUCTURAL_DIRECTIVE', - '$ANGULAR_ELEMENT_REF', - '$ID', - '$DEFAULT', - '$CLASS', - '$ANGULAR_INPUT', - '$ANGULAR_TWO_WAY_BINDING', - '$ANGULAR_OUTPUT', - '$ANGULAR_ANIMATION', - '$ANGULAR_ANIMATION_INPUT' - ], - attributeSort: 'ASC', - attributeIgnoreCase: true -}; - /** @type {import('prettier').Options} */ const config = { printWidth: 120, @@ -27,12 +9,7 @@ const config = { trailingComma: 'none', htmlWhitespaceSensitivity: 'ignore', endOfLine: 'lf', - plugins: [ - 'prettier-plugin-organize-attributes', - 'prettier-plugin-organize-imports', - 'prettier-plugin-astro', - 'prettier-plugin-tailwindcss' - ], + plugins: ['prettier-plugin-astro', 'prettier-plugin-tailwindcss'], overrides: [ { files: ['*.yml'], @@ -50,8 +27,7 @@ const config = { files: ['*.html'], excludeFiles: ['index.html'], options: { - parser: 'angular', - ...organizeAttributesPluginAngularConfig + parser: 'angular' } }, { diff --git a/apps/radix-perf-testing/src/harness/benchmark.ts b/apps/radix-perf-testing/src/harness/benchmark.ts index 5ca041288..af935e622 100644 --- a/apps/radix-perf-testing/src/harness/benchmark.ts +++ b/apps/radix-perf-testing/src/harness/benchmark.ts @@ -1,6 +1,6 @@ -import { Type } from '@angular/core'; import { appendSentinel, computeStats, mode, nextPaint, observePaint, Stats } from './metrics'; import { createMount } from './mount'; +import { Type } from '@angular/core'; export interface BenchmarkOptions { /** Measured iterations (default 20). */ diff --git a/apps/radix-perf-testing/src/harness/reporter.ts b/apps/radix-perf-testing/src/harness/reporter.ts index 66c578ca2..fa59e6a89 100644 --- a/apps/radix-perf-testing/src/harness/reporter.ts +++ b/apps/radix-perf-testing/src/harness/reporter.ts @@ -1,5 +1,5 @@ -import { commands } from 'vitest/browser'; import { BenchmarkResult } from './benchmark'; +import { commands } from 'vitest/browser'; // Custom browser command registered in vite.config.mts. It runs in Node (has fs access) and // accumulates rows across all bench files in the run, writing BENCH_OUTPUT_PATH each time. diff --git a/apps/radix-perf-testing/src/tests/checkbox.bench.ts b/apps/radix-perf-testing/src/tests/checkbox.bench.ts index 6af2aca55..9b86663d7 100644 --- a/apps/radix-perf-testing/src/tests/checkbox.bench.ts +++ b/apps/radix-perf-testing/src/tests/checkbox.bench.ts @@ -1,8 +1,8 @@ +import { benchmark, BenchmarkResult } from '../harness/benchmark'; +import { writeResults } from '../harness/reporter'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { RdxCheckboxButtonDirective, RdxCheckboxRootDirective } from '@radix-ng/primitives/checkbox'; import { afterAll, describe, expect, it } from 'vitest'; -import { benchmark, BenchmarkResult } from '../harness/benchmark'; -import { writeResults } from '../harness/reporter'; const FILE = 'checkbox.bench.ts'; const COUNT = 500; @@ -16,7 +16,7 @@ const COUNT = 500; imports: [RdxCheckboxRootDirective, RdxCheckboxButtonDirective], template: ` @for (item of items(); track item) { - + } ` }) diff --git a/apps/radix-perf-testing/src/tests/select.bench.ts b/apps/radix-perf-testing/src/tests/select.bench.ts index f04cd5eaa..6358f463f 100644 --- a/apps/radix-perf-testing/src/tests/select.bench.ts +++ b/apps/radix-perf-testing/src/tests/select.bench.ts @@ -1,3 +1,5 @@ +import { benchmark, BenchmarkResult } from '../harness/benchmark'; +import { writeResults } from '../harness/reporter'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { RdxSelectGroup, @@ -12,8 +14,6 @@ import { RdxSelectValue } from '@radix-ng/primitives/select'; import { afterAll, describe, expect, it } from 'vitest'; -import { benchmark, BenchmarkResult } from '../harness/benchmark'; -import { writeResults } from '../harness/reporter'; const FILE = 'select.bench.ts'; // 50 = typical real-world list (the common path); 1000 = non-virtualized worst case (stresses the @@ -41,7 +41,7 @@ const COUNTS = [50, 1000]; RdxSelectItemText ], template: ` - + @@ -51,7 +51,7 @@ const COUNTS = [50, 1000];
@for (option of options(); track option) { -
+
{{ option }}
} diff --git a/apps/radix-playground/src/app/app.config.ts b/apps/radix-playground/src/app/app.config.ts index 963770446..6394fd7df 100644 --- a/apps/radix-playground/src/app/app.config.ts +++ b/apps/radix-playground/src/app/app.config.ts @@ -1,6 +1,6 @@ +import { appRoutes } from './app.routes'; import { ApplicationConfig, provideBrowserGlobalErrorListeners, provideZonelessChangeDetection } from '@angular/core'; import { provideRouter, withComponentInputBinding, withInMemoryScrolling } from '@angular/router'; -import { appRoutes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ diff --git a/apps/radix-playground/src/app/pages/accordion.ts b/apps/radix-playground/src/app/pages/accordion.ts index d8de10192..d71c5cb50 100644 --- a/apps/radix-playground/src/app/pages/accordion.ts +++ b/apps/radix-playground/src/app/pages/accordion.ts @@ -1,3 +1,5 @@ +import { DemoPage } from '../shared/demo-page'; +import { cn, demoAccordion } from '../shared/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxAccordionHeaderDirective, @@ -6,8 +8,6 @@ import { RdxAccordionRootDirective, RdxAccordionTriggerDirective } from '@radix-ng/primitives/accordion'; -import { DemoPage } from '../shared/demo-page'; -import { cn, demoAccordion } from '../shared/styles'; @Component({ selector: 'app-accordion', @@ -25,30 +25,30 @@ import { cn, demoAccordion } from '../shared/styles'; title="Accordion" description="A vertically stacked set of interactive headings that each reveal a section of content." > -
-
-

- +
+
+

+

-
+
Yes. It adheres to the WAI-ARIA design pattern.
-
-

- +
+

+

-
+
Yes. It's unstyled by default, giving you freedom over the look and feel.
-
-

- +
+

+

-
+
Yes! You can animate the Accordion with CSS or JavaScript.
diff --git a/apps/radix-playground/src/app/pages/checkbox.ts b/apps/radix-playground/src/app/pages/checkbox.ts index 505528e08..1744a41b4 100644 --- a/apps/radix-playground/src/app/pages/checkbox.ts +++ b/apps/radix-playground/src/app/pages/checkbox.ts @@ -1,3 +1,5 @@ +import { DemoPage } from '../shared/demo-page'; +import { demoCheckbox } from '../shared/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { LucideCheck } from '@lucide/angular'; import { @@ -7,8 +9,6 @@ import { RdxCheckboxRootDirective } from '@radix-ng/primitives/checkbox'; import { RdxLabelDirective } from '@radix-ng/primitives/label'; -import { DemoPage } from '../shared/demo-page'; -import { demoCheckbox } from '../shared/styles'; @Component({ selector: 'app-checkbox', @@ -28,9 +28,9 @@ import { demoCheckbox } from '../shared/styles'; description="A control that allows the user to toggle between checked and not checked." >
-
-
diff --git a/apps/radix-playground/src/app/pages/dialog.ts b/apps/radix-playground/src/app/pages/dialog.ts index 6af3c4ce5..09765a607 100644 --- a/apps/radix-playground/src/app/pages/dialog.ts +++ b/apps/radix-playground/src/app/pages/dialog.ts @@ -1,8 +1,8 @@ +import { DemoPage } from '../shared/demo-page'; +import { cn, demoButton, demoDialog, demoInput } from '../shared/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { LucideX } from '@lucide/angular'; import { dialogImports } from '@radix-ng/primitives/dialog'; -import { DemoPage } from '../shared/demo-page'; -import { cn, demoButton, demoDialog, demoInput } from '../shared/styles'; @Component({ selector: 'app-dialog', @@ -14,32 +14,32 @@ import { cn, demoButton, demoDialog, demoInput } from '../shared/styles'; description="A modal window overlaid on the page, rendered in a portal, that traps focus until dismissed." >
- + -
+
-
-

Edit profile

-

+

+

Edit profile

+

Make changes to your profile here. Click save when you're done.

- - + +
-
diff --git a/apps/radix-playground/src/app/pages/home.ts b/apps/radix-playground/src/app/pages/home.ts index 3cac28773..38c77f279 100644 --- a/apps/radix-playground/src/app/pages/home.ts +++ b/apps/radix-playground/src/app/pages/home.ts @@ -1,6 +1,6 @@ +import { PRIMITIVES } from '../shared/primitives'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RouterLink } from '@angular/router'; -import { PRIMITIVES } from '../shared/primitives'; @Component({ selector: 'app-home', diff --git a/apps/radix-playground/src/app/pages/landing.ts b/apps/radix-playground/src/app/pages/landing.ts index a9239ab2f..744406757 100644 --- a/apps/radix-playground/src/app/pages/landing.ts +++ b/apps/radix-playground/src/app/pages/landing.ts @@ -1,3 +1,5 @@ +import primitivesPackage from '../../../../../packages/primitives/package.json'; +import { ThemeStore } from '../shared/theme'; import { NgTemplateOutlet } from '@angular/common'; import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; import { RouterLink } from '@angular/router'; @@ -31,8 +33,6 @@ import { RdxCheckboxRootDirective } from '@radix-ng/primitives/checkbox'; import { RdxSwitchRoot, RdxSwitchThumb } from '@radix-ng/primitives/switch'; -import primitivesPackage from '../../../../../packages/primitives/package.json'; -import { ThemeStore } from '../shared/theme'; const installCommand = 'ng add @radix-ng/primitives'; const skillCommand = 'npx skills add radix-ng/primitives/skills'; @@ -76,9 +76,9 @@ type CopyTarget = 'install' | 'skill';
-
-
- -

Dimensions

-

Set the width and height for the element.

+
+
+ +

Dimensions

+

Set the width and height for the element.

-
diff --git a/apps/radix-playground/src/app/pages/select.ts b/apps/radix-playground/src/app/pages/select.ts index bde9d61ef..8c0de5822 100644 --- a/apps/radix-playground/src/app/pages/select.ts +++ b/apps/radix-playground/src/app/pages/select.ts @@ -1,7 +1,7 @@ +import { DemoPage } from '../shared/demo-page'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { LucideCheck, LucideChevronDown } from '@lucide/angular'; import { _importsSelect } from '@radix-ng/primitives/select'; -import { DemoPage } from '../shared/demo-page'; @Component({ selector: 'app-select', @@ -24,7 +24,7 @@ import { DemoPage } from '../shared/demo-page'; -
+
-
+
diff --git a/apps/radix-playground/src/app/pages/switch.ts b/apps/radix-playground/src/app/pages/switch.ts index 10cfd4464..ec19d260f 100644 --- a/apps/radix-playground/src/app/pages/switch.ts +++ b/apps/radix-playground/src/app/pages/switch.ts @@ -1,7 +1,7 @@ +import { DemoPage } from '../shared/demo-page'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxLabelDirective } from '@radix-ng/primitives/label'; import { RdxSwitchRoot, RdxSwitchThumb } from '@radix-ng/primitives/switch'; -import { DemoPage } from '../shared/demo-page'; @Component({ selector: 'app-switch', diff --git a/apps/radix-playground/src/app/pages/tabs.ts b/apps/radix-playground/src/app/pages/tabs.ts index 2e5957c7c..9a7200c46 100644 --- a/apps/radix-playground/src/app/pages/tabs.ts +++ b/apps/radix-playground/src/app/pages/tabs.ts @@ -1,6 +1,6 @@ +import { DemoPage } from '../shared/demo-page'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxTabsList, RdxTabsPanel, RdxTabsRoot, RdxTabsTab } from '@radix-ng/primitives/tabs'; -import { DemoPage } from '../shared/demo-page'; const tab = 'relative inline-flex h-10 items-center justify-center px-4 text-sm font-medium text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-background data-[active]:text-foreground data-[active]:shadow-[inset_0_-2px_0_0_var(--primary)]'; @@ -20,8 +20,8 @@ const tab = defaultValue="account" >
- - + +
@@ -125,10 +125,10 @@ import { PlaygroundMascotPin } from './playground-mascot-pin';

@@ -153,8 +153,8 @@ import { PlaygroundMascotPin } from './playground-mascot-pin';

@@ -29,7 +29,7 @@ import {
-
+

@@ -39,7 +39,7 @@ import {
-
+

@@ -49,7 +49,7 @@ import {
-
+

diff --git a/apps/radix-ssr-testing/src/app/components/checkbox/page.ts b/apps/radix-ssr-testing/src/app/components/checkbox/page.ts index 5a9801432..7428fde3b 100644 --- a/apps/radix-ssr-testing/src/app/components/checkbox/page.ts +++ b/apps/radix-ssr-testing/src/app/components/checkbox/page.ts @@ -10,7 +10,7 @@ import { changeDetection: ChangeDetectionStrategy.OnPush, imports: [RdxCheckboxRootDirective, RdxCheckboxButtonDirective, RdxCheckboxIndicatorDirective], template: ` -
+
Content
diff --git a/apps/radix-ssr-testing/src/app/components/combobox/page.ts b/apps/radix-ssr-testing/src/app/components/combobox/page.ts index d2a3f2062..858b0203d 100644 --- a/apps/radix-ssr-testing/src/app/components/combobox/page.ts +++ b/apps/radix-ssr-testing/src/app/components/combobox/page.ts @@ -40,7 +40,7 @@ import {
@for (option of options; track option) { -
+
{{ option }}
diff --git a/apps/radix-ssr-testing/src/app/components/form/page.ts b/apps/radix-ssr-testing/src/app/components/form/page.ts index 5fcdbcc26..117eb0445 100644 --- a/apps/radix-ssr-testing/src/app/components/form/page.ts +++ b/apps/radix-ssr-testing/src/app/components/form/page.ts @@ -7,7 +7,7 @@ import { RdxFormRoot } from '@radix-ng/primitives/form'; selector: 'app-form', imports: [RdxFormRoot, RdxFieldRoot, RdxFieldLabel, RdxFieldControl, RdxFieldError], template: ` -
+
diff --git a/apps/radix-ssr-testing/src/app/components/select/page.ts b/apps/radix-ssr-testing/src/app/components/select/page.ts index 5be6cc838..07e2da171 100644 --- a/apps/radix-ssr-testing/src/app/components/select/page.ts +++ b/apps/radix-ssr-testing/src/app/components/select/page.ts @@ -40,13 +40,13 @@ import { -
+
Fruits
@for (option of options; track option) { -
+
{{ option }}
diff --git a/apps/radix-ssr-testing/src/app/components/slider/page.ts b/apps/radix-ssr-testing/src/app/components/slider/page.ts index f4fd825ef..263969c0b 100644 --- a/apps/radix-ssr-testing/src/app/components/slider/page.ts +++ b/apps/radix-ssr-testing/src/app/components/slider/page.ts @@ -49,14 +49,14 @@ import { RdxSliderModule } from '@radix-ng/primitives/slider'; `, encapsulation: ViewEncapsulation.None, template: ` -
+
-
+
-
+
diff --git a/apps/radix-ssr-testing/src/app/components/toggle-group/page.ts b/apps/radix-ssr-testing/src/app/components/toggle-group/page.ts index 0ddac482b..b63fc7b0f 100644 --- a/apps/radix-ssr-testing/src/app/components/toggle-group/page.ts +++ b/apps/radix-ssr-testing/src/app/components/toggle-group/page.ts @@ -7,7 +7,7 @@ import { RdxToggleGroup } from '@radix-ng/primitives/toggle-group'; selector: 'app-toggle-group', imports: [RdxToggleGroup, RdxToggle], template: ` -
+
diff --git a/apps/radix-ssr-testing/src/main.server.ts b/apps/radix-ssr-testing/src/main.server.ts index c4639a189..138b5e64b 100644 --- a/apps/radix-ssr-testing/src/main.server.ts +++ b/apps/radix-ssr-testing/src/main.server.ts @@ -1,6 +1,6 @@ -import { bootstrapApplication, BootstrapContext } from '@angular/platform-browser'; import { App } from './app/app'; import { config } from './app/app.config.server'; +import { bootstrapApplication, BootstrapContext } from '@angular/platform-browser'; const bootstrap = (context: BootstrapContext) => bootstrapApplication(App, config, context); diff --git a/apps/radix-ssr-testing/src/main.ts b/apps/radix-ssr-testing/src/main.ts index 2108cd95d..f3a375457 100644 --- a/apps/radix-ssr-testing/src/main.ts +++ b/apps/radix-ssr-testing/src/main.ts @@ -1,5 +1,5 @@ -import { bootstrapApplication } from '@angular/platform-browser'; import { App } from './app/app'; import { appConfig } from './app/app.config'; +import { bootstrapApplication } from '@angular/platform-browser'; bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/apps/radix-ssr-testing/src/ssr-rendering.spec.ts b/apps/radix-ssr-testing/src/ssr-rendering.spec.ts index 0ba4bd1a1..c6292eccd 100644 --- a/apps/radix-ssr-testing/src/ssr-rendering.spec.ts +++ b/apps/radix-ssr-testing/src/ssr-rendering.spec.ts @@ -1,10 +1,6 @@ // `@angular/platform-server` ships partially-compiled code; load the compiler so JIT is available // as a fallback in the test environment (otherwise PlatformLocation fails to compile). import '@angular/compiler'; -import { provideZonelessChangeDetection, Type } from '@angular/core'; -import { bootstrapApplication, BootstrapContext, provideClientHydration } from '@angular/platform-browser'; -import { provideServerRendering, renderApplication } from '@angular/platform-server'; -import { describe, expect, it } from 'vitest'; import AccordionPage from './app/components/accordion/page'; import AvatarPage from './app/components/avatar/page'; import CheckboxPage from './app/components/checkbox/page'; @@ -18,6 +14,10 @@ import SliderPage from './app/components/slider/page'; import SwitchPage from './app/components/switch/page'; import TabsPage from './app/components/tabs/page'; import ToggleGroupPage from './app/components/toggle-group/page'; +import { provideZonelessChangeDetection, Type } from '@angular/core'; +import { bootstrapApplication, BootstrapContext, provideClientHydration } from '@angular/platform-browser'; +import { provideServerRendering, renderApplication } from '@angular/platform-server'; +import { describe, expect, it } from 'vitest'; /** * Server-side rendering smoke tests for the primitives. diff --git a/apps/radix-storybook/.storybook/plugins/compodoc.ts b/apps/radix-storybook/.storybook/plugins/compodoc.ts index cacc145c6..5c51de5f6 100644 --- a/apps/radix-storybook/.storybook/plugins/compodoc.ts +++ b/apps/radix-storybook/.storybook/plugins/compodoc.ts @@ -1,5 +1,5 @@ -import { setCompodocJson } from '@storybook/addon-docs/angular'; import docJson from '../documentation.json'; +import { setCompodocJson } from '@storybook/addon-docs/angular'; // Inputs inherited from `RdxPopperContentWrapper` (ADR 0012 thin positioners) carry the base-class // default expression `this.config. ?? `, where `config` is the positioner's own diff --git a/apps/radix-storybook/.storybook/preview.ts b/apps/radix-storybook/.storybook/preview.ts index 3d024a254..daf1f05c2 100644 --- a/apps/radix-storybook/.storybook/preview.ts +++ b/apps/radix-storybook/.storybook/preview.ts @@ -1,3 +1,7 @@ +import './rdx-directive-highlight.css'; +import { installRdxDirectiveHighlight } from './highlight-rdx-directives'; +import CompodocPlugin from './plugins/compodoc'; +import { light } from './themes'; import { provideZonelessChangeDetection } from '@angular/core'; import { LucideAlignCenter, @@ -25,11 +29,6 @@ import { provideLucideIcons } from '@lucide/angular'; import { applicationConfig, Preview } from '@storybook/angular'; -import CompodocPlugin from './plugins/compodoc'; - -import { installRdxDirectiveHighlight } from './highlight-rdx-directives'; -import './rdx-directive-highlight.css'; -import { light } from './themes'; installRdxDirectiveHighlight(); diff --git a/docs/spikes/signal-forms-spike.spec.ts b/docs/spikes/signal-forms-spike.spec.ts index f60563e21..5f0cf6a16 100644 --- a/docs/spikes/signal-forms-spike.spec.ts +++ b/docs/spikes/signal-forms-spike.spec.ts @@ -21,17 +21,17 @@ * (core scans `directiveStart..directiveEnd`, not just the host component) * 3. native form element fallback */ +import { RdxInputDirective } from '../src/input.directive'; import { Component, signal, viewChild } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { form, FormField, required } from '@angular/forms/signals'; import { RdxSwitchModule } from '@radix-ng/primitives/switch'; -import { RdxInputDirective } from '../src/input.directive'; describe('Signal Forms spike (experimental API, Angular 21)', () => { describe('archetype A: native input + rdxInput (custom-control path expected)', () => { @Component({ template: ` - + `, imports: [FormField, RdxInputDirective] }) @@ -133,7 +133,7 @@ describe('Signal Forms spike (experimental API, Angular 21)', () => { describe('archetype B: composite CVA directive — switch (CVA path expected)', () => { @Component({ template: ` - `, diff --git a/eslint.config.ts b/eslint.config.ts index 86eb2c781..5cc5f9ab1 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,10 +1,13 @@ -import eslintComments from '@eslint-community/eslint-plugin-eslint-comments'; import { includeIgnoreFile } from '@eslint/compat'; import js from '@eslint/js'; +import eslintComments from '@eslint-community/eslint-plugin-eslint-comments'; import angularEslint from 'angular-eslint'; +import { defineConfig } from 'eslint/config'; +import importPlugin from 'eslint-plugin-import'; import prettierRecommended from 'eslint-plugin-prettier/recommended'; +import simpleImportSortPlugin from 'eslint-plugin-simple-import-sort'; import storybook from 'eslint-plugin-storybook'; -import { defineConfig } from 'eslint/config'; +import unusedImportsPlugin from 'eslint-plugin-unused-imports'; import globals from 'globals'; import { fileURLToPath } from 'node:url'; import tseslint from 'typescript-eslint'; @@ -23,12 +26,32 @@ export default defineConfig([ } }, plugins: { - '@eslint-community/eslint-comments': eslintComments + '@eslint-community/eslint-comments': eslintComments, + 'simple-import-sort': simpleImportSortPlugin, + import: importPlugin, + 'unused-imports': unusedImportsPlugin }, rules: { ...js.configs.recommended.rules, ...eslintComments.configs.recommended.rules, - '@eslint-community/eslint-comments/no-unused-disable': 'warn' + + // plugin:js + 'sort-imports': 'off', + + // plugin:eslint-comments + '@eslint-community/eslint-comments/no-unused-disable': 'warn', + + // plugin:simple-import-sort + 'simple-import-sort/imports': ['warn', { groups: [] }], + 'simple-import-sort/exports': 'warn', + + // plugin:import + 'import/first': 'warn', + 'import/newline-after-import': 'warn', + 'import/no-duplicates': 'warn', + + // plugin:unused-imports + 'unused-imports/no-unused-imports': 'warn' } }, { @@ -99,7 +122,8 @@ export default defineConfig([ // plugin:@angular-eslint/template '@angular-eslint/template/label-has-associated-control': 'off', '@angular-eslint/template/prefer-self-closing-tags': 'warn', - '@angular-eslint/template/prefer-control-flow': 'off' + '@angular-eslint/template/prefer-control-flow': 'off', + '@angular-eslint/template/attributes-order': 'warn' } }, ...storybook.configs['flat/recommended'], diff --git a/package.json b/package.json index dc7820b7d..882f73ad0 100644 --- a/package.json +++ b/package.json @@ -135,8 +135,11 @@ "esbuild": "^0.19.12", "eslint": "^10.4.1", "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-prettier": "^5.5.6", + "eslint-plugin-simple-import-sort": "^13.0.0", "eslint-plugin-storybook": "10.4.6", + "eslint-plugin-unused-imports": "^4.4.1", "globals": "^17.4.0", "http-server": "^14.1.1", "husky": "^9.1.6", @@ -155,8 +158,6 @@ "postcss-url": "~10.1.3", "prettier": "^3.8.3", "prettier-plugin-astro": "^0.14.1", - "prettier-plugin-organize-attributes": "^1.0.0", - "prettier-plugin-organize-imports": "^4.1.0", "prettier-plugin-tailwindcss": "^0.8.0", "remark-gfm": "^4.0.1", "rimraf": "^6.0.1", diff --git a/packages/primitives/accordion/__tests__/accordion-animation.spec.ts b/packages/primitives/accordion/__tests__/accordion-animation.spec.ts index 605bf6000..033a77b08 100644 --- a/packages/primitives/accordion/__tests__/accordion-animation.spec.ts +++ b/packages/primitives/accordion/__tests__/accordion-animation.spec.ts @@ -1,15 +1,15 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { By } from '@angular/platform-browser'; import { RdxAccordionItemDirective } from '../src/accordion-item.directive'; import { RdxAccordionPanelDirective } from '../src/accordion-panel.directive'; import { RdxAccordionRootDirective } from '../src/accordion-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxAccordionRootDirective, RdxAccordionItemDirective, RdxAccordionPanelDirective], template: ` -
+
Content one
diff --git a/packages/primitives/accordion/__tests__/accordion-interaction.spec.ts b/packages/primitives/accordion/__tests__/accordion-interaction.spec.ts index 767d46670..59307d64c 100644 --- a/packages/primitives/accordion/__tests__/accordion-interaction.spec.ts +++ b/packages/primitives/accordion/__tests__/accordion-interaction.spec.ts @@ -1,12 +1,12 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { By } from '@angular/platform-browser'; -import { expect, vi } from 'vitest'; import { RdxAccordionHeaderDirective } from '../src/accordion-header.directive'; import { RdxAccordionItemDirective } from '../src/accordion-item.directive'; import { RdxAccordionPanelDirective } from '../src/accordion-panel.directive'; import { RdxAccordionRootDirective } from '../src/accordion-root.directive'; import { RdxAccordionTriggerDirective } from '../src/accordion-trigger.directive'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { expect, vi } from 'vitest'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -18,7 +18,7 @@ import { RdxAccordionTriggerDirective } from '../src/accordion-trigger.directive RdxAccordionPanelDirective ], template: ` -
+
@@ -106,7 +106,7 @@ describe('RdxAccordion — interaction', () => { RdxAccordionPanelDirective ], template: ` -
+
One
@@ -156,7 +156,7 @@ describe('RdxAccordion — cancelable onValueChange', () => { RdxAccordionPanelDirective ], template: ` -
+
Content
@@ -235,7 +235,7 @@ describe('RdxAccordion — disabled propagation', () => { RdxAccordionPanelDirective ], template: ` -
+
One
@@ -307,7 +307,7 @@ describe('RdxAccordion — multiple input', () => { ], template: `
-
+
One
@@ -432,7 +432,7 @@ describe('RdxAccordion — data-index', () => { RdxAccordionPanelDirective ], template: ` -
+
One
@@ -502,7 +502,7 @@ describe('RdxAccordion — keyboard focus', () => { RdxAccordionPanelDirective ], template: ` -
+
Content one
@@ -572,7 +572,7 @@ describe('RdxAccordion — mount behavior', () => { RdxAccordionPanelDirective ], template: ` -
+
One
diff --git a/packages/primitives/accordion/index.ts b/packages/primitives/accordion/index.ts index 9cd07ac1c..c9ffc12d0 100644 --- a/packages/primitives/accordion/index.ts +++ b/packages/primitives/accordion/index.ts @@ -1,9 +1,9 @@ -import { NgModule } from '@angular/core'; import { RdxAccordionHeaderDirective } from './src/accordion-header.directive'; import { RdxAccordionItemDirective } from './src/accordion-item.directive'; import { RdxAccordionPanelDirective } from './src/accordion-panel.directive'; import { RdxAccordionRootDirective } from './src/accordion-root.directive'; import { RdxAccordionTriggerDirective } from './src/accordion-trigger.directive'; +import { NgModule } from '@angular/core'; export * from './src/accordion-header.directive'; export * from './src/accordion-item.directive'; diff --git a/packages/primitives/accordion/src/accordion-header.directive.ts b/packages/primitives/accordion/src/accordion-header.directive.ts index fc18cdf37..e25d433a9 100644 --- a/packages/primitives/accordion/src/accordion-header.directive.ts +++ b/packages/primitives/accordion/src/accordion-header.directive.ts @@ -1,5 +1,5 @@ -import { Directive } from '@angular/core'; import { injectAccordionItemContext } from './accordion-item.directive'; +import { Directive } from '@angular/core'; @Directive({ selector: '[rdxAccordionHeader]', diff --git a/packages/primitives/accordion/src/accordion-item.directive.ts b/packages/primitives/accordion/src/accordion-item.directive.ts index bc32e874a..cb5c09810 100644 --- a/packages/primitives/accordion/src/accordion-item.directive.ts +++ b/packages/primitives/accordion/src/accordion-item.directive.ts @@ -1,3 +1,4 @@ +import { injectAccordionRootContext, RdxAccordionValueChangeEventDetails } from './accordion-root.directive'; import { booleanAttribute, computed, @@ -7,14 +8,13 @@ import { inject, input, output, - signal, Signal, + signal, WritableSignal } from '@angular/core'; import { injectCollapsibleRootContext, RdxCollapsibleRootDirective } from '@radix-ng/primitives/collapsible'; import { RdxCompositeListItem } from '@radix-ng/primitives/composite'; import { BooleanInput, createCancelableChangeEventDetails, createContext } from '@radix-ng/primitives/core'; -import { injectAccordionRootContext, RdxAccordionValueChangeEventDetails } from './accordion-root.directive'; /** Payload of {@link RdxAccordionItemDirective.onOpenChange}, mirroring Base UI's `(open, eventDetails)`. */ export interface RdxAccordionItemOpenChangeEvent { diff --git a/packages/primitives/accordion/src/accordion-panel.directive.ts b/packages/primitives/accordion/src/accordion-panel.directive.ts index 19fdee0f0..2830bc47c 100644 --- a/packages/primitives/accordion/src/accordion-panel.directive.ts +++ b/packages/primitives/accordion/src/accordion-panel.directive.ts @@ -1,7 +1,7 @@ -import { Directive } from '@angular/core'; -import { RdxCollapsiblePanelDirective } from '@radix-ng/primitives/collapsible'; import { injectAccordionItemContext } from './accordion-item.directive'; import { injectAccordionRootContext } from './accordion-root.directive'; +import { Directive } from '@angular/core'; +import { RdxCollapsiblePanelDirective } from '@radix-ng/primitives/collapsible'; @Directive({ selector: '[rdxAccordionPanel]', diff --git a/packages/primitives/accordion/src/accordion-trigger.directive.ts b/packages/primitives/accordion/src/accordion-trigger.directive.ts index 5a00ea16a..5ef414093 100644 --- a/packages/primitives/accordion/src/accordion-trigger.directive.ts +++ b/packages/primitives/accordion/src/accordion-trigger.directive.ts @@ -1,8 +1,8 @@ +import { injectAccordionItemContext } from './accordion-item.directive'; +import { injectAccordionRootContext } from './accordion-root.directive'; import { Directive } from '@angular/core'; import { injectCollapsibleRootContext } from '@radix-ng/primitives/collapsible'; import { injectId } from '@radix-ng/primitives/core'; -import { injectAccordionItemContext } from './accordion-item.directive'; -import { injectAccordionRootContext } from './accordion-root.directive'; @Directive({ selector: '[rdxAccordionTrigger]', diff --git a/packages/primitives/accordion/stories/accordion-collapsible-array.ts b/packages/primitives/accordion/stories/accordion-collapsible-array.ts index 5d7b0a634..3a8b25c2c 100644 --- a/packages/primitives/accordion/stories/accordion-collapsible-array.ts +++ b/packages/primitives/accordion/stories/accordion-collapsible-array.ts @@ -1,3 +1,4 @@ +import { cn, demoAccordion } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxAccordionHeaderDirective, @@ -6,7 +7,6 @@ import { RdxAccordionRootDirective, RdxAccordionTriggerDirective } from '@radix-ng/primitives/accordion'; -import { cn, demoAccordion } from '../../storybook/styles'; @Component({ selector: 'accordion-collapsible-array-example', @@ -19,13 +19,13 @@ import { cn, demoAccordion } from '../../storybook/styles'; ], changeDetection: ChangeDetectionStrategy.OnPush, template: ` -
+
@for (item of items; track item.id) { -
-

- +
+

+

-
+
{{ item.content }}
diff --git a/packages/primitives/accordion/stories/accordion-collapsible.ts b/packages/primitives/accordion/stories/accordion-collapsible.ts index 5f985d548..516da8e78 100644 --- a/packages/primitives/accordion/stories/accordion-collapsible.ts +++ b/packages/primitives/accordion/stories/accordion-collapsible.ts @@ -1,3 +1,4 @@ +import { cn, demoAccordion } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxAccordionHeaderDirective, @@ -6,7 +7,6 @@ import { RdxAccordionRootDirective, RdxAccordionTriggerDirective } from '@radix-ng/primitives/accordion'; -import { cn, demoAccordion } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -19,32 +19,32 @@ import { cn, demoAccordion } from '../../storybook/styles'; RdxAccordionPanelDirective ], template: ` -
-
-

- +
+
+

+

-
+
Yes. It adheres to the WAI-ARIA design pattern.
-
-

- +
+

+

-
+
Yes. It's unstyled by default, giving you freedom over the look and feel.
-
-

- +
+

+

-
+
Yes! You can animate the Accordion with CSS or JavaScript.
diff --git a/packages/primitives/accordion/stories/accordion-disabled.ts b/packages/primitives/accordion/stories/accordion-disabled.ts index bd3102f67..e6ff1fdf9 100644 --- a/packages/primitives/accordion/stories/accordion-disabled.ts +++ b/packages/primitives/accordion/stories/accordion-disabled.ts @@ -1,3 +1,4 @@ +import { cn, demoAccordion } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxAccordionHeaderDirective, @@ -6,7 +7,6 @@ import { RdxAccordionRootDirective, RdxAccordionTriggerDirective } from '@radix-ng/primitives/accordion'; -import { cn, demoAccordion } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -19,32 +19,32 @@ import { cn, demoAccordion } from '../../storybook/styles'; RdxAccordionPanelDirective ], template: ` -
-
-

- +
+
+

+

-
+
Yes. It adheres to the WAI-ARIA design pattern.
-
-

- +
+

+

-
+
Yes. It's unstyled by default, giving you freedom over the look and feel.
-
-

- +
+

+

-
+
Yes! You can animate the Accordion with CSS or JavaScript.
diff --git a/packages/primitives/accordion/stories/accordion-events.ts b/packages/primitives/accordion/stories/accordion-events.ts index 7725d7ba9..ffe729ee1 100644 --- a/packages/primitives/accordion/stories/accordion-events.ts +++ b/packages/primitives/accordion/stories/accordion-events.ts @@ -1,3 +1,4 @@ +import { cn, demoAccordion } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { RdxAccordionHeaderDirective, @@ -6,7 +7,6 @@ import { RdxAccordionRootDirective, RdxAccordionTriggerDirective } from '@radix-ng/primitives/accordion'; -import { cn, demoAccordion } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -20,21 +20,21 @@ import { cn, demoAccordion } from '../../storybook/styles'; ], template: `
-
-
-

- +
+
+

+

-
+
Yes. It adheres to the WAI-ARIA design pattern.
-
-

- +
+

+

-
+
Yes. It's unstyled by default.
diff --git a/packages/primitives/accordion/stories/accordion-horizontal.ts b/packages/primitives/accordion/stories/accordion-horizontal.ts index 29d7d2233..f5013b3a5 100644 --- a/packages/primitives/accordion/stories/accordion-horizontal.ts +++ b/packages/primitives/accordion/stories/accordion-horizontal.ts @@ -1,3 +1,4 @@ +import { cn, demoAccordion } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxAccordionHeaderDirective, @@ -6,7 +7,6 @@ import { RdxAccordionRootDirective, RdxAccordionTriggerDirective } from '@radix-ng/primitives/accordion'; -import { cn, demoAccordion } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -20,42 +20,42 @@ import { cn, demoAccordion } from '../../storybook/styles'; ], template: `
-
-
-
-
+
Yes. It adheres to the WAI-ARIA design pattern.
-
-
-
-
+
Yes. It's unstyled by default, giving you freedom over the look and feel.
-
-
-
-
+
Yes! You can animate the Accordion with CSS or JavaScript.
diff --git a/packages/primitives/accordion/stories/accordion-keep-mounted.ts b/packages/primitives/accordion/stories/accordion-keep-mounted.ts index c3f2d7d41..444db39f4 100644 --- a/packages/primitives/accordion/stories/accordion-keep-mounted.ts +++ b/packages/primitives/accordion/stories/accordion-keep-mounted.ts @@ -1,3 +1,4 @@ +import { cn, demoAccordion, demoInput } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { @@ -7,7 +8,6 @@ import { RdxAccordionRootDirective, RdxAccordionTriggerDirective } from '@radix-ng/primitives/accordion'; -import { cn, demoAccordion, demoInput } from '../../storybook/styles'; /** * With `keepMounted`, collapsed panels keep their element in the DOM while hidden. @@ -25,23 +25,23 @@ import { cn, demoAccordion, demoInput } from '../../storybook/styles'; RdxAccordionPanelDirective ], template: ` -
-
-

- +
+
+

+

-
+
- +
-
-

- +
+

+

-
+
Same as shipping.
diff --git a/packages/primitives/accordion/stories/accordion-multiple.ts b/packages/primitives/accordion/stories/accordion-multiple.ts index 1efb980fd..8f0887974 100644 --- a/packages/primitives/accordion/stories/accordion-multiple.ts +++ b/packages/primitives/accordion/stories/accordion-multiple.ts @@ -1,3 +1,4 @@ +import { cn, demoAccordion } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxAccordionHeaderDirective, @@ -6,7 +7,6 @@ import { RdxAccordionRootDirective, RdxAccordionTriggerDirective } from '@radix-ng/primitives/accordion'; -import { cn, demoAccordion } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -19,32 +19,32 @@ import { cn, demoAccordion } from '../../storybook/styles'; RdxAccordionPanelDirective ], template: ` -
-
-

- +
+
+

+

-
+
Yes. It adheres to the WAI-ARIA design pattern.
-
-

- +
+

+

-
+
Yes. It's unstyled by default, giving you freedom over the look and feel.
-
-

- +
+

+

-
+
Yes. It's unstyled by default, giving you freedom over the look and feel.
diff --git a/packages/primitives/accordion/stories/accordion.stories.ts b/packages/primitives/accordion/stories/accordion.stories.ts index dee9dd4f0..c3518e2b5 100644 --- a/packages/primitives/accordion/stories/accordion.stories.ts +++ b/packages/primitives/accordion/stories/accordion.stories.ts @@ -1,4 +1,3 @@ -import { argsToTemplate, Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { cn, demoAccordion } from '../../storybook/styles'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { RdxAccordionHeaderDirective } from '../src/accordion-header.directive'; @@ -7,20 +6,20 @@ import { RdxAccordionPanelDirective } from '../src/accordion-panel.directive'; import { RdxAccordionRootDirective } from '../src/accordion-root.directive'; import { RdxAccordionTriggerDirective } from '../src/accordion-trigger.directive'; import { AccordionCollapsibleExample } from './accordion-collapsible'; +import collapsibleSource from './accordion-collapsible?raw'; import { AccordionCollapsibleArrayExample } from './accordion-collapsible-array'; -import { AccordionDisabledExample } from './accordion-disabled'; -import { AccordionEventsExample } from './accordion-events'; -import { AccordionHorizontalExample } from './accordion-horizontal'; -import { AccordionKeepMountedExample } from './accordion-keep-mounted'; -import { AccordionMultipleExample } from './accordion-multiple'; - import collapsibleArraySource from './accordion-collapsible-array?raw'; -import collapsibleSource from './accordion-collapsible?raw'; +import { AccordionDisabledExample } from './accordion-disabled'; import disabledSource from './accordion-disabled?raw'; +import { AccordionEventsExample } from './accordion-events'; import eventsSource from './accordion-events?raw'; +import { AccordionHorizontalExample } from './accordion-horizontal'; import horizontalSource from './accordion-horizontal?raw'; +import { AccordionKeepMountedExample } from './accordion-keep-mounted'; import keepMountedSource from './accordion-keep-mounted?raw'; +import { AccordionMultipleExample } from './accordion-multiple'; import multipleSource from './accordion-multiple?raw'; +import { argsToTemplate, Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const source = (code: string) => ({ docs: { source: { code: code.trim(), language: 'typescript', type: 'code' } } diff --git a/packages/primitives/alert-dialog/__tests__/alert-dialog.spec.ts b/packages/primitives/alert-dialog/__tests__/alert-dialog.spec.ts index db497576c..3b1ca9a75 100644 --- a/packages/primitives/alert-dialog/__tests__/alert-dialog.spec.ts +++ b/packages/primitives/alert-dialog/__tests__/alert-dialog.spec.ts @@ -28,7 +28,7 @@ import { axe } from 'jest-axe'; RdxAlertDialogClose ], template: ` -
+
@@ -51,8 +51,8 @@ class TestHostComponent { changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxAlertDialogTrigger, RdxAlertDialogRoot, RdxAlertDialogPortal, RdxAlertDialogPopup], template: ` - -
+ +
Popup
diff --git a/packages/primitives/alert-dialog/index.ts b/packages/primitives/alert-dialog/index.ts index c770a1165..147db8273 100644 --- a/packages/primitives/alert-dialog/index.ts +++ b/packages/primitives/alert-dialog/index.ts @@ -1,4 +1,3 @@ -import { NgModule } from '@angular/core'; import { RdxAlertDialogBackdrop } from './src/alert-dialog-backdrop'; import { RdxAlertDialogClose } from './src/alert-dialog-close'; import { RdxAlertDialogDescription } from './src/alert-dialog-description'; @@ -8,6 +7,7 @@ import { RdxAlertDialogRoot } from './src/alert-dialog-root'; import { RdxAlertDialogTitle } from './src/alert-dialog-title'; import { RdxAlertDialogTrigger } from './src/alert-dialog-trigger'; import { RdxAlertDialogViewport } from './src/alert-dialog-viewport'; +import { NgModule } from '@angular/core'; export * from './src/alert-dialog-backdrop'; export * from './src/alert-dialog-close'; diff --git a/packages/primitives/alert-dialog/stories/alert-dialog-close-confirmation.ts b/packages/primitives/alert-dialog/stories/alert-dialog-close-confirmation.ts index 6a6e1b2af..326f84174 100644 --- a/packages/primitives/alert-dialog/stories/alert-dialog-close-confirmation.ts +++ b/packages/primitives/alert-dialog/stories/alert-dialog-close-confirmation.ts @@ -1,8 +1,8 @@ +import { cn, demoButton, demoDialog, demoInput } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { alertDialogImports } from '@radix-ng/primitives/alert-dialog'; import { dialogImports, RdxDialogOpenChange } from '@radix-ng/primitives/dialog'; -import { cn, demoButton, demoDialog, demoInput } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -10,20 +10,20 @@ import { cn, demoButton, demoDialog, demoInput } from '../../storybook/styles'; imports: [...dialogImports, ...alertDialogImports, FormsModule], template: ` -
- +
+ -
-
-

Edit note

-

+

+
+

Edit note

+

Closing with unsaved changes asks an alert dialog to confirm.

@@ -35,12 +35,12 @@ import { cn, demoButton, demoDialog, demoInput } from '../../storybook/styles';
-
+
-
-
-

Discard changes?

-

Your unsaved note will be lost.

+
+
+

Discard changes?

+

Your unsaved note will be lost.

-
-
-
-

+
+
+

{{ triggerId() === 'delete' ? 'Delete account?' : 'Log out?' }}

-

+

Both open and @@ -34,10 +34,10 @@ import { cn, demoButton, demoDialog } from '../../storybook/styles'; are bound, so the active action is driven from component state.

- + diff --git a/packages/primitives/alert-dialog/stories/alert-dialog-controlled.ts b/packages/primitives/alert-dialog/stories/alert-dialog-controlled.ts index 9bb8673be..43705f302 100644 --- a/packages/primitives/alert-dialog/stories/alert-dialog-controlled.ts +++ b/packages/primitives/alert-dialog/stories/alert-dialog-controlled.ts @@ -1,6 +1,6 @@ +import { cn, demoButton, demoDialog } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { alertDialogImports } from '@radix-ng/primitives/alert-dialog'; -import { cn, demoButton, demoDialog } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -12,15 +12,15 @@ import { cn, demoButton, demoDialog } from '../../storybook/styles'; -
- +
+ -
+
-
-

Discard unsaved changes?

-

+

+

Discard unsaved changes?

+

The open state is owned by the component and bound with [(open)] . diff --git a/packages/primitives/alert-dialog/stories/alert-dialog-default.ts b/packages/primitives/alert-dialog/stories/alert-dialog-default.ts index 2d8fe8fa5..e82f6e4cf 100644 --- a/packages/primitives/alert-dialog/stories/alert-dialog-default.ts +++ b/packages/primitives/alert-dialog/stories/alert-dialog-default.ts @@ -1,6 +1,6 @@ +import { cn, demoButton, demoDialog } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { alertDialogImports } from '@radix-ng/primitives/alert-dialog'; -import { cn, demoButton, demoDialog } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -8,21 +8,21 @@ import { cn, demoButton, demoDialog } from '../../storybook/styles'; imports: [...alertDialogImports], template: `

- + -
+
-
-

Are you absolutely sure?

-

+

+

Are you absolutely sure?

+

This action cannot be undone. This will permanently delete your account and remove your data from our servers.

- - +
diff --git a/packages/primitives/alert-dialog/stories/alert-dialog-detached.ts b/packages/primitives/alert-dialog/stories/alert-dialog-detached.ts index 8f4f26c1e..e0d67101a 100644 --- a/packages/primitives/alert-dialog/stories/alert-dialog-detached.ts +++ b/packages/primitives/alert-dialog/stories/alert-dialog-detached.ts @@ -1,6 +1,6 @@ +import { cn, demoButton, demoDialog } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { alertDialogImports, createRdxAlertDialogHandle } from '@radix-ng/primitives/alert-dialog'; -import { cn, demoButton, demoDialog } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -9,7 +9,7 @@ import { cn, demoButton, demoDialog } from '../../storybook/styles'; template: `
- @@ -17,19 +17,19 @@ import { cn, demoButton, demoDialog } from '../../storybook/styles'; Open imperatively -
+
-
-
-

Delete this file?

-

+

+
+

Delete this file?

+

The trigger and this alert dialog are connected with createRdxAlertDialogHandle() .

- - + +
diff --git a/packages/primitives/alert-dialog/stories/alert-dialog-from-menu.ts b/packages/primitives/alert-dialog/stories/alert-dialog-from-menu.ts index 124af23fd..7f86010b3 100644 --- a/packages/primitives/alert-dialog/stories/alert-dialog-from-menu.ts +++ b/packages/primitives/alert-dialog/stories/alert-dialog-from-menu.ts @@ -1,7 +1,7 @@ +import { cn, demoButton, demoDialog, demoMenu } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { alertDialogImports } from '@radix-ng/primitives/alert-dialog'; import { RdxMenuModule } from '@radix-ng/primitives/menu'; -import { cn, demoButton, demoDialog, demoMenu } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -9,32 +9,32 @@ import { cn, demoButton, demoDialog, demoMenu } from '../../storybook/styles'; imports: [...alertDialogImports, RdxMenuModule], template: ` - + @if (menu.open()) { -
-
- - -
- +
+
+ + +
+
} -
+
-
-
-

Delete project?

-

+

+
+

Delete project?

+

This permanently deletes the project. Opened by controlling the alert dialog from a menu item.

- - + +
diff --git a/packages/primitives/alert-dialog/stories/alert-dialog-multiple-triggers.ts b/packages/primitives/alert-dialog/stories/alert-dialog-multiple-triggers.ts index 46bf32ce4..fa3876ae0 100644 --- a/packages/primitives/alert-dialog/stories/alert-dialog-multiple-triggers.ts +++ b/packages/primitives/alert-dialog/stories/alert-dialog-multiple-triggers.ts @@ -1,6 +1,6 @@ +import { cn, demoButton, demoDialog } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { alertDialogImports } from '@radix-ng/primitives/alert-dialog'; -import { cn, demoButton, demoDialog } from '../../storybook/styles'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -9,29 +9,29 @@ import { cn, demoButton, demoDialog } from '../../storybook/styles'; template: `
- - -
-
-
-

Delete this {{ root.payload() || 'item' }}?

-

+

+
+

Delete this {{ root.payload() || 'item' }}?

+

Every trigger opens the same alert dialog; the active trigger's payload decides what is being deleted.

- - + +
diff --git a/packages/primitives/alert-dialog/stories/alert-dialog.stories.ts b/packages/primitives/alert-dialog/stories/alert-dialog.stories.ts index 9a267b68b..be9da79a0 100644 --- a/packages/primitives/alert-dialog/stories/alert-dialog.stories.ts +++ b/packages/primitives/alert-dialog/stories/alert-dialog.stories.ts @@ -1,11 +1,10 @@ -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { RdxAlertDialogCloseConfirmationComponent } from './alert-dialog-close-confirmation'; import closeConfirmationSource from './alert-dialog-close-confirmation?raw'; import { RdxAlertDialogControlledComponent } from './alert-dialog-controlled'; +import controlledSource from './alert-dialog-controlled?raw'; import { RdxAlertDialogControlledMultipleComponent } from './alert-dialog-controlled-multiple'; import controlledMultipleSource from './alert-dialog-controlled-multiple?raw'; -import controlledSource from './alert-dialog-controlled?raw'; import { RdxAlertDialogDefaultComponent } from './alert-dialog-default'; import defaultSource from './alert-dialog-default?raw'; import { RdxAlertDialogDetachedComponent } from './alert-dialog-detached'; @@ -14,6 +13,7 @@ import { RdxAlertDialogFromMenuComponent } from './alert-dialog-from-menu'; import fromMenuSource from './alert-dialog-from-menu?raw'; import { RdxAlertDialogMultipleTriggersComponent } from './alert-dialog-multiple-triggers'; import multipleTriggersSource from './alert-dialog-multiple-triggers?raw'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const html = String.raw; diff --git a/packages/primitives/arrow/__tests__/arrow.spec.ts b/packages/primitives/arrow/__tests__/arrow.spec.ts index 97a65712a..3aeb4c914 100644 --- a/packages/primitives/arrow/__tests__/arrow.spec.ts +++ b/packages/primitives/arrow/__tests__/arrow.spec.ts @@ -1,7 +1,7 @@ +import { RdxArrow } from '../src/arrow'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { RdxArrow } from '../src/arrow'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, diff --git a/packages/primitives/arrow/src/arrow.ts b/packages/primitives/arrow/src/arrow.ts index 0bf03580f..1da05a4c5 100644 --- a/packages/primitives/arrow/src/arrow.ts +++ b/packages/primitives/arrow/src/arrow.ts @@ -7,13 +7,13 @@ import { NumberInput } from '@radix-ng/primitives/core'; template: ` diff --git a/packages/primitives/aspect-ratio/__tests__/aspect-ratio.directive.spec.ts b/packages/primitives/aspect-ratio/__tests__/aspect-ratio.directive.spec.ts index f5d915a90..c04e09fab 100644 --- a/packages/primitives/aspect-ratio/__tests__/aspect-ratio.directive.spec.ts +++ b/packages/primitives/aspect-ratio/__tests__/aspect-ratio.directive.spec.ts @@ -1,10 +1,10 @@ +import { RdxAspectRatioDirective } from '../src/aspect-ratio.directive'; import { Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { RdxAspectRatioDirective } from '../src/aspect-ratio.directive'; @Component({ template: ` -
+
`, imports: [RdxAspectRatioDirective] }) diff --git a/packages/primitives/aspect-ratio/stories/aspect-ratio.stories.ts b/packages/primitives/aspect-ratio/stories/aspect-ratio.stories.ts index 5e37828e3..1436e2b0e 100644 --- a/packages/primitives/aspect-ratio/stories/aspect-ratio.stories.ts +++ b/packages/primitives/aspect-ratio/stories/aspect-ratio.stories.ts @@ -1,6 +1,6 @@ -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { RdxAspectRatioDirective } from '../src/aspect-ratio.directive'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const html = String.raw; diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-aria-selected.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-aria-selected.spec.ts index 40a1bb2d2..764fbd780 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-aria-selected.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-aria-selected.spec.ts @@ -1,7 +1,7 @@ +import { _importsAutocomplete } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; /** * Regression (ADR 0014 review, Finding 3): autocomplete is always `selectionMode="none"`, so options @@ -12,13 +12,13 @@ import { _importsAutocomplete } from '../index'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-auto-highlight.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-auto-highlight.spec.ts index 135345fce..03e0cfa7b 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-auto-highlight.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-auto-highlight.spec.ts @@ -1,16 +1,16 @@ +import { _importsAutocomplete } from '../index'; +import { RdxAutocompleteRoot } from '../src/autocomplete-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; -import { RdxAutocompleteRoot } from '../src/autocomplete-root'; // Bare `autoHighlight` attribute (no value) — the common authoring form. Must coerce to `true`. @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-engine-parity.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-engine-parity.spec.ts index e6121e555..568fc33d6 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-engine-parity.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-engine-parity.spec.ts @@ -1,9 +1,9 @@ +import { _importsAutocomplete } from '../index'; +import { AutocompleteItemHighlightedDetails, RdxAutocompleteRoot } from '../src/autocomplete-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; -import { AutocompleteItemHighlightedDetails, RdxAutocompleteRoot } from '../src/autocomplete-root'; /** * Characterization tests (ADR 0014, Phase 0): pin engine behaviors that autocomplete shares with @@ -15,18 +15,18 @@ import { AutocompleteItemHighlightedDetails, RdxAutocompleteRoot } from '../src/ imports: [_importsAutocomplete], template: `
@for (item of items; track item) { -
{{ item }}
+
{{ item }}
}
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-filter-value.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-filter-value.spec.ts index 7c1d2c8fa..502a2b433 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-filter-value.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-filter-value.spec.ts @@ -1,9 +1,9 @@ +import { _importsAutocomplete } from '../index'; +import { AutocompleteFilter } from '../src/autocomplete-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AcceptableValue } from '@radix-ng/primitives/core'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; -import { AutocompleteFilter } from '../src/autocomplete-root'; /** * Regression (ADR 0014 review): the value-first filter contract must hand the custom filter the real @@ -14,14 +14,14 @@ import { AutocompleteFilter } from '../src/autocomplete-root'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
Plain
-
Empty
-
Null
+
Empty
+
Null
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-forms.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-forms.spec.ts index 8ce0a7344..4c03eba70 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-forms.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-forms.spec.ts @@ -1,15 +1,15 @@ +import { _importsAutocomplete } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { form, FormField } from '@angular/forms/signals'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete, ReactiveFormsModule], template: ` -
+
@@ -33,7 +33,7 @@ class ReactiveHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete, FormsModule], template: ` -
+
@@ -140,7 +140,7 @@ describe('Autocomplete forms', () => { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
@@ -166,7 +166,7 @@ class AutocompleteValidationHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete, FormField], template: ` -
+
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-grid.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-grid.spec.ts index 627d6c22c..8d1a244e0 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-grid.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-grid.spec.ts @@ -1,13 +1,13 @@ +import { _importsAutocomplete } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
@@ -146,7 +146,7 @@ describe('Autocomplete grid', () => { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-hover.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-hover.spec.ts index fdc360aba..ffe688f23 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-hover.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-hover.spec.ts @@ -1,13 +1,13 @@ +import { _importsAutocomplete } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-inline-list.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-inline-list.spec.ts index ce6fbeadf..733df2da6 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-inline-list.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-inline-list.spec.ts @@ -1,7 +1,7 @@ +import { _importsAutocomplete } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; /** * Command-palette / "inline list" composition: the `List` is rendered directly under the root with no @@ -12,7 +12,7 @@ import { _importsAutocomplete } from '../index'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
@for (item of items(); track item) { diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-modes.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-modes.spec.ts index 1db0d3cf3..e0a8471ef 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-modes.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-modes.spec.ts @@ -1,15 +1,15 @@ +import { _importsAutocomplete } from '../index'; +import { AutocompleteMode, RdxAutocompleteRoot } from '../src/autocomplete-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; -import { AutocompleteMode, RdxAutocompleteRoot } from '../src/autocomplete-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-pointer.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-pointer.spec.ts index cd82691ec..459c63670 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-pointer.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-pointer.spec.ts @@ -1,7 +1,7 @@ +import { _importsAutocomplete } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; /** * Autocomplete pointer/click selection (ADR 0014, Finding 6 — Base UI parity) — mirrors the combobox @@ -12,7 +12,7 @@ import { _importsAutocomplete } from '../index'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-popup-input.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-popup-input.spec.ts index 879e86479..f952b0cb3 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-popup-input.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-popup-input.spec.ts @@ -1,13 +1,13 @@ +import { _importsAutocomplete } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: ` -
+
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-readonly.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-readonly.spec.ts index 6739b8998..065438cdf 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-readonly.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-readonly.spec.ts @@ -1,8 +1,8 @@ +import { _importsAutocomplete } from '../index'; +import { AutocompleteValueChangeDetails } from '../src/autocomplete-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; -import { AutocompleteValueChangeDetails } from '../src/autocomplete-root'; /** * Regression (ADR 0014 review, Finding 1): autocomplete's value IS the input string, so its single @@ -15,11 +15,11 @@ import { AutocompleteValueChangeDetails } from '../src/autocomplete-root'; imports: [_importsAutocomplete], template: `
@@ -27,7 +27,7 @@ import { AutocompleteValueChangeDetails } from '../src/autocomplete-root';
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete-virtualized.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete-virtualized.spec.ts index e8b78bcef..709ab9e4e 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete-virtualized.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete-virtualized.spec.ts @@ -1,7 +1,7 @@ +import { _importsAutocomplete } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -9,20 +9,20 @@ import { _importsAutocomplete } from '../index'; template: `
@for (item of ac.filteredItems(); track item; let i = $index) { -
{{ item }}
+
{{ item }}
}
diff --git a/packages/primitives/autocomplete/__tests__/autocomplete.spec.ts b/packages/primitives/autocomplete/__tests__/autocomplete.spec.ts index 0c7f62b58..8098579d3 100644 --- a/packages/primitives/autocomplete/__tests__/autocomplete.spec.ts +++ b/packages/primitives/autocomplete/__tests__/autocomplete.spec.ts @@ -1,25 +1,25 @@ +import { _importsAutocomplete } from '../index'; +import { AutocompleteFilter, AutocompleteValueChangeDetails, RdxAutocompleteRoot } from '../src/autocomplete-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { RdxComboboxOpenChange } from '@radix-ng/primitives/combobox'; import { axe } from 'jest-axe'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsAutocomplete } from '../index'; -import { AutocompleteFilter, AutocompleteValueChangeDetails, RdxAutocompleteRoot } from '../src/autocomplete-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsAutocomplete], template: `
diff --git a/packages/primitives/autocomplete/index.ts b/packages/primitives/autocomplete/index.ts index f0c3def31..e3f5d7ef7 100644 --- a/packages/primitives/autocomplete/index.ts +++ b/packages/primitives/autocomplete/index.ts @@ -1,4 +1,3 @@ -import { NgModule } from '@angular/core'; import { RdxAutocompleteAnchor } from './src/autocomplete-anchor'; import { RdxAutocompleteArrow } from './src/autocomplete-arrow'; import { RdxAutocompleteBackdrop } from './src/autocomplete-backdrop'; @@ -22,6 +21,7 @@ import { RdxAutocompleteSeparator } from './src/autocomplete-separator'; import { RdxAutocompleteStatus } from './src/autocomplete-status'; import { RdxAutocompleteTrigger } from './src/autocomplete-trigger'; import { RdxAutocompleteValue } from './src/autocomplete-value'; +import { NgModule } from '@angular/core'; export * from './src/autocomplete-anchor'; export * from './src/autocomplete-arrow'; diff --git a/packages/primitives/autocomplete/src/autocomplete-clear.ts b/packages/primitives/autocomplete/src/autocomplete-clear.ts index 689efa4c6..74ddcfbe8 100644 --- a/packages/primitives/autocomplete/src/autocomplete-clear.ts +++ b/packages/primitives/autocomplete/src/autocomplete-clear.ts @@ -1,6 +1,6 @@ +import { RdxAutocompleteRoot } from './autocomplete-root'; import { computed, Directive, inject } from '@angular/core'; import { RdxFloatingInsideElement } from '@radix-ng/primitives/dismissable-layer'; -import { RdxAutocompleteRoot } from './autocomplete-root'; /** * Clears the input value. Hidden when there is nothing to clear. diff --git a/packages/primitives/autocomplete/src/autocomplete-input-group.ts b/packages/primitives/autocomplete/src/autocomplete-input-group.ts index 46f0e9b34..0c6f1ac00 100644 --- a/packages/primitives/autocomplete/src/autocomplete-input-group.ts +++ b/packages/primitives/autocomplete/src/autocomplete-input-group.ts @@ -1,5 +1,5 @@ -import { Directive, inject } from '@angular/core'; import { RdxAutocompleteRoot } from './autocomplete-root'; +import { Directive, inject } from '@angular/core'; const attr = (value: boolean) => (value ? '' : undefined); diff --git a/packages/primitives/autocomplete/src/autocomplete-input.ts b/packages/primitives/autocomplete/src/autocomplete-input.ts index c9c79455c..590df9065 100644 --- a/packages/primitives/autocomplete/src/autocomplete-input.ts +++ b/packages/primitives/autocomplete/src/autocomplete-input.ts @@ -1,3 +1,5 @@ +import { RdxAutocompletePositioner } from './autocomplete-positioner'; +import { RdxAutocompleteRoot } from './autocomplete-root'; import { afterNextRender, afterRenderEffect, @@ -13,8 +15,6 @@ import { BooleanInput, injectId } from '@radix-ng/primitives/core'; import { RdxFloatingInsideElement } from '@radix-ng/primitives/dismissable-layer'; import { injectFieldRootContext } from '@radix-ng/primitives/field'; import { RdxPopperAnchor } from '@radix-ng/primitives/popper'; -import { RdxAutocompletePositioner } from './autocomplete-positioner'; -import { RdxAutocompleteRoot } from './autocomplete-root'; const attr = (value: boolean) => (value ? '' : undefined); diff --git a/packages/primitives/autocomplete/src/autocomplete-item.ts b/packages/primitives/autocomplete/src/autocomplete-item.ts index f871681be..8cdf0e064 100644 --- a/packages/primitives/autocomplete/src/autocomplete-item.ts +++ b/packages/primitives/autocomplete/src/autocomplete-item.ts @@ -1,3 +1,4 @@ +import { RdxAutocompleteRow } from './autocomplete-row'; import { afterNextRender, afterRenderEffect, @@ -18,7 +19,6 @@ import { provideComboboxItemContext } from '@radix-ng/primitives/combobox'; import { AcceptableValue, injectId } from '@radix-ng/primitives/core'; -import { RdxAutocompleteRow } from './autocomplete-row'; const itemContext = () => { const item = inject(RdxAutocompleteItem); diff --git a/packages/primitives/autocomplete/src/autocomplete-list.ts b/packages/primitives/autocomplete/src/autocomplete-list.ts index a32a5e290..be6e78ada 100644 --- a/packages/primitives/autocomplete/src/autocomplete-list.ts +++ b/packages/primitives/autocomplete/src/autocomplete-list.ts @@ -1,5 +1,5 @@ -import { Directive, inject } from '@angular/core'; import { RdxAutocompleteRoot } from './autocomplete-root'; +import { Directive, inject } from '@angular/core'; /** * The listbox (or grid) container for suggestions. Carries the id referenced by the input's diff --git a/packages/primitives/autocomplete/src/autocomplete-popup.ts b/packages/primitives/autocomplete/src/autocomplete-popup.ts index 1f293d981..cf8230778 100644 --- a/packages/primitives/autocomplete/src/autocomplete-popup.ts +++ b/packages/primitives/autocomplete/src/autocomplete-popup.ts @@ -1,3 +1,4 @@ +import { RdxAutocompleteRoot } from './autocomplete-root'; import { afterRenderEffect, computed, DestroyRef, Directive, ElementRef, inject } from '@angular/core'; import { RDX_FLOATING_REGISTRATION, @@ -7,7 +8,6 @@ import { } from '@radix-ng/primitives/core'; import { RdxDismiss } from '@radix-ng/primitives/dismissable-layer'; import { injectPopperContentWrapperContext, RdxPopperContent } from '@radix-ng/primitives/popper'; -import { RdxAutocompleteRoot } from './autocomplete-root'; /** * The popup surface. Composes the popper content (for `data-side` / `data-align`) and a dismissable diff --git a/packages/primitives/autocomplete/src/autocomplete-positioner.ts b/packages/primitives/autocomplete/src/autocomplete-positioner.ts index 910a95ce7..57877770d 100644 --- a/packages/primitives/autocomplete/src/autocomplete-positioner.ts +++ b/packages/primitives/autocomplete/src/autocomplete-positioner.ts @@ -1,3 +1,4 @@ +import { RdxAutocompleteRoot } from './autocomplete-root'; import { afterNextRender, Directive, ElementRef, inject, Injector } from '@angular/core'; import { setupInternalBackdrop } from '@radix-ng/primitives/core'; import { @@ -5,7 +6,6 @@ import { provideRdxPopperContentWrapper, RdxPopperContentWrapper } from '@radix-ng/primitives/popper'; -import { RdxAutocompleteRoot } from './autocomplete-root'; /** * Positions the autocomplete popup relative to the input anchor using the popper engine. diff --git a/packages/primitives/autocomplete/src/autocomplete-root.ts b/packages/primitives/autocomplete/src/autocomplete-root.ts index a9c3eff73..1ba81a3cc 100644 --- a/packages/primitives/autocomplete/src/autocomplete-root.ts +++ b/packages/primitives/autocomplete/src/autocomplete-root.ts @@ -31,9 +31,9 @@ import { BooleanInput, createCancelableChangeEventDetails, createFloatingRootContext, - itemToStringLabel as defaultItemToStringLabel, Direction, isItemEqualToValue as itemsEqual, + itemToStringLabel as defaultItemToStringLabel, ItemValueComparator, provideFloatingRootContext, provideFloatingTree, diff --git a/packages/primitives/autocomplete/src/autocomplete-value.ts b/packages/primitives/autocomplete/src/autocomplete-value.ts index 2363a9583..f9d0f53bd 100644 --- a/packages/primitives/autocomplete/src/autocomplete-value.ts +++ b/packages/primitives/autocomplete/src/autocomplete-value.ts @@ -1,5 +1,5 @@ -import { computed, Directive, inject, input } from '@angular/core'; import { RdxAutocompleteRoot } from './autocomplete-root'; +import { computed, Directive, inject, input } from '@angular/core'; /** * Renders the current input value as text. Useful for a read-only display of the committed value. diff --git a/packages/primitives/autocomplete/stories/autocomplete-async.ts b/packages/primitives/autocomplete/stories/autocomplete-async.ts index bf20ee4f7..7cf564fef 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-async.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-async.ts @@ -1,6 +1,6 @@ -import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; import { demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; interface Movie { id: string; @@ -123,18 +123,18 @@ const top100Movies: Movie[] = [ selector: 'autocomplete-async', imports: [_importsAutocomplete], template: ` -
-
+
+
-
-
+
+
@if (loading()) { -
+
@for (movie of results(); track movie.id) { -
+
{{ movie.title }} {{ movie.year }}
diff --git a/packages/primitives/autocomplete/stories/autocomplete-auto-highlight.ts b/packages/primitives/autocomplete/stories/autocomplete-auto-highlight.ts index f25054f59..7b05c4ba4 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-auto-highlight.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-auto-highlight.ts @@ -1,6 +1,6 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; const TAGS = [ 'feature', @@ -51,19 +51,19 @@ const TAGS = [ selector: 'autocomplete-auto-highlight', imports: [_importsAutocomplete], template: ` -
-
- +
+
+
-
-
-
+
+
+
@for (tag of tags; track tag) { -
{{ tag }}
+
{{ tag }}
}
-
No tags found.
+
No tags found.
diff --git a/packages/primitives/autocomplete/stories/autocomplete-command-palette.ts b/packages/primitives/autocomplete/stories/autocomplete-command-palette.ts index 69a5817de..407d6ee7f 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-command-palette.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-command-palette.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { dialogImports } from '@radix-ng/primitives/dialog'; import { cn, demoButton, demoCard, demoDialog } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { dialogImports } from '@radix-ng/primitives/dialog'; interface Item { value: string; @@ -23,33 +23,33 @@ interface Group { selector: 'autocomplete-command-palette', imports: [...dialogImports, _importsAutocomplete], template: ` -
- +
+ -
+
-
-
+
+
-
+
@for (group of groups; track group.value) {
-
{{ group.value }}
+
{{ group.value }}
@for (item of group.items; track item.value) {
{{ item.label }} @@ -59,7 +59,7 @@ interface Group { }
} -
No results found.
+
No results found.
diff --git a/packages/primitives/autocomplete/stories/autocomplete-default.ts b/packages/primitives/autocomplete/stories/autocomplete-default.ts index d16cf528e..a5e805b18 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-default.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-default.ts @@ -1,6 +1,6 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { cn, demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; const TAGS = [ 'feature', @@ -51,24 +51,24 @@ const TAGS = [ selector: 'autocomplete-default', imports: [_importsAutocomplete], template: ` -
-
+
+
-
-
-
+
+
+
@for (tag of tags; track tag) { -
{{ tag }}
+
{{ tag }}
}
-
No tags found.
+
No tags found.
diff --git a/packages/primitives/autocomplete/stories/autocomplete-disabled.ts b/packages/primitives/autocomplete/stories/autocomplete-disabled.ts index ea82cde1d..f43961c42 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-disabled.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-disabled.ts @@ -1,22 +1,22 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, selector: 'autocomplete-disabled', imports: [_importsAutocomplete], template: ` -
-
- +
+
+
-
-
-
+
+
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/autocomplete/stories/autocomplete-fuzzy.ts b/packages/primitives/autocomplete/stories/autocomplete-fuzzy.ts index 063f1130a..2bedda268 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-fuzzy.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-fuzzy.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { matchSorter, rankings } from 'match-sorter'; import { cn, demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete, AutocompleteFilter } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { matchSorter, rankings } from 'match-sorter'; interface DocItem { title: string; @@ -33,17 +33,17 @@ const fuzzyFilter: AutocompleteFilter = (value, query) => { selector: 'autocomplete-fuzzy', imports: [_importsAutocomplete], template: ` -
-
- +
+
+
-
-
-
No results found for "{{ ac.value() }}".
-
+
+
+
No results found for "{{ ac.value() }}".
+
@for (item of items; track item.title) { -
+
(items: T[], size: number): T[][] { template: `
- -
-
+
+
@for (group of groups; track group.label) {
-
+
{{ group.label }}
@for (row of group.rows; track $index) {
@for (item of row; track item.emoji) { -
+
{{ item.emoji }}
} @@ -79,7 +79,7 @@ function chunk(items: T[], size: number): T[][] {
}
-
No emoji found.
+
No emoji found.
diff --git a/packages/primitives/autocomplete/stories/autocomplete-grouped.ts b/packages/primitives/autocomplete/stories/autocomplete-grouped.ts index 18ac382e5..af65f44eb 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-grouped.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-grouped.ts @@ -1,6 +1,6 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; interface Group { label: string; @@ -12,24 +12,24 @@ interface Group { selector: 'autocomplete-grouped', imports: [_importsAutocomplete], template: ` -
-
- +
+
+
-
-
-
+
+
+
@for (group of groups; track group.label) {
-
{{ group.label }}
+
{{ group.label }}
@for (item of group.items; track item) { -
{{ item }}
+
{{ item }}
}
}
-
No tags found.
+
No tags found.
diff --git a/packages/primitives/autocomplete/stories/autocomplete-inline.ts b/packages/primitives/autocomplete/stories/autocomplete-inline.ts index a18d89af0..398f34846 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-inline.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-inline.ts @@ -1,6 +1,6 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; const TAGS = [ 'feature', @@ -51,19 +51,19 @@ const TAGS = [ selector: 'autocomplete-inline', imports: [_importsAutocomplete], template: ` -
-
- +
+
+
-
-
-
+
+
+
@for (tag of tags; track tag) { -
{{ tag }}
+
{{ tag }}
}
-
No tags found.
+
No tags found.
diff --git a/packages/primitives/autocomplete/stories/autocomplete-limit.ts b/packages/primitives/autocomplete/stories/autocomplete-limit.ts index e05266ee5..bcea176bb 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-limit.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-limit.ts @@ -1,25 +1,25 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, selector: 'autocomplete-limit', imports: [_importsAutocomplete], template: ` -
-
- +
+
+
-
-
-
+
+
+
@for (tag of tags; track tag) { -
{{ tag }}
+
{{ tag }}
}
-
No tags found.
+
No tags found.
@if (hiddenCount(ac.value()); as hidden) {
{{ hidden }} more {{ hidden === 1 ? 'result' : 'results' }} not shown diff --git a/packages/primitives/autocomplete/stories/autocomplete-reactive-forms.ts b/packages/primitives/autocomplete/stories/autocomplete-reactive-forms.ts index 4676760b0..bc1bbdc83 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-reactive-forms.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-reactive-forms.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; /** * Reactive forms: the form value **is** the input string (typed or selected). Bind `[formControl]` @@ -13,19 +13,19 @@ import { _importsAutocomplete } from '../index'; imports: [_importsAutocomplete, ReactiveFormsModule], template: `
-
-
- +
+
+
-
-
-
+
+
+
@for (item of fruits; track item) { -
{{ item }}
+
{{ item }}
}
-
No fruit found.
+
No fruit found.
diff --git a/packages/primitives/autocomplete/stories/autocomplete-template-forms.ts b/packages/primitives/autocomplete/stories/autocomplete-template-forms.ts index 54cfe5759..1d088ee33 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-template-forms.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-template-forms.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { FormsModule } from '@angular/forms'; import { demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { FormsModule } from '@angular/forms'; /** * Template-driven forms: `[(ngModel)]` binds the input string two-way. @@ -12,19 +12,19 @@ import { _importsAutocomplete } from '../index'; imports: [_importsAutocomplete, FormsModule], template: `
-
-
- +
+
+
-
-
-
+
+
+
@for (item of fruits; track item) { -
{{ item }}
+
{{ item }}
}
-
No fruit found.
+
No fruit found.
diff --git a/packages/primitives/autocomplete/stories/autocomplete-validation.ts b/packages/primitives/autocomplete/stories/autocomplete-validation.ts index e8311f89d..e4a8644f1 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-validation.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-validation.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; import { cn, demoButton, demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; /** * Reactive forms with validation. The form value **is** the input string; its validity is bound to the @@ -14,22 +14,22 @@ import { _importsAutocomplete } from '../index'; imports: [_importsAutocomplete, ReactiveFormsModule], template: ` -
+
- +
-
-
-
+
+
+
@for (item of fruits; track item) { -
{{ item }}
+
{{ item }}
}
-
No fruit found.
+
No fruit found.
@@ -38,7 +38,7 @@ import { _importsAutocomplete } from '../index';

Please enter a fruit.

} - + @if (submitted()) {

Submitted ✓

diff --git a/packages/primitives/autocomplete/stories/autocomplete-virtualized.ts b/packages/primitives/autocomplete/stories/autocomplete-virtualized.ts index 9b63e2e24..4c05ccc71 100644 --- a/packages/primitives/autocomplete/stories/autocomplete-virtualized.ts +++ b/packages/primitives/autocomplete/stories/autocomplete-virtualized.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, ElementRef, signal, viewChild } from '@angular/core'; -import { injectVirtualizer } from '@tanstack/angular-virtual'; import { cn, demoCombobox } from '../../storybook/styles'; import { _importsAutocomplete, AutocompleteItemHighlightedDetails, RdxAutocompleteRoot } from '../index'; +import { ChangeDetectionStrategy, Component, ElementRef, signal, viewChild } from '@angular/core'; +import { injectVirtualizer } from '@tanstack/angular-virtual'; /** * Externally virtualized list of 10,000 items. The autocomplete owns filtering and index navigation @@ -16,30 +16,30 @@ import { _importsAutocomplete, AutocompleteItemHighlightedDetails, RdxAutocomple template: `
-
- +
+
-
-
-
No items found.
-
+
+
+
No items found.
+
@for (row of virtualizer.getVirtualItems(); track row.key) {
{{ ac.filteredItems()[row.index] }}
diff --git a/packages/primitives/autocomplete/stories/autocomplete.stories.ts b/packages/primitives/autocomplete/stories/autocomplete.stories.ts index 2a1ba54d8..5a001fa79 100644 --- a/packages/primitives/autocomplete/stories/autocomplete.stories.ts +++ b/packages/primitives/autocomplete/stories/autocomplete.stories.ts @@ -1,4 +1,3 @@ -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { AutocompleteAsync } from './autocomplete-async'; import asyncSource from './autocomplete-async?raw'; @@ -28,6 +27,7 @@ import { AutocompleteValidation } from './autocomplete-validation'; import validationSource from './autocomplete-validation?raw'; import { AutocompleteVirtualizedExample } from './autocomplete-virtualized'; import virtualizedSource from './autocomplete-virtualized?raw'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const html = String.raw; diff --git a/packages/primitives/avatar/__tests__/avatar-fallback.directive.spec.ts b/packages/primitives/avatar/__tests__/avatar-fallback.directive.spec.ts index 60e25f087..c101cc4db 100644 --- a/packages/primitives/avatar/__tests__/avatar-fallback.directive.spec.ts +++ b/packages/primitives/avatar/__tests__/avatar-fallback.directive.spec.ts @@ -1,9 +1,9 @@ +import { RdxAvatarFallbackDirective } from '../src/avatar-fallback.directive'; +import { RdxAvatarRootDirective } from '../src/avatar-root.directive'; import { ChangeDetectionStrategy, Component, PLATFORM_ID } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { afterEach, vi } from 'vitest'; -import { RdxAvatarFallbackDirective } from '../src/avatar-fallback.directive'; -import { RdxAvatarRootDirective } from '../src/avatar-root.directive'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -12,7 +12,7 @@ import { RdxAvatarRootDirective } from '../src/avatar-root.directive'; imports: [RdxAvatarFallbackDirective, RdxAvatarRootDirective], template: ` - fallback + fallback fallback2 ` diff --git a/packages/primitives/avatar/__tests__/avatar-image.directive.spec.ts b/packages/primitives/avatar/__tests__/avatar-image.directive.spec.ts index 3946e3da7..fbb7374c9 100644 --- a/packages/primitives/avatar/__tests__/avatar-image.directive.spec.ts +++ b/packages/primitives/avatar/__tests__/avatar-image.directive.spec.ts @@ -1,9 +1,9 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { By } from '@angular/platform-browser'; import { RdxAvatarFallbackDirective } from '../src/avatar-fallback.directive'; import { RdxAvatarImageDirective } from '../src/avatar-image.directive'; import { RdxAvatarRootDirective } from '../src/avatar-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, diff --git a/packages/primitives/avatar/index.ts b/packages/primitives/avatar/index.ts index e040b5a8b..88e33d218 100644 --- a/packages/primitives/avatar/index.ts +++ b/packages/primitives/avatar/index.ts @@ -1,13 +1,13 @@ -import { NgModule } from '@angular/core'; import { RdxAvatarFallbackDirective } from './src/avatar-fallback.directive'; import { RdxAvatarImageDirective } from './src/avatar-image.directive'; import { RdxAvatarRootDirective } from './src/avatar-root.directive'; +import { NgModule } from '@angular/core'; +export * from './src/avatar.config'; export * from './src/avatar-context.token'; export * from './src/avatar-fallback.directive'; export * from './src/avatar-image.directive'; export * from './src/avatar-root.directive'; -export * from './src/avatar.config'; export type { HTMLAttributeReferrerPolicy, RdxImageLoadingStatus } from './src/types'; const _imports = [RdxAvatarRootDirective, RdxAvatarFallbackDirective, RdxAvatarImageDirective]; diff --git a/packages/primitives/avatar/src/avatar-context.token.ts b/packages/primitives/avatar/src/avatar-context.token.ts index b56e81da1..2e589811d 100644 --- a/packages/primitives/avatar/src/avatar-context.token.ts +++ b/packages/primitives/avatar/src/avatar-context.token.ts @@ -1,6 +1,6 @@ +import { RdxImageLoadingStatus } from './types'; import { WritableSignal } from '@angular/core'; import { createContext } from '@radix-ng/primitives/core'; -import { RdxImageLoadingStatus } from './types'; export interface AvatarRootContext { imageLoadingStatus: WritableSignal; diff --git a/packages/primitives/avatar/src/avatar-fallback.directive.ts b/packages/primitives/avatar/src/avatar-fallback.directive.ts index e53a3526e..850abc95d 100644 --- a/packages/primitives/avatar/src/avatar-fallback.directive.ts +++ b/packages/primitives/avatar/src/avatar-fallback.directive.ts @@ -1,7 +1,7 @@ +import { injectAvatarConfig } from './avatar.config'; +import { injectAvatarRootContext } from './avatar-context.token'; import { Directive, input, signal } from '@angular/core'; import { watch } from '@radix-ng/primitives/core'; -import { injectAvatarRootContext } from './avatar-context.token'; -import { injectAvatarConfig } from './avatar.config'; /** * @group Components diff --git a/packages/primitives/avatar/src/avatar-image.directive.ts b/packages/primitives/avatar/src/avatar-image.directive.ts index 1f5100772..222767565 100644 --- a/packages/primitives/avatar/src/avatar-image.directive.ts +++ b/packages/primitives/avatar/src/avatar-image.directive.ts @@ -1,8 +1,8 @@ +import { injectAvatarRootContext } from './avatar-context.token'; +import { HTMLAttributeReferrerPolicy, RdxImageLoadingStatus } from './types'; import { isPlatformBrowser } from '@angular/common'; import { Directive, inject, input, output, PLATFORM_ID, signal } from '@angular/core'; import { watch } from '@radix-ng/primitives/core'; -import { injectAvatarRootContext } from './avatar-context.token'; -import { HTMLAttributeReferrerPolicy, RdxImageLoadingStatus } from './types'; /** * @group Components diff --git a/packages/primitives/avatar/src/avatar-root.directive.ts b/packages/primitives/avatar/src/avatar-root.directive.ts index fb9eb1c4f..497ee7a90 100644 --- a/packages/primitives/avatar/src/avatar-root.directive.ts +++ b/packages/primitives/avatar/src/avatar-root.directive.ts @@ -1,6 +1,6 @@ -import { Directive, inject, signal } from '@angular/core'; import { AvatarRootContext, provideAvatarRootContext } from './avatar-context.token'; import { RdxImageLoadingStatus } from './types'; +import { Directive, inject, signal } from '@angular/core'; const rootContext = (): AvatarRootContext => { const root = inject(RdxAvatarRootDirective); diff --git a/packages/primitives/avatar/stories/avatar.stories.ts b/packages/primitives/avatar/stories/avatar.stories.ts index c7542e677..338d2e443 100644 --- a/packages/primitives/avatar/stories/avatar.stories.ts +++ b/packages/primitives/avatar/stories/avatar.stories.ts @@ -1,4 +1,3 @@ -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { RdxAvatarFallbackDirective } from '../src/avatar-fallback.directive'; import { RdxAvatarImageDirective } from '../src/avatar-image.directive'; @@ -9,6 +8,7 @@ import { RdxAvatarFallbackComponent, RdxAvatarSizesComponent } from './avatar'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const html = String.raw; diff --git a/packages/primitives/avatar/stories/avatar.ts b/packages/primitives/avatar/stories/avatar.ts index 197b9e815..a4ed0c7e0 100644 --- a/packages/primitives/avatar/stories/avatar.ts +++ b/packages/primitives/avatar/stories/avatar.ts @@ -1,8 +1,8 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; import { cn, demoAvatar } from '../../storybook/styles'; import { RdxAvatarFallbackDirective } from '../src/avatar-fallback.directive'; import { RdxAvatarImageDirective } from '../src/avatar-image.directive'; import { RdxAvatarRootDirective } from '../src/avatar-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; const IMG_COLM = 'https://images.unsplash.com/photo-1492633423870-43d1cd2775eb?&w=128&h=128&dpr=2&q=80'; const IMG_PEDRO = 'https://images.unsplash.com/photo-1511485977113-f34c92461ad9?ixlib=rb-1.2.1&w=128&h=128&dpr=2&q=80'; @@ -18,14 +18,14 @@ const AVATAR_DIRECTIVES = [RdxAvatarRootDirective, RdxAvatarImageDirective, RdxA imports: AVATAR_DIRECTIVES, template: `
- - Colm Tuite - CT + + Colm Tuite + CT - - Pedro Duarte - PD + + Pedro Duarte + PD
` @@ -46,17 +46,17 @@ export class RdxAvatarDemoComponent { imports: AVATAR_DIRECTIVES, template: `
- - Colm Tuite - CT + + Colm Tuite + CT - - Colm Tuite - CT + + Colm Tuite + CT - - Colm Tuite - CT + + Colm Tuite + CT
` @@ -77,14 +77,14 @@ export class RdxAvatarSizesComponent { template: `
- - PD + + PD - - Broken - JD + + Broken + JD
` @@ -103,9 +103,9 @@ export class RdxAvatarFallbackComponent { selector: 'rdx-avatar-delay', imports: AVATAR_DIRECTIVES, template: ` - - Slow - RN + + Slow + RN ` }) diff --git a/packages/primitives/button/__tests__/button.directive.spec.ts b/packages/primitives/button/__tests__/button.directive.spec.ts index 8258b8884..a0a4bf0c3 100644 --- a/packages/primitives/button/__tests__/button.directive.spec.ts +++ b/packages/primitives/button/__tests__/button.directive.spec.ts @@ -1,18 +1,18 @@ +import { RdxButtonDirective } from '../src/button.directive'; import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { RdxButtonDirective } from '../src/button.directive'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxButtonDirective], template: ` @@ -33,7 +33,7 @@ class NativeButtonHost { imports: [RdxButtonDirective], template: ` - Link + Link ` }) class AnchorHost { diff --git a/packages/primitives/button/index.ts b/packages/primitives/button/index.ts index 241d34d1c..8ec83660e 100644 --- a/packages/primitives/button/index.ts +++ b/packages/primitives/button/index.ts @@ -1,3 +1,2 @@ -export * from './src/button.directive'; - export type { RdxButtonProps, RdxButtonType } from './src/button.directive'; +export * from './src/button.directive'; diff --git a/packages/primitives/button/stories/button-as-link.ts b/packages/primitives/button/stories/button-as-link.ts index 71162250e..d76ad3715 100644 --- a/packages/primitives/button/stories/button-as-link.ts +++ b/packages/primitives/button/stories/button-as-link.ts @@ -1,6 +1,6 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; import { cn, demoButton } from '../../storybook/styles'; import { RdxButtonDirective } from '../src/button.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; /** * The directive works on any host. Here it renders an `` as a button while @@ -11,7 +11,7 @@ import { RdxButtonDirective } from '../src/button.directive'; selector: 'rdx-button-as-link', imports: [RdxButtonDirective], template: ` - + Open Base UI ` diff --git a/packages/primitives/button/stories/button-disabled.ts b/packages/primitives/button/stories/button-disabled.ts index 6620a3361..32b8edda0 100644 --- a/packages/primitives/button/stories/button-disabled.ts +++ b/packages/primitives/button/stories/button-disabled.ts @@ -1,6 +1,6 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; import { cn, demoButton } from '../../storybook/styles'; import { RdxButtonDirective } from '../src/button.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; /** * Disabled handling. The first button uses the native `disabled` attribute @@ -13,8 +13,8 @@ import { RdxButtonDirective } from '../src/button.directive'; imports: [RdxButtonDirective], template: `
- - +
diff --git a/packages/primitives/button/stories/button-loading.ts b/packages/primitives/button/stories/button-loading.ts index 78923bb07..e859e2f57 100644 --- a/packages/primitives/button/stories/button-loading.ts +++ b/packages/primitives/button/stories/button-loading.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideDynamicIcon, LucidePlus } from '@lucide/angular'; import { cn, demoButton } from '../../storybook/styles'; import { RdxButtonDirective } from '../src/button.directive'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideDynamicIcon, LucidePlus } from '@lucide/angular'; /** * Loading state. Following Base UI's guidance, the button becomes `disabled` @@ -14,18 +14,18 @@ import { RdxButtonDirective } from '../src/button.directive'; imports: [RdxButtonDirective, LucideDynamicIcon, LucidePlus], template: ` diff --git a/packages/primitives/button/stories/button-sizes.ts b/packages/primitives/button/stories/button-sizes.ts index 9d79d1e88..7d626b259 100644 --- a/packages/primitives/button/stories/button-sizes.ts +++ b/packages/primitives/button/stories/button-sizes.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { LucideDynamicIcon, LucidePlus } from '@lucide/angular'; import { cn, demoButton } from '../../storybook/styles'; import { RdxButtonDirective } from '../src/button.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { LucideDynamicIcon, LucidePlus } from '@lucide/angular'; /** * Sizes, including a square icon button. @@ -12,10 +12,10 @@ import { RdxButtonDirective } from '../src/button.directive'; imports: [RdxButtonDirective, LucideDynamicIcon, LucidePlus], template: `
- - - - + + +
diff --git a/packages/primitives/button/stories/button-variants.ts b/packages/primitives/button/stories/button-variants.ts index 23d5deddf..7a6d87813 100644 --- a/packages/primitives/button/stories/button-variants.ts +++ b/packages/primitives/button/stories/button-variants.ts @@ -1,6 +1,6 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; import { cn, demoButton } from '../../storybook/styles'; import { RdxButtonDirective } from '../src/button.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; /** * Visual variants — the recommended `demoButton` styling from the centralized @@ -12,11 +12,11 @@ import { RdxButtonDirective } from '../src/button.directive'; imports: [RdxButtonDirective], template: `
- - - - - + + + + +
` }) diff --git a/packages/primitives/button/stories/button.stories.ts b/packages/primitives/button/stories/button.stories.ts index 7138dd91e..0e4665d4d 100644 --- a/packages/primitives/button/stories/button.stories.ts +++ b/packages/primitives/button/stories/button.stories.ts @@ -1,19 +1,18 @@ -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { cn, demoButton } from '../../storybook/styles'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { RdxButtonDirective } from '../src/button.directive'; import { RdxButtonAsLinkComponent } from './button-as-link'; -import { RdxButtonDisabledComponent } from './button-disabled'; -import { RdxButtonLoadingComponent } from './button-loading'; -import { RdxButtonSizesComponent } from './button-sizes'; -import { RdxButtonVariantsComponent } from './button-variants'; - // Full component source for the "Show code" panel (Vite `?raw` import). import asLinkSource from './button-as-link?raw'; +import { RdxButtonDisabledComponent } from './button-disabled'; import disabledSource from './button-disabled?raw'; +import { RdxButtonLoadingComponent } from './button-loading'; import loadingSource from './button-loading?raw'; +import { RdxButtonSizesComponent } from './button-sizes'; import sizesSource from './button-sizes?raw'; +import { RdxButtonVariantsComponent } from './button-variants'; import variantsSource from './button-variants?raw'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const source = (code: string) => ({ docs: { diff --git a/packages/primitives/calendar/__tests__/calendar.spec.ts b/packages/primitives/calendar/__tests__/calendar.spec.ts index b0ef6093f..e7ec5a99e 100644 --- a/packages/primitives/calendar/__tests__/calendar.spec.ts +++ b/packages/primitives/calendar/__tests__/calendar.spec.ts @@ -1,8 +1,8 @@ +import { CalendarDefault } from '../stories/calendar-default'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { CalendarDate, CalendarDateTime, DateValue, toZoned } from '@internationalized/date'; import { userEvent } from '@testing-library/user-event'; import { axe } from 'jest-axe'; -import { CalendarDefault } from '../stories/calendar-default'; type SetupConfig = { modelValue?: DateValue; diff --git a/packages/primitives/calendar/index.ts b/packages/primitives/calendar/index.ts index 333055d4b..85da8c348 100644 --- a/packages/primitives/calendar/index.ts +++ b/packages/primitives/calendar/index.ts @@ -1,11 +1,23 @@ +import { RdxCalendarCellDirective } from './src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from './src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from './src/calendar-grid.directive'; +import { RdxCalendarGridBodyDirective } from './src/calendar-grid-body.directive'; +import { RdxCalendarGridHeadDirective } from './src/calendar-grid-head.directive'; +import { RdxCalendarGridRowDirective } from './src/calendar-grid-row.directive'; +import { RdxCalendarHeadCellDirective } from './src/calendar-head-cell.directive'; +import { RdxCalendarHeaderDirective } from './src/calendar-header.directive'; +import { RdxCalendarHeadingDirective } from './src/calendar-heading.directive'; +import { RdxCalendarNextDirective } from './src/calendar-next.directive'; +import { RdxCalendarPrevDirective } from './src/calendar-prev.directive'; +import { RdxCalendarRootDirective } from './src/calendar-root.directive'; import { NgModule } from '@angular/core'; -export { RdxCalendarCellTriggerDirective } from './src/calendar-cell-trigger.directive'; export { RdxCalendarCellDirective } from './src/calendar-cell.directive'; +export { RdxCalendarCellTriggerDirective } from './src/calendar-cell-trigger.directive'; +export { RdxCalendarGridDirective } from './src/calendar-grid.directive'; export { RdxCalendarGridBodyDirective } from './src/calendar-grid-body.directive'; export { RdxCalendarGridHeadDirective } from './src/calendar-grid-head.directive'; export { RdxCalendarGridRowDirective } from './src/calendar-grid-row.directive'; -export { RdxCalendarGridDirective } from './src/calendar-grid.directive'; export { RdxCalendarHeadCellDirective } from './src/calendar-head-cell.directive'; export { RdxCalendarHeaderDirective } from './src/calendar-header.directive'; export { RdxCalendarHeadingDirective } from './src/calendar-heading.directive'; @@ -13,19 +25,6 @@ export { RdxCalendarNextDirective } from './src/calendar-next.directive'; export { RdxCalendarPrevDirective } from './src/calendar-prev.directive'; export { RdxCalendarRootDirective } from './src/calendar-root.directive'; -import { RdxCalendarCellTriggerDirective } from './src/calendar-cell-trigger.directive'; -import { RdxCalendarCellDirective } from './src/calendar-cell.directive'; -import { RdxCalendarGridBodyDirective } from './src/calendar-grid-body.directive'; -import { RdxCalendarGridHeadDirective } from './src/calendar-grid-head.directive'; -import { RdxCalendarGridRowDirective } from './src/calendar-grid-row.directive'; -import { RdxCalendarGridDirective } from './src/calendar-grid.directive'; -import { RdxCalendarHeadCellDirective } from './src/calendar-head-cell.directive'; -import { RdxCalendarHeaderDirective } from './src/calendar-header.directive'; -import { RdxCalendarHeadingDirective } from './src/calendar-heading.directive'; -import { RdxCalendarNextDirective } from './src/calendar-next.directive'; -import { RdxCalendarPrevDirective } from './src/calendar-prev.directive'; -import { RdxCalendarRootDirective } from './src/calendar-root.directive'; - const _imports = [ RdxCalendarCellTriggerDirective, RdxCalendarCellDirective, diff --git a/packages/primitives/calendar/src/calendar-cell-trigger.directive.ts b/packages/primitives/calendar/src/calendar-cell-trigger.directive.ts index 63ba0b76f..101d4ca5d 100644 --- a/packages/primitives/calendar/src/calendar-cell-trigger.directive.ts +++ b/packages/primitives/calendar/src/calendar-cell-trigger.directive.ts @@ -1,8 +1,8 @@ +import { injectCalendarRootContext } from './calendar-context.token'; import { computed, Directive, ElementRef, inject, input } from '@angular/core'; import { DateValue, getLocalTimeZone, isSameDay, isSameMonth, isToday } from '@internationalized/date'; import * as kbd from '@radix-ng/primitives/core'; import { getDaysInMonth, toDate } from '@radix-ng/primitives/core'; -import { injectCalendarRootContext } from './calendar-context.token'; @Directive({ selector: '[rdxCalendarCellTrigger]', diff --git a/packages/primitives/calendar/src/calendar-cell.directive.ts b/packages/primitives/calendar/src/calendar-cell.directive.ts index e082c091d..3d52dd5dc 100644 --- a/packages/primitives/calendar/src/calendar-cell.directive.ts +++ b/packages/primitives/calendar/src/calendar-cell.directive.ts @@ -1,6 +1,6 @@ +import { injectCalendarRootContext } from './calendar-context.token'; import { Directive, input } from '@angular/core'; import { DateValue } from '@internationalized/date'; -import { injectCalendarRootContext } from './calendar-context.token'; @Directive({ selector: 'td[rdxCalendarCell]', diff --git a/packages/primitives/calendar/src/calendar-grid.directive.ts b/packages/primitives/calendar/src/calendar-grid.directive.ts index 872d11cfc..1e9afd3c3 100644 --- a/packages/primitives/calendar/src/calendar-grid.directive.ts +++ b/packages/primitives/calendar/src/calendar-grid.directive.ts @@ -1,5 +1,5 @@ -import { computed, Directive } from '@angular/core'; import { injectCalendarRootContext } from './calendar-context.token'; +import { computed, Directive } from '@angular/core'; @Directive({ selector: 'table[rdxCalendarGrid]', diff --git a/packages/primitives/calendar/src/calendar-heading.directive.ts b/packages/primitives/calendar/src/calendar-heading.directive.ts index 79ab2bff7..859c65d2d 100644 --- a/packages/primitives/calendar/src/calendar-heading.directive.ts +++ b/packages/primitives/calendar/src/calendar-heading.directive.ts @@ -1,5 +1,5 @@ -import { computed, Directive } from '@angular/core'; import { injectCalendarRootContext } from './calendar-context.token'; +import { computed, Directive } from '@angular/core'; @Directive({ selector: 'div[rdxCalendarHeading]', diff --git a/packages/primitives/calendar/src/calendar-next.directive.ts b/packages/primitives/calendar/src/calendar-next.directive.ts index 62578bd59..a2d14a666 100644 --- a/packages/primitives/calendar/src/calendar-next.directive.ts +++ b/packages/primitives/calendar/src/calendar-next.directive.ts @@ -1,6 +1,6 @@ +import { injectCalendarRootContext } from './calendar-context.token'; import { computed, Directive, input } from '@angular/core'; import { DateValue } from '@internationalized/date'; -import { injectCalendarRootContext } from './calendar-context.token'; @Directive({ selector: 'button[rdxCalendarNext]', diff --git a/packages/primitives/calendar/src/calendar-prev.directive.ts b/packages/primitives/calendar/src/calendar-prev.directive.ts index 18579c095..388a96467 100644 --- a/packages/primitives/calendar/src/calendar-prev.directive.ts +++ b/packages/primitives/calendar/src/calendar-prev.directive.ts @@ -1,6 +1,6 @@ +import { injectCalendarRootContext } from './calendar-context.token'; import { computed, Directive, input } from '@angular/core'; import { DateValue } from '@internationalized/date'; -import { injectCalendarRootContext } from './calendar-context.token'; @Directive({ selector: 'button[rdxCalendarPrev]', diff --git a/packages/primitives/calendar/src/calendar-root.directive.ts b/packages/primitives/calendar/src/calendar-root.directive.ts index 2cb4e5732..fc1f98887 100644 --- a/packages/primitives/calendar/src/calendar-root.directive.ts +++ b/packages/primitives/calendar/src/calendar-root.directive.ts @@ -1,3 +1,5 @@ +import { calendar, calendarState } from './calendar'; +import { CALENDAR_ROOT_CONTEXT } from './calendar-context.token'; import { booleanAttribute, computed, @@ -21,8 +23,6 @@ import { watch } from '@radix-ng/primitives/core'; import { injectDirection } from '@radix-ng/primitives/direction-provider'; -import { calendar, calendarState } from './calendar'; -import { CALENDAR_ROOT_CONTEXT } from './calendar-context.token'; @Directive({ selector: '[rdxCalendarRoot]', diff --git a/packages/primitives/calendar/stories/calendar-custom-navigation.ts b/packages/primitives/calendar/stories/calendar-custom-navigation.ts index 91b803126..50fd7bb97 100644 --- a/packages/primitives/calendar/stories/calendar-custom-navigation.ts +++ b/packages/primitives/calendar/stories/calendar-custom-navigation.ts @@ -1,18 +1,18 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { CalendarDate, DateValue } from '@internationalized/date'; -import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; import { cn, demoCalendar } from '../../storybook/styles'; -import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; import { RdxCalendarCellDirective } from '../src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarGridBodyDirective } from '../src/calendar-grid-body.directive'; import { RdxCalendarGridHeadDirective } from '../src/calendar-grid-head.directive'; -import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarHeadCellDirective } from '../src/calendar-head-cell.directive'; import { RdxCalendarHeaderDirective } from '../src/calendar-header.directive'; import { RdxCalendarHeadingDirective } from '../src/calendar-heading.directive'; import { RdxCalendarNextDirective } from '../src/calendar-next.directive'; import { RdxCalendarPrevDirective } from '../src/calendar-prev.directive'; import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { CalendarDate, DateValue } from '@internationalized/date'; +import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -35,43 +35,43 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; template: `
-
- -
{{ head.headingValue() }}
-
- +
@for (month of root.months(); track $index) { @for (day of root.weekDays(); track $index) { - + } - + @for (weekDates of month.weeks; track $index) { @for (weekDate of weekDates; track $index) { -
{{ day }}{{ day }}
+
{{ cell.dayValue() }}
diff --git a/packages/primitives/calendar/stories/calendar-default.ts b/packages/primitives/calendar/stories/calendar-default.ts index 64c52101d..7e4a47255 100644 --- a/packages/primitives/calendar/stories/calendar-default.ts +++ b/packages/primitives/calendar/stories/calendar-default.ts @@ -1,18 +1,18 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { CalendarDate, DateValue } from '@internationalized/date'; -import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; import { cn, demoCalendar } from '../../storybook/styles'; -import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; import { RdxCalendarCellDirective } from '../src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarGridBodyDirective } from '../src/calendar-grid-body.directive'; import { RdxCalendarGridHeadDirective } from '../src/calendar-grid-head.directive'; -import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarHeadCellDirective } from '../src/calendar-head-cell.directive'; import { RdxCalendarHeaderDirective } from '../src/calendar-header.directive'; import { RdxCalendarHeadingDirective } from '../src/calendar-heading.directive'; import { RdxCalendarNextDirective } from '../src/calendar-next.directive'; import { RdxCalendarPrevDirective } from '../src/calendar-prev.directive'; import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { CalendarDate, DateValue } from '@internationalized/date'; +import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -33,37 +33,37 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; LucideChevronRight ], template: ` -
-
- -
{{ head.headingValue() }}
-
- +
@for (month of root.months(); track $index) { @for (day of root.weekDays(); track $index) { - + } - + @for (weekDates of month.weeks; track $index) { @for (weekDate of weekDates; track $index) { -
{{ day }}{{ day }}
+
{{ cell.dayValue() }}
diff --git a/packages/primitives/calendar/stories/calendar-disabled-dates.ts b/packages/primitives/calendar/stories/calendar-disabled-dates.ts index e05f386ab..b3451f8ec 100644 --- a/packages/primitives/calendar/stories/calendar-disabled-dates.ts +++ b/packages/primitives/calendar/stories/calendar-disabled-dates.ts @@ -1,18 +1,18 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { CalendarDate, DateValue, isWeekend } from '@internationalized/date'; -import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; import { cn, demoCalendar } from '../../storybook/styles'; -import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; import { RdxCalendarCellDirective } from '../src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarGridBodyDirective } from '../src/calendar-grid-body.directive'; import { RdxCalendarGridHeadDirective } from '../src/calendar-grid-head.directive'; -import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarHeadCellDirective } from '../src/calendar-head-cell.directive'; import { RdxCalendarHeaderDirective } from '../src/calendar-header.directive'; import { RdxCalendarHeadingDirective } from '../src/calendar-heading.directive'; import { RdxCalendarNextDirective } from '../src/calendar-next.directive'; import { RdxCalendarPrevDirective } from '../src/calendar-prev.directive'; import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { CalendarDate, DateValue, isWeekend } from '@internationalized/date'; +import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -35,42 +35,42 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; template: `
-
- -
{{ head.headingValue() }}
-
- +
@for (month of root.months(); track $index) { @for (day of root.weekDays(); track $index) { - + } - + @for (weekDates of month.weeks; track $index) { @for (weekDate of weekDates; track $index) { -
{{ day }}{{ day }}
+
{{ cell.dayValue() }}
diff --git a/packages/primitives/calendar/stories/calendar-multiple.ts b/packages/primitives/calendar/stories/calendar-multiple.ts index 8e3ad09ea..60d31db40 100644 --- a/packages/primitives/calendar/stories/calendar-multiple.ts +++ b/packages/primitives/calendar/stories/calendar-multiple.ts @@ -1,18 +1,18 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { CalendarDate } from '@internationalized/date'; -import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; import { cn, demoCalendar } from '../../storybook/styles'; -import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; import { RdxCalendarCellDirective } from '../src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarGridBodyDirective } from '../src/calendar-grid-body.directive'; import { RdxCalendarGridHeadDirective } from '../src/calendar-grid-head.directive'; -import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarHeadCellDirective } from '../src/calendar-head-cell.directive'; import { RdxCalendarHeaderDirective } from '../src/calendar-header.directive'; import { RdxCalendarHeadingDirective } from '../src/calendar-heading.directive'; import { RdxCalendarNextDirective } from '../src/calendar-next.directive'; import { RdxCalendarPrevDirective } from '../src/calendar-prev.directive'; import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { CalendarDate } from '@internationalized/date'; +import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -33,37 +33,37 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; LucideChevronRight ], template: ` -
-
- -
{{ head.headingValue() }}
-
- +
@for (month of root.months(); track $index) { @for (day of root.weekDays(); track $index) { - + } - + @for (weekDates of month.weeks; track $index) { @for (weekDate of weekDates; track $index) { - @for (day of root.weekDays(); track $index) { - + } - + @for (weekDates of month.weeks; track $index) { @for (weekDate of weekDates; track $index) { -
{{ day }}{{ day }}
+
{{ cell.dayValue() }}
diff --git a/packages/primitives/calendar/stories/calendar-number-of-months.ts b/packages/primitives/calendar/stories/calendar-number-of-months.ts index 216a7cebe..093f178d5 100644 --- a/packages/primitives/calendar/stories/calendar-number-of-months.ts +++ b/packages/primitives/calendar/stories/calendar-number-of-months.ts @@ -1,18 +1,18 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { CalendarDate, DateValue } from '@internationalized/date'; -import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; import { cn, demoCalendar } from '../../storybook/styles'; -import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; import { RdxCalendarCellDirective } from '../src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarGridBodyDirective } from '../src/calendar-grid-body.directive'; import { RdxCalendarGridHeadDirective } from '../src/calendar-grid-head.directive'; -import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarHeadCellDirective } from '../src/calendar-head-cell.directive'; import { RdxCalendarHeaderDirective } from '../src/calendar-header.directive'; import { RdxCalendarHeadingDirective } from '../src/calendar-heading.directive'; import { RdxCalendarNextDirective } from '../src/calendar-next.directive'; import { RdxCalendarPrevDirective } from '../src/calendar-prev.directive'; import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { CalendarDate, DateValue } from '@internationalized/date'; +import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -34,19 +34,19 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; ], template: `
-
- -
{{ head.headingValue() }}
-
@@ -57,21 +57,21 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive';
{{ day }}{{ day }}
+
{{ cell.dayValue() }}
diff --git a/packages/primitives/calendar/stories/calendar-unavailable-dates.ts b/packages/primitives/calendar/stories/calendar-unavailable-dates.ts index 9dda70d53..a656b4f3b 100644 --- a/packages/primitives/calendar/stories/calendar-unavailable-dates.ts +++ b/packages/primitives/calendar/stories/calendar-unavailable-dates.ts @@ -1,18 +1,18 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { CalendarDate, DateValue } from '@internationalized/date'; -import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; import { cn, demoCalendar } from '../../storybook/styles'; -import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; import { RdxCalendarCellDirective } from '../src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarGridBodyDirective } from '../src/calendar-grid-body.directive'; import { RdxCalendarGridHeadDirective } from '../src/calendar-grid-head.directive'; -import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarHeadCellDirective } from '../src/calendar-head-cell.directive'; import { RdxCalendarHeaderDirective } from '../src/calendar-header.directive'; import { RdxCalendarHeadingDirective } from '../src/calendar-heading.directive'; import { RdxCalendarNextDirective } from '../src/calendar-next.directive'; import { RdxCalendarPrevDirective } from '../src/calendar-prev.directive'; import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { CalendarDate, DateValue } from '@internationalized/date'; +import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -35,42 +35,42 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; template: `
-
- -
{{ head.headingValue() }}
-
- +
@for (month of root.months(); track $index) { @for (day of root.weekDays(); track $index) { - + } - + @for (weekDates of month.weeks; track $index) { @for (weekDate of weekDates; track $index) { -
{{ day }}{{ day }}
+
{{ cell.dayValue() }}
diff --git a/packages/primitives/calendar/stories/calendar-week.ts b/packages/primitives/calendar/stories/calendar-week.ts index f6096fbf9..206ba826c 100644 --- a/packages/primitives/calendar/stories/calendar-week.ts +++ b/packages/primitives/calendar/stories/calendar-week.ts @@ -1,19 +1,19 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { CalendarDate, DateValue } from '@internationalized/date'; -import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; -import { getWeekNumber } from '@radix-ng/primitives/core'; import { cn, demoCalendar } from '../../storybook/styles'; -import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; import { RdxCalendarCellDirective } from '../src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarGridBodyDirective } from '../src/calendar-grid-body.directive'; import { RdxCalendarGridHeadDirective } from '../src/calendar-grid-head.directive'; -import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarHeadCellDirective } from '../src/calendar-head-cell.directive'; import { RdxCalendarHeaderDirective } from '../src/calendar-header.directive'; import { RdxCalendarHeadingDirective } from '../src/calendar-heading.directive'; import { RdxCalendarNextDirective } from '../src/calendar-next.directive'; import { RdxCalendarPrevDirective } from '../src/calendar-prev.directive'; import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { CalendarDate, DateValue } from '@internationalized/date'; +import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; +import { getWeekNumber } from '@radix-ng/primitives/core'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -34,41 +34,41 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; LucideChevronRight ], template: ` -
-
- -
{{ head.headingValue() }}
-
- +
@for (month of root.months(); track $index) { - + @for (day of root.weekDays(); track $index) { - + } - + @for (weekDates of month.weeks; track $index) {
{{ getWeekNumber(weekDates[0]) }}
@for (weekDate of weekDates; track $index) { -
WkWk{{ day }}{{ day }}
+
{{ cell.dayValue() }}
diff --git a/packages/primitives/calendar/stories/calendar-with-locale.ts b/packages/primitives/calendar/stories/calendar-with-locale.ts index ed5535094..7c1d95bbc 100644 --- a/packages/primitives/calendar/stories/calendar-with-locale.ts +++ b/packages/primitives/calendar/stories/calendar-with-locale.ts @@ -1,18 +1,18 @@ -import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; -import { CalendarIdentifier, createCalendar, getLocalTimeZone, toCalendar, today } from '@internationalized/date'; -import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; import { cn, demoCalendar, demoInput } from '../../storybook/styles'; -import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; import { RdxCalendarCellDirective } from '../src/calendar-cell.directive'; +import { RdxCalendarCellTriggerDirective } from '../src/calendar-cell-trigger.directive'; +import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarGridBodyDirective } from '../src/calendar-grid-body.directive'; import { RdxCalendarGridHeadDirective } from '../src/calendar-grid-head.directive'; -import { RdxCalendarGridDirective } from '../src/calendar-grid.directive'; import { RdxCalendarHeadCellDirective } from '../src/calendar-head-cell.directive'; import { RdxCalendarHeaderDirective } from '../src/calendar-header.directive'; import { RdxCalendarHeadingDirective } from '../src/calendar-heading.directive'; import { RdxCalendarNextDirective } from '../src/calendar-next.directive'; import { RdxCalendarPrevDirective } from '../src/calendar-prev.directive'; import { RdxCalendarRootDirective } from '../src/calendar-root.directive'; +import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; +import { CalendarIdentifier, createCalendar, getLocalTimeZone, toCalendar, today } from '@internationalized/date'; +import { LucideChevronLeft, LucideChevronRight } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -54,44 +54,44 @@ import { RdxCalendarRootDirective } from '../src/calendar-root.directive';
-
- -
+
{{ head.headingValue() }}
-
- +
@for (month of root.months(); track $index) { @for (day of root.weekDays(); track $index) { - + } - + @for (weekDates of month.weeks; track $index) { @for (weekDate of weekDates; track $index) { -
{{ day }}{{ day }}
+
{{ cell.dayValue() }}
diff --git a/packages/primitives/calendar/stories/calendar.stories.ts b/packages/primitives/calendar/stories/calendar.stories.ts index 564cea5fe..aac7f0c1e 100644 --- a/packages/primitives/calendar/stories/calendar.stories.ts +++ b/packages/primitives/calendar/stories/calendar.stories.ts @@ -1,4 +1,3 @@ -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { CalendarCustomNavigation } from './calendar-custom-navigation'; import customNavigationSource from './calendar-custom-navigation?raw'; @@ -16,6 +15,7 @@ import { CalendarWeek } from './calendar-week'; import weekSource from './calendar-week?raw'; import { CalendarWithLocale } from './calendar-with-locale'; import withLocaleSource from './calendar-with-locale?raw'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const source = (code: string) => ({ docs: { source: { code, language: 'typescript' } } }); const html = String.raw; diff --git a/packages/primitives/checkbox/__tests__/checkbox-group.spec.ts b/packages/primitives/checkbox/__tests__/checkbox-group.spec.ts index 50796c663..58b7b10a2 100644 --- a/packages/primitives/checkbox/__tests__/checkbox-group.spec.ts +++ b/packages/primitives/checkbox/__tests__/checkbox-group.spec.ts @@ -1,19 +1,19 @@ +import { RdxCheckboxModule } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { form, FormField } from '@angular/forms/signals'; import { By } from '@angular/platform-browser'; -import { RdxCheckboxModule } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxCheckboxModule], template: `
@@ -47,14 +47,14 @@ class GroupHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxCheckboxModule], template: ` -
+
-
+
@@ -248,7 +248,7 @@ describe('RdxCheckboxGroup', () => { changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxCheckboxModule], template: ` -
+
@@ -319,7 +319,7 @@ describe('RdxCheckboxGroup validation state', () => { changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxCheckboxModule, FormField], template: ` -
+
diff --git a/packages/primitives/checkbox/__tests__/checkbox-root.directive.spec.ts b/packages/primitives/checkbox/__tests__/checkbox-root.directive.spec.ts index aa3c3cb83..bb67f0408 100644 --- a/packages/primitives/checkbox/__tests__/checkbox-root.directive.spec.ts +++ b/packages/primitives/checkbox/__tests__/checkbox-root.directive.spec.ts @@ -1,7 +1,3 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { form, FormField } from '@angular/forms/signals'; -import { By } from '@angular/platform-browser'; import { RdxCheckboxButtonDirective } from '../src/checkbox-button'; import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; import { RdxCheckboxInputDirective } from '../src/checkbox-input'; @@ -11,19 +7,23 @@ import { RdxCheckboxCheckedChangeEvent, RdxCheckboxRootDirective } from '../src/checkbox-root'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { form, FormField } from '@angular/forms/signals'; +import { By } from '@angular/platform-browser'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxCheckboxRootDirective, RdxCheckboxButtonDirective, RdxCheckboxIndicatorDirective], template: `
@@ -398,7 +398,7 @@ describe('RdxCheckboxRoot uncheckedValue', () => { changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxCheckboxRootDirective, RdxCheckboxButtonDirective, RdxCheckboxIndicatorDirective], template: ` -
+
@@ -461,7 +461,7 @@ describe('RdxCheckboxRoot validation state (batch #4)', () => { changeDetection: ChangeDetectionStrategy.Eager, imports: [FormField, RdxCheckboxRootDirective, RdxCheckboxButtonDirective, RdxCheckboxIndicatorDirective], template: ` -
+
diff --git a/packages/primitives/checkbox/index.ts b/packages/primitives/checkbox/index.ts index ea86f2377..273da90c0 100644 --- a/packages/primitives/checkbox/index.ts +++ b/packages/primitives/checkbox/index.ts @@ -1,16 +1,16 @@ -import { NgModule } from '@angular/core'; import { RdxCheckboxButtonDirective } from './src/checkbox-button'; import { RdxCheckboxGroupDirective } from './src/checkbox-group'; import { RdxCheckboxIndicatorDirective } from './src/checkbox-indicator'; import { RdxCheckboxInputDirective } from './src/checkbox-input'; import { RdxCheckboxRootDirective } from './src/checkbox-root'; +import { NgModule } from '@angular/core'; export * from './src/checkbox-button'; export * from './src/checkbox-group'; export * from './src/checkbox-indicator'; export * from './src/checkbox-input'; -export * from './src/checkbox-root'; export type { CheckedState } from './src/checkbox-root'; +export * from './src/checkbox-root'; export const checkboxImports = [ RdxCheckboxInputDirective, diff --git a/packages/primitives/checkbox/src/checkbox-button.ts b/packages/primitives/checkbox/src/checkbox-button.ts index aa1880b6b..6c9d9ac5a 100644 --- a/packages/primitives/checkbox/src/checkbox-button.ts +++ b/packages/primitives/checkbox/src/checkbox-button.ts @@ -1,6 +1,6 @@ -import { computed, Directive, effect, ElementRef, inject } from '@angular/core'; import { injectCheckboxGroupContext } from './checkbox-group'; import { injectCheckboxRootContext } from './checkbox-root'; +import { computed, Directive, effect, ElementRef, inject } from '@angular/core'; /** * Directive: rdxCheckboxButton diff --git a/packages/primitives/checkbox/src/checkbox-group.ts b/packages/primitives/checkbox/src/checkbox-group.ts index 4f2fa8f56..97a53fc86 100644 --- a/packages/primitives/checkbox/src/checkbox-group.ts +++ b/packages/primitives/checkbox/src/checkbox-group.ts @@ -1,3 +1,4 @@ +import type { CheckedState } from './checkbox-root'; import { booleanAttribute, computed, @@ -7,8 +8,8 @@ import { input, model, output, - signal, - Signal + Signal, + signal } from '@angular/core'; import { ControlValueAccessor } from '@angular/forms'; import { @@ -23,7 +24,6 @@ import { RdxFormUiTouchTarget, RdxFormValueControl } from '@radix-ng/primitives/core'; -import type { CheckedState } from './checkbox-root'; export type RdxCheckboxGroupValueChangeReason = 'none'; export type RdxCheckboxGroupValueChangeEventDetails = diff --git a/packages/primitives/checkbox/src/checkbox-indicator.ts b/packages/primitives/checkbox/src/checkbox-indicator.ts index 83263f2a0..6185f25b7 100644 --- a/packages/primitives/checkbox/src/checkbox-indicator.ts +++ b/packages/primitives/checkbox/src/checkbox-indicator.ts @@ -1,6 +1,6 @@ +import { injectCheckboxRootContext } from './checkbox-root'; import { booleanAttribute, computed, Directive, input } from '@angular/core'; import { BooleanInput } from '@radix-ng/primitives/core'; -import { injectCheckboxRootContext } from './checkbox-root'; @Directive({ selector: '[rdxCheckboxIndicator]', diff --git a/packages/primitives/checkbox/src/checkbox-input.ts b/packages/primitives/checkbox/src/checkbox-input.ts index 830ecd872..7e0678b30 100644 --- a/packages/primitives/checkbox/src/checkbox-input.ts +++ b/packages/primitives/checkbox/src/checkbox-input.ts @@ -1,5 +1,5 @@ -import { Directive, effect, ElementRef, inject } from '@angular/core'; import { injectCheckboxRootContext } from './checkbox-root'; +import { Directive, effect, ElementRef, inject } from '@angular/core'; @Directive({ selector: 'input[rdxCheckboxInput]', diff --git a/packages/primitives/checkbox/src/checkbox-root.ts b/packages/primitives/checkbox/src/checkbox-root.ts index b28843441..2431fe7f0 100644 --- a/packages/primitives/checkbox/src/checkbox-root.ts +++ b/packages/primitives/checkbox/src/checkbox-root.ts @@ -1,3 +1,4 @@ +import { injectCheckboxGroupContext } from './checkbox-group'; import { booleanAttribute, computed, @@ -10,8 +11,8 @@ import { model, output, Renderer2, - signal, - Signal + Signal, + signal } from '@angular/core'; import { BooleanInput, @@ -22,7 +23,6 @@ import { RdxFormCheckboxControl, RdxValidationError } from '@radix-ng/primitives/core'; -import { injectCheckboxGroupContext } from './checkbox-group'; /** * Internal tri-state used only for the derived `parent` (select-all) state in diff --git a/packages/primitives/checkbox/stories/checkbox-forms.ts b/packages/primitives/checkbox/stories/checkbox-forms.ts index bd663bf72..c024b0289 100644 --- a/packages/primitives/checkbox/stories/checkbox-forms.ts +++ b/packages/primitives/checkbox/stories/checkbox-forms.ts @@ -1,13 +1,13 @@ +import { cn, demoButton, demoCheckbox } from '../../storybook/styles'; +import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; +import { RdxCheckboxInputDirective } from '../src/checkbox-input'; +import { RdxCheckboxRootDirective } from '../src/checkbox-root'; import { JsonPipe } from '@angular/common'; import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { LucideCheck } from '@lucide/angular'; import { RdxCheckboxButtonDirective } from '@radix-ng/primitives/checkbox'; import { RdxLabelDirective } from '@radix-ng/primitives/label'; -import { cn, demoButton, demoCheckbox } from '../../storybook/styles'; -import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; -import { RdxCheckboxInputDirective } from '../src/checkbox-input'; -import { RdxCheckboxRootDirective } from '../src/checkbox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -16,8 +16,8 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root';
-
@@ -26,8 +26,8 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root';
-
@@ -38,8 +38,8 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root';
-
@@ -52,7 +52,7 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root'; {{ personality.value | json }}
- `, diff --git a/packages/primitives/checkbox/stories/checkbox-group.ts b/packages/primitives/checkbox/stories/checkbox-group.ts index 545b1e9f8..b06db330b 100644 --- a/packages/primitives/checkbox/stories/checkbox-group.ts +++ b/packages/primitives/checkbox/stories/checkbox-group.ts @@ -1,11 +1,11 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideDynamicIcon } from '@lucide/angular'; -import { RdxLabelDirective } from '@radix-ng/primitives/label'; import { demoCheckbox } from '../../storybook/styles'; import { RdxCheckboxButtonDirective } from '../src/checkbox-button'; import { RdxCheckboxGroupDirective } from '../src/checkbox-group'; import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; import { RdxCheckboxRootDirective } from '../src/checkbox-root'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideDynamicIcon } from '@lucide/angular'; +import { RdxLabelDirective } from '@radix-ng/primitives/label'; /** * `rdxCheckboxGroup` holds the array of checked names. Each child participates by its `name`, and @@ -28,15 +28,15 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root'; LucideCheck ], template: ` -
+
-
@@ -46,12 +46,12 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root';
@for (item of items; track item.name) {
-
-
-
diff --git a/packages/primitives/checkbox/stories/checkbox-indeterminate.ts b/packages/primitives/checkbox/stories/checkbox-indeterminate.ts index 008248224..a1da21bbb 100644 --- a/packages/primitives/checkbox/stories/checkbox-indeterminate.ts +++ b/packages/primitives/checkbox/stories/checkbox-indeterminate.ts @@ -1,12 +1,12 @@ +import { cn, demoButton, demoCheckbox } from '../../storybook/styles'; +import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; +import { RdxCheckboxInputDirective } from '../src/checkbox-input'; +import { RdxCheckboxRootDirective } from '../src/checkbox-root'; import { JsonPipe } from '@angular/common'; import { ChangeDetectionStrategy, Component, computed, model } from '@angular/core'; import { LucideDynamicIcon } from '@lucide/angular'; import { RdxCheckboxButtonDirective } from '@radix-ng/primitives/checkbox'; import { RdxLabelDirective } from '@radix-ng/primitives/label'; -import { cn, demoButton, demoCheckbox } from '../../storybook/styles'; -import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; -import { RdxCheckboxInputDirective } from '../src/checkbox-input'; -import { RdxCheckboxRootDirective } from '../src/checkbox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -23,13 +23,13 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root'; template: `
-
@@ -43,7 +43,7 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root';

indeterminate: {{ indeterminate() | json }}

- ` diff --git a/packages/primitives/checkbox/stories/checkbox-ngmodel.ts b/packages/primitives/checkbox/stories/checkbox-ngmodel.ts index 602cdf607..b338f421b 100644 --- a/packages/primitives/checkbox/stories/checkbox-ngmodel.ts +++ b/packages/primitives/checkbox/stories/checkbox-ngmodel.ts @@ -1,12 +1,12 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { LucideCheck } from '@lucide/angular'; -import { RdxLabelDirective } from '@radix-ng/primitives/label'; import { demoCheckbox } from '../../storybook/styles'; import { RdxCheckboxButtonDirective } from '../src/checkbox-button'; import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; import { RdxCheckboxInputDirective } from '../src/checkbox-input'; import { RdxCheckboxRootDirective } from '../src/checkbox-root'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { LucideCheck } from '@lucide/angular'; +import { RdxLabelDirective } from '@radix-ng/primitives/label'; /** * Template-driven forms: two-way bind the root with `[(ngModel)]`. @@ -25,9 +25,9 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root'; ], template: `
-
-
diff --git a/packages/primitives/checkbox/stories/checkbox-presence.ts b/packages/primitives/checkbox/stories/checkbox-presence.ts index 72c29d4b3..075456273 100644 --- a/packages/primitives/checkbox/stories/checkbox-presence.ts +++ b/packages/primitives/checkbox/stories/checkbox-presence.ts @@ -1,12 +1,12 @@ +import { demoCheckbox } from '../../storybook/styles'; +import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; +import { RdxCheckboxInputDirective } from '../src/checkbox-input'; +import { RdxCheckboxRootDirective } from '../src/checkbox-root'; import { JsonPipe } from '@angular/common'; import { ChangeDetectionStrategy, Component, model } from '@angular/core'; import { LucideCheck as Check, LucideDynamicIcon } from '@lucide/angular'; import { RdxCheckboxButtonDirective } from '@radix-ng/primitives/checkbox'; import { RdxLabelDirective } from '@radix-ng/primitives/label'; -import { demoCheckbox } from '../../storybook/styles'; -import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; -import { RdxCheckboxInputDirective } from '../src/checkbox-input'; -import { RdxCheckboxRootDirective } from '../src/checkbox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -22,9 +22,9 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root'; ], template: `
-
-
diff --git a/packages/primitives/checkbox/stories/checkbox-select-all.ts b/packages/primitives/checkbox/stories/checkbox-select-all.ts index 63eef776b..aea666914 100644 --- a/packages/primitives/checkbox/stories/checkbox-select-all.ts +++ b/packages/primitives/checkbox/stories/checkbox-select-all.ts @@ -1,11 +1,11 @@ -import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; -import { LucideCheck, LucideDynamicIcon } from '@lucide/angular'; -import { RdxLabelDirective } from '@radix-ng/primitives/label'; import { demoCheckbox } from '../../storybook/styles'; import { RdxCheckboxButtonDirective } from '../src/checkbox-button'; import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; import { RdxCheckboxInputDirective } from '../src/checkbox-input'; import { CheckedState, RdxCheckboxRootDirective } from '../src/checkbox-root'; +import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; +import { LucideCheck, LucideDynamicIcon } from '@lucide/angular'; +import { RdxLabelDirective } from '@radix-ng/primitives/label'; interface Item { id: string; @@ -33,17 +33,17 @@ interface Item {
- @@ -54,13 +54,13 @@ interface Item {
@for (item of items(); track item.id) {
-
-
-
diff --git a/packages/primitives/checkbox/stories/checkbox-validation.ts b/packages/primitives/checkbox/stories/checkbox-validation.ts index d5cd8e812..b4a699bc0 100644 --- a/packages/primitives/checkbox/stories/checkbox-validation.ts +++ b/packages/primitives/checkbox/stories/checkbox-validation.ts @@ -1,12 +1,12 @@ -import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; -import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; -import { LucideCheck } from '@lucide/angular'; -import { RdxLabelDirective } from '@radix-ng/primitives/label'; import { cn, demoButton, demoCheckbox } from '../../storybook/styles'; import { RdxCheckboxButtonDirective } from '../src/checkbox-button'; import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; import { RdxCheckboxInputDirective } from '../src/checkbox-input'; import { RdxCheckboxRootDirective } from '../src/checkbox-root'; +import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; +import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; +import { LucideCheck } from '@lucide/angular'; +import { RdxLabelDirective } from '@radix-ng/primitives/label'; /** * Reactive forms with validation: `Validators.requiredTrue` forces the box to be @@ -28,8 +28,8 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root';
-
@@ -42,7 +42,7 @@ import { RdxCheckboxRootDirective } from '../src/checkbox-root';

You must accept the terms to continue.

} - + @if (submitted()) {

Submitted ✓

diff --git a/packages/primitives/checkbox/stories/checkbox.stories.ts b/packages/primitives/checkbox/stories/checkbox.stories.ts index 8e1600f2f..ec2935943 100644 --- a/packages/primitives/checkbox/stories/checkbox.stories.ts +++ b/packages/primitives/checkbox/stories/checkbox.stories.ts @@ -1,6 +1,3 @@ -import { LucideCheck } from '@lucide/angular'; -import { argsToTemplate, Meta, moduleMetadata, StoryObj } from '@storybook/angular'; -import { expect } from 'storybook/test'; import { RdxLabelDirective } from '../../label'; import { demoCheckbox } from '../../storybook/styles'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; @@ -9,21 +6,23 @@ import { RdxCheckboxIndicatorDirective } from '../src/checkbox-indicator'; import { RdxCheckboxInputDirective } from '../src/checkbox-input'; import { RdxCheckboxRootDirective } from '../src/checkbox-root'; import { CheckboxReactiveFormsExampleComponent } from './checkbox-forms'; -import { CheckboxGroupExample } from './checkbox-group'; -import { CheckboxIndeterminate } from './checkbox-indeterminate'; -import { CheckboxNgModelExample } from './checkbox-ngmodel'; -import { CheckboxKeepMountedExample } from './checkbox-presence'; -import { CheckboxSelectAllExample } from './checkbox-select-all'; -import { CheckboxValidationExample } from './checkbox-validation'; - // Full component source for the "Show code" panel (Vite `?raw` import). import formsSource from './checkbox-forms?raw'; +import { CheckboxGroupExample } from './checkbox-group'; import groupSource from './checkbox-group?raw'; +import { CheckboxIndeterminate } from './checkbox-indeterminate'; import indeterminateSource from './checkbox-indeterminate?raw'; +import { CheckboxNgModelExample } from './checkbox-ngmodel'; import ngModelSource from './checkbox-ngmodel?raw'; +import { CheckboxKeepMountedExample } from './checkbox-presence'; import presenceSource from './checkbox-presence?raw'; +import { CheckboxSelectAllExample } from './checkbox-select-all'; import selectAllSource from './checkbox-select-all?raw'; +import { CheckboxValidationExample } from './checkbox-validation'; import validationSource from './checkbox-validation?raw'; +import { LucideCheck } from '@lucide/angular'; +import { argsToTemplate, Meta, moduleMetadata, StoryObj } from '@storybook/angular'; +import { expect } from 'storybook/test'; const source = (code: string) => ({ docs: { diff --git a/packages/primitives/collapsible/__tests__/collapsible-panel-animation.spec.ts b/packages/primitives/collapsible/__tests__/collapsible-panel-animation.spec.ts index 4a7c67aeb..ed51d984f 100644 --- a/packages/primitives/collapsible/__tests__/collapsible-panel-animation.spec.ts +++ b/packages/primitives/collapsible/__tests__/collapsible-panel-animation.spec.ts @@ -1,16 +1,16 @@ +import { RdxCollapsiblePanelDirective } from '../src/collapsible-panel.directive'; +import { RdxCollapsibleRootDirective } from '../src/collapsible-root.directive'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { afterEach, vi } from 'vitest'; -import { RdxCollapsiblePanelDirective } from '../src/collapsible-panel.directive'; -import { RdxCollapsibleRootDirective } from '../src/collapsible-root.directive'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxCollapsibleRootDirective, RdxCollapsiblePanelDirective], template: ` -
-
Panel
+
+
Panel
` }) diff --git a/packages/primitives/collapsible/__tests__/collapsible-panel.directive.spec.ts b/packages/primitives/collapsible/__tests__/collapsible-panel.directive.spec.ts index 4bc5ce3fc..f7432acd1 100644 --- a/packages/primitives/collapsible/__tests__/collapsible-panel.directive.spec.ts +++ b/packages/primitives/collapsible/__tests__/collapsible-panel.directive.spec.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; import { RdxCollapsiblePanelDirective } from '../src/collapsible-panel.directive'; import { RdxCollapsibleRootDirective } from '../src/collapsible-root.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, diff --git a/packages/primitives/collapsible/__tests__/collapsible-root.directive.spec.ts b/packages/primitives/collapsible/__tests__/collapsible-root.directive.spec.ts index a2967bf65..b02d067cd 100644 --- a/packages/primitives/collapsible/__tests__/collapsible-root.directive.spec.ts +++ b/packages/primitives/collapsible/__tests__/collapsible-root.directive.spec.ts @@ -1,21 +1,21 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { By } from '@angular/platform-browser'; import { RdxCollapsiblePanelDirective } from '../src/collapsible-panel.directive'; import { RdxCollapsibleOpenChangeEvent, RdxCollapsibleRootDirective } from '../src/collapsible-root.directive'; import { RdxCollapsibleTriggerDirective } from '../src/collapsible-trigger.directive'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [RdxCollapsibleRootDirective, RdxCollapsibleTriggerDirective, RdxCollapsiblePanelDirective], template: ` -
+
Panel
diff --git a/packages/primitives/collapsible/__tests__/collapsible-trigger.directive.spec.ts b/packages/primitives/collapsible/__tests__/collapsible-trigger.directive.spec.ts index 19d2f2231..ebcfd1a2f 100644 --- a/packages/primitives/collapsible/__tests__/collapsible-trigger.directive.spec.ts +++ b/packages/primitives/collapsible/__tests__/collapsible-trigger.directive.spec.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; import { RdxCollapsibleRootDirective } from '../src/collapsible-root.directive'; import { RdxCollapsibleTriggerDirective } from '../src/collapsible-trigger.directive'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, diff --git a/packages/primitives/collapsible/index.ts b/packages/primitives/collapsible/index.ts index 18790b095..5c83009b6 100644 --- a/packages/primitives/collapsible/index.ts +++ b/packages/primitives/collapsible/index.ts @@ -1,7 +1,7 @@ -import { NgModule } from '@angular/core'; import { RdxCollapsiblePanelDirective } from './src/collapsible-panel.directive'; import { RdxCollapsibleRootDirective } from './src/collapsible-root.directive'; import { RdxCollapsibleTriggerDirective } from './src/collapsible-trigger.directive'; +import { NgModule } from '@angular/core'; export * from './src/collapsible-panel.directive'; export * from './src/collapsible-root.directive'; diff --git a/packages/primitives/collapsible/src/collapsible-panel.directive.ts b/packages/primitives/collapsible/src/collapsible-panel.directive.ts index 302c761b1..92f2c3bb2 100644 --- a/packages/primitives/collapsible/src/collapsible-panel.directive.ts +++ b/packages/primitives/collapsible/src/collapsible-panel.directive.ts @@ -1,3 +1,4 @@ +import { injectCollapsibleRootContext } from './collapsible-root.directive'; import { afterRenderEffect, booleanAttribute, @@ -13,7 +14,6 @@ import { untracked } from '@angular/core'; import { BooleanInput } from '@radix-ng/primitives/core'; -import { injectCollapsibleRootContext } from './collapsible-root.directive'; /** * Coerces a collapsible boolean input that distinguishes "not set" (`undefined`) from `false`, diff --git a/packages/primitives/collapsible/src/collapsible-root.directive.ts b/packages/primitives/collapsible/src/collapsible-root.directive.ts index 826300e73..acfd254cc 100644 --- a/packages/primitives/collapsible/src/collapsible-root.directive.ts +++ b/packages/primitives/collapsible/src/collapsible-root.directive.ts @@ -8,8 +8,8 @@ import { model, ModelSignal, output, - signal, Signal, + signal, untracked, WritableSignal } from '@angular/core'; diff --git a/packages/primitives/collapsible/src/collapsible-trigger.directive.ts b/packages/primitives/collapsible/src/collapsible-trigger.directive.ts index d40c1a1ec..c812f16ec 100644 --- a/packages/primitives/collapsible/src/collapsible-trigger.directive.ts +++ b/packages/primitives/collapsible/src/collapsible-trigger.directive.ts @@ -1,5 +1,5 @@ -import { Directive, ElementRef, inject } from '@angular/core'; import { injectCollapsibleRootContext } from './collapsible-root.directive'; +import { Directive, ElementRef, inject } from '@angular/core'; /** * A button that opens and closes the collapsible panel. diff --git a/packages/primitives/collapsible/stories/collapsible-animation.component.ts b/packages/primitives/collapsible/stories/collapsible-animation.component.ts index f0f0f4f67..7f5c2d6e7 100644 --- a/packages/primitives/collapsible/stories/collapsible-animation.component.ts +++ b/packages/primitives/collapsible/stories/collapsible-animation.component.ts @@ -1,8 +1,8 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideUnfoldVertical, LucideX } from '@lucide/angular'; import { RdxCollapsiblePanelDirective } from '../src/collapsible-panel.directive'; import { RdxCollapsibleRootDirective } from '../src/collapsible-root.directive'; import { RdxCollapsibleTriggerDirective } from '../src/collapsible-trigger.directive'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideUnfoldVertical, LucideX } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -15,7 +15,7 @@ import { RdxCollapsibleTriggerDirective } from '../src/collapsible-trigger.direc LucideUnfoldVertical ], template: ` -
+
@peduarte starred 3 repositories -
+
@peduarte starred 3 repositories
@@ -27,8 +26,8 @@ import { RdxCollapsibleRootDirective } from '../src/collapsible-root.directive';
@radix-ui/colors diff --git a/packages/primitives/collapsible/stories/collapsible.stories.ts b/packages/primitives/collapsible/stories/collapsible.stories.ts index 583caa790..7b7eb9d76 100644 --- a/packages/primitives/collapsible/stories/collapsible.stories.ts +++ b/packages/primitives/collapsible/stories/collapsible.stories.ts @@ -1,11 +1,11 @@ -import { LucideUnfoldVertical, LucideX } from '@lucide/angular'; -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { RdxCollapsiblePanelDirective } from '../src/collapsible-panel.directive'; import { RdxCollapsibleRootDirective } from '../src/collapsible-root.directive'; import { RdxCollapsibleTriggerDirective } from '../src/collapsible-trigger.directive'; import { RdxCollapsibleAnimationComponent } from './collapsible-animation.component'; import { RdxCollapsibleExternalTriggeringComponent } from './collapsible-external-triggering.component'; +import { LucideUnfoldVertical, LucideX } from '@lucide/angular'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const html = String.raw; diff --git a/packages/primitives/combobox/__tests__/combobox-aria-parts.spec.ts b/packages/primitives/combobox/__tests__/combobox-aria-parts.spec.ts index ff6c9c95a..791c6c31b 100644 --- a/packages/primitives/combobox/__tests__/combobox-aria-parts.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-aria-parts.spec.ts @@ -1,7 +1,7 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; /** * ARIA / part-parity regressions (ADR 0014 review batch 2): list is a programmatic focus target that @@ -12,7 +12,7 @@ import { _importsCombobox } from '../index'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@@ -23,8 +23,8 @@ import { _importsCombobox } from '../index'; @if (showLabel()) {
Fruits
} -
apple
-
banana
+
apple
+
banana
diff --git a/packages/primitives/combobox/__tests__/combobox-chips.spec.ts b/packages/primitives/combobox/__tests__/combobox-chips.spec.ts index a5be251e1..9272114af 100644 --- a/packages/primitives/combobox/__tests__/combobox-chips.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-chips.spec.ts @@ -1,17 +1,17 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (v of value(); track v) { - + {{ v }} @@ -24,7 +24,7 @@ import { _importsCombobox } from '../index';
@for (f of fruits; track f) { -
{{ f }}
+
{{ f }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-clear-on-empty.spec.ts b/packages/primitives/combobox/__tests__/combobox-clear-on-empty.spec.ts index fc9029bf3..9145565a4 100644 --- a/packages/primitives/combobox/__tests__/combobox-clear-on-empty.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-clear-on-empty.spec.ts @@ -1,7 +1,7 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; /** * Regression (ADR 0014, Finding 2 / P1c): emptying the input deselects a single value, and when @@ -12,18 +12,18 @@ import { _importsCombobox } from '../index'; imports: [_importsCombobox], template: `
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-empty-and-selection.spec.ts b/packages/primitives/combobox/__tests__/combobox-empty-and-selection.spec.ts index 4678d2131..4e5ebb731 100644 --- a/packages/primitives/combobox/__tests__/combobox-empty-and-selection.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-empty-and-selection.spec.ts @@ -1,7 +1,7 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; /** * Regressions from the ADR 0014 Base-UI parity review: @@ -15,13 +15,13 @@ import { _importsCombobox } from '../index'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
No results
diff --git a/packages/primitives/combobox/__tests__/combobox-engine-contract.spec.ts b/packages/primitives/combobox/__tests__/combobox-engine-contract.spec.ts index 90efad4ce..4b90033df 100644 --- a/packages/primitives/combobox/__tests__/combobox-engine-contract.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-engine-contract.spec.ts @@ -1,21 +1,21 @@ +import { _importsCombobox } from '../index'; +import { ComboboxFilter, RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { ComboboxFilter, RdxComboboxRoot } from '../src/combobox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits(); track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-events.spec.ts b/packages/primitives/combobox/__tests__/combobox-events.spec.ts index 04b4c8add..98ec63b9d 100644 --- a/packages/primitives/combobox/__tests__/combobox-events.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-events.spec.ts @@ -1,21 +1,21 @@ +import { _importsCombobox } from '../index'; +import { RdxComboboxOpenChange } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { _importsCombobox } from '../index'; -import { RdxComboboxOpenChange } from '../src/combobox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
@@ -33,13 +33,13 @@ class SubmitHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
@@ -57,14 +57,14 @@ class CompleteHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-focus-restore.spec.ts b/packages/primitives/combobox/__tests__/combobox-focus-restore.spec.ts index 77225b085..6fdfd90ea 100644 --- a/packages/primitives/combobox/__tests__/combobox-focus-restore.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-focus-restore.spec.ts @@ -1,7 +1,7 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; /** * Focus restoration after a selection (ADR 0014 review): the primitive restores focus to the input @@ -13,13 +13,13 @@ import { _importsCombobox } from '../index'; imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
@@ -43,14 +43,14 @@ class OutsideHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-forms.spec.ts b/packages/primitives/combobox/__tests__/combobox-forms.spec.ts index 4eedaee70..f78ab5290 100644 --- a/packages/primitives/combobox/__tests__/combobox-forms.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-forms.spec.ts @@ -1,3 +1,4 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; @@ -5,7 +6,6 @@ import { form, FormField } from '@angular/forms/signals'; import { RdxFieldRoot } from '@radix-ng/primitives/field'; import { RdxLabelDirective } from '@radix-ng/primitives/label'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; interface Fruit { label: string; @@ -21,13 +21,13 @@ const FRUITS: Fruit[] = [ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox, ReactiveFormsModule], template: ` -
+
@for (fruit of fruits; track fruit.value) { -
{{ fruit.label }}
+
{{ fruit.label }}
}
@@ -45,7 +45,7 @@ class ReactiveHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox, RdxFieldRoot, RdxLabelDirective], template: ` -
+
@@ -146,13 +146,13 @@ describe('Combobox forms integration', () => { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit.value) { -
{{ fruit.label }}
+
{{ fruit.label }}
}
@@ -172,13 +172,13 @@ class ComboboxValidationHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox, FormField], template: ` -
+
@for (fruit of fruits; track fruit.value) { -
{{ fruit.label }}
+
{{ fruit.label }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-grid.spec.ts b/packages/primitives/combobox/__tests__/combobox-grid.spec.ts index 3889056a8..cdef39aaf 100644 --- a/packages/primitives/combobox/__tests__/combobox-grid.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-grid.spec.ts @@ -1,7 +1,7 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; /** * P2 (ADR 0014): grid navigation is a Combobox engine feature. ArrowUp/Down move between rows keeping @@ -11,7 +11,7 @@ import { _importsCombobox } from '../index'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@@ -19,7 +19,7 @@ import { _importsCombobox } from '../index'; @for (row of rows(); track $index) {
@for (cell of row; track cell) { -
{{ cell }}
+
{{ cell }}
}
} @@ -168,7 +168,7 @@ describe('Combobox grid', () => { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
diff --git a/packages/primitives/combobox/__tests__/combobox-group.spec.ts b/packages/primitives/combobox/__tests__/combobox-group.spec.ts index 551bde4bc..cae6539fe 100644 --- a/packages/primitives/combobox/__tests__/combobox-group.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-group.spec.ts @@ -1,25 +1,25 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
Fruits
-
Apple
-
Grape
+
Apple
+
Grape
Vegetables
-
Carrot
+
Carrot
diff --git a/packages/primitives/combobox/__tests__/combobox-highlight-reason.spec.ts b/packages/primitives/combobox/__tests__/combobox-highlight-reason.spec.ts index 10571b08d..de192c994 100644 --- a/packages/primitives/combobox/__tests__/combobox-highlight-reason.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-highlight-reason.spec.ts @@ -1,22 +1,22 @@ +import { _importsCombobox } from '../index'; +import { ComboboxItemHighlightedDetails, RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { ComboboxItemHighlightedDetails, RdxComboboxRoot } from '../src/combobox-root'; // --- #1: non-virtualized programmatic highlight reports reason 'none', not a stale 'keyboard' --- @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
@@ -37,19 +37,19 @@ class ReasonHost { template: `
@for (i of windowIndexes; track i) { -
+
}
@@ -71,13 +71,13 @@ class VirtualAlwaysHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-hover.spec.ts b/packages/primitives/combobox/__tests__/combobox-hover.spec.ts index f67a7beb5..a9f32215d 100644 --- a/packages/primitives/combobox/__tests__/combobox-hover.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-hover.spec.ts @@ -1,21 +1,21 @@ +import { _importsCombobox } from '../index'; +import { RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { RdxComboboxRoot } from '../src/combobox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-limit-hover.spec.ts b/packages/primitives/combobox/__tests__/combobox-limit-hover.spec.ts index 6c2befe68..898a80ae0 100644 --- a/packages/primitives/combobox/__tests__/combobox-limit-hover.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-limit-hover.spec.ts @@ -1,21 +1,21 @@ +import { _importsCombobox } from '../index'; +import { RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { RdxComboboxRoot } from '../src/combobox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-modal.spec.ts b/packages/primitives/combobox/__tests__/combobox-modal.spec.ts index 10beec325..63699d5c5 100644 --- a/packages/primitives/combobox/__tests__/combobox-modal.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-modal.spec.ts @@ -1,13 +1,13 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@@ -15,7 +15,7 @@ import { _importsCombobox } from '../index';
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-modes.spec.ts b/packages/primitives/combobox/__tests__/combobox-modes.spec.ts index 12c118473..488d45dfc 100644 --- a/packages/primitives/combobox/__tests__/combobox-modes.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-modes.spec.ts @@ -1,28 +1,28 @@ +import { _importsCombobox } from '../index'; +import { RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { RdxComboboxRoot } from '../src/combobox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: `
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-navigation.spec.ts b/packages/primitives/combobox/__tests__/combobox-navigation.spec.ts index 997dbf93d..28fd70bf7 100644 --- a/packages/primitives/combobox/__tests__/combobox-navigation.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-navigation.spec.ts @@ -1,9 +1,9 @@ +import { _importsCombobox } from '../index'; +import { RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { RdxComboboxRoot } from '../src/combobox-root'; /** * Characterization tests (ADR 0014, Phase 0): pin the engine's keyboard-navigation edges before the @@ -13,13 +13,13 @@ import { RdxComboboxRoot } from '../src/combobox-root'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-parts-p5.spec.ts b/packages/primitives/combobox/__tests__/combobox-parts-p5.spec.ts index 1a4d4e57b..6ef16949e 100644 --- a/packages/primitives/combobox/__tests__/combobox-parts-p5.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-parts-p5.spec.ts @@ -1,23 +1,23 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
- +
-
Apple
+
Apple
-
Banana
+
Banana
No results
1 result
diff --git a/packages/primitives/combobox/__tests__/combobox-parts.spec.ts b/packages/primitives/combobox/__tests__/combobox-parts.spec.ts index 9b4052863..5e62a1f42 100644 --- a/packages/primitives/combobox/__tests__/combobox-parts.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-parts.spec.ts @@ -1,15 +1,15 @@ +import { _importsCombobox } from '../index'; +import { RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { RdxComboboxRoot } from '../src/combobox-root'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
Fruit
@@ -15,7 +15,7 @@ import { _importsCombobox } from '../index';
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-readonly.spec.ts b/packages/primitives/combobox/__tests__/combobox-readonly.spec.ts index 428023365..8b5ecbaf2 100644 --- a/packages/primitives/combobox/__tests__/combobox-readonly.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-readonly.spec.ts @@ -1,7 +1,7 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; /** * Regression (ADR 0014, Finding 1): a read-only / disabled combobox must not be user-mutable — Clear, @@ -12,11 +12,11 @@ import { _importsCombobox } from '../index'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of value(); track fruit) { - + {{ fruit }} @@ -30,7 +30,7 @@ import { _importsCombobox } from '../index';
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-trigger.spec.ts b/packages/primitives/combobox/__tests__/combobox-trigger.spec.ts index 028885658..2cad6f98c 100644 --- a/packages/primitives/combobox/__tests__/combobox-trigger.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-trigger.spec.ts @@ -1,7 +1,7 @@ +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; /** * Trigger parity (ADR 0014 review): the trigger's role depends on the layout (Base UI's @@ -14,14 +14,14 @@ import { _importsCombobox } from '../index'; changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
@@ -40,14 +40,14 @@ class OutsideHost { changeDetection: ChangeDetectionStrategy.Eager, imports: [_importsCombobox], template: ` -
+
@for (fruit of fruits; track fruit) { -
{{ fruit }}
+
{{ fruit }}
}
diff --git a/packages/primitives/combobox/__tests__/combobox-virtualized.spec.ts b/packages/primitives/combobox/__tests__/combobox-virtualized.spec.ts index e51901fc7..3c4483621 100644 --- a/packages/primitives/combobox/__tests__/combobox-virtualized.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox-virtualized.spec.ts @@ -1,9 +1,9 @@ +import { _importsCombobox } from '../index'; +import { ComboboxItemHighlightedDetails, RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { ComboboxItemHighlightedDetails, RdxComboboxRoot } from '../src/combobox-root'; // Only a 5-item window is ever rendered, so any assertion about navigation past index 4 proves the // root drives highlight/selection from `items` data by index rather than from mounted DOM elements. @@ -13,19 +13,19 @@ import { ComboboxItemHighlightedDetails, RdxComboboxRoot } from '../src/combobox template: `
@for (i of windowIndexes; track i) { -
+
{{ cmb.filteredItems()[i] }}
} diff --git a/packages/primitives/combobox/__tests__/combobox.spec.ts b/packages/primitives/combobox/__tests__/combobox.spec.ts index f163f25fc..81ae66dfa 100644 --- a/packages/primitives/combobox/__tests__/combobox.spec.ts +++ b/packages/primitives/combobox/__tests__/combobox.spec.ts @@ -1,10 +1,10 @@ +import { _importsCombobox } from '../index'; +import { ComboboxFilter, RdxComboboxRoot } from '../src/combobox-root'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { axe } from 'jest-axe'; import { beforeEach, describe, expect, it } from 'vitest'; -import { _importsCombobox } from '../index'; -import { ComboboxFilter, RdxComboboxRoot } from '../src/combobox-root'; interface Fruit { label: string; @@ -16,12 +16,12 @@ interface Fruit { imports: [_importsCombobox], template: `
@@ -32,7 +32,7 @@ interface Fruit {
@for (fruit of fruits(); track fruit.value) { -
+
{{ fruit.label }}
diff --git a/packages/primitives/combobox/index.ts b/packages/primitives/combobox/index.ts index ba42bed26..63dc086e0 100644 --- a/packages/primitives/combobox/index.ts +++ b/packages/primitives/combobox/index.ts @@ -1,4 +1,3 @@ -import { NgModule } from '@angular/core'; import { RdxComboboxAnchor } from './src/combobox-anchor'; import { RdxComboboxArrow } from './src/combobox-arrow'; import { RdxComboboxBackdrop } from './src/combobox-backdrop'; @@ -25,6 +24,7 @@ import { RdxComboboxSeparator } from './src/combobox-separator'; import { RdxComboboxStatus } from './src/combobox-status'; import { RdxComboboxTrigger } from './src/combobox-trigger'; import { RdxComboboxValue } from './src/combobox-value'; +import { NgModule } from '@angular/core'; export * from './src/combobox-anchor'; export * from './src/combobox-arrow'; diff --git a/packages/primitives/combobox/src/combobox-backdrop.ts b/packages/primitives/combobox/src/combobox-backdrop.ts index bf287ae20..832b5e0b9 100644 --- a/packages/primitives/combobox/src/combobox-backdrop.ts +++ b/packages/primitives/combobox/src/combobox-backdrop.ts @@ -1,5 +1,5 @@ -import { Directive } from '@angular/core'; import { injectComboboxRootContext } from './combobox-root'; +import { Directive } from '@angular/core'; /** * An overlay rendered beneath the popup in `modal` mode. Place it inside the portal/presence; style diff --git a/packages/primitives/combobox/src/combobox-chip-remove.ts b/packages/primitives/combobox/src/combobox-chip-remove.ts index e68198c9c..99131d7fb 100644 --- a/packages/primitives/combobox/src/combobox-chip-remove.ts +++ b/packages/primitives/combobox/src/combobox-chip-remove.ts @@ -1,6 +1,6 @@ -import { Directive } from '@angular/core'; import { injectComboboxChipContext } from './combobox-chip'; import { injectComboboxRootContext } from './combobox-root'; +import { Directive } from '@angular/core'; /** * Removes its chip's value from the selection, keeping focus in the input. diff --git a/packages/primitives/combobox/src/combobox-chip.ts b/packages/primitives/combobox/src/combobox-chip.ts index 5c7b8f5e4..f9f49f5ed 100644 --- a/packages/primitives/combobox/src/combobox-chip.ts +++ b/packages/primitives/combobox/src/combobox-chip.ts @@ -1,7 +1,7 @@ -import { Directive, ElementRef, inject, input } from '@angular/core'; -import { AcceptableValue, createContext } from '@radix-ng/primitives/core'; import { RdxComboboxChips } from './combobox-chips'; import { injectComboboxRootContext } from './combobox-root'; +import { Directive, ElementRef, inject, input } from '@angular/core'; +import { AcceptableValue, createContext } from '@radix-ng/primitives/core'; const chipContext = () => { const chip = inject(RdxComboboxChip); diff --git a/packages/primitives/combobox/src/combobox-chips.ts b/packages/primitives/combobox/src/combobox-chips.ts index dae061f38..991022515 100644 --- a/packages/primitives/combobox/src/combobox-chips.ts +++ b/packages/primitives/combobox/src/combobox-chips.ts @@ -1,6 +1,6 @@ +import { injectComboboxRootContext } from './combobox-root'; import { DestroyRef, Directive, ElementRef, inject } from '@angular/core'; import { RdxFloatingInsideElement } from '@radix-ng/primitives/dismissable-layer'; -import { injectComboboxRootContext } from './combobox-root'; /** * Container for the selected-value chips in `multiple` mode. Sits before the input and coordinates diff --git a/packages/primitives/combobox/src/combobox-clear.ts b/packages/primitives/combobox/src/combobox-clear.ts index 2325e4116..dc38335f9 100644 --- a/packages/primitives/combobox/src/combobox-clear.ts +++ b/packages/primitives/combobox/src/combobox-clear.ts @@ -1,6 +1,6 @@ +import { injectComboboxRootContext } from './combobox-root'; import { booleanAttribute, computed, Directive, input } from '@angular/core'; import { RdxFloatingInsideElement } from '@radix-ng/primitives/dismissable-layer'; -import { injectComboboxRootContext } from './combobox-root'; /** * Clears the current selection and the input text. Hidden when there is nothing to clear. diff --git a/packages/primitives/combobox/src/combobox-empty.ts b/packages/primitives/combobox/src/combobox-empty.ts index 25dd24166..f36bf158c 100644 --- a/packages/primitives/combobox/src/combobox-empty.ts +++ b/packages/primitives/combobox/src/combobox-empty.ts @@ -1,5 +1,5 @@ -import { ChangeDetectionStrategy, Component, computed } from '@angular/core'; import { injectComboboxRootContext } from './combobox-root'; +import { ChangeDetectionStrategy, Component, computed } from '@angular/core'; /** * A polite, atomic live region announcing the "no results" message. Mirrors Base UI: the element diff --git a/packages/primitives/combobox/src/combobox-group-label.ts b/packages/primitives/combobox/src/combobox-group-label.ts index 8a3fd6288..3f4e98009 100644 --- a/packages/primitives/combobox/src/combobox-group-label.ts +++ b/packages/primitives/combobox/src/combobox-group-label.ts @@ -1,6 +1,6 @@ +import { injectComboboxGroupContext } from './combobox-group'; import { DestroyRef, Directive, inject } from '@angular/core'; import { injectId } from '@radix-ng/primitives/core'; -import { injectComboboxGroupContext } from './combobox-group'; /** * Accessible label for a {@link RdxComboboxGroup}. Wires itself up via `aria-labelledby`. diff --git a/packages/primitives/combobox/src/combobox-group.ts b/packages/primitives/combobox/src/combobox-group.ts index ed706a633..7daf9c284 100644 --- a/packages/primitives/combobox/src/combobox-group.ts +++ b/packages/primitives/combobox/src/combobox-group.ts @@ -1,6 +1,6 @@ +import { ComboboxItemRef, injectComboboxRootContext } from './combobox-root'; import { computed, Directive, inject, signal } from '@angular/core'; import { createContext } from '@radix-ng/primitives/core'; -import { ComboboxItemRef, injectComboboxRootContext } from './combobox-root'; const groupContext = () => { const group = inject(RdxComboboxGroup); diff --git a/packages/primitives/combobox/src/combobox-input-group.ts b/packages/primitives/combobox/src/combobox-input-group.ts index aa2ff5015..18e1272ca 100644 --- a/packages/primitives/combobox/src/combobox-input-group.ts +++ b/packages/primitives/combobox/src/combobox-input-group.ts @@ -1,5 +1,5 @@ -import { computed, Directive } from '@angular/core'; import { injectComboboxRootContext } from './combobox-root'; +import { computed, Directive } from '@angular/core'; const attr = (value: boolean) => (value ? '' : undefined); diff --git a/packages/primitives/combobox/src/combobox-input.ts b/packages/primitives/combobox/src/combobox-input.ts index aa132d68f..cb088863b 100644 --- a/packages/primitives/combobox/src/combobox-input.ts +++ b/packages/primitives/combobox/src/combobox-input.ts @@ -1,3 +1,5 @@ +import { RdxComboboxPositioner } from './combobox-positioner'; +import { injectComboboxRootContext } from './combobox-root'; import { afterNextRender, booleanAttribute, @@ -12,8 +14,6 @@ import { BooleanInput, injectId } from '@radix-ng/primitives/core'; import { RdxFloatingInsideElement } from '@radix-ng/primitives/dismissable-layer'; import { injectFieldRootContext } from '@radix-ng/primitives/field'; import { RdxPopperAnchor } from '@radix-ng/primitives/popper'; -import { RdxComboboxPositioner } from './combobox-positioner'; -import { injectComboboxRootContext } from './combobox-root'; const attr = (value: boolean) => (value ? '' : undefined); diff --git a/packages/primitives/combobox/src/combobox-item-indicator.ts b/packages/primitives/combobox/src/combobox-item-indicator.ts index 641b0cd04..3300477b3 100644 --- a/packages/primitives/combobox/src/combobox-item-indicator.ts +++ b/packages/primitives/combobox/src/combobox-item-indicator.ts @@ -1,5 +1,5 @@ -import { Directive } from '@angular/core'; import { injectComboboxItemContext } from './combobox-item'; +import { Directive } from '@angular/core'; /** * Renders only when its item is selected (e.g. a checkmark). diff --git a/packages/primitives/combobox/src/combobox-item.ts b/packages/primitives/combobox/src/combobox-item.ts index 21daa2844..203a7d45e 100644 --- a/packages/primitives/combobox/src/combobox-item.ts +++ b/packages/primitives/combobox/src/combobox-item.ts @@ -1,3 +1,6 @@ +import { injectComboboxGroupContext } from './combobox-group'; +import { ComboboxItemRef, injectComboboxRootContext } from './combobox-root'; +import { RdxComboboxRow } from './combobox-row'; import { afterNextRender, afterRenderEffect, @@ -9,13 +12,10 @@ import { ElementRef, inject, input, - signal, - Signal + Signal, + signal } from '@angular/core'; import { AcceptableValue, createContext, injectId } from '@radix-ng/primitives/core'; -import { injectComboboxGroupContext } from './combobox-group'; -import { ComboboxItemRef, injectComboboxRootContext } from './combobox-root'; -import { RdxComboboxRow } from './combobox-row'; const itemContext = () => { const item = inject(RdxComboboxItem); diff --git a/packages/primitives/combobox/src/combobox-label.ts b/packages/primitives/combobox/src/combobox-label.ts index 1ca3bec58..f0fb500ad 100644 --- a/packages/primitives/combobox/src/combobox-label.ts +++ b/packages/primitives/combobox/src/combobox-label.ts @@ -1,6 +1,6 @@ +import { injectComboboxRootContext } from './combobox-root'; import { DestroyRef, Directive, inject } from '@angular/core'; import { injectId } from '@radix-ng/primitives/core'; -import { injectComboboxRootContext } from './combobox-root'; /** * An accessible label for the combobox. Registers its id so the input (and trigger) reference it via diff --git a/packages/primitives/combobox/src/combobox-list.ts b/packages/primitives/combobox/src/combobox-list.ts index 3ea7b51ff..ca0c27d2e 100644 --- a/packages/primitives/combobox/src/combobox-list.ts +++ b/packages/primitives/combobox/src/combobox-list.ts @@ -1,5 +1,5 @@ -import { Directive } from '@angular/core'; import { injectComboboxRootContext } from './combobox-root'; +import { Directive } from '@angular/core'; /** * The listbox container for options. Carries the id referenced by the input's `aria-controls`, exposes diff --git a/packages/primitives/combobox/src/combobox-popup.ts b/packages/primitives/combobox/src/combobox-popup.ts index 6b9b97051..dd3b3f60e 100644 --- a/packages/primitives/combobox/src/combobox-popup.ts +++ b/packages/primitives/combobox/src/combobox-popup.ts @@ -1,3 +1,4 @@ +import { injectComboboxRootContext } from './combobox-root'; import { afterRenderEffect, computed, DestroyRef, Directive, ElementRef, inject } from '@angular/core'; import { RDX_FLOATING_REGISTRATION, @@ -7,7 +8,6 @@ import { } from '@radix-ng/primitives/core'; import { RdxDismiss } from '@radix-ng/primitives/dismissable-layer'; import { injectPopperContentWrapperContext, RdxPopperContent } from '@radix-ng/primitives/popper'; -import { injectComboboxRootContext } from './combobox-root'; /** * The popup surface. Composes the popper content (for `data-side` / `data-align`) and a dismissable diff --git a/packages/primitives/combobox/src/combobox-portal.ts b/packages/primitives/combobox/src/combobox-portal.ts index c4582f6aa..50f96d5bf 100644 --- a/packages/primitives/combobox/src/combobox-portal.ts +++ b/packages/primitives/combobox/src/combobox-portal.ts @@ -1,8 +1,8 @@ +import { injectComboboxRootContext } from './combobox-root'; import { Directive, input, isDevMode } from '@angular/core'; import { rdxDevError } from '@radix-ng/primitives/core'; import { RdxPortalContainer, RdxPortalPresence } from '@radix-ng/primitives/portal'; import { provideRdxPresenceContext } from '@radix-ng/primitives/presence'; -import { injectComboboxRootContext } from './combobox-root'; /** * Structural directive that teleports the combobox popup into a container (default `document.body`) diff --git a/packages/primitives/combobox/src/combobox-positioner.ts b/packages/primitives/combobox/src/combobox-positioner.ts index 23ccdd0fa..7a009eaa9 100644 --- a/packages/primitives/combobox/src/combobox-positioner.ts +++ b/packages/primitives/combobox/src/combobox-positioner.ts @@ -1,3 +1,4 @@ +import { injectComboboxRootContext } from './combobox-root'; import { afterNextRender, Directive, ElementRef, inject, Injector } from '@angular/core'; import { setupInternalBackdrop } from '@radix-ng/primitives/core'; import { @@ -5,7 +6,6 @@ import { provideRdxPopperContentWrapper, RdxPopperContentWrapper } from '@radix-ng/primitives/popper'; -import { injectComboboxRootContext } from './combobox-root'; /** * Positions the combobox popup relative to the input anchor using the popper engine. diff --git a/packages/primitives/combobox/src/combobox-root.ts b/packages/primitives/combobox/src/combobox-root.ts index 83c392b46..033d84567 100644 --- a/packages/primitives/combobox/src/combobox-root.ts +++ b/packages/primitives/combobox/src/combobox-root.ts @@ -1,3 +1,12 @@ +import { + ComboboxEngine, + ComboboxFilter, + ComboboxHighlightReason, + ComboboxInputLayout, + ComboboxItemHighlightedDetails, + ComboboxItemRef, + useComboboxEngine +} from './combobox-engine'; import { booleanAttribute, computed, @@ -21,10 +30,10 @@ import { createCancelableChangeEventDetails, createContext, createFloatingRootContext, - itemToStringLabel as defaultItemToStringLabel, Direction, - isNullish, isItemEqualToValue as itemsEqual, + isNullish, + itemToStringLabel as defaultItemToStringLabel, ItemValueComparator, provideFloatingRootContext, provideFloatingTree, @@ -36,15 +45,6 @@ import { } from '@radix-ng/primitives/core'; import { injectDirection } from '@radix-ng/primitives/direction-provider'; import { RdxPopper } from '@radix-ng/primitives/popper'; -import { - ComboboxEngine, - ComboboxFilter, - ComboboxHighlightReason, - ComboboxInputLayout, - ComboboxItemHighlightedDetails, - ComboboxItemRef, - useComboboxEngine -} from './combobox-engine'; /** The value a combobox can hold: a single value, an array (multiple mode), or nothing. */ export type ComboboxValue = AcceptableValue | AcceptableValue[]; diff --git a/packages/primitives/combobox/src/combobox-trigger.ts b/packages/primitives/combobox/src/combobox-trigger.ts index e6f43e4b5..b71d4833d 100644 --- a/packages/primitives/combobox/src/combobox-trigger.ts +++ b/packages/primitives/combobox/src/combobox-trigger.ts @@ -1,6 +1,6 @@ +import { injectComboboxRootContext } from './combobox-root'; import { DestroyRef, Directive, ElementRef, inject, signal } from '@angular/core'; import { RdxFloatingInsideElement } from '@radix-ng/primitives/dismissable-layer'; -import { injectComboboxRootContext } from './combobox-root'; /** * Toggles the combobox popup. Its semantics depend on the layout (Base UI's `inputInsidePopup`): diff --git a/packages/primitives/combobox/src/combobox-value.ts b/packages/primitives/combobox/src/combobox-value.ts index 1b158c5ca..b5ae06adb 100644 --- a/packages/primitives/combobox/src/combobox-value.ts +++ b/packages/primitives/combobox/src/combobox-value.ts @@ -1,6 +1,6 @@ +import { injectComboboxRootContext } from './combobox-root'; import { computed, Directive, input } from '@angular/core'; import { AcceptableValue, isNullish } from '@radix-ng/primitives/core'; -import { injectComboboxRootContext } from './combobox-root'; /** * Renders the current selection's label(s) — typically inside a {@link RdxComboboxTrigger} for a diff --git a/packages/primitives/combobox/stories/combobox-async-multiple.ts b/packages/primitives/combobox/stories/combobox-async-multiple.ts index 3670de60a..494473afe 100644 --- a/packages/primitives/combobox/stories/combobox-async-multiple.ts +++ b/packages/primitives/combobox/stories/combobox-async-multiple.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; -import { LucideCheck, LucideX } from '@lucide/angular'; import { cn, demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; +import { LucideCheck, LucideX } from '@lucide/angular'; interface DirectoryUser { id: string; @@ -23,25 +23,25 @@ interface DirectoryUser { imports: [_importsCombobox, LucideCheck, LucideX], template: `
-
+
@if (value().length) { -
+
@for (user of value(); track user.id) { - + {{ user.name }} - @@ -50,15 +50,15 @@ interface DirectoryUser { }
-
-
+
+
@if (loading()) {
@@ -74,12 +74,12 @@ interface DirectoryUser {
@if (emptyMessage(); as message) { -
{{ message }}
+
{{ message }}
} -
+
@for (user of items(); track user.id) { -
+
- + @if (value()) { - } -
-
-
+
+
@if (loading()) {
@@ -65,12 +65,12 @@ interface DirectoryUser {
@if (emptyMessage(); as message) { -
{{ message }}
+
{{ message }}
} -
+
@for (user of items(); track user.id) { -
+
- +
-
-
-
+
+
+
@for (command of commands; track command) { -
+
@@ -35,7 +35,7 @@ import { _importsCombobox } from '../index';
}
-
No commands.
+
No commands.
diff --git a/packages/primitives/combobox/stories/combobox-creatable.ts b/packages/primitives/combobox/stories/combobox-creatable.ts index 4a4a2791b..98921af94 100644 --- a/packages/primitives/combobox/stories/combobox-creatable.ts +++ b/packages/primitives/combobox/stories/combobox-creatable.ts @@ -1,8 +1,8 @@ +import { cn, demoButton, demoCombobox, demoDialog } from '../../storybook/styles'; +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'; import { LucideCheck, LucideChevronDown, LucidePlus, LucideX } from '@lucide/angular'; import { dialogImports } from '@radix-ng/primitives/dialog'; -import { cn, demoButton, demoCombobox, demoDialog } from '../../storybook/styles'; -import { _importsCombobox } from '../index'; /** Sentinel value for the "create" row, intercepted in `onValueChange`. */ const CREATE = '__rdx_create__'; @@ -18,20 +18,20 @@ const CREATE = '__rdx_create__'; imports: [_importsCombobox, ...dialogImports, LucideChevronDown, LucideCheck, LucidePlus, LucideX], template: `
-
+
@if (value().length) { -
+
@for (label of value(); track label) { - + {{ label }} - @@ -39,29 +39,29 @@ const CREATE = '__rdx_create__';
} -
-
-
-
+
+
+
@for (label of options(); track label) { -
- +
+ {{ label }}
} @if (showCreate()) { -
+
@@ -69,30 +69,30 @@ const CREATE = '__rdx_create__';
}
-
No labels found.
+
No labels found.
-
+
-
-
-

Create new label

-

Add a new label to select.

+
+
+

Create new label

+

Add a new label to select.

- - +
diff --git a/packages/primitives/combobox/stories/combobox-default.ts b/packages/primitives/combobox/stories/combobox-default.ts index fe8c2fd8f..e0cb215d4 100644 --- a/packages/primitives/combobox/stories/combobox-default.ts +++ b/packages/primitives/combobox/stories/combobox-default.ts @@ -1,34 +1,34 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideChevronDown } from '@lucide/angular'; import { demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideChevronDown } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, selector: 'combobox-default', imports: [_importsCombobox, LucideChevronDown, LucideCheck], template: ` -
+
- -
-
-
-
+
+
+
@for (fruit of fruits; track fruit) { -
- +
+ {{ fruit }}
}
-
No fruit found.
+
No fruit found.
diff --git a/packages/primitives/combobox/stories/combobox-disabled.ts b/packages/primitives/combobox/stories/combobox-disabled.ts index b1442b819..1549f124c 100644 --- a/packages/primitives/combobox/stories/combobox-disabled.ts +++ b/packages/primitives/combobox/stories/combobox-disabled.ts @@ -1,27 +1,27 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideChevronDown } from '@lucide/angular'; import { demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideChevronDown } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, selector: 'combobox-disabled', imports: [_importsCombobox, LucideChevronDown, LucideCheck], template: ` -
+
- -
-
-
-
+
+
+
@for (fruit of fruits; track fruit) { -
- +
+ {{ fruit }} diff --git a/packages/primitives/combobox/stories/combobox-empty.ts b/packages/primitives/combobox/stories/combobox-empty.ts index 9c3ded576..c5d2aab10 100644 --- a/packages/primitives/combobox/stories/combobox-empty.ts +++ b/packages/primitives/combobox/stories/combobox-empty.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideChevronDown } from '@lucide/angular'; import { demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideChevronDown } from '@lucide/angular'; /** * `RdxComboboxEmpty` renders only when no item matches the query — type something like "zzz" to see @@ -12,27 +12,27 @@ import { _importsCombobox } from '../index'; selector: 'combobox-empty', imports: [_importsCombobox, LucideChevronDown, LucideCheck], template: ` -
+
- -
-
-
-
+
+
+
@for (fruit of fruits; track fruit) { -
- +
+ {{ fruit }}
}
-
No fruit matches your search.
+
No fruit matches your search.
diff --git a/packages/primitives/combobox/stories/combobox-grid.ts b/packages/primitives/combobox/stories/combobox-grid.ts index b66377374..c59e1ed7b 100644 --- a/packages/primitives/combobox/stories/combobox-grid.ts +++ b/packages/primitives/combobox/stories/combobox-grid.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideChevronDown } from '@lucide/angular'; import { cn, demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideChevronDown } from '@lucide/angular'; /** * A 2D grid list (`grid`): `ArrowUp`/`ArrowDown` move between rows keeping the column, `ArrowLeft`/ @@ -13,26 +13,26 @@ import { _importsCombobox } from '../index'; selector: 'combobox-grid', imports: [_importsCombobox, LucideChevronDown], template: ` -
+
- -
-
-
-
+
+
+
@for (row of rows; track $index) { -
+
@for (size of row; track size) { -
{{ size }}
+
{{ size }}
}
}
-
No size found.
+
No size found.
diff --git a/packages/primitives/combobox/stories/combobox-grouped.ts b/packages/primitives/combobox/stories/combobox-grouped.ts index f4a98e4be..9eb822739 100644 --- a/packages/primitives/combobox/stories/combobox-grouped.ts +++ b/packages/primitives/combobox/stories/combobox-grouped.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideChevronDown } from '@lucide/angular'; import { demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideChevronDown } from '@lucide/angular'; /** Options organized into sections with `RdxComboboxGroup` / `RdxComboboxGroupLabel`. A group hides * its heading automatically when all of its items are filtered out. */ @@ -10,22 +10,22 @@ import { _importsCombobox } from '../index'; selector: 'combobox-grouped', imports: [_importsCombobox, LucideChevronDown, LucideCheck], template: ` -
+
- -
-
-
-
+
+
+
-
Fruits
+
Fruits
@for (fruit of fruits; track fruit) { -
- +
+ {{ fruit }} @@ -33,10 +33,10 @@ import { _importsCombobox } from '../index'; }
-
Vegetables
+
Vegetables
@for (vegetable of vegetables; track vegetable) { -
- +
+ {{ vegetable }} @@ -44,7 +44,7 @@ import { _importsCombobox } from '../index'; }
-
No produce found.
+
No produce found.
diff --git a/packages/primitives/combobox/stories/combobox-input-in-popup.ts b/packages/primitives/combobox/stories/combobox-input-in-popup.ts index ed047f234..88c051182 100644 --- a/packages/primitives/combobox/stories/combobox-input-in-popup.ts +++ b/packages/primitives/combobox/stories/combobox-input-in-popup.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideChevronDown } from '@lucide/angular'; import { demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideChevronDown } from '@lucide/angular'; /** * A select-like pattern where the trigger shows the current value and the **search input lives inside @@ -13,30 +13,30 @@ import { _importsCombobox } from '../index'; selector: 'combobox-input-in-popup', imports: [_importsCombobox, LucideChevronDown, LucideCheck], template: ` -
+
Fruit - -
-
+
+
- +
-
+
@for (fruit of fruits; track fruit) { -
- +
+ {{ fruit }}
} -
No fruit found.
+
No fruit found.
diff --git a/packages/primitives/combobox/stories/combobox-modal.ts b/packages/primitives/combobox/stories/combobox-modal.ts index aa25af7f2..54606f821 100644 --- a/packages/primitives/combobox/stories/combobox-modal.ts +++ b/packages/primitives/combobox/stories/combobox-modal.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideChevronDown } from '@lucide/angular'; import { demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideChevronDown } from '@lucide/angular'; /** * Modal combobox: while open, page scroll is locked and content outside the popup is inert. A @@ -12,29 +12,29 @@ import { _importsCombobox } from '../index'; selector: 'combobox-modal', imports: [_importsCombobox, LucideChevronDown, LucideCheck], template: ` -
+
- -
-
-
-
-
+
+
+
+
@for (fruit of fruits; track fruit) { -
- +
+ {{ fruit }}
}
-
No fruit found.
+
No fruit found.
diff --git a/packages/primitives/combobox/stories/combobox-multiple.ts b/packages/primitives/combobox/stories/combobox-multiple.ts index c869b941c..71adf1efc 100644 --- a/packages/primitives/combobox/stories/combobox-multiple.ts +++ b/packages/primitives/combobox/stories/combobox-multiple.ts @@ -1,21 +1,21 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideChevronDown, LucideX } from '@lucide/angular'; import { cn, demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideChevronDown, LucideX } from '@lucide/angular'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, selector: 'combobox-multiple', imports: [_importsCombobox, LucideChevronDown, LucideCheck, LucideX], template: ` -
-
+
+
@if (value().length) { -
+
@for (fruit of value(); track fruit) { - + {{ fruit }} - @@ -23,29 +23,29 @@ import { _importsCombobox } from '../index';
} -
-
-
-
+
+
+
@for (fruit of fruits; track fruit) { -
- +
+ {{ fruit }}
}
-
No fruit found.
+
No fruit found.
diff --git a/packages/primitives/combobox/stories/combobox-open-change.ts b/packages/primitives/combobox/stories/combobox-open-change.ts index 4e067669d..a70194e06 100644 --- a/packages/primitives/combobox/stories/combobox-open-change.ts +++ b/packages/primitives/combobox/stories/combobox-open-change.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; -import { LucideCheck, LucideChevronDown } from '@lucide/angular'; import { demoCombobox } from '../../storybook/styles'; import { _importsCombobox, RdxComboboxOpenChange } from '../index'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { LucideCheck, LucideChevronDown } from '@lucide/angular'; interface ComboboxOpenChangeLogEntry { label: string; @@ -20,44 +20,44 @@ interface ComboboxOpenChangeLogEntry {
-
-
-
-
+
+
+
@for (framework of frameworks; track framework) { -
- +
+ {{ framework }}
}
-
No match found.
+
No match found.
diff --git a/packages/primitives/combobox/stories/combobox-reactive-forms.ts b/packages/primitives/combobox/stories/combobox-reactive-forms.ts index 92943b1cb..bfb64573b 100644 --- a/packages/primitives/combobox/stories/combobox-reactive-forms.ts +++ b/packages/primitives/combobox/stories/combobox-reactive-forms.ts @@ -1,8 +1,8 @@ +import { demoCombobox } from '../../storybook/styles'; +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { LucideCheck, LucideChevronDown } from '@lucide/angular'; -import { demoCombobox } from '../../storybook/styles'; -import { _importsCombobox } from '../index'; @Component({ changeDetection: ChangeDetectionStrategy.Eager, @@ -10,27 +10,27 @@ import { _importsCombobox } from '../index'; imports: [_importsCombobox, ReactiveFormsModule, LucideChevronDown, LucideCheck], template: `
-
+
- -
-
-
-
+
+
+
@for (f of fruits; track f) { -
- +
+ {{ f }}
}
-
No fruit found.
+
No fruit found.
diff --git a/packages/primitives/combobox/stories/combobox-validation.ts b/packages/primitives/combobox/stories/combobox-validation.ts index 6476dd54f..9fc6f8cb5 100644 --- a/packages/primitives/combobox/stories/combobox-validation.ts +++ b/packages/primitives/combobox/stories/combobox-validation.ts @@ -1,8 +1,8 @@ +import { cn, demoButton, demoCombobox } from '../../storybook/styles'; +import { _importsCombobox } from '../index'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; import { LucideCheck, LucideChevronDown } from '@lucide/angular'; -import { cn, demoButton, demoCombobox } from '../../storybook/styles'; -import { _importsCombobox } from '../index'; /** * Reactive forms with validation. The control's validity is bound to the combobox `[invalid]` input, @@ -15,27 +15,27 @@ import { _importsCombobox } from '../index'; imports: [_importsCombobox, ReactiveFormsModule, LucideChevronDown, LucideCheck], template: ` -
+
- -
-
-
-
+
+
+
@for (f of fruits; track f) { -
- +
+ {{ f }}
}
-
No fruit found.
+
No fruit found.
@@ -44,7 +44,7 @@ import { _importsCombobox } from '../index';

Please pick a fruit.

} - + @if (submitted()) {

Submitted ✓

diff --git a/packages/primitives/combobox/stories/combobox-virtualized.ts b/packages/primitives/combobox/stories/combobox-virtualized.ts index ad0d8f92b..c68d9fa8b 100644 --- a/packages/primitives/combobox/stories/combobox-virtualized.ts +++ b/packages/primitives/combobox/stories/combobox-virtualized.ts @@ -1,9 +1,9 @@ -import { ChangeDetectionStrategy, Component, ElementRef, signal, viewChild } from '@angular/core'; -import { LucideCheck } from '@lucide/angular'; -import { injectVirtualizer } from '@tanstack/angular-virtual'; import { cn, demoCombobox } from '../../storybook/styles'; import { _importsCombobox } from '../index'; import { ComboboxItemHighlightedDetails, RdxComboboxRoot } from '../src/combobox-root'; +import { ChangeDetectionStrategy, Component, ElementRef, signal, viewChild } from '@angular/core'; +import { LucideCheck } from '@lucide/angular'; +import { injectVirtualizer } from '@tanstack/angular-virtual'; /** * Externally virtualized list of 10,000 items. The combobox owns filtering and index navigation @@ -18,32 +18,32 @@ import { ComboboxItemHighlightedDetails, RdxComboboxRoot } from '../src/combobox template: `
- +
-
-
-
No items found.
-
+
+
+
No items found.
+
@for (row of virtualizer.getVirtualItems(); track row.key) {
- + {{ cmb.filteredItems()[row.index] }} diff --git a/packages/primitives/combobox/stories/combobox.stories.ts b/packages/primitives/combobox/stories/combobox.stories.ts index 27d5fdccd..59aa8df53 100644 --- a/packages/primitives/combobox/stories/combobox.stories.ts +++ b/packages/primitives/combobox/stories/combobox.stories.ts @@ -1,9 +1,8 @@ -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { ComboboxAsync } from './combobox-async'; +import asyncSource from './combobox-async?raw'; import { ComboboxAsyncMultiple } from './combobox-async-multiple'; import asyncMultipleSource from './combobox-async-multiple?raw'; -import asyncSource from './combobox-async?raw'; import { ComboboxCommand } from './combobox-command'; import commandSource from './combobox-command?raw'; import { ComboboxCreatable } from './combobox-creatable'; @@ -32,6 +31,7 @@ import { ComboboxValidation } from './combobox-validation'; import validationSource from './combobox-validation?raw'; import { ComboboxVirtualizedExample } from './combobox-virtualized'; import virtualizedSource from './combobox-virtualized?raw'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const html = String.raw; diff --git a/packages/primitives/composite/__tests__/composite.spec.ts b/packages/primitives/composite/__tests__/composite.spec.ts index 3104d20e6..6a30a7b6d 100644 --- a/packages/primitives/composite/__tests__/composite.spec.ts +++ b/packages/primitives/composite/__tests__/composite.spec.ts @@ -20,6 +20,7 @@ function keydown(element: HTMLElement, key: string, init: KeyboardEventInit = {} changeDetection: ChangeDetectionStrategy.Eager, template: `
- + - +
`, imports: [RdxCompositeRoot, RdxCompositeItem] @@ -84,9 +84,9 @@ class CompositeCheckboxHostComponent {} @Component({ changeDetection: ChangeDetectionStrategy.Eager, template: ` -
- - +
+ +
`, imports: [RdxCompositeList, RdxCompositeListItem] diff --git a/packages/primitives/composite/index.ts b/packages/primitives/composite/index.ts index 6ad411bf7..c807dd336 100644 --- a/packages/primitives/composite/index.ts +++ b/packages/primitives/composite/index.ts @@ -1,8 +1,8 @@ -import { NgModule } from '@angular/core'; import { RdxCompositeItem } from './src/composite-item'; import { RdxCompositeList } from './src/composite-list'; import { RdxCompositeListItem } from './src/composite-list-item'; import { RdxCompositeRoot } from './src/composite-root'; +import { NgModule } from '@angular/core'; export * from './src/composite-item'; export * from './src/composite-list'; diff --git a/packages/primitives/composite/src/composite-item.ts b/packages/primitives/composite/src/composite-item.ts index 28f839476..48aeb1008 100644 --- a/packages/primitives/composite/src/composite-item.ts +++ b/packages/primitives/composite/src/composite-item.ts @@ -1,7 +1,7 @@ -import { computed, Directive, ElementRef, inject } from '@angular/core'; import { RdxCompositeListItem } from './composite-list-item'; import { injectRdxCompositeRootContext } from './composite-root'; import { RdxCompositeItemMetadata } from './types'; +import { computed, Directive, ElementRef, inject } from '@angular/core'; /** * Internal Base UI-style composite item. Registers itself with the nearest composite root and diff --git a/packages/primitives/composite/src/composite-list-item.ts b/packages/primitives/composite/src/composite-list-item.ts index e3c0b2e09..ced95f376 100644 --- a/packages/primitives/composite/src/composite-list-item.ts +++ b/packages/primitives/composite/src/composite-list-item.ts @@ -1,3 +1,5 @@ +import { injectRdxCompositeListContext } from './composite-list'; +import { RdxCompositeItemMetadata } from './types'; import { afterNextRender, computed, @@ -10,8 +12,6 @@ import { signal, untracked } from '@angular/core'; -import { injectRdxCompositeListContext } from './composite-list'; -import { RdxCompositeItemMetadata } from './types'; /** * Registers the host with the nearest composite list without changing focus behavior. diff --git a/packages/primitives/composite/src/composite-list.ts b/packages/primitives/composite/src/composite-list.ts index 8b1279431..4f29f6025 100644 --- a/packages/primitives/composite/src/composite-list.ts +++ b/packages/primitives/composite/src/composite-list.ts @@ -1,5 +1,3 @@ -import { computed, Directive, effect, ElementRef, inject, output, signal } from '@angular/core'; -import { createContext } from '@radix-ng/primitives/core'; import { RdxCompositeItemMetadata, RdxCompositeItemRegistration, @@ -7,6 +5,8 @@ import { RdxCompositeMetadata } from './types'; import { sortByDocumentPosition } from './utils'; +import { computed, Directive, effect, ElementRef, inject, output, signal } from '@angular/core'; +import { createContext } from '@radix-ng/primitives/core'; const listContext = (): RdxCompositeListContext => { const list = inject(RdxCompositeList); diff --git a/packages/primitives/composite/src/composite-root.ts b/packages/primitives/composite/src/composite-root.ts index e98ff611c..bf442a7e2 100644 --- a/packages/primitives/composite/src/composite-root.ts +++ b/packages/primitives/composite/src/composite-root.ts @@ -1,16 +1,3 @@ -import { - booleanAttribute, - Directive, - effect, - ElementRef, - inject, - input, - linkedSignal, - model, - output -} from '@angular/core'; -import { BooleanInput, createContext, Direction } from '@radix-ng/primitives/core'; -import { injectDirection } from '@radix-ng/primitives/direction-provider'; import { RdxCompositeList } from './composite-list'; import { RdxCompositeMetadata, @@ -34,6 +21,19 @@ import { scrollIntoViewIfNeeded, shouldKeepNativeTextInputBehavior } from './utils'; +import { + booleanAttribute, + Directive, + effect, + ElementRef, + inject, + input, + linkedSignal, + model, + output +} from '@angular/core'; +import { BooleanInput, createContext, Direction } from '@radix-ng/primitives/core'; +import { injectDirection } from '@radix-ng/primitives/direction-provider'; const rootContext = (): RdxCompositeRootContext => { const root = inject(RdxCompositeRoot); diff --git a/packages/primitives/composite/src/utils.ts b/packages/primitives/composite/src/utils.ts index 08e48a596..bebbc0d40 100644 --- a/packages/primitives/composite/src/utils.ts +++ b/packages/primitives/composite/src/utils.ts @@ -1,5 +1,5 @@ -import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, Direction, END, HOME } from '@radix-ng/primitives/core'; import { RdxCompositeModifierKey, RdxCompositeOrientation } from './types'; +import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, Direction, END, HOME } from '@radix-ng/primitives/core'; export const ACTIVE_COMPOSITE_ITEM = 'data-composite-item-active'; diff --git a/packages/primitives/composite/stories/composite-default.ts b/packages/primitives/composite/stories/composite-default.ts index 227a1fb44..f06a549be 100644 --- a/packages/primitives/composite/stories/composite-default.ts +++ b/packages/primitives/composite/stories/composite-default.ts @@ -1,6 +1,6 @@ +import { cn, demoButton, demoInput } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxCompositeItem, RdxCompositeRoot } from '@radix-ng/primitives/composite'; -import { cn, demoButton, demoInput } from '../../storybook/styles'; @Component({ selector: 'rdx-composite-default', @@ -15,22 +15,22 @@ import { cn, demoButton, demoInput } from '../../storybook/styles'; highlightItemOnHover rdxCompositeRoot > - - - + + +
- - - - + + + +
` diff --git a/packages/primitives/composite/stories/composite-list-only.ts b/packages/primitives/composite/stories/composite-list-only.ts index 8c7ee9029..76dc1a2c5 100644 --- a/packages/primitives/composite/stories/composite-list-only.ts +++ b/packages/primitives/composite/stories/composite-list-only.ts @@ -1,6 +1,6 @@ +import { cn, demoButton, demoCard } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component } from '@angular/core'; import { RdxCompositeList, RdxCompositeListItem, RdxCompositeMetadata } from '@radix-ng/primitives/composite'; -import { cn, demoButton, demoCard } from '../../storybook/styles'; @Component({ selector: 'rdx-composite-list-only', @@ -8,14 +8,14 @@ import { cn, demoButton, demoCard } from '../../storybook/styles'; changeDetection: ChangeDetectionStrategy.OnPush, template: `
-
- - -
diff --git a/packages/primitives/composite/stories/composite.stories.ts b/packages/primitives/composite/stories/composite.stories.ts index 6fdb710ff..d0d4554f3 100644 --- a/packages/primitives/composite/stories/composite.stories.ts +++ b/packages/primitives/composite/stories/composite.stories.ts @@ -1,9 +1,9 @@ -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; import { tailwindDemoDecorator } from '../../storybook/tailwind-demo'; import { RdxCompositeDefaultComponent } from './composite-default'; import defaultSource from './composite-default?raw'; import { RdxCompositeListOnlyComponent } from './composite-list-only'; import listOnlySource from './composite-list-only?raw'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; const html = String.raw; diff --git a/packages/primitives/config/__tests__/config-provider.spec.ts b/packages/primitives/config/__tests__/config-provider.spec.ts index 078a4875b..99afe9e9d 100644 --- a/packages/primitives/config/__tests__/config-provider.spec.ts +++ b/packages/primitives/config/__tests__/config-provider.spec.ts @@ -1,7 +1,7 @@ -import { TestBed } from '@angular/core/testing'; -import { afterEach, describe, expect, it } from 'vitest'; import { RadixNG } from '../src/config'; import { provideRadixNG, RADIX_NG_CONFIG } from '../src/config.provider'; +import { TestBed } from '@angular/core/testing'; +import { afterEach, describe, expect, it } from 'vitest'; describe('provideRadixNG', () => { afterEach(() => { diff --git a/packages/primitives/config/src/config.provider.ts b/packages/primitives/config/src/config.provider.ts index c05b5f294..996fbefca 100644 --- a/packages/primitives/config/src/config.provider.ts +++ b/packages/primitives/config/src/config.provider.ts @@ -1,3 +1,4 @@ +import { RadixNG, type RadixNGConfig } from './config'; import { EnvironmentProviders, inject, @@ -6,7 +7,6 @@ import { provideAppInitializer } from '@angular/core'; import { RDX_DIRECTION } from '@radix-ng/primitives/direction-provider'; -import { RadixNG, type RadixNGConfig } from './config'; export const RADIX_NG_CONFIG = new InjectionToken('RADIX_NG_CONFIG', { providedIn: 'root', diff --git a/packages/primitives/context-menu/__tests__/context-menu.spec.ts b/packages/primitives/context-menu/__tests__/context-menu.spec.ts index bbfb956f1..a24ccbacb 100644 --- a/packages/primitives/context-menu/__tests__/context-menu.spec.ts +++ b/packages/primitives/context-menu/__tests__/context-menu.spec.ts @@ -29,7 +29,7 @@ afterEach(() => { imports: [RdxContextMenuModule, RdxMenuModule], template: ` -
Right click area
+
Right click area
@if (root.menuRoot.open()) {
@@ -51,7 +51,7 @@ class ContextMenuHost { imports: [RdxContextMenuModule, RdxMenuModule], template: ` -
Right click area
+
Right click area
@if (root.menuRoot.open()) {
diff --git a/packages/primitives/context-menu/index.ts b/packages/primitives/context-menu/index.ts index c65021fe2..21f0253d7 100644 --- a/packages/primitives/context-menu/index.ts +++ b/packages/primitives/context-menu/index.ts @@ -1,6 +1,6 @@ -import { NgModule } from '@angular/core'; import { RdxContextMenuRoot } from './src/context-menu-root'; import { RdxContextMenuTrigger } from './src/context-menu-trigger'; +import { NgModule } from '@angular/core'; export * from './src/context-menu-root'; export * from './src/context-menu-trigger'; diff --git a/packages/primitives/context-menu/src/context-menu-trigger.ts b/packages/primitives/context-menu/src/context-menu-trigger.ts index 5a4a28374..dcc0825d4 100644 --- a/packages/primitives/context-menu/src/context-menu-trigger.ts +++ b/packages/primitives/context-menu/src/context-menu-trigger.ts @@ -1,3 +1,4 @@ +import { injectRdxContextMenuRootContext } from './context-menu-root'; import { booleanAttribute, DestroyRef, @@ -10,7 +11,6 @@ import { } from '@angular/core'; import { BooleanInput, NumberInput } from '@radix-ng/primitives/core'; import { RdxMenuRoot } from '@radix-ng/primitives/menu'; -import { injectRdxContextMenuRootContext } from './context-menu-root'; /** * An area that opens the context menu on right click (or a touch long-press). diff --git a/packages/primitives/context-menu/stories/context-menu-default.ts b/packages/primitives/context-menu/stories/context-menu-default.ts index 717c0bd83..e14d23f60 100644 --- a/packages/primitives/context-menu/stories/context-menu-default.ts +++ b/packages/primitives/context-menu/stories/context-menu-default.ts @@ -1,8 +1,8 @@ +import { cn, demoMenu } from '../../storybook/styles'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { LucideCheck, LucideDot } from '@lucide/angular'; import { RdxContextMenuModule } from '@radix-ng/primitives/context-menu'; import { RdxMenuModule } from '@radix-ng/primitives/menu'; -import { cn, demoMenu } from '../../storybook/styles'; @Component({ selector: 'rdx-context-menu-default', @@ -11,83 +11,83 @@ import { cn, demoMenu } from '../../storybook/styles'; template: `
Right click here
-
-
- - - -
-
- - - +
+ + +
-
+
-