@universal-ember/docs-support 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +3 -21
  3. package/declarations/{article.gts.d.ts → article.d.ts} +1 -1
  4. package/declarations/article.d.ts.map +1 -0
  5. package/declarations/{callout.gts.d.ts → callout.d.ts} +1 -1
  6. package/declarations/callout.d.ts.map +1 -0
  7. package/declarations/{errors.gts.d.ts → errors.d.ts} +1 -1
  8. package/declarations/errors.d.ts.map +1 -0
  9. package/declarations/{h2.gts.d.ts → h2.d.ts} +1 -1
  10. package/declarations/h2.d.ts.map +1 -0
  11. package/declarations/{icons.gts.d.ts → icons.d.ts} +1 -1
  12. package/declarations/icons.d.ts.map +1 -0
  13. package/declarations/{index-page.gts.d.ts → index-page.d.ts} +2 -2
  14. package/declarations/index-page.d.ts.map +1 -0
  15. package/declarations/index.d.ts +12 -0
  16. package/declarations/index.d.ts.map +1 -0
  17. package/declarations/{links.gts.d.ts → links.d.ts} +1 -1
  18. package/declarations/links.d.ts.map +1 -0
  19. package/declarations/{menu-layout.gts.d.ts → menu-layout.d.ts} +1 -1
  20. package/declarations/menu-layout.d.ts.map +1 -0
  21. package/declarations/{page-layout.gts.d.ts → page-layout.d.ts} +1 -1
  22. package/declarations/page-layout.d.ts.map +1 -0
  23. package/declarations/{shell.gts.d.ts → shell.d.ts} +1 -1
  24. package/declarations/shell.d.ts.map +1 -0
  25. package/declarations/{side-nav.gts.d.ts → side-nav.d.ts} +2 -3
  26. package/declarations/side-nav.d.ts.map +1 -0
  27. package/declarations/{text.gts.d.ts → text.d.ts} +1 -1
  28. package/declarations/text.d.ts.map +1 -0
  29. package/declarations/{theme-toggle.gts.d.ts → theme-toggle.d.ts} +1 -1
  30. package/declarations/theme-toggle.d.ts.map +1 -0
  31. package/dist/icons.js +11 -11
  32. package/dist/icons.js.map +1 -1
  33. package/dist/index.js +340 -11
  34. package/dist/index.js.map +1 -1
  35. package/dist/site-css/featured-demo.css +2 -2
  36. package/package.json +33 -42
  37. package/{dist/article.js → src/article.gts} +6 -11
  38. package/src/callout.gts +18 -0
  39. package/src/errors.gts +19 -0
  40. package/src/h2.gts +5 -0
  41. package/src/icons.gts +150 -0
  42. package/src/index-page.css +22 -0
  43. package/src/index-page.gts +41 -0
  44. package/{declarations/index.gts.d.ts → src/index.gts} +6 -7
  45. package/src/links.gts +31 -0
  46. package/src/menu-layout.gts +43 -0
  47. package/src/page-layout.gts +137 -0
  48. package/src/shell.gts +37 -0
  49. package/src/side-nav.gts +190 -0
  50. package/src/site-css/components.css +23 -0
  51. package/src/site-css/featured-demo.css +9 -0
  52. package/src/site-css/shell.css +102 -0
  53. package/src/site-css/shiki.css +27 -0
  54. package/src/site-css/site.css +77 -0
  55. package/src/text.gts +5 -0
  56. package/src/theme-toggle.css +48 -0
  57. package/src/theme-toggle.gts +36 -0
  58. package/declarations/article.gts.d.ts.map +0 -1
  59. package/declarations/callout.gts.d.ts.map +0 -1
  60. package/declarations/errors.gts.d.ts.map +0 -1
  61. package/declarations/h2.gts.d.ts.map +0 -1
  62. package/declarations/icons.gts.d.ts.map +0 -1
  63. package/declarations/index-page.gts.d.ts.map +0 -1
  64. package/declarations/index.gts.d.ts.map +0 -1
  65. package/declarations/links.gts.d.ts.map +0 -1
  66. package/declarations/menu-layout.gts.d.ts.map +0 -1
  67. package/declarations/page-layout.gts.d.ts.map +0 -1
  68. package/declarations/shell.gts.d.ts.map +0 -1
  69. package/declarations/side-nav.gts.d.ts.map +0 -1
  70. package/declarations/text.gts.d.ts.map +0 -1
  71. package/declarations/theme-toggle.gts.d.ts.map +0 -1
  72. package/dist/article.js.map +0 -1
  73. package/dist/callout.js +0 -14
  74. package/dist/callout.js.map +0 -1
  75. package/dist/errors.js +0 -10
  76. package/dist/errors.js.map +0 -1
  77. package/dist/h2.js +0 -10
  78. package/dist/h2.js.map +0 -1
  79. package/dist/index-page.js +0 -15
  80. package/dist/index-page.js.map +0 -1
  81. package/dist/links.js +0 -30
  82. package/dist/links.js.map +0 -1
  83. package/dist/menu-layout.js +0 -26
  84. package/dist/menu-layout.js.map +0 -1
  85. package/dist/page-layout.js +0 -60
  86. package/dist/page-layout.js.map +0 -1
  87. package/dist/shell.js +0 -30
  88. package/dist/shell.js.map +0 -1
  89. package/dist/side-nav.js +0 -116
  90. package/dist/side-nav.js.map +0 -1
  91. package/dist/text.js +0 -10
  92. package/dist/text.js.map +0 -1
  93. package/dist/theme-toggle.js +0 -33
  94. package/dist/theme-toggle.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,12 +1,341 @@
1
- export { H2 } from './h2.js';
2
- export { Callout } from './callout.js';
3
- export { Text } from './text.js';
4
- export { Article } from './article.js';
5
- export { Shell } from './shell.js';
6
- export { IndexPage } from './index-page.js';
7
- export { InternalLink, Link } from './links.js';
8
- export { OopsError } from './errors.js';
9
- export { ResponsiveMenuLayout } from './menu-layout.js';
10
- export { PageLayout, TopRight } from './page-layout.js';
11
- export { ThemeToggle } from './theme-toggle.js';
1
+ import "./index-page.css"
2
+ import "./theme-toggle.css"
3
+ import "./site-css/site.css"
4
+ import "./site-css/components.css"
5
+ import "./site-css/featured-demo.css"
6
+ import "./site-css/shiki.css"
7
+ import "./site-css/shell.css"
8
+ import { precompileTemplate } from '@ember/template-compilation';
9
+ import { setComponentTemplate } from '@ember/component';
10
+ import templateOnly from '@ember/component/template-only';
11
+ import { LightBulb, Menu, Sun, Moon } from './icons.js';
12
+ import { Hero } from 'ember-primitives/layout/hero';
13
+ import { ExternalLink } from 'ember-primitives/components/external-link';
14
+ import MenuWrapper from 'ember-mobile-menu/components/mobile-menu-wrapper';
15
+ import Component from '@glimmer/component';
16
+ import { on } from '@ember/modifier';
17
+ import { service } from '@ember/service';
18
+ import { sentenceCase } from 'change-case';
19
+ import { link } from 'ember-primitives/helpers';
20
+ import { selected } from 'kolay';
21
+ import { PageNav, Page } from 'kolay/components';
22
+ import { getAnchor } from 'should-handle-link';
23
+ import { g, i } from 'decorator-transforms/runtime';
24
+ import { modifier } from 'ember-modifier';
25
+ import { cell } from 'ember-resources';
26
+ import { Switch } from 'ember-primitives';
27
+ import { colorScheme } from 'ember-primitives/color-scheme';
28
+ import 'ember-mobile-menu/themes/android';
29
+
30
+ /**
31
+ * TODO: use CSS, this is silly.
32
+ */
33
+ const proseClasses = `
34
+ prose prose-slate max-w-none
35
+ dark:prose-invert dark:text-slate-400
36
+ prose-th:table-cell
37
+ prose-headings:inline-block
38
+ prose-headings:scroll-mt-28
39
+ prose-headings:font-display
40
+ prose-headings:font-normal
41
+ lg:prose-headings:scroll-mt-[8.5rem]
42
+ prose-h1:text-3xl
43
+
44
+ prose-lead:text-slate-500
45
+ dark:prose-lead:text-slate-400
46
+
47
+ prose-a:font-semibold
48
+ dark:prose-a:text-sky-400
49
+ prose-a:no-underline
50
+ prose-a:shadow-[inset_0_-2px_0_0_var(--tw-prose-background,#fff),inset_0_calc(-1*(var(--tw-prose-underline-size,2px)+2px))_0_0_var(--tw-prose-underline,theme(colors.sky.300))]
51
+ hover:prose-a:[--tw-prose-underline-size:3px]
52
+ dark:[--tw-prose-background:theme(colors.slate.900)]
53
+ dark:prose-a:shadow-[inset_0_calc(-1*var(--tw-prose-underline-size,2px))_0_0_var(--tw-prose-underline,theme(colors.sky.800))]
54
+ dark:hover:prose-a:[--tw-prose-underline-size:6px]
55
+ prose-pre:rounded-xl prose-pre:bg-slate-900
56
+ prose-pre:shadow-lg
57
+ dark:prose-pre:bg-slate-800/60
58
+ dark:prose-pre:shadow-none
59
+ dark:prose-pre:ring-1
60
+ dark:prose-pre:ring-slate-300/10
61
+ dark:prose-hr:border-slate-800
62
+ dark:prose-code:text-slate-50
63
+ `;
64
+ const Article = setComponentTemplate(precompileTemplate("<article class={{proseClasses}} ...attributes>\n {{yield}}\n</article>", {
65
+ strictMode: true,
66
+ scope: () => ({
67
+ proseClasses
68
+ })
69
+ }), templateOnly());
70
+
71
+ const Callout = setComponentTemplate(precompileTemplate("<div class=\"flex p-6 my-8 rounded-3xl bg-sky-50 dark:bg-slate-800/60 dark:ring-1 dark:ring-slate-300/10\">\n <LightBulb class=\"flex-none w-8 h-8\" />\n <div class=\"flex-auto min-w-0 ml-4\">\n <div class=\"text-sky-800 [--tw-prose-background:theme(colors.sky.50)] prose-a:text-sky-900 dark:text-slate-50 [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\">\n {{yield}}\n </div>\n </div>\n</div>", {
72
+ strictMode: true,
73
+ scope: () => ({
74
+ LightBulb
75
+ })
76
+ }), templateOnly());
77
+
78
+ const OopsError = setComponentTemplate(precompileTemplate("<div data-page-error class=\"dark:text-white text:slate-900\" style=\"border: 1px solid red; padding: 1rem; word-break: break-all;\">\n <h1>Oops!</h1><br />\n {{@error}}\n\n <br />\n <br />\n {{yield}}\n</div>", {
79
+ strictMode: true
80
+ }), templateOnly());
81
+
82
+ const H2 = setComponentTemplate(precompileTemplate("<h2 class=\"text-3xl\">{{yield}}</h2>", {
83
+ strictMode: true
84
+ }), templateOnly());
85
+
86
+ ;
87
+
88
+ const IndexPage = setComponentTemplate(precompileTemplate("<Hero class=\"shadow-xl shadow-slate-900/5 gradient-background\">\n <header class=\"absolute md:sticky right-0 bottom-0 md:top-0 z-50 p-4 flex items-center\">\n {{yield to=\"header\"}}\n </header>\n\n <div class=\"h-full flex flex-col gap-8 justify-center items-center\">\n <div style=\"width: 66%; margin: 0 auto; transform: translateY(-20%);\" class=\"grid gap-4\">\n <h1 style=\"filter: drop-shadow(3px 5px 0px rgba(0, 0, 0, 0.4));\">\n {{yield to=\"logo\"}}\n </h1>\n <p class=\"italic text-white w-full md:w-1/2 mx-auto\">\n {{yield to=\"tagline\"}}\n </p>\n </div>\n {{yield to=\"callToAction\"}}\n </div>\n</Hero>\n\n{{yield to=\"content\"}}\n\n<hr />\n<footer style=\"padding: 3rem; width: 66%;\" class=\"mx-auto gap-12 flex-wrap flex justify-between\">\n {{yield to=\"footer\"}}\n</footer>", {
89
+ strictMode: true,
90
+ scope: () => ({
91
+ Hero
92
+ })
93
+ }), templateOnly());
94
+
95
+ const linkClasses = `
96
+ text-sm font-semibold
97
+ dark:text-sky-400
98
+ no-underline shadow-[inset_0_-2px_0_0_var(--tw-prose-background,#fff),inset_0_calc(-1*(var(--tw-prose-underline-size,4px)+2px))_0_0_var(--tw-prose-underline,theme(colors.sky.300))]
99
+ hover:[--tw-prose-underline-size:6px]
100
+ dark:[--tw-prose-background:theme(colors.slate.900)]
101
+ dark:shadow-[inset_0_calc(-1*var(--tw-prose-underline-size,2px))_0_0_var(--tw-prose-underline,theme(colors.sky.800))]
102
+ dark:hover:[--tw-prose-underline-size:6px]
103
+ `;
104
+ const InternalLink = setComponentTemplate(precompileTemplate("<a class={{linkClasses}} href=\"#\" ...attributes>\n {{yield}}\n</a>", {
105
+ strictMode: true,
106
+ scope: () => ({
107
+ linkClasses
108
+ })
109
+ }), templateOnly());
110
+ const Link = setComponentTemplate(precompileTemplate("<ExternalLink class={{linkClasses}} ...attributes>\n {{yield}}\n</ExternalLink>", {
111
+ strictMode: true,
112
+ scope: () => ({
113
+ ExternalLink,
114
+ linkClasses
115
+ })
116
+ }), templateOnly());
117
+
118
+ function fixWords(text) {
119
+ switch (text.toLowerCase()) {
120
+ case 'ui':
121
+ return 'UI';
122
+ case 'iframe':
123
+ return 'IFrame';
124
+ default:
125
+ return text;
126
+ }
127
+ }
128
+ const joinUrl = (...strs) => {
129
+ const prefix = strs[0]?.startsWith('/') ? '/' : '';
130
+ return prefix + strs.map(s => s.replace(/^\//, '').replace(/\/$/, '')).filter(x => !!x).join('/');
131
+ };
132
+ /**
133
+ * Converts 1-2-hyphenated-thing
134
+ * to
135
+ * Hyphenated Thing
136
+ */
137
+ const titleize = str => {
138
+ return str.split(/-|\s/).filter(Boolean).filter(text => !text.match(/^[\d]+$/)).map(text => `${text[0]?.toLocaleUpperCase()}${text.slice(1, text.length)}`).map(text => fixWords(text)).join(' ').split('.')[0] || '';
139
+ };
140
+ function nameFor(x) {
141
+ if ('componentName' in x) {
142
+ return String(x.componentName);
143
+ }
144
+ const page = x;
145
+ return page.title ? page.title : sentenceCase(page.name);
146
+ }
147
+ const asComponent = str => {
148
+ return `<${str.split('.')[0]?.replaceAll(' ', '')} />`;
149
+ };
150
+ const isComponents = str => str === 'components';
151
+ const SectionLink = setComponentTemplate(precompileTemplate("{{#let (link @href) as |l|}}\n <a href={{@href}} class=\"font-medium font-display\n {{if l.isActive \"text-sky-500\" \"text-slate-900 hover:text-slate-600 dark:text-white dark:hover:text-slate-300\"}}\" {{on \"click\" l.handleClick}} ...attributes>\n {{#if (isComponents @name)}}\n {{asComponent (titleize @name)}}\n {{else}}\n {{titleize @name}}\n {{/if}}\n </a>\n{{/let}}", {
152
+ strictMode: true,
153
+ scope: () => ({
154
+ link,
155
+ on,
156
+ isComponents,
157
+ asComponent,
158
+ titleize
159
+ })
160
+ }), templateOnly());
161
+ const SubSectionLink = setComponentTemplate(precompileTemplate("{{#let (link @href) as |l|}}\n <a href={{@href}} class=\"block w-full before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full\n {{if l.isActive \"font-semibold text-sky-500 before:bg-sky-500\" \"text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300\"}}\" {{on \"click\" l.handleClick}} ...attributes>\n {{#if (isComponents @name)}}\n {{asComponent (titleize @name)}}\n {{else}}\n {{titleize @name}}\n {{/if}}\n </a>\n{{/let}}", {
162
+ strictMode: true,
163
+ scope: () => ({
164
+ link,
165
+ on,
166
+ isComponents,
167
+ asComponent,
168
+ titleize
169
+ })
170
+ }), templateOnly());
171
+ class SideNav extends Component {
172
+ get #selected() {
173
+ return selected(this);
174
+ }
175
+ static {
176
+ g(this.prototype, "router", [service('router')]);
177
+ }
178
+ #router = (i(this, "router"), void 0);
179
+ get humanSelected() {
180
+ const path = this.#selected?.path;
181
+ if (!path) return undefined;
182
+ return path.split('/').filter(Boolean).map(titleize).join(' / ');
183
+ }
184
+ get rootUrl() {
185
+ return this.router.rootURL;
186
+ }
187
+ closeNav = event => {
188
+ if (!getAnchor(event)) return;
189
+ this.args.onClick?.();
190
+ };
191
+ /**
192
+ *
193
+ * This nav needs an aria-label to get around
194
+ * "Ensure landmarks are unique"
195
+ * because some demos render navs, and it's important that those
196
+ * demos are as simple as possible.
197
+ *
198
+ *
199
+ * nav isn't actually made in to an interactive element,
200
+ * it's an event delegation handler.
201
+ * The links themselves remain the actual interactive elements.
202
+ */
203
+ static {
204
+ setComponentTemplate(precompileTemplate("<aside class=\"bg-white dark:bg-slate-900\" ...attributes>\n <PageNav aria-label=\"Main Navigation\">\n <:page as |x|>\n <SubSectionLink @href={{joinUrl this.rootUrl x.page.path}} @name={{nameFor x.page}} {{on \"click\" this.closeNav}} />\n </:page>\n\n <:collection as |x|>\n {{#if x.index}}\n <SectionLink @href={{joinUrl this.rootUrl x.index.page.path}} @name={{titleize x.collection.name}} {{on \"click\" this.closeNav}} />\n {{else}}\n <h2>\n {{titleize x.collection.name}}\n </h2>\n {{/if}}\n </:collection>\n </PageNav>\n</aside>", {
205
+ strictMode: true,
206
+ scope: () => ({
207
+ PageNav,
208
+ SubSectionLink,
209
+ joinUrl,
210
+ nameFor,
211
+ on,
212
+ SectionLink,
213
+ titleize
214
+ })
215
+ }), this);
216
+ }
217
+ }
218
+
219
+ // @ts-expect-error - no types are provided for ember-mobile-menu
220
+
221
+ const Toggle = setComponentTemplate(precompileTemplate("<@toggle>\n <Menu class=\"w-6 h-6 stroke-slate-500\" />\n</@toggle>", {
222
+ strictMode: true,
223
+ scope: () => ({
224
+ Menu
225
+ })
226
+ }), templateOnly());
227
+ const ResponsiveMenuLayout = setComponentTemplate(precompileTemplate("<MenuWrapper as |mmw|>\n <mmw.MobileMenu @mode=\"push\" @maxWidth={{300}} as |mm|>\n <SideNav @onClick={{mm.actions.close}} />\n </mmw.MobileMenu>\n\n <mmw.Content>\n {{yield (component Toggle toggle=mmw.Toggle) to=\"header\"}}\n\n <div class=\"outer-content\">\n <SideNav />\n\n <main class=\"relative grid justify-center flex-auto w-full mx-auto max-w-8xl\">\n {{yield to=\"content\"}}\n </main>\n </div>\n </mmw.Content>\n</MenuWrapper>", {
228
+ strictMode: true,
229
+ scope: () => ({
230
+ MenuWrapper,
231
+ SideNav,
232
+ Toggle
233
+ })
234
+ }), templateOnly());
235
+
236
+ ;
237
+
238
+ function toggleTheme() {
239
+ if (colorScheme.current === 'dark') {
240
+ colorScheme.update('light');
241
+ } else {
242
+ colorScheme.update('dark');
243
+ }
244
+ }
245
+ function isDark() {
246
+ return colorScheme.current === 'dark';
247
+ }
248
+ const ThemeToggle = setComponentTemplate(precompileTemplate("<Switch class=\"site-theme-toggle\" as |s|>\n <s.Control name=\"color-scheme\" checked={{(isDark)}} {{on \"change\" toggleTheme}} />\n <s.Label>\n <span class=\"sr-only\">Toggle between light and dark mode</span>\n {{!--\n \uD83C\uDFB5 It's raining, it's pouring, ... \uD83C\uDFB5\n https://www.youtube.com/watch?v=ll5ykbAumD4\n --}}\n <Moon class=\"fill-sky-400\" />\n <Sun class=\"fill-yellow-400\" />\n <span class=\"ball\"></span>\n </s.Label>\n</Switch>", {
249
+ strictMode: true,
250
+ scope: () => ({
251
+ Switch,
252
+ isDark,
253
+ on,
254
+ toggleTheme,
255
+ Moon,
256
+ Sun
257
+ })
258
+ }), templateOnly());
259
+
260
+ function removeLoader() {
261
+ document.querySelector('#initial-loader')?.remove();
262
+ }
263
+ function resetScroll(..._args) {
264
+ document.querySelector('html')?.scrollTo(0, 0);
265
+ }
266
+ const isScrolled = cell(false);
267
+ const onWindowScroll = modifier(() => {
268
+ function onScroll() {
269
+ isScrolled.current = window.scrollY > 0;
270
+ }
271
+ onScroll();
272
+ window.addEventListener('scroll', onScroll, {
273
+ passive: true
274
+ });
275
+ return () => {
276
+ window.removeEventListener('scroll', onScroll);
277
+ };
278
+ });
279
+ const PageLayout = setComponentTemplate(precompileTemplate("<ResponsiveMenuLayout>\n <:header as |Toggle|>\n <header class=\"sticky top-0 z-50 transition duration-500 shadow-md shadow-slate-900/5 dark:shadow-none bg-white/95\n {{if isScrolled.current \"dark:bg-slate-900/95 dark:backdrop-blur dark:[@supports(backdrop-filter:blur(0))]:bg-slate-900/75\" \"dark:bg-slate-900/95\"}}\" {{onWindowScroll}}>\n <div class=\"outer-content flex flex-none flex-wrap items-center justify-between py-4\">\n <div class=\"flex mr-6 lg:hidden\">\n <Toggle />\n </div>\n <div class=\"relative flex items-center flex-grow basis-0\">\n <a href=\"/\" aria-label=\"Home page\">\n {{yield to=\"logoLink\"}}\n </a>\n </div>\n {{!--\n If we ever have a search bar\n <div class=\"mr-6 -my-5 sm:mr-8 md:mr-0\">\n input here\n </div>\n --}}\n <TopRight>\n {{yield to=\"topRight\"}}\n </TopRight>\n </div>\n </header>\n </:header>\n <:content>\n <section data-main-scroll-container class=\"flex-auto max-w-2xl min-w-0 py-4 lg:max-w-none\">\n <Article>\n <Page>\n <:pending>\n <div class=\"fixed top-12 p-4 rounded z-50 transition border border-slate-800 duration-500 shadow-xl shadow-slate-900/5 bg-white/95 'dark:bg-slate-900/95 dark:backdrop-blur dark:[@supports(backdrop-filter:blur(0))]:bg-slate-900/75'\">\n Loading, Compiling, etc\n </div>\n </:pending>\n\n <:error as |error|>\n <section>\n {{yield error to=\"error\"}}\n </section>\n </:error>\n\n <:success as |prose|>\n <prose />\n {{(removeLoader)}}\n {{!-- this is probably really bad, and anti-patterny\n but ember doesn't have a good way to have libraries\n tie in to the URL without a bunch of setup -- which is maybe fine?\n needs some experimenting -- there is a bit of a disconnect with\n deriving data from the URL, and the timing of the model hooks.\n It might be possible to have an afterModel hook wait until the page is\n compiled.\n (that's why we have async state, because we're compiling, not loading)\n --}}\n {{resetScroll prose}}\n </:success>\n </Page>\n </Article>\n\n {{#if (has-block \"editLink\")}}\n\n <div class=\"flex justify-end pt-6 mt-12 border-t border-slate-200 dark:border-slate-800\">\n\n {{yield EditLink to=\"editLink\"}}\n </div>\n {{/if}}\n </section>\n </:content>\n\n</ResponsiveMenuLayout>", {
280
+ strictMode: true,
281
+ scope: () => ({
282
+ ResponsiveMenuLayout,
283
+ isScrolled,
284
+ onWindowScroll,
285
+ TopRight,
286
+ Article,
287
+ Page,
288
+ removeLoader,
289
+ resetScroll,
290
+ EditLink
291
+ })
292
+ }), templateOnly());
293
+ const EditLink = setComponentTemplate(precompileTemplate("<Link class=\"edit-page flex\" href={{@href}}>\n {{yield}}\n</Link>", {
294
+ strictMode: true,
295
+ scope: () => ({
296
+ Link
297
+ })
298
+ }), templateOnly());
299
+ const TopRight = setComponentTemplate(precompileTemplate("<div class=\"relative flex justify-end gap-6 basis-0 sm:gap-8 md:flex-grow\">\n <ThemeToggle />\n {{yield}}\n</div>", {
300
+ strictMode: true,
301
+ scope: () => ({
302
+ ThemeToggle
303
+ })
304
+ }), templateOnly());
305
+
306
+ ;
307
+
308
+ ;
309
+
310
+ ;
311
+
312
+ ;
313
+
314
+ ;
315
+
316
+ const Shell = setComponentTemplate(precompileTemplate("{{(syncBodyClass)}}\n{{yield}}", {
317
+ strictMode: true,
318
+ scope: () => ({
319
+ syncBodyClass
320
+ })
321
+ }), templateOnly());
322
+ function syncBodyClass() {
323
+ if (colorScheme.isDark) {
324
+ document.body.classList.add('dark');
325
+ document.body.classList.add('theme-dark');
326
+ document.body.classList.remove('theme-light');
327
+ document.body.classList.remove('light');
328
+ } else {
329
+ document.body.classList.remove('theme-dark');
330
+ document.body.classList.remove('dark');
331
+ document.body.classList.add('theme-light');
332
+ document.body.classList.add('light');
333
+ }
334
+ }
335
+
336
+ const Text = setComponentTemplate(precompileTemplate("<span class=\"dark:text-white text:slate-900\">{{yield}}</span>", {
337
+ strictMode: true
338
+ }), templateOnly());
339
+
340
+ export { Article, Callout, H2, IndexPage, InternalLink, Link, OopsError, PageLayout, ResponsiveMenuLayout, Shell, Text, ThemeToggle, TopRight };
12
341
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,9 +1,9 @@
1
1
  .featured-demo .glimdown-render,
2
- .featured-demo [data-repl-output] {
2
+ .featured-demo .repl-sdk__demo {
3
3
  @apply w-full max-w-full p-20 bg-gradient-to-r from-violet-600 to-indigo-600 rounded-xl max-h-80 text-slate-50;
4
4
  }
5
5
 
6
6
  .featured-demo.auto-height .glimdown-render,
7
- .featured-demo.auto-height [data-repl-output] {
7
+ .featured-demo.auto-height .repl-sdk__demo {
8
8
  @apply max-h-none;
9
9
  }
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@universal-ember/docs-support",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "The default blueprint for Embroider v2 addons.",
5
5
  "keywords": [
6
6
  "ember-addon"
7
7
  ],
8
- "repository": "",
8
+ "repository": "https://github.com/universal-ember/ember-primitives",
9
9
  "license": "MIT",
10
- "author": "",
10
+ "author": "nullvoxpopuli",
11
11
  "exports": {
12
12
  ".": {
13
- "types": "./declarations/index.gts.d.ts",
13
+ "types": "./declarations/index.d.ts",
14
14
  "default": "./dist/index.js"
15
15
  },
16
16
  "./tailwind": {
17
17
  "import": "./tailwind.mjs"
18
18
  },
19
19
  "./*": {
20
- "types": "./declarations/*.gts.d.ts",
20
+ "types": "./declarations/*.d.ts",
21
21
  "default": "./dist/*.js"
22
22
  },
23
23
  "./addon-main.js": "./addon-main.cjs"
@@ -33,54 +33,48 @@
33
33
  "addon-main.cjs",
34
34
  "tailwind.mjs",
35
35
  "declarations",
36
- "dist"
36
+ "dist",
37
+ "src"
37
38
  ],
38
39
  "dependencies": {
39
40
  "@embroider/addon-shim": "^1.10.2",
40
- "@fontsource/lexend": "^5.2.5",
41
+ "@fontsource/lexend": "^5.2.11",
41
42
  "@tailwindcss/typography": "^0.5.15",
42
43
  "change-case": "^5.4.4",
43
- "decorator-transforms": "^2.0.0",
44
+ "decorator-transforms": "^2.3.0",
44
45
  "ember-mobile-menu": "^6.0.0",
45
- "ember-modifier": "^4.2.0",
46
- "ember-primitives": "^0.48.0",
47
- "ember-resources": "^7.0.3",
46
+ "ember-modifier": "^4.2.2",
47
+ "ember-resources": "^7.0.7",
48
48
  "inter-ui": "^4.0.2",
49
49
  "kolay": "^3.5.6",
50
50
  "package-up": "^5.0.0",
51
51
  "read-package-up": "^12.0.0",
52
52
  "should-handle-link": "^1.2.2",
53
- "tailwindcss": "^3.0.0"
53
+ "tailwindcss": "^3.4.14",
54
+ "ember-primitives": "0.51.0"
54
55
  },
55
56
  "devDependencies": {
56
- "@babel/core": "^7.24.4",
57
- "@babel/plugin-transform-typescript": "^7.24.4",
58
- "@babel/runtime": "^7.24.4",
59
- "@embroider/addon-dev": "^6.0.1",
57
+ "@babel/core": "^7.28.5",
58
+ "@babel/plugin-transform-typescript": "^7.28.5",
59
+ "@babel/runtime": "^7.28.4",
60
+ "@ember/library-tsconfig": "^2.0.0",
61
+ "@embroider/addon-dev": "^8.2.0",
60
62
  "@glimmer/component": "^2.0.0",
61
- "@glint/core": "unstable",
62
- "@glint/environment-ember-loose": "unstable",
63
- "@glint/environment-ember-template-imports": "unstable",
64
- "@glint/template": "1.5.2",
65
- "@rollup/plugin-babel": "^6.0.4",
66
- "@tsconfig/ember": "^3.0.6",
67
- "@typescript-eslint/eslint-plugin": "^8.13.0",
68
- "@typescript-eslint/parser": "^8.13.0",
63
+ "@glint/ember-tsc": "^1.0.8",
64
+ "@glint/template": "^1.7.3",
65
+ "@glint/tsserver-plugin": "^2.0.8",
66
+ "@nullvoxpopuli/eslint-configs": "^5.5.0",
67
+ "@rollup/plugin-babel": "^6.1.0",
69
68
  "babel-plugin-ember-template-compilation": "^2.2.5",
70
69
  "concurrently": "^9.2.1",
71
70
  "ember-source": "^5.12.0",
72
- "ember-template-lint": "^6.0.0",
73
- "eslint": "^8.56.0",
74
- "eslint-config-prettier": "^9.1.0",
75
- "eslint-plugin-ember": "^12.0.2",
76
- "eslint-plugin-import": "^2.29.1",
77
- "eslint-plugin-n": "^17.3.1",
78
- "eslint-plugin-prettier": "^5.1.3",
79
- "prettier": "^3.2.5",
80
- "prettier-plugin-ember-template-tag": "^2.0.2",
81
- "rollup": "^4.16.4",
71
+ "ember-template-lint": "^7.9.3",
72
+ "eslint": "^9.39.2",
73
+ "prettier": "^3.7.4",
74
+ "prettier-plugin-ember-template-tag": "^2.1.2",
75
+ "rollup": "^4.54.0",
82
76
  "rollup-plugin-copy": "^3.5.0",
83
- "typescript": "^5.4.5"
77
+ "typescript": "^5.9.3"
84
78
  },
85
79
  "publishConfig": {
86
80
  "registry": "https://registry.npmjs.org",
@@ -96,18 +90,15 @@
96
90
  "app-js": {}
97
91
  },
98
92
  "scripts": {
99
- "build": "concurrently 'pnpm:build:*'",
100
- "build:js": "rollup --config",
101
- "build:types": "glint --declaration",
93
+ "build": "rollup --config",
102
94
  "lint": "concurrently 'pnpm:lint:*(!fix)' --names 'lint:'",
103
95
  "lint:fix": "concurrently 'pnpm:lint:*:fix' --names 'fix:'",
104
96
  "lint:hbs": "ember-template-lint . --no-error-on-unmatched-pattern",
105
97
  "lint:hbs:fix": "ember-template-lint . --fix --no-error-on-unmatched-pattern",
106
98
  "lint:js": "eslint . --cache",
107
99
  "lint:js:fix": "eslint . --fix",
108
- "lint:types": "glint",
109
- "start": "concurrently 'pnpm:start:*'",
110
- "start:js": "rollup --config --watch --no-watch.clearScreen",
111
- "start:types": "glint --declaration --watch"
100
+ "lint:types": "ember-tsc --noEmit",
101
+ "dev": "rollup --config --watch --no-watch.clearScreen",
102
+ "start": "rollup --config --watch --no-watch.clearScreen"
112
103
  }
113
104
  }
@@ -1,6 +1,4 @@
1
- import { precompileTemplate } from '@ember/template-compilation';
2
- import { setComponentTemplate } from '@ember/component';
3
- import templateOnly from '@ember/component/template-only';
1
+ import type { TOC } from '@ember/component/template-only';
4
2
 
5
3
  /**
6
4
  * TODO: use CSS, this is silly.
@@ -36,12 +34,9 @@ const proseClasses = `
36
34
  dark:prose-hr:border-slate-800
37
35
  dark:prose-code:text-slate-50
38
36
  `;
39
- const Article = setComponentTemplate(precompileTemplate("\n <article class={{proseClasses}} ...attributes>\n {{yield}}\n </article>\n", {
40
- strictMode: true,
41
- scope: () => ({
42
- proseClasses
43
- })
44
- }), templateOnly());
45
37
 
46
- export { Article };
47
- //# sourceMappingURL=article.js.map
38
+ export const Article: TOC<{ Element: HTMLElement; Blocks: { default: [] } }> = <template>
39
+ <article class={{proseClasses}} ...attributes>
40
+ {{yield}}
41
+ </article>
42
+ </template>;
@@ -0,0 +1,18 @@
1
+ import { LightBulb } from './icons.gts';
2
+
3
+ import type { TOC } from '@ember/component/template-only';
4
+
5
+ export const Callout: TOC<{ Blocks: { default: [] } }> = <template>
6
+ <div
7
+ class="flex p-6 my-8 rounded-3xl bg-sky-50 dark:bg-slate-800/60 dark:ring-1 dark:ring-slate-300/10"
8
+ >
9
+ <LightBulb class="flex-none w-8 h-8" />
10
+ <div class="flex-auto min-w-0 ml-4">
11
+ <div
12
+ class="text-sky-800 [--tw-prose-background:theme(colors.sky.50)] prose-a:text-sky-900 dark:text-slate-50 [&>*:first-child]:mt-0 [&>*:last-child]:mb-0"
13
+ >
14
+ {{yield}}
15
+ </div>
16
+ </div>
17
+ </div>
18
+ </template>;
package/src/errors.gts ADDED
@@ -0,0 +1,19 @@
1
+ import type { TOC } from '@ember/component/template-only';
2
+
3
+ export const OopsError: TOC<{
4
+ Args: { error: string };
5
+ Blocks: { default: [] };
6
+ }> = <template>
7
+ <div
8
+ data-page-error
9
+ class="dark:text-white text:slate-900"
10
+ style="border: 1px solid red; padding: 1rem; word-break: break-all;"
11
+ >
12
+ <h1>Oops!</h1><br />
13
+ {{@error}}
14
+
15
+ <br />
16
+ <br />
17
+ {{yield}}
18
+ </div>
19
+ </template>;
package/src/h2.gts ADDED
@@ -0,0 +1,5 @@
1
+ import type { TOC } from '@ember/component/template-only';
2
+
3
+ export const H2: TOC<{ Blocks: { default: [] } }> = <template>
4
+ <h2 class="text-3xl">{{yield}}</h2>
5
+ </template>;