@kompasid/lit-web-components 0.8.30 → 0.9.0

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/demo/index.html CHANGED
@@ -45,6 +45,7 @@
45
45
 
46
46
  <script type="module">
47
47
  import { html, render } from 'lit'
48
+ import '../dist/src/components/kompasid-menu-sidebar/KompasMenuSideBar.js'
48
49
  import '../dist/src/components/kompasid-widget-recirculations-default/KompasWidgetRecirculationsDefault.js'
49
50
  import '../dist/src/components/kompasid-widget-recirculations-list/KompasWidgetRecirculationsList.js'
50
51
  import '../dist/src/components/kompasid-footer/KompasFooter.js'
@@ -143,6 +144,7 @@
143
144
  titleLink: '/kategori/ekonomi',
144
145
  }
145
146
 
147
+
146
148
  render(
147
149
  html`
148
150
  <header
@@ -195,6 +197,7 @@
195
197
  apiSlug="popular-article"
196
198
  >
197
199
  </kompasid-widget-recirculations-list>
200
+ <kompasid-menu-side-bar></kompasid-menu-side-bar>
198
201
 
199
202
  <kompasid-widget-recirculations-list
200
203
  widgetTitle="Terbaru"
@@ -0,0 +1,64 @@
1
+ import { LitElement } from 'lit';
2
+ interface DataExternalLink {
3
+ external?: boolean;
4
+ gtmClass?: string;
5
+ icon: object | null;
6
+ iconify: string | null;
7
+ isNew: boolean;
8
+ name: string;
9
+ url: string;
10
+ }
11
+ interface dataType {
12
+ href: string;
13
+ external?: boolean;
14
+ icon: object | null;
15
+ iconify: string | null;
16
+ name: string;
17
+ slug: string;
18
+ redDot: [
19
+ {
20
+ start: string;
21
+ end: string;
22
+ }
23
+ ];
24
+ children: [
25
+ {
26
+ href: string;
27
+ external: boolean;
28
+ icon: string;
29
+ iconify: string | null;
30
+ name: string;
31
+ slug: string;
32
+ redDot: [
33
+ {
34
+ start: string;
35
+ end: string;
36
+ }
37
+ ];
38
+ }
39
+ ];
40
+ }
41
+ interface DataSideBarLink {
42
+ feature: dataType[];
43
+ category: dataType[];
44
+ }
45
+ export declare class KompasMenuSideBar extends LitElement {
46
+ static styles: import("lit").CSSResult[];
47
+ dataExternal: DataExternalLink[];
48
+ connectedCallback(): Promise<void>;
49
+ handleFetchError(error: unknown): void;
50
+ dataSidebar: DataSideBarLink;
51
+ fetchExternal(): Promise<void>;
52
+ renderChips(): import("lit").TemplateResult<1>[];
53
+ hasChildren(item: any): boolean;
54
+ rubricClicked(item: {
55
+ name: string;
56
+ href?: string;
57
+ }, event?: Event): void;
58
+ private expandedSlug;
59
+ private toggleChildren;
60
+ private showNavBar;
61
+ toggleNavSidebar: (e: Event) => void;
62
+ render(): import("lit").TemplateResult<1>;
63
+ }
64
+ export {};
@@ -0,0 +1,479 @@
1
+ import { __decorate } from "tslib";
2
+ /* eslint-disable lit-a11y/click-events-have-key-events */
3
+ import { html, css, LitElement } from 'lit';
4
+ import { customElement, property, state } from 'lit/decorators.js';
5
+ import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
6
+ import { TWStyles } from '../../../tailwind/tailwind.js';
7
+ import { getFontAwesomeIcon } from '../../utils/fontawesome-setup.js';
8
+ import { decodeSpecialChars } from '../../utils/decodeSpecialChars.js';
9
+ import { timedContent } from '../../utils/timedContent.js';
10
+ let KompasMenuSideBar = class KompasMenuSideBar extends LitElement {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.dataExternal = [];
14
+ this.dataSidebar = {
15
+ feature: [],
16
+ category: [],
17
+ };
18
+ this.expandedSlug = null;
19
+ this.showNavBar = false;
20
+ this.toggleNavSidebar = (e) => {
21
+ e.stopPropagation(); // prevent bubbling
22
+ this.showNavBar = !this.showNavBar;
23
+ };
24
+ }
25
+ // @property({ type: Array }) dataSidebar: DataSideBarLink[] = []
26
+ async connectedCallback() {
27
+ super.connectedCallback();
28
+ try {
29
+ await this.fetchExternal();
30
+ }
31
+ catch (error) {
32
+ this.handleFetchError(error);
33
+ }
34
+ }
35
+ handleFetchError(error) {
36
+ const errorMessage = error instanceof Error ? error.message : 'Kesalahan tidak diketahui';
37
+ alert(`Terjadi kesalahan: ${errorMessage}`);
38
+ }
39
+ async fetchExternal() {
40
+ var _a, _b;
41
+ // External
42
+ const endpointExternal = `https://cdn-www.kompas.id/assets/json/ApiMenuExternalLink.json`;
43
+ const response = await fetch(endpointExternal, {
44
+ headers: {
45
+ 'Content-Type': 'application/json',
46
+ },
47
+ });
48
+ const resultExternal = await response.json();
49
+ // eslint-disable-next-line no-undef
50
+ if (!resultExternal || !Array.isArray(resultExternal)) {
51
+ console.error('Error: resultExternal.result is undefined or not an array', resultExternal);
52
+ this.dataExternal = []; // Ensure dataExternal is an empty array instead of undefined
53
+ }
54
+ else {
55
+ this.dataExternal = resultExternal.map((externalLink) => {
56
+ var _a, _b, _c, _d, _e, _f, _g;
57
+ return ({
58
+ external: (_a = externalLink.external) !== null && _a !== void 0 ? _a : false,
59
+ gtmClass: (_b = externalLink.gtmClass) !== null && _b !== void 0 ? _b : '',
60
+ icon: (_c = externalLink.icon) !== null && _c !== void 0 ? _c : null,
61
+ iconify: (_d = externalLink.iconify) !== null && _d !== void 0 ? _d : null,
62
+ isNew: (_e = externalLink.isNew) !== null && _e !== void 0 ? _e : false,
63
+ name: (_f = externalLink.name) !== null && _f !== void 0 ? _f : '',
64
+ url: (_g = externalLink.url) !== null && _g !== void 0 ? _g : '',
65
+ });
66
+ });
67
+ }
68
+ // Sidebar
69
+ const endpointSidebar = `https://cdn-www.kompas.id/assets/json/ApiMenuSideV2.json`;
70
+ const responseSidebar = await fetch(endpointSidebar, {
71
+ headers: {
72
+ 'Content-Type': 'application/json',
73
+ },
74
+ });
75
+ const resultSidebar = await responseSidebar.json();
76
+ // Validate the structure of the response
77
+ if (!resultSidebar || typeof resultSidebar !== 'object') {
78
+ console.error('Invalid response format:', resultSidebar);
79
+ return;
80
+ }
81
+ // Convert object to an array
82
+ const sidebarArray = Object.values(resultSidebar);
83
+ const [featureArray, categoryArray] = sidebarArray;
84
+ const features = (_a = featureArray === null || featureArray === void 0 ? void 0 : featureArray.map((item) => {
85
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
86
+ return ({
87
+ href: (_a = item === null || item === void 0 ? void 0 : item.href) !== null && _a !== void 0 ? _a : '',
88
+ external: (_b = item === null || item === void 0 ? void 0 : item.external) !== null && _b !== void 0 ? _b : false,
89
+ icon: (_c = item === null || item === void 0 ? void 0 : item.icon) !== null && _c !== void 0 ? _c : null,
90
+ iconify: (_d = item === null || item === void 0 ? void 0 : item.iconify) !== null && _d !== void 0 ? _d : null,
91
+ name: (_e = item === null || item === void 0 ? void 0 : item.name) !== null && _e !== void 0 ? _e : '',
92
+ slug: (_f = item === null || item === void 0 ? void 0 : item.slug) !== null && _f !== void 0 ? _f : '',
93
+ redDot: [
94
+ {
95
+ start: (_h = (_g = item === null || item === void 0 ? void 0 : item.redDot) === null || _g === void 0 ? void 0 : _g.start) !== null && _h !== void 0 ? _h : '',
96
+ end: (_k = (_j = item === null || item === void 0 ? void 0 : item.redDot) === null || _j === void 0 ? void 0 : _j.end) !== null && _k !== void 0 ? _k : '',
97
+ },
98
+ ],
99
+ children: Array.isArray(item === null || item === void 0 ? void 0 : item.children)
100
+ ? item.children.map((child) => {
101
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
102
+ return ({
103
+ href: (_a = child === null || child === void 0 ? void 0 : child.href) !== null && _a !== void 0 ? _a : '',
104
+ external: (_b = child === null || child === void 0 ? void 0 : child.external) !== null && _b !== void 0 ? _b : false,
105
+ icon: (_c = child === null || child === void 0 ? void 0 : child.icon) !== null && _c !== void 0 ? _c : '',
106
+ iconify: (_d = child === null || child === void 0 ? void 0 : child.iconify) !== null && _d !== void 0 ? _d : '',
107
+ name: (_e = child === null || child === void 0 ? void 0 : child.name) !== null && _e !== void 0 ? _e : '',
108
+ slug: (_f = child === null || child === void 0 ? void 0 : child.slug) !== null && _f !== void 0 ? _f : '',
109
+ redDot: [
110
+ {
111
+ start: (_h = (_g = child === null || child === void 0 ? void 0 : child.redDot) === null || _g === void 0 ? void 0 : _g.start) !== null && _h !== void 0 ? _h : '',
112
+ end: (_k = (_j = child === null || child === void 0 ? void 0 : child.redDot) === null || _j === void 0 ? void 0 : _j.end) !== null && _k !== void 0 ? _k : '',
113
+ },
114
+ ],
115
+ });
116
+ })
117
+ : [],
118
+ });
119
+ })) !== null && _a !== void 0 ? _a : [];
120
+ // Map category data
121
+ const categories = (_b = categoryArray === null || categoryArray === void 0 ? void 0 : categoryArray.map((item) => {
122
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
123
+ return ({
124
+ href: (_a = item === null || item === void 0 ? void 0 : item.href) !== null && _a !== void 0 ? _a : '',
125
+ external: (_b = item === null || item === void 0 ? void 0 : item.external) !== null && _b !== void 0 ? _b : false,
126
+ icon: (_c = item === null || item === void 0 ? void 0 : item.icon) !== null && _c !== void 0 ? _c : null,
127
+ iconify: (_d = item === null || item === void 0 ? void 0 : item.iconify) !== null && _d !== void 0 ? _d : null,
128
+ name: (_e = item === null || item === void 0 ? void 0 : item.name) !== null && _e !== void 0 ? _e : '',
129
+ slug: (_f = item === null || item === void 0 ? void 0 : item.slug) !== null && _f !== void 0 ? _f : '',
130
+ redDot: [
131
+ {
132
+ start: (_h = (_g = item === null || item === void 0 ? void 0 : item.redDot) === null || _g === void 0 ? void 0 : _g.start) !== null && _h !== void 0 ? _h : '',
133
+ end: (_k = (_j = item === null || item === void 0 ? void 0 : item.redDot) === null || _j === void 0 ? void 0 : _j.end) !== null && _k !== void 0 ? _k : '',
134
+ },
135
+ ],
136
+ children: Array.isArray(item === null || item === void 0 ? void 0 : item.children)
137
+ ? item.children.map((child) => {
138
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
139
+ return ({
140
+ href: (_a = child === null || child === void 0 ? void 0 : child.href) !== null && _a !== void 0 ? _a : '',
141
+ external: (_b = child === null || child === void 0 ? void 0 : child.external) !== null && _b !== void 0 ? _b : false,
142
+ icon: (_c = child === null || child === void 0 ? void 0 : child.icon) !== null && _c !== void 0 ? _c : '',
143
+ iconify: (_d = child === null || child === void 0 ? void 0 : child.iconify) !== null && _d !== void 0 ? _d : '',
144
+ name: (_e = child === null || child === void 0 ? void 0 : child.name) !== null && _e !== void 0 ? _e : '',
145
+ slug: (_f = child === null || child === void 0 ? void 0 : child.slug) !== null && _f !== void 0 ? _f : '',
146
+ redDot: [
147
+ {
148
+ start: (_h = (_g = child === null || child === void 0 ? void 0 : child.redDot) === null || _g === void 0 ? void 0 : _g.start) !== null && _h !== void 0 ? _h : '',
149
+ end: (_k = (_j = child === null || child === void 0 ? void 0 : child.redDot) === null || _j === void 0 ? void 0 : _j.end) !== null && _k !== void 0 ? _k : '',
150
+ },
151
+ ],
152
+ });
153
+ })
154
+ : [],
155
+ });
156
+ })) !== null && _b !== void 0 ? _b : [];
157
+ this.dataSidebar = { feature: features, category: categories };
158
+ this.requestUpdate();
159
+ }
160
+ renderChips() {
161
+ const chips = [];
162
+ chips.push(html `
163
+ <div class="flex">
164
+ <div
165
+ class="py-1 px-2 rounded text-xs"
166
+ style="position: absolute; top: -22px; right: -24px; display: inline-flex; background-color:#D71920;"
167
+ >
168
+ <span class="font-normal text-white capitalize">Baru</span>
169
+ </div>
170
+ </div>
171
+ `);
172
+ return chips;
173
+ }
174
+ hasChildren(item) {
175
+ return Array.isArray(item === null || item === void 0 ? void 0 : item.children) && item.children.length > 0;
176
+ }
177
+ rubricClicked(item, event) {
178
+ if (event) {
179
+ event.stopPropagation(); // Prevent parent click event
180
+ }
181
+ if (item.href) {
182
+ window.location.href = item.href;
183
+ }
184
+ // add data layer here
185
+ }
186
+ toggleChildren(item) {
187
+ this.expandedSlug = this.expandedSlug === item.slug ? null : item.slug;
188
+ }
189
+ render() {
190
+ return html `
191
+ <!-- Button Menu -->
192
+ <div
193
+ class="w-fit flex items-center justify-center cursor-pointer relative"
194
+ @click=${this.toggleNavSidebar}
195
+ >
196
+ <div class="h-4 inline-flex text-brand-1">
197
+ ${unsafeSVG(getFontAwesomeIcon('fas', 'bars'))}
198
+ </div>
199
+ <span
200
+ class="font-sans hidden sm:inline ml-2 tracking-wide text-brand-1 font-bold"
201
+ >Menu</span
202
+ >
203
+ </div>
204
+ <!-- Side Menu -->
205
+ <nav
206
+ @click=${this.toggleNavSidebar}
207
+ class=${this.showNavBar
208
+ ? 'fixed left-0 top-0 w-screen z-[100]'
209
+ : 'hidden'}
210
+ >
211
+ <div
212
+ ref="toggle-nav-sidebar"
213
+ class="bg-white h-screen menu-menu-sidebar overflow-y-auto pb-20 pt-0 shadow-lg"
214
+ style="width: 312px;"
215
+ >
216
+ <div
217
+ class="bg-[#e1f0ff] flex flex-col items-center justify-center mb-6 w-full"
218
+ >
219
+ <div
220
+ ref="logo-kompas"
221
+ class="flex items-center justify-between px-4 py-6 w-full"
222
+ >
223
+ <a href="/" class="flex h-9 w-9">
224
+ <img
225
+ src="https://cdn-www.kompas.id/assets/img/icons/kompas-icon.svg"
226
+ alt="Kompas.id"
227
+ scale="0"
228
+ class="block w-full"
229
+ />
230
+ </a>
231
+ <span
232
+ class="bg-[#93c8fd] cursor-pointer flex h-10 items-center justify-center rounded text-base w-10 p-4"
233
+ @click=${this.toggleNavSidebar}
234
+ >
235
+ ${unsafeSVG(getFontAwesomeIcon('fa', 'times'))}
236
+ </span>
237
+ </div>
238
+ <div class="flex flex-wrap px-4 w-full">
239
+ ${this.dataExternal.map(item => html `
240
+ <a href="${item.url}" class="block w-1/2 no-underline">
241
+ <div class="cursor-pointer flex items-center pb-6 w-full">
242
+ <div class="flex mr-2">
243
+ ${item.icon &&
244
+ Array.isArray(item.icon) &&
245
+ item.icon.length >= 2
246
+ ? unsafeSVG(getFontAwesomeIcon(item.icon[0], item.icon[1]))
247
+ : ''}
248
+ </div>
249
+ <span class="font-sans relative text-sm text-brand-1">
250
+ ${item.name} ${item.isNew ? this.renderChips() : ''}
251
+ </span>
252
+ </div>
253
+ </a>
254
+ `)}
255
+ </div>
256
+ </div>
257
+ <!-- feature -->
258
+ <div class="flex">
259
+ <div class="flex justify-between flex-col">
260
+ ${this.dataSidebar.feature.map(item => html `
261
+ <div class="w-full font-sans">
262
+ <!-- Parent item -->
263
+ <div
264
+ class="flex items-center justify-between px-4 text-sm font-medium text-gray-700 transition-all cursor-pointer"
265
+ @click=${(e) => this.rubricClicked(item, e)}
266
+ >
267
+ <div
268
+ class="w-[216px] hover:bg-[#f3f4f6] rounded h-12 flex items-center"
269
+ >
270
+ <div class="flex items-center space-x-3">
271
+ <span
272
+ class="text-xl text-brand-1 w-8 h-8 flex items-center"
273
+ >
274
+ ${item.icon &&
275
+ Array.isArray(item.icon) &&
276
+ item.icon.length >= 2
277
+ ? unsafeSVG(getFontAwesomeIcon(item.icon[0], item.icon[1]))
278
+ : ''}
279
+ </span>
280
+ <span class="font-bold relative text-[#333] w-full"
281
+ >${decodeSpecialChars(item.name)}</span
282
+ >
283
+ ${timedContent(item.redDot[0].start, item.redDot[0].end)
284
+ ? html `<span
285
+ class="bg-orange-600 h-2 relative rounded-full w-2 -top-[12px]"
286
+ ></span>`
287
+ : ''}
288
+ </div>
289
+ </div>
290
+
291
+ <!-- Toggle chevron -->
292
+ ${this.hasChildren(item)
293
+ ? html `
294
+ <span
295
+ class="text-xs bg-[#e1f0ff] flex justify-center items-center rounded my-1 p-4 w-10 h-10 cursor-pointer"
296
+ @click=${(e) => {
297
+ e.stopPropagation(); // Prevents click from bubbling to parent
298
+ this.toggleChildren(item);
299
+ }}
300
+ >
301
+ ${this.expandedSlug === item.slug
302
+ ? unsafeSVG(getFontAwesomeIcon('fas', 'chevron-up'))
303
+ : unsafeSVG(getFontAwesomeIcon('fas', 'chevron-down'))}
304
+ </span>
305
+ `
306
+ : null}
307
+ </div>
308
+
309
+ <!-- Children items -->
310
+ ${this.hasChildren(item) && this.expandedSlug === item.slug
311
+ ? html `
312
+ <div class="pl-14 pt-1 pb-2 space-y-1">
313
+ ${item.children.map(child => html `
314
+ <div
315
+ class="flex items-center text-sm text-gray-600 px-4 cursor-pointer transition-all"
316
+ @click=${() => this.rubricClicked(child)}
317
+ >
318
+ <div
319
+ class="w-[216px] hover:bg-[#f3f4f6] rounded h-12 flex items-center pl-11"
320
+ >
321
+ ${decodeSpecialChars(child.name)}
322
+ ${timedContent(child.redDot[0].start, child.redDot[0].end)
323
+ ? html `<span
324
+ class="bg-orange-600 h-2 relative rounded-full w-2 -top-[12px]"
325
+ ></span>`
326
+ : ''}
327
+ <div></div>
328
+ </div>
329
+ </div>
330
+ `)}
331
+ </div>
332
+ `
333
+ : ''}
334
+ </div>
335
+ `)}
336
+ </div>
337
+ </div>
338
+ <div class="border-b border-[#DDD] m-6 "></div>
339
+ <!-- category -->
340
+ <div class="flex">
341
+ <div class="w-full flex justify-between flex-col">
342
+ ${this.dataSidebar.category.map(item => html `
343
+ <div class="w-full font-sans">
344
+ <!-- Parent item -->
345
+ <div
346
+ class="flex items-center justify-between text-sm font-medium text-gray-700 px-4 transition-all cursor-pointer"
347
+ @click=${(e) => this.rubricClicked(item, e)}
348
+ >
349
+ <div
350
+ class="w-[216px] hover:bg-[#f3f4f6] rounded h-12 flex items-center"
351
+ >
352
+ <div class="flex items-center space-x-3">
353
+ <span
354
+ class="text-xl text-brand-1 w-8 h-8 flex items-center"
355
+ >
356
+ ${item.icon &&
357
+ Array.isArray(item.icon) &&
358
+ item.icon.length >= 2
359
+ ? unsafeSVG(getFontAwesomeIcon(item.icon[0], item.icon[1]))
360
+ : ''}
361
+ </span>
362
+ <span
363
+ class="font-bold ${item.name === 'Beranda'
364
+ ? 'text-[#00559a]'
365
+ : 'text-[#333] w-full'}"
366
+ >${decodeSpecialChars(item.name)}</span
367
+ >
368
+
369
+ ${timedContent(item.redDot[0].start, item.redDot[0].end)
370
+ ? html `<span
371
+ class="bg-orange-600 h-2 relative rounded-full w-2 -top-[12px]"
372
+ ></span>`
373
+ : ''}
374
+ </div>
375
+ </div>
376
+
377
+ <!-- Toggle chevron -->
378
+ ${this.hasChildren(item)
379
+ ? html `
380
+ <span
381
+ class="text-xs bg-[#e1f0ff] flex justify-center items-center rounded my-1 p-4 w-10 h-10 cursor-pointer"
382
+ @click=${(e) => {
383
+ e.stopPropagation(); // Prevents click from bubbling to parent
384
+ this.toggleChildren(item);
385
+ }}
386
+ >
387
+ ${this.expandedSlug === item.slug
388
+ ? unsafeSVG(getFontAwesomeIcon('fas', 'chevron-up'))
389
+ : unsafeSVG(getFontAwesomeIcon('fas', 'chevron-down'))}
390
+ </span>
391
+ `
392
+ : null}
393
+ </div>
394
+
395
+ <!-- Children items -->
396
+ ${this.hasChildren(item) && this.expandedSlug === item.slug
397
+ ? html `
398
+ <div class="pt-1 pb-2 space-y-1">
399
+ ${item.children.map(child => html `
400
+ <div
401
+ class="flex items-center text-sm text-gray-600 px-4 cursor-pointer transition-all"
402
+ @click=${() => this.rubricClicked(child)}
403
+ >
404
+ <div
405
+ class="w-[216px] hover:bg-[#f3f4f6] rounded h-12 flex items-center pl-11"
406
+ >
407
+ ${decodeSpecialChars(child.name)}
408
+ ${timedContent(child.redDot[0].start, child.redDot[0].end)
409
+ ? html `<span
410
+ class="bg-orange-600 h-2 relative rounded-full w-2 -top-[12px]"
411
+ ></span>`
412
+ : ''}
413
+ </div>
414
+ </div>
415
+ `)}
416
+ </div>
417
+ `
418
+ : ''}
419
+ </div>
420
+ `)}
421
+ </div>
422
+ </div>
423
+ </div>
424
+ </nav>
425
+ `;
426
+ }
427
+ };
428
+ KompasMenuSideBar.styles = [
429
+ css `
430
+ .slide-side-enter-active,
431
+ .slide-side-leave-active {
432
+ transition: all 0.3s ease-out;
433
+ }
434
+ .slide-side-enter,
435
+ .slide-side-leave-to {
436
+ transform: translateX(-100%);
437
+ }
438
+ /* end: transisi buat sidebar */
439
+ .nuxt-link-exact-active {
440
+ @apply text-brand-1;
441
+ }
442
+ .menu-menu-sidebar {
443
+ z-index: 99999;
444
+ }
445
+ /* Force scrollbar to always show (for debugging) */
446
+ .menu-menu-sidebar::-webkit-scrollbar {
447
+ width: 4px;
448
+ }
449
+
450
+ .menu-menu-sidebar::-webkit-scrollbar-track {
451
+ background: white;
452
+ }
453
+
454
+ .menu-menu-sidebar::-webkit-scrollbar-thumb {
455
+ background-color: #00557d; /* Replace with your brand color */
456
+ border-radius: 8px;
457
+ }
458
+
459
+ .menu-menu-sidebar::-webkit-scrollbar-button,
460
+ .menu-menu-sidebar::-webkit-scrollbar-corner {
461
+ background-color: white;
462
+ }
463
+ `,
464
+ TWStyles,
465
+ ];
466
+ __decorate([
467
+ property({ type: Array })
468
+ ], KompasMenuSideBar.prototype, "dataExternal", void 0);
469
+ __decorate([
470
+ state()
471
+ ], KompasMenuSideBar.prototype, "expandedSlug", void 0);
472
+ __decorate([
473
+ state()
474
+ ], KompasMenuSideBar.prototype, "showNavBar", void 0);
475
+ KompasMenuSideBar = __decorate([
476
+ customElement('kompasid-menu-side-bar')
477
+ ], KompasMenuSideBar);
478
+ export { KompasMenuSideBar };
479
+ //# sourceMappingURL=KompasMenuSideBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KompasMenuSideBar.js","sourceRoot":"","sources":["../../../../src/components/kompasid-menu-sidebar/KompasMenuSideBar.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable lit-a11y/click-events-have-key-events */\nimport { html, css, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js'\nimport { TWStyles } from '../../../tailwind/tailwind.js'\nimport { getFontAwesomeIcon } from '../../utils/fontawesome-setup.js'\nimport { decodeSpecialChars } from '../../utils/decodeSpecialChars.js'\nimport { timedContent } from '../../utils/timedContent.js'\n\ninterface DataExternalLink {\n external?: boolean\n gtmClass?: string\n icon: object | null\n iconify: string | null\n isNew: boolean\n name: string\n url: string\n}\n\ninterface dataType {\n href: string\n external?: boolean\n icon: object | null\n iconify: string | null\n name: string\n slug: string\n redDot: [\n {\n start: string\n end: string\n }\n ]\n children: [\n {\n href: string\n external: boolean\n icon: string\n iconify: string | null\n name: string\n slug: string\n redDot: [\n {\n start: string\n end: string\n }\n ]\n }\n ]\n}\ninterface DataSideBarLink {\n feature: dataType[]\n category: dataType[]\n}\n\n@customElement('kompasid-menu-side-bar')\nexport class KompasMenuSideBar extends LitElement {\n static styles = [\n css`\n .slide-side-enter-active,\n .slide-side-leave-active {\n transition: all 0.3s ease-out;\n }\n .slide-side-enter,\n .slide-side-leave-to {\n transform: translateX(-100%);\n }\n /* end: transisi buat sidebar */\n .nuxt-link-exact-active {\n @apply text-brand-1;\n }\n .menu-menu-sidebar {\n z-index: 99999;\n }\n /* Force scrollbar to always show (for debugging) */\n .menu-menu-sidebar::-webkit-scrollbar {\n width: 4px;\n }\n\n .menu-menu-sidebar::-webkit-scrollbar-track {\n background: white;\n }\n\n .menu-menu-sidebar::-webkit-scrollbar-thumb {\n background-color: #00557d; /* Replace with your brand color */\n border-radius: 8px;\n }\n\n .menu-menu-sidebar::-webkit-scrollbar-button,\n .menu-menu-sidebar::-webkit-scrollbar-corner {\n background-color: white;\n }\n `,\n TWStyles,\n ]\n @property({ type: Array }) dataExternal: DataExternalLink[] = []\n // @property({ type: Array }) dataSidebar: DataSideBarLink[] = []\n\n async connectedCallback() {\n super.connectedCallback()\n try {\n await this.fetchExternal()\n } catch (error) {\n this.handleFetchError(error)\n }\n }\n handleFetchError(error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'Kesalahan tidak diketahui'\n alert(`Terjadi kesalahan: ${errorMessage}`)\n }\n\n dataSidebar: DataSideBarLink = {\n feature: [],\n category: [],\n }\n async fetchExternal() {\n // External\n const endpointExternal = `https://cdn-www.kompas.id/assets/json/ApiMenuExternalLink.json`\n const response = await fetch(endpointExternal, {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n const resultExternal = await response.json()\n // eslint-disable-next-line no-undef\n if (!resultExternal || !Array.isArray(resultExternal)) {\n console.error(\n 'Error: resultExternal.result is undefined or not an array',\n resultExternal\n )\n this.dataExternal = [] // Ensure dataExternal is an empty array instead of undefined\n } else {\n this.dataExternal = resultExternal.map(\n (externalLink: Partial<DataExternalLink>) => ({\n external: externalLink.external ?? false,\n gtmClass: externalLink.gtmClass ?? '',\n icon: externalLink.icon ?? null,\n iconify: externalLink.iconify ?? null,\n isNew: externalLink.isNew ?? false,\n name: externalLink.name ?? '',\n url: externalLink.url ?? '',\n })\n )\n }\n // Sidebar\n const endpointSidebar = `https://cdn-www.kompas.id/assets/json/ApiMenuSideV2.json`\n const responseSidebar = await fetch(endpointSidebar, {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n const resultSidebar = await responseSidebar.json()\n // Validate the structure of the response\n if (!resultSidebar || typeof resultSidebar !== 'object') {\n console.error('Invalid response format:', resultSidebar)\n return\n }\n\n // Convert object to an array\n const sidebarArray = Object.values(resultSidebar)\n const [featureArray, categoryArray] = sidebarArray as [any[], any[]]\n const features: dataType[] =\n featureArray?.map((item: any) => ({\n href: item?.href ?? '',\n external: item?.external ?? false,\n icon: item?.icon ?? null,\n iconify: item?.iconify ?? null,\n name: item?.name ?? '',\n slug: item?.slug ?? '',\n redDot: [\n {\n start: item?.redDot?.start ?? '',\n end: item?.redDot?.end ?? '',\n },\n ],\n children: Array.isArray(item?.children)\n ? item.children.map((child: any) => ({\n href: child?.href ?? '',\n external: child?.external ?? false,\n icon: child?.icon ?? '',\n iconify: child?.iconify ?? '',\n name: child?.name ?? '',\n slug: child?.slug ?? '',\n redDot: [\n {\n start: child?.redDot?.start ?? '',\n end: child?.redDot?.end ?? '',\n },\n ],\n }))\n : [],\n })) ?? []\n\n // Map category data\n const categories: dataType[] =\n categoryArray?.map((item: any) => ({\n href: item?.href ?? '',\n external: item?.external ?? false,\n icon: item?.icon ?? null,\n iconify: item?.iconify ?? null,\n name: item?.name ?? '',\n slug: item?.slug ?? '',\n redDot: [\n {\n start: item?.redDot?.start ?? '',\n end: item?.redDot?.end ?? '',\n },\n ],\n children: Array.isArray(item?.children)\n ? item.children.map((child: any) => ({\n href: child?.href ?? '',\n external: child?.external ?? false,\n icon: child?.icon ?? '',\n iconify: child?.iconify ?? '',\n name: child?.name ?? '',\n slug: child?.slug ?? '',\n redDot: [\n {\n start: child?.redDot?.start ?? '',\n end: child?.redDot?.end ?? '',\n },\n ],\n }))\n : [],\n })) ?? []\n this.dataSidebar = { feature: features, category: categories }\n this.requestUpdate()\n }\n\n renderChips() {\n const chips = []\n chips.push(\n html`\n <div class=\"flex\">\n <div\n class=\"py-1 px-2 rounded text-xs\"\n style=\"position: absolute; top: -22px; right: -24px; display: inline-flex; background-color:#D71920;\"\n >\n <span class=\"font-normal text-white capitalize\">Baru</span>\n </div>\n </div>\n `\n )\n return chips\n }\n\n hasChildren(item: any): boolean {\n return Array.isArray(item?.children) && item.children.length > 0\n }\n\n rubricClicked(item: { name: string; href?: string }, event?: Event): void {\n if (event) {\n event.stopPropagation() // Prevent parent click event\n }\n if (item.href) {\n window.location.href = item.href\n }\n\n // add data layer here\n }\n\n @state()\n private expandedSlug: string | null = null\n private toggleChildren(item: any) {\n this.expandedSlug = this.expandedSlug === item.slug ? null : item.slug\n }\n\n @state()\n private showNavBar: boolean = false\n\n toggleNavSidebar = (e: Event) => {\n e.stopPropagation() // prevent bubbling\n this.showNavBar = !this.showNavBar\n }\n\n render() {\n return html`\n <!-- Button Menu -->\n <div\n class=\"w-fit flex items-center justify-center cursor-pointer relative\"\n @click=${this.toggleNavSidebar}\n >\n <div class=\"h-4 inline-flex text-brand-1\">\n ${unsafeSVG(getFontAwesomeIcon('fas', 'bars'))}\n </div>\n <span\n class=\"font-sans hidden sm:inline ml-2 tracking-wide text-brand-1 font-bold\"\n >Menu</span\n >\n </div>\n <!-- Side Menu -->\n <nav\n @click=${this.toggleNavSidebar}\n class=${this.showNavBar\n ? 'fixed left-0 top-0 w-screen z-[100]'\n : 'hidden'}\n >\n <div\n ref=\"toggle-nav-sidebar\"\n class=\"bg-white h-screen menu-menu-sidebar overflow-y-auto pb-20 pt-0 shadow-lg\"\n style=\"width: 312px;\"\n >\n <div\n class=\"bg-[#e1f0ff] flex flex-col items-center justify-center mb-6 w-full\"\n >\n <div\n ref=\"logo-kompas\"\n class=\"flex items-center justify-between px-4 py-6 w-full\"\n >\n <a href=\"/\" class=\"flex h-9 w-9\">\n <img\n src=\"https://cdn-www.kompas.id/assets/img/icons/kompas-icon.svg\"\n alt=\"Kompas.id\"\n scale=\"0\"\n class=\"block w-full\"\n />\n </a>\n <span\n class=\"bg-[#93c8fd] cursor-pointer flex h-10 items-center justify-center rounded text-base w-10 p-4\"\n @click=${this.toggleNavSidebar}\n >\n ${unsafeSVG(getFontAwesomeIcon('fa', 'times'))}\n </span>\n </div>\n <div class=\"flex flex-wrap px-4 w-full\">\n ${this.dataExternal.map(\n item => html`\n <a href=\"${item.url}\" class=\"block w-1/2 no-underline\">\n <div class=\"cursor-pointer flex items-center pb-6 w-full\">\n <div class=\"flex mr-2\">\n ${item.icon &&\n Array.isArray(item.icon) &&\n item.icon.length >= 2\n ? unsafeSVG(\n getFontAwesomeIcon(item.icon[0], item.icon[1])\n )\n : ''}\n </div>\n <span class=\"font-sans relative text-sm text-brand-1\">\n ${item.name} ${item.isNew ? this.renderChips() : ''}\n </span>\n </div>\n </a>\n `\n )}\n </div>\n </div>\n <!-- feature -->\n <div class=\"flex\">\n <div class=\"flex justify-between flex-col\">\n ${this.dataSidebar.feature.map(\n item => html`\n <div class=\"w-full font-sans\">\n <!-- Parent item -->\n <div\n class=\"flex items-center justify-between px-4 text-sm font-medium text-gray-700 transition-all cursor-pointer\"\n @click=${(e: Event) => this.rubricClicked(item, e)}\n >\n <div\n class=\"w-[216px] hover:bg-[#f3f4f6] rounded h-12 flex items-center\"\n >\n <div class=\"flex items-center space-x-3\">\n <span\n class=\"text-xl text-brand-1 w-8 h-8 flex items-center\"\n >\n ${item.icon &&\n Array.isArray(item.icon) &&\n item.icon.length >= 2\n ? unsafeSVG(\n getFontAwesomeIcon(item.icon[0], item.icon[1])\n )\n : ''}\n </span>\n <span class=\"font-bold relative text-[#333] w-full\"\n >${decodeSpecialChars(item.name)}</span\n >\n ${timedContent(\n item.redDot[0].start,\n item.redDot[0].end\n )\n ? html`<span\n class=\"bg-orange-600 h-2 relative rounded-full w-2 -top-[12px]\"\n ></span>`\n : ''}\n </div>\n </div>\n\n <!-- Toggle chevron -->\n ${this.hasChildren(item)\n ? html`\n <span\n class=\"text-xs bg-[#e1f0ff] flex justify-center items-center rounded my-1 p-4 w-10 h-10 cursor-pointer\"\n @click=${(e: Event) => {\n e.stopPropagation() // Prevents click from bubbling to parent\n this.toggleChildren(item)\n }}\n >\n ${this.expandedSlug === item.slug\n ? unsafeSVG(\n getFontAwesomeIcon('fas', 'chevron-up')\n )\n : unsafeSVG(\n getFontAwesomeIcon('fas', 'chevron-down')\n )}\n </span>\n `\n : null}\n </div>\n\n <!-- Children items -->\n ${this.hasChildren(item) && this.expandedSlug === item.slug\n ? html`\n <div class=\"pl-14 pt-1 pb-2 space-y-1\">\n ${item.children.map(\n child => html`\n <div\n class=\"flex items-center text-sm text-gray-600 px-4 cursor-pointer transition-all\"\n @click=${() => this.rubricClicked(child)}\n >\n <div\n class=\"w-[216px] hover:bg-[#f3f4f6] rounded h-12 flex items-center pl-11\"\n >\n ${decodeSpecialChars(child.name)}\n ${timedContent(\n child.redDot[0].start,\n child.redDot[0].end\n )\n ? html`<span\n class=\"bg-orange-600 h-2 relative rounded-full w-2 -top-[12px]\"\n ></span>`\n : ''}\n <div></div>\n </div>\n </div>\n `\n )}\n </div>\n `\n : ''}\n </div>\n `\n )}\n </div>\n </div>\n <div class=\"border-b border-[#DDD] m-6 \"></div>\n <!-- category -->\n <div class=\"flex\">\n <div class=\"w-full flex justify-between flex-col\">\n ${this.dataSidebar.category.map(\n item => html`\n <div class=\"w-full font-sans\">\n <!-- Parent item -->\n <div\n class=\"flex items-center justify-between text-sm font-medium text-gray-700 px-4 transition-all cursor-pointer\"\n @click=${(e: Event) => this.rubricClicked(item, e)}\n >\n <div\n class=\"w-[216px] hover:bg-[#f3f4f6] rounded h-12 flex items-center\"\n >\n <div class=\"flex items-center space-x-3\">\n <span\n class=\"text-xl text-brand-1 w-8 h-8 flex items-center\"\n >\n ${item.icon &&\n Array.isArray(item.icon) &&\n item.icon.length >= 2\n ? unsafeSVG(\n getFontAwesomeIcon(item.icon[0], item.icon[1])\n )\n : ''}\n </span>\n <span\n class=\"font-bold ${item.name === 'Beranda'\n ? 'text-[#00559a]'\n : 'text-[#333] w-full'}\"\n >${decodeSpecialChars(item.name)}</span\n >\n\n ${timedContent(\n item.redDot[0].start,\n item.redDot[0].end\n )\n ? html`<span\n class=\"bg-orange-600 h-2 relative rounded-full w-2 -top-[12px]\"\n ></span>`\n : ''}\n </div>\n </div>\n\n <!-- Toggle chevron -->\n ${this.hasChildren(item)\n ? html`\n <span\n class=\"text-xs bg-[#e1f0ff] flex justify-center items-center rounded my-1 p-4 w-10 h-10 cursor-pointer\"\n @click=${(e: Event) => {\n e.stopPropagation() // Prevents click from bubbling to parent\n this.toggleChildren(item)\n }}\n >\n ${this.expandedSlug === item.slug\n ? unsafeSVG(\n getFontAwesomeIcon('fas', 'chevron-up')\n )\n : unsafeSVG(\n getFontAwesomeIcon('fas', 'chevron-down')\n )}\n </span>\n `\n : null}\n </div>\n\n <!-- Children items -->\n ${this.hasChildren(item) && this.expandedSlug === item.slug\n ? html`\n <div class=\"pt-1 pb-2 space-y-1\">\n ${item.children.map(\n child => html`\n <div\n class=\"flex items-center text-sm text-gray-600 px-4 cursor-pointer transition-all\"\n @click=${() => this.rubricClicked(child)}\n >\n <div\n class=\"w-[216px] hover:bg-[#f3f4f6] rounded h-12 flex items-center pl-11\"\n >\n ${decodeSpecialChars(child.name)}\n ${timedContent(\n child.redDot[0].start,\n child.redDot[0].end\n )\n ? html`<span\n class=\"bg-orange-600 h-2 relative rounded-full w-2 -top-[12px]\"\n ></span>`\n : ''}\n </div>\n </div>\n `\n )}\n </div>\n `\n : ''}\n </div>\n `\n )}\n </div>\n </div>\n </div>\n </nav>\n `\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare const decodeSpecialChars: (str: string) => string;