ember-primitives 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/head.d.ts +27 -0
- package/declarations/load.d.ts +37 -0
- package/dist/head.js +33 -0
- package/dist/head.js.map +1 -0
- package/dist/load.js +42 -0
- package/dist/load.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { TOC } from "@ember/component/template-only";
|
|
2
|
+
export interface Signature {
|
|
3
|
+
Blocks: {
|
|
4
|
+
/**
|
|
5
|
+
* Content to render in to the `<head>` element
|
|
6
|
+
*/
|
|
7
|
+
default: [];
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Utility component to place elements in the document `<head>`
|
|
12
|
+
*
|
|
13
|
+
* When this component is unrendered, its contents will be removed as well.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```js
|
|
17
|
+
* import { InHead } from 'ember-primitives/head';
|
|
18
|
+
*
|
|
19
|
+
* <template>
|
|
20
|
+
* {{#if @useBootstrap}}
|
|
21
|
+
* <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.bundle.min.js"></script>
|
|
22
|
+
* <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css">
|
|
23
|
+
* {{/if}}
|
|
24
|
+
* </template>
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const InHead: TOC<Signature>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ComponentLike } from "@glint/template";
|
|
2
|
+
interface LoadSignature<Expected = {
|
|
3
|
+
Args: any;
|
|
4
|
+
}> {
|
|
5
|
+
Blocks: {
|
|
6
|
+
loading: [];
|
|
7
|
+
error: [
|
|
8
|
+
{
|
|
9
|
+
original: unknown;
|
|
10
|
+
reason: string;
|
|
11
|
+
}
|
|
12
|
+
];
|
|
13
|
+
success?: [component: ComponentLike<Expected>];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Loads a value / promise / function providing state for the lifetime of that value / promise / function.
|
|
18
|
+
*
|
|
19
|
+
* Can be used for manual bundle splitting via await importing components.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```gjs
|
|
23
|
+
* import { load } from 'ember-primitives/load';
|
|
24
|
+
*
|
|
25
|
+
* const Loader = load(() => import('./routes/sub-route'));
|
|
26
|
+
*
|
|
27
|
+
* <template>
|
|
28
|
+
* <Loader>
|
|
29
|
+
* <:loading> ... loading ... </:loading>
|
|
30
|
+
* <:error as |error|> ... error! {{error.reason}} </:error>
|
|
31
|
+
* <:success as |component|> <component /> </:success>
|
|
32
|
+
* </Loader>
|
|
33
|
+
* </template>
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function load<ExpectedSignature, Value>(fn: Value | Promise<Value> | (() => Promise<Value>) | (() => Value)): ComponentLike<LoadSignature<ExpectedSignature>>;
|
|
37
|
+
export {};
|
package/dist/head.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
2
|
+
import { setComponentTemplate } from '@ember/component';
|
|
3
|
+
import templateOnly from '@ember/component/template-only';
|
|
4
|
+
|
|
5
|
+
function getHead() {
|
|
6
|
+
return document.head;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Utility component to place elements in the document `<head>`
|
|
10
|
+
*
|
|
11
|
+
* When this component is unrendered, its contents will be removed as well.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```js
|
|
15
|
+
* import { InHead } from 'ember-primitives/head';
|
|
16
|
+
*
|
|
17
|
+
* <template>
|
|
18
|
+
* {{#if @useBootstrap}}
|
|
19
|
+
* <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.bundle.min.js"></script>
|
|
20
|
+
* <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css">
|
|
21
|
+
* {{/if}}
|
|
22
|
+
* </template>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
const InHead = setComponentTemplate(precompileTemplate("\n {{#in-element (getHead) insertBefore=null}}\n {{yield}}\n {{/in-element}}\n", {
|
|
26
|
+
strictMode: true,
|
|
27
|
+
scope: () => ({
|
|
28
|
+
getHead
|
|
29
|
+
})
|
|
30
|
+
}), templateOnly());
|
|
31
|
+
|
|
32
|
+
export { InHead };
|
|
33
|
+
//# sourceMappingURL=head.js.map
|
package/dist/head.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"head.js","sources":["../src/head.gts"],"sourcesContent":["import type { TOC } from \"@ember/component/template-only\";\n\nexport interface Signature {\n Blocks: {\n /**\n * Content to render in to the `<head>` element\n */\n default: [];\n };\n}\n\nfunction getHead() {\n return document.head;\n}\n\n/**\n * Utility component to place elements in the document `<head>`\n *\n * When this component is unrendered, its contents will be removed as well.\n *\n * @example\n * ```js\n * import { InHead } from 'ember-primitives/head';\n *\n * <template>\n * {{#if @useBootstrap}}\n * <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.bundle.min.js\"></script>\n * <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css\">\n * {{/if}}\n * </template>\n * ```\n */\nexport const InHead: TOC<Signature> = <template>\n {{#in-element (getHead) insertBefore=null}}\n {{yield}}\n {{/in-element}}\n</template>;\n"],"names":["getHead","document","head","InHead","setComponentTemplate","precompileTemplate","strictMode","scope","templateOnly"],"mappings":";;;;AAWA,SAASA,OAAAA,GAAA;EACP,OAAOC,SAASC,IAAI;AACtB;AAEA;;;;;;;;;;;;;;;;AAgBC;MACYC,MAAY,GAAAC,oBAAA,CAAaC,kBAAA,CAAA,qFAAA,EAItC;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;AAAAP,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAQ,YAAA,EAAA;;;;"}
|
package/dist/load.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { setComponentTemplate } from '@ember/component';
|
|
2
|
+
import templateOnly from '@ember/component/template-only';
|
|
3
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
4
|
+
import { getPromiseState } from 'reactiveweb/get-promise-state';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Loads a value / promise / function providing state for the lifetime of that value / promise / function.
|
|
8
|
+
*
|
|
9
|
+
* Can be used for manual bundle splitting via await importing components.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```gjs
|
|
13
|
+
* import { load } from 'ember-primitives/load';
|
|
14
|
+
*
|
|
15
|
+
* const Loader = load(() => import('./routes/sub-route.gts'));
|
|
16
|
+
*
|
|
17
|
+
* <template>
|
|
18
|
+
* <Loader>
|
|
19
|
+
* <:loading> ... loading ... </:loading>
|
|
20
|
+
* <:error as |error|> ... error! {{error.reason}} </:error>
|
|
21
|
+
* <:success as |component|> <component /> </:success>
|
|
22
|
+
* </Loader>
|
|
23
|
+
* </template>
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
function load(fn) {
|
|
27
|
+
return setComponentTemplate(precompileTemplate("{{#let (getPromiseState fn) as |state|}}\n {{#if state.isLoading}}\n {{yield to=\"loading\"}}\n {{else if state.error}}\n {{yield state.error to=\"error\"}}\n {{else if state.resolved}}\n {{#if (has-block \"success\")}}\n {{yield state.resolved to=\"success\"}}\n {{else}}\n <state.component />\n {{/if}}\n {{/if}}\n{{/let}}", {
|
|
28
|
+
strictMode: true,
|
|
29
|
+
/**
|
|
30
|
+
* The old setComponentTemplate + precompileTemplate combo
|
|
31
|
+
* does not allow defining things in this scope object,
|
|
32
|
+
* we _have_ to use the shorthand.
|
|
33
|
+
*/
|
|
34
|
+
scope: () => ({
|
|
35
|
+
fn,
|
|
36
|
+
getPromiseState
|
|
37
|
+
})
|
|
38
|
+
}), templateOnly());
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { load };
|
|
42
|
+
//# sourceMappingURL=load.js.map
|
package/dist/load.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sources":["../src/load.gts"],"sourcesContent":["import { setComponentTemplate } from \"@ember/component\";\nimport templateOnly from \"@ember/component/template-only\";\n// Have to use these until min ember version is like 6.3 or something\nimport { precompileTemplate } from \"@ember/template-compilation\";\n\nimport { getPromiseState } from \"reactiveweb/get-promise-state\";\n\nimport type { ComponentLike } from \"@glint/template\";\n\ninterface LoadSignature<\n Expected = {\n Args: any;\n },\n> {\n Blocks: {\n loading: [];\n error: [\n {\n original: unknown;\n reason: string;\n },\n ];\n success?: [component: ComponentLike<Expected>];\n };\n}\n\n/**\n * Loads a value / promise / function providing state for the lifetime of that value / promise / function.\n *\n * Can be used for manual bundle splitting via await importing components.\n *\n * @example\n * ```gjs\n * import { load } from 'ember-primitives/load';\n *\n * const Loader = load(() => import('./routes/sub-route.gts'));\n *\n * <template>\n * <Loader>\n * <:loading> ... loading ... </:loading>\n * <:error as |error|> ... error! {{error.reason}} </:error>\n * <:success as |component|> <component /> </:success>\n * </Loader>\n * </template>\n * ```\n */\nexport function load<ExpectedSignature, Value>(\n fn: Value | Promise<Value> | (() => Promise<Value>) | (() => Value),\n): ComponentLike<LoadSignature<ExpectedSignature>> {\n return setComponentTemplate(\n precompileTemplate(\n `{{#let (getPromiseState fn) as |state|}}\n {{#if state.isLoading}}\n {{yield to=\"loading\"}}\n {{else if state.error}}\n {{yield state.error to=\"error\"}}\n {{else if state.resolved}}\n {{#if (has-block \"success\")}}\n {{yield state.resolved to=\"success\"}}\n {{else}}\n <state.component />\n {{/if}}\n {{/if}}\n{{/let}}`,\n {\n strictMode: true,\n /**\n * The old setComponentTemplate + precompileTemplate combo\n * does not allow defining things in this scope object,\n * we _have_ to use the shorthand.\n */\n scope: () => ({ fn, getPromiseState }),\n },\n ),\n templateOnly(),\n ) as ComponentLike<LoadSignature<ExpectedSignature>>;\n}\n"],"names":["load","fn","setComponentTemplate","precompileTemplate","strictMode","scope","getPromiseState","templateOnly"],"mappings":";;;;;AA0BA;;;;;;;;;;;;;;;;;;;AAmBC;AACM,SAASA,IAAAA,CACdC,EAAmE,EACtC;EAC7B,OAAOC,oBAAA,CACLC,wXAcE;AACEC,IAAAA,UAAA,EAAY,IAAA;AACZ;;;;;AAKAC,IAAAA,KAAA,EAAAA,OAAA;MAAAJ,EAAA;AAAAK,MAAAA;AAAA,KAAA;AACF,GAAA,CAAA,EAEFC,YAAA,EAAA,CAAA;AAEJ;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ember-primitives",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"description": "Making apps easier to build",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"*.css"
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"decorator-transforms": "^2.3.0",
|
|
25
25
|
"ember-element-helper": "^0.8.8",
|
|
26
26
|
"form-data-utils": "^0.6.0",
|
|
27
|
-
"reactiveweb": "^1.
|
|
27
|
+
"reactiveweb": "^1.8.0",
|
|
28
28
|
"should-handle-link": "^1.2.2",
|
|
29
29
|
"tabster": "^8.5.5",
|
|
30
30
|
"tracked-built-ins": "^4.0.0",
|