{
  "name": "slex-logic-profile",
  "packageName": "slexkit",
  "version": "0.4.0",
  "profileVersion": "0.1",
  "schemaVersion": "2026-06",
  "protocolVersion": "0.1",
  "positioning": "Slex is a Markdown-native logic-bearing UI artifact: component structure is declarative, while local state and interaction logic are expressed through a constrained JavaScript expression profile.",
  "sourceFormat": {
    "fenceLanguage": "slex",
    "acceptedForms": [
      "Slex expression envelope",
      "bare component tree shorthand",
      "state-only envelope"
    ],
    "plainJsonOnly": false
  },
  "readPipes": {
    "match": "Component prop keys beginning with '$', excluding structural directives.",
    "valueType": "string",
    "semantics": "Evaluated as JavaScript expressions with access to the Slex expression context."
  },
  "writePipes": {
    "match": "Component prop keys beginning with 'on'.",
    "valueType": "string",
    "semantics": "Executed as JavaScript statements. $event contains the emitted event data."
  },
  "structuralDirectives": {
    "$if": {
      "valueType": "string",
      "semantics": "Controls component existence."
    },
    "$for": {
      "valueType": "string",
      "semantics": "Iterates over array-like values."
    },
    "$key": {
      "valueType": "string",
      "semantics": "Provides the keyed reconciliation strategy for $for."
    }
  },
  "expressionContext": [
    {
      "name": "g",
      "scope": "always",
      "summary": "Reactive state proxy."
    },
    {
      "name": "std",
      "scope": "always",
      "summary": "Pure deterministic SlexKit standard library."
    },
    {
      "name": "api",
      "scope": "host-injected",
      "summary": "Host or secure runtime capability object."
    },
    {
      "name": "$event",
      "scope": "event handlers",
      "summary": "Event payload for on* handlers."
    },
    {
      "name": "$item",
      "scope": "$for",
      "summary": "Current array item."
    },
    {
      "name": "$index",
      "scope": "$for",
      "summary": "Current item index."
    },
    {
      "name": "$key",
      "scope": "$for",
      "summary": "Current item key."
    }
  ],
  "reservedContextNames": [
    "g",
    "std",
    "api",
    "$event",
    "$item",
    "$index",
    "$key"
  ],
  "componentState": "Named components expose state according to their component catalog state mode: value, checked, enabled, readable, or none.",
  "secureMode": {
    "nativeCapabilitiesDenied": [
      "fetch",
      "XMLHttpRequest",
      "WebSocket",
      "setTimeout",
      "setInterval",
      "requestAnimationFrame"
    ],
    "policyGatedApi": [
      "api.get",
      "api.post",
      "api.fetch",
      "api.setTimeout",
      "api.clearTimeout",
      "api.setInterval",
      "api.clearInterval",
      "api.raf",
      "api.cancelRaf",
      "api.createCanvas",
      "api.getCanvasContext",
      "api.onDispose",
      "api.now",
      "api.isTimeoutError",
      "api.isNetworkError",
      "api.isPolicyError",
      "api.errorMessage"
    ],
    "guidance": "Use policy-gated api.* capabilities in secure mode; do not call native browser capabilities directly."
  },
  "diagnostics": [
    "unsupported_protocol",
    "invalid_component_key",
    "invalid_directive_type",
    "unknown_component",
    "unknown_prop",
    "unknown_std_member",
    "unknown_api_member",
    "native_secure_capability",
    "reserved_context_shadowing"
  ]
}
