easyorders 0.1.15 → 0.1.17

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 (46) hide show
  1. package/README.md +2 -2
  2. package/dist/bin/cli.js +22 -8
  3. package/dist/server/index.js +10 -7
  4. package/dist/template/theme/config.json +19 -3
  5. package/dist/template/theme/home-sections/Tilted-Scrolling-Marque/config.json +107 -0
  6. package/dist/template/theme/home-sections/Tilted-Scrolling-Marque/template.liquid +171 -0
  7. package/dist/template/theme/home-sections/category-mosaic/config.json +89 -4
  8. package/dist/template/theme/home-sections/category-mosaic/template.liquid +84 -69
  9. package/dist/template/theme/home-sections/different-hero/config.json +199 -0
  10. package/dist/template/theme/home-sections/different-hero/template.liquid +219 -0
  11. package/dist/template/theme/home-sections/editorial-feature/config.json +27 -1
  12. package/dist/template/theme/home-sections/editorial-feature/template.liquid +11 -10
  13. package/dist/template/theme/home-sections/newsletter-luxe/config.json +28 -2
  14. package/dist/template/theme/home-sections/newsletter-luxe/template.liquid +19 -13
  15. package/dist/template/theme/home-sections/runway-hero/config.json +87 -30
  16. package/dist/template/theme/home-sections/runway-hero/template.liquid +59 -29
  17. package/dist/template/theme/home-sections/shop-the-look/config.json +93 -1
  18. package/dist/template/theme/home-sections/shop-the-look/template.liquid +41 -19
  19. package/dist/template/theme/home-sections/slider-before-after/config.json +213 -0
  20. package/dist/template/theme/home-sections/slider-before-after/template.liquid +336 -0
  21. package/dist/template/theme/home-sections/test-hero-allbird/config.json +130 -0
  22. package/dist/template/theme/home-sections/test-hero-allbird/template.liquid +149 -0
  23. package/dist/template/theme/home-sections/trust-promise/config.json +76 -2
  24. package/dist/template/theme/home-sections/trust-promise/template.liquid +34 -11
  25. package/dist/template/theme/home-sections/zoom-parallax/config.json +48 -0
  26. package/dist/template/theme/home-sections/zoom-parallax/template.liquid +135 -0
  27. package/dist/template/theme/product-data-schema.json +27 -0
  28. package/dist/template/theme/schema.json +114 -129
  29. package/dist/template/theme/script.js +694 -185
  30. package/dist/template/theme/sections/categories.liquid +20 -4
  31. package/dist/template/theme/sections/featured-products.liquid +65 -32
  32. package/dist/template/theme/sections/fixed-buy-button.liquid +6 -1
  33. package/dist/template/theme/sections/footer.liquid +90 -91
  34. package/dist/template/theme/sections/gallery.liquid +37 -33
  35. package/dist/template/theme/sections/header.liquid +105 -25
  36. package/dist/template/theme/sections/home-products-grid.liquid +68 -10
  37. package/dist/template/theme/sections/list-products.liquid +73 -30
  38. package/dist/template/theme/sections/order-invoice.liquid +39 -91
  39. package/dist/template/theme/sections/product-description.liquid +18 -8
  40. package/dist/template/theme/sections/product-details.liquid +9 -24
  41. package/dist/template/theme/sections/products-grid.liquid +102 -54
  42. package/dist/template/theme/sections/related-products.liquid +124 -60
  43. package/dist/template/theme/sections/reviews.liquid +43 -28
  44. package/dist/template/theme/style.css +2283 -589
  45. package/dist/template/theme/theme-data.json +25 -8
  46. package/package.json +2 -2
package/README.md CHANGED
@@ -21,7 +21,7 @@ npm install -g easyorders
21
21
  ### Create a new theme project
22
22
 
23
23
  ```bash
24
- easyorders create-theme my-theme
24
+ easyorders create my-theme
25
25
  ```
26
26
 
27
27
  This scaffolds a new directory `my-theme/` containing only the `theme/` folder and a minimal `package.json`. No server code is included — the server runs from the CLI package itself.
@@ -57,7 +57,7 @@ Create a `.env` file in your theme project root (or export the variables) to cus
57
57
 
58
58
  ## Theme Project Structure
59
59
 
60
- After running `create-theme`, your project will look like:
60
+ After running `create`, your project will look like:
61
61
 
62
62
  ```
63
63
  my-theme/
package/dist/bin/cli.js CHANGED
@@ -95,7 +95,7 @@ async function startDev() {
95
95
  const themeDir = path.join(cwd, "theme");
96
96
  if (!fs.existsSync(themeDir)) {
97
97
  console.error(`\n ${RED}${BOLD}✖ No "theme" folder found in the current directory.${RESET}`);
98
- console.error(` ${DIM}Run ${CYAN}npx easyorders create-theme <name>${DIM} first to create a project.${RESET}\n`);
98
+ console.error(` ${DIM}Run ${CYAN}npx easyorders create <name>${DIM} first to create a project.${RESET}\n`);
99
99
  process.exit(1);
100
100
  }
101
101
  // The server files are bundled inside the CLI package
@@ -139,8 +139,9 @@ function showMenu() {
139
139
  console.log(` ${CYAN}${BOLD}Easy Orders CLI${RESET}`);
140
140
  console.log("");
141
141
  console.log(` ${BOLD}Usage:${RESET}`);
142
- console.log(` ${CYAN}npx easyorders create-theme ${DIM}<name>${RESET} Create a new theme project`);
142
+ console.log(` ${CYAN}npx easyorders create ${DIM}<name>${RESET} Create a new theme project`);
143
143
  console.log(` ${CYAN}npx easyorders start${RESET} Start the dev server`);
144
+ console.log(` ${CYAN}npx easyorders -v${RESET} Show CLI version`);
144
145
  console.log("");
145
146
  }
146
147
  async function interactiveMenu() {
@@ -165,12 +166,19 @@ async function interactiveMenu() {
165
166
  process.exit(1);
166
167
  }
167
168
  }
168
- // ── Version check ───────────────────────────────────────────
169
- async function checkForUpdates() {
169
+ // ── Version ─────────────────────────────────────────────────
170
+ function getPackageInfo() {
170
171
  const pkgPath = path.resolve(__dirname, "..", "..", "package.json");
171
172
  const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
172
- const localVersion = pkg.version;
173
- const packageName = pkg.name;
173
+ return { name: pkg.name, version: pkg.version };
174
+ }
175
+ function showVersion() {
176
+ const { version } = getPackageInfo();
177
+ console.log(version);
178
+ }
179
+ // ── Version check ───────────────────────────────────────────
180
+ async function checkForUpdates() {
181
+ const { name: packageName, version: localVersion } = getPackageInfo();
174
182
  try {
175
183
  const res = await fetch(`https://registry.npmjs.org/${packageName}/latest`);
176
184
  if (!res.ok)
@@ -193,13 +201,18 @@ async function checkForUpdates() {
193
201
  }
194
202
  // ── Entry point ─────────────────────────────────────────────
195
203
  (async () => {
196
- await checkForUpdates();
197
204
  const command = process.argv[2];
198
205
  switch (command) {
199
- case "create-theme":
206
+ case "-v":
207
+ case "--version":
208
+ showVersion();
209
+ break;
210
+ case "create":
211
+ await checkForUpdates();
200
212
  await createTheme();
201
213
  break;
202
214
  case "start":
215
+ await checkForUpdates();
203
216
  await startDev();
204
217
  break;
205
218
  case "--help":
@@ -207,6 +220,7 @@ async function checkForUpdates() {
207
220
  showMenu();
208
221
  break;
209
222
  default:
223
+ await checkForUpdates();
210
224
  await interactiveMenu();
211
225
  break;
212
226
  }
@@ -4,7 +4,7 @@ import express from "express";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
6
6
  import readline from "node:readline";
7
- import { exec } from "node:child_process";
7
+ import { execFile } from "node:child_process";
8
8
  import { generateCliToken, checkTokenStatus } from "./api.js";
9
9
  import { getToken, saveToken } from "./token-store.js";
10
10
  const CYAN = "\x1b[36m";
@@ -116,12 +116,15 @@ function promptStoreName() {
116
116
  });
117
117
  }
118
118
  function openBrowser(url) {
119
- const cmd = process.platform === "darwin"
120
- ? "open"
121
- : process.platform === "win32"
122
- ? "start"
123
- : "xdg-open";
124
- exec(`${cmd} "${url}"`);
119
+ if (process.platform === "darwin") {
120
+ execFile("open", [url]);
121
+ }
122
+ else if (process.platform === "win32") {
123
+ execFile("cmd", ["/c", "start", "", url], { windowsHide: true });
124
+ }
125
+ else {
126
+ execFile("xdg-open", [url]);
127
+ }
125
128
  }
126
129
  function waitForApproval(tokenId) {
127
130
  return new Promise((resolve, reject) => {
@@ -55,9 +55,9 @@
55
55
  "is_use_config": true
56
56
  },
57
57
  "palette": {
58
- "hd_bg": "",
58
+ "hd_bg": "#fff",
59
59
  "hd_text": "",
60
- "ann_bg": "",
60
+ "ann_bg": "#212121",
61
61
  "ann_text": "",
62
62
  "ft_bg": "",
63
63
  "ft_text": "",
@@ -84,8 +84,24 @@
84
84
  "color_primary": "#1A1A2E",
85
85
  "hero_headline": "Welcome to Our Store",
86
86
  "font_size_base": 16,
87
+ "main_container_padding_top": 40,
87
88
  "hero_show_overlay": true,
88
- "product_badge_types": ["sale", "new"]
89
+ "product_badge_types": ["sale", "new"],
90
+ "sale_badge_bg_color": "#c94a4a",
91
+ "sale_badge_text_color": "#ffffff",
92
+ "card_background_product": "color",
93
+ "card_background_product_color": "#f5f4f2",
94
+ "footer_newsletter_title": "",
95
+ "footer_newsletter_description": "",
96
+ "footer_newsletter_text_color": "#ffffff",
97
+ "hide_newsletter_mobile": false,
98
+ "pgrid_hero_cta_text_color": "#1f272b",
99
+ "pgrid_hero_cta_font_weight": "600",
100
+ "featured_hero_subtitle_text_color": "#ffffff",
101
+ "featured_hero_cta_background_color": "#ffffff",
102
+ "featured_hero_cta_text_color": "#1f272b",
103
+ "header_category_strip_bg_color": "#e1dbd1",
104
+ "header_category_strip_text_color": "#212a2f"
89
105
  },
90
106
  "announcement_bar": {
91
107
  "text": ["it works", "Free shipping for 1000 EGP", "Genuine Quality"],
@@ -0,0 +1,107 @@
1
+ {
2
+ "icon": "https://files.easy-orders.net/1778107485984969174.png",
3
+ "label": "Scrolling Marquee (Infinite)",
4
+ "section_schema": [
5
+ {
6
+ "name": "bg_color",
7
+ "type": "color",
8
+ "default": "#000000",
9
+ "description": "خلفية الشريط"
10
+ },
11
+ {
12
+ "name": "text_color",
13
+ "type": "color",
14
+ "default": "#ffffff",
15
+ "description": "لون النص"
16
+ },
17
+ {
18
+ "name": "messages",
19
+ "type": "object_array",
20
+ "fields": [
21
+ {
22
+ "name": "text",
23
+ "type": "string",
24
+ "default": "LIMITED EDITION COLLECTION",
25
+ "description": "الجملة"
26
+ }
27
+ ],
28
+ "description": "الجمل المكررة"
29
+ },
30
+ {
31
+ "name": "text_language",
32
+ "type": "select",
33
+ "default": "auto",
34
+ "description": "لغة المحتوى واتجاه الحركة",
35
+ "options": [
36
+ { "label": "تلقائي", "value": "auto" },
37
+ { "label": "عربي (حركة من الشمال لليمين)", "value": "ar" },
38
+ { "label": "إنجليزي/لاتيني", "value": "en" }
39
+ ]
40
+ },
41
+ {
42
+ "name": "tilt_direction",
43
+ "type": "select",
44
+ "default": "straight",
45
+ "description": "ميل الشريط",
46
+ "options": [
47
+ { "label": "مستقيم", "value": "straight" },
48
+ { "label": "مائل لليمين (5°)", "value": "right" },
49
+ { "label": "مائل لليسار (-5°)", "value": "left" }
50
+ ]
51
+ },
52
+ {
53
+ "name": "font_weight",
54
+ "type": "select",
55
+ "default": "700",
56
+ "description": "وزن الخط",
57
+ "options": [
58
+ { "label": "Normal", "value": "400" },
59
+ { "label": "Medium", "value": "500" },
60
+ { "label": "Bold", "value": "700" },
61
+ { "label": "Black", "value": "900" }
62
+ ]
63
+ },
64
+ {
65
+ "name": "letter_spacing",
66
+ "type": "number",
67
+ "default": 2,
68
+ "description": "تباعد الحروف (px)"
69
+ },
70
+ {
71
+ "name": "desktop_font_size",
72
+ "type": "number",
73
+ "default": 48,
74
+ "description": "حجم الخط - ديسكتوب (px)"
75
+ },
76
+ {
77
+ "name": "desktop_line_height",
78
+ "type": "number",
79
+ "default": 68,
80
+ "description": "ارتفاع الشريط - ديسكتوب (px)"
81
+ },
82
+ {
83
+ "name": "mobile_font_size",
84
+ "type": "number",
85
+ "default": 24,
86
+ "description": "حجم الخط - موبايل (px)"
87
+ },
88
+ {
89
+ "name": "mobile_line_height",
90
+ "type": "number",
91
+ "default": 48,
92
+ "description": "ارتفاع الشريط - موبايل (px)"
93
+ },
94
+ {
95
+ "name": "desktop_speed",
96
+ "type": "number",
97
+ "default": 20,
98
+ "description": "مدة الدورة - ديسكتوب (ثواني - أقل أسرع)"
99
+ },
100
+ {
101
+ "name": "mobile_speed",
102
+ "type": "number",
103
+ "default": 10,
104
+ "description": "مدة الدورة - موبايل (ثواني)"
105
+ }
106
+ ]
107
+ }
@@ -0,0 +1,171 @@
1
+ {% assign tilt_val = "0deg" %}
2
+ {% if section_data.tilt_direction == "right" %}
3
+ {% assign tilt_val = "5deg" %}
4
+ {% elsif section_data.tilt_direction == "left" %}
5
+ {% assign tilt_val = "-5deg" %}
6
+ {% endif %}
7
+ {% assign first_msg = section_data.messages | first %}
8
+ {% assign first_msg_text = "" %}
9
+ {% if first_msg and first_msg.text %}
10
+ {% assign first_msg_text = first_msg.text %}
11
+ {% endif %}
12
+ {% assign marquee_is_arabic = false %}
13
+ {% if section_data.text_language == "ar" %}
14
+ {% assign marquee_is_arabic = true %}
15
+ {% elsif section_data.text_language == "auto" %}
16
+ {% if lang == "ar" or first_msg_text contains "ا" or first_msg_text contains "ب" or first_msg_text contains "ت" or first_msg_text contains "ث" or first_msg_text contains "ج" or first_msg_text contains "ح" or first_msg_text contains "خ" %}
17
+ {% assign marquee_is_arabic = true %}
18
+ {% endif %}
19
+ {% endif %}
20
+ {% assign marquee_repeat_count = 4 %}
21
+ {% if section_data.messages.size <= 1 %}
22
+ {% assign marquee_repeat_count = 8 %}
23
+ {% elsif section_data.messages.size == 2 %}
24
+ {% assign marquee_repeat_count = 6 %}
25
+ {% endif %}
26
+
27
+ <section
28
+ class="ab-marquee-section{% if marquee_is_arabic %} ab-marquee--arabic{% endif %}"
29
+ style="
30
+ --mq-bg: {{ section_data.bg_color | default: '#000' }};
31
+ --mq-color: {{ section_data.text_color | default: '#fff' }};
32
+ --mq-font-size-dt: {{ section_data.desktop_font_size | default: 48 }}px;
33
+ --mq-font-size-mb: {{ section_data.mobile_font_size | default: 24 }}px;
34
+ --mq-lh-dt: {{ section_data.desktop_line_height | default: 68 }}px;
35
+ --mq-lh-mb: {{ section_data.mobile_line_height | default: 48 }}px;
36
+ --mq-weight: {{ section_data.font_weight | default: '700' }};
37
+ --mq-letter-spacing: {{ section_data.letter_spacing | default: 2 }}px;
38
+ --mq-speed-dt: {{ section_data.desktop_speed | default: 20 }}s;
39
+ --mq-speed-mb: {{ section_data.mobile_speed | default: 10 }}s;
40
+ --mq-tilt: {{ tilt_val }};
41
+ "
42
+ >
43
+ <div class="ab-marquee-clip">
44
+ <div class="ab-marquee-band">
45
+ <div class="ab-marquee-wrapper">
46
+ <div class="ab-marquee-track">
47
+ <div class="ab-marquee-content">
48
+ {% for repeat_index in (1..marquee_repeat_count) %}
49
+ {% for item in section_data.messages %}
50
+ <span class="ab-marquee-item">{{ item.text }}</span>
51
+ {% endfor %}
52
+ {% endfor %}
53
+ </div>
54
+
55
+ <div class="ab-marquee-content" aria-hidden="true">
56
+ {% for repeat_index in (1..marquee_repeat_count) %}
57
+ {% for item in section_data.messages %}
58
+ <span class="ab-marquee-item">{{ item.text }}</span>
59
+ {% endfor %}
60
+ {% endfor %}
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ </section>
67
+
68
+ <style>
69
+ .ab-marquee-section {
70
+ margin: 20px 0;
71
+ overflow-x: clip;
72
+ overflow-y: visible;
73
+ position: relative;
74
+ margin-left: -10px;
75
+ margin-right: -10px;
76
+ background-color: transparent;
77
+ }
78
+
79
+ .ab-marquee-clip {
80
+ width: 100%;
81
+ }
82
+
83
+ .ab-marquee-band {
84
+ transform: rotate(var(--mq-tilt));
85
+ transform-origin: center;
86
+ width: calc(100% + 160px);
87
+ margin-left: -80px;
88
+ background-color: transparent; /* خلفية الباند شفافة */
89
+ }
90
+
91
+ .ab-marquee-wrapper {
92
+ display: flex;
93
+ align-items: center;
94
+ background-color: transparent;
95
+ direction: ltr;
96
+ }
97
+
98
+ .ab-marquee-track {
99
+ display: flex;
100
+ width: max-content;
101
+ animation: marquee-scroll var(--mq-speed-dt) linear infinite;
102
+ will-change: transform;
103
+ background-color: var(--mq-bg); /* لون الخلفية اتنقل هنا زي ما طلبت */
104
+ }
105
+
106
+ .ab-marquee-content {
107
+ display: flex;
108
+ align-items: center;
109
+ flex-shrink: 0;
110
+ }
111
+
112
+ .ab-marquee-item {
113
+ color: var(--mq-color);
114
+ font-size: var(--mq-font-size-dt);
115
+ font-weight: var(--mq-weight);
116
+ letter-spacing: var(--mq-letter-spacing); /* تحكم تباعد الحروف */
117
+ line-height: var(--mq-lh-dt); /* التحكم في الارتفاع للديسكتوب */
118
+ white-space: nowrap;
119
+ padding: 0 40px;
120
+ text-transform: uppercase;
121
+ display: inline-flex;
122
+ align-items: center;
123
+ }
124
+
125
+ .ab-marquee-item::after {
126
+ content: "•";
127
+ margin-inline-start: 80px;
128
+ opacity: 0.3;
129
+ }
130
+
131
+ .ab-marquee--arabic .ab-marquee-track {
132
+ animation-name: marquee-scroll-ar;
133
+ }
134
+ .ab-marquee--arabic .ab-marquee-item {
135
+ text-transform: none;
136
+ letter-spacing: 0;
137
+ direction: rtl;
138
+ unicode-bidi: plaintext;
139
+ }
140
+
141
+ @keyframes marquee-scroll {
142
+ from { transform: translateX(0); }
143
+ to { transform: translateX(-50%); }
144
+ }
145
+ @keyframes marquee-scroll-ar {
146
+ from { transform: translateX(-50%); }
147
+ to { transform: translateX(0); }
148
+ }
149
+
150
+ /* ريسبونسيف الموبايل */
151
+ @media (max-width: 768px) {
152
+ .ab-marquee-track {
153
+ animation-duration: var(--mq-speed-mb);
154
+ }
155
+ .ab-marquee-item {
156
+ font-size: var(--mq-font-size-mb);
157
+ line-height: var(--mq-lh-mb); /* التحكم في الارتفاع للموبايل */
158
+ padding: 0 20px;
159
+ }
160
+ .ab-marquee-item::after {
161
+ margin-inline-start: 40px;
162
+ }
163
+ }
164
+
165
+
166
+ {% if section_data.tilt_direction != 'straight' %}
167
+ .ab-marquee-section {
168
+ margin-block: 72px;
169
+ }
170
+ {% endif %}
171
+ </style>
@@ -1,5 +1,5 @@
1
1
  {
2
- "icon": "https://api.iconify.design/lucide:grid-3x3.svg",
2
+ "icon": "https://files.easy-orders.net/1778107568557501919.png",
3
3
  "label": "Category mosaic",
4
4
  "section_schema": [
5
5
  {
@@ -14,6 +14,66 @@
14
14
  "default": "Curated drops for work, weekend, and everything between.",
15
15
  "description": "Subheading under the title"
16
16
  },
17
+ {
18
+ "name": "heading_title_color",
19
+ "type": "color",
20
+ "default": "",
21
+ "group": "controls_title",
22
+ "description": "Heading title color (leave empty for default)"
23
+ },
24
+ {
25
+ "name": "heading_title_size",
26
+ "type": "number",
27
+ "group": "controls_title",
28
+ "default": 38,
29
+ "description": "Heading title size (px)"
30
+ },
31
+ {
32
+ "name": "heading_title_weight",
33
+ "type": "select",
34
+ "default": "500",
35
+ "group": "controls_title",
36
+ "description": "Heading title font weight",
37
+ "options": [
38
+ { "label": "Regular 400", "value": "400" },
39
+ { "label": "Medium 500", "value": "500" },
40
+ { "label": "SemiBold 600", "value": "600" },
41
+ { "label": "Bold 700", "value": "700" }
42
+ ]
43
+ },
44
+ {
45
+ "name": "heading_subtitle_color",
46
+ "type": "color",
47
+ "default": "",
48
+ "group": "controls_subtitle",
49
+ "description": "Subtitle color (leave empty for default)"
50
+ },
51
+ {
52
+ "name": "heading_subtitle_size",
53
+ "type": "number",
54
+ "group": "controls_subtitle",
55
+ "default": 16,
56
+ "description": "Subtitle size (px)"
57
+ },
58
+ {
59
+ "name": "heading_subtitle_weight",
60
+ "type": "select",
61
+ "default": "400",
62
+ "group": "controls_subtitle",
63
+ "description": "Subtitle font weight",
64
+ "options": [
65
+ { "label": "Regular 400", "value": "400" },
66
+ { "label": "Medium 500", "value": "500" },
67
+ { "label": "SemiBold 600", "value": "600" },
68
+ { "label": "Bold 700", "value": "700" }
69
+ ]
70
+ },
71
+ {
72
+ "name": "section_background",
73
+ "type": "color",
74
+ "default": "",
75
+ "description": "Section background color (leave empty for default white)"
76
+ },
17
77
  {
18
78
  "name": "columns",
19
79
  "type": "select",
@@ -32,9 +92,34 @@
32
92
  "description": "Use tighter spacing between tiles"
33
93
  },
34
94
  {
35
- "name": "mosaic_category_ids",
36
- "type": "category_multi_select",
37
- "description": "Categories to show as tiles (search and reorder in the picker). Images and titles load from each category."
95
+ "name": "tiles",
96
+ "type": "object_array",
97
+ "description": "Category or collection tiles",
98
+ "fields": [
99
+ {
100
+ "name": "image",
101
+ "type": "image",
102
+ "default": "",
103
+ "description": "صورة القسم"
104
+ },
105
+ {
106
+ "name": "label",
107
+ "type": "string",
108
+ "default": "Dresses",
109
+ "description": "اسم القسم على الصورة"
110
+ },
111
+ {
112
+ "name": "tagline",
113
+ "type": "string",
114
+ "default": "Fluid lines",
115
+ "description": "وصف قصير تحت الاسم"
116
+ },
117
+ {
118
+ "name": "category_id",
119
+ "type": "category_single_select",
120
+ "description": "اختيار القسم (اللينك يتجاب أوتوماتيك)"
121
+ }
122
+ ]
38
123
  }
39
124
  ]
40
125
  }