@humanforest/nuxt-layer 0.1.0 → 0.1.2
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/package.json +7 -4
- package/packages/charts/src/engine.ts +1 -1
- package/packages/charts/src/londonAreas.ts +2 -2
- package/packages/charts/src/londonGrid.ts +4 -4
- package/packages/ui/src/logo/FLogo.vue +1 -1
- package/packages/ui/src/logo/FSubLogo.vue +3 -3
- package/packages/ui/src/shell/FAppSidebar.vue +3 -3
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@humanforest/nuxt-layer",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.2",
|
|
5
5
|
"description": "Forest design system as a Nuxt layer — extend it to inherit the theme, colour roles, icons and brand fonts in one line.",
|
|
6
6
|
"main": "./nuxt.config.ts",
|
|
7
7
|
"files": [
|
|
@@ -15,17 +15,20 @@
|
|
|
15
15
|
"README.md"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@humanforest/tokens": "^0.1.0",
|
|
19
18
|
"@internationalized/date": "^3.12.2",
|
|
20
19
|
"@mapbox/search-js-core": "^1.6.0",
|
|
20
|
+
"@turf/boolean-point-in-polygon": "^7.4.0",
|
|
21
|
+
"@turf/helpers": "^7.4.0",
|
|
21
22
|
"@unovis/ts": "^1.6.7",
|
|
22
23
|
"@unovis/vue": "^1.6.7",
|
|
23
24
|
"mapbox-gl": "^3.28.1",
|
|
24
25
|
"tailwind-variants": "3.2.2"
|
|
25
26
|
},
|
|
26
27
|
"peerDependencies": {
|
|
27
|
-
"@nuxt/ui": "
|
|
28
|
-
"nuxt": "^4
|
|
28
|
+
"@nuxt/ui": "^4",
|
|
29
|
+
"nuxt": "^4",
|
|
30
|
+
"reka-ui": "^2",
|
|
31
|
+
"tailwindcss": "^4",
|
|
29
32
|
"vue": "^3.5"
|
|
30
33
|
},
|
|
31
34
|
"publishConfig": {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Built by scripts/londonAreas.ts and not editable by hand. Both levels share one viewBox, which is
|
|
5
5
|
// what lets a ward map carry a borough outline over it.
|
|
6
|
-
import boroughs from '
|
|
6
|
+
import boroughs from '../../tokens/geo/london-boroughs.json';
|
|
7
7
|
|
|
8
8
|
export interface LondonArea {
|
|
9
9
|
/** ONS code — E09… for a borough, E05… for a ward. */
|
|
@@ -45,7 +45,7 @@ export const LONDON_BOROUGHS = boroughs as unknown as LondonAreaSet;
|
|
|
45
45
|
*/
|
|
46
46
|
let wardsPromise: Promise<LondonAreaSet> | null = null;
|
|
47
47
|
export const loadLondonWards = (): Promise<LondonAreaSet> => {
|
|
48
|
-
wardsPromise ??= import('
|
|
48
|
+
wardsPromise ??= import('../../tokens/geo/london-wards.json').then(
|
|
49
49
|
(m) => (m.default ?? m) as unknown as LondonAreaSet,
|
|
50
50
|
);
|
|
51
51
|
return wardsPromise;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
// The grids are built by scripts/londonDots.ts and are not editable by hand — change the sources in
|
|
5
5
|
// scripts/data/ and rebuild.
|
|
6
|
-
import fine from '
|
|
6
|
+
import fine from '../../tokens/geo/london-dots-fine.json';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* How many dots the map is sampled into, which is not the same question as how large it is drawn.
|
|
@@ -40,10 +40,10 @@ export const loadLondonGrid = (density: DotDensity): Promise<LondonGrid> => {
|
|
|
40
40
|
// import whose specifier it can read statically.
|
|
41
41
|
const load =
|
|
42
42
|
density === 'coarse'
|
|
43
|
-
? import('
|
|
43
|
+
? import('../../tokens/geo/london-dots-coarse.json')
|
|
44
44
|
: density === 'medium'
|
|
45
|
-
? import('
|
|
46
|
-
: import('
|
|
45
|
+
? import('../../tokens/geo/london-dots-medium.json')
|
|
46
|
+
: import('../../tokens/geo/london-dots-ultra.json');
|
|
47
47
|
const p = load.then((m) => ((m as { default?: unknown }).default ?? m) as unknown as LondonGrid);
|
|
48
48
|
cache.set(density, p);
|
|
49
49
|
return p;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// + inner + wordmark — flows from currentColor, so a parent text colour drives light/dark). `size` is
|
|
5
5
|
// the rendered height in px; width follows the variant's aspect ratio.
|
|
6
6
|
import { computed } from 'vue';
|
|
7
|
-
import { MARK, MARK_SIZE, WORDMARK_PATHS, WORDMARK_W, WORDMARK_H, LOCKUP_H, LOCKUP_V, F } from '
|
|
7
|
+
import { MARK, MARK_SIZE, WORDMARK_PATHS, WORDMARK_W, WORDMARK_H, LOCKUP_H, LOCKUP_V, F } from '../../../tokens/src/logo';
|
|
8
8
|
|
|
9
9
|
// `clearspace`: bake the exclusion zone into the SVG as transparent margin. true = one f on every
|
|
10
10
|
// side (the brand rule); a number = that many f. `size` stays the logo's own height — the SVG just
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
// Variants: lockup (lead + keycap) · badge (keycap alone) · icon (square, first letter) · joined
|
|
11
11
|
// (lead + sub-brand butted on as one word).
|
|
12
12
|
import { computed } from 'vue';
|
|
13
|
-
import { WORDMARK_PATHS, WORDMARK_W, WORDMARK_H } from '
|
|
14
|
-
import { setWord, runInk } from '
|
|
13
|
+
import { WORDMARK_PATHS, WORDMARK_W, WORDMARK_H } from '../../../tokens/src/logo';
|
|
14
|
+
import { setWord, runInk } from '../../../tokens/src/glyphs';
|
|
15
15
|
import {
|
|
16
16
|
SUBLOGO, SUBLOGO_MOHR_SIZE, SUBLOGO_GT_SIZE, SUBLOGO_BASELINE,
|
|
17
17
|
keycapGeometry, iconGeometry, skewTransform,
|
|
18
|
-
} from '
|
|
18
|
+
} from '../../../tokens/src/sublogo';
|
|
19
19
|
|
|
20
20
|
const props = withDefaults(defineProps<{
|
|
21
21
|
/** The sub-brand — set in the keycap. Upper-cased; Mohr is only ever used uppercase. */
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
// · Slot props, NOT the models: the mobile slideover re-renders these slots with collapsed=false, so
|
|
12
12
|
// reading `collapsed` here would leak the desktop rail's icon-only rows into the phone menu.
|
|
13
13
|
import { computed } from 'vue';
|
|
14
|
-
import { F, WORDMARK_H, WORDMARK_W } from '
|
|
15
|
-
import { setWord, runInk } from '
|
|
16
|
-
import { keycapGeometry, SUBLOGO_MOHR_SIZE } from '
|
|
14
|
+
import { F, WORDMARK_H, WORDMARK_W } from '../../../tokens/src/logo';
|
|
15
|
+
import { setWord, runInk } from '../../../tokens/src/glyphs';
|
|
16
|
+
import { keycapGeometry, SUBLOGO_MOHR_SIZE } from '../../../tokens/src/sublogo';
|
|
17
17
|
import { FSubLogo } from '../logo';
|
|
18
18
|
import FScrollShadow from './FScrollShadow.vue';
|
|
19
19
|
import type { FNavGroup, FNavItem } from './nav';
|