lion-make 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.
Files changed (59) hide show
  1. package/dist/components/footer/ComplianceBlock.d.ts +13 -0
  2. package/dist/components/footer/Disclaimer.d.ts +12 -0
  3. package/dist/components/footer/Disclosure.d.ts +13 -0
  4. package/dist/components/general/CTA.d.ts +18 -0
  5. package/dist/components/general/CallOut.d.ts +13 -0
  6. package/dist/components/general/ConfidenceTags.d.ts +11 -0
  7. package/dist/components/general/LeadForm.d.ts +21 -0
  8. package/dist/components/general/RTBs.d.ts +17 -0
  9. package/dist/components/general/RichText.d.ts +11 -0
  10. package/dist/components/header/CorporateUniversalHeader.d.ts +14 -0
  11. package/dist/components/header/GlobalHeaderBar.d.ts +19 -0
  12. package/dist/components/hero/Hero.d.ts +18 -0
  13. package/dist/components/layout/Anklet.d.ts +14 -0
  14. package/dist/components/layout/Container.d.ts +8 -0
  15. package/dist/components/layout/PageForehead.d.ts +11 -0
  16. package/dist/components/layout/PageSideburn.d.ts +11 -0
  17. package/dist/components/layout/Section.d.ts +8 -0
  18. package/dist/index.d.ts +34 -0
  19. package/dist/lion-make.js +1004 -0
  20. package/dist/lion-make.umd.cjs +30 -0
  21. package/guidelines/Guidelines.md +68 -0
  22. package/guidelines/composition/constraints.md +49 -0
  23. package/guidelines/composition/hierarchy.md +72 -0
  24. package/guidelines/composition/overview.md +22 -0
  25. package/guidelines/composition/templates.md +46 -0
  26. package/guidelines/composition/zones.md +60 -0
  27. package/guidelines/content-types/footer/compliance-block.md +38 -0
  28. package/guidelines/content-types/footer/disclaimer.md +32 -0
  29. package/guidelines/content-types/footer/disclosure.md +39 -0
  30. package/guidelines/content-types/footer/overview.md +38 -0
  31. package/guidelines/content-types/general/callout.md +40 -0
  32. package/guidelines/content-types/general/confidence-tags.md +39 -0
  33. package/guidelines/content-types/general/cta.md +52 -0
  34. package/guidelines/content-types/general/lead-form.md +56 -0
  35. package/guidelines/content-types/general/overview.md +46 -0
  36. package/guidelines/content-types/general/rich-text.md +35 -0
  37. package/guidelines/content-types/general/rtbs.md +55 -0
  38. package/guidelines/content-types/header/corporate-universal-header.md +36 -0
  39. package/guidelines/content-types/header/global-header-bar.md +49 -0
  40. package/guidelines/content-types/header/overview.md +34 -0
  41. package/guidelines/content-types/hero/hero-variants.md +68 -0
  42. package/guidelines/content-types/hero/overview.md +41 -0
  43. package/guidelines/content-types/overview.md +60 -0
  44. package/guidelines/foundations/breakpoints.md +53 -0
  45. package/guidelines/foundations/color.md +86 -0
  46. package/guidelines/foundations/overview.md +26 -0
  47. package/guidelines/foundations/spacing.md +50 -0
  48. package/guidelines/foundations/typography.md +67 -0
  49. package/guidelines/foundations/z-index.md +24 -0
  50. package/guidelines/icon-discovery.md +14 -0
  51. package/guidelines/setup.md +103 -0
  52. package/package.json +53 -0
  53. package/src/tokens/breakpoints.css +21 -0
  54. package/src/tokens/colors.css +81 -0
  55. package/src/tokens/make-utilities.css +129 -0
  56. package/src/tokens/metrics.css +32 -0
  57. package/src/tokens/mixins.css +3 -0
  58. package/src/tokens/typography.css +55 -0
  59. package/src/tokens/z-index.css +14 -0
@@ -0,0 +1,30 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Q=require("react");var X={exports:{}},A={};/**
2
+ * @license React
3
+ * react-jsx-runtime.production.min.js
4
+ *
5
+ * Copyright (c) Facebook, Inc. and its affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var Se;function ur(){if(Se)return A;Se=1;var i=Q,l=Symbol.for("react.element"),o=Symbol.for("react.fragment"),f=Object.prototype.hasOwnProperty,h=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,m={key:!0,ref:!0,__self:!0,__source:!0};function d(b,p,S){var y,T={},k=null,B=null;S!==void 0&&(k=""+S),p.key!==void 0&&(k=""+p.key),p.ref!==void 0&&(B=p.ref);for(y in p)f.call(p,y)&&!m.hasOwnProperty(y)&&(T[y]=p[y]);if(b&&b.defaultProps)for(y in p=b.defaultProps,p)T[y]===void 0&&(T[y]=p[y]);return{$$typeof:l,type:b,key:k,ref:B,props:T,_owner:h.current}}return A.Fragment=o,A.jsx=d,A.jsxs=d,A}var $={};/**
10
+ * @license React
11
+ * react-jsx-runtime.development.js
12
+ *
13
+ * Copyright (c) Facebook, Inc. and its affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */var Te;function dr(){return Te||(Te=1,process.env.NODE_ENV!=="production"&&function(){var i=Q,l=Symbol.for("react.element"),o=Symbol.for("react.portal"),f=Symbol.for("react.fragment"),h=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),d=Symbol.for("react.provider"),b=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),S=Symbol.for("react.suspense"),y=Symbol.for("react.suspense_list"),T=Symbol.for("react.memo"),k=Symbol.for("react.lazy"),B=Symbol.for("react.offscreen"),Z=Symbol.iterator,Ce="@@iterator";function ke(e){if(e===null||typeof e!="object")return null;var r=Z&&e[Z]||e[Ce];return typeof r=="function"?r:null}var P=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function j(e){{for(var r=arguments.length,a=new Array(r>1?r-1:0),t=1;t<r;t++)a[t-1]=arguments[t];we("error",e,a)}}function we(e,r,a){{var t=P.ReactDebugCurrentFrame,u=t.getStackAddendum();u!==""&&(r+="%s",a=a.concat([u]));var v=a.map(function(c){return String(c)});v.unshift("Warning: "+r),Function.prototype.apply.call(console[e],console,v)}}var Oe=!1,Pe=!1,Ne=!1,Fe=!1,De=!1,ee;ee=Symbol.for("react.module.reference");function ze(e){return!!(typeof e=="string"||typeof e=="function"||e===f||e===m||De||e===h||e===S||e===y||Fe||e===B||Oe||Pe||Ne||typeof e=="object"&&e!==null&&(e.$$typeof===k||e.$$typeof===T||e.$$typeof===d||e.$$typeof===b||e.$$typeof===p||e.$$typeof===ee||e.getModuleId!==void 0))}function Ae(e,r,a){var t=e.displayName;if(t)return t;var u=r.displayName||r.name||"";return u!==""?a+"("+u+")":a}function re(e){return e.displayName||"Context"}function C(e){if(e==null)return null;if(typeof e.tag=="number"&&j("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case f:return"Fragment";case o:return"Portal";case m:return"Profiler";case h:return"StrictMode";case S:return"Suspense";case y:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case b:var r=e;return re(r)+".Consumer";case d:var a=e;return re(a._context)+".Provider";case p:return Ae(e,e.render,"ForwardRef");case T:var t=e.displayName||null;return t!==null?t:C(e.type)||"Memo";case k:{var u=e,v=u._payload,c=u._init;try{return C(c(v))}catch{return null}}}return null}var w=Object.assign,D=0,ae,ne,te,oe,ie,le,se;function ce(){}ce.__reactDisabledLog=!0;function $e(){{if(D===0){ae=console.log,ne=console.info,te=console.warn,oe=console.error,ie=console.group,le=console.groupCollapsed,se=console.groupEnd;var e={configurable:!0,enumerable:!0,value:ce,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}D++}}function Be(){{if(D--,D===0){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:w({},e,{value:ae}),info:w({},e,{value:ne}),warn:w({},e,{value:te}),error:w({},e,{value:oe}),group:w({},e,{value:ie}),groupCollapsed:w({},e,{value:le}),groupEnd:w({},e,{value:se})})}D<0&&j("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var L=P.ReactCurrentDispatcher,U;function W(e,r,a){{if(U===void 0)try{throw Error()}catch(u){var t=u.stack.trim().match(/\n( *(at )?)/);U=t&&t[1]||""}return`
18
+ `+U+e}}var V=!1,I;{var We=typeof WeakMap=="function"?WeakMap:Map;I=new We}function ue(e,r){if(!e||V)return"";{var a=I.get(e);if(a!==void 0)return a}var t;V=!0;var u=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var v;v=L.current,L.current=null,$e();try{if(r){var c=function(){throw Error()};if(Object.defineProperty(c.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(c,[])}catch(R){t=R}Reflect.construct(e,[],c)}else{try{c.call()}catch(R){t=R}e.call(c.prototype)}}else{try{throw Error()}catch(R){t=R}e()}}catch(R){if(R&&t&&typeof R.stack=="string"){for(var s=R.stack.split(`
19
+ `),x=t.stack.split(`
20
+ `),g=s.length-1,_=x.length-1;g>=1&&_>=0&&s[g]!==x[_];)_--;for(;g>=1&&_>=0;g--,_--)if(s[g]!==x[_]){if(g!==1||_!==1)do if(g--,_--,_<0||s[g]!==x[_]){var E=`
21
+ `+s[g].replace(" at new "," at ");return e.displayName&&E.includes("<anonymous>")&&(E=E.replace("<anonymous>",e.displayName)),typeof e=="function"&&I.set(e,E),E}while(g>=1&&_>=0);break}}}finally{V=!1,L.current=v,Be(),Error.prepareStackTrace=u}var F=e?e.displayName||e.name:"",O=F?W(F):"";return typeof e=="function"&&I.set(e,O),O}function Ie(e,r,a){return ue(e,!1)}function Ye(e){var r=e.prototype;return!!(r&&r.isReactComponent)}function Y(e,r,a){if(e==null)return"";if(typeof e=="function")return ue(e,Ye(e));if(typeof e=="string")return W(e);switch(e){case S:return W("Suspense");case y:return W("SuspenseList")}if(typeof e=="object")switch(e.$$typeof){case p:return Ie(e.render);case T:return Y(e.type,r,a);case k:{var t=e,u=t._payload,v=t._init;try{return Y(v(u),r,a)}catch{}}}return""}var z=Object.prototype.hasOwnProperty,de={},fe=P.ReactDebugCurrentFrame;function M(e){if(e){var r=e._owner,a=Y(e.type,e._source,r?r.type:null);fe.setExtraStackFrame(a)}else fe.setExtraStackFrame(null)}function Me(e,r,a,t,u){{var v=Function.call.bind(z);for(var c in e)if(v(e,c)){var s=void 0;try{if(typeof e[c]!="function"){var x=Error((t||"React class")+": "+a+" type `"+c+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof e[c]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw x.name="Invariant Violation",x}s=e[c](r,c,t,a,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(g){s=g}s&&!(s instanceof Error)&&(M(u),j("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",t||"React class",a,c,typeof s),M(null)),s instanceof Error&&!(s.message in de)&&(de[s.message]=!0,M(u),j("Failed %s type: %s",a,s.message),M(null))}}}var Le=Array.isArray;function q(e){return Le(e)}function Ue(e){{var r=typeof Symbol=="function"&&Symbol.toStringTag,a=r&&e[Symbol.toStringTag]||e.constructor.name||"Object";return a}}function Ve(e){try{return ve(e),!1}catch{return!0}}function ve(e){return""+e}function he(e){if(Ve(e))return j("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Ue(e)),ve(e)}var pe=P.ReactCurrentOwner,qe={key:!0,ref:!0,__self:!0,__source:!0},me,ge;function He(e){if(z.call(e,"ref")){var r=Object.getOwnPropertyDescriptor(e,"ref").get;if(r&&r.isReactWarning)return!1}return e.ref!==void 0}function Ge(e){if(z.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function Je(e,r){typeof e.ref=="string"&&pe.current}function Ke(e,r){{var a=function(){me||(me=!0,j("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};a.isReactWarning=!0,Object.defineProperty(e,"key",{get:a,configurable:!0})}}function Xe(e,r){{var a=function(){ge||(ge=!0,j("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};a.isReactWarning=!0,Object.defineProperty(e,"ref",{get:a,configurable:!0})}}var Qe=function(e,r,a,t,u,v,c){var s={$$typeof:l,type:e,key:r,ref:a,props:c,_owner:v};return s._store={},Object.defineProperty(s._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(s,"_self",{configurable:!1,enumerable:!1,writable:!1,value:t}),Object.defineProperty(s,"_source",{configurable:!1,enumerable:!1,writable:!1,value:u}),Object.freeze&&(Object.freeze(s.props),Object.freeze(s)),s};function Ze(e,r,a,t,u){{var v,c={},s=null,x=null;a!==void 0&&(he(a),s=""+a),Ge(r)&&(he(r.key),s=""+r.key),He(r)&&(x=r.ref,Je(r,u));for(v in r)z.call(r,v)&&!qe.hasOwnProperty(v)&&(c[v]=r[v]);if(e&&e.defaultProps){var g=e.defaultProps;for(v in g)c[v]===void 0&&(c[v]=g[v])}if(s||x){var _=typeof e=="function"?e.displayName||e.name||"Unknown":e;s&&Ke(c,_),x&&Xe(c,_)}return Qe(e,s,x,u,t,pe.current,c)}}var H=P.ReactCurrentOwner,_e=P.ReactDebugCurrentFrame;function N(e){if(e){var r=e._owner,a=Y(e.type,e._source,r?r.type:null);_e.setExtraStackFrame(a)}else _e.setExtraStackFrame(null)}var G;G=!1;function J(e){return typeof e=="object"&&e!==null&&e.$$typeof===l}function be(){{if(H.current){var e=C(H.current.type);if(e)return`
22
+
23
+ Check the render method of \``+e+"`."}return""}}function er(e){return""}var ye={};function rr(e){{var r=be();if(!r){var a=typeof e=="string"?e:e.displayName||e.name;a&&(r=`
24
+
25
+ Check the top-level render call using <`+a+">.")}return r}}function je(e,r){{if(!e._store||e._store.validated||e.key!=null)return;e._store.validated=!0;var a=rr(r);if(ye[a])return;ye[a]=!0;var t="";e&&e._owner&&e._owner!==H.current&&(t=" It was passed a child from "+C(e._owner.type)+"."),N(e),j('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',a,t),N(null)}}function xe(e,r){{if(typeof e!="object")return;if(q(e))for(var a=0;a<e.length;a++){var t=e[a];J(t)&&je(t,r)}else if(J(e))e._store&&(e._store.validated=!0);else if(e){var u=ke(e);if(typeof u=="function"&&u!==e.entries)for(var v=u.call(e),c;!(c=v.next()).done;)J(c.value)&&je(c.value,r)}}}function ar(e){{var r=e.type;if(r==null||typeof r=="string")return;var a;if(typeof r=="function")a=r.propTypes;else if(typeof r=="object"&&(r.$$typeof===p||r.$$typeof===T))a=r.propTypes;else return;if(a){var t=C(r);Me(a,e.props,"prop",t,e)}else if(r.PropTypes!==void 0&&!G){G=!0;var u=C(r);j("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",u||"Unknown")}typeof r.getDefaultProps=="function"&&!r.getDefaultProps.isReactClassApproved&&j("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function nr(e){{for(var r=Object.keys(e.props),a=0;a<r.length;a++){var t=r[a];if(t!=="children"&&t!=="key"){N(e),j("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",t),N(null);break}}e.ref!==null&&(N(e),j("Invalid attribute `ref` supplied to `React.Fragment`."),N(null))}}var Re={};function Ee(e,r,a,t,u,v){{var c=ze(e);if(!c){var s="";(e===void 0||typeof e=="object"&&e!==null&&Object.keys(e).length===0)&&(s+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var x=er();x?s+=x:s+=be();var g;e===null?g="null":q(e)?g="array":e!==void 0&&e.$$typeof===l?(g="<"+(C(e.type)||"Unknown")+" />",s=" Did you accidentally export a JSX literal instead of a component?"):g=typeof e,j("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",g,s)}var _=Ze(e,r,a,u,v);if(_==null)return _;if(c){var E=r.children;if(E!==void 0)if(t)if(q(E)){for(var F=0;F<E.length;F++)xe(E[F],e);Object.freeze&&Object.freeze(E)}else j("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else xe(E,e)}if(z.call(r,"key")){var O=C(e),R=Object.keys(r).filter(function(cr){return cr!=="key"}),K=R.length>0?"{key: someKey, "+R.join(": ..., ")+": ...}":"{key: someKey}";if(!Re[O+K]){var sr=R.length>0?"{"+R.join(": ..., ")+": ...}":"{}";j(`A props object containing a "key" prop is being spread into JSX:
26
+ let props = %s;
27
+ <%s {...props} />
28
+ React keys must be passed directly to JSX without using spread:
29
+ let props = %s;
30
+ <%s key={someKey} {...props} />`,K,O,sr,O),Re[O+K]=!0}}return e===f?nr(_):ar(_),_}}function tr(e,r,a){return Ee(e,r,a,!0)}function or(e,r,a){return Ee(e,r,a,!1)}var ir=or,lr=tr;$.Fragment=f,$.jsx=ir,$.jsxs=lr}()),$}process.env.NODE_ENV==="production"?X.exports=ur():X.exports=dr();var n=X.exports;const fr=({children:i,className:l})=>n.jsx("div",{"data-template":"forehead",className:["lion-page","lion-page--forehead",l].filter(Boolean).join(" "),style:{maxWidth:"var(--max-width, 1600px)",margin:"0 auto"},children:i}),vr=({children:i,className:l})=>n.jsx("div",{"data-template":"sideburn",className:["lion-page","lion-page--sideburn",l].filter(Boolean).join(" "),style:{maxWidth:"var(--max-width, 1600px)",margin:"0 auto"},children:i}),hr=({zone:i,children:l,className:o})=>n.jsx("section",{"data-zone":i,className:["lion-section",`lion-section--${i}`,o].filter(Boolean).join(" "),children:l}),pr=({type:i="single",children:l,className:o})=>n.jsx("div",{"data-container-type":i,className:["lion-container",`lion-container--${i}`,o].filter(Boolean).join(" "),children:l}),mr=({links:i,className:l})=>n.jsx("nav",{"data-zone":"anklet",className:["lion-anklet",l].filter(Boolean).join(" "),"aria-label":"Quick links",children:n.jsx("ul",{className:"lion-anklet__list",children:i.map(o=>n.jsx("li",{className:"lion-anklet__item",children:n.jsx("a",{href:o.href,className:"lion-anklet__link",children:o.label})},o.href))})}),gr=({logoSrc:i,logoAlt:l,selectedState:o,onStateChange:f,className:h})=>n.jsxs("div",{"data-zone":"header","data-content-type":"corporate-universal-header",className:["lion-corporate-header",h].filter(Boolean).join(" "),style:{backgroundColor:"var(--color-blue-dark)"},children:[n.jsx("img",{src:i,alt:l,className:"lion-corporate-header__logo"}),f&&n.jsx("select",{className:"lion-corporate-header__state-selector",value:o,onChange:m=>f(m.target.value),"aria-label":"Select state"})]}),_r=({logoSrc:i,logoAlt:l,underwriterInfo:o,ctas:f=[],className:h})=>n.jsxs("header",{"data-zone":"header","data-content-type":"global-header-bar",className:["lion-global-header",h].filter(Boolean).join(" "),style:{backgroundColor:"var(--color-white)"},children:[n.jsx("img",{src:i,alt:l,className:"lion-global-header__logo"}),o&&n.jsx("span",{className:"lion-global-header__underwriter",children:o}),f.length>0&&n.jsx("nav",{className:"lion-global-header__ctas","aria-label":"Header actions",children:f.map(m=>n.jsx("a",{href:m.href,className:`lion-global-header__cta lion-global-header__cta--${m.type??"link"}`,children:m.label},m.href))})]}),br=({variant:i,heading:l,subheading:o,imageSrc:f,imageAlt:h,ctaLabel:m,ctaHref:d,className:b})=>n.jsxs("div",{"data-zone":"hero","data-content-type":`hero-${i}`,className:["lion-hero",`lion-hero--${i}`,b].filter(Boolean).join(" "),children:[n.jsxs("div",{className:"lion-hero__content",children:[n.jsx("h1",{className:"lion-hero__heading",style:{fontSize:"var(--h1-font-size)",lineHeight:"var(--h1-line-height)"},children:l}),o&&n.jsx("p",{className:"lion-hero__subheading",style:{fontSize:"var(--font-size-base)"},children:o}),m&&d&&n.jsx("a",{href:d,className:"lion-hero__cta",style:{color:"var(--color-white)",backgroundColor:"var(--color-brand)"},children:m})]}),f&&n.jsx("div",{className:"lion-hero__image-wrapper",children:n.jsx("img",{src:f,alt:h??"",className:"lion-hero__image"})})]}),yr=({type:i,label:l,href:o,phone:f,variant:h="primary",opensInNewTab:m=!1,className:d})=>{const b=m?"_blank":void 0,p=m?"noopener noreferrer":void 0,S=i==="phone"?`tel:${f}`:o;return n.jsx("a",{"data-zone":"general","data-content-type":"cta",href:S,target:b,rel:p,className:["lion-cta",`lion-cta--${i}`,`lion-cta--${h}`,d].filter(Boolean).join(" "),style:{fontFamily:"var(--font-family-sans-serif)",fontWeight:"var(--font-weight-600)",borderRadius:"var(--border-radius-base)",padding:"var(--padding-base-vertical) var(--padding-base-horizontal)",backgroundColor:h==="primary"?"var(--color-brand)":"transparent",color:h==="primary"?"var(--color-white)":"var(--color-link)",borderWidth:h==="secondary"?"var(--border-width-base)":void 0,borderStyle:h==="secondary"?"solid":void 0,borderColor:h==="secondary"?"var(--color-brand)":void 0},children:l})},jr=({heading:i,body:l,ctaLabel:o,ctaHref:f,className:h})=>n.jsxs("div",{"data-zone":"general","data-content-type":"callout",className:["lion-callout",h].filter(Boolean).join(" "),style:{backgroundColor:"var(--color-teal-tint)",borderRadius:"var(--border-radius-base)",padding:"var(--padding-edge)"},children:[n.jsx("h2",{className:"lion-callout__heading",style:{fontSize:"var(--h2-font-size)",fontWeight:"var(--font-weight-700)"},children:i}),n.jsx("p",{className:"lion-callout__body",style:{fontSize:"var(--font-size-base)",color:"var(--color-text)"},children:l}),o&&f&&n.jsx("a",{href:f,className:"lion-callout__cta",style:{color:"var(--color-link)"},children:o})]}),xr=({items:i,className:l})=>n.jsx("ul",{"data-zone":"general","data-content-type":"rtbs",className:["lion-rtbs",l].filter(Boolean).join(" "),style:{listStyle:"none",padding:0,margin:0},children:i.map((o,f)=>n.jsxs("li",{className:"lion-rtbs__item",children:[o.illustrationSrc&&n.jsx("img",{src:o.illustrationSrc,alt:o.illustrationAlt??"",className:"lion-rtbs__illustration"}),n.jsx("h3",{className:"lion-rtbs__heading",style:{fontSize:"var(--h3-font-size)",fontWeight:"var(--font-weight-600)"},children:o.heading}),n.jsx("p",{className:"lion-rtbs__body",style:{fontSize:"var(--font-size-base)",color:"var(--color-text)"},children:o.body})]},f))}),Rr=["Risk-free","No Obligation","Protected Privacy"],Er=({tags:i=Rr,className:l})=>n.jsx("ul",{"data-zone":"general","data-content-type":"confidence-tags",className:["lion-confidence-tags",l].filter(Boolean).join(" "),style:{listStyle:"none",padding:0,margin:0,display:"flex",gap:"var(--Grid-gutter-size)"},children:i.map(o=>n.jsx("li",{className:"lion-confidence-tags__tag",style:{fontSize:"var(--h5-font-size)",fontWeight:"var(--font-weight-600)",color:"var(--color-brand)",borderRadius:"var(--border-radius-small)",padding:"var(--padding-small-vertical) var(--padding-small-horizontal)",backgroundColor:"var(--color-teal-opaque)"},children:o},o))}),Sr=({fields:i,submitLabel:l="Submit",onSubmit:o,mediaCode:f,className:h})=>{const m=d=>{if(d.preventDefault(),!o)return;const b=new FormData(d.currentTarget),p={};b.forEach((S,y)=>{p[y]=S}),o(p)};return n.jsxs("form",{"data-zone":"general","data-content-type":"lead-form","data-media-code":f,className:["lion-lead-form",h].filter(Boolean).join(" "),onSubmit:m,children:[i.map(d=>{var b;return n.jsxs("div",{className:"lion-lead-form__field",children:[n.jsxs("label",{htmlFor:d.name,className:"lion-lead-form__label",style:{fontWeight:"var(--font-weight-600)"},children:[d.label,d.required&&n.jsx("span",{"aria-hidden":"true",children:" *"})]}),d.type==="select"?n.jsx("select",{id:d.name,name:d.name,required:d.required,className:"lion-lead-form__select",children:(b=d.options)==null?void 0:b.map(p=>n.jsx("option",{value:p,children:p},p))}):n.jsx("input",{id:d.name,name:d.name,type:d.type,required:d.required,className:"lion-lead-form__input"})]},d.name)}),n.jsx("button",{type:"submit",className:"lion-lead-form__submit",style:{backgroundColor:"var(--color-brand)",color:"var(--color-white)",fontWeight:"var(--font-weight-600)",borderRadius:"var(--border-radius-base)",padding:"var(--padding-base-vertical) var(--padding-base-horizontal)"},children:l})]})},Tr=({html:i,className:l})=>n.jsx("div",{"data-zone":"general","data-content-type":"rich-text",className:["lion-rich-text",l].filter(Boolean).join(" "),style:{fontFamily:"var(--font-family-sans-serif)",fontSize:"var(--font-size-base)",lineHeight:"var(--line-height-base)",color:"var(--color-text)"},dangerouslySetInnerHTML:{__html:i}}),Cr=({text:i,itemNumber:l,className:o})=>n.jsxs("div",{"data-zone":"footer","data-content-type":"disclaimer",className:["lion-disclaimer",o].filter(Boolean).join(" "),style:{fontSize:"var(--h6-font-size)",color:"var(--color-gray-dark)",lineHeight:"var(--h6-line-height)"},children:[n.jsx("p",{className:"lion-disclaimer__text",children:i}),l&&n.jsx("span",{className:"lion-disclaimer__item-number","aria-label":"Item number",children:l})]}),kr=({triggerLabel:i,content:l,materialId:o,className:f})=>{const[h,m]=Q.useState(!1);return n.jsxs("div",{"data-zone":"footer","data-content-type":"disclosure","data-material-id":o,className:["lion-disclosure",f].filter(Boolean).join(" "),children:[n.jsx("button",{type:"button",className:"lion-disclosure__trigger","aria-expanded":h,onClick:()=>m(d=>!d),style:{fontFamily:"var(--font-family-sans-serif)",fontSize:"var(--h6-font-size)",color:"var(--color-link)",background:"none",border:"none",cursor:"pointer",padding:0},children:i}),h&&n.jsxs("div",{className:"lion-disclosure__content",style:{fontSize:"var(--h6-font-size)",color:"var(--color-gray-dark)",marginTop:"var(--padding-small-vertical)"},children:[l,o&&n.jsxs("span",{className:"lion-disclosure__material-id","aria-label":"Material ID",children:[" ","(",o,")"]})]})]})},wr=({itemNumber:i,materialId:l,text:o,className:f})=>n.jsxs("div",{"data-zone":"footer","data-content-type":"compliance-block",className:["lion-compliance",f].filter(Boolean).join(" "),style:{fontSize:"var(--h6-font-size)",color:"var(--color-gray-dark)",lineHeight:"var(--h6-line-height)"},children:[o&&n.jsx("p",{className:"lion-compliance__text",children:o}),n.jsxs("dl",{className:"lion-compliance__ids",children:[i&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{className:"lion-compliance__label",children:"Item #"}),n.jsx("dd",{className:"lion-compliance__value",children:i})]}),l&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{className:"lion-compliance__label",children:"Material ID"}),n.jsx("dd",{className:"lion-compliance__value",children:l})]})]})]});exports.Anklet=mr;exports.CTA=yr;exports.CallOut=jr;exports.ComplianceBlock=wr;exports.ConfidenceTags=Er;exports.Container=pr;exports.CorporateUniversalHeader=gr;exports.Disclaimer=Cr;exports.Disclosure=kr;exports.GlobalHeaderBar=_r;exports.Hero=br;exports.LeadForm=Sr;exports.PageForehead=fr;exports.PageSideburn=vr;exports.RTBs=xr;exports.RichText=Tr;exports.Section=hr;
@@ -0,0 +1,68 @@
1
+ # lion-make Design System
2
+
3
+ This is a zone-based design system modeled on the Mondrian CMS layout model. It is not a free-composition component library — it is a rules-enforced system where **content types can only exist in their designated zone**. Think SAP Fiori Elements or WordPress Gutenberg with strict block restrictions.
4
+
5
+ ## The #1 Principle: Zone Lock
6
+
7
+ Every page is divided into fixed zones. Each zone accepts only its designated content types. This is non-negotiable.
8
+
9
+ ```
10
+ PAGE
11
+ ├── Header zone → Header content types only
12
+ │ ├── Corporate Universal Header subsection
13
+ │ ├── Global Header Bar subsection
14
+ │ └── Navigation subsections
15
+ ├── Hero zone → Hero content types only
16
+ ├── General Content zone → General content types only
17
+ │ ├── Primary Column (both templates)
18
+ │ ├── Sideburn (Sideburn template only)
19
+ │ └── Outro (Sideburn template only)
20
+ ├── Anklet → Quick-links only (fixed structure)
21
+ └── Footer zone → Footer content types only
22
+ ├── Disclaimer subsection
23
+ ├── Disclosure subsection
24
+ └── Compliance subsection
25
+ ```
26
+
27
+ **Placing a Hero content type outside the Hero zone is invalid. The same applies to every zone.**
28
+
29
+ ## Vocabulary
30
+
31
+ | Term | Definition |
32
+ |---|---|
33
+ | **Template** | Page-level layout choice: Forehead (single column) or Sideburn (8+4 column). Permanent after creation. |
34
+ | **Zone** | A fixed section of the page (Header, Hero, Primary Column, Sideburn, Outro, Anklet, Footer). |
35
+ | **Container** | Holds components within a zone. Types: `single`, `category`, `quick-spacer`, `location-lookup`. |
36
+ | **Component** | A reusable group of variations. Shared across pages — edits propagate everywhere. |
37
+ | **Variation** | The actual content instance inside a Component, targeted by a facet. Only one displays at a time. |
38
+ | **Facet** | A targeting trigger (e.g., state, county) that determines which Variation is shown. One value per variation. |
39
+ | **Content Type** | A predefined design pattern that determines the structure and display of a Variation. |
40
+
41
+ ## Templates
42
+
43
+ Two templates are available:
44
+
45
+ - **Forehead** — Single centered column. Available on all platforms. Zones: Header, Hero, Primary Column (full-width), Anklet, Footer.
46
+ - **Sideburn** — 8-col primary + 4-col sidebar. DLP-specific. Zones: Header, Hero, Primary Column, Sideburn, Outro, Anklet, Footer.
47
+
48
+ Template selection is permanent. Changing a template requires reimporting all components.
49
+
50
+ ## Reading Order
51
+
52
+ 1. **[setup.md](./setup.md)** — Install the package, import tokens, set up fonts.
53
+ 2. **[foundations/overview.md](./foundations/overview.md)** — Design tokens: colors, typography, spacing, breakpoints, z-index.
54
+ 3. **[composition/overview.md](./composition/overview.md)** — Templates, zones, container hierarchy, constraints.
55
+ 4. **[content-types/overview.md](./content-types/overview.md)** — Content type catalog organized by zone.
56
+
57
+ ## Key References
58
+
59
+ - **Zone placement table (the law):** [composition/zones.md](./composition/zones.md)
60
+ - **Hard constraints:** [composition/constraints.md](./composition/constraints.md)
61
+ - **Template selection:** [composition/templates.md](./composition/templates.md)
62
+
63
+ ## Design Philosophy
64
+
65
+ - Pages are structured, not freeform. The zone model prevents layout inconsistency at scale.
66
+ - Components are reusable by design. A shared component updated once reflects everywhere.
67
+ - Variations are audience-targeted. One component, multiple variations, one displayed at a time.
68
+ - Content types are the vocabulary. Only use defined content types — do not invent ad-hoc structures.
@@ -0,0 +1,49 @@
1
+ # Constraints
2
+
3
+ Hard rules that apply across the entire design system. These are non-negotiable.
4
+
5
+ ## Template Constraints
6
+
7
+ - **Template choice is permanent.** Once a page is created with the Forehead or Sideburn template, it cannot be changed without reimporting all components.
8
+ - **The Sideburn and Outro zones do not exist in the Forehead template.** Do not design Sideburn or Outro content for a Forehead page.
9
+ - **Platform cannot be changed after page creation.** Set the platform correctly at the start.
10
+
11
+ ## Zone Constraints
12
+
13
+ - Content types are zone-locked. A Hero content type placed outside the Hero zone is invalid — do not do it.
14
+ - The Anklet zone has a fixed structure (quick-links list). It does not accept arbitrary content types.
15
+ - Header subsections (Corporate Universal Header, Global Header Bar, Navigation) each accept only their designated component. Do not mix subsection types.
16
+ - Footer subsections (Disclaimer, Disclosure, Compliance) are for legal content only. Do not place marketing content in the Footer zone.
17
+
18
+ ## Container Constraints
19
+
20
+ - Not all container types are available in every zone.
21
+ - `quick-spacer` and `location-lookup` containers have restricted zone availability.
22
+ - Use `single` as the safe default in any zone.
23
+ - Use `category` for preset responsive vertical spacing.
24
+ - Container type determines layout, not content. The content type is set at the Variation level.
25
+
26
+ ## Component and Variation Constraints
27
+
28
+ - A Component is reusable across multiple pages. Editing a shared component propagates changes to all pages that use it — edit shared components deliberately.
29
+ - Only one Variation displays per Component at a time. Variations are targeted by facets.
30
+ - A facet can have only one value per variation (e.g., a variation can target one state, not multiple).
31
+ - A Variation must have a Content Type assigned. Untyped variations are invalid.
32
+
33
+ ## Facet Constraints
34
+
35
+ - Facets are targeting triggers (e.g., state, county). Only one facet value per variation.
36
+ - The most common facet is `state`. Other facets like `county` are supported but less common.
37
+ - When no facet matches, no variation displays from that Component. Plan a default (untagged) variation where needed.
38
+
39
+ ## Content Type Constraints
40
+
41
+ - Content types are predefined. You cannot create ad-hoc content structures outside the defined types.
42
+ - Some content types are platform-specific. Verify platform compatibility before using.
43
+ - A content type placed in the wrong zone is a design error — the system will not render it correctly.
44
+
45
+ ## Cross-references
46
+
47
+ - Full zone map: [zones.md](./zones.md)
48
+ - Template selection: [templates.md](./templates.md)
49
+ - Hierarchy details: [hierarchy.md](./hierarchy.md)
@@ -0,0 +1,72 @@
1
+ # Component Hierarchy
2
+
3
+ Within any zone, content is organized using the Container → Component → Variation model.
4
+
5
+ ## The Hierarchy
6
+
7
+ ```
8
+ Zone (Section)
9
+ └── Container
10
+ └── Component
11
+ └── Variation ← one displays at a time (facet-targeted)
12
+ └── Content Type (the design pattern for this variation)
13
+ ```
14
+
15
+ ## Containers
16
+
17
+ A Container holds components and defines how they are arranged within the zone.
18
+
19
+ **Container types:**
20
+
21
+ | Type | Use |
22
+ |---|---|
23
+ | `single` | Hosts one component. Most commonly used. Safe default in any zone. |
24
+ | `category` | Provides preset responsive vertical spacing. |
25
+ | `quick-spacer` | Adds vertical whitespace with no content. |
26
+ | `location-lookup` | Enables location-specific content. Broker Portal only. |
27
+
28
+ Not all container types are available in every zone. `single` and `category` are the universally safe choices.
29
+
30
+ ```tsx
31
+ import { Container } from 'lion-make'
32
+ <Container type="single">...</Container>
33
+ ```
34
+
35
+ ## Components
36
+
37
+ A Component is a reusable group of variations. It is not a visual element — it is an organizational wrapper.
38
+
39
+ **Key properties:**
40
+ - A Component can be shared across multiple pages.
41
+ - Editing a shared Component propagates the change to all pages that use it.
42
+ - A Component has a unique Component ID that can be used for anchor links.
43
+ - A Component does not carry a status — its Variations do.
44
+
45
+ **When to share vs. create new:** If the same content should appear identically on multiple pages, share the Component. If the content will diverge, create a new Component per page.
46
+
47
+ ## Variations
48
+
49
+ A Variation is the actual content inside a Component. It is what users see.
50
+
51
+ **Key properties:**
52
+ - A Component can have multiple Variations, but only one displays at a time.
53
+ - Display is controlled by a **facet** — a targeting trigger.
54
+ - The most common facet is `state`. Other facets include `county`.
55
+ - A Variation must have an assigned Content Type.
56
+
57
+ **Facet rules:**
58
+ - A facet can have only one value per variation (e.g., one state, not multiple).
59
+ - When no facet matches, no Variation displays from that Component. Plan a default (un-faceted) Variation for fallback.
60
+
61
+ ## Status Model
62
+
63
+ | Status | Description |
64
+ |---|---|
65
+ | Draft | The only status that permits editing. |
66
+ | In Review | First reviewer has started evaluation. |
67
+ | Approved | Accepted by both BA and Designer reviewers. |
68
+ | Denied | Rejected — requires revision and resubmission. |
69
+ | Pending | Awaiting reviewer action. |
70
+ | Published | Live. Cannot be edited directly (must transition back to Draft). |
71
+ | Scheduled | Set to publish at a future date/time. |
72
+ | Archived | Retired but retrievable. |
@@ -0,0 +1,22 @@
1
+ # Composition Overview
2
+
3
+ This section documents the structural rules of the design system: how pages are built, how zones relate to templates, and how the Container → Component → Variation hierarchy works.
4
+
5
+ ## Files in This Section
6
+
7
+ | File | What it covers |
8
+ |---|---|
9
+ | [templates.md](./templates.md) | Forehead vs Sideburn templates — when to choose each, what zones they unlock |
10
+ | [zones.md](./zones.md) | **The law file** — full zone placement table, zone rules, zone-to-template mapping |
11
+ | [hierarchy.md](./hierarchy.md) | Container → Component → Variation model, facets, shared components |
12
+ | [constraints.md](./constraints.md) | Hard rules: template permanence, zone lock, facet limits, container restrictions |
13
+
14
+ ## The Three Structural Questions
15
+
16
+ When building any page, answer these three in order:
17
+
18
+ 1. **Which template?** Forehead (single column) or Sideburn (8+4 column). This choice is permanent.
19
+ 2. **Which zone?** Every piece of content belongs to exactly one zone. Check [zones.md](./zones.md).
20
+ 3. **Which content type?** Each zone has a specific set of allowed content types. Check [content-types/overview.md](../content-types/overview.md).
21
+
22
+ Never skip question 2 or assume a content type can go anywhere. Zone placement is the system's primary constraint.
@@ -0,0 +1,46 @@
1
+ # Templates
2
+
3
+ Two templates are available. The template determines which zones exist on the page.
4
+
5
+ ## Forehead
6
+
7
+ A single centered column. Available on all platforms.
8
+
9
+ **Zones unlocked:** Header, Hero, Primary Column (full-width), Anklet, Footer.
10
+
11
+ **When to use:** Most pages. Standard content pages, landing pages, product pages.
12
+
13
+ ```tsx
14
+ import { PageForehead } from 'lion-make'
15
+ <PageForehead>...</PageForehead>
16
+ ```
17
+
18
+ ## Sideburn
19
+
20
+ An 8-col primary column with a 4-col sidebar. DLP (dedicated landing pages) only.
21
+
22
+ **Zones unlocked:** Header, Hero, Primary Column (8-col), Sideburn (4-col), Outro, Anklet, Footer.
23
+
24
+ **When to use:** Pages that require a persistent sidebar — quote widgets, contextual navigation, or supplementary content alongside a primary column.
25
+
26
+ ```tsx
27
+ import { PageSideburn } from 'lion-make'
28
+ <PageSideburn>...</PageSideburn>
29
+ ```
30
+
31
+ ## Permanence Rule
32
+
33
+ **Template choice is permanent.** Once a page is created with a template, it cannot be switched without reimporting all components. Choose the correct template before building content.
34
+
35
+ - If you need a sidebar at any point on the page → use Sideburn from the start.
36
+ - If no sidebar is needed → use Forehead.
37
+ - If you are unsure → use Forehead. It is easier to migrate from Forehead to Sideburn than the reverse.
38
+
39
+ ## What Changes Between Templates
40
+
41
+ | Aspect | Forehead | Sideburn |
42
+ |---|---|---|
43
+ | Primary Column width | Full-width | 8 of 12 columns |
44
+ | Sideburn zone | Not available | 4 of 12 columns |
45
+ | Outro zone | Not available | Available |
46
+ | Platform restriction | All platforms | DLP only |
@@ -0,0 +1,60 @@
1
+ # Zone Map
2
+
3
+ This is the authoritative placement table for the lion-make design system. Every content type must be placed in its designated zone. Placing a content type in the wrong zone is invalid.
4
+
5
+ ## Zone Placement Table
6
+
7
+ | Zone | Template | Subsections | Allowed Content Types |
8
+ |---|---|---|---|
9
+ | **Header** | Both | Corporate Universal Header, Global Header Bar, Navigation (Underwriter, Product, Top Nav) | Header content types only |
10
+ | **Hero** | Both | — | Hero content types only |
11
+ | **Primary Column** | Both | — | General content types |
12
+ | **Sideburn** | Sideburn only | — | General content types (subset) |
13
+ | **Outro** | Sideburn only | — | General content types (subset) |
14
+ | **Anklet** | Both | — | Quick links only (fixed structure) |
15
+ | **Footer** | Both | Disclaimer, Disclosure, Compliance | Footer content types only |
16
+
17
+ ## Zone Rules
18
+
19
+ - A **header content type** can only be placed in the Header zone.
20
+ - A **hero content type** can only be placed in the Hero zone.
21
+ - A **general content type** can only be placed in the Primary Column, Sideburn, or Outro zones.
22
+ - The **Anklet** zone accepts only the Anklet quick-links structure — no other content types.
23
+ - A **footer content type** can only be placed in the Footer zone.
24
+ - The **Sideburn** and **Outro** zones only exist in the Sideburn template. They are not available in the Forehead template.
25
+
26
+ ## Template-to-Zone Availability
27
+
28
+ | Zone | Forehead Template | Sideburn Template |
29
+ |---|---|---|
30
+ | Header | Yes | Yes |
31
+ | Hero | Yes | Yes |
32
+ | Primary Column | Yes (full-width) | Yes (8-col) |
33
+ | Sideburn | No | Yes (4-col) |
34
+ | Outro | No | Yes |
35
+ | Anklet | Yes | Yes |
36
+ | Footer | Yes | Yes |
37
+
38
+ ## Component Hierarchy Within a Zone
39
+
40
+ Every zone follows the same internal structure:
41
+
42
+ ```
43
+ Zone (Section)
44
+ └── Container (type: single | category | quick-spacer | location-lookup)
45
+ └── Component (reusable, shared across pages)
46
+ └── Variation (facet-targeted; only one displays at a time)
47
+ └── Content Type (the actual content)
48
+ ```
49
+
50
+ Not all container types are available in every zone. Use `single` as the safe default.
51
+
52
+ ## Cross-references
53
+
54
+ - Template rules and permanence: [templates.md](./templates.md)
55
+ - Cross-cutting hard constraints: [constraints.md](./constraints.md)
56
+ - Container and variation details: [hierarchy.md](./hierarchy.md)
57
+ - Header content types: [../content-types/header/overview.md](../content-types/header/overview.md)
58
+ - Hero content types: [../content-types/hero/overview.md](../content-types/hero/overview.md)
59
+ - General content types: [../content-types/general/overview.md](../content-types/general/overview.md)
60
+ - Footer content types: [../content-types/footer/overview.md](../content-types/footer/overview.md)
@@ -0,0 +1,38 @@
1
+ # Compliance Block
2
+
3
+ **Zone:** Footer only — Compliance subsection.
4
+
5
+ ## Description
6
+
7
+ Displays compliance tracking identifiers and required legal copy. Every regulated page must include the appropriate Item Number and/or Material ID.
8
+
9
+ ## Props
10
+
11
+ | Prop | Type | Required | Description |
12
+ |---|---|---|---|
13
+ | `itemNumber` | `string` | No | Unique identifier for compliance tracking (non-Medicare products) |
14
+ | `materialId` | `string` | No | Compliance tracking number (Medicare Advantage / PDP) |
15
+ | `text` | `string` | No | Additional compliance copy |
16
+ | `className` | `string` | No | Additional CSS class |
17
+
18
+ ## Usage
19
+
20
+ ```tsx
21
+ import { ComplianceBlock } from 'lion-make'
22
+
23
+ <ComplianceBlock
24
+ itemNumber="ICC20-TERM"
25
+ materialId="M28354"
26
+ text="Not connected with or endorsed by the U.S. Government or the federal Medicare program."
27
+ />
28
+ ```
29
+
30
+ ## Design Tokens
31
+
32
+ - Font size: `var(--h6-font-size)` (1.4rem)
33
+ - Color: `var(--color-gray-dark)`
34
+ - Line height: `var(--h6-line-height)`
35
+
36
+ ## Compliance Note
37
+
38
+ At least one of `itemNumber` or `materialId` must be present on any regulated page. The Compliance Block should always be the last element in the Footer zone.
@@ -0,0 +1,32 @@
1
+ # Disclaimer
2
+
3
+ **Zone:** Footer only — Disclaimer subsection.
4
+
5
+ ## Description
6
+
7
+ Static legal text displayed in the footer. Always visible — not toggleable. Appears above Disclosure items.
8
+
9
+ ## Props
10
+
11
+ | Prop | Type | Required | Description |
12
+ |---|---|---|---|
13
+ | `text` | `string` | Yes | Legal disclaimer text |
14
+ | `itemNumber` | `string` | No | Compliance tracking item number |
15
+ | `className` | `string` | No | Additional CSS class |
16
+
17
+ ## Usage
18
+
19
+ ```tsx
20
+ import { Disclaimer } from 'lion-make'
21
+
22
+ <Disclaimer
23
+ text="Products underwritten by Mutual of Omaha Insurance Company, Omaha, Nebraska 68175."
24
+ itemNumber="ICC20-TERM"
25
+ />
26
+ ```
27
+
28
+ ## Design Tokens
29
+
30
+ - Font size: `var(--h6-font-size)` (1.4rem)
31
+ - Color: `var(--color-gray-dark)`
32
+ - Line height: `var(--h6-line-height)`
@@ -0,0 +1,39 @@
1
+ # Disclosure
2
+
3
+ **Zone:** Footer only — Disclosure subsection.
4
+
5
+ ## Description
6
+
7
+ Toggleable legal product information. Hidden by default; the user expands it by clicking the trigger label. Used for policy details, exclusions, and product-specific legal copy. Required for Medicare Advantage and PDP products (requires Material ID).
8
+
9
+ ## Props
10
+
11
+ | Prop | Type | Required | Description |
12
+ |---|---|---|---|
13
+ | `triggerLabel` | `string` | Yes | The label users click to expand the disclosure |
14
+ | `content` | `string` | Yes | The full legal disclosure text (shown when expanded) |
15
+ | `materialId` | `string` | No | Compliance tracking number (Medicare Advantage / PDP) |
16
+ | `className` | `string` | No | Additional CSS class |
17
+
18
+ ## Usage
19
+
20
+ ```tsx
21
+ import { Disclosure } from 'lion-make'
22
+
23
+ <Disclosure
24
+ triggerLabel="Policy Disclosure"
25
+ content="This policy has exclusions, limitations, reductions of benefits, and terms under which the policy may be continued in force or discontinued."
26
+ materialId="M28354"
27
+ />
28
+ ```
29
+
30
+ ## Design Tokens
31
+
32
+ - Trigger font size: `var(--h6-font-size)`
33
+ - Trigger color: `var(--color-link)`
34
+ - Content color: `var(--color-gray-dark)`
35
+ - Content margin-top: `var(--padding-small-vertical)`
36
+
37
+ ## Compliance Note
38
+
39
+ Material ID is required for Medicare Advantage and PDP plans. If materialId is omitted on a regulated product, that is a compliance error — not a UI error.
@@ -0,0 +1,38 @@
1
+ # Footer Zone Content Types
2
+
3
+ **Zone rule:** These content types can only be placed in the Footer zone. Never use them in Header, Hero, or General zones.
4
+
5
+ The Footer zone is divided into subsections for legal content: Disclaimer, Disclosure, and Compliance. Each subsection accepts specific content types.
6
+
7
+ ## Footer Subsections
8
+
9
+ | Subsection | Content type | Component | Description |
10
+ |---|---|---|---|
11
+ | Disclaimer | Disclaimer | `Disclaimer` | Static legal text, displayed above disclosures |
12
+ | Disclosure | Disclosure | `Disclosure` | Toggleable legal product information |
13
+ | Compliance | Compliance Block | `ComplianceBlock` | Item numbers and material IDs for compliance tracking |
14
+
15
+ ## Placement Example
16
+
17
+ ```tsx
18
+ import { Section, Disclaimer, Disclosure, ComplianceBlock } from 'lion-make'
19
+
20
+ <Section zone="footer">
21
+ <Disclaimer
22
+ text="Products underwritten by Mutual of Omaha Insurance Company, Omaha, Nebraska."
23
+ itemNumber="ICC20-TERM"
24
+ />
25
+ <Disclosure
26
+ triggerLabel="Important Disclosure"
27
+ content="This policy has exclusions, limitations, and reductions of benefits..."
28
+ materialId="M28354"
29
+ />
30
+ <ComplianceBlock itemNumber="ICC20-TERM" materialId="M28354" />
31
+ </Section>
32
+ ```
33
+
34
+ ## Files in This Section
35
+
36
+ - [disclaimer.md](./disclaimer.md)
37
+ - [disclosure.md](./disclosure.md)
38
+ - [compliance-block.md](./compliance-block.md)
@@ -0,0 +1,40 @@
1
+ # Call-Out
2
+
3
+ **Zone:** General — Primary Column, Sideburn, Outro.
4
+
5
+ ## Description
6
+
7
+ A highlighted block that reiterates the primary CTA or offers a secondary one. Used to draw attention to a key action or message within the body of the page.
8
+
9
+ ## Props
10
+
11
+ | Prop | Type | Required | Description |
12
+ |---|---|---|---|
13
+ | `heading` | `string` | Yes | Call-out headline |
14
+ | `body` | `string` | Yes | Supporting copy |
15
+ | `ctaLabel` | `string` | No | Link label |
16
+ | `ctaHref` | `string` | No | Link destination |
17
+ | `className` | `string` | No | Additional CSS class |
18
+
19
+ ## Usage
20
+
21
+ ```tsx
22
+ import { CallOut } from 'lion-make'
23
+
24
+ <CallOut
25
+ heading="Not sure where to start?"
26
+ body="Our team can help you find the right plan for your situation."
27
+ ctaLabel="Talk to someone"
28
+ ctaHref="/contact"
29
+ />
30
+ ```
31
+
32
+ ## Design Tokens
33
+
34
+ - Background: `var(--color-teal-tint)`
35
+ - Border radius: `var(--border-radius-base)`
36
+ - Padding: `var(--padding-edge)`
37
+ - Heading font-size: `var(--h2-font-size)`
38
+ - Heading font-weight: `var(--font-weight-700)`
39
+ - Body color: `var(--color-text)`
40
+ - Link color: `var(--color-link)`
@@ -0,0 +1,39 @@
1
+ # Confidence Tags
2
+
3
+ **Zone:** General — Primary Column, Sideburn, Outro.
4
+
5
+ ## Description
6
+
7
+ Small badge trio that states trust signals near conversion points. Defaults to the canonical three: "Risk-free", "No Obligation", "Protected Privacy". Place near CTAs and lead forms to reduce friction.
8
+
9
+ ## Props
10
+
11
+ | Prop | Type | Required | Default | Description |
12
+ |---|---|---|---|---|
13
+ | `tags` | `string[]` | No | `['Risk-free', 'No Obligation', 'Protected Privacy']` | Badge labels |
14
+ | `className` | `string` | No | — | Additional CSS class |
15
+
16
+ ## Usage
17
+
18
+ ```tsx
19
+ import { ConfidenceTags } from 'lion-make'
20
+
21
+ // Default (canonical three)
22
+ <ConfidenceTags />
23
+
24
+ // Custom
25
+ <ConfidenceTags tags={['Cancel anytime', 'No hidden fees', 'Secure checkout']} />
26
+ ```
27
+
28
+ ## Placement Rule
29
+
30
+ Always place immediately above or below the primary CTA. Never use as a standalone section — it is a supporting element.
31
+
32
+ ## Design Tokens
33
+
34
+ - Font size: `var(--h5-font-size)`
35
+ - Font weight: `var(--font-weight-600)`
36
+ - Color: `var(--color-brand)`
37
+ - Background: `var(--color-teal-opaque)` (`rgba(3, 160, 173, 0.08)`)
38
+ - Border radius: `var(--border-radius-small)`
39
+ - Padding: `var(--padding-small-vertical)` `var(--padding-small-horizontal)`