@operato/shell 2.0.0-alpha.8 → 2.0.0-alpha.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/demo/index.html +14 -3
  3. package/dist/src/actions/busy.js.map +1 -1
  4. package/dist/src/actions/route.d.ts +3 -3
  5. package/dist/src/actions/route.js +5 -5
  6. package/dist/src/actions/route.js.map +1 -1
  7. package/dist/src/app/app-style.js +12 -4
  8. package/dist/src/app/app-style.js.map +1 -1
  9. package/dist/src/app/app.d.ts +10 -5
  10. package/dist/src/app/app.js +27 -15
  11. package/dist/src/app/app.js.map +1 -1
  12. package/dist/src/app/pages/page-404.d.ts +1 -1
  13. package/dist/src/app/pages/page-404.js +5 -5
  14. package/dist/src/app/pages/page-404.js.map +1 -1
  15. package/dist/src/custom-alert.d.ts +23 -0
  16. package/dist/src/custom-alert.js +26 -0
  17. package/dist/src/custom-alert.js.map +1 -0
  18. package/dist/src/entries/public/home.d.ts +2 -3
  19. package/dist/src/entries/public/home.js +17 -16
  20. package/dist/src/entries/public/home.js.map +1 -1
  21. package/dist/src/index.d.ts +1 -0
  22. package/dist/src/index.js +1 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/store.js +8 -0
  25. package/dist/src/store.js.map +1 -1
  26. package/dist/stories/app.stories.d.ts +22 -0
  27. package/dist/stories/app.stories.js +38 -0
  28. package/dist/stories/app.stories.js.map +1 -0
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +19 -19
  31. package/src/actions/busy.ts +1 -1
  32. package/src/actions/route.ts +5 -5
  33. package/src/app/app-style.ts +12 -4
  34. package/src/app/app.ts +49 -16
  35. package/src/app/pages/page-404.ts +5 -5
  36. package/src/custom-alert.ts +43 -0
  37. package/src/entries/public/home.ts +17 -16
  38. package/src/index.ts +1 -0
  39. package/src/store.ts +9 -0
  40. package/stories/app.stories.ts +51 -0
  41. package/themes/app-theme.css +145 -0
  42. package/yarn-error.log +4 -5
package/CHANGELOG.md CHANGED
@@ -3,6 +3,157 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [2.0.0-alpha.80](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.79...v2.0.0-alpha.80) (2024-04-15)
7
+
8
+ **Note:** Version bump only for package @operato/shell
9
+
10
+
11
+
12
+
13
+
14
+ ## [2.0.0-alpha.77](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.76...v2.0.0-alpha.77) (2024-04-14)
15
+
16
+
17
+ ### :bug: Bug Fix
18
+
19
+ * add @webcomponents/scoped-custom-element-registry for storybook ([1f4264b](https://github.com/hatiolab/operato/commit/1f4264bd8384d8256437dfc838d22d64ec9a452d))
20
+
21
+
22
+
23
+ ## [2.0.0-alpha.68](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.67...v2.0.0-alpha.68) (2024-04-13)
24
+
25
+
26
+ ### :bug: Bug Fix
27
+
28
+ * mwc=>md for context ([2bc13f2](https://github.com/hatiolab/operato/commit/2bc13f285f257782f73e5d7b5d1ddd197df85393))
29
+
30
+
31
+
32
+ ## [2.0.0-alpha.63](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.62...v2.0.0-alpha.63) (2024-04-12)
33
+
34
+
35
+ ### :bug: Bug Fix
36
+
37
+ * escape page deactivation fault ([7c16838](https://github.com/hatiolab/operato/commit/7c16838a84a59780c53b6ad6f3e6f4a5d36ecfeb))
38
+
39
+
40
+
41
+ ## [2.0.0-alpha.62](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.61...v2.0.0-alpha.62) (2024-04-12)
42
+
43
+ **Note:** Version bump only for package @operato/shell
44
+
45
+
46
+
47
+
48
+
49
+ ## [2.0.0-alpha.57](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.56...v2.0.0-alpha.57) (2024-04-07)
50
+
51
+ **Note:** Version bump only for package @operato/shell
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+ **Note:** Version bump only for package @operato/shell
60
+
61
+
62
+
63
+
64
+
65
+ ## [2.0.0-alpha.52](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.51...v2.0.0-alpha.52) (2024-03-29)
66
+
67
+
68
+ ### :bug: Bug Fix
69
+
70
+ * custom-alert in @operato/shell ([e628af8](https://github.com/hatiolab/operato/commit/e628af8d923de49960bfbcd04452b428105c0bc8))
71
+ * renovation CustomAlert ([757f04f](https://github.com/hatiolab/operato/commit/757f04f44bdb50e087ecacdbf217f3d3b20e922c))
72
+
73
+
74
+
75
+ ## [2.0.0-alpha.51](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.50...v2.0.0-alpha.51) (2024-03-29)
76
+
77
+
78
+ ### :bug: Bug Fix
79
+
80
+ * upgrade lit ([e661c33](https://github.com/hatiolab/operato/commit/e661c333d2bb97f784b5ac2c0e365714ee5e80ff))
81
+
82
+
83
+
84
+ ## [2.0.0-alpha.47](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.46...v2.0.0-alpha.47) (2024-03-27)
85
+
86
+
87
+ ### :bug: Bug Fix
88
+
89
+ * storybook 실행 환경 ([6a2940f](https://github.com/hatiolab/operato/commit/6a2940fb89dc26566acdce7cf1781a71cbad61c5))
90
+
91
+
92
+
93
+ ## [2.0.0-alpha.46](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.45...v2.0.0-alpha.46) (2024-03-26)
94
+
95
+
96
+ ### :bug: Bug Fix
97
+
98
+ * modules change가 두번 발생하는 문제 ([b2e621a](https://github.com/hatiolab/operato/commit/b2e621a0b94c5e2feccf840cd73444bc9a87af73))
99
+
100
+
101
+
102
+ ## [2.0.0-alpha.43](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.42...v2.0.0-alpha.43) (2024-03-24)
103
+
104
+
105
+ ### :rocket: New Features
106
+
107
+ * 모듈의 동적 라우팅 구성을 지원함 ([3b812a4](https://github.com/hatiolab/operato/commit/3b812a460e81b3ce7c8da8900a6378aff1484444))
108
+
109
+
110
+
111
+ ## [2.0.0-alpha.37](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.36...v2.0.0-alpha.37) (2024-03-18)
112
+
113
+
114
+ ### :bug: Bug Fix
115
+
116
+ * add module.bootstrap() definition ([68fc95c](https://github.com/hatiolab/operato/commit/68fc95cfa86d9fd6e315e4a75361c283533aee7a))
117
+ * add module.route() definition ([9b069f5](https://github.com/hatiolab/operato/commit/9b069f5ff08e5e58a7b0a34ecfd202407ff21494))
118
+
119
+
120
+
121
+ ## [2.0.0-alpha.35](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.34...v2.0.0-alpha.35) (2024-03-13)
122
+
123
+ **Note:** Version bump only for package @operato/shell
124
+
125
+
126
+
127
+
128
+
129
+ ## [2.0.0-alpha.28](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.27...v2.0.0-alpha.28) (2024-02-20)
130
+
131
+
132
+ ### :bug: Bug Fix
133
+
134
+ * upgrade devDependencies for webcomponents ([1489b8b](https://github.com/hatiolab/operato/commit/1489b8b790d9bcee779a070a630697f25c01728f))
135
+
136
+
137
+
138
+ ## [2.0.0-alpha.21](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.20...v2.0.0-alpha.21) (2024-02-09)
139
+
140
+
141
+ ### :bug: Bug Fix
142
+
143
+ * delete unused ([e623ae4](https://github.com/hatiolab/operato/commit/e623ae42aef83ee130c9c681b5f95bc324ba16e7))
144
+ * print-friendly ([e9a3eba](https://github.com/hatiolab/operato/commit/e9a3eba4550772e5d0bd0cbce31c5740568a2459))
145
+
146
+
147
+
148
+ ## [2.0.0-alpha.17](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.16...v2.0.0-alpha.17) (2024-02-04)
149
+
150
+
151
+ ### :bug: Bug Fix
152
+
153
+ * styling for printing ([c8557a6](https://github.com/hatiolab/operato/commit/c8557a69880bafe5a6a152b07b367946e584c6fb))
154
+
155
+
156
+
6
157
  ## [2.0.0-alpha.8](https://github.com/hatiolab/operato/compare/v2.0.0-alpha.7...v2.0.0-alpha.8) (2024-01-20)
7
158
 
8
159
 
package/demo/index.html CHANGED
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html lang="en-GB">
3
3
  <head>
4
4
  <meta charset="utf-8" />
@@ -16,14 +16,25 @@
16
16
  }
17
17
  </style>
18
18
  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet" />
19
- <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
19
+ <link
20
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
21
+ rel="stylesheet"
22
+ />
23
+ <link
24
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
25
+ rel="stylesheet"
26
+ />
27
+ <link
28
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
29
+ rel="stylesheet"
30
+ />
20
31
  </head>
21
32
  <body>
22
33
  <div id="demo"></div>
23
34
 
24
35
  <script type="module">
25
36
  import { html, render } from 'lit'
26
- import '@material/mwc-icon'
37
+ import '@material/web/icon/icon.js'
27
38
 
28
39
  const parent = document.querySelector('#demo')
29
40
 
@@ -1 +1 @@
1
- {"version":3,"file":"busy.js","sourceRoot":"","sources":["../../../src/actions/busy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AAExC,+BAA+B,CAAC,CAAC,KAAa,EAAE,EAAE;IAChD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAQ,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,QAAa,EAAE,EAAE;IAC7D,QAAQ,CAAC;QACP,IAAI,EAAE,WAAW;QACjB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC,CAAA","sourcesContent":["import { setActiveRequestCounterCallback } from '@operato/graphql'\nimport { store } from '../store'\n\nexport const UPDATE_BUSY = 'UPDATE_BUSY'\n\nsetActiveRequestCounterCallback((count: number) => {\n store.dispatch(updateBusy(count != 0) as any)\n})\n\nexport const updateBusy = (busy: boolean) => (dispatch: any) => {\n dispatch({\n type: UPDATE_BUSY,\n busy\n })\n}\n"]}
1
+ {"version":3,"file":"busy.js","sourceRoot":"","sources":["../../../src/actions/busy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAG,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AAExC,+BAA+B,CAAC,CAAC,KAAa,EAAE,EAAE;IAChD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAQ,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,QAAa,EAAE,EAAE;IAC7D,QAAQ,CAAC;QACP,IAAI,EAAE,WAAW;QACjB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC,CAAA","sourcesContent":["import { setActiveRequestCounterCallback } from '@operato/graphql'\nimport { store } from '../store'\n\nexport const UPDATE_BUSY = 'UPDATE_BUSY'\n\nsetActiveRequestCounterCallback((count: number) => {\n store.dispatch(updateBusy(count != 0) as any)\n})\n\nexport const updateBusy = (busy: boolean) => (dispatch: any) => {\n dispatch({\n type: UPDATE_BUSY,\n busy\n })\n}\n"]}
@@ -20,10 +20,10 @@ export declare const navigate: (location: string, replace?: boolean) => void;
20
20
  */
21
21
  export declare const navigateWithSilence: ({ pathname: path, search, params }: {
22
22
  pathname: string;
23
- search?: string | undefined;
23
+ search?: string;
24
24
  params?: {
25
25
  [key: string]: any;
26
- } | undefined;
26
+ };
27
27
  }) => (dispatch: any) => void;
28
28
  /**
29
29
  * Load a page by dispatching a Redux action, and handle page navigation if necessary.
@@ -34,7 +34,7 @@ export declare const navigateWithSilence: ({ pathname: path, search, params }: {
34
34
  */
35
35
  export declare const loadPage: (page: string, id: string, params: {
36
36
  [key: string]: any;
37
- }) => (dispatch: any) => void;
37
+ }) => (dispatch: any) => Promise<void>;
38
38
  /**
39
39
  * Route to a given URL by creating a link element and triggering a click event.
40
40
  *
@@ -50,7 +50,7 @@ export const navigateWithSilence = ({ pathname: path, search, params }) => (disp
50
50
  * @param page - The page to preload.
51
51
  * @returns - The new page path or routing result after preprocessing.
52
52
  */
53
- const _preLoadPage = (page) => {
53
+ const _preLoadPage = async (page) => {
54
54
  /*
55
55
  * _preLoadPage 에서는 page를 load하기 전처리를 수행한다.
56
56
  * 예를 들면, page dynamic import 또는 page re-routing
@@ -60,8 +60,8 @@ const _preLoadPage = (page) => {
60
60
  var modules = state.app.modules;
61
61
  if (modules) {
62
62
  for (let i = modules.length - 1; i >= 0; i--) {
63
- let factoryModule = modules[i];
64
- let _page = factoryModule.route && factoryModule.route(page);
63
+ let module = modules[i];
64
+ let _page = module.route && (await module.route(page, module));
65
65
  if (_page) {
66
66
  return _page;
67
67
  }
@@ -75,8 +75,8 @@ const _preLoadPage = (page) => {
75
75
  * @param id - The associated resource ID.
76
76
  * @param params - Additional parameters to pass to the page.
77
77
  */
78
- export const loadPage = (page, id, params) => (dispatch) => {
79
- var newPage = _preLoadPage(page);
78
+ export const loadPage = (page, id, params) => async (dispatch) => {
79
+ var newPage = await _preLoadPage(page);
80
80
  if (page !== newPage && newPage.indexOf('/') == 0) {
81
81
  dispatch(navigateWithSilence({
82
82
  pathname: id ? `${newPage}/${id}` : newPage,
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/actions/route.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPathInfo } from '@operato/utils'\n\nimport { HOMEPAGE, UPDATE_PAGE } from '../actions/const'\nimport { store } from '../store'\n\n/**\n * Navigate to a page using one of two methods:\n * 1. Using a page link: <a href='page'>goto page</a> (equivalent to route(page))\n * 2. Using the navigate('page') function.\n *\n * 페이지를 이동하는 방법으로는 다음 두가지가 있다.\n * 1. page link를 사용하는 방법 <a href='page'>goto page</a>\n * 이 방법은 route(page)와 동일하다.\n * 2. navigate('page')를 사용하는 방법\n *\n * @param location - The path of the page to navigate to.\n * @param replace - Optional. If true, replaces the current page in the browser's history.\n */\nexport const navigate = (location: string, replace?: boolean) => {\n if (replace) history.replaceState(history.state, '', location)\n else history.pushState({}, '', location)\n\n window.dispatchEvent(new Event('popstate'))\n}\n\n/**\n * Navigate to a page with optional query parameters, and dispatch a Redux action to load the page.\n *\n * @param pathInfo - Object containing pathname, search, and optional params.\n * @param dispatch - Redux dispatch function.\n */\nexport const navigateWithSilence =\n ({ pathname: path, search, params }: { pathname: string; search?: string; params?: { [key: string]: any } }) =>\n (dispatch: any) => {\n const { path: pathname } = getPathInfo(path)\n\n const reg = /\\/([^\\/]+)\\/*([^\\/]*)/\n const decodePath = decodeURIComponent(pathname!)\n const matchReturn = decodePath.match(reg) || []\n const page = matchReturn[1] || HOMEPAGE\n const id = matchReturn[2]\n\n if (!params) {\n params = {}\n\n new URLSearchParams(search).forEach((value, key) => {\n params![key] = value\n })\n }\n\n // Any other info you might want to extract from the path (like page type),\n // you can do here\n dispatch(loadPage(page, id, params))\n }\n\n/**\n * Preload a page by performing any necessary preprocessing before loading.\n *\n * @param page - The page to preload.\n * @returns - The new page path or routing result after preprocessing.\n */\nconst _preLoadPage = (page: any) => {\n /*\n * _preLoadPage 에서는 page를 load하기 전처리를 수행한다.\n * 예를 들면, page dynamic import 또는 page re-routing\n */\n var state: any = store.getState()\n\n /* override 기능을 위해서 dependency 관계의 역순으로 route를 실행한다. */\n var modules = state.app.modules\n if (modules) {\n for (let i = modules.length - 1; i >= 0; i--) {\n let factoryModule = modules[i]\n let _page = factoryModule.route && factoryModule.route(page)\n if (_page) {\n return _page\n }\n }\n }\n}\n\n/**\n * Load a page by dispatching a Redux action, and handle page navigation if necessary.\n *\n * @param page - The page to load.\n * @param id - The associated resource ID.\n * @param params - Additional parameters to pass to the page.\n */\nexport const loadPage = (page: string, id: string, params: { [key: string]: any }) => (dispatch: any) => {\n var newPage = _preLoadPage(page)\n\n if (page !== newPage && newPage.indexOf('/') == 0) {\n dispatch(\n navigateWithSilence({\n pathname: id ? `${newPage}/${id}` : newPage,\n params\n })\n )\n return\n }\n\n dispatch({\n type: UPDATE_PAGE,\n page: newPage,\n resourceId: id,\n params\n })\n}\n\n/**\n * Route to a given URL by creating a link element and triggering a click event.\n *\n * @param url - The URL to route to.\n */\nexport const route = (url: string) => {\n const link = document.createElement('a')\n\n link.setAttribute('href', url)\n\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n"]}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/actions/route.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPathInfo } from '@operato/utils'\n\nimport { HOMEPAGE, UPDATE_PAGE } from '../actions/const'\nimport { store } from '../store'\n\n/**\n * Navigate to a page using one of two methods:\n * 1. Using a page link: <a href='page'>goto page</a> (equivalent to route(page))\n * 2. Using the navigate('page') function.\n *\n * 페이지를 이동하는 방법으로는 다음 두가지가 있다.\n * 1. page link를 사용하는 방법 <a href='page'>goto page</a>\n * 이 방법은 route(page)와 동일하다.\n * 2. navigate('page')를 사용하는 방법\n *\n * @param location - The path of the page to navigate to.\n * @param replace - Optional. If true, replaces the current page in the browser's history.\n */\nexport const navigate = (location: string, replace?: boolean) => {\n if (replace) history.replaceState(history.state, '', location)\n else history.pushState({}, '', location)\n\n window.dispatchEvent(new Event('popstate'))\n}\n\n/**\n * Navigate to a page with optional query parameters, and dispatch a Redux action to load the page.\n *\n * @param pathInfo - Object containing pathname, search, and optional params.\n * @param dispatch - Redux dispatch function.\n */\nexport const navigateWithSilence =\n ({ pathname: path, search, params }: { pathname: string; search?: string; params?: { [key: string]: any } }) =>\n (dispatch: any) => {\n const { path: pathname } = getPathInfo(path)\n\n const reg = /\\/([^\\/]+)\\/*([^\\/]*)/\n const decodePath = decodeURIComponent(pathname!)\n const matchReturn = decodePath.match(reg) || []\n const page = matchReturn[1] || HOMEPAGE\n const id = matchReturn[2]\n\n if (!params) {\n params = {}\n\n new URLSearchParams(search).forEach((value, key) => {\n params![key] = value\n })\n }\n\n // Any other info you might want to extract from the path (like page type),\n // you can do here\n dispatch(loadPage(page, id, params))\n }\n\n/**\n * Preload a page by performing any necessary preprocessing before loading.\n *\n * @param page - The page to preload.\n * @returns - The new page path or routing result after preprocessing.\n */\nconst _preLoadPage = async (page: any) => {\n /*\n * _preLoadPage 에서는 page를 load하기 전처리를 수행한다.\n * 예를 들면, page dynamic import 또는 page re-routing\n */\n var state: any = store.getState()\n\n /* override 기능을 위해서 dependency 관계의 역순으로 route를 실행한다. */\n var modules = state.app.modules\n if (modules) {\n for (let i = modules.length - 1; i >= 0; i--) {\n let module = modules[i]\n let _page = module.route && (await module.route(page, module))\n if (_page) {\n return _page\n }\n }\n }\n}\n\n/**\n * Load a page by dispatching a Redux action, and handle page navigation if necessary.\n *\n * @param page - The page to load.\n * @param id - The associated resource ID.\n * @param params - Additional parameters to pass to the page.\n */\nexport const loadPage = (page: string, id: string, params: { [key: string]: any }) => async (dispatch: any) => {\n var newPage = await _preLoadPage(page)\n\n if (page !== newPage && newPage.indexOf('/') == 0) {\n dispatch(\n navigateWithSilence({\n pathname: id ? `${newPage}/${id}` : newPage,\n params\n })\n )\n return\n }\n\n dispatch({\n type: UPDATE_PAGE,\n page: newPage,\n resourceId: id,\n params\n })\n}\n\n/**\n * Route to a given URL by creating a link element and triggering a click event.\n *\n * @param url - The URL to route to.\n */\nexport const route = (url: string) => {\n const link = document.createElement('a')\n\n link.setAttribute('href', url)\n\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n"]}
@@ -62,16 +62,24 @@ export const AppStyle = css `
62
62
  z-index: 1000;
63
63
  }
64
64
 
65
- /* Wide layout */
66
- @media (min-width: 460px) {
67
- }
68
-
69
65
  @media print {
70
66
  :host {
71
67
  width: 100%;
72
68
  height: 100%;
73
69
  min-height: 100vh;
74
70
  min-height: 100dvh;
71
+
72
+ max-width: unset;
73
+ width: unset;
74
+ height: unset;
75
+ height: unset;
76
+ }
77
+
78
+ main {
79
+ /* important for printing!!! */
80
+ display: block;
81
+ flex: unset;
82
+ overflow: visible;
75
83
  }
76
84
 
77
85
  ox-page-header-bar {
@@ -1 +1 @@
1
- {"version":3,"file":"app-style.js","sourceRoot":"","sources":["../../../src/app/app-style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuG1B,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport const AppStyle = css`\n :host {\n display: grid;\n\n grid-template-rows: var(--app-grid-template-rows, auto 1fr auto);\n grid-template-columns: var(--app-grid-template-columns, auto 1fr auto);\n grid-template-areas: var(--app-grid-template-area, 'header header header' 'nav main aside' 'nav footer aside');\n grid-gap: var(--app-grid-gap, 0em);\n\n max-width: 100vw;\n width: 100vw;\n height: 100vh;\n height: 100dvh;\n }\n\n ox-header-bar {\n grid-area: header;\n }\n\n ox-nav-bar {\n grid-area: nav;\n }\n\n div {\n grid-area: main;\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n main {\n flex: 1;\n\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n ox-aside-bar {\n grid-area: aside;\n }\n\n ox-footer-bar {\n grid-area: footer;\n }\n\n main > * {\n flex: 1;\n }\n\n main > *:not([active]) {\n display: none;\n }\n\n [hidden] {\n display: none;\n }\n\n ox-snack-bar {\n z-index: 1000;\n }\n\n /* Wide layout */\n @media (min-width: 460px) {\n }\n\n @media print {\n :host {\n width: 100%;\n height: 100%;\n min-height: 100vh;\n min-height: 100dvh;\n }\n\n ox-page-header-bar {\n display: none;\n }\n\n ox-page-footer-bar {\n display: none;\n }\n\n ox-header-bar {\n display: none;\n }\n\n ox-nav-bar {\n display: none;\n }\n\n ox-aside-bar {\n display: none;\n }\n\n ox-footer-bar {\n display: none;\n }\n\n ox-snack-bar {\n display: none;\n }\n }\n`\n"]}
1
+ {"version":3,"file":"app-style.js","sourceRoot":"","sources":["../../../src/app/app-style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+G1B,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport const AppStyle = css`\n :host {\n display: grid;\n\n grid-template-rows: var(--app-grid-template-rows, auto 1fr auto);\n grid-template-columns: var(--app-grid-template-columns, auto 1fr auto);\n grid-template-areas: var(--app-grid-template-area, 'header header header' 'nav main aside' 'nav footer aside');\n grid-gap: var(--app-grid-gap, 0em);\n\n max-width: 100vw;\n width: 100vw;\n height: 100vh;\n height: 100dvh;\n }\n\n ox-header-bar {\n grid-area: header;\n }\n\n ox-nav-bar {\n grid-area: nav;\n }\n\n div {\n grid-area: main;\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n main {\n flex: 1;\n\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n ox-aside-bar {\n grid-area: aside;\n }\n\n ox-footer-bar {\n grid-area: footer;\n }\n\n main > * {\n flex: 1;\n }\n\n main > *:not([active]) {\n display: none;\n }\n\n [hidden] {\n display: none;\n }\n\n ox-snack-bar {\n z-index: 1000;\n }\n\n @media print {\n :host {\n width: 100%;\n height: 100%;\n min-height: 100vh;\n min-height: 100dvh;\n\n max-width: unset;\n width: unset;\n height: unset;\n height: unset;\n }\n\n main {\n /* important for printing!!! */\n display: block;\n flex: unset;\n overflow: visible;\n }\n\n ox-page-header-bar {\n display: none;\n }\n\n ox-page-footer-bar {\n display: none;\n }\n\n ox-header-bar {\n display: none;\n }\n\n ox-nav-bar {\n display: none;\n }\n\n ox-aside-bar {\n display: none;\n }\n\n ox-footer-bar {\n display: none;\n }\n\n ox-snack-bar {\n display: none;\n }\n }\n`\n"]}
@@ -16,9 +16,14 @@ export declare class ThingsApp extends ThingsApp_base {
16
16
  static styles: import("lit").CSSResult[];
17
17
  static moduleInitialized: MODULES_STATE;
18
18
  static modules: Array<any>;
19
- static pages: {
19
+ static pagesResolver: (value: {
20
20
  [path: string]: string;
21
- };
21
+ } | PromiseLike<{
22
+ [path: string]: string;
23
+ }>) => void;
24
+ static pages: Promise<{
25
+ [path: string]: string;
26
+ }>;
22
27
  static callbacks: Array<any>;
23
28
  static contextPath?: string;
24
29
  contextPathPrefix?: string;
@@ -30,14 +35,14 @@ export declare class ThingsApp extends ThingsApp_base {
30
35
  contextPath?: string;
31
36
  modules: Array<any>;
32
37
  private main;
33
- render(): import("lit").TemplateResult<1>;
38
+ render(): import("lit-html").TemplateResult<1>;
34
39
  connectedCallback(): void;
35
40
  disconnectedCallback(): void;
36
- routeToPage(): void;
41
+ routeToPage(): Promise<void>;
37
42
  updated(changes: PropertyValues<this>): Promise<void>;
38
43
  shouldUpdate(): boolean;
39
44
  stateChanged(state: any): void;
40
- static registerPages(): void;
45
+ static registerPages(): Promise<void>;
41
46
  setBase(): void;
42
47
  }
43
48
  export {};
@@ -62,7 +62,7 @@ let ThingsApp = ThingsApp_1 = class ThingsApp extends connect(store)(LitElement)
62
62
  /* lifecycle - bootstrapping */
63
63
  modules.forEach(async (m, idx) => {
64
64
  try {
65
- m.bootstrap && (await m.bootstrap());
65
+ m.bootstrap && (await m.bootstrap(m));
66
66
  }
67
67
  catch (e) {
68
68
  console.error(`[${idx} BOOTSTRAP ERROR -${m.name}]`, e);
@@ -80,7 +80,11 @@ let ThingsApp = ThingsApp_1 = class ThingsApp extends connect(store)(LitElement)
80
80
  var { pathname } = location;
81
81
  var { contextPath } = getPathInfo(pathname);
82
82
  /* 페이지를 나가기 전에 옮기지 않도록 개입할 기회를 준다 */
83
- if (lastPathName && lastPathName != pathname && this.activePage && !(await this.activePage.canDeactivate())) {
83
+ if (lastPathName &&
84
+ lastPathName != pathname &&
85
+ this.activePage &&
86
+ this.activePage.canDeactivate &&
87
+ !(await this.activePage.canDeactivate())) {
84
88
  history.back();
85
89
  return;
86
90
  }
@@ -107,7 +111,7 @@ let ThingsApp = ThingsApp_1 = class ThingsApp extends connect(store)(LitElement)
107
111
  disconnectedCallback() {
108
112
  super.disconnectedCallback();
109
113
  }
110
- routeToPage() {
114
+ async routeToPage() {
111
115
  const activePages = this.renderRoot.querySelectorAll('main > .page[active]');
112
116
  activePages.forEach(page => {
113
117
  page.removeAttribute('active');
@@ -115,7 +119,7 @@ let ThingsApp = ThingsApp_1 = class ThingsApp extends connect(store)(LitElement)
115
119
  this.activePage = this.renderRoot.querySelector(`main > .page[data-page=${this.page}]`);
116
120
  if (!this.activePage) {
117
121
  /* 해당 route에 연결된 page가 없는 경우에 main 섹션에 해당 element를 추가해준다. */
118
- const tagname = ThingsApp_1.pages[this.page];
122
+ const tagname = (await ThingsApp_1.pages)[this.page];
119
123
  if (tagname) {
120
124
  const el = document.createElement(tagname);
121
125
  el.setAttribute('class', 'page');
@@ -166,18 +170,27 @@ let ThingsApp = ThingsApp_1 = class ThingsApp extends connect(store)(LitElement)
166
170
  ThingsApp_1.contextPath = this.contextPath = state.app.contextPath;
167
171
  ThingsApp_1.callbacks = state.route.callbacks;
168
172
  }
169
- static registerPages() {
173
+ static async registerPages() {
174
+ ThingsApp_1.pages = new Promise(resolve => (ThingsApp_1.pagesResolver = resolve));
170
175
  var reversedModules = [...ThingsApp_1.modules].reverse();
171
- ThingsApp_1.pages = {};
176
+ const pages = {};
172
177
  /* 모듈 참조 순서 역순으로 page를 추가한다. (for overidable) */
173
- reversedModules.forEach(m => {
174
- m.routes &&
175
- m.routes.forEach((route) => {
176
- if (!ThingsApp_1.pages[route.page]) {
177
- ThingsApp_1.pages[route.page] = route.tagname;
178
- }
179
- });
180
- });
178
+ for (const m of reversedModules) {
179
+ if (!m.routes) {
180
+ continue;
181
+ }
182
+ /*
183
+ 각 모듈의 routes가 모두 완성될 때까지 ThingsApp.pages 구성을 지연한다.
184
+ 각 모듈의 routes를 동적으로도 구성할 수 있도록 하기 위해서이다.
185
+ */
186
+ const routes = await m.routes;
187
+ routes.forEach((route) => {
188
+ if (!pages[route.page]) {
189
+ pages[route.page] = route.tagname;
190
+ }
191
+ });
192
+ }
193
+ ThingsApp_1.pagesResolver(pages);
181
194
  }
182
195
  setBase() {
183
196
  const base = document.querySelector('base');
@@ -187,7 +200,6 @@ let ThingsApp = ThingsApp_1 = class ThingsApp extends connect(store)(LitElement)
187
200
  ThingsApp.styles = [ScrollbarStyles, AppStyle];
188
201
  ThingsApp.moduleInitialized = MODULES_STATE.NOT_INITIALIZED;
189
202
  ThingsApp.modules = [];
190
- ThingsApp.pages = {};
191
203
  ThingsApp.callbacks = [];
192
204
  __decorate([
193
205
  property({ type: String, attribute: 'context-path-prefix' })
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/app/app.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport { installRouter } from 'pwa-helpers/router.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { setContextPathPrefix, getPathInfo } from '@operato/utils'\n\nimport { navigateWithSilence, UPDATE_ACTIVE_PAGE, UPDATE_CONTEXT_PATH, UPDATE_MODULES } from '../actions'\nimport { store } from '../store'\nimport { AppStyle } from './app-style'\nimport { PageView } from './pages/page-view'\n\nenum MODULES_STATE {\n NOT_INITIALIZED,\n INITIALIZING,\n INITIALIZED\n}\n\n@customElement('things-app')\nexport class ThingsApp extends connect(store)(LitElement) {\n static styles = [ScrollbarStyles, AppStyle]\n\n static moduleInitialized: MODULES_STATE = MODULES_STATE.NOT_INITIALIZED\n static modules: Array<any> = []\n static pages: { [path: string]: string } = {}\n static callbacks: Array<any> = []\n static contextPath?: string\n\n @property({ type: String, attribute: 'context-path-prefix' }) contextPathPrefix?: string\n\n @state() resourceId?: string\n @state() page?: string\n @state() params?: any\n @state() activePage?: PageView\n @state() context: any\n @state() contextPath?: string = ThingsApp.contextPath\n @state() modules: Array<any> = ThingsApp.modules\n\n @query('main') private main!: HTMLElement\n\n render() {\n var params = this.params || {}\n var fullbleed = (this.context && this.context.fullbleed) || (params.fullbleed && params.fullbleed == 'Y')\n var widebleed = (this.context && this.context.widebleed) || (params.widebleed && params.widebleed == 'Y')\n\n return html`\n <div>\n <ox-page-header-bar header></ox-page-header-bar>\n <main></main>\n <ox-page-footer-bar footer></ox-page-footer-bar>\n </div>\n\n <ox-header-bar ?fullbleed=${fullbleed}></ox-header-bar>\n\n <ox-nav-bar ?fullbleed=${fullbleed || widebleed}></ox-nav-bar>\n\n <ox-aside-bar ?fullbleed=${fullbleed || widebleed}></ox-aside-bar>\n\n <ox-footer-bar ?fullbleed=${fullbleed}></ox-footer-bar>\n\n <ox-snack-bar></ox-snack-bar>\n `\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n this.setBase()\n\n if (ThingsApp.moduleInitialized != MODULES_STATE.NOT_INITIALIZED) {\n /* 첫번째 이후로 생성되는 경우에는 강제로 'popstate'를 발생시켜서, routing 기회를 준다 */\n window.dispatchEvent(new CustomEvent('popstate'))\n\n return\n }\n\n ThingsApp.moduleInitialized = MODULES_STATE.INITIALIZING\n\n /* 모듈 임포트를 동적으로 처리한다. */\n import(\n /* webpackPrefetch: true */\n /* webpackPreload: true */\n /* webpackChunkName: \"modules\" */\n '../module-importer.import'\n ).then(module => {\n var modules: {\n name: string\n bootstrap: any\n }[] = module.modules\n\n /* lifecycle - bootstrapping */\n modules.forEach(async (m, idx) => {\n try {\n m.bootstrap && (await m.bootstrap())\n } catch (e) {\n console.error(`[${idx} BOOTSTRAP ERROR -${m.name}]`, e)\n }\n })\n\n /* shouldUpdate를 활성화한다. */\n ThingsApp.moduleInitialized = MODULES_STATE.INITIALIZED\n\n /* modules를 store에 dispatch 함으로써, update를 invoke 시킨다. */\n store.dispatch({\n type: UPDATE_MODULES,\n modules\n })\n\n var lastPathName: string = ''\n\n installRouter(async (location, e) => {\n var { pathname } = location\n var { contextPath } = getPathInfo(pathname)\n\n /* 페이지를 나가기 전에 옮기지 않도록 개입할 기회를 준다 */\n if (lastPathName && lastPathName != pathname && this.activePage && !(await this.activePage.canDeactivate())) {\n history.back()\n return\n }\n\n lastPathName = pathname\n\n if (ThingsApp.contextPath !== contextPath) {\n store.dispatch({\n type: UPDATE_CONTEXT_PATH,\n contextPath\n })\n }\n\n store.dispatch(navigateWithSilence(location) as any)\n\n ThingsApp.callbacks &&\n ThingsApp.callbacks.forEach(callback => {\n try {\n callback.call(this, location, e)\n } catch (ex) {\n console.error(ex)\n }\n })\n })\n })\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n }\n\n routeToPage() {\n const activePages = this.renderRoot.querySelectorAll('main > .page[active]')\n activePages.forEach(page => {\n page.removeAttribute('active')\n })\n\n this.activePage = this.renderRoot.querySelector(`main > .page[data-page=${this.page}]`) as PageView\n\n if (!this.activePage) {\n /* 해당 route에 연결된 page가 없는 경우에 main 섹션에 해당 element를 추가해준다. */\n const tagname = ThingsApp.pages[this.page!]\n if (tagname) {\n const el = document.createElement(tagname) as PageView\n el.setAttribute('class', 'page')\n el.setAttribute('data-page', this.page!)\n\n this.main.appendChild(el)\n\n this.activePage = el\n }\n }\n\n if (this.activePage) {\n this.activePage.setAttribute('active', '')\n this.activePage.setAttribute('context-path', this.contextPath!)\n this.activePage.lifecycle = {\n ...(this.activePage.lifecycle || {}),\n active: true,\n params: this.params,\n resourceId: this.resourceId,\n page: this.page\n }\n }\n\n store.dispatch({\n type: UPDATE_ACTIVE_PAGE,\n activePage: this.activePage\n })\n }\n\n async updated(changes: PropertyValues<this>) {\n if (changes.has('contextPathPrefix')) {\n setContextPathPrefix(this.contextPathPrefix)\n }\n\n if (changes.has('modules')) {\n ThingsApp.registerPages()\n }\n\n if (changes.has('page') || changes.has('resourceId') || changes.has('params')) {\n this.routeToPage()\n }\n\n if (changes.has('contextPath')) {\n this.setBase()\n }\n }\n\n shouldUpdate() {\n return ThingsApp.moduleInitialized == 2\n }\n\n stateChanged(state: any) {\n this.page = state.route.page\n this.params = state.route.params\n this.resourceId = state.route.resourceId\n this.context = state.route.context\n\n ThingsApp.modules = this.modules = state.app.modules\n ThingsApp.contextPath = this.contextPath = state.app.contextPath\n ThingsApp.callbacks = state.route.callbacks\n }\n\n static registerPages() {\n var reversedModules = [...ThingsApp.modules].reverse()\n ThingsApp.pages = {}\n\n /* 모듈 참조 순서 역순으로 page를 추가한다. (for overidable) */\n reversedModules.forEach(m => {\n m.routes &&\n m.routes.forEach((route: any) => {\n if (!ThingsApp.pages[route.page]) {\n ThingsApp.pages[route.page] = route.tagname\n }\n })\n })\n }\n\n setBase() {\n const base = document.querySelector('base')\n base?.setAttribute('href', this.contextPath ? `${this.contextPath}/` : '/')\n }\n}\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/app/app.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport { installRouter } from 'pwa-helpers/router.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { setContextPathPrefix, getPathInfo } from '@operato/utils'\n\nimport { navigateWithSilence, UPDATE_ACTIVE_PAGE, UPDATE_CONTEXT_PATH, UPDATE_MODULES } from '../actions'\nimport { store } from '../store'\nimport { AppStyle } from './app-style'\nimport { PageView } from './pages/page-view'\n\nenum MODULES_STATE {\n NOT_INITIALIZED,\n INITIALIZING,\n INITIALIZED\n}\n\n@customElement('things-app')\nexport class ThingsApp extends connect(store)(LitElement) {\n static styles = [ScrollbarStyles, AppStyle]\n\n static moduleInitialized: MODULES_STATE = MODULES_STATE.NOT_INITIALIZED\n static modules: Array<any> = []\n\n /* \n 모든 모듈의 routes 리스트가 수집될 때까지, routeToPage(..) 를 hold 시키기 위해서 ThingsApp.pages를 Promise로 정의한다. \n */\n static pagesResolver: (\n value:\n | {\n [path: string]: string\n }\n | PromiseLike<{\n [path: string]: string\n }>\n ) => void\n static pages: Promise<{ [path: string]: string }>\n\n static callbacks: Array<any> = []\n static contextPath?: string\n\n @property({ type: String, attribute: 'context-path-prefix' }) contextPathPrefix?: string\n\n @state() resourceId?: string\n @state() page?: string\n @state() params?: any\n @state() activePage?: PageView\n @state() context: any\n @state() contextPath?: string = ThingsApp.contextPath\n @state() modules: Array<any> = ThingsApp.modules\n\n @query('main') private main!: HTMLElement\n\n render() {\n var params = this.params || {}\n var fullbleed = (this.context && this.context.fullbleed) || (params.fullbleed && params.fullbleed == 'Y')\n var widebleed = (this.context && this.context.widebleed) || (params.widebleed && params.widebleed == 'Y')\n\n return html`\n <div>\n <ox-page-header-bar header></ox-page-header-bar>\n <main></main>\n <ox-page-footer-bar footer></ox-page-footer-bar>\n </div>\n\n <ox-header-bar ?fullbleed=${fullbleed}></ox-header-bar>\n\n <ox-nav-bar ?fullbleed=${fullbleed || widebleed}></ox-nav-bar>\n\n <ox-aside-bar ?fullbleed=${fullbleed || widebleed}></ox-aside-bar>\n\n <ox-footer-bar ?fullbleed=${fullbleed}></ox-footer-bar>\n\n <ox-snack-bar></ox-snack-bar>\n `\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n this.setBase()\n\n if (ThingsApp.moduleInitialized != MODULES_STATE.NOT_INITIALIZED) {\n /* 첫번째 이후로 생성되는 경우에는 강제로 'popstate'를 발생시켜서, routing 기회를 준다 */\n window.dispatchEvent(new CustomEvent('popstate'))\n\n return\n }\n\n ThingsApp.moduleInitialized = MODULES_STATE.INITIALIZING\n\n /* 모듈 임포트를 동적으로 처리한다. */\n import(\n /* webpackPrefetch: true */\n /* webpackPreload: true */\n /* webpackChunkName: \"modules\" */\n '../module-importer.import'\n ).then(module => {\n var modules: {\n name: string\n bootstrap: (m?: any /* self */) => void\n }[] = module.modules\n\n /* lifecycle - bootstrapping */\n modules.forEach(async (m, idx) => {\n try {\n m.bootstrap && (await m.bootstrap(m))\n } catch (e) {\n console.error(`[${idx} BOOTSTRAP ERROR -${m.name}]`, e)\n }\n })\n\n /* shouldUpdate를 활성화한다. */\n ThingsApp.moduleInitialized = MODULES_STATE.INITIALIZED\n\n /* modules를 store에 dispatch 함으로써, update를 invoke 시킨다. */\n store.dispatch({\n type: UPDATE_MODULES,\n modules\n })\n\n var lastPathName: string = ''\n\n installRouter(async (location, e) => {\n var { pathname } = location\n var { contextPath } = getPathInfo(pathname)\n\n /* 페이지를 나가기 전에 옮기지 않도록 개입할 기회를 준다 */\n if (\n lastPathName &&\n lastPathName != pathname &&\n this.activePage &&\n this.activePage.canDeactivate &&\n !(await this.activePage.canDeactivate())\n ) {\n history.back()\n return\n }\n\n lastPathName = pathname\n\n if (ThingsApp.contextPath !== contextPath) {\n store.dispatch({\n type: UPDATE_CONTEXT_PATH,\n contextPath\n })\n }\n\n store.dispatch(navigateWithSilence(location) as any)\n\n ThingsApp.callbacks &&\n ThingsApp.callbacks.forEach(callback => {\n try {\n callback.call(this, location, e)\n } catch (ex) {\n console.error(ex)\n }\n })\n })\n })\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n }\n\n async routeToPage() {\n const activePages = this.renderRoot.querySelectorAll('main > .page[active]')\n activePages.forEach(page => {\n page.removeAttribute('active')\n })\n\n this.activePage = this.renderRoot.querySelector(`main > .page[data-page=${this.page}]`) as PageView\n\n if (!this.activePage) {\n /* 해당 route에 연결된 page가 없는 경우에 main 섹션에 해당 element를 추가해준다. */\n const tagname = (await ThingsApp.pages)[this.page!]\n if (tagname) {\n const el = document.createElement(tagname) as PageView\n el.setAttribute('class', 'page')\n el.setAttribute('data-page', this.page!)\n\n this.main.appendChild(el)\n\n this.activePage = el\n }\n }\n\n if (this.activePage) {\n this.activePage.setAttribute('active', '')\n this.activePage.setAttribute('context-path', this.contextPath!)\n this.activePage.lifecycle = {\n ...(this.activePage.lifecycle || {}),\n active: true,\n params: this.params,\n resourceId: this.resourceId,\n page: this.page\n }\n }\n\n store.dispatch({\n type: UPDATE_ACTIVE_PAGE,\n activePage: this.activePage\n })\n }\n\n async updated(changes: PropertyValues<this>) {\n if (changes.has('contextPathPrefix')) {\n setContextPathPrefix(this.contextPathPrefix)\n }\n\n if (changes.has('modules')) {\n ThingsApp.registerPages()\n }\n\n if (changes.has('page') || changes.has('resourceId') || changes.has('params')) {\n this.routeToPage()\n }\n\n if (changes.has('contextPath')) {\n this.setBase()\n }\n }\n\n shouldUpdate() {\n return ThingsApp.moduleInitialized == 2\n }\n\n stateChanged(state: any) {\n this.page = state.route.page\n this.params = state.route.params\n this.resourceId = state.route.resourceId\n this.context = state.route.context\n\n ThingsApp.modules = this.modules = state.app.modules\n ThingsApp.contextPath = this.contextPath = state.app.contextPath\n ThingsApp.callbacks = state.route.callbacks\n }\n\n static async registerPages() {\n ThingsApp.pages = new Promise<{ [path: string]: string }>(resolve => (ThingsApp.pagesResolver = resolve))\n\n var reversedModules = [...ThingsApp.modules].reverse()\n const pages: { [path: string]: string } = {}\n\n /* 모듈 참조 순서 역순으로 page를 추가한다. (for overidable) */\n for (const m of reversedModules) {\n if (!m.routes) {\n continue\n }\n\n /* \n 각 모듈의 routes가 모두 완성될 때까지 ThingsApp.pages 구성을 지연한다.\n 각 모듈의 routes를 동적으로도 구성할 수 있도록 하기 위해서이다.\n */\n const routes = await m.routes\n\n routes.forEach((route: any) => {\n if (!pages[route.page]) {\n pages[route.page] = route.tagname\n }\n })\n }\n\n ThingsApp.pagesResolver(pages)\n }\n\n setBase() {\n const base = document.querySelector('base')\n base?.setAttribute('href', this.contextPath ? `${this.contextPath}/` : '/')\n }\n}\n"]}
@@ -4,5 +4,5 @@ export declare class Page404 extends PageView {
4
4
  get context(): {
5
5
  title: string;
6
6
  };
7
- render(): import("lit").TemplateResult<1>;
7
+ render(): import("lit-html").TemplateResult<1>;
8
8
  }
@@ -11,7 +11,7 @@ let Page404 = class Page404 extends PageView {
11
11
  render() {
12
12
  return html `
13
13
  <section>
14
- <mwc-icon>error_outline</mwc-icon>
14
+ <md-icon>error_outline</md-icon>
15
15
  <h2>page not found!</h2>
16
16
  The page you requested cannot be found.
17
17
  </section>
@@ -30,8 +30,8 @@ Page404.styles = css `
30
30
  text-align: center;
31
31
  color: var(--secondary-color);
32
32
  }
33
- mwc-icon {
34
- --mdc-icon-size: 120px;
33
+ md-icon {
34
+ --md-icon-size: 120px;
35
35
  color: var(--status-danger-color);
36
36
  text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);
37
37
  }
@@ -41,9 +41,9 @@ Page404.styles = css `
41
41
  text-transform: capitalize;
42
42
  }
43
43
  @media only screen and (max-width: 460px) {
44
- mwc-icon {
44
+ md-icon {
45
45
  padding-top: 25%;
46
- --mdc-icon-size: 90px;
46
+ --md-icon-size: 90px;
47
47
  }
48
48
  h2 {
49
49
  font-size: 2em;
@@ -1 +1 @@
1
- {"version":3,"file":"page-404.js","sourceRoot":"","sources":["../../../../src/app/pages/page-404.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG/B,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,QAAQ;IAkCnC,IAAI,OAAO;QACT,OAAO;YACL,KAAK,EAAE,gBAAgB;SACxB,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;KAMV,CAAA;IACH,CAAC;;AA/CM,cAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BlB,AA/BY,CA+BZ;AAhCU,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAiDnB","sourcesContent":["import { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { PageView } from './page-view'\n\n@customElement('page-404')\nexport class Page404 extends PageView {\n static styles = css`\n :host {\n display: block;\n box-sizing: border-box;\n background-color: var(--main-section-background-color);\n --padding-wide: 15%;\n }\n section {\n padding: var(--padding-wide) 0 0 0;\n text-align: center;\n color: var(--secondary-color);\n }\n mwc-icon {\n --mdc-icon-size: 120px;\n color: var(--status-danger-color);\n text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);\n }\n h2 {\n margin: 0 auto;\n font-size: 2.5em;\n text-transform: capitalize;\n }\n @media only screen and (max-width: 460px) {\n mwc-icon {\n padding-top: 25%;\n --mdc-icon-size: 90px;\n }\n h2 {\n font-size: 2em;\n }\n }\n `\n\n get context() {\n return {\n title: 'Page Not Found'\n }\n }\n\n render() {\n return html`\n <section>\n <mwc-icon>error_outline</mwc-icon>\n <h2>page not found!</h2>\n The page you requested cannot be found.\n </section>\n `\n }\n}\n"]}
1
+ {"version":3,"file":"page-404.js","sourceRoot":"","sources":["../../../../src/app/pages/page-404.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG/B,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,QAAQ;IAkCnC,IAAI,OAAO;QACT,OAAO;YACL,KAAK,EAAE,gBAAgB;SACxB,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;KAMV,CAAA;IACH,CAAC;;AA/CM,cAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BlB,AA/BY,CA+BZ;AAhCU,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAiDnB","sourcesContent":["import { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { PageView } from './page-view'\n\n@customElement('page-404')\nexport class Page404 extends PageView {\n static styles = css`\n :host {\n display: block;\n box-sizing: border-box;\n background-color: var(--main-section-background-color);\n --padding-wide: 15%;\n }\n section {\n padding: var(--padding-wide) 0 0 0;\n text-align: center;\n color: var(--secondary-color);\n }\n md-icon {\n --md-icon-size: 120px;\n color: var(--status-danger-color);\n text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);\n }\n h2 {\n margin: 0 auto;\n font-size: 2.5em;\n text-transform: capitalize;\n }\n @media only screen and (max-width: 460px) {\n md-icon {\n padding-top: 25%;\n --md-icon-size: 90px;\n }\n h2 {\n font-size: 2em;\n }\n }\n `\n\n get context() {\n return {\n title: 'Page Not Found'\n }\n }\n\n render() {\n return html`\n <section>\n <md-icon>error_outline</md-icon>\n <h2>page not found!</h2>\n The page you requested cannot be found.\n </section>\n `\n }\n}\n"]}
@@ -0,0 +1,23 @@
1
+ export declare function CustomAlert({ type, icon, title, text, confirmButton, cancelButton, callback }: {
2
+ type?: 'info' | 'success' | 'error' | 'warning' | 'question';
3
+ icon?: string;
4
+ title?: string;
5
+ text?: string;
6
+ confirmButton?: {
7
+ color?: string;
8
+ text: string;
9
+ };
10
+ cancelButton?: {
11
+ color?: string;
12
+ text: string;
13
+ };
14
+ callback?: (val: {
15
+ isConfirmed: boolean;
16
+ isDismissed: boolean;
17
+ value: boolean;
18
+ }) => any;
19
+ }): Promise<{
20
+ isConfirmed: boolean;
21
+ isDismissed: boolean;
22
+ value: boolean;
23
+ } | undefined>;
@@ -0,0 +1,26 @@
1
+ import { OxPrompt } from '@operato/popup';
2
+ const TYPES_ICON = {
3
+ success: 'verified',
4
+ error: 'error',
5
+ warning: 'warning',
6
+ info: 'info',
7
+ question: 'question_mark'
8
+ };
9
+ export async function CustomAlert({ type, icon, title, text, confirmButton, cancelButton, callback }) {
10
+ const result = await OxPrompt.open({
11
+ type: type || 'info',
12
+ icon: (icon && TYPES_ICON[icon]) || icon,
13
+ title,
14
+ text,
15
+ confirmButton,
16
+ cancelButton
17
+ });
18
+ const val = { isConfirmed: result, isDismissed: !result, value: result };
19
+ if (callback && typeof callback === 'function') {
20
+ callback(val);
21
+ }
22
+ else {
23
+ return val;
24
+ }
25
+ }
26
+ //# sourceMappingURL=custom-alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-alert.js","sourceRoot":"","sources":["../../src/custom-alert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,GAA+B;IAC7C,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,eAAe;CAC1B,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAChC,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,QAAQ,EAST;IACC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACjC,IAAI,EAAE,IAAI,IAAI,MAAM;QACpB,IAAI,EAAE,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI;QACxC,KAAK;QACL,IAAI;QACJ,aAAa;QACb,YAAY;KACb,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IACxE,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC/C,QAAQ,CAAC,GAAG,CAAC,CAAA;IACf,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC","sourcesContent":["import { OxPrompt } from '@operato/popup'\n\nconst TYPES_ICON: { [type: string]: string } = {\n success: 'verified',\n error: 'error',\n warning: 'warning',\n info: 'info',\n question: 'question_mark'\n}\n\nexport async function CustomAlert({\n type,\n icon,\n title,\n text,\n confirmButton,\n cancelButton,\n callback\n}: {\n type?: 'info' | 'success' | 'error' | 'warning' | 'question'\n icon?: string\n title?: string\n text?: string\n confirmButton?: { color?: string; text: string }\n cancelButton?: { color?: string; text: string }\n callback?: (val: { isConfirmed: boolean; isDismissed: boolean; value: boolean }) => any\n}) {\n const result = await OxPrompt.open({\n type: type || 'info',\n icon: (icon && TYPES_ICON[icon]) || icon,\n title,\n text,\n confirmButton,\n cancelButton\n })\n\n const val = { isConfirmed: result, isDismissed: !result, value: result }\n if (callback && typeof callback === 'function') {\n callback(val)\n } else {\n return val\n }\n}\n"]}