crayon-design-system-ui 0.0.1
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/README.md +487 -0
- package/dist/angular/index.d.ts +614 -0
- package/dist/angular/index.d.ts.map +1 -0
- package/dist/angular/index.js +209 -0
- package/dist/assets/attributes-o88QCNuy.js +1 -0
- package/dist/assets/custom-element-CN6vLcFC.js +2 -0
- package/dist/assets/each-DkX3FjFL.js +1 -0
- package/dist/assets/if-DdiIl-sg.js +1 -0
- package/dist/assets/index-client-CiUbrQq_.js +1 -0
- package/dist/assets/lifecycle-BK5NY8qp.js +2 -0
- package/dist/assets/props-DbUVX42-.js +1 -0
- package/dist/assets/slot-CRFQJtYY.js +1 -0
- package/dist/assets/this-DllEouAd.js +1 -0
- package/dist/components/accordion/Accordion.d.ts +1 -0
- package/dist/components/accordion/Accordion.js +5 -0
- package/dist/components/accordion/Accordion.svelte +203 -0
- package/dist/components/accordion/Accordion.svelte.d.ts +19 -0
- package/dist/components/accordion-item/AccordionItem.d.ts +1 -0
- package/dist/components/accordion-item/AccordionItem.js +3 -0
- package/dist/components/accordion-item/AccordionItem.svelte +159 -0
- package/dist/components/accordion-item/AccordionItem.svelte.d.ts +18 -0
- package/dist/components/avatar/Avatar.d.ts +1 -0
- package/dist/components/avatar/Avatar.js +4 -0
- package/dist/components/avatar/Avatar.svelte +132 -0
- package/dist/components/avatar/Avatar.svelte.d.ts +24 -0
- package/dist/components/button/Button.d.ts +1 -0
- package/dist/components/button/Button.js +35 -0
- package/dist/components/button/Button.svelte +254 -0
- package/dist/components/button/Button.svelte.d.ts +31 -0
- package/dist/components/card/Card.d.ts +1 -0
- package/dist/components/card/Card.js +29 -0
- package/dist/components/card/Card.svelte +244 -0
- package/dist/components/card/Card.svelte.d.ts +27 -0
- package/dist/components/checkbox/Checkbox.d.ts +1 -0
- package/dist/components/checkbox/Checkbox.js +23 -0
- package/dist/components/checkbox/Checkbox.svelte +196 -0
- package/dist/components/checkbox/Checkbox.svelte.d.ts +28 -0
- package/dist/components/form/Form.d.ts +1 -0
- package/dist/components/form/Form.js +4 -0
- package/dist/components/form/Form.svelte +54 -0
- package/dist/components/form/Form.svelte.d.ts +29 -0
- package/dist/components/form-select/FormSelect.d.ts +1 -0
- package/dist/components/form-select/FormSelect.js +20 -0
- package/dist/components/form-select/FormSelect.svelte +244 -0
- package/dist/components/form-select/FormSelect.svelte.d.ts +41 -0
- package/dist/components/form-select/FormSelectOption.d.ts +1 -0
- package/dist/components/form-select/FormSelectOption.js +3 -0
- package/dist/components/form-select/FormSelectOption.svelte +10 -0
- package/dist/components/form-select/FormSelectOption.svelte.d.ts +20 -0
- package/dist/components/input/Input.d.ts +1 -0
- package/dist/components/input/Input.js +24 -0
- package/dist/components/input/Input.svelte +429 -0
- package/dist/components/input/Input.svelte.d.ts +48 -0
- package/dist/components/label/Label.d.ts +1 -0
- package/dist/components/label/Label.js +3 -0
- package/dist/components/label/Label.svelte +74 -0
- package/dist/components/label/Label.svelte.d.ts +23 -0
- package/dist/components/radio/Radio.d.ts +1 -0
- package/dist/components/radio/Radio.js +16 -0
- package/dist/components/radio/Radio.svelte +147 -0
- package/dist/components/radio/Radio.svelte.d.ts +26 -0
- package/dist/components/textarea/Textarea.d.ts +1 -0
- package/dist/components/textarea/Textarea.js +5 -0
- package/dist/components/textarea/Textarea.svelte +122 -0
- package/dist/components/textarea/Textarea.svelte.d.ts +34 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +13 -0
- package/dist/react/index.d.ts +24 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +26 -0
- package/dist/register/accordion-item.d.ts +1 -0
- package/dist/register/accordion-item.js +4 -0
- package/dist/register/accordion.d.ts +1 -0
- package/dist/register/accordion.js +4 -0
- package/dist/register/avatar.d.ts +1 -0
- package/dist/register/avatar.js +4 -0
- package/dist/register/button.d.ts +1 -0
- package/dist/register/button.js +4 -0
- package/dist/register/card.d.ts +1 -0
- package/dist/register/card.js +4 -0
- package/dist/register/checkbox.d.ts +1 -0
- package/dist/register/checkbox.js +4 -0
- package/dist/register/form-select-option.d.ts +1 -0
- package/dist/register/form-select-option.js +4 -0
- package/dist/register/form-select.d.ts +1 -0
- package/dist/register/form-select.js +4 -0
- package/dist/register/form.d.ts +1 -0
- package/dist/register/form.js +4 -0
- package/dist/register/input.d.ts +1 -0
- package/dist/register/input.js +4 -0
- package/dist/register/label.d.ts +1 -0
- package/dist/register/label.js +4 -0
- package/dist/register/radio.d.ts +1 -0
- package/dist/register/radio.js +4 -0
- package/dist/register/textarea.d.ts +1 -0
- package/dist/register/textarea.js +4 -0
- package/dist/register.d.ts +1 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +18 -0
- package/dist/tokens.css +184 -0
- package/dist-browser/assets/Accordion-CwOMoX3u.js +3 -0
- package/dist-browser/assets/AccordionItem-CuTFqdt6.js +1 -0
- package/dist-browser/assets/Avatar-Ct0ZUf_m.js +2 -0
- package/dist-browser/assets/Button-BvYyhPrn.js +33 -0
- package/dist-browser/assets/Card-DM0rPY9s.js +27 -0
- package/dist-browser/assets/Checkbox-DK1LWC1i.js +21 -0
- package/dist-browser/assets/Form-BZFKnk3f.js +2 -0
- package/dist-browser/assets/FormSelect-CBTpNNrh.js +18 -0
- package/dist-browser/assets/FormSelectOption-DhOxPDjS.js +1 -0
- package/dist-browser/assets/Input-DZZF_45U.js +22 -0
- package/dist-browser/assets/Label-BX3_KNGn.js +1 -0
- package/dist-browser/assets/Radio-Bwape_rC.js +14 -0
- package/dist-browser/assets/Textarea-BYsLYgK4.js +3 -0
- package/dist-browser/assets/attributes-BN21YWvK.js +1 -0
- package/dist-browser/assets/custom-element-vZIc-tZM.js +2 -0
- package/dist-browser/assets/each-CDVyljdy.js +1 -0
- package/dist-browser/assets/if-B3xMWYuB.js +1 -0
- package/dist-browser/assets/index-client-BMTknfvN.js +1 -0
- package/dist-browser/assets/lifecycle-BSCLFPkh.js +2 -0
- package/dist-browser/assets/props-DClXGNhw.js +1 -0
- package/dist-browser/assets/slot-Btw_EhJQ.js +1 -0
- package/dist-browser/assets/this-CobEtPHm.js +1 -0
- package/dist-browser/bundle.js +2 -0
- package/dist-browser/tokens.css +184 -0
- package/package.json +89 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<svelte:options customElement="ui-accordion-item" />
|
|
2
|
+
|
|
3
|
+
<script>
|
|
4
|
+
import { onMount } from "svelte";
|
|
5
|
+
let rootEl;
|
|
6
|
+
let { title = "Header" } = $props();
|
|
7
|
+
let open = $state(false);
|
|
8
|
+
let index = $state(null);
|
|
9
|
+
function getHost() {
|
|
10
|
+
return rootEl?.parentElement ?? null;
|
|
11
|
+
}
|
|
12
|
+
function updateFromHost() {
|
|
13
|
+
const host = getHost();
|
|
14
|
+
if (!host) return;
|
|
15
|
+
open = host.hasAttribute("open");
|
|
16
|
+
const idx = host.getAttribute("data-accordion-index");
|
|
17
|
+
if (idx !== null) index = idx;
|
|
18
|
+
}
|
|
19
|
+
function handleTriggerClick() {
|
|
20
|
+
const host = getHost();
|
|
21
|
+
if (!host) return;
|
|
22
|
+
host.dispatchEvent(
|
|
23
|
+
new CustomEvent("accordion-toggle", { bubbles: true, composed: true })
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
onMount(() => {
|
|
27
|
+
updateFromHost();
|
|
28
|
+
const host = getHost();
|
|
29
|
+
if (!host) return;
|
|
30
|
+
const observer = new MutationObserver(() => {
|
|
31
|
+
updateFromHost();
|
|
32
|
+
});
|
|
33
|
+
observer.observe(host, { attributes: true, attributeFilter: ["open", "data-accordion-index"] });
|
|
34
|
+
return () => observer.disconnect();
|
|
35
|
+
});
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<div class="item" class:open bind:this={rootEl} data-accordion-item>
|
|
39
|
+
<div
|
|
40
|
+
class="trigger"
|
|
41
|
+
role="button"
|
|
42
|
+
tabindex="0"
|
|
43
|
+
aria-expanded={open}
|
|
44
|
+
aria-controls="accordion-panel-{index}"
|
|
45
|
+
id="accordion-trigger-{index}"
|
|
46
|
+
onkeydown={(e) => {
|
|
47
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
48
|
+
e.preventDefault();
|
|
49
|
+
handleTriggerClick();
|
|
50
|
+
}
|
|
51
|
+
}}
|
|
52
|
+
onclick={handleTriggerClick}
|
|
53
|
+
>
|
|
54
|
+
<span class="trigger-inner">
|
|
55
|
+
<slot name="header">{title}</slot>
|
|
56
|
+
<span class="chevron" aria-hidden="true">▼</span>
|
|
57
|
+
</span>
|
|
58
|
+
</div>
|
|
59
|
+
<div
|
|
60
|
+
class="panel"
|
|
61
|
+
class:open
|
|
62
|
+
id="accordion-panel-{index}"
|
|
63
|
+
role="region"
|
|
64
|
+
aria-labelledby="accordion-trigger-{index}"
|
|
65
|
+
aria-hidden={!open}
|
|
66
|
+
>
|
|
67
|
+
<div class="panel-inner">
|
|
68
|
+
<slot name="content">
|
|
69
|
+
<slot>Content</slot>
|
|
70
|
+
</slot>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<style>
|
|
76
|
+
.item {
|
|
77
|
+
border-radius: var(--ui-radius-md, 10px);
|
|
78
|
+
background: var(--ui-accordion-bg, #f5f5f5);
|
|
79
|
+
border: 1px solid var(--ui-accordion-border, #e0e0e0);
|
|
80
|
+
overflow: hidden;
|
|
81
|
+
transition: background 0.2s ease, border-color 0.2s ease;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.item:hover {
|
|
85
|
+
background: var(--ui-accordion-bg-hover, #eeeeee);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.item.open {
|
|
89
|
+
border-color: var(--ui-primary, #474bff);
|
|
90
|
+
background: var(--ui-accordion-bg-open, #fafaff);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.trigger {
|
|
94
|
+
cursor: pointer;
|
|
95
|
+
user-select: none;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.trigger-inner {
|
|
99
|
+
display: flex;
|
|
100
|
+
align-items: center;
|
|
101
|
+
justify-content: space-between;
|
|
102
|
+
padding: 14px 18px;
|
|
103
|
+
font-weight: 500;
|
|
104
|
+
color: var(--ui-accordion-title, #1a1a1a);
|
|
105
|
+
transition: color 0.2s ease;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.item.open .trigger-inner {
|
|
109
|
+
color: var(--ui-primary, #474bff);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.trigger-inner ::slotted(*) {
|
|
113
|
+
flex: 1;
|
|
114
|
+
text-align: left;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.chevron {
|
|
118
|
+
font-size: 0.7em;
|
|
119
|
+
opacity: 0.7;
|
|
120
|
+
transition: transform 0.25s ease;
|
|
121
|
+
flex-shrink: 0;
|
|
122
|
+
margin-left: 8px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.item.open .chevron {
|
|
126
|
+
transform: rotate(180deg);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.panel {
|
|
130
|
+
display: grid;
|
|
131
|
+
grid-template-rows: 0fr;
|
|
132
|
+
transition: grid-template-rows 0.25s ease-out;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.panel.open {
|
|
136
|
+
grid-template-rows: 1fr;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.panel-inner {
|
|
140
|
+
min-height: 0;
|
|
141
|
+
overflow: hidden;
|
|
142
|
+
padding: 0 18px 14px 18px;
|
|
143
|
+
border-top: 1px solid var(--ui-accordion-border, #e0e0e0);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.panel-inner ::slotted(*) {
|
|
147
|
+
color: var(--ui-accordion-content, #444);
|
|
148
|
+
font-size: 14px;
|
|
149
|
+
line-height: 1.5;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.panel-inner ::slotted(img),
|
|
153
|
+
.panel-inner ::slotted(video),
|
|
154
|
+
.panel-inner ::slotted(audio) {
|
|
155
|
+
max-width: 100%;
|
|
156
|
+
height: auto;
|
|
157
|
+
display: block;
|
|
158
|
+
}
|
|
159
|
+
</style>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {
|
|
8
|
+
header: {};
|
|
9
|
+
content: {};
|
|
10
|
+
default: {};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export type AccordionItemProps = typeof __propDef.props;
|
|
14
|
+
export type AccordionItemEvents = typeof __propDef.events;
|
|
15
|
+
export type AccordionItemSlots = typeof __propDef.slots;
|
|
16
|
+
export default class AccordionItem extends SvelteComponentTyped<AccordionItemProps, AccordionItemEvents, AccordionItemSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./Avatar.svelte";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{c as P,p as Q,l as x,d as n,g as s,a as T,e as V,t as j,i as _,j as W,m as c,k as z,b as R,n as l,s as i,r as I,f as B,z as X}from"../../assets/custom-element-CN6vLcFC.js";import{i as M}from"../../assets/if-DdiIl-sg.js";import{s as Y}from"../../assets/slot-CRFQJtYY.js";import{a as Z,i as $,s as ee,c as ae}from"../../assets/lifecycle-BK5NY8qp.js";import{s as S}from"../../assets/attributes-o88QCNuy.js";import{p as o}from"../../assets/props-DbUVX42-.js";var te=z('<img class="avatar-img svelte-1sygndv"/>'),se=z('<span class="avatar-initials svelte-1sygndv"> </span>'),re=z('<span class="avatar-fallback svelte-1sygndv" aria-hidden="true"><!></span>'),ie=z('<span role="img"><!> <!></span>');const ne={hash:"svelte-1sygndv",code:`.avatar-root.svelte-1sygndv {position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;font-family:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",\r
|
|
2
|
+
sans-serif;font-weight:600;background-color:var(--ui-avatar-bg, #e5e7eb);color:var(--ui-avatar-color, #374151);}.avatar-root.shape-circle.svelte-1sygndv {border-radius:50%;}.avatar-root.shape-rounded.svelte-1sygndv {border-radius:var(--ui-avatar-border-radius, 8px);}.avatar-root.size-sm.svelte-1sygndv {width:var(--ui-avatar-size-sm, 32px);height:var(--ui-avatar-size-sm, 32px);font-size:var(--ui-avatar-font-size-sm, 12px);}.avatar-root.size-md.svelte-1sygndv {width:var(--ui-avatar-size-md, 40px);height:var(--ui-avatar-size-md, 40px);font-size:var(--ui-avatar-font-size-md, 14px);}.avatar-root.size-lg.svelte-1sygndv {width:var(--ui-avatar-size-lg, 56px);height:var(--ui-avatar-size-lg, 56px);font-size:var(--ui-avatar-font-size-lg, 18px);}.avatar-root.has-ring.svelte-1sygndv {box-shadow:0 0 0 2px var(--ui-avatar-ring-color, #fff);outline:2px solid var(--ui-avatar-ring-border, #e5e7eb);}.avatar-img.svelte-1sygndv {position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;}.avatar-fallback.svelte-1sygndv {display:flex;align-items:center;justify-content:center;width:100%;height:100%;}.avatar-initials.svelte-1sygndv {display:flex;align-items:center;justify-content:center;line-height:1;user-select:none;}`};function le(E,r){Q(r,!1),Z(E,ne);const U=c(),A=c(),F=c();let t=o(r,"src",12,void 0),f=o(r,"alt",12,""),v=o(r,"name",12,void 0),u=o(r,"size",12,"md"),m=o(r,"shape",12,"circle"),p=o(r,"showRing",12,!1),h=o(r,"extraClass",12,""),d=c(!1),y=c(!1);function q(e){if(!e||!e.trim())return"?";const a=e.trim().split(/\s+/);if(a.length>=2){const w=a[0][0]??"",k=a[a.length-1][0]??"";return(w+k).toUpperCase()}return e.slice(0,2).toUpperCase()}let b=c(void 0);function D(){i(y,!0),i(d,!1)}function G(){i(d,!0)}x(()=>(n(t()),s(b)),()=>{t()!==s(b)&&(i(b,t()),i(y,!1),i(d,!1))}),x(()=>(n(t()),s(d),s(y)),()=>{i(U,!t()||s(d)||t()!=null&&!s(y))}),x(()=>n(v()),()=>{i(A,q(v()))}),x(()=>(n(u()),n(m()),n(p()),n(h())),()=>{i(F,`avatar-root size-${u()} shape-${m()} ${p()?"has-ring":""} ${h()}`.trim())}),T();var H={get src(){return t()},set src(e){t(e),l()},get alt(){return f()},set alt(e){f(e),l()},get name(){return v()},set name(e){v(e),l()},get size(){return u()},set size(e){u(e),l()},get shape(){return m()},set shape(e){m(e),l()},get showRing(){return p()},set showRing(e){p(e),l()},get extraClass(){return h()},set extraClass(e){h(e),l()}};$();var g=ie(),L=R(g);{var J=e=>{var a=te();j(()=>{S(a,"src",t()),S(a,"alt",f()||v()||"")}),B("load",a,D),B("error",a,G),_(e,a)};M(L,e=>{t()&&!s(d)&&e(J)})}var K=V(L,2);{var N=e=>{var a=re(),w=R(a);Y(w,r,"default",{},k=>{var C=se(),O=R(C,!0);I(C),j(()=>X(O,s(A))),_(k,C)}),I(a),_(e,a)};M(K,e=>{s(U)&&e(N)})}return I(g),j(()=>{ee(g,1,ae(s(F)),"svelte-1sygndv"),S(g,"aria-label",f()||v()||"Avatar")}),_(E,g),W(H)}const __Default = (P(le,{src:{},alt:{},name:{},size:{},shape:{},showRing:{},extraClass:{}},["default"],[],{mode:"open"}));
|
|
3
|
+
customElements.define("ui-avatar", __Default);
|
|
4
|
+
export default __Default;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
<svelte:options customElement="ui-avatar" />
|
|
2
|
+
|
|
3
|
+
<script>
|
|
4
|
+
export let src = void 0;
|
|
5
|
+
export let alt = "";
|
|
6
|
+
export let name = void 0;
|
|
7
|
+
export let size = "md";
|
|
8
|
+
export let shape = "circle";
|
|
9
|
+
export let showRing = false;
|
|
10
|
+
export let extraClass = "";
|
|
11
|
+
let imageError = false;
|
|
12
|
+
let imageLoaded = false;
|
|
13
|
+
$: showFallback = !src || imageError || src != null && !imageLoaded;
|
|
14
|
+
function getInitials(n) {
|
|
15
|
+
if (!n || !n.trim()) return "?";
|
|
16
|
+
const parts = n.trim().split(/\s+/);
|
|
17
|
+
if (parts.length >= 2) {
|
|
18
|
+
const first = parts[0][0] ?? "";
|
|
19
|
+
const last = parts[parts.length - 1][0] ?? "";
|
|
20
|
+
return (first + last).toUpperCase();
|
|
21
|
+
}
|
|
22
|
+
return n.slice(0, 2).toUpperCase();
|
|
23
|
+
}
|
|
24
|
+
$: initials = getInitials(name);
|
|
25
|
+
let prevSrc = void 0;
|
|
26
|
+
$: if (src !== prevSrc) {
|
|
27
|
+
prevSrc = src;
|
|
28
|
+
imageLoaded = false;
|
|
29
|
+
imageError = false;
|
|
30
|
+
}
|
|
31
|
+
function onImgLoad() {
|
|
32
|
+
imageLoaded = true;
|
|
33
|
+
imageError = false;
|
|
34
|
+
}
|
|
35
|
+
function onImgError() {
|
|
36
|
+
imageError = true;
|
|
37
|
+
}
|
|
38
|
+
$: rootClass = `avatar-root size-${size} shape-${shape} ${showRing ? "has-ring" : ""} ${extraClass}`.trim();
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<span
|
|
42
|
+
class={rootClass}
|
|
43
|
+
role="img"
|
|
44
|
+
aria-label={alt || name || "Avatar"}
|
|
45
|
+
>
|
|
46
|
+
{#if src && !imageError}
|
|
47
|
+
<img
|
|
48
|
+
class="avatar-img"
|
|
49
|
+
{src}
|
|
50
|
+
alt={alt || name || ""}
|
|
51
|
+
on:load={onImgLoad}
|
|
52
|
+
on:error={onImgError}
|
|
53
|
+
/>
|
|
54
|
+
{/if}
|
|
55
|
+
{#if showFallback}
|
|
56
|
+
<span class="avatar-fallback" aria-hidden="true">
|
|
57
|
+
<slot><span class="avatar-initials">{initials}</span></slot>
|
|
58
|
+
</span>
|
|
59
|
+
{/if}
|
|
60
|
+
</span>
|
|
61
|
+
|
|
62
|
+
<style>
|
|
63
|
+
.avatar-root {
|
|
64
|
+
position: relative;
|
|
65
|
+
display: inline-flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: center;
|
|
68
|
+
flex-shrink: 0;
|
|
69
|
+
overflow: hidden;
|
|
70
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
71
|
+
sans-serif;
|
|
72
|
+
font-weight: 600;
|
|
73
|
+
background-color: var(--ui-avatar-bg, #e5e7eb);
|
|
74
|
+
color: var(--ui-avatar-color, #374151);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.avatar-root.shape-circle {
|
|
78
|
+
border-radius: 50%;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.avatar-root.shape-rounded {
|
|
82
|
+
border-radius: var(--ui-avatar-border-radius, 8px);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.avatar-root.size-sm {
|
|
86
|
+
width: var(--ui-avatar-size-sm, 32px);
|
|
87
|
+
height: var(--ui-avatar-size-sm, 32px);
|
|
88
|
+
font-size: var(--ui-avatar-font-size-sm, 12px);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.avatar-root.size-md {
|
|
92
|
+
width: var(--ui-avatar-size-md, 40px);
|
|
93
|
+
height: var(--ui-avatar-size-md, 40px);
|
|
94
|
+
font-size: var(--ui-avatar-font-size-md, 14px);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.avatar-root.size-lg {
|
|
98
|
+
width: var(--ui-avatar-size-lg, 56px);
|
|
99
|
+
height: var(--ui-avatar-size-lg, 56px);
|
|
100
|
+
font-size: var(--ui-avatar-font-size-lg, 18px);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.avatar-root.has-ring {
|
|
104
|
+
box-shadow: 0 0 0 2px var(--ui-avatar-ring-color, #fff);
|
|
105
|
+
outline: 2px solid var(--ui-avatar-ring-border, #e5e7eb);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.avatar-img {
|
|
109
|
+
position: absolute;
|
|
110
|
+
inset: 0;
|
|
111
|
+
width: 100%;
|
|
112
|
+
height: 100%;
|
|
113
|
+
object-fit: cover;
|
|
114
|
+
display: block;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.avatar-fallback {
|
|
118
|
+
display: flex;
|
|
119
|
+
align-items: center;
|
|
120
|
+
justify-content: center;
|
|
121
|
+
width: 100%;
|
|
122
|
+
height: 100%;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.avatar-initials {
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
justify-content: center;
|
|
129
|
+
line-height: 1;
|
|
130
|
+
user-select: none;
|
|
131
|
+
}
|
|
132
|
+
</style>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
/** Image URL. When missing or on error, fallback (slot or initials) is shown. */ src?: string | undefined;
|
|
5
|
+
/** Alt text for the image (also used for accessibility when showing fallback). */ alt?: string;
|
|
6
|
+
/** Name used to derive initials when no image (e.g. "Jane Doe" → "JD"). */ name?: string | undefined;
|
|
7
|
+
/** Size preset. */ size?: "sm" | "md" | "lg";
|
|
8
|
+
/** Shape: circle (default) or rounded square. */ shape?: "circle" | "rounded";
|
|
9
|
+
/** When true, shows a ring/border around the avatar. */ showRing?: boolean;
|
|
10
|
+
/** Extra class(es) for the root. Set via the extra-class attribute. */ extraClass?: string;
|
|
11
|
+
};
|
|
12
|
+
events: {
|
|
13
|
+
[evt: string]: CustomEvent<any>;
|
|
14
|
+
};
|
|
15
|
+
slots: {
|
|
16
|
+
default: {};
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export type AvatarProps = typeof __propDef.props;
|
|
20
|
+
export type AvatarEvents = typeof __propDef.events;
|
|
21
|
+
export type AvatarSlots = typeof __propDef.slots;
|
|
22
|
+
export default class Avatar extends SvelteComponentTyped<AvatarProps, AvatarEvents, AvatarSlots> {
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./Button.svelte";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import{h as A,c as G,p as H,l as C,s as W,d as l,g as h,a as J,b as B,e as K,r as P,t as L,f as M,i as D,j as N,m as S,k as E,n as r}from"../../assets/custom-element-CN6vLcFC.js";import{i as O}from"../../assets/if-DdiIl-sg.js";import{s as Q}from"../../assets/slot-CRFQJtYY.js";import{t as U,a as X,i as Y,s as Z,c as $}from"../../assets/lifecycle-BK5NY8qp.js";import{s as ee}from"../../assets/attributes-o88QCNuy.js";import{p as n}from"../../assets/props-DbUVX42-.js";function te(s,t,i,f){var p=s.__style;if(A||p!==t){var o=U(t);(!A||o!==s.getAttribute("style"))&&(o==null?s.removeAttribute("style"):s.style.cssText=o),s.__style=t}return f}var re=E('<span class="spinner svelte-kv8yyl"></span>'),ne=E('<button><!> <span class="btn-content svelte-kv8yyl"><!></span></button>');const le={hash:"svelte-kv8yyl",code:`:host {display:inline-block;}.btn-inner.svelte-kv8yyl {border:none;border-radius:var(--ui-radius-md, 10px);cursor:pointer;font-weight:500;transition:all 0.2s ease;display:inline-flex;align-items:center;justify-content:center;}.btn-content.svelte-kv8yyl {display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;}\r
|
|
2
|
+
\r
|
|
3
|
+
/* Shape: pill (full rounded) for icon + text */.shape-pill.svelte-kv8yyl {border-radius:999px;}\r
|
|
4
|
+
\r
|
|
5
|
+
/* Shape: circle for icon-only buttons */.shape-circle.svelte-kv8yyl {border-radius:50%;padding:0;aspect-ratio:1;}.shape-circle.sm.svelte-kv8yyl {width:32px;height:32px;min-width:32px;min-height:32px;}.shape-circle.md.svelte-kv8yyl {width:40px;height:40px;min-width:40px;min-height:40px;}.shape-circle.lg.svelte-kv8yyl {width:48px;height:48px;min-width:48px;min-height:48px;}\r
|
|
6
|
+
\r
|
|
7
|
+
/* When app adds class for full width (e.g. class="w-full" or class="full-width"), inner button fills the host */:host([class*="full"]) .btn-inner.svelte-kv8yyl,\r
|
|
8
|
+
:host([class*="w-full"]) .btn-inner.svelte-kv8yyl {width:100%;box-sizing:border-box;}\r
|
|
9
|
+
\r
|
|
10
|
+
/* Sizes (rectangle / pill) */.shape-rectangle.sm.svelte-kv8yyl,\r
|
|
11
|
+
.shape-pill.sm.svelte-kv8yyl {padding:6px 12px;font-size:12px;}.shape-rectangle.sm.svelte-kv8yyl .btn-content:where(.svelte-kv8yyl),\r
|
|
12
|
+
.shape-pill.sm.svelte-kv8yyl .btn-content:where(.svelte-kv8yyl) {gap:0.375rem;}.shape-rectangle.md.svelte-kv8yyl,\r
|
|
13
|
+
.shape-pill.md.svelte-kv8yyl {padding:10px 24px;font-size:14px;}.shape-rectangle.lg.svelte-kv8yyl,\r
|
|
14
|
+
.shape-pill.lg.svelte-kv8yyl {padding:14px 32px;font-size:16px;}.shape-rectangle.lg.svelte-kv8yyl .btn-content:where(.svelte-kv8yyl),\r
|
|
15
|
+
.shape-pill.lg.svelte-kv8yyl .btn-content:where(.svelte-kv8yyl) {gap:0.5rem;}\r
|
|
16
|
+
\r
|
|
17
|
+
/* Variants — respect --ui-button-custom-bg when set via backgroundColor prop */.primary.svelte-kv8yyl {background:var(--ui-button-custom-bg, var(--ui-primary, #474bff));color:var(--ui-button-bg, #fefeff);}.primary.svelte-kv8yyl:hover {background:var(--ui-button-custom-bg-hover, var(--ui-primary-hover, #2b2399));color:#fefeff;}.secondary.svelte-kv8yyl {background:var(--ui-button-custom-bg, var(--ui-secondary, #222121));color:#fefeff;}.secondary.svelte-kv8yyl:hover {background:var(--ui-button-custom-bg-hover, var(--ui-secondary-hover, #616061));color:#fefeff;}.outline.svelte-kv8yyl {background:var(--ui-outline, transparent);border:1px solid var(--ui-outline, #222121);color:#616061;}.outline.svelte-kv8yyl:hover {background:var(--ui-outline-hover, transparent);border:1px solid var(--ui-outline, #222121);color:#222121;}.danger.svelte-kv8yyl {background:var(--ui-button-custom-bg, var(--ui-danger, #e03e52));color:#fefeff;}.danger.svelte-kv8yyl:hover {background:var(\r
|
|
18
|
+
--ui-button-custom-bg-hover,\r
|
|
19
|
+
var(--ui-danger-hover, #c23445)\r
|
|
20
|
+
);color:#fefeff;}.success.svelte-kv8yyl {background:var(--ui-button-custom-bg, var(--ui-success, #2cc84d));color:#fefeff;}.success.svelte-kv8yyl:hover {background:var(\r
|
|
21
|
+
--ui-button-custom-bg-hover,\r
|
|
22
|
+
var(--ui-success-hover, #2cc84d)\r
|
|
23
|
+
);color:#fefeff;}.white.svelte-kv8yyl {background:var(--ui-button-custom-bg, var(--ui-white, #ffffff));color:var(--ui-text-on-light, #222121);border:1px solid var(--ui-border-light, #e0e0e0);}.white.svelte-kv8yyl:hover {background:var(\r
|
|
24
|
+
--ui-button-custom-bg-hover,\r
|
|
25
|
+
var(--ui-white-hover, #f5f5f5)\r
|
|
26
|
+
);color:var(--ui-text-on-light, #222121);border-color:var(--ui-border-light-hover, #c0c0c0);}.ghost.svelte-kv8yyl {background:transparent;color:var(--ui-ghost-text, #616061);}.ghost.svelte-kv8yyl:hover {background:var(--ui-ghost-hover, rgba(0, 0, 0, 0.06));color:var(--ui-ghost-text-hover, #222121);}.btn-inner.svelte-kv8yyl:disabled {background:#e0e0e0;cursor:not-allowed;}.btn-inner.svelte-kv8yyl:disabled:hover {background:#e0e0e0;cursor:not-allowed;}.spinner.svelte-kv8yyl {width:14px;height:14px;border:2px solid white;border-top-color:transparent;border-radius:50%;display:inline-block;margin-right:6px;\r
|
|
27
|
+
animation: svelte-kv8yyl-spin 0.6s linear infinite;}\r
|
|
28
|
+
\r
|
|
29
|
+
@keyframes svelte-kv8yyl-spin {\r
|
|
30
|
+
to {\r
|
|
31
|
+
transform: rotate(360deg);\r
|
|
32
|
+
}\r
|
|
33
|
+
}`};function se(s,t){H(t,!1),X(s,le);const i=S(),f=S(),p=S();let o=n(t,"variant",12,"primary"),k=n(t,"size",12,"md"),m=n(t,"shape",12,"rectangle"),x=n(t,"disabled",12,!1),w=n(t,"loading",12,!1),d=n(t,"color",12,void 0),z=n(t,"type",12,"button"),u=n(t,"backgroundColor",12,void 0),v=n(t,"fontSize",12,void 0),c=n(t,"borderRadius",12,void 0),y=n(t,"borderWidth",12,void 0),g=n(t,"fontWeight",12,void 0),b=n(t,"padding",12,void 0),_=n(t,"extraClass",12,"");function I(e){(x()||w())&&(e.preventDefault(),e.stopImmediatePropagation())}C(()=>(l(d()),l(u()),l(v()),l(c()),l(y()),l(g()),l(b())),()=>{W(i,[d()!=null&&`--ui-button-bg:${d()}`,u()!=null&&`--ui-button-custom-bg:${u()}`,v()!=null&&`font-size:${v()}`,c()!=null&&`border-radius:${c()}`,y()!=null&&`border-width:${y()}`,g()!=null&&`font-weight:${g()}`,b()!=null&&`padding:${b()}`].filter(Boolean))}),C(()=>h(i),()=>{W(f,h(i).length>0?h(i).join("; "):void 0)}),C(()=>(l(o()),l(k()),l(m()),l(_())),()=>{W(p,`btn-inner ${o()} ${k()} shape-${m()} ${_()}`.trim())}),J();var T={get variant(){return o()},set variant(e){o(e),r()},get size(){return k()},set size(e){k(e),r()},get shape(){return m()},set shape(e){m(e),r()},get disabled(){return x()},set disabled(e){x(e),r()},get loading(){return w()},set loading(e){w(e),r()},get color(){return d()},set color(e){d(e),r()},get type(){return z()},set type(e){z(e),r()},get backgroundColor(){return u()},set backgroundColor(e){u(e),r()},get fontSize(){return v()},set fontSize(e){v(e),r()},get borderRadius(){return c()},set borderRadius(e){c(e),r()},get borderWidth(){return y()},set borderWidth(e){y(e),r()},get fontWeight(){return g()},set fontWeight(e){g(e),r()},get padding(){return b()},set padding(e){b(e),r()},get extraClass(){return _()},set extraClass(e){_(e),r()}};Y();var a=ne(),R=B(a);{var V=e=>{var F=re();D(e,F)};O(R,e=>{w()&&e(V)})}var j=K(R,2),q=B(j);return Q(q,t,"default",{},null),P(j),P(a),L(()=>{ee(a,"type",z()),Z(a,1,$(h(p)),"svelte-kv8yyl"),a.disabled=x(),te(a,h(f))}),M("click",a,I),D(s,a),N(T)}const __Default = (G(se,{variant:{},size:{},shape:{},disabled:{},loading:{},color:{},type:{},backgroundColor:{},fontSize:{},borderRadius:{},borderWidth:{},fontWeight:{},padding:{},extraClass:{}},["default"],[],{mode:"open"}));
|
|
34
|
+
customElements.define("ui-button", __Default);
|
|
35
|
+
export default __Default;
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
<svelte:options customElement="ui-button" />
|
|
2
|
+
|
|
3
|
+
<script>
|
|
4
|
+
export let variant = "primary";
|
|
5
|
+
export let size = "md";
|
|
6
|
+
export let shape = "rectangle";
|
|
7
|
+
export let disabled = false;
|
|
8
|
+
export let loading = false;
|
|
9
|
+
export let color = void 0;
|
|
10
|
+
export let type = "button";
|
|
11
|
+
export let backgroundColor = void 0;
|
|
12
|
+
export let fontSize = void 0;
|
|
13
|
+
export let borderRadius = void 0;
|
|
14
|
+
export let borderWidth = void 0;
|
|
15
|
+
export let fontWeight = void 0;
|
|
16
|
+
export let padding = void 0;
|
|
17
|
+
export let extraClass = "";
|
|
18
|
+
$: styleParts = [
|
|
19
|
+
color != null && `--ui-button-bg:${color}`,
|
|
20
|
+
backgroundColor != null && `--ui-button-custom-bg:${backgroundColor}`,
|
|
21
|
+
fontSize != null && `font-size:${fontSize}`,
|
|
22
|
+
borderRadius != null && `border-radius:${borderRadius}`,
|
|
23
|
+
borderWidth != null && `border-width:${borderWidth}`,
|
|
24
|
+
fontWeight != null && `font-weight:${fontWeight}`,
|
|
25
|
+
padding != null && `padding:${padding}`
|
|
26
|
+
].filter(Boolean);
|
|
27
|
+
$: buttonStyle = styleParts.length > 0 ? styleParts.join("; ") : void 0;
|
|
28
|
+
$: buttonClass = `btn-inner ${variant} ${size} shape-${shape} ${extraClass}`.trim();
|
|
29
|
+
function handleClick(event) {
|
|
30
|
+
if (disabled || loading) {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
event.stopImmediatePropagation();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<button
|
|
38
|
+
{type}
|
|
39
|
+
class={buttonClass}
|
|
40
|
+
{disabled}
|
|
41
|
+
style={buttonStyle}
|
|
42
|
+
on:click={handleClick}
|
|
43
|
+
>
|
|
44
|
+
{#if loading}
|
|
45
|
+
<span class="spinner"></span>
|
|
46
|
+
{/if}
|
|
47
|
+
<span class="btn-content">
|
|
48
|
+
<slot />
|
|
49
|
+
</span>
|
|
50
|
+
</button>
|
|
51
|
+
|
|
52
|
+
<style>
|
|
53
|
+
:host {
|
|
54
|
+
display: inline-block;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.btn-inner {
|
|
58
|
+
border: none;
|
|
59
|
+
border-radius: var(--ui-radius-md, 10px);
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
font-weight: 500;
|
|
62
|
+
transition: all 0.2s ease;
|
|
63
|
+
display: inline-flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
justify-content: center;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.btn-content {
|
|
69
|
+
display: inline-flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
justify-content: center;
|
|
72
|
+
gap: 0.5rem;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Shape: pill (full rounded) for icon + text */
|
|
76
|
+
.shape-pill {
|
|
77
|
+
border-radius: 999px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Shape: circle for icon-only buttons */
|
|
81
|
+
.shape-circle {
|
|
82
|
+
border-radius: 50%;
|
|
83
|
+
padding: 0;
|
|
84
|
+
aspect-ratio: 1;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.shape-circle.sm {
|
|
88
|
+
width: 32px;
|
|
89
|
+
height: 32px;
|
|
90
|
+
min-width: 32px;
|
|
91
|
+
min-height: 32px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.shape-circle.md {
|
|
95
|
+
width: 40px;
|
|
96
|
+
height: 40px;
|
|
97
|
+
min-width: 40px;
|
|
98
|
+
min-height: 40px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.shape-circle.lg {
|
|
102
|
+
width: 48px;
|
|
103
|
+
height: 48px;
|
|
104
|
+
min-width: 48px;
|
|
105
|
+
min-height: 48px;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* When app adds class for full width (e.g. class="w-full" or class="full-width"), inner button fills the host */
|
|
109
|
+
:host([class*="full"]) .btn-inner,
|
|
110
|
+
:host([class*="w-full"]) .btn-inner {
|
|
111
|
+
width: 100%;
|
|
112
|
+
box-sizing: border-box;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* Sizes (rectangle / pill) */
|
|
116
|
+
.shape-rectangle.sm,
|
|
117
|
+
.shape-pill.sm {
|
|
118
|
+
padding: 6px 12px;
|
|
119
|
+
font-size: 12px;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.shape-rectangle.sm .btn-content,
|
|
123
|
+
.shape-pill.sm .btn-content {
|
|
124
|
+
gap: 0.375rem;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.shape-rectangle.md,
|
|
128
|
+
.shape-pill.md {
|
|
129
|
+
padding: 10px 24px;
|
|
130
|
+
font-size: 14px;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.shape-rectangle.lg,
|
|
134
|
+
.shape-pill.lg {
|
|
135
|
+
padding: 14px 32px;
|
|
136
|
+
font-size: 16px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.shape-rectangle.lg .btn-content,
|
|
140
|
+
.shape-pill.lg .btn-content {
|
|
141
|
+
gap: 0.5rem;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Variants — respect --ui-button-custom-bg when set via backgroundColor prop */
|
|
145
|
+
.primary {
|
|
146
|
+
background: var(--ui-button-custom-bg, var(--ui-primary, #474bff));
|
|
147
|
+
color: var(--ui-button-bg, #fefeff);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.primary:hover {
|
|
151
|
+
background: var(--ui-button-custom-bg-hover, var(--ui-primary-hover, #2b2399));
|
|
152
|
+
color: #fefeff;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.secondary {
|
|
156
|
+
background: var(--ui-button-custom-bg, var(--ui-secondary, #222121));
|
|
157
|
+
color: #fefeff;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.secondary:hover {
|
|
161
|
+
background: var(--ui-button-custom-bg-hover, var(--ui-secondary-hover, #616061));
|
|
162
|
+
color: #fefeff;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.outline {
|
|
166
|
+
background: var(--ui-outline, transparent);
|
|
167
|
+
border: 1px solid var(--ui-outline, #222121);
|
|
168
|
+
color: #616061;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.outline:hover {
|
|
172
|
+
background: var(--ui-outline-hover, transparent);
|
|
173
|
+
border: 1px solid var(--ui-outline, #222121);
|
|
174
|
+
color: #222121;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.danger {
|
|
178
|
+
background: var(--ui-button-custom-bg, var(--ui-danger, #e03e52));
|
|
179
|
+
color: #fefeff;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.danger:hover {
|
|
183
|
+
background: var(
|
|
184
|
+
--ui-button-custom-bg-hover,
|
|
185
|
+
var(--ui-danger-hover, #c23445)
|
|
186
|
+
);
|
|
187
|
+
color: #fefeff;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.success {
|
|
191
|
+
background: var(--ui-button-custom-bg, var(--ui-success, #2cc84d));
|
|
192
|
+
color: #fefeff;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.success:hover {
|
|
196
|
+
background: var(
|
|
197
|
+
--ui-button-custom-bg-hover,
|
|
198
|
+
var(--ui-success-hover, #2cc84d)
|
|
199
|
+
);
|
|
200
|
+
color: #fefeff;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.white {
|
|
204
|
+
background: var(--ui-button-custom-bg, var(--ui-white, #ffffff));
|
|
205
|
+
color: var(--ui-text-on-light, #222121);
|
|
206
|
+
border: 1px solid var(--ui-border-light, #e0e0e0);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.white:hover {
|
|
210
|
+
background: var(
|
|
211
|
+
--ui-button-custom-bg-hover,
|
|
212
|
+
var(--ui-white-hover, #f5f5f5)
|
|
213
|
+
);
|
|
214
|
+
color: var(--ui-text-on-light, #222121);
|
|
215
|
+
border-color: var(--ui-border-light-hover, #c0c0c0);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.ghost {
|
|
219
|
+
background: transparent;
|
|
220
|
+
color: var(--ui-ghost-text, #616061);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.ghost:hover {
|
|
224
|
+
background: var(--ui-ghost-hover, rgba(0, 0, 0, 0.06));
|
|
225
|
+
color: var(--ui-ghost-text-hover, #222121);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.btn-inner:disabled {
|
|
229
|
+
background: #e0e0e0;
|
|
230
|
+
cursor: not-allowed;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.btn-inner:disabled:hover {
|
|
234
|
+
background: #e0e0e0;
|
|
235
|
+
cursor: not-allowed;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.spinner {
|
|
239
|
+
width: 14px;
|
|
240
|
+
height: 14px;
|
|
241
|
+
border: 2px solid white;
|
|
242
|
+
border-top-color: transparent;
|
|
243
|
+
border-radius: 50%;
|
|
244
|
+
display: inline-block;
|
|
245
|
+
margin-right: 6px;
|
|
246
|
+
animation: spin 0.6s linear infinite;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
@keyframes spin {
|
|
250
|
+
to {
|
|
251
|
+
transform: rotate(360deg);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
</style>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
variant?: "primary" | "secondary" | "danger" | "success" | "white" | "outline" | "ghost";
|
|
5
|
+
size?: "sm" | "md" | "lg";
|
|
6
|
+
/** Rectangle (default), pill (full rounded), or circle (icon-only). */ shape?: "rectangle" | "pill" | "circle";
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
loading?: boolean;
|
|
9
|
+
color?: string | undefined;
|
|
10
|
+
type?: "button" | "submit" | "reset";
|
|
11
|
+
/** Override background (and text contrast) for variant; e.g. "#10b981" */ backgroundColor?: string | undefined;
|
|
12
|
+
/** Override font size; e.g. "16px", "1rem" */ fontSize?: string | undefined;
|
|
13
|
+
/** Override border radius; e.g. "8px", "999px" */ borderRadius?: string | undefined;
|
|
14
|
+
/** Override border width; e.g. "2px" (useful with outline variant) */ borderWidth?: string | undefined;
|
|
15
|
+
/** Override font weight; e.g. "600", "bold" */ fontWeight?: string | undefined;
|
|
16
|
+
/** Override padding; e.g. "12px 20px" */ padding?: string | undefined;
|
|
17
|
+
/** Extra class(es) for the button root (e.g. for width utilities in the app). Set via the extra-class attribute. */ extraClass?: string;
|
|
18
|
+
};
|
|
19
|
+
events: {
|
|
20
|
+
[evt: string]: CustomEvent<any>;
|
|
21
|
+
};
|
|
22
|
+
slots: {
|
|
23
|
+
default: {};
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export type ButtonProps = typeof __propDef.props;
|
|
27
|
+
export type ButtonEvents = typeof __propDef.events;
|
|
28
|
+
export type ButtonSlots = typeof __propDef.slots;
|
|
29
|
+
export default class Button extends SvelteComponentTyped<ButtonProps, ButtonEvents, ButtonSlots> {
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./Card.svelte";
|