@ibis-design/svelte 0.5.0 → 0.6.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.
Files changed (86) hide show
  1. package/README.md +12 -2
  2. package/dist/components/buttons/Button.svelte +106 -0
  3. package/dist/components/buttons/Button.svelte.d.ts +69 -0
  4. package/dist/components/buttons/DropdownButton.svelte +91 -0
  5. package/dist/components/buttons/DropdownButton.svelte.d.ts +33 -0
  6. package/dist/components/buttons/PillTab.svelte +84 -0
  7. package/dist/components/buttons/PillTab.svelte.d.ts +55 -0
  8. package/dist/components/buttons/button.css +193 -0
  9. package/dist/components/buttons/dropdownButton.css +82 -0
  10. package/dist/components/buttons/pillTab.css +59 -0
  11. package/dist/components/containers/Banner.svelte +73 -0
  12. package/dist/components/containers/Banner.svelte.d.ts +16 -0
  13. package/dist/components/containers/Card.svelte +34 -0
  14. package/dist/components/containers/Card.svelte.d.ts +14 -0
  15. package/dist/components/containers/PillTabs.svelte +22 -0
  16. package/dist/components/containers/PillTabs.svelte.d.ts +6 -0
  17. package/dist/components/containers/TipIndicator.svelte +78 -0
  18. package/dist/components/containers/TipIndicator.svelte.d.ts +28 -0
  19. package/dist/components/containers/Toaster.svelte +75 -0
  20. package/dist/components/containers/Toaster.svelte.d.ts +16 -0
  21. package/dist/components/containers/Tooltip.svelte.d.ts +26 -0
  22. package/dist/components/containers/banner.css +155 -0
  23. package/dist/components/containers/tipIndicator.css +79 -0
  24. package/dist/components/containers/toaster.css +137 -0
  25. package/dist/components/containers/tooltip.css +0 -0
  26. package/dist/components/inputs/.gitkeep +0 -0
  27. package/dist/components/inputs/Checkbox.svelte +95 -0
  28. package/dist/components/inputs/Checkbox.svelte.d.ts +33 -0
  29. package/dist/components/inputs/Chips.svelte +104 -0
  30. package/dist/components/inputs/Chips.svelte.d.ts +48 -0
  31. package/dist/components/inputs/Dropdown.svelte +83 -0
  32. package/dist/components/inputs/Dropdown.svelte.d.ts +15 -0
  33. package/dist/components/inputs/Radio.svelte +109 -0
  34. package/dist/components/inputs/Radio.svelte.d.ts +49 -0
  35. package/dist/components/inputs/Switch.svelte +45 -0
  36. package/dist/components/inputs/Switch.svelte.d.ts +21 -0
  37. package/dist/components/inputs/TextArea.svelte +65 -0
  38. package/dist/components/inputs/TextArea.svelte.d.ts +14 -0
  39. package/dist/components/inputs/TextInput.svelte +273 -0
  40. package/dist/components/inputs/TextInput.svelte.d.ts +140 -0
  41. package/dist/components/inputs/TextLink.svelte +102 -0
  42. package/dist/components/inputs/TextLink.svelte.d.ts +21 -0
  43. package/dist/components/inputs/checkbox.css +103 -0
  44. package/dist/components/inputs/chips.css +76 -0
  45. package/dist/components/inputs/dropdown.css +106 -0
  46. package/dist/components/inputs/radio.css +108 -0
  47. package/dist/components/inputs/switch.css +68 -0
  48. package/dist/components/inputs/textInput.css +152 -0
  49. package/dist/components/inputs/textarea.css +91 -0
  50. package/dist/components/inputs/textlink.css +163 -0
  51. package/dist/index.d.ts +21 -20
  52. package/dist/index.js +36 -3187
  53. package/dist/layouts/AppLayout.svelte +83 -0
  54. package/dist/layouts/AppLayout.svelte.d.ts +20 -0
  55. package/dist/layouts/AuthLayout.svelte +63 -0
  56. package/dist/layouts/AuthLayout.svelte.d.ts +18 -0
  57. package/dist/layouts/DashboardLayout.svelte +88 -0
  58. package/dist/layouts/DashboardLayout.svelte.d.ts +20 -0
  59. package/dist/types/button.js +5 -0
  60. package/dist/types/index.d.ts +2 -2
  61. package/dist/types/index.js +5 -0
  62. package/dist/types/layout.d.ts +1 -1
  63. package/dist/types/layout.js +1 -0
  64. package/package.json +14 -9
  65. package/dist/index.css +0 -1
  66. package/dist/index.js.map +0 -1
  67. package/dist/lib/components/buttons/Button.svelte.d.ts +0 -1
  68. package/dist/lib/components/buttons/DropdownButton.svelte.d.ts +0 -1
  69. package/dist/lib/components/buttons/PillTab.svelte.d.ts +0 -1
  70. package/dist/lib/components/containers/Banner.svelte.d.ts +0 -1
  71. package/dist/lib/components/containers/Card.svelte.d.ts +0 -1
  72. package/dist/lib/components/containers/Toaster.svelte.d.ts +0 -1
  73. package/dist/lib/components/inputs/Checkbox.svelte.d.ts +0 -1
  74. package/dist/lib/components/inputs/Chips.svelte.d.ts +0 -1
  75. package/dist/lib/components/inputs/DateInput.svelte.d.ts +0 -1
  76. package/dist/lib/components/inputs/DateInput2.svelte.d.ts +0 -1
  77. package/dist/lib/components/inputs/Dropdown.svelte.d.ts +0 -1
  78. package/dist/lib/components/inputs/Password.svelte.d.ts +0 -1
  79. package/dist/lib/components/inputs/Radio.svelte.d.ts +0 -1
  80. package/dist/lib/components/inputs/TextArea.svelte.d.ts +0 -1
  81. package/dist/lib/components/inputs/TextInput.svelte.d.ts +0 -1
  82. package/dist/lib/components/inputs/TextLink.svelte.d.ts +0 -1
  83. package/dist/lib/layouts/AppLayout.svelte.d.ts +0 -1
  84. package/dist/lib/layouts/AuthLayout.svelte.d.ts +0 -1
  85. package/dist/lib/layouts/DashboardLayout.svelte.d.ts +0 -1
  86. /package/dist/{types/input.d.ts → components/containers/Tooltip.svelte} +0 -0
@@ -0,0 +1,82 @@
1
+ .dropdown-button {
2
+ position: relative;
3
+ display: inline-block;
4
+ }
5
+
6
+ .caret {
7
+ margin-left: 0.25em;
8
+ width: 1em;
9
+ height: 1em;
10
+ }
11
+
12
+ .dropdown-menu {
13
+ position: absolute;
14
+ top: 100%;
15
+ left: 0;
16
+ margin-top: 4px;
17
+ min-width: 160px;
18
+ background: white;
19
+ border: 1px solid var(--color-neutral-300);
20
+ border-radius: var(--component-button-size-md);
21
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
22
+ z-index: 1000;
23
+ padding: 4px;
24
+ display: flex;
25
+ flex-direction: column;
26
+ }
27
+
28
+ /* .dropdown-menu :global(button) {
29
+ all: unset;
30
+ padding: 8px;
31
+ cursor: pointer;
32
+ border-radius: 4px;
33
+ }
34
+
35
+ .dropdown-menu :global(button:hover) {
36
+ background-color: var(--color-neutral-100);
37
+ } */
38
+
39
+ .dropdown-menu :global(.dropdown-menu__item) {
40
+ all: unset;
41
+ display: flex;
42
+ align-items: center;
43
+ justify-content: center;
44
+ width: 100%;
45
+ box-sizing: border-box;
46
+ padding: var(--spacing-3) var(--spacing-4);
47
+ cursor: pointer;
48
+ font-family: var(--font-family-sans);
49
+ font-size: var(--font-size-normal-text-default);
50
+ font-weight: var(--font-weight-medium);
51
+ color: var(--color-neutral-900);
52
+ text-align: center;
53
+ transition: background-color var(--transition-duration-fast) var(--transition-timing-default);
54
+ }
55
+
56
+ .dropdown-menu :global(.dropdown-menu__item:hover) {
57
+ background-color: var(--color-primary-400);
58
+ color: var(--color-white);
59
+ }
60
+
61
+ .dropdown-menu :global(.dropdown-menu__item--selected) {
62
+ background-color: var(--color-primary-500);
63
+ color: var(--color-white);
64
+ font-weight: var(--font-weight-bold);
65
+ }
66
+
67
+ .dropdown-menu :global(.dropdown-menu__item--selected:hover) {
68
+ background-color: var(--color-primary-700);
69
+ color: var(--color-white);
70
+ }
71
+
72
+ .caret {
73
+ margin-left: 0.25em;
74
+ width: 1em;
75
+ height: 1em;
76
+ transition: transform var(--transition-duration-fast) var(--transition-timing-default);
77
+ }
78
+
79
+ /* ↓ ADDED — rotates caret when open */
80
+ .caret--open {
81
+ transform: rotate(180deg);
82
+ }
@@ -0,0 +1,59 @@
1
+ .ibis-pill-tab {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ flex: 1;
6
+ padding: var(--spacing-1) var(--spacing-3);
7
+ height: 100%;
8
+ align-self: stretch;
9
+ border-radius: var(--border-radius-full);
10
+ /* background: var(--color-neutral-100); */
11
+ color: var(--color-neutral-700);
12
+ cursor: pointer;
13
+ user-select: none;
14
+
15
+ transition:
16
+ background var(--transition-duration-normal),
17
+ color var(--transition-duration-normal),
18
+ box-shadow var(--transition-duration-normal);
19
+ }
20
+
21
+ .ibis-pill-tab__input {
22
+ display: none;
23
+ }
24
+
25
+ .ibis-pill-tab__content {
26
+ font-size: var(--font-size-sm);
27
+ line-height: 1;
28
+ text-align: center; /*New*/
29
+ width: 100%; /*New*/
30
+ }
31
+
32
+ /* Active */
33
+ .ibis-pill-tab--active {
34
+ background: var(--color-primary-700);
35
+ color: var(--color-white);
36
+ }
37
+
38
+ /* Hover */
39
+ .ibis-pill-tab:hover:not(.ibis-pill-tab--disabled):not(.ibis-pill-tab--active) {
40
+ background: var(--color-primary-100);
41
+ color: var(--color-primary-800);
42
+ }
43
+
44
+ .ibis-pill-tab--active:hover {
45
+ background: var(--color-primary-800);
46
+ }
47
+
48
+ /* Focus (important for accessibility) */
49
+ .ibis-pill-tab__input:focus-visible + .ibis-pill-tab__content {
50
+ outline: 2px solid var(--color-primary-500);
51
+ outline-offset: 2px;
52
+ border-radius: 999px;
53
+ }
54
+
55
+ /* Disabled */
56
+ .ibis-pill-tab--disabled {
57
+ opacity: var(--opacity-7);
58
+ cursor: not-allowed;
59
+ }
@@ -0,0 +1,73 @@
1
+ <script lang="ts">
2
+ import "./banner.css";
3
+ import type { Snippet } from "svelte";
4
+
5
+ type BannerType = "success" | "error" | "default";
6
+
7
+ interface Props {
8
+ type?: BannerType;
9
+ title?: string;
10
+ message?: string;
11
+ children?: Snippet;
12
+ icon?: Snippet;
13
+ iconText?: string;
14
+ closable?: boolean;
15
+ loading?: boolean;
16
+ }
17
+
18
+ let {
19
+ type = "default",
20
+ title,
21
+ message,
22
+ children,
23
+ icon,
24
+ iconText,
25
+ closable,
26
+ loading,
27
+ }: Props = $props();
28
+
29
+ let visible = $state(true);
30
+
31
+ const close = () => {
32
+ visible = false;
33
+ };
34
+ </script>
35
+
36
+ {#if visible}
37
+ <div
38
+ class="ibis-banner"
39
+ role="status"
40
+ class:ibis-banner--success={type === "success"}
41
+ class:ibis-banner--error={type === "error"}
42
+ class:ibis-banner--default={type === "default"}>
43
+ {#if loading || icon || iconText}
44
+ <div class="ibis-banner__icon">
45
+ {#if loading}
46
+ <span class="ibis-banner__loader" aria-hidden="true"></span>
47
+ {:else if icon}
48
+ {@render icon?.()}
49
+ {:else}
50
+ {iconText}
51
+ {/if}
52
+ </div>
53
+ {/if}
54
+
55
+ <div class="ibis-banner__content">
56
+ {#if title}
57
+ <div class="ibis-banner__title">{title}</div>
58
+ {/if}
59
+
60
+ <div class="ibis-banner__message">
61
+ {#if children}
62
+ {@render children?.()}
63
+ {:else if message}
64
+ {message}
65
+ {/if}
66
+ </div>
67
+ </div>
68
+
69
+ {#if closable}
70
+ <button class="ibis-banner__close" onclick={close} aria-label="Close"> x </button>
71
+ {/if}
72
+ </div>
73
+ {/if}
@@ -0,0 +1,16 @@
1
+ import "./banner.css";
2
+ import type { Snippet } from "svelte";
3
+ type BannerType = "success" | "error" | "default";
4
+ interface Props {
5
+ type?: BannerType;
6
+ title?: string;
7
+ message?: string;
8
+ children?: Snippet;
9
+ icon?: Snippet;
10
+ iconText?: string;
11
+ closable?: boolean;
12
+ loading?: boolean;
13
+ }
14
+ declare const Banner: import("svelte").Component<Props, {}, "">;
15
+ type Banner = ReturnType<typeof Banner>;
16
+ export default Banner;
@@ -0,0 +1,34 @@
1
+ <!--
2
+ Card – Container with token-based padding, radius, and shadow.
3
+ @component
4
+ @param {Snippet} [children] - Snippet content for the card body.
5
+ @example
6
+ <Card>Card content</Card>
7
+ -->
8
+ <script lang="ts">
9
+ import type { Snippet } from "svelte";
10
+
11
+ interface Props {
12
+ children?: Snippet;
13
+ }
14
+
15
+ let { children }: Props = $props();
16
+ </script>
17
+
18
+ <div class="ibis-card">
19
+ {#if children}
20
+ {@render children()}
21
+ {/if}
22
+ </div>
23
+
24
+ <style>
25
+ .ibis-card {
26
+ background-color: var(--color-backgrounds-classic-bg-light);
27
+ border-radius: var(--border-radius-md);
28
+ box-shadow: var(--shadow-default);
29
+ padding: var(--spacing-4);
30
+ font-family: var(--font-family-sans);
31
+ font-size: var(--font-size-normal-text-default);
32
+ line-height: var(--line-height-normal);
33
+ }
34
+ </style>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from "svelte";
2
+ interface Props {
3
+ children?: Snippet;
4
+ }
5
+ /**
6
+ * Card – Container with token-based padding, radius, and shadow.
7
+ *
8
+ * @param {Snippet} [children] - Snippet content for the card body.
9
+ * @example
10
+ * <Card>Card content</Card>
11
+ */
12
+ declare const Card: import("svelte").Component<Props, {}, "">;
13
+ type Card = ReturnType<typeof Card>;
14
+ export default Card;
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ children?: () => any;
4
+ }
5
+
6
+ let { children }: Props = $props();
7
+ </script>
8
+
9
+ <div class="ibis-pill-tabs">
10
+ {@render children?.()}
11
+ </div>
12
+
13
+ <style>
14
+ .ibis-pill-tabs {
15
+ display: inline-flex;
16
+ align-items: stretch;
17
+ border-radius: var(--border-radius-full);
18
+ background: var(--color-white);
19
+ padding: 4px;
20
+ gap: 4px;
21
+ }
22
+ </style>
@@ -0,0 +1,6 @@
1
+ interface Props {
2
+ children?: () => any;
3
+ }
4
+ declare const PillTabs: import("svelte").Component<Props, {}, "">;
5
+ type PillTabs = ReturnType<typeof PillTabs>;
6
+ export default PillTabs;
@@ -0,0 +1,78 @@
1
+ <script lang="ts">
2
+ import './tipIndicator.css';
3
+
4
+ interface Props {
5
+ /**
6
+ * Controls the position of the tooltip relative to the indicator.
7
+ *
8
+ * @default "top"
9
+ */
10
+ position?: 'top' | 'bottom' | 'left' | 'right';
11
+ /**
12
+ * The plain text content displayed inside the tooltip.
13
+ */
14
+ text: string;
15
+ /**
16
+ * Disables the tooltip from appearing on hover.
17
+ *
18
+ * @default false
19
+ */
20
+ disabled?: boolean;
21
+ /**
22
+ * Controls the width of the tooltip.
23
+ *
24
+ * @default "auto"
25
+ */
26
+ width?: 'auto' | '240' | '360';
27
+ }
28
+
29
+ let { position = 'top', text, disabled = false, width = 'auto' }: Props = $props();
30
+
31
+ let visible = $state(false);
32
+
33
+ const show = () => {
34
+ if (!disabled) visible = true;
35
+ };
36
+
37
+ const hide = () => {
38
+ visible = false;
39
+ };
40
+ </script>
41
+
42
+ <span
43
+ class="ibis-tip-indicator"
44
+ onmouseenter={show}
45
+ onmouseleave={hide}
46
+ onfocus={show}
47
+ onblur={hide}
48
+ tabindex="0"
49
+ role="button"
50
+ aria-describedby="ibis-tip"
51
+ >
52
+ <svg
53
+ class="ibis-tip-indicator__icon"
54
+ xmlns="http://www.w3.org/2000/svg"
55
+ viewBox="0 0 24 24"
56
+ fill="none"
57
+ aria-hidden="true"
58
+ >
59
+ <circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="2" />
60
+ <line
61
+ x1="12"
62
+ y1="11"
63
+ x2="12"
64
+ y2="17"
65
+ stroke="currentColor"
66
+ stroke-width="2"
67
+ stroke-linecap="round"
68
+ />
69
+ <circle cx="12" cy="7.5" r="1.2" fill="currentColor" />
70
+ </svg>
71
+
72
+ {#if visible}
73
+ <div id="ibis-tip" class="ibis-tip ibis-tip--{position} ibis-tip--width-{width}" role="tooltip">
74
+ <span class="ibis-tip__text">{text}</span>
75
+ <span class="ibis-tip__arrow"></span>
76
+ </div>
77
+ {/if}
78
+ </span>
@@ -0,0 +1,28 @@
1
+ import './tipIndicator.css';
2
+ interface Props {
3
+ /**
4
+ * Controls the position of the tooltip relative to the indicator.
5
+ *
6
+ * @default "top"
7
+ */
8
+ position?: 'top' | 'bottom' | 'left' | 'right';
9
+ /**
10
+ * The plain text content displayed inside the tooltip.
11
+ */
12
+ text: string;
13
+ /**
14
+ * Disables the tooltip from appearing on hover.
15
+ *
16
+ * @default false
17
+ */
18
+ disabled?: boolean;
19
+ /**
20
+ * Controls the width of the tooltip.
21
+ *
22
+ * @default "auto"
23
+ */
24
+ width?: 'auto' | '240' | '360';
25
+ }
26
+ declare const TipIndicator: import("svelte").Component<Props, {}, "">;
27
+ type TipIndicator = ReturnType<typeof TipIndicator>;
28
+ export default TipIndicator;
@@ -0,0 +1,75 @@
1
+ <script lang="ts">
2
+ import './toaster.css';
3
+ import type { Snippet } from 'svelte';
4
+
5
+ type ToastType = 'success' | 'error' | 'accent' | 'default';
6
+
7
+ interface Props {
8
+ type?: ToastType;
9
+ title?: string;
10
+ message?: string;
11
+ children?: Snippet;
12
+ icon?: Snippet;
13
+ iconText?: string;
14
+ closable?: boolean;
15
+ loading?: boolean;
16
+ }
17
+
18
+ let {
19
+ type = 'default',
20
+ title,
21
+ message,
22
+ children,
23
+ icon,
24
+ iconText,
25
+ closable,
26
+ loading
27
+ }: Props = $props();
28
+
29
+ let visible = $state(true);
30
+
31
+ const close = () => {
32
+ visible = false;
33
+ };
34
+ </script>
35
+
36
+ {#if visible}
37
+ <div
38
+ class="ibis-toaster"
39
+ role="status"
40
+ class:ibis-toaster--success={type === 'success'}
41
+ class:ibis-toaster--error={type === 'error'}
42
+ class:ibis-toaster--accent={type === 'accent'}
43
+ class:ibis-toaster--default={type === 'default'}
44
+ >
45
+ {#if loading || icon || iconText}
46
+ <div class="ibis-toaster__icon">
47
+ {#if loading}
48
+ <span class="ibis-toaster__loader" aria-hidden="true"></span>
49
+ {:else if icon}
50
+ {@render icon?.()}
51
+ {:else}
52
+ {iconText}
53
+ {/if}
54
+ </div>
55
+ {/if}
56
+
57
+ <div class="ibis-toaster__content">
58
+ {#if title}
59
+ <div class="ibis-toaster__title">{title}</div>
60
+ {/if}
61
+
62
+ <div class="ibis-toaster__message">
63
+ {#if children}
64
+ {@render children?.()}
65
+ {:else if message}
66
+ {message}
67
+ {/if}
68
+ </div>
69
+ </div>
70
+
71
+ {#if closable}
72
+ <button class="ibis-toaster__close" onclick={close} aria-label="Close"> x </button>
73
+ {/if}
74
+ </div>
75
+ {/if}
@@ -0,0 +1,16 @@
1
+ import './toaster.css';
2
+ import type { Snippet } from 'svelte';
3
+ type ToastType = 'success' | 'error' | 'accent' | 'default';
4
+ interface Props {
5
+ type?: ToastType;
6
+ title?: string;
7
+ message?: string;
8
+ children?: Snippet;
9
+ icon?: Snippet;
10
+ iconText?: string;
11
+ closable?: boolean;
12
+ loading?: boolean;
13
+ }
14
+ declare const Toaster: import("svelte").Component<Props, {}, "">;
15
+ type Toaster = ReturnType<typeof Toaster>;
16
+ export default Toaster;
@@ -0,0 +1,26 @@
1
+ export default Tooltip;
2
+ type Tooltip = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Tooltip: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
@@ -0,0 +1,155 @@
1
+ .ibis-banner {
2
+ font-family: var(--font-family-sans);
3
+ display: flex;
4
+ align-items: flex-start;
5
+ gap: 8px; /*hardcoded*/
6
+ padding: 8px 16px;
7
+ border-radius: 16px; /*hardcoded*/
8
+ border: var(--border-width-default) solid var(--color-neutral-200);
9
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08); /*hardcoded - tokenize later*/
10
+
11
+ max-width: 300px;
12
+ position: relative;
13
+ margin-bottom: 2px;
14
+ }
15
+
16
+ /* ICON */
17
+ .ibis-banner__icon {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+
22
+ width: 20px;
23
+ height: 20px;
24
+ top: 2px;
25
+ left: 2px;
26
+
27
+ flex-shrink: 0;
28
+
29
+ margin-top: 2px;
30
+ color: var(--color-white);
31
+ }
32
+
33
+ .ibis-banner__icon :global(svg) {
34
+ width: 100%;
35
+ height: 100%;
36
+ }
37
+
38
+ .ibis-banner__content {
39
+ flex: 1;
40
+ display: flex;
41
+ flex-direction: column;
42
+ gap: var(--spacing-1);
43
+ }
44
+
45
+ .ibis-banner__title {
46
+ font-weight: var(--font-weight-medium);
47
+ font-size: var(--font-size-normal-text-sm);
48
+ }
49
+
50
+ .ibis-banner__message {
51
+ font-size: var(--font-size-normal-text-sm);
52
+ color: var(--color-white);
53
+ }
54
+
55
+ .ibis-banner--default .ibis-banner__message {
56
+ font-size: var(--font-size-normal-text-sm);
57
+ color: var(--color-primary-900);
58
+ }
59
+
60
+ .ibis-banner--success .ibis-banner__message {
61
+ font-size: var(--font-size-normal-text-sm);
62
+ color: var(--color-status-success);
63
+ }
64
+
65
+ .ibis-banner--error .ibis-banner__message {
66
+ font-size: var(--font-size-normal-text-sm);
67
+ color: var(--color-status-error);
68
+ }
69
+
70
+ .ibis-banner__close {
71
+ background: transparent;
72
+ border: none;
73
+ cursor: pointer;
74
+ font-size: 18px; /*hardcoded*/
75
+ line-height: 1;
76
+ color: var(--color-white);
77
+ flex-shrink: 0;
78
+ }
79
+
80
+ /* SUCCESS */
81
+ .ibis-banner--success {
82
+ border-color: rgba(0, 154, 8, 0.1);
83
+ background-color: rgba(0, 154, 8, 0.1);
84
+ }
85
+
86
+ .ibis-banner--success .ibis-banner__title {
87
+ color: var(--color-status-success);
88
+ }
89
+
90
+ .ibis-banner--success .ibis-banner__icon {
91
+ color: var(--color-status-success);
92
+ }
93
+
94
+ .ibis-banner--success .ibis-banner__close {
95
+ color: var(--color-status-success);
96
+ border-color: var(--color-status-success);
97
+ }
98
+
99
+ /* ERROR */
100
+ .ibis-banner--error {
101
+ border-color: rgba(183, 12, 0, 0.1);
102
+ background-color: rgba(183, 12, 0, 0.1);
103
+ }
104
+
105
+ .ibis-banner--error .ibis-banner__title {
106
+ color: var(--color-status-error);
107
+ }
108
+
109
+ .ibis-banner--error .ibis-banner__icon {
110
+ color: var(--color-status-error);
111
+ }
112
+
113
+ .ibis-banner--error .ibis-banner__close {
114
+ color: var(--color-status-error);
115
+ border-color: var(--color-status-error);
116
+ }
117
+
118
+ /* DEFAULT */
119
+ .ibis-banner--default {
120
+ border-color: rgba(113, 59, 193, 0.1);
121
+ background-color: rgba(113, 59, 193, 0.1);
122
+ }
123
+
124
+ .ibis-banner--default .ibis-banner__title {
125
+ color: var(--color-primary-900);
126
+ }
127
+
128
+ .ibis-banner--default .ibis-banner__icon {
129
+ color: var(--color-primary-900);
130
+ }
131
+
132
+ .ibis-banner--default .ibis-banner__close {
133
+ color: var(--color-primary-900);
134
+ border-color: var(--color-primary-900);
135
+ }
136
+
137
+ .ibis-banner__loader {
138
+ width: 1em;
139
+ height: 1em;
140
+
141
+ border: var(--border-width-default) solid var(--color-primary-300);
142
+ border-top-color: var(--color-primary-900);
143
+ border-radius: 50%;
144
+
145
+ animation: ibis-spin 0.8s linear infinite;
146
+ }
147
+
148
+ @keyframes ibis-spin {
149
+ from {
150
+ transform: rotate(0deg);
151
+ }
152
+ to {
153
+ transform: rotate(360deg);
154
+ }
155
+ }