@unofficialbox/box-open-elements-angular 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 box-open-elements contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # @unofficialbox/box-open-elements-angular
2
+
3
+ Typed standalone Angular 20 directives for `box-open-elements`. Import
4
+ `Button`, `TextField`, `Select`, and `Dialog` in a standalone component to get
5
+ typed inputs, custom-event outputs, element access, and automatic registration.
6
+
7
+ ```bash
8
+ npm install @unofficialbox/box-open-elements @unofficialbox/box-open-elements-angular @angular/core
9
+ ```
10
+
11
+ ```ts
12
+ import { Component } from "@angular/core";
13
+ import { Button, Select, TextField } from "@unofficialbox/box-open-elements-angular";
14
+
15
+ @Component({
16
+ standalone: true,
17
+ imports: [Button, Select, TextField],
18
+ template: `<box-select [options]="options" (value-changed)="setStatus($event)" />`,
19
+ })
20
+ export class Example {
21
+ options = [{ label: "Draft", value: "draft" }];
22
+ setStatus(event: CustomEvent<{ value: string }>) {}
23
+ }
24
+ ```
25
+
26
+ `createExplorerSelectionSignal(controller)` exposes the shared selection
27
+ controller as a scoped Angular signal. Version `0.1.0` is a release candidate;
28
+ Supported status follows the first public lockstep adapter release and clean
29
+ registry-install verification.
@@ -0,0 +1,14 @@
1
+ import { ElementRef } from "@angular/core";
2
+ import { Button as ButtonElement } from "@unofficialbox/box-open-elements/button";
3
+ import * as i0 from "@angular/core";
4
+ /** Typed standalone Angular directive for `<box-button>`. */
5
+ export declare class Button {
6
+ readonly element: ButtonElement;
7
+ constructor(host: ElementRef<ButtonElement>);
8
+ set label(value: string | undefined);
9
+ set tone(value: string | undefined);
10
+ set size(value: string | undefined);
11
+ set disabled(value: boolean | undefined);
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<Button, never>;
13
+ static ɵdir: i0.ɵɵDirectiveDeclaration<Button, "box-button", never, { "label": { "alias": "label"; "required": false; }; "tone": { "alias": "tone"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
14
+ }
package/dist/button.js ADDED
@@ -0,0 +1,39 @@
1
+ import { Directive, Input } from "@angular/core";
2
+ import { Button as ButtonElement } from "@unofficialbox/box-open-elements/button";
3
+ import * as i0 from "@angular/core";
4
+ ButtonElement.register();
5
+ /** Typed standalone Angular directive for `<box-button>`. */
6
+ export class Button {
7
+ constructor(host) {
8
+ this.element = host.nativeElement;
9
+ }
10
+ set label(value) {
11
+ if (value !== undefined)
12
+ this.element.label = value;
13
+ }
14
+ set tone(value) {
15
+ if (value !== undefined)
16
+ this.element.tone = value;
17
+ }
18
+ set size(value) {
19
+ if (value !== undefined)
20
+ this.element.size = value;
21
+ }
22
+ set disabled(value) {
23
+ this.element.disabled = Boolean(value);
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Button, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
26
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.27", type: Button, isStandalone: true, selector: "box-button", inputs: { label: "label", tone: "tone", size: "size", disabled: "disabled" }, ngImport: i0 }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Button, decorators: [{
29
+ type: Directive,
30
+ args: [{ selector: "box-button", standalone: true }]
31
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{
32
+ type: Input
33
+ }], tone: [{
34
+ type: Input
35
+ }], size: [{
36
+ type: Input
37
+ }], disabled: [{
38
+ type: Input
39
+ }] } });
@@ -0,0 +1,26 @@
1
+ import { ElementRef, EventEmitter, OnDestroy } from "@angular/core";
2
+ import { Dialog as DialogElement } from "@unofficialbox/box-open-elements/dialog";
3
+ import * as i0 from "@angular/core";
4
+ export type DialogSize = "small" | "medium" | "large" | "fullscreen";
5
+ export type OpenChangedEvent = CustomEvent<{
6
+ open: boolean;
7
+ }>;
8
+ /** Typed standalone Angular directive for the controlled `<box-dialog>`. */
9
+ export declare class Dialog implements OnDestroy {
10
+ readonly element: DialogElement;
11
+ private readonly openChangedListener;
12
+ private readonly confirmListener;
13
+ private readonly cancelListener;
14
+ readonly openChanged: EventEmitter<OpenChangedEvent>;
15
+ readonly confirm: EventEmitter<CustomEvent<null>>;
16
+ readonly cancel: EventEmitter<CustomEvent<null>>;
17
+ constructor(host: ElementRef<DialogElement>);
18
+ set open(value: boolean | undefined);
19
+ set heading(value: string | undefined);
20
+ set description(value: string | undefined);
21
+ set confirmLabel(value: string | undefined);
22
+ set size(value: DialogSize | undefined);
23
+ ngOnDestroy(): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<Dialog, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<Dialog, "box-dialog", never, { "open": { "alias": "open"; "required": false; }; "heading": { "alias": "heading"; "required": false; }; "description": { "alias": "description"; "required": false; }; "confirmLabel": { "alias": "confirmLabel"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "openChanged": "open-changed"; "confirm": "confirm"; "cancel": "cancel"; }, never, never, true, never>;
26
+ }
package/dist/dialog.js ADDED
@@ -0,0 +1,72 @@
1
+ import { Directive, EventEmitter, Input, Output, } from "@angular/core";
2
+ import { Dialog as DialogElement } from "@unofficialbox/box-open-elements/dialog";
3
+ import * as i0 from "@angular/core";
4
+ DialogElement.register();
5
+ /** Typed standalone Angular directive for the controlled `<box-dialog>`. */
6
+ export class Dialog {
7
+ constructor(host) {
8
+ this.openChangedListener = (event) => {
9
+ this.openChanged.emit(event);
10
+ };
11
+ this.confirmListener = (event) => {
12
+ this.confirm.emit(event);
13
+ };
14
+ this.cancelListener = (event) => {
15
+ this.cancel.emit(event);
16
+ };
17
+ this.openChanged = new EventEmitter();
18
+ this.confirm = new EventEmitter();
19
+ this.cancel = new EventEmitter();
20
+ this.element = host.nativeElement;
21
+ this.element.addEventListener("open-changed", this.openChangedListener);
22
+ this.element.addEventListener("confirm", this.confirmListener);
23
+ this.element.addEventListener("cancel", this.cancelListener);
24
+ }
25
+ set open(value) {
26
+ this.element.open = Boolean(value);
27
+ }
28
+ set heading(value) {
29
+ if (value !== undefined)
30
+ this.element.heading = value;
31
+ }
32
+ set description(value) {
33
+ if (value !== undefined)
34
+ this.element.description = value;
35
+ }
36
+ set confirmLabel(value) {
37
+ if (value !== undefined)
38
+ this.element.confirmLabel = value;
39
+ }
40
+ set size(value) {
41
+ if (value !== undefined)
42
+ this.element.size = value;
43
+ }
44
+ ngOnDestroy() {
45
+ this.element.removeEventListener("open-changed", this.openChangedListener);
46
+ this.element.removeEventListener("confirm", this.confirmListener);
47
+ this.element.removeEventListener("cancel", this.cancelListener);
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Dialog, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
50
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.27", type: Dialog, isStandalone: true, selector: "box-dialog", inputs: { open: "open", heading: "heading", description: "description", confirmLabel: "confirmLabel", size: "size" }, outputs: { openChanged: "open-changed", confirm: "confirm", cancel: "cancel" }, ngImport: i0 }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Dialog, decorators: [{
53
+ type: Directive,
54
+ args: [{ selector: "box-dialog", standalone: true }]
55
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { openChanged: [{
56
+ type: Output,
57
+ args: ["open-changed"]
58
+ }], confirm: [{
59
+ type: Output
60
+ }], cancel: [{
61
+ type: Output
62
+ }], open: [{
63
+ type: Input
64
+ }], heading: [{
65
+ type: Input
66
+ }], description: [{
67
+ type: Input
68
+ }], confirmLabel: [{
69
+ type: Input
70
+ }], size: [{
71
+ type: Input
72
+ }] } });
@@ -0,0 +1,9 @@
1
+ import { DestroyRef, type Signal } from "@angular/core";
2
+ import { ExplorerSelectionController, type ExplorerSelectionState } from "@unofficialbox/box-open-elements/patterns/content-explorer/selection";
3
+ export { ExplorerSelectionController };
4
+ export type { ExplorerSelectionState };
5
+ /**
6
+ * Exposes the framework-neutral selection controller as an Angular signal.
7
+ * Call inside an injection context, or pass a DestroyRef explicitly in tests.
8
+ */
9
+ export declare const createExplorerSelectionSignal: (controller: ExplorerSelectionController, destroyRef?: DestroyRef) => Signal<Readonly<ExplorerSelectionState>>;
@@ -0,0 +1,20 @@
1
+ import { DestroyRef, inject, signal } from "@angular/core";
2
+ import { ExplorerSelectionController, } from "@unofficialbox/box-open-elements/patterns/content-explorer/selection";
3
+ // Re-exported so a host can construct the controller through this package and
4
+ // hand it straight to the adapter API. Classes with private fields are
5
+ // nominally typed, so a host that imports the class from a differently
6
+ // resolved copy of the core package gets an incompatible identity — one
7
+ // import path sidesteps that whole class of version-skew errors.
8
+ export { ExplorerSelectionController };
9
+ /**
10
+ * Exposes the framework-neutral selection controller as an Angular signal.
11
+ * Call inside an injection context, or pass a DestroyRef explicitly in tests.
12
+ */
13
+ export const createExplorerSelectionSignal = (controller, destroyRef = inject(DestroyRef)) => {
14
+ const state = signal(controller.getState(), ...(ngDevMode ? [{ debugName: "state" }] : []));
15
+ const unsubscribe = controller.subscribe("selectionChanged", () => {
16
+ state.set(controller.getState());
17
+ });
18
+ destroyRef.onDestroy(unsubscribe);
19
+ return state.asReadonly();
20
+ };
@@ -0,0 +1,6 @@
1
+ export { Button } from "./button.js";
2
+ export { Dialog, type DialogSize } from "./dialog.js";
3
+ export { createExplorerSelectionSignal } from "./explorer-selection.js";
4
+ export { Select, type SelectOption } from "./select.js";
5
+ export { TextField, type ValueChangedDetail } from "./text-field.js";
6
+ export { ExplorerSelectionController, type ExplorerSelectionState } from "./explorer-selection.js";
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { Button } from "./button.js";
2
+ export { Dialog } from "./dialog.js";
3
+ export { createExplorerSelectionSignal } from "./explorer-selection.js";
4
+ export { Select } from "./select.js";
5
+ export { TextField } from "./text-field.js";
6
+ export { ExplorerSelectionController } from "./explorer-selection.js";
@@ -0,0 +1,26 @@
1
+ import { ElementRef, EventEmitter, OnDestroy } from "@angular/core";
2
+ import { Select as SelectElement } from "@unofficialbox/box-open-elements/select";
3
+ import type { ValueChangedDetail } from "./text-field.js";
4
+ import * as i0 from "@angular/core";
5
+ export type SelectOption = {
6
+ label: string;
7
+ value: string;
8
+ };
9
+ export type SelectValueChangedEvent = CustomEvent<ValueChangedDetail>;
10
+ /** Typed standalone Angular directive for `<box-select>`. */
11
+ export declare class Select implements OnDestroy {
12
+ readonly element: SelectElement;
13
+ private readonly valueChangedListener;
14
+ readonly valueChanged: EventEmitter<SelectValueChangedEvent>;
15
+ constructor(host: ElementRef<SelectElement>);
16
+ set label(value: string | undefined);
17
+ set value(value: string | undefined);
18
+ set options(value: SelectOption[] | undefined);
19
+ set name(value: string | undefined);
20
+ set errorMessage(value: string | undefined);
21
+ set disabled(value: boolean | undefined);
22
+ set invalid(value: boolean | undefined);
23
+ ngOnDestroy(): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<Select, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<Select, "box-select", never, { "label": { "alias": "label"; "required": false; }; "value": { "alias": "value"; "required": false; }; "options": { "alias": "options"; "required": false; }; "name": { "alias": "name"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; }, { "valueChanged": "value-changed"; }, never, never, true, never>;
26
+ }
package/dist/select.js ADDED
@@ -0,0 +1,67 @@
1
+ import { Directive, EventEmitter, Input, Output, } from "@angular/core";
2
+ import { Select as SelectElement } from "@unofficialbox/box-open-elements/select";
3
+ import * as i0 from "@angular/core";
4
+ SelectElement.register();
5
+ /** Typed standalone Angular directive for `<box-select>`. */
6
+ export class Select {
7
+ constructor(host) {
8
+ this.valueChangedListener = (event) => {
9
+ this.valueChanged.emit(event);
10
+ };
11
+ this.valueChanged = new EventEmitter();
12
+ this.element = host.nativeElement;
13
+ this.element.addEventListener("value-changed", this.valueChangedListener);
14
+ }
15
+ set label(value) {
16
+ if (value !== undefined)
17
+ this.element.label = value;
18
+ }
19
+ set value(value) {
20
+ if (value !== undefined)
21
+ this.element.value = value;
22
+ }
23
+ set options(value) {
24
+ if (value !== undefined)
25
+ this.element.options = value;
26
+ }
27
+ set name(value) {
28
+ if (value !== undefined)
29
+ this.element.name = value;
30
+ }
31
+ set errorMessage(value) {
32
+ if (value !== undefined)
33
+ this.element.errorMessage = value;
34
+ }
35
+ set disabled(value) {
36
+ this.element.disabled = Boolean(value);
37
+ }
38
+ set invalid(value) {
39
+ this.element.invalid = Boolean(value);
40
+ }
41
+ ngOnDestroy() {
42
+ this.element.removeEventListener("value-changed", this.valueChangedListener);
43
+ }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Select, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
45
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.27", type: Select, isStandalone: true, selector: "box-select", inputs: { label: "label", value: "value", options: "options", name: "name", errorMessage: "errorMessage", disabled: "disabled", invalid: "invalid" }, outputs: { valueChanged: "value-changed" }, ngImport: i0 }); }
46
+ }
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Select, decorators: [{
48
+ type: Directive,
49
+ args: [{ selector: "box-select", standalone: true }]
50
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { valueChanged: [{
51
+ type: Output,
52
+ args: ["value-changed"]
53
+ }], label: [{
54
+ type: Input
55
+ }], value: [{
56
+ type: Input
57
+ }], options: [{
58
+ type: Input
59
+ }], name: [{
60
+ type: Input
61
+ }], errorMessage: [{
62
+ type: Input
63
+ }], disabled: [{
64
+ type: Input
65
+ }], invalid: [{
66
+ type: Input
67
+ }] } });
@@ -0,0 +1,24 @@
1
+ import { ElementRef, EventEmitter, OnDestroy } from "@angular/core";
2
+ import { TextField as TextFieldElement } from "@unofficialbox/box-open-elements/text-field";
3
+ import * as i0 from "@angular/core";
4
+ export type ValueChangedDetail = {
5
+ value: string;
6
+ };
7
+ export type ValueChangedEvent = CustomEvent<ValueChangedDetail>;
8
+ /** Typed standalone Angular directive for `<box-text-field>`. */
9
+ export declare class TextField implements OnDestroy {
10
+ readonly element: TextFieldElement;
11
+ private readonly valueChangedListener;
12
+ readonly valueChanged: EventEmitter<ValueChangedEvent>;
13
+ constructor(host: ElementRef<TextFieldElement>);
14
+ set label(value: string | undefined);
15
+ set value(value: string | undefined);
16
+ set placeholder(value: string | undefined);
17
+ set name(value: string | undefined);
18
+ set errorMessage(value: string | undefined);
19
+ set disabled(value: boolean | undefined);
20
+ set invalid(value: boolean | undefined);
21
+ ngOnDestroy(): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextField, never>;
23
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TextField, "box-text-field", never, { "label": { "alias": "label"; "required": false; }; "value": { "alias": "value"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; }, { "valueChanged": "value-changed"; }, never, never, true, never>;
24
+ }
@@ -0,0 +1,67 @@
1
+ import { Directive, EventEmitter, Input, Output, } from "@angular/core";
2
+ import { TextField as TextFieldElement } from "@unofficialbox/box-open-elements/text-field";
3
+ import * as i0 from "@angular/core";
4
+ TextFieldElement.register();
5
+ /** Typed standalone Angular directive for `<box-text-field>`. */
6
+ export class TextField {
7
+ constructor(host) {
8
+ this.valueChangedListener = (event) => {
9
+ this.valueChanged.emit(event);
10
+ };
11
+ this.valueChanged = new EventEmitter();
12
+ this.element = host.nativeElement;
13
+ this.element.addEventListener("value-changed", this.valueChangedListener);
14
+ }
15
+ set label(value) {
16
+ if (value !== undefined)
17
+ this.element.label = value;
18
+ }
19
+ set value(value) {
20
+ if (value !== undefined)
21
+ this.element.value = value;
22
+ }
23
+ set placeholder(value) {
24
+ if (value !== undefined)
25
+ this.element.placeholder = value;
26
+ }
27
+ set name(value) {
28
+ if (value !== undefined)
29
+ this.element.name = value;
30
+ }
31
+ set errorMessage(value) {
32
+ if (value !== undefined)
33
+ this.element.errorMessage = value;
34
+ }
35
+ set disabled(value) {
36
+ this.element.disabled = Boolean(value);
37
+ }
38
+ set invalid(value) {
39
+ this.element.invalid = Boolean(value);
40
+ }
41
+ ngOnDestroy() {
42
+ this.element.removeEventListener("value-changed", this.valueChangedListener);
43
+ }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: TextField, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
45
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.27", type: TextField, isStandalone: true, selector: "box-text-field", inputs: { label: "label", value: "value", placeholder: "placeholder", name: "name", errorMessage: "errorMessage", disabled: "disabled", invalid: "invalid" }, outputs: { valueChanged: "value-changed" }, ngImport: i0 }); }
46
+ }
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: TextField, decorators: [{
48
+ type: Directive,
49
+ args: [{ selector: "box-text-field", standalone: true }]
50
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { valueChanged: [{
51
+ type: Output,
52
+ args: ["value-changed"]
53
+ }], label: [{
54
+ type: Input
55
+ }], value: [{
56
+ type: Input
57
+ }], placeholder: [{
58
+ type: Input
59
+ }], name: [{
60
+ type: Input
61
+ }], errorMessage: [{
62
+ type: Input
63
+ }], disabled: [{
64
+ type: Input
65
+ }], invalid: [{
66
+ type: Input
67
+ }] } });
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@unofficialbox/box-open-elements-angular",
3
+ "version": "0.7.0",
4
+ "description": "Typed Angular adapters for box-open-elements Web Components.",
5
+ "license": "MIT",
6
+ "homepage": "https://unofficialbox.github.io/box-open-elements",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/unofficialbox/box-open-elements.git",
10
+ "directory": "packages/angular"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/unofficialbox/box-open-elements/issues"
14
+ },
15
+ "keywords": ["angular", "web-components", "design-system", "box"],
16
+ "type": "module",
17
+ "main": "dist/index.js",
18
+ "types": "dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js"
23
+ }
24
+ },
25
+ "files": ["dist"],
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "engines": {
30
+ "node": ">=20.9.0"
31
+ },
32
+ "peerDependencies": {
33
+ "@angular/core": ">=20.0.0 <21.0.0",
34
+ "@unofficialbox/box-open-elements": "^0.7.0"
35
+ },
36
+ "scripts": {
37
+ "build": "ngc -p tsconfig.build.json",
38
+ "prepublishOnly": "bun run build",
39
+ "typecheck": "ngc -p tsconfig.json --noEmit"
40
+ }
41
+ }