@acorex/core 22.2.10 → 22.2.12

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.
@@ -31,6 +31,10 @@ class AXFullScreenService {
31
31
  * Original parent element reference (overlay mode).
32
32
  */
33
33
  this.originalParent = null;
34
+ /**
35
+ * Original next sibling so overlay restore keeps DOM order (overlay mode).
36
+ */
37
+ this.originalNextSibling = null;
34
38
  /**
35
39
  * Fullscreen container element (overlay mode).
36
40
  */
@@ -149,6 +153,7 @@ class AXFullScreenService {
149
153
  try {
150
154
  this.storeOriginalStyles(element);
151
155
  this.originalParent = element.parentElement;
156
+ this.originalNextSibling = element.nextSibling;
152
157
  this.zToken = this.zIndexService.acquire();
153
158
  const container = this.document.createElement('div');
154
159
  container.style.position = 'fixed';
@@ -189,7 +194,7 @@ class AXFullScreenService {
189
194
  this.fullscreenContainer.removeChild(element);
190
195
  }
191
196
  if (this.originalParent?.isConnected && !this.originalParent.contains(element)) {
192
- this.originalParent.appendChild(element);
197
+ this.restoreOriginalPosition(element);
193
198
  }
194
199
  if (this.fullscreenContainer.parentNode === this.document.body) {
195
200
  this.document.body.removeChild(this.fullscreenContainer);
@@ -253,10 +258,23 @@ class AXFullScreenService {
253
258
  cleanupOverlayResources() {
254
259
  this.fullscreenContainer = null;
255
260
  this.originalParent = null;
261
+ this.originalNextSibling = null;
256
262
  this.zIndexService.release(this.zToken);
257
263
  this.zToken = null;
258
264
  this.originalStyles = {};
259
265
  }
266
+ restoreOriginalPosition(element) {
267
+ const parent = this.originalParent;
268
+ if (!parent) {
269
+ return;
270
+ }
271
+ const nextSibling = this.originalNextSibling;
272
+ if (nextSibling && nextSibling.parentNode === parent) {
273
+ parent.insertBefore(element, nextSibling);
274
+ return;
275
+ }
276
+ parent.appendChild(element);
277
+ }
260
278
  getFullscreenElement() {
261
279
  return this.document.fullscreenElement ?? this.document.webkitFullscreenElement ?? null;
262
280
  }
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-core-full-screen.mjs","sources":["../../../../packages/core/full-screen/src/lib/full-screen.service.ts","../../../../packages/core/full-screen/src/acorex-core-full-screen.ts"],"sourcesContent":["import { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\n\n/**\n * Fullscreen implementation mode.\n * - `overlay`: CSS fixed container that covers the viewport.\n * - `browser`: Native Fullscreen API via `element.requestFullscreen()`.\n */\nexport type AXFullScreenMode = 'overlay' | 'browser';\n\ntype FullscreenCapableElement = HTMLElement & {\n requestFullscreen?: () => Promise<void>;\n webkitRequestFullscreen?: () => Promise<void>;\n};\n\ntype FullscreenCapableDocument = Document & {\n exitFullscreen?: () => Promise<void>;\n webkitExitFullscreen?: () => Promise<void>;\n fullscreenElement?: Element | null;\n webkitFullscreenElement?: Element | null;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXFullScreenService {\n private readonly zIndexService = inject(AXZIndexService);\n private readonly document = inject(DOCUMENT) as FullscreenCapableDocument;\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * Current fullscreen state.\n */\n private readonly isFullscreenState = signal<boolean>(false);\n\n /**\n * Active fullscreen element.\n */\n private readonly activeElementState = signal<HTMLElement | null>(null);\n\n /**\n * Active fullscreen mode.\n */\n private currentMode: AXFullScreenMode | null = null;\n\n /**\n * Original element styles to restore (overlay mode).\n */\n private originalStyles: Partial<CSSStyleDeclaration> = {};\n\n /**\n * Original parent element reference (overlay mode).\n */\n private originalParent: HTMLElement | null = null;\n\n /**\n * Fullscreen container element (overlay mode).\n */\n private fullscreenContainer: HTMLElement | null = null;\n\n /**\n * Z-index token for overlay fullscreen.\n */\n private zToken: AXZToken | null = null;\n\n private readonly fullscreenChangeHandler = () => {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n if (this.currentMode !== 'browser') {\n return;\n }\n\n const activeElement = this.activeElementState();\n if (!activeElement) {\n return;\n }\n\n const fullscreenElement = this.getFullscreenElement();\n if (fullscreenElement !== activeElement) {\n this.clearBrowserState();\n }\n };\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.document.addEventListener('fullscreenchange', this.fullscreenChangeHandler);\n this.document.addEventListener('webkitfullscreenchange', this.fullscreenChangeHandler);\n\n this.destroyRef.onDestroy(() => {\n this.document.removeEventListener('fullscreenchange', this.fullscreenChangeHandler);\n this.document.removeEventListener('webkitfullscreenchange', this.fullscreenChangeHandler);\n\n const activeElement = this.activeElementState();\n if (activeElement) {\n this.exit(activeElement);\n }\n });\n }\n }\n\n /**\n * Toggle fullscreen state.\n */\n toggle(element: HTMLElement, mode: AXFullScreenMode = 'overlay'): void {\n if (this.isActive(element)) {\n this.exit(element);\n } else {\n this.enter(element, mode);\n }\n }\n\n /**\n * Enter fullscreen mode.\n */\n enter(element: HTMLElement, mode: AXFullScreenMode = 'overlay'): void {\n if (!element || this.isFullscreenState()) {\n return;\n }\n\n if (mode === 'browser') {\n this.enterBrowser(element);\n return;\n }\n\n this.enterOverlay(element);\n }\n\n /**\n * Exit fullscreen mode.\n */\n exit(element?: HTMLElement): void {\n if (!this.isFullscreenState()) {\n return;\n }\n\n const activeElement = this.activeElementState();\n const targetElement = element ?? activeElement;\n if (!targetElement || activeElement !== targetElement) {\n return;\n }\n\n if (this.currentMode === 'browser') {\n this.exitBrowser(targetElement);\n return;\n }\n\n this.exitOverlay(targetElement);\n }\n\n /**\n * Check whether any element is in fullscreen mode.\n */\n isFullscreen(): boolean {\n return this.isFullscreenState();\n }\n\n /**\n * Read-only signal of the active fullscreen element.\n */\n readonly activeElement = this.activeElementState.asReadonly();\n\n /**\n * Read-only signal of the fullscreen state.\n */\n readonly fullscreen = this.isFullscreenState.asReadonly();\n\n /**\n * Check whether the given element is the active fullscreen element.\n */\n isActive(element: HTMLElement): boolean {\n return this.activeElementState() === element && this.isFullscreenState();\n }\n\n /**\n * Returns the currently active fullscreen element, if any.\n */\n getActiveElement(): HTMLElement | null {\n return this.activeElementState();\n }\n\n /**\n * Returns the active fullscreen mode, if any.\n */\n getActiveMode(): AXFullScreenMode | null {\n return this.currentMode;\n }\n\n private enterOverlay(element: HTMLElement): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n try {\n this.storeOriginalStyles(element);\n this.originalParent = element.parentElement;\n this.zToken = this.zIndexService.acquire();\n\n const container = this.document.createElement('div');\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.width = '100vw';\n container.style.height = '100vh';\n container.style.zIndex = String(this.zToken.zIndex);\n container.style.backgroundColor = '#ffffff';\n container.style.overflow = 'auto';\n\n container.appendChild(element);\n\n element.style.position = 'relative';\n element.style.width = '100%';\n element.style.height = '100%';\n element.style.margin = '0';\n element.style.padding = '0';\n\n this.document.body.appendChild(container);\n this.document.body.style.overflow = 'hidden';\n\n this.fullscreenContainer = container;\n this.currentMode = 'overlay';\n this.activeElementState.set(element);\n this.isFullscreenState.set(true);\n } catch (error) {\n console.error('Error entering overlay fullscreen:', error);\n this.restoreOriginalStyles(element);\n this.cleanupOverlayResources();\n }\n }\n\n private exitOverlay(element: HTMLElement): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n try {\n this.document.body.style.overflow = '';\n\n if (this.fullscreenContainer) {\n if (element.parentElement === this.fullscreenContainer) {\n this.fullscreenContainer.removeChild(element);\n }\n\n if (this.originalParent?.isConnected && !this.originalParent.contains(element)) {\n this.originalParent.appendChild(element);\n }\n\n if (this.fullscreenContainer.parentNode === this.document.body) {\n this.document.body.removeChild(this.fullscreenContainer);\n }\n }\n\n this.restoreOriginalStyles(element);\n this.cleanupOverlayResources();\n this.clearActiveState();\n } catch (error) {\n console.error('Error exiting overlay fullscreen:', error);\n this.cleanupOverlayResources();\n this.clearActiveState();\n }\n }\n\n private enterBrowser(element: HTMLElement): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const requestFullscreen = this.getRequestFullscreen(element);\n if (!requestFullscreen) {\n console.error('Browser fullscreen API is not supported in this environment.');\n return;\n }\n\n void requestFullscreen()\n .then(() => {\n if (this.getFullscreenElement() !== element) {\n return;\n }\n\n this.currentMode = 'browser';\n this.activeElementState.set(element);\n this.isFullscreenState.set(true);\n })\n .catch((error: unknown) => {\n console.error('Error entering browser fullscreen:', error);\n });\n }\n\n private exitBrowser(element: HTMLElement): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const fullscreenElement = this.getFullscreenElement();\n if (fullscreenElement === element) {\n const exitFullscreen = this.getExitFullscreen();\n if (exitFullscreen) {\n void exitFullscreen().catch((error: unknown) => {\n console.error('Error exiting browser fullscreen:', error);\n });\n }\n }\n\n this.clearBrowserState();\n }\n\n private clearBrowserState(): void {\n this.clearActiveState();\n }\n\n private clearActiveState(): void {\n this.currentMode = null;\n this.activeElementState.set(null);\n this.isFullscreenState.set(false);\n }\n\n private cleanupOverlayResources(): void {\n this.fullscreenContainer = null;\n this.originalParent = null;\n this.zIndexService.release(this.zToken);\n this.zToken = null;\n this.originalStyles = {};\n }\n\n private getFullscreenElement(): Element | null {\n return this.document.fullscreenElement ?? this.document.webkitFullscreenElement ?? null;\n }\n\n private getRequestFullscreen(element: HTMLElement): (() => Promise<void>) | null {\n const target = element as FullscreenCapableElement;\n if (typeof target.requestFullscreen === 'function') {\n return () => target.requestFullscreen!();\n }\n if (typeof target.webkitRequestFullscreen === 'function') {\n return () => target.webkitRequestFullscreen!();\n }\n return null;\n }\n\n private getExitFullscreen(): (() => Promise<void>) | null {\n if (typeof this.document.exitFullscreen === 'function') {\n return () => this.document.exitFullscreen!();\n }\n if (typeof this.document.webkitExitFullscreen === 'function') {\n return () => this.document.webkitExitFullscreen!();\n }\n return null;\n }\n\n private storeOriginalStyles(element: HTMLElement): void {\n const computed = window.getComputedStyle(element);\n\n this.originalStyles = {\n position: computed.position,\n top: computed.top,\n left: computed.left,\n width: computed.width,\n height: computed.height,\n zIndex: computed.zIndex,\n backgroundColor: computed.backgroundColor,\n margin: computed.margin,\n padding: computed.padding,\n };\n }\n\n private restoreOriginalStyles(element: HTMLElement): void {\n Object.entries(this.originalStyles).forEach(([key, value]) => {\n if (value) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (element.style as any)[key] = value;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (element.style as any)[key] = '';\n }\n });\n\n this.originalStyles = {};\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":"acorex-core-full-screen.mjs","sources":["../../../../packages/core/full-screen/src/lib/full-screen.service.ts","../../../../packages/core/full-screen/src/acorex-core-full-screen.ts"],"sourcesContent":["import { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\n\n/**\n * Fullscreen implementation mode.\n * - `overlay`: CSS fixed container that covers the viewport.\n * - `browser`: Native Fullscreen API via `element.requestFullscreen()`.\n */\nexport type AXFullScreenMode = 'overlay' | 'browser';\n\ntype FullscreenCapableElement = HTMLElement & {\n requestFullscreen?: () => Promise<void>;\n webkitRequestFullscreen?: () => Promise<void>;\n};\n\ntype FullscreenCapableDocument = Document & {\n exitFullscreen?: () => Promise<void>;\n webkitExitFullscreen?: () => Promise<void>;\n fullscreenElement?: Element | null;\n webkitFullscreenElement?: Element | null;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXFullScreenService {\n private readonly zIndexService = inject(AXZIndexService);\n private readonly document = inject(DOCUMENT) as FullscreenCapableDocument;\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * Current fullscreen state.\n */\n private readonly isFullscreenState = signal<boolean>(false);\n\n /**\n * Active fullscreen element.\n */\n private readonly activeElementState = signal<HTMLElement | null>(null);\n\n /**\n * Active fullscreen mode.\n */\n private currentMode: AXFullScreenMode | null = null;\n\n /**\n * Original element styles to restore (overlay mode).\n */\n private originalStyles: Partial<CSSStyleDeclaration> = {};\n\n /**\n * Original parent element reference (overlay mode).\n */\n private originalParent: HTMLElement | null = null;\n\n /**\n * Original next sibling so overlay restore keeps DOM order (overlay mode).\n */\n private originalNextSibling: ChildNode | null = null;\n\n /**\n * Fullscreen container element (overlay mode).\n */\n private fullscreenContainer: HTMLElement | null = null;\n\n /**\n * Z-index token for overlay fullscreen.\n */\n private zToken: AXZToken | null = null;\n\n private readonly fullscreenChangeHandler = () => {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n if (this.currentMode !== 'browser') {\n return;\n }\n\n const activeElement = this.activeElementState();\n if (!activeElement) {\n return;\n }\n\n const fullscreenElement = this.getFullscreenElement();\n if (fullscreenElement !== activeElement) {\n this.clearBrowserState();\n }\n };\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.document.addEventListener('fullscreenchange', this.fullscreenChangeHandler);\n this.document.addEventListener('webkitfullscreenchange', this.fullscreenChangeHandler);\n\n this.destroyRef.onDestroy(() => {\n this.document.removeEventListener('fullscreenchange', this.fullscreenChangeHandler);\n this.document.removeEventListener('webkitfullscreenchange', this.fullscreenChangeHandler);\n\n const activeElement = this.activeElementState();\n if (activeElement) {\n this.exit(activeElement);\n }\n });\n }\n }\n\n /**\n * Toggle fullscreen state.\n */\n toggle(element: HTMLElement, mode: AXFullScreenMode = 'overlay'): void {\n if (this.isActive(element)) {\n this.exit(element);\n } else {\n this.enter(element, mode);\n }\n }\n\n /**\n * Enter fullscreen mode.\n */\n enter(element: HTMLElement, mode: AXFullScreenMode = 'overlay'): void {\n if (!element || this.isFullscreenState()) {\n return;\n }\n\n if (mode === 'browser') {\n this.enterBrowser(element);\n return;\n }\n\n this.enterOverlay(element);\n }\n\n /**\n * Exit fullscreen mode.\n */\n exit(element?: HTMLElement): void {\n if (!this.isFullscreenState()) {\n return;\n }\n\n const activeElement = this.activeElementState();\n const targetElement = element ?? activeElement;\n if (!targetElement || activeElement !== targetElement) {\n return;\n }\n\n if (this.currentMode === 'browser') {\n this.exitBrowser(targetElement);\n return;\n }\n\n this.exitOverlay(targetElement);\n }\n\n /**\n * Check whether any element is in fullscreen mode.\n */\n isFullscreen(): boolean {\n return this.isFullscreenState();\n }\n\n /**\n * Read-only signal of the active fullscreen element.\n */\n readonly activeElement = this.activeElementState.asReadonly();\n\n /**\n * Read-only signal of the fullscreen state.\n */\n readonly fullscreen = this.isFullscreenState.asReadonly();\n\n /**\n * Check whether the given element is the active fullscreen element.\n */\n isActive(element: HTMLElement): boolean {\n return this.activeElementState() === element && this.isFullscreenState();\n }\n\n /**\n * Returns the currently active fullscreen element, if any.\n */\n getActiveElement(): HTMLElement | null {\n return this.activeElementState();\n }\n\n /**\n * Returns the active fullscreen mode, if any.\n */\n getActiveMode(): AXFullScreenMode | null {\n return this.currentMode;\n }\n\n private enterOverlay(element: HTMLElement): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n try {\n this.storeOriginalStyles(element);\n this.originalParent = element.parentElement;\n this.originalNextSibling = element.nextSibling;\n this.zToken = this.zIndexService.acquire();\n\n const container = this.document.createElement('div');\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.width = '100vw';\n container.style.height = '100vh';\n container.style.zIndex = String(this.zToken.zIndex);\n container.style.backgroundColor = '#ffffff';\n container.style.overflow = 'auto';\n\n container.appendChild(element);\n\n element.style.position = 'relative';\n element.style.width = '100%';\n element.style.height = '100%';\n element.style.margin = '0';\n element.style.padding = '0';\n\n this.document.body.appendChild(container);\n this.document.body.style.overflow = 'hidden';\n\n this.fullscreenContainer = container;\n this.currentMode = 'overlay';\n this.activeElementState.set(element);\n this.isFullscreenState.set(true);\n } catch (error) {\n console.error('Error entering overlay fullscreen:', error);\n this.restoreOriginalStyles(element);\n this.cleanupOverlayResources();\n }\n }\n\n private exitOverlay(element: HTMLElement): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n try {\n this.document.body.style.overflow = '';\n\n if (this.fullscreenContainer) {\n if (element.parentElement === this.fullscreenContainer) {\n this.fullscreenContainer.removeChild(element);\n }\n\n if (this.originalParent?.isConnected && !this.originalParent.contains(element)) {\n this.restoreOriginalPosition(element);\n }\n\n if (this.fullscreenContainer.parentNode === this.document.body) {\n this.document.body.removeChild(this.fullscreenContainer);\n }\n }\n\n this.restoreOriginalStyles(element);\n this.cleanupOverlayResources();\n this.clearActiveState();\n } catch (error) {\n console.error('Error exiting overlay fullscreen:', error);\n this.cleanupOverlayResources();\n this.clearActiveState();\n }\n }\n\n private enterBrowser(element: HTMLElement): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const requestFullscreen = this.getRequestFullscreen(element);\n if (!requestFullscreen) {\n console.error('Browser fullscreen API is not supported in this environment.');\n return;\n }\n\n void requestFullscreen()\n .then(() => {\n if (this.getFullscreenElement() !== element) {\n return;\n }\n\n this.currentMode = 'browser';\n this.activeElementState.set(element);\n this.isFullscreenState.set(true);\n })\n .catch((error: unknown) => {\n console.error('Error entering browser fullscreen:', error);\n });\n }\n\n private exitBrowser(element: HTMLElement): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const fullscreenElement = this.getFullscreenElement();\n if (fullscreenElement === element) {\n const exitFullscreen = this.getExitFullscreen();\n if (exitFullscreen) {\n void exitFullscreen().catch((error: unknown) => {\n console.error('Error exiting browser fullscreen:', error);\n });\n }\n }\n\n this.clearBrowserState();\n }\n\n private clearBrowserState(): void {\n this.clearActiveState();\n }\n\n private clearActiveState(): void {\n this.currentMode = null;\n this.activeElementState.set(null);\n this.isFullscreenState.set(false);\n }\n\n private cleanupOverlayResources(): void {\n this.fullscreenContainer = null;\n this.originalParent = null;\n this.originalNextSibling = null;\n this.zIndexService.release(this.zToken);\n this.zToken = null;\n this.originalStyles = {};\n }\n\n private restoreOriginalPosition(element: HTMLElement): void {\n const parent = this.originalParent;\n if (!parent) {\n return;\n }\n\n const nextSibling = this.originalNextSibling;\n if (nextSibling && nextSibling.parentNode === parent) {\n parent.insertBefore(element, nextSibling);\n return;\n }\n\n parent.appendChild(element);\n }\n\n private getFullscreenElement(): Element | null {\n return this.document.fullscreenElement ?? this.document.webkitFullscreenElement ?? null;\n }\n\n private getRequestFullscreen(element: HTMLElement): (() => Promise<void>) | null {\n const target = element as FullscreenCapableElement;\n if (typeof target.requestFullscreen === 'function') {\n return () => target.requestFullscreen!();\n }\n if (typeof target.webkitRequestFullscreen === 'function') {\n return () => target.webkitRequestFullscreen!();\n }\n return null;\n }\n\n private getExitFullscreen(): (() => Promise<void>) | null {\n if (typeof this.document.exitFullscreen === 'function') {\n return () => this.document.exitFullscreen!();\n }\n if (typeof this.document.webkitExitFullscreen === 'function') {\n return () => this.document.webkitExitFullscreen!();\n }\n return null;\n }\n\n private storeOriginalStyles(element: HTMLElement): void {\n const computed = window.getComputedStyle(element);\n\n this.originalStyles = {\n position: computed.position,\n top: computed.top,\n left: computed.left,\n width: computed.width,\n height: computed.height,\n zIndex: computed.zIndex,\n backgroundColor: computed.backgroundColor,\n margin: computed.margin,\n padding: computed.padding,\n };\n }\n\n private restoreOriginalStyles(element: HTMLElement): void {\n Object.entries(this.originalStyles).forEach(([key, value]) => {\n if (value) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (element.style as any)[key] = value;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (element.style as any)[key] = '';\n }\n });\n\n this.originalStyles = {};\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,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/core",
3
- "version": "22.2.10",
3
+ "version": "22.2.12",
4
4
  "peerDependencies": {
5
5
  "lodash-es": ">=4.17.21",
6
6
  "memoizee": ">=0.4.15",
@@ -17,5 +17,61 @@ interface CountryItem {
17
17
  declare const COUNTRIES: CountryItem[];
18
18
  declare const COUNTRIES_FLAG_BASE64 = "data:image/png;base64,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\n";
19
19
 
20
- export { COUNTRIES, COUNTRIES_FLAG_BASE64 };
21
- export type { CountryItem };
20
+ /**
21
+ * Unicode Emoji group categories from UTS #51 emoji-test.txt.
22
+ * @see https://www.unicode.org/reports/tr51
23
+ */
24
+ type AXEmojiCategory = 'smileys-emotion' | 'people-body' | 'component' | 'animals-nature' | 'food-drink' | 'travel-places' | 'activities' | 'objects' | 'symbols' | 'flags';
25
+ /**
26
+ * Emoji metadata entry sourced from Unicode Emoji RGI data (UTS #51)
27
+ * with CLDR English annotations.
28
+ */
29
+ interface AXEmoji {
30
+ /** CLDR English short name (type="tts") or Unicode emoji name. */
31
+ name: string;
32
+ /** The rendered Unicode emoji sequence. */
33
+ unicode: string;
34
+ /** Stable emoji identifier (Unicode code point sequence, hyphen-separated). */
35
+ code: string;
36
+ /** Unicode emoji group category. */
37
+ category: AXEmojiCategory;
38
+ /** CLDR English search keywords. */
39
+ keywords: string[];
40
+ }
41
+ /** Virtual picker category for recently used emojis. */
42
+ declare const AX_EMOJI_PICKER_CATEGORY_RECENT = "recent";
43
+ /** Picker tab identifiers including the virtual recent category. */
44
+ type AXEmojiPickerCategoryId = typeof AX_EMOJI_PICKER_CATEGORY_RECENT | AXEmojiCategory;
45
+ /** Metadata for an emoji picker category tab. */
46
+ interface AXEmojiCategoryMeta {
47
+ /** Category identifier. */
48
+ readonly id: AXEmojiPickerCategoryId;
49
+ /** Human-readable category label. */
50
+ readonly label: string;
51
+ /** Unicode character shown as the category tab icon. */
52
+ readonly iconUnicode: string;
53
+ }
54
+ /**
55
+ * Emoji picker category tabs in display order.
56
+ * Excludes the `component` Unicode group, which is not shown in the picker UI.
57
+ */
58
+ declare const AX_EMOJI_CATEGORIES: readonly AXEmojiCategoryMeta[];
59
+
60
+ declare const AX_EMOJIS: AXEmoji[];
61
+
62
+ /**
63
+ * Curated people & body emoji codes for the picker UI.
64
+ * Default skin tone only — excludes skin-tone variants and ZWJ profession/family sequences.
65
+ */
66
+ declare const AX_EMOJI_PICKER_PEOPLE_BODY_CODES: readonly string[];
67
+ /** Whether a people-body emoji code is included in the picker curated set. */
68
+ declare function isPickerPeopleBodyEmoji(code: string): boolean;
69
+
70
+ /**
71
+ * Emoji dataset for picker UIs.
72
+ * Uses the full Unicode catalog except a curated people-body subset.
73
+ */
74
+ declare const AX_EMOJIS_FOR_PICKER: readonly AXEmoji[];
75
+
76
+ export { AX_EMOJIS, AX_EMOJIS_FOR_PICKER, AX_EMOJI_CATEGORIES, AX_EMOJI_PICKER_CATEGORY_RECENT, AX_EMOJI_PICKER_PEOPLE_BODY_CODES, COUNTRIES, COUNTRIES_FLAG_BASE64, isPickerPeopleBodyEmoji };
77
+ export type { AXEmoji, AXEmojiCategory, AXEmojiCategoryMeta, AXEmojiPickerCategoryId, CountryItem };
@@ -31,6 +31,10 @@ declare class AXFullScreenService {
31
31
  * Original parent element reference (overlay mode).
32
32
  */
33
33
  private originalParent;
34
+ /**
35
+ * Original next sibling so overlay restore keeps DOM order (overlay mode).
36
+ */
37
+ private originalNextSibling;
34
38
  /**
35
39
  * Fullscreen container element (overlay mode).
36
40
  */
@@ -84,6 +88,7 @@ declare class AXFullScreenService {
84
88
  private clearBrowserState;
85
89
  private clearActiveState;
86
90
  private cleanupOverlayResources;
91
+ private restoreOriginalPosition;
87
92
  private getFullscreenElement;
88
93
  private getRequestFullscreen;
89
94
  private getExitFullscreen;