8seneca-app-launcher 0.1.3 → 0.2.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/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import * as react from 'react';
2
- import { LucideIcon } from 'lucide-react';
3
2
 
4
- type AppId = "hrm" | "plane";
3
+ type AppId = "hrm" | "plane" | "ai";
4
+ /** Deployment ring — decides which host each tile points at. */
5
+ type RingId = "prod" | "kc-test" | "sandbox";
5
6
  type AppTile = {
6
7
  id: AppId;
7
8
  name: string;
8
9
  url: string;
9
- icon: LucideIcon;
10
- /** Any CSS colour string; painted behind the tile icon. */
11
- color: string;
10
+ /** The app's square brand logo as an image URL; the panel rounds its corners. */
11
+ logo: string;
12
12
  };
13
13
  type AppLauncherProps = {
14
14
  /** Override tile URLs by id — local development only. */
@@ -33,14 +33,20 @@ type PanelProps = {
33
33
  declare function LauncherPanel({ tiles, hostname, label, id }: PanelProps): react.JSX.Element;
34
34
 
35
35
  /**
36
- * The complete 8seneca app list. URLs live here on purpose: the apps' env
37
- * conventions diverge (NEXT_PUBLIC_* vs VITE_*), so baking them keeps every
38
- * consumer at zero configuration. Adding an app means publishing a version.
36
+ * One URL set per deployment ring. Baked in on purpose: the apps' env
37
+ * conventions diverge (NEXT_PUBLIC_* vs VITE_*), so this keeps every consumer
38
+ * at zero configuration. Adding a ring or moving a host means publishing.
39
39
  */
40
+ declare const RINGS: Record<RingId, Record<AppId, string>>;
41
+ declare function ringFor(hostname: string): RingId;
42
+ /** The production tiles, for consumers that want the list without a hostname. */
40
43
  declare const APPS: AppTile[];
41
- /** Applies per-id URL overrides. Unknown ids and empty strings are ignored. */
42
- declare function resolveApps(urls?: Partial<Record<AppId, string>>): AppTile[];
44
+ /**
45
+ * Tiles for the ring `hostname` belongs to, with per-id URL overrides applied
46
+ * last. Unknown ids and empty strings are ignored.
47
+ */
48
+ declare function resolveApps(urls?: Partial<Record<AppId, string>>, hostname?: string): AppTile[];
43
49
  /** True when the tile points at the page we are already on. */
44
50
  declare function isCurrent(app: AppTile, hostname: string): boolean;
45
51
 
46
- export { APPS, type AppId, AppLauncher, AppLauncherFab, type AppLauncherProps, type AppTile, LauncherPanel, isCurrent, resolveApps };
52
+ export { APPS, type AppId, AppLauncher, AppLauncherFab, type AppLauncherProps, type AppTile, LauncherPanel, RINGS, type RingId, isCurrent, resolveApps, ringFor };
package/dist/index.js CHANGED
@@ -3,29 +3,60 @@
3
3
  // src/launcher.tsx
4
4
  import { Grip } from "lucide-react";
5
5
 
6
+ // src/logos/8people-logo.svg
7
+ var people_logo_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">%0A <defs>%0A <linearGradient id="brand" x1="0" y1="0" x2="1" y2="1">%0A <stop offset="0" stop-color="%23181e54"/>%0A <stop offset="1" stop-color="%23fd364f"/>%0A </linearGradient>%0A </defs>%0A <rect width="52" height="52" fill="url(%23brand)"/>%0A <path transform="translate(17.45 10) scale(0.052288)" fill="%23fff" d="M269.4 354.9L168.7 254.3L120.7 206.4C107.8 193.4 100.6 176.5 100.6 158.5C100.5 140.5 107.6 123.4 120.5 110.5C124 107 127.7 104.1 131.8 101.4C135.5 98.9 139 97.1 143 95.5C144.8 94.8 146.6 94.1 149 93.4L155.5 91.8C161.3 90.6 167.2 90.2 173.1 90.6C189.4 91.7 204.9 98.8 216.7 110.6C227.7 121.6 234.7 135.9 236.4 151C236.7 153.6 236.8 156.1 236.8 158.6H236.9V291.8L269.5 259.2C287.9 240.8 300.9 217.9 307.1 193C311.2 176.6 312.4 159.7 310.5 142.7C306.9 110.9 292.3 80.7 269.5 57.9C244.9 33.3 212.4 18.5 178.2 16.3C165.3 15.5 152.3 16.4 139.5 19.1L128.4 21.9C123.5 23.3 118.9 25 114.8 26.7C106.7 30 98.6 34.3 91.3 39.1C83.3 44.2 75.5 50.5 68.1 57.8C41 84.9 26.1 120.8 26.2 158.7C26.2 196.3 41 232 68 259.1L107.1 298.1L113.1 304.1L168.7 359.6L206.4 397.3L216.6 407.5C229.5 420.5 236.7 437.5 236.7 455.4C236.8 473.4 229.7 490.5 216.8 503.3C213.3 506.8 209.6 509.8 205.5 512.4C201.8 514.9 198.3 516.7 194.3 518.3C192.4 519.1 190.4 519.8 188.2 520.4L181.8 522C176 523.2 170.2 523.6 164.2 523.2C147.9 522.1 132.4 515 120.6 503.2C109.6 492.2 102.6 477.9 100.9 462.8C100.7 460.6 100.5 458.3 100.5 456.1V322.3L67.9 354.9C49.5 373.3 36.5 396.2 30.3 421.1C26.2 437.5 25 454.4 26.9 471.4C30.5 503.2 45.1 533.4 67.9 556.2C92.5 580.8 125 595.6 159.3 597.8C162.4 598 165.6 598.1 168.7 598.1C178.5 598.1 188.3 597.1 198 595L209 592.2C213.9 590.8 218.5 589.1 222.6 587.4C230.7 584.1 238.8 579.8 246.1 575C254.1 569.9 261.9 563.6 269.3 556.3C296.4 529.2 311.3 493.3 311.2 455.4C311.3 417.6 296.5 382 269.4 354.9Z"/>%0A</svg>%0A';
8
+
9
+ // src/logos/8projects-logo.png
10
+ var projects_logo_default = "data:image/png;base64,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";
11
+
12
+ // src/logos/8ai-logo.svg
13
+ var ai_logo_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3813 3813" fill="none">%0D%0A <path d="M1906 0C1906.27 1052.7 2759.74 1906 3812.5 1906C3812.67 1906 3812.83 1906 3813 1906L3813 1906C3812.83 1906 3812.67 1906 3812.5 1906C2759.57 1906 1906 2759.57 1906 3812.5C1906 3812.67 1906 3812.83 1906 3813L1906 3813C1906 3812.83 1906 3812.67 1906 3812.5C1906 2759.74 1052.7 1906.27 0 1906V1906C1052.53 1905.73 1905.73 1052.53 1906 0H1906Z" fill="url(%23g0)"/>%0D%0A <path d="M1037.41 2805C1037.46 3000.67 1194.36 3159.27 1387.91 3159.27C1387.94 3159.27 1387.97 3159.27 1388 3159.27L1388 3159.27C1387.97 3159.27 1387.94 3159.27 1387.91 3159.27C1194.38 3159.27 1037.49 3317.84 1037.41 3513.48C1037.32 3317.87 880.483 3159.32 687 3159.27V3159.27C880.502 3159.22 1037.36 3000.63 1037.41 2805Z" fill="url(%23g1)"/>%0D%0A <path d="M2825.76 259C2825.83 533.701 3050.07 756.368 3326.66 756.368C3326.7 756.368 3326.75 756.367 3326.79 756.367L3326.79 756.369C3326.75 756.369 3326.7 756.369 3326.66 756.369C3050.06 756.369 2825.83 979.041 2825.76 1253.75C2825.7 979.085 2601.53 756.441 2325 756.369V756.367C2601.53 756.295 2825.69 533.657 2825.76 259H2825.76Z" fill="url(%23g2)"/>%0D%0A <defs>%0D%0A <linearGradient id="g0" x1="1906.5" y1="0" x2="1906.5" y2="3813" gradientUnits="userSpaceOnUse">%0D%0A <stop stop-color="%23181E54"/><stop offset="1" stop-color="%23EB1933"/>%0D%0A </linearGradient>%0D%0A <linearGradient id="g1" x1="1037.5" y1="2805" x2="1037.5" y2="3513.48" gradientUnits="userSpaceOnUse">%0D%0A <stop stop-color="%23181E54"/><stop offset="1" stop-color="%23EB1933"/>%0D%0A </linearGradient>%0D%0A <linearGradient id="g2" x1="2825.9" y1="259" x2="2825.9" y2="1253.75" gradientUnits="userSpaceOnUse">%0D%0A <stop stop-color="%23181E54"/><stop offset="1" stop-color="%23EB1933"/>%0D%0A </linearGradient>%0D%0A </defs>%0D%0A</svg>%0D%0A';
14
+
6
15
  // src/apps.ts
7
- import { Briefcase, FolderKanban } from "lucide-react";
8
- var APPS = [
9
- {
10
- id: "hrm",
11
- name: "8People",
12
- url: "https://people.8seneca.com",
13
- icon: Briefcase,
14
- color: "oklch(0.65 0.15 240)"
16
+ var TILES = [
17
+ { id: "hrm", name: "8People", logo: people_logo_default },
18
+ { id: "plane", name: "8Projects", logo: projects_logo_default },
19
+ { id: "ai", name: "8AI", logo: ai_logo_default }
20
+ ];
21
+ var AI_URL = "https://8ai.up.railway.app/assistant";
22
+ var RINGS = {
23
+ prod: {
24
+ hrm: "https://people.8seneca.com",
25
+ plane: "https://projects.8seneca.com",
26
+ ai: AI_URL
27
+ },
28
+ // The Keycloak test ring: hrm on its kc-test environment, Plane on its
29
+ // sandbox one — the two that authenticate against the same realm.
30
+ "kc-test": {
31
+ hrm: "https://hr-systemweb-kc-test.up.railway.app",
32
+ plane: "https://hub-plane-sandbox.up.railway.app",
33
+ ai: AI_URL
15
34
  },
16
- {
17
- id: "plane",
18
- name: "8Projects",
19
- url: "https://projects.8seneca.com",
20
- icon: FolderKanban,
21
- color: "oklch(0.65 0.15 30)"
35
+ // hrm's own sandbox environment. There is only one sandbox Plane, so it
36
+ // points at the same host kc-test does.
37
+ sandbox: {
38
+ hrm: "https://hr-systemweb-sandbox.up.railway.app",
39
+ plane: "https://hub-plane-sandbox.up.railway.app",
40
+ ai: AI_URL
22
41
  }
23
- ];
24
- function resolveApps(urls) {
25
- if (!urls) return APPS;
26
- return APPS.map((app) => {
27
- const override = urls[app.id];
28
- return override ? { ...app, url: override } : app;
42
+ };
43
+ var HOST_RING = {
44
+ "people.8seneca.com": "prod",
45
+ "projects.8seneca.com": "prod",
46
+ "hr-systemweb-kc-test.up.railway.app": "kc-test",
47
+ // The sandbox Plane is the Keycloak-enabled one, so it pairs with kc-test hrm.
48
+ "hub-plane-sandbox.up.railway.app": "kc-test",
49
+ "hr-systemweb-sandbox.up.railway.app": "sandbox"
50
+ };
51
+ function ringFor(hostname) {
52
+ return HOST_RING[hostname] ?? "prod";
53
+ }
54
+ var APPS = TILES.map((tile) => ({ ...tile, url: RINGS.prod[tile.id] }));
55
+ function resolveApps(urls, hostname = "") {
56
+ const ring = RINGS[ringFor(hostname)];
57
+ return TILES.map((tile) => {
58
+ const override = urls?.[tile.id];
59
+ return { ...tile, url: override || ring[tile.id] };
29
60
  });
30
61
  }
31
62
  function isCurrent(app, hostname) {
@@ -51,17 +82,9 @@ function LauncherPanel({ tiles, hostname, label, id }) {
51
82
  children: [
52
83
  /* @__PURE__ */ jsx("p", { className: "mb-3 px-2 text-xs font-medium uppercase tracking-wide text-launcher-muted", children: label }),
53
84
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 gap-1", children: tiles.map((app) => {
54
- const Icon = app.icon;
55
85
  const current = isCurrent(app, hostname);
56
86
  const body = /* @__PURE__ */ jsxs(Fragment, { children: [
57
- /* @__PURE__ */ jsx(
58
- "span",
59
- {
60
- className: "flex h-10 w-10 items-center justify-center rounded-xl",
61
- style: { backgroundColor: app.color },
62
- children: /* @__PURE__ */ jsx(Icon, { className: "h-5 w-5 text-white", strokeWidth: 2, "aria-hidden": "true" })
63
- }
64
- ),
87
+ /* @__PURE__ */ jsx("img", { src: app.logo, alt: "", className: "h-10 w-10 rounded-md" }),
65
88
  /* @__PURE__ */ jsx("span", { className: "text-[11px] font-medium", children: app.name })
66
89
  ] });
67
90
  return current ? /* @__PURE__ */ jsx(
@@ -129,7 +152,7 @@ var TRIGGER_BASE = "inline-flex items-center justify-center rounded-full text-la
129
152
  function AppLauncher({ urls, label = "Your apps", align = "end" } = {}) {
130
153
  const { open, toggle, rootRef, triggerRef, panelId } = useLauncher();
131
154
  const hostname = useHostname();
132
- const tiles = resolveApps(urls);
155
+ const tiles = resolveApps(urls, hostname);
133
156
  return /* @__PURE__ */ jsxs2("div", { ref: rootRef, className: "relative", children: [
134
157
  /* @__PURE__ */ jsx2(
135
158
  "button",
@@ -151,7 +174,7 @@ function AppLauncher({ urls, label = "Your apps", align = "end" } = {}) {
151
174
  function AppLauncherFab({ urls, label = "Your apps" } = {}) {
152
175
  const { open, toggle, rootRef, triggerRef, panelId } = useLauncher();
153
176
  const hostname = useHostname();
154
- const tiles = resolveApps(urls);
177
+ const tiles = resolveApps(urls, hostname);
155
178
  return /* @__PURE__ */ jsxs2("div", { ref: rootRef, className: "fixed bottom-6 right-6 z-50", children: [
156
179
  open && /* @__PURE__ */ jsx2("div", { className: "absolute bottom-16 right-0", children: /* @__PURE__ */ jsx2(LauncherPanel, { tiles, hostname, label, id: panelId }) }),
157
180
  /* @__PURE__ */ jsx2(
@@ -176,6 +199,8 @@ export {
176
199
  AppLauncher,
177
200
  AppLauncherFab,
178
201
  LauncherPanel,
202
+ RINGS,
179
203
  isCurrent,
180
- resolveApps
204
+ resolveApps,
205
+ ringFor
181
206
  };
package/dist/styles.css CHANGED
@@ -21,4 +21,4 @@
21
21
  * utilities silently go missing. Listing them here makes the package
22
22
  * self-contained — consumers only import this file.
23
23
  */
24
- @source inline("absolute bg-launcher-hover bg-launcher-surface border border-launcher-border bottom-16 bottom-6 cursor-default fixed flex flex-col focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-launcher-ring font-medium gap-1 gap-1.5 grid grid-cols-3 h-10 h-5 h-9 hover:bg-launcher-hover hover:scale-105 inline-flex items-center justify-center left-0 mb-3 no-underline p-3 p-4 px-2 relative right-0 right-6 rounded-2xl rounded-full rounded-xl shadow-lg size-12 size-5 text-[11px] text-launcher-fg text-launcher-muted text-white text-xs top-11 tracking-wide transition-colors transition-transform uppercase w-10 w-5 w-72 w-9 z-50");
24
+ @source inline("absolute bg-launcher-hover bg-launcher-surface border border-launcher-border bottom-16 bottom-6 cursor-default fixed flex flex-col focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-launcher-ring font-medium gap-1 gap-1.5 grid grid-cols-3 h-10 h-5 h-9 hover:bg-launcher-hover hover:scale-105 inline-flex items-center justify-center left-0 mb-3 no-underline p-3 p-4 px-2 relative right-0 right-6 rounded-2xl rounded-full rounded-md rounded-xl shadow-lg size-12 size-5 text-[11px] text-launcher-fg text-launcher-muted text-xs top-11 tracking-wide transition-colors transition-transform uppercase w-10 w-5 w-72 w-9 z-50");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "8seneca-app-launcher",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "9-dot app launcher shared across the 8seneca apps",
5
5
  "license": "MIT",
6
6
  "repository": {