vueless 0.0.596 → 0.0.598

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.
Files changed (48) hide show
  1. package/composables/useUI.ts +55 -37
  2. package/constants.js +1 -0
  3. package/package.json +1 -1
  4. package/types.ts +3 -2
  5. package/ui.button/UButton.vue +7 -48
  6. package/ui.button/config.ts +28 -4
  7. package/ui.button/storybook/stories.ts +2 -0
  8. package/ui.button/types.ts +0 -3
  9. package/utils/node/dynamicProps.js +27 -27
  10. package/utils/node/helper.js +20 -16
  11. package/utils/node/loaderIcon.js +3 -4
  12. package/utils/node/tailwindSafelist.js +2 -3
  13. package/utils/node/vuelessConfig.js +3 -15
  14. package/web-types.json +1 -13
  15. package/assets/icons/vueless/add.svg +0 -1
  16. package/assets/icons/vueless/apps.svg +0 -1
  17. package/assets/icons/vueless/arrow_back.svg +0 -1
  18. package/assets/icons/vueless/attach_file.svg +0 -1
  19. package/assets/icons/vueless/calendar_month-fill.svg +0 -1
  20. package/assets/icons/vueless/check.svg +0 -1
  21. package/assets/icons/vueless/check_circle.svg +0 -1
  22. package/assets/icons/vueless/chevron_left.svg +0 -1
  23. package/assets/icons/vueless/chevron_right.svg +0 -1
  24. package/assets/icons/vueless/close.svg +0 -1
  25. package/assets/icons/vueless/close_small.svg +0 -1
  26. package/assets/icons/vueless/delete.svg +0 -1
  27. package/assets/icons/vueless/description.svg +0 -1
  28. package/assets/icons/vueless/drag_indicator.svg +0 -1
  29. package/assets/icons/vueless/edit.svg +0 -1
  30. package/assets/icons/vueless/edit_note.svg +0 -1
  31. package/assets/icons/vueless/emoji_food_beverage.svg +0 -1
  32. package/assets/icons/vueless/error.svg +0 -1
  33. package/assets/icons/vueless/expand_more.svg +0 -1
  34. package/assets/icons/vueless/first_page.svg +0 -1
  35. package/assets/icons/vueless/image.svg +0 -1
  36. package/assets/icons/vueless/keyboard_arrow_down.svg +0 -1
  37. package/assets/icons/vueless/keyboard_arrow_left.svg +0 -1
  38. package/assets/icons/vueless/keyboard_arrow_right.svg +0 -1
  39. package/assets/icons/vueless/label.svg +0 -1
  40. package/assets/icons/vueless/last_page.svg +0 -1
  41. package/assets/icons/vueless/remove.svg +0 -1
  42. package/assets/icons/vueless/search.svg +0 -1
  43. package/assets/icons/vueless/star-fill.svg +0 -1
  44. package/assets/icons/vueless/star.svg +0 -1
  45. package/assets/icons/vueless/title.svg +0 -1
  46. package/assets/icons/vueless/visibility-fill.svg +0 -1
  47. package/assets/icons/vueless/visibility_off-fill.svg +0 -1
  48. package/assets/icons/vueless/warning.svg +0 -1
@@ -1,4 +1,5 @@
1
1
  import { ref, watch, watchEffect, getCurrentInstance, toValue, useAttrs, computed } from "vue";
2
+ import { merge } from "lodash-es";
2
3
 
3
4
  import { cx, cva, setColor, getColor, vuelessConfig, getMergedConfig } from "../utils/ui.ts";
4
5
  import { isCSR } from "../utils/helper.ts";
@@ -14,6 +15,7 @@ import type { Ref, ComputedRef } from "vue";
14
15
  import type {
15
16
  CVA,
16
17
  UseUI,
18
+ Defaults,
17
19
  KeyAttrs,
18
20
  KeysAttrs,
19
21
  Strategies,
@@ -22,7 +24,7 @@ import type {
22
24
  UnknownObject,
23
25
  ComponentNames,
24
26
  ComponentConfig,
25
- KeyAttrsWithConfig,
27
+ NestedComponent,
26
28
  VuelessComponentInstance,
27
29
  } from "../types.ts";
28
30
 
@@ -44,7 +46,7 @@ export default function useUI<T>(
44
46
  ? (parent?.type.__name as ComponentNames)
45
47
  : (type.__name as ComponentNames);
46
48
 
47
- const globalConfig = vuelessConfig?.component?.[componentName] || {};
49
+ const globalConfig = (vuelessConfig?.component?.[componentName] || {}) as ComponentConfig<T>;
48
50
 
49
51
  const vuelessStrategy = Object.values(STRATEGY_TYPE).includes(vuelessConfig.strategy || "")
50
52
  ? (vuelessConfig.strategy as Strategies)
@@ -107,31 +109,6 @@ export default function useUI<T>(
107
109
  if (isSystemKey(key)) continue;
108
110
 
109
111
  keysAttrs[`${key}Attrs`] = getAttrs(key, getClasses(key, mutatedProps));
110
-
111
- const baseClasses = getBaseClasses(config.value[key]);
112
- const extendsKeys = getExtendsKeys(baseClasses);
113
-
114
- if (extendsKeys.length) {
115
- const keyAttrs = keysAttrs[`${key}Attrs`];
116
-
117
- keysAttrs[`${key}Attrs`] = computed(() => {
118
- const extendsClasses = extendsKeys.map((key) => toValue(getClasses(key, mutatedProps)));
119
-
120
- return {
121
- ...keyAttrs.value,
122
- class: cx([
123
- ...extendsClasses,
124
- keyAttrs.value.class?.replaceAll(EXTENDS_PATTERN_REG_EXP, ""),
125
- ]),
126
- // TODO: Add ability to merge array of keys
127
- config: getMergedConfig({
128
- defaultConfig: config.value[extendsKeys[0]],
129
- globalConfig: keyAttrs.value.config,
130
- propsConfig: propsConfig[extendsKeys[0]],
131
- }),
132
- };
133
- }) as ComputedRef<KeyAttrsWithConfig<T>>;
134
- }
135
112
  }
136
113
 
137
114
  return keysAttrs;
@@ -168,24 +145,65 @@ export default function useUI<T>(
168
145
  }
169
146
 
170
147
  function updateVuelessAttrs() {
171
- const configKeyValue = config.value[configKey];
148
+ let configAttr: NestedComponent = {};
149
+ let extendsConfigAttr: NestedComponent = {};
150
+ let extendsClasses: string[] = [];
172
151
 
173
- let configAttr = {};
174
- let defaultAttrs = {};
152
+ const baseClasses = getBaseClasses(config.value[configKey]);
153
+ const extendsKeys = getExtendsKeys(baseClasses);
175
154
 
176
- if (typeof configKeyValue === "object") {
177
- configAttr = configKeyValue;
178
- defaultAttrs = configKeyValue?.defaults;
155
+ if (typeof config.value[configKey] === "object") {
156
+ configAttr = config.value[configKey] as NestedComponent;
157
+ }
158
+
159
+ if (extendsKeys.length) {
160
+ extendsClasses = extendsKeys.map((key) => toValue(getClasses(key, mutatedProps)));
161
+ extendsConfigAttr = getExtendsConfig(extendsKeys);
179
162
  }
180
163
 
181
164
  vuelessAttrs.value = {
182
165
  ...commonAttrs,
183
- class: toValue(classes),
184
- config: configAttr,
185
- ...defaultAttrs,
166
+ class: cx([...extendsClasses, toValue(classes).replaceAll(EXTENDS_PATTERN_REG_EXP, "")]),
167
+ config: merge(configAttr, extendsConfigAttr),
168
+ ...getDefaults({
169
+ ...(configAttr.defaults || {}),
170
+ ...(extendsConfigAttr.defaults || {}),
171
+ }),
186
172
  };
187
173
  }
188
174
 
175
+ /**
176
+ * Merge extends nested component configs.
177
+ * TODO: Add ability to merge multiple keys in one (now works for merging only 1 first key).
178
+ */
179
+ function getExtendsConfig(extendsKeys: string[]) {
180
+ const [firstKey] = extendsKeys;
181
+
182
+ return getMergedConfig({
183
+ defaultConfig: config.value[firstKey],
184
+ globalConfig: globalConfig[firstKey],
185
+ propsConfig: propsConfig[firstKey],
186
+ }) as NestedComponent;
187
+ }
188
+
189
+ /**
190
+ * Conditionally set props default value for nested components based on parent component prop value.
191
+ * For example, set icon size for the nested component based on the size of the parent component.
192
+ * Use an object where key = parent component prop value, value = nested component prop value.
193
+ * */
194
+ function getDefaults(defaultAttrs: NestedComponent["defaults"]) {
195
+ const defaults: Defaults = {};
196
+
197
+ for (const key in defaultAttrs) {
198
+ defaults[key] =
199
+ typeof defaultAttrs[key] === "object"
200
+ ? defaultAttrs[key][String(props[key])]
201
+ : defaultAttrs[key];
202
+ }
203
+
204
+ return defaults;
205
+ }
206
+
189
207
  return vuelessAttrs;
190
208
  }
191
209
 
@@ -195,7 +213,7 @@ export default function useUI<T>(
195
213
  /**
196
214
  * Return base classes.
197
215
  */
198
- function getBaseClasses(value: string | CVA) {
216
+ function getBaseClasses(value: string | CVA | undefined) {
199
217
  return typeof value === "object" ? value.base || "" : value || "";
200
218
  }
201
219
 
package/constants.js CHANGED
@@ -217,6 +217,7 @@ export const VUELESS_LOCAL_DIR = `src`;
217
217
  export const VUELESS_ICONS_DIR = `${VUELESS_DIR}/${ICONS_DIR}`;
218
218
  export const VUELESS_ICONS_LOCAL_DIR = `src/${ICONS_DIR}`;
219
219
  export const VUELESS_ICONS_CACHED_DIR = `${VUELESS_CACHE_DIR}/${ICONS_DIR}`;
220
+ export const VUELESS_CONFIGS_CACHED_DIR = `${VUELESS_CACHE_DIR}/configs`;
220
221
 
221
222
  /* Other */
222
223
  export const PX_IN_REM = 16;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vueless",
3
- "version": "0.0.596",
3
+ "version": "0.0.598",
4
4
  "license": "MIT",
5
5
  "description": "Vue Styleless UI Component Library, powered by Tailwind CSS.",
6
6
  "keywords": [
package/types.ts CHANGED
@@ -241,12 +241,13 @@ export type ComponentConfig<T> = Partial<{
241
241
  NestedComponent;
242
242
 
243
243
  export interface NestedComponent {
244
- [key: string]: Record<string, string | UnknownObject> | string;
244
+ defaults?: Record<string, string | UnknownObject>;
245
+ [key: string]: Record<string, string | UnknownObject> | string | undefined;
245
246
  }
246
247
 
247
248
  export type Defaults = {
248
249
  color?: string;
249
- [key: string]: unknown;
250
+ [key: string]: unknown | UnknownObject;
250
251
  };
251
252
 
252
253
  export interface Transition {
@@ -11,7 +11,7 @@ import UIcon from "../ui.image-icon/UIcon.vue";
11
11
  import defaultConfig from "./config.ts";
12
12
  import { COMPONENT_NAME } from "./constants.ts";
13
13
 
14
- import type { Props, LoaderSize, IconSize, Config } from "./types.ts";
14
+ import type { Props, Config } from "./types.ts";
15
15
 
16
16
  defineOptions({ inheritAttrs: false });
17
17
 
@@ -27,32 +27,6 @@ const buttonRef = ref<HTMLElement | null>(null);
27
27
  const buttonStyle = ref({});
28
28
  const buttonWidth = ref(0);
29
29
 
30
- const loaderSize = computed(() => {
31
- const sizes = {
32
- "2xs": "sm",
33
- xs: "sm",
34
- sm: "md",
35
- md: "md",
36
- lg: "lg",
37
- xl: "lg",
38
- };
39
-
40
- return sizes[props.size] as LoaderSize;
41
- });
42
-
43
- const iconSize = computed(() => {
44
- const sizes = {
45
- "2xs": "2xs",
46
- xs: "xs",
47
- sm: "sm",
48
- md: "sm",
49
- lg: "sm",
50
- xl: "sm",
51
- };
52
-
53
- return sizes[props.size] as IconSize;
54
- });
55
-
56
30
  watch(
57
31
  () => props.loading,
58
32
  (newValue, oldValue) => {
@@ -111,7 +85,7 @@ const { buttonAttrs, loaderAttrs, leftIconAttrs, rightIconAttrs, centerIconAttrs
111
85
  :data-test="dataTest"
112
86
  >
113
87
  <template v-if="loading">
114
- <ULoader :loading="loading" :size="loaderSize" color="inherit" v-bind="loaderAttrs" />
88
+ <ULoader :loading="loading" color="inherit" v-bind="loaderAttrs" />
115
89
  </template>
116
90
 
117
91
  <template v-else>
@@ -120,15 +94,8 @@ const { buttonAttrs, loaderAttrs, leftIconAttrs, rightIconAttrs, centerIconAttrs
120
94
  @binding {string} icon-name
121
95
  @binding {string} icon-size
122
96
  -->
123
- <slot name="left" :icon-name="leftIcon" :icon-size="iconSize">
124
- <UIcon
125
- v-if="leftIcon"
126
- internal
127
- color="inherit"
128
- :name="leftIcon"
129
- :size="iconSize"
130
- v-bind="leftIconAttrs"
131
- />
97
+ <slot name="left" :icon-name="leftIcon">
98
+ <UIcon v-if="leftIcon" internal color="inherit" :name="leftIcon" v-bind="leftIconAttrs" />
132
99
  </slot>
133
100
 
134
101
  <!--
@@ -137,15 +104,8 @@ const { buttonAttrs, loaderAttrs, leftIconAttrs, rightIconAttrs, centerIconAttrs
137
104
  @binding {string} icon-name
138
105
  @binding {string} icon-size
139
106
  -->
140
- <slot name="default" :label="label" :icon-name="icon" :icon-size="iconSize">
141
- <UIcon
142
- v-if="icon"
143
- internal
144
- color="inherit"
145
- :name="icon"
146
- :size="iconSize"
147
- v-bind="centerIconAttrs"
148
- />
107
+ <slot name="default" :label="label" :icon-name="icon">
108
+ <UIcon v-if="icon" internal color="inherit" :name="icon" v-bind="centerIconAttrs" />
149
109
  <template v-else>
150
110
  {{ label }}
151
111
  </template>
@@ -156,13 +116,12 @@ const { buttonAttrs, loaderAttrs, leftIconAttrs, rightIconAttrs, centerIconAttrs
156
116
  @binding {string} icon-name
157
117
  @binding {string} icon-size
158
118
  -->
159
- <slot name="right" :icon-name="rightIcon" :icon-size="iconSize">
119
+ <slot name="right" :icon-name="rightIcon">
160
120
  <UIcon
161
121
  v-if="rightIcon"
162
122
  internal
163
123
  color="inherit"
164
124
  :name="rightIcon"
165
- :size="iconSize"
166
125
  v-bind="rightIconAttrs"
167
126
  />
168
127
  </slot>
@@ -149,10 +149,34 @@ export default /*tw*/ {
149
149
  { square: true, size: "xl", class: "p-3.5" },
150
150
  ],
151
151
  },
152
- loader: "{ULoader}",
153
- leftIcon: "{UIcon}",
154
- rightIcon: "{UIcon}",
155
- centerIcon: "{UIcon}",
152
+ loader: {
153
+ base: "{ULoader}",
154
+ defaults: {
155
+ size: {
156
+ "2xs": "sm",
157
+ xs: "sm",
158
+ sm: "md",
159
+ md: "md",
160
+ lg: "lg",
161
+ xl: "lg",
162
+ },
163
+ },
164
+ },
165
+ leftIcon: "{UIcon} {>centerIcon}",
166
+ rightIcon: "{UIcon} {>centerIcon}",
167
+ centerIcon: {
168
+ base: "{UIcon}",
169
+ defaults: {
170
+ size: {
171
+ "2xs": "2xs",
172
+ xs: "xs",
173
+ sm: "sm",
174
+ md: "sm",
175
+ lg: "sm",
176
+ xl: "sm",
177
+ },
178
+ },
179
+ },
156
180
  defaults: {
157
181
  color: "brand",
158
182
  variant: "primary",
@@ -172,10 +172,12 @@ export const IconProps: StoryFn<UButtonArgs> = (args) => ({
172
172
  template: `
173
173
  <URow no-mobile>
174
174
  <UButton
175
+ v-bind="args"
175
176
  left-icon="download"
176
177
  label="Download"
177
178
  />
178
179
  <UButton
180
+ v-bind="args"
179
181
  right-icon="menu"
180
182
  label="Menu"
181
183
  />
@@ -3,9 +3,6 @@ import type { ComponentConfig } from "../types.ts";
3
3
 
4
4
  export type Config = typeof defaultConfig;
5
5
 
6
- export type LoaderSize = "sm" | "md" | "lg";
7
- export type IconSize = "2xs" | "xs" | "sm" | "md";
8
-
9
6
  export interface Props {
10
7
  /**
11
8
  * Button variant.
@@ -17,6 +17,32 @@ const PROPS_INTERFACE_REG_EXP = /export\s+interface\s+Props\s*{([^}]*)}/s;
17
17
  const UNION_SYMBOLS_REG_EXP = /[?|:"|;]/g;
18
18
  const WORD_IN_QUOTE_REG_EXP = /"([^"]+)"/g;
19
19
 
20
+ export async function setCustomPropTypes(isVuelessEnv) {
21
+ const srcDir = isVuelessEnv ? VUELESS_LOCAL_DIR : VUELESS_SRC;
22
+
23
+ for await (const [componentName, componentDir] of Object.entries(COMPONENTS)) {
24
+ const customProps =
25
+ componentName in vuelessConfig.component && vuelessConfig.component[componentName].props;
26
+
27
+ if (customProps) {
28
+ await cacheComponentTypes(path.join(srcDir, componentDir));
29
+ await modifyComponentTypes(
30
+ path.join(srcDir, componentDir),
31
+ vuelessConfig.component[componentName].props,
32
+ );
33
+ }
34
+ }
35
+ }
36
+
37
+ export async function removeCustomPropTypes(isVuelessEnv) {
38
+ const srcDir = isVuelessEnv ? VUELESS_LOCAL_DIR : VUELESS_SRC;
39
+
40
+ for await (const componentDir of Object.values(COMPONENTS)) {
41
+ await restoreComponentTypes(path.join(srcDir, componentDir));
42
+ await clearComponentTypesCache(path.join(srcDir, componentDir));
43
+ }
44
+ }
45
+
20
46
  async function cacheComponentTypes(filePath) {
21
47
  const cacheDir = path.join(filePath, ".cache");
22
48
  const sourceFile = path.join(filePath, "types.ts");
@@ -36,7 +62,7 @@ async function clearComponentTypesCache(filePath) {
36
62
  await fs.rm(path.join(filePath, ".cache"), { force: true, recursive: true });
37
63
  }
38
64
 
39
- export async function restoreComponentTypes(filePath) {
65
+ async function restoreComponentTypes(filePath) {
40
66
  const cacheDir = path.join(filePath, ".cache");
41
67
  const sourceFile = path.join(cacheDir, "types.ts");
42
68
  const destFile = path.join(filePath, "types.ts");
@@ -162,29 +188,3 @@ async function modifyComponentTypes(filePath, props) {
162
188
  console.error("Error updating file:", error.message);
163
189
  }
164
190
  }
165
-
166
- export async function setCustomPropTypes(isVuelessEnv) {
167
- const srcDir = isVuelessEnv ? VUELESS_LOCAL_DIR : VUELESS_SRC;
168
-
169
- for await (const [componentName, componentDir] of Object.entries(COMPONENTS)) {
170
- const customProps =
171
- componentName in vuelessConfig.component && vuelessConfig.component[componentName].props;
172
-
173
- if (customProps) {
174
- await cacheComponentTypes(path.join(srcDir, componentDir));
175
- await modifyComponentTypes(
176
- path.join(srcDir, componentDir),
177
- vuelessConfig.component[componentName].props,
178
- );
179
- }
180
- }
181
- }
182
-
183
- export async function removeCustomPropTypes(isVuelessEnv) {
184
- const srcDir = isVuelessEnv ? VUELESS_LOCAL_DIR : VUELESS_SRC;
185
-
186
- for await (const componentDir of Object.values(COMPONENTS)) {
187
- await restoreComponentTypes(path.join(srcDir, componentDir));
188
- await clearComponentTypesCache(path.join(srcDir, componentDir));
189
- }
190
- }
@@ -1,6 +1,9 @@
1
1
  import path from "path";
2
- import { statSync } from "fs";
2
+ import { statSync, existsSync } from "fs";
3
3
  import { readdir } from "node:fs/promises";
4
+ import esbuild from "esbuild";
5
+
6
+ import { VUELESS_CONFIGS_CACHED_DIR } from "../../constants.js";
4
7
 
5
8
  export async function getDirFiles(dirPath, ext, { recursive = true, exclude = [] } = {}) {
6
9
  let fileNames = [];
@@ -68,23 +71,24 @@ export function getVueFiles() {
68
71
  return [path.join(process.cwd(), "src")];
69
72
  }
70
73
 
71
- export function getDefaultConfigJson(fileContents) {
72
- const objectStartIndex = fileContents.indexOf("{");
73
- const objectString = fileContents.substring(objectStartIndex).replace("};", "}");
74
+ export async function getComponentDefaultConfig(name, entryPath) {
75
+ const configOutPath = path.join(process.cwd(), `${VUELESS_CONFIGS_CACHED_DIR}/${name}.mjs`);
74
76
 
75
- // indirect eval
76
- return (0, eval)("(" + objectString + ")"); // Converting into JS object
77
- }
77
+ await buildTSFile(entryPath, configOutPath);
78
78
 
79
- export function merge(source = {}, target = {}) {
80
- for (const [key, val] of Object.entries(source)) {
81
- if (val !== null && typeof val === `object`) {
82
- target[key] ??= new val.__proto__.constructor();
83
- merge(val, target[key]);
84
- } else {
85
- target[key] = val;
86
- }
79
+ if (existsSync(configOutPath)) {
80
+ return (await import(configOutPath)).default;
87
81
  }
82
+ }
88
83
 
89
- return target; // we're replacing in-situ, so this is more for chaining than anything else
84
+ export async function buildTSFile(entryPath, configOutFile) {
85
+ await esbuild.build({
86
+ entryPoints: [entryPath],
87
+ outfile: configOutFile,
88
+ bundle: true,
89
+ platform: "node",
90
+ format: "esm",
91
+ target: "ESNext",
92
+ loader: { ".ts": "ts" },
93
+ });
90
94
  }
@@ -9,9 +9,10 @@ import fs from "node:fs";
9
9
  import path from "node:path";
10
10
  import { createRequire } from "module";
11
11
  import { rm, cp } from "node:fs/promises";
12
+ import { merge } from "lodash-es";
12
13
 
13
14
  import { vuelessConfig } from "./vuelessConfig.js";
14
- import { getDirFiles, getDefaultConfigJson, merge } from "./helper.js";
15
+ import { getDirFiles, getComponentDefaultConfig } from "./helper.js";
15
16
  import {
16
17
  COMPONENTS,
17
18
  VUELESS_DIR,
@@ -306,10 +307,8 @@ function getDefaults() {
306
307
  const defaultConfigPath = path.join(cwd, defaultIconsDir, COMPONENTS[U_ICON], "config.ts");
307
308
 
308
309
  if (fs.existsSync(defaultConfigPath)) {
309
- const defaultConfigFile = fs.readFileSync(defaultConfigPath).toString();
310
-
311
310
  return merge(
312
- getDefaultConfigJson(defaultConfigFile)?.defaults,
311
+ getComponentDefaultConfig(U_ICON, defaultConfigPath)?.defaults,
313
312
  vuelessConfig?.component?.[U_ICON]?.defaults,
314
313
  );
315
314
  }
@@ -8,7 +8,7 @@ import { defineConfig } from "cva";
8
8
 
9
9
  import { vuelessConfig } from "./vuelessConfig.js";
10
10
  import { createGetMergedConfig } from "./mergeConfigs.js";
11
- import { getDefaultConfigJson, getDirFiles } from "./helper.js";
11
+ import { getComponentDefaultConfig, getDirFiles } from "./helper.js";
12
12
  import {
13
13
  COMPONENTS,
14
14
  BRAND_COLORS,
@@ -173,9 +173,8 @@ async function getComponentSafelist(componentName, { colors, vuelessConfigFiles
173
173
 
174
174
  if (defaultConfigPath) {
175
175
  const configPath = path.join(process.cwd(), defaultConfigPath);
176
- const defaultConfigContent = await readFile(configPath, { encoding: "utf-8" });
177
176
 
178
- defaultConfig = getDefaultConfigJson(defaultConfigContent);
177
+ defaultConfig = getComponentDefaultConfig(componentName, configPath);
179
178
  }
180
179
 
181
180
  const isStrategyValid =
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import esbuild from "esbuild";
4
3
 
4
+ import { buildTSFile } from "./helper.js";
5
5
  import { VUELESS_CACHE_DIR, VUELESS_CONFIG_FILE_NAME } from "../../constants.js";
6
6
 
7
7
  /**
@@ -24,22 +24,10 @@ export let vuelessConfig = {};
24
24
  return;
25
25
  }
26
26
 
27
- fs.existsSync(configPathJs) && (await buildConfig(configPathJs, configOutPath));
28
- fs.existsSync(configPathTs) && (await buildConfig(configPathTs, configOutPath));
27
+ fs.existsSync(configPathJs) && (await buildTSFile(configPathJs, configOutPath));
28
+ fs.existsSync(configPathTs) && (await buildTSFile(configPathTs, configOutPath));
29
29
 
30
30
  if (fs.existsSync(configOutPath)) {
31
31
  vuelessConfig = (await import(configOutPath)).default;
32
32
  }
33
33
  })();
34
-
35
- async function buildConfig(entryPath, configOutFile) {
36
- await esbuild.build({
37
- entryPoints: [entryPath],
38
- outfile: configOutFile,
39
- bundle: true,
40
- platform: "node",
41
- format: "esm",
42
- target: "ESNext",
43
- loader: { ".ts": "ts" },
44
- });
45
- }
package/web-types.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "framework": "vue",
3
3
  "name": "vueless",
4
- "version": "0.0.596",
4
+ "version": "0.0.598",
5
5
  "contributions": {
6
6
  "html": {
7
7
  "description-markup": "markdown",
@@ -980,10 +980,6 @@
980
980
  {
981
981
  "type": "string",
982
982
  "name": "icon-name"
983
- },
984
- {
985
- "type": "string",
986
- "name": "icon-size"
987
983
  }
988
984
  ]
989
985
  },
@@ -999,10 +995,6 @@
999
995
  {
1000
996
  "type": "string",
1001
997
  "name": "icon-name"
1002
- },
1003
- {
1004
- "type": "string",
1005
- "name": "icon-size"
1006
998
  }
1007
999
  ]
1008
1000
  },
@@ -1014,10 +1006,6 @@
1014
1006
  {
1015
1007
  "type": "string",
1016
1008
  "name": "icon-name"
1017
- },
1018
- {
1019
- "type": "string",
1020
- "name": "icon-size"
1021
1009
  }
1022
1010
  ]
1023
1011
  }
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M445.93-445.93H194.02v-68.14h251.91v-252.15h68.14v252.15h252.15v68.14H514.07v251.91h-68.14v-251.91Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M223.29-154.5q-29.12 0-48.95-19.84-19.84-19.83-19.84-48.95 0-29.12 19.84-48.91 19.83-19.8 48.95-19.8 29.12 0 48.91 19.8 19.8 19.79 19.8 48.91 0 29.12-19.8 48.95-19.79 19.84-48.91 19.84Zm256.8 0q-29.05 0-48.88-19.84-19.84-19.83-19.84-48.95 0-29.12 19.75-48.91 19.74-19.8 48.79-19.8t48.88 19.8q19.84 19.79 19.84 48.91 0 29.12-19.75 48.95-19.74 19.84-48.79 19.84Zm256.62 0q-29.12 0-48.91-19.84-19.8-19.83-19.8-48.95 0-29.12 19.8-48.91 19.79-19.8 48.91-19.8 29.12 0 48.95 19.8 19.84 19.79 19.84 48.91 0 29.12-19.84 48.95-19.83 19.84-48.95 19.84ZM223.29-411.37q-29.12 0-48.95-19.75-19.84-19.74-19.84-48.79t19.84-48.88q19.83-19.84 48.95-19.84 29.12 0 48.91 19.75 19.8 19.74 19.8 48.79t-19.8 48.88q-19.79 19.84-48.91 19.84Zm256.8 0q-29.05 0-48.88-19.75-19.84-19.74-19.84-48.79t19.75-48.88q19.74-19.84 48.79-19.84t48.88 19.75q19.84 19.74 19.84 48.79t-19.75 48.88q-19.74 19.84-48.79 19.84Zm256.62 0q-29.12 0-48.91-19.75-19.8-19.74-19.8-48.79t19.8-48.88q19.79-19.84 48.91-19.84 29.12 0 48.95 19.75 19.84 19.74 19.84 48.79t-19.84 48.88q-19.83 19.84-48.95 19.84ZM223.29-668q-29.12 0-48.95-19.8-19.84-19.79-19.84-48.91 0-29.12 19.84-48.95 19.83-19.84 48.95-19.84 29.12 0 48.91 19.84 19.8 19.83 19.8 48.95 0 29.12-19.8 48.91-19.79 19.8-48.91 19.8Zm256.8 0q-29.05 0-48.88-19.8-19.84-19.79-19.84-48.91 0-29.12 19.75-48.95 19.74-19.84 48.79-19.84t48.88 19.84q19.84 19.83 19.84 48.95 0 29.12-19.75 48.91-19.74 19.8-48.79 19.8Zm256.62 0q-29.12 0-48.91-19.8-19.8-19.79-19.8-48.91 0-29.12 19.8-48.95 19.79-19.84 48.91-19.84 29.12 0 48.95 19.84 19.84 19.83 19.84 48.95 0 29.12-19.84 48.91-19.83 19.8-48.95 19.8Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="m283.8-445.93 244.18 244.17L480-154.02 154.02-480 480-806.22l47.98 47.98L283.8-514.07h522.42v68.14H283.8Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M737.33-324.39q0 105.46-74.69 177.91-74.69 72.46-180.26 72.46-105.58 0-180.35-72.46-74.77-72.45-74.77-177.85v-383.82q0-74.63 53.41-126.35 53.42-51.72 127.75-51.72 74.34 0 127.69 51.72 53.35 51.72 53.35 126.35v363.82q0 43.66-31.56 74.62-31.55 30.97-75.81 30.97-44.26 0-75.61-30.64t-31.35-74.95v-370h66.46v370q0 16.05 11.97 27.59t29.2 11.54q17.24 0 28.74-11.5 11.5-11.51 11.5-27.63v-363.58q.24-47.35-33.38-79.6-33.62-32.25-81.35-32.25-47.74 0-81.14 32.19-33.41 32.19-33.41 79.42v383.82q.24 77.83 55.57 130.96 55.33 53.13 133.62 53.13 77.86 0 133.03-53.16 55.17-53.17 54.93-130.93v-396.93h66.46v396.87Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M480.03-398.57q-17.6 0-29.53-11.9-11.93-11.91-11.93-29.5 0-17.6 11.9-29.53 11.91-11.93 29.5-11.93 17.6 0 29.53 11.9 11.93 11.91 11.93 29.5 0 17.6-11.9 29.53-11.91 11.93-29.5 11.93Zm-160 0q-17.6 0-29.53-11.9-11.93-11.91-11.93-29.5 0-17.6 11.9-29.53 11.91-11.93 29.5-11.93 17.6 0 29.53 11.9 11.93 11.91 11.93 29.5 0 17.6-11.9 29.53-11.91 11.93-29.5 11.93Zm320 0q-17.27 0-29.37-11.9-12.09-11.91-12.09-29.5 0-17.6 12.07-29.53t29.45-11.93q17.39 0 29.37 11.9 11.97 11.91 11.97 29.5 0 17.6-11.9 29.53-11.91 11.93-29.5 11.93Zm-160 160q-17.6 0-29.53-12.07t-11.93-29.45q0-17.39 11.9-29.37 11.91-11.97 29.5-11.97 17.6 0 29.53 11.9 11.93 11.91 11.93 29.5 0 17.27-11.9 29.37-11.91 12.09-29.5 12.09Zm-160 0q-17.6 0-29.53-12.07t-11.93-29.45q0-17.39 11.9-29.37 11.91-11.97 29.5-11.97 17.6 0 29.53 11.9 11.93 11.91 11.93 29.5 0 17.27-11.9 29.37-11.91 12.09-29.5 12.09Zm320 0q-17.27 0-29.37-12.07-12.09-12.07-12.09-29.45 0-17.39 12.07-29.37 12.07-11.97 29.45-11.97 17.39 0 29.37 11.9 11.97 11.91 11.97 29.5 0 17.27-11.9 29.37-11.91 12.09-29.5 12.09ZM182.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-615.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34H245v-60h69.07v60h331.86v-60H715v60h62.85q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v615.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-595.7Zm0-68.13h595.7V-570h-595.7v427.85Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M378-240.26 148.26-470l48.98-48.98L378-338.22l383.76-383.76L810.74-673 378-240.26Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="m420.52-294.41 285.63-285.63-50.78-50.03-234.85 234.85-117.85-117.85-49.78 50.03 167.63 168.63Zm59.51 220.39q-83.46 0-157.54-31.88-74.07-31.88-129.39-87.2-55.32-55.32-87.2-129.36-31.88-74.04-31.88-157.51 0-84.46 31.88-158.54 31.88-74.07 87.16-128.9 55.28-54.84 129.34-86.82 74.06-31.99 157.55-31.99 84.48 0 158.59 31.97 74.1 31.97 128.91 86.77 54.82 54.8 86.79 128.88 31.98 74.08 31.98 158.6 0 83.5-31.99 157.57-31.98 74.07-86.82 129.36-54.83 55.29-128.87 87.17-74.04 31.88-158.51 31.88Zm-.03-68.13q141.04 0 239.45-98.75 98.4-98.76 98.4-239.1 0-141.04-98.4-239.45-98.41-98.4-239.57-98.4-140.16 0-238.95 98.4-98.78 98.41-98.78 239.57 0 140.16 98.75 238.95 98.76 98.78 239.1 98.78ZM480-480Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M561-234.26 314.26-481 561-727.74 609.74-679l-198 198 198 198L561-234.26Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="m524.26-481-198-198L375-727.74 621.74-481 375-234.26 326.26-283l198-198Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M249-201.26 201.26-249l231-231-231-231L249-758.74l231 231 231-231L758.74-711l-231 231 231 231L711-201.26l-231-231-231 231Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="m305.02-257.28-47.74-47.74L432.02-480 257.28-653.98l47.74-47.74L480-526.98l173.98-174.74 47.74 47.74L526.98-480l174.74 174.98-47.74 47.74L480-432.02 305.02-257.28Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M259.09-114.02q-28.45 0-48.41-19.89-19.96-19.89-19.96-48.24v-565.94h-45.07v-68.13h198.28v-34.3h271.9v34.3h198.52v68.13h-45.07v565.94q0 27.6-20.33 47.86-20.34 20.27-48.04 20.27H259.09Zm441.82-634.07H259.09v565.94h441.82v-565.94ZM363.89-266.24h64.07v-399h-64.07v399Zm168.15 0h64.31v-399h-64.31v399ZM259.09-748.09v565.94-565.94Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M319-249.52h322v-62.63H319v62.63Zm0-170h322v-62.63H319v62.63Zm-96.85 345.5q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h361.48l222.59 222.59v521.48q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm326.7-557.83v-186h-326.7v675.7h515.7v-489.7h-189Zm-326.7-186v186-186 675.7-675.7Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M347.41-154.5q-30.1 0-51.51-21.43-21.4-21.44-21.4-51.54 0-30.1 21.43-51.31Q317.37-300 347.47-300q30.1 0 51.31 21.25Q420-257.51 420-227.41q0 30.1-21.25 51.51-21.24 21.4-51.34 21.4Zm265.34 0q-30.1 0-51.42-21.43Q540-197.37 540-227.47q0-30.1 21.39-51.31Q582.79-300 612.83-300q30.14 0 51.4 21.25 21.27 21.24 21.27 51.34 0 30.1-21.32 51.51-21.33 21.4-51.43 21.4ZM347.41-407.37q-30.1 0-51.51-21.39-21.4-21.4-21.4-51.44 0-30.23 21.43-51.33 21.44-21.1 51.54-21.1 30.1 0 51.31 21.19Q420-510.26 420-480.14q0 30.12-21.25 51.44-21.24 21.33-51.34 21.33Zm265.34 0q-30.1 0-51.42-21.39Q540-450.16 540-480.2q0-30.23 21.39-51.33 21.4-21.1 51.44-21.1 30.14 0 51.4 21.19 21.27 21.18 21.27 51.3 0 30.12-21.32 51.44-21.33 21.33-51.43 21.33ZM347.41-660q-30.1 0-51.51-21.39-21.4-21.4-21.4-51.44 0-30.14 21.43-51.4 21.44-21.27 51.54-21.27 30.1 0 51.31 21.32Q420-762.85 420-732.75t-21.25 51.42Q377.51-660 347.41-660Zm265.34 0q-30.1 0-51.42-21.39Q540-702.79 540-732.83q0-30.14 21.39-51.4 21.4-21.27 51.44-21.27 30.14 0 51.4 21.32 21.27 21.33 21.27 51.43t-21.32 51.42Q642.85-660 612.75-660Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M181.91-182.15h44.24l459.81-458.81-43.76-44-460.29 459.05v43.76Zm-67.89 68.13V-253.5l574.52-573.76q8.24-8.48 19.81-13.22 11.56-4.74 24.11-4.74 11.47 0 22.95 4.74 11.48 4.74 21.2 12.98l51.89 51.17q9.24 9.72 13.48 21.32t4.24 23.31q0 11.72-4.74 23.7-4.74 11.98-12.98 20.46L253.74-114.02H114.02ZM775.17-732.7l-41.24-41.47 41.24 41.47ZM664.2-663.2l-22-21.76 43.76 44-21.76-22.24Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M154.02-396.85v-68.13h310.76v68.13H154.02Zm0-170.5v-68.13h478.13v68.13H154.02Zm0-170.5v-68.37h478.13v68.37H154.02Zm365.02 583.83v-128.02L741-503q9.51-9.63 21.13-13.91 11.62-4.29 23.5-4.29 12.48 0 24.21 4.86T831.02-502l37 37q9.44 9.48 13.82 21.12 4.38 11.63 4.38 23.27 0 11.96-4.86 24.06-4.86 12.09-14.25 21.57L647.07-154.02H519.04Zm303.59-266.59-37-37 37 37Zm-240 203h38l120.28-121.23-18-19.02-19-18.03-121.28 120.22v38.06Zm140.28-140.28-19-18 37 37-18-19Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M154.02-114.02v-68.13h652.2v68.13h-652.2ZM309.8-258.57q-65.17 0-110.48-44.93-45.3-44.93-45.3-109.85v-432.87h664.07q28.1 0 48.11 20.08 20.02 20.08 20.02 48.05v160q0 28.1-20.02 48.12-20.01 20.01-48.11 20.01h-92.66v136.61q0 64.92-45.47 109.85-45.48 44.93-110.55 44.93H309.8Zm.24-519.28H657.3 222.15h87.89Zm415.39 159.76h92.42v-160h-92.42v160ZM569.15-326.93q34.84 0 61.5-26.52 26.65-26.52 26.65-60.14v-364.26H399.15v37.31l71 58q1 1 9 18v150q0 9.6-7 16.8-7 7.2-18 7.2h-151q-11 0-18-7.2t-7-16.8v-150q0-4 9-18l72-58v-37.31h-137v364.26q0 33.62 26.98 60.14 26.97 26.52 60.91 26.52h259.11ZM355.57-777.85h40-40Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M479.93-274.02q16.46 0 27.4-10.74 10.93-10.75 10.93-27.21t-10.86-27.52q-10.86-11.05-27.33-11.05-16.46 0-27.4 11.03-10.93 11.04-10.93 27.5 0 16.47 10.86 27.23 10.86 10.76 27.33 10.76Zm-31-158.74h68.14v-257.07h-68.14v257.07ZM480.3-74.02q-84.2 0-158.04-31.88-73.84-31.88-129.16-87.2-55.32-55.32-87.2-129.2-31.88-73.88-31.88-158.17 0-84.28 31.88-158.2 31.88-73.91 87.16-128.74 55.28-54.84 129.18-86.82 73.9-31.99 158.21-31.99 84.3 0 158.25 31.97 73.94 31.97 128.75 86.77 54.82 54.8 86.79 128.88 31.98 74.08 31.98 158.33 0 84.24-31.99 158.07-31.98 73.84-86.82 128.95-54.83 55.1-128.87 87.17Q564.5-74.02 480.3-74.02Zm.2-68.13q140.54 0 238.95-98.75 98.4-98.76 98.4-239.6 0-140.54-98.22-238.95-98.21-98.4-239.75-98.4-140.16 0-238.95 98.22-98.78 98.21-98.78 239.75 0 140.16 98.75 238.95 98.76 98.78 239.6 98.78ZM480-480Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M480-339.5 234.26-585.24 283-633.98l197 198 197-197 48.74 48.74L480-339.5Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M235.93-234.26v-491.48h68.14v491.48h-68.14Zm451.07-3L447.26-477 687-716.74 735.74-668l-191 191 191 191L687-237.26Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M182.15-114.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-595.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h595.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v595.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-595.7Zm0-68.13h595.7v-595.7h-595.7v595.7Zm50.74-92.7h495.22L578-476.59l-132 171-93-127-120.11 157.74Zm-50.74 92.7v-595.7 595.7Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M480-338.26 234.26-584 283-632.74l197 197 197-197L725.74-584 480-338.26Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M561-234.26 314.26-481 561-727.74 609.74-679l-198 198 198 198L561-234.26Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="m524.26-481-198-198L375-727.74 621.74-481 375-234.26 326.26-283l198-198Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M846.22-480 674.83-237.89q-14.2 19.67-33.86 31.77-19.67 12.1-43.36 12.1H182.15q-28.1 0-48.12-20.01-20.01-20.02-20.01-48.12v-435.7q0-28.2 20.01-48.28 20.02-20.09 48.12-20.09h415.46q23.69 0 43.36 12.34 19.67 12.34 33.86 31.77L846.22-480Zm-85.29 0L608.56-697.85H182.15v435.7h426.46L760.93-480Zm-578.78 0v217.85-435.7V-480Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M272-239.26 223.26-288l192-192-192-192L272-720.74 512.74-480 272-239.26Zm383.93 5v-491.48h68.14v491.48h-68.14Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M194.02-445.93v-68.14h572.2v68.14h-572.2Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M795.76-114.3 531.33-378.5q-29.76 25.26-69.6 39.41-39.84 14.16-85.16 14.16-109.84 0-185.96-76.2Q114.5-477.33 114.5-585t76.2-183.87q76.19-76.2 184.37-76.2 108.17 0 183.86 76.2 75.7 76.2 75.7 184.02 0 43.33-13.64 82.97t-40.92 74.4L845.5-164.04l-49.74 49.74ZM375.65-393.07q79.73 0 135.29-56.24Q566.5-505.55 566.5-585q0-79.45-55.6-135.69-55.59-56.24-135.25-56.24-80.49 0-136.76 56.24-56.26 56.24-56.26 135.69 0 79.45 56.23 135.69 56.23 56.24 136.79 56.24Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="m224.15-107.56 67.39-291.29L65.41-594.78l298.52-25.72L480-895.3l116.07 274.8 298.52 25.72-226.13 195.93 67.63 291.29L480-262.3 224.15-107.56Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="m326.37-249.79 153.64-91.89 153.64 92.9-41.28-173.94L727.5-540.33l-178.17-15.52L480-720.02l-69.33 163.41-178.17 15.28 135.22 117.38-41.35 174.16ZM224.15-107.56l67.39-291.29L65.41-594.78l298.43-25.67L480-895.3l116.16 274.85 298.43 25.67-226.13 195.93 67.63 291.29L480-262.3 224.15-107.56ZM480-474.52Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M425.93-154.02v-544.07H194.02v-108.13h572.2v108.13H534.3v544.07H425.93Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M480.12-330q70.88 0 120.38-49.62t49.5-120.5q0-70.88-49.62-120.38T479.88-670Q409-670 359.5-620.38T310-499.88q0 70.88 49.62 120.38t120.5 49.5Zm-.3-61.83q-45.15 0-76.57-31.6-31.42-31.6-31.42-76.75t31.6-76.57q31.6-31.42 76.75-31.42t76.57 31.6q31.42 31.6 31.42 76.75t-31.6 76.57q-31.6 31.42-76.75 31.42ZM480-194.5q-147.91 0-267.35-84.67Q93.22-363.85 34.5-500q58.72-136.15 178.15-220.83Q332.09-805.5 480-805.5q147.91 0 267.35 84.67Q866.78-636.15 925.5-500q-58.72 136.15-178.15 220.83Q627.91-194.5 480-194.5Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M813.85-61.85 649.2-223.74q-35 14-79.24 21.62-44.24 7.62-89.96 7.62-147.2 0-267.75-82.46Q91.7-359.41 34.5-500q19.52-51.76 55.38-101.86t86.38-95.81L50.98-822.48l43.91-45.15 759.87 759.87-40.91 45.91ZM480-330q13.28 0 28.45-2.5 15.16-2.5 25.44-7.26L319.28-553.89q-4.52 11.28-6.9 25.56Q310-514.04 310-500q0 72 50 121t120 49Zm283.74 41.91L629.96-422.11q9.52-15.04 14.78-36.18T650-500q0-71-49.5-120.5T480-670q-20.8 0-41.09 4.76-20.28 4.76-36.8 15.04L287.57-765.5q35-16 90.21-28 55.22-12 107.22-12 143.96 0 264.01 82.34Q869.07-640.83 925.5-500q-25.76 64.48-67.12 118.08-41.36 53.59-94.64 93.83ZM578.07-474l-125.5-125.5q25.17-10.28 52.82-5.1 27.65 5.19 48.5 24.56 20.61 20.61 28.53 46 7.93 25.39-4.35 60.04Z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M34.74-116.89 480-886.22l445.26 769.33H34.74Zm113.8-65.74h662.92L480-754.98 148.54-182.63Zm335.64-54.85q12.96 0 21.87-9.08 8.91-9.09 8.91-22.05t-9.09-21.75q-9.08-8.79-22.05-8.79-12.96 0-21.87 8.96-8.91 8.97-8.91 21.93 0 12.96 9.09 21.87 9.08 8.91 22.05 8.91ZM454-348h60v-222.09h-60V-348Zm26-120.8Z"/></svg>