@ng-atomic/common 19.51.0 → 19.80.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.
Files changed (72) hide show
  1. package/fesm2022/ng-atomic-common-directives-active-control.mjs +51 -60
  2. package/fesm2022/ng-atomic-common-directives-active-control.mjs.map +1 -1
  3. package/fesm2022/ng-atomic-common-directives-ios-safari-scroll-buggyfill.mjs +0 -3
  4. package/fesm2022/ng-atomic-common-directives-ios-safari-scroll-buggyfill.mjs.map +1 -1
  5. package/fesm2022/ng-atomic-common-directives-prevent-browser-zoom.mjs +0 -3
  6. package/fesm2022/ng-atomic-common-directives-prevent-browser-zoom.mjs.map +1 -1
  7. package/fesm2022/ng-atomic-common-interceptors-authorization.mjs +0 -1
  8. package/fesm2022/ng-atomic-common-interceptors-authorization.mjs.map +1 -1
  9. package/fesm2022/ng-atomic-common-pipes-columns.mjs +0 -1
  10. package/fesm2022/ng-atomic-common-pipes-columns.mjs.map +1 -1
  11. package/fesm2022/ng-atomic-common-pipes-domain.mjs +0 -9
  12. package/fesm2022/ng-atomic-common-pipes-domain.mjs.map +1 -1
  13. package/fesm2022/ng-atomic-common-pipes-smart-field.mjs +0 -3
  14. package/fesm2022/ng-atomic-common-pipes-smart-field.mjs.map +1 -1
  15. package/fesm2022/ng-atomic-common-services-app.mjs +1 -3
  16. package/fesm2022/ng-atomic-common-services-app.mjs.map +1 -1
  17. package/fesm2022/ng-atomic-common-services-auth.mjs +14 -25
  18. package/fesm2022/ng-atomic-common-services-auth.mjs.map +1 -1
  19. package/fesm2022/ng-atomic-common-services-editing.mjs +0 -16
  20. package/fesm2022/ng-atomic-common-services-editing.mjs.map +1 -1
  21. package/fesm2022/ng-atomic-common-services-form-_index.mjs.map +1 -1
  22. package/fesm2022/ng-atomic-common-services-form-json-schema.mjs +1 -25
  23. package/fesm2022/ng-atomic-common-services-form-json-schema.mjs.map +1 -1
  24. package/fesm2022/ng-atomic-common-services-form.mjs +0 -5
  25. package/fesm2022/ng-atomic-common-services-form.mjs.map +1 -1
  26. package/fesm2022/ng-atomic-common-services-query-resolver.mjs +0 -2
  27. package/fesm2022/ng-atomic-common-services-query-resolver.mjs.map +1 -1
  28. package/fesm2022/ng-atomic-common-services-sheets-actions.mjs +0 -1
  29. package/fesm2022/ng-atomic-common-services-sheets-actions.mjs.map +1 -1
  30. package/fesm2022/ng-atomic-common-services-side-app.mjs +0 -1
  31. package/fesm2022/ng-atomic-common-services-side-app.mjs.map +1 -1
  32. package/fesm2022/ng-atomic-common-services-side-nav-mode.mjs +0 -1
  33. package/fesm2022/ng-atomic-common-services-side-nav-mode.mjs.map +1 -1
  34. package/fesm2022/ng-atomic-common-services-spreadsheet.mjs +2 -39
  35. package/fesm2022/ng-atomic-common-services-spreadsheet.mjs.map +1 -1
  36. package/fesm2022/ng-atomic-common-services-ui.mjs +0 -2
  37. package/fesm2022/ng-atomic-common-services-ui.mjs.map +1 -1
  38. package/fesm2022/ng-atomic-common-stores-entities.mjs +0 -18
  39. package/fesm2022/ng-atomic-common-stores-entities.mjs.map +1 -1
  40. package/fesm2022/ng-atomic-common-utils.mjs +2 -34
  41. package/fesm2022/ng-atomic-common-utils.mjs.map +1 -1
  42. package/fesm2022/ng-atomic-common.mjs +56 -121
  43. package/fesm2022/ng-atomic-common.mjs.map +1 -1
  44. package/package.json +3 -3
  45. package/types/ng-atomic-common-directives-active-control.d.ts +2 -27
  46. package/types/ng-atomic-common-directives-active-control.d.ts.map +1 -1
  47. package/types/ng-atomic-common-directives-prevent-browser-zoom.d.ts +0 -3
  48. package/types/ng-atomic-common-directives-prevent-browser-zoom.d.ts.map +1 -1
  49. package/types/ng-atomic-common-interceptors-authorization.d.ts +0 -1
  50. package/types/ng-atomic-common-interceptors-authorization.d.ts.map +1 -1
  51. package/types/ng-atomic-common-pipes-columns.d.ts +0 -1
  52. package/types/ng-atomic-common-pipes-columns.d.ts.map +1 -1
  53. package/types/ng-atomic-common-pipes-domain.d.ts +0 -9
  54. package/types/ng-atomic-common-pipes-domain.d.ts.map +1 -1
  55. package/types/ng-atomic-common-pipes-smart-field.d.ts +0 -3
  56. package/types/ng-atomic-common-pipes-smart-field.d.ts.map +1 -1
  57. package/types/ng-atomic-common-services-auth.d.ts +4 -2
  58. package/types/ng-atomic-common-services-auth.d.ts.map +1 -1
  59. package/types/ng-atomic-common-services-editing.d.ts +0 -16
  60. package/types/ng-atomic-common-services-editing.d.ts.map +1 -1
  61. package/types/ng-atomic-common-services-form.d.ts +0 -5
  62. package/types/ng-atomic-common-services-form.d.ts.map +1 -1
  63. package/types/ng-atomic-common-services-side-nav-mode.d.ts +0 -1
  64. package/types/ng-atomic-common-services-side-nav-mode.d.ts.map +1 -1
  65. package/types/ng-atomic-common-services-spreadsheet.d.ts +0 -4
  66. package/types/ng-atomic-common-services-spreadsheet.d.ts.map +1 -1
  67. package/types/ng-atomic-common-stores-entities.d.ts +0 -3
  68. package/types/ng-atomic-common-stores-entities.d.ts.map +1 -1
  69. package/types/ng-atomic-common-utils.d.ts +0 -24
  70. package/types/ng-atomic-common-utils.d.ts.map +1 -1
  71. package/types/ng-atomic-common.d.ts +2 -77
  72. package/types/ng-atomic-common.d.ts.map +1 -1
@@ -35,23 +35,12 @@ function provideNgAtomicCommon() {
35
35
  return importProvidersFrom(NgAtomicCommonModule.forRoot());
36
36
  }
37
37
 
38
- /**
39
- * EditingStateManager Service
40
- *
41
- * Manages global editing state for preventing data updates during cell editing.
42
- * Uses Angular Signals for reactive state management.
43
- */
44
38
  class EditingStateManager {
45
39
  constructor() {
46
40
  this.editingCells = signal([], ...(ngDevMode ? [{ debugName: "editingCells" }] : []));
47
41
  this.isEditing = computed(() => this.editingCells().length > 0, ...(ngDevMode ? [{ debugName: "isEditing" }] : []));
48
42
  this.isEditing$ = toObservable(this.isEditing);
49
43
  }
50
- /**
51
- * Start editing a cell
52
- * @param rowId Row identifier
53
- * @param columnId Column identifier
54
- */
55
44
  startEditing(rowId, columnId) {
56
45
  const cellKey = `${rowId}-${columnId}`;
57
46
  this.editingCells.update(cells => {
@@ -60,11 +49,6 @@ class EditingStateManager {
60
49
  return [...newCells];
61
50
  });
62
51
  }
63
- /**
64
- * Stop editing a cell
65
- * @param rowId Row identifier
66
- * @param columnId Column identifier
67
- */
68
52
  stopEditing(rowId, columnId) {
69
53
  const cellKey = `${rowId}-${columnId}`;
70
54
  this.editingCells.update(cells => {
@@ -81,55 +65,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
81
65
  args: [{ providedIn: 'root' }]
82
66
  }] });
83
67
 
84
- /**
85
- * Custom RxJS operator that pauses data flow when editing is active.
86
- *
87
- * When editing starts, incoming values are buffered.
88
- * When editing ends, the latest buffered value is emitted.
89
- *
90
- * @param editingStateManager The EditingStateManager service instance
91
- * @returns An operator function that can be used in RxJS pipe
92
- *
93
- * @example
94
- * ```typescript
95
- * dataStream$.pipe(
96
- * pauseWhenEditing(this.editingStateManager),
97
- * // ... other operators
98
- * )
99
- * ```
100
- */
101
68
  function pauseWhenEditing(editingStateManager) {
102
69
  return (source) => {
103
70
  return new Observable(observer => {
104
71
  let pendingValues = [];
105
72
  let isEditing = false;
106
- // Subscribe to editing state changes
107
73
  const editingSub = editingStateManager.isEditing$.subscribe(editing => {
108
74
  const wasEditing = isEditing;
109
75
  isEditing = editing;
110
76
  console.debug('[pauseWhenEditing] Editing state changed:', { wasEditing, isEditing, pendingCount: pendingValues.length });
111
- // When editing ends, emit the latest pending value
112
77
  if (wasEditing && !isEditing && pendingValues.length > 0) {
113
- // Emit only the latest value (discard older updates)
114
78
  const latestValue = pendingValues[pendingValues.length - 1];
115
79
  pendingValues = [];
116
80
  console.debug('[pauseWhenEditing] Emitting pending value after edit end');
117
81
  observer.next(latestValue);
118
82
  }
119
83
  });
120
- // Subscribe to the source data stream
121
84
  const sourceSub = source.subscribe({
122
85
  next: value => {
123
86
  if (!isEditing) {
124
- // Pass through immediately when not editing
125
87
  console.debug('[pauseWhenEditing] Passing through value (not editing)');
126
88
  observer.next(value);
127
89
  }
90
+ else {
91
+ pendingValues.push(value);
92
+ console.debug('[pauseWhenEditing] Buffering value (editing)', { pendingCount: pendingValues.length });
93
+ }
128
94
  },
129
95
  error: err => observer.error(err),
130
96
  complete: () => observer.complete()
131
97
  });
132
- // Cleanup subscriptions
133
98
  return () => {
134
99
  editingSub.unsubscribe();
135
100
  sourceSub.unsubscribe();
@@ -137,39 +102,19 @@ function pauseWhenEditing(editingStateManager) {
137
102
  });
138
103
  };
139
104
  }
140
- /**
141
- * Alternative operator that buffers ALL updates during editing.
142
- *
143
- * When editing ends, all buffered values are emitted in sequence.
144
- * This preserves the complete update history.
145
- *
146
- * @param editingStateManager The EditingStateManager service instance
147
- * @returns An operator function that can be used in RxJS pipe
148
- *
149
- * @example
150
- * ```typescript
151
- * dataStream$.pipe(
152
- * bufferWhenEditing(this.editingStateManager),
153
- * // ... other operators
154
- * )
155
- * ```
156
- */
157
105
  function bufferWhenEditing(editingStateManager) {
158
106
  return (source) => {
159
107
  return new Observable(observer => {
160
108
  const buffer = [];
161
109
  let isEditing = false;
162
- // Subscribe to editing state changes
163
110
  const editingSub = editingStateManager.isEditing$.subscribe(editing => {
164
111
  const wasEditing = isEditing;
165
112
  isEditing = editing;
166
- // When editing ends, emit all buffered values
167
113
  if (wasEditing && !isEditing && buffer.length > 0) {
168
114
  buffer.forEach(value => observer.next(value));
169
- buffer.length = 0; // Clear the buffer
115
+ buffer.length = 0;
170
116
  }
171
117
  });
172
- // Subscribe to the source data stream
173
118
  const sourceSub = source.subscribe({
174
119
  next: value => {
175
120
  if (!isEditing) {
@@ -182,7 +127,6 @@ function bufferWhenEditing(editingStateManager) {
182
127
  error: err => observer.error(err),
183
128
  complete: () => observer.complete()
184
129
  });
185
- // Cleanup subscriptions
186
130
  return () => {
187
131
  editingSub.unsubscribe();
188
132
  sourceSub.unsubscribe();
@@ -205,16 +149,55 @@ class ActiveControlEventHandlers {
205
149
  return this.cleanupFunctions;
206
150
  }
207
151
  setupClickHandlers() {
208
- // ホスト要素クリック
152
+ const CLICK_MOVE_THRESHOLD_PX = 5;
153
+ let justActivated = false;
154
+ let gestureStart = null;
155
+ const gestureStartHandler = (e) => {
156
+ justActivated = false;
157
+ gestureStart = this.hostElement.contains(e.target)
158
+ ? { x: e.screenX, y: e.screenY }
159
+ : null;
160
+ };
161
+ this.addEventListener(window, 'mousedown', gestureStartHandler, { capture: true });
209
162
  const mousedownHandler = (e) => {
210
- this.toggleActive();
211
- // React Flowなどのドラッグと共存するため、オプションでstopPropagationを無効化
163
+ if (!this.isActive()) {
164
+ this.setActive(true);
165
+ justActivated = true;
166
+ if (this.options.focusTargetSelector) {
167
+ const target = this.hostElement.querySelector(this.options.focusTargetSelector);
168
+ if (target) {
169
+ e.preventDefault();
170
+ target.focus();
171
+ }
172
+ }
173
+ }
212
174
  if (!this.options.disableStopPropagation) {
213
175
  e.stopPropagation();
214
176
  }
215
177
  };
216
178
  this.addEventListener(this.hostElement, 'mousedown', mousedownHandler);
217
- // 外部クリック
179
+ const mouseupHandler = (e) => {
180
+ const start = gestureStart;
181
+ gestureStart = null;
182
+ if (e.button !== 0) {
183
+ return;
184
+ }
185
+ if (justActivated) {
186
+ justActivated = false;
187
+ return;
188
+ }
189
+ if (!start) {
190
+ return;
191
+ }
192
+ const moved = Math.hypot(e.screenX - start.x, e.screenY - start.y) > CLICK_MOVE_THRESHOLD_PX;
193
+ if (moved) {
194
+ return;
195
+ }
196
+ if (this.isActive()) {
197
+ this.setActive(false);
198
+ }
199
+ };
200
+ this.addEventListener(window, 'mouseup', mouseupHandler, { capture: true });
218
201
  const documentClickListener = (e) => {
219
202
  if (!this.hostElement.contains(e.target) && this.isActive()) {
220
203
  this.setActive(false);
@@ -224,18 +207,13 @@ class ActiveControlEventHandlers {
224
207
  this.cleanupFunctions.push(() => document.removeEventListener('mousedown', documentClickListener, { capture: true }));
225
208
  }
226
209
  setupPreventionHandlers() {
227
- // ホイールイベント(スクロール対象要素以外でのみブロック)
228
- // ただし、ctrlKey + wheel(トラックパッドのピンチズーム)は常にブロック
229
- // 非アクティブ時はScrollControlがスクロール位置をリセットするため、ここでは処理しない
230
210
  this.addEventListener(this.hostElement, 'wheel', (e) => {
231
211
  if (this.isActive()) {
232
- // ctrlKey + wheel = トラックパッドのピンチズーム → 常にブロック
233
212
  if (e.ctrlKey) {
234
213
  e.preventDefault();
235
214
  e.stopPropagation();
236
215
  return;
237
216
  }
238
- // 通常のホイールスクロール: スクロール対象要素からのイベントは許可
239
217
  const target = e.target;
240
218
  const isScrollableElement = this.options.scrollSelectors?.some(selector => target.closest(selector) !== null);
241
219
  if (!isScrollableElement) {
@@ -244,25 +222,20 @@ class ActiveControlEventHandlers {
244
222
  }
245
223
  }
246
224
  }, { passive: false });
247
- // タッチイベント(ホスト要素レベル)
248
225
  const touchHandler = (e) => {
249
226
  if (!this.isActive())
250
227
  return;
251
- // スクロール対象要素からのイベントは許可
252
228
  const target = e.target;
253
229
  const isScrollableElement = this.options.scrollSelectors?.some(selector => target.closest(selector) !== null);
254
230
  if (!isScrollableElement) {
255
231
  if (e.touches.length > 1) {
256
- // ピンチズームなどマルチタッチ操作をブロック
257
232
  e.preventDefault();
258
233
  e.stopPropagation();
259
234
  }
260
- // シングルタッチはデフォルト動作を許可(スクロールなど)
261
235
  }
262
236
  };
263
237
  this.addEventListener(this.hostElement, 'touchstart', touchHandler, { passive: false });
264
238
  this.addEventListener(this.hostElement, 'touchmove', touchHandler, { passive: false });
265
- // ジェスチャーイベント(ホスト要素レベル)
266
239
  const gestureHandler = (e) => {
267
240
  if (this.isActive()) {
268
241
  e.preventDefault();
@@ -272,16 +245,9 @@ class ActiveControlEventHandlers {
272
245
  ['gesturestart', 'gesturechange', 'gestureend'].forEach(eventName => {
273
246
  this.addEventListener(this.hostElement, eventName, gestureHandler, { passive: false });
274
247
  });
275
- // Document-level capture phaseハンドラ
276
- // ブラウザのピンチズームがデフォルト動作を行う前にキャッチする
277
248
  this.setupDocumentLevelPinchZoomPrevention();
278
249
  }
279
- /**
280
- * Document-levelでcapture phaseを使ってピンチズームを防止
281
- * ホスト要素内で発生したマルチタッチ/ジェスチャーイベントのみをブロック
282
- */
283
250
  setupDocumentLevelPinchZoomPrevention() {
284
- // タッチイベント(capture phase)
285
251
  const documentTouchHandler = (e) => {
286
252
  if (!this.isActive())
287
253
  return;
@@ -297,7 +263,6 @@ class ActiveControlEventHandlers {
297
263
  document.removeEventListener('touchstart', documentTouchHandler, { capture: true });
298
264
  document.removeEventListener('touchmove', documentTouchHandler, { capture: true });
299
265
  });
300
- // Safari gestureイベント(capture phase)
301
266
  const documentGestureHandler = (e) => {
302
267
  if (!this.isActive())
303
268
  return;
@@ -333,20 +298,16 @@ class ScrollControl {
333
298
  }
334
299
  setup() {
335
300
  const cleanups = [];
336
- // アクティブ状態の監視
337
301
  const checkActiveState = () => {
338
302
  const isActiveNow = this.isActive();
339
303
  if (!this.options.disableScrollLock) {
340
304
  if (!isActiveNow && this.wasActive) {
341
- // アクティブ → 非アクティブ: 現在位置をロック
342
305
  this.lockedScrollTop = this.scrollElement.scrollTop;
343
306
  }
344
307
  else if (!isActiveNow) {
345
- // 継続して非アクティブ: ロック位置を維持
346
308
  this.scrollElement.scrollTop = this.lockedScrollTop;
347
309
  }
348
310
  }
349
- // アクティブ時 or disableScrollLock時: 何もしない(自由スクロール)
350
311
  this.wasActive = isActiveNow;
351
312
  this.rafId = requestAnimationFrame(checkActiveState);
352
313
  };
@@ -356,7 +317,6 @@ class ScrollControl {
356
317
  cancelAnimationFrame(this.rafId);
357
318
  }
358
319
  });
359
- // スクロールイベント監視
360
320
  const scrollHandler = () => {
361
321
  if (!this.options.disableScrollLock && !this.isActive()) {
362
322
  this.scrollElement.scrollTop = this.lockedScrollTop;
@@ -368,53 +328,26 @@ class ScrollControl {
368
328
  }
369
329
  }
370
330
 
371
- /**
372
- * アクティブ状態を管理するディレクティブ
373
- *
374
- * クリックでアクティブ化、外部クリックで非アクティブ化し、
375
- * スクロール位置の固定やイベント伝播の制御を行います。
376
- *
377
- * @example
378
- * ```html
379
- * <!-- 単一セレクタ -->
380
- * <div appActiveControl
381
- * [scrollSelector]="'.xterm-viewport'"
382
- * (activeChange)="onActiveChange($event)">
383
- * <!-- content -->
384
- * </div>
385
- *
386
- * <!-- 複数セレクタ -->
387
- * <div appActiveControl
388
- * [scrollSelectors]="['.xterm-viewport', '.qtp-content']"
389
- * (activeChange)="onActiveChange($event)">
390
- * <!-- content -->
391
- * </div>
392
- * ```
393
- */
394
331
  class ActiveControlDirective {
395
332
  constructor() {
396
333
  this.el = inject(ElementRef);
397
334
  this.scrollSelector = input(...(ngDevMode ? [undefined, { debugName: "scrollSelector" }] : []));
398
335
  this.scrollSelectors = input(...(ngDevMode ? [undefined, { debugName: "scrollSelectors" }] : []));
399
- /** mousedownでstopPropagationを呼ばない(React Flowなどのドラッグと共存するため) */
400
336
  this.disableStopPropagation = input(false, ...(ngDevMode ? [{ debugName: "disableStopPropagation" }] : []));
401
- /** スクロール位置のロックを無効化する(常にスクロール可能にする) */
402
337
  this.disableScrollLock = input(false, ...(ngDevMode ? [{ debugName: "disableScrollLock" }] : []));
403
- /** nodragクラスを付与しない(React Flowのノードでドラッグを有効化するため) */
404
338
  this.disableNodrag = input(false, ...(ngDevMode ? [{ debugName: "disableNodrag" }] : []));
339
+ this.focusTargetSelector = input(...(ngDevMode ? [undefined, { debugName: "focusTargetSelector" }] : []));
405
340
  this.activeChange = output();
406
341
  this.isActive = signal(false, ...(ngDevMode ? [{ debugName: "isActive" }] : []));
407
342
  this.eventCleanupFunctions = [];
408
343
  this.scrollCleanupFunctions = [];
409
344
  this.eventHandlersInitialized = false;
410
- // イベントハンドラーの初期化(一度だけ)
411
345
  effect(() => {
412
346
  if (!this.eventHandlersInitialized) {
413
347
  setTimeout(() => this.initializeEventHandlers(), 100);
414
348
  this.eventHandlersInitialized = true;
415
349
  }
416
350
  }, { allowSignalWrites: true });
417
- // スクロール制御の初期化(セレクタが変わるたびに再設定)
418
351
  effect(() => {
419
352
  const selectors = this.getScrollSelectors();
420
353
  setTimeout(() => this.setupScrollControls(selectors), 150);
@@ -427,17 +360,19 @@ class ActiveControlDirective {
427
360
  initializeEventHandlers() {
428
361
  const hostElement = this.el.nativeElement;
429
362
  const scrollSelectors = this.getScrollSelectors();
430
- const eventHandlers = new ActiveControlEventHandlers(hostElement, this.isActive, (active) => this.activeChange.emit(active), { disableStopPropagation: this.disableStopPropagation(), scrollSelectors });
363
+ const eventHandlers = new ActiveControlEventHandlers(hostElement, this.isActive, (active) => this.activeChange.emit(active), {
364
+ disableStopPropagation: this.disableStopPropagation(),
365
+ scrollSelectors,
366
+ focusTargetSelector: this.focusTargetSelector(),
367
+ });
431
368
  this.eventCleanupFunctions.push(...eventHandlers.setupAll());
432
369
  }
433
370
  setupScrollControls(selectors) {
434
- // 既存のスクロール制御をクリーンアップ
435
371
  this.scrollCleanupFunctions.forEach(cleanup => cleanup());
436
372
  this.scrollCleanupFunctions = [];
437
373
  const hostElement = this.el.nativeElement;
438
374
  const disableScrollLock = this.disableScrollLock();
439
375
  for (const selector of selectors) {
440
- // querySelectorAll を使用して全てのマッチする要素を取得
441
376
  const scrollElements = hostElement.querySelectorAll(selector);
442
377
  scrollElements.forEach(scrollElement => {
443
378
  const scrollControl = new ScrollControl(scrollElement, this.isActive, { disableScrollLock });
@@ -454,7 +389,7 @@ class ActiveControlDirective {
454
389
  return single ? [single] : [];
455
390
  }
456
391
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ActiveControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
457
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: ActiveControlDirective, isStandalone: true, selector: "[appActiveControl]", inputs: { scrollSelector: { classPropertyName: "scrollSelector", publicName: "scrollSelector", isSignal: true, isRequired: false, transformFunction: null }, scrollSelectors: { classPropertyName: "scrollSelectors", publicName: "scrollSelectors", isSignal: true, isRequired: false, transformFunction: null }, disableStopPropagation: { classPropertyName: "disableStopPropagation", publicName: "disableStopPropagation", isSignal: true, isRequired: false, transformFunction: null }, disableScrollLock: { classPropertyName: "disableScrollLock", publicName: "disableScrollLock", isSignal: true, isRequired: false, transformFunction: null }, disableNodrag: { classPropertyName: "disableNodrag", publicName: "disableNodrag", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeChange: "activeChange" }, host: { properties: { "class.active": "isActive()", "class.nodrag": "!disableNodrag()", "class.nowheel": "isActive()" } }, ngImport: i0 }); }
392
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: ActiveControlDirective, isStandalone: true, selector: "[appActiveControl]", inputs: { scrollSelector: { classPropertyName: "scrollSelector", publicName: "scrollSelector", isSignal: true, isRequired: false, transformFunction: null }, scrollSelectors: { classPropertyName: "scrollSelectors", publicName: "scrollSelectors", isSignal: true, isRequired: false, transformFunction: null }, disableStopPropagation: { classPropertyName: "disableStopPropagation", publicName: "disableStopPropagation", isSignal: true, isRequired: false, transformFunction: null }, disableScrollLock: { classPropertyName: "disableScrollLock", publicName: "disableScrollLock", isSignal: true, isRequired: false, transformFunction: null }, disableNodrag: { classPropertyName: "disableNodrag", publicName: "disableNodrag", isSignal: true, isRequired: false, transformFunction: null }, focusTargetSelector: { classPropertyName: "focusTargetSelector", publicName: "focusTargetSelector", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeChange: "activeChange" }, host: { properties: { "class.active": "isActive()", "class.nodrag": "!disableNodrag()", "class.nowheel": "isActive()" } }, ngImport: i0 }); }
458
393
  }
459
394
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ActiveControlDirective, decorators: [{
460
395
  type: Directive,
@@ -467,7 +402,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
467
402
  '[class.nowheel]': 'isActive()',
468
403
  }
469
404
  }]
470
- }], ctorParameters: () => [], propDecorators: { scrollSelector: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollSelector", required: false }] }], scrollSelectors: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollSelectors", required: false }] }], disableStopPropagation: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableStopPropagation", required: false }] }], disableScrollLock: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableScrollLock", required: false }] }], disableNodrag: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableNodrag", required: false }] }], activeChange: [{ type: i0.Output, args: ["activeChange"] }] } });
405
+ }], ctorParameters: () => [], propDecorators: { scrollSelector: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollSelector", required: false }] }], scrollSelectors: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollSelectors", required: false }] }], disableStopPropagation: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableStopPropagation", required: false }] }], disableScrollLock: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableScrollLock", required: false }] }], disableNodrag: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableNodrag", required: false }] }], focusTargetSelector: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusTargetSelector", required: false }] }], activeChange: [{ type: i0.Output, args: ["activeChange"] }] } });
471
406
 
472
407
  /**
473
408
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/common.module.ts","../../../../../packages/@ng-atomic/common/src/lib/services/editing/editing-state-manager.service.ts","../../../../../packages/@ng-atomic/common/src/lib/operators/pause-when-editing.operator.ts","../../../../../packages/@ng-atomic/common/src/lib/directives/active-control/handlers/event-handlers.ts","../../../../../packages/@ng-atomic/common/src/lib/directives/active-control/handlers/scroll-control.ts","../../../../../packages/@ng-atomic/common/src/lib/directives/active-control/active-control.directive.ts","../../../../../packages/@ng-atomic/common/src/lib/ng-atomic-common.ts"],"sourcesContent":["import { EnvironmentProviders, importProvidersFrom, NgModule } from \"@angular/core\";\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { NgAtomicSheetsModule } from \"@ng-atomic/common/services/sheets\";\n\n\n@NgModule({\n imports: [\n MatDialogModule,\n MatSnackBarModule,\n NgAtomicSheetsModule,\n ]\n})\nexport class NgAtomicCommonModule {\n static forRoot() {\n return {\n ngModule: NgAtomicCommonModule,\n providers: [\n ],\n }\n }\n}\n\nexport function provideNgAtomicCommon(): EnvironmentProviders {\n return importProvidersFrom(NgAtomicCommonModule.forRoot());\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\n\n/**\n * EditingStateManager Service\n * \n * Manages global editing state for preventing data updates during cell editing.\n * Uses Angular Signals for reactive state management.\n */\n@Injectable({ providedIn: 'root' })\nexport class EditingStateManager {\n private readonly editingCells = signal<string[]>([]);\n readonly isEditing = computed(() => this.editingCells().length > 0);\n readonly isEditing$: Observable<boolean> = toObservable(this.isEditing);\n \n /**\n * Start editing a cell\n * @param rowId Row identifier\n * @param columnId Column identifier\n */\n startEditing(rowId: string | number, columnId: string): void {\n const cellKey = `${rowId}-${columnId}`;\n this.editingCells.update(cells => {\n const newCells = new Set(cells);\n newCells.add(cellKey);\n return [...newCells];\n });\n }\n \n /**\n * Stop editing a cell\n * @param rowId Row identifier\n * @param columnId Column identifier\n */\n stopEditing(rowId: string | number, columnId: string): void {\n const cellKey = `${rowId}-${columnId}`;\n this.editingCells.update(cells => {\n const newCells = new Set(cells);\n newCells.delete(cellKey);\n return [...newCells];\n });\n }\n}","import { Observable, MonoTypeOperatorFunction } from 'rxjs';\nimport { EditingStateManager } from '../services/editing/editing-state-manager.service';\n\n/**\n * Custom RxJS operator that pauses data flow when editing is active.\n * \n * When editing starts, incoming values are buffered.\n * When editing ends, the latest buffered value is emitted.\n * \n * @param editingStateManager The EditingStateManager service instance\n * @returns An operator function that can be used in RxJS pipe\n * \n * @example\n * ```typescript\n * dataStream$.pipe(\n * pauseWhenEditing(this.editingStateManager),\n * // ... other operators\n * )\n * ```\n */\nexport function pauseWhenEditing<T>(\n editingStateManager: EditingStateManager\n): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) => {\n return new Observable<T>(observer => {\n let pendingValues: T[] = [];\n let isEditing = false;\n \n // Subscribe to editing state changes\n const editingSub = editingStateManager.isEditing$.subscribe(editing => {\n const wasEditing = isEditing;\n isEditing = editing;\n console.debug('[pauseWhenEditing] Editing state changed:', { wasEditing, isEditing, pendingCount: pendingValues.length });\n \n // When editing ends, emit the latest pending value\n if (wasEditing && !isEditing && pendingValues.length > 0) {\n // Emit only the latest value (discard older updates)\n const latestValue = pendingValues[pendingValues.length - 1];\n pendingValues = [];\n console.debug('[pauseWhenEditing] Emitting pending value after edit end');\n observer.next(latestValue);\n }\n });\n \n // Subscribe to the source data stream\n const sourceSub = source.subscribe({\n next: value => {\n if (!isEditing) {\n // Pass through immediately when not editing\n console.debug('[pauseWhenEditing] Passing through value (not editing)');\n observer.next(value);\n }\n },\n error: err => observer.error(err),\n complete: () => observer.complete()\n });\n \n // Cleanup subscriptions\n return () => {\n editingSub.unsubscribe();\n sourceSub.unsubscribe();\n };\n });\n };\n}\n\n/**\n * Alternative operator that buffers ALL updates during editing.\n * \n * When editing ends, all buffered values are emitted in sequence.\n * This preserves the complete update history.\n * \n * @param editingStateManager The EditingStateManager service instance\n * @returns An operator function that can be used in RxJS pipe\n * \n * @example\n * ```typescript\n * dataStream$.pipe(\n * bufferWhenEditing(this.editingStateManager),\n * // ... other operators\n * )\n * ```\n */\nexport function bufferWhenEditing<T>(\n editingStateManager: EditingStateManager\n): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) => {\n return new Observable<T>(observer => {\n const buffer: T[] = [];\n let isEditing = false;\n \n // Subscribe to editing state changes\n const editingSub = editingStateManager.isEditing$.subscribe(editing => {\n const wasEditing = isEditing;\n isEditing = editing;\n \n // When editing ends, emit all buffered values\n if (wasEditing && !isEditing && buffer.length > 0) {\n buffer.forEach(value => observer.next(value));\n buffer.length = 0; // Clear the buffer\n }\n });\n \n // Subscribe to the source data stream\n const sourceSub = source.subscribe({\n next: value => {\n if (!isEditing) {\n observer.next(value);\n } else {\n buffer.push(value);\n }\n },\n error: err => observer.error(err),\n complete: () => observer.complete()\n });\n \n // Cleanup subscriptions\n return () => {\n editingSub.unsubscribe();\n sourceSub.unsubscribe();\n };\n });\n };\n}","import { Signal, WritableSignal } from '@angular/core';\n\nexport type CleanupFunction = () => void;\n\nexport interface ActiveControlOptions {\n /** mousedownでstopPropagationを呼ばない */\n disableStopPropagation?: boolean;\n /** スクロールを許可する要素のセレクタ */\n scrollSelectors?: string[];\n}\n\nexport class ActiveControlEventHandlers {\n private cleanupFunctions: CleanupFunction[] = [];\n\n constructor(\n private hostElement: HTMLElement,\n private isActive: WritableSignal<boolean>,\n private onActiveChange: (active: boolean) => void,\n private options: ActiveControlOptions = {}\n ) {}\n\n setupAll(): CleanupFunction[] {\n this.setupClickHandlers();\n this.setupPreventionHandlers();\n return this.cleanupFunctions;\n }\n\n private setupClickHandlers(): void {\n // ホスト要素クリック\n const mousedownHandler = (e: MouseEvent) => {\n this.toggleActive();\n // React Flowなどのドラッグと共存するため、オプションでstopPropagationを無効化\n if (!this.options.disableStopPropagation) {\n e.stopPropagation();\n }\n };\n this.addEventListener(this.hostElement, 'mousedown', mousedownHandler);\n\n // 外部クリック\n const documentClickListener = (e: MouseEvent) => {\n if (!this.hostElement.contains(e.target as Node) && this.isActive()) {\n this.setActive(false);\n }\n };\n document.addEventListener('mousedown', documentClickListener, { capture: true });\n this.cleanupFunctions.push(() =>\n document.removeEventListener('mousedown', documentClickListener, { capture: true })\n );\n }\n\n private setupPreventionHandlers(): void {\n // ホイールイベント(スクロール対象要素以外でのみブロック)\n // ただし、ctrlKey + wheel(トラックパッドのピンチズーム)は常にブロック\n // 非アクティブ時はScrollControlがスクロール位置をリセットするため、ここでは処理しない\n this.addEventListener(this.hostElement, 'wheel', (e: WheelEvent) => {\n if (this.isActive()) {\n // ctrlKey + wheel = トラックパッドのピンチズーム → 常にブロック\n if (e.ctrlKey) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n // 通常のホイールスクロール: スクロール対象要素からのイベントは許可\n const target = e.target as HTMLElement;\n const isScrollableElement = this.options.scrollSelectors?.some(selector =>\n target.closest(selector) !== null\n );\n if (!isScrollableElement) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n }, { passive: false });\n\n // タッチイベント(ホスト要素レベル)\n const touchHandler = (e: TouchEvent) => {\n if (!this.isActive()) return;\n\n // スクロール対象要素からのイベントは許可\n const target = e.target as HTMLElement;\n const isScrollableElement = this.options.scrollSelectors?.some(selector =>\n target.closest(selector) !== null\n );\n if (!isScrollableElement) {\n if (e.touches.length > 1) {\n // ピンチズームなどマルチタッチ操作をブロック\n e.preventDefault();\n e.stopPropagation();\n }\n // シングルタッチはデフォルト動作を許可(スクロールなど)\n }\n };\n this.addEventListener(this.hostElement, 'touchstart', touchHandler, { passive: false });\n this.addEventListener(this.hostElement, 'touchmove', touchHandler, { passive: false });\n\n // ジェスチャーイベント(ホスト要素レベル)\n const gestureHandler = (e: Event) => {\n if (this.isActive()) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n ['gesturestart', 'gesturechange', 'gestureend'].forEach(eventName => {\n this.addEventListener(this.hostElement, eventName, gestureHandler, { passive: false });\n });\n\n // Document-level capture phaseハンドラ\n // ブラウザのピンチズームがデフォルト動作を行う前にキャッチする\n this.setupDocumentLevelPinchZoomPrevention();\n }\n\n /**\n * Document-levelでcapture phaseを使ってピンチズームを防止\n * ホスト要素内で発生したマルチタッチ/ジェスチャーイベントのみをブロック\n */\n private setupDocumentLevelPinchZoomPrevention(): void {\n // タッチイベント(capture phase)\n const documentTouchHandler = (e: TouchEvent) => {\n if (!this.isActive()) return;\n if (!this.hostElement.contains(e.target as Node)) return;\n\n if (e.touches.length > 1) {\n e.preventDefault();\n }\n };\n\n document.addEventListener('touchstart', documentTouchHandler, { capture: true, passive: false });\n document.addEventListener('touchmove', documentTouchHandler, { capture: true, passive: false });\n\n this.cleanupFunctions.push(() => {\n document.removeEventListener('touchstart', documentTouchHandler, { capture: true });\n document.removeEventListener('touchmove', documentTouchHandler, { capture: true });\n });\n\n // Safari gestureイベント(capture phase)\n const documentGestureHandler = (e: Event) => {\n if (!this.isActive()) return;\n if (!this.hostElement.contains(e.target as Node)) return;\n e.preventDefault();\n };\n\n ['gesturestart', 'gesturechange', 'gestureend'].forEach(eventName => {\n document.addEventListener(eventName, documentGestureHandler, { capture: true, passive: false });\n this.cleanupFunctions.push(() =>\n document.removeEventListener(eventName, documentGestureHandler, { capture: true })\n );\n });\n }\n\n private addEventListener(\n element: HTMLElement | Document,\n event: string,\n handler: (e: any) => void,\n options?: AddEventListenerOptions\n ): void {\n element.addEventListener(event, handler as EventListener, options);\n this.cleanupFunctions.push(() => element.removeEventListener(event, handler as EventListener, options));\n }\n\n private toggleActive(): void {\n this.setActive(!this.isActive());\n }\n\n private setActive(active: boolean): void {\n this.isActive.set(active);\n this.onActiveChange(active);\n }\n}\n","import { Signal } from '@angular/core';\nimport { CleanupFunction } from './event-handlers';\n\nexport interface ScrollControlOptions {\n /** スクロール位置のロックを無効化する(常にスクロール可能にする) */\n disableScrollLock?: boolean;\n}\n\nexport class ScrollControl {\n private lockedScrollTop = 0;\n private wasActive = false;\n private rafId?: number;\n\n constructor(\n private scrollElement: HTMLElement,\n private isActive: Signal<boolean>,\n private options: ScrollControlOptions = {}\n ) {}\n\n setup(): CleanupFunction[] {\n const cleanups: CleanupFunction[] = [];\n\n // アクティブ状態の監視\n const checkActiveState = () => {\n const isActiveNow = this.isActive();\n\n if (!this.options.disableScrollLock) {\n if (!isActiveNow && this.wasActive) {\n // アクティブ → 非アクティブ: 現在位置をロック\n this.lockedScrollTop = this.scrollElement.scrollTop;\n } else if (!isActiveNow) {\n // 継続して非アクティブ: ロック位置を維持\n this.scrollElement.scrollTop = this.lockedScrollTop;\n }\n }\n // アクティブ時 or disableScrollLock時: 何もしない(自由スクロール)\n\n this.wasActive = isActiveNow;\n this.rafId = requestAnimationFrame(checkActiveState);\n };\n checkActiveState();\n cleanups.push(() => {\n if (this.rafId !== undefined) {\n cancelAnimationFrame(this.rafId);\n }\n });\n\n // スクロールイベント監視\n const scrollHandler = () => {\n if (!this.options.disableScrollLock && !this.isActive()) {\n this.scrollElement.scrollTop = this.lockedScrollTop;\n }\n };\n this.scrollElement.addEventListener('scroll', scrollHandler);\n cleanups.push(() => this.scrollElement.removeEventListener('scroll', scrollHandler));\n\n return cleanups;\n }\n}\n","import { Directive, ElementRef, input, output, effect, signal, OnDestroy, inject } from '@angular/core';\nimport { ActiveControlEventHandlers, ScrollControl } from './handlers';\n\n/**\n * アクティブ状態を管理するディレクティブ\n *\n * クリックでアクティブ化、外部クリックで非アクティブ化し、\n * スクロール位置の固定やイベント伝播の制御を行います。\n *\n * @example\n * ```html\n * <!-- 単一セレクタ -->\n * <div appActiveControl\n * [scrollSelector]=\"'.xterm-viewport'\"\n * (activeChange)=\"onActiveChange($event)\">\n * <!-- content -->\n * </div>\n *\n * <!-- 複数セレクタ -->\n * <div appActiveControl\n * [scrollSelectors]=\"['.xterm-viewport', '.qtp-content']\"\n * (activeChange)=\"onActiveChange($event)\">\n * <!-- content -->\n * </div>\n * ```\n */\n@Directive({\n selector: '[appActiveControl]',\n standalone: true,\n host: {\n '[class.active]': 'isActive()',\n '[class.nodrag]': '!disableNodrag()',\n '[class.nowheel]': 'isActive()',\n }\n})\nexport class ActiveControlDirective implements OnDestroy {\n private readonly el = inject(ElementRef);\n readonly scrollSelector = input<string>();\n readonly scrollSelectors = input<string[]>();\n /** mousedownでstopPropagationを呼ばない(React Flowなどのドラッグと共存するため) */\n readonly disableStopPropagation = input<boolean>(false);\n /** スクロール位置のロックを無効化する(常にスクロール可能にする) */\n readonly disableScrollLock = input<boolean>(false);\n /** nodragクラスを付与しない(React Flowのノードでドラッグを有効化するため) */\n readonly disableNodrag = input<boolean>(false);\n readonly activeChange = output<boolean>();\n readonly isActive = signal<boolean>(false);\n\n private eventCleanupFunctions: (() => void)[] = [];\n private scrollCleanupFunctions: (() => void)[] = [];\n private eventHandlersInitialized = false;\n\n constructor() {\n // イベントハンドラーの初期化(一度だけ)\n effect(() => {\n if (!this.eventHandlersInitialized) {\n setTimeout(() => this.initializeEventHandlers(), 100);\n this.eventHandlersInitialized = true;\n }\n }, { allowSignalWrites: true });\n\n // スクロール制御の初期化(セレクタが変わるたびに再設定)\n effect(() => {\n const selectors = this.getScrollSelectors();\n setTimeout(() => this.setupScrollControls(selectors), 150);\n });\n }\n\n ngOnDestroy(): void {\n this.eventCleanupFunctions.forEach(cleanup => cleanup());\n this.scrollCleanupFunctions.forEach(cleanup => cleanup());\n }\n\n private initializeEventHandlers(): void {\n const hostElement = this.el.nativeElement as HTMLElement;\n const scrollSelectors = this.getScrollSelectors();\n const eventHandlers = new ActiveControlEventHandlers(\n hostElement,\n this.isActive,\n (active) => this.activeChange.emit(active),\n { disableStopPropagation: this.disableStopPropagation(), scrollSelectors }\n );\n this.eventCleanupFunctions.push(...eventHandlers.setupAll());\n }\n\n private setupScrollControls(selectors: string[]): void {\n // 既存のスクロール制御をクリーンアップ\n this.scrollCleanupFunctions.forEach(cleanup => cleanup());\n this.scrollCleanupFunctions = [];\n\n const hostElement = this.el.nativeElement as HTMLElement;\n const disableScrollLock = this.disableScrollLock();\n for (const selector of selectors) {\n // querySelectorAll を使用して全てのマッチする要素を取得\n const scrollElements = hostElement.querySelectorAll<HTMLElement>(selector);\n scrollElements.forEach(scrollElement => {\n const scrollControl = new ScrollControl(scrollElement, this.isActive, { disableScrollLock });\n this.scrollCleanupFunctions.push(...scrollControl.setup());\n });\n }\n }\n\n private getScrollSelectors(): string[] {\n const multiple = this.scrollSelectors();\n if (multiple && multiple.length > 0) {\n return multiple;\n }\n const single = this.scrollSelector();\n return single ? [single] : [];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-atomic-common.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/common.module.ts","../../../../../packages/@ng-atomic/common/src/lib/services/editing/editing-state-manager.service.ts","../../../../../packages/@ng-atomic/common/src/lib/operators/pause-when-editing.operator.ts","../../../../../packages/@ng-atomic/common/src/lib/directives/active-control/handlers/event-handlers.ts","../../../../../packages/@ng-atomic/common/src/lib/directives/active-control/handlers/scroll-control.ts","../../../../../packages/@ng-atomic/common/src/lib/directives/active-control/active-control.directive.ts","../../../../../packages/@ng-atomic/common/src/lib/ng-atomic-common.ts"],"sourcesContent":["import { EnvironmentProviders, importProvidersFrom, NgModule } from \"@angular/core\";\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { NgAtomicSheetsModule } from \"@ng-atomic/common/services/sheets\";\n\n\n@NgModule({\n imports: [\n MatDialogModule,\n MatSnackBarModule,\n NgAtomicSheetsModule,\n ]\n})\nexport class NgAtomicCommonModule {\n static forRoot() {\n return {\n ngModule: NgAtomicCommonModule,\n providers: [\n ],\n }\n }\n}\n\nexport function provideNgAtomicCommon(): EnvironmentProviders {\n return importProvidersFrom(NgAtomicCommonModule.forRoot());\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\n\n\n@Injectable({ providedIn: 'root' })\nexport class EditingStateManager {\n private readonly editingCells = signal<string[]>([]);\n readonly isEditing = computed(() => this.editingCells().length > 0);\n readonly isEditing$: Observable<boolean> = toObservable(this.isEditing);\n \n \n startEditing(rowId: string | number, columnId: string): void {\n const cellKey = `${rowId}-${columnId}`;\n this.editingCells.update(cells => {\n const newCells = new Set(cells);\n newCells.add(cellKey);\n return [...newCells];\n });\n }\n \n \n stopEditing(rowId: string | number, columnId: string): void {\n const cellKey = `${rowId}-${columnId}`;\n this.editingCells.update(cells => {\n const newCells = new Set(cells);\n newCells.delete(cellKey);\n return [...newCells];\n });\n }\n}","import { Observable, MonoTypeOperatorFunction } from 'rxjs';\nimport { EditingStateManager } from '../services/editing/editing-state-manager.service';\n\n\nexport function pauseWhenEditing<T>(\n editingStateManager: EditingStateManager\n): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) => {\n return new Observable<T>(observer => {\n let pendingValues: T[] = [];\n let isEditing = false;\n \n \n const editingSub = editingStateManager.isEditing$.subscribe(editing => {\n const wasEditing = isEditing;\n isEditing = editing;\n console.debug('[pauseWhenEditing] Editing state changed:', { wasEditing, isEditing, pendingCount: pendingValues.length });\n \n \n if (wasEditing && !isEditing && pendingValues.length > 0) {\n \n const latestValue = pendingValues[pendingValues.length - 1];\n pendingValues = [];\n console.debug('[pauseWhenEditing] Emitting pending value after edit end');\n observer.next(latestValue);\n }\n });\n \n \n const sourceSub = source.subscribe({\n next: value => {\n if (!isEditing) {\n \n console.debug('[pauseWhenEditing] Passing through value (not editing)');\n observer.next(value);\n } else {\n \n pendingValues.push(value);\n console.debug('[pauseWhenEditing] Buffering value (editing)', { pendingCount: pendingValues.length });\n }\n },\n error: err => observer.error(err),\n complete: () => observer.complete()\n });\n\n \n return () => {\n editingSub.unsubscribe();\n sourceSub.unsubscribe();\n };\n });\n };\n}\n\n\nexport function bufferWhenEditing<T>(\n editingStateManager: EditingStateManager\n): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) => {\n return new Observable<T>(observer => {\n const buffer: T[] = [];\n let isEditing = false;\n \n \n const editingSub = editingStateManager.isEditing$.subscribe(editing => {\n const wasEditing = isEditing;\n isEditing = editing;\n \n \n if (wasEditing && !isEditing && buffer.length > 0) {\n buffer.forEach(value => observer.next(value));\n buffer.length = 0; \n }\n });\n \n \n const sourceSub = source.subscribe({\n next: value => {\n if (!isEditing) {\n observer.next(value);\n } else {\n buffer.push(value);\n }\n },\n error: err => observer.error(err),\n complete: () => observer.complete()\n });\n \n \n return () => {\n editingSub.unsubscribe();\n sourceSub.unsubscribe();\n };\n });\n };\n}","import { Signal, WritableSignal } from '@angular/core';\n\nexport type CleanupFunction = () => void;\n\nexport interface ActiveControlOptions {\n \n disableStopPropagation?: boolean;\n \n scrollSelectors?: string[];\n \n focusTargetSelector?: string;\n}\n\nexport class ActiveControlEventHandlers {\n private cleanupFunctions: CleanupFunction[] = [];\n\n constructor(\n private hostElement: HTMLElement,\n private isActive: WritableSignal<boolean>,\n private onActiveChange: (active: boolean) => void,\n private options: ActiveControlOptions = {}\n ) {}\n\n setupAll(): CleanupFunction[] {\n this.setupClickHandlers();\n this.setupPreventionHandlers();\n return this.cleanupFunctions;\n }\n\n private setupClickHandlers(): void {\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n const CLICK_MOVE_THRESHOLD_PX = 5;\n let justActivated = false;\n let gestureStart: { x: number; y: number } | null = null;\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n const gestureStartHandler = (e: MouseEvent) => {\n justActivated = false;\n gestureStart = this.hostElement.contains(e.target as Node)\n ? { x: e.screenX, y: e.screenY }\n : null;\n };\n this.addEventListener(window, 'mousedown', gestureStartHandler, { capture: true });\n\n const mousedownHandler = (e: MouseEvent) => {\n if (!this.isActive()) {\n this.setActive(true);\n justActivated = true;\n \n \n \n \n \n \n if (this.options.focusTargetSelector) {\n const target = this.hostElement.querySelector<HTMLElement>(this.options.focusTargetSelector);\n if (target) {\n e.preventDefault();\n target.focus();\n }\n }\n }\n \n \n if (!this.options.disableStopPropagation) {\n e.stopPropagation();\n }\n };\n this.addEventListener(this.hostElement, 'mousedown', mousedownHandler);\n\n \n \n \n \n \n \n const mouseupHandler = (e: MouseEvent) => {\n const start = gestureStart;\n gestureStart = null;\n if (e.button !== 0) {\n return; \n }\n if (justActivated) {\n justActivated = false;\n return;\n }\n if (!start) {\n return; \n }\n const moved = Math.hypot(e.screenX - start.x, e.screenY - start.y) > CLICK_MOVE_THRESHOLD_PX;\n if (moved) {\n return; \n }\n if (this.isActive()) {\n this.setActive(false);\n }\n };\n this.addEventListener(window, 'mouseup', mouseupHandler, { capture: true });\n\n \n const documentClickListener = (e: MouseEvent) => {\n if (!this.hostElement.contains(e.target as Node) && this.isActive()) {\n this.setActive(false);\n }\n };\n document.addEventListener('mousedown', documentClickListener, { capture: true });\n this.cleanupFunctions.push(() =>\n document.removeEventListener('mousedown', documentClickListener, { capture: true })\n );\n }\n\n private setupPreventionHandlers(): void {\n \n \n \n this.addEventListener(this.hostElement, 'wheel', (e: WheelEvent) => {\n if (this.isActive()) {\n \n if (e.ctrlKey) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n \n const target = e.target as HTMLElement;\n const isScrollableElement = this.options.scrollSelectors?.some(selector =>\n target.closest(selector) !== null\n );\n if (!isScrollableElement) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n }, { passive: false });\n\n \n const touchHandler = (e: TouchEvent) => {\n if (!this.isActive()) return;\n\n \n const target = e.target as HTMLElement;\n const isScrollableElement = this.options.scrollSelectors?.some(selector =>\n target.closest(selector) !== null\n );\n if (!isScrollableElement) {\n if (e.touches.length > 1) {\n \n e.preventDefault();\n e.stopPropagation();\n }\n \n }\n };\n this.addEventListener(this.hostElement, 'touchstart', touchHandler, { passive: false });\n this.addEventListener(this.hostElement, 'touchmove', touchHandler, { passive: false });\n\n \n const gestureHandler = (e: Event) => {\n if (this.isActive()) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n ['gesturestart', 'gesturechange', 'gestureend'].forEach(eventName => {\n this.addEventListener(this.hostElement, eventName, gestureHandler, { passive: false });\n });\n\n \n \n this.setupDocumentLevelPinchZoomPrevention();\n }\n\n \n private setupDocumentLevelPinchZoomPrevention(): void {\n \n const documentTouchHandler = (e: TouchEvent) => {\n if (!this.isActive()) return;\n if (!this.hostElement.contains(e.target as Node)) return;\n\n if (e.touches.length > 1) {\n e.preventDefault();\n }\n };\n\n document.addEventListener('touchstart', documentTouchHandler, { capture: true, passive: false });\n document.addEventListener('touchmove', documentTouchHandler, { capture: true, passive: false });\n\n this.cleanupFunctions.push(() => {\n document.removeEventListener('touchstart', documentTouchHandler, { capture: true });\n document.removeEventListener('touchmove', documentTouchHandler, { capture: true });\n });\n\n \n const documentGestureHandler = (e: Event) => {\n if (!this.isActive()) return;\n if (!this.hostElement.contains(e.target as Node)) return;\n e.preventDefault();\n };\n\n ['gesturestart', 'gesturechange', 'gestureend'].forEach(eventName => {\n document.addEventListener(eventName, documentGestureHandler, { capture: true, passive: false });\n this.cleanupFunctions.push(() =>\n document.removeEventListener(eventName, documentGestureHandler, { capture: true })\n );\n });\n }\n\n private addEventListener(\n element: HTMLElement | Document | Window,\n event: string,\n handler: (e: any) => void,\n options?: AddEventListenerOptions\n ): void {\n element.addEventListener(event, handler as EventListener, options);\n this.cleanupFunctions.push(() => element.removeEventListener(event, handler as EventListener, options));\n }\n\n private toggleActive(): void {\n this.setActive(!this.isActive());\n }\n\n private setActive(active: boolean): void {\n this.isActive.set(active);\n this.onActiveChange(active);\n }\n}\n","import { Signal } from '@angular/core';\nimport { CleanupFunction } from './event-handlers';\n\nexport interface ScrollControlOptions {\n \n disableScrollLock?: boolean;\n}\n\nexport class ScrollControl {\n private lockedScrollTop = 0;\n private wasActive = false;\n private rafId?: number;\n\n constructor(\n private scrollElement: HTMLElement,\n private isActive: Signal<boolean>,\n private options: ScrollControlOptions = {}\n ) {}\n\n setup(): CleanupFunction[] {\n const cleanups: CleanupFunction[] = [];\n\n \n const checkActiveState = () => {\n const isActiveNow = this.isActive();\n\n if (!this.options.disableScrollLock) {\n if (!isActiveNow && this.wasActive) {\n \n this.lockedScrollTop = this.scrollElement.scrollTop;\n } else if (!isActiveNow) {\n \n this.scrollElement.scrollTop = this.lockedScrollTop;\n }\n }\n \n\n this.wasActive = isActiveNow;\n this.rafId = requestAnimationFrame(checkActiveState);\n };\n checkActiveState();\n cleanups.push(() => {\n if (this.rafId !== undefined) {\n cancelAnimationFrame(this.rafId);\n }\n });\n\n \n const scrollHandler = () => {\n if (!this.options.disableScrollLock && !this.isActive()) {\n this.scrollElement.scrollTop = this.lockedScrollTop;\n }\n };\n this.scrollElement.addEventListener('scroll', scrollHandler);\n cleanups.push(() => this.scrollElement.removeEventListener('scroll', scrollHandler));\n\n return cleanups;\n }\n}\n","import { Directive, ElementRef, input, output, effect, signal, OnDestroy, inject } from '@angular/core';\nimport { ActiveControlEventHandlers, ScrollControl } from './handlers';\n\n\n@Directive({\n selector: '[appActiveControl]',\n standalone: true,\n host: {\n '[class.active]': 'isActive()',\n '[class.nodrag]': '!disableNodrag()',\n '[class.nowheel]': 'isActive()',\n }\n})\nexport class ActiveControlDirective implements OnDestroy {\n private readonly el = inject(ElementRef);\n readonly scrollSelector = input<string>();\n readonly scrollSelectors = input<string[]>();\n \n readonly disableStopPropagation = input<boolean>(false);\n \n readonly disableScrollLock = input<boolean>(false);\n \n readonly disableNodrag = input<boolean>(false);\n \n readonly focusTargetSelector = input<string>();\n readonly activeChange = output<boolean>();\n readonly isActive = signal<boolean>(false);\n\n private eventCleanupFunctions: (() => void)[] = [];\n private scrollCleanupFunctions: (() => void)[] = [];\n private eventHandlersInitialized = false;\n\n constructor() {\n \n effect(() => {\n if (!this.eventHandlersInitialized) {\n setTimeout(() => this.initializeEventHandlers(), 100);\n this.eventHandlersInitialized = true;\n }\n }, { allowSignalWrites: true });\n\n \n effect(() => {\n const selectors = this.getScrollSelectors();\n setTimeout(() => this.setupScrollControls(selectors), 150);\n });\n }\n\n ngOnDestroy(): void {\n this.eventCleanupFunctions.forEach(cleanup => cleanup());\n this.scrollCleanupFunctions.forEach(cleanup => cleanup());\n }\n\n private initializeEventHandlers(): void {\n const hostElement = this.el.nativeElement as HTMLElement;\n const scrollSelectors = this.getScrollSelectors();\n const eventHandlers = new ActiveControlEventHandlers(\n hostElement,\n this.isActive,\n (active) => this.activeChange.emit(active),\n {\n disableStopPropagation: this.disableStopPropagation(),\n scrollSelectors,\n focusTargetSelector: this.focusTargetSelector(),\n }\n );\n this.eventCleanupFunctions.push(...eventHandlers.setupAll());\n }\n\n private setupScrollControls(selectors: string[]): void {\n \n this.scrollCleanupFunctions.forEach(cleanup => cleanup());\n this.scrollCleanupFunctions = [];\n\n const hostElement = this.el.nativeElement as HTMLElement;\n const disableScrollLock = this.disableScrollLock();\n for (const selector of selectors) {\n \n const scrollElements = hostElement.querySelectorAll<HTMLElement>(selector);\n scrollElements.forEach(scrollElement => {\n const scrollControl = new ScrollControl(scrollElement, this.isActive, { disableScrollLock });\n this.scrollCleanupFunctions.push(...scrollControl.setup());\n });\n }\n }\n\n private getScrollSelectors(): string[] {\n const multiple = this.scrollSelectors();\n if (multiple && multiple.length > 0) {\n return multiple;\n }\n const single = this.scrollSelector();\n return single ? [single] : [];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@ng-atomic/common",
3
- "version": "19.51.0",
3
+ "version": "19.80.0",
4
4
  "license": "MIT",
5
5
  "peerDependencies": {
6
- "@nx-ddd/core": "19.51.0",
7
- "@nx-ddd/common": "19.51.0"
6
+ "@nx-ddd/core": "19.80.0",
7
+ "@nx-ddd/common": "19.80.0"
8
8
  },
9
9
  "dependencies": {
10
10
  "tslib": "^2.3.0"
@@ -1,39 +1,14 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnDestroy } from '@angular/core';
3
3
 
4
- /**
5
- * アクティブ状態を管理するディレクティブ
6
- *
7
- * クリックでアクティブ化、外部クリックで非アクティブ化し、
8
- * スクロール位置の固定やイベント伝播の制御を行います。
9
- *
10
- * @example
11
- * ```html
12
- * <!-- 単一セレクタ -->
13
- * <div appActiveControl
14
- * [scrollSelector]="'.xterm-viewport'"
15
- * (activeChange)="onActiveChange($event)">
16
- * <!-- content -->
17
- * </div>
18
- *
19
- * <!-- 複数セレクタ -->
20
- * <div appActiveControl
21
- * [scrollSelectors]="['.xterm-viewport', '.qtp-content']"
22
- * (activeChange)="onActiveChange($event)">
23
- * <!-- content -->
24
- * </div>
25
- * ```
26
- */
27
4
  declare class ActiveControlDirective implements OnDestroy {
28
5
  private readonly el;
29
6
  readonly scrollSelector: _angular_core.InputSignal<string | undefined>;
30
7
  readonly scrollSelectors: _angular_core.InputSignal<string[] | undefined>;
31
- /** mousedownでstopPropagationを呼ばない(React Flowなどのドラッグと共存するため) */
32
8
  readonly disableStopPropagation: _angular_core.InputSignal<boolean>;
33
- /** スクロール位置のロックを無効化する(常にスクロール可能にする) */
34
9
  readonly disableScrollLock: _angular_core.InputSignal<boolean>;
35
- /** nodragクラスを付与しない(React Flowのノードでドラッグを有効化するため) */
36
10
  readonly disableNodrag: _angular_core.InputSignal<boolean>;
11
+ readonly focusTargetSelector: _angular_core.InputSignal<string | undefined>;
37
12
  readonly activeChange: _angular_core.OutputEmitterRef<boolean>;
38
13
  readonly isActive: _angular_core.WritableSignal<boolean>;
39
14
  private eventCleanupFunctions;
@@ -45,7 +20,7 @@ declare class ActiveControlDirective implements OnDestroy {
45
20
  private setupScrollControls;
46
21
  private getScrollSelectors;
47
22
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActiveControlDirective, never>;
48
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ActiveControlDirective, "[appActiveControl]", never, { "scrollSelector": { "alias": "scrollSelector"; "required": false; "isSignal": true; }; "scrollSelectors": { "alias": "scrollSelectors"; "required": false; "isSignal": true; }; "disableStopPropagation": { "alias": "disableStopPropagation"; "required": false; "isSignal": true; }; "disableScrollLock": { "alias": "disableScrollLock"; "required": false; "isSignal": true; }; "disableNodrag": { "alias": "disableNodrag"; "required": false; "isSignal": true; }; }, { "activeChange": "activeChange"; }, never, never, true, never>;
23
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ActiveControlDirective, "[appActiveControl]", never, { "scrollSelector": { "alias": "scrollSelector"; "required": false; "isSignal": true; }; "scrollSelectors": { "alias": "scrollSelectors"; "required": false; "isSignal": true; }; "disableStopPropagation": { "alias": "disableStopPropagation"; "required": false; "isSignal": true; }; "disableScrollLock": { "alias": "disableScrollLock"; "required": false; "isSignal": true; }; "disableNodrag": { "alias": "disableNodrag"; "required": false; "isSignal": true; }; "focusTargetSelector": { "alias": "focusTargetSelector"; "required": false; "isSignal": true; }; }, { "activeChange": "activeChange"; }, never, never, true, never>;
49
24
  }
50
25
 
51
26
  export { ActiveControlDirective };
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common-directives-active-control.d.ts","sources":["../../../../../packages/@ng-atomic/common/src/lib/directives/active-control/active-control.directive.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACH,cAAA,sBAAA,YAAA,SAAA;AAUE;6BACuB,aAAA,CAAA,WAAA;8BACC,aAAA,CAAA,WAAA;;qCAEO,aAAA,CAAA,WAAA;;gCAEL,aAAA,CAAA,WAAA;;4BAEJ,aAAA,CAAA,WAAA;2BACD,aAAA,CAAA,gBAAA;uBACJ,aAAA,CAAA,cAAA;;;;;AAsBjB;AAKA;AAYA;AAiBA;;;AAQD;;;;"}
1
+ {"version":3,"file":"ng-atomic-common-directives-active-control.d.ts","sources":["../../../../../packages/@ng-atomic/common/src/lib/directives/active-control/active-control.directive.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAIA,cAAA,sBAAA,YAAA,SAAA;AAUE;6BACuB,aAAA,CAAA,WAAA;8BACC,aAAA,CAAA,WAAA;qCAEO,aAAA,CAAA,WAAA;gCAEL,aAAA,CAAA,WAAA;4BAEJ,aAAA,CAAA,WAAA;kCAEM,aAAA,CAAA,WAAA;2BACP,aAAA,CAAA,gBAAA;uBACJ,aAAA,CAAA,cAAA;;;;;AAsBjB;AAKA;AAgBA;AAiBA;;;AAQD;;;;"}
@@ -6,11 +6,8 @@ declare class PreventBrowserZoomDirective implements OnDestroy {
6
6
  private cleanupFns;
7
7
  constructor();
8
8
  private setupPreventionHandlers;
9
- /** Ctrl+wheel(トラックパッドのピンチズーム) */
10
9
  private preventCtrlWheel;
11
- /** Ctrl/Cmd + Plus/Minus/0(キーボードズーム) */
12
10
  private preventKeyboardZoom;
13
- /** Safari のジェスチャーイベント */
14
11
  private preventGestureZoom;
15
12
  ngOnDestroy(): void;
16
13
  static ɵfac: i0.ɵɵFactoryDeclaration<PreventBrowserZoomDirective, never>;