@ratiosolver/flick 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.
@@ -0,0 +1,90 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Settings } from "./settings";
11
+ import { Connection } from './connection';
12
+ export class User {
13
+ constructor(username) {
14
+ this.username = username;
15
+ }
16
+ }
17
+ /**
18
+ * Singleton class that manages the current user.
19
+ */
20
+ export class CurrentUser {
21
+ constructor() {
22
+ this.user = null;
23
+ this.user_listeners = new Set();
24
+ }
25
+ static get_instance() {
26
+ if (!CurrentUser.instance)
27
+ CurrentUser.instance = new CurrentUser();
28
+ return CurrentUser.instance;
29
+ }
30
+ /**
31
+ * Logs in a user.
32
+ *
33
+ * @param username Username.
34
+ * @param password Password.
35
+ * @param remember_input Whether to remember the input.
36
+ * @returns Whether the login was successful.
37
+ */
38
+ login(username_1, password_1) {
39
+ return __awaiter(this, arguments, void 0, function* (username, password, remember_input = false) {
40
+ const response = yield fetch(Settings.get_instance().get_host() + '/login', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ username: username, password: password }) });
41
+ if (response.ok) { // Login successful
42
+ const data = yield response.json();
43
+ if (remember_input)
44
+ localStorage.setItem('token', data.token);
45
+ Connection.get_instance().connect(data.token);
46
+ return true;
47
+ }
48
+ else { // Login failed
49
+ return false;
50
+ }
51
+ });
52
+ }
53
+ /**
54
+ * Gets the current user.
55
+ *
56
+ * @returns Current user.
57
+ * @returns null if no user is connected.
58
+ */
59
+ get_user() { return this.user; }
60
+ connected(user) {
61
+ this.user = user;
62
+ for (const listener of this.user_listeners) {
63
+ listener.connected(user);
64
+ }
65
+ }
66
+ logged_out() {
67
+ this.user = null;
68
+ localStorage.removeItem('token');
69
+ for (const listener of this.user_listeners) {
70
+ listener.logged_out();
71
+ }
72
+ }
73
+ /**
74
+ * Adds a user listener.
75
+ *
76
+ * @param listener Listener to add.
77
+ */
78
+ add_user_listener(listener) {
79
+ this.user_listeners.add(listener);
80
+ }
81
+ /**
82
+ * Removes a user listener.
83
+ *
84
+ * @param listener Listener to remove.
85
+ */
86
+ remove_user_listener(listener) {
87
+ this.user_listeners.delete(listener);
88
+ }
89
+ }
90
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/utils/user.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,OAAO,IAAI;IAIf,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IAMtB;QAHQ,SAAI,GAAgB,IAAI,CAAC;QACzB,mBAAc,GAAsB,IAAI,GAAG,EAAE,CAAC;IAE9B,CAAC;IAEzB,MAAM,CAAC,YAAY;QACjB,IAAI,CAAC,WAAW,CAAC,QAAQ;YACvB,WAAW,CAAC,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAC3C,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED;;;;;;;OAOG;IACG,KAAK;6DAAC,QAAgB,EAAE,QAAgB,EAAE,iBAA0B,KAAK;YAC7E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACnN,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB;gBACpC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,cAAc;oBAChB,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5C,UAAU,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,CAAC,CAAC,eAAe;gBACtB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KAAA;IAED;;;;;OAKG;IACH,QAAQ,KAAkB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7C,SAAS,CAAC,IAAU;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IAC3E,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,QAAsB;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,QAAsB;QACzC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { ButtonComponent, Component } from '../app';
2
+ /**
3
+ * Button to log in.
4
+ */
5
+ export declare class LogInButton extends ButtonComponent<void> {
6
+ constructor();
7
+ }
8
+ /**
9
+ * Button to log out.
10
+ */
11
+ export declare class LogOutButton extends ButtonComponent<void> {
12
+ constructor();
13
+ }
14
+ /**
15
+ * Modal to log in.
16
+ */
17
+ export declare class LogInModal extends Component<void, HTMLDivElement> {
18
+ private username_input;
19
+ private password_input;
20
+ private remember_input;
21
+ constructor();
22
+ }
@@ -0,0 +1,132 @@
1
+ import { ButtonComponent, Component } from '../app';
2
+ import { CurrentUser } from './user';
3
+ /**
4
+ * Button to log in.
5
+ */
6
+ export class LogInButton extends ButtonComponent {
7
+ constructor() {
8
+ super();
9
+ this.element.type = 'button';
10
+ this.element.classList.add('btn', 'btn-primary');
11
+ this.element.setAttribute('data-bs-toggle', 'modal');
12
+ this.element.setAttribute('data-bs-target', '#loginModal');
13
+ this.element.textContent = 'Log In';
14
+ }
15
+ }
16
+ /**
17
+ * Button to log out.
18
+ */
19
+ export class LogOutButton extends ButtonComponent {
20
+ constructor() {
21
+ super();
22
+ this.element.type = 'button';
23
+ this.element.classList.add('btn', 'btn-primary');
24
+ this.element.textContent = 'Log Out';
25
+ this.element.addEventListener('click', () => CurrentUser.get_instance().logged_out());
26
+ }
27
+ }
28
+ /**
29
+ * Modal to log in.
30
+ */
31
+ export class LogInModal extends Component {
32
+ constructor() {
33
+ super(undefined, document.createElement('div'));
34
+ this.username_input = '';
35
+ this.password_input = '';
36
+ this.remember_input = false;
37
+ this.element.classList.add('modal', 'fade');
38
+ this.element.id = 'loginModal';
39
+ this.element.setAttribute('tabindex', '-1');
40
+ this.element.setAttribute('aria-labelledby', 'loginModalLabel');
41
+ this.element.setAttribute('aria-hidden', 'true');
42
+ const dialog = document.createElement('div');
43
+ dialog.classList.add('modal-dialog');
44
+ const content = document.createElement('div');
45
+ content.classList.add('modal-content');
46
+ const header = document.createElement('div');
47
+ header.classList.add('modal-header');
48
+ const title = document.createElement('h5');
49
+ title.classList.add('modal-title');
50
+ title.id = 'loginModalLabel';
51
+ title.textContent = 'Log In';
52
+ header.appendChild(title);
53
+ const close_button = document.createElement('button');
54
+ close_button.type = 'button';
55
+ close_button.classList.add('btn-close');
56
+ close_button.setAttribute('data-bs-dismiss', 'modal');
57
+ close_button.setAttribute('aria-label', 'Close');
58
+ header.appendChild(close_button);
59
+ content.appendChild(header);
60
+ const body = document.createElement('div');
61
+ body.classList.add('modal-body');
62
+ const form = document.createElement('form');
63
+ form.addEventListener('submit', (event) => {
64
+ event.preventDefault();
65
+ CurrentUser.get_instance().login(this.username_input, this.password_input);
66
+ });
67
+ const username_group = document.createElement('div');
68
+ username_group.classList.add('form-floating');
69
+ const username_input = document.createElement('input');
70
+ username_input.type = 'email';
71
+ username_input.classList.add('form-control');
72
+ username_input.id = 'username';
73
+ username_input.placeholder = 'Username';
74
+ username_input.required = true;
75
+ username_input.addEventListener('input', () => this.username_input = username_input.value);
76
+ username_group.appendChild(username_input);
77
+ const username_label = document.createElement('label');
78
+ username_label.htmlFor = 'username';
79
+ username_label.textContent = 'Username';
80
+ username_group.appendChild(username_label);
81
+ form.appendChild(username_group);
82
+ const password_group = document.createElement('div');
83
+ password_group.classList.add('form-floating');
84
+ const password_input = document.createElement('input');
85
+ password_input.type = 'password';
86
+ password_input.classList.add('form-control');
87
+ password_input.id = 'password';
88
+ password_input.placeholder = 'Password';
89
+ password_input.required = true;
90
+ password_input.addEventListener('input', () => this.password_input = password_input.value);
91
+ password_group.appendChild(password_input);
92
+ const password_label = document.createElement('label');
93
+ password_label.htmlFor = 'password';
94
+ password_label.textContent = 'Password';
95
+ password_group.appendChild(password_label);
96
+ form.appendChild(password_group);
97
+ const remember_group = document.createElement('div');
98
+ remember_group.classList.add('form-check');
99
+ const remember_input = document.createElement('input');
100
+ remember_input.type = 'checkbox';
101
+ remember_input.classList.add('form-check-input');
102
+ remember_input.id = 'remember';
103
+ remember_input.addEventListener('input', () => this.remember_input = remember_input.checked);
104
+ remember_group.appendChild(remember_input);
105
+ const remember_label = document.createElement('label');
106
+ remember_label.classList.add('form-check-label');
107
+ remember_label.htmlFor = 'remember';
108
+ remember_label.textContent = 'Remember me';
109
+ remember_group.appendChild(remember_label);
110
+ form.appendChild(remember_group);
111
+ body.appendChild(form);
112
+ content.appendChild(body);
113
+ const footer = document.createElement('div');
114
+ footer.classList.add('modal-footer');
115
+ const close = document.createElement('button');
116
+ close.type = 'button';
117
+ close.classList.add('btn', 'btn-secondary');
118
+ close.setAttribute('data-bs-dismiss', 'modal');
119
+ close.textContent = 'Close';
120
+ footer.appendChild(close);
121
+ const submit = document.createElement('button');
122
+ submit.type = 'submit';
123
+ submit.classList.add('btn', 'btn-primary');
124
+ submit.textContent = 'Log In';
125
+ submit.addEventListener('click', () => CurrentUser.get_instance().login(this.username_input, this.password_input, this.remember_input));
126
+ footer.appendChild(submit);
127
+ content.appendChild(footer);
128
+ dialog.appendChild(content);
129
+ this.element.appendChild(dialog);
130
+ }
131
+ }
132
+ //# sourceMappingURL=user_components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_components.js","sourceRoot":"","sources":["../../src/utils/user_components.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@ratiosolver/flick",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "description": "A tiny and focused UI framework designed for clarity and speed",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/ratioSolver/Flick.git"
11
+ },
12
+ "keywords": [
13
+ "ui",
14
+ "framework",
15
+ "component",
16
+ "reactive",
17
+ "lightweight"
18
+ ],
19
+ "author": "ratioSolver",
20
+ "license": "Apache-2.0",
21
+ "bugs": {
22
+ "url": "https://github.com/ratioSolver/Flick/issues"
23
+ },
24
+ "homepage": "https://github.com/ratioSolver/Flick#readme",
25
+ "files": [
26
+ "/dist"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc"
30
+ },
31
+ "devDependencies": {
32
+ "typescript": "^5.7.3"
33
+ },
34
+ "dependencies": {
35
+ "bootstrap": "^5.3.3"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public"
39
+ }
40
+ }