@decafhub/decaf-react-webapp 0.0.1 → 0.0.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.2](https://github.com/teloscube/decaf-react-webapp/compare/v0.0.1...v0.0.2) (2022-11-28)
4
+
5
+
6
+ ### Features
7
+
8
+ * get menu, routes and appName as props ([f76e1b9](https://github.com/teloscube/decaf-react-webapp/commit/f76e1b94b8e390ae3a901bc3509404c9d20eca01))
9
+ * integrate and export emotion for styling ([de274f7](https://github.com/teloscube/decaf-react-webapp/commit/de274f7b3139acd7502259ddf16e2dff24b55e51))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * app name is not working as a link to home page ([4bbbc56](https://github.com/teloscube/decaf-react-webapp/commit/4bbbc565c7d7a3202bc1c3657347c8b642e5036e))
15
+
3
16
  ## 0.0.1 (2022-11-24)
4
17
 
5
18
 
package/README.md CHANGED
@@ -9,20 +9,27 @@
9
9
  Install @decafhub/decaf-react-webapp along with its peer dependencies:
10
10
 
11
11
  ```bash:
12
- npm install --save @decafhub/decaf-react-webapp @decafhub/decaf-react@^0.1 @decafhub/decaf-client@^0.3 antd@^5 react@^18 react-dom@^18
12
+ npm install --save @decafhub/decaf-react-webapp @decafhub/decaf-react@^0.1 @decafhub/decaf-client@^0.3 antd@^5 @ant-design/icons@^4 react@^18 react-dom@^18
13
13
  ```
14
14
 
15
15
  Or with yarn:
16
16
 
17
17
  ```bash
18
- yarn add @decafhub/decaf-react-webapp @decafhub/decaf-react@^0.1 @decafhub/decaf-client@^0.3 antd@^5 react@^18 react-dom@^18
18
+ yarn add @decafhub/decaf-react-webapp @decafhub/decaf-react@^0.1 @decafhub/decaf-client@^0.3 antd@^5 @ant-design/icons@^4 react@^18 react-dom@^18
19
19
  ```
20
20
 
21
+ ## Usage
22
+
23
+ See the [App.tsx](./example/src/App.tsx) file in the `example` folder file for detailed usage.
24
+
21
25
  ## Development
22
26
 
23
27
  1. Clone the repository.
24
28
  2. Install dependencies with `yarn`.
25
29
  3. Run `yarn start` to start the development server.
26
- 4. cd into `example` and run `yarn install` and `yarn start` to start the example application.
27
- 5. cd into `example` and run `yarn caddy` to start Caddy server.
28
- 6. Open http://localhost:2999/webapps/react-webapp-example/development/ in your browser.
30
+ 4. cd into `example`
31
+ 1. run `yarn install`
32
+ 2. duplicate `.env.example` to `.env`
33
+ 3. run `yarn start` to start the example application.
34
+ 4. run `yarn caddy` to start the Caddy server.
35
+ 5. Open http://localhost:2999/webapps/react-webapp-example/development/ in your browser.
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { ItemType } from 'antd/es/menu/hooks/useItems';
3
+ import { DecafLayoutProps } from 'types';
4
+ import { DecafMenuItem } from './types';
5
+ export declare function routesToAntMenu(routes: DecafMenuItem[]): ItemType[];
6
+ export default function DecafLayout(props: DecafLayoutProps): JSX.Element;
7
+ //# sourceMappingURL=Layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../src/Layout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAe,MAAM,6BAA6B,CAAC;AAGpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAE,CAyBnE;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,gBAAgB,eA0B1D"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,7 @@
1
- import { DecafAppController, DecafAppConfig } from '@decafhub/decaf-react';
2
- import { ThemeConfig } from 'antd/es/config-provider/context';
3
- import React from 'react';
4
- export interface DecafWebappProps {
5
- config?: DecafAppConfig;
6
- controller?: DecafAppController;
7
- theme?: ThemeConfig;
8
- children: React.ReactNode;
9
- }
10
- export default function DecafWebapp(props: DecafWebappProps): JSX.Element;
1
+ /// <reference types="react" />
2
+ import { css, Global } from '@emotion/react';
3
+ import styled from '@emotion/styled';
4
+ import { DecafWebappProps } from 'types';
5
+ declare function DecafWebapp(props: DecafWebappProps): JSX.Element;
6
+ export { DecafWebapp, Global as GlobalStyle, css, styled };
11
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAY,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,gBAAgB,eAM1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAMrC,OAAO,EAA6B,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAuBpE,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,eA0B3C;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("@decafhub/decaf-react"),r=require("antd");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=/*#__PURE__*/o(require("react")),c={hashed:!0,token:{colorPrimary:"#344961",colorBgBase:"#10161d",colorBgLayout:"#10161d",borderRadius:0,colorError:"#b03a38",colorSuccess:"#48734d",colorWarning:"#ffc107",colorInfo:"#4694ab",green:"#48734d",red:"#b03a38",blue:"#0d6efd",yellow:"#ffc107",colorWhite:"#fff"},algorithm:[r.theme.darkAlgorithm]};module.exports=function(o){var l;return t.default.createElement(e.DecafApp,{config:o.config,controller:o.controller},t.default.createElement(r.ConfigProvider,{theme:null!=(l=o.theme)?l:c},o.children))};
1
+ var e=require("@decafhub/decaf-react"),t=require("@emotion/react"),r=require("@emotion/styled"),n=require("antd"),o=require("react"),a=require("react-router-dom");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=/*#__PURE__*/l(r),u=/*#__PURE__*/l(o);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},i.apply(this,arguments)}function d(e){var t=[];return e.forEach(function(e){var r={key:"to"in e?e.to:e.label,label:e.label,icon:e.icon};"to"in e?r.label=u.default.createElement(a.NavLink,{to:e.to,end:"/"===e.to},e.label):e.href?r.label=u.default.createElement("a",{href:e.href},e.label):e.children&&(r.label=e.label,r.children=d(e.children||[])),t.push(r)}),t}function f(e){var t=d(e.menu),r=a.useMatches().map(function(e){return e.pathname});return u.default.createElement(n.Layout,{style:{height:"100%"}},u.default.createElement(n.Layout.Header,{style:{paddingInline:0}},u.default.createElement("div",{style:{paddingInline:20,display:"flex",justifyContent:"space-between",alignItems:"center"}},u.default.createElement(a.Link,{to:"/"},u.default.createElement(n.Typography.Title,{level:4,style:{margin:0}},e.appName)),u.default.createElement(n.Menu,{style:{justifyContent:"flex-end",backgroundColor:"transparent",border:"none"},mode:"horizontal",items:t,selectedKeys:r}))),u.default.createElement(n.Layout.Content,{style:{padding:"20px 50px"}},e.children))}var s={hashed:!0,components:{Layout:{colorBgHeader:"#10161d"},Button:{boxShadow:"none",boxShadowSecondary:"none"}},token:{fontFamily:'"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',colorPrimary:"#344961",colorBgBase:"#1a242f",colorBgLayout:"#1a242f",borderRadius:0,colorError:"#b03a38",colorSuccess:"#48734d",colorWarning:"#ffc107",colorInfo:"#4694ab",green:"#48734d",red:"#b03a38",blue:"#0d6efd",yellow:"#ffc107",colorWhite:"#fff"},algorithm:[n.theme.darkAlgorithm]};function m(e,t){var r=[];return t.forEach(function(t){var n,o=i({},t);t.children?(o.element=null!=(n=t.element)?n:u.default.createElement(a.Outlet,null),o.children=m(e,t.children)):o.element=u.default.createElement(f,{menu:e,appName:"Decaf Webapp"},t.element),r.push(o)}),r}Object.defineProperty(exports,"GlobalStyle",{enumerable:!0,get:function(){return t.Global}}),Object.defineProperty(exports,"css",{enumerable:!0,get:function(){return t.css}}),Object.defineProperty(exports,"styled",{enumerable:!0,get:function(){return c.default}}),exports.DecafWebapp=function(r){var o,l,c,i,d=m(r.menuItems,r.routes),f=a.createBrowserRouter(d,{basename:null==(o=r.config)?void 0:o.basePath}),b=null!=(l=r.theme)?l:s;return u.default.createElement(n.ConfigProvider,{theme:b},u.default.createElement(t.Global,{styles:{body:{background:null==(c=b.token)?void 0:c.colorBgBase,fontFamily:null==(i=b.token)?void 0:i.fontFamily},button:{boxShadow:"none !important"}}}),u.default.createElement(e.DecafApp,{config:r.config,controller:r.controller},u.default.createElement(a.RouterProvider,{router:f})))};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/theme.ts","../src/index.tsx"],"sourcesContent":["import { theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\n\nexport const decafTheme: ThemeConfig = {\n hashed: true,\n token: {\n colorPrimary: '#344961',\n colorBgBase: '#10161d',\n colorBgLayout: '#10161d',\n borderRadius: 0,\n colorError: '#b03a38',\n colorSuccess: '#48734d',\n colorWarning: '#ffc107',\n colorInfo: '#4694ab',\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n colorWhite: '#fff',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n","import { DecafAppController, DecafApp, DecafAppConfig } from '@decafhub/decaf-react';\nimport { ConfigProvider } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport React from 'react';\nimport { decafTheme } from 'theme';\n\nexport interface DecafWebappProps {\n config?: DecafAppConfig;\n controller?: DecafAppController;\n theme?: ThemeConfig;\n children: React.ReactNode;\n}\n\nexport default function DecafWebapp(props: DecafWebappProps) {\n return (\n <DecafApp config={props.config} controller={props.controller}>\n <ConfigProvider theme={props.theme ?? decafTheme}>{props.children}</ConfigProvider>\n </DecafApp>\n );\n}\n"],"names":["decafTheme","hashed","token","colorPrimary","colorBgBase","colorBgLayout","borderRadius","colorError","colorSuccess","colorWarning","colorInfo","green","red","blue","yellow","colorWhite","algorithm","theme","darkAlgorithm","props","_props$theme","React","createElement","DecafApp","config","controller","ConfigProvider","children"],"mappings":"wKAGuBA,EAAgB,CACrCC,QAAQ,EACRC,MAAO,CACLC,aAAc,UACdC,YAAa,UACbC,cAAe,UACfC,aAAc,EACdC,WAAY,UACZC,aAAc,UACdC,aAAc,UACdC,UAAW,UACXC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,WAAY,QAGdC,UAAW,CAACC,EAAAA,MAAMC,+BCRI,SAAYC,GAAuB,IAAAC,EACzD,OACEC,EAAA,QAAAC,cAACC,WAAQ,CAACC,OAAQL,EAAMK,OAAQC,WAAYN,EAAMM,YAChDJ,EAAA,QAAAC,cAACI,EAAcA,eAAC,CAAAT,MAAkB,OAAXE,EAAAA,EAAMF,OAAKG,EAAIpB,GAAamB,EAAMQ,UAG/D"}
1
+ {"version":3,"file":"index.js","sources":["../src/Layout.tsx","../src/theme.ts","../src/index.tsx"],"sourcesContent":["import { Layout, Menu, Typography } from 'antd';\nimport { ItemType, SubMenuType } from 'antd/es/menu/hooks/useItems';\nimport React from 'react';\nimport { Link, NavLink, useMatches } from 'react-router-dom';\nimport { DecafLayoutProps } from 'types';\nimport { DecafMenuItem } from './types';\n\nexport function routesToAntMenu(routes: DecafMenuItem[]): ItemType[] {\n const result: ItemType[] = [];\n\n routes.forEach((route) => {\n const item: ItemType = {\n key: 'to' in route ? route.to : route.label,\n label: route.label,\n icon: route.icon,\n };\n if ('to' in route) {\n item.label = (\n <NavLink to={route.to} end={route.to === '/'}>\n {route.label}\n </NavLink>\n );\n } else if (route.href) {\n item.label = <a href={route.href}>{route.label}</a>;\n } else if (route.children) {\n item.label = route.label;\n (item as SubMenuType).children = routesToAntMenu(route.children || []);\n }\n result.push(item);\n });\n\n return result;\n}\n\nexport default function DecafLayout(props: DecafLayoutProps) {\n const menuItems = routesToAntMenu(props.menu);\n const matches = useMatches();\n const matchedMenuItems = matches.map((match) => match.pathname);\n\n return (\n <Layout style={{ height: '100%' }}>\n <Layout.Header style={{ paddingInline: 0 }}>\n <div style={{ paddingInline: 20, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Link to=\"/\">\n <Typography.Title level={4} style={{ margin: 0 }}>\n {props.appName}\n </Typography.Title>\n </Link>\n <Menu\n style={{ justifyContent: 'flex-end', backgroundColor: 'transparent', border: 'none' }}\n mode=\"horizontal\"\n items={menuItems}\n selectedKeys={matchedMenuItems}\n />\n </div>\n </Layout.Header>\n <Layout.Content style={{ padding: '20px 50px' }}>{props.children}</Layout.Content>\n {/* <Layout.Footer style={{ textAlign: 'center' }}>Footer</Layout.Footer> */}\n </Layout>\n );\n}\n","import { theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\n\nexport const decafTheme: ThemeConfig = {\n hashed: true,\n components: {\n Layout: {\n colorBgHeader: '#10161d',\n },\n Button: {\n boxShadow: 'none',\n boxShadowSecondary: 'none',\n },\n },\n token: {\n fontFamily:\n '\"Inter\",system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"',\n colorPrimary: '#344961',\n colorBgBase: '#1a242f',\n colorBgLayout: '#1a242f',\n borderRadius: 0,\n colorError: '#b03a38',\n colorSuccess: '#48734d',\n colorWarning: '#ffc107',\n colorInfo: '#4694ab',\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n colorWhite: '#fff',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n","import { DecafApp } from '@decafhub/decaf-react';\nimport { css, Global } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { ConfigProvider } from 'antd';\nimport DecafLayout from 'Layout';\nimport React from 'react';\nimport { createBrowserRouter, Outlet, RouteObject, RouterProvider } from 'react-router-dom';\nimport { decafTheme } from 'theme';\nimport { DecafMenuItem, DecafRoute, DecafWebappProps } from 'types';\n\nfunction buildRoutes(menuItems: DecafMenuItem[], routes: DecafRoute[]): RouteObject[] {\n const result: RouteObject[] = [];\n\n routes.forEach((route) => {\n const item: RouteObject = { ...route };\n if (route.children) {\n item.element = route.element ?? <Outlet />;\n item.children = buildRoutes(menuItems, route.children);\n } else {\n item.element = (\n <DecafLayout menu={menuItems} appName=\"Decaf Webapp\">\n {route.element}\n </DecafLayout>\n );\n }\n result.push(item);\n });\n\n return result;\n}\n\nfunction DecafWebapp(props: DecafWebappProps) {\n const routes = buildRoutes(props.menuItems, props.routes);\n const router = createBrowserRouter(routes, {\n basename: props.config?.basePath,\n });\n const theme = props.theme ?? decafTheme;\n\n return (\n <ConfigProvider theme={theme}>\n <Global\n styles={{\n body: {\n background: theme.token?.colorBgBase,\n fontFamily: theme.token?.fontFamily,\n },\n button: {\n // antd button has a default box shadow and we can't override it for now\n boxShadow: 'none !important',\n },\n }}\n />\n <DecafApp config={props.config} controller={props.controller}>\n <RouterProvider router={router} />\n </DecafApp>\n </ConfigProvider>\n );\n}\n\nexport { DecafWebapp, Global as GlobalStyle, css, styled };\n"],"names":["routesToAntMenu","routes","result","forEach","route","key","to","label","icon","item","React","createElement","NavLink","end","href","children","push","DecafLayout","props","menuItems","menu","matchedMenuItems","useMatches","map","match","pathname","Layout","style","height","Header","paddingInline","display","justifyContent","alignItems","Link","Typography","Title","level","margin","appName","Menu","backgroundColor","border","mode","items","selectedKeys","Content","padding","decafTheme","hashed","components","colorBgHeader","Button","boxShadow","boxShadowSecondary","token","fontFamily","colorPrimary","colorBgBase","colorBgLayout","borderRadius","colorError","colorSuccess","colorWarning","colorInfo","green","red","blue","yellow","colorWhite","algorithm","theme","darkAlgorithm","buildRoutes","_route$element","_extends","element","Outlet","_props$config","_props$theme","_theme$token","_theme$token2","router","createBrowserRouter","basename","config","basePath","ConfigProvider","Global","styles","body","background","button","DecafApp","controller","RouterProvider"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{DecafApp as r}from"@decafhub/decaf-react";import{theme as o,ConfigProvider as e}from"antd";import c from"react";const t={hashed:!0,token:{colorPrimary:"#344961",colorBgBase:"#10161d",colorBgLayout:"#10161d",borderRadius:0,colorError:"#b03a38",colorSuccess:"#48734d",colorWarning:"#ffc107",colorInfo:"#4694ab",green:"#48734d",red:"#b03a38",blue:"#0d6efd",yellow:"#ffc107",colorWhite:"#fff"},algorithm:[o.darkAlgorithm]};function l(o){var l;return c.createElement(r,{config:o.config,controller:o.controller},c.createElement(e,{theme:null!=(l=o.theme)?l:t},o.children))}export{l as default};
1
+ import{DecafApp as e}from"@decafhub/decaf-react";import{Global as t}from"@emotion/react";export{Global as GlobalStyle,css}from"@emotion/react";export{default as styled}from"@emotion/styled";import{Layout as o,Typography as n,Menu as r,theme as l,ConfigProvider as a}from"antd";import c from"react";import{useMatches as i,Link as m,NavLink as s,createBrowserRouter as d,RouterProvider as f,Outlet as u}from"react-router-dom";function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},p.apply(this,arguments)}function b(e){const t=[];return e.forEach(e=>{const o={key:"to"in e?e.to:e.label,label:e.label,icon:e.icon};"to"in e?o.label=c.createElement(s,{to:e.to,end:"/"===e.to},e.label):e.href?o.label=c.createElement("a",{href:e.href},e.label):e.children&&(o.label=e.label,o.children=b(e.children||[])),t.push(o)}),t}function h(e){const t=b(e.menu),l=i().map(e=>e.pathname);return c.createElement(o,{style:{height:"100%"}},c.createElement(o.Header,{style:{paddingInline:0}},c.createElement("div",{style:{paddingInline:20,display:"flex",justifyContent:"space-between",alignItems:"center"}},c.createElement(m,{to:"/"},c.createElement(n.Title,{level:4,style:{margin:0}},e.appName)),c.createElement(r,{style:{justifyContent:"flex-end",backgroundColor:"transparent",border:"none"},mode:"horizontal",items:t,selectedKeys:l}))),c.createElement(o.Content,{style:{padding:"20px 50px"}},e.children))}const y={hashed:!0,components:{Layout:{colorBgHeader:"#10161d"},Button:{boxShadow:"none",boxShadowSecondary:"none"}},token:{fontFamily:'"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',colorPrimary:"#344961",colorBgBase:"#1a242f",colorBgLayout:"#1a242f",borderRadius:0,colorError:"#b03a38",colorSuccess:"#48734d",colorWarning:"#ffc107",colorInfo:"#4694ab",green:"#48734d",red:"#b03a38",blue:"#0d6efd",yellow:"#ffc107",colorWhite:"#fff"},algorithm:[l.darkAlgorithm]};function g(e,t){const o=[];return t.forEach(t=>{const n=p({},t);var r;t.children?(n.element=null!=(r=t.element)?r:c.createElement(u,null),n.children=g(e,t.children)):n.element=c.createElement(h,{menu:e,appName:"Decaf Webapp"},t.element),o.push(n)}),o}function E(o){var n,r,l,i;const m=g(o.menuItems,o.routes),s=d(m,{basename:null==(n=o.config)?void 0:n.basePath}),u=null!=(r=o.theme)?r:y;return c.createElement(a,{theme:u},c.createElement(t,{styles:{body:{background:null==(l=u.token)?void 0:l.colorBgBase,fontFamily:null==(i=u.token)?void 0:i.fontFamily},button:{boxShadow:"none !important"}}}),c.createElement(e,{config:o.config,controller:o.controller},c.createElement(f,{router:s})))}export{E as DecafWebapp};
2
2
  //# sourceMappingURL=index.modern.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.mjs","sources":["../src/theme.ts","../src/index.tsx"],"sourcesContent":["import { theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\n\nexport const decafTheme: ThemeConfig = {\n hashed: true,\n token: {\n colorPrimary: '#344961',\n colorBgBase: '#10161d',\n colorBgLayout: '#10161d',\n borderRadius: 0,\n colorError: '#b03a38',\n colorSuccess: '#48734d',\n colorWarning: '#ffc107',\n colorInfo: '#4694ab',\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n colorWhite: '#fff',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n","import { DecafAppController, DecafApp, DecafAppConfig } from '@decafhub/decaf-react';\nimport { ConfigProvider } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport React from 'react';\nimport { decafTheme } from 'theme';\n\nexport interface DecafWebappProps {\n config?: DecafAppConfig;\n controller?: DecafAppController;\n theme?: ThemeConfig;\n children: React.ReactNode;\n}\n\nexport default function DecafWebapp(props: DecafWebappProps) {\n return (\n <DecafApp config={props.config} controller={props.controller}>\n <ConfigProvider theme={props.theme ?? decafTheme}>{props.children}</ConfigProvider>\n </DecafApp>\n );\n}\n"],"names":["decafTheme","hashed","token","colorPrimary","colorBgBase","colorBgLayout","borderRadius","colorError","colorSuccess","colorWarning","colorInfo","green","red","blue","yellow","colorWhite","algorithm","theme","darkAlgorithm","props","_props$theme","React","createElement","DecafApp","config","controller","ConfigProvider","children"],"mappings":"6HAGuBA,EAAgB,CACrCC,QAAQ,EACRC,MAAO,CACLC,aAAc,UACdC,YAAa,UACbC,cAAe,UACfC,aAAc,EACdC,WAAY,UACZC,aAAc,UACdC,aAAc,UACdC,UAAW,UACXC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,WAAY,QAGdC,UAAW,CAACC,EAAMC,gBCRI,WAAYC,GAAuB,IAAAC,EACzD,OACEC,EAAAC,cAACC,EAAQ,CAACC,OAAQL,EAAMK,OAAQC,WAAYN,EAAMM,YAChDJ,EAAAC,cAACI,EAAe,CAAAT,MAAkB,OAAXE,EAAAA,EAAMF,OAAKG,EAAIpB,GAAamB,EAAMQ,UAG/D"}
1
+ {"version":3,"file":"index.modern.mjs","sources":["../src/Layout.tsx","../src/theme.ts","../src/index.tsx"],"sourcesContent":["import { Layout, Menu, Typography } from 'antd';\nimport { ItemType, SubMenuType } from 'antd/es/menu/hooks/useItems';\nimport React from 'react';\nimport { Link, NavLink, useMatches } from 'react-router-dom';\nimport { DecafLayoutProps } from 'types';\nimport { DecafMenuItem } from './types';\n\nexport function routesToAntMenu(routes: DecafMenuItem[]): ItemType[] {\n const result: ItemType[] = [];\n\n routes.forEach((route) => {\n const item: ItemType = {\n key: 'to' in route ? route.to : route.label,\n label: route.label,\n icon: route.icon,\n };\n if ('to' in route) {\n item.label = (\n <NavLink to={route.to} end={route.to === '/'}>\n {route.label}\n </NavLink>\n );\n } else if (route.href) {\n item.label = <a href={route.href}>{route.label}</a>;\n } else if (route.children) {\n item.label = route.label;\n (item as SubMenuType).children = routesToAntMenu(route.children || []);\n }\n result.push(item);\n });\n\n return result;\n}\n\nexport default function DecafLayout(props: DecafLayoutProps) {\n const menuItems = routesToAntMenu(props.menu);\n const matches = useMatches();\n const matchedMenuItems = matches.map((match) => match.pathname);\n\n return (\n <Layout style={{ height: '100%' }}>\n <Layout.Header style={{ paddingInline: 0 }}>\n <div style={{ paddingInline: 20, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Link to=\"/\">\n <Typography.Title level={4} style={{ margin: 0 }}>\n {props.appName}\n </Typography.Title>\n </Link>\n <Menu\n style={{ justifyContent: 'flex-end', backgroundColor: 'transparent', border: 'none' }}\n mode=\"horizontal\"\n items={menuItems}\n selectedKeys={matchedMenuItems}\n />\n </div>\n </Layout.Header>\n <Layout.Content style={{ padding: '20px 50px' }}>{props.children}</Layout.Content>\n {/* <Layout.Footer style={{ textAlign: 'center' }}>Footer</Layout.Footer> */}\n </Layout>\n );\n}\n","import { theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\n\nexport const decafTheme: ThemeConfig = {\n hashed: true,\n components: {\n Layout: {\n colorBgHeader: '#10161d',\n },\n Button: {\n boxShadow: 'none',\n boxShadowSecondary: 'none',\n },\n },\n token: {\n fontFamily:\n '\"Inter\",system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"',\n colorPrimary: '#344961',\n colorBgBase: '#1a242f',\n colorBgLayout: '#1a242f',\n borderRadius: 0,\n colorError: '#b03a38',\n colorSuccess: '#48734d',\n colorWarning: '#ffc107',\n colorInfo: '#4694ab',\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n colorWhite: '#fff',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n","import { DecafApp } from '@decafhub/decaf-react';\nimport { css, Global } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { ConfigProvider } from 'antd';\nimport DecafLayout from 'Layout';\nimport React from 'react';\nimport { createBrowserRouter, Outlet, RouteObject, RouterProvider } from 'react-router-dom';\nimport { decafTheme } from 'theme';\nimport { DecafMenuItem, DecafRoute, DecafWebappProps } from 'types';\n\nfunction buildRoutes(menuItems: DecafMenuItem[], routes: DecafRoute[]): RouteObject[] {\n const result: RouteObject[] = [];\n\n routes.forEach((route) => {\n const item: RouteObject = { ...route };\n if (route.children) {\n item.element = route.element ?? <Outlet />;\n item.children = buildRoutes(menuItems, route.children);\n } else {\n item.element = (\n <DecafLayout menu={menuItems} appName=\"Decaf Webapp\">\n {route.element}\n </DecafLayout>\n );\n }\n result.push(item);\n });\n\n return result;\n}\n\nfunction DecafWebapp(props: DecafWebappProps) {\n const routes = buildRoutes(props.menuItems, props.routes);\n const router = createBrowserRouter(routes, {\n basename: props.config?.basePath,\n });\n const theme = props.theme ?? decafTheme;\n\n return (\n <ConfigProvider theme={theme}>\n <Global\n styles={{\n body: {\n background: theme.token?.colorBgBase,\n fontFamily: theme.token?.fontFamily,\n },\n button: {\n // antd button has a default box shadow and we can't override it for now\n boxShadow: 'none !important',\n },\n }}\n />\n <DecafApp config={props.config} controller={props.controller}>\n <RouterProvider router={router} />\n </DecafApp>\n </ConfigProvider>\n );\n}\n\nexport { DecafWebapp, Global as GlobalStyle, css, styled };\n"],"names":["routesToAntMenu","routes","result","forEach","route","item","key","to","label","icon","React","createElement","NavLink","end","href","children","push","props","menu","matchedMenuItems","useMatches","map","match","pathname","Layout","style","height","Header","paddingInline","display","justifyContent","alignItems","Link","Typography","Title","level","margin","appName","Menu","backgroundColor","border","mode","items","menuItems","selectedKeys","Content","padding","decafTheme","hashed","components","colorBgHeader","Button","boxShadow","boxShadowSecondary","token","fontFamily","colorPrimary","colorBgBase","colorBgLayout","borderRadius","colorError","colorSuccess","colorWarning","colorInfo","green","red","blue","yellow","colorWhite","algorithm","theme","darkAlgorithm","buildRoutes","element","_route$element","Outlet","DecafLayout","DecafWebapp","_props$config","_props$theme","_theme$token","_theme$token2","router","createBrowserRouter","basename","config","basePath","ConfigProvider","Global","styles","body","background","button","DecafApp","controller","RouterProvider"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{DecafApp as r}from"@decafhub/decaf-react";import{theme as o,ConfigProvider as e}from"antd";import c from"react";var l={hashed:!0,token:{colorPrimary:"#344961",colorBgBase:"#10161d",colorBgLayout:"#10161d",borderRadius:0,colorError:"#b03a38",colorSuccess:"#48734d",colorWarning:"#ffc107",colorInfo:"#4694ab",green:"#48734d",red:"#b03a38",blue:"#0d6efd",yellow:"#ffc107",colorWhite:"#fff"},algorithm:[o.darkAlgorithm]};function t(o){var t;return c.createElement(r,{config:o.config,controller:o.controller},c.createElement(e,{theme:null!=(t=o.theme)?t:l},o.children))}export{t as default};
1
+ import{DecafApp as e}from"@decafhub/decaf-react";import{Global as t}from"@emotion/react";export{Global as GlobalStyle,css}from"@emotion/react";export{default as styled}from"@emotion/styled";import{Layout as o,Typography as n,Menu as r,theme as l,ConfigProvider as a}from"antd";import c from"react";import{useMatches as i,Link as m,NavLink as s,createBrowserRouter as d,RouterProvider as f,Outlet as u}from"react-router-dom";function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},p.apply(this,arguments)}function b(e){var t=[];return e.forEach(function(e){var o={key:"to"in e?e.to:e.label,label:e.label,icon:e.icon};"to"in e?o.label=c.createElement(s,{to:e.to,end:"/"===e.to},e.label):e.href?o.label=c.createElement("a",{href:e.href},e.label):e.children&&(o.label=e.label,o.children=b(e.children||[])),t.push(o)}),t}function h(e){var t=b(e.menu),l=i().map(function(e){return e.pathname});return c.createElement(o,{style:{height:"100%"}},c.createElement(o.Header,{style:{paddingInline:0}},c.createElement("div",{style:{paddingInline:20,display:"flex",justifyContent:"space-between",alignItems:"center"}},c.createElement(m,{to:"/"},c.createElement(n.Title,{level:4,style:{margin:0}},e.appName)),c.createElement(r,{style:{justifyContent:"flex-end",backgroundColor:"transparent",border:"none"},mode:"horizontal",items:t,selectedKeys:l}))),c.createElement(o.Content,{style:{padding:"20px 50px"}},e.children))}var y={hashed:!0,components:{Layout:{colorBgHeader:"#10161d"},Button:{boxShadow:"none",boxShadowSecondary:"none"}},token:{fontFamily:'"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',colorPrimary:"#344961",colorBgBase:"#1a242f",colorBgLayout:"#1a242f",borderRadius:0,colorError:"#b03a38",colorSuccess:"#48734d",colorWarning:"#ffc107",colorInfo:"#4694ab",green:"#48734d",red:"#b03a38",blue:"#0d6efd",yellow:"#ffc107",colorWhite:"#fff"},algorithm:[l.darkAlgorithm]};function g(e,t){var o=[];return t.forEach(function(t){var n,r=p({},t);t.children?(r.element=null!=(n=t.element)?n:c.createElement(u,null),r.children=g(e,t.children)):r.element=c.createElement(h,{menu:e,appName:"Decaf Webapp"},t.element),o.push(r)}),o}function E(o){var n,r,l,i,m=g(o.menuItems,o.routes),s=d(m,{basename:null==(n=o.config)?void 0:n.basePath}),u=null!=(r=o.theme)?r:y;return c.createElement(a,{theme:u},c.createElement(t,{styles:{body:{background:null==(l=u.token)?void 0:l.colorBgBase,fontFamily:null==(i=u.token)?void 0:i.fontFamily},button:{boxShadow:"none !important"}}}),c.createElement(e,{config:o.config,controller:o.controller},c.createElement(f,{router:s})))}export{E as DecafWebapp};
2
2
  //# sourceMappingURL=index.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.js","sources":["../src/theme.ts","../src/index.tsx"],"sourcesContent":["import { theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\n\nexport const decafTheme: ThemeConfig = {\n hashed: true,\n token: {\n colorPrimary: '#344961',\n colorBgBase: '#10161d',\n colorBgLayout: '#10161d',\n borderRadius: 0,\n colorError: '#b03a38',\n colorSuccess: '#48734d',\n colorWarning: '#ffc107',\n colorInfo: '#4694ab',\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n colorWhite: '#fff',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n","import { DecafAppController, DecafApp, DecafAppConfig } from '@decafhub/decaf-react';\nimport { ConfigProvider } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport React from 'react';\nimport { decafTheme } from 'theme';\n\nexport interface DecafWebappProps {\n config?: DecafAppConfig;\n controller?: DecafAppController;\n theme?: ThemeConfig;\n children: React.ReactNode;\n}\n\nexport default function DecafWebapp(props: DecafWebappProps) {\n return (\n <DecafApp config={props.config} controller={props.controller}>\n <ConfigProvider theme={props.theme ?? decafTheme}>{props.children}</ConfigProvider>\n </DecafApp>\n );\n}\n"],"names":["decafTheme","hashed","token","colorPrimary","colorBgBase","colorBgLayout","borderRadius","colorError","colorSuccess","colorWarning","colorInfo","green","red","blue","yellow","colorWhite","algorithm","theme","darkAlgorithm","props","_props$theme","React","createElement","DecafApp","config","controller","ConfigProvider","children"],"mappings":"2HAGuBA,EAAgB,CACrCC,QAAQ,EACRC,MAAO,CACLC,aAAc,UACdC,YAAa,UACbC,cAAe,UACfC,aAAc,EACdC,WAAY,UACZC,aAAc,UACdC,aAAc,UACdC,UAAW,UACXC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,WAAY,QAGdC,UAAW,CAACC,EAAMC,gBCRI,WAAYC,GAAuB,IAAAC,EACzD,OACEC,EAAAC,cAACC,EAAQ,CAACC,OAAQL,EAAMK,OAAQC,WAAYN,EAAMM,YAChDJ,EAAAC,cAACI,EAAe,CAAAT,MAAkB,OAAXE,EAAAA,EAAMF,OAAKG,EAAIpB,GAAamB,EAAMQ,UAG/D"}
1
+ {"version":3,"file":"index.module.js","sources":["../src/Layout.tsx","../src/theme.ts","../src/index.tsx"],"sourcesContent":["import { Layout, Menu, Typography } from 'antd';\nimport { ItemType, SubMenuType } from 'antd/es/menu/hooks/useItems';\nimport React from 'react';\nimport { Link, NavLink, useMatches } from 'react-router-dom';\nimport { DecafLayoutProps } from 'types';\nimport { DecafMenuItem } from './types';\n\nexport function routesToAntMenu(routes: DecafMenuItem[]): ItemType[] {\n const result: ItemType[] = [];\n\n routes.forEach((route) => {\n const item: ItemType = {\n key: 'to' in route ? route.to : route.label,\n label: route.label,\n icon: route.icon,\n };\n if ('to' in route) {\n item.label = (\n <NavLink to={route.to} end={route.to === '/'}>\n {route.label}\n </NavLink>\n );\n } else if (route.href) {\n item.label = <a href={route.href}>{route.label}</a>;\n } else if (route.children) {\n item.label = route.label;\n (item as SubMenuType).children = routesToAntMenu(route.children || []);\n }\n result.push(item);\n });\n\n return result;\n}\n\nexport default function DecafLayout(props: DecafLayoutProps) {\n const menuItems = routesToAntMenu(props.menu);\n const matches = useMatches();\n const matchedMenuItems = matches.map((match) => match.pathname);\n\n return (\n <Layout style={{ height: '100%' }}>\n <Layout.Header style={{ paddingInline: 0 }}>\n <div style={{ paddingInline: 20, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Link to=\"/\">\n <Typography.Title level={4} style={{ margin: 0 }}>\n {props.appName}\n </Typography.Title>\n </Link>\n <Menu\n style={{ justifyContent: 'flex-end', backgroundColor: 'transparent', border: 'none' }}\n mode=\"horizontal\"\n items={menuItems}\n selectedKeys={matchedMenuItems}\n />\n </div>\n </Layout.Header>\n <Layout.Content style={{ padding: '20px 50px' }}>{props.children}</Layout.Content>\n {/* <Layout.Footer style={{ textAlign: 'center' }}>Footer</Layout.Footer> */}\n </Layout>\n );\n}\n","import { theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\n\nexport const decafTheme: ThemeConfig = {\n hashed: true,\n components: {\n Layout: {\n colorBgHeader: '#10161d',\n },\n Button: {\n boxShadow: 'none',\n boxShadowSecondary: 'none',\n },\n },\n token: {\n fontFamily:\n '\"Inter\",system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"',\n colorPrimary: '#344961',\n colorBgBase: '#1a242f',\n colorBgLayout: '#1a242f',\n borderRadius: 0,\n colorError: '#b03a38',\n colorSuccess: '#48734d',\n colorWarning: '#ffc107',\n colorInfo: '#4694ab',\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n colorWhite: '#fff',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n","import { DecafApp } from '@decafhub/decaf-react';\nimport { css, Global } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { ConfigProvider } from 'antd';\nimport DecafLayout from 'Layout';\nimport React from 'react';\nimport { createBrowserRouter, Outlet, RouteObject, RouterProvider } from 'react-router-dom';\nimport { decafTheme } from 'theme';\nimport { DecafMenuItem, DecafRoute, DecafWebappProps } from 'types';\n\nfunction buildRoutes(menuItems: DecafMenuItem[], routes: DecafRoute[]): RouteObject[] {\n const result: RouteObject[] = [];\n\n routes.forEach((route) => {\n const item: RouteObject = { ...route };\n if (route.children) {\n item.element = route.element ?? <Outlet />;\n item.children = buildRoutes(menuItems, route.children);\n } else {\n item.element = (\n <DecafLayout menu={menuItems} appName=\"Decaf Webapp\">\n {route.element}\n </DecafLayout>\n );\n }\n result.push(item);\n });\n\n return result;\n}\n\nfunction DecafWebapp(props: DecafWebappProps) {\n const routes = buildRoutes(props.menuItems, props.routes);\n const router = createBrowserRouter(routes, {\n basename: props.config?.basePath,\n });\n const theme = props.theme ?? decafTheme;\n\n return (\n <ConfigProvider theme={theme}>\n <Global\n styles={{\n body: {\n background: theme.token?.colorBgBase,\n fontFamily: theme.token?.fontFamily,\n },\n button: {\n // antd button has a default box shadow and we can't override it for now\n boxShadow: 'none !important',\n },\n }}\n />\n <DecafApp config={props.config} controller={props.controller}>\n <RouterProvider router={router} />\n </DecafApp>\n </ConfigProvider>\n );\n}\n\nexport { DecafWebapp, Global as GlobalStyle, css, styled };\n"],"names":["routesToAntMenu","routes","result","forEach","route","key","to","label","icon","item","React","createElement","NavLink","end","href","children","push","DecafLayout","props","menuItems","menu","matchedMenuItems","useMatches","map","match","pathname","Layout","style","height","Header","paddingInline","display","justifyContent","alignItems","Link","Typography","Title","level","margin","appName","Menu","backgroundColor","border","mode","items","selectedKeys","Content","padding","decafTheme","hashed","components","colorBgHeader","Button","boxShadow","boxShadowSecondary","token","fontFamily","colorPrimary","colorBgBase","colorBgLayout","borderRadius","colorError","colorSuccess","colorWarning","colorInfo","green","red","blue","yellow","colorWhite","algorithm","theme","darkAlgorithm","buildRoutes","_route$element","_extends","element","Outlet","DecafWebapp","_props$config","_props$theme","_theme$token","_theme$token2","router","createBrowserRouter","basename","config","basePath","ConfigProvider","Global","styles","body","background","button","DecafApp","controller","RouterProvider"],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("@decafhub/decaf-react"),require("antd"),require("react")):"function"==typeof define&&define.amd?define(["@decafhub/decaf-react","antd","react"],r):(e||self).decafReactWebapp=r(e.decafReact,e.antd,e.react)}(this,function(e,r,o){function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=/*#__PURE__*/t(o),c={hashed:!0,token:{colorPrimary:"#344961",colorBgBase:"#10161d",colorBgLayout:"#10161d",borderRadius:0,colorError:"#b03a38",colorSuccess:"#48734d",colorWarning:"#ffc107",colorInfo:"#4694ab",green:"#48734d",red:"#b03a38",blue:"#0d6efd",yellow:"#ffc107",colorWhite:"#fff"},algorithm:[r.theme.darkAlgorithm]};return function(o){var t;return a.default.createElement(e.DecafApp,{config:o.config,controller:o.controller},a.default.createElement(r.ConfigProvider,{theme:null!=(t=o.theme)?t:c},o.children))}});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@decafhub/decaf-react"),require("@emotion/react"),require("@emotion/styled"),require("antd"),require("react"),require("react-router-dom")):"function"==typeof define&&define.amd?define(["exports","@decafhub/decaf-react","@emotion/react","@emotion/styled","antd","react","react-router-dom"],t):t((e||self).decafReactWebapp={},e.decafReact,e.react,e.styled,e.antd,e.react,e.reactRouterDom)}(this,function(e,t,n,o,r,a,l){function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/c(o),u=/*#__PURE__*/c(a);function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},d.apply(this,arguments)}function f(e){var t=[];return e.forEach(function(e){var n={key:"to"in e?e.to:e.label,label:e.label,icon:e.icon};"to"in e?n.label=u.default.createElement(l.NavLink,{to:e.to,end:"/"===e.to},e.label):e.href?n.label=u.default.createElement("a",{href:e.href},e.label):e.children&&(n.label=e.label,n.children=f(e.children||[])),t.push(n)}),t}function s(e){var t=f(e.menu),n=l.useMatches().map(function(e){return e.pathname});return u.default.createElement(r.Layout,{style:{height:"100%"}},u.default.createElement(r.Layout.Header,{style:{paddingInline:0}},u.default.createElement("div",{style:{paddingInline:20,display:"flex",justifyContent:"space-between",alignItems:"center"}},u.default.createElement(l.Link,{to:"/"},u.default.createElement(r.Typography.Title,{level:4,style:{margin:0}},e.appName)),u.default.createElement(r.Menu,{style:{justifyContent:"flex-end",backgroundColor:"transparent",border:"none"},mode:"horizontal",items:t,selectedKeys:n}))),u.default.createElement(r.Layout.Content,{style:{padding:"20px 50px"}},e.children))}var m={hashed:!0,components:{Layout:{colorBgHeader:"#10161d"},Button:{boxShadow:"none",boxShadowSecondary:"none"}},token:{fontFamily:'"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',colorPrimary:"#344961",colorBgBase:"#1a242f",colorBgLayout:"#1a242f",borderRadius:0,colorError:"#b03a38",colorSuccess:"#48734d",colorWarning:"#ffc107",colorInfo:"#4694ab",green:"#48734d",red:"#b03a38",blue:"#0d6efd",yellow:"#ffc107",colorWhite:"#fff"},algorithm:[r.theme.darkAlgorithm]};function b(e,t){var n=[];return t.forEach(function(t){var o,r=d({},t);t.children?(r.element=null!=(o=t.element)?o:u.default.createElement(l.Outlet,null),r.children=b(e,t.children)):r.element=u.default.createElement(s,{menu:e,appName:"Decaf Webapp"},t.element),n.push(r)}),n}Object.defineProperty(e,"GlobalStyle",{enumerable:!0,get:function(){return n.Global}}),Object.defineProperty(e,"css",{enumerable:!0,get:function(){return n.css}}),Object.defineProperty(e,"styled",{enumerable:!0,get:function(){return i.default}}),e.DecafWebapp=function(e){var o,a,c,i,d=b(e.menuItems,e.routes),f=l.createBrowserRouter(d,{basename:null==(o=e.config)?void 0:o.basePath}),s=null!=(a=e.theme)?a:m;return u.default.createElement(r.ConfigProvider,{theme:s},u.default.createElement(n.Global,{styles:{body:{background:null==(c=s.token)?void 0:c.colorBgBase,fontFamily:null==(i=s.token)?void 0:i.fontFamily},button:{boxShadow:"none !important"}}}),u.default.createElement(t.DecafApp,{config:e.config,controller:e.controller},u.default.createElement(l.RouterProvider,{router:f})))}});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/theme.ts","../src/index.tsx"],"sourcesContent":["import { theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\n\nexport const decafTheme: ThemeConfig = {\n hashed: true,\n token: {\n colorPrimary: '#344961',\n colorBgBase: '#10161d',\n colorBgLayout: '#10161d',\n borderRadius: 0,\n colorError: '#b03a38',\n colorSuccess: '#48734d',\n colorWarning: '#ffc107',\n colorInfo: '#4694ab',\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n colorWhite: '#fff',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n","import { DecafAppController, DecafApp, DecafAppConfig } from '@decafhub/decaf-react';\nimport { ConfigProvider } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\nimport React from 'react';\nimport { decafTheme } from 'theme';\n\nexport interface DecafWebappProps {\n config?: DecafAppConfig;\n controller?: DecafAppController;\n theme?: ThemeConfig;\n children: React.ReactNode;\n}\n\nexport default function DecafWebapp(props: DecafWebappProps) {\n return (\n <DecafApp config={props.config} controller={props.controller}>\n <ConfigProvider theme={props.theme ?? decafTheme}>{props.children}</ConfigProvider>\n </DecafApp>\n );\n}\n"],"names":["decafTheme","hashed","token","colorPrimary","colorBgBase","colorBgLayout","borderRadius","colorError","colorSuccess","colorWarning","colorInfo","green","red","blue","yellow","colorWhite","algorithm","theme","darkAlgorithm","props","_props$theme","React","createElement","DecafApp","config","controller","ConfigProvider","children"],"mappings":"6cAGuBA,EAAgB,CACrCC,QAAQ,EACRC,MAAO,CACLC,aAAc,UACdC,YAAa,UACbC,cAAe,UACfC,aAAc,EACdC,WAAY,UACZC,aAAc,UACdC,aAAc,UACdC,UAAW,UACXC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,WAAY,QAGdC,UAAW,CAACC,EAAAA,MAAMC,uBCRI,SAAYC,GAAuB,IAAAC,EACzD,OACEC,EAAA,QAAAC,cAACC,WAAQ,CAACC,OAAQL,EAAMK,OAAQC,WAAYN,EAAMM,YAChDJ,EAAA,QAAAC,cAACI,EAAcA,eAAC,CAAAT,MAAkB,OAAXE,EAAAA,EAAMF,OAAKG,EAAIpB,GAAamB,EAAMQ,UAG/D"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/Layout.tsx","../src/theme.ts","../src/index.tsx"],"sourcesContent":["import { Layout, Menu, Typography } from 'antd';\nimport { ItemType, SubMenuType } from 'antd/es/menu/hooks/useItems';\nimport React from 'react';\nimport { Link, NavLink, useMatches } from 'react-router-dom';\nimport { DecafLayoutProps } from 'types';\nimport { DecafMenuItem } from './types';\n\nexport function routesToAntMenu(routes: DecafMenuItem[]): ItemType[] {\n const result: ItemType[] = [];\n\n routes.forEach((route) => {\n const item: ItemType = {\n key: 'to' in route ? route.to : route.label,\n label: route.label,\n icon: route.icon,\n };\n if ('to' in route) {\n item.label = (\n <NavLink to={route.to} end={route.to === '/'}>\n {route.label}\n </NavLink>\n );\n } else if (route.href) {\n item.label = <a href={route.href}>{route.label}</a>;\n } else if (route.children) {\n item.label = route.label;\n (item as SubMenuType).children = routesToAntMenu(route.children || []);\n }\n result.push(item);\n });\n\n return result;\n}\n\nexport default function DecafLayout(props: DecafLayoutProps) {\n const menuItems = routesToAntMenu(props.menu);\n const matches = useMatches();\n const matchedMenuItems = matches.map((match) => match.pathname);\n\n return (\n <Layout style={{ height: '100%' }}>\n <Layout.Header style={{ paddingInline: 0 }}>\n <div style={{ paddingInline: 20, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Link to=\"/\">\n <Typography.Title level={4} style={{ margin: 0 }}>\n {props.appName}\n </Typography.Title>\n </Link>\n <Menu\n style={{ justifyContent: 'flex-end', backgroundColor: 'transparent', border: 'none' }}\n mode=\"horizontal\"\n items={menuItems}\n selectedKeys={matchedMenuItems}\n />\n </div>\n </Layout.Header>\n <Layout.Content style={{ padding: '20px 50px' }}>{props.children}</Layout.Content>\n {/* <Layout.Footer style={{ textAlign: 'center' }}>Footer</Layout.Footer> */}\n </Layout>\n );\n}\n","import { theme } from 'antd';\nimport { ThemeConfig } from 'antd/es/config-provider/context';\n\nexport const decafTheme: ThemeConfig = {\n hashed: true,\n components: {\n Layout: {\n colorBgHeader: '#10161d',\n },\n Button: {\n boxShadow: 'none',\n boxShadowSecondary: 'none',\n },\n },\n token: {\n fontFamily:\n '\"Inter\",system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"',\n colorPrimary: '#344961',\n colorBgBase: '#1a242f',\n colorBgLayout: '#1a242f',\n borderRadius: 0,\n colorError: '#b03a38',\n colorSuccess: '#48734d',\n colorWarning: '#ffc107',\n colorInfo: '#4694ab',\n green: '#48734d',\n red: '#b03a38',\n blue: '#0d6efd',\n yellow: '#ffc107',\n colorWhite: '#fff',\n },\n\n algorithm: [theme.darkAlgorithm],\n};\n","import { DecafApp } from '@decafhub/decaf-react';\nimport { css, Global } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { ConfigProvider } from 'antd';\nimport DecafLayout from 'Layout';\nimport React from 'react';\nimport { createBrowserRouter, Outlet, RouteObject, RouterProvider } from 'react-router-dom';\nimport { decafTheme } from 'theme';\nimport { DecafMenuItem, DecafRoute, DecafWebappProps } from 'types';\n\nfunction buildRoutes(menuItems: DecafMenuItem[], routes: DecafRoute[]): RouteObject[] {\n const result: RouteObject[] = [];\n\n routes.forEach((route) => {\n const item: RouteObject = { ...route };\n if (route.children) {\n item.element = route.element ?? <Outlet />;\n item.children = buildRoutes(menuItems, route.children);\n } else {\n item.element = (\n <DecafLayout menu={menuItems} appName=\"Decaf Webapp\">\n {route.element}\n </DecafLayout>\n );\n }\n result.push(item);\n });\n\n return result;\n}\n\nfunction DecafWebapp(props: DecafWebappProps) {\n const routes = buildRoutes(props.menuItems, props.routes);\n const router = createBrowserRouter(routes, {\n basename: props.config?.basePath,\n });\n const theme = props.theme ?? decafTheme;\n\n return (\n <ConfigProvider theme={theme}>\n <Global\n styles={{\n body: {\n background: theme.token?.colorBgBase,\n fontFamily: theme.token?.fontFamily,\n },\n button: {\n // antd button has a default box shadow and we can't override it for now\n boxShadow: 'none !important',\n },\n }}\n />\n <DecafApp config={props.config} controller={props.controller}>\n <RouterProvider router={router} />\n </DecafApp>\n </ConfigProvider>\n );\n}\n\nexport { DecafWebapp, Global as GlobalStyle, css, styled };\n"],"names":["routesToAntMenu","routes","result","forEach","route","key","to","label","icon","item","React","createElement","NavLink","end","href","children","push","DecafLayout","props","menuItems","menu","matchedMenuItems","useMatches","map","match","pathname","Layout","style","height","Header","paddingInline","display","justifyContent","alignItems","Link","Typography","Title","level","margin","appName","Menu","backgroundColor","border","mode","items","selectedKeys","Content","padding","decafTheme","hashed","components","colorBgHeader","Button","boxShadow","boxShadowSecondary","token","fontFamily","colorPrimary","colorBgBase","colorBgLayout","borderRadius","colorError","colorSuccess","colorWarning","colorInfo","green","red","blue","yellow","colorWhite","algorithm","theme","darkAlgorithm","buildRoutes","_route$element","_extends","element","Outlet","_props$config","_props$theme","_theme$token","_theme$token2","router","createBrowserRouter","basename","config","basePath","ConfigProvider","Global","styles","body","background","button","DecafApp","controller","RouterProvider"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,eAAO,MAAM,UAAU,EAAE,WAmBxB,CAAC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,eAAO,MAAM,UAAU,EAAE,WA8BxB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /// <reference types="react" />
2
+ import { DecafAppConfig, DecafAppController } from '@decafhub/decaf-react';
3
+ import { ThemeConfig } from 'antd/es/config-provider/context';
4
+ import { RouteObject } from 'react-router-dom';
5
+ export type DecafRoute = RouteObject;
6
+ export interface DecafWebappProps {
7
+ config?: DecafAppConfig;
8
+ controller?: DecafAppController;
9
+ theme?: ThemeConfig;
10
+ routes: DecafRoute[];
11
+ menuItems: DecafMenuItem[];
12
+ appName: string;
13
+ }
14
+ interface BaseDecafMenuItem {
15
+ label: any;
16
+ key: string;
17
+ icon?: React.ReactNode;
18
+ children?: DecafMenuItem[];
19
+ }
20
+ export type DecafMenuItem = BaseDecafMenuItem & ({
21
+ to: string;
22
+ } | {
23
+ href: string;
24
+ });
25
+ export interface DecafLayoutProps {
26
+ menu: DecafMenuItem[];
27
+ appName: string;
28
+ children: React.ReactNode;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,GAAG,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decafhub/decaf-react-webapp",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "keywords": [
5
5
  "decafhub",
6
6
  "react"
@@ -33,14 +33,20 @@
33
33
  "node": ">=16"
34
34
  },
35
35
  "peerDependencies": {
36
+ "@ant-design/icons": "^4.8.0",
36
37
  "@decafhub/decaf-client": "^0.3",
37
38
  "@decafhub/decaf-react": "^0.1",
38
39
  "antd": "^5.0.0",
39
40
  "react": "^17.0.0 || ^18.0.0",
40
- "react-dom": "^17.0.0 || ^18.0.0"
41
+ "react-dom": "^17.0.0 || ^18.0.0",
42
+ "react-router-dom": "^6.0.0"
43
+ },
44
+ "dependencies": {
45
+ "@emotion/react": "^11.10.5",
46
+ "@emotion/styled": "^11.10.5"
41
47
  },
42
- "dependencies": {},
43
48
  "devDependencies": {
49
+ "@ant-design/icons": "^4.8.0",
44
50
  "@commitlint/cli": "^17.3.0",
45
51
  "@commitlint/config-conventional": "^17.3.0",
46
52
  "@decafhub/decaf-client": "^0.3.1",
@@ -77,6 +83,7 @@
77
83
  "prettier": "^2.8.0",
78
84
  "react": "^18.2.0",
79
85
  "react-dom": "^18.2.0",
86
+ "react-router-dom": "^6.4.3",
80
87
  "ts-jest": "^29.0.3",
81
88
  "typedoc": "^0.23.21",
82
89
  "typescript": "^4.9.3"