@ibis-design/svelte 0.2.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 (73) 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 -8
  52. package/dist/index.js +36 -2000
  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 +49 -44
  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/containers/Card.svelte.d.ts +0 -1
  70. package/dist/lib/layouts/AppLayout.svelte.d.ts +0 -1
  71. package/dist/lib/layouts/AuthLayout.svelte.d.ts +0 -1
  72. package/dist/lib/layouts/DashboardLayout.svelte.d.ts +0 -1
  73. /package/dist/{types/input.d.ts → components/containers/Tooltip.svelte} +0 -0
@@ -0,0 +1,83 @@
1
+ <!--
2
+ AppLayout – Generic app shell: optional header, sidebar, main, footer.
3
+ @component
4
+ @param {Snippet} [header] - Top bar / app header.
5
+ @param {Snippet} [sidebar] - Side navigation or sidebar.
6
+ @param {Snippet} [children] - Main content area.
7
+ @param {Snippet} [footer] - Optional footer.
8
+ @example
9
+ <AppLayout header={headerSnippet} sidebar={sidebarSnippet}>...</AppLayout>
10
+ -->
11
+ <script lang="ts">
12
+ import type { Snippet } from "svelte";
13
+
14
+ interface Props {
15
+ header?: Snippet;
16
+ sidebar?: Snippet;
17
+ children?: Snippet;
18
+ footer?: Snippet;
19
+ }
20
+
21
+ let { header, sidebar, children, footer }: Props = $props();
22
+ </script>
23
+
24
+ <div class="ibis-app-layout">
25
+ {#if header}
26
+ <header class="ibis-app-layout__header">{@render header()}</header>
27
+ {/if}
28
+ <div class="ibis-app-layout__body">
29
+ {#if sidebar}
30
+ <aside class="ibis-app-layout__sidebar">{@render sidebar()}</aside>
31
+ {/if}
32
+ <main class="ibis-app-layout__main">
33
+ {#if children}
34
+ {@render children()}
35
+ {/if}
36
+ </main>
37
+ </div>
38
+ {#if footer}
39
+ <footer class="ibis-app-layout__footer">{@render footer()}</footer>
40
+ {/if}
41
+ </div>
42
+
43
+ <style>
44
+ .ibis-app-layout {
45
+ min-height: 100vh;
46
+ display: flex;
47
+ flex-direction: column;
48
+ background-color: var(--color-backgrounds-classic-bg-light);
49
+ font-family: var(--font-family-sans);
50
+ }
51
+
52
+ .ibis-app-layout__header {
53
+ flex: 0 0 auto;
54
+ z-index: var(--z-index-sticky);
55
+ }
56
+
57
+ .ibis-app-layout__body {
58
+ flex: 1 1 auto;
59
+ display: flex;
60
+ min-height: 0;
61
+ }
62
+
63
+ .ibis-app-layout__sidebar {
64
+ flex: 0 0 auto;
65
+ width: 16rem;
66
+ background-color: var(--color-neutral-50);
67
+ border-right: var(--border-width-thin) solid var(--color-neutral-200);
68
+ }
69
+
70
+ .ibis-app-layout__main {
71
+ flex: 1 1 auto;
72
+ overflow: auto;
73
+ padding: var(--spacing-6);
74
+ }
75
+
76
+ .ibis-app-layout__footer {
77
+ flex: 0 0 auto;
78
+ padding: var(--spacing-4);
79
+ border-top: var(--border-width-thin) solid var(--color-neutral-200);
80
+ font-size: var(--font-size-normal-text-sm);
81
+ color: var(--color-neutral-600);
82
+ }
83
+ </style>
@@ -0,0 +1,20 @@
1
+ import type { Snippet } from "svelte";
2
+ interface Props {
3
+ header?: Snippet;
4
+ sidebar?: Snippet;
5
+ children?: Snippet;
6
+ footer?: Snippet;
7
+ }
8
+ /**
9
+ * AppLayout – Generic app shell: optional header, sidebar, main, footer.
10
+ *
11
+ * @param {Snippet} [header] - Top bar / app header.
12
+ * @param {Snippet} [sidebar] - Side navigation or sidebar.
13
+ * @param {Snippet} [children] - Main content area.
14
+ * @param {Snippet} [footer] - Optional footer.
15
+ * @example
16
+ * <AppLayout header={headerSnippet} sidebar={sidebarSnippet}>...</AppLayout>
17
+ */
18
+ declare const AppLayout: import("svelte").Component<Props, {}, "">;
19
+ type AppLayout = ReturnType<typeof AppLayout>;
20
+ export default AppLayout;
@@ -0,0 +1,63 @@
1
+ <!--
2
+ AuthLayout – Centered single-column layout for login/signup views.
3
+ @component
4
+ @param {Snippet} [logo] - Optional logo snippet above main content.
5
+ @param {Snippet} [children] - Main content (e.g. form).
6
+ @param {Snippet} [footer] - Optional footer snippet.
7
+ @example
8
+ <AuthLayout logo={logoSnippet} footer={footerSnippet}>...</AuthLayout>
9
+ -->
10
+ <script lang="ts">
11
+ import type { Snippet } from "svelte";
12
+
13
+ interface Props {
14
+ logo?: Snippet;
15
+ children?: Snippet;
16
+ footer?: Snippet;
17
+ }
18
+
19
+ let { logo, children, footer }: Props = $props();
20
+ </script>
21
+
22
+ <div class="ibis-auth-layout">
23
+ {#if logo}
24
+ <div class="ibis-auth-layout__logo">{@render logo()}</div>
25
+ {/if}
26
+ <main class="ibis-auth-layout__main">
27
+ {#if children}
28
+ {@render children()}
29
+ {/if}
30
+ </main>
31
+ {#if footer}
32
+ <footer class="ibis-auth-layout__footer">{@render footer()}</footer>
33
+ {/if}
34
+ </div>
35
+
36
+ <style>
37
+ .ibis-auth-layout {
38
+ min-height: 100vh;
39
+ display: flex;
40
+ flex-direction: column;
41
+ align-items: center;
42
+ justify-content: center;
43
+ padding: var(--spacing-6);
44
+ background-color: var(--color-backgrounds-themed-bg-ibis-white);
45
+ font-family: var(--font-family-sans);
46
+ }
47
+
48
+ .ibis-auth-layout__logo {
49
+ margin-bottom: var(--spacing-8);
50
+ }
51
+
52
+ .ibis-auth-layout__main {
53
+ width: 100%;
54
+ max-width: 24rem;
55
+ flex: 0 1 auto;
56
+ }
57
+
58
+ .ibis-auth-layout__footer {
59
+ margin-top: var(--spacing-8);
60
+ font-size: var(--font-size-normal-text-sm);
61
+ color: var(--color-neutral-600);
62
+ }
63
+ </style>
@@ -0,0 +1,18 @@
1
+ import type { Snippet } from "svelte";
2
+ interface Props {
3
+ logo?: Snippet;
4
+ children?: Snippet;
5
+ footer?: Snippet;
6
+ }
7
+ /**
8
+ * AuthLayout – Centered single-column layout for login/signup views.
9
+ *
10
+ * @param {Snippet} [logo] - Optional logo snippet above main content.
11
+ * @param {Snippet} [children] - Main content (e.g. form).
12
+ * @param {Snippet} [footer] - Optional footer snippet.
13
+ * @example
14
+ * <AuthLayout logo={logoSnippet} footer={footerSnippet}>...</AuthLayout>
15
+ */
16
+ declare const AuthLayout: import("svelte").Component<Props, {}, "">;
17
+ type AuthLayout = ReturnType<typeof AuthLayout>;
18
+ export default AuthLayout;
@@ -0,0 +1,88 @@
1
+ <!--
2
+ DashboardLayout – Dashboard-specific shell with themed header and sidebar.
3
+ @component
4
+ @param {Snippet} [header] - Dashboard header (e.g. gradient bar).
5
+ @param {Snippet} [sidebar] - Side navigation.
6
+ @param {Snippet} [children] - Main content area.
7
+ @param {Snippet} [footer] - Optional footer.
8
+ @example
9
+ <DashboardLayout header={headerSnippet} sidebar={sidebarSnippet}>...</DashboardLayout>
10
+ -->
11
+ <script lang="ts">
12
+ import type { Snippet } from "svelte";
13
+
14
+ interface Props {
15
+ header?: Snippet;
16
+ sidebar?: Snippet;
17
+ children?: Snippet;
18
+ footer?: Snippet;
19
+ }
20
+
21
+ let { header, sidebar, children, footer }: Props = $props();
22
+ </script>
23
+
24
+ <div class="ibis-dashboard-layout">
25
+ {#if header}
26
+ <header class="ibis-dashboard-layout__header">{@render header()}</header>
27
+ {/if}
28
+ <div class="ibis-dashboard-layout__body">
29
+ {#if sidebar}
30
+ <aside class="ibis-dashboard-layout__sidebar">{@render sidebar()}</aside>
31
+ {/if}
32
+ <main class="ibis-dashboard-layout__main">
33
+ {#if children}
34
+ {@render children()}
35
+ {/if}
36
+ </main>
37
+ </div>
38
+ {#if footer}
39
+ <footer class="ibis-dashboard-layout__footer">{@render footer()}</footer>
40
+ {/if}
41
+ </div>
42
+
43
+ <style>
44
+ .ibis-dashboard-layout {
45
+ min-height: 100vh;
46
+ display: flex;
47
+ flex-direction: column;
48
+ background-color: var(--color-backgrounds-classic-bg-light);
49
+ font-family: var(--font-family-sans);
50
+ }
51
+
52
+ .ibis-dashboard-layout__header {
53
+ flex: 0 0 auto;
54
+ background: linear-gradient(
55
+ var(--color-buttons-gradient-start),
56
+ var(--color-buttons-gradient-end)
57
+ );
58
+ color: var(--color-white);
59
+ z-index: var(--z-index-sticky);
60
+ }
61
+
62
+ .ibis-dashboard-layout__body {
63
+ flex: 1 1 auto;
64
+ display: flex;
65
+ min-height: 0;
66
+ }
67
+
68
+ .ibis-dashboard-layout__sidebar {
69
+ flex: 0 0 auto;
70
+ width: 14rem;
71
+ background-color: var(--color-neutral-100);
72
+ border-right: var(--border-width-thin) solid var(--color-neutral-300);
73
+ }
74
+
75
+ .ibis-dashboard-layout__main {
76
+ flex: 1 1 auto;
77
+ overflow: auto;
78
+ padding: var(--spacing-6);
79
+ }
80
+
81
+ .ibis-dashboard-layout__footer {
82
+ flex: 0 0 auto;
83
+ padding: var(--spacing-3);
84
+ border-top: var(--border-width-thin) solid var(--color-neutral-200);
85
+ font-size: var(--font-size-normal-text-xs);
86
+ color: var(--color-neutral-600);
87
+ }
88
+ </style>
@@ -0,0 +1,20 @@
1
+ import type { Snippet } from "svelte";
2
+ interface Props {
3
+ header?: Snippet;
4
+ sidebar?: Snippet;
5
+ children?: Snippet;
6
+ footer?: Snippet;
7
+ }
8
+ /**
9
+ * DashboardLayout – Dashboard-specific shell with themed header and sidebar.
10
+ *
11
+ * @param {Snippet} [header] - Dashboard header (e.g. gradient bar).
12
+ * @param {Snippet} [sidebar] - Side navigation.
13
+ * @param {Snippet} [children] - Main content area.
14
+ * @param {Snippet} [footer] - Optional footer.
15
+ * @example
16
+ * <DashboardLayout header={headerSnippet} sidebar={sidebarSnippet}>...</DashboardLayout>
17
+ */
18
+ declare const DashboardLayout: import("svelte").Component<Props, {}, "">;
19
+ type DashboardLayout = ReturnType<typeof DashboardLayout>;
20
+ export default DashboardLayout;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Button component variant and size options.
3
+ * @module
4
+ */
5
+ export {};
@@ -2,5 +2,5 @@
2
2
  * Public types for @ibis-design/svelte.
3
3
  * Re-export or define shared interfaces here.
4
4
  */
5
- export type { ButtonVariant, ButtonSize } from './button';
6
- export type { AuthLayoutProps, AppLayoutProps, DashboardLayoutProps } from './layout';
5
+ export type { ButtonVariant, ButtonSize } from "./button";
6
+ export type { AuthLayoutProps, AppLayoutProps, DashboardLayoutProps } from "./layout";
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Public types for @ibis-design/svelte.
3
+ * Re-export or define shared interfaces here.
4
+ */
5
+ export {};
@@ -1,4 +1,4 @@
1
- import { Snippet } from 'svelte';
1
+ import type { Snippet } from "svelte";
2
2
  /**
3
3
  * Props for AuthLayout: optional logo, children (main), footer snippets.
4
4
  */
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,44 +1,49 @@
1
- {
2
- "name": "@ibis-design/svelte",
3
- "version": "0.2.0",
4
- "description": "Svelte component library for the IBIS design system.",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "svelte": "./dist/index.js",
10
- "exports": {
11
- ".": {
12
- "types": "./dist/index.d.ts",
13
- "svelte": "./dist/index.js",
14
- "import": "./dist/index.js",
15
- "default": "./dist/index.js"
16
- }
17
- },
18
- "files": [
19
- "dist"
20
- ],
21
- "peerDependencies": {
22
- "@ibis-design/css": "^0.2.0",
23
- "svelte": "^5.54.0"
24
- },
25
- "devDependencies": {
26
- "@ibis-design/css": "0.3.0",
27
- "@sveltejs/vite-plugin-svelte": "^7.0.0",
28
- "@types/node": "25.6.0",
29
- "svelte": "5.55.3",
30
- "svelte-check": "^4.4.6",
31
- "typescript": "^5.9.3",
32
- "vite": "^8.0.8",
33
- "vite-plugin-dts": "^4.5.4"
34
- },
35
- "scripts": {
36
- "build": "vite build",
37
- "prepublishOnly": "npm run build",
38
- "check": "svelte-check --tsconfig ./tsconfig.json",
39
- "dev": "vite build --watch"
40
- },
41
- "dependencies": {
42
- "@solar-icons/svelte": "^1.1.0"
43
- }
44
- }
1
+ {
2
+ "name": "@ibis-design/svelte",
3
+ "version": "0.6.0",
4
+ "description": "Svelte component library for the IBIS design system.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "svelte": "./dist/index.js",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "svelte": "./dist/index.js",
14
+ "import": "./dist/index.js",
15
+ "default": "./dist/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "sideEffects": [
22
+ "**/*.css"
23
+ ],
24
+ "peerDependencies": {
25
+ "@ibis-design/css": "^0.6.0",
26
+ "svelte": "^5.54.0"
27
+ },
28
+ "devDependencies": {
29
+ "@ibis-design/css": "0.6.0",
30
+ "@sveltejs/adapter-auto": "7.0.1",
31
+ "@sveltejs/kit": "2.59.1",
32
+ "@sveltejs/package": "2.5.7",
33
+ "@sveltejs/vite-plugin-svelte": "^7.1.2",
34
+ "@types/node": "25.7.0",
35
+ "svelte": "5.55.5",
36
+ "svelte-check": "^4.4.8",
37
+ "typescript": "^5.9.3",
38
+ "vite": "^8.0.12"
39
+ },
40
+ "scripts": {
41
+ "build": "svelte-kit sync && svelte-package",
42
+ "prepublishOnly": "npm run build",
43
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
44
+ "dev": "svelte-package -w"
45
+ },
46
+ "dependencies": {
47
+ "@solar-icons/svelte": "^1.1.0"
48
+ }
49
+ }
package/dist/index.css DELETED
@@ -1 +0,0 @@
1
- .ibis-button.svelte-1v1p7k6{font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);border:var(--border-width-default) solid transparent;cursor:pointer;transition:filter var(--transition-duration-fast) var(--transition-timing-default), transform var(--transition-duration-fast) var(--transition-timing-default), box-shadow var(--transition-duration-fast) var(--transition-timing-default);justify-content:center;align-items:center;display:inline-flex}.ibis-button.svelte-1v1p7k6 svg{gap:var(--spacing-2);width:1em;height:1em;display:block}.ibis-button__content.svelte-1v1p7k6{justify-content:center;align-items:center;gap:var(--spacing-1);display:inline-flex}.ibis-button__content--hidden.svelte-1v1p7k6{visibility:hidden}.ibis-button--icon-only.svelte-1v1p7k6{padding:var(--spacing-2)}.ibis-button--icon-only.svelte-1v1p7k6 .ibis-button__content:where(.svelte-1v1p7k6){gap:0}.ibis-button.svelte-1v1p7k6:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.ibis-button--loading.svelte-1v1p7k6{cursor:not-allowed;pointer-events:none;position:relative}.ibis-button--primary.svelte-1v1p7k6{color:var(--color-white);background:linear-gradient(#9665df 0%,#7945c8 100%);border:.5px solid #bd91ff;box-shadow:inset 0 3px 4px #dfeeff1a,inset 0 1px 1px #ffffff1a}.ibis-button--primary.svelte-1v1p7k6:not(:disabled):hover,.ibis-button--primary.svelte-1v1p7k6:not(:disabled):active{box-shadow:none}.ibis-button--primary.svelte-1v1p7k6:not(:disabled):hover{background:var(--color-primary-500);border-color:none;border-width:.7 px}.ibis-button--primary.svelte-1v1p7k6:not(:disabled):active{background:var(--color-primary-500);border-color:var(--color-primary-400);border-width:var(--border-width-thin)}.ibis-button--primary.svelte-1v1p7k6:disabled{background:var(--color-neutral-400);color:var(--color-neutral-600);border-color:var(--color-neutral-600)}.ibis-button--secondary.svelte-1v1p7k6{color:var(--color-primary-pink-500);border-color:var(--color-primary-pink-700);background-color:#0000}.ibis-button--secondary.svelte-1v1p7k6:not(:disabled):hover{background-color:var(--color-primary-pink-100)}.ibis-button--sm.svelte-1v1p7k6{padding:var(--spacing-1) var(--spacing-2);font-size:var(--font-size-normal-text-sm);border-radius:12px}.ibis-button--md.svelte-1v1p7k6{padding:var(--spacing-2) var(--spacing-4);font-size:var(--font-size-normal-text-DEFAULT);border-radius:12px}.ibis-button--lg.svelte-1v1p7k6{padding:var(--spacing-3) var(--spacing-6);font-size:var(--font-size-normal-text-lg);border-radius:16px}.ibis-button__loader.svelte-1v1p7k6{border:var(--border-width-default) solid #0d0d0d;border-top-color:#fafafa;border-radius:50%;width:1em;height:1em;animation:.8s linear infinite svelte-1v1p7k6-ibis-spin;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@keyframes svelte-1v1p7k6-ibis-spin{0%{transform:translate(-50%,-50%)rotate(0)}to{transform:translate(-50%,-50%)rotate(360deg)}}.ibis-button--skeleton.svelte-1v1p7k6{background:var(--color-neutral-200);color:#0000;border-color:var(--color-neutral-500);cursor:default;pointer-events:none;position:relative;overflow:hidden}.ibis-button--skeleton.svelte-1v1p7k6:after{content:"";background-color:var(--color-neutral-400);width:80%;height:1em;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.ibis-button--icon-only--skeleton.svelte-1v1p7k6:after{border-radius:4px;width:1em;height:1em}.ibis-button--skeleton.svelte-1v1p7k6:before{content:"";border-radius:inherit;background:linear-gradient(90deg,#ffffff40 0%,#fff9 50%,#ffffff40 100%);animation:2s infinite svelte-1v1p7k6-ibis-shimmer;position:absolute;inset:0;transform:translate(-100%)}@keyframes svelte-1v1p7k6-ibis-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.dropdown-button.svelte-1k6ufrd{display:inline-block;position:relative}.caret.svelte-1k6ufrd{width:1em;height:1em;margin-left:.25em}.dropdown-menu.svelte-1k6ufrd{border:1px solid var(--color-neutral-300);border-radius:var(--border-radius-DEFAULT);z-index:1000;background:#fff;flex-direction:column;min-width:160px;margin-top:4px;padding:4px;display:flex;position:absolute;top:100%;left:0;box-shadow:0 4px 8px #0000001a}.dropdown-menu.svelte-1k6ufrd button{all:unset;cursor:pointer;border-radius:4px;padding:8px}.dropdown-menu.svelte-1k6ufrd button:hover{background-color:var(--color-neutral-100)}.ibis-card.svelte-1x2pm77{background-color:var(--color-backgrounds-classic-bg-light);border-radius:var(--border-radius-md);box-shadow:var(--shadow-default);padding:var(--spacing-4);font-family:var(--font-family-sans);font-size:var(--font-size-normal-text-default);line-height:var(--line-height-normal)}.ibis-auth-layout.svelte-o80avj{min-height:100vh;padding:var(--spacing-6);background-color:var(--color-backgrounds-themed-bg-ibis-white);font-family:var(--font-family-sans);flex-direction:column;justify-content:center;align-items:center;display:flex}.ibis-auth-layout__logo.svelte-o80avj{margin-bottom:var(--spacing-8)}.ibis-auth-layout__main.svelte-o80avj{flex:0 auto;width:100%;max-width:24rem}.ibis-auth-layout__footer.svelte-o80avj{margin-top:var(--spacing-8);font-size:var(--font-size-normal-text-sm);color:var(--color-neutral-600)}.ibis-app-layout.svelte-1m3kzz8{background-color:var(--color-backgrounds-classic-bg-light);min-height:100vh;font-family:var(--font-family-sans);flex-direction:column;display:flex}.ibis-app-layout__header.svelte-1m3kzz8{z-index:var(--z-index-sticky);flex:none}.ibis-app-layout__body.svelte-1m3kzz8{flex:auto;min-height:0;display:flex}.ibis-app-layout__sidebar.svelte-1m3kzz8{background-color:var(--color-neutral-50);border-right:var(--border-width-thin) solid var(--color-neutral-200);flex:none;width:16rem}.ibis-app-layout__main.svelte-1m3kzz8{padding:var(--spacing-6);flex:auto;overflow:auto}.ibis-app-layout__footer.svelte-1m3kzz8{padding:var(--spacing-4);border-top:var(--border-width-thin) solid var(--color-neutral-200);font-size:var(--font-size-normal-text-sm);color:var(--color-neutral-600);flex:none}.ibis-dashboard-layout.svelte-nudbol{background-color:var(--color-backgrounds-classic-bg-light);min-height:100vh;font-family:var(--font-family-sans);flex-direction:column;display:flex}.ibis-dashboard-layout__header.svelte-nudbol{background:linear-gradient(var(--color-buttons-gradient-start), var(--color-buttons-gradient-end));color:var(--color-white);z-index:var(--z-index-sticky);flex:none}.ibis-dashboard-layout__body.svelte-nudbol{flex:auto;min-height:0;display:flex}.ibis-dashboard-layout__sidebar.svelte-nudbol{background-color:var(--color-neutral-100);border-right:var(--border-width-thin) solid var(--color-neutral-300);flex:none;width:14rem}.ibis-dashboard-layout__main.svelte-nudbol{padding:var(--spacing-6);flex:auto;overflow:auto}.ibis-dashboard-layout__footer.svelte-nudbol{padding:var(--spacing-3);border-top:var(--border-width-thin) solid var(--color-neutral-200);font-size:var(--font-size-normal-text-xs);color:var(--color-neutral-600);flex:none}