vue-lynx 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/plugin/dist/index.js +1 -1
- package/runtime/dist/index.js +3 -1
- package/runtime/dist/use-css-vars.d.ts +19 -0
- package/runtime/dist/use-css-vars.js +46 -0
- package/types/dist/elements/index.d.ts +16 -0
- package/types/dist/index.d.ts +1 -0
- package/types/dist/index.js +0 -0
- package/types/dist/volar-plugin.cjs +26 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-lynx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Vue 3 framework for building Lynx apps",
|
|
6
6
|
"keywords": [
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"node": ">=18"
|
|
98
98
|
},
|
|
99
99
|
"scripts": {
|
|
100
|
-
"build": "(cd internal && npx tsc -p tsconfig.build.json) && (cd runtime && npx rslib build) && (cd main-thread && npx rslib build) && (cd plugin && npx rslib build)",
|
|
101
|
-
"dev": "(cd internal && npx tsc -p tsconfig.build.json) && (cd runtime && npx rslib build --watch) & (cd main-thread && npx rslib build --watch) & (cd plugin && npx rslib build --watch)"
|
|
100
|
+
"build": "(cd internal && npx tsc -p tsconfig.build.json) && (cd runtime && npx rslib build) && (cd main-thread && npx rslib build) && (cd plugin && npx rslib build) && (cd types && npx rslib build)",
|
|
101
|
+
"dev": "(cd internal && npx tsc -p tsconfig.build.json) && (cd runtime && npx rslib build --watch) & (cd main-thread && npx rslib build --watch) & (cd plugin && npx rslib build --watch) & (cd types && npx rslib build --watch)"
|
|
102
102
|
}
|
|
103
103
|
}
|
package/plugin/dist/index.js
CHANGED
|
@@ -124,7 +124,7 @@ class VueCSSConfigPlugin {
|
|
|
124
124
|
const hooks = __WEBPACK_EXTERNAL_MODULE__lynx_js_template_webpack_plugin_e98d2f08__.LynxTemplatePlugin.getLynxTemplatePluginHooks(compilation);
|
|
125
125
|
hooks.beforeEncode.tap(PLUGIN_CSS_CONFIG, (args)=>{
|
|
126
126
|
const encodeData = args['encodeData'];
|
|
127
|
-
Object.assign(encodeData.
|
|
127
|
+
Object.assign(encodeData.sourceContent.config, this.compilerOptions);
|
|
128
128
|
return args;
|
|
129
129
|
});
|
|
130
130
|
});
|
package/runtime/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import * as __WEBPACK_EXTERNAL_MODULE__shadow_element_js_9ed96a55__ from "./shad
|
|
|
11
11
|
import * as __WEBPACK_EXTERNAL_MODULE__transform_to_worklet_js_80a0264f__ from "./transform-to-worklet.js";
|
|
12
12
|
import * as __WEBPACK_EXTERNAL_MODULE__Transition_js_7757bed1__ from "./Transition.js";
|
|
13
13
|
import * as __WEBPACK_EXTERNAL_MODULE__TransitionGroup_js_57fa4188__ from "./TransitionGroup.js";
|
|
14
|
+
import * as __WEBPACK_EXTERNAL_MODULE__use_css_vars_js_e5c8a1ca__ from "./use-css-vars.js";
|
|
14
15
|
const _renderer = (0, __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.createRenderer)(__WEBPACK_EXTERNAL_MODULE__node_ops_js_cd9e4a71__.nodeOps);
|
|
15
16
|
const _createApp = _renderer.createApp;
|
|
16
17
|
const _render = _renderer.render;
|
|
@@ -264,6 +265,7 @@ var __webpack_exports__transformToWorklet = __WEBPACK_EXTERNAL_MODULE__transform
|
|
|
264
265
|
var __webpack_exports__triggerRef = __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.triggerRef;
|
|
265
266
|
var __webpack_exports__unref = __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.unref;
|
|
266
267
|
var __webpack_exports__useAttrs = __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.useAttrs;
|
|
268
|
+
var __webpack_exports__useCssVars = __WEBPACK_EXTERNAL_MODULE__use_css_vars_js_e5c8a1ca__.useCssVars;
|
|
267
269
|
var __webpack_exports__useId = __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.useId;
|
|
268
270
|
var __webpack_exports__useMainThreadRef = __WEBPACK_EXTERNAL_MODULE__main_thread_ref_js_622e3a2a__.useMainThreadRef;
|
|
269
271
|
var __webpack_exports__useModel = __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.useModel;
|
|
@@ -280,4 +282,4 @@ var __webpack_exports__withDefaults = __WEBPACK_EXTERNAL_MODULE__vue_runtime_cor
|
|
|
280
282
|
var __webpack_exports__withDirectives = __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.withDirectives;
|
|
281
283
|
var __webpack_exports__withMemo = __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.withMemo;
|
|
282
284
|
var __webpack_exports__withScopeId = __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.withScopeId;
|
|
283
|
-
export { KeepAlive, Static, Teleport, _render, createApp, createStaticVNode, nextTick, onActivated, onDeactivated, onServerPrefetch, resetForTesting, useSSRContext, vModelCheckbox, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers, __webpack_exports__Comment as Comment, __webpack_exports__Fragment as Fragment, __webpack_exports__MainThreadRef as MainThreadRef, __webpack_exports__ShadowElement as ShadowElement, __webpack_exports__Suspense as Suspense, __webpack_exports__Text as Text, __webpack_exports__Transition as Transition, __webpack_exports__TransitionGroup as TransitionGroup, __webpack_exports__camelize as camelize, __webpack_exports__capitalize as capitalize, __webpack_exports__cloneVNode as cloneVNode, __webpack_exports__computed as computed, __webpack_exports__createBlock as createBlock, __webpack_exports__createCommentVNode as createCommentVNode, __webpack_exports__createElementBlock as createElementBlock, __webpack_exports__createElementVNode as createElementVNode, __webpack_exports__createPageRoot as createPageRoot, __webpack_exports__createSlots as createSlots, __webpack_exports__createTextVNode as createTextVNode, __webpack_exports__createVNode as createVNode, __webpack_exports__customRef as customRef, __webpack_exports__defineAsyncComponent as defineAsyncComponent, __webpack_exports__defineComponent as defineComponent, __webpack_exports__defineEmits as defineEmits, __webpack_exports__defineExpose as defineExpose, __webpack_exports__defineModel as defineModel, __webpack_exports__defineOptions as defineOptions, __webpack_exports__defineProps as defineProps, __webpack_exports__defineSlots as defineSlots, __webpack_exports__effectScope as effectScope, __webpack_exports__getCurrentInstance as getCurrentInstance, __webpack_exports__getCurrentScope as getCurrentScope, __webpack_exports__guardReactiveProps as guardReactiveProps, __webpack_exports__h as h, __webpack_exports__hasInjectionContext as hasInjectionContext, __webpack_exports__inject as inject, __webpack_exports__isProxy as isProxy, __webpack_exports__isReactive as isReactive, __webpack_exports__isReadonly as isReadonly, __webpack_exports__isRef as isRef, __webpack_exports__isShallow as isShallow, __webpack_exports__isVNode as isVNode, __webpack_exports__markRaw as markRaw, __webpack_exports__mergeProps as mergeProps, __webpack_exports__nodeOps as nodeOps, __webpack_exports__normalizeClass as normalizeClass, __webpack_exports__normalizeProps as normalizeProps, __webpack_exports__normalizeStyle as normalizeStyle, __webpack_exports__onBeforeMount as onBeforeMount, __webpack_exports__onBeforeUnmount as onBeforeUnmount, __webpack_exports__onBeforeUpdate as onBeforeUpdate, __webpack_exports__onErrorCaptured as onErrorCaptured, __webpack_exports__onMounted as onMounted, __webpack_exports__onRenderTracked as onRenderTracked, __webpack_exports__onRenderTriggered as onRenderTriggered, __webpack_exports__onScopeDispose as onScopeDispose, __webpack_exports__onUnmounted as onUnmounted, __webpack_exports__onUpdated as onUpdated, __webpack_exports__onWatcherCleanup as onWatcherCleanup, __webpack_exports__openBlock as openBlock, __webpack_exports__popScopeId as popScopeId, __webpack_exports__provide as provide, __webpack_exports__pushScopeId as pushScopeId, __webpack_exports__reactive as reactive, __webpack_exports__readonly as readonly, __webpack_exports__ref as ref, __webpack_exports__renderList as renderList, __webpack_exports__renderSlot as renderSlot, __webpack_exports__resolveComponent as resolveComponent, __webpack_exports__resolveDirective as resolveDirective, __webpack_exports__resolveDynamicComponent as resolveDynamicComponent, __webpack_exports__runOnBackground as runOnBackground, __webpack_exports__runOnMainThread as runOnMainThread, __webpack_exports__setBlockTracking as setBlockTracking, __webpack_exports__shallowReactive as shallowReactive, __webpack_exports__shallowReadonly as shallowReadonly, __webpack_exports__shallowRef as shallowRef, __webpack_exports__takeOps as takeOps, __webpack_exports__toDisplayString as toDisplayString, __webpack_exports__toHandlerKey as toHandlerKey, __webpack_exports__toHandlers as toHandlers, __webpack_exports__toRaw as toRaw, __webpack_exports__toRef as toRef, __webpack_exports__toRefs as toRefs, __webpack_exports__toValue as toValue, __webpack_exports__transformToWorklet as transformToWorklet, __webpack_exports__triggerRef as triggerRef, __webpack_exports__unref as unref, __webpack_exports__useAttrs as useAttrs, __webpack_exports__useId as useId, __webpack_exports__useMainThreadRef as useMainThreadRef, __webpack_exports__useModel as useModel, __webpack_exports__useSlots as useSlots, __webpack_exports__useTemplateRef as useTemplateRef, __webpack_exports__version as version, __webpack_exports__watch as watch, __webpack_exports__watchEffect as watchEffect, __webpack_exports__watchPostEffect as watchPostEffect, __webpack_exports__watchSyncEffect as watchSyncEffect, __webpack_exports__withAsyncContext as withAsyncContext, __webpack_exports__withCtx as withCtx, __webpack_exports__withDefaults as withDefaults, __webpack_exports__withDirectives as withDirectives, __webpack_exports__withMemo as withMemo, __webpack_exports__withScopeId as withScopeId };
|
|
285
|
+
export { KeepAlive, Static, Teleport, _render, createApp, createStaticVNode, nextTick, onActivated, onDeactivated, onServerPrefetch, resetForTesting, useSSRContext, vModelCheckbox, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers, __webpack_exports__Comment as Comment, __webpack_exports__Fragment as Fragment, __webpack_exports__MainThreadRef as MainThreadRef, __webpack_exports__ShadowElement as ShadowElement, __webpack_exports__Suspense as Suspense, __webpack_exports__Text as Text, __webpack_exports__Transition as Transition, __webpack_exports__TransitionGroup as TransitionGroup, __webpack_exports__camelize as camelize, __webpack_exports__capitalize as capitalize, __webpack_exports__cloneVNode as cloneVNode, __webpack_exports__computed as computed, __webpack_exports__createBlock as createBlock, __webpack_exports__createCommentVNode as createCommentVNode, __webpack_exports__createElementBlock as createElementBlock, __webpack_exports__createElementVNode as createElementVNode, __webpack_exports__createPageRoot as createPageRoot, __webpack_exports__createSlots as createSlots, __webpack_exports__createTextVNode as createTextVNode, __webpack_exports__createVNode as createVNode, __webpack_exports__customRef as customRef, __webpack_exports__defineAsyncComponent as defineAsyncComponent, __webpack_exports__defineComponent as defineComponent, __webpack_exports__defineEmits as defineEmits, __webpack_exports__defineExpose as defineExpose, __webpack_exports__defineModel as defineModel, __webpack_exports__defineOptions as defineOptions, __webpack_exports__defineProps as defineProps, __webpack_exports__defineSlots as defineSlots, __webpack_exports__effectScope as effectScope, __webpack_exports__getCurrentInstance as getCurrentInstance, __webpack_exports__getCurrentScope as getCurrentScope, __webpack_exports__guardReactiveProps as guardReactiveProps, __webpack_exports__h as h, __webpack_exports__hasInjectionContext as hasInjectionContext, __webpack_exports__inject as inject, __webpack_exports__isProxy as isProxy, __webpack_exports__isReactive as isReactive, __webpack_exports__isReadonly as isReadonly, __webpack_exports__isRef as isRef, __webpack_exports__isShallow as isShallow, __webpack_exports__isVNode as isVNode, __webpack_exports__markRaw as markRaw, __webpack_exports__mergeProps as mergeProps, __webpack_exports__nodeOps as nodeOps, __webpack_exports__normalizeClass as normalizeClass, __webpack_exports__normalizeProps as normalizeProps, __webpack_exports__normalizeStyle as normalizeStyle, __webpack_exports__onBeforeMount as onBeforeMount, __webpack_exports__onBeforeUnmount as onBeforeUnmount, __webpack_exports__onBeforeUpdate as onBeforeUpdate, __webpack_exports__onErrorCaptured as onErrorCaptured, __webpack_exports__onMounted as onMounted, __webpack_exports__onRenderTracked as onRenderTracked, __webpack_exports__onRenderTriggered as onRenderTriggered, __webpack_exports__onScopeDispose as onScopeDispose, __webpack_exports__onUnmounted as onUnmounted, __webpack_exports__onUpdated as onUpdated, __webpack_exports__onWatcherCleanup as onWatcherCleanup, __webpack_exports__openBlock as openBlock, __webpack_exports__popScopeId as popScopeId, __webpack_exports__provide as provide, __webpack_exports__pushScopeId as pushScopeId, __webpack_exports__reactive as reactive, __webpack_exports__readonly as readonly, __webpack_exports__ref as ref, __webpack_exports__renderList as renderList, __webpack_exports__renderSlot as renderSlot, __webpack_exports__resolveComponent as resolveComponent, __webpack_exports__resolveDirective as resolveDirective, __webpack_exports__resolveDynamicComponent as resolveDynamicComponent, __webpack_exports__runOnBackground as runOnBackground, __webpack_exports__runOnMainThread as runOnMainThread, __webpack_exports__setBlockTracking as setBlockTracking, __webpack_exports__shallowReactive as shallowReactive, __webpack_exports__shallowReadonly as shallowReadonly, __webpack_exports__shallowRef as shallowRef, __webpack_exports__takeOps as takeOps, __webpack_exports__toDisplayString as toDisplayString, __webpack_exports__toHandlerKey as toHandlerKey, __webpack_exports__toHandlers as toHandlers, __webpack_exports__toRaw as toRaw, __webpack_exports__toRef as toRef, __webpack_exports__toRefs as toRefs, __webpack_exports__toValue as toValue, __webpack_exports__transformToWorklet as transformToWorklet, __webpack_exports__triggerRef as triggerRef, __webpack_exports__unref as unref, __webpack_exports__useAttrs as useAttrs, __webpack_exports__useCssVars as useCssVars, __webpack_exports__useId as useId, __webpack_exports__useMainThreadRef as useMainThreadRef, __webpack_exports__useModel as useModel, __webpack_exports__useSlots as useSlots, __webpack_exports__useTemplateRef as useTemplateRef, __webpack_exports__version as version, __webpack_exports__watch as watch, __webpack_exports__watchEffect as watchEffect, __webpack_exports__watchPostEffect as watchPostEffect, __webpack_exports__watchSyncEffect as watchSyncEffect, __webpack_exports__withAsyncContext as withAsyncContext, __webpack_exports__withCtx as withCtx, __webpack_exports__withDefaults as withDefaults, __webpack_exports__withDirectives as withDirectives, __webpack_exports__withMemo as withMemo, __webpack_exports__withScopeId as withScopeId };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lynx-specific implementation of Vue's `useCssVars`.
|
|
3
|
+
*
|
|
4
|
+
* Vue's SFC compiler transforms `v-bind(expr)` inside a `<style>` block into:
|
|
5
|
+
* - CSS: `color: var(--v33993c7f)`
|
|
6
|
+
* - JS: `useCssVars(_ctx => ({ "v33993c7f": _ctx.textColor }))`
|
|
7
|
+
*
|
|
8
|
+
* The standard `@vue/runtime-dom` version uses DOM APIs (`el.style.setProperty`)
|
|
9
|
+
* which are unavailable in Lynx's Background Thread. This implementation
|
|
10
|
+
* instead merges the CSS variables into the element's inline style and sends
|
|
11
|
+
* them to the Main Thread via the ops pipeline.
|
|
12
|
+
*
|
|
13
|
+
* Requires `enableCSSInlineVariables: true` and `enableCSSInheritance: true`
|
|
14
|
+
* in `lynx.config.ts` so the Lynx engine propagates `--*` inline-style vars
|
|
15
|
+
* to descendant elements.
|
|
16
|
+
*
|
|
17
|
+
* @hidden
|
|
18
|
+
*/
|
|
19
|
+
export declare function useCssVars(getter: (ctx: unknown) => Record<string, string>): void;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__ from "@vue/runtime-core";
|
|
2
|
+
import * as __WEBPACK_EXTERNAL_MODULE__ops_js_e08da98b__ from "./ops.js";
|
|
3
|
+
import * as __WEBPACK_EXTERNAL_MODULE__flush_js_a3609ebe__ from "./flush.js";
|
|
4
|
+
import * as __WEBPACK_EXTERNAL_MODULE__shadow_element_js_9ed96a55__ from "./shadow-element.js";
|
|
5
|
+
const SF_ELEMENT = 1;
|
|
6
|
+
const SF_COMPONENT = 6;
|
|
7
|
+
const SF_ARRAY_CHILDREN = 16;
|
|
8
|
+
function applyVarsToEl(el, vars) {
|
|
9
|
+
const style = {
|
|
10
|
+
...el._style
|
|
11
|
+
};
|
|
12
|
+
for(const key in vars)style[`--${key}`] = vars[key];
|
|
13
|
+
const effective = el._vShowHidden ? {
|
|
14
|
+
...style,
|
|
15
|
+
display: 'none'
|
|
16
|
+
} : style;
|
|
17
|
+
(0, __WEBPACK_EXTERNAL_MODULE__ops_js_e08da98b__.pushOp)(__WEBPACK_EXTERNAL_MODULE__ops_js_e08da98b__.OP.SET_STYLE, el.id, effective);
|
|
18
|
+
(0, __WEBPACK_EXTERNAL_MODULE__flush_js_a3609ebe__.scheduleFlush)();
|
|
19
|
+
}
|
|
20
|
+
function applyVarsToVNode(vnode, vars) {
|
|
21
|
+
if (!vnode) return;
|
|
22
|
+
const { shapeFlag, el } = vnode;
|
|
23
|
+
if (shapeFlag & SF_ELEMENT) {
|
|
24
|
+
if (el instanceof __WEBPACK_EXTERNAL_MODULE__shadow_element_js_9ed96a55__.ShadowElement) applyVarsToEl(el, vars);
|
|
25
|
+
} else if (shapeFlag & SF_COMPONENT) {
|
|
26
|
+
if (vnode.component) applyVarsToVNode(vnode.component.subTree, vars);
|
|
27
|
+
} else if (vnode.type === __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.Fragment && shapeFlag & SF_ARRAY_CHILDREN) {
|
|
28
|
+
const children = vnode.children;
|
|
29
|
+
for (const child of children)applyVarsToVNode(child, vars);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function useCssVars(getter) {
|
|
33
|
+
const instance = (0, __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.getCurrentInstance)();
|
|
34
|
+
if (!instance) return;
|
|
35
|
+
const setVars = ()=>{
|
|
36
|
+
const vars = getter(instance.proxy);
|
|
37
|
+
applyVarsToVNode(instance.subTree, vars);
|
|
38
|
+
};
|
|
39
|
+
(0, __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.onMounted)(()=>{
|
|
40
|
+
(0, __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.watchPostEffect)(setVars);
|
|
41
|
+
});
|
|
42
|
+
(0, __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.onBeforeUpdate)(()=>{
|
|
43
|
+
(0, __WEBPACK_EXTERNAL_MODULE__vue_runtime_core_f9f3aead__.queuePostFlushCb)(setVars);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export { useCssVars };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DefineComponent } from "vue";
|
|
2
|
+
import type { IntrinsicElements } from '@lynx-js/types';
|
|
3
|
+
type ExtractBindAsOn<T> = {
|
|
4
|
+
[P in keyof T as P extends `bind${infer Rest}` ? `on${Capitalize<Rest>}` : never]: T[P];
|
|
5
|
+
};
|
|
6
|
+
type NonBindProps<T> = Omit<T, `bind${string}` | 'className'>;
|
|
7
|
+
type VueLynxProps<T> = ExtractBindAsOn<T> & NonBindProps<T>;
|
|
8
|
+
type VueLynxComponent<T> = DefineComponent<VueLynxProps<T>>;
|
|
9
|
+
export type VueLynxElements = {
|
|
10
|
+
[K in keyof IntrinsicElements]: VueLynxComponent<IntrinsicElements[K]>;
|
|
11
|
+
};
|
|
12
|
+
declare module "vue" {
|
|
13
|
+
interface GlobalComponents extends VueLynxElements {
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './elements/index.js';
|
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const nativeTags = [
|
|
2
|
+
'block',
|
|
3
|
+
'template',
|
|
4
|
+
'slot'
|
|
5
|
+
];
|
|
6
|
+
module.exports = [
|
|
7
|
+
({ vueCompilerOptions })=>{
|
|
8
|
+
vueCompilerOptions.nativeTags = nativeTags;
|
|
9
|
+
return {
|
|
10
|
+
version: 1
|
|
11
|
+
};
|
|
12
|
+
},
|
|
13
|
+
({ vueCompilerOptions })=>{
|
|
14
|
+
vueCompilerOptions.nativeTags = nativeTags;
|
|
15
|
+
return {
|
|
16
|
+
version: 2
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
()=>({
|
|
20
|
+
version: 2,
|
|
21
|
+
resolveTemplateCompilerOptions (options) {
|
|
22
|
+
options.isNativeTag = (tag)=>nativeTags.includes(tag);
|
|
23
|
+
return options;
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
];
|