# ivyforms/1.1/frontend/src/composables/useProAccess.ts

The Innovative Form Builder – IvyForms, version 1.1. 59 lines.

- Page: https://pluginprobe.com/plugins/ivyforms/1.1/code/frontend/src/composables/useProAccess.ts
- Raw: https://pluginprobe.com/plugins/ivyforms/1.1/raw/frontend/src/composables/useProAccess.ts
- Modified: 2026-06-08T12:18:46+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/ivyforms/1.1/code/frontend/src/composables/useProAccess.ts#L10-L20`.

```typescript
import { computed } from 'vue'
import { useProFeatures } from '@/composables/useProFeatures'

type LicenseInfo = {
  status?: string
  plan?: string
}

export function useProAccess() {
  const pro = useProFeatures()

  const isLoaded = computed(() => pro.loaded.value)
  const isLitePlan = computed(() => pro.plan.value === 'lite')

  const isProInstalled = computed(() => {
    if (typeof window === 'undefined') {
      return false
    }

    const scriptsLoaded =
      (window as { ivyFormsProScripts?: Record<string, string> }).ivyFormsProScripts !==
        undefined ||
      (window as { IvyFormsProScripts?: Record<string, string> }).IvyFormsProScripts !== undefined

    return scriptsLoaded && !!window.IvyForms?.pro
  })

  const isLicenseActive = computed(() => {
    if (!isProInstalled.value) {
      return false
    }

    const license = pro.license.value as LicenseInfo | null
    if (!license) {
      return false
    }

    return license.status === 'valid' && license.plan !== 'lite'
  })

  // Canonical Pro gate for feature access in the admin UI.
  const isProActivated = computed(
    () => isLoaded.value && isProInstalled.value && isLicenseActive.value && !isLitePlan.value,
  )

  const canUseFeature = (featureSlug: string) => {
    return isProActivated.value && pro.hasFeature(featureSlug)
  }

  return {
    isLoaded,
    isLitePlan,
    isProInstalled,
    isLicenseActive,
    isProActivated,
    canUseFeature,
  }
}

```
