@rogieking/figui3 1.0.36 → 1.0.37
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/example.html +15 -2
- package/fig.css +32 -9
- package/fig.js +64 -11
- package/package.json +1 -1
package/example.html
CHANGED
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
<fig-header>
|
|
17
17
|
<h3>UI3 Components</h3>
|
|
18
18
|
</fig-header>
|
|
19
|
+
<fig-avatar src="https://avatars.githubusercontent.com/u/12345678?v=4"
|
|
20
|
+
name="John Doe"></fig-avatar>
|
|
21
|
+
<fig-avatar name="John Doe"></fig-avatar>
|
|
19
22
|
<fig-content>
|
|
20
23
|
<fig-tabs>
|
|
21
24
|
<fig-tab selected>Tab #1</fig-tab>
|
|
@@ -114,6 +117,11 @@
|
|
|
114
117
|
<fig-input-text type="number"
|
|
115
118
|
value="10"></fig-input-text>
|
|
116
119
|
<br /><br />
|
|
120
|
+
<fig-input-text value=""
|
|
121
|
+
placeholder="Number">
|
|
122
|
+
<span slot="prepend">X</span>
|
|
123
|
+
</fig-input-text>
|
|
124
|
+
<br /><br />
|
|
117
125
|
<fig-field direction="horizontal">
|
|
118
126
|
<label>Field label</label>
|
|
119
127
|
<fig-input-text value=""
|
|
@@ -126,12 +134,15 @@
|
|
|
126
134
|
</fig-field>
|
|
127
135
|
<fig-field>
|
|
128
136
|
<label>Default slider</label>
|
|
129
|
-
<fig-slider
|
|
137
|
+
<fig-slider default="25"
|
|
138
|
+
min="0"
|
|
139
|
+
max="500"></fig-slider>
|
|
130
140
|
</fig-field>
|
|
131
141
|
|
|
132
142
|
<fig-field>
|
|
133
143
|
<label>Number slider (with number input)</label>
|
|
134
144
|
<fig-slider text="true"
|
|
145
|
+
default="50"
|
|
135
146
|
value="50"></fig-slider>
|
|
136
147
|
</fig-field>
|
|
137
148
|
|
|
@@ -151,7 +162,9 @@
|
|
|
151
162
|
|
|
152
163
|
<fig-field>
|
|
153
164
|
<label>Stepper slider</label>
|
|
154
|
-
<fig-slider
|
|
165
|
+
<fig-slider type="stepper"
|
|
166
|
+
value="25"
|
|
167
|
+
default="50"
|
|
155
168
|
step="25">
|
|
156
169
|
<datalist id="markers">
|
|
157
170
|
<option value="0"></option>
|
package/fig.css
CHANGED
|
@@ -841,7 +841,8 @@ fig-tabs,
|
|
|
841
841
|
}
|
|
842
842
|
|
|
843
843
|
/* Avatar */
|
|
844
|
-
|
|
844
|
+
fig-avatar,
|
|
845
|
+
.fig-avatar {
|
|
845
846
|
width: 1.5rem;
|
|
846
847
|
display: inline-grid;
|
|
847
848
|
place-items: center;
|
|
@@ -858,7 +859,8 @@ fig-tabs,
|
|
|
858
859
|
}
|
|
859
860
|
}
|
|
860
861
|
|
|
861
|
-
|
|
862
|
+
fig-avatar img,
|
|
863
|
+
.fig-avatar img {
|
|
862
864
|
position: absolute;
|
|
863
865
|
background: var(--checkerboard);
|
|
864
866
|
width: 1.5rem;
|
|
@@ -867,7 +869,8 @@ fig-tabs,
|
|
|
867
869
|
box-shadow: inset 0 0 0 1px var(--figma-color-bordertranslucent);
|
|
868
870
|
}
|
|
869
871
|
|
|
870
|
-
|
|
872
|
+
fig-avatar::after,
|
|
873
|
+
.fig-avatar::after {
|
|
871
874
|
content: attr(initials);
|
|
872
875
|
}
|
|
873
876
|
|
|
@@ -1098,9 +1101,9 @@ input[type="radio"] {
|
|
|
1098
1101
|
|
|
1099
1102
|
&::after {
|
|
1100
1103
|
content: "";
|
|
1101
|
-
width: 0.
|
|
1102
|
-
height: 0.
|
|
1103
|
-
border-radius:
|
|
1104
|
+
width: 0.375rem;
|
|
1105
|
+
height: 0.375rem;
|
|
1106
|
+
border-radius: 100%;
|
|
1104
1107
|
background-color: var(--figma-color-text-onbrand);
|
|
1105
1108
|
transform: scale(0);
|
|
1106
1109
|
box-shadow: 0px 0 0 0.75px rgba(0, 0, 0, 0.1),
|
|
@@ -1274,8 +1277,26 @@ fig-slider {
|
|
|
1274
1277
|
max-width: 100%;
|
|
1275
1278
|
}
|
|
1276
1279
|
}
|
|
1280
|
+
&[type="stepper"] {
|
|
1281
|
+
.fig-slider-input-container {
|
|
1282
|
+
&::before {
|
|
1283
|
+
display: none;
|
|
1284
|
+
}
|
|
1285
|
+
/* Default tick */
|
|
1286
|
+
&::after {
|
|
1287
|
+
content: "";
|
|
1288
|
+
display: block;
|
|
1289
|
+
width: var(--slider-tick-size);
|
|
1290
|
+
height: var(--slider-tick-size);
|
|
1291
|
+
border-radius: 100%;
|
|
1292
|
+
background: var(--figma-color-icon);
|
|
1293
|
+
position: absolute;
|
|
1294
|
+
left: calc(var(--default) * 100% - var(--slider-tick-size) / 2);
|
|
1295
|
+
top: calc(50% - var(--slider-tick-size) / 2);
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1277
1299
|
|
|
1278
|
-
/* TODO: Delta sizing */
|
|
1279
1300
|
&[type="delta"] {
|
|
1280
1301
|
.fig-slider-input-container {
|
|
1281
1302
|
&::before {
|
|
@@ -1353,6 +1374,7 @@ fig-slider {
|
|
|
1353
1374
|
aspect-ratio: 1;
|
|
1354
1375
|
border: none;
|
|
1355
1376
|
position: relative;
|
|
1377
|
+
z-index: 1;
|
|
1356
1378
|
box-shadow: var(--slider-handle-shadow);
|
|
1357
1379
|
}
|
|
1358
1380
|
|
|
@@ -1420,6 +1442,7 @@ fig-slider {
|
|
|
1420
1442
|
aspect-ratio: 1;
|
|
1421
1443
|
border: none;
|
|
1422
1444
|
position: relative;
|
|
1445
|
+
z-index: 1;
|
|
1423
1446
|
box-shadow: var(--slider-handle-shadow);
|
|
1424
1447
|
}
|
|
1425
1448
|
|
|
@@ -1783,9 +1806,9 @@ fig-input-text {
|
|
|
1783
1806
|
}
|
|
1784
1807
|
|
|
1785
1808
|
& [slot] {
|
|
1786
|
-
padding: 0.25rem 0.5rem;
|
|
1787
|
-
flex: 0;
|
|
1788
1809
|
user-select: none;
|
|
1810
|
+
width: 1.5rem;
|
|
1811
|
+
margin-right: calc(var(--spacer-2) * -1);
|
|
1789
1812
|
color: var(--figma-color-text-secondary);
|
|
1790
1813
|
}
|
|
1791
1814
|
|
package/fig.js
CHANGED
|
@@ -554,6 +554,7 @@ class FigSlider extends HTMLElement {
|
|
|
554
554
|
range: { min: 0, max: 100, step: 1 },
|
|
555
555
|
hue: { min: 0, max: 255, step: 1 },
|
|
556
556
|
delta: { min: -100, max: 100, step: 1 },
|
|
557
|
+
stepper: { min: 0, max: 100, step: 25 },
|
|
557
558
|
opacity: { min: 0, max: 1, step: 0.01, color: "#FF0000" },
|
|
558
559
|
};
|
|
559
560
|
constructor() {
|
|
@@ -700,8 +701,6 @@ class FigInputText extends HTMLElement {
|
|
|
700
701
|
super();
|
|
701
702
|
}
|
|
702
703
|
connectedCallback() {
|
|
703
|
-
const append = this.querySelector("[slot=append]");
|
|
704
|
-
const prepend = this.querySelector("[slot=prepend]");
|
|
705
704
|
this.multiline = this.hasAttribute("multiline") || false;
|
|
706
705
|
this.value = this.getAttribute("value");
|
|
707
706
|
this.type = this.getAttribute("type") || "text";
|
|
@@ -717,17 +716,22 @@ class FigInputText extends HTMLElement {
|
|
|
717
716
|
}
|
|
718
717
|
this.innerHTML = html;
|
|
719
718
|
|
|
720
|
-
if (prepend) {
|
|
721
|
-
prepend.addEventListener("click", this.focus.bind(this));
|
|
722
|
-
this.prepend(prepend);
|
|
723
|
-
}
|
|
724
|
-
if (append) {
|
|
725
|
-
append.addEventListener("click", this.focus.bind(this));
|
|
726
|
-
this.append(append);
|
|
727
|
-
}
|
|
728
|
-
|
|
729
719
|
//child nodes hack
|
|
730
720
|
requestAnimationFrame(() => {
|
|
721
|
+
const append = this.querySelector("[slot=append]");
|
|
722
|
+
const prepend = this.querySelector("[slot=prepend]");
|
|
723
|
+
|
|
724
|
+
console.log(append, prepend);
|
|
725
|
+
|
|
726
|
+
if (prepend) {
|
|
727
|
+
prepend.addEventListener("click", this.focus.bind(this));
|
|
728
|
+
this.prepend(prepend);
|
|
729
|
+
}
|
|
730
|
+
if (append) {
|
|
731
|
+
append.addEventListener("click", this.focus.bind(this));
|
|
732
|
+
this.append(append);
|
|
733
|
+
}
|
|
734
|
+
|
|
731
735
|
this.input = this.querySelector("input,textarea");
|
|
732
736
|
|
|
733
737
|
if (this.getAttribute("min")) {
|
|
@@ -778,6 +782,55 @@ class FigInputText extends HTMLElement {
|
|
|
778
782
|
}
|
|
779
783
|
window.customElements.define("fig-input-text", FigInputText);
|
|
780
784
|
|
|
785
|
+
/* Avatar */
|
|
786
|
+
class FigAvatar extends HTMLElement {
|
|
787
|
+
constructor() {
|
|
788
|
+
super();
|
|
789
|
+
}
|
|
790
|
+
connectedCallback() {
|
|
791
|
+
this.src = this.getAttribute("src");
|
|
792
|
+
this.name = this.getAttribute("name");
|
|
793
|
+
this.initials = this.getInitials(this.name);
|
|
794
|
+
this.setAttribute("initials", this.initials);
|
|
795
|
+
this.setSrc(this.src);
|
|
796
|
+
requestAnimationFrame(() => {
|
|
797
|
+
this.img = this.querySelector("img");
|
|
798
|
+
});
|
|
799
|
+
}
|
|
800
|
+
setSrc(src) {
|
|
801
|
+
this.src = src;
|
|
802
|
+
if (src) {
|
|
803
|
+
this.innerHTML = `<img src="${this.src}" ${
|
|
804
|
+
this.name ? `alt="${this.name}"` : ""
|
|
805
|
+
} />`;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
getInitials(name) {
|
|
809
|
+
return name
|
|
810
|
+
? name
|
|
811
|
+
.split(" ")
|
|
812
|
+
.map((n) => n[0])
|
|
813
|
+
.join("")
|
|
814
|
+
: "";
|
|
815
|
+
}
|
|
816
|
+
static get observedAttributes() {
|
|
817
|
+
return ["src", "href", "name"];
|
|
818
|
+
}
|
|
819
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
820
|
+
this[name] = newValue;
|
|
821
|
+
if (name === "name") {
|
|
822
|
+
this.img.setAttribute("alt", newValue);
|
|
823
|
+
this.name = newValue;
|
|
824
|
+
this.initials = this.getInitials(this.name);
|
|
825
|
+
this.setAttribute("initials", this.initials);
|
|
826
|
+
} else if (name === "src") {
|
|
827
|
+
this.src = newValue;
|
|
828
|
+
this.setSrc(this.src);
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
window.customElements.define("fig-avatar", FigAvatar);
|
|
833
|
+
|
|
781
834
|
/* Form Field */
|
|
782
835
|
class FigField extends HTMLElement {
|
|
783
836
|
constructor() {
|
package/package.json
CHANGED