magick-components 0.0.0-stage → 0.1.0
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/LICENSE.txt +89 -0
- package/README.md +353 -2
- package/fonts/FrankRuhlLibre-Bold-letters.woff2 +0 -0
- package/fonts/FrankRuhlLibre-OFL.txt +105 -0
- package/fonts/NotoSerif-BoldItalic-compass.woff2 +0 -0
- package/fonts/NotoSerif-Italic-latin1.woff2 +0 -0
- package/fonts/NotoSerif-OFL.txt +93 -0
- package/fonts/SOURCES.md +35 -0
- package/fonts/gd-hall.css +3 -0
- package/lib/astrology/Kamea.d.ts +75 -0
- package/lib/astrology/Kamea.js +73 -0
- package/lib/astrology/MercuryWidget.d.ts +21 -0
- package/lib/astrology/MercuryWidget.js +80 -0
- package/lib/astrology/Moon.d.ts +32 -0
- package/lib/astrology/Moon.js +39 -0
- package/lib/astrology/MoonWidget.d.ts +20 -0
- package/lib/astrology/MoonWidget.js +63 -0
- package/lib/astrology/PlanetarySpirit.d.ts +103 -0
- package/lib/astrology/PlanetarySpirit.js +102 -0
- package/lib/astrology/mercuryRetrograde.d.ts +20 -0
- package/lib/astrology/mercuryRetrograde.js +80 -0
- package/lib/astrology/moonPath.d.ts +20 -0
- package/lib/astrology/moonPath.js +45 -0
- package/lib/chakras/Chakras.d.ts +34 -0
- package/lib/chakras/Chakras.js +149 -0
- package/lib/cssString.d.ts +5 -0
- package/lib/cssString.js +7 -0
- package/lib/drawingVersions.d.ts +29 -0
- package/lib/drawingVersions.js +15 -0
- package/lib/enochian/Tablet.d.ts +17 -0
- package/lib/enochian/Tablet.js +24 -0
- package/lib/enochian/tabletSigils.d.ts +46 -0
- package/lib/enochian/tabletSigils.js +172 -0
- package/lib/enochian/tabletSvg.d.ts +85 -0
- package/lib/enochian/tabletSvg.js +278 -0
- package/lib/gd/FylfotCross.d.ts +60 -0
- package/lib/gd/FylfotCross.js +121 -0
- package/lib/gd/GradeTree.d.ts +10 -0
- package/lib/gd/GradeTree.js +21 -0
- package/lib/gd/Lamen.d.ts +31 -0
- package/lib/gd/Lamen.js +317 -0
- package/lib/gd/RoseSigil.d.ts +31 -0
- package/lib/gd/RoseSigil.js +49 -0
- package/lib/gd/RoseSigilImage.d.ts +38 -0
- package/lib/gd/RoseSigilImage.js +29 -0
- package/lib/gd/SevenBranchedCandlestick.d.ts +54 -0
- package/lib/gd/SevenBranchedCandlestick.js +269 -0
- package/lib/gd/TableOfShewbread.d.ts +19 -0
- package/lib/gd/TableOfShewbread.js +120 -0
- package/lib/gd/hall/GdHall.d.ts +94 -0
- package/lib/gd/hall/GdHall.js +147 -0
- package/lib/gd/hall/art/altar.d.ts +8 -0
- package/lib/gd/hall/art/altar.js +21 -0
- package/lib/gd/hall/art/altarItems.d.ts +20 -0
- package/lib/gd/hall/art/altarItems.js +113 -0
- package/lib/gd/hall/art/banner.d.ts +23 -0
- package/lib/gd/hall/art/banner.js +64 -0
- package/lib/gd/hall/art/board.d.ts +9 -0
- package/lib/gd/hall/art/board.js +49 -0
- package/lib/gd/hall/art/cards.d.ts +11 -0
- package/lib/gd/hall/art/cards.js +124 -0
- package/lib/gd/hall/art/furnishings.d.ts +12 -0
- package/lib/gd/hall/art/furnishings.js +36 -0
- package/lib/gd/hall/art/geometry.d.ts +49 -0
- package/lib/gd/hall/art/geometry.js +97 -0
- package/lib/gd/hall/art/hebrewLetter.d.ts +10 -0
- package/lib/gd/hall/art/hebrewLetter.js +38 -0
- package/lib/gd/hall/art/index.d.ts +7 -0
- package/lib/gd/hall/art/index.js +61 -0
- package/lib/gd/hall/art/items.d.ts +12 -0
- package/lib/gd/hall/art/items.js +125 -0
- package/lib/gd/hall/art/kamea.d.ts +20 -0
- package/lib/gd/hall/art/kamea.js +64 -0
- package/lib/gd/hall/art/lamen.d.ts +9 -0
- package/lib/gd/hall/art/lamen.js +52 -0
- package/lib/gd/hall/art/lightning.d.ts +13 -0
- package/lib/gd/hall/art/lightning.js +44 -0
- package/lib/gd/hall/art/lights.d.ts +13 -0
- package/lib/gd/hall/art/lights.js +64 -0
- package/lib/gd/hall/art/marker.d.ts +8 -0
- package/lib/gd/hall/art/marker.js +19 -0
- package/lib/gd/hall/art/pantacle.d.ts +10 -0
- package/lib/gd/hall/art/pantacle.js +119 -0
- package/lib/gd/hall/art/pillar.d.ts +4 -0
- package/lib/gd/hall/art/pillar.js +25 -0
- package/lib/gd/hall/art/placeholder.d.ts +8 -0
- package/lib/gd/hall/art/placeholder.js +18 -0
- package/lib/gd/hall/art/platform.d.ts +13 -0
- package/lib/gd/hall/art/platform.js +28 -0
- package/lib/gd/hall/art/seals.d.ts +23 -0
- package/lib/gd/hall/art/seals.js +151 -0
- package/lib/gd/hall/art/shared.d.ts +87 -0
- package/lib/gd/hall/art/shared.js +95 -0
- package/lib/gd/hall/art/symbols.d.ts +37 -0
- package/lib/gd/hall/art/symbols.js +134 -0
- package/lib/gd/hall/art/tarotKey.d.ts +34 -0
- package/lib/gd/hall/art/tarotKey.js +101 -0
- package/lib/gd/hall/art/veil.d.ts +8 -0
- package/lib/gd/hall/art/veil.js +22 -0
- package/lib/gd/hall/art/vessels.d.ts +19 -0
- package/lib/gd/hall/art/vessels.js +74 -0
- package/lib/gd/hall/aspect.d.ts +31 -0
- package/lib/gd/hall/aspect.js +161 -0
- package/lib/gd/hall/attributes.d.ts +52 -0
- package/lib/gd/hall/attributes.js +116 -0
- package/lib/gd/hall/describe.d.ts +38 -0
- package/lib/gd/hall/describe.js +184 -0
- package/lib/gd/hall/dimensions.d.ts +39 -0
- package/lib/gd/hall/dimensions.js +49 -0
- package/lib/gd/hall/editor.d.ts +13 -0
- package/lib/gd/hall/editor.js +13 -0
- package/lib/gd/hall/fontMetrics.json +177 -0
- package/lib/gd/hall/fonts.d.ts +45 -0
- package/lib/gd/hall/fonts.js +73 -0
- package/lib/gd/hall/hebrewLetters.d.ts +8 -0
- package/lib/gd/hall/hebrewLetters.js +40 -0
- package/lib/gd/hall/index.d.ts +19 -0
- package/lib/gd/hall/index.js +17 -0
- package/lib/gd/hall/labels.d.ts +72 -0
- package/lib/gd/hall/labels.js +109 -0
- package/lib/gd/hall/layout.d.ts +213 -0
- package/lib/gd/hall/layout.js +837 -0
- package/lib/gd/hall/planets.d.ts +13 -0
- package/lib/gd/hall/planets.js +35 -0
- package/lib/gd/hall/presets/index.d.ts +13 -0
- package/lib/gd/hall/presets/index.js +29 -0
- package/lib/gd/hall/presets/neophyte.d.ts +7 -0
- package/lib/gd/hall/presets/neophyte.js +74 -0
- package/lib/gd/hall/presets/philosophus.d.ts +30 -0
- package/lib/gd/hall/presets/philosophus.js +244 -0
- package/lib/gd/hall/presets/portal.d.ts +24 -0
- package/lib/gd/hall/presets/portal.js +241 -0
- package/lib/gd/hall/presets/practicus.d.ts +17 -0
- package/lib/gd/hall/presets/practicus.js +181 -0
- package/lib/gd/hall/presets/theoricus.d.ts +13 -0
- package/lib/gd/hall/presets/theoricus.js +178 -0
- package/lib/gd/hall/presets/types.d.ts +72 -0
- package/lib/gd/hall/presets/types.js +58 -0
- package/lib/gd/hall/presets/zelator.d.ts +12 -0
- package/lib/gd/hall/presets/zelator.js +161 -0
- package/lib/gd/hall/spec.d.ts +54 -0
- package/lib/gd/hall/spec.js +108 -0
- package/lib/gd/hall/types.d.ts +131 -0
- package/lib/gd/hall/types.js +1 -0
- package/lib/gd/hall/validate.d.ts +13 -0
- package/lib/gd/hall/validate.js +285 -0
- package/lib/gd/hall/vocabulary.d.ts +139 -0
- package/lib/gd/hall/vocabulary.js +435 -0
- package/lib/gd/lamenGlyphs.d.ts +16 -0
- package/lib/gd/lamenGlyphs.js +167 -0
- package/lib/gd/lamenGrades.d.ts +29 -0
- package/lib/gd/lamenGrades.js +36 -0
- package/lib/gd/roseSigilGeometry.d.ts +10 -0
- package/lib/gd/roseSigilGeometry.js +10 -0
- package/lib/gd/roseSigilInternals.d.ts +85 -0
- package/lib/gd/roseSigilInternals.js +343 -0
- package/lib/gd/roseSigilOptimizer.d.ts +15 -0
- package/lib/gd/roseSigilOptimizer.js +59 -0
- package/lib/gd/roseSigilVersions.d.ts +12 -0
- package/lib/gd/roseSigilVersions.js +57 -0
- package/lib/hooks/useHydrated.d.ts +9 -0
- package/lib/hooks/useHydrated.js +13 -0
- package/lib/kabbalah/TreeOfLife.d.ts +135 -0
- package/lib/kabbalah/TreeOfLife.js +312 -0
- package/lib/kabbalah/fieldPath.d.ts +25 -0
- package/lib/kabbalah/fieldPath.js +100 -0
- package/lib/kabbalah/treeLabels.d.ts +30 -0
- package/lib/kabbalah/treeLabels.js +32 -0
- package/lib/kabbalah/treeOfLifeFigure.d.ts +59 -0
- package/lib/kabbalah/treeOfLifeFigure.js +151 -0
- package/lib/svgCoordinate.d.ts +12 -0
- package/lib/svgCoordinate.js +16 -0
- package/package.json +162 -3
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { SVGProps } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* The Tree of Life's figure, shared by `TreeOfLife` and the drawings that
|
|
4
|
+
* show the Tree inside another drawing (a temple hall's boards, plan 061):
|
|
5
|
+
* its geometry, its paths' draw order and `TreeFigure`, the spheres and
|
|
6
|
+
* paths alone. This module reads only magick-data's sephirot (their
|
|
7
|
+
* colours), never the whole barrel `TreeOfLife` reads for its labels, so
|
|
8
|
+
* a drawing that only shows the figure stays small.
|
|
9
|
+
*/
|
|
10
|
+
/** Draw order, which paths are "on top" of which, for clarity. */
|
|
11
|
+
export declare const ORDERED_PATHS: {
|
|
12
|
+
hebrew: string[];
|
|
13
|
+
hermetic: string[];
|
|
14
|
+
};
|
|
15
|
+
/** `x,y` for SVG path data, rounded so every engine writes the same digits. */
|
|
16
|
+
export declare function point(x: number, y: number): string;
|
|
17
|
+
/** A path between two spheres: a band `offset` either side of the line. */
|
|
18
|
+
export declare function LineOutline({ x1, y1, x2, y2, offset, ...args }: {
|
|
19
|
+
x1: number;
|
|
20
|
+
y1: number;
|
|
21
|
+
x2: number;
|
|
22
|
+
y2: number;
|
|
23
|
+
/** Half the band's width. */
|
|
24
|
+
offset?: number;
|
|
25
|
+
} & Omit<SVGProps<SVGPathElement>, "d">): import("react").JSX.Element;
|
|
26
|
+
/** The figure's measures, in its own units. */
|
|
27
|
+
export declare const TREE_GEOMETRY: {
|
|
28
|
+
readonly constructRadius: 128.5;
|
|
29
|
+
readonly strokePadding: 2;
|
|
30
|
+
readonly sephirahRadius: 40;
|
|
31
|
+
readonly rowStart: number;
|
|
32
|
+
readonly canvasWidth: number;
|
|
33
|
+
readonly canvasHeight: number;
|
|
34
|
+
/** The pillars' x: severity, equilibrium, mercy. */
|
|
35
|
+
readonly pillars: readonly [number, 0, number];
|
|
36
|
+
};
|
|
37
|
+
/** Each sphere's centre, Kether to Malkuth, then Daat. */
|
|
38
|
+
export declare const SEPHIRAH_CENTERS: readonly {
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
}[];
|
|
42
|
+
/**
|
|
43
|
+
* The quarters of a sphere of several colours (Malkuth), as path props:
|
|
44
|
+
* wedges from the centre, the first starting at 135°.
|
|
45
|
+
*/
|
|
46
|
+
export declare function sephirahWedges(x: number, y: number, colors: readonly string[], r?: number): {
|
|
47
|
+
fill: string;
|
|
48
|
+
d: string;
|
|
49
|
+
}[];
|
|
50
|
+
/**
|
|
51
|
+
* The Tree's spheres in the Queen scale and its Hermetic paths, nothing
|
|
52
|
+
* else: no text, links, ids or stylesheet. `flash` draws the Lightning
|
|
53
|
+
* Flash down the spheres, Kether to Malkuth. Sized like `TreeOfLife`.
|
|
54
|
+
*/
|
|
55
|
+
export declare function TreeFigure({ width, height, flash, }: {
|
|
56
|
+
width?: number;
|
|
57
|
+
height?: number;
|
|
58
|
+
flash?: boolean;
|
|
59
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import sephirot from "magick-data/kabbalah/sephirot";
|
|
3
|
+
import { svgCoordinate } from "../svgCoordinate.js";
|
|
4
|
+
/**
|
|
5
|
+
* The Tree of Life's figure, shared by `TreeOfLife` and the drawings that
|
|
6
|
+
* show the Tree inside another drawing (a temple hall's boards, plan 061):
|
|
7
|
+
* its geometry, its paths' draw order and `TreeFigure`, the spheres and
|
|
8
|
+
* paths alone. This module reads only magick-data's sephirot (their
|
|
9
|
+
* colours), never the whole barrel `TreeOfLife` reads for its labels, so
|
|
10
|
+
* a drawing that only shows the figure stays small.
|
|
11
|
+
*/
|
|
12
|
+
/** Draw order, which paths are "on top" of which, for clarity. */
|
|
13
|
+
// prettier-ignore
|
|
14
|
+
export const ORDERED_PATHS = {
|
|
15
|
+
hebrew: [
|
|
16
|
+
"4_5",
|
|
17
|
+
"2_3",
|
|
18
|
+
"7_8", // alef, shin, mem
|
|
19
|
+
"1_2",
|
|
20
|
+
"1_3",
|
|
21
|
+
"1_6", // he, vav, dalet
|
|
22
|
+
"2_5",
|
|
23
|
+
"3_4", // zayin, qof <-- paths specific to hebrew tree
|
|
24
|
+
"2_4",
|
|
25
|
+
"2_6",
|
|
26
|
+
"3_5",
|
|
27
|
+
"3_6",
|
|
28
|
+
"4_6",
|
|
29
|
+
"4_7",
|
|
30
|
+
"5_6",
|
|
31
|
+
"5_8",
|
|
32
|
+
"6_7",
|
|
33
|
+
"6_8",
|
|
34
|
+
"6_9",
|
|
35
|
+
"7_9",
|
|
36
|
+
"8_9",
|
|
37
|
+
"9_10",
|
|
38
|
+
],
|
|
39
|
+
hermetic: [
|
|
40
|
+
"4_5",
|
|
41
|
+
"2_3",
|
|
42
|
+
"7_8",
|
|
43
|
+
"1_2",
|
|
44
|
+
"1_3",
|
|
45
|
+
"1_6",
|
|
46
|
+
"2_4",
|
|
47
|
+
"2_6",
|
|
48
|
+
"3_5",
|
|
49
|
+
"3_6",
|
|
50
|
+
"4_6",
|
|
51
|
+
"4_7",
|
|
52
|
+
"5_6",
|
|
53
|
+
"5_8",
|
|
54
|
+
"6_7",
|
|
55
|
+
"6_8",
|
|
56
|
+
"6_9",
|
|
57
|
+
"7_9",
|
|
58
|
+
"8_9",
|
|
59
|
+
"9_10",
|
|
60
|
+
"7_10",
|
|
61
|
+
"8_10", // paths specific to hermetic tree
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
/** `x,y` for SVG path data, rounded so every engine writes the same digits. */
|
|
65
|
+
export function point(x, y) {
|
|
66
|
+
return `${svgCoordinate(x)},${svgCoordinate(y)}`;
|
|
67
|
+
}
|
|
68
|
+
/** A path between two spheres: a band `offset` either side of the line. */
|
|
69
|
+
export function LineOutline({ x1, y1, x2, y2, offset = 5, ...args }) {
|
|
70
|
+
const theta = Math.PI / 2 - Math.atan((x2 - x1) / (y2 - y1));
|
|
71
|
+
const xd = Math.sin(theta) * offset;
|
|
72
|
+
const yd = Math.cos(theta) * offset;
|
|
73
|
+
return (_jsx("path", { ...args, d: `M ${point(x1 - xd, y1 + yd)} L ${point(x1 + xd, y1 - yd)} ` +
|
|
74
|
+
`L ${point(x2 + xd, y2 - yd)} L ${point(x2 - xd, y2 + yd)} z` }));
|
|
75
|
+
}
|
|
76
|
+
const constructRadius = 128.5;
|
|
77
|
+
const intersectionOffset = (constructRadius / 2) * Math.sqrt(3);
|
|
78
|
+
const strokePadding = 2;
|
|
79
|
+
const sephirahRadius = 40;
|
|
80
|
+
const rowStart = sephirahRadius + strokePadding;
|
|
81
|
+
const rowGap = constructRadius / 2;
|
|
82
|
+
/** The figure's measures, in its own units. */
|
|
83
|
+
export const TREE_GEOMETRY = {
|
|
84
|
+
constructRadius,
|
|
85
|
+
strokePadding,
|
|
86
|
+
sephirahRadius,
|
|
87
|
+
rowStart,
|
|
88
|
+
canvasWidth: 2 * (constructRadius + sephirahRadius + strokePadding),
|
|
89
|
+
canvasHeight: 4 * constructRadius + 2 * (sephirahRadius + strokePadding),
|
|
90
|
+
/** The pillars' x: severity, equilibrium, mercy. */
|
|
91
|
+
pillars: [-intersectionOffset, 0, intersectionOffset],
|
|
92
|
+
};
|
|
93
|
+
const [severity, equilibrium, mercy] = TREE_GEOMETRY.pillars;
|
|
94
|
+
/** Each sphere's centre, Kether to Malkuth, then Daat. */
|
|
95
|
+
export const SEPHIRAH_CENTERS = [
|
|
96
|
+
[equilibrium, 0],
|
|
97
|
+
[mercy, 1],
|
|
98
|
+
[severity, 1],
|
|
99
|
+
[mercy, 3],
|
|
100
|
+
[severity, 3],
|
|
101
|
+
[equilibrium, 4],
|
|
102
|
+
[mercy, 5],
|
|
103
|
+
[severity, 5],
|
|
104
|
+
[equilibrium, 6],
|
|
105
|
+
[equilibrium, 8],
|
|
106
|
+
[equilibrium, 2],
|
|
107
|
+
].map(([x, row]) => ({ x, y: rowStart + rowGap * row }));
|
|
108
|
+
/**
|
|
109
|
+
* The quarters of a sphere of several colours (Malkuth), as path props:
|
|
110
|
+
* wedges from the centre, the first starting at 135°.
|
|
111
|
+
*/
|
|
112
|
+
export function sephirahWedges(x, y, colors, r = sephirahRadius) {
|
|
113
|
+
const rads = Math.PI / 180;
|
|
114
|
+
return colors.map((fill, i) => {
|
|
115
|
+
// Adapted from https://codepen.io/hari_shanx/pen/NRyPBz (2022), kept
|
|
116
|
+
// as credit. What it lent is the method: a wedge is a line from the
|
|
117
|
+
// centre to the arc's start, an arc to its end, and back, its ends
|
|
118
|
+
// found by the usual polar-to-Cartesian arithmetic. Those few lines
|
|
119
|
+
// of trigonometry have no expression of their own to protect, so no
|
|
120
|
+
// licence is needed (plan 080, "Before publishing"); public Pens are
|
|
121
|
+
// MIT besides (blog.codepen.io/documentation/licensing).
|
|
122
|
+
// 180 - 45; hard coded malkuth angles till we need something else
|
|
123
|
+
const from = (i * 360) / colors.length + 180 - 45;
|
|
124
|
+
const to = ((i + 1) * 360) / colors.length + 180 - 45;
|
|
125
|
+
return {
|
|
126
|
+
fill,
|
|
127
|
+
d: `M ${point(x, y)} L ${point(x + r * Math.cos(from * rads), y + r * Math.sin(from * rads))} ` +
|
|
128
|
+
`A ${r},${r} 0 0,1 ${point(x + r * Math.cos(to * rads), y + r * Math.sin(to * rads))} z`,
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
const rows = Object.values(sephirot);
|
|
133
|
+
/**
|
|
134
|
+
* The Tree's spheres in the Queen scale and its Hermetic paths, nothing
|
|
135
|
+
* else: no text, links, ids or stylesheet. `flash` draws the Lightning
|
|
136
|
+
* Flash down the spheres, Kether to Malkuth. Sized like `TreeOfLife`.
|
|
137
|
+
*/
|
|
138
|
+
export function TreeFigure({ width, height, flash, }) {
|
|
139
|
+
const { canvasWidth, canvasHeight } = TREE_GEOMETRY;
|
|
140
|
+
const center = (index) => SEPHIRAH_CENTERS[index - 1];
|
|
141
|
+
return (_jsxs("svg", { width: width, height: height, viewBox: `${-canvasWidth / 2} 0 ${canvasWidth} ${canvasHeight}`, children: [_jsx("g", { stroke: "#000", strokeWidth: 3, fill: "#fff", style: { paintOrder: "stroke fill markers" }, children: [...ORDERED_PATHS.hermetic].reverse().map((id) => {
|
|
142
|
+
const [a, b] = id.split("_").map(Number);
|
|
143
|
+
return (_jsx(LineOutline, { x1: center(a).x, y1: center(a).y, x2: center(b).x, y2: center(b).y, offset: 8.5 }, id));
|
|
144
|
+
}) }), SEPHIRAH_CENTERS.slice(0, 10).map(({ x, y }, index) => {
|
|
145
|
+
const colors = rows[index].color.queenWeb.split(",");
|
|
146
|
+
return (_jsxs("g", { children: [_jsx("circle", { cx: x, cy: y, r: sephirahRadius, fill: colors.length > 1 ? undefined : colors[0], stroke: "#000", strokeWidth: 1.568 }), colors.length > 1 &&
|
|
147
|
+
sephirahWedges(x, y, colors).map((wedge) => (_jsx("path", { d: wedge.d, fill: wedge.fill, stroke: "#000", strokeWidth: 1.568 }, wedge.fill)))] }, rows[index].id));
|
|
148
|
+
}), flash && (_jsx("polyline", { points: SEPHIRAH_CENTERS.slice(0, 10)
|
|
149
|
+
.map(({ x, y }) => point(x, y))
|
|
150
|
+
.join(" "), fill: "none", stroke: "#d92128", strokeWidth: 9, strokeLinejoin: "round", strokeLinecap: "round" }))] }));
|
|
151
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decimal places kept in SVG output, as in SVGO's default. On the 100-unit
|
|
3
|
+
* canvas that is about 0.02 px of error even at the 4096 px raster limit.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SVG_COORDINATE_DECIMALS = 3;
|
|
6
|
+
/**
|
|
7
|
+
* A number as written to SVG. Node and the browser can disagree in the last
|
|
8
|
+
* bit of `Math.sin`/`Math.cos` (30.310889132455348 against …344), and React
|
|
9
|
+
* reports any such attribute difference as a hydration mismatch; rounding
|
|
10
|
+
* gives both the same digits.
|
|
11
|
+
*/
|
|
12
|
+
export declare function svgCoordinate(value: number): number;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decimal places kept in SVG output, as in SVGO's default. On the 100-unit
|
|
3
|
+
* canvas that is about 0.02 px of error even at the 4096 px raster limit.
|
|
4
|
+
*/
|
|
5
|
+
export const SVG_COORDINATE_DECIMALS = 3;
|
|
6
|
+
const SVG_COORDINATE_SCALE = 10 ** SVG_COORDINATE_DECIMALS;
|
|
7
|
+
/**
|
|
8
|
+
* A number as written to SVG. Node and the browser can disagree in the last
|
|
9
|
+
* bit of `Math.sin`/`Math.cos` (30.310889132455348 against …344), and React
|
|
10
|
+
* reports any such attribute difference as a hydration mismatch; rounding
|
|
11
|
+
* gives both the same digits.
|
|
12
|
+
*/
|
|
13
|
+
export function svgCoordinate(value) {
|
|
14
|
+
// `+ 0` turns the -0 that tiny negative values round to into 0.
|
|
15
|
+
return Math.round(value * SVG_COORDINATE_SCALE) / SVG_COORDINATE_SCALE + 0;
|
|
16
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,165 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "magick-components",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "React components that draw magickal figures from magick-data: the Tree of Life, the Golden Dawn's temple halls, lamens and symbols, the rose-cross sigil, the Enochian tablets, the kameas, the planetary spirits' geomantic sigils and the Moon",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"magick",
|
|
7
|
+
"react",
|
|
8
|
+
"svg",
|
|
9
|
+
"tree of life",
|
|
10
|
+
"kabbalah",
|
|
11
|
+
"golden dawn",
|
|
12
|
+
"rose cross",
|
|
13
|
+
"sigil",
|
|
14
|
+
"enochian",
|
|
15
|
+
"kamea",
|
|
16
|
+
"astrology",
|
|
17
|
+
"occult",
|
|
18
|
+
"esoteric"
|
|
19
|
+
],
|
|
20
|
+
"license": "(MIT AND OFL-1.1 AND BSD-3-Clause)",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/gadicc/magickly.git",
|
|
24
|
+
"directory": "packages/magick-components"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://github.com/gadicc/magickly/tree/main/packages/magick-components#readme",
|
|
27
|
+
"bugs": "https://github.com/gadicc/magickly/issues",
|
|
28
|
+
"type": "module",
|
|
29
|
+
"sideEffects": [
|
|
30
|
+
"*.css"
|
|
31
|
+
],
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=22"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"lib",
|
|
37
|
+
"fonts",
|
|
38
|
+
"README.md",
|
|
39
|
+
"LICENSE.txt"
|
|
40
|
+
],
|
|
41
|
+
"exports": {
|
|
42
|
+
"./astrology/Kamea": {
|
|
43
|
+
"types": "./lib/astrology/Kamea.d.ts",
|
|
44
|
+
"default": "./lib/astrology/Kamea.js"
|
|
45
|
+
},
|
|
46
|
+
"./astrology/mercuryRetrograde": {
|
|
47
|
+
"types": "./lib/astrology/mercuryRetrograde.d.ts",
|
|
48
|
+
"default": "./lib/astrology/mercuryRetrograde.js"
|
|
49
|
+
},
|
|
50
|
+
"./astrology/MercuryWidget": {
|
|
51
|
+
"types": "./lib/astrology/MercuryWidget.d.ts",
|
|
52
|
+
"default": "./lib/astrology/MercuryWidget.js"
|
|
53
|
+
},
|
|
54
|
+
"./astrology/Moon": {
|
|
55
|
+
"types": "./lib/astrology/Moon.d.ts",
|
|
56
|
+
"default": "./lib/astrology/Moon.js"
|
|
57
|
+
},
|
|
58
|
+
"./astrology/MoonWidget": {
|
|
59
|
+
"types": "./lib/astrology/MoonWidget.d.ts",
|
|
60
|
+
"default": "./lib/astrology/MoonWidget.js"
|
|
61
|
+
},
|
|
62
|
+
"./astrology/PlanetarySpirit": {
|
|
63
|
+
"types": "./lib/astrology/PlanetarySpirit.d.ts",
|
|
64
|
+
"default": "./lib/astrology/PlanetarySpirit.js"
|
|
65
|
+
},
|
|
66
|
+
"./chakras/Chakras": {
|
|
67
|
+
"types": "./lib/chakras/Chakras.d.ts",
|
|
68
|
+
"default": "./lib/chakras/Chakras.js"
|
|
69
|
+
},
|
|
70
|
+
"./enochian/Tablet": {
|
|
71
|
+
"types": "./lib/enochian/Tablet.d.ts",
|
|
72
|
+
"default": "./lib/enochian/Tablet.js"
|
|
73
|
+
},
|
|
74
|
+
"./gd/FylfotCross": {
|
|
75
|
+
"types": "./lib/gd/FylfotCross.d.ts",
|
|
76
|
+
"default": "./lib/gd/FylfotCross.js"
|
|
77
|
+
},
|
|
78
|
+
"./gd/GradeTree": {
|
|
79
|
+
"types": "./lib/gd/GradeTree.d.ts",
|
|
80
|
+
"default": "./lib/gd/GradeTree.js"
|
|
81
|
+
},
|
|
82
|
+
"./gd/hall": {
|
|
83
|
+
"types": "./lib/gd/hall/index.d.ts",
|
|
84
|
+
"default": "./lib/gd/hall/index.js"
|
|
85
|
+
},
|
|
86
|
+
"./gd/hall/editor": {
|
|
87
|
+
"types": "./lib/gd/hall/editor.d.ts",
|
|
88
|
+
"default": "./lib/gd/hall/editor.js"
|
|
89
|
+
},
|
|
90
|
+
"./gd/hall/presets": {
|
|
91
|
+
"types": "./lib/gd/hall/presets/index.d.ts",
|
|
92
|
+
"default": "./lib/gd/hall/presets/index.js"
|
|
93
|
+
},
|
|
94
|
+
"./gd/Lamen": {
|
|
95
|
+
"types": "./lib/gd/Lamen.d.ts",
|
|
96
|
+
"default": "./lib/gd/Lamen.js"
|
|
97
|
+
},
|
|
98
|
+
"./gd/lamenGrades": {
|
|
99
|
+
"types": "./lib/gd/lamenGrades.d.ts",
|
|
100
|
+
"default": "./lib/gd/lamenGrades.js"
|
|
101
|
+
},
|
|
102
|
+
"./gd/RoseSigil": {
|
|
103
|
+
"types": "./lib/gd/RoseSigil.d.ts",
|
|
104
|
+
"default": "./lib/gd/RoseSigil.js"
|
|
105
|
+
},
|
|
106
|
+
"./gd/roseSigilGeometry": {
|
|
107
|
+
"types": "./lib/gd/roseSigilGeometry.d.ts",
|
|
108
|
+
"default": "./lib/gd/roseSigilGeometry.js"
|
|
109
|
+
},
|
|
110
|
+
"./gd/RoseSigilImage": {
|
|
111
|
+
"types": "./lib/gd/RoseSigilImage.d.ts",
|
|
112
|
+
"default": "./lib/gd/RoseSigilImage.js"
|
|
113
|
+
},
|
|
114
|
+
"./gd/roseSigilOptimizer": {
|
|
115
|
+
"types": "./lib/gd/roseSigilOptimizer.d.ts",
|
|
116
|
+
"default": "./lib/gd/roseSigilOptimizer.js"
|
|
117
|
+
},
|
|
118
|
+
"./gd/SevenBranchedCandlestick": {
|
|
119
|
+
"types": "./lib/gd/SevenBranchedCandlestick.d.ts",
|
|
120
|
+
"default": "./lib/gd/SevenBranchedCandlestick.js"
|
|
121
|
+
},
|
|
122
|
+
"./gd/TableOfShewbread": {
|
|
123
|
+
"types": "./lib/gd/TableOfShewbread.d.ts",
|
|
124
|
+
"default": "./lib/gd/TableOfShewbread.js"
|
|
125
|
+
},
|
|
126
|
+
"./kabbalah/fieldPath": {
|
|
127
|
+
"types": "./lib/kabbalah/fieldPath.d.ts",
|
|
128
|
+
"default": "./lib/kabbalah/fieldPath.js"
|
|
129
|
+
},
|
|
130
|
+
"./kabbalah/TreeOfLife": {
|
|
131
|
+
"types": "./lib/kabbalah/TreeOfLife.d.ts",
|
|
132
|
+
"default": "./lib/kabbalah/TreeOfLife.js"
|
|
133
|
+
},
|
|
134
|
+
"./fonts/*": "./fonts/*"
|
|
135
|
+
},
|
|
136
|
+
"peerDependencies": {
|
|
137
|
+
"@types/react": "^19",
|
|
138
|
+
"react": "^19"
|
|
139
|
+
},
|
|
140
|
+
"peerDependenciesMeta": {
|
|
141
|
+
"@types/react": {
|
|
142
|
+
"optional": true
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"dependencies": {
|
|
146
|
+
"astronomy-engine": "^2.1.19",
|
|
147
|
+
"dot-prop": "^10.2.0",
|
|
148
|
+
"lune": "^0.4.0",
|
|
149
|
+
"luxon": "^3.7.2",
|
|
150
|
+
"magick-data": "^0.2.1",
|
|
151
|
+
"nlopt-js": "^0.1.1"
|
|
152
|
+
},
|
|
153
|
+
"devDependencies": {
|
|
154
|
+
"@types/luxon": "^3.7.6",
|
|
155
|
+
"@types/node": "24.19.2",
|
|
156
|
+
"@types/react": "^19.3.0",
|
|
157
|
+
"typescript": "^6.0.3"
|
|
158
|
+
},
|
|
159
|
+
"scripts": {
|
|
160
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
161
|
+
"build": "rm -rf lib && tsc -p tsconfig.build.json",
|
|
162
|
+
"fonts:css": "node scripts/gdHallCss.mjs",
|
|
163
|
+
"smoke": "node scripts/smoke.mjs"
|
|
164
|
+
}
|
|
6
165
|
}
|