@cratis/scene.react 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.
- package/.storybook/main.ts +31 -0
- package/.storybook/preview.ts +12 -0
- package/NavBar/NavBar.tsx +53 -0
- package/NavBar/extractNavigationItem.ts +40 -0
- package/NavBar/for_NavBar/when_rendering_navigation_contributions.tsx +62 -0
- package/NavBar/for_extractNavigationItem/when_extracting_from_a_navigation_contribution.ts +53 -0
- package/NavBar/index.ts +5 -0
- package/README.md +40 -0
- package/SceneElementView.stories.tsx +67 -0
- package/SceneElementView.tsx +22 -0
- package/core/CoreButton.tsx +17 -0
- package/core/CoreCard.tsx +15 -0
- package/core/CoreText.tsx +13 -0
- package/core/coreComponents.ts +18 -0
- package/core/corePackage.ts +36 -0
- package/core/index.ts +8 -0
- package/dist/cjs/NavBar/NavBar.js +47 -0
- package/dist/cjs/NavBar/NavBar.js.map +1 -0
- package/dist/cjs/NavBar/extractNavigationItem.js +38 -0
- package/dist/cjs/NavBar/extractNavigationItem.js.map +1 -0
- package/dist/cjs/SceneElementView.js +21 -0
- package/dist/cjs/SceneElementView.js.map +1 -0
- package/dist/cjs/core/CoreButton.js +22 -0
- package/dist/cjs/core/CoreButton.js.map +1 -0
- package/dist/cjs/core/CoreCard.js +22 -0
- package/dist/cjs/core/CoreCard.js.map +1 -0
- package/dist/cjs/core/CoreText.js +19 -0
- package/dist/cjs/core/CoreText.js.map +1 -0
- package/dist/cjs/core/coreComponents.js +20 -0
- package/dist/cjs/core/coreComponents.js.map +1 -0
- package/dist/cjs/core/corePackage.js +41 -0
- package/dist/cjs/core/corePackage.js.map +1 -0
- package/dist/cjs/index.js +38 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/packages/ScenePackageBundle.js +76 -0
- package/dist/cjs/packages/ScenePackageBundle.js.map +1 -0
- package/dist/cjs/renderer/UnresolvedComponent.js +28 -0
- package/dist/cjs/renderer/UnresolvedComponent.js.map +1 -0
- package/dist/cjs/renderer/createReactRenderer.js +48 -0
- package/dist/cjs/renderer/createReactRenderer.js.map +1 -0
- package/dist/cjs/theme/SceneThemeProvider.js +44 -0
- package/dist/cjs/theme/SceneThemeProvider.js.map +1 -0
- package/dist/cjs/theme/themeTokens.js +52 -0
- package/dist/cjs/theme/themeTokens.js.map +1 -0
- package/dist/esm/NavBar/NavBar.d.ts +7 -0
- package/dist/esm/NavBar/NavBar.d.ts.map +1 -0
- package/dist/esm/NavBar/NavBar.js +45 -0
- package/dist/esm/NavBar/NavBar.js.map +1 -0
- package/dist/esm/NavBar/extractNavigationItem.d.ts +3 -0
- package/dist/esm/NavBar/extractNavigationItem.d.ts.map +1 -0
- package/dist/esm/NavBar/extractNavigationItem.js +36 -0
- package/dist/esm/NavBar/extractNavigationItem.js.map +1 -0
- package/dist/esm/NavBar/for_NavBar/when_rendering_navigation_contributions.d.ts +2 -0
- package/dist/esm/NavBar/for_NavBar/when_rendering_navigation_contributions.d.ts.map +1 -0
- package/dist/esm/NavBar/for_NavBar/when_rendering_navigation_contributions.js +53 -0
- package/dist/esm/NavBar/for_NavBar/when_rendering_navigation_contributions.js.map +1 -0
- package/dist/esm/NavBar/for_extractNavigationItem/when_extracting_from_a_navigation_contribution.d.ts +2 -0
- package/dist/esm/NavBar/for_extractNavigationItem/when_extracting_from_a_navigation_contribution.d.ts.map +1 -0
- package/dist/esm/NavBar/for_extractNavigationItem/when_extracting_from_a_navigation_contribution.js +45 -0
- package/dist/esm/NavBar/for_extractNavigationItem/when_extracting_from_a_navigation_contribution.js.map +1 -0
- package/dist/esm/NavBar/index.d.ts +3 -0
- package/dist/esm/NavBar/index.d.ts.map +1 -0
- package/dist/esm/NavBar/index.js +3 -0
- package/dist/esm/NavBar/index.js.map +1 -0
- package/dist/esm/SceneElementView.d.ts +10 -0
- package/dist/esm/SceneElementView.d.ts.map +1 -0
- package/dist/esm/SceneElementView.js +19 -0
- package/dist/esm/SceneElementView.js.map +1 -0
- package/dist/esm/SceneElementView.stories.d.ts +15 -0
- package/dist/esm/SceneElementView.stories.d.ts.map +1 -0
- package/dist/esm/SceneElementView.stories.js +54 -0
- package/dist/esm/SceneElementView.stories.js.map +1 -0
- package/dist/esm/core/CoreButton.d.ts +3 -0
- package/dist/esm/core/CoreButton.d.ts.map +1 -0
- package/dist/esm/core/CoreButton.js +20 -0
- package/dist/esm/core/CoreButton.js.map +1 -0
- package/dist/esm/core/CoreCard.d.ts +3 -0
- package/dist/esm/core/CoreCard.d.ts.map +1 -0
- package/dist/esm/core/CoreCard.js +20 -0
- package/dist/esm/core/CoreCard.js.map +1 -0
- package/dist/esm/core/CoreText.d.ts +3 -0
- package/dist/esm/core/CoreText.d.ts.map +1 -0
- package/dist/esm/core/CoreText.js +17 -0
- package/dist/esm/core/CoreText.js.map +1 -0
- package/dist/esm/core/coreComponents.d.ts +3 -0
- package/dist/esm/core/coreComponents.d.ts.map +1 -0
- package/dist/esm/core/coreComponents.js +18 -0
- package/dist/esm/core/coreComponents.js.map +1 -0
- package/dist/esm/core/corePackage.d.ts +5 -0
- package/dist/esm/core/corePackage.d.ts.map +1 -0
- package/dist/esm/core/corePackage.js +38 -0
- package/dist/esm/core/corePackage.js.map +1 -0
- package/dist/esm/core/index.d.ts +6 -0
- package/dist/esm/core/index.d.ts.map +1 -0
- package/dist/esm/core/index.js +6 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/for_SceneElementView/when_rendering_a_tree.d.ts +2 -0
- package/dist/esm/for_SceneElementView/when_rendering_a_tree.d.ts.map +1 -0
- package/dist/esm/for_SceneElementView/when_rendering_a_tree.js +44 -0
- package/dist/esm/for_SceneElementView/when_rendering_a_tree.js.map +1 -0
- package/dist/esm/for_applyThemeTokens/when_switching_themes.d.ts +2 -0
- package/dist/esm/for_applyThemeTokens/when_switching_themes.d.ts.map +1 -0
- package/dist/esm/for_applyThemeTokens/when_switching_themes.js +59 -0
- package/dist/esm/for_applyThemeTokens/when_switching_themes.js.map +1 -0
- package/dist/esm/for_themeTokens/when_converting_a_token_name.d.ts +2 -0
- package/dist/esm/for_themeTokens/when_converting_a_token_name.d.ts.map +1 -0
- package/dist/esm/for_themeTokens/when_converting_a_token_name.js +16 -0
- package/dist/esm/for_themeTokens/when_converting_a_token_name.js.map +1 -0
- package/dist/esm/for_validatePackageBundle/when_the_bundle_and_manifest_disagree.d.ts +2 -0
- package/dist/esm/for_validatePackageBundle/when_the_bundle_and_manifest_disagree.d.ts.map +1 -0
- package/dist/esm/for_validatePackageBundle/when_the_bundle_and_manifest_disagree.js +59 -0
- package/dist/esm/for_validatePackageBundle/when_the_bundle_and_manifest_disagree.js.map +1 -0
- package/dist/esm/for_validatePackageBundle/when_the_bundle_matches_its_manifest.d.ts +2 -0
- package/dist/esm/for_validatePackageBundle/when_the_bundle_matches_its_manifest.d.ts.map +1 -0
- package/dist/esm/for_validatePackageBundle/when_the_bundle_matches_its_manifest.js +8 -0
- package/dist/esm/for_validatePackageBundle/when_the_bundle_matches_its_manifest.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/packages/ScenePackageBundle.d.ts +15 -0
- package/dist/esm/packages/ScenePackageBundle.d.ts.map +1 -0
- package/dist/esm/packages/ScenePackageBundle.js +72 -0
- package/dist/esm/packages/ScenePackageBundle.js.map +1 -0
- package/dist/esm/packages/index.d.ts +2 -0
- package/dist/esm/packages/index.d.ts.map +1 -0
- package/dist/esm/packages/index.js +2 -0
- package/dist/esm/packages/index.js.map +1 -0
- package/dist/esm/renderer/ComponentRegistry.d.ts +8 -0
- package/dist/esm/renderer/ComponentRegistry.d.ts.map +1 -0
- package/dist/esm/renderer/ComponentRegistry.js +2 -0
- package/dist/esm/renderer/ComponentRegistry.js.map +1 -0
- package/dist/esm/renderer/UnresolvedComponent.d.ts +3 -0
- package/dist/esm/renderer/UnresolvedComponent.d.ts.map +1 -0
- package/dist/esm/renderer/UnresolvedComponent.js +26 -0
- package/dist/esm/renderer/UnresolvedComponent.js.map +1 -0
- package/dist/esm/renderer/createReactRenderer.d.ts +5 -0
- package/dist/esm/renderer/createReactRenderer.d.ts.map +1 -0
- package/dist/esm/renderer/createReactRenderer.js +46 -0
- package/dist/esm/renderer/createReactRenderer.js.map +1 -0
- package/dist/esm/renderer/index.d.ts +4 -0
- package/dist/esm/renderer/index.d.ts.map +1 -0
- package/dist/esm/renderer/index.js +4 -0
- package/dist/esm/renderer/index.js.map +1 -0
- package/dist/esm/theme/SceneThemeProvider.d.ts +10 -0
- package/dist/esm/theme/SceneThemeProvider.d.ts.map +1 -0
- package/dist/esm/theme/SceneThemeProvider.js +41 -0
- package/dist/esm/theme/SceneThemeProvider.js.map +1 -0
- package/dist/esm/theme/index.d.ts +3 -0
- package/dist/esm/theme/index.d.ts.map +1 -0
- package/dist/esm/theme/index.js +3 -0
- package/dist/esm/theme/index.js.map +1 -0
- package/dist/esm/theme/themeTokens.d.ts +5 -0
- package/dist/esm/theme/themeTokens.d.ts.map +1 -0
- package/dist/esm/theme/themeTokens.js +48 -0
- package/dist/esm/theme/themeTokens.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/for_SceneElementView/when_rendering_a_tree.tsx +53 -0
- package/for_applyThemeTokens/when_switching_themes.ts +74 -0
- package/for_themeTokens/when_converting_a_token_name.ts +22 -0
- package/for_validatePackageBundle/when_the_bundle_and_manifest_disagree.ts +72 -0
- package/for_validatePackageBundle/when_the_bundle_matches_its_manifest.ts +12 -0
- package/index.ts +9 -0
- package/package.json +60 -0
- package/packages/ScenePackageBundle.ts +137 -0
- package/packages/index.ts +4 -0
- package/renderer/ComponentRegistry.ts +23 -0
- package/renderer/UnresolvedComponent.tsx +20 -0
- package/renderer/createReactRenderer.tsx +35 -0
- package/renderer/index.ts +6 -0
- package/theme/SceneThemeProvider.tsx +58 -0
- package/theme/index.ts +5 -0
- package/theme/themeTokens.ts +59 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/**
|
|
4
|
+
* The prefix every Scene design token gets as a CSS custom property. A package adapts these to whatever
|
|
5
|
+
* its own component library expects — the PrimeReact package maps them onto PrimeReact's variables, the
|
|
6
|
+
* same indirection `@cratis/components` uses for its `--cratis-*` layer — so layout and component CSS
|
|
7
|
+
* never hardcodes one library's variable names.
|
|
8
|
+
*/ const themeTokenPrefix = '--scene';
|
|
9
|
+
/**
|
|
10
|
+
* Turns a semantic token name into its CSS custom property name: `primary.color` becomes
|
|
11
|
+
* `--scene-primary-color`, `surface.borderColor` becomes `--scene-surface-border-color`.
|
|
12
|
+
*
|
|
13
|
+
* Token names are semantic and platform-neutral in `Scene.Model` on purpose; this is the one place that
|
|
14
|
+
* decides what they look like in CSS, so a non-DOM renderer can make an entirely different choice.
|
|
15
|
+
*/ function themeTokenProperty(token) {
|
|
16
|
+
const kebab = token.split('.').map((part)=>part.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()).join('-');
|
|
17
|
+
return `${themeTokenPrefix}-${kebab}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Applies a theme to an element, in place.
|
|
21
|
+
*
|
|
22
|
+
* Every token becomes a custom property on the element, and the element is marked with the theme's name
|
|
23
|
+
* and colour scheme so CSS can key off either. Tokens the previous theme set and this one does not are
|
|
24
|
+
* removed, so switching themes cannot leave a stale value behind.
|
|
25
|
+
*
|
|
26
|
+
* This is deliberately a mutation of an existing element rather than a re-render: switching theme has to
|
|
27
|
+
* be live re-resolution against the running profile, with no reload and no remount, or a gallery preview
|
|
28
|
+
* flickers every time someone tries a different theme.
|
|
29
|
+
*/ function applyThemeTokens(element, theme, previous) {
|
|
30
|
+
for (const token of Object.keys(previous?.tokens ?? {})){
|
|
31
|
+
if (!theme?.tokens || !(token in theme.tokens)) {
|
|
32
|
+
element.style.removeProperty(themeTokenProperty(token));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (!theme) {
|
|
36
|
+
element.removeAttribute('data-scene-theme');
|
|
37
|
+
element.removeAttribute('data-scene-color-scheme');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
for (const [token, value] of Object.entries(theme.tokens ?? {})){
|
|
41
|
+
element.style.setProperty(themeTokenProperty(token), value);
|
|
42
|
+
}
|
|
43
|
+
element.setAttribute('data-scene-theme', theme.name);
|
|
44
|
+
element.setAttribute('data-scene-color-scheme', theme.isDark ? 'dark' : 'light');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { applyThemeTokens, themeTokenPrefix, themeTokenProperty };
|
|
48
|
+
//# sourceMappingURL=themeTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeTokens.js","sources":["../../../theme/themeTokens.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Theme } from '@cratis/scene.model';\n\n/**\n * The prefix every Scene design token gets as a CSS custom property. A package adapts these to whatever\n * its own component library expects — the PrimeReact package maps them onto PrimeReact's variables, the\n * same indirection `@cratis/components` uses for its `--cratis-*` layer — so layout and component CSS\n * never hardcodes one library's variable names.\n */\nexport const themeTokenPrefix = '--scene';\n\n/**\n * Turns a semantic token name into its CSS custom property name: `primary.color` becomes\n * `--scene-primary-color`, `surface.borderColor` becomes `--scene-surface-border-color`.\n *\n * Token names are semantic and platform-neutral in `Scene.Model` on purpose; this is the one place that\n * decides what they look like in CSS, so a non-DOM renderer can make an entirely different choice.\n */\nexport function themeTokenProperty(token: string): string {\n const kebab = token\n .split('.')\n .map((part) => part.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase())\n .join('-');\n return `${themeTokenPrefix}-${kebab}`;\n}\n\n/**\n * Applies a theme to an element, in place.\n *\n * Every token becomes a custom property on the element, and the element is marked with the theme's name\n * and colour scheme so CSS can key off either. Tokens the previous theme set and this one does not are\n * removed, so switching themes cannot leave a stale value behind.\n *\n * This is deliberately a mutation of an existing element rather than a re-render: switching theme has to\n * be live re-resolution against the running profile, with no reload and no remount, or a gallery preview\n * flickers every time someone tries a different theme.\n */\nexport function applyThemeTokens(element: HTMLElement, theme: Theme | undefined, previous?: Theme): void {\n for (const token of Object.keys(previous?.tokens ?? {})) {\n if (!theme?.tokens || !(token in theme.tokens)) {\n element.style.removeProperty(themeTokenProperty(token));\n }\n }\n\n if (!theme) {\n element.removeAttribute('data-scene-theme');\n element.removeAttribute('data-scene-color-scheme');\n return;\n }\n\n for (const [token, value] of Object.entries(theme.tokens ?? {})) {\n element.style.setProperty(themeTokenProperty(token), value);\n }\n\n element.setAttribute('data-scene-theme', theme.name);\n element.setAttribute('data-scene-color-scheme', theme.isDark ? 'dark' : 'light');\n}\n"],"names":["themeTokenPrefix","themeTokenProperty","token","kebab","split","map","part","replace","toLowerCase","join","applyThemeTokens","element","theme","previous","Object","keys","tokens","style","removeProperty","removeAttribute","value","entries","setProperty","setAttribute","name","isDark"],"mappings":"AAAA;AACA;AAIA;;;;;IAMO,MAAMA,gBAAAA,GAAmB;AAEhC;;;;;;IAOO,SAASC,kBAAAA,CAAmBC,KAAa,EAAA;AAC5C,IAAA,MAAMC,QAAQD,KAAAA,CACTE,KAAK,CAAC,GAAA,CAAA,CACNC,GAAG,CAAC,CAACC,IAAAA,GAASA,IAAAA,CAAKC,OAAO,CAAC,oBAAA,EAAsB,SAASC,WAAW,EAAA,CAAA,CACrEC,IAAI,CAAC,GAAA,CAAA;AACV,IAAA,OAAO,CAAA,EAAGT,gBAAAA,CAAiB,CAAC,EAAEG,KAAAA,CAAAA,CAAO;AACzC;AAEA;;;;;;;;;;AAUC,IACM,SAASO,gBAAAA,CAAiBC,OAAoB,EAAEC,KAAwB,EAAEC,QAAgB,EAAA;IAC7F,KAAK,MAAMX,SAASY,MAAAA,CAAOC,IAAI,CAACF,QAAAA,EAAUG,MAAAA,IAAU,EAAC,CAAA,CAAI;QACrD,IAAI,CAACJ,OAAOI,MAAAA,IAAU,EAAEd,KAAAA,IAASU,KAAAA,CAAMI,MAAK,CAAA,EAAI;AAC5CL,YAAAA,OAAAA,CAAQM,KAAK,CAACC,cAAc,CAACjB,kBAAAA,CAAmBC,KAAAA,CAAAA,CAAAA;AACpD,QAAA;AACJ,IAAA;AAEA,IAAA,IAAI,CAACU,KAAAA,EAAO;AACRD,QAAAA,OAAAA,CAAQQ,eAAe,CAAC,kBAAA,CAAA;AACxBR,QAAAA,OAAAA,CAAQQ,eAAe,CAAC,yBAAA,CAAA;AACxB,QAAA;AACJ,IAAA;AAEA,IAAA,KAAK,MAAM,CAACjB,KAAAA,EAAOkB,KAAAA,CAAM,IAAIN,MAAAA,CAAOO,OAAO,CAACT,KAAAA,CAAMI,MAAM,IAAI,EAAC,CAAA,CAAI;AAC7DL,QAAAA,OAAAA,CAAQM,KAAK,CAACK,WAAW,CAACrB,mBAAmBC,KAAAA,CAAAA,EAAQkB,KAAAA,CAAAA;AACzD,IAAA;AAEAT,IAAAA,OAAAA,CAAQY,YAAY,CAAC,kBAAA,EAAoBX,KAAAA,CAAMY,IAAI,CAAA;AACnDb,IAAAA,OAAAA,CAAQY,YAAY,CAAC,yBAAA,EAA2BX,KAAAA,CAAMa,MAAM,GAAG,MAAA,GAAS,OAAA,CAAA;AAC5E;;;;"}
|