forgebook 0.1.4 → 0.1.5

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 (90) hide show
  1. package/README.md +25 -0
  2. package/dist/bin/forgebook/agents.md +5 -0
  3. package/dist/bin/forgebook/forgebook.mjs +12 -2
  4. package/dist/bin/forgebook/forgebook.mjs.map +1 -1
  5. package/dist/bin/forgebook/storyCheckRun.d.ts +10 -0
  6. package/dist/bin/forgebook/storyCheckRun.d.ts.map +1 -1
  7. package/dist/bin/forgebook/storyCheckRun.js +4 -3
  8. package/dist/bin/forgebook/storyCheckRun.js.map +1 -1
  9. package/dist/bin/forgebook/touchWindowRun.d.ts +17 -0
  10. package/dist/bin/forgebook/touchWindowRun.d.ts.map +1 -0
  11. package/dist/bin/forgebook/touchWindowRun.js +21 -0
  12. package/dist/bin/forgebook/touchWindowRun.js.map +1 -0
  13. package/dist/src/catalogue.d.ts +3 -3
  14. package/dist/src/catalogue.d.ts.map +1 -1
  15. package/dist/src/frame/mountFrame.d.ts.map +1 -1
  16. package/dist/src/frame/mountFrame.js +5 -1
  17. package/dist/src/frame/mountFrame.js.map +1 -1
  18. package/dist/src/frame/touchDots.d.ts +32 -0
  19. package/dist/src/frame/touchDots.d.ts.map +1 -0
  20. package/dist/src/frame/touchDots.js +52 -0
  21. package/dist/src/frame/touchDots.js.map +1 -0
  22. package/dist/src/frame/touchEvents.d.ts +66 -0
  23. package/dist/src/frame/touchEvents.d.ts.map +1 -0
  24. package/dist/src/frame/touchEvents.js +152 -0
  25. package/dist/src/frame/touchEvents.js.map +1 -0
  26. package/dist/src/frame/touchGesture.d.ts +80 -0
  27. package/dist/src/frame/touchGesture.d.ts.map +1 -0
  28. package/dist/src/frame/touchGesture.js +87 -0
  29. package/dist/src/frame/touchGesture.js.map +1 -0
  30. package/dist/src/frame/touchLayer.d.ts +7 -0
  31. package/dist/src/frame/touchLayer.d.ts.map +1 -0
  32. package/dist/src/frame/touchLayer.js +399 -0
  33. package/dist/src/frame/touchLayer.js.map +1 -0
  34. package/dist/src/frame/touchScroll.d.ts +51 -0
  35. package/dist/src/frame/touchScroll.d.ts.map +1 -0
  36. package/dist/src/frame/touchScroll.js +137 -0
  37. package/dist/src/frame/touchScroll.js.map +1 -0
  38. package/dist/src/realTouch.d.ts +21 -0
  39. package/dist/src/realTouch.d.ts.map +1 -0
  40. package/dist/src/realTouch.js +16 -0
  41. package/dist/src/realTouch.js.map +1 -0
  42. package/dist/src/shell/ControlRow.d.ts.map +1 -1
  43. package/dist/src/shell/ControlRow.js +4 -1
  44. package/dist/src/shell/ControlRow.js.map +1 -1
  45. package/dist/src/shell/InfoTip.d.ts +23 -0
  46. package/dist/src/shell/InfoTip.d.ts.map +1 -0
  47. package/dist/src/shell/InfoTip.js +51 -0
  48. package/dist/src/shell/InfoTip.js.map +1 -0
  49. package/dist/src/shell/PinnedControl.d.ts.map +1 -1
  50. package/dist/src/shell/PinnedControl.js +2 -1
  51. package/dist/src/shell/PinnedControl.js.map +1 -1
  52. package/dist/src/shell/Shell.d.ts.map +1 -1
  53. package/dist/src/shell/Shell.js +1 -1
  54. package/dist/src/shell/Shell.js.map +1 -1
  55. package/dist/src/shell/ViewMenu.d.ts.map +1 -1
  56. package/dist/src/shell/ViewMenu.js +7 -4
  57. package/dist/src/shell/ViewMenu.js.map +1 -1
  58. package/dist/src/shell/icons.d.ts +1 -0
  59. package/dist/src/shell/icons.d.ts.map +1 -1
  60. package/dist/src/shell/icons.js +1 -0
  61. package/dist/src/shell/icons.js.map +1 -1
  62. package/dist/src/shell/shell.css +50 -1
  63. package/dist/src/shell/strings.d.ts +2 -1
  64. package/dist/src/shell/strings.d.ts.map +1 -1
  65. package/dist/src/shell/strings.js +2 -1
  66. package/dist/src/shell/strings.js.map +1 -1
  67. package/dist/src/switches.d.ts +16 -6
  68. package/dist/src/switches.d.ts.map +1 -1
  69. package/dist/src/switches.js +27 -7
  70. package/dist/src/switches.js.map +1 -1
  71. package/dist/src/viewState.d.ts +3 -1
  72. package/dist/src/viewState.d.ts.map +1 -1
  73. package/dist/src/viewState.js +4 -2
  74. package/dist/src/viewState.js.map +1 -1
  75. package/dist/src/vite/forcedStates.d.ts +6 -2
  76. package/dist/src/vite/forcedStates.d.ts.map +1 -1
  77. package/dist/src/vite/forcedStates.js +20 -4
  78. package/dist/src/vite/forcedStates.js.map +1 -1
  79. package/dist/src/vite/forgebookPlugin.d.ts.map +1 -1
  80. package/dist/src/vite/forgebookPlugin.js +5 -10
  81. package/dist/src/vite/forgebookPlugin.js.map +1 -1
  82. package/dist/src/vite/storyFilesModule.d.ts +16 -0
  83. package/dist/src/vite/storyFilesModule.d.ts.map +1 -1
  84. package/dist/src/vite/storyFilesModule.js +15 -0
  85. package/dist/src/vite/storyFilesModule.js.map +1 -1
  86. package/dist/src/vite/touchMedia.d.ts +35 -0
  87. package/dist/src/vite/touchMedia.d.ts.map +1 -0
  88. package/dist/src/vite/touchMedia.js +187 -0
  89. package/dist/src/vite/touchMedia.js.map +1 -0
  90. package/package.json +5 -1
@@ -0,0 +1,35 @@
1
+ /**
2
+ * The rewrite that lets a story's CSS answer as a phone's while the catalogue simulates touch: the rules under the
3
+ * pointer's media features (`hover`, `any-hover`, `pointer`, `any-pointer`) follow `data-forgebook-touch` on the root.
4
+ *
5
+ * @remarks
6
+ * The computer answers `hover: hover` and `pointer: fine`, and a page cannot change that. So each media rule that asks
7
+ * about the pointer is kept for the computer, its rules scoped to a root without the attribute, and copied once more
8
+ * as a phone would read it (`hover: none`, `pointer: coarse`, the rest of its query kept), its rules scoped to a root
9
+ * with the attribute. The scope is written in `:where()`, so no rule's specificity changes; a selector that starts at
10
+ * the root (`:root`, `html`) takes the condition on the root itself. On a real phone the attribute is never set, so
11
+ * its own media answer as before. The real mouse's `:hover` stops matching while touch is simulated: a finger does
12
+ * not hover (`NOT_UNDER_TOUCH`). Runs only in the catalogue's build, as a Lightning CSS visitor.
13
+ *
14
+ * @module
15
+ */
16
+ import type { Rule, SelectorComponent } from "lightningcss";
17
+ /** The root's attribute the catalogue sets while it simulates touch (`touchSwitch` of `switches.ts`). */
18
+ export declare const TOUCH_ATTRIBUTE = "data-forgebook-touch";
19
+ /**
20
+ * A media rule as the computer and as a simulated phone read it: the rule for the computer, its rules scoped to a
21
+ * root without the attribute, then, when a phone can match it, its copy with the pointer answered as a phone's, its
22
+ * rules scoped to a root with the attribute. A media rule that asks nothing of the pointer is left as it is.
23
+ *
24
+ * @param rule - a media rule.
25
+ */
26
+ export declare const touchMediaRules: (rule: Extract<Rule, {
27
+ type: "media";
28
+ }>) => Rule[] | undefined;
29
+ /**
30
+ * `:where(:not(:root[data-forgebook-touch] *))`: an element outside a root that simulates touch. Written beside the
31
+ * real `:hover` (`forcedStates.ts`), so the mouse's hover stops matching while touch is simulated: a finger does not
32
+ * hover.
33
+ */
34
+ export declare const NOT_UNDER_TOUCH: SelectorComponent;
35
+ //# sourceMappingURL=touchMedia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchMedia.d.ts","sourceRoot":"","sources":["../../../src/vite/touchMedia.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAGV,IAAI,EAEJ,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,yGAAyG;AACzG,eAAO,MAAM,eAAe,yBAAyB,CAAC;AAsJtD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,OAAO,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,KAAG,IAAI,EAAE,GAAG,SAkBjF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,iBAmB7B,CAAC"}
@@ -0,0 +1,187 @@
1
+ /** The root's attribute the catalogue sets while it simulates touch (`touchSwitch` of `switches.ts`). */
2
+ export const TOUCH_ATTRIBUTE = "data-forgebook-touch";
3
+ /** The pointer's media features, and what a phone answers to each. */
4
+ const PHONE_ANSWERS = {
5
+ hover: { value: "none", isPresent: false },
6
+ "any-hover": { value: "none", isPresent: false },
7
+ pointer: { value: "coarse", isPresent: true },
8
+ "any-pointer": { value: "coarse", isPresent: true }
9
+ };
10
+ /**
11
+ * A feature as a phone answers it; another feature stays a condition.
12
+ *
13
+ * @param feature - the feature.
14
+ */
15
+ const phoneFeature = (feature) => {
16
+ if (feature.type === "range" || feature.type === "interval")
17
+ return undefined;
18
+ const answer = PHONE_ANSWERS[feature.name];
19
+ if (answer === undefined)
20
+ return undefined;
21
+ if (feature.type === "boolean")
22
+ return answer.isPresent;
23
+ return feature.value.type === "ident" && feature.value.value === answer.value;
24
+ };
25
+ /**
26
+ * A condition read as a phone would.
27
+ *
28
+ * @param condition - the condition.
29
+ */
30
+ const phoneCondition = (condition) => {
31
+ if (condition.type === "feature")
32
+ return phoneFeature(condition.value) ?? condition;
33
+ if (condition.type === "not") {
34
+ const inner = phoneCondition(condition.value);
35
+ return typeof inner === "boolean" ? !inner : { type: "not", value: inner };
36
+ }
37
+ if (condition.type !== "operation")
38
+ return condition;
39
+ const isAnd = condition.operator === "and";
40
+ const parts = [];
41
+ for (const each of condition.conditions.map(phoneCondition)) {
42
+ // in an "and", false decides and true drops out; in an "or", the other way round
43
+ if (each === !isAnd)
44
+ return !isAnd;
45
+ if (typeof each !== "boolean")
46
+ parts.push(each);
47
+ }
48
+ if (parts.length === 0)
49
+ return isAnd;
50
+ return parts.length === 1 && parts[0] !== undefined ? parts[0] : { ...condition, conditions: parts };
51
+ };
52
+ /**
53
+ * Whether a condition asks about the pointer anywhere.
54
+ *
55
+ * @param condition - the condition.
56
+ */
57
+ const asksPointer = (condition) => {
58
+ if (condition.type === "feature")
59
+ return (condition.value.type !== "range" &&
60
+ condition.value.type !== "interval" &&
61
+ condition.value.name in PHONE_ANSWERS);
62
+ if (condition.type === "not")
63
+ return asksPointer(condition.value);
64
+ return condition.type === "operation" && condition.conditions.some(asksPointer);
65
+ };
66
+ /**
67
+ * The queries a phone reads in a list: each query its pointer features answered; one a phone never matches dropped.
68
+ *
69
+ * @param queries - the media rule's queries.
70
+ * @returns the queries; none when a phone matches none of them.
71
+ */
72
+ const phoneQueries = (queries) => queries.flatMap((query) => {
73
+ if (query.condition === null || query.condition === undefined)
74
+ return [query];
75
+ let reading = phoneCondition(query.condition);
76
+ if (query.qualifier === "not" && typeof reading === "boolean")
77
+ reading = !reading;
78
+ if (reading === false)
79
+ return [];
80
+ return [
81
+ reading === true ? { ...query, qualifier: null, condition: null } : { ...query, condition: reading }
82
+ ];
83
+ });
84
+ /** `[data-forgebook-touch]`. */
85
+ const TOUCH = { type: "attribute", name: TOUCH_ATTRIBUTE };
86
+ /**
87
+ * The root's condition: with the attribute, or without it.
88
+ *
89
+ * @param isTouch - whether touch is simulated.
90
+ */
91
+ const rootCondition = (isTouch) => isTouch ? TOUCH : { type: "pseudo-class", kind: "not", selectors: [[TOUCH]] };
92
+ /**
93
+ * A selector scoped to a root with touch simulated or without: the condition on the root itself when the selector
94
+ * starts there, a descendant of such a root otherwise, in `:where()` either way.
95
+ *
96
+ * @param selector - the selector.
97
+ * @param isTouch - whether touch is simulated.
98
+ */
99
+ const scopedSelector = (selector, isTouch) => {
100
+ const condition = {
101
+ type: "pseudo-class",
102
+ kind: "where",
103
+ selectors: [[rootCondition(isTouch)]]
104
+ };
105
+ const firstCombinator = selector.findIndex((component) => component.type === "combinator");
106
+ const head = firstCombinator === -1 ? selector : selector.slice(0, firstCombinator);
107
+ const isAtRoot = head.some((component) => (component.type === "pseudo-class" && component.kind === "root") ||
108
+ (component.type === "type" && component.name === "html"));
109
+ if (isAtRoot)
110
+ return [...head, condition, ...selector.slice(head.length)];
111
+ const root = {
112
+ type: "pseudo-class",
113
+ kind: "where",
114
+ selectors: [[{ type: "pseudo-class", kind: "root" }, rootCondition(isTouch)]]
115
+ };
116
+ return [root, { type: "combinator", value: "descendant" }, ...selector];
117
+ };
118
+ /**
119
+ * Rules scoped to a root with touch simulated or without, inside the rules that group them (`@supports`, `@layer`,
120
+ * `@container`, another `@media`); a nested rule keeps its own selectors, relative to its scoped parent.
121
+ *
122
+ * @param rules - the rules.
123
+ * @param isTouch - whether touch is simulated.
124
+ */
125
+ const scopedRules = (rules, isTouch) => rules.map((rule) => {
126
+ if (rule.type === "style") {
127
+ return {
128
+ ...rule,
129
+ value: { ...rule.value, selectors: rule.value.selectors.map((each) => scopedSelector(each, isTouch)) }
130
+ };
131
+ }
132
+ if (rule.type === "media" ||
133
+ rule.type === "supports" ||
134
+ rule.type === "container" ||
135
+ rule.type === "layer-block")
136
+ return { ...rule, value: { ...rule.value, rules: scopedRules(rule.value.rules, isTouch) } };
137
+ return rule;
138
+ });
139
+ /**
140
+ * A media rule as the computer and as a simulated phone read it: the rule for the computer, its rules scoped to a
141
+ * root without the attribute, then, when a phone can match it, its copy with the pointer answered as a phone's, its
142
+ * rules scoped to a root with the attribute. A media rule that asks nothing of the pointer is left as it is.
143
+ *
144
+ * @param rule - a media rule.
145
+ */
146
+ export const touchMediaRules = (rule) => {
147
+ const queries = rule.value.query.mediaQueries;
148
+ if (!queries.some((query) => query.condition !== null && query.condition !== undefined && asksPointer(query.condition)))
149
+ return undefined;
150
+ const computer = { ...rule, value: { ...rule.value, rules: scopedRules(rule.value.rules, false) } };
151
+ const phone = phoneQueries(queries);
152
+ if (phone.length === 0)
153
+ return [computer];
154
+ return [
155
+ computer,
156
+ {
157
+ ...rule,
158
+ value: { ...rule.value, query: { mediaQueries: phone }, rules: scopedRules(rule.value.rules, true) }
159
+ }
160
+ ];
161
+ };
162
+ /**
163
+ * `:where(:not(:root[data-forgebook-touch] *))`: an element outside a root that simulates touch. Written beside the
164
+ * real `:hover` (`forcedStates.ts`), so the mouse's hover stops matching while touch is simulated: a finger does not
165
+ * hover.
166
+ */
167
+ export const NOT_UNDER_TOUCH = {
168
+ type: "pseudo-class",
169
+ kind: "where",
170
+ selectors: [
171
+ [
172
+ {
173
+ type: "pseudo-class",
174
+ kind: "not",
175
+ selectors: [
176
+ [
177
+ { type: "pseudo-class", kind: "root" },
178
+ TOUCH,
179
+ { type: "combinator", value: "descendant" },
180
+ { type: "universal" }
181
+ ]
182
+ ]
183
+ }
184
+ ]
185
+ ]
186
+ };
187
+ //# sourceMappingURL=touchMedia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchMedia.js","sourceRoot":"","sources":["../../../src/vite/touchMedia.ts"],"names":[],"mappings":"AAuBA,yGAAyG;AACzG,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAKtD,sEAAsE;AACtE,MAAM,aAAa,GAAsF;IACvG,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;IAC1C,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;IAChD,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;IAC7C,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;CACpD,CAAC;AAKF;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,OAAuC,EAA4B,EAAE;IACzF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC9E,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC;IACxD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;AAChF,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,cAAc,GAAG,CAAC,SAAoB,EAAgB,EAAE;IAC5D,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;IACpF,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC;IAC3C,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5D,iFAAiF;QACjF,IAAI,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC;QACnC,IAAI,OAAO,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACvG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,GAAG,CAAC,SAAoB,EAAW,EAAE;IACpD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;QAC9B,OAAO,CACL,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;YAChC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU;YACnC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,aAAa,CACtC,CAAC;IACJ,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,YAAY,GAAG,CAAC,OAA8B,EAAgB,EAAE,CACpE,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAgB,EAAE;IACtC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAClF,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO;QACL,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE;KACrG,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,gCAAgC;AAChC,MAAM,KAAK,GAAsB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;AAE9E;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAqB,EAAE,CAC5D,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAEhF;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAE,OAAgB,EAAY,EAAE;IACxE,MAAM,SAAS,GAAsB;QACnC,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;KACtC,CAAC;IACF,MAAM,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,CAAC,SAAS,EAAE,EAAE,CACZ,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC;QAChE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAC3D,CAAC;IACF,IAAI,QAAQ;QAAE,OAAO,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAsB;QAC9B,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;KAC9E,CAAC;IACF,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,CAAC,KAAsB,EAAE,OAAgB,EAAU,EAAE,CACvE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAQ,EAAE;IACvB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO;YACL,GAAG,IAAI;YACP,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE;SACvG,CAAC;IACJ,CAAC;IACD,IACE,IAAI,CAAC,IAAI,KAAK,OAAO;QACrB,IAAI,CAAC,IAAI,KAAK,UAAU;QACxB,IAAI,CAAC,IAAI,KAAK,WAAW;QACzB,IAAI,CAAC,IAAI,KAAK,aAAa;QAE3B,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAU,CAAC;IACtG,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAEL;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAsC,EAAsB,EAAE;IAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9C,IACE,CAAC,OAAO,CAAC,IAAI,CACX,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CACrG;QAED,OAAO,SAAS,CAAC;IACnB,MAAM,QAAQ,GAAS,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;IAC1G,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO;QACL,QAAQ;QACR;YACE,GAAG,IAAI;YACP,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;SACrG;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,OAAO;IACb,SAAS,EAAE;QACT;YACE;gBACE,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE;oBACT;wBACE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;wBACtC,KAAK;wBACL,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;wBAC3C,EAAE,IAAI,EAAE,WAAW,EAAE;qBACtB;iBACF;aACF;SACF;KACF;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forgebook",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "See every component in every theme, contrast, language and width: CSF stories, one frame per story, and a props table from the components' types.",
5
5
  "keywords": [
6
6
  "react",
@@ -164,6 +164,10 @@
164
164
  "./spills": {
165
165
  "types": "./dist/src/spills.d.ts",
166
166
  "default": "./dist/src/spills.js"
167
+ },
168
+ "./real-touch": {
169
+ "types": "./dist/src/realTouch.d.ts",
170
+ "default": "./dist/src/realTouch.js"
167
171
  }
168
172
  },
169
173
  "dependencies": {