@hotosm/ui 0.2.0-b4 → 0.2.0-b5

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.
Files changed (54) hide show
  1. package/README.md +98 -106
  2. package/components/header/header.styles.ts +103 -0
  3. package/components/header/header.ts +117 -194
  4. package/components/icons.ts +1 -1
  5. package/components/index.ts +68 -62
  6. package/components/logo/logo.styles.ts +8 -0
  7. package/components/logo/logo.ts +37 -0
  8. package/components/react/Header.ts +16 -0
  9. package/components/react/Logo.ts +15 -0
  10. package/components/react/Toolbar.ts +24 -0
  11. package/components/react/Tracking.ts +17 -0
  12. package/components/react/index.ts +63 -0
  13. package/components/toolbar/toolbar.styles.ts +6 -0
  14. package/components/toolbar/toolbar.ts +100 -57
  15. package/components/tracking/tracking.styles.ts +23 -0
  16. package/components/tracking/tracking.ts +89 -85
  17. package/dist/components/header/header.d.ts +28 -0
  18. package/dist/components/header/header.styles.d.ts +6 -0
  19. package/dist/components/index.d.ts +130 -0
  20. package/dist/components/logo/logo.d.ts +10 -0
  21. package/dist/components/logo/logo.styles.d.ts +2 -0
  22. package/dist/components/react/Tracking.d.ts +2 -0
  23. package/dist/components/react/index.d.ts +62 -0
  24. package/dist/components/toolbar/toolbar.d.ts +20 -0
  25. package/dist/components/toolbar/toolbar.styles.d.ts +2 -0
  26. package/{components → dist/components}/tracking/tracking.d.ts +8 -9
  27. package/dist/components/tracking/tracking.styles.d.ts +2 -0
  28. package/dist/{components.js → hotosm-ui.js} +4013 -3755
  29. package/dist/style.css +1 -1
  30. package/package.json +25 -24
  31. package/theme/hot-sl.css +194 -0
  32. package/theme/hot.css +191 -121
  33. package/theme/logo/hot-logo-icon.svg +1 -0
  34. package/theme/logo/hot-logo-png.png +0 -0
  35. package/theme/logo/hot-logo-text.svg +1 -0
  36. package/components/header/header.d.ts +0 -30
  37. package/components/header/header.js +0 -237
  38. package/components/icons.js +0 -78
  39. package/components/index.d.ts +0 -127
  40. package/components/index.js +0 -127
  41. package/components/toolbar/toolbar.d.ts +0 -24
  42. package/components/toolbar/toolbar.js +0 -121
  43. package/components/tracking/tracking.js +0 -164
  44. package/react/Header.js +0 -14
  45. package/react/Toolbar.js +0 -21
  46. package/react/Tracking.js +0 -15
  47. package/react/index.d.ts +0 -3
  48. package/react/index.js +0 -5
  49. package/theme/logo.png +0 -0
  50. package/theme/sl-custom.css +0 -74
  51. /package/{components → dist/components}/icons.d.ts +0 -0
  52. /package/{react → dist/components/react}/Header.d.ts +0 -0
  53. /package/{react/Toolbar.d.ts → dist/components/react/Logo.d.ts} +0 -0
  54. /package/{react/Tracking.d.ts → dist/components/react/Toolbar.d.ts} +0 -0
@@ -1,121 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import "../../theme/sl-custom.css";
8
- import '@shoelace-style/shoelace/dist/components/button/button.js';
9
- import '@shoelace-style/shoelace/dist/components/button-group/button-group.js';
10
- import '@shoelace-style/shoelace/dist/components/icon/icon.js';
11
- import '@shoelace-style/shoelace/dist/components/tooltip/tooltip.js';
12
- import { LitElement, css, html } from "lit";
13
- import { property } from "lit/decorators.js";
14
- import registerBundledIcons from '../../components/icons';
15
- registerBundledIcons();
16
- // import { cva } from "class-variance-authority";
17
- // const toolbarStyle = cva(
18
- // "some-css-var",
19
- // {
20
- // variants: {
21
- // someProperty: {
22
- // true: "some-css-var",
23
- // false: "some-css-var",
24
- // },
25
- // },
26
- // },
27
- // );
28
- export class Toolbar extends LitElement {
29
- constructor() {
30
- super(...arguments);
31
- this.name = "hot-toolbar";
32
- /** Change the position of the tooltips relative to buttons. */
33
- this.tooltipPosition = "top";
34
- this.undo = (e) => {
35
- // As the original event is also named 'click'
36
- // stop propagation of the original event
37
- e.stopPropagation();
38
- this.dispatchEvent(new Event("undo"));
39
- };
40
- this.redo = (e) => {
41
- e.stopPropagation();
42
- this.dispatchEvent(new Event("redo"));
43
- };
44
- this.bold = (e) => {
45
- e.stopPropagation();
46
- this.dispatchEvent(new Event("bold"));
47
- };
48
- this.italic = (e) => {
49
- e.stopPropagation();
50
- this.dispatchEvent(new Event("italic"));
51
- };
52
- this.underline = (e) => {
53
- e.stopPropagation();
54
- this.dispatchEvent(new Event("underline"));
55
- };
56
- this.alignLeft = (e) => {
57
- e.stopPropagation();
58
- this.dispatchEvent(new Event("leftalign"));
59
- };
60
- this.alignCenter = (e) => {
61
- e.stopPropagation();
62
- this.dispatchEvent(new Event("centeralign"));
63
- };
64
- this.alignRight = (e) => {
65
- e.stopPropagation();
66
- this.dispatchEvent(new Event("rightalign"));
67
- };
68
- }
69
- // class=${toolbarStyle({
70
- // someProperty: this.someProperty,
71
- // })}
72
- render() {
73
- return html `
74
- <div class="button-group-toolbar">
75
- ${this.renderButtonGroup('History', [
76
- { content: 'Undo', icon: 'arrow-counterclockwise', label: 'Undo', action: this.undo },
77
- { content: 'Redo', icon: 'arrow-clockwise', label: 'Redo', action: this.redo }
78
- ])}
79
- ${this.renderButtonGroup('Formatting', [
80
- { content: 'Bold', icon: 'type-bold', label: 'Bold', action: this.bold },
81
- { content: 'Italic', icon: 'type-italic', label: 'Italic', action: this.italic },
82
- { content: 'Underline', icon: 'type-underline', label: 'Underline', action: this.underline }
83
- ])}
84
- ${this.renderButtonGroup('Alignment', [
85
- { content: 'Align Left', icon: 'justify-left', label: 'Align Left', action: this.alignLeft },
86
- { content: 'Align Center', icon: 'justify', label: 'Align Center', action: this.alignCenter },
87
- { content: 'Align Right', icon: 'justify-right', label: 'Align Right', action: this.alignRight }
88
- ])}
89
- </div>
90
- `;
91
- }
92
- renderButtonGroup(label, buttons) {
93
- return html `
94
- <sl-button-group label=${label}>
95
- ${buttons.map(button => this.renderButton(button))}
96
- </sl-button-group>
97
- `;
98
- }
99
- renderButton({ content, icon, label, action }) {
100
- return html `
101
- <sl-tooltip content=${content} placement="${this.tooltipPosition}">
102
- <sl-button @click=${action ?? (() => { })}><sl-icon library="bundled" name=${icon} label=${label}></sl-icon></sl-button>
103
- </sl-tooltip>
104
- `;
105
- }
106
- }
107
- Toolbar.styles = [
108
- css `
109
- @unocss-placeholder;
110
- `,
111
- // unsafeCSS(reset),
112
- ];
113
- __decorate([
114
- property()
115
- ], Toolbar.prototype, "name", void 0);
116
- __decorate([
117
- property({ type: String, attribute: "tooltip-position" })
118
- ], Toolbar.prototype, "tooltipPosition", void 0);
119
- export default Toolbar;
120
- // Define web component
121
- customElements.define("hot-toolbar", Toolbar);
@@ -1,164 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import "../../theme/sl-custom.css";
8
- import '@shoelace-style/shoelace/dist/components/alert/alert.js';
9
- import { LitElement, css, html } from "lit";
10
- import { property, state } from "lit/decorators.js";
11
- import registerBundledIcons from '../../components/icons';
12
- registerBundledIcons();
13
- export class Tracking extends LitElement {
14
- constructor() {
15
- super(...arguments);
16
- this.name = "hot-tracking";
17
- /** The Matomo site id for tracking. */
18
- this.siteId = "";
19
- /** The domains to apply tracking. */
20
- this.domain = "";
21
- /** Force display the banner. */
22
- this.force = false;
23
- this.isOpen = true;
24
- }
25
- render() {
26
- return html `<sl-alert
27
- variant="danger"
28
- ?open=${this.isOpen}
29
- >
30
- <sl-icon id="hot-red-text" library="bundled" slot="icon" name="info-circle"></sl-icon>
31
-
32
- <p id="tracking-header">
33
- About the information we collect
34
- </p>
35
-
36
- <p>
37
- We use cookies and similar technologies to recognize and analyze your visits,
38
- and measure traffic usage and activity. You can learn about how we use the data
39
- about your visit or information you provide reading our
40
- <a
41
- style="color: #d63f3f;"
42
- href="https://www.hotosm.org/privacy"
43
- target="_blank"
44
- rel="noopener noreferrer"
45
- >privacy policy</a>.
46
- By clicking "I Agree", you consent to the use of cookies.
47
- </p>
48
-
49
- <sl-button @click=${(e) => { this._setAgree(e); }}>I Agree</sl-button>
50
- <sl-button @click=${(e) => { this._setDisagree(e); }}>I Do Not Agree</sl-button>
51
- </sl-alert>`;
52
- }
53
- _setAgree(_e) {
54
- // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
55
- const _paq = (window._paq = window._paq || []);
56
- if (_paq.length === 0)
57
- return;
58
- _paq.push(['rememberConsentGiven']);
59
- this.isOpen = false;
60
- localStorage.setItem(`${this.siteId}-matomo-agree`, 'true');
61
- this.dispatchEvent(new Event('agree', { bubbles: true, composed: true }));
62
- }
63
- _setDisagree(_e) {
64
- // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
65
- const _paq = (window._paq = window._paq || []);
66
- if (_paq.length === 0)
67
- return;
68
- _paq.push(['forgetConsentGiven']);
69
- this.isOpen = false;
70
- localStorage.setItem(`${this.siteId}-matomo-agree`, 'false');
71
- this.dispatchEvent(new Event('disagree', { bubbles: true, composed: true }));
72
- }
73
- connectedCallback() {
74
- super.connectedCallback();
75
- // Close and halt execution if wrong domain
76
- if (!this.force && window.location.hostname !== this.domain) {
77
- console.warn(`Matomo init failed. ${window.location.hostname} does not match ${this.domain}.`);
78
- this.isOpen = false;
79
- return;
80
- }
81
- const matomoTrackingId = this.siteId;
82
- // Close and halt execution if siteId or domain not set
83
- if (!this.force && (matomoTrackingId.length === 0 || this.domain.length === 0)) {
84
- console.warn('Matomo init failed. No site id or domains provided.');
85
- this.isOpen = false;
86
- return;
87
- }
88
- // Close and halt execution if already disagreed
89
- const consent = localStorage.getItem(`${this.siteId}-matomo-agree`);
90
- if (consent === 'false') {
91
- this.isOpen = false;
92
- return;
93
- }
94
- // Close prompt only if already agreed, continue
95
- if (consent === 'true') {
96
- this.isOpen = false;
97
- }
98
- console.log(`Setting Matomo tracking for site=${matomoTrackingId} domain=${this.domain}`);
99
- // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
100
- const _paq = (window._paq = window._paq || []);
101
- // tracker methods like "setCustomDimension" should be called before "trackPageView"
102
- _paq.push(['requireConsent']);
103
- _paq.push(['setDomains', [this.domain]]);
104
- _paq.push(['trackPageView']);
105
- _paq.push(['enableLinkTracking']); // Tracks downloads
106
- _paq.push(['trackVisibleContentImpressions']); // Tracks content
107
- (function () {
108
- const u = '//matomo.hotosm.org/';
109
- _paq.push(['setTrackerUrl', u + 'matomo.php']);
110
- _paq.push(['setSiteId', matomoTrackingId]);
111
- const d = document;
112
- const g = d.createElement('script');
113
- const s = d.getElementsByTagName('script')[0];
114
- if (s?.parentNode != null) {
115
- g.async = true;
116
- g.src = u + 'matomo.js';
117
- s.parentNode.insertBefore(g, s);
118
- }
119
- else {
120
- console.warn('Script insertion failed. Parent node is null.');
121
- }
122
- })();
123
- }
124
- }
125
- Tracking.styles = [
126
- css `
127
- @unocss-placeholder;
128
- `,
129
- // Temp styles until UnoCSS setup
130
- css `
131
- #tracking-header {
132
- font-weight: var(--sl-font-weight-bold);
133
- font-size: var(--sl-font-size-large);
134
- text-align: center;
135
- }
136
- sl-alert::part(base) {
137
- position: absolute;
138
- bottom: 20px;
139
- left: 50%;
140
- transform: translateX(-50%);
141
- z-index: 1000;
142
- width: 80vw;
143
- text-align: center;
144
- }
145
- `
146
- ];
147
- __decorate([
148
- property()
149
- ], Tracking.prototype, "name", void 0);
150
- __decorate([
151
- property({ type: String, attribute: "site-id" })
152
- ], Tracking.prototype, "siteId", void 0);
153
- __decorate([
154
- property({ type: String })
155
- ], Tracking.prototype, "domain", void 0);
156
- __decorate([
157
- property({ type: Boolean })
158
- ], Tracking.prototype, "force", void 0);
159
- __decorate([
160
- state()
161
- ], Tracking.prototype, "isOpen", void 0);
162
- export default Tracking;
163
- // Define web component
164
- customElements.define("hot-tracking", Tracking);
package/react/Header.js DELETED
@@ -1,14 +0,0 @@
1
- // @ts-ignore
2
- import * as React from 'react';
3
- import { createComponent } from '@lit/react';
4
- import Header from '../components/header/header';
5
- const reactWrapper = createComponent({
6
- tagName: 'hot-header',
7
- elementClass: Header,
8
- react: React,
9
- events: {
10
- onLogin: 'login',
11
- },
12
- displayName: 'hot-header'
13
- });
14
- export default reactWrapper;
package/react/Toolbar.js DELETED
@@ -1,21 +0,0 @@
1
- // @ts-ignore
2
- import * as React from 'react';
3
- import { createComponent } from '@lit/react';
4
- import Toolbar from '../components/toolbar/toolbar';
5
- const reactWrapper = createComponent({
6
- tagName: 'hot-toolbar',
7
- elementClass: Toolbar,
8
- react: React,
9
- events: {
10
- onUndoClick: 'undo',
11
- onRedoClick: 'redo',
12
- onBoldClick: 'bold',
13
- onItalicClick: 'italic',
14
- onUnderlineClick: 'underline',
15
- onLeftalignClick: 'leftalign',
16
- onCenteralignClick: 'centeralign',
17
- onRightalignClick: 'rightalign',
18
- },
19
- displayName: 'hot-toolbar'
20
- });
21
- export default reactWrapper;
package/react/Tracking.js DELETED
@@ -1,15 +0,0 @@
1
- // @ts-ignore
2
- import * as React from 'react';
3
- import { createComponent } from '@lit/react';
4
- import Tracking from '../components/tracking/tracking';
5
- const reactWrapper = createComponent({
6
- tagName: 'hot-tracking',
7
- elementClass: Tracking,
8
- react: React,
9
- events: {
10
- onAgree: 'agree',
11
- onDisagree: 'disagree',
12
- },
13
- displayName: 'hot-tracking'
14
- });
15
- export default reactWrapper;
package/react/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export { default as Header } from './Header';
2
- export { default as Toolbar } from './Toolbar';
3
- export { default as Tracking } from './Tracking';
package/react/index.js DELETED
@@ -1,5 +0,0 @@
1
- // Index to import all components together
2
- // import '@hotosm/ui/react';
3
- export { default as Header } from './Header';
4
- export { default as Toolbar } from './Toolbar';
5
- export { default as Tracking } from './Tracking';
package/theme/logo.png DELETED
Binary file
@@ -1,74 +0,0 @@
1
- /* Custom theme for Shoelace components, using HOT CSS */
2
-
3
- @import './hot.css';
4
- /* https://github.com/shoelace-style/shoelace/blob/next/src/themes/light.css */
5
- @import '@shoelace-style/shoelace/dist/themes/light.css';
6
- /* @import '@shoelace-style/shoelace/dist/themes/dark.css'; */
7
- /* https://shoelace.style/getting-started/themes#detecting-the-users-color-scheme-preference */
8
-
9
- @unocss preflights;
10
- @unocss default;
11
-
12
- :root,
13
- :host,
14
- .sl-theme-light {
15
- --sl-color-primary-50: var(--hot-red-50);
16
- --sl-color-primary-100: var(--hot-red-100);
17
- --sl-color-primary-200: var(--hot-red-200);
18
- --sl-color-primary-300: var(--hot-red-300);
19
- --sl-color-primary-400: var(--hot-red-400);
20
- --sl-color-primary-500: var(--hot-red-500);
21
- --sl-color-primary-600: var(--hot-red-600);
22
- --sl-color-primary-700: var(--hot-red-700);
23
- --sl-color-primary-800: var(--hot-red-800);
24
- --sl-color-primary-900: var(--hot-red-900);
25
- --sl-color-primary-950: var(--hot-red-900);
26
-
27
- --sl-color-danger-50: var(--hot-darkred-50);
28
- --sl-color-danger-100: var(--hot-darkred-100);
29
- --sl-color-danger-200: var(--hot-darkred-200);
30
- --sl-color-danger-300: var(--hot-darkred-300);
31
- --sl-color-danger-400: var(--hot-darkred-400);
32
- --sl-color-danger-500: var(--hot-darkred-500);
33
- --sl-color-danger-600: var(--hot-darkred-600);
34
- --sl-color-danger-700: var(--hot-darkred-700);
35
- --sl-color-danger-800: var(--hot-darkred-800);
36
- --sl-color-danger-900: var(--hot-darkred-900);
37
- --sl-color-danger-950: var(--hot-darkred-900);
38
-
39
- --sl-color-neutral-50: var(--hot-gray-50);
40
- --sl-color-neutral-100: var(--hot-gray-100);
41
- --sl-color-neutral-200: var(--hot-gray-200);
42
- --sl-color-neutral-300: var(--hot-gray-300);
43
- --sl-color-neutral-400: var(--hot-gray-400);
44
- --sl-color-neutral-500: var(--hot-gray-500);
45
- --sl-color-neutral-600: var(--hot-gray-600);
46
- --sl-color-neutral-700: var(--hot-gray-700);
47
- --sl-color-neutral-800: var(--hot-gray-800);
48
- --sl-color-neutral-900: var(--hot-gray-900);
49
- --sl-color-neutral-950: var(--hot-gray-900);
50
-
51
- --sl-color-success-50: var(--hot-green-50);
52
- --sl-color-success-100: var(--hot-green-100);
53
- --sl-color-success-200: var(--hot-green-200);
54
- --sl-color-success-300: var(--hot-green-300);
55
- --sl-color-success-400: var(--hot-green-400);
56
- --sl-color-success-500: var(--hot-green-500);
57
- --sl-color-success-600: var(--hot-green-600);
58
- --sl-color-success-700: var(--hot-green-700);
59
- --sl-color-success-800: var(--hot-green-800);
60
- --sl-color-success-900: var(--hot-green-900);
61
- --sl-color-success-950: var(--hot-green-900);
62
-
63
- --sl-color-warning-50: var(--hot-yellow-50);
64
- --sl-color-warning-100: var(--hot-yellow-100);
65
- --sl-color-warning-200: var(--hot-yellow-200);
66
- --sl-color-warning-300: var(--hot-yellow-300);
67
- --sl-color-warning-400: var(--hot-yellow-400);
68
- --sl-color-warning-500: var(--hot-yellow-500);
69
- --sl-color-warning-600: var(--hot-yellow-600);
70
- --sl-color-warning-700: var(--hot-yellow-700);
71
- --sl-color-warning-800: var(--hot-yellow-800);
72
- --sl-color-warning-900: var(--hot-yellow-900);
73
- --sl-color-warning-950: var(--hot-yellow-900);
74
- }
File without changes
File without changes