jeawin-astro 1.0.77 → 1.0.78

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/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 20.18.0
package/package.json CHANGED
@@ -1,70 +1,73 @@
1
- {
2
- "name": "jeawin-astro",
3
- "version": "1.0.77",
4
- "author": "chaegumi <chaegumi@qq.com>",
5
- "description": "",
6
- "license": "MIT",
7
- "repository": {
8
- "type": "git",
9
- "url": "https://github.com/chaegumi/jeawin-astro.git"
10
- },
11
- "homepage": "https://www.jeawin.com/",
12
- "type": "module",
13
- "types": "index.d.ts",
14
- "main": "index.ts",
15
- "scripts": {
16
- "test": "mocha test"
17
- },
18
- "devDependencies": {
19
- "@babel/core": "^7.26.0",
20
- "@babel/preset-env": "^7.26.0",
21
- "@rollup/plugin-babel": "^6.0.4",
22
- "@rollup/plugin-commonjs": "^28.0.1",
23
- "@rollup/plugin-json": "^6.1.0",
24
- "@rollup/plugin-multi-entry": "^6.0.1",
25
- "@rollup/plugin-node-resolve": "^15.3.0",
26
- "@rollup/plugin-strip": "^3.0.4",
27
- "@rollup/plugin-terser": "^0.4.4",
28
- "@rollup/plugin-typescript": "^12.1.1",
29
- "@types/lodash": "^4.17.13",
30
- "@types/sprintf-js": "^1.1.4",
31
- "autoprefixer": "^10.4.20",
32
- "chai": "^5.1.2",
33
- "mocha": "^10.8.2",
34
- "postcss": "^8.4.49",
35
- "rollup": "^4.27.4",
36
- "rollup-plugin-node-externals": "^7.1.3",
37
- "rollup-plugin-postcss": "^4.0.2",
38
- "typescript": "^5.7.2"
39
- },
40
- "dependencies": {
41
- "@astrojs/check": "^0.9.4",
42
- "@astrojs/cloudflare": "^11.2.0",
43
- "@astrojs/rss": "4.0.9",
44
- "@astrojs/sitemap": "3.2.1",
45
- "@astrojs/tailwind": "5.1.2",
46
- "@astrojs/ts-plugin": "^1.10.4",
47
- "@astrojs/vue": "4.5.2",
48
- "@iconify-json/fa6-brands": "^1.2.3",
49
- "@iconify-json/fa6-solid": "^1.2.2",
50
- "@iconify/tools": "^4.0.7",
51
- "@keyv/compress-brotli": "^2.0.2",
52
- "aos": "3.0.0-beta.6",
53
- "astro": "^4.16.14",
54
- "astro-icon": "^1.1.4",
55
- "astro-integration-kit": "^0.16.1",
56
- "cheerio": "^1.0.0",
57
- "dayjs": "^1.11.13",
58
- "fetch-jsonp": "^1.3.0",
59
- "glob": "^11.0.0",
60
- "keyv": "^5.2.1",
61
- "keyv-lru": "^3.0.4",
62
- "lodash": "^4.17.21",
63
- "photoswipe": "^5.4.4",
64
- "smartmenus": "2.0.0-alpha.1",
65
- "sprintf-js": "^1.1.3",
66
- "string-strip-html": "^13.4.8",
67
- "swiper": "^11.1.15",
68
- "tslib": "^2.8.1"
69
- }
70
- }
1
+ {
2
+ "name": "jeawin-astro",
3
+ "version": "1.0.78",
4
+ "author": "chaegumi <chaegumi@qq.com>",
5
+ "description": "",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/chaegumi/jeawin-astro.git"
10
+ },
11
+ "homepage": "https://www.jeawin.com/",
12
+ "type": "module",
13
+ "types": "index.d.ts",
14
+ "main": "index.ts",
15
+ "scripts": {
16
+ "test": "mocha test"
17
+ },
18
+ "devDependencies": {
19
+ "@babel/core": "^7.26.0",
20
+ "@babel/preset-env": "^7.26.0",
21
+ "@rollup/plugin-babel": "^6.0.4",
22
+ "@rollup/plugin-commonjs": "^28.0.1",
23
+ "@rollup/plugin-json": "^6.1.0",
24
+ "@rollup/plugin-multi-entry": "^6.0.1",
25
+ "@rollup/plugin-node-resolve": "^15.3.0",
26
+ "@rollup/plugin-strip": "^3.0.4",
27
+ "@rollup/plugin-terser": "^0.4.4",
28
+ "@rollup/plugin-typescript": "^12.1.1",
29
+ "@types/lodash": "^4.17.13",
30
+ "@types/sprintf-js": "^1.1.4",
31
+ "autoprefixer": "^10.4.20",
32
+ "chai": "^5.1.2",
33
+ "mocha": "^10.8.2",
34
+ "postcss": "^8.4.49",
35
+ "rollup": "^4.27.4",
36
+ "rollup-plugin-node-externals": "^7.1.3",
37
+ "rollup-plugin-postcss": "^4.0.2",
38
+ "typescript": "^5.7.2"
39
+ },
40
+ "dependencies": {
41
+ "@astrojs/alpinejs": "^0.4.0",
42
+ "@astrojs/check": "^0.9.4",
43
+ "@astrojs/cloudflare": "^11.2.0",
44
+ "@astrojs/rss": "4.0.9",
45
+ "@astrojs/sitemap": "3.2.1",
46
+ "@astrojs/tailwind": "5.1.2",
47
+ "@astrojs/ts-plugin": "^1.10.4",
48
+ "@astrojs/vue": "4.5.2",
49
+ "@iconify-json/fa6-brands": "^1.2.3",
50
+ "@iconify-json/fa6-solid": "^1.2.2",
51
+ "@iconify/tools": "^4.0.7",
52
+ "@keyv/compress-brotli": "^2.0.2",
53
+ "@types/alpinejs": "^3.13.11",
54
+ "alpinejs": "^3.14.5",
55
+ "aos": "3.0.0-beta.6",
56
+ "astro": "^4.16.14",
57
+ "astro-icon": "^1.1.4",
58
+ "astro-integration-kit": "^0.16.1",
59
+ "cheerio": "^1.0.0",
60
+ "dayjs": "^1.11.13",
61
+ "fetch-jsonp": "^1.3.0",
62
+ "glob": "^11.0.0",
63
+ "keyv": "^5.2.1",
64
+ "keyv-lru": "^3.0.4",
65
+ "lodash": "^4.17.21",
66
+ "photoswipe": "^5.4.4",
67
+ "smartmenus": "2.0.0-alpha.1",
68
+ "sprintf-js": "^1.1.3",
69
+ "string-strip-html": "^13.4.8",
70
+ "swiper": "^11.1.15",
71
+ "tslib": "^2.8.1"
72
+ }
73
+ }
@@ -0,0 +1,61 @@
1
+ ---
2
+ import { Icon } from "astro-icon/components";
3
+ import SectionContainer from "../section_container.astro";
4
+ import JeawinImage from "../image.astro";
5
+ import DefaultImage from "../default_image.astro";
6
+
7
+ interface Props {
8
+ bgcolor?: any;
9
+ max_width_screen?: any;
10
+ block_title?: any;
11
+ block_subtitle?: any;
12
+ block_items?: any[];
13
+ }
14
+
15
+ const {
16
+ bgcolor = "bg-white",
17
+ max_width_screen = "max-w-screen-2xl",
18
+ block_title,
19
+ block_subtitle,
20
+ block_items = [],
21
+ } = Astro.props;
22
+ ---
23
+
24
+ <SectionContainer bgcolor={bgcolor} max_width_screen={max_width_screen}>
25
+ <div class="text-center py-8 mx-auto max-w-3xl">
26
+ <div class="text-5xl font-bold mb-6">{block_title}</div>
27
+ <div class="text-xl text-[#666] leading-7">
28
+ <Fragment set:html={block_subtitle} />
29
+ </div>
30
+ </div>
31
+
32
+ <section class="grid grid-cols-1 md:grid-cols-2 gap-8 p-8 mx-auto max-w-7xl">
33
+ {
34
+ block_items.map((itm: any) => (
35
+ <a
36
+ href={itm.link_url}
37
+ class="group relative overflow-hidden rounded-lg no-underline hover:no-underline text-white aspect-video"
38
+ >
39
+ <div class="absolute inset-0">
40
+ {itm.img_html ? (
41
+ <JeawinImage
42
+ img_html={itm.img_html}
43
+ alt={itm.title}
44
+ add_classes="w-full h-full object-cover transition-transform duration-300 ease group-hover:scale-105"
45
+ />
46
+ ) : (
47
+ <DefaultImage class="w-full h-full object-cover transition-transform duration-300 ease group-hover:scale-105" />
48
+ )}
49
+ </div>
50
+ <div class="relative z-[1] bg-gradient-to-b from-[rgba(0, 0, 0, 0.3)] to-[rgba(0, 0, 0, 0.7)] h-full p-8 flex flex-col justify-between">
51
+ <div class="text-2xl font-bold">{itm.title}</div>
52
+ <Icon
53
+ name="fa6-solid:arrow-right"
54
+ class="text-xl opacity-0 group-hover:opacity-100 -translate-x-80 group-hover:translate-x-0 transition-all duration-300 ease"
55
+ />
56
+ </div>
57
+ </a>
58
+ ))
59
+ }
60
+ </section>
61
+ </SectionContainer>
@@ -1,8 +1,7 @@
1
1
  ---
2
- import type { HTMLAttributes } from "astro/types";
3
2
  import SectionContainer from "../section_container.astro";
4
3
 
5
- interface Props extends HTMLAttributes<"div"> {
4
+ interface Props extends astroHTML.JSX.HTMLAttributes {
6
5
  bgcolor?: any;
7
6
  max_width_screen?: any;
8
7
  top_title?: any;
@@ -1,7 +1,6 @@
1
1
  ---
2
- import type { HTMLAttributes } from "astro/types";
3
2
  import SectionContainer from "../section_container.astro";
4
- interface Props extends HTMLAttributes<"div"> {
3
+ interface Props extends astroHTML.JSX.HTMLAttributes {
5
4
  bgcolor?: any;
6
5
  max_width_screen?: any;
7
6
  block_title?: any;
@@ -10,17 +10,27 @@
10
10
  * @email chaegumi@jeawin.com
11
11
  * @filesource
12
12
  */
13
- import { Image } from "astro:assets";
14
-
13
+ import { render_value } from "../scripts/util.js";
15
14
  import defaultimg from "../assets/images/default.png";
15
+
16
+ let classList = "";
17
+ let alt = "No Image";
18
+ if (render_value(Astro.props, "class")) {
19
+ classList = Astro.props.class;
20
+ }
21
+ if (render_value(Astro.props, "alt")) {
22
+ alt = Astro.props.alt;
23
+ }
16
24
  ---
17
25
 
18
- <Image
19
- class="mx-auto rounded-xl transition duration-500 ease-in-out group-hover:scale-105"
20
- src={defaultimg}
21
- alt="No Image"
22
- title="No Image"
26
+ <img
27
+ class:list={[
28
+ "mx-auto rounded-xl transition duration-500 ease-in-out group-hover:scale-105",
29
+ classList,
30
+ ]}
31
+ src={defaultimg.src}
32
+ alt={alt}
33
+ title={alt}
23
34
  decoding="async"
24
35
  loading="lazy"
25
- {...Astro.props}
26
36
  />
@@ -0,0 +1,234 @@
1
+ ---
2
+ import SectionContainer from "../section_container.astro";
3
+ import JeawinImage from "../image.astro";
4
+ import DefaultImage from "../default_image.astro";
5
+ interface Props {
6
+ bgcolor?: any;
7
+ max_width_screen?: any;
8
+ block_title?: any;
9
+ block_title_tag?: any;
10
+ block_items?: any[];
11
+ }
12
+
13
+ const {
14
+ bgcolor = "bg-white",
15
+ max_width_screen = "max-w-screen-2xl",
16
+ block_title = `Fully customizable rules to match your unique needs`,
17
+ block_title_tag = "h2",
18
+ block_items = [
19
+ {
20
+ title: "Advanced tools",
21
+ desc: `Use Preline thoroughly thought and automated libraries to
22
+ manage your businesses.`,
23
+ img_html: `<img
24
+ src="https://images.unsplash.com/photo-1605629921711-2f6b00c6bbf4?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=560&h=720&q=80"
25
+ alt="Features Image"
26
+ />`,
27
+ },
28
+ {
29
+ title: "Smart dashboards",
30
+ desc: `Quickly Preline sample components, copy-paste codes, and
31
+ start right off.`,
32
+
33
+ img_html: `<img
34
+ src="https://images.unsplash.com/photo-1665686306574-1ace09918530?ixlib=rb-4.0.3&ixid=MnwxMjA3fDF8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=560&h=720&q=80"
35
+ alt="Features Image"
36
+ />`,
37
+ },
38
+ {
39
+ title: "Powerful features",
40
+ desc: `Reduce time and effort on building modern look design with
41
+ Preline only.`,
42
+
43
+ img_html: `<img
44
+ src="https://images.unsplash.com/photo-1598929213452-52d72f63e307?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=560&h=720&q=80"
45
+ alt="Features Image"
46
+ />`,
47
+ },
48
+ ],
49
+ } = Astro.props;
50
+
51
+ const BlockTitleTag = block_title_tag;
52
+ ---
53
+
54
+ <SectionContainer bgcolor={bgcolor} max_width_screen={max_width_screen}>
55
+ <!-- Features -->
56
+ <div class="max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 mx-auto">
57
+ <div class="relative p-6 md:p-16">
58
+ <!-- Grid -->
59
+ <div
60
+ class="relative z-10 lg:grid lg:grid-cols-12 lg:gap-16 lg:items-center"
61
+ x-data="{activeTabIndex:0}"
62
+ ><span x-html="activeTabIndex"></span>
63
+ <div class="mb-10 lg:mb-0 lg:col-span-6 lg:col-start-8 lg:order-2">
64
+ <BlockTitleTag
65
+ class="text-2xl text-gray-800 font-bold sm:text-3xl dark:text-neutral-200"
66
+ >
67
+ {block_title}
68
+ </BlockTitleTag>
69
+
70
+ <!-- Tab Navs -->
71
+ <nav
72
+ class="grid gap-4 mt-5 md:mt-10"
73
+ aria-label="Tabs"
74
+ role="tablist"
75
+ aria-orientation="vertical"
76
+ >
77
+ {
78
+ block_items.map((itm: any, idx: number) => (
79
+ <button
80
+ type="button"
81
+ :class={`{
82
+ 'bg-white': activeTabIndex == ${idx},
83
+ 'shadow-md': activeTabIndex == ${idx},
84
+ 'hover:border-transparent': activeTabIndex == ${idx},
85
+ 'text-start':true,
86
+ 'hover:bg-gray-200':true,
87
+ 'focus:outline-none':true,
88
+ 'focus:bg-gray-200':true,
89
+ 'p-4':true,
90
+ 'md:p-5':true,
91
+ 'rounded-xl':true,
92
+ 'dark:bg-neutral-700': activeTabIndex == ${idx},
93
+ 'dark:hover:bg-neutral-700':true,
94
+ 'dark:focus:bg-neutral-700':true
95
+ }`}
96
+ aria-selected={idx > 0 ? false : true}
97
+ role="tab" x-on:click={`activeTabIndex = ${idx}`}
98
+ >
99
+ <span class="flex gap-x-6">
100
+ <svg
101
+ :class={`{
102
+ 'shrink-0':true,
103
+ 'mt-2':true,
104
+ 'size-6':true,
105
+ 'md:size-7':true,
106
+ 'text-blue-600': activeTabIndex == ${idx},
107
+ 'text-gray-800': activeTabIndex != ${idx},
108
+ 'dark:text-blue-500': activeTabIndex == ${idx},
109
+ 'dark:text-neutral-200': activeTabIndex != ${idx}
110
+ }`}
111
+ xmlns="http://www.w3.org/2000/svg"
112
+ width="24"
113
+ height="24"
114
+ viewBox="0 0 24 24"
115
+ fill="none"
116
+ stroke="currentColor"
117
+ stroke-width="2"
118
+ stroke-linecap="round"
119
+ stroke-linejoin="round"
120
+ >
121
+ <path d="M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z" />
122
+ <path d="M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z" />
123
+ <path d="M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z" />
124
+ <path d="M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z" />
125
+ <path d="M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z" />
126
+
127
+ </svg>
128
+ <span class="grow">
129
+ <span
130
+ :class={`{
131
+ 'block':true,
132
+ 'text-lg':true,
133
+ 'font-semibold':true,
134
+ 'text-blue-600': activeTabIndex == ${idx},
135
+ 'text-gray-800': activeTabIndex != ${idx},
136
+ 'dark:text-blue-500': activeTabIndex == ${idx},
137
+ 'dark:text-neutral-200': activeTabIndex != ${idx}
138
+ }`}
139
+ >
140
+ {itm.title}
141
+ </span>
142
+ <span
143
+ :class={`{
144
+ 'block':true,
145
+ 'mt-1':true,
146
+ 'text-gray-800': true,
147
+ 'dark:text-gray-200': activeTabIndex==${idx},
148
+ 'dark:text-neutral-200': activeTabIndex!=${idx}
149
+ }`}
150
+ >
151
+ {itm.desc}
152
+ </span>
153
+ </span>
154
+ </span>
155
+ </button>
156
+ ))
157
+ }
158
+ </nav>
159
+ <!-- End Tab Navs -->
160
+ </div>
161
+ <!-- End Col -->
162
+
163
+ <div class="lg:col-span-6">
164
+ <div class="relative">
165
+ <!-- Tab Content -->
166
+ <div>
167
+ {
168
+ block_items.map((itm: any, idx: number) => (
169
+ <div
170
+ role="tabpanel" class:list={[{'hidden':idx>0}]}
171
+ :class={`{hidden:${idx} != activeTabIndex}`}
172
+ >
173
+ {itm.img_html ? (
174
+ <JeawinImage
175
+ img_html={itm.img_html}
176
+ add_classes="shadow-xl shadow-gray-200 rounded-xl dark:shadow-gray-900/20"
177
+ />
178
+ ) : (
179
+ <DefaultImage class="shadow-xl shadow-gray-200 rounded-xl dark:shadow-gray-900/20" />
180
+ )}
181
+ </div>
182
+ ))
183
+ }
184
+ </div>
185
+ <!-- End Tab Content -->
186
+
187
+ <!-- SVG Element -->
188
+ <div
189
+ class="hidden absolute top-0 end-0 translate-x-20 md:block lg:translate-x-20"
190
+ >
191
+ <svg
192
+ class="w-16 h-auto text-orange-500"
193
+ width="121"
194
+ height="135"
195
+ viewBox="0 0 121 135"
196
+ fill="none"
197
+ xmlns="http://www.w3.org/2000/svg"
198
+ >
199
+ <path
200
+ d="M5 16.4754C11.7688 27.4499 21.2452 57.3224 5 89.0164"
201
+ stroke="currentColor"
202
+ stroke-width="10"
203
+ stroke-linecap="round"></path>
204
+ <path
205
+ d="M33.6761 112.104C44.6984 98.1239 74.2618 57.6776 83.4821 5"
206
+ stroke="currentColor"
207
+ stroke-width="10"
208
+ stroke-linecap="round"></path>
209
+ <path
210
+ d="M50.5525 130C68.2064 127.495 110.731 117.541 116 78.0874"
211
+ stroke="currentColor"
212
+ stroke-width="10"
213
+ stroke-linecap="round"></path>
214
+ </svg>
215
+ </div>
216
+ <!-- End SVG Element -->
217
+ </div>
218
+ </div>
219
+ <!-- End Col -->
220
+ </div>
221
+ <!-- End Grid -->
222
+
223
+ <!-- Background Color -->
224
+ <div class="absolute inset-0 grid grid-cols-12 size-full">
225
+ <div
226
+ class="col-span-full lg:col-span-7 lg:col-start-6 bg-gray-100 w-full h-5/6 rounded-xl sm:h-3/4 lg:h-full dark:bg-neutral-800"
227
+ >
228
+ </div>
229
+ </div>
230
+ <!-- End Background Color -->
231
+ </div>
232
+ </div>
233
+ <!-- End Features -->
234
+ </SectionContainer>
@@ -0,0 +1,153 @@
1
+ ---
2
+ import SectionContainer from "../section_container.astro";
3
+ import JeawinImage from "../image.astro";
4
+ import DefaultImage from "../default_image.astro";
5
+ interface Props {
6
+ bgcolor?: any;
7
+ max_width_screen?: any;
8
+ block_title?: any;
9
+ block_title_tag?: any;
10
+ block_items?: any[];
11
+ }
12
+
13
+ const {
14
+ bgcolor = "bg-white",
15
+ max_width_screen = "max-w-screen-2xl",
16
+ block_title = `Fully customizable rules to match your unique needs`,
17
+ block_title_tag = "h2",
18
+ block_items = [
19
+ {
20
+ title: "All-in-one workspace",
21
+ desc: `Create a business, whether you've got a fresh idea.`,
22
+ img_html: `<img
23
+ src="https://images.unsplash.com/photo-1605629921711-2f6b00c6bbf4?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=560&h=720&q=80"
24
+ alt="Features Image"
25
+ />`,
26
+ },
27
+ {
28
+ title: "Automation on a whole new level",
29
+ desc: `Use automation to scale campaigns profitably and save time doing it.`,
30
+ img_html: `<img
31
+ src="https://images.unsplash.com/photo-1665686306574-1ace09918530?ixlib=rb-4.0.3&ixid=MnwxMjA3fDF8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=560&h=720&q=80"
32
+ alt="Features Image"
33
+ />`,
34
+ },
35
+ {
36
+ title: "Solving probleams for every team",
37
+ desc: `One tool for your company to share knowledge and ship projects.`,
38
+ img_html: `<img
39
+ src="https://images.unsplash.com/photo-1598929213452-52d72f63e307?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=560&h=720&q=80"
40
+ alt="Features Image"
41
+ />`,
42
+ },
43
+ ],
44
+ } = Astro.props;
45
+ ---
46
+
47
+ <SectionContainer bgcolor={bgcolor} max_width_screen={max_width_screen}>
48
+ <!-- Features -->
49
+ <div class="max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 mx-auto" x-data="{activeTabIndex:0}">
50
+ <!-- Tab Nav -->
51
+ <nav
52
+ class="max-w-6xl mx-auto flex flex-col sm:flex-row gap-y-px sm:gap-y-0 sm:gap-x-4"
53
+ aria-label="Tabs"
54
+ role="tablist"
55
+ aria-orientation="horizontal"
56
+ >
57
+ {
58
+ block_items.map((itm: any, idx:number) => (
59
+ <button
60
+ type="button"
61
+ :class={`{
62
+ 'bg-gray-100':activeTabIndex==${idx},
63
+ 'hover:border-transparent':activeTabIndex==${idx},
64
+ 'w-full':true,
65
+ 'flex':true,
66
+ 'flex-col':true,
67
+ 'text-start':true,
68
+ 'hover:bg-gray-100':true,
69
+ 'focus:outline-none':true,
70
+ 'focus:bg-gray-100':true,
71
+ 'p-3':true,
72
+ 'md:p-5':true,
73
+ 'rounded-xl':true,
74
+ 'dark:bg-neutral-800':activeTabIndex==${idx},
75
+ 'dark:hover:bg-neutral-800':true,
76
+ 'dark:focus:bg-neutral-800':true}`}
77
+ aria-selected={idx ==0 ? true : false}
78
+ role="tab" x-on:click={`activeTabIndex = ${idx}`}
79
+ >
80
+ <svg
81
+ :class={`{
82
+ 'shrink-0':true,
83
+ 'hidden':true,
84
+ 'sm:block':true,
85
+ 'size-7':true,
86
+ 'text-blue-600':activeTabIndex==${idx},
87
+ 'text-gray-800':activeTabIndex!=${idx},
88
+ 'dark:text-blue-500':activeTabIndex==${idx},
89
+ 'dark:text-white':activeTabIndex!=${idx}
90
+ }`}
91
+ xmlns="http://www.w3.org/2000/svg"
92
+ width="24"
93
+ height="24"
94
+ viewBox="0 0 24 24"
95
+ fill="none"
96
+ stroke="currentColor"
97
+ stroke-width="2"
98
+ stroke-linecap="round"
99
+ stroke-linejoin="round"
100
+ >
101
+ <path d="M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z" />
102
+ <path d="M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z" />
103
+ <path d="M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z" />
104
+ <path d="M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z" />
105
+ <path d="M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z" />
106
+
107
+ </svg>
108
+ <span class="mt-5">
109
+ <span :class={`{
110
+ 'text-blue-600':activeTabIndex==${idx},
111
+ 'block':true,
112
+ 'font-semibold':true,
113
+ 'text-gray-800':activeTabIndex!=${idx},
114
+ 'dark:text-blue-500':activeTabIndex==${idx},
115
+ 'dark:text-neutral-200':true
116
+ }`}>
117
+ {itm.title}
118
+ </span>
119
+ <span class="hidden lg:block mt-2 text-gray-800 dark:text-neutral-200">
120
+ {itm.desc}
121
+ </span>
122
+ </span>
123
+ </button>
124
+ ))
125
+ }
126
+ </nav>
127
+ <!-- End Tab Nav -->
128
+
129
+ <!-- Tab Content -->
130
+ <div class="mt-12 md:mt-16">
131
+ {block_items.map((itm: any, idx: number) => (
132
+ <div
133
+ role="tabpanel" class:list={[{"hidden":idx>0}]} :class={`{hidden:${idx} != activeTabIndex}`}
134
+ >
135
+ <!-- Devices -->
136
+ <div class="">
137
+ {itm.img_html ? (
138
+ <JeawinImage
139
+ img_html={itm.img_html}
140
+ add_classes="mx-auto shadow-xl shadow-gray-200 rounded-xl dark:shadow-gray-900/20"
141
+ />
142
+ ) : (
143
+ <DefaultImage class="mx-auto shadow-xl shadow-gray-200 rounded-xl dark:shadow-gray-900/20" />
144
+ )}
145
+ </div>
146
+ <!-- End Devices -->
147
+ </div>
148
+ ))}
149
+ </div>
150
+ <!-- End Tab Content -->
151
+ </div>
152
+ <!-- End Features -->
153
+ </SectionContainer>