@skipleague/design 0.4.8 → 0.5.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/dist/AppLogo.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** A SkipLeague app's logo glyph (monoline, drawn on the brand tile). */
2
- export type AppGlyph = "lists" | "racquetball" | "trips" | "gifts" | "reading" | "today";
2
+ export type AppGlyph = "lists" | "racquetball" | "trips" | "gifts" | "reading" | "today" | "guide" | "flow";
3
3
  /**
4
4
  * The per-app logo mark — a brand-green rounded tile holding a white monoline
5
5
  * glyph. Replaces the single-letter {@link AppBadge}; gives each SkipLeague app a
package/dist/AppLogo.js CHANGED
@@ -1,23 +1,35 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Exact 24×24 glyph paths (design_handoff_top_bar). `color` only matters for the
3
- // racquetball ball, which is filled rather than stroked.
2
+ // Exact 24×24 glyph paths (design_handoff_app_glyphs the finalized round that
3
+ // fixed racquetball, trips, and flow and added the guide mark). `color` only
4
+ // matters for filled sub-shapes (e.g. the racquetball ball), which are filled
5
+ // rather than stroked.
4
6
  function glyphPaths(app, color) {
5
7
  switch (app) {
6
8
  case "lists":
9
+ // Checklist ticks.
7
10
  return (_jsxs(_Fragment, { children: [_jsx("path", { d: "M3.5 7l1.8 1.8L8.5 5.6" }), _jsx("path", { d: "M12.5 7H20.5" }), _jsx("path", { d: "M3.5 16l1.8 1.8L8.5 14.6" }), _jsx("path", { d: "M12.5 16.5H20.5" })] }));
8
11
  case "racquetball":
9
- return (_jsxs(_Fragment, { children: [_jsx("ellipse", { cx: "10", cy: "9", rx: "5.4", ry: "6.6", transform: "rotate(-34 10 9)" }), _jsx("path", { d: "M6.6 14.2L3.4 19.4" }), _jsx("circle", { cx: "18", cy: "17.4", r: "2.3", fill: color, stroke: "none" })] }));
12
+ // Racquet (teardrop head + handle rotated 40°) with a filled ball.
13
+ return (_jsxs(_Fragment, { children: [_jsxs("g", { transform: "rotate(40 10 9)", children: [_jsx("path", { d: "M10 3C13.2 3 14.8 5.6 14.8 8.4C14.8 11.4 12.6 13.6 10 15.6C7.4 13.6 5.2 11.4 5.2 8.4C5.2 5.6 6.8 3 10 3Z" }), _jsx("path", { d: "M10 15.6L10 21" })] }), _jsx("circle", { cx: "17.8", cy: "17", r: "2.3", fill: color, stroke: "none" })] }));
10
14
  case "trips":
11
- return (_jsxs(_Fragment, { children: [_jsx("path", { d: "M12 21.5s6.6-5.8 6.6-10.5a6.6 6.6 0 1 0-13.2 0c0 4.7 6.6 10.5 6.6 10.5z" }), _jsx("circle", { cx: "12", cy: "10.8", r: "2.4" })] }));
15
+ // Hard-shell suitcase: top handle and two clasps on the body.
16
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3.5", y: "8", width: "17", height: "11.5", rx: "2.2" }), _jsx("path", { d: "M8.5 8V6.2a1.6 1.6 0 0 1 1.6-1.6h3.8a1.6 1.6 0 0 1 1.6 1.6V8" }), _jsx("path", { d: "M9.5 12.4h1.8" }), _jsx("path", { d: "M12.7 12.4h1.8" })] }));
12
17
  case "gifts":
13
- // Gift box: lid band, body, vertical ribbon, and a two-loop bow.
14
- return (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3.5", y: "8", width: "17", height: "4.5", rx: "1" }), _jsx("path", { d: "M5 12.5V20h14v-7.5" }), _jsx("path", { d: "M12 8v12" }), _jsx("path", { d: "M12 8C11 5.5 9.5 4.2 8.2 4.9 6.9 5.6 8 8 12 8Z" }), _jsx("path", { d: "M12 8c1-2.5 2.5-3.8 3.8-3.1C17.1 5.6 16 8 12 8Z" })] }));
18
+ // Gift box: body, lid band, vertical ribbon, and a two-loop bow.
19
+ return (_jsxs(_Fragment, { children: [_jsx("path", { d: "M4 11h16v8.5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1z" }), _jsx("path", { d: "M3 7.5h18v3.5H3z" }), _jsx("path", { d: "M12 7.5v13" }), _jsx("path", { d: "M12 7.5C11 5.2 7.6 4.6 7.6 6.5C7.6 7.7 9.7 8 12 7.5z" }), _jsx("path", { d: "M12 7.5C13 5.2 16.4 4.6 16.4 6.5C16.4 7.7 14.3 8 12 7.5z" })] }));
15
20
  case "reading":
16
21
  // Open book: two pages meeting at a center spine.
17
- return (_jsxs(_Fragment, { children: [_jsx("path", { d: "M12 6.5C9.8 5.1 6.4 4.6 4 5.3v12.6c2.4-.7 5.8-.2 8 1.2 2.2-1.4 5.6-1.9 8-1.2V5.3C17.6 4.6 14.2 5.1 12 6.5Z" }), _jsx("path", { d: "M12 6.5V19.3" })] }));
22
+ return (_jsxs(_Fragment, { children: [_jsx("path", { d: "M12 6.6C9.8 5.1 6.4 4.8 4 5.4v12.8c2.4-.6 5.8-.3 8 1.2 2.2-1.5 5.6-1.8 8-1.2V5.4c-2.4-.6-5.8-.3-8 1.2z" }), _jsx("path", { d: "M12 6.6v12.8" })] }));
18
23
  case "today":
19
24
  // Sun = "today" / the day.
20
- return (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "3.8" }), _jsx("path", { d: "M12 2.6V5" }), _jsx("path", { d: "M12 19V21.4" }), _jsx("path", { d: "M2.6 12H5" }), _jsx("path", { d: "M19 12H21.4" }), _jsx("path", { d: "M5.2 5.2 6.9 6.9" }), _jsx("path", { d: "M17.1 17.1 18.8 18.8" }), _jsx("path", { d: "M18.8 5.2 17.1 6.9" }), _jsx("path", { d: "M6.9 17.1 5.2 18.8" })] }));
25
+ return (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "12", cy: "12", r: "4" }), _jsx("path", { d: "M12 2.4v2.2" }), _jsx("path", { d: "M12 19.4v2.2" }), _jsx("path", { d: "M4.6 4.6l1.6 1.6" }), _jsx("path", { d: "M17.8 17.8l1.6 1.6" }), _jsx("path", { d: "M2.4 12h2.2" }), _jsx("path", { d: "M19.4 12h2.2" }), _jsx("path", { d: "M6.2 17.8l-1.6 1.6" }), _jsx("path", { d: "M17.8 6.2l1.6-1.6" })] }));
26
+ case "guide":
27
+ // Folded map.
28
+ return (_jsxs(_Fragment, { children: [_jsx("path", { d: "M9 4L3 6.4v13.6L9 17.6l6 2.4 6-2.4V6L15 8.4z" }), _jsx("path", { d: "M9 4v13.6" }), _jsx("path", { d: "M15 8.4V20" })] }));
29
+ case "flow":
30
+ // Two rounded cards linked by an elbow connector — orchestration
31
+ // ("when X happens, do Y").
32
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3.5", y: "4.5", width: "7", height: "6", rx: "1.6" }), _jsx("rect", { x: "13.5", y: "13", width: "7", height: "6", rx: "1.6" }), _jsx("path", { d: "M10.5 7.5h2.5a2 2 0 0 1 2 2v3.5" })] }));
21
33
  }
22
34
  }
23
35
  /**
package/dist/apps.js CHANGED
@@ -12,6 +12,7 @@ export const SKIPLEAGUE_APPS = [
12
12
  { slug: "skipreading", name: "SkipReading", url: "https://reading.skipleague.com" },
13
13
  { slug: "skipgifts", name: "SkipGifts", url: "https://gifts.skipleague.com" },
14
14
  { slug: "skiptoday", name: "SkipToday", url: "https://today.skipleague.com" },
15
+ { slug: "skipflow", name: "SkipFlow", url: "https://flow.skipleague.com" },
15
16
  ];
16
17
  /** Default target for the menu's "Manage account" link (the platform account page). */
17
18
  export const SKIPLEAGUE_ACCOUNT_URL = "https://skipleague.com/account";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skipleague/design",
3
- "version": "0.4.8",
3
+ "version": "0.5.0",
4
4
  "description": "SkipUI — the SkipLeague design system: shared tokens and React components for every SkipLeague app.",
5
5
  "type": "module",
6
6
  "repository": {
package/src/AppLogo.tsx CHANGED
@@ -1,13 +1,24 @@
1
1
  import type { CSSProperties, ReactNode } from "react";
2
2
 
3
3
  /** A SkipLeague app's logo glyph (monoline, drawn on the brand tile). */
4
- export type AppGlyph = "lists" | "racquetball" | "trips" | "gifts" | "reading" | "today";
4
+ export type AppGlyph =
5
+ | "lists"
6
+ | "racquetball"
7
+ | "trips"
8
+ | "gifts"
9
+ | "reading"
10
+ | "today"
11
+ | "guide"
12
+ | "flow";
5
13
 
6
- // Exact 24×24 glyph paths (design_handoff_top_bar). `color` only matters for the
7
- // racquetball ball, which is filled rather than stroked.
14
+ // Exact 24×24 glyph paths (design_handoff_app_glyphs the finalized round that
15
+ // fixed racquetball, trips, and flow and added the guide mark). `color` only
16
+ // matters for filled sub-shapes (e.g. the racquetball ball), which are filled
17
+ // rather than stroked.
8
18
  function glyphPaths(app: AppGlyph, color: string): ReactNode {
9
19
  switch (app) {
10
20
  case "lists":
21
+ // Checklist ticks.
11
22
  return (
12
23
  <>
13
24
  <path d="M3.5 7l1.8 1.8L8.5 5.6" />
@@ -17,52 +28,77 @@ function glyphPaths(app: AppGlyph, color: string): ReactNode {
17
28
  </>
18
29
  );
19
30
  case "racquetball":
31
+ // Racquet (teardrop head + handle rotated 40°) with a filled ball.
20
32
  return (
21
33
  <>
22
- <ellipse cx="10" cy="9" rx="5.4" ry="6.6" transform="rotate(-34 10 9)" />
23
- <path d="M6.6 14.2L3.4 19.4" />
24
- <circle cx="18" cy="17.4" r="2.3" fill={color} stroke="none" />
34
+ <g transform="rotate(40 10 9)">
35
+ <path d="M10 3C13.2 3 14.8 5.6 14.8 8.4C14.8 11.4 12.6 13.6 10 15.6C7.4 13.6 5.2 11.4 5.2 8.4C5.2 5.6 6.8 3 10 3Z" />
36
+ <path d="M10 15.6L10 21" />
37
+ </g>
38
+ <circle cx="17.8" cy="17" r="2.3" fill={color} stroke="none" />
25
39
  </>
26
40
  );
27
41
  case "trips":
42
+ // Hard-shell suitcase: top handle and two clasps on the body.
28
43
  return (
29
44
  <>
30
- <path d="M12 21.5s6.6-5.8 6.6-10.5a6.6 6.6 0 1 0-13.2 0c0 4.7 6.6 10.5 6.6 10.5z" />
31
- <circle cx="12" cy="10.8" r="2.4" />
45
+ <rect x="3.5" y="8" width="17" height="11.5" rx="2.2" />
46
+ <path d="M8.5 8V6.2a1.6 1.6 0 0 1 1.6-1.6h3.8a1.6 1.6 0 0 1 1.6 1.6V8" />
47
+ <path d="M9.5 12.4h1.8" />
48
+ <path d="M12.7 12.4h1.8" />
32
49
  </>
33
50
  );
34
51
  case "gifts":
35
- // Gift box: lid band, body, vertical ribbon, and a two-loop bow.
52
+ // Gift box: body, lid band, vertical ribbon, and a two-loop bow.
36
53
  return (
37
54
  <>
38
- <rect x="3.5" y="8" width="17" height="4.5" rx="1" />
39
- <path d="M5 12.5V20h14v-7.5" />
40
- <path d="M12 8v12" />
41
- <path d="M12 8C11 5.5 9.5 4.2 8.2 4.9 6.9 5.6 8 8 12 8Z" />
42
- <path d="M12 8c1-2.5 2.5-3.8 3.8-3.1C17.1 5.6 16 8 12 8Z" />
55
+ <path d="M4 11h16v8.5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1z" />
56
+ <path d="M3 7.5h18v3.5H3z" />
57
+ <path d="M12 7.5v13" />
58
+ <path d="M12 7.5C11 5.2 7.6 4.6 7.6 6.5C7.6 7.7 9.7 8 12 7.5z" />
59
+ <path d="M12 7.5C13 5.2 16.4 4.6 16.4 6.5C16.4 7.7 14.3 8 12 7.5z" />
43
60
  </>
44
61
  );
45
62
  case "reading":
46
63
  // Open book: two pages meeting at a center spine.
47
64
  return (
48
65
  <>
49
- <path d="M12 6.5C9.8 5.1 6.4 4.6 4 5.3v12.6c2.4-.7 5.8-.2 8 1.2 2.2-1.4 5.6-1.9 8-1.2V5.3C17.6 4.6 14.2 5.1 12 6.5Z" />
50
- <path d="M12 6.5V19.3" />
66
+ <path d="M12 6.6C9.8 5.1 6.4 4.8 4 5.4v12.8c2.4-.6 5.8-.3 8 1.2 2.2-1.5 5.6-1.8 8-1.2V5.4c-2.4-.6-5.8-.3-8 1.2z" />
67
+ <path d="M12 6.6v12.8" />
51
68
  </>
52
69
  );
53
70
  case "today":
54
71
  // Sun = "today" / the day.
55
72
  return (
56
73
  <>
57
- <circle cx="12" cy="12" r="3.8" />
58
- <path d="M12 2.6V5" />
59
- <path d="M12 19V21.4" />
60
- <path d="M2.6 12H5" />
61
- <path d="M19 12H21.4" />
62
- <path d="M5.2 5.2 6.9 6.9" />
63
- <path d="M17.1 17.1 18.8 18.8" />
64
- <path d="M18.8 5.2 17.1 6.9" />
65
- <path d="M6.9 17.1 5.2 18.8" />
74
+ <circle cx="12" cy="12" r="4" />
75
+ <path d="M12 2.4v2.2" />
76
+ <path d="M12 19.4v2.2" />
77
+ <path d="M4.6 4.6l1.6 1.6" />
78
+ <path d="M17.8 17.8l1.6 1.6" />
79
+ <path d="M2.4 12h2.2" />
80
+ <path d="M19.4 12h2.2" />
81
+ <path d="M6.2 17.8l-1.6 1.6" />
82
+ <path d="M17.8 6.2l1.6-1.6" />
83
+ </>
84
+ );
85
+ case "guide":
86
+ // Folded map.
87
+ return (
88
+ <>
89
+ <path d="M9 4L3 6.4v13.6L9 17.6l6 2.4 6-2.4V6L15 8.4z" />
90
+ <path d="M9 4v13.6" />
91
+ <path d="M15 8.4V20" />
92
+ </>
93
+ );
94
+ case "flow":
95
+ // Two rounded cards linked by an elbow connector — orchestration
96
+ // ("when X happens, do Y").
97
+ return (
98
+ <>
99
+ <rect x="3.5" y="4.5" width="7" height="6" rx="1.6" />
100
+ <rect x="13.5" y="13" width="7" height="6" rx="1.6" />
101
+ <path d="M10.5 7.5h2.5a2 2 0 0 1 2 2v3.5" />
66
102
  </>
67
103
  );
68
104
  }
package/src/apps.ts CHANGED
@@ -22,6 +22,7 @@ export const SKIPLEAGUE_APPS: AppLink[] = [
22
22
  { slug: "skipreading", name: "SkipReading", url: "https://reading.skipleague.com" },
23
23
  { slug: "skipgifts", name: "SkipGifts", url: "https://gifts.skipleague.com" },
24
24
  { slug: "skiptoday", name: "SkipToday", url: "https://today.skipleague.com" },
25
+ { slug: "skipflow", name: "SkipFlow", url: "https://flow.skipleague.com" },
25
26
  ];
26
27
 
27
28
  /** Default target for the menu's "Manage account" link (the platform account page). */