@universityofmaryland/web-model-library 1.0.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/README.md +138 -0
- package/dist/_types.d.ts +77 -0
- package/dist/_types.d.ts.map +1 -0
- package/dist/_virtual/___vite-browser-external.js +8 -0
- package/dist/_virtual/___vite-browser-external.js.map +1 -0
- package/dist/_virtual/___vite-browser-external.mjs +7 -0
- package/dist/_virtual/___vite-browser-external.mjs.map +1 -0
- package/dist/_virtual/__vite-browser-external.js +4 -0
- package/dist/_virtual/__vite-browser-external.js.map +1 -0
- package/dist/_virtual/__vite-browser-external.mjs +5 -0
- package/dist/_virtual/__vite-browser-external.mjs.map +1 -0
- package/dist/_virtual/_commonjsHelpers.js +37 -0
- package/dist/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/_virtual/_commonjsHelpers.mjs +37 -0
- package/dist/_virtual/_commonjsHelpers.mjs.map +1 -0
- package/dist/_virtual/index.js +7 -0
- package/dist/_virtual/index.js.map +1 -0
- package/dist/_virtual/index.mjs +8 -0
- package/dist/_virtual/index.mjs.map +1 -0
- package/dist/_virtual/picocolors.browser.js +5 -0
- package/dist/_virtual/picocolors.browser.js.map +1 -0
- package/dist/_virtual/picocolors.browser.mjs +5 -0
- package/dist/_virtual/picocolors.browser.mjs.map +1 -0
- package/dist/_virtual/postcss.js +7 -0
- package/dist/_virtual/postcss.js.map +1 -0
- package/dist/_virtual/postcss.mjs +8 -0
- package/dist/_virtual/postcss.mjs.map +1 -0
- package/dist/_virtual/symbols.js +5 -0
- package/dist/_virtual/symbols.js.map +1 -0
- package/dist/_virtual/symbols.mjs +5 -0
- package/dist/_virtual/symbols.mjs.map +1 -0
- package/dist/attributes/checks.d.ts +133 -0
- package/dist/attributes/checks.d.ts.map +1 -0
- package/dist/attributes/checks.js +757 -0
- package/dist/attributes/checks.js.map +1 -0
- package/dist/attributes/checks.mjs +740 -0
- package/dist/attributes/checks.mjs.map +1 -0
- package/dist/attributes/handler.d.ts +52 -0
- package/dist/attributes/handler.d.ts.map +1 -0
- package/dist/attributes/handler.js +205 -0
- package/dist/attributes/handler.js.map +1 -0
- package/dist/attributes/handler.mjs +206 -0
- package/dist/attributes/handler.mjs.map +1 -0
- package/dist/attributes/index.d.ts +7 -0
- package/dist/attributes/index.d.ts.map +1 -0
- package/dist/attributes/names.d.ts +132 -0
- package/dist/attributes/names.d.ts.map +1 -0
- package/dist/attributes/names.js +145 -0
- package/dist/attributes/names.js.map +1 -0
- package/dist/attributes/names.mjs +146 -0
- package/dist/attributes/names.mjs.map +1 -0
- package/dist/attributes/values.d.ts +70 -0
- package/dist/attributes/values.d.ts.map +1 -0
- package/dist/attributes/values.js +80 -0
- package/dist/attributes/values.js.map +1 -0
- package/dist/attributes/values.mjs +81 -0
- package/dist/attributes/values.mjs.map +1 -0
- package/dist/attributes.d.ts +2 -0
- package/dist/attributes.js +23 -0
- package/dist/attributes.js.map +1 -0
- package/dist/attributes.mjs +23 -0
- package/dist/attributes.mjs.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +13 -0
- package/dist/index.mjs.map +1 -0
- package/dist/model/index.d.ts +43 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model.d.ts +2 -0
- package/dist/model.js +259 -0
- package/dist/model.js.map +1 -0
- package/dist/model.mjs +259 -0
- package/dist/model.mjs.map +1 -0
- package/dist/node_modules/nanoid/non-secure/index.js +31 -0
- package/dist/node_modules/nanoid/non-secure/index.js.map +1 -0
- package/dist/node_modules/nanoid/non-secure/index.mjs +31 -0
- package/dist/node_modules/nanoid/non-secure/index.mjs.map +1 -0
- package/dist/node_modules/picocolors/picocolors.browser.js +17 -0
- package/dist/node_modules/picocolors/picocolors.browser.js.map +1 -0
- package/dist/node_modules/picocolors/picocolors.browser.mjs +17 -0
- package/dist/node_modules/picocolors/picocolors.browser.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/at-rule.js +30 -0
- package/dist/node_modules/postcss/lib/at-rule.js.map +1 -0
- package/dist/node_modules/postcss/lib/at-rule.mjs +30 -0
- package/dist/node_modules/postcss/lib/at-rule.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/comment.js +21 -0
- package/dist/node_modules/postcss/lib/comment.js.map +1 -0
- package/dist/node_modules/postcss/lib/comment.mjs +21 -0
- package/dist/node_modules/postcss/lib/comment.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/container.js +383 -0
- package/dist/node_modules/postcss/lib/container.js.map +1 -0
- package/dist/node_modules/postcss/lib/container.mjs +383 -0
- package/dist/node_modules/postcss/lib/container.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/css-syntax-error.js +92 -0
- package/dist/node_modules/postcss/lib/css-syntax-error.js.map +1 -0
- package/dist/node_modules/postcss/lib/css-syntax-error.mjs +92 -0
- package/dist/node_modules/postcss/lib/css-syntax-error.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/declaration.js +27 -0
- package/dist/node_modules/postcss/lib/declaration.js.map +1 -0
- package/dist/node_modules/postcss/lib/declaration.mjs +27 -0
- package/dist/node_modules/postcss/lib/declaration.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/document.js +34 -0
- package/dist/node_modules/postcss/lib/document.js.map +1 -0
- package/dist/node_modules/postcss/lib/document.mjs +34 -0
- package/dist/node_modules/postcss/lib/document.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/fromJSON.js +67 -0
- package/dist/node_modules/postcss/lib/fromJSON.js.map +1 -0
- package/dist/node_modules/postcss/lib/fromJSON.mjs +67 -0
- package/dist/node_modules/postcss/lib/fromJSON.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/input.js +216 -0
- package/dist/node_modules/postcss/lib/input.js.map +1 -0
- package/dist/node_modules/postcss/lib/input.mjs +216 -0
- package/dist/node_modules/postcss/lib/input.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/lazy-result.js +467 -0
- package/dist/node_modules/postcss/lib/lazy-result.js.map +1 -0
- package/dist/node_modules/postcss/lib/lazy-result.mjs +467 -0
- package/dist/node_modules/postcss/lib/lazy-result.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/list.js +60 -0
- package/dist/node_modules/postcss/lib/list.js.map +1 -0
- package/dist/node_modules/postcss/lib/list.mjs +60 -0
- package/dist/node_modules/postcss/lib/list.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/map-generator.js +314 -0
- package/dist/node_modules/postcss/lib/map-generator.js.map +1 -0
- package/dist/node_modules/postcss/lib/map-generator.mjs +314 -0
- package/dist/node_modules/postcss/lib/map-generator.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/no-work-result.js +113 -0
- package/dist/node_modules/postcss/lib/no-work-result.js.map +1 -0
- package/dist/node_modules/postcss/lib/no-work-result.mjs +113 -0
- package/dist/node_modules/postcss/lib/no-work-result.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/node.js +335 -0
- package/dist/node_modules/postcss/lib/node.js.map +1 -0
- package/dist/node_modules/postcss/lib/node.mjs +335 -0
- package/dist/node_modules/postcss/lib/node.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/parse.js +30 -0
- package/dist/node_modules/postcss/lib/parse.js.map +1 -0
- package/dist/node_modules/postcss/lib/parse.mjs +30 -0
- package/dist/node_modules/postcss/lib/parse.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/parser.js +543 -0
- package/dist/node_modules/postcss/lib/parser.js.map +1 -0
- package/dist/node_modules/postcss/lib/parser.mjs +543 -0
- package/dist/node_modules/postcss/lib/parser.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/postcss.js +28 -0
- package/dist/node_modules/postcss/lib/postcss.js.map +1 -0
- package/dist/node_modules/postcss/lib/postcss.mjs +29 -0
- package/dist/node_modules/postcss/lib/postcss.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/postcss2.js +110 -0
- package/dist/node_modules/postcss/lib/postcss2.js.map +1 -0
- package/dist/node_modules/postcss/lib/postcss2.mjs +110 -0
- package/dist/node_modules/postcss/lib/postcss2.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/previous-map.js +123 -0
- package/dist/node_modules/postcss/lib/previous-map.js.map +1 -0
- package/dist/node_modules/postcss/lib/previous-map.mjs +123 -0
- package/dist/node_modules/postcss/lib/previous-map.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/processor.js +61 -0
- package/dist/node_modules/postcss/lib/processor.js.map +1 -0
- package/dist/node_modules/postcss/lib/processor.mjs +61 -0
- package/dist/node_modules/postcss/lib/processor.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/result.js +44 -0
- package/dist/node_modules/postcss/lib/result.js.map +1 -0
- package/dist/node_modules/postcss/lib/result.mjs +44 -0
- package/dist/node_modules/postcss/lib/result.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/root.js +58 -0
- package/dist/node_modules/postcss/lib/root.js.map +1 -0
- package/dist/node_modules/postcss/lib/root.mjs +58 -0
- package/dist/node_modules/postcss/lib/root.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/rule.js +33 -0
- package/dist/node_modules/postcss/lib/rule.js.map +1 -0
- package/dist/node_modules/postcss/lib/rule.mjs +33 -0
- package/dist/node_modules/postcss/lib/rule.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/stringifier.js +308 -0
- package/dist/node_modules/postcss/lib/stringifier.js.map +1 -0
- package/dist/node_modules/postcss/lib/stringifier.mjs +308 -0
- package/dist/node_modules/postcss/lib/stringifier.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/stringify.js +19 -0
- package/dist/node_modules/postcss/lib/stringify.js.map +1 -0
- package/dist/node_modules/postcss/lib/stringify.mjs +19 -0
- package/dist/node_modules/postcss/lib/stringify.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/symbols.js +13 -0
- package/dist/node_modules/postcss/lib/symbols.js.map +1 -0
- package/dist/node_modules/postcss/lib/symbols.mjs +13 -0
- package/dist/node_modules/postcss/lib/symbols.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/tokenize.js +219 -0
- package/dist/node_modules/postcss/lib/tokenize.js.map +1 -0
- package/dist/node_modules/postcss/lib/tokenize.mjs +219 -0
- package/dist/node_modules/postcss/lib/tokenize.mjs.map +1 -0
- package/dist/node_modules/postcss/lib/warning.js +40 -0
- package/dist/node_modules/postcss/lib/warning.js.map +1 -0
- package/dist/node_modules/postcss/lib/warning.mjs +40 -0
- package/dist/node_modules/postcss/lib/warning.mjs.map +1 -0
- package/dist/packages/model/node_modules/postcss-discard-duplicates/src/index.js +130 -0
- package/dist/packages/model/node_modules/postcss-discard-duplicates/src/index.js.map +1 -0
- package/dist/packages/model/node_modules/postcss-discard-duplicates/src/index.mjs +130 -0
- package/dist/packages/model/node_modules/postcss-discard-duplicates/src/index.mjs.map +1 -0
- package/dist/slots/create.d.ts +15 -0
- package/dist/slots/create.d.ts.map +1 -0
- package/dist/slots/create.js +50 -0
- package/dist/slots/create.js.map +1 -0
- package/dist/slots/create.mjs +50 -0
- package/dist/slots/create.mjs.map +1 -0
- package/dist/slots/element.d.ts +3 -0
- package/dist/slots/element.d.ts.map +1 -0
- package/dist/slots/element.js +42 -0
- package/dist/slots/element.js.map +1 -0
- package/dist/slots/element.mjs +42 -0
- package/dist/slots/element.mjs.map +1 -0
- package/dist/slots/extract.d.ts +6 -0
- package/dist/slots/extract.d.ts.map +1 -0
- package/dist/slots/index.d.ts +140 -0
- package/dist/slots/index.d.ts.map +1 -0
- package/dist/slots/mapping.d.ts +82 -0
- package/dist/slots/mapping.d.ts.map +1 -0
- package/dist/slots/mapping.js +97 -0
- package/dist/slots/mapping.js.map +1 -0
- package/dist/slots/mapping.mjs +97 -0
- package/dist/slots/mapping.mjs.map +1 -0
- package/dist/slots/query.d.ts +9 -0
- package/dist/slots/query.d.ts.map +1 -0
- package/dist/slots/validate.d.ts +22 -0
- package/dist/slots/validate.d.ts.map +1 -0
- package/dist/slots.d.ts +6 -0
- package/dist/slots.js +73 -0
- package/dist/slots.js.map +1 -0
- package/dist/slots.mjs +74 -0
- package/dist/slots.mjs.map +1 -0
- package/dist/utilities/index.d.ts +4 -0
- package/dist/utilities/index.d.ts.map +1 -0
- package/dist/utilities/lifecycle.d.ts +12 -0
- package/dist/utilities/lifecycle.d.ts.map +1 -0
- package/dist/utilities/lifecycle.js +21 -0
- package/dist/utilities/lifecycle.js.map +1 -0
- package/dist/utilities/lifecycle.mjs +21 -0
- package/dist/utilities/lifecycle.mjs.map +1 -0
- package/dist/utilities/register.d.ts +17 -0
- package/dist/utilities/register.d.ts.map +1 -0
- package/dist/utilities/register.js +32 -0
- package/dist/utilities/register.js.map +1 -0
- package/dist/utilities/register.mjs +32 -0
- package/dist/utilities/register.mjs.map +1 -0
- package/dist/utilities/styles.d.ts +5 -0
- package/dist/utilities/styles.d.ts.map +1 -0
- package/dist/utilities/styles.js +79 -0
- package/dist/utilities/styles.js.map +1 -0
- package/dist/utilities/styles.mjs +80 -0
- package/dist/utilities/styles.mjs.map +1 -0
- package/dist/utilities.d.ts +2 -0
- package/dist/utilities.js +11 -0
- package/dist/utilities.js.map +1 -0
- package/dist/utilities.mjs +11 -0
- package/dist/utilities.mjs.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const campaign = {
|
|
2
|
+
forward: "forward"
|
|
3
|
+
};
|
|
4
|
+
const data = {
|
|
5
|
+
type: {
|
|
6
|
+
academic: "academic"
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
const display = {
|
|
10
|
+
block: "block",
|
|
11
|
+
feature: "feature",
|
|
12
|
+
featured: "featured",
|
|
13
|
+
hero: "hero",
|
|
14
|
+
image: "image",
|
|
15
|
+
list: "list",
|
|
16
|
+
minimal: "minimal",
|
|
17
|
+
overlay: "overlay",
|
|
18
|
+
promo: "promo",
|
|
19
|
+
short: "short",
|
|
20
|
+
stacked: "stacked",
|
|
21
|
+
standard: "standard",
|
|
22
|
+
statement: "statement",
|
|
23
|
+
sticky: "sticky",
|
|
24
|
+
tabular: "tabular"
|
|
25
|
+
};
|
|
26
|
+
const layout = {
|
|
27
|
+
center: "center",
|
|
28
|
+
defaultCentered: "default-centered",
|
|
29
|
+
defaultInteriorCentered: "default-interior-centered",
|
|
30
|
+
defaultInterior: "default-interior",
|
|
31
|
+
fixed: "fixed",
|
|
32
|
+
fullImage: "full-image",
|
|
33
|
+
full: "full",
|
|
34
|
+
large: "large",
|
|
35
|
+
small: "small",
|
|
36
|
+
left: "left",
|
|
37
|
+
right: "right",
|
|
38
|
+
stackedInterior: "stacked-interior"
|
|
39
|
+
};
|
|
40
|
+
const search = {
|
|
41
|
+
domain: "domain"
|
|
42
|
+
};
|
|
43
|
+
const size = {
|
|
44
|
+
NORMAL: "normal",
|
|
45
|
+
LARGE: "large"
|
|
46
|
+
};
|
|
47
|
+
const state = {
|
|
48
|
+
CLOSED: "closed",
|
|
49
|
+
FALSE: "false",
|
|
50
|
+
OPENED: "open",
|
|
51
|
+
TRUE: "true"
|
|
52
|
+
};
|
|
53
|
+
const theme = {
|
|
54
|
+
DARK: "dark",
|
|
55
|
+
GOLD: "gold",
|
|
56
|
+
LIGHT: "light",
|
|
57
|
+
MARYLAND: "maryland"
|
|
58
|
+
};
|
|
59
|
+
const type = {
|
|
60
|
+
OUTLINE: "outline",
|
|
61
|
+
PRIMARY: "primary",
|
|
62
|
+
SECONDARY: "secondary",
|
|
63
|
+
MEGA: "mega",
|
|
64
|
+
VISUAL: "visual",
|
|
65
|
+
SIMPLE: "simple"
|
|
66
|
+
};
|
|
67
|
+
const AttributeValues = {
|
|
68
|
+
campaign,
|
|
69
|
+
data,
|
|
70
|
+
display,
|
|
71
|
+
layout,
|
|
72
|
+
search,
|
|
73
|
+
size,
|
|
74
|
+
state,
|
|
75
|
+
theme,
|
|
76
|
+
type
|
|
77
|
+
};
|
|
78
|
+
export {
|
|
79
|
+
AttributeValues as default
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=values.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.mjs","sources":["../../source/attributes/values.ts"],"sourcesContent":["// Values\n\nconst campaign = {\n forward: 'forward',\n};\n\nconst data = {\n type: {\n academic: 'academic',\n },\n};\n\nconst display = {\n block: 'block',\n feature: 'feature',\n featured: 'featured',\n hero: 'hero',\n image: 'image',\n list: 'list',\n minimal: 'minimal',\n overlay: 'overlay',\n promo: 'promo',\n short: 'short',\n stacked: 'stacked',\n standard: 'standard',\n statement: 'statement',\n sticky: 'sticky',\n tabular: 'tabular',\n};\n\nconst layout = {\n center: 'center',\n defaultCentered: 'default-centered',\n defaultInteriorCentered: 'default-interior-centered',\n defaultInterior: 'default-interior',\n fixed: 'fixed',\n fullImage: 'full-image',\n full: 'full',\n large: 'large',\n small: 'small',\n left: 'left',\n right: 'right',\n stackedInterior: 'stacked-interior',\n};\n\nconst search = {\n domain: 'domain',\n};\n\nconst size = {\n NORMAL: 'normal',\n LARGE: 'large',\n};\n\nconst state = {\n CLOSED: 'closed',\n FALSE: 'false',\n OPENED: 'open',\n TRUE: 'true',\n};\n\nconst theme = {\n DARK: 'dark',\n GOLD: 'gold',\n LIGHT: 'light',\n MARYLAND: 'maryland',\n};\n\nconst type = {\n OUTLINE: 'outline',\n PRIMARY: 'primary',\n SECONDARY: 'secondary',\n MEGA: 'mega',\n VISUAL: 'visual',\n SIMPLE: 'simple',\n};\n\nconst AttributeValues = {\n campaign,\n data,\n display,\n layout,\n search,\n size,\n state,\n theme,\n type,\n};\n\nexport default AttributeValues;\n"],"names":[],"mappings":"AAEA,MAAM,WAAW;AAAA,EACf,SAAS;AACX;AAEA,MAAM,OAAO;AAAA,EACX,MAAM;AAAA,IACJ,UAAU;AAAA,EAAA;AAEd;AAEA,MAAM,UAAU;AAAA,EACd,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AACX;AAEA,MAAM,SAAS;AAAA,EACb,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,iBAAiB;AACnB;AAEA,MAAM,SAAS;AAAA,EACb,QAAQ;AACV;AAEA,MAAM,OAAO;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,MAAM,QAAQ;AAAA,EACZ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACR;AAEA,MAAM,QAAQ;AAAA,EACZ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AACZ;AAEA,MAAM,OAAO;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV;AAEA,MAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const handler = require("./attributes/handler.js");
|
|
4
|
+
const names = require("./attributes/names.js");
|
|
5
|
+
const values = require("./attributes/values.js");
|
|
6
|
+
const checks = require("./attributes/checks.js");
|
|
7
|
+
exports.handler = handler;
|
|
8
|
+
exports.names = names;
|
|
9
|
+
exports.values = values;
|
|
10
|
+
exports.getValue = checks.getValue;
|
|
11
|
+
exports.hasDecoration = checks.hasDecoration;
|
|
12
|
+
exports.hasInfo = checks.hasInfo;
|
|
13
|
+
exports.includesFeature = checks.includesFeature;
|
|
14
|
+
exports.includesSharing = checks.includesSharing;
|
|
15
|
+
exports.isData = checks.isData;
|
|
16
|
+
exports.isDisplay = checks.isDisplay;
|
|
17
|
+
exports.isInfo = checks.isInfo;
|
|
18
|
+
exports.isLayout = checks.isLayout;
|
|
19
|
+
exports.isSharing = checks.isSharing;
|
|
20
|
+
exports.isTheme = checks.isTheme;
|
|
21
|
+
exports.isType = checks.isType;
|
|
22
|
+
exports.isVisual = checks.isVisual;
|
|
23
|
+
//# sourceMappingURL=attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributes.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { default as default2 } from "./attributes/handler.mjs";
|
|
2
|
+
import { default as default3 } from "./attributes/names.mjs";
|
|
3
|
+
import { default as default4 } from "./attributes/values.mjs";
|
|
4
|
+
import { getValue, hasDecoration, hasInfo, includesFeature, includesSharing, isData, isDisplay, isInfo, isLayout, isSharing, isTheme, isType, isVisual } from "./attributes/checks.mjs";
|
|
5
|
+
export {
|
|
6
|
+
getValue,
|
|
7
|
+
default2 as handler,
|
|
8
|
+
hasDecoration,
|
|
9
|
+
hasInfo,
|
|
10
|
+
includesFeature,
|
|
11
|
+
includesSharing,
|
|
12
|
+
isData,
|
|
13
|
+
isDisplay,
|
|
14
|
+
isInfo,
|
|
15
|
+
isLayout,
|
|
16
|
+
isSharing,
|
|
17
|
+
isTheme,
|
|
18
|
+
isType,
|
|
19
|
+
isVisual,
|
|
20
|
+
default3 as names,
|
|
21
|
+
default4 as values
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=attributes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributes.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { default as Slots, SlotProps } from './slots';
|
|
2
|
+
import { BaseProps, OptionalProps, SlotResult } from './slots/create';
|
|
3
|
+
import * as Attributes from './attributes';
|
|
4
|
+
import * as Model from './model';
|
|
5
|
+
import * as Register from './utilities/register';
|
|
6
|
+
import * as Lifecycle from './utilities/lifecycle';
|
|
7
|
+
export type * from './_types';
|
|
8
|
+
export { Attributes, Model, Register, Slots, Lifecycle };
|
|
9
|
+
export type { SlotProps, BaseProps, OptionalProps, SlotResult };
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AA8DA,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAGxB,mBAAmB,UAAU,CAAC;AAG9B,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAGzD,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const attributes = require("./attributes.js");
|
|
4
|
+
const model = require("./model.js");
|
|
5
|
+
const register = require("./utilities/register.js");
|
|
6
|
+
const slots = require("./slots.js");
|
|
7
|
+
const lifecycle = require("./utilities/lifecycle.js");
|
|
8
|
+
exports.Attributes = attributes;
|
|
9
|
+
exports.Model = model;
|
|
10
|
+
exports.Register = register;
|
|
11
|
+
exports.Slots = slots;
|
|
12
|
+
exports.Lifecycle = lifecycle;
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as attributes from "./attributes.mjs";
|
|
2
|
+
import * as model from "./model.mjs";
|
|
3
|
+
import * as register from "./utilities/register.mjs";
|
|
4
|
+
import { default as default2 } from "./slots.mjs";
|
|
5
|
+
import * as lifecycle from "./utilities/lifecycle.mjs";
|
|
6
|
+
export {
|
|
7
|
+
attributes as Attributes,
|
|
8
|
+
lifecycle as Lifecycle,
|
|
9
|
+
model as Model,
|
|
10
|
+
register as Register,
|
|
11
|
+
default2 as Slots
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SlotConfig, ComponentEventDetail, ElementRef } from '../_types';
|
|
2
|
+
interface AttributeConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
handler: (element: ElementRef, oldValue: string, newValue: string) => void;
|
|
5
|
+
}
|
|
6
|
+
interface ComponentLifecycle {
|
|
7
|
+
beforeConnect?: (ref: ElementRef, shadow: ShadowRoot) => void;
|
|
8
|
+
afterConnect?: (ref: ElementRef, shadow: ShadowRoot) => void;
|
|
9
|
+
onReady?: (ref: ElementRef, shadow: ShadowRoot) => void;
|
|
10
|
+
}
|
|
11
|
+
interface ComponentConfig extends ComponentLifecycle {
|
|
12
|
+
tagName: string;
|
|
13
|
+
attributes?: AttributeConfig[];
|
|
14
|
+
slots?: Record<string, SlotConfig>;
|
|
15
|
+
createComponent: (host: HTMLElement) => ElementRef;
|
|
16
|
+
}
|
|
17
|
+
declare const ComponentConfig: (config: ComponentConfig) => <T extends typeof BaseComponent>(constructor: T) => T;
|
|
18
|
+
declare class BaseComponent extends HTMLElement {
|
|
19
|
+
static componentConfig: ComponentConfig;
|
|
20
|
+
protected shadow: ShadowRoot;
|
|
21
|
+
protected elementRef: ElementRef | null;
|
|
22
|
+
protected config: ComponentConfig;
|
|
23
|
+
constructor();
|
|
24
|
+
static get observedAttributes(): string[];
|
|
25
|
+
connectedCallback(): void;
|
|
26
|
+
disconnectedCallback(): void;
|
|
27
|
+
attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
|
|
28
|
+
protected initializeComponent(): void;
|
|
29
|
+
protected setupShadowDom(component: ElementRef): void;
|
|
30
|
+
protected validateConfig(): void;
|
|
31
|
+
protected afterInit(): Promise<void>;
|
|
32
|
+
protected handleAttributeChange(name: string, oldValue: string, newValue: string): void;
|
|
33
|
+
protected cleanup(): void;
|
|
34
|
+
protected dispatchComponentEvent<T extends ComponentEventDetail>(eventName: string, detail: Omit<T, 'tagName' | 'element' | 'timestamp'>): void;
|
|
35
|
+
protected handleError(message: string, error: unknown): void;
|
|
36
|
+
private validateSlots;
|
|
37
|
+
private executeLifecycleCallbacks;
|
|
38
|
+
private executeCallback;
|
|
39
|
+
getRef(): ElementRef | null;
|
|
40
|
+
}
|
|
41
|
+
declare const createCustomElement: (config: ComponentConfig) => typeof BaseComponent;
|
|
42
|
+
export { createCustomElement, BaseComponent, type ComponentConfig, type AttributeConfig, };
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/model/index.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EAGpB,UAAU,EACX,MAAM,WAAW,CAAC;AAEnB,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5E;AASD,UAAU,kBAAkB;IAC1B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9D,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACzD;AAED,UAAU,eAAgB,SAAQ,kBAAkB;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,eAAe,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,UAAU,CAAC;CACpD;AAGD,QAAA,MAAM,eAAe,GAAI,QAAQ,eAAe,MAC7B,CAAC,SAAS,OAAO,aAAa,EAAE,aAAa,CAAC,MAIhE,CAAC;AAUF,cAAM,aAAc,SAAQ,WAAW;IACrC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC;IAExC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAQ;IAC/C,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC;;IAkBlC,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,iBAAiB,IAAI,IAAI;IAQzB,oBAAoB,IAAI,IAAI;IAI5B,wBAAwB,CACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI;IAUP,SAAS,CAAC,mBAAmB,IAAI,IAAI;IAoBrC,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAOrD,SAAS,CAAC,cAAc,IAAI,IAAI;cAuBhB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAe1C,SAAS,CAAC,qBAAqB,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI;IAYP,SAAS,CAAC,OAAO,IAAI,IAAI;IAOzB,SAAS,CAAC,sBAAsB,CAAC,CAAC,SAAS,oBAAoB,EAC7D,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC,GACnD,IAAI;IAiBP,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAiB5D,OAAO,CAAC,aAAa;YA+DP,yBAAyB;YAYzB,eAAe;IActB,MAAM,IAAI,UAAU,GAAG,IAAI;CAGnC;AAuBD,QAAA,MAAM,mBAAmB,GAAI,QAAQ,eAAe,KAAG,OAAO,aAS7D,CAAC;AAEF,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,CAAC"}
|
package/dist/model.d.ts
ADDED
package/dist/model.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const styles = require("./utilities/styles.js");
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
8
|
+
var __typeError = (msg) => {
|
|
9
|
+
throw TypeError(msg);
|
|
10
|
+
};
|
|
11
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
|
+
var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
|
|
14
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
15
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
16
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
17
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
18
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
19
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
|
|
20
|
+
return value;
|
|
21
|
+
};
|
|
22
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
23
|
+
var it, done, ctx, k = flags & 7, p = false;
|
|
24
|
+
var j = 0;
|
|
25
|
+
var extraInitializers = array[j] || (array[j] = []);
|
|
26
|
+
var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc(target, name));
|
|
27
|
+
__name(target, name);
|
|
28
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
29
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
30
|
+
it = (0, decorators[i])(target, ctx), done._ = 1;
|
|
31
|
+
__expectFn(it) && (target = it);
|
|
32
|
+
}
|
|
33
|
+
return __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
|
|
34
|
+
};
|
|
35
|
+
const ComponentConfig = (config) => {
|
|
36
|
+
return function(constructor) {
|
|
37
|
+
constructor.componentConfig = config;
|
|
38
|
+
return constructor;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
class BaseComponent extends HTMLElement {
|
|
42
|
+
constructor() {
|
|
43
|
+
super();
|
|
44
|
+
this.elementRef = null;
|
|
45
|
+
const constructor = this.constructor;
|
|
46
|
+
this.config = constructor.componentConfig;
|
|
47
|
+
if (!this.config) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
"Component config not found. Did you forget to use the @Component decorator?"
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
this.shadow = this.attachShadow({ mode: "open" });
|
|
53
|
+
this.validateConfig();
|
|
54
|
+
}
|
|
55
|
+
static get observedAttributes() {
|
|
56
|
+
return this.componentConfig?.attributes?.map((attr) => attr.name) || [];
|
|
57
|
+
}
|
|
58
|
+
connectedCallback() {
|
|
59
|
+
try {
|
|
60
|
+
this.initializeComponent();
|
|
61
|
+
} catch (error) {
|
|
62
|
+
this.handleError("Failed to initialize component", error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
disconnectedCallback() {
|
|
66
|
+
this.cleanup();
|
|
67
|
+
}
|
|
68
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
69
|
+
if (oldValue === newValue) return;
|
|
70
|
+
try {
|
|
71
|
+
this.handleAttributeChange(name, oldValue, newValue);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
this.handleError(`Failed to handle attribute change: ${name}`, error);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
initializeComponent() {
|
|
77
|
+
try {
|
|
78
|
+
this.validateSlots();
|
|
79
|
+
const componentRef = this.config.createComponent(this);
|
|
80
|
+
if (!componentRef || !componentRef.element) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
"Component creation failed: Invalid component reference"
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
this.elementRef = componentRef;
|
|
86
|
+
this.setupShadowDom(componentRef);
|
|
87
|
+
this.afterInit();
|
|
88
|
+
} catch (error) {
|
|
89
|
+
this.handleError("Failed to initialize component", error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
setupShadowDom(component) {
|
|
93
|
+
this.shadow.appendChild(
|
|
94
|
+
styles({ styles: component.styles || "" }).content.cloneNode(true)
|
|
95
|
+
);
|
|
96
|
+
this.shadow.appendChild(component.element);
|
|
97
|
+
}
|
|
98
|
+
validateConfig() {
|
|
99
|
+
const requiredFields = [
|
|
100
|
+
"tagName",
|
|
101
|
+
"createComponent"
|
|
102
|
+
];
|
|
103
|
+
requiredFields.forEach((field) => {
|
|
104
|
+
if (!this.config[field]) {
|
|
105
|
+
throw new Error(`Missing required config field: ${field}`);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
if (this.config.attributes) {
|
|
109
|
+
this.config.attributes.forEach((attr) => {
|
|
110
|
+
if (!attr.name || !attr.handler) {
|
|
111
|
+
throw new Error(
|
|
112
|
+
"Invalid attribute config: requires name and handler"
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async afterInit() {
|
|
119
|
+
if (!this.elementRef) {
|
|
120
|
+
this.handleError("Cannot initialize - missing element reference", null);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
await this.executeLifecycleCallbacks();
|
|
124
|
+
this.dispatchComponentEvent("umdComponent:ready", {
|
|
125
|
+
shadowRoot: this.shadow,
|
|
126
|
+
ref: this.elementRef
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
handleAttributeChange(name, oldValue, newValue) {
|
|
130
|
+
if (!this.elementRef) return;
|
|
131
|
+
const handler = this.config.attributes?.find(
|
|
132
|
+
(attr) => attr.name === name
|
|
133
|
+
)?.handler;
|
|
134
|
+
if (handler) {
|
|
135
|
+
handler(this.elementRef, oldValue, newValue);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
cleanup() {
|
|
139
|
+
this.elementRef = null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Helper method to dispatch component events with consistent structure
|
|
143
|
+
*/
|
|
144
|
+
dispatchComponentEvent(eventName, detail) {
|
|
145
|
+
const fullDetail = {
|
|
146
|
+
...detail,
|
|
147
|
+
tagName: this.config.tagName,
|
|
148
|
+
element: this,
|
|
149
|
+
timestamp: Date.now()
|
|
150
|
+
};
|
|
151
|
+
this.dispatchEvent(
|
|
152
|
+
new CustomEvent(eventName, {
|
|
153
|
+
detail: fullDetail,
|
|
154
|
+
bubbles: true,
|
|
155
|
+
composed: true
|
|
156
|
+
})
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
handleError(message, error) {
|
|
160
|
+
console.error(`[${this.config.tagName}]`, message, error);
|
|
161
|
+
const errorType = this.elementRef ? "runtime" : message.toLowerCase().includes("validation") ? "validation" : "initialization";
|
|
162
|
+
this.dispatchComponentEvent("umdComponent:error", {
|
|
163
|
+
type: errorType,
|
|
164
|
+
message,
|
|
165
|
+
details: error
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
validateSlots() {
|
|
169
|
+
if (!this.config.slots) return;
|
|
170
|
+
const errors = [];
|
|
171
|
+
Object.entries(this.config.slots).forEach(([name, config]) => {
|
|
172
|
+
const type = name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`).replace(/^-/, "");
|
|
173
|
+
if (config.required) {
|
|
174
|
+
const slotElement = this.querySelector(`[slot="${type}"]`);
|
|
175
|
+
if (!slotElement) {
|
|
176
|
+
errors.push({
|
|
177
|
+
slot: name,
|
|
178
|
+
error: "missing",
|
|
179
|
+
message: `Required slot "${type}" is missing`
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (config.deprecated) {
|
|
184
|
+
const slotElement = this.querySelector(`[slot="${type}"]`);
|
|
185
|
+
if (slotElement) {
|
|
186
|
+
errors.push({
|
|
187
|
+
slot: name,
|
|
188
|
+
error: "deprecated",
|
|
189
|
+
message: `Slot "${type}" is deprecated. ${config.deprecated}`
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (config.allowedElements) {
|
|
194
|
+
const slotElements = Array.from(
|
|
195
|
+
this.querySelectorAll(`[slot="${type}"]`)
|
|
196
|
+
);
|
|
197
|
+
const invalidElements = slotElements.filter(
|
|
198
|
+
(element) => !config.allowedElements.includes(element.tagName.toLowerCase())
|
|
199
|
+
);
|
|
200
|
+
if (invalidElements.length > 0) {
|
|
201
|
+
errors.push({
|
|
202
|
+
slot: name,
|
|
203
|
+
error: "invalid-elements",
|
|
204
|
+
message: `Slot "${type}" contains invalid elements. Allowed: ${config.allowedElements.join(
|
|
205
|
+
", "
|
|
206
|
+
)}`,
|
|
207
|
+
invalidElements
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
if (errors.length > 0) {
|
|
213
|
+
this.handleError("Slot validation failed", errors);
|
|
214
|
+
errors.forEach((error) => {
|
|
215
|
+
console.warn(`[${this.config.tagName}]`, error.message, error);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async executeLifecycleCallbacks() {
|
|
220
|
+
const lifecycleMethods = [
|
|
221
|
+
"beforeConnect",
|
|
222
|
+
"afterConnect",
|
|
223
|
+
"onReady"
|
|
224
|
+
];
|
|
225
|
+
for (const method of lifecycleMethods) {
|
|
226
|
+
await this.executeCallback(method);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async executeCallback(name) {
|
|
230
|
+
const callback = this.config[name];
|
|
231
|
+
if (!callback) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
await Promise.resolve(callback(this.elementRef, this.shadow));
|
|
236
|
+
} catch (error) {
|
|
237
|
+
this.handleError(`Failed to execute ${name} callback`, error);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
getRef() {
|
|
241
|
+
return this.elementRef;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const createCustomElement = (config) => {
|
|
245
|
+
var _Component_decorators, _init, _a;
|
|
246
|
+
_Component_decorators = [ComponentConfig(config)];
|
|
247
|
+
class Component extends (_a = BaseComponent) {
|
|
248
|
+
constructor() {
|
|
249
|
+
super();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
_init = __decoratorStart(_a);
|
|
253
|
+
Component = __decorateElement(_init, 0, "Component", _Component_decorators, Component);
|
|
254
|
+
__runInitializers(_init, 1, Component);
|
|
255
|
+
return Component;
|
|
256
|
+
};
|
|
257
|
+
exports.BaseComponent = BaseComponent;
|
|
258
|
+
exports.createCustomElement = createCustomElement;
|
|
259
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sources":["../source/model/index.ts"],"sourcesContent":["/**\n * Custom Element Model System\n *\n * Provides a base class and utilities for creating web components with:\n * - Shadow DOM encapsulation\n * - Attribute observation and handling\n * - Slot validation\n * - Lifecycle management\n * - Error handling\n *\n * ## Key Features:\n *\n * 1. **Attribute Handling**: Automatic observation and callback execution\n * 2. **Slot Validation**: Required slots, deprecated warnings, element type checking\n * 3. **Lifecycle Hooks**: beforeConnect, afterConnect, onReady\n * 4. **Error Management**: Centralized error handling with custom events\n *\n * ## Usage:\n * ```typescript\n * const element = createCustomElement({\n * tagName: 'my-component',\n * slots: {\n * headline: { required: true, allowedElements: ['h2', 'h3'] },\n * content: { allowedElements: ['div', 'p'] }\n * },\n * attributes: [{\n * name: 'theme',\n * handler: (ref, oldValue, newValue) => {\n * // Handle theme change\n * }\n * }],\n * createComponent: (host) => {\n * // Create and return component\n * }\n * });\n * ```\n */\nimport StylesTemplate from '../utilities/styles';\nimport type {\n SlotConfig,\n ComponentEventDetail,\n ComponentReadyDetail,\n ComponentErrorDetail,\n ElementRef\n} from '../_types';\n\ninterface AttributeConfig {\n name: string;\n handler: (element: ElementRef, oldValue: string, newValue: string) => void;\n}\n\ninterface SlotValidationError {\n slot: string;\n error: 'missing' | 'deprecated' | 'invalid-elements';\n message: string;\n invalidElements?: Element[];\n}\n\ninterface ComponentLifecycle {\n beforeConnect?: (ref: ElementRef, shadow: ShadowRoot) => void;\n afterConnect?: (ref: ElementRef, shadow: ShadowRoot) => void;\n onReady?: (ref: ElementRef, shadow: ShadowRoot) => void;\n}\n\ninterface ComponentConfig extends ComponentLifecycle {\n tagName: string;\n attributes?: AttributeConfig[];\n slots?: Record<string, SlotConfig>;\n createComponent: (host: HTMLElement) => ElementRef;\n}\n\n// Store the config on the constructor itself\nconst ComponentConfig = (config: ComponentConfig) => {\n return function <T extends typeof BaseComponent>(constructor: T) {\n constructor.componentConfig = config;\n return constructor;\n };\n};\n\n/**\n * Base class for all web components created by the Model system.\n * Extends HTMLElement with shadow DOM support, attribute observation,\n * slot validation, and lifecycle management.\n *\n * @internal This class is not meant to be extended directly.\n * Use `createCustomElement` to create components.\n */\nclass BaseComponent extends HTMLElement {\n static componentConfig: ComponentConfig;\n\n protected shadow: ShadowRoot;\n protected elementRef: ElementRef | null = null;\n protected config: ComponentConfig;\n\n constructor() {\n super();\n\n const constructor = this.constructor as typeof BaseComponent;\n this.config = constructor.componentConfig;\n\n if (!this.config) {\n throw new Error(\n 'Component config not found. Did you forget to use the @Component decorator?',\n );\n }\n\n this.shadow = this.attachShadow({ mode: 'open' });\n this.validateConfig();\n }\n\n static get observedAttributes(): string[] {\n return this.componentConfig?.attributes?.map((attr) => attr.name) || [];\n }\n\n connectedCallback(): void {\n try {\n this.initializeComponent();\n } catch (error) {\n this.handleError('Failed to initialize component', error);\n }\n }\n\n disconnectedCallback(): void {\n this.cleanup();\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string,\n newValue: string,\n ): void {\n if (oldValue === newValue) return;\n\n try {\n this.handleAttributeChange(name, oldValue, newValue);\n } catch (error) {\n this.handleError(`Failed to handle attribute change: ${name}`, error);\n }\n }\n\n protected initializeComponent(): void {\n try {\n this.validateSlots();\n\n const componentRef = this.config.createComponent(this);\n\n if (!componentRef || !componentRef.element) {\n throw new Error(\n 'Component creation failed: Invalid component reference',\n );\n }\n\n this.elementRef = componentRef;\n this.setupShadowDom(componentRef);\n this.afterInit();\n } catch (error) {\n this.handleError('Failed to initialize component', error);\n }\n }\n\n protected setupShadowDom(component: ElementRef): void {\n this.shadow.appendChild(\n StylesTemplate({ styles: component.styles || '' }).content.cloneNode(true),\n );\n this.shadow.appendChild(component.element);\n }\n\n protected validateConfig(): void {\n const requiredFields: (keyof ComponentConfig)[] = [\n 'tagName',\n 'createComponent',\n ];\n\n requiredFields.forEach((field) => {\n if (!this.config[field]) {\n throw new Error(`Missing required config field: ${field}`);\n }\n });\n\n if (this.config.attributes) {\n this.config.attributes.forEach((attr) => {\n if (!attr.name || !attr.handler) {\n throw new Error(\n 'Invalid attribute config: requires name and handler',\n );\n }\n });\n }\n }\n\n protected async afterInit(): Promise<void> {\n if (!this.elementRef) {\n this.handleError('Cannot initialize - missing element reference', null);\n return;\n }\n\n await this.executeLifecycleCallbacks();\n\n // Dispatch umdComponent:ready event after all lifecycle callbacks complete\n this.dispatchComponentEvent<ComponentReadyDetail>('umdComponent:ready', {\n shadowRoot: this.shadow,\n ref: this.elementRef,\n });\n }\n\n protected handleAttributeChange(\n name: string,\n oldValue: string,\n newValue: string,\n ): void {\n if (!this.elementRef) return;\n\n const handler = this.config.attributes?.find(\n (attr) => attr.name === name,\n )?.handler;\n\n if (handler) {\n handler(this.elementRef, oldValue, newValue);\n }\n }\n\n protected cleanup(): void {\n this.elementRef = null;\n }\n\n /**\n * Helper method to dispatch component events with consistent structure\n */\n protected dispatchComponentEvent<T extends ComponentEventDetail>(\n eventName: string,\n detail: Omit<T, 'tagName' | 'element' | 'timestamp'>,\n ): void {\n const fullDetail = {\n ...detail,\n tagName: this.config.tagName,\n element: this,\n timestamp: Date.now(),\n } as unknown as T;\n\n this.dispatchEvent(\n new CustomEvent<T>(eventName, {\n detail: fullDetail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n protected handleError(message: string, error: unknown): void {\n console.error(`[${this.config.tagName}]`, message, error);\n\n // Determine error type based on component state and message\n const errorType = this.elementRef\n ? 'runtime'\n : message.toLowerCase().includes('validation')\n ? 'validation'\n : 'initialization';\n\n this.dispatchComponentEvent<ComponentErrorDetail>('umdComponent:error', {\n type: errorType,\n message,\n details: error,\n });\n }\n\n private validateSlots(): void {\n if (!this.config.slots) return;\n\n const errors: SlotValidationError[] = [];\n\n Object.entries(this.config.slots).forEach(([name, config]) => {\n const type = name\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n .replace(/^-/, '');\n\n if (config.required) {\n const slotElement = this.querySelector(`[slot=\"${type}\"]`);\n if (!slotElement) {\n errors.push({\n slot: name,\n error: 'missing',\n message: `Required slot \"${type}\" is missing`,\n });\n }\n }\n\n if (config.deprecated) {\n const slotElement = this.querySelector(`[slot=\"${type}\"]`);\n if (slotElement) {\n errors.push({\n slot: name,\n error: 'deprecated',\n message: `Slot \"${type}\" is deprecated. ${config.deprecated}`,\n });\n }\n }\n\n if (config.allowedElements) {\n const slotElements = Array.from(\n this.querySelectorAll(`[slot=\"${type}\"]`),\n );\n const invalidElements = slotElements.filter(\n (element) =>\n !config.allowedElements!.includes(element.tagName.toLowerCase()),\n );\n\n if (invalidElements.length > 0) {\n errors.push({\n slot: name,\n error: 'invalid-elements',\n message: `Slot \"${type}\" contains invalid elements. Allowed: ${config.allowedElements.join(\n ', ',\n )}`,\n invalidElements,\n });\n }\n }\n });\n\n if (errors.length > 0) {\n this.handleError('Slot validation failed', errors);\n\n errors.forEach((error) => {\n console.warn(`[${this.config.tagName}]`, error.message, error);\n });\n }\n }\n\n private async executeLifecycleCallbacks(): Promise<void> {\n const lifecycleMethods = [\n 'beforeConnect',\n 'afterConnect',\n 'onReady',\n ] as const;\n\n for (const method of lifecycleMethods) {\n await this.executeCallback(method);\n }\n }\n\n private async executeCallback(name: keyof ComponentLifecycle): Promise<void> {\n const callback = this.config[name];\n\n if (!callback) {\n return;\n }\n\n try {\n await Promise.resolve(callback(this.elementRef!, this.shadow));\n } catch (error) {\n this.handleError(`Failed to execute ${name} callback`, error);\n }\n }\n\n public getRef(): ElementRef | null {\n return this.elementRef;\n }\n}\n\n/**\n * Factory function to create a custom element class.\n *\n * @param config - Component configuration including tagName, slots, attributes, and lifecycle hooks\n * @returns Custom element class that extends BaseComponent\n *\n * @example\n * ```typescript\n * export default () => {\n * Register.registerWebComponent({\n * name: tagName,\n * element: createCustomElement({\n * tagName,\n * slots,\n * attributes,\n * createComponent\n * })\n * });\n * };\n * ```\n */\nconst createCustomElement = (config: ComponentConfig): typeof BaseComponent => {\n @ComponentConfig(config)\n class Component extends BaseComponent {\n constructor() {\n super();\n }\n }\n\n return Component;\n};\n\nexport {\n createCustomElement,\n BaseComponent,\n type ComponentConfig,\n type AttributeConfig,\n};\n"],"names":["StylesTemplate"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA,MAAM,kBAAkB,CAAC,WAA4B;AACnD,SAAO,SAA0C,aAAgB;AAC/D,gBAAY,kBAAkB;AAC9B,WAAO;AAAA,EACT;AACF;AAUA,MAAM,sBAAsB,YAAY;AAAA,EAOtC,cAAc;AACZ,UAAA;AAJF,SAAU,aAAgC;AAMxC,UAAM,cAAc,KAAK;AACzB,SAAK,SAAS,YAAY;AAE1B,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AAEA,SAAK,SAAS,KAAK,aAAa,EAAE,MAAM,QAAQ;AAChD,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,WAAW,qBAA+B;AACxC,WAAO,KAAK,iBAAiB,YAAY,IAAI,CAAC,SAAS,KAAK,IAAI,KAAK,CAAA;AAAA,EACvE;AAAA,EAEA,oBAA0B;AACxB,QAAI;AACF,WAAK,oBAAA;AAAA,IACP,SAAS,OAAO;AACd,WAAK,YAAY,kCAAkC,KAAK;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,uBAA6B;AAC3B,SAAK,QAAA;AAAA,EACP;AAAA,EAEA,yBACE,MACA,UACA,UACM;AACN,QAAI,aAAa,SAAU;AAE3B,QAAI;AACF,WAAK,sBAAsB,MAAM,UAAU,QAAQ;AAAA,IACrD,SAAS,OAAO;AACd,WAAK,YAAY,sCAAsC,IAAI,IAAI,KAAK;AAAA,IACtE;AAAA,EACF;AAAA,EAEU,sBAA4B;AACpC,QAAI;AACF,WAAK,cAAA;AAEL,YAAM,eAAe,KAAK,OAAO,gBAAgB,IAAI;AAErD,UAAI,CAAC,gBAAgB,CAAC,aAAa,SAAS;AAC1C,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAAA,MAEJ;AAEA,WAAK,aAAa;AAClB,WAAK,eAAe,YAAY;AAChC,WAAK,UAAA;AAAA,IACP,SAAS,OAAO;AACd,WAAK,YAAY,kCAAkC,KAAK;AAAA,IAC1D;AAAA,EACF;AAAA,EAEU,eAAe,WAA6B;AACpD,SAAK,OAAO;AAAA,MACVA,OAAe,EAAE,QAAQ,UAAU,UAAU,IAAI,EAAE,QAAQ,UAAU,IAAI;AAAA,IAAA;AAE3E,SAAK,OAAO,YAAY,UAAU,OAAO;AAAA,EAC3C;AAAA,EAEU,iBAAuB;AAC/B,UAAM,iBAA4C;AAAA,MAChD;AAAA,MACA;AAAA,IAAA;AAGF,mBAAe,QAAQ,CAAC,UAAU;AAChC,UAAI,CAAC,KAAK,OAAO,KAAK,GAAG;AACvB,cAAM,IAAI,MAAM,kCAAkC,KAAK,EAAE;AAAA,MAC3D;AAAA,IACF,CAAC;AAED,QAAI,KAAK,OAAO,YAAY;AAC1B,WAAK,OAAO,WAAW,QAAQ,CAAC,SAAS;AACvC,YAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,SAAS;AAC/B,gBAAM,IAAI;AAAA,YACR;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAgB,YAA2B;AACzC,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,YAAY,iDAAiD,IAAI;AACtE;AAAA,IACF;AAEA,UAAM,KAAK,0BAAA;AAGX,SAAK,uBAA6C,sBAAsB;AAAA,MACtE,YAAY,KAAK;AAAA,MACjB,KAAK,KAAK;AAAA,IAAA,CACX;AAAA,EACH;AAAA,EAEU,sBACR,MACA,UACA,UACM;AACN,QAAI,CAAC,KAAK,WAAY;AAEtB,UAAM,UAAU,KAAK,OAAO,YAAY;AAAA,MACtC,CAAC,SAAS,KAAK,SAAS;AAAA,IAAA,GACvB;AAEH,QAAI,SAAS;AACX,cAAQ,KAAK,YAAY,UAAU,QAAQ;AAAA,IAC7C;AAAA,EACF;AAAA,EAEU,UAAgB;AACxB,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKU,uBACR,WACA,QACM;AACN,UAAM,aAAa;AAAA,MACjB,GAAG;AAAA,MACH,SAAS,KAAK,OAAO;AAAA,MACrB,SAAS;AAAA,MACT,WAAW,KAAK,IAAA;AAAA,IAAI;AAGtB,SAAK;AAAA,MACH,IAAI,YAAe,WAAW;AAAA,QAC5B,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAAA,EAEU,YAAY,SAAiB,OAAsB;AAC3D,YAAQ,MAAM,IAAI,KAAK,OAAO,OAAO,KAAK,SAAS,KAAK;AAGxD,UAAM,YAAY,KAAK,aACnB,YACA,QAAQ,cAAc,SAAS,YAAY,IAC3C,eACA;AAEJ,SAAK,uBAA6C,sBAAsB;AAAA,MACtE,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,IAAA,CACV;AAAA,EACH;AAAA,EAEQ,gBAAsB;AAC5B,QAAI,CAAC,KAAK,OAAO,MAAO;AAExB,UAAM,SAAgC,CAAA;AAEtC,WAAO,QAAQ,KAAK,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,MAAM,MAAM;AAC5D,YAAM,OAAO,KACV,QAAQ,UAAU,CAAC,WAAW,IAAI,OAAO,YAAA,CAAa,EAAE,EACxD,QAAQ,MAAM,EAAE;AAEnB,UAAI,OAAO,UAAU;AACnB,cAAM,cAAc,KAAK,cAAc,UAAU,IAAI,IAAI;AACzD,YAAI,CAAC,aAAa;AAChB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,OAAO;AAAA,YACP,SAAS,kBAAkB,IAAI;AAAA,UAAA,CAChC;AAAA,QACH;AAAA,MACF;AAEA,UAAI,OAAO,YAAY;AACrB,cAAM,cAAc,KAAK,cAAc,UAAU,IAAI,IAAI;AACzD,YAAI,aAAa;AACf,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,OAAO;AAAA,YACP,SAAS,SAAS,IAAI,oBAAoB,OAAO,UAAU;AAAA,UAAA,CAC5D;AAAA,QACH;AAAA,MACF;AAEA,UAAI,OAAO,iBAAiB;AAC1B,cAAM,eAAe,MAAM;AAAA,UACzB,KAAK,iBAAiB,UAAU,IAAI,IAAI;AAAA,QAAA;AAE1C,cAAM,kBAAkB,aAAa;AAAA,UACnC,CAAC,YACC,CAAC,OAAO,gBAAiB,SAAS,QAAQ,QAAQ,YAAA,CAAa;AAAA,QAAA;AAGnE,YAAI,gBAAgB,SAAS,GAAG;AAC9B,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,OAAO;AAAA,YACP,SAAS,SAAS,IAAI,yCAAyC,OAAO,gBAAgB;AAAA,cACpF;AAAA,YAAA,CACD;AAAA,YACD;AAAA,UAAA,CACD;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAED,QAAI,OAAO,SAAS,GAAG;AACrB,WAAK,YAAY,0BAA0B,MAAM;AAEjD,aAAO,QAAQ,CAAC,UAAU;AACxB,gBAAQ,KAAK,IAAI,KAAK,OAAO,OAAO,KAAK,MAAM,SAAS,KAAK;AAAA,MAC/D,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAc,4BAA2C;AACvD,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAGF,eAAW,UAAU,kBAAkB;AACrC,YAAM,KAAK,gBAAgB,MAAM;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,MAA+C;AAC3E,UAAM,WAAW,KAAK,OAAO,IAAI;AAEjC,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AAEA,QAAI;AACF,YAAM,QAAQ,QAAQ,SAAS,KAAK,YAAa,KAAK,MAAM,CAAC;AAAA,IAC/D,SAAS,OAAO;AACd,WAAK,YAAY,qBAAqB,IAAI,aAAa,KAAK;AAAA,IAC9D;AAAA,EACF;AAAA,EAEO,SAA4B;AACjC,WAAO,KAAK;AAAA,EACd;AACF;AAuBA,MAAM,sBAAsB,CAAC,WAAkD;AA5X/E,MAAA,uBAAA,OAAA;AA6XE,0BAAA,CAAC,gBAAgB,MAAM,CAAA;AAAA,EACvB,MAAM,mBAAkB,KAAA,eAAc;AAAA,IACpC,cAAc;AACZ,YAAA;AAAA,IACF;AAAA,EAAA;AAHF,UAAA,iBAAA,EAAA;AAAM,cAAN,yCADA,uBACM,SAAA;AAAN,oBAAA,OAAA,GAAM,SAAA;AAMN,SAAO;AACT;;;"}
|