{"version":3,"file":"visibility.mjs","names":[],"sources":["../../src/expression/visibility.ts"],"sourcesContent":["import {createExpression, findGlobalStateRefs} from './index';\nimport {StyleExpression, type GlobalProperties, type StylePropertySpecification} from '../index';\nimport {type VisibilitySpecification} from '../types.g';\n\nconst visibilitySpec: StylePropertySpecification = {\n type: 'enum',\n 'property-type': 'data-constant',\n expression: {\n interpolated: false,\n parameters: ['global-state']\n },\n values: {visible: {}, none: {}},\n transition: false,\n default: 'visible'\n};\n\nexport interface VisibilityExpression {\n /**\n * Evaluates the visibility expression and returns either 'visible' or 'none'.\n */\n evaluate: () => 'visible' | 'none';\n /**\n * Updates the visibility specification.\n */\n setValue: (visibility: VisibilitySpecification) => void;\n /**\n * Returns the set of global state properties referenced by the expression.\n */\n getGlobalStateRefs: () => Set;\n}\n\nclass VisibilityExpressionClass implements VisibilityExpression {\n private _rootKey: string;\n private _globalState: Record;\n private _globalStateRefs: Set;\n private _literalValue: 'visible' | 'none' | undefined;\n private _compiledValue: StyleExpression;\n\n constructor(\n visibility: VisibilitySpecification,\n rootKey: string,\n globalState: Record\n ) {\n this._rootKey = rootKey;\n this._globalState = globalState;\n this.setValue(visibility);\n }\n\n evaluate(): 'visible' | 'none' {\n return this._literalValue ?? this._compiledValue.evaluate({} as GlobalProperties);\n }\n\n setValue(visibility: VisibilitySpecification) {\n if (\n visibility === null ||\n visibility === undefined ||\n visibility === 'visible' ||\n visibility === 'none'\n ) {\n this._literalValue = visibility === 'none' ? 'none' : 'visible';\n this._compiledValue = undefined;\n this._globalStateRefs = new Set();\n return;\n }\n const compiled = createExpression(\n visibility,\n this._rootKey,\n visibilitySpec,\n this._globalState\n );\n if (compiled.result === 'error') {\n this._literalValue = 'visible';\n this._compiledValue = undefined;\n throw new Error(compiled.value.map((err) => `${err.key}: ${err.message}`).join(', '));\n }\n this._literalValue = undefined;\n this._compiledValue = compiled.value;\n this._globalStateRefs = findGlobalStateRefs(compiled.value.expression);\n }\n\n getGlobalStateRefs() {\n return this._globalStateRefs;\n }\n}\n\n/**\n * Creates a visibility expression from a visibility specification.\n * @param visibility - the visibility specification, literal or expression\n * @param rootKey - location of the visibility value in the style JSON\n * (e.g. `layers[3].layout.visibility`), used to prefix runtime warnings\n * @param globalState - the global state object\n * @returns visibility expression object\n */\nexport default function createVisibility(\n visibility: VisibilitySpecification,\n rootKey: string,\n globalState: Record\n): VisibilityExpression {\n return new VisibilityExpressionClass(visibility, rootKey, globalState);\n}\n"],"mappings":";;AAIA,MAAM,iBAA6C;CAC/C,MAAM;CACN,iBAAiB;CACjB,YAAY;EACR,cAAc;EACd,YAAY,CAAC,cAAc;CAC/B;CACA,QAAQ;EAAC,SAAS,CAAC;EAAG,MAAM,CAAC;CAAC;CAC9B,YAAY;CACZ,SAAS;AACb;AAiBA,IAAM,4BAAN,MAAgE;CAO5D,YACI,YACA,SACA,aACF;EACE,KAAK,WAAW;EAChB,KAAK,eAAe;EACpB,KAAK,SAAS,UAAU;CAC5B;CAEA,WAA+B;EAC3B,OAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS,CAAC,CAAqB;CACpF;CAEA,SAAS,YAAqC;EAC1C,IACI,eAAe,QACf,eAAe,KAAA,KACf,eAAe,aACf,eAAe,QACjB;GACE,KAAK,gBAAgB,eAAe,SAAS,SAAS;GACtD,KAAK,iBAAiB,KAAA;GACtB,KAAK,mCAAmB,IAAI,IAAY;GACxC;EACJ;EACA,MAAM,WAAW,iBACb,YACA,KAAK,UACL,gBACA,KAAK,YACT;EACA,IAAI,SAAS,WAAW,SAAS;GAC7B,KAAK,gBAAgB;GACrB,KAAK,iBAAiB,KAAA;GACtB,MAAM,IAAI,MAAM,SAAS,MAAM,KAAK,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC;EACxF;EACA,KAAK,gBAAgB,KAAA;EACrB,KAAK,iBAAiB,SAAS;EAC/B,KAAK,mBAAmB,oBAAoB,SAAS,MAAM,UAAU;CACzE;CAEA,qBAAqB;EACjB,OAAO,KAAK;CAChB;AACJ;;;;;;;;;AAUA,SAAwB,iBACpB,YACA,SACA,aACoB;CACpB,OAAO,IAAI,0BAA0B,YAAY,SAAS,WAAW;AACzE"}