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,147 @@
|
|
|
1
|
+
<svelte:options customElement="ui-radio" />
|
|
2
|
+
|
|
3
|
+
<script>
|
|
4
|
+
export let checked = false;
|
|
5
|
+
export let disabled = false;
|
|
6
|
+
export let name = void 0;
|
|
7
|
+
export let value = void 0;
|
|
8
|
+
export let ariaLabel = void 0;
|
|
9
|
+
export let ariaDescribedby = void 0;
|
|
10
|
+
export let onchange = void 0;
|
|
11
|
+
function getHost(el) {
|
|
12
|
+
const root = el.getRootNode();
|
|
13
|
+
return root instanceof ShadowRoot ? root.host : null;
|
|
14
|
+
}
|
|
15
|
+
function handleChange(event) {
|
|
16
|
+
const target = event.target;
|
|
17
|
+
const nowChecked = target.checked;
|
|
18
|
+
if (!nowChecked) return;
|
|
19
|
+
checked = true;
|
|
20
|
+
const detail = { checked };
|
|
21
|
+
onchange?.(detail);
|
|
22
|
+
const host = getHost(target);
|
|
23
|
+
host?.dispatchEvent(new CustomEvent("change", { detail, bubbles: true }));
|
|
24
|
+
}
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<label
|
|
28
|
+
class="radio-root {checked ? 'is-checked' : ''} {disabled ? 'is-disabled' : ''}"
|
|
29
|
+
>
|
|
30
|
+
<span class="radio-control">
|
|
31
|
+
<input
|
|
32
|
+
type="radio"
|
|
33
|
+
{name}
|
|
34
|
+
{value}
|
|
35
|
+
{checked}
|
|
36
|
+
{disabled}
|
|
37
|
+
aria-label={ariaLabel}
|
|
38
|
+
aria-describedby={ariaDescribedby}
|
|
39
|
+
on:change={handleChange}
|
|
40
|
+
/>
|
|
41
|
+
<span class="radio-circle" aria-hidden="true"></span>
|
|
42
|
+
</span>
|
|
43
|
+
<span class="radio-label">
|
|
44
|
+
<slot />
|
|
45
|
+
</span>
|
|
46
|
+
</label>
|
|
47
|
+
|
|
48
|
+
<style>
|
|
49
|
+
.radio-root {
|
|
50
|
+
display: inline-flex;
|
|
51
|
+
align-items: center;
|
|
52
|
+
gap: 0.5rem;
|
|
53
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
54
|
+
sans-serif;
|
|
55
|
+
font-size: 14px;
|
|
56
|
+
line-height: 1.3;
|
|
57
|
+
color: var(--ui-radio-label-color, #111827);
|
|
58
|
+
cursor: pointer;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.radio-control {
|
|
62
|
+
position: relative;
|
|
63
|
+
display: inline-flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
justify-content: center;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.radio-control input {
|
|
69
|
+
position: absolute;
|
|
70
|
+
inset: 0;
|
|
71
|
+
margin: 0;
|
|
72
|
+
opacity: 0;
|
|
73
|
+
cursor: inherit;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.radio-circle {
|
|
77
|
+
width: var(--ui-radio-size, 22px);
|
|
78
|
+
height: var(--ui-radio-size, 22px);
|
|
79
|
+
border-radius: 999px;
|
|
80
|
+
box-sizing: border-box;
|
|
81
|
+
border: 2px solid var(--ui-radio-border-color, #111111);
|
|
82
|
+
background-color: var(--ui-radio-bg, transparent);
|
|
83
|
+
display: inline-flex;
|
|
84
|
+
align-items: center;
|
|
85
|
+
justify-content: center;
|
|
86
|
+
transition:
|
|
87
|
+
background-color 0.15s ease,
|
|
88
|
+
border-color 0.15s ease,
|
|
89
|
+
box-shadow 0.15s ease,
|
|
90
|
+
transform 0.1s ease;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.radio-circle::before {
|
|
94
|
+
content: "";
|
|
95
|
+
display: block;
|
|
96
|
+
width: 60%;
|
|
97
|
+
height: 60%;
|
|
98
|
+
border-radius: inherit;
|
|
99
|
+
background-color: transparent;
|
|
100
|
+
box-shadow: 0 0 0 0 transparent;
|
|
101
|
+
opacity: 0;
|
|
102
|
+
transition:
|
|
103
|
+
opacity 0.12s ease,
|
|
104
|
+
box-shadow 0.12s ease,
|
|
105
|
+
transform 0.12s ease;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Checked: purple ring with white center like screenshot */
|
|
109
|
+
.radio-root.is-checked .radio-circle {
|
|
110
|
+
background-color: var(--ui-radio-checked-bg, var(--ui-primary, #474bff));
|
|
111
|
+
border-color: var(--ui-radio-checked-border, var(--ui-primary, #474bff));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.radio-root.is-checked .radio-circle::before {
|
|
115
|
+
background-color: var(--ui-radio-inner, #ffffff);
|
|
116
|
+
box-shadow: 0 0 0 4px
|
|
117
|
+
var(--ui-radio-checked-bg, var(--ui-primary, #474bff));
|
|
118
|
+
opacity: 1;
|
|
119
|
+
transform: scale(1);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Hover + focus */
|
|
123
|
+
.radio-root:not(.is-disabled):hover .radio-circle {
|
|
124
|
+
transform: translateY(-0.5px);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.radio-root:not(.is-disabled) .radio-control input:focus-visible
|
|
128
|
+
+ .radio-circle {
|
|
129
|
+
box-shadow: 0 0 0 3px
|
|
130
|
+
var(--ui-radio-focus-ring, rgba(71, 75, 255, 0.45));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.radio-root.is-disabled {
|
|
134
|
+
cursor: not-allowed;
|
|
135
|
+
color: var(--ui-radio-label-disabled, #9ca3af);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.radio-root.is-disabled .radio-circle {
|
|
139
|
+
border-color: var(--ui-radio-border-disabled, #bdbdbc);
|
|
140
|
+
background-color: var(--ui-radio-bg-disabled, #e5e7eb);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.radio-label:empty {
|
|
144
|
+
display: none;
|
|
145
|
+
}
|
|
146
|
+
</style>
|
|
147
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
checked?: boolean;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
name?: string | undefined;
|
|
7
|
+
value?: string | undefined;
|
|
8
|
+
ariaLabel?: string | undefined;
|
|
9
|
+
ariaDescribedby?: string | undefined;
|
|
10
|
+
/** Callback when checked state changes. Only fires when this radio becomes checked. */ onchange?: ((detail: {
|
|
11
|
+
checked: boolean;
|
|
12
|
+
}) => void) | undefined;
|
|
13
|
+
};
|
|
14
|
+
events: {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
};
|
|
17
|
+
slots: {
|
|
18
|
+
default: {};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export type RadioProps = typeof __propDef.props;
|
|
22
|
+
export type RadioEvents = typeof __propDef.events;
|
|
23
|
+
export type RadioSlots = typeof __propDef.slots;
|
|
24
|
+
export default class Radio extends SvelteComponentTyped<RadioProps, RadioEvents, RadioSlots> {
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./Textarea.svelte";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{o as C,c as S,p as R,t as j,i as H,j as I,k as N,n as a}from"../../assets/custom-element-CN6vLcFC.js";import{b as O,a as T,s as d}from"../../assets/attributes-o88QCNuy.js";import{a as A,i as B,s as F,c as G}from"../../assets/lifecycle-BK5NY8qp.js";import{p as n}from"../../assets/props-DbUVX42-.js";var J=N("<textarea></textarea>");const K={hash:"svelte-gdvnmx",code:`textarea.svelte-gdvnmx {display:block;width:100%;padding:var(--ui-input-padding-y, 0.375rem) var(--ui-input-padding-x, 0.75rem);font-family:inherit;font-size:var(--ui-input-font-size, 1rem);font-weight:400;line-height:1.5;color:var(--ui-input-color, #212529);background-color:var(--ui-input-bg, #fff);border:var(--ui-input-border-width, 1px) solid var(--ui-input-border-color, #dee2e6);border-radius:var(--ui-input-border-radius, 0.375rem);box-shadow:var(--ui-input-box-shadow, inset 0 1px 2px rgba(0, 0, 0, 0.075));transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;box-sizing:border-box;resize:vertical;min-height:calc(1.5em + 0.75rem + 2px);}textarea.svelte-gdvnmx::placeholder {color:var(--ui-input-placeholder-color, #6c757d);}textarea.svelte-gdvnmx:hover:not(:disabled):not(:read-only) {border-color:var(--ui-input-hover-border-color, #adb5bd);}textarea.svelte-gdvnmx:focus {outline:0;border-color:var(--ui-input-focus-border-color, #86b7fe);box-shadow:0 0 0 0.25rem var(--ui-input-focus-ring, rgba(13, 110, 253, 0.25));}textarea.svelte-gdvnmx:disabled {background-color:var(--ui-input-disabled-bg, #e9ecef);color:var(--ui-input-disabled-color, #6c757d);cursor:not-allowed;opacity:1;}textarea.svelte-gdvnmx:read-only {background-color:var(--ui-input-bg, #fff);}\r
|
|
2
|
+
\r
|
|
3
|
+
/* Sizes */.sm.svelte-gdvnmx {padding:var(--ui-input-padding-y-sm, 0.25rem) var(--ui-input-padding-x-sm, 0.5rem);font-size:var(--ui-input-font-size-sm, 0.875rem);border-radius:var(--ui-input-border-radius-sm, 0.25rem);}.md.svelte-gdvnmx {padding:var(--ui-input-padding-y, 0.375rem) var(--ui-input-padding-x, 0.75rem);font-size:var(--ui-input-font-size, 1rem);border-radius:var(--ui-input-border-radius, 0.375rem);}.lg.svelte-gdvnmx {padding:var(--ui-input-padding-y-lg, 0.5rem) var(--ui-input-padding-x-lg, 1rem);font-size:var(--ui-input-font-size-lg, 1.25rem);border-radius:var(--ui-input-border-radius-lg, 0.5rem);}`};function M(_,r){R(r,!1),A(_,K);let o=n(r,"value",12,""),u=n(r,"placeholder",12,""),s=n(r,"name",12,void 0),g=n(r,"id",12,void 0),c=n(r,"rows",12,3),m=n(r,"size",12,"md"),b=n(r,"disabled",12,!1),v=n(r,"readonly",12,!1),h=n(r,"required",12,!1),p=n(r,"maxlength",12,void 0),f=n(r,"minlength",12,void 0),x=n(r,"ariaLabel",12,void 0),y=n(r,"ariaDescribedby",12,void 0),w=n(r,"oninput",12,void 0),z=n(r,"onchange",12,void 0);function q(e){const i=e.getRootNode();return i instanceof ShadowRoot?i.host:null}function k(e){const i=e.target;o(i.value);const l={value:o()};w()?.(l),q(i)?.dispatchEvent(new CustomEvent("input",{detail:l,bubbles:!0}))}function D(e){const i=e.target;o(i.value);const l={value:o()};z()?.(l),q(i)?.dispatchEvent(new CustomEvent("change",{detail:l,bubbles:!0}))}var E={get value(){return o()},set value(e){o(e),a()},get placeholder(){return u()},set placeholder(e){u(e),a()},get name(){return s()},set name(e){s(e),a()},get id(){return g()},set id(e){g(e),a()},get rows(){return c()},set rows(e){c(e),a()},get size(){return m()},set size(e){m(e),a()},get disabled(){return b()},set disabled(e){b(e),a()},get readonly(){return v()},set readonly(e){v(e),a()},get required(){return h()},set required(e){h(e),a()},get maxlength(){return p()},set maxlength(e){p(e),a()},get minlength(){return f()},set minlength(e){f(e),a()},get ariaLabel(){return x()},set ariaLabel(e){x(e),a()},get ariaDescribedby(){return y()},set ariaDescribedby(e){y(e),a()},get oninput(){return w()},set oninput(e){w(e),a()},get onchange(){return z()},set onchange(e){z(e),a()}};B();var t=J();return O(t),t.__input=k,t.__change=D,j(()=>{T(t,o()),d(t,"placeholder",u()),d(t,"name",s()),d(t,"id",g()),d(t,"rows",c()),t.disabled=b(),t.readOnly=v(),t.required=h(),d(t,"maxlength",p()),d(t,"minlength",f()),F(t,1,G(m()),"svelte-gdvnmx"),d(t,"aria-label",x()),d(t,"aria-describedby",y())}),H(_,t),I(E)}C(["input","change"]);const __Default = (S(M,{value:{},placeholder:{},name:{},id:{},rows:{},size:{},disabled:{},readonly:{},required:{},maxlength:{},minlength:{},ariaLabel:{},ariaDescribedby:{},oninput:{},onchange:{}},[],[],{mode:"open"}));
|
|
4
|
+
customElements.define("ui-textarea", __Default);
|
|
5
|
+
export default __Default;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<svelte:options customElement="ui-textarea" />
|
|
2
|
+
|
|
3
|
+
<script>
|
|
4
|
+
export let value = "";
|
|
5
|
+
export let placeholder = "";
|
|
6
|
+
export let name = void 0;
|
|
7
|
+
export let id = void 0;
|
|
8
|
+
export let rows = 3;
|
|
9
|
+
export let size = "md";
|
|
10
|
+
export let disabled = false;
|
|
11
|
+
export let readonly = false;
|
|
12
|
+
export let required = false;
|
|
13
|
+
export let maxlength = void 0;
|
|
14
|
+
export let minlength = void 0;
|
|
15
|
+
export let ariaLabel = void 0;
|
|
16
|
+
export let ariaDescribedby = void 0;
|
|
17
|
+
export let oninput = void 0;
|
|
18
|
+
export let onchange = void 0;
|
|
19
|
+
function getHost(el) {
|
|
20
|
+
const root = el.getRootNode();
|
|
21
|
+
return root instanceof ShadowRoot ? root.host : null;
|
|
22
|
+
}
|
|
23
|
+
function handleInput(event) {
|
|
24
|
+
const target = event.target;
|
|
25
|
+
value = target.value;
|
|
26
|
+
const detail = { value };
|
|
27
|
+
oninput?.(detail);
|
|
28
|
+
const host = getHost(target);
|
|
29
|
+
host?.dispatchEvent(new CustomEvent("input", { detail, bubbles: true }));
|
|
30
|
+
}
|
|
31
|
+
function handleChange(event) {
|
|
32
|
+
const target = event.target;
|
|
33
|
+
value = target.value;
|
|
34
|
+
const detail = { value };
|
|
35
|
+
onchange?.(detail);
|
|
36
|
+
const host = getHost(target);
|
|
37
|
+
host?.dispatchEvent(new CustomEvent("change", { detail, bubbles: true }));
|
|
38
|
+
}
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<textarea
|
|
42
|
+
{value}
|
|
43
|
+
{placeholder}
|
|
44
|
+
{name}
|
|
45
|
+
{id}
|
|
46
|
+
{rows}
|
|
47
|
+
{disabled}
|
|
48
|
+
{readonly}
|
|
49
|
+
{required}
|
|
50
|
+
{maxlength}
|
|
51
|
+
{minlength}
|
|
52
|
+
class={size}
|
|
53
|
+
aria-label={ariaLabel}
|
|
54
|
+
aria-describedby={ariaDescribedby}
|
|
55
|
+
oninput={handleInput}
|
|
56
|
+
onchange={handleChange}
|
|
57
|
+
></textarea>
|
|
58
|
+
|
|
59
|
+
<style>
|
|
60
|
+
textarea {
|
|
61
|
+
display: block;
|
|
62
|
+
width: 100%;
|
|
63
|
+
padding: var(--ui-input-padding-y, 0.375rem) var(--ui-input-padding-x, 0.75rem);
|
|
64
|
+
font-family: inherit;
|
|
65
|
+
font-size: var(--ui-input-font-size, 1rem);
|
|
66
|
+
font-weight: 400;
|
|
67
|
+
line-height: 1.5;
|
|
68
|
+
color: var(--ui-input-color, #212529);
|
|
69
|
+
background-color: var(--ui-input-bg, #fff);
|
|
70
|
+
border: var(--ui-input-border-width, 1px) solid var(--ui-input-border-color, #dee2e6);
|
|
71
|
+
border-radius: var(--ui-input-border-radius, 0.375rem);
|
|
72
|
+
box-shadow: var(--ui-input-box-shadow, inset 0 1px 2px rgba(0, 0, 0, 0.075));
|
|
73
|
+
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
|
74
|
+
box-sizing: border-box;
|
|
75
|
+
resize: vertical;
|
|
76
|
+
min-height: calc(1.5em + 0.75rem + 2px);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
textarea::placeholder {
|
|
80
|
+
color: var(--ui-input-placeholder-color, #6c757d);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
textarea:hover:not(:disabled):not(:read-only) {
|
|
84
|
+
border-color: var(--ui-input-hover-border-color, #adb5bd);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
textarea:focus {
|
|
88
|
+
outline: 0;
|
|
89
|
+
border-color: var(--ui-input-focus-border-color, #86b7fe);
|
|
90
|
+
box-shadow: 0 0 0 0.25rem var(--ui-input-focus-ring, rgba(13, 110, 253, 0.25));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
textarea:disabled {
|
|
94
|
+
background-color: var(--ui-input-disabled-bg, #e9ecef);
|
|
95
|
+
color: var(--ui-input-disabled-color, #6c757d);
|
|
96
|
+
cursor: not-allowed;
|
|
97
|
+
opacity: 1;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
textarea:read-only {
|
|
101
|
+
background-color: var(--ui-input-bg, #fff);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Sizes */
|
|
105
|
+
.sm {
|
|
106
|
+
padding: var(--ui-input-padding-y-sm, 0.25rem) var(--ui-input-padding-x-sm, 0.5rem);
|
|
107
|
+
font-size: var(--ui-input-font-size-sm, 0.875rem);
|
|
108
|
+
border-radius: var(--ui-input-border-radius-sm, 0.25rem);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.md {
|
|
112
|
+
padding: var(--ui-input-padding-y, 0.375rem) var(--ui-input-padding-x, 0.75rem);
|
|
113
|
+
font-size: var(--ui-input-font-size, 1rem);
|
|
114
|
+
border-radius: var(--ui-input-border-radius, 0.375rem);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.lg {
|
|
118
|
+
padding: var(--ui-input-padding-y-lg, 0.5rem) var(--ui-input-padding-x-lg, 1rem);
|
|
119
|
+
font-size: var(--ui-input-font-size-lg, 1.25rem);
|
|
120
|
+
border-radius: var(--ui-input-border-radius-lg, 0.5rem);
|
|
121
|
+
}
|
|
122
|
+
</style>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
value?: string;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
name?: string | undefined;
|
|
7
|
+
id?: string | undefined;
|
|
8
|
+
rows?: number;
|
|
9
|
+
size?: "sm" | "md" | "lg";
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
readonly?: boolean;
|
|
12
|
+
required?: boolean;
|
|
13
|
+
maxlength?: number | undefined;
|
|
14
|
+
minlength?: number | undefined;
|
|
15
|
+
ariaLabel?: string | undefined;
|
|
16
|
+
ariaDescribedby?: string | undefined;
|
|
17
|
+
/** Callback when value changes on input (Svelte 5 replacement for deprecated createEventDispatcher). */ oninput?: ((detail: {
|
|
18
|
+
value: string;
|
|
19
|
+
}) => void) | undefined;
|
|
20
|
+
/** Callback when value is committed on change (Svelte 5 replacement for deprecated createEventDispatcher). */ onchange?: ((detail: {
|
|
21
|
+
value: string;
|
|
22
|
+
}) => void) | undefined;
|
|
23
|
+
};
|
|
24
|
+
events: {
|
|
25
|
+
[evt: string]: CustomEvent<any>;
|
|
26
|
+
};
|
|
27
|
+
slots: {};
|
|
28
|
+
};
|
|
29
|
+
export type TextareaProps = typeof __propDef.props;
|
|
30
|
+
export type TextareaEvents = typeof __propDef.events;
|
|
31
|
+
export type TextareaSlots = typeof __propDef.slots;
|
|
32
|
+
export default class Textarea extends SvelteComponentTyped<TextareaProps, TextareaEvents, TextareaSlots> {
|
|
33
|
+
}
|
|
34
|
+
export {};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { default as Button } from "./components/button/Button.js";
|
|
2
|
+
export { default as Accordion } from "./components/accordion/Accordion.js";
|
|
3
|
+
export { default as AccordionItem } from "./components/accordion-item/AccordionItem.js";
|
|
4
|
+
export { default as Input } from "./components/input/Input.js";
|
|
5
|
+
export { default as Textarea } from "./components/textarea/Textarea.js";
|
|
6
|
+
export { default as FormSelect } from "./components/form-select/FormSelect.js";
|
|
7
|
+
export { default as FormSelectOption } from "./components/form-select/FormSelectOption.js";
|
|
8
|
+
export { default as Checkbox } from "./components/checkbox/Checkbox.js";
|
|
9
|
+
export { default as Radio } from "./components/radio/Radio.js";
|
|
10
|
+
export { default as Label } from "./components/label/Label.js";
|
|
11
|
+
export { default as Form } from "./components/form/Form.js";
|
|
12
|
+
export { default as Avatar } from "./components/avatar/Avatar.js";
|
|
13
|
+
export { default as Card } from "./components/card/Card.js";
|
|
14
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { default as Button } from "./components/button/Button.js";
|
|
2
|
+
export { default as Accordion } from "./components/accordion/Accordion.js";
|
|
3
|
+
export { default as AccordionItem } from "./components/accordion-item/AccordionItem.js";
|
|
4
|
+
export { default as Input } from "./components/input/Input.js";
|
|
5
|
+
export { default as Textarea } from "./components/textarea/Textarea.js";
|
|
6
|
+
export { default as FormSelect } from "./components/form-select/FormSelect.js";
|
|
7
|
+
export { default as FormSelectOption } from "./components/form-select/FormSelectOption.js";
|
|
8
|
+
export { default as Checkbox } from "./components/checkbox/Checkbox.js";
|
|
9
|
+
export { default as Radio } from "./components/radio/Radio.js";
|
|
10
|
+
export { default as Label } from "./components/label/Label.js";
|
|
11
|
+
export { default as Form } from "./components/form/Form.js";
|
|
12
|
+
export { default as Avatar } from "./components/avatar/Avatar.js";
|
|
13
|
+
export { default as Card } from "./components/card/Card.js";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React wrappers for crayon-design-system-ui.
|
|
3
|
+
* Use: import { Button, Input, ... } from 'crayon-design-system-ui/react'
|
|
4
|
+
* Import 'crayon-design-system-ui/register' once in your app (e.g. in main.tsx) so custom elements are defined.
|
|
5
|
+
*/
|
|
6
|
+
import { type ReactNode } from "react";
|
|
7
|
+
type ElementProps = Record<string, unknown> & {
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export declare const Button: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
11
|
+
export declare const Accordion: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
12
|
+
export declare const AccordionItem: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
13
|
+
export declare const Input: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
14
|
+
export declare const Textarea: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
15
|
+
export declare const FormSelect: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
16
|
+
export declare const FormSelectOption: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
17
|
+
export declare const Checkbox: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
18
|
+
export declare const Radio: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
19
|
+
export declare const Label: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
20
|
+
export declare const Form: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
21
|
+
export declare const Avatar: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
22
|
+
export declare const Card: import("react").ForwardRefExoticComponent<Omit<ElementProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/react/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAEf,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAavE,eAAO,MAAM,MAAM,mHAAyC,CAAC;AAC7D,eAAO,MAAM,SAAS,mHAAyC,CAAC;AAChE,eAAO,MAAM,aAAa,mHAA8C,CAAC;AACzE,eAAO,MAAM,KAAK,mHAAuC,CAAC;AAC1D,eAAO,MAAM,QAAQ,mHAA6C,CAAC;AACnE,eAAO,MAAM,UAAU,mHAA8C,CAAC;AACtE,eAAO,MAAM,gBAAgB,mHAAqD,CAAC;AACnF,eAAO,MAAM,QAAQ,mHAA0C,CAAC;AAChE,eAAO,MAAM,KAAK,mHAAuC,CAAC;AAC1D,eAAO,MAAM,KAAK,mHAAuC,CAAC;AAC1D,eAAO,MAAM,IAAI,mHAAqC,CAAC;AACvD,eAAO,MAAM,MAAM,mHAAsC,CAAC;AAC1D,eAAO,MAAM,IAAI,mHAAoC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React wrappers for crayon-design-system-ui.
|
|
3
|
+
* Use: import { Button, Input, ... } from 'crayon-design-system-ui/react'
|
|
4
|
+
* Import 'crayon-design-system-ui/register' once in your app (e.g. in main.tsx) so custom elements are defined.
|
|
5
|
+
*/
|
|
6
|
+
import { createElement, forwardRef, } from "react";
|
|
7
|
+
function createWrapper(tag) {
|
|
8
|
+
return forwardRef(function Wrapper(props, ref) {
|
|
9
|
+
const { children, ...rest } = props;
|
|
10
|
+
return createElement(tag, { ...rest, ref }, children);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
// Custom element tag names (must match svelte:options customElement in each .svelte)
|
|
14
|
+
export const Button = createWrapper("ui-button");
|
|
15
|
+
export const Accordion = createWrapper("ui-accordion");
|
|
16
|
+
export const AccordionItem = createWrapper("ui-accordion-item");
|
|
17
|
+
export const Input = createWrapper("ui-input");
|
|
18
|
+
export const Textarea = createWrapper("ui-textarea");
|
|
19
|
+
export const FormSelect = createWrapper("ui-form-select");
|
|
20
|
+
export const FormSelectOption = createWrapper("ui-form-select-option");
|
|
21
|
+
export const Checkbox = createWrapper("ui-checkbox");
|
|
22
|
+
export const Radio = createWrapper("ui-radio");
|
|
23
|
+
export const Label = createWrapper("ui-label");
|
|
24
|
+
export const Form = createWrapper("ui-form");
|
|
25
|
+
export const Avatar = createWrapper("ui-avatar");
|
|
26
|
+
export const Card = createWrapper("ui-card");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["register.ts"],"names":[],"mappings":""}
|
package/dist/register.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SSR-safe: only register custom elements in the browser.
|
|
3
|
+
// Each import causes the Svelte compiler output to call customElements.define(...).
|
|
4
|
+
if (typeof window !== "undefined" && "customElements" in window) {
|
|
5
|
+
void import("./components/button/Button.svelte");
|
|
6
|
+
void import("./components/accordion/Accordion.svelte");
|
|
7
|
+
void import("./components/accordion-item/AccordionItem.svelte");
|
|
8
|
+
void import("./components/input/Input.svelte");
|
|
9
|
+
void import("./components/textarea/Textarea.svelte");
|
|
10
|
+
void import("./components/form-select/FormSelect.svelte");
|
|
11
|
+
void import("./components/form-select/FormSelectOption.svelte");
|
|
12
|
+
void import("./components/checkbox/Checkbox.svelte");
|
|
13
|
+
void import("./components/radio/Radio.svelte");
|
|
14
|
+
void import("./components/label/Label.svelte");
|
|
15
|
+
void import("./components/form/Form.svelte");
|
|
16
|
+
void import("./components/avatar/Avatar.svelte");
|
|
17
|
+
void import("./components/card/Card.svelte");
|
|
18
|
+
}
|