Skip to content

Commit 6c0cf19

Browse files
committed
Add nicer input
1 parent 69f1068 commit 6c0cf19

File tree

4 files changed

+65
-2
lines changed

4 files changed

+65
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@freenit-framework/core",
3-
"version": "0.0.51",
3+
"version": "0.0.52",
44
"private": false,
55
"author": "Goran Mekić <meka@tilda.center>",
66
"license": "BSD-2-Clause",

src/lib/Input.svelte

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<script lang="ts">
2+
let { label, name, type, value } = $props()
3+
let focused = $state(value.length > 0)
4+
5+
const focus = () => {
6+
focused = true
7+
}
8+
9+
const blur = () => {
10+
if (value.length < 1) {
11+
focused = false
12+
}
13+
}
14+
15+
$effect(() => {
16+
focused = value.length > 0
17+
})
18+
</script>
19+
20+
<div class="form-group" class:focused>
21+
<label class="form-label" for="input">{label}</label>
22+
<input class="input" {name} {type} onfocus={focus} onblur={blur} bind:value />
23+
</div>
24+
25+
<style>
26+
.form-group {
27+
position: relative;
28+
}
29+
30+
.form-label {
31+
position: absolute;
32+
left: 0;
33+
top: 10px;
34+
color: #999;
35+
background-color: #fff0;
36+
z-index: 10;
37+
transition:
38+
transform 150ms ease-out,
39+
font-size 150ms ease-out;
40+
}
41+
42+
.focused .form-label {
43+
transform: translateY(-125%);
44+
font-size: 0.75em;
45+
}
46+
47+
.input {
48+
position: relative;
49+
padding: 12px 0px 5px 0;
50+
width: 100%;
51+
outline: 0;
52+
border: 0;
53+
box-shadow: 0 1px 0 0 #e5e5e5;
54+
transition: box-shadow 150ms ease-out;
55+
56+
&:focus {
57+
box-shadow: 0 2px 0 0 var(--color-primary);
58+
}
59+
}
60+
</style>

src/lib/Profile.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
<div class="root">
1212
<div>ID: {store.user.profile.id || store.user.profile.dn}</div>
1313
<div>Email: {store.user.profile.email}</div>
14-
<div>Active: {store.user.profile.active || store.user.profile.userClass == 'enabled' ? 'yes' : 'no'}</div>
14+
<div>
15+
Active: {store.user.profile.active || store.user.profile.userClass == 'enabled' ? 'yes' : 'no'}
16+
</div>
1517
<div>Admin: {store.user.profile.admin ? 'yes' : 'no'}</div>
1618
</div>
1719

src/lib/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export { default as Input } from './Input.svelte'
12
export { default as LeftPane } from './LeftPane.svelte'
23
export { default as Login } from './Login.svelte'
34
export { default as MenuBar } from './MenuBar.svelte'

0 commit comments

Comments
 (0)