Latest commit

History

247 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Ory Elements

Ory component library for custom UI integration and development. A set of tools

Here we are using Vite as the bundler instead of only Rollup. This makes the bundling experience a bit easier and really fast! We can now support a variety of environments through a singular repository. For example, in this repository we already have React, Preact and HTML support.

Run Storybook

Clone this repository and:

npm i
npm run initialize
npm run build
# or npm run build:clean
npm run storybook

Documentation

Vanilla-Extract is used to strongly type the CSS, a type of CSS-in-JS library which generates a static CSS file for us when the library is built. This means we can manage our CSS and reduce a lot of typing, since it can generate the CSS classes for us.

Here is an example of vanilla-extract in action!

exportconstdividerStyle=recipe({base: {display: "block",textAlign: "center",overflow: "hidden",boxSizing: "border-box",border: 0,borderTop: `${pxToRem(4)} solid`,borderColor: oryTheme.border.def,width: pxToRem(64),},variants: {sizes: {fullWidth: {width: "100%",},},},})

Generated JS function.

vardividerStyle=createRuntimeFn({defaultClassName: "_3ldkmt0",variantClassNames: {sizes: {fullWidth: "_3ldkmt1"}},defaultVariants: {},compoundVariants: [],})

And the generated CSS classes.

._3ldkmt0 {
display: block;
text-align: center;
overflow: hidden;
box-sizing: border-box;
border:0;
border-top:0.25rem solid;
border-color:var(--ory-theme-border-def);
width:4rem;
}
._3ldkmt1 {
width:100%;
}

Vanilla-Extract also provides us theme variables which we can give static names. This means we can overwrite them inside the project consuming the library!

:root {
--ory-theme-font-family: Inter;
--ory-theme-font-style: normal;
--ory-theme-accent-def:#3d53f5;
--ory-theme-accent-muted:#6475f7;
--ory-theme-accent-emphasis:#3142c4;
--ory-theme-accent-disabled:#e0e0e0;
--ory-theme-accent-subtle:#eceefe;
--ory-theme-foreground-def:#171717;
--ory-theme-foreground-muted:#616161;
--ory-theme-foreground-subtle:#9e9e9e;
--ory-theme-foreground-disabled:#bdbdbd;
--ory-theme-foreground-on-dark:#ffffff;
--ory-theme-foreground-on-accent:#ffffff;
--ory-theme-foreground-on-disabled:#e0e0e0;
--ory-theme-background-surface:#ffffff;
--ory-theme-background-canvas:#fcfcfc;
--ory-theme-error-def:#9c0f2e;
--ory-theme-error-subtle:#fce8ec;
--ory-theme-error-muted:#e95c7b;
--ory-theme-error-emphasis:#df1642;
--ory-theme-success-emphasis:#18a957;
--ory-theme-border-def:#e0e0e0;
--ory-theme-text-def:#ffffff;
--ory-theme-text-disabled:#757575;
--ory-theme-input-background:#ffffff;
--ory-theme-input-disabled:#e0e0e0;
--ory-theme-input-placeholder:#9e9e9e;
--ory-theme-input-text:#424242;
}

For ExpressJS the library also exports a helper function which registers all of the CSS the library produces.

importexpress,{Application}from"express"import{assignInlineVars}from"@vanilla-extract/dynamic"import{oryTheme,Theme}from"../theme"exportconstRegisterOryElementsExpress=(app: Application,theme: Theme)=>{app.use("/theme.css",(req,res)=>{res.header("Content-Type","text/css")res.send(`body {${assignInlineVars(oryTheme,{ ...oryTheme, ...theme,}).toString()}}`,)})app.use("/",express.static("node_modules/@ory/elements/dist"))}

Which exposes all of the relevant css files for us which we just import in our HTML page:

<linkrel="stylesheet" href="style.css" /> // the default theme variables
<linkrel="stylesheet" href="theme.css" /> // the overidden theme variables

We can then reference a component through the handlebars helper functions that return pure HTML.

{{{card}}}{{{typography"Welcome!""headline37""foregroundDefault"}}}
// Render the data using a view (e.g. Jade Template):res.render("login",{
...flow,typography: (text: string,size: any,color: any)=>Typography({children: text,type: "regular",
size,
color,}),card: Card({title: "Login With Ory",children: Message({message: "Woah there",severity: "info"}),}),})

Example Apps

Ory Elements also has example applications which we test the component library against.

Currently we have a react and preact SPA under the tests/ directory.

To run the example application you will need a couple things:

  1. An Ory Cloud (free) account
  2. The Ory CLI (tunnel)

Clone this repository and setup the React example.

git clone git@github.com:ory/elements
npm i
npm run initialize
npm run build:clean
cd tests/react-spa
export VITE_ORY_SDK_URL=http://localhost:4000
npm run dev -- --port 3000

Now run the Ory CLI tunnel.

ory tunnel http://localhost:3000 --project <project-slug> --dev

The tunnel will now mirror the Ory APIs under http://localhost:4000 which we have explicity told our React app to use through the VITE_ORY_SDK_URL export.

Open http://localhost:3000 in your browser and everything will work out of the box :)

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

247 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Ory Elements

Ory component library for custom UI integration and development. A set of tools

Here we are using Vite as the bundler instead of only Rollup. This makes the bundling experience a bit easier and really fast! We can now support a variety of environments through a singular repository. For example, in this repository we already have React, Preact and HTML support.

Run Storybook

Clone this repository and:

npm i
npm run initialize
npm run build
# or npm run build:clean
npm run storybook

Documentation

Vanilla-Extract is used to strongly type the CSS, a type of CSS-in-JS library which generates a static CSS file for us when the library is built. This means we can manage our CSS and reduce a lot of typing, since it can generate the CSS classes for us.

Here is an example of vanilla-extract in action!

exportconstdividerStyle=recipe({base: {display: "block",textAlign: "center",overflow: "hidden",boxSizing: "border-box",border: 0,borderTop: `${pxToRem(4)} solid`,borderColor: oryTheme.border.def,width: pxToRem(64),},variants: {sizes: {fullWidth: {width: "100%",},},},})

Generated JS function.

vardividerStyle=createRuntimeFn({defaultClassName: "_3ldkmt0",variantClassNames: {sizes: {fullWidth: "_3ldkmt1"}},defaultVariants: {},compoundVariants: [],})

And the generated CSS classes.

._3ldkmt0 {
display: block;
text-align: center;
overflow: hidden;
box-sizing: border-box;
border:0;
border-top:0.25rem solid;
border-color:var(--ory-theme-border-def);
width:4rem;
}
._3ldkmt1 {
width:100%;
}

Vanilla-Extract also provides us theme variables which we can give static names. This means we can overwrite them inside the project consuming the library!

:root {
--ory-theme-font-family: Inter;
--ory-theme-font-style: normal;
--ory-theme-accent-def:#3d53f5;
--ory-theme-accent-muted:#6475f7;
--ory-theme-accent-emphasis:#3142c4;
--ory-theme-accent-disabled:#e0e0e0;
--ory-theme-accent-subtle:#eceefe;
--ory-theme-foreground-def:#171717;
--ory-theme-foreground-muted:#616161;
--ory-theme-foreground-subtle:#9e9e9e;
--ory-theme-foreground-disabled:#bdbdbd;
--ory-theme-foreground-on-dark:#ffffff;
--ory-theme-foreground-on-accent:#ffffff;
--ory-theme-foreground-on-disabled:#e0e0e0;
--ory-theme-background-surface:#ffffff;
--ory-theme-background-canvas:#fcfcfc;
--ory-theme-error-def:#9c0f2e;
--ory-theme-error-subtle:#fce8ec;
--ory-theme-error-muted:#e95c7b;
--ory-theme-error-emphasis:#df1642;
--ory-theme-success-emphasis:#18a957;
--ory-theme-border-def:#e0e0e0;
--ory-theme-text-def:#ffffff;
--ory-theme-text-disabled:#757575;
--ory-theme-input-background:#ffffff;
--ory-theme-input-disabled:#e0e0e0;
--ory-theme-input-placeholder:#9e9e9e;
--ory-theme-input-text:#424242;
}

For ExpressJS the library also exports a helper function which registers all of the CSS the library produces.

importexpress,{Application}from"express"import{assignInlineVars}from"@vanilla-extract/dynamic"import{oryTheme,Theme}from"../theme"exportconstRegisterOryElementsExpress=(app: Application,theme: Theme)=>{app.use("/theme.css",(req,res)=>{res.header("Content-Type","text/css")res.send(`body {${assignInlineVars(oryTheme,{ ...oryTheme, ...theme,}).toString()}}`,)})app.use("/",express.static("node_modules/@ory/elements/dist"))}

Which exposes all of the relevant css files for us which we just import in our HTML page:

<linkrel="stylesheet" href="style.css" /> // the default theme variables
<linkrel="stylesheet" href="theme.css" /> // the overidden theme variables

We can then reference a component through the handlebars helper functions that return pure HTML.

{{{card}}}{{{typography"Welcome!""headline37""foregroundDefault"}}}
// Render the data using a view (e.g. Jade Template):res.render("login",{
...flow,typography: (text: string,size: any,color: any)=>Typography({children: text,type: "regular",
size,
color,}),card: Card({title: "Login With Ory",children: Message({message: "Woah there",severity: "info"}),}),})

Example Apps

Ory Elements also has example applications which we test the component library against.

Currently we have a react and preact SPA under the tests/ directory.

To run the example application you will need a couple things:

  1. An Ory Cloud (free) account
  2. The Ory CLI (tunnel)

Clone this repository and setup the React example.

git clone git@github.com:ory/elements
npm i
npm run initialize
npm run build:clean
cd tests/react-spa
export VITE_ORY_SDK_URL=http://localhost:4000
npm run dev -- --port 3000

Now run the Ory CLI tunnel.

ory tunnel http://localhost:3000 --project <project-slug> --dev

The tunnel will now mirror the Ory APIs under http://localhost:4000 which we have explicity told our React app to use through the VITE_ORY_SDK_URL export.

Open http://localhost:3000 in your browser and everything will work out of the box :)

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

247 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Ory Elements

Ory component library for custom UI integration and development. A set of tools

Here we are using Vite as the bundler instead of only Rollup. This makes the bundling experience a bit easier and really fast! We can now support a variety of environments through a singular repository. For example, in this repository we already have React, Preact and HTML support.

Run Storybook

Clone this repository and:

npm i
npm run initialize
npm run build
# or npm run build:clean
npm run storybook

Documentation

Vanilla-Extract is used to strongly type the CSS, a type of CSS-in-JS library which generates a static CSS file for us when the library is built. This means we can manage our CSS and reduce a lot of typing, since it can generate the CSS classes for us.

Here is an example of vanilla-extract in action!

exportconstdividerStyle=recipe({base: {display: "block",textAlign: "center",overflow: "hidden",boxSizing: "border-box",border: 0,borderTop: `${pxToRem(4)} solid`,borderColor: oryTheme.border.def,width: pxToRem(64),},variants: {sizes: {fullWidth: {width: "100%",},},},})

Generated JS function.

vardividerStyle=createRuntimeFn({defaultClassName: "_3ldkmt0",variantClassNames: {sizes: {fullWidth: "_3ldkmt1"}},defaultVariants: {},compoundVariants: [],})

And the generated CSS classes.

._3ldkmt0 {
display: block;
text-align: center;
overflow: hidden;
box-sizing: border-box;
border:0;
border-top:0.25rem solid;
border-color:var(--ory-theme-border-def);
width:4rem;
}
._3ldkmt1 {
width:100%;
}

Vanilla-Extract also provides us theme variables which we can give static names. This means we can overwrite them inside the project consuming the library!

:root {
--ory-theme-font-family: Inter;
--ory-theme-font-style: normal;
--ory-theme-accent-def:#3d53f5;
--ory-theme-accent-muted:#6475f7;
--ory-theme-accent-emphasis:#3142c4;
--ory-theme-accent-disabled:#e0e0e0;
--ory-theme-accent-subtle:#eceefe;
--ory-theme-foreground-def:#171717;
--ory-theme-foreground-muted:#616161;
--ory-theme-foreground-subtle:#9e9e9e;
--ory-theme-foreground-disabled:#bdbdbd;
--ory-theme-foreground-on-dark:#ffffff;
--ory-theme-foreground-on-accent:#ffffff;
--ory-theme-foreground-on-disabled:#e0e0e0;
--ory-theme-background-surface:#ffffff;
--ory-theme-background-canvas:#fcfcfc;
--ory-theme-error-def:#9c0f2e;
--ory-theme-error-subtle:#fce8ec;
--ory-theme-error-muted:#e95c7b;
--ory-theme-error-emphasis:#df1642;
--ory-theme-success-emphasis:#18a957;
--ory-theme-border-def:#e0e0e0;
--ory-theme-text-def:#ffffff;
--ory-theme-text-disabled:#757575;
--ory-theme-input-background:#ffffff;
--ory-theme-input-disabled:#e0e0e0;
--ory-theme-input-placeholder:#9e9e9e;
--ory-theme-input-text:#424242;
}

For ExpressJS the library also exports a helper function which registers all of the CSS the library produces.

importexpress,{Application}from"express"import{assignInlineVars}from"@vanilla-extract/dynamic"import{oryTheme,Theme}from"../theme"exportconstRegisterOryElementsExpress=(app: Application,theme: Theme)=>{app.use("/theme.css",(req,res)=>{res.header("Content-Type","text/css")res.send(`body {${assignInlineVars(oryTheme,{ ...oryTheme, ...theme,}).toString()}}`,)})app.use("/",express.static("node_modules/@ory/elements/dist"))}

Which exposes all of the relevant css files for us which we just import in our HTML page:

<linkrel="stylesheet" href="style.css" /> // the default theme variables
<linkrel="stylesheet" href="theme.css" /> // the overidden theme variables

We can then reference a component through the handlebars helper functions that return pure HTML.

{{{card}}}{{{typography"Welcome!""headline37""foregroundDefault"}}}
// Render the data using a view (e.g. Jade Template):res.render("login",{
...flow,typography: (text: string,size: any,color: any)=>Typography({children: text,type: "regular",
size,
color,}),card: Card({title: "Login With Ory",children: Message({message: "Woah there",severity: "info"}),}),})

Example Apps

Ory Elements also has example applications which we test the component library against.

Currently we have a react and preact SPA under the tests/ directory.

To run the example application you will need a couple things:

  1. An Ory Cloud (free) account
  2. The Ory CLI (tunnel)

Clone this repository and setup the React example.

git clone git@github.com:ory/elements
npm i
npm run initialize
npm run build:clean
cd tests/react-spa
export VITE_ORY_SDK_URL=http://localhost:4000
npm run dev -- --port 3000

Now run the Ory CLI tunnel.

ory tunnel http://localhost:3000 --project <project-slug> --dev

The tunnel will now mirror the Ory APIs under http://localhost:4000 which we have explicity told our React app to use through the VITE_ORY_SDK_URL export.

Open http://localhost:3000 in your browser and everything will work out of the box :)

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

247 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Ory Elements

Ory component library for custom UI integration and development. A set of tools

Here we are using Vite as the bundler instead of only Rollup. This makes the bundling experience a bit easier and really fast! We can now support a variety of environments through a singular repository. For example, in this repository we already have React, Preact and HTML support.

Run Storybook

Clone this repository and:

npm i
npm run initialize
npm run build
# or npm run build:clean
npm run storybook

Documentation

Vanilla-Extract is used to strongly type the CSS, a type of CSS-in-JS library which generates a static CSS file for us when the library is built. This means we can manage our CSS and reduce a lot of typing, since it can generate the CSS classes for us.

Here is an example of vanilla-extract in action!

exportconstdividerStyle=recipe({base: {display: "block",textAlign: "center",overflow: "hidden",boxSizing: "border-box",border: 0,borderTop: `${pxToRem(4)} solid`,borderColor: oryTheme.border.def,width: pxToRem(64),},variants: {sizes: {fullWidth: {width: "100%",},},},})

Generated JS function.

vardividerStyle=createRuntimeFn({defaultClassName: "_3ldkmt0",variantClassNames: {sizes: {fullWidth: "_3ldkmt1"}},defaultVariants: {},compoundVariants: [],})

And the generated CSS classes.

._3ldkmt0 {
display: block;
text-align: center;
overflow: hidden;
box-sizing: border-box;
border:0;
border-top:0.25rem solid;
border-color:var(--ory-theme-border-def);
width:4rem;
}
._3ldkmt1 {
width:100%;
}

Vanilla-Extract also provides us theme variables which we can give static names. This means we can overwrite them inside the project consuming the library!

:root {
--ory-theme-font-family: Inter;
--ory-theme-font-style: normal;
--ory-theme-accent-def:#3d53f5;
--ory-theme-accent-muted:#6475f7;
--ory-theme-accent-emphasis:#3142c4;
--ory-theme-accent-disabled:#e0e0e0;
--ory-theme-accent-subtle:#eceefe;
--ory-theme-foreground-def:#171717;
--ory-theme-foreground-muted:#616161;
--ory-theme-foreground-subtle:#9e9e9e;
--ory-theme-foreground-disabled:#bdbdbd;
--ory-theme-foreground-on-dark:#ffffff;
--ory-theme-foreground-on-accent:#ffffff;
--ory-theme-foreground-on-disabled:#e0e0e0;
--ory-theme-background-surface:#ffffff;
--ory-theme-background-canvas:#fcfcfc;
--ory-theme-error-def:#9c0f2e;
--ory-theme-error-subtle:#fce8ec;
--ory-theme-error-muted:#e95c7b;
--ory-theme-error-emphasis:#df1642;
--ory-theme-success-emphasis:#18a957;
--ory-theme-border-def:#e0e0e0;
--ory-theme-text-def:#ffffff;
--ory-theme-text-disabled:#757575;
--ory-theme-input-background:#ffffff;
--ory-theme-input-disabled:#e0e0e0;
--ory-theme-input-placeholder:#9e9e9e;
--ory-theme-input-text:#424242;
}

For ExpressJS the library also exports a helper function which registers all of the CSS the library produces.

importexpress,{Application}from"express"import{assignInlineVars}from"@vanilla-extract/dynamic"import{oryTheme,Theme}from"../theme"exportconstRegisterOryElementsExpress=(app: Application,theme: Theme)=>{app.use("/theme.css",(req,res)=>{res.header("Content-Type","text/css")res.send(`body {${assignInlineVars(oryTheme,{ ...oryTheme, ...theme,}).toString()}}`,)})app.use("/",express.static("node_modules/@ory/elements/dist"))}

Which exposes all of the relevant css files for us which we just import in our HTML page:

<linkrel="stylesheet" href="style.css" /> // the default theme variables
<linkrel="stylesheet" href="theme.css" /> // the overidden theme variables

We can then reference a component through the handlebars helper functions that return pure HTML.

{{{card}}}{{{typography"Welcome!""headline37""foregroundDefault"}}}
// Render the data using a view (e.g. Jade Template):res.render("login",{
...flow,typography: (text: string,size: any,color: any)=>Typography({children: text,type: "regular",
size,
color,}),card: Card({title: "Login With Ory",children: Message({message: "Woah there",severity: "info"}),}),})

Example Apps

Ory Elements also has example applications which we test the component library against.

Currently we have a react and preact SPA under the tests/ directory.

To run the example application you will need a couple things:

  1. An Ory Cloud (free) account
  2. The Ory CLI (tunnel)

Clone this repository and setup the React example.

git clone git@github.com:ory/elements
npm i
npm run initialize
npm run build:clean
cd tests/react-spa
export VITE_ORY_SDK_URL=http://localhost:4000
npm run dev -- --port 3000

Now run the Ory CLI tunnel.

ory tunnel http://localhost:3000 --project <project-slug> --dev

The tunnel will now mirror the Ory APIs under http://localhost:4000 which we have explicity told our React app to use through the VITE_ORY_SDK_URL export.

Open http://localhost:3000 in your browser and everything will work out of the box :)

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

247 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Ory Elements

Ory component library for custom UI integration and development. A set of tools

Here we are using Vite as the bundler instead of only Rollup. This makes the bundling experience a bit easier and really fast! We can now support a variety of environments through a singular repository. For example, in this repository we already have React, Preact and HTML support.

Run Storybook

Clone this repository and:

npm i
npm run initialize
npm run build
# or npm run build:clean
npm run storybook

Documentation

Vanilla-Extract is used to strongly type the CSS, a type of CSS-in-JS library which generates a static CSS file for us when the library is built. This means we can manage our CSS and reduce a lot of typing, since it can generate the CSS classes for us.

Here is an example of vanilla-extract in action!

exportconstdividerStyle=recipe({base: {display: "block",textAlign: "center",overflow: "hidden",boxSizing: "border-box",border: 0,borderTop: `${pxToRem(4)} solid`,borderColor: oryTheme.border.def,width: pxToRem(64),},variants: {sizes: {fullWidth: {width: "100%",},},},})

Generated JS function.

vardividerStyle=createRuntimeFn({defaultClassName: "_3ldkmt0",variantClassNames: {sizes: {fullWidth: "_3ldkmt1"}},defaultVariants: {},compoundVariants: [],})

And the generated CSS classes.

._3ldkmt0 {
display: block;
text-align: center;
overflow: hidden;
box-sizing: border-box;
border:0;
border-top:0.25rem solid;
border-color:var(--ory-theme-border-def);
width:4rem;
}
._3ldkmt1 {
width:100%;
}

Vanilla-Extract also provides us theme variables which we can give static names. This means we can overwrite them inside the project consuming the library!

:root {
--ory-theme-font-family: Inter;
--ory-theme-font-style: normal;
--ory-theme-accent-def:#3d53f5;
--ory-theme-accent-muted:#6475f7;
--ory-theme-accent-emphasis:#3142c4;
--ory-theme-accent-disabled:#e0e0e0;
--ory-theme-accent-subtle:#eceefe;
--ory-theme-foreground-def:#171717;
--ory-theme-foreground-muted:#616161;
--ory-theme-foreground-subtle:#9e9e9e;
--ory-theme-foreground-disabled:#bdbdbd;
--ory-theme-foreground-on-dark:#ffffff;
--ory-theme-foreground-on-accent:#ffffff;
--ory-theme-foreground-on-disabled:#e0e0e0;
--ory-theme-background-surface:#ffffff;
--ory-theme-background-canvas:#fcfcfc;
--ory-theme-error-def:#9c0f2e;
--ory-theme-error-subtle:#fce8ec;
--ory-theme-error-muted:#e95c7b;
--ory-theme-error-emphasis:#df1642;
--ory-theme-success-emphasis:#18a957;
--ory-theme-border-def:#e0e0e0;
--ory-theme-text-def:#ffffff;
--ory-theme-text-disabled:#757575;
--ory-theme-input-background:#ffffff;
--ory-theme-input-disabled:#e0e0e0;
--ory-theme-input-placeholder:#9e9e9e;
--ory-theme-input-text:#424242;
}

For ExpressJS the library also exports a helper function which registers all of the CSS the library produces.

importexpress,{Application}from"express"import{assignInlineVars}from"@vanilla-extract/dynamic"import{oryTheme,Theme}from"../theme"exportconstRegisterOryElementsExpress=(app: Application,theme: Theme)=>{app.use("/theme.css",(req,res)=>{res.header("Content-Type","text/css")res.send(`body {${assignInlineVars(oryTheme,{ ...oryTheme, ...theme,}).toString()}}`,)})app.use("/",express.static("node_modules/@ory/elements/dist"))}

Which exposes all of the relevant css files for us which we just import in our HTML page:

<linkrel="stylesheet" href="style.css" /> // the default theme variables
<linkrel="stylesheet" href="theme.css" /> // the overidden theme variables

We can then reference a component through the handlebars helper functions that return pure HTML.

{{{card}}}{{{typography"Welcome!""headline37""foregroundDefault"}}}
// Render the data using a view (e.g. Jade Template):res.render("login",{
...flow,typography: (text: string,size: any,color: any)=>Typography({children: text,type: "regular",
size,
color,}),card: Card({title: "Login With Ory",children: Message({message: "Woah there",severity: "info"}),}),})

Example Apps

Ory Elements also has example applications which we test the component library against.

Currently we have a react and preact SPA under the tests/ directory.

To run the example application you will need a couple things:

  1. An Ory Cloud (free) account
  2. The Ory CLI (tunnel)

Clone this repository and setup the React example.

git clone git@github.com:ory/elements
npm i
npm run initialize
npm run build:clean
cd tests/react-spa
export VITE_ORY_SDK_URL=http://localhost:4000
npm run dev -- --port 3000

Now run the Ory CLI tunnel.

ory tunnel http://localhost:3000 --project <project-slug> --dev

The tunnel will now mirror the Ory APIs under http://localhost:4000 which we have explicity told our React app to use through the VITE_ORY_SDK_URL export.

Open http://localhost:3000 in your browser and everything will work out of the box :)

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

247 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Ory Elements

Ory component library for custom UI integration and development. A set of tools

Here we are using Vite as the bundler instead of only Rollup. This makes the bundling experience a bit easier and really fast! We can now support a variety of environments through a singular repository. For example, in this repository we already have React, Preact and HTML support.

Run Storybook

Clone this repository and:

npm i
npm run initialize
npm run build
# or npm run build:clean
npm run storybook

Documentation

Vanilla-Extract is used to strongly type the CSS, a type of CSS-in-JS library which generates a static CSS file for us when the library is built. This means we can manage our CSS and reduce a lot of typing, since it can generate the CSS classes for us.

Here is an example of vanilla-extract in action!

exportconstdividerStyle=recipe({base: {display: "block",textAlign: "center",overflow: "hidden",boxSizing: "border-box",border: 0,borderTop: `${pxToRem(4)} solid`,borderColor: oryTheme.border.def,width: pxToRem(64),},variants: {sizes: {fullWidth: {width: "100%",},},},})

Generated JS function.

vardividerStyle=createRuntimeFn({defaultClassName: "_3ldkmt0",variantClassNames: {sizes: {fullWidth: "_3ldkmt1"}},defaultVariants: {},compoundVariants: [],})

And the generated CSS classes.

._3ldkmt0 {
display: block;
text-align: center;
overflow: hidden;
box-sizing: border-box;
border:0;
border-top:0.25rem solid;
border-color:var(--ory-theme-border-def);
width:4rem;
}
._3ldkmt1 {
width:100%;
}

Vanilla-Extract also provides us theme variables which we can give static names. This means we can overwrite them inside the project consuming the library!

:root {
--ory-theme-font-family: Inter;
--ory-theme-font-style: normal;
--ory-theme-accent-def:#3d53f5;
--ory-theme-accent-muted:#6475f7;
--ory-theme-accent-emphasis:#3142c4;
--ory-theme-accent-disabled:#e0e0e0;
--ory-theme-accent-subtle:#eceefe;
--ory-theme-foreground-def:#171717;
--ory-theme-foreground-muted:#616161;
--ory-theme-foreground-subtle:#9e9e9e;
--ory-theme-foreground-disabled:#bdbdbd;
--ory-theme-foreground-on-dark:#ffffff;
--ory-theme-foreground-on-accent:#ffffff;
--ory-theme-foreground-on-disabled:#e0e0e0;
--ory-theme-background-surface:#ffffff;
--ory-theme-background-canvas:#fcfcfc;
--ory-theme-error-def:#9c0f2e;
--ory-theme-error-subtle:#fce8ec;
--ory-theme-error-muted:#e95c7b;
--ory-theme-error-emphasis:#df1642;
--ory-theme-success-emphasis:#18a957;
--ory-theme-border-def:#e0e0e0;
--ory-theme-text-def:#ffffff;
--ory-theme-text-disabled:#757575;
--ory-theme-input-background:#ffffff;
--ory-theme-input-disabled:#e0e0e0;
--ory-theme-input-placeholder:#9e9e9e;
--ory-theme-input-text:#424242;
}

For ExpressJS the library also exports a helper function which registers all of the CSS the library produces.

importexpress,{Application}from"express"import{assignInlineVars}from"@vanilla-extract/dynamic"import{oryTheme,Theme}from"../theme"exportconstRegisterOryElementsExpress=(app: Application,theme: Theme)=>{app.use("/theme.css",(req,res)=>{res.header("Content-Type","text/css")res.send(`body {${assignInlineVars(oryTheme,{ ...oryTheme, ...theme,}).toString()}}`,)})app.use("/",express.static("node_modules/@ory/elements/dist"))}

Which exposes all of the relevant css files for us which we just import in our HTML page:

<linkrel="stylesheet" href="style.css" /> // the default theme variables
<linkrel="stylesheet" href="theme.css" /> // the overidden theme variables

We can then reference a component through the handlebars helper functions that return pure HTML.

{{{card}}}{{{typography"Welcome!""headline37""foregroundDefault"}}}
// Render the data using a view (e.g. Jade Template):res.render("login",{
...flow,typography: (text: string,size: any,color: any)=>Typography({children: text,type: "regular",
size,
color,}),card: Card({title: "Login With Ory",children: Message({message: "Woah there",severity: "info"}),}),})

Example Apps

Ory Elements also has example applications which we test the component library against.

Currently we have a react and preact SPA under the tests/ directory.

To run the example application you will need a couple things:

  1. An Ory Cloud (free) account
  2. The Ory CLI (tunnel)

Clone this repository and setup the React example.

git clone git@github.com:ory/elements
npm i
npm run initialize
npm run build:clean
cd tests/react-spa
export VITE_ORY_SDK_URL=http://localhost:4000
npm run dev -- --port 3000

Now run the Ory CLI tunnel.

ory tunnel http://localhost:3000 --project <project-slug> --dev

The tunnel will now mirror the Ory APIs under http://localhost:4000 which we have explicity told our React app to use through the VITE_ORY_SDK_URL export.

Open http://localhost:3000 in your browser and everything will work out of the box :)

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

247 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Ory Elements

Ory component library for custom UI integration and development. A set of tools

Here we are using Vite as the bundler instead of only Rollup. This makes the bundling experience a bit easier and really fast! We can now support a variety of environments through a singular repository. For example, in this repository we already have React, Preact and HTML support.

Run Storybook

Clone this repository and:

npm i
npm run initialize
npm run build
# or npm run build:clean
npm run storybook

Documentation

Vanilla-Extract is used to strongly type the CSS, a type of CSS-in-JS library which generates a static CSS file for us when the library is built. This means we can manage our CSS and reduce a lot of typing, since it can generate the CSS classes for us.

Here is an example of vanilla-extract in action!

exportconstdividerStyle=recipe({base: {display: "block",textAlign: "center",overflow: "hidden",boxSizing: "border-box",border: 0,borderTop: `${pxToRem(4)} solid`,borderColor: oryTheme.border.def,width: pxToRem(64),},variants: {sizes: {fullWidth: {width: "100%",},},},})

Generated JS function.

vardividerStyle=createRuntimeFn({defaultClassName: "_3ldkmt0",variantClassNames: {sizes: {fullWidth: "_3ldkmt1"}},defaultVariants: {},compoundVariants: [],})

And the generated CSS classes.

._3ldkmt0 {
display: block;
text-align: center;
overflow: hidden;
box-sizing: border-box;
border:0;
border-top:0.25rem solid;
border-color:var(--ory-theme-border-def);
width:4rem;
}
._3ldkmt1 {
width:100%;
}

Vanilla-Extract also provides us theme variables which we can give static names. This means we can overwrite them inside the project consuming the library!

:root {
--ory-theme-font-family: Inter;
--ory-theme-font-style: normal;
--ory-theme-accent-def:#3d53f5;
--ory-theme-accent-muted:#6475f7;
--ory-theme-accent-emphasis:#3142c4;
--ory-theme-accent-disabled:#e0e0e0;
--ory-theme-accent-subtle:#eceefe;
--ory-theme-foreground-def:#171717;
--ory-theme-foreground-muted:#616161;
--ory-theme-foreground-subtle:#9e9e9e;
--ory-theme-foreground-disabled:#bdbdbd;
--ory-theme-foreground-on-dark:#ffffff;
--ory-theme-foreground-on-accent:#ffffff;
--ory-theme-foreground-on-disabled:#e0e0e0;
--ory-theme-background-surface:#ffffff;
--ory-theme-background-canvas:#fcfcfc;
--ory-theme-error-def:#9c0f2e;
--ory-theme-error-subtle:#fce8ec;
--ory-theme-error-muted:#e95c7b;
--ory-theme-error-emphasis:#df1642;
--ory-theme-success-emphasis:#18a957;
--ory-theme-border-def:#e0e0e0;
--ory-theme-text-def:#ffffff;
--ory-theme-text-disabled:#757575;
--ory-theme-input-background:#ffffff;
--ory-theme-input-disabled:#e0e0e0;
--ory-theme-input-placeholder:#9e9e9e;
--ory-theme-input-text:#424242;
}

For ExpressJS the library also exports a helper function which registers all of the CSS the library produces.

importexpress,{Application}from"express"import{assignInlineVars}from"@vanilla-extract/dynamic"import{oryTheme,Theme}from"../theme"exportconstRegisterOryElementsExpress=(app: Application,theme: Theme)=>{app.use("/theme.css",(req,res)=>{res.header("Content-Type","text/css")res.send(`body {${assignInlineVars(oryTheme,{ ...oryTheme, ...theme,}).toString()}}`,)})app.use("/",express.static("node_modules/@ory/elements/dist"))}

Which exposes all of the relevant css files for us which we just import in our HTML page:

<linkrel="stylesheet" href="style.css" /> // the default theme variables
<linkrel="stylesheet" href="theme.css" /> // the overidden theme variables

We can then reference a component through the handlebars helper functions that return pure HTML.

{{{card}}}{{{typography"Welcome!""headline37""foregroundDefault"}}}
// Render the data using a view (e.g. Jade Template):res.render("login",{
...flow,typography: (text: string,size: any,color: any)=>Typography({children: text,type: "regular",
size,
color,}),card: Card({title: "Login With Ory",children: Message({message: "Woah there",severity: "info"}),}),})

Example Apps

Ory Elements also has example applications which we test the component library against.

Currently we have a react and preact SPA under the tests/ directory.

To run the example application you will need a couple things:

  1. An Ory Cloud (free) account
  2. The Ory CLI (tunnel)

Clone this repository and setup the React example.

git clone git@github.com:ory/elements
npm i
npm run initialize
npm run build:clean
cd tests/react-spa
export VITE_ORY_SDK_URL=http://localhost:4000
npm run dev -- --port 3000

Now run the Ory CLI tunnel.

ory tunnel http://localhost:3000 --project <project-slug> --dev

The tunnel will now mirror the Ory APIs under http://localhost:4000 which we have explicity told our React app to use through the VITE_ORY_SDK_URL export.

Open http://localhost:3000 in your browser and everything will work out of the box :)

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

247 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Ory Elements

Ory component library for custom UI integration and development. A set of tools

Here we are using Vite as the bundler instead of only Rollup. This makes the bundling experience a bit easier and really fast! We can now support a variety of environments through a singular repository. For example, in this repository we already have React, Preact and HTML support.

Run Storybook

Clone this repository and:

npm i
npm run initialize
npm run build
# or npm run build:clean
npm run storybook

Documentation

Vanilla-Extract is used to strongly type the CSS, a type of CSS-in-JS library which generates a static CSS file for us when the library is built. This means we can manage our CSS and reduce a lot of typing, since it can generate the CSS classes for us.

Here is an example of vanilla-extract in action!

exportconstdividerStyle=recipe({base: {display: "block",textAlign: "center",overflow: "hidden",boxSizing: "border-box",border: 0,borderTop: `${pxToRem(4)} solid`,borderColor: oryTheme.border.def,width: pxToRem(64),},variants: {sizes: {fullWidth: {width: "100%",},},},})

Generated JS function.

vardividerStyle=createRuntimeFn({defaultClassName: "_3ldkmt0",variantClassNames: {sizes: {fullWidth: "_3ldkmt1"}},defaultVariants: {},compoundVariants: [],})

And the generated CSS classes.

._3ldkmt0 {
display: block;
text-align: center;
overflow: hidden;
box-sizing: border-box;
border:0;
border-top:0.25rem solid;
border-color:var(--ory-theme-border-def);
width:4rem;
}
._3ldkmt1 {
width:100%;
}

Vanilla-Extract also provides us theme variables which we can give static names. This means we can overwrite them inside the project consuming the library!

:root {
--ory-theme-font-family: Inter;
--ory-theme-font-style: normal;
--ory-theme-accent-def:#3d53f5;
--ory-theme-accent-muted:#6475f7;
--ory-theme-accent-emphasis:#3142c4;
--ory-theme-accent-disabled:#e0e0e0;
--ory-theme-accent-subtle:#eceefe;
--ory-theme-foreground-def:#171717;
--ory-theme-foreground-muted:#616161;
--ory-theme-foreground-subtle:#9e9e9e;
--ory-theme-foreground-disabled:#bdbdbd;
--ory-theme-foreground-on-dark:#ffffff;
--ory-theme-foreground-on-accent:#ffffff;
--ory-theme-foreground-on-disabled:#e0e0e0;
--ory-theme-background-surface:#ffffff;
--ory-theme-background-canvas:#fcfcfc;
--ory-theme-error-def:#9c0f2e;
--ory-theme-error-subtle:#fce8ec;
--ory-theme-error-muted:#e95c7b;
--ory-theme-error-emphasis:#df1642;
--ory-theme-success-emphasis:#18a957;
--ory-theme-border-def:#e0e0e0;
--ory-theme-text-def:#ffffff;
--ory-theme-text-disabled:#757575;
--ory-theme-input-background:#ffffff;
--ory-theme-input-disabled:#e0e0e0;
--ory-theme-input-placeholder:#9e9e9e;
--ory-theme-input-text:#424242;
}

For ExpressJS the library also exports a helper function which registers all of the CSS the library produces.

importexpress,{Application}from"express"import{assignInlineVars}from"@vanilla-extract/dynamic"import{oryTheme,Theme}from"../theme"exportconstRegisterOryElementsExpress=(app: Application,theme: Theme)=>{app.use("/theme.css",(req,res)=>{res.header("Content-Type","text/css")res.send(`body {${assignInlineVars(oryTheme,{ ...oryTheme, ...theme,}).toString()}}`,)})app.use("/",express.static("node_modules/@ory/elements/dist"))}

Which exposes all of the relevant css files for us which we just import in our HTML page:

<linkrel="stylesheet" href="style.css" /> // the default theme variables
<linkrel="stylesheet" href="theme.css" /> // the overidden theme variables

We can then reference a component through the handlebars helper functions that return pure HTML.

{{{card}}}{{{typography"Welcome!""headline37""foregroundDefault"}}}
// Render the data using a view (e.g. Jade Template):res.render("login",{
...flow,typography: (text: string,size: any,color: any)=>Typography({children: text,type: "regular",
size,
color,}),card: Card({title: "Login With Ory",children: Message({message: "Woah there",severity: "info"}),}),})

Example Apps

Ory Elements also has example applications which we test the component library against.

Currently we have a react and preact SPA under the tests/ directory.

To run the example application you will need a couple things:

  1. An Ory Cloud (free) account
  2. The Ory CLI (tunnel)

Clone this repository and setup the React example.

git clone git@github.com:ory/elements
npm i
npm run initialize
npm run build:clean
cd tests/react-spa
export VITE_ORY_SDK_URL=http://localhost:4000
npm run dev -- --port 3000

Now run the Ory CLI tunnel.

ory tunnel http://localhost:3000 --project <project-slug> --dev

The tunnel will now mirror the Ory APIs under http://localhost:4000 which we have explicity told our React app to use through the VITE_ORY_SDK_URL export.

Open http://localhost:3000 in your browser and everything will work out of the box :)

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages