@alegendstale/holly-components 0.2.8 → 0.2.10

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 (53) hide show
  1. package/dist/components/absolute-container/absolute-container.js +113 -91
  2. package/dist/components/absolute-container/absolute-container.stories.js +36 -0
  3. package/dist/components/absolute-container/index.js +1 -1
  4. package/dist/components/bottom-sheet/bottom-sheet.js +415 -308
  5. package/dist/components/bottom-sheet/bottom-sheet.stories.js +43 -0
  6. package/dist/components/bottom-sheet/bottom-sheet.test.js +15 -0
  7. package/dist/components/bottom-sheet/index.js +1 -1
  8. package/dist/components/canvas/canvas-base.d.ts +2 -1
  9. package/dist/components/canvas/canvas-base.d.ts.map +1 -1
  10. package/dist/components/canvas/canvas-base.js +56 -44
  11. package/dist/components/canvas/canvas-gradient.d.ts.map +1 -1
  12. package/dist/components/canvas/canvas-gradient.js +61 -45
  13. package/dist/components/canvas/canvas-image.js +158 -111
  14. package/dist/components/canvas/index.js +2 -2
  15. package/dist/components/carousel-scroller/carousel-scroller.js +133 -121
  16. package/dist/components/carousel-scroller/carousel-scroller.stories.js +40 -0
  17. package/dist/components/carousel-scroller/index.js +1 -1
  18. package/dist/components/color-palette/color-palette-utils.d.ts.map +1 -1
  19. package/dist/components/color-palette/color-palette-utils.js +105 -40
  20. package/dist/components/color-palette/color-palette.js +429 -337
  21. package/dist/components/color-palette/component/color-palette-component.js +184 -142
  22. package/dist/components/color-palette/component/color-palette-component.stories.js +74 -0
  23. package/dist/components/color-palette/component/index.js +1 -0
  24. package/dist/components/color-palette/editor/color-palette-editor.js +702 -591
  25. package/dist/components/color-palette/editor/color-palette-editor.stories.js +39 -0
  26. package/dist/components/color-palette/editor/index.js +1 -0
  27. package/dist/components/color-palette/index.js +5 -7
  28. package/dist/components/color-palette/item/color-palette-item-edit.js +114 -87
  29. package/dist/components/color-palette/item/color-palette-item.js +155 -140
  30. package/dist/components/color-palette/item/index.js +2 -0
  31. package/dist/components/color-palette/menu/color-palette-menu.js +241 -217
  32. package/dist/components/color-palette/menu/color-palette-reorder.js +117 -103
  33. package/dist/components/color-palette/menu/index.js +2 -0
  34. package/dist/components/color-palette/storybook/color-palette-invalid.stories.js +90 -0
  35. package/dist/components/color-palette/storybook/color-palette-valid.stories.js +295 -0
  36. package/dist/components/color-palette/storybook/color-palette.stories.js +76 -0
  37. package/dist/components/tool-tip/Tooltip2.js +103 -0
  38. package/dist/components/tool-tip/index.js +1 -1
  39. package/dist/components/tool-tip/tool-tip.d.ts +1 -0
  40. package/dist/components/tool-tip/tool-tip.d.ts.map +1 -1
  41. package/dist/components/tool-tip/tool-tip.js +125 -102
  42. package/dist/components/tool-tip/tool-tip.stories.js +30 -0
  43. package/dist/index.js +6 -14
  44. package/dist/utils/EventEmitter.js +23 -23
  45. package/dist/utils/basicUtils.d.ts +2 -0
  46. package/dist/utils/basicUtils.d.ts.map +1 -1
  47. package/dist/utils/basicUtils.js +149 -23
  48. package/dist/utils/dragDropUtils.js +121 -0
  49. package/dist/utils/generateUtils.js +73 -39
  50. package/dist/utils/types.d.ts +1 -1
  51. package/dist/utils/types.d.ts.map +1 -1
  52. package/dist/utils/types.js +1 -0
  53. package/package.json +2 -3
@@ -0,0 +1,121 @@
1
+ export class DragDrop {
2
+ constructor(dropzones, draggables, onDrop) {
3
+ this.dropzones = dropzones;
4
+ this.draggables = draggables;
5
+ this.result = { beforeElement: null, insertedElement: null, afterElement: null, order: this.draggables };
6
+ this.onDrop = onDrop;
7
+ this.load();
8
+ }
9
+ dragStart(draggable, e) {
10
+ draggable.classList.toggle('is-dragging', true);
11
+ }
12
+ dragOver(dropzone, e) {
13
+ if (e.dataTransfer) {
14
+ const hasElement = Array.from(e.dataTransfer.items).some((item) => {
15
+ return item.kind !== 'element';
16
+ });
17
+ // Return early if element being dragged is not an element
18
+ if (hasElement)
19
+ return;
20
+ }
21
+ e.preventDefault();
22
+ this.result.beforeElement = this.getDragBeforeElement(e.clientX);
23
+ this.result.insertedElement = this.getDraggingElement();
24
+ this.result.afterElement = this.getDragAfterElement(e.clientX);
25
+ const insertedIndex = this.draggables.indexOf(this.result.insertedElement);
26
+ // If at the end of draggables
27
+ if (this.result.afterElement === null) {
28
+ // Append element
29
+ dropzone.appendChild(this.result.insertedElement);
30
+ // Remove element from order
31
+ this.result.order.splice(insertedIndex, 1);
32
+ // Add to end of order
33
+ this.result.order.push(this.result.insertedElement);
34
+ }
35
+ else {
36
+ // Place element between
37
+ dropzone.insertBefore(this.result.insertedElement, this.result.afterElement);
38
+ // Remove element from order
39
+ this.result.order.splice(insertedIndex, 1);
40
+ // Get the after index, post element removal
41
+ const afterIndex = this.draggables.indexOf(this.result.afterElement);
42
+ // Insert the element before the after index
43
+ this.result.order.splice(afterIndex, 0, this.result.insertedElement);
44
+ }
45
+ }
46
+ dragEnd(draggable, e) {
47
+ draggable.classList.toggle('is-dragging', false);
48
+ this.onDrop(e, this.result);
49
+ this.result = { beforeElement: null, insertedElement: null, afterElement: null, order: this.draggables };
50
+ }
51
+ load() {
52
+ for (let draggable of this.draggables) {
53
+ // Important, so that all types of elements can be dragged, including divs & spans
54
+ draggable.setAttribute('draggable', "true");
55
+ draggable.addEventListener("dragstart", (e) => this.dragStart(draggable, e));
56
+ draggable.addEventListener("dragend", (e) => this.dragEnd(draggable, e));
57
+ }
58
+ for (let dropzone of this.dropzones) {
59
+ dropzone.addEventListener("dragover", (e) => this.dragOver(dropzone, e));
60
+ }
61
+ }
62
+ unload() {
63
+ for (let draggable of this.draggables) {
64
+ draggable.removeEventListener('dragstart', (e) => this.dragStart(draggable, e));
65
+ draggable.removeEventListener('dragend', (e) => this.dragEnd(draggable, e));
66
+ }
67
+ for (let dropzone of this.dropzones) {
68
+ dropzone.removeEventListener('dragover', (e) => this.dragOver(dropzone, e));
69
+ }
70
+ }
71
+ /**
72
+ * @returns The element which is being dragged
73
+ */
74
+ getDraggingElement() {
75
+ return this.draggables.filter((draggable) => draggable.classList.contains('is-dragging'))[0];
76
+ }
77
+ /**
78
+ * @returns All draggable elements not being dragged
79
+ */
80
+ getDraggableElements() {
81
+ return this.draggables.filter((draggable) => !draggable.classList.contains('is-dragging'));
82
+ }
83
+ /**
84
+ * Gets the closest element before the dragged element
85
+ */
86
+ getDragBeforeElement(x) {
87
+ return this.getDraggableElements().reduce((closest, child) => {
88
+ const rect = child.getBoundingClientRect();
89
+ const leftPosition = x - rect.left;
90
+ const halfChildWidth = rect.width / 2;
91
+ const offset = leftPosition - halfChildWidth;
92
+ // Return the closest element to the right of the cursor
93
+ if (offset > 0 && offset < closest.offset)
94
+ return { offset, element: child };
95
+ else
96
+ return closest;
97
+ },
98
+ // Initial closest value
99
+ { offset: Number.POSITIVE_INFINITY, element: null })
100
+ .element;
101
+ }
102
+ /**
103
+ * Gets the closest element after the dragged element
104
+ */
105
+ getDragAfterElement(x) {
106
+ return this.getDraggableElements().reduce((closest, child) => {
107
+ const rect = child.getBoundingClientRect();
108
+ const leftPosition = x - rect.left;
109
+ const halfChildWidth = rect.width / 2;
110
+ const offset = leftPosition - halfChildWidth;
111
+ // Return the closest element to the left of the cursor
112
+ if (offset < 0 && offset > closest.offset)
113
+ return { offset, element: child };
114
+ else
115
+ return closest;
116
+ },
117
+ // Initial closest value
118
+ { offset: Number.NEGATIVE_INFINITY, element: null })
119
+ .element;
120
+ }
121
+ }
@@ -1,40 +1,74 @@
1
- import o from "colorsea";
2
- var M = /* @__PURE__ */ ((s) => (s.Complimentary = "Complimentary", s.Monochromatic = "Monochromatic", s.Analogous = "Analogous", s.Triadic = "Triadic", s.Tetradic = "Tetradic", s.Random = "Random", s))(M || {});
3
- function B(s, c = { baseColor: o.random() }) {
4
- let { baseColor: e, settings: a } = c;
5
- e || (e = o.random());
6
- let r = [];
7
- switch (s) {
8
- case "Complimentary":
9
- r = [e.hex(), e.complement().hex()], a && (a.aliases = ["Base", "Complimentary Color"]);
10
- break;
11
- case "Monochromatic":
12
- const n = e.lighten(20), h = e.lighten(10), l = e.darken(10), d = e.darken(20);
13
- r = [n.hex(), h.hex(), e.hex(), l.hex(), d.hex()], a && (a.aliases = ["Lightest", "Lighter", "Base", "Darker", "Darkest"]);
14
- break;
15
- case "Analogous":
16
- const x = e.adjustHue(-25), m = e.adjustHue(25);
17
- r = [x.hex(), e.hex(), m.hex()], a && (a.aliases = ["Analogous East", "Base", "Analogous West"]);
18
- break;
19
- case "Triadic":
20
- const u = e.spin(120), g = e.spin(240);
21
- r = [e.hex(), u.hex(), g.hex()], a && (a.aliases = ["Triadic First", "Base", "Triadic Third"]);
22
- break;
23
- case "Tetradic":
24
- const p = e.spin(90), T = e.spin(180), k = e.spin(270);
25
- r = [e.hex(), p.hex(), T.hex(), k.hex()], a && (a.aliases = ["Base", "Tetradic Second", "Tetradic Third", "Tetradic Fourth"]);
26
- break;
27
- case "Random":
28
- const f = Math.max(Math.round(Math.random() * 10), 2);
29
- let t = [];
30
- for (let i = 0; i < f; i++)
31
- t.push(o.random().hex());
32
- r = t, a && (a.aliases = []);
33
- break;
34
- }
35
- return { colors: r, settings: a };
1
+ import colorsea from "colorsea";
2
+ export var Combination;
3
+ (function (Combination) {
4
+ Combination["Complimentary"] = "Complimentary";
5
+ Combination["Monochromatic"] = "Monochromatic";
6
+ Combination["Analogous"] = "Analogous";
7
+ Combination["Triadic"] = "Triadic";
8
+ Combination["Tetradic"] = "Tetradic";
9
+ Combination["Random"] = "Random";
10
+ })(Combination || (Combination = {}));
11
+ /**
12
+ * Generate colors based on color theory
13
+ * @param baseColor Initial color to generate the rest from
14
+ * @param combination The type of color theory combination to use
15
+ * @param settings The settings for the palette
16
+ * @returns Generated colors & settings
17
+ */
18
+ export function generateColors(combination, optional = { baseColor: colorsea.random() }) {
19
+ let { baseColor, settings } = optional;
20
+ // Never called because baseColor is set by default in parameters
21
+ if (!baseColor)
22
+ baseColor = colorsea.random();
23
+ let colors = [];
24
+ switch (combination) {
25
+ case Combination.Complimentary:
26
+ colors = [baseColor.hex(), baseColor.complement().hex()];
27
+ if (settings)
28
+ settings.aliases = ['Base', 'Complimentary Color'];
29
+ break;
30
+ case Combination.Monochromatic:
31
+ const lightest = baseColor.lighten(20);
32
+ const lighter = baseColor.lighten(10);
33
+ const darker = baseColor.darken(10);
34
+ const darkest = baseColor.darken(20);
35
+ colors = [lightest.hex(), lighter.hex(), baseColor.hex(), darker.hex(), darkest.hex()];
36
+ if (settings)
37
+ settings.aliases = ['Lightest', 'Lighter', 'Base', 'Darker', 'Darkest'];
38
+ break;
39
+ case Combination.Analogous:
40
+ const east = baseColor.adjustHue(-25);
41
+ const west = baseColor.adjustHue(25);
42
+ colors = [east.hex(), baseColor.hex(), west.hex()];
43
+ if (settings)
44
+ settings.aliases = ['Analogous East', 'Base', 'Analogous West'];
45
+ break;
46
+ case Combination.Triadic:
47
+ const hex120 = baseColor.spin(120);
48
+ const hex240 = baseColor.spin(240);
49
+ colors = [baseColor.hex(), hex120.hex(), hex240.hex()];
50
+ if (settings)
51
+ settings.aliases = ['Triadic First', 'Base', 'Triadic Third'];
52
+ break;
53
+ case Combination.Tetradic:
54
+ const hex90 = baseColor.spin(90);
55
+ const hex180 = baseColor.spin(180);
56
+ const hex270 = baseColor.spin(270);
57
+ colors = [baseColor.hex(), hex90.hex(), hex180.hex(), hex270.hex()];
58
+ if (settings)
59
+ settings.aliases = ['Base', 'Tetradic Second', 'Tetradic Third', 'Tetradic Fourth'];
60
+ break;
61
+ case Combination.Random:
62
+ // Clamp to a minimum value of 2
63
+ const randomNumber = Math.max(Math.round(Math.random() * 10), 2);
64
+ let randomColors = [];
65
+ for (let i = 0; i < randomNumber; i++) {
66
+ randomColors.push(colorsea.random().hex());
67
+ }
68
+ colors = randomColors;
69
+ if (settings)
70
+ settings.aliases = [];
71
+ break;
72
+ }
73
+ return { colors, settings };
36
74
  }
37
- export {
38
- M as Combination,
39
- B as generateColors
40
- };
@@ -1,4 +1,4 @@
1
- type client = {
1
+ export type client = {
2
2
  x: number;
3
3
  y: number;
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,GAAG;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAA;CACT,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAA;CACT,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "private": false,
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "name": "@alegendstale/holly-components",
5
5
  "description": "Reusable UI components created using lit",
6
6
  "type": "module",
@@ -39,8 +39,7 @@
39
39
  "dependencies": {
40
40
  "colorsea": "^1.2.2",
41
41
  "lucide": "^0.471.0",
42
- "quantize": "^1.0.2",
43
- "validate-color": "^2.2.4"
42
+ "quantize": "^1.0.2"
44
43
  },
45
44
  "devDependencies": {
46
45
  "@chromatic-com/storybook": "^1.7.0",