@net-advantage/jo-ui-logo 1.1.7 → 1.3.1

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/README.md CHANGED
@@ -2,23 +2,26 @@
2
2
 
3
3
  JourneyOf wordmark. `journey` uses Inter. The accent `of..` uses Caveat. A dotted curve sits under the word.
4
4
 
5
- The logo follows a strict MVVM split. The model owns defaults and the font address. The view-model projects presentation values and requests the font faces. The view only renders the view-model.
5
+ The logo follows a strict MVVM split. The model owns defaults. The view-model projects presentation values. The view only renders the view-model. Inter and Caveat are self-hosted by `@net-advantage/jo-ui-theme`.
6
6
 
7
7
  ## MVVM
8
8
 
9
9
  ```mermaid
10
10
  flowchart LR
11
11
  Props["LogoProps"] --> ViewModel["useLogoViewModel"]
12
- Model["logo.model.ts<br/>defaults and font address"] --> ViewModel
12
+ Model["logo.model.ts<br/>defaults and class name"] --> ViewModel
13
13
  ViewModel --> View["Logo.tsx"]
14
+ MarkProps["MobileMarkProps"] --> MarkModel["useMobileMarkViewModel"]
15
+ MarkModel --> Mark["MobileMark.tsx"]
14
16
  ```
15
17
 
16
18
  | Layer | File | Responsibility |
17
19
  | --- | --- | --- |
18
20
  | Contract | [logo.types.ts](src/logo.types.ts) | Props and view-model |
19
- | Model | [logo.model.ts](src/logo.model.ts) | Default colors, curve size, class name, and font address |
20
- | View-model | [logo.view-model.ts](src/logo.view-model.ts) | Project colors, curve size, width, and font families; request font faces |
21
+ | Model | [logo.model.ts](src/logo.model.ts) | Default colors, curve size, and class name |
22
+ | View-model | [logo.view-model.ts](src/logo.view-model.ts) | Project colors, curve size, width, and font families |
21
23
  | View | [Logo.tsx](src/Logo.tsx) | Render the wordmark and dotted curve |
24
+ | View | [MobileMark.tsx](src/MobileMark.tsx) | Render the 43×28 compact mark. Light uses the primary artwork. Dark uses the reversed artwork. |
22
25
 
23
26
  ## Models
24
27
 
@@ -26,7 +29,6 @@ flowchart LR
26
29
  flowchart TD
27
30
  Defaults["LOGO_DEFAULTS"] --> ViewModel["LogoViewModel"]
28
31
  Props["LogoProps"] --> ViewModel
29
- Font["LOGO_FONT_HREF"] --> Link["font stylesheet link"]
30
32
  ViewModel --> Word["journey"]
31
33
  ViewModel --> Accent["of.."]
32
34
  ViewModel --> Curve["dotted curve"]
@@ -35,7 +37,7 @@ flowchart TD
35
37
  - `primaryColor` colors `journey` and the curve's end dot. It defaults to `#14224a`.
36
38
  - `accentColor` colors `of..` and the curve. It defaults to `#6495ed`.
37
39
  - `curveWidth` defaults to `80`. `curveHeight` defaults to `10`.
38
- - The font request lives in the view-model. The model only names the address.
40
+ - Font families stay `Inter` and `Caveat`. Load them with `import '@net-advantage/jo-ui-theme/style.css'`. The logo does not request Google Fonts.
39
41
 
40
42
  ## Structure
41
43
 
@@ -43,11 +45,13 @@ flowchart TD
43
45
 
44
46
  ## Fonts
45
47
 
46
- The module requests Inter and Caveat from Google Fonts as soon as it loads. It adds one `preconnect` to `fonts.gstatic.com` and one stylesheet link marked `data-jo-ui-logo-fonts`. A second import does not add another link.
48
+ Inter (including weight 800) and Caveat 600 ship in `@net-advantage/jo-ui-theme`. Import that stylesheet once:
47
49
 
48
- Do not request these faces with a CSS `@import` inside `logo.css`. A component stylesheet is often injected after other rules, and the browser then ignores the import. That is why the accent face could look wrong until another screen loaded the font first.
50
+ ```ts
51
+ import '@net-advantage/jo-ui-theme/style.css';
52
+ ```
49
53
 
50
- The first paint may still use the fallback face until the font files arrive. `display=swap` replaces it with Caveat when the face is ready.
54
+ The faces use `font-display: swap` and are licensed under the SIL Open Font License. The logo package does not add a Google Fonts `<link>` or CSS `@import`.
51
55
 
52
56
  ## Props
53
57
 
@@ -0,0 +1,3 @@
1
+ import type { MobileMarkProps } from './logo.types';
2
+ import './logo.css';
3
+ export declare function MobileMark(props: MobileMarkProps): import("react").JSX.Element;
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);let t=require("react");var n=`https://fonts.googleapis.com/css2?family=Inter:wght@800&family=Caveat:wght@600&display=swap`,r={primaryColor:`#14224a`,accentColor:`#6495ed`,curveWidth:80,curveHeight:10};function i(e){return[`jo-ui-logo`,e??``].filter(Boolean).join(` `)}function a(e){return e===void 0?null:{width:e}}function o(){if(typeof document>`u`||document.querySelector(`link[data-jo-ui-logo-fonts]`))return;let e=document.createElement(`link`);e.rel=`preconnect`,e.href=`https://fonts.gstatic.com`,e.crossOrigin=`anonymous`,document.head.appendChild(e);let t=document.createElement(`link`);t.rel=`stylesheet`,t.href=n,t.dataset.joUiLogoFonts=`true`,document.head.appendChild(t)}function s(e){let{className:n,primaryColor:s=r.primaryColor,accentColor:c=r.accentColor,width:l,curveWidth:u=r.curveWidth,curveHeight:d=r.curveHeight,rootProps:f}=e;return(0,t.useEffect)(()=>{o()},[]),(0,t.useMemo)(()=>({className:i(n),primaryColor:s,accentColor:c,curveWidth:u,curveHeight:d,widthStyle:a(l),mainFontFamily:`Inter, 'Segoe UI', system-ui, sans-serif`,accentFontFamily:`'Caveat', cursive`,rootProps:f}),[c,n,d,u,s,f,l])}var c=e((e=>{var t=Symbol.for(`react.transitional.element`);function n(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.jsx=n,e.jsxs=n})),l=e(((e,t)=>{t.exports=c()}))();function u(e){let t=s(e);return(0,l.jsxs)(`div`,{...t.rootProps,className:t.className,style:t.widthStyle??void 0,"aria-label":`JourneyOf`,children:[(0,l.jsxs)(`p`,{children:[(0,l.jsx)(`span`,{style:{fontFamily:t.mainFontFamily,fontWeight:800,fontSize:22,color:t.primaryColor},children:`journey`}),(0,l.jsx)(`span`,{style:{fontFamily:t.accentFontFamily,fontWeight:600,fontSize:24,color:t.accentColor},children:`of..`})]}),(0,l.jsxs)(`svg`,{width:t.curveWidth,height:t.curveHeight,viewBox:`0 0 100 15`,"aria-hidden":`true`,focusable:`false`,children:[(0,l.jsx)(`path`,{d:`M2 4 C 16 11, 31 -1, 45 7 S 74 13, 90 3`,fill:`none`,stroke:t.accentColor,strokeWidth:`2.2`,strokeLinecap:`round`,strokeDasharray:`0.2 6`,opacity:`0.9`}),(0,l.jsx)(`circle`,{cx:`2`,cy:`4`,r:`2.2`,fill:t.accentColor}),(0,l.jsx)(`circle`,{cx:`90`,cy:`3`,r:`2.2`,fill:t.primaryColor})]})]})}exports.Logo=u;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);let t=require("react");var n=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 3 77.0 50.4" role="img" aria-label="JourneyOf"><path fill="#14224a" fill-rule="evenodd" d="M6 16H15.2V43.2C15.2 49.6 11.8 52.4 5.6 52.4H2.2V45H4C5.6 45 6 44.3 6 42.6Z M10.6 4.2a4.9 4.9 0 1 0 .01 0Z"/><path fill="#6495ed" d="M 24.47 40.40 L 24.47 40.40 Q 23.61 40.40 23.12 40.08 Q 22.64 39.75 21.93 39.16 L 21.93 39.16 Q 20.69 37.87 20.05 36.49 Q 19.40 35.09 19.62 33.98 L 19.62 33.98 Q 19.80 33.47 19.78 32.98 Q 19.72 32.50 19.72 32.50 L 19.72 32.50 Q 19.40 32.18 19.53 32.09 Q 19.67 31.99 19.80 31.72 L 19.80 31.72 Q 20.18 31.72 20.05 31.02 L 20.05 31.02 Q 19.94 30.50 20.51 28.78 Q 21.10 27.08 22.07 25.51 L 22.07 25.51 Q 22.45 24.87 23.23 23.79 Q 24.01 22.74 24.96 21.66 Q 25.87 20.61 26.65 19.96 L 26.65 19.96 Q 28.27 18.58 29.59 17.80 Q 30.94 17.05 32.34 16.72 L 32.34 16.72 Q 33.77 16.40 34.99 16.40 Q 36.17 16.40 37.14 17.42 L 37.14 17.42 Q 38.63 18.07 39.27 19.10 Q 39.92 20.15 40.11 21.90 L 40.11 21.90 Q 40.33 23.84 39.76 26.54 Q 39.22 29.26 36.63 32.96 L 36.63 32.96 Q 35.01 35.28 33.53 36.52 Q 32.02 37.76 30.16 38.84 L 30.16 38.84 Q 28.78 39.75 27.38 40.02 Q 25.95 40.27 24.47 40.40 Z M 30.94 32.90 L 30.94 32.90 Q 32.42 31.47 33.13 29.94 Q 33.85 28.43 34.61 26.30 L 34.61 26.30 Q 34.88 25.84 34.99 24.87 Q 35.07 23.90 34.99 22.98 Q 34.88 22.09 34.50 21.96 L 34.50 21.96 Q 33.85 21.50 33.10 21.74 Q 32.34 21.96 31.32 22.74 L 31.32 22.74 Q 29.38 24.36 27.76 26.59 Q 26.14 28.80 25.22 31.93 L 25.22 31.93 Q 24.79 33.79 25.33 34.79 Q 25.87 35.82 27.33 35.41 Q 28.78 35.03 30.94 32.90 Z"/><circle cx="47.4" cy="38.4" r="3.1" fill="#a9c0f2"/><circle cx="57.4" cy="36" r="4.3" fill="#6495ed"/><circle cx="70.4" cy="33" r="5.6" fill="#14224a"/></svg>`,r=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 3 77.0 50.4" role="img" aria-label="JourneyOf"><path fill="#ffffff" fill-rule="evenodd" d="M6 16H15.2V43.2C15.2 49.6 11.8 52.4 5.6 52.4H2.2V45H4C5.6 45 6 44.3 6 42.6Z M10.6 4.2a4.9 4.9 0 1 0 .01 0Z"/><path fill="#6495ed" d="M 24.47 40.40 L 24.47 40.40 Q 23.61 40.40 23.12 40.08 Q 22.64 39.75 21.93 39.16 L 21.93 39.16 Q 20.69 37.87 20.05 36.49 Q 19.40 35.09 19.62 33.98 L 19.62 33.98 Q 19.80 33.47 19.78 32.98 Q 19.72 32.50 19.72 32.50 L 19.72 32.50 Q 19.40 32.18 19.53 32.09 Q 19.67 31.99 19.80 31.72 L 19.80 31.72 Q 20.18 31.72 20.05 31.02 L 20.05 31.02 Q 19.94 30.50 20.51 28.78 Q 21.10 27.08 22.07 25.51 L 22.07 25.51 Q 22.45 24.87 23.23 23.79 Q 24.01 22.74 24.96 21.66 Q 25.87 20.61 26.65 19.96 L 26.65 19.96 Q 28.27 18.58 29.59 17.80 Q 30.94 17.05 32.34 16.72 L 32.34 16.72 Q 33.77 16.40 34.99 16.40 Q 36.17 16.40 37.14 17.42 L 37.14 17.42 Q 38.63 18.07 39.27 19.10 Q 39.92 20.15 40.11 21.90 L 40.11 21.90 Q 40.33 23.84 39.76 26.54 Q 39.22 29.26 36.63 32.96 L 36.63 32.96 Q 35.01 35.28 33.53 36.52 Q 32.02 37.76 30.16 38.84 L 30.16 38.84 Q 28.78 39.75 27.38 40.02 Q 25.95 40.27 24.47 40.40 Z M 30.94 32.90 L 30.94 32.90 Q 32.42 31.47 33.13 29.94 Q 33.85 28.43 34.61 26.30 L 34.61 26.30 Q 34.88 25.84 34.99 24.87 Q 35.07 23.90 34.99 22.98 Q 34.88 22.09 34.50 21.96 L 34.50 21.96 Q 33.85 21.50 33.10 21.74 Q 32.34 21.96 31.32 22.74 L 31.32 22.74 Q 29.38 24.36 27.76 26.59 Q 26.14 28.80 25.22 31.93 L 25.22 31.93 Q 24.79 33.79 25.33 34.79 Q 25.87 35.82 27.33 35.41 Q 28.78 35.03 30.94 32.90 Z"/><circle cx="47.4" cy="38.4" r="3.1" fill="#3b5bab"/><circle cx="57.4" cy="36" r="4.3" fill="#6495ed"/><circle cx="70.4" cy="33" r="5.6" fill="#ffffff"/></svg>`;function i(e){return[`jo-ui-mobile-mark`,e??``].filter(Boolean).join(` `)}function a(e){return(e===`dark`?r:n).replace(`<svg `,`<svg width="43" height="28" `)}var o={primaryColor:`#14224a`,accentColor:`#6495ed`,curveWidth:80,curveHeight:10};function s(e){return[`jo-ui-logo`,e??``].filter(Boolean).join(` `)}function c(e){return e===void 0?null:{width:e}}function l(e){let{className:n,primaryColor:r=o.primaryColor,accentColor:i=o.accentColor,width:a,curveWidth:l=o.curveWidth,curveHeight:u=o.curveHeight,rootProps:d}=e;return(0,t.useMemo)(()=>({className:s(n),primaryColor:r,accentColor:i,curveWidth:l,curveHeight:u,widthStyle:c(a),mainFontFamily:`Inter, 'Segoe UI', system-ui, sans-serif`,accentFontFamily:`'Caveat', cursive`,rootProps:d}),[i,n,u,l,r,d,a])}function u(e){let n=e.theme===`dark`?`dark`:`light`;return(0,t.useMemo)(()=>({className:i(e.className),markup:a(n),rootProps:e.rootProps}),[e.className,e.rootProps,n])}var d=e((e=>{var t=Symbol.for(`react.transitional.element`);function n(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.jsx=n,e.jsxs=n})),f=e(((e,t)=>{t.exports=d()}))();function p(e){let t=l(e);return(0,f.jsxs)(`div`,{...t.rootProps,className:t.className,style:t.widthStyle??void 0,"aria-label":`JourneyOf`,children:[(0,f.jsxs)(`p`,{children:[(0,f.jsx)(`span`,{style:{fontFamily:t.mainFontFamily,fontWeight:800,fontSize:22,color:t.primaryColor},children:`journey`}),(0,f.jsx)(`span`,{style:{fontFamily:t.accentFontFamily,fontWeight:600,fontSize:24,color:t.accentColor},children:`of..`})]}),(0,f.jsxs)(`svg`,{width:t.curveWidth,height:t.curveHeight,viewBox:`0 0 100 15`,"aria-hidden":`true`,focusable:`false`,children:[(0,f.jsx)(`path`,{d:`M2 4 C 16 11, 31 -1, 45 7 S 74 13, 90 3`,fill:`none`,stroke:t.accentColor,strokeWidth:`2.2`,strokeLinecap:`round`,strokeDasharray:`0.2 6`,opacity:`0.9`}),(0,f.jsx)(`circle`,{cx:`2`,cy:`4`,r:`2.2`,fill:t.accentColor}),(0,f.jsx)(`circle`,{cx:`90`,cy:`3`,r:`2.2`,fill:t.primaryColor})]})]})}function m(e){let t=u(e);return(0,f.jsx)(`span`,{...t.rootProps,className:t.className,dangerouslySetInnerHTML:{__html:t.markup}})}exports.Logo=p,exports.MobileMark=m;
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { Logo } from './Logo';
2
- export type { LogoProps, LogoViewModel } from './logo.types';
2
+ export { MobileMark } from './MobileMark';
3
+ export type { LogoProps, LogoViewModel, MobileMarkProps, MobileMarkViewModel } from './logo.types';
package/dist/index.js CHANGED
@@ -1,54 +1,64 @@
1
1
  import "./jo-ui-logo.css";
2
- import { useEffect as e, useMemo as t } from "react";
2
+ import { useMemo as e } from "react";
3
3
  //#region \0rolldown/runtime.js
4
- var n = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), r = "https://fonts.googleapis.com/css2?family=Inter:wght@800&family=Caveat:wght@600&display=swap", i = {
4
+ var t = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), n = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 3 77.0 50.4\" role=\"img\" aria-label=\"JourneyOf\"><path fill=\"#14224a\" fill-rule=\"evenodd\" d=\"M6 16H15.2V43.2C15.2 49.6 11.8 52.4 5.6 52.4H2.2V45H4C5.6 45 6 44.3 6 42.6Z M10.6 4.2a4.9 4.9 0 1 0 .01 0Z\"/><path fill=\"#6495ed\" d=\"M 24.47 40.40 L 24.47 40.40 Q 23.61 40.40 23.12 40.08 Q 22.64 39.75 21.93 39.16 L 21.93 39.16 Q 20.69 37.87 20.05 36.49 Q 19.40 35.09 19.62 33.98 L 19.62 33.98 Q 19.80 33.47 19.78 32.98 Q 19.72 32.50 19.72 32.50 L 19.72 32.50 Q 19.40 32.18 19.53 32.09 Q 19.67 31.99 19.80 31.72 L 19.80 31.72 Q 20.18 31.72 20.05 31.02 L 20.05 31.02 Q 19.94 30.50 20.51 28.78 Q 21.10 27.08 22.07 25.51 L 22.07 25.51 Q 22.45 24.87 23.23 23.79 Q 24.01 22.74 24.96 21.66 Q 25.87 20.61 26.65 19.96 L 26.65 19.96 Q 28.27 18.58 29.59 17.80 Q 30.94 17.05 32.34 16.72 L 32.34 16.72 Q 33.77 16.40 34.99 16.40 Q 36.17 16.40 37.14 17.42 L 37.14 17.42 Q 38.63 18.07 39.27 19.10 Q 39.92 20.15 40.11 21.90 L 40.11 21.90 Q 40.33 23.84 39.76 26.54 Q 39.22 29.26 36.63 32.96 L 36.63 32.96 Q 35.01 35.28 33.53 36.52 Q 32.02 37.76 30.16 38.84 L 30.16 38.84 Q 28.78 39.75 27.38 40.02 Q 25.95 40.27 24.47 40.40 Z M 30.94 32.90 L 30.94 32.90 Q 32.42 31.47 33.13 29.94 Q 33.85 28.43 34.61 26.30 L 34.61 26.30 Q 34.88 25.84 34.99 24.87 Q 35.07 23.90 34.99 22.98 Q 34.88 22.09 34.50 21.96 L 34.50 21.96 Q 33.85 21.50 33.10 21.74 Q 32.34 21.96 31.32 22.74 L 31.32 22.74 Q 29.38 24.36 27.76 26.59 Q 26.14 28.80 25.22 31.93 L 25.22 31.93 Q 24.79 33.79 25.33 34.79 Q 25.87 35.82 27.33 35.41 Q 28.78 35.03 30.94 32.90 Z\"/><circle cx=\"47.4\" cy=\"38.4\" r=\"3.1\" fill=\"#a9c0f2\"/><circle cx=\"57.4\" cy=\"36\" r=\"4.3\" fill=\"#6495ed\"/><circle cx=\"70.4\" cy=\"33\" r=\"5.6\" fill=\"#14224a\"/></svg>", r = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 3 77.0 50.4\" role=\"img\" aria-label=\"JourneyOf\"><path fill=\"#ffffff\" fill-rule=\"evenodd\" d=\"M6 16H15.2V43.2C15.2 49.6 11.8 52.4 5.6 52.4H2.2V45H4C5.6 45 6 44.3 6 42.6Z M10.6 4.2a4.9 4.9 0 1 0 .01 0Z\"/><path fill=\"#6495ed\" d=\"M 24.47 40.40 L 24.47 40.40 Q 23.61 40.40 23.12 40.08 Q 22.64 39.75 21.93 39.16 L 21.93 39.16 Q 20.69 37.87 20.05 36.49 Q 19.40 35.09 19.62 33.98 L 19.62 33.98 Q 19.80 33.47 19.78 32.98 Q 19.72 32.50 19.72 32.50 L 19.72 32.50 Q 19.40 32.18 19.53 32.09 Q 19.67 31.99 19.80 31.72 L 19.80 31.72 Q 20.18 31.72 20.05 31.02 L 20.05 31.02 Q 19.94 30.50 20.51 28.78 Q 21.10 27.08 22.07 25.51 L 22.07 25.51 Q 22.45 24.87 23.23 23.79 Q 24.01 22.74 24.96 21.66 Q 25.87 20.61 26.65 19.96 L 26.65 19.96 Q 28.27 18.58 29.59 17.80 Q 30.94 17.05 32.34 16.72 L 32.34 16.72 Q 33.77 16.40 34.99 16.40 Q 36.17 16.40 37.14 17.42 L 37.14 17.42 Q 38.63 18.07 39.27 19.10 Q 39.92 20.15 40.11 21.90 L 40.11 21.90 Q 40.33 23.84 39.76 26.54 Q 39.22 29.26 36.63 32.96 L 36.63 32.96 Q 35.01 35.28 33.53 36.52 Q 32.02 37.76 30.16 38.84 L 30.16 38.84 Q 28.78 39.75 27.38 40.02 Q 25.95 40.27 24.47 40.40 Z M 30.94 32.90 L 30.94 32.90 Q 32.42 31.47 33.13 29.94 Q 33.85 28.43 34.61 26.30 L 34.61 26.30 Q 34.88 25.84 34.99 24.87 Q 35.07 23.90 34.99 22.98 Q 34.88 22.09 34.50 21.96 L 34.50 21.96 Q 33.85 21.50 33.10 21.74 Q 32.34 21.96 31.32 22.74 L 31.32 22.74 Q 29.38 24.36 27.76 26.59 Q 26.14 28.80 25.22 31.93 L 25.22 31.93 Q 24.79 33.79 25.33 34.79 Q 25.87 35.82 27.33 35.41 Q 28.78 35.03 30.94 32.90 Z\"/><circle cx=\"47.4\" cy=\"38.4\" r=\"3.1\" fill=\"#3b5bab\"/><circle cx=\"57.4\" cy=\"36\" r=\"4.3\" fill=\"#6495ed\"/><circle cx=\"70.4\" cy=\"33\" r=\"5.6\" fill=\"#ffffff\"/></svg>";
5
+ function i(e) {
6
+ return ["jo-ui-mobile-mark", e ?? ""].filter(Boolean).join(" ");
7
+ }
8
+ function a(e) {
9
+ return (e === "dark" ? r : n).replace("<svg ", "<svg width=\"43\" height=\"28\" ");
10
+ }
11
+ var o = {
5
12
  primaryColor: "#14224a",
6
13
  accentColor: "#6495ed",
7
14
  curveWidth: 80,
8
15
  curveHeight: 10
9
16
  };
10
- function a(e) {
17
+ function s(e) {
11
18
  return ["jo-ui-logo", e ?? ""].filter(Boolean).join(" ");
12
19
  }
13
- function o(e) {
20
+ function c(e) {
14
21
  return e === void 0 ? null : { width: e };
15
22
  }
16
23
  //#endregion
17
24
  //#region src/logo.view-model.ts
18
- function s() {
19
- if (typeof document > "u" || document.querySelector("link[data-jo-ui-logo-fonts]")) return;
20
- let e = document.createElement("link");
21
- e.rel = "preconnect", e.href = "https://fonts.gstatic.com", e.crossOrigin = "anonymous", document.head.appendChild(e);
22
- let t = document.createElement("link");
23
- t.rel = "stylesheet", t.href = r, t.dataset.joUiLogoFonts = "true", document.head.appendChild(t);
24
- }
25
- function c(n) {
26
- let { className: r, primaryColor: c = i.primaryColor, accentColor: l = i.accentColor, width: u, curveWidth: d = i.curveWidth, curveHeight: f = i.curveHeight, rootProps: p } = n;
27
- return e(() => {
28
- s();
29
- }, []), t(() => ({
30
- className: a(r),
31
- primaryColor: c,
32
- accentColor: l,
33
- curveWidth: d,
34
- curveHeight: f,
35
- widthStyle: o(u),
25
+ function l(t) {
26
+ let { className: n, primaryColor: r = o.primaryColor, accentColor: i = o.accentColor, width: a, curveWidth: l = o.curveWidth, curveHeight: u = o.curveHeight, rootProps: d } = t;
27
+ return e(() => ({
28
+ className: s(n),
29
+ primaryColor: r,
30
+ accentColor: i,
31
+ curveWidth: l,
32
+ curveHeight: u,
33
+ widthStyle: c(a),
36
34
  mainFontFamily: "Inter, 'Segoe UI', system-ui, sans-serif",
37
35
  accentFontFamily: "'Caveat', cursive",
38
- rootProps: p
36
+ rootProps: d
39
37
  }), [
38
+ i,
39
+ n,
40
+ u,
40
41
  l,
41
42
  r,
42
- f,
43
43
  d,
44
- c,
45
- p,
46
- u
44
+ a
45
+ ]);
46
+ }
47
+ function u(t) {
48
+ let n = t.theme === "dark" ? "dark" : "light";
49
+ return e(() => ({
50
+ className: i(t.className),
51
+ markup: a(n),
52
+ rootProps: t.rootProps
53
+ }), [
54
+ t.className,
55
+ t.rootProps,
56
+ n
47
57
  ]);
48
58
  }
49
59
  //#endregion
50
60
  //#region ../../node_modules/.pnpm/react@19.3.0/node_modules/react/cjs/react-jsx-runtime.production.js
51
- var l = /* @__PURE__ */ n(((e) => {
61
+ var d = /* @__PURE__ */ t(((e) => {
52
62
  var t = Symbol.for("react.transitional.element");
53
63
  function n(e, n, r) {
54
64
  var i = null;
@@ -63,17 +73,17 @@ var l = /* @__PURE__ */ n(((e) => {
63
73
  };
64
74
  }
65
75
  e.jsx = n, e.jsxs = n;
66
- })), u = (/* @__PURE__ */ n(((e, t) => {
67
- t.exports = l();
76
+ })), f = (/* @__PURE__ */ t(((e, t) => {
77
+ t.exports = d();
68
78
  })))();
69
- function d(e) {
70
- let t = c(e);
71
- return /* @__PURE__ */ (0, u.jsxs)("div", {
79
+ function p(e) {
80
+ let t = l(e);
81
+ return /* @__PURE__ */ (0, f.jsxs)("div", {
72
82
  ...t.rootProps,
73
83
  className: t.className,
74
84
  style: t.widthStyle ?? void 0,
75
85
  "aria-label": "JourneyOf",
76
- children: [/* @__PURE__ */ (0, u.jsxs)("p", { children: [/* @__PURE__ */ (0, u.jsx)("span", {
86
+ children: [/* @__PURE__ */ (0, f.jsxs)("p", { children: [/* @__PURE__ */ (0, f.jsx)("span", {
77
87
  style: {
78
88
  fontFamily: t.mainFontFamily,
79
89
  fontWeight: 800,
@@ -81,7 +91,7 @@ function d(e) {
81
91
  color: t.primaryColor
82
92
  },
83
93
  children: "journey"
84
- }), /* @__PURE__ */ (0, u.jsx)("span", {
94
+ }), /* @__PURE__ */ (0, f.jsx)("span", {
85
95
  style: {
86
96
  fontFamily: t.accentFontFamily,
87
97
  fontWeight: 600,
@@ -89,14 +99,14 @@ function d(e) {
89
99
  color: t.accentColor
90
100
  },
91
101
  children: "of.."
92
- })] }), /* @__PURE__ */ (0, u.jsxs)("svg", {
102
+ })] }), /* @__PURE__ */ (0, f.jsxs)("svg", {
93
103
  width: t.curveWidth,
94
104
  height: t.curveHeight,
95
105
  viewBox: "0 0 100 15",
96
106
  "aria-hidden": "true",
97
107
  focusable: "false",
98
108
  children: [
99
- /* @__PURE__ */ (0, u.jsx)("path", {
109
+ /* @__PURE__ */ (0, f.jsx)("path", {
100
110
  d: "M2 4 C 16 11, 31 -1, 45 7 S 74 13, 90 3",
101
111
  fill: "none",
102
112
  stroke: t.accentColor,
@@ -105,13 +115,13 @@ function d(e) {
105
115
  strokeDasharray: "0.2 6",
106
116
  opacity: "0.9"
107
117
  }),
108
- /* @__PURE__ */ (0, u.jsx)("circle", {
118
+ /* @__PURE__ */ (0, f.jsx)("circle", {
109
119
  cx: "2",
110
120
  cy: "4",
111
121
  r: "2.2",
112
122
  fill: t.accentColor
113
123
  }),
114
- /* @__PURE__ */ (0, u.jsx)("circle", {
124
+ /* @__PURE__ */ (0, f.jsx)("circle", {
115
125
  cx: "90",
116
126
  cy: "3",
117
127
  r: "2.2",
@@ -122,4 +132,14 @@ function d(e) {
122
132
  });
123
133
  }
124
134
  //#endregion
125
- export { d as Logo };
135
+ //#region src/MobileMark.tsx
136
+ function m(e) {
137
+ let t = u(e);
138
+ return /* @__PURE__ */ (0, f.jsx)("span", {
139
+ ...t.rootProps,
140
+ className: t.className,
141
+ dangerouslySetInnerHTML: { __html: t.markup }
142
+ });
143
+ }
144
+ //#endregion
145
+ export { p as Logo, m as MobileMark };
@@ -1,2 +1,2 @@
1
- .container{width:100%}@media (width>=640px){.container{max-width:640px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.jo-ui-logo{--jo-ui-logo-primary:#14224a;--jo-ui-logo-accent:#6495ed;--jo-ui-logo-font-main:"Inter","Segoe UI",system-ui,sans-serif;--jo-ui-logo-font-accent:"Caveat",cursive;display:inline-block}.jo-ui-logo p{margin:0;line-height:1}.jo-ui-logo svg{margin-top:.125rem;display:block}.visible{visibility:visible}.m-0{margin:0}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.block{display:block}.font-extrabold{font-weight:800}.underline{text-decoration-line:underline}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
1
+ .container{width:100%}@media (width>=640px){.container{max-width:640px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.jo-ui-logo{--jo-ui-logo-primary:#14224a;--jo-ui-logo-accent:#6495ed;--jo-ui-logo-font-main:"Inter","Segoe UI",system-ui,sans-serif;--jo-ui-logo-font-accent:"Caveat",cursive;display:inline-block}.jo-ui-logo p{margin:0;line-height:1}.jo-ui-logo svg{margin-top:.125rem;display:block}.jo-ui-mobile-mark{flex:none;width:43px;height:28px;display:inline-flex}.jo-ui-mobile-mark svg{width:43px;height:28px;display:block}.visible{visibility:visible}.m-0{margin:0}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.block{display:block}.flex{display:flex}.font-extrabold{font-weight:800}.underline{text-decoration-line:underline}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
2
2
  /*$vite$:1*/
@@ -1,4 +1,7 @@
1
- export declare const LOGO_FONT_HREF = "https://fonts.googleapis.com/css2?family=Inter:wght@800&family=Caveat:wght@600&display=swap";
1
+ export declare const MOBILE_MARK_WIDTH = 43;
2
+ export declare const MOBILE_MARK_HEIGHT = 28;
3
+ export declare function mobileMarkClassName(className?: string): string;
4
+ export declare function mobileMarkMarkup(theme: 'light' | 'dark'): string;
2
5
  export declare const LOGO_DEFAULTS: {
3
6
  readonly primaryColor: "#14224a";
4
7
  readonly accentColor: "#6495ed";
@@ -8,6 +8,16 @@ export interface LogoProps {
8
8
  readonly curveHeight?: number;
9
9
  readonly rootProps?: Omit<HTMLAttributes<HTMLDivElement>, 'className'>;
10
10
  }
11
+ export interface MobileMarkProps {
12
+ readonly theme?: 'light' | 'dark';
13
+ readonly className?: string;
14
+ readonly rootProps?: Omit<HTMLAttributes<HTMLSpanElement>, 'className' | 'dangerouslySetInnerHTML'>;
15
+ }
16
+ export interface MobileMarkViewModel {
17
+ readonly className: string;
18
+ readonly markup: string;
19
+ readonly rootProps?: MobileMarkProps['rootProps'];
20
+ }
11
21
  export interface LogoViewModel {
12
22
  readonly className: string;
13
23
  readonly primaryColor: string;
@@ -1,2 +1,3 @@
1
- import type { LogoProps, LogoViewModel } from './logo.types';
1
+ import type { LogoProps, LogoViewModel, MobileMarkProps, MobileMarkViewModel } from './logo.types';
2
2
  export declare function useLogoViewModel(props: LogoProps): LogoViewModel;
3
+ export declare function useMobileMarkViewModel(props: MobileMarkProps): MobileMarkViewModel;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@net-advantage/jo-ui-logo",
3
- "version": "1.1.7",
3
+ "version": "1.3.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",