@juspay/svelte-ui-components 2.66.0 → 2.68.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.
@@ -335,6 +335,19 @@
335
335
  --cursor: var(--modal-footer-secondary-button-cursor, pointer);
336
336
  --opacity: var(--modal-footer-secondary-button-opacity, 1);
337
337
  --button-border: var(--modal-footer-secondary-button-border, none);
338
+ --disabled-background-color: var(
339
+ --modal-footer-secondary-button-disabled-color,
340
+ var(--modal-footer-secondary-button-color, #3a4550)
341
+ );
342
+ --disabled-text-color: var(
343
+ --modal-footer-secondary-button-disabled-text-color,
344
+ var(--modal-footer-secondary-button-text-color, white)
345
+ );
346
+ --disabled-border: var(
347
+ --modal-footer-secondary-button-disabled-border,
348
+ var(--modal-footer-secondary-button-border, none)
349
+ );
350
+ --disabled-opacity: var(--modal-footer-secondary-button-disabled-opacity, 0.4);
338
351
  --button-justify-content: var(--modal-footer-secondary-button-justify-content, center);
339
352
  --button-content-flex-direction: var(
340
353
  --modal-footer-secondary-button-content-flex-direction,
@@ -363,6 +376,19 @@
363
376
  --cursor: var(--modal-footer-primary-button-cursor, pointer);
364
377
  --opacity: var(--modal-footer-primary-button-opacity, 1);
365
378
  --button-border: var(--modal-footer-primary-button-border, none);
379
+ --disabled-background-color: var(
380
+ --modal-footer-primary-button-disabled-color,
381
+ var(--modal-footer-primary-button-color, #3a4550)
382
+ );
383
+ --disabled-text-color: var(
384
+ --modal-footer-primary-button-disabled-text-color,
385
+ var(--modal-footer-primary-button-text-color, white)
386
+ );
387
+ --disabled-border: var(
388
+ --modal-footer-primary-button-disabled-border,
389
+ var(--modal-footer-primary-button-border, none)
390
+ );
391
+ --disabled-opacity: var(--modal-footer-primary-button-disabled-opacity, 0.4);
366
392
  --button-justify-content: var(--modal-footer-primary-button-justify-content, center);
367
393
  --button-content-flex-direction: var(--modal-footer-primary-button-content-flex-direction, row);
368
394
  --button-content-gap: var(--modal-footer-primary-button-content-gap, 16px);
@@ -4,6 +4,7 @@
4
4
  import Pill from '../Pill/Pill.svelte';
5
5
  import Img from '../Img/Img.svelte';
6
6
  import chevronDownSvg from '../assets/chevron-down.svg?raw';
7
+ import checkmarkSvg from '../assets/checkmark.svg?raw';
7
8
 
8
9
  let {
9
10
  items: rawItems,
@@ -378,9 +379,16 @@
378
379
  {#if typeof optionIndicator === 'function'}
379
380
  {@render optionIndicator({ checked: value.includes(item.id) })}
380
381
  {:else}
381
- <span class="select-option-indicator" aria-hidden="true"
382
- >{value.includes(item.id) ? '☑' : '☐'}</span
382
+ <span
383
+ class="select-option-indicator"
384
+ class:checked={value.includes(item.id)}
385
+ aria-hidden="true"
383
386
  >
387
+ {#if value.includes(item.id)}
388
+ <!-- eslint-disable-next-line svelte/no-at-html-tags -->
389
+ <span class="select-option-check">{@html checkmarkSvg}</span>
390
+ {/if}
391
+ </span>
384
392
  {/if}
385
393
  {/if}
386
394
  {item.label}
@@ -557,8 +565,37 @@
557
565
  .select-option-indicator {
558
566
  display: inline-flex;
559
567
  align-items: center;
560
- color: var(--select-option-indicator-color, currentColor);
568
+ justify-content: center;
561
569
  flex-shrink: 0;
570
+ box-sizing: border-box;
571
+ width: var(--select-option-indicator-size, 18px);
572
+ height: var(--select-option-indicator-size, 18px);
573
+ border: var(--select-option-indicator-border, 2px solid #757575);
574
+ border-radius: var(--select-option-indicator-border-radius, 3px);
575
+ background-color: var(--select-option-indicator-background, transparent);
576
+ color: var(--select-option-indicator-color, currentColor);
577
+ transition:
578
+ background-color 0.15s,
579
+ border-color 0.15s;
580
+ }
581
+
582
+ .select-option-indicator.checked {
583
+ background-color: var(--select-option-indicator-checked-background, #2196f3);
584
+ border-color: var(--select-option-indicator-checked-border-color, #2196f3);
585
+ }
586
+
587
+ .select-option-check {
588
+ display: inline-flex;
589
+ align-items: center;
590
+ justify-content: center;
591
+ width: var(--select-option-indicator-check-size, 12px);
592
+ height: var(--select-option-indicator-check-size, 12px);
593
+ color: var(--select-option-indicator-check-color, #ffffff);
594
+ }
595
+
596
+ .select-option-check :global(svg) {
597
+ width: 100%;
598
+ height: 100%;
562
599
  }
563
600
 
564
601
  .select-empty {
@@ -17,6 +17,14 @@ export type OptionalSelectProperties = {
17
17
  placeholder?: string;
18
18
  disabled?: boolean;
19
19
  bottomContent?: Snippet;
20
+ /**
21
+ * Snippet for rendering a custom multi-select option indicator, receiving `{ checked }`.
22
+ * When omitted, multiple-mode options render a design-system checkbox box (bordered square
23
+ * that fills and shows a checkmark when selected), themeable via the `--select-option-indicator-*`
24
+ * CSS variables: `-size` (18px), `-border`, `-border-radius`, `-background`,
25
+ * `-checked-background`, `-checked-border-color`, `-check-size`, `-check-color`. Provide this
26
+ * snippet to fully replace the indicator (e.g. to restore the legacy ☑/☐ glyph).
27
+ */
20
28
  optionIndicator?: Snippet<[{
21
29
  checked: boolean;
22
30
  }]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/svelte-ui-components",
3
- "version": "2.66.0",
3
+ "version": "2.68.0",
4
4
  "description": "A themeable Svelte 5 UI component library with CSS custom property driven styling",
5
5
  "keywords": [
6
6
  "svelte",