{"version":3,"file":"edsis-angular-services-runtime.mjs","sources":["../../../library/angular/services/runtime/runtime-context.ts","../../../library/angular/services/runtime/runtime.config.ts","../../../library/angular/services/runtime/runtime-context.service.ts","../../../library/angular/services/runtime/native-host.service.ts","../../../library/angular/services/runtime/tablet-viewport.service.ts","../../../library/angular/services/runtime/runtime.providers.ts","../../../library/angular/services/runtime/edsis-angular-services-runtime.ts"],"sourcesContent":["export const EDSIS_RUNTIME_LEGACY_SCHEMA_VERSION = 1 as const;\nexport const EDSIS_RUNTIME_SCHEMA_VERSION = 2 as const;\n\nexport const EDSIS_RUNTIME_PLATFORMS = [\n  'windows',\n  'macos',\n  'linux',\n  'ios',\n  'android',\n  'web',\n] as const;\n\nexport const EDSIS_DEVICE_TYPES = ['browser', 'windows', 'macos', 'android', 'ipados'] as const;\n\nexport const EDSIS_RUNTIME_CAPABILITIES = [\n  'window-controls',\n  'window-layout',\n  'app-menu',\n  'tray',\n  'notification-badge',\n  'native-notification',\n  'dialog',\n  'clipboard-text',\n  'open-url',\n  'network-diagnostics',\n  'google-native-sign-in',\n] as const;\n\nexport type EdsisRuntimePlatform = (typeof EDSIS_RUNTIME_PLATFORMS)[number];\nexport type EdsisDeviceType = (typeof EDSIS_DEVICE_TYPES)[number];\nexport type EdsisRuntimeCapability = (typeof EDSIS_RUNTIME_CAPABILITIES)[number];\nexport type EdsisRuntimeEnvironment = 'production' | 'development' | 'local';\nexport type EdsisRuntimeHost = 'tauri' | 'browser';\nexport type EdsisDeviceFamily = 'desktop' | 'tablet' | 'responsive';\nexport type EdsisUiProfile = 'desktop' | 'tablet' | 'responsive';\n\ninterface EdsisRuntimeContextBase {\n  readonly host: EdsisRuntimeHost;\n  readonly environment: EdsisRuntimeEnvironment;\n  readonly platform: EdsisRuntimePlatform;\n  readonly deviceFamily: EdsisDeviceFamily;\n  readonly uiProfile: EdsisUiProfile;\n  readonly app: {\n    readonly identifier: string;\n    readonly name: string;\n    readonly version: string;\n    readonly arch: string;\n    readonly debug: boolean;\n  };\n  readonly capabilities: readonly EdsisRuntimeCapability[];\n}\n\n/** Legacy wire payload accepted during the schema V2 migration. */\nexport interface EdsisRuntimeContextV1 extends EdsisRuntimeContextBase {\n  readonly schemaVersion: 1;\n}\n\n/** Canonical runtime payload returned to Angular consumers. */\nexport interface EdsisRuntimeContextV2 extends EdsisRuntimeContextBase {\n  readonly schemaVersion: 2;\n  readonly deviceType: EdsisDeviceType;\n}\n\nexport type EdsisRuntimeContext = EdsisRuntimeContextV2;\nexport type EdsisRuntimeWireContext = EdsisRuntimeContextV1 | EdsisRuntimeContextV2;\n\nconst RUNTIME_HOSTS = new Set<EdsisRuntimeHost>(['tauri', 'browser']);\nconst RUNTIME_ENVIRONMENTS = new Set<EdsisRuntimeEnvironment>([\n  'production',\n  'development',\n  'local',\n]);\nconst RUNTIME_PLATFORMS = new Set<EdsisRuntimePlatform>(EDSIS_RUNTIME_PLATFORMS);\nconst DEVICE_TYPES = new Set<EdsisDeviceType>(EDSIS_DEVICE_TYPES);\nconst DEVICE_FAMILIES = new Set<EdsisDeviceFamily>(['desktop', 'tablet', 'responsive']);\nconst UI_PROFILES = new Set<EdsisUiProfile>(['desktop', 'tablet', 'responsive']);\nconst RUNTIME_CAPABILITIES = new Set<EdsisRuntimeCapability>(EDSIS_RUNTIME_CAPABILITIES);\n\nexport function isEdsisRuntimeContextV1(value: unknown): value is EdsisRuntimeContextV1 {\n  return (\n    isRuntimeContextBase(value, EDSIS_RUNTIME_LEGACY_SCHEMA_VERSION) &&\n    resolveDeviceType(value) !== null\n  );\n}\n\nexport function isEdsisRuntimeContextV2(value: unknown): value is EdsisRuntimeContextV2 {\n  if (!isRuntimeContextBase(value, EDSIS_RUNTIME_SCHEMA_VERSION)) {\n    return false;\n  }\n\n  const deviceType = value['deviceType'];\n  return isSetMember(DEVICE_TYPES, deviceType) && resolveDeviceType(value) === deviceType;\n}\n\n/** Validate either supported wire schema and normalize it to the immutable V2 contract. */\nexport function normalizeEdsisRuntimeContext(value: unknown): EdsisRuntimeContextV2 | null {\n  if (isEdsisRuntimeContextV2(value)) {\n    return freezeEdsisRuntimeContext(value);\n  }\n\n  if (!isEdsisRuntimeContextV1(value)) {\n    return null;\n  }\n\n  const deviceType = resolveDeviceType(value);\n  if (!deviceType) {\n    return null;\n  }\n\n  return freezeEdsisRuntimeContext({\n    ...value,\n    schemaVersion: EDSIS_RUNTIME_SCHEMA_VERSION,\n    deviceType,\n  });\n}\n\nexport function freezeEdsisRuntimeContext<T extends EdsisRuntimeWireContext>(context: T): T {\n  const capabilities = Object.freeze([...new Set(context.capabilities)]);\n  const app = Object.freeze({ ...context.app });\n\n  return Object.freeze({ ...context, app, capabilities }) as unknown as T;\n}\n\nexport function createBrowserRuntimeContext(\n  environment: EdsisRuntimeEnvironment,\n): EdsisRuntimeContextV2 {\n  return freezeEdsisRuntimeContext({\n    schemaVersion: EDSIS_RUNTIME_SCHEMA_VERSION,\n    host: 'browser',\n    environment,\n    platform: 'web',\n    deviceType: 'browser',\n    deviceFamily: 'responsive',\n    uiProfile: 'responsive',\n    app: {\n      identifier: 'web',\n      name: 'EDSIS Web',\n      version: '',\n      arch: 'web',\n      debug: environment !== 'production',\n    },\n    capabilities: [],\n  });\n}\n\nfunction isRuntimeContextBase(\n  value: unknown,\n  schemaVersion: typeof EDSIS_RUNTIME_LEGACY_SCHEMA_VERSION | typeof EDSIS_RUNTIME_SCHEMA_VERSION,\n): value is Record<string, unknown> & EdsisRuntimeContextBase {\n  if (!isRecord(value) || value['schemaVersion'] !== schemaVersion) {\n    return false;\n  }\n\n  const app = value['app'];\n  const capabilities = value['capabilities'];\n\n  return (\n    isSetMember(RUNTIME_HOSTS, value['host']) &&\n    isSetMember(RUNTIME_ENVIRONMENTS, value['environment']) &&\n    isSetMember(RUNTIME_PLATFORMS, value['platform']) &&\n    isSetMember(DEVICE_FAMILIES, value['deviceFamily']) &&\n    isSetMember(UI_PROFILES, value['uiProfile']) &&\n    isRecord(app) &&\n    isNonEmptyString(app['identifier']) &&\n    isNonEmptyString(app['name']) &&\n    typeof app['version'] === 'string' &&\n    isNonEmptyString(app['arch']) &&\n    typeof app['debug'] === 'boolean' &&\n    Array.isArray(capabilities) &&\n    capabilities.every((capability) => isSetMember(RUNTIME_CAPABILITIES, capability))\n  );\n}\n\nfunction resolveDeviceType(\n  context: Pick<EdsisRuntimeContextBase, 'host' | 'platform' | 'deviceFamily' | 'uiProfile'>,\n): EdsisDeviceType | null {\n  const { host, platform, deviceFamily, uiProfile } = context;\n\n  if (host === 'browser') {\n    return platform === 'web' && deviceFamily === 'responsive' && uiProfile === 'responsive'\n      ? 'browser'\n      : null;\n  }\n\n  if (platform === 'windows' && deviceFamily === 'desktop' && uiProfile === 'desktop') {\n    return 'windows';\n  }\n\n  if (platform === 'macos' && deviceFamily === 'desktop' && uiProfile === 'desktop') {\n    return 'macos';\n  }\n\n  if (platform === 'android' && deviceFamily === 'tablet' && uiProfile === 'tablet') {\n    return 'android';\n  }\n\n  if (platform === 'ios' && deviceFamily === 'tablet' && uiProfile === 'tablet') {\n    return 'ipados';\n  }\n\n  return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction isSetMember<T extends string>(values: ReadonlySet<T>, value: unknown): value is T {\n  return typeof value === 'string' && values.has(value as T);\n}\n","import { InjectionToken } from '@angular/core';\n\nimport type { EdsisRuntimeEnvironment } from './runtime-context';\n\nexport interface EdsisRuntimeConfig {\n  readonly browserEnvironment?: EdsisRuntimeEnvironment;\n  readonly eventTimeoutMs?: number;\n}\n\nexport interface ResolvedEdsisRuntimeConfig {\n  readonly browserEnvironment: EdsisRuntimeEnvironment;\n  readonly eventTimeoutMs: number;\n}\n\nexport const EDSIS_RUNTIME_CONFIG = new InjectionToken<ResolvedEdsisRuntimeConfig>(\n  'EDSIS_RUNTIME_CONFIG',\n);\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, inject, signal } from '@angular/core';\n\nimport {\n  createBrowserRuntimeContext,\n  freezeEdsisRuntimeContext,\n  normalizeEdsisRuntimeContext,\n  type EdsisRuntimeCapability,\n  type EdsisRuntimeContextV2,\n} from './runtime-context';\nimport { EDSIS_RUNTIME_CONFIG } from './runtime.config';\n\nexport const EDSIS_RUNTIME_READY_EVENT = 'edsis:runtime-ready' as const;\n\ndeclare global {\n  interface Window {\n    readonly EDSIS_RUNTIME?: unknown;\n  }\n}\n\n@Injectable()\nexport class RuntimeContextService {\n  private readonly documentRef = inject<Document>(DOCUMENT);\n  private readonly config = inject(EDSIS_RUNTIME_CONFIG);\n  private readonly contextState = signal<EdsisRuntimeContextV2>(\n    createBrowserRuntimeContext(this.config.browserEnvironment),\n  );\n  private initialization: Promise<void> | null = null;\n\n  readonly context = this.contextState.asReadonly();\n  readonly deviceType = computed(() => this.contextState().deviceType);\n  readonly isDesktopShell = computed(\n    () =>\n      this.contextState().host === 'tauri' &&\n      (this.deviceType() === 'windows' || this.deviceType() === 'macos'),\n  );\n  readonly isTabletShell = computed(\n    () =>\n      this.contextState().host === 'tauri' &&\n      (this.deviceType() === 'android' || this.deviceType() === 'ipados'),\n  );\n  readonly isIPadOS = computed(() => this.deviceType() === 'ipados');\n  readonly isAndroidTablet = computed(() => this.deviceType() === 'android');\n\n  initialize(): Promise<void> {\n    this.initialization ??= this.resolveContext();\n    return this.initialization;\n  }\n\n  supports(capability: EdsisRuntimeCapability): boolean {\n    return this.contextState().capabilities.includes(capability);\n  }\n\n  private async resolveContext(): Promise<void> {\n    const windowRef = this.documentRef.defaultView;\n\n    if (!windowRef) {\n      this.applyContext(createBrowserRuntimeContext(this.config.browserEnvironment));\n      return;\n    }\n\n    const hasNativeHost = hasTauriInternals(windowRef);\n    const initialContext = normalizeEdsisRuntimeContext(windowRef.EDSIS_RUNTIME);\n\n    if (\n      initialContext &&\n      ((hasNativeHost && initialContext.host === 'tauri') ||\n        (!hasNativeHost && initialContext.host === 'browser'))\n    ) {\n      this.applyContext(initialContext);\n      return;\n    }\n\n    if (!hasNativeHost) {\n      this.applyContext(createBrowserRuntimeContext(this.config.browserEnvironment));\n      return;\n    }\n\n    const eventContext = waitForRuntimeReadyEvent(windowRef, this.config.eventTimeoutMs);\n    const commandContext = await invokeRuntimeContext();\n    if (commandContext) eventContext.cancel();\n    const context = commandContext ?? (await eventContext.promise);\n\n    if (!context) {\n      throw new Error('Tauri runtime did not provide a valid native runtime context.');\n    }\n\n    this.applyContext(context);\n  }\n\n  private applyContext(context: EdsisRuntimeContextV2): void {\n    const frozenContext = freezeEdsisRuntimeContext(context);\n    this.contextState.set(frozenContext);\n\n    const root = this.documentRef.documentElement;\n    root.dataset['edsisHost'] = frozenContext.host;\n    root.dataset['edsisPlatform'] = frozenContext.platform;\n    root.dataset['edsisDevice'] = frozenContext.deviceFamily;\n    root.dataset['edsisDeviceType'] = frozenContext.deviceType;\n    root.dataset['edsisUiProfile'] = frozenContext.uiProfile;\n  }\n}\n\nasync function invokeRuntimeContext(): Promise<EdsisRuntimeContextV2 | null> {\n  try {\n    const { invoke } = await import('@tauri-apps/api/core');\n    const value = await invoke<unknown>('runtime_context');\n    const context = normalizeEdsisRuntimeContext(value);\n    return context?.host === 'tauri' ? context : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction hasTauriInternals(windowRef: Window): boolean {\n  const internals = Reflect.get(windowRef, '__TAURI_INTERNALS__');\n  return typeof internals === 'object' && internals !== null;\n}\n\nfunction waitForRuntimeReadyEvent(\n  windowRef: Window,\n  timeoutMs: number,\n): {\n  readonly promise: Promise<EdsisRuntimeContextV2 | null>;\n  readonly cancel: () => void;\n} {\n  let cancel = (): void => undefined;\n  const promise = new Promise<EdsisRuntimeContextV2 | null>((resolve) => {\n    let settled = false;\n    const finish = (context: EdsisRuntimeContextV2 | null): void => {\n      if (settled) return;\n      settled = true;\n      windowRef.removeEventListener(EDSIS_RUNTIME_READY_EVENT, onRuntimeReady);\n      windowRef.clearTimeout(timeoutId);\n      resolve(context);\n    };\n    const onRuntimeReady = (event: Event): void => {\n      const detail = 'detail' in event ? event.detail : null;\n      const context = normalizeEdsisRuntimeContext(detail);\n      finish(context?.host === 'tauri' ? context : null);\n    };\n    const timeoutId = windowRef.setTimeout(() => finish(null), timeoutMs);\n\n    windowRef.addEventListener(EDSIS_RUNTIME_READY_EVENT, onRuntimeReady, { once: true });\n    cancel = () => finish(null);\n  });\n\n  return { promise, cancel };\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport type { EdsisRuntimeCapability } from './runtime-context';\nimport { RuntimeContextService } from './runtime-context.service';\n\nexport type EdsisWindowControlAction = 'close' | 'minimize' | 'toggle-maximize';\n\n@Injectable()\nexport class NativeHostService {\n  private readonly runtime = inject(RuntimeContextService);\n\n  supports(capability: EdsisRuntimeCapability): boolean {\n    return this.runtime.context().host === 'tauri' && this.runtime.supports(capability);\n  }\n\n  async emitWindowControl(action: EdsisWindowControlAction): Promise<void> {\n    if (!this.supports('window-controls')) return;\n    const { emit } = await import('@tauri-apps/api/event');\n    await emit('edsis:window-control', action);\n  }\n\n  async startDragging(): Promise<void> {\n    if (!this.supports('window-controls')) return;\n\n    try {\n      const { getCurrentWindow } = await import('@tauri-apps/api/window');\n      await getCurrentWindow().startDragging();\n    } catch {\n      const { emit } = await import('@tauri-apps/api/event');\n      await emit('edsis:window-drag');\n    }\n  }\n\n  async setNotificationBadge(unreadCount: number): Promise<void> {\n    if (!this.supports('notification-badge')) return;\n    await invokeNotificationBadge(unreadCount);\n  }\n}\n\n/** Browser-safe compatibility helper for callers outside Angular injection. */\nexport async function setNativeNotificationBadge(unreadCount: number): Promise<void> {\n  if (typeof window === 'undefined' || !hasTauriInternals(window)) return;\n\n  try {\n    await invokeNotificationBadge(unreadCount);\n  } catch {\n    // Native integration is optional for browser consumers and older shells.\n  }\n}\n\nasync function invokeNotificationBadge(unreadCount: number): Promise<void> {\n  const { invoke } = await import('@tauri-apps/api/core');\n  await invoke('set_notification_badge', { unreadCount });\n}\n\nfunction hasTauriInternals(windowRef: Window): boolean {\n  const internals = Reflect.get(windowRef, '__TAURI_INTERNALS__');\n  return typeof internals === 'object' && internals !== null;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, inject, signal } from '@angular/core';\n\nexport const EDSIS_TABLET_MINIMUM_VIEWPORT_WIDTH = 600;\n\nexport type TabletViewportBlockReason = 'portrait' | 'too-narrow' | null;\n\n@Injectable()\nexport class TabletViewportService {\n  private readonly documentRef = inject<Document>(DOCUMENT);\n  private readonly widthState = signal(0);\n  private readonly heightState = signal(0);\n  private initialized = false;\n\n  readonly width = this.widthState.asReadonly();\n  readonly height = this.heightState.asReadonly();\n  readonly isLandscape = computed(() => this.widthState() >= this.heightState());\n  readonly meetsMinimumWidth = computed(\n    () => this.widthState() >= EDSIS_TABLET_MINIMUM_VIEWPORT_WIDTH,\n  );\n  readonly blockReason = computed<TabletViewportBlockReason>(() => {\n    if (!this.meetsMinimumWidth()) return 'too-narrow';\n    if (!this.isLandscape()) return 'portrait';\n    return null;\n  });\n  readonly isSupported = computed(() => this.blockReason() === null);\n\n  initialize(): void {\n    if (this.initialized) return;\n    this.initialized = true;\n\n    const windowRef = this.documentRef.defaultView;\n    if (!windowRef) return;\n\n    const update = (): void => {\n      this.widthState.set(windowRef.innerWidth);\n      this.heightState.set(windowRef.innerHeight);\n      this.documentRef.documentElement.dataset['edsisTabletViewport'] = this.isSupported()\n        ? 'supported'\n        : 'unsupported';\n    };\n\n    update();\n    windowRef.addEventListener('resize', update, { passive: true });\n    windowRef.addEventListener('orientationchange', update, { passive: true });\n  }\n}\n","import {\n  inject,\n  makeEnvironmentProviders,\n  provideAppInitializer,\n  type EnvironmentProviders,\n} from '@angular/core';\n\nimport {\n  EDSIS_RUNTIME_CONFIG,\n  type EdsisRuntimeConfig,\n  type ResolvedEdsisRuntimeConfig,\n} from './runtime.config';\nimport { NativeHostService } from './native-host.service';\nimport { RuntimeContextService } from './runtime-context.service';\nimport { TabletViewportService } from './tablet-viewport.service';\n\nexport function provideEdsisRuntime(config: EdsisRuntimeConfig = {}): EnvironmentProviders {\n  const resolvedConfig: ResolvedEdsisRuntimeConfig = {\n    browserEnvironment: config.browserEnvironment ?? 'production',\n    eventTimeoutMs: Math.max(0, config.eventTimeoutMs ?? 750),\n  };\n\n  return makeEnvironmentProviders([\n    { provide: EDSIS_RUNTIME_CONFIG, useValue: resolvedConfig },\n    RuntimeContextService,\n    NativeHostService,\n    TabletViewportService,\n    provideAppInitializer(() => {\n      const runtime = inject(RuntimeContextService);\n      const viewport = inject(TabletViewportService);\n      return runtime.initialize().then(() => viewport.initialize());\n    }),\n  ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["hasTauriInternals"],"mappings":"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"}