{
  "version": "0.2.1",
  "components": {
    "data-import-wizard": {
      "entry": "data-import-wizard",
      "factory": "createDataImportWizard",
      "signature": "(host: HTMLElement, options: T.DataImportWizardOptions, events?: T.DataImportWizardEvents): Component<T.DataImportWizardOptions>",
      "optionsType": "T.DataImportWizardOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "RecordTypes",
          "type": "BluImportRecordType[]",
          "optional": true,
          "description": "Related CSV types; upload one file per type. Fields may be [] when configured."
        },
        {
          "name": "AllowSchemaEditing",
          "type": "boolean",
          "optional": true,
          "description": "Enables editing destination schema inside the live wizard."
        },
        {
          "name": "OutSystemsNulls",
          "type": "boolean",
          "optional": true,
          "description": "Opt-in OutSystems numeric/identifier literal null -> 0 conversion. False on web."
        },
        {
          "name": "Fields",
          "type": "BluImportField[]",
          "optional": false,
          "description": "Destination schema used for mapping and validation."
        },
        {
          "name": "MaxRows",
          "type": "number",
          "optional": true,
          "description": "Maximum data rows, from 1 to 100000. Default: 10000."
        },
        {
          "name": "MaxFileSizeMB",
          "type": "number",
          "optional": true,
          "description": "Maximum CSV file size in MB, from 1 to 50. Default: 5."
        },
        {
          "name": "Delimiter",
          "type": "string",
          "optional": true,
          "description": "Auto, Comma, Semicolon or Tab. Default: \"Auto\"."
        },
        {
          "name": "IsDisabled",
          "type": "boolean",
          "optional": true,
          "description": "Disables choosing, editing and submitting data. Default: False."
        },
        {
          "name": "ImportResultRequestId",
          "type": "string",
          "optional": true,
          "description": "Echo OnImportRequested.RequestId when the import finishes. Default: \"\"."
        },
        {
          "name": "ImportResultSuccess",
          "type": "boolean",
          "optional": true,
          "description": "True completes the import; False retains the file and corrections. Default: False."
        },
        {
          "name": "ImportResultMessage",
          "type": "string",
          "optional": true,
          "description": "Feedback for the matching import request. Default: \"\"."
        },
        {
          "name": "ImportResultErrorsJson",
          "type": "string",
          "optional": true,
          "description": "Optional BluImportError array returned by the server. Default: \"[]\"."
        },
        {
          "name": "ResetKey",
          "type": "string",
          "optional": true,
          "description": "Change to clear the file, mapping and review state when no import is running. Default: \"\"."
        },
        {
          "name": "AccessibleLabel",
          "type": "string",
          "optional": true,
          "description": "Accessible component name; empty uses the component default. Default: \"\"."
        },
        {
          "name": "ExtendedClass",
          "type": "string",
          "optional": true,
          "description": "Additional CSS classes on the Block root. Default: \"\"."
        }
      ],
      "events": [
        {
          "name": "FieldsChanged",
          "type": "(recordTypeKey: string, fields: T.BluImportField[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "BundleImportRequested",
          "type": "(requestId: string, bundle: T.BluImportBundle) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "ImportRequested",
          "type": "(requestId: string, rows: Record<string, string | number | boolean | null>[], fileName: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "StepChanged",
          "type": "(step: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<T.DataImportWizardOptions>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "BluImportBundle",
          "description": "",
          "declaration": "interface BluImportBundle {\n    Rekeyed: boolean;\n    RecordTypes: {\n        Key: string;\n        FileName: string;\n        Rows: Record<string, string | number | boolean | null>[];\n        KeyMap: {\n            OldKey: string | number;\n            NewKey: string | number;\n        }[];\n    }[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluImportField",
          "description": "",
          "declaration": "interface BluImportField {\n    /** Record type whose KeyField this foreign key references. */\n    ReferencesRecordType?: string;\n    /** Unique destination field key. */\n    Key: string;\n    /** Destination field label. */\n    Label: string;\n    /** Text, Integer, Decimal, Boolean, Date or DateTime. */\n    DataType: \"Text\" | \"Integer\" | \"Identifier\" | \"Decimal\" | \"Boolean\" | \"Date\" | \"DateTime\";\n    /** Rejects empty values. */\n    IsRequired?: boolean;\n    /** Rejects duplicate nonempty values within the submitted file. */\n    IsUnique?: boolean;\n    /** Used for an unmapped field or empty cell. */\n    DefaultValue?: string;\n    /** Help text shown during mapping. */\n    Description?: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluImportRecordType",
          "description": "Parse a CSV, map destination fields, correct values and submit validated rows to application-owned import logic.",
          "declaration": "interface BluImportRecordType {\n    Key: string;\n    Label: string;\n    Fields: BluImportField[];\n    KeyField?: string;\n    StartKey?: number;\n}",
          "source": "types.d.ts"
        }
      ]
    },
    "filter-builder": {
      "entry": "filter-builder",
      "factory": "createFilterBuilder",
      "signature": "(host: HTMLElement, options: T.FilterBuilderOptions, events?: T.FilterBuilderEvents): T.Component<T.FilterBuilderOptions>",
      "optionsType": "T.FilterBuilderOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "Fields",
          "type": "FilterField[]",
          "optional": false,
          "description": ""
        },
        {
          "name": "Filter",
          "type": "FilterGroup",
          "optional": true,
          "description": ""
        },
        {
          "name": "IsDisabled",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "MaxRules",
          "type": "number",
          "optional": true,
          "description": ""
        },
        {
          "name": "MaxGroupDepth",
          "type": "number",
          "optional": true,
          "description": ""
        }
      ],
      "events": [
        {
          "name": "Changed",
          "type": "(filter: T.FilterGroup) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Apply",
          "type": "(filter: T.FilterGroup) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<T.FilterBuilderOptions>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "FilterChoice",
          "description": "",
          "declaration": "interface FilterChoice {\n    Value: string;\n    Label: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "FilterField",
          "description": "",
          "declaration": "interface FilterField {\n    Key: string;\n    Label: string;\n    DataType: \"Text\" | \"Number\" | \"Boolean\" | \"Date\" | \"DateTime\" | \"Select\";\n    Options?: FilterChoice[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "FilterGroup",
          "description": "",
          "declaration": "interface FilterGroup {\n    combinator: \"and\" | \"or\";\n    rules: (FilterRule | FilterGroup)[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "FilterRule",
          "description": "",
          "declaration": "interface FilterRule {\n    field: string;\n    operator: \"eq\" | \"neq\" | \"contains\" | \"startsWith\" | \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"between\" | \"isEmpty\" | \"isNotEmpty\";\n    value?: FilterValue;\n    valueTo?: FilterValue;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "FilterValue",
          "description": "",
          "declaration": "type FilterValue = string | number | boolean | null;",
          "source": "types.d.ts"
        }
      ]
    },
    "form-builder": {
      "entry": "form-builder",
      "factory": "createFormBuilder",
      "signature": "(host: HTMLElement, options: FormBuilderOptions, events?: FormBuilderEvents): Component<FormBuilderOptions>",
      "optionsType": "FormBuilderOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "SaveResultRequestId",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultSuccess",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultMessage",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "FormId",
          "type": "string",
          "optional": true,
          "description": "Owning application's record ID. Defaults to Definition.Key; never fetches by itself."
        },
        {
          "name": "Definition",
          "type": "BluFormDefinition",
          "optional": false,
          "description": "Data loaded by the owning app for the current FormId."
        },
        {
          "name": "IsDisabled",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "ResetKey",
          "type": "string",
          "optional": true,
          "description": "Change to explicitly reload the definition and reset local state."
        },
        {
          "name": "AccessibleLabel",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "ExtendedClass",
          "type": "string",
          "optional": true,
          "description": ""
        }
      ],
      "events": [
        {
          "name": "DefinitionChanged",
          "type": "(definition: BluFormDefinition) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "DirtyChanged",
          "type": "(isDirty: boolean) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveRequested",
          "type": "(requestId: string, formId: string, definition: BluFormDefinition) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<FormBuilderOptions>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "BluFormAttachment",
          "description": "Durable storage reference returned by the application's upload endpoint. File bytes stay outside JSON.",
          "declaration": "interface BluFormAttachment {\n    Id: string;\n    Name: string;\n    Size: number;\n    Type: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormCondition",
          "description": "",
          "declaration": "interface BluFormCondition {\n    /** Key of an earlier input field. Forward references and cycles are rejected. */\n    FieldKey: string;\n    Operator: 'Equals' | 'NotEquals' | 'Contains' | 'IsEmpty' | 'IsNotEmpty';\n    /** Text representation; checkboxes use \"true\"/\"false\". Ignored for empty tests. */\n    Value?: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormDefinition",
          "description": "Pages are steps within one mounted component, never routes or OutSystems screens.",
          "declaration": "interface BluFormDefinition {\n    Version: 1;\n    Key: string;\n    Title: string;\n    Description?: string;\n    SubmitLabel?: string;\n    Pages: BluFormPage[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormField",
          "description": "",
          "declaration": "interface BluFormField {\n    /** Stable answer key, unique within the definition. */\n    Key: string;\n    Type: FormFieldType;\n    Label: string;\n    HelpText?: string;\n    Placeholder?: string;\n    /** HTML input-purpose token (for example name, email, organization or postal-code).\n     * Set when collecting the user's own details. Omit for unrelated information.\n     * Supported on Text, TextArea, Email, Number, Date, DateTime and Select fields. */\n    Autocomplete?: string;\n    Required?: boolean;\n    DefaultValue?: FormValue;\n    /** Required for Select, Radio and MultiSelect. */\n    Options?: BluFormOption[];\n    /** Number fields only. Omit either bound to leave that side unlimited. */\n    Min?: number;\n    Max?: number;\n    MaxLength?: number;\n    /** FileUpload: comma-separated extensions or MIME types. Empty allows any type. */\n    Accept?: string;\n    /** FileUpload: 1–20; defaults to 1. */\n    MaxFiles?: number;\n    /** FileUpload: 0.1–100 MB per file; defaults to 10. Enforce limits on the server too. */\n    MaxFileSizeMB?: number;\n    Visibility?: BluFormCondition;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormOption",
          "description": "",
          "declaration": "interface BluFormOption {\n    Value: string;\n    Label: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormPage",
          "description": "",
          "declaration": "interface BluFormPage {\n    Key: string;\n    Title: string;\n    Description?: string;\n    Sections: BluFormSection[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormSection",
          "description": "",
          "declaration": "interface BluFormSection {\n    Key: string;\n    Title?: string;\n    Description?: string;\n    Columns?: 1 | 2;\n    Fields: BluFormField[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "FormBase",
          "description": "",
          "declaration": "interface FormBase {\n    /** Owning application's record ID. Defaults to Definition.Key; never fetches by itself. */\n    FormId?: string;\n    /** Data loaded by the owning app for the current FormId. */\n    Definition: BluFormDefinition;\n    IsDisabled?: boolean;\n    /** Change to explicitly reload the definition and reset local state. */\n    ResetKey?: string;\n    AccessibleLabel?: string;\n    ExtendedClass?: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "FormFieldType",
          "description": "",
          "declaration": "type FormFieldType = 'Text' | 'TextArea' | 'Email' | 'Number' | 'Date' | 'DateTime' | 'Checkbox' | 'Select' | 'Radio' | 'MultiSelect' | 'FileUpload' | 'Heading' | 'Paragraph';",
          "source": "types.d.ts"
        },
        {
          "name": "FormValue",
          "description": "",
          "declaration": "type FormValue = string | number | boolean | string[] | BluFormAttachment[];",
          "source": "types.d.ts"
        }
      ]
    },
    "form-renderer": {
      "entry": "form-renderer",
      "factory": "createFormRenderer",
      "signature": "(host: HTMLElement, options: FormRendererOptions, events?: FormRendererEvents): Component<{ Values: FormValues; UploadHeaders: Record<string, string>; UploadUrl?: string; UploadWithCredentials?: boolean; IsReadOnly?: boolean; SubmitResultRequestId?: string; SubmitResultSuccess?: boolean; SubmitResultMessage?: string; FormId?: string; Definition: BluFormDefinition; IsDisabled?: boolean; ResetKey?: string; AccessibleLabel?: string; ExtendedClass?: string; }>",
      "optionsType": "FormRendererOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "UploadUrl",
          "type": "string",
          "optional": true,
          "description": "Consumer-owned HTTPS multipart endpoint; POST file, formId, fieldKey, clientKey.\nRespond with JSON {Id:\"durable-storage-id\"} after storage succeeds.\nNever embed endpoints or credentials in a stored definition."
        },
        {
          "name": "UploadHeaders",
          "type": "Record<string, string>",
          "optional": true,
          "description": "Per-request auth/CSRF headers. Default {}. Never persisted in the definition."
        },
        {
          "name": "UploadWithCredentials",
          "type": "boolean",
          "optional": true,
          "description": "Enables credentials for cross-origin uploads. Defaults to false."
        },
        {
          "name": "Values",
          "type": "FormValues",
          "optional": true,
          "description": "Initial/external answers for editing an existing response. Omitted values use field defaults."
        },
        {
          "name": "IsReadOnly",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "SubmitResultRequestId",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "SubmitResultSuccess",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "SubmitResultMessage",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "FormId",
          "type": "string",
          "optional": true,
          "description": "Owning application's record ID. Defaults to Definition.Key; never fetches by itself."
        },
        {
          "name": "Definition",
          "type": "BluFormDefinition",
          "optional": false,
          "description": "Data loaded by the owning app for the current FormId."
        },
        {
          "name": "IsDisabled",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "ResetKey",
          "type": "string",
          "optional": true,
          "description": "Change to explicitly reload the definition and reset local state."
        },
        {
          "name": "AccessibleLabel",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "ExtendedClass",
          "type": "string",
          "optional": true,
          "description": ""
        }
      ],
      "events": [
        {
          "name": "ValuesChanged",
          "type": "(values: FormValues, fieldKey: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "PageChanged",
          "type": "(pageKey: string, pageNumber: number) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "ValidationFailed",
          "type": "(errors: BluFormError[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "SubmitRequested",
          "type": "(requestId: string, formId: string, values: FormValues) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<{ Values: FormValues; UploadHeaders: Record<string, string>; UploadUrl?: string; UploadWithCredentials?: boolean; IsReadOnly?: boolean; SubmitResultRequestId?: string; SubmitResultSuccess?: boolean; SubmitResultMessage?: string; FormId?: string; Definition: BluFormDefinition; IsDisabled?: boolean; ResetKey?: string; AccessibleLabel?: string; ExtendedClass?: string; }>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [
        {
          "name": "validateFormValues",
          "signature": "(definition: BluFormDefinition, values: FormValues): BluFormError[]",
          "description": "Client-side UX validation. The receiving server must also validate submissions."
        },
        {
          "name": "createFormSubmission",
          "signature": "(formId: string, definition: BluFormDefinition, values: FormValues): BluFormSubmission",
          "description": "Returns JSON-ready output only; does not fetch, save or send email."
        },
        {
          "name": "formatFormResponseText",
          "signature": "(definition: BluFormDefinition, values: FormValues): string",
          "description": ""
        }
      ],
      "types": [
        {
          "name": "BluFormAttachment",
          "description": "Durable storage reference returned by the application's upload endpoint. File bytes stay outside JSON.",
          "declaration": "interface BluFormAttachment {\n    Id: string;\n    Name: string;\n    Size: number;\n    Type: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormCondition",
          "description": "",
          "declaration": "interface BluFormCondition {\n    /** Key of an earlier input field. Forward references and cycles are rejected. */\n    FieldKey: string;\n    Operator: 'Equals' | 'NotEquals' | 'Contains' | 'IsEmpty' | 'IsNotEmpty';\n    /** Text representation; checkboxes use \"true\"/\"false\". Ignored for empty tests. */\n    Value?: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormDefinition",
          "description": "Pages are steps within one mounted component, never routes or OutSystems screens.",
          "declaration": "interface BluFormDefinition {\n    Version: 1;\n    Key: string;\n    Title: string;\n    Description?: string;\n    SubmitLabel?: string;\n    Pages: BluFormPage[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormError",
          "description": "",
          "declaration": "interface BluFormError {\n    FieldKey: string;\n    PageKey: string;\n    Message: string;\n    Label: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormField",
          "description": "",
          "declaration": "interface BluFormField {\n    /** Stable answer key, unique within the definition. */\n    Key: string;\n    Type: FormFieldType;\n    Label: string;\n    HelpText?: string;\n    Placeholder?: string;\n    /** HTML input-purpose token (for example name, email, organization or postal-code).\n     * Set when collecting the user's own details. Omit for unrelated information.\n     * Supported on Text, TextArea, Email, Number, Date, DateTime and Select fields. */\n    Autocomplete?: string;\n    Required?: boolean;\n    DefaultValue?: FormValue;\n    /** Required for Select, Radio and MultiSelect. */\n    Options?: BluFormOption[];\n    /** Number fields only. Omit either bound to leave that side unlimited. */\n    Min?: number;\n    Max?: number;\n    MaxLength?: number;\n    /** FileUpload: comma-separated extensions or MIME types. Empty allows any type. */\n    Accept?: string;\n    /** FileUpload: 1–20; defaults to 1. */\n    MaxFiles?: number;\n    /** FileUpload: 0.1–100 MB per file; defaults to 10. Enforce limits on the server too. */\n    MaxFileSizeMB?: number;\n    Visibility?: BluFormCondition;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormOption",
          "description": "",
          "declaration": "interface BluFormOption {\n    Value: string;\n    Label: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormPage",
          "description": "",
          "declaration": "interface BluFormPage {\n    Key: string;\n    Title: string;\n    Description?: string;\n    Sections: BluFormSection[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormSection",
          "description": "",
          "declaration": "interface BluFormSection {\n    Key: string;\n    Title?: string;\n    Description?: string;\n    Columns?: 1 | 2;\n    Fields: BluFormField[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluFormSubmission",
          "description": "",
          "declaration": "interface BluFormSubmission {\n    FormId: string;\n    DefinitionKey: string;\n    SchemaVersion: 1;\n    Values: FormValues;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "FormBase",
          "description": "",
          "declaration": "interface FormBase {\n    /** Owning application's record ID. Defaults to Definition.Key; never fetches by itself. */\n    FormId?: string;\n    /** Data loaded by the owning app for the current FormId. */\n    Definition: BluFormDefinition;\n    IsDisabled?: boolean;\n    /** Change to explicitly reload the definition and reset local state. */\n    ResetKey?: string;\n    AccessibleLabel?: string;\n    ExtendedClass?: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "FormFieldType",
          "description": "",
          "declaration": "type FormFieldType = 'Text' | 'TextArea' | 'Email' | 'Number' | 'Date' | 'DateTime' | 'Checkbox' | 'Select' | 'Radio' | 'MultiSelect' | 'FileUpload' | 'Heading' | 'Paragraph';",
          "source": "types.d.ts"
        },
        {
          "name": "FormValue",
          "description": "",
          "declaration": "type FormValue = string | number | boolean | string[] | BluFormAttachment[];",
          "source": "types.d.ts"
        },
        {
          "name": "FormValues",
          "description": "",
          "declaration": "type FormValues = Record<string, FormValue>;",
          "source": "types.d.ts"
        }
      ]
    },
    "grid": {
      "entry": "grid",
      "factory": "createGrid",
      "signature": "<R extends object>(host: HTMLElement, options: GridOptions<R>): GridInstance<R>",
      "optionsType": "GridOptions<R>",
      "eventsPlacement": "options.Events",
      "options": [
        {
          "name": "Columns",
          "type": "GridColumn<R>[]",
          "optional": false,
          "description": ""
        },
        {
          "name": "Rows",
          "type": "R[]",
          "optional": true,
          "description": ""
        },
        {
          "name": "RowKeyField",
          "type": "GridField<R>",
          "optional": false,
          "description": ""
        },
        {
          "name": "Mode",
          "type": "\"Client\" | \"Infinite\"",
          "optional": true,
          "description": ""
        },
        {
          "name": "Config",
          "type": "GridConfig",
          "optional": true,
          "description": ""
        },
        {
          "name": "SearchText",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "Events",
          "type": "GridEvents<R>",
          "optional": true,
          "description": ""
        }
      ],
      "events": [
        {
          "name": "OnRowClick",
          "type": "(args_0: { GridId: string; Row: R; RowId: string; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnRowDoubleClick",
          "type": "(args_0: { GridId: string; Row: R; RowId: string; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnSelectionChanged",
          "type": "(args_0: { GridId: string; Rows: R[]; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnCellValueChanged",
          "type": "(args_0: { GridId: string; Row: R; RowId: string; Field: Extract<keyof R, string>; OldValue: unknown; NewValue: unknown; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnBatchValueChanged",
          "type": "(args_0: { GridId: string; Changes: { Row: R; RowId: string; Field: Extract<keyof R, string>; OldValue: unknown; NewValue: unknown; }[]; }) => void | Promise<void>",
          "optional": true,
          "description": "One notification for all actual changes made by applyRowValues."
        },
        {
          "name": "OnEditStateChanged",
          "type": "(args_0: GridEditState & { GridId: string; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnDataError",
          "type": "(args_0: { GridId: string; Code: string; Message: string; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnDataRequested",
          "type": "(args_0: GridDataRequest) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnRowAction",
          "type": "(args_0: { GridId: string; ActionKey: string; RowId: string; Row: R; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnBulkAction",
          "type": "(args_0: { GridId: string; ActionKey: string; RowIds: string[]; Rows: R[]; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "OnRowExpansionChanged",
          "type": "(args_0: { GridId: string; RowId: string; IsExpanded: boolean; Row: R; }) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": ""
        },
        {
          "name": "update",
          "type": "(patch: Partial<Pick<GridOptions<R>, \"Columns\" | \"Rows\" | \"Config\">>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "setSearch",
          "type": "(text: string) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "setData",
          "type": "(rows: R[]) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "getSelectedRows",
          "type": "() => R[]",
          "optional": false,
          "description": ""
        },
        {
          "name": "clearSelection",
          "type": "() => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "selectPage",
          "type": "() => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "applyRowValues",
          "type": "(ids: (string | number)[], values: Partial<R>, options?: { EmitCellEvents?: boolean; }) => GridEditState",
          "optional": false,
          "description": ""
        },
        {
          "name": "beginSave",
          "type": "() => Promise<GridSaveRequest<R>>",
          "optional": false,
          "description": ""
        },
        {
          "name": "completeSave",
          "type": "(token: string, rows: R[]) => R[]",
          "optional": false,
          "description": ""
        },
        {
          "name": "failSave",
          "type": "(token: string, errors?: GridSaveError[]) => GridEditState",
          "optional": false,
          "description": ""
        },
        {
          "name": "cancelChanges",
          "type": "() => Promise<GridEditState>",
          "optional": false,
          "description": ""
        },
        {
          "name": "getEditState",
          "type": "() => GridEditState",
          "optional": false,
          "description": ""
        },
        {
          "name": "completeDataRequest",
          "type": "(requestId: string, rows: R[], total: number) => boolean",
          "optional": false,
          "description": ""
        },
        {
          "name": "failDataRequest",
          "type": "(requestId: string, message: string) => boolean",
          "optional": false,
          "description": ""
        },
        {
          "name": "retryLoading",
          "type": "() => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "setColumnVisible",
          "type": "(field: Extract<keyof R, string>, visible: boolean) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "setRowExpanded",
          "type": "(rowId: string, expanded: boolean) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "exportCsv",
          "type": "(options?: { FileName?: string; OnlySelected?: boolean; }) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "GridAction",
          "description": "",
          "declaration": "interface GridAction {\n    Key: string;\n    Label: string;\n    Icon?: string;\n    IsDisabled?: boolean;\n    DisabledField?: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridChange",
          "description": "",
          "declaration": "interface GridChange {\n    RowId: string;\n    OriginalRowJson: string;\n    RowJson: string;\n    ChangedFieldsJson: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridColumn",
          "description": "",
          "declaration": "interface GridColumn<R extends object> {\n    Field: GridField<R>;\n    Header?: string;\n    Type?: \"Text\" | \"Number\" | \"Currency\" | \"Date\" | \"DateTime\" | \"Boolean\";\n    Width?: number;\n    MinWidth?: number;\n    Flex?: number;\n    IsSortable?: boolean;\n    IsFilterable?: boolean;\n    IsResizable?: boolean;\n    IsHidden?: boolean;\n    IsPinned?: boolean;\n    IsEditable?: boolean;\n    IsRequired?: boolean;\n    MaxLength?: number;\n    DecimalPlaces?: number;\n    HasMinValue?: boolean;\n    MinValue?: number;\n    HasMaxValue?: boolean;\n    MaxValue?: number;\n    SelectOptions?: {\n        Value: string;\n        Label: string;\n    }[];\n    StyleRules?: GridStyleRule[];\n    Renderer?: \"Badge\" | \"Progress\" | \"Action\";\n    ActionKey?: string;\n    ActionLabel?: string;\n    Color?: ComponentColor;\n    ColorField?: GridField<R>;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridConfig",
          "description": "",
          "declaration": "interface GridConfig {\n    Height?: string;\n    RowHeight?: number;\n    SelectionMode?: \"None\" | \"Single\" | \"Multiple\";\n    IsLoading?: boolean;\n    ExtendedClass?: string;\n    Locale?: string;\n    CurrencyCode?: string;\n    TimeZone?: string;\n    IsReadOnly?: boolean;\n    ShowEditToolbar?: boolean;\n    EnablePagination?: boolean;\n    PageSize?: number;\n    CacheBlockSize?: number;\n    MaxBlocksInCache?: number;\n    DataRequestTimeout?: number;\n    ShowFloatingFilters?: boolean;\n    EnableRowDetails?: boolean;\n    DetailHeight?: number;\n    DetailTitleField?: string;\n    RowActions?: GridAction[];\n    BulkActions?: GridAction[];\n    DetailFields?: {\n        Field: string;\n        Label?: string;\n    }[];\n    MaxFilterConditions?: number;\n    RowStyleRules?: GridStyleRule[];\n    SummaryMode?: \"None\" | \"Filtered\" | \"All\" | \"Server\";\n    SummaryLabel?: string;\n    SummaryLabelField?: string;\n    SummaryFields?: {\n        Field: string;\n        Operation: \"Sum\" | \"Average\" | \"Min\" | \"Max\" | \"Count\";\n    }[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridDataRequest",
          "description": "",
          "declaration": "interface GridDataRequest {\n    GridId: string;\n    RequestId: string;\n    StartRow: number;\n    EndRow: number;\n    Sort: {\n        Field: string;\n        Direction: \"asc\" | \"desc\";\n    }[];\n    Filter: Record<string, unknown>;\n    SearchText: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridEditState",
          "description": "",
          "declaration": "interface GridEditState {\n    HasChanges: boolean;\n    ChangedRowCount: number;\n    ChangedCellCount: number;\n    IsEditing: boolean;\n    IsSaving: boolean;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridField",
          "description": "",
          "declaration": "type GridField<R> = Extract<keyof R, string>;",
          "source": "types.d.ts"
        },
        {
          "name": "GridInstance",
          "description": "",
          "declaration": "interface GridInstance<R extends object> {\n    readonly element: HTMLElement;\n    update(patch: Partial<Pick<GridOptions<R>, \"Columns\" | \"Rows\" | \"Config\">>): void;\n    setSearch(text: string): void;\n    setData(rows: R[]): void;\n    getSelectedRows(): R[];\n    clearSelection(): void;\n    selectPage(): void;\n    applyRowValues(ids: (string | number)[], values: Partial<R>, options?: {\n        /** Defaults to true for compatibility. False emits only the batch change event. */\n        EmitCellEvents?: boolean;\n    }): GridEditState;\n    beginSave(): Promise<GridSaveRequest<R>>;\n    completeSave(token: string, rows: R[]): R[];\n    failSave(token: string, errors?: GridSaveError[]): GridEditState;\n    cancelChanges(): Promise<GridEditState>;\n    getEditState(): GridEditState;\n    completeDataRequest(requestId: string, rows: R[], total: number): boolean;\n    failDataRequest(requestId: string, message: string): boolean;\n    retryLoading(): void;\n    setColumnVisible(field: GridField<R>, visible: boolean): void;\n    setRowExpanded(rowId: string, expanded: boolean): void;\n    exportCsv(options?: {\n        FileName?: string;\n        OnlySelected?: boolean;\n    }): void;\n    destroy(): void;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridSaveError",
          "description": "",
          "declaration": "interface GridSaveError {\n    RowId: string;\n    Field: string;\n    Code: string;\n    Message: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridSaveRequest",
          "description": "",
          "declaration": "interface GridSaveRequest<R> {\n    SaveToken: string;\n    Rows: R[];\n    Changes: GridChange[];\n}",
          "source": "types.d.ts"
        },
        {
          "name": "GridStyleRule",
          "description": "",
          "declaration": "interface GridStyleRule {\n    Field?: string;\n    Operator: \"equals\" | \"notEqual\" | \"greaterThan\" | \"greaterThanOrEqual\" | \"lessThan\" | \"lessThanOrEqual\" | \"inRange\" | \"blank\" | \"notBlank\" | \"contains\" | \"notContains\" | \"startsWith\" | \"endsWith\";\n    Value?: string;\n    ValueTo?: string;\n    Color?: ComponentColor;\n}",
          "source": "types.d.ts"
        }
      ]
    },
    "image-annotator": {
      "entry": "image-annotator",
      "factory": "createImageAnnotator",
      "signature": "(host: HTMLElement, options: T.ImageAnnotatorOptions, events?: T.ImageAnnotatorEvents): Component<T.ImageAnnotatorOptions>",
      "optionsType": "T.ImageAnnotatorOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "Resources",
          "type": "BluResource[]",
          "optional": true,
          "description": ""
        },
        {
          "name": "CurrentUserKey",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "ImageUrl",
          "type": "string",
          "optional": true,
          "description": "HTTP(S), same-origin relative, blob or image data URL. Export needs a same-origin or CORS-enabled image. Default: \"\"."
        },
        {
          "name": "Annotations",
          "type": "BluImageAnnotation[]",
          "optional": false,
          "description": "Normalized annotation list; echo OnAnnotationsChanged.AnnotationsJson back."
        },
        {
          "name": "IsReadOnly",
          "type": "boolean",
          "optional": true,
          "description": "Allows viewing and zooming but prevents annotation changes. Default: False."
        },
        {
          "name": "ShowExport",
          "type": "boolean",
          "optional": true,
          "description": "Shows PNG export when the image is ready. Default: True."
        },
        {
          "name": "ExportFileName",
          "type": "string",
          "optional": true,
          "description": "Base filename for the PNG download. Default: \"annotated-image\"."
        },
        {
          "name": "ImageDescription",
          "type": "string",
          "optional": true,
          "description": "Accessible description of the source image. Default: \"Image to annotate\"."
        },
        {
          "name": "SaveResultRequestId",
          "type": "string",
          "optional": true,
          "description": "Echo the latest OnSaveRequested.RequestId after persistence finishes. Default: \"\"."
        },
        {
          "name": "SaveResultSuccess",
          "type": "boolean",
          "optional": true,
          "description": "True accepts the submitted snapshot; False retains editable changes. Default: False."
        },
        {
          "name": "SaveResultMessage",
          "type": "string",
          "optional": true,
          "description": "Success or failure feedback for the matching request. Default: \"\"."
        },
        {
          "name": "ResetKey",
          "type": "string",
          "optional": true,
          "description": "Change this value to reload the supplied data and discard local history when not saving. Default: \"\"."
        },
        {
          "name": "AccessibleLabel",
          "type": "string",
          "optional": true,
          "description": "Accessible component name; empty uses the component default. Default: \"\"."
        },
        {
          "name": "ExtendedClass",
          "type": "string",
          "optional": true,
          "description": "Additional CSS classes on the Block root. Default: \"\"."
        }
      ],
      "events": [
        {
          "name": "AnnotationsChanged",
          "type": "(annotations: T.BluImageAnnotation[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "SelectionChanged",
          "type": "(key: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveRequested",
          "type": "(requestId: string, annotations: T.BluImageAnnotation[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Exported",
          "type": "(dataUrl: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<T.ImageAnnotatorOptions>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "BluImageAnnotation",
          "description": "",
          "declaration": "interface BluImageAnnotation {\n    AuthorKey?: string;\n    AuthorName?: string;\n    AuthorImageUrl?: string;\n    /** Unique annotation key. */\n    Key: string;\n    /** Box, Arrow, Pin or Freehand. */\n    Kind: \"Box\" | \"Arrow\" | \"Pin\" | \"Freehand\";\n    /** Normalized horizontal start coordinate, from 0 to 1. */\n    X?: number;\n    /** Normalized vertical start coordinate, from 0 to 1. */\n    Y?: number;\n    /** Normalized horizontal extent; arrows may use a negative extent. */\n    Width?: number;\n    /** Normalized vertical extent; arrows may use a negative extent. */\n    Height?: number;\n    /** Freehand points as an array of {X,Y}, normalized from 0 to 1. */\n    PointsJson?: string;\n    /** Annotation comment, also available in the accessible list. */\n    Text?: string;\n    /** Shared ComponentColor code. */\n    Color?: ComponentColor;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluResource",
          "description": "",
          "declaration": "interface BluResource {\n    /** Stable application-owned person/resource key. */\n    Key: string;\n    Name: string;\n    ImageUrl?: string;\n    Color?: ComponentColor;\n    /** Role, title or position displayed next to the person. */\n    Position?: string;\n}",
          "source": "types.d.ts"
        }
      ]
    },
    "kanban": {
      "entry": "kanban",
      "factory": "createKanban",
      "signature": "(host: HTMLElement, options: T.KanbanOptions, events?: T.KanbanEvents): T.Component<T.KanbanOptions>",
      "optionsType": "T.KanbanOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "Resources",
          "type": "BluResource[]",
          "optional": true,
          "description": ""
        },
        {
          "name": "ShowFilters",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "Columns",
          "type": "KanbanColumn[]",
          "optional": false,
          "description": ""
        },
        {
          "name": "Cards",
          "type": "KanbanCard[]",
          "optional": false,
          "description": ""
        },
        {
          "name": "AllowReorder",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "AllowEditing",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "EnableBulkSave",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "ShowSearch",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "IsDisabled",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "EmptyText",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "ResetKey",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultRequestId",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultSuccess",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultMessage",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultCards",
          "type": "KanbanCard[]",
          "optional": true,
          "description": ""
        }
      ],
      "events": [
        {
          "name": "FiltersChanged",
          "type": "(resourceKey: string, cardType: string, projectTag: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "CardsChanged",
          "type": "(cards: T.KanbanCard[], key: string, from: string, to: string, position: number) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "CardClick",
          "type": "(key: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "DirtyChanged",
          "type": "(count: number, changes: T.KanbanChange[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveRequested",
          "type": "(requestId: string, cards: T.KanbanCard[], changes: T.KanbanChange[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<T.KanbanOptions>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "BluResource",
          "description": "",
          "declaration": "interface BluResource {\n    /** Stable application-owned person/resource key. */\n    Key: string;\n    Name: string;\n    ImageUrl?: string;\n    Color?: ComponentColor;\n    /** Role, title or position displayed next to the person. */\n    Position?: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "KanbanCard",
          "description": "",
          "declaration": "interface KanbanCard {\n    ResourceKey?: string;\n    CardType?: string;\n    ProjectTag?: string;\n    Milestone?: string;\n    EstimatePoints?: number;\n    EstimateHours?: number;\n    Key: string;\n    ColumnKey: string;\n    Title: string;\n    Description?: string;\n    Tag?: string;\n    Assignee?: string;\n    IsDisabled?: boolean;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "KanbanChange",
          "description": "",
          "declaration": "interface KanbanChange {\n    Key: string;\n    Kind: \"Created\" | \"Updated\";\n    Before: KanbanCard | null;\n    After: KanbanCard;\n    BeforePosition: number;\n    Position: number;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "KanbanColumn",
          "description": "",
          "declaration": "interface KanbanColumn {\n    Key: string;\n    Label: string;\n    Color?: ComponentColor;\n    WipLimit?: number;\n    IsDisabled?: boolean;\n}",
          "source": "types.d.ts"
        }
      ]
    },
    "matrix-editor": {
      "entry": "matrix-editor",
      "factory": "createMatrixEditor",
      "signature": "(host: HTMLElement, options: T.MatrixEditorOptions, events?: T.MatrixEditorEvents): Component<T.MatrixEditorOptions>",
      "optionsType": "T.MatrixEditorOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "Rows",
          "type": "BluMatrixRow[]",
          "optional": false,
          "description": "Ordered matrix row definitions."
        },
        {
          "name": "Columns",
          "type": "BluMatrixColumn[]",
          "optional": false,
          "description": "Ordered typed column definitions."
        },
        {
          "name": "Cells",
          "type": "BluMatrixCell[]",
          "optional": false,
          "description": "Sparse cell values; missing Boolean cells begin false and other missing cells begin empty."
        },
        {
          "name": "Options",
          "type": "BluMatrixOption[]",
          "optional": false,
          "description": "Choices for columns whose ValueType is Choice; may be empty."
        },
        {
          "name": "IsReadOnly",
          "type": "boolean",
          "optional": true,
          "description": "Disables all editing and bulk operations. Default: False."
        },
        {
          "name": "ShowBulkActions",
          "type": "boolean",
          "optional": true,
          "description": "Allows setting all editable Boolean values in a row or column. Default: True."
        },
        {
          "name": "SaveResultRequestId",
          "type": "string",
          "optional": true,
          "description": "Echo the latest OnSaveRequested.RequestId after persistence finishes. Default: \"\"."
        },
        {
          "name": "SaveResultSuccess",
          "type": "boolean",
          "optional": true,
          "description": "True accepts the submitted snapshot; False retains editable changes. Default: False."
        },
        {
          "name": "SaveResultMessage",
          "type": "string",
          "optional": true,
          "description": "Success or failure feedback for the matching request. Default: \"\"."
        },
        {
          "name": "ResetKey",
          "type": "string",
          "optional": true,
          "description": "Change this value to reload the supplied data and discard local history when not saving. Default: \"\"."
        },
        {
          "name": "AccessibleLabel",
          "type": "string",
          "optional": true,
          "description": "Accessible component name; empty uses the component default. Default: \"\"."
        },
        {
          "name": "ExtendedClass",
          "type": "string",
          "optional": true,
          "description": "Additional CSS classes on the Block root. Default: \"\"."
        }
      ],
      "events": [
        {
          "name": "CellsChanged",
          "type": "(cells: T.BluMatrixCell[], changes: T.BluMatrixCell[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveRequested",
          "type": "(requestId: string, changes: T.BluMatrixCell[], cells: T.BluMatrixCell[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<T.MatrixEditorOptions>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "BluMatrixCell",
          "description": "",
          "declaration": "interface BluMatrixCell {\n    /** Stable row key. */\n    RowKey: string;\n    /** Stable column key. */\n    ColumnKey: string;\n    /** Text representation of the cell value; Boolean values use true or false. */\n    Value: string;\n    /** Prevents editing this individual cell. */\n    IsReadOnly?: boolean;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluMatrixColumn",
          "description": "",
          "declaration": "interface BluMatrixColumn {\n    /** Unique stable column key. */\n    Key: string;\n    /** Visible column heading. */\n    Label: string;\n    /** Boolean, Text, Number or Choice. */\n    ValueType?: \"Boolean\" | \"Text\" | \"Number\" | \"Choice\";\n    /** Requires a nonempty value; Boolean false is valid. */\n    IsRequired?: boolean;\n    /** Prevents editing this column. */\n    IsReadOnly?: boolean;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluMatrixOption",
          "description": "",
          "declaration": "interface BluMatrixOption {\n    /** Choice column receiving this option. */\n    ColumnKey: string;\n    /** Stored choice value. */\n    Key: string;\n    /** Visible choice label. */\n    Label: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluMatrixRow",
          "description": "",
          "declaration": "interface BluMatrixRow {\n    /** Unique stable row key. */\n    Key: string;\n    /** Visible row heading. */\n    Label: string;\n    /** Optional row help text. */\n    Description?: string;\n    /** Prevents edits and bulk changes to this row. */\n    IsDisabled?: boolean;\n}",
          "source": "types.d.ts"
        }
      ]
    },
    "project-timeline": {
      "entry": "project-timeline",
      "factory": "createProjectTimeline",
      "signature": "(host: HTMLElement, options: ProjectTimelineOptions, events?: ProjectTimelineEvents): Component<ProjectTimelineOptions>",
      "optionsType": "ProjectTimelineOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "Resources",
          "type": "BluResource[]",
          "optional": true,
          "description": ""
        },
        {
          "name": "ShowFilters",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "ShowDescriptions",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "ResetKey",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "Items",
          "type": "BluProjectTimelineItem[]",
          "optional": false,
          "description": ""
        },
        {
          "name": "AccessibleLabel",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "RangeStart",
          "type": "string",
          "optional": true,
          "description": "Inclusive visible bounds; empty values derive the range from the tasks."
        },
        {
          "name": "RangeEnd",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "Locale",
          "type": "string",
          "optional": true,
          "description": "BCP 47 locale for display dates. Stored dates remain ISO."
        },
        {
          "name": "ShowToday",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "TodayDate",
          "type": "string",
          "optional": true,
          "description": "Optional fixed reference date. Defaults to the browser's local calendar date."
        },
        {
          "name": "ShowProgress",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "IsInteractive",
          "type": "boolean",
          "optional": true,
          "description": "Makes each task a button that emits ItemClick; does not edit task dates."
        },
        {
          "name": "IsCompact",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "IsAnimated",
          "type": "boolean",
          "optional": true,
          "description": "Finite bar entrance; reduced motion overrides this."
        },
        {
          "name": "IsLoading",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "EmptyText",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "ExtendedClass",
          "type": "string",
          "optional": true,
          "description": ""
        }
      ],
      "events": [
        {
          "name": "FiltersChanged",
          "type": "(resourceKey: string, startDate: string, endDate: string, search: string, kind: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "ItemClick",
          "type": "(key: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<ProjectTimelineOptions>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "BluProjectTimelineItem",
          "description": "Dates are inclusive ISO calendar dates, YYYY-MM-DD, without a timezone.",
          "declaration": "interface BluProjectTimelineItem {\n    ResourceKey?: string;\n    EstimateHours?: number;\n    ProjectTag?: string;\n    Key: string;\n    Label: string;\n    StartDate: string;\n    /** Defaults to StartDate. Milestones use only StartDate. */\n    EndDate?: string;\n    IsMilestone?: boolean;\n    /** Percentage, 0–100. */\n    Progress?: number;\n    Color?: ComponentColor;\n    Description?: string;\n    IsDisabled?: boolean;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluResource",
          "description": "",
          "declaration": "interface BluResource {\n    /** Stable application-owned person/resource key. */\n    Key: string;\n    Name: string;\n    ImageUrl?: string;\n    Color?: ComponentColor;\n    /** Role, title or position displayed next to the person. */\n    Position?: string;\n}",
          "source": "types.d.ts"
        }
      ]
    },
    "video-annotator": {
      "entry": "video-annotator",
      "factory": "createVideoAnnotator",
      "signature": "(host: HTMLElement, options: VideoAnnotatorOptions, events?: VideoAnnotatorEvents): Component<VideoAnnotatorOptions>",
      "optionsType": "VideoAnnotatorOptions",
      "eventsPlacement": "third argument",
      "options": [
        {
          "name": "SourceUrl",
          "type": "string",
          "optional": false,
          "description": ""
        },
        {
          "name": "PosterUrl",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "Title",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "CaptionsUrl",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "CaptionLanguage",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "CaptionLabel",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "Annotations",
          "type": "BluVideoAnnotation[]",
          "optional": false,
          "description": ""
        },
        {
          "name": "Resources",
          "type": "BluResource[]",
          "optional": true,
          "description": ""
        },
        {
          "name": "CurrentUserKey",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "IsReadOnly",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "ShowPopups",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "ExportFileName",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "ResetKey",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultRequestId",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultSuccess",
          "type": "boolean",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveResultMessage",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "AccessibleLabel",
          "type": "string",
          "optional": true,
          "description": ""
        },
        {
          "name": "ExtendedClass",
          "type": "string",
          "optional": true,
          "description": ""
        }
      ],
      "events": [
        {
          "name": "AnnotationsChanged",
          "type": "(annotations: BluVideoAnnotation[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "SelectionChanged",
          "type": "(key: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "PlaybackChanged",
          "type": "(seconds: number, state: \"Paused\" | \"Playing\") => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "SaveRequested",
          "type": "(requestId: string, annotations: BluVideoAnnotation[]) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Exported",
          "type": "(dataUrl: string, seconds: number) => void | Promise<void>",
          "optional": true,
          "description": ""
        },
        {
          "name": "Error",
          "type": "(message: string) => void | Promise<void>",
          "optional": true,
          "description": ""
        }
      ],
      "methods": [
        {
          "name": "element",
          "type": "HTMLElement",
          "optional": false,
          "description": "Root owned by this instance. Dispose before removing its host."
        },
        {
          "name": "update",
          "type": "(patch: Partial<VideoAnnotatorOptions>) => void",
          "optional": false,
          "description": ""
        },
        {
          "name": "destroy",
          "type": "() => void",
          "optional": false,
          "description": ""
        }
      ],
      "helpers": [],
      "types": [
        {
          "name": "BluImageAnnotation",
          "description": "",
          "declaration": "interface BluImageAnnotation {\n    AuthorKey?: string;\n    AuthorName?: string;\n    AuthorImageUrl?: string;\n    /** Unique annotation key. */\n    Key: string;\n    /** Box, Arrow, Pin or Freehand. */\n    Kind: \"Box\" | \"Arrow\" | \"Pin\" | \"Freehand\";\n    /** Normalized horizontal start coordinate, from 0 to 1. */\n    X?: number;\n    /** Normalized vertical start coordinate, from 0 to 1. */\n    Y?: number;\n    /** Normalized horizontal extent; arrows may use a negative extent. */\n    Width?: number;\n    /** Normalized vertical extent; arrows may use a negative extent. */\n    Height?: number;\n    /** Freehand points as an array of {X,Y}, normalized from 0 to 1. */\n    PointsJson?: string;\n    /** Annotation comment, also available in the accessible list. */\n    Text?: string;\n    /** Shared ComponentColor code. */\n    Color?: ComponentColor;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluResource",
          "description": "",
          "declaration": "interface BluResource {\n    /** Stable application-owned person/resource key. */\n    Key: string;\n    Name: string;\n    ImageUrl?: string;\n    Color?: ComponentColor;\n    /** Role, title or position displayed next to the person. */\n    Position?: string;\n}",
          "source": "types.d.ts"
        },
        {
          "name": "BluVideoAnnotation",
          "description": "Timestamped review marks. Times are seconds; intervals include start and exclude end.",
          "declaration": "interface BluVideoAnnotation extends BluImageAnnotation {\n    StartTime: number;\n    EndTime: number;\n}",
          "source": "types.d.ts"
        }
      ]
    }
  }
}
