@kompasid/lit-web-components 0.9.52 → 0.9.54

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.
@@ -36,6 +36,9 @@ export class KompasGracePeriod extends LitElement {
36
36
  * property isColumn = changes how the component looks on different screen sizes
37
37
  * property isShowButton = shows or hides a subscription button
38
38
  * property isEpaper = is paywall opened in epaper page
39
+ * property memberhsip_channel_id = the ID of the subscription package by platform
40
+ * property payment_method = the payment method used by user
41
+ * property offering = the offering product
39
42
  * property paywall_location = the location where user encounter the paywall
40
43
  * property paywall_subscription_package = the name of the subscription package viewed by user
41
44
  * property paywall_subscription_id = the ID of the subscription package viewed by user
@@ -55,13 +58,16 @@ export class KompasGracePeriod extends LitElement {
55
58
  */
56
59
 
57
60
  @property({ type: Number }) totalGracePeriod = 0
61
+ @property({ type: Number }) memberhsip_channel_id = 0 // [2 5 8] itu autorenewal
62
+ @property({ type: String }) payment_method = '' // xendit_shopeepay, midtrans_gopay, xendit_ovo , midtrans_cc
63
+ @property({ type: String }) offering = '' // Q1 ... Q5, [Q5 default]
58
64
  @property({ type: Boolean }) isColumn = false
59
65
  @property({ type: Boolean }) isShowButton = true
60
66
  @property({ type: Boolean }) isEpaper = false
61
67
  @property({ type: Boolean }) isBackgroundOnContentOnly = false
62
68
  @property({ type: String }) source = 'article'
63
69
  @property({ type: String }) paywall_location = ''
64
- @property({ type: String }) paywall_subscription_package = ''
70
+ @property({ type: String }) paywall_subscription_package = '' // kdp, kompas-one, kdp-koran
65
71
  @property({ type: Number }) paywall_subscription_id = 0
66
72
  @property({ type: Number }) paywall_subscription_price = 0
67
73
  @property({ type: Number }) paywall_position = 0
@@ -84,6 +90,9 @@ export class KompasGracePeriod extends LitElement {
84
90
  @state() private subscriptionPage = 'https://www.kompas.id/berlangganan'
85
91
  @state() private checkoutPage = 'https://checkoutv2.kompas.id'
86
92
  @state() private tempTextEachDay = []
93
+ @state() private basketSize: { [key: string]: string } = {}
94
+ @state() private messages: { [key: string]: string } = {}
95
+ @state() private templateCheckout: string = ''
87
96
  @state() private tempButtonA: {
88
97
  url: string
89
98
  text: string
@@ -99,19 +108,75 @@ export class KompasGracePeriod extends LitElement {
99
108
  text: '',
100
109
  }
101
110
 
111
+ private isAutoRenewal() {
112
+ const { memberhsip_channel_id: checkAutoRenewal } = this
113
+ if (
114
+ checkAutoRenewal === 2 ||
115
+ checkAutoRenewal === 5 ||
116
+ checkAutoRenewal === 8
117
+ ) {
118
+ return true
119
+ }
120
+ return false
121
+ }
122
+
123
+ private isWallet() {
124
+ const {
125
+ payment_method: paymentMethod,
126
+ memberhsip_channel_id: checkAutoRenewal,
127
+ } = this
128
+ const isMobile = checkAutoRenewal === 5 || checkAutoRenewal === 2
129
+ if (paymentMethod.includes('cc')) {
130
+ return false
131
+ }
132
+
133
+ if (isMobile) {
134
+ return false
135
+ }
136
+
137
+ return true
138
+ }
139
+
102
140
  private getCountdownGracePeriod() {
103
- const { totalGracePeriod } = this
104
- const { maxGracePeriod } = this
105
- return html`
106
- <p
107
- class="message-gp"
108
- .innerHTML=${this.tempTextEachDay[
109
- totalGracePeriod > maxGracePeriod
110
- ? maxGracePeriod - 1
111
- : totalGracePeriod - 1 // template maksimal 7 hari
112
- ]}
113
- ></p>
114
- `
141
+ const { messages, memberhsip_channel_id: checkAutoRenewal } = this
142
+
143
+ if (!this.isAutoRenewal()) {
144
+ return messages.default
145
+ }
146
+
147
+ // 8=Autorenewal
148
+ // 5=Apple
149
+ // 2=Google
150
+ const isRenewal =
151
+ checkAutoRenewal === 8 || checkAutoRenewal === 5 || checkAutoRenewal === 2
152
+ const isMobile = checkAutoRenewal === 5 || checkAutoRenewal === 2
153
+ if (!isRenewal) {
154
+ return messages.default
155
+ }
156
+
157
+ if (isMobile) {
158
+ return messages.default
159
+ }
160
+
161
+ // if string contains cc
162
+ if (this.payment_method.includes('cc')) {
163
+ return messages.credit_card
164
+ }
165
+ return messages.ewallet
166
+
167
+ // Comment old
168
+ // const { totalGracePeriod } = this
169
+ // const { maxGracePeriod } = this
170
+ // return html`
171
+ // <p
172
+ // class="message-gp"
173
+ // .innerHTML=${this.tempTextEachDay[
174
+ // totalGracePeriod > maxGracePeriod
175
+ // ? maxGracePeriod - 1
176
+ // : totalGracePeriod - 1 // template maksimal 7 hari
177
+ // ]}
178
+ // ></p>
179
+ // `
115
180
  // comment old html
116
181
  // if (totalGracePeriod === 7) {
117
182
  // return html`
@@ -151,27 +216,56 @@ export class KompasGracePeriod extends LitElement {
151
216
  )
152
217
  }
153
218
 
154
- private redirectToBerlangganan(): void {
155
- const { url = '' } = this.tempButtonB
156
- this.dataLayeronPerbaruiLanggananButton()
157
- this.sendGtmEvent('subscribe_button_clicked', true)
158
-
159
- const urlComputed = url || `${this.subscriptionPage}?open_from=Grace_Period`
219
+ private redirectCekSaldo(): void {
220
+ // this.dataLayeronPerbaruiLanggananButton()
221
+ // this.sendGtmEvent('subscribe_button_clicked', true)
222
+ const urlComputed =
223
+ 'https://kb.kompas.id/baca/berlangganan-kompas-id/langganan-kompas-id/mengapa-perpanjangan-pembaruan-langganan-otomatis-melalui-e-wallet-belum-berhasil/'
160
224
  window.open(urlComputed)
161
225
  }
162
226
 
163
227
  private redirectToCheckout(): void {
164
- const { url = '' } = this.tempButtonA
165
- this.dataLayeronPerbaruiLanggananButton()
166
- const originHost: string = encodeURIComponent(window.location.href)
228
+ const {
229
+ paywall_subscription_package: paywallSubscriptionPackage,
230
+ paywall_subscription_id: paywallSubscriptionId,
231
+ basketSize,
232
+ templateCheckout,
233
+ offering,
234
+ } = this
235
+ const tempOffering = offering || 'Q5'
236
+ const tempPackageSlug = paywallSubscriptionPackage.toLowerCase()
167
237
 
238
+ this.dataLayeronPerbaruiLanggananButton()
168
239
  this.sendGtmEvent('subscribe_button_clicked')
169
240
 
170
- const defaultPath =
171
- url ||
172
- `${this.checkoutPage}/v2/kdp?productId=${this.paywall_subscription_id}&autorenewal=1`
241
+ if (!paywallSubscriptionId) {
242
+ window.open(basketSize[tempOffering])
243
+ return
244
+ }
245
+
246
+ if (tempPackageSlug.includes('kdp') && !tempPackageSlug.includes('koran')) {
247
+ window.open(basketSize[tempOffering])
248
+ } else {
249
+ window.open(
250
+ templateCheckout.replace(
251
+ '_productid_',
252
+ paywallSubscriptionId.toString()
253
+ )
254
+ )
255
+ }
256
+
257
+ // comment old
258
+ // const { url = '' } = this.tempButtonA
259
+ // this.dataLayeronPerbaruiLanggananButton()
260
+ // const originHost: string = encodeURIComponent(window.location.href)
261
+
262
+ // this.sendGtmEvent('subscribe_button_clicked')
263
+
264
+ // const defaultPath =
265
+ // url ||
266
+ // `${this.checkoutPage}/v2/kdp?productId=${this.paywall_subscription_id}&autorenewal=1`
173
267
 
174
- window.open(`${defaultPath}&referrer=${originHost}&source=${this.source}`)
268
+ // window.open(`${defaultPath}&referrer=${originHost}&source=${this.source}`)
175
269
  }
176
270
 
177
271
  private getGtmParams(
@@ -251,56 +345,52 @@ export class KompasGracePeriod extends LitElement {
251
345
 
252
346
  const { text: textA = '' } = this.tempButtonA
253
347
 
254
- const { text: textB = '' } = this.tempButtonB
348
+ // const { text: textB = '' } = this.tempButtonB
255
349
 
256
350
  const wrapperColumnClass = isColumn
257
351
  ? 'rounded-lg'
258
- : 'md:flex-row lg:px-8 md:space-x-4 px-4 py-4'
259
- const buttonColumnClass = isColumn
260
- ? ''
261
- : 'md:w-1/2 justify-end md:flex-row pt-4 md:pt-0'
352
+ : 'md:flex-row lg:px-8 px-4 py-4'
353
+ const buttonColumnClass = isColumn ? '' : 'justify-end md:flex-row'
262
354
  const otherBtnColumnClass = isColumn ? '' : 'md:w-auto'
263
355
  const wrapperBgClass = !isBackgroundOnContentOnly ? 'p-4' : ''
264
356
  const contentBgClass = isBackgroundOnContentOnly
265
- ? 'bg-orange-100 p-4 rounded-lg mb-4'
357
+ ? 'bg-orange-100 p-4 rounded-lg'
266
358
  : ''
267
359
 
268
360
  return html`
269
361
  <div
270
- class="bottom-0 mx-auto flex w-full max-w-7xl flex-col justify-end ${wrapperColumnClass} ${wrapperBgClass}"
362
+ class="bottom-0 mx-auto flex gap-4 w-full max-w-7xl flex-col justify-end ${wrapperColumnClass} ${wrapperBgClass}"
271
363
  >
272
364
  <div
273
- class="self-center text-left text-sm text-grey-600 md:text-base ${contentBgClass}"
365
+ class="self-center w-full text-left text-sm text-grey-600 md:text-base ${contentBgClass}"
274
366
  >
275
367
  ${this.getCountdownGracePeriod()}
276
368
  </div>
277
369
  ${this.isShowButton
278
370
  ? html`
279
371
  <div
280
- class="flex w-full flex-col gap-4 self-center ${buttonColumnClass}"
372
+ class="flex grow items-center flex-wrap shrink-0 gap-2 ${buttonColumnClass}"
281
373
  >
282
- <button
283
- @click=${this.redirectToCheckout}
284
- class="w-full rounded-md bg-brand-1 p-2 px-5 text-sm font-bold text-grey-100 md:w-auto md:text-base"
285
- >
286
- ${textA || 'Perbarui Langganan'}
287
- </button>
288
- <div class="md:block hidden">
289
- <button
290
- @click=${this.redirectToBerlangganan}
291
- class="bg-transparent w-full rounded-md border border-brand-1 p-1.5 px-5 text-sm font-bold text-brand-1 md:text-base ${otherBtnColumnClass}"
292
- >
293
- ${textB || 'Paket Lainnya'}
294
- </button>
295
- </div>
296
- <div class="md:hidden block">
374
+ <div class="max-h-10 flex flex-grow md:w-auto">
297
375
  <button
298
- @click=${this.redirectToBerlangganan}
299
- class="bg-transparent w-full rounded-md border border-brand-1 p-1.5 px-5 text-sm font-bold text-brand-1 md:text-base ${otherBtnColumnClass}"
376
+ @click=${this.redirectToCheckout}
377
+ class="w-full rounded-md bg-brand-1 p-2 px-5 text-sm justify-center items-center font-bold text-grey-100 md:text-base"
300
378
  >
301
- ${textB || 'Lihat Paket Lainnya'}
379
+ ${textA || 'Perbarui Langganan'}
302
380
  </button>
303
381
  </div>
382
+ ${this.isWallet()
383
+ ? html`
384
+ <div class="w-full md:w-auto flex flex-grow max-h-10">
385
+ <button
386
+ @click=${this.redirectCekSaldo}
387
+ class="bg-transparent w-full rounded-md border border-brand-1 p-1.5 px-5 text-sm font-bold text-brand-1 md:text-base ${otherBtnColumnClass}"
388
+ >
389
+ Cara Isi Saldo
390
+ </button>
391
+ </div>
392
+ `
393
+ : nothing}
304
394
  </div>
305
395
  `
306
396
  : nothing}
@@ -309,13 +399,23 @@ export class KompasGracePeriod extends LitElement {
309
399
  }
310
400
 
311
401
  override async connectedCallback() {
402
+ // New API
403
+ const endpointNew =
404
+ 'https://cdn-www.kompas.id/web-component/grace-period-offering.json'
405
+ const responseNew = await fetch(endpointNew)
406
+ const resultNew = await responseNew.json()
407
+ this.basketSize = resultNew.basket_size_kdp
408
+ this.messages = resultNew.payment_method_messages
409
+ this.templateCheckout = resultNew.template_checkout_url
410
+
411
+ // comment old
312
412
  // Constructing the URL with parameters
313
- const endpoint = `https://cdn-www.kompas.id/web-component/grace-period-paywall.json`
314
- const response = await fetch(endpoint)
315
- const result = await response.json()
316
- this.tempTextEachDay = result.message
317
- this.tempButtonA = result.buttonA
318
- this.tempButtonB = result.buttonB
413
+ // const endpoint = `https://cdn-www.kompas.id/web-component/grace-period-paywall.json`
414
+ // const response = await fetch(endpoint)
415
+ // const result = await response.json()
416
+ // this.tempTextEachDay = result.message
417
+ // this.tempButtonA = result.buttonA
418
+ // this.tempButtonB = result.buttonB
319
419
 
320
420
  super.connectedCallback()
321
421
 
@@ -11,10 +11,13 @@ Ini adalah redesign komponen _grace period_ yang digunakan pada [kompas.id](http
11
11
  | `isEpaper` | `is-epaper` | | `boolean` | `false` |
12
12
  | `isShowButton` | `is-show-button` | | `boolean` | `false` |
13
13
  | `subscriptionId` | `subscription-id` | | `string` | `false` |
14
+ | `memberhsip_channel_id` | `memberhsip_channel_id` | | `number` | `0` |
15
+ | `payment_method` | `payment_method` | | `string` | `''` |
16
+ | `offering` | `offering` | | `string` | `''` |
17
+ | `paywall_subscription_id` | `paywall_subscription_id` |used scenario GP| `number` | `0` |
18
+ | `paywall_subscription_package` | `paywall_subscription_package` |used scenario GP| `string` | `''` |
14
19
  | `paywall_location` | `paywall_location` | | `string` | `''` |
15
20
  | `paywall_position` | `paywall_position` | | `number` | `0` |
16
- | `paywall_subscription_id` | `paywall_subscription_id` | | `number` | `0` |
17
- | `paywall_subscription_package` | `paywall_subscription_package` | | `string` | `''` |
18
21
  | `paywall_subscription_price` | `paywall_subscription_price` | | `number` | `0` |
19
22
  | `tracker_content_categories` | `tracker_content_categories` | | `string` | `''` |
20
23
  | `tracker_content_id` | `tracker_content_id` | | `string` | `''` |
@@ -22,6 +22,15 @@ Ini adalah komponen _header account_ yang akan di implementasi pada header
22
22
  | `totalGracePeriod` | `totalGracePeriod` | Number of grace period days calculated from the **end date of the last grace period record**. The grace period lasts **7 days**, counted from day 1 to day 7 (last day). | `number` | `0` | yes |
23
23
  | `isGracePeriod` | `isGracePeriod` | Boolean flag indicating whether the user is currently in a grace period. Set to `true` if the grace period array is not empty. **However**, if both active membership and grace period arrays are not empty, this value must be `false`. | `boolean` | `false` | yes |
24
24
  | `isMembership` | `isMembership` | Boolean flag indicating whether the user has an active membership. Set to `true` if the active membership array is not empty. | `boolean` | `false` | yes |
25
+ | `detailPackageUser` | `detailPackageUser` | Object to use detail grace period user | `object` | `{}` | yes |
26
+
27
+ ## Properties Detail Package User (detailPackageUser)
28
+ Property ini di peruntukan untuk mendetilkan skenario graceperiod yang akan di tampilkan, bila object ini kosong maka akan menggunakan flow default
29
+ | Property | Attribute | Description | Type | Default | Required |
30
+ | ------------------------------ | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | -------------- | -------- |
31
+ | `offering` | `paywall_location` | | `string` | `''` | yes |
32
+ | `payment_method` | `paywall_location` | | `string` | `''` | yes |
33
+ | `memberhsip_channel_id` | `paywall_location` | | `number` | `0` | yes |
25
34
 
26
35
  ## Properties Grace Period Default
27
36
  Property dapat dilihat di [Readme Grace Period](https://github.com/pt-kompas-media-nusantara/lit-web-component/tree/master/src/components/kompasid-grace-period).
@@ -30,8 +39,8 @@ Pemakaian kalo memang tidak ada perubahan, lebih baik tidak digunakan atau di ko
30
39
  | Property | Attribute | Description | Type | Default | Required |
31
40
  | ------------------------------ | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | -------------- | -------- |
32
41
  | `paywall_location` | `paywall_location` | | `string` | `''` | no |
33
- | `paywall_subscription_package` | `paywall_subscription_package` | | `string` | `''` | no |
34
- | `paywall_subscription_id` | `paywall_subscription_id` | | `number` | `0` | no |
42
+ | `paywall_subscription_package` | `paywall_subscription_package` |Used for graceperiod | `string` | `''` | yes |
43
+ | `paywall_subscription_id` | `paywall_subscription_id` |Used for graceperiod | `number` | `0` | yes |
35
44
  | `paywall_subscription_price` | `paywall_subscription_price` | | `number` | `0` | no |
36
45
  | `paywall_position` | `paywall_position` | | `number` | `0` | no |
37
46
  | `tracker_page_type` | `tracker_page_type` | | `string` | `''` | no |
@@ -65,6 +74,7 @@ API Last Order = "https://api.kompas.cloud/order/api/v1/product/latest"
65
74
  subscriptionUrl="https://www.kompas.id/berlangganan"
66
75
  read_later_url="https://www.kompas.id/bacananti"
67
76
  :paywall_subscription_id="98888"
77
+ paywall_subscription_package="kdp"
68
78
  theme="primary"
69
79
  :userData="userData"
70
80
  />
@@ -77,8 +87,13 @@ API Last Order = "https://api.kompas.cloud/order/api/v1/product/latest"
77
87
  totalGracePeriod: 0
78
88
  isGracePeriod: false
79
89
  isMembership: false
90
+ detailPackageUser: {
91
+ memberhsip_channel_id: 0
92
+ payment_method: ''
93
+ offering: ''
94
+ }
80
95
  }
81
96
  ```
82
97
 
83
- Update 21 07 2025 - Penggunaan yang sudah berjalan di tim terkait
98
+ Update 05 06 2026 - Penggunaan yang sudah berjalan di tim terkait
84
99
  _Terbikin oleh tim front-end kompas.id_
@@ -1,9 +1,14 @@
1
+ export interface detailPackage {
2
+ offering: string
3
+ payment_method: string
4
+ memberhsip_channel_id: number
5
+ }
6
+
1
7
  export interface User {
2
8
  userName: string
3
9
  expired: string
4
10
  totalGracePeriod: number
5
11
  isGracePeriod: boolean
6
12
  isMembership: boolean
7
- // updateMembership: string
8
- // activeInfo: string // ga kepake dua data ini
13
+ detailPackageUser: detailPackage
9
14
  }
@@ -12,6 +12,13 @@ import '../kompasid-grace-period/KompasGracePeriod.js'
12
12
  export class KompasHeaderAccountProfile extends LitElement {
13
13
  static styles = [
14
14
  css`
15
+ .multi-line-truncate {
16
+ display: -webkit-box;
17
+ -webkit-box-orient: vertical;
18
+ -webkit-line-clamp: 1; /* Number of lines to show */
19
+ overflow: hidden;
20
+ }
21
+
15
22
  .header-account--membership-icon {
16
23
  position: absolute;
17
24
  bottom: -2px;
@@ -70,6 +77,23 @@ export class KompasHeaderAccountProfile extends LitElement {
70
77
  return format(new Date(date), 'dd MMM yyyy', { locale: id })
71
78
  }
72
79
 
80
+ private handleDetailGracePeriod() {
81
+ const { userData } = this
82
+ if (userData.detailPackageUser) {
83
+ return {
84
+ memberhsip_channel_id:
85
+ userData.detailPackageUser.memberhsip_channel_id || 0,
86
+ payment_method: userData.detailPackageUser.payment_method || '',
87
+ offering: userData.detailPackageUser.offering || '',
88
+ }
89
+ }
90
+ return {
91
+ memberhsip_channel_id: 0,
92
+ payment_method: '',
93
+ offering: '',
94
+ }
95
+ }
96
+
73
97
  private renderSkeletonLoading() {
74
98
  return html`
75
99
  <div>
@@ -206,14 +230,14 @@ export class KompasHeaderAccountProfile extends LitElement {
206
230
  * Kompeni Element
207
231
  */
208
232
  const kompeniTemplate = () => html` <div
209
- class="flex relative group bg-[#FFF8D6] text-yellow-700 gap-1 p-2 mt-2 rounded items-center justify-center text-xs max-w-[190px] font-sans leading-none"
233
+ class="flex relative group bg-[#FFF8D6] text-yellow-700 gap-1 p-2 mt-2 rounded items-center justify-center text-xs font-sans leading-none w-full"
210
234
  >
211
235
  <div class="w-5 h-5 flex items-center justify-center flex-shrink-0">
212
236
  ${unsafeSVG(getFontAwesomeIcon('fa', 'building-circle-check', 13, 10))}
213
237
  </div>
214
- <p class="truncate">${this.company_name}</p>
238
+ <p class="break-all multi-line-truncate w-full">${this.company_name}</p>
215
239
  <div
216
- class="absolute px-2 top-full -right-[5%] w-max max-w-[300px] mt-1 hidden group-hover:block"
240
+ class="absolute px-2 top-full -right-[5%] w-max max-w-[300px] mt-1 hidden group-hover:block z-10"
217
241
  >
218
242
  <div
219
243
  class="bg-grey-600 text-white text-sm font-sans p-4 rounded-lg relative leading-5"
@@ -279,6 +303,11 @@ export class KompasHeaderAccountProfile extends LitElement {
279
303
  ? html` <div class="mt-4 kompasid-grace-period">
280
304
  <kompasid-grace-period
281
305
  totalGracePeriod=${this.userData.totalGracePeriod}
306
+ offering="${this.handleDetailGracePeriod().offering}"
307
+ memberhsip_channel_id="${this.handleDetailGracePeriod()
308
+ .memberhsip_channel_id}"
309
+ payment_method="${this.handleDetailGracePeriod()
310
+ .payment_method}"
282
311
  isColumn="true"
283
312
  isShowButton="true"
284
313
  isBackgroundOnContentOnly="true"
@@ -972,6 +972,10 @@ video {
972
972
  height: 100vh;
973
973
  }
974
974
 
975
+ .max-h-10 {
976
+ max-height: 2.5rem;
977
+ }
978
+
975
979
  .max-h-40 {
976
980
  max-height: 10rem;
977
981
  }
@@ -1155,10 +1159,6 @@ video {
1155
1159
  max-width: 1200px;
1156
1160
  }
1157
1161
 
1158
- .max-w-\[190px\] {
1159
- max-width: 190px;
1160
- }
1161
-
1162
1162
  .max-w-\[214px\] {
1163
1163
  max-width: 214px;
1164
1164
  }
@@ -1211,6 +1211,10 @@ video {
1211
1211
  flex-grow: 1;
1212
1212
  }
1213
1213
 
1214
+ .grow {
1215
+ flex-grow: 1;
1216
+ }
1217
+
1214
1218
  .rotate-180 {
1215
1219
  --tw-rotate: 180deg;
1216
1220
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
@@ -1457,6 +1461,10 @@ video {
1457
1461
  overflow-wrap: break-word;
1458
1462
  }
1459
1463
 
1464
+ .break-all {
1465
+ word-break: break-all;
1466
+ }
1467
+
1460
1468
  .rounded {
1461
1469
  border-radius: 0.25rem;
1462
1470
  }
@@ -2563,12 +2571,6 @@ video {
2563
2571
  gap: 2rem;
2564
2572
  }
2565
2573
 
2566
- .md\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
2567
- --tw-space-x-reverse: 0;
2568
- margin-right: calc(1rem * var(--tw-space-x-reverse));
2569
- margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
2570
- }
2571
-
2572
2574
  .md\:space-x-5 > :not([hidden]) ~ :not([hidden]) {
2573
2575
  --tw-space-x-reverse: 0;
2574
2576
  margin-right: calc(1.25rem * var(--tw-space-x-reverse));
@@ -979,6 +979,10 @@ Constrain images and videos to the parent width and preserve their intrinsic asp
979
979
  height: 100vh;
980
980
  }
981
981
 
982
+ .max-h-10 {
983
+ max-height: 2.5rem;
984
+ }
985
+
982
986
  .max-h-40 {
983
987
  max-height: 10rem;
984
988
  }
@@ -1162,10 +1166,6 @@ Constrain images and videos to the parent width and preserve their intrinsic asp
1162
1166
  max-width: 1200px;
1163
1167
  }
1164
1168
 
1165
- .max-w-\\[190px\\] {
1166
- max-width: 190px;
1167
- }
1168
-
1169
1169
  .max-w-\\[214px\\] {
1170
1170
  max-width: 214px;
1171
1171
  }
@@ -1218,6 +1218,10 @@ Constrain images and videos to the parent width and preserve their intrinsic asp
1218
1218
  flex-grow: 1;
1219
1219
  }
1220
1220
 
1221
+ .grow {
1222
+ flex-grow: 1;
1223
+ }
1224
+
1221
1225
  .rotate-180 {
1222
1226
  --tw-rotate: 180deg;
1223
1227
  transform: translate(var(--tw-translate-x), var(--tw-translate-y))
@@ -1468,6 +1472,10 @@ Constrain images and videos to the parent width and preserve their intrinsic asp
1468
1472
  overflow-wrap: break-word;
1469
1473
  }
1470
1474
 
1475
+ .break-all {
1476
+ word-break: break-all;
1477
+ }
1478
+
1471
1479
  .rounded {
1472
1480
  border-radius: 0.25rem;
1473
1481
  }
@@ -2586,12 +2594,6 @@ Constrain images and videos to the parent width and preserve their intrinsic asp
2586
2594
  gap: 2rem;
2587
2595
  }
2588
2596
 
2589
- .md\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
2590
- --tw-space-x-reverse: 0;
2591
- margin-right: calc(1rem * var(--tw-space-x-reverse));
2592
- margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
2593
- }
2594
-
2595
2597
  .md\\:space-x-5 > :not([hidden]) ~ :not([hidden]) {
2596
2598
  --tw-space-x-reverse: 0;
2597
2599
  margin-right: calc(1.25rem * var(--tw-space-x-reverse));