@ngxsmk/cdk 1.2.0 → 1.3.1

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/README.md CHANGED
@@ -1,13 +1,6 @@
1
1
  # @ngxsmk/cdk
2
2
 
3
- Low-level, framework-agnostic Angular behaviors used by NGXSMK components:
4
-
5
- - `ClickOutside` — detect clicks outside an element
6
- - `FocusTrap` — trap focus within a container
7
- - `ScrollLock` — lock/unlock page scroll
8
- - `LiveAnnouncer` — announce messages to assistive tech
9
- - `MediaQuery` — reactive media-query signals
10
- - `VisuallyHidden` — visually hide content while keeping it accessible
3
+ Low-level, zoneless-friendly Angular behaviors that power NGXSMK components. Each behavior is its own secondary entry point, so you only bundle what you import.
11
4
 
12
5
  Part of the [NGXSMK UI kit](https://github.com/NGXSMK/ngxsmk-ui-kit).
13
6
 
@@ -26,18 +19,68 @@ npm install @ngxsmk/cdk
26
19
 
27
20
  ## Usage
28
21
 
22
+ ### Click outside
23
+
24
+ Emits when a pointer press lands outside the host element.
25
+
26
+ ```html
27
+ <div class="menu" (ngxsmkClickOutside)="close()">…</div>
28
+ ```
29
+
29
30
  ```ts
30
- import { ClickOutside } from '@ngxsmk/cdk/click-outside';
31
+ import { NgxsmkClickOutside } from '@ngxsmk/cdk/click-outside';
31
32
  ```
32
33
 
33
- Prefer deep entry-point imports (e.g. `@ngxsmk/cdk/click-outside`) so the
34
- bundler tree-shakes unused behaviors.
34
+ ### Focus trap
35
+
36
+ Traps Tab focus inside a container. `ngxsmkFocusTrapAutoCapture` moves focus in on init and restores the previously focused element on destroy.
35
37
 
36
- ## Building & publishing
38
+ ```html
39
+ <div ngxsmkFocusTrap ngxsmkFocusTrapAutoCapture>…</div>
40
+ ```
37
41
 
38
- Built with the rest of the workspace via `npm run build:libs`. The published
39
- artifact lives in `dist/ngxsmk/cdk`. To publish all packages:
42
+ ### Scroll lock
40
43
 
41
- ```bash
42
- npm run publish
44
+ Reference-counted body scroll lock for dialogs, drawers, and sheets. Compensates for scrollbar width to avoid layout shift.
45
+
46
+ ```ts
47
+ import { NgxsmkScrollLock } from '@ngxsmk/cdk/scroll-lock';
48
+
49
+ constructor(private lock: NgxsmkScrollLock) {}
50
+ open() { this.lock.lock(); }
51
+ close() { this.lock.unlock(); }
52
+ ```
53
+
54
+ ### Live announcer
55
+
56
+ Announces messages to assistive technology via a visually hidden `aria-live` region.
57
+
58
+ ```ts
59
+ import { NgxsmkLiveAnnouncer } from '@ngxsmk/cdk/live-announcer';
60
+
61
+ this.announcer.announce('Item deleted', 'polite');
62
+ ```
63
+
64
+ ### Media query
65
+
66
+ Reactive, signal-based media-query helper (call in an injection context).
67
+
68
+ ```ts
69
+ import { injectMediaQuery } from '@ngxsmk/cdk/media-query';
70
+
71
+ private readonly isMobile = injectMediaQuery('(max-width: 767px)');
43
72
  ```
73
+
74
+ ### Visually hidden
75
+
76
+ Hides content visually while keeping it available to screen readers.
77
+
78
+ ```html
79
+ <span ngxsmkVisuallyHidden>Opens in a new window</span>
80
+ ```
81
+
82
+ ## Entry points
83
+
84
+ `click-outside`, `focusable`, `focus-trap`, `live-announcer`, `media-query`, `scroll-lock`, `visually-hidden`, `intersection-observer`, `resize-observer`, `autofocus`, `testing`.
85
+
86
+ Prefer deep imports (e.g. `@ngxsmk/cdk/click-outside`) so the bundler tree-shakes unused behaviors.
@@ -11,5 +11,8 @@ export * from '@ngxsmk/cdk/visually-hidden';
11
11
  export * from '@ngxsmk/cdk/intersection-observer';
12
12
  export * from '@ngxsmk/cdk/resize-observer';
13
13
  export * from '@ngxsmk/cdk/autofocus';
14
- export * from '@ngxsmk/cdk/testing';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAbmd4c21rL2Nka1xuICovXG5cbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL2NsaWNrLW91dHNpZGUnO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvZm9jdXNhYmxlJztcbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL2ZvY3VzLXRyYXAnO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvbGl2ZS1hbm5vdW5jZXInO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvbWVkaWEtcXVlcnknO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvc2Nyb2xsLWxvY2snO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvdmlzdWFsbHktaGlkZGVuJztcbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL2ludGVyc2VjdGlvbi1vYnNlcnZlcic7XG5leHBvcnQgKiBmcm9tICdAbmd4c21rL2Nkay9yZXNpemUtb2JzZXJ2ZXInO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvYXV0b2ZvY3VzJztcbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL3Rlc3RpbmcnO1xuIl19
14
+ // NOTE: '@ngxsmk/cdk/testing' is intentionally NOT re-exported here. It pulls in
15
+ // axe-core (a CommonJS dependency) which would otherwise leak into every runtime
16
+ // bundle that imports the main '@ngxsmk/cdk' barrel. Import test helpers directly
17
+ // from the dedicated entry point instead: `import { ... } from '@ngxsmk/cdk/testing'`.
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxpRkFBaUY7QUFDakYsaUZBQWlGO0FBQ2pGLGtGQUFrRjtBQUNsRix1RkFBdUYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBuZ3hzbWsvY2RrXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvY2xpY2stb3V0c2lkZSc7XG5leHBvcnQgKiBmcm9tICdAbmd4c21rL2Nkay9mb2N1c2FibGUnO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvZm9jdXMtdHJhcCc7XG5leHBvcnQgKiBmcm9tICdAbmd4c21rL2Nkay9saXZlLWFubm91bmNlcic7XG5leHBvcnQgKiBmcm9tICdAbmd4c21rL2Nkay9tZWRpYS1xdWVyeSc7XG5leHBvcnQgKiBmcm9tICdAbmd4c21rL2Nkay9zY3JvbGwtbG9jayc7XG5leHBvcnQgKiBmcm9tICdAbmd4c21rL2Nkay92aXN1YWxseS1oaWRkZW4nO1xuZXhwb3J0ICogZnJvbSAnQG5neHNtay9jZGsvaW50ZXJzZWN0aW9uLW9ic2VydmVyJztcbmV4cG9ydCAqIGZyb20gJ0BuZ3hzbWsvY2RrL3Jlc2l6ZS1vYnNlcnZlcic7XG5leHBvcnQgKiBmcm9tICdAbmd4c21rL2Nkay9hdXRvZm9jdXMnO1xuXG4vLyBOT1RFOiAnQG5neHNtay9jZGsvdGVzdGluZycgaXMgaW50ZW50aW9uYWxseSBOT1QgcmUtZXhwb3J0ZWQgaGVyZS4gSXQgcHVsbHMgaW5cbi8vIGF4ZS1jb3JlIChhIENvbW1vbkpTIGRlcGVuZGVuY3kpIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBsZWFrIGludG8gZXZlcnkgcnVudGltZVxuLy8gYnVuZGxlIHRoYXQgaW1wb3J0cyB0aGUgbWFpbiAnQG5neHNtay9jZGsnIGJhcnJlbC4gSW1wb3J0IHRlc3QgaGVscGVycyBkaXJlY3RseVxuLy8gZnJvbSB0aGUgZGVkaWNhdGVkIGVudHJ5IHBvaW50IGluc3RlYWQ6IGBpbXBvcnQgeyAuLi4gfSBmcm9tICdAbmd4c21rL2Nkay90ZXN0aW5nJ2AuXG4iXX0=
@@ -8,11 +8,14 @@ export * from '@ngxsmk/cdk/visually-hidden';
8
8
  export * from '@ngxsmk/cdk/intersection-observer';
9
9
  export * from '@ngxsmk/cdk/resize-observer';
10
10
  export * from '@ngxsmk/cdk/autofocus';
11
- export * from '@ngxsmk/cdk/testing';
12
11
 
13
12
  /*
14
13
  * Public API Surface of @ngxsmk/cdk
15
14
  */
15
+ // NOTE: '@ngxsmk/cdk/testing' is intentionally NOT re-exported here. It pulls in
16
+ // axe-core (a CommonJS dependency) which would otherwise leak into every runtime
17
+ // bundle that imports the main '@ngxsmk/cdk' barrel. Import test helpers directly
18
+ // from the dedicated entry point instead: `import { ... } from '@ngxsmk/cdk/testing'`.
16
19
 
17
20
  /**
18
21
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ngxsmk-cdk.mjs","sources":["../../../../packages/cdk/public-api.ts","../../../../packages/cdk/ngxsmk-cdk.ts"],"sourcesContent":["/*\n * Public API Surface of @ngxsmk/cdk\n */\n\nexport * from '@ngxsmk/cdk/click-outside';\nexport * from '@ngxsmk/cdk/focusable';\nexport * from '@ngxsmk/cdk/focus-trap';\nexport * from '@ngxsmk/cdk/live-announcer';\nexport * from '@ngxsmk/cdk/media-query';\nexport * from '@ngxsmk/cdk/scroll-lock';\nexport * from '@ngxsmk/cdk/visually-hidden';\nexport * from '@ngxsmk/cdk/intersection-observer';\nexport * from '@ngxsmk/cdk/resize-observer';\nexport * from '@ngxsmk/cdk/autofocus';\nexport * from '@ngxsmk/cdk/testing';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;AAEG;;ACFH;;AAEG"}
1
+ {"version":3,"file":"ngxsmk-cdk.mjs","sources":["../../../../packages/cdk/public-api.ts","../../../../packages/cdk/ngxsmk-cdk.ts"],"sourcesContent":["/*\n * Public API Surface of @ngxsmk/cdk\n */\n\nexport * from '@ngxsmk/cdk/click-outside';\nexport * from '@ngxsmk/cdk/focusable';\nexport * from '@ngxsmk/cdk/focus-trap';\nexport * from '@ngxsmk/cdk/live-announcer';\nexport * from '@ngxsmk/cdk/media-query';\nexport * from '@ngxsmk/cdk/scroll-lock';\nexport * from '@ngxsmk/cdk/visually-hidden';\nexport * from '@ngxsmk/cdk/intersection-observer';\nexport * from '@ngxsmk/cdk/resize-observer';\nexport * from '@ngxsmk/cdk/autofocus';\n\n// NOTE: '@ngxsmk/cdk/testing' is intentionally NOT re-exported here. It pulls in\n// axe-core (a CommonJS dependency) which would otherwise leak into every runtime\n// bundle that imports the main '@ngxsmk/cdk' barrel. Import test helpers directly\n// from the dedicated entry point instead: `import { ... } from '@ngxsmk/cdk/testing'`.\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;AAAA;;AAEG;AAaH;AACA;AACA;AACA;;AClBA;;AAEG"}
package/package.json CHANGED
@@ -1,6 +1,16 @@
1
1
  {
2
2
  "name": "@ngxsmk/cdk",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
+ "description": "Low-level Angular directives and utilities (click-outside, focus-trap, media-query, scroll-lock) for @ngxsmk.",
5
+ "keywords": [
6
+ "angular",
7
+ "angular-cdk",
8
+ "cdk",
9
+ "directives",
10
+ "utilities",
11
+ "signals",
12
+ "helpers"
13
+ ],
4
14
  "license": "MIT",
5
15
  "peerDependencies": {
6
16
  "@angular/common": ">=17.3.0",
@@ -49,6 +59,12 @@
49
59
  "esm": "./esm2022/focusable/ngxsmk-cdk-focusable.mjs",
50
60
  "default": "./fesm2022/ngxsmk-cdk-focusable.mjs"
51
61
  },
62
+ "./intersection-observer": {
63
+ "types": "./intersection-observer/index.d.ts",
64
+ "esm2022": "./esm2022/intersection-observer/ngxsmk-cdk-intersection-observer.mjs",
65
+ "esm": "./esm2022/intersection-observer/ngxsmk-cdk-intersection-observer.mjs",
66
+ "default": "./fesm2022/ngxsmk-cdk-intersection-observer.mjs"
67
+ },
52
68
  "./live-announcer": {
53
69
  "types": "./live-announcer/index.d.ts",
54
70
  "esm2022": "./esm2022/live-announcer/ngxsmk-cdk-live-announcer.mjs",
@@ -61,12 +77,6 @@
61
77
  "esm": "./esm2022/media-query/ngxsmk-cdk-media-query.mjs",
62
78
  "default": "./fesm2022/ngxsmk-cdk-media-query.mjs"
63
79
  },
64
- "./intersection-observer": {
65
- "types": "./intersection-observer/index.d.ts",
66
- "esm2022": "./esm2022/intersection-observer/ngxsmk-cdk-intersection-observer.mjs",
67
- "esm": "./esm2022/intersection-observer/ngxsmk-cdk-intersection-observer.mjs",
68
- "default": "./fesm2022/ngxsmk-cdk-intersection-observer.mjs"
69
- },
70
80
  "./resize-observer": {
71
81
  "types": "./resize-observer/index.d.ts",
72
82
  "esm2022": "./esm2022/resize-observer/ngxsmk-cdk-resize-observer.mjs",
package/public-api.d.ts CHANGED
@@ -8,5 +8,4 @@ export * from '@ngxsmk/cdk/visually-hidden';
8
8
  export * from '@ngxsmk/cdk/intersection-observer';
9
9
  export * from '@ngxsmk/cdk/resize-observer';
10
10
  export * from '@ngxsmk/cdk/autofocus';
11
- export * from '@ngxsmk/cdk/testing';
12
11
  //# sourceMappingURL=public-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../../packages/cdk/public-api.ts"],"names":[],"mappings":"AAIA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../../packages/cdk/public-api.ts"],"names":[],"mappings":"AAIA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC"}