@teipublisher/pb-components 2.26.1-next.3 → 3.0.0-next-4.1

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 (262) hide show
  1. package/.github/workflows/docker-cypress.yml +54 -0
  2. package/.github/workflows/main.yml +6 -4
  3. package/.github/workflows/node.js.yml +56 -21
  4. package/.github/workflows/release.js.yml +19 -17
  5. package/.releaserc.json +1 -1
  6. package/CHANGELOG.md +346 -11
  7. package/Dockerfile +78 -70
  8. package/README.md +112 -4
  9. package/css/components.css +5 -5
  10. package/css/gridjs/mermaid.min.css +1 -1
  11. package/css/leaflet/Control.Geocoder.css +1 -126
  12. package/css/leaflet/images/layers.png +0 -0
  13. package/css/tify/tify.css +6 -5
  14. package/css/tom-select/tom-select.bootstrap4.min.css +1 -1
  15. package/css/tom-select/tom-select.bootstrap5.min.css +1 -1
  16. package/css/tom-select/tom-select.default.min.css +1 -1
  17. package/css/tom-select/tom-select.default.min.css.map +1 -0
  18. package/css/tom-select/tom-select.min.css +1 -1
  19. package/cypress.config.js +84 -0
  20. package/dist/api.html +1 -1
  21. package/dist/css/design-system.css +607 -0
  22. package/dist/demo/bundle-test.html +4 -3
  23. package/dist/demo/components.css +46 -1
  24. package/dist/demo/design-system.html +710 -0
  25. package/dist/demo/dts-client.html +2 -2
  26. package/dist/demo/pb-autocomplete.html +23 -11
  27. package/dist/demo/pb-autocomplete2.html +66 -55
  28. package/dist/demo/pb-autocomplete3.html +17 -8
  29. package/dist/demo/pb-blacklab-highlight.html +28 -11
  30. package/dist/demo/pb-blacklab-results.html +3 -2
  31. package/dist/demo/pb-browse-docs.html +24 -24
  32. package/dist/demo/pb-browse-docs2.html +3 -3
  33. package/dist/demo/pb-clipboard.html +32 -28
  34. package/dist/demo/pb-code-editor.html +6 -6
  35. package/dist/demo/pb-code-highlight.html +63 -63
  36. package/dist/demo/pb-codepen.html +1 -1
  37. package/dist/demo/pb-collapse.html +1 -1
  38. package/dist/demo/pb-collapse2.html +2 -2
  39. package/dist/demo/pb-combo-box.html +135 -130
  40. package/dist/demo/pb-custom-form.html +64 -55
  41. package/dist/demo/pb-dialog.html +12 -6
  42. package/dist/demo/pb-document.html +1 -1
  43. package/dist/demo/pb-download.html +68 -59
  44. package/dist/demo/pb-drawer.html +67 -46
  45. package/dist/demo/pb-drawer2.html +65 -58
  46. package/dist/demo/pb-edit-app.html +2 -2
  47. package/dist/demo/pb-edit-xml.html +1 -1
  48. package/dist/demo/pb-facsimile-2.html +26 -11
  49. package/dist/demo/pb-facsimile-3.html +25 -10
  50. package/dist/demo/pb-facsimile-dedup-test-2.html +48 -0
  51. package/dist/demo/pb-facsimile-dedup-test.html +48 -0
  52. package/dist/demo/pb-facsimile.html +4 -4
  53. package/dist/demo/pb-formula.html +1 -1
  54. package/dist/demo/pb-grid.html +22 -8
  55. package/dist/demo/pb-highlight.html +2 -2
  56. package/dist/demo/pb-i18n-simple.html +1 -0
  57. package/dist/demo/pb-i18n.html +15 -5
  58. package/dist/demo/pb-image-strip-standalone.html +2 -2
  59. package/dist/demo/pb-image-strip-view.html +2 -2
  60. package/dist/demo/pb-leaflet-map.html +3 -3
  61. package/dist/demo/pb-leaflet-map2.html +2 -2
  62. package/dist/demo/pb-leaflet-map3.html +3 -3
  63. package/dist/demo/pb-link.html +1 -1
  64. package/dist/demo/pb-load.html +2 -6
  65. package/dist/demo/pb-login.html +1 -3
  66. package/dist/demo/pb-manage-odds.html +9 -4
  67. package/dist/demo/pb-markdown.html +1 -1
  68. package/dist/demo/pb-media-query.html +2 -2
  69. package/dist/demo/pb-mei.html +2 -2
  70. package/dist/demo/pb-mei2.html +2 -2
  71. package/dist/demo/pb-message.html +2 -3
  72. package/dist/demo/pb-odd-editor.html +54 -52
  73. package/dist/demo/pb-page-header.html +27 -0
  74. package/dist/demo/pb-popover.html +1 -1
  75. package/dist/demo/pb-print-preview.html +2 -2
  76. package/dist/demo/pb-progress.html +4 -4
  77. package/dist/demo/pb-repeat.html +32 -36
  78. package/dist/demo/pb-search.html +16 -5
  79. package/dist/demo/pb-search2.html +4 -4
  80. package/dist/demo/pb-search3.html +3 -3
  81. package/dist/demo/pb-search4.html +3 -3
  82. package/dist/demo/pb-select-feature.html +4 -4
  83. package/dist/demo/pb-select-feature2.html +4 -4
  84. package/dist/demo/pb-select-feature3.html +2 -2
  85. package/dist/demo/pb-select-i18n.html +58 -53
  86. package/dist/demo/pb-select-odd.html +1 -1
  87. package/dist/demo/pb-select.html +190 -75
  88. package/dist/demo/pb-select2.html +91 -37
  89. package/dist/demo/pb-select3.html +109 -41
  90. package/dist/demo/pb-svg.html +1 -1
  91. package/dist/demo/pb-table-grid.html +26 -15
  92. package/dist/demo/pb-tabs.html +15 -7
  93. package/dist/demo/pb-tify.html +7 -7
  94. package/dist/demo/pb-timeline.html +1 -1
  95. package/dist/demo/pb-timeline2.html +1 -1
  96. package/dist/demo/pb-toggle-feature.html +26 -23
  97. package/dist/demo/pb-toggle-feature2.html +4 -4
  98. package/dist/demo/pb-toggle-feature3.html +2 -2
  99. package/dist/demo/pb-toggle-feature4.html +56 -54
  100. package/dist/demo/pb-version.html +2 -2
  101. package/dist/demo/pb-view.html +78 -40
  102. package/dist/demo/pb-view2.html +69 -46
  103. package/dist/demo/pb-view3.html +53 -48
  104. package/dist/demo/pb-view4.html +70 -49
  105. package/dist/demo/pb-zoom.html +2 -2
  106. package/dist/{es-global-bridge-d8ce175d.js → es-global-bridge-D8ZcUcx_.js} +0 -4
  107. package/dist/focus-mixin-VCsFap6b.js +768 -0
  108. package/dist/images/icons.svg +217 -0
  109. package/dist/jinn-codemirror-DETLdm08.js +1 -0
  110. package/dist/lib/openseadragon.min.js +80 -0
  111. package/dist/lib/openseadragon.min.js.map +1 -0
  112. package/dist/pb-code-editor.js +25 -20
  113. package/dist/pb-component-docs.js +414 -3225
  114. package/dist/pb-components-bundle.js +3046 -4402
  115. package/dist/pb-dialog-tklYGWfc.js +121 -0
  116. package/dist/pb-edit-app.js +208 -107
  117. package/dist/pb-elements.json +716 -249
  118. package/dist/pb-facsimile.js +46 -0
  119. package/dist/pb-i18n-C0NDma4h.js +1 -0
  120. package/dist/pb-leaflet-map.js +23 -23
  121. package/dist/pb-mei.js +152 -134
  122. package/dist/pb-mixin-DHoWQheB.js +1 -0
  123. package/dist/pb-odd-editor.js +1671 -1231
  124. package/dist/pb-tify.js +1 -27
  125. package/dist/unsafe-html-D5VGo9Oq.js +1 -0
  126. package/dist/urls-BEONu_g4.js +1 -0
  127. package/eslint.config.mjs +92 -0
  128. package/gh-pages.js +5 -3
  129. package/i18n/common/en.json +6 -0
  130. package/i18n/common/pl.json +2 -2
  131. package/images/icons.svg +217 -0
  132. package/index.html +0 -5
  133. package/lib/leaflet-src.js.map +1 -0
  134. package/lib/leaflet.markercluster-src.js.map +1 -0
  135. package/lib/openseadragon.min.js +6 -6
  136. package/package.json +56 -81
  137. package/pb-elements.json +716 -249
  138. package/rollup.config.mjs +312 -0
  139. package/src/assets/components.css +5 -5
  140. package/src/assets/design-system.css +607 -0
  141. package/src/authority/airtable.js +20 -21
  142. package/src/authority/anton.js +129 -129
  143. package/src/authority/custom.js +70 -27
  144. package/src/authority/geonames.js +38 -32
  145. package/src/authority/gnd.js +50 -42
  146. package/src/authority/kbga.js +136 -134
  147. package/src/authority/metagrid.js +44 -46
  148. package/src/authority/reconciliation.js +66 -68
  149. package/src/authority/registry.js +4 -4
  150. package/src/docs/demo-utils.js +91 -0
  151. package/src/docs/pb-component-docs.js +287 -147
  152. package/src/docs/pb-component-view.js +380 -273
  153. package/src/docs/pb-components-list.js +115 -51
  154. package/src/docs/pb-demo-snippet.js +199 -174
  155. package/src/dts-client.js +306 -303
  156. package/src/dts-select-endpoint.js +125 -85
  157. package/src/parse-date-service.js +184 -135
  158. package/src/pb-ajax.js +175 -173
  159. package/src/pb-authority-lookup.js +198 -158
  160. package/src/pb-autocomplete.js +731 -313
  161. package/src/pb-blacklab-highlight.js +266 -260
  162. package/src/pb-blacklab-results.js +230 -225
  163. package/src/pb-browse-docs.js +601 -484
  164. package/src/pb-browse.js +68 -65
  165. package/src/pb-clipboard.js +97 -76
  166. package/src/pb-code-editor.js +111 -103
  167. package/src/pb-code-highlight.js +234 -204
  168. package/src/pb-codepen.js +81 -73
  169. package/src/pb-collapse.js +265 -152
  170. package/src/pb-combo-box.js +191 -191
  171. package/src/pb-components-bundle.js +1 -7
  172. package/src/pb-components.js +2 -6
  173. package/src/pb-custom-form.js +230 -141
  174. package/src/pb-dialog.js +99 -63
  175. package/src/pb-document.js +118 -91
  176. package/src/pb-download.js +214 -198
  177. package/src/pb-drawer.js +146 -149
  178. package/src/pb-edit-app.js +471 -240
  179. package/src/pb-edit-xml.js +101 -98
  180. package/src/pb-events.js +126 -107
  181. package/src/pb-facs-link.js +130 -101
  182. package/src/pb-facsimile.js +494 -410
  183. package/src/pb-fetch.js +389 -0
  184. package/src/pb-formula.js +152 -154
  185. package/src/pb-geolocation.js +130 -132
  186. package/src/pb-grid-action.js +59 -56
  187. package/src/pb-grid.js +388 -228
  188. package/src/pb-highlight.js +142 -142
  189. package/src/pb-hotkeys.js +40 -42
  190. package/src/pb-i18n.js +115 -127
  191. package/src/pb-icon-button.js +108 -0
  192. package/src/pb-icon.js +283 -0
  193. package/src/pb-image-strip.js +85 -79
  194. package/src/pb-lang.js +142 -57
  195. package/src/pb-leaflet-map.js +551 -483
  196. package/src/pb-link.js +132 -126
  197. package/src/pb-load.js +495 -428
  198. package/src/pb-login.js +303 -248
  199. package/src/pb-manage-odds.js +384 -338
  200. package/src/pb-map-icon.js +90 -90
  201. package/src/pb-map-layer.js +86 -86
  202. package/src/pb-markdown.js +107 -110
  203. package/src/pb-media-query.js +75 -73
  204. package/src/pb-mei.js +523 -303
  205. package/src/pb-message.js +144 -98
  206. package/src/pb-mixin.js +268 -265
  207. package/src/pb-navigation.js +83 -96
  208. package/src/pb-observable.js +39 -39
  209. package/src/pb-odd-editor.js +1209 -948
  210. package/src/pb-odd-elementspec-editor.js +375 -310
  211. package/src/pb-odd-model-editor.js +1189 -941
  212. package/src/pb-odd-parameter-editor.js +269 -170
  213. package/src/pb-odd-rendition-editor.js +184 -131
  214. package/src/pb-page.js +451 -422
  215. package/src/pb-paginate.js +260 -178
  216. package/src/pb-panel.js +217 -183
  217. package/src/pb-popover-themes.js +16 -9
  218. package/src/pb-popover.js +297 -288
  219. package/src/pb-print-preview.js +128 -128
  220. package/src/pb-progress.js +52 -52
  221. package/src/pb-repeat.js +141 -108
  222. package/src/pb-restricted.js +85 -78
  223. package/src/pb-search.js +258 -230
  224. package/src/pb-select-feature.js +210 -126
  225. package/src/pb-select-odd.js +184 -118
  226. package/src/pb-select-template.js +113 -78
  227. package/src/pb-select.js +330 -229
  228. package/src/pb-split-list.js +181 -176
  229. package/src/pb-svg.js +81 -80
  230. package/src/pb-table-column.js +55 -55
  231. package/src/pb-table-grid.js +334 -205
  232. package/src/pb-tabs.js +238 -61
  233. package/src/pb-tify.js +3331 -126
  234. package/src/pb-timeline.js +394 -255
  235. package/src/pb-toggle-feature.js +196 -188
  236. package/src/pb-upload.js +201 -176
  237. package/src/pb-version.js +22 -34
  238. package/src/pb-view-annotate.js +138 -102
  239. package/src/pb-view.js +1722 -1272
  240. package/src/pb-zoom.js +144 -46
  241. package/src/search-result-service.js +256 -223
  242. package/src/seed-element.js +14 -22
  243. package/src/settings.js +4 -4
  244. package/src/theming.js +98 -91
  245. package/src/urls.js +403 -289
  246. package/src/utils.js +53 -51
  247. package/vite.config.js +86 -0
  248. package/css/pb-styles.css +0 -51
  249. package/dist/iron-form-3b8dcaa7.js +0 -210
  250. package/dist/jinn-codemirror-da0e2d1f.js +0 -1
  251. package/dist/paper-checkbox-515a5284.js +0 -1597
  252. package/dist/paper-icon-button-b1d31571.js +0 -398
  253. package/dist/paper-listbox-a3b7175c.js +0 -1265
  254. package/dist/pb-i18n-0611135a.js +0 -1
  255. package/dist/pb-mixin-b1caa22e.js +0 -158
  256. package/dist/polymer-hack.js +0 -1
  257. package/dist/vaadin-element-mixin-fe4a4883.js +0 -527
  258. package/lib/Control.Geocoder.min.js +0 -2
  259. package/lib/Control.Geocoder.min.js.map +0 -1
  260. package/src/assets/pb-styles.css +0 -51
  261. package/src/pb-light-dom.js +0 -41
  262. package/src/polymer-hack.js +0 -6
@@ -1,64 +1,128 @@
1
- import { LitElement, html, css } from 'lit-element';
2
- import '@polymer/paper-item';
1
+ import { LitElement, html, css, nothing } from 'lit';
3
2
 
4
3
  /**
5
4
  * Displays a list of components to view.
6
- *
5
+ *
7
6
  * @fires pb-api-component if a component name is clicked
8
7
  */
9
8
  export class PbComponentsList extends LitElement {
10
- static get properties() {
11
- return {
12
- json: {
13
- type: Object
14
- },
15
- withDemo: {
16
- type: Boolean,
17
- attribute: 'with-demo'
18
- },
19
- _demos: {
20
- type: Object
21
- }
22
- };
23
- }
9
+ static get properties() {
10
+ return {
11
+ json: {
12
+ type: Object,
13
+ },
14
+ withDemo: {
15
+ type: Boolean,
16
+ attribute: 'with-demo',
17
+ },
18
+ _demos: {
19
+ type: Object,
20
+ },
21
+ };
22
+ }
24
23
 
25
- constructor() {
26
- super();
27
- this.json = null;
28
- this.withDemo = false;
29
- }
24
+ constructor() {
25
+ super();
26
+ this.json = null;
27
+ this.withDemo = false;
28
+ }
30
29
 
31
- connectedCallback() {
32
- super.connectedCallback();
33
- }
30
+ connectedCallback() {
31
+ super.connectedCallback();
32
+ }
34
33
 
35
- render() {
36
- if (this.json) {
37
- const { tags } = this.json;
38
- tags.sort((a, b) => a.name.localeCompare(b.name));
39
- let elements = tags;
40
- if (this.withDemo) {
41
- elements = tags.filter((tag) => tag.demo);
42
- }
43
- return html`
44
- ${elements.map((tag) => html`<paper-item @click="${() => PbComponentsList._viewComponent(tag)}">${tag.name}</paper-item>`)}
45
- `;
46
- }
47
- return html`<div>Loading ...</div>`;
34
+ render() {
35
+ if (this.json) {
36
+ const { tags } = this.json;
37
+ tags.sort((a, b) => a.name.localeCompare(b.name));
38
+ let elements = tags;
39
+ if (this.withDemo) {
40
+ elements = tags.filter(tag => tag.demo);
41
+ }
42
+ return html`
43
+ <ul class="component-list">
44
+ ${elements.map(
45
+ tag => html` <li>
46
+ <button
47
+ type="button"
48
+ class="component-item"
49
+ @click="${() => PbComponentsList._viewComponent(tag)}"
50
+ >
51
+ <span class="component-name">${tag.name}</span>
52
+ ${tag.demo ? html`<span class="badge">demo</span>` : nothing}
53
+ </button>
54
+ </li>`,
55
+ )}
56
+ </ul>
57
+ `;
48
58
  }
59
+ return html`<div>Loading ...</div>`;
60
+ }
49
61
 
50
- static get styles() {
51
- return css`
52
- :host {
53
- display: block;
54
- }
55
- `;
56
- }
62
+ static get styles() {
63
+ return css`
64
+ :host {
65
+ display: block;
66
+ }
57
67
 
58
- static _viewComponent(component, tab = 0) {
59
- document.dispatchEvent(new CustomEvent('pb-api-component', {
60
- detail: { component, tab }
61
- }));
62
- }
68
+ .component-list {
69
+ list-style: none;
70
+ margin: 0;
71
+ padding: 0;
72
+ }
73
+
74
+ li + li {
75
+ margin-top: 4px;
76
+ }
77
+
78
+ .component-item {
79
+ width: 100%;
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: space-between;
83
+ gap: 0.5rem;
84
+ padding: 0.5rem 0.75rem;
85
+ border: none;
86
+ border-radius: 6px;
87
+ background: transparent;
88
+ font: inherit;
89
+ text-align: left;
90
+ cursor: pointer;
91
+ transition: background-color 120ms ease, color 120ms ease;
92
+ }
93
+
94
+ .component-item:hover,
95
+ .component-item:focus-visible {
96
+ background-color: rgba(33, 150, 243, 0.12);
97
+ outline: none;
98
+ }
99
+
100
+ .component-name {
101
+ flex: 1 1 auto;
102
+ overflow: hidden;
103
+ text-overflow: ellipsis;
104
+ white-space: nowrap;
105
+ }
106
+
107
+ .badge {
108
+ flex: none;
109
+ font-size: 0.75rem;
110
+ line-height: 1;
111
+ text-transform: uppercase;
112
+ padding: 0.125rem 0.375rem;
113
+ border-radius: 999px;
114
+ background-color: rgba(33, 150, 243, 0.16);
115
+ color: #1565c0;
116
+ }
117
+ `;
118
+ }
119
+
120
+ static _viewComponent(component, tab = 0) {
121
+ document.dispatchEvent(
122
+ new CustomEvent('pb-api-component', {
123
+ detail: { component, tab },
124
+ }),
125
+ );
126
+ }
63
127
  }
64
- customElements.define('pb-components-list', PbComponentsList);
128
+ customElements.define('pb-components-list', PbComponentsList);
@@ -1,204 +1,229 @@
1
- import { LitElement, html, css } from 'lit-element';
2
- import { translate } from "../pb-i18n.js";
1
+ import { LitElement, html, css, nothing } from 'lit';
2
+ import { translate } from '../pb-i18n.js';
3
+ import { ready, firePageReady, syncPbSelect, autoWireForms } from './demo-utils.js';
3
4
  import '../pb-code-highlight.js';
4
5
 
5
- const codePenEndpoint = "https://teipublisher.com/exist/apps/tei-publisher";
6
+ const codePenEndpoint = 'https://teipublisher.com/exist/apps/tei-publisher';
6
7
 
7
8
  /**
8
9
  * Viewer for demo code.
9
- *
10
- * @customElement pb-demo-snippet
11
- * @polymer
12
- * @appliesMixin pbMixin
10
+ *
11
+ * @customElement pb-demo-snippet
13
12
  */
14
13
  export class PbDemoSnippet extends LitElement {
15
- static get properties() {
16
- return {
17
- title: {
18
- type: String
19
- },
20
- code: {
21
- type: String
22
- },
23
- _editorLoaded: {
24
- type: Boolean
25
- },
26
- _showCodeLabel: {
27
- type: String
28
- },
29
- _editCodeLabel: {
30
- type: String
31
- }
32
- };
33
- }
34
-
35
- constructor() {
36
- super();
37
- this.title = 'TEI Publisher Webcomponents Example';
38
- this.code = 'Loading ...';
39
- this._showCodeLabel = 'demo.showCode.show';
14
+ static properties = {
15
+ title: { type: String },
16
+ code: { type: String },
17
+ _showCodeLabel: { type: String },
18
+ _requirePbTify: { type: Boolean },
19
+ };
20
+
21
+ constructor() {
22
+ super();
23
+ this.title = 'TEI Publisher Webcomponents Example';
24
+ this.code = 'Loading ...';
25
+ this._showCodeLabel = 'demo.showCode.show';
26
+ this._requirePbTify = false;
27
+ }
28
+
29
+ connectedCallback() {
30
+ super.connectedCallback();
31
+ this._requirePbTify = this.hasAttribute('require-pb-tify');
32
+
33
+ const template = this.querySelector('template');
34
+ if (!template) {
35
+ console.warn('<pb-demo-snippet> no <template> found inside snippet');
36
+ return;
40
37
  }
41
38
 
42
- connectedCallback() {
43
- super.connectedCallback();
44
- const template = this.querySelector('template');
45
- this.code = PbDemoSnippet.removeIndent(template.innerHTML);
46
- this.code = this.code.replace(/\s*<style[\s\S]*>[\s\S]*?<\/style>\s*/g, '');
47
- const clone = document.importNode(template.content, true);
48
- this.appendChild(clone);
49
- }
50
-
51
- render() {
52
- let cpCode = this.code.replace(/(endpoint="[^"]+")/,
53
- `endpoint="${codePenEndpoint}"`
54
- );
55
- cpCode = PbDemoSnippet.indent(cpCode, 2);
56
-
57
- const style = this.querySelector('style');
58
-
59
- let css = '';
60
- if (style) {
61
- css = style.innerText;
39
+ this.code = PbDemoSnippet.removeIndent(template.innerHTML).replace(
40
+ /\s*<style[\s\S]*?>[\s\S]*?<\/style>\s*/g,
41
+ '',
42
+ );
43
+
44
+ const clone = template.content.cloneNode(true);
45
+ this.append(clone);
46
+
47
+ // After stamping, normalize demos:
48
+ // - If pb-select is present and defined, reflect initial values into the inner controls
49
+ // - Always fire a lightweight pb-page-ready so components can initialize
50
+ queueMicrotask(async () => {
51
+ try {
52
+ if (customElements.get('pb-select')) {
53
+ const selects = this.querySelectorAll('pb-select');
54
+ for (const el of selects) {
55
+ try {
56
+ await syncPbSelect(el);
57
+ } catch (_) {
58
+ /* non-fatal for demos */
59
+ }
60
+ }
62
61
  }
63
- const cpCss = `
62
+ } catch (_) {
63
+ /* ignore */
64
+ }
65
+ autoWireForms(this);
66
+ firePageReady({ endpoint: '.', apiVersion: '1.0.0' });
67
+ });
68
+ }
69
+
70
+ render() {
71
+ const style = this.querySelector('style');
72
+ const css = style ? style.innerText : '';
73
+
74
+ const cpCode = PbDemoSnippet.indent(
75
+ this.code.replace(/(endpoint="[^"]+")/, `endpoint="${codePenEndpoint}"`),
76
+ 2,
77
+ );
78
+
79
+ const cpCss = `
64
80
  @import url('https://fonts.googleapis.com/css?family=Oswald|Roboto&display=swap');
65
81
 
66
82
  body {
67
- margin: 10px 20px;
68
- font-size: 16px;
69
- font-family: 'Roboto', 'Noto', sans - serif;
70
- line-height: 1.42857;
71
- font-weight: 300;
72
- color: #333333;
73
-
74
- --paper-tooltip-delay-in: 200;
83
+ margin: 10px 20px;
84
+ font-size: 16px;
85
+ font-family: 'Roboto', 'Noto', sans-serif;
86
+ line-height: 1.42857;
87
+ font-weight: 300;
88
+ color: #333;
75
89
  }
76
90
 
77
- ${PbDemoSnippet.removeIndent(css)}`;
78
- const cpHtml = `
91
+ ${PbDemoSnippet.removeIndent(css)}
92
+ `;
93
+
94
+ const cpHtml = `
79
95
  <html>
80
- <head>
81
- <meta charset="UTF-8">
82
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
83
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
84
-
85
- <title>${ this.title}</title>
86
- <script src="https://unpkg.com/@webcomponents/webcomponentsjs@2.4.3/webcomponents-loader.js"></script>
87
- <script type="module" src="https://unpkg.com/@teipublisher/pb-components@latest/dist/pb-components-bundle.js"></script>
88
- <script type="module" src="https://unpkg.com/@teipublisher/pb-components@latest/dist/pb-leaflet-map.js"></script>
89
- </head>
90
-
91
- <body>
92
- ${ cpCode}
93
- </body>
96
+ <head>
97
+ <meta charset="UTF-8">
98
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
99
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
100
+ <title>${this.title}</title>
101
+ <script src="https://unpkg.com/@webcomponents/webcomponentsjs@2.4.3/webcomponents-loader.js"></script>
102
+ <script type="module" src="https://unpkg.com/@teipublisher/pb-components@latest/dist/pb-components-bundle.js"></script>
103
+ <script type="module" src="https://unpkg.com/@teipublisher/pb-components@latest/dist/pb-leaflet-map.js"></script>
104
+ </head>
105
+ <body>
106
+ ${cpCode}
107
+ </body>
108
+ ${
109
+ this._requirePbTify
110
+ ? '<script type="module" src="https://unpkg.com/@teipublisher/pb-components@latest/dist/pb-tify.js"></script>'
111
+ : ''
112
+ }
94
113
  </html>`;
95
114
 
96
- const cpOptions = {
97
- title: this.title,
98
- html: cpHtml,
99
- html_pre_processor: "none",
100
- css: cpCss,
101
- css_starter: "normalize",
102
- template: false,
103
- editors: 110
104
- };
105
-
106
- return html`
107
- <div class="snippet"><slot></slot></div>
108
- <pb-code-highlight id="source" theme="coy" language="html" line-numbers .code="${this.code}"></pb-code-highlight>
109
- <div id="container"></div>
110
- <div class="buttons">
111
- <button class="pretty-button" @click="${this._showCode}">${translate(this._showCodeLabel)}</button>
112
- <form action="https://codepen.io/pen/define" method="POST" target="_blank">
113
- <input type="hidden" name="data" .value="${JSON.stringify(cpOptions)}">
114
- <button class="pretty-button" type="submit">${translate('demo.editCode.show')}</button>
115
- </form>
116
- </div>
117
- `;
115
+ const cpOptions = {
116
+ title: this.title,
117
+ html: cpHtml,
118
+ html_pre_processor: 'none',
119
+ css: cpCss,
120
+ css_starter: 'normalize',
121
+ template: false,
122
+ editors: 110,
123
+ };
124
+
125
+ return html`
126
+ <div class="snippet"><slot></slot></div>
127
+ <pb-code-highlight
128
+ id="source"
129
+ theme="coy"
130
+ language="html"
131
+ line-numbers
132
+ .code=${this.code}
133
+ ></pb-code-highlight>
134
+ <div class="buttons">
135
+ <button class="pretty-button" @click=${this._toggleSource} type="button">
136
+ ${translate(this._showCodeLabel)}
137
+ </button>
138
+ <form action="https://codepen.io/pen/define" method="POST" target="_blank">
139
+ <input type="hidden" name="data" .value=${JSON.stringify(cpOptions)} />
140
+ <button class="pretty-button" type="submit">${translate('demo.editCode.show')}</button>
141
+ </form>
142
+ </div>
143
+ `;
144
+ }
145
+
146
+ _toggleSource() {
147
+ const source = this.renderRoot.querySelector('#source');
148
+ if (!source) return;
149
+ if (source.classList.contains('open')) {
150
+ source.classList.remove('open');
151
+ this._showCodeLabel = 'demo.showCode.show';
152
+ } else {
153
+ source.classList.add('open');
154
+ this._showCodeLabel = 'demo.showCode.hide';
118
155
  }
119
-
120
- _showCode() {
121
- const source = this.shadowRoot.getElementById('source');
122
- if (source.classList.contains('open')) {
123
- source.classList.remove('open');
124
- this._showCodeLabel = 'demo.showCode.show';
125
- } else {
126
- source.classList.add('open');
127
- this._showCodeLabel = 'demo.showCode.hide';
128
- }
156
+ }
157
+
158
+ static removeIndent(input = '') {
159
+ const indents = input.match(/^[^\S\n]*(?=\S)/gm);
160
+ if (!indents || !indents[0]) return input;
161
+ const min = indents.reduce((acc, indent) => Math.min(acc, indent.length), indents[0].length);
162
+ if (!min) return input;
163
+ return input.replace(new RegExp(`^${' '.repeat(min)}`, 'gm'), '');
164
+ }
165
+
166
+ static indent(input, tabs) {
167
+ const indent = '\t'.repeat(tabs);
168
+ return input.replace(/^[^\S\n]*(?=\S)/gm, indent + '$&');
169
+ }
170
+
171
+ static styles = css`
172
+ :host {
173
+ display: block;
174
+ box-shadow: 0 2px 2px rgba(0, 0, 0, 0.14), 0 1px 5px rgba(0, 0, 0, 0.12),
175
+ 0 3px 1px -2px rgba(0, 0, 0, 0.2);
176
+ padding: 20px;
177
+ background: #fff;
129
178
  }
130
179
 
131
- static removeIndent(input) {
132
- const indents = input.match(/^[^\S]*(?=\S)/gm);
133
-
134
- if (!indents || !indents[0].length)
135
- return input;
180
+ pb-code-highlight {
181
+ display: none;
182
+ margin-top: 30px;
183
+ }
136
184
 
137
- indents.sort((a, b) => a.length - b.length);
185
+ pb-code-highlight.open {
186
+ display: block;
187
+ }
138
188
 
139
- if (!indents[0].length)
140
- return input;
189
+ .buttons {
190
+ display: flex;
191
+ justify-content: space-between;
192
+ margin-top: 20px;
193
+ padding-top: 10px;
194
+ border-top: 1px solid var(--google-grey-400, #999);
195
+ }
141
196
 
142
- return input.replace(RegExp('^' + indents[0], 'gm'), '');
197
+ .pretty-button {
198
+ cursor: pointer;
199
+ display: inline-block;
200
+ box-sizing: border-box;
201
+ margin: 12px 0;
202
+ padding: 13px 44px;
203
+ border: 2px solid #2196f3;
204
+ background-color: transparent;
205
+ font-size: 14px;
206
+ font-weight: 500;
207
+ color: #2196f3;
208
+ text-align: center;
209
+ text-decoration: none;
210
+ text-transform: uppercase;
211
+ border-radius: 0;
212
+ appearance: none;
143
213
  }
144
214
 
145
- static indent(input, tabs) {
146
- return input.replace(/^[^\S\n\r]*(?=\S)/gm, new Array(++tabs).join('\t') + '$&');
215
+ .pretty-button:hover,
216
+ .pretty-button:active {
217
+ background-color: #2196f3;
218
+ color: #fff;
147
219
  }
148
220
 
149
- static get styles() {
150
- return css`
151
- :host {
152
- display: block;
153
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
154
- padding: 20px;
155
- }
156
- pb-code-highlight {
157
- display: none;
158
- margin-top: 30px;
159
- }
160
- pb-code-highlight.open {
161
- display: block;
162
- }
163
- #container {
164
- margin-top: 20px;
165
- }
166
- .buttons {
167
- display: flex;
168
- justify-content: space-between;
169
- margin-top: 20px;
170
- padding-top: 10px;
171
- border-top: 1px solid var(--google-grey-400, #999);
172
- }
173
- .pretty-button {
174
- cursor: pointer;
175
- display: inline-block;
176
- box-sizing: border-box;
177
- margin: 12px 0;
178
- padding: 13px 44px;
179
- border: 2px solid #2196F3;
180
- background-color: transparent;
181
- font-size: 14px;
182
- font-weight: 500;
183
- color: #2196F3;
184
- text-align: center;
185
- text-decoration: none;
186
- text-transform: uppercase;
187
- border-radius: 0;
188
- -webkit-appearance: none;
189
- appearance: none;
190
- }
191
- .pretty-button:hover,
192
- .pretty-button:active {
193
- background-color: #2196F3;
194
- color: #FFF;
195
- }
196
- .pretty-button:disabled {
197
- background-color: transparent;
198
- border-color: #999;
199
- color: #999;
200
- }
201
- `;
221
+ .pretty-button:disabled {
222
+ background-color: transparent;
223
+ border-color: #999;
224
+ color: #999;
202
225
  }
226
+ `;
203
227
  }
204
- customElements.define('pb-demo-snippet', PbDemoSnippet);
228
+
229
+ customElements.define('pb-demo-snippet', PbDemoSnippet);