hudini 0.18.1 → 0.20.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 (110) hide show
  1. package/README.md +58 -27
  2. package/dist/components/badge/badge.d.ts +94 -0
  3. package/dist/components/badge/badge.d.ts.map +1 -0
  4. package/dist/components/badge/badge.js +180 -0
  5. package/dist/components/badge/badge.js.map +1 -0
  6. package/dist/components/badge/badge.spec.d.ts +2 -0
  7. package/dist/components/badge/badge.spec.d.ts.map +1 -0
  8. package/dist/components/badge/badge.spec.js +195 -0
  9. package/dist/components/badge/badge.spec.js.map +1 -0
  10. package/dist/components/badge/index.d.ts +2 -0
  11. package/dist/components/badge/index.d.ts.map +1 -0
  12. package/dist/components/badge/index.js +2 -0
  13. package/dist/components/badge/index.js.map +1 -0
  14. package/dist/components/icon-button/icon-button.d.ts +2 -8
  15. package/dist/components/icon-button/icon-button.d.ts.map +1 -1
  16. package/dist/components/icon-button/icon-button.js +10 -86
  17. package/dist/components/icon-button/icon-button.js.map +1 -1
  18. package/dist/components/index.d.ts +1 -4
  19. package/dist/components/index.d.ts.map +1 -1
  20. package/dist/components/index.js +1 -4
  21. package/dist/components/index.js.map +1 -1
  22. package/dist/components/panel/panel.d.ts +8 -8
  23. package/dist/components/panel/panel.d.ts.map +1 -1
  24. package/dist/components/panel/panel.js +29 -30
  25. package/dist/components/panel/panel.js.map +1 -1
  26. package/dist/components/text/text.d.ts +21 -4
  27. package/dist/components/text/text.d.ts.map +1 -1
  28. package/dist/components/text/text.js +14 -14
  29. package/dist/components/text/text.js.map +1 -1
  30. package/dist/components/text-button/text-button.d.ts +9 -18
  31. package/dist/components/text-button/text-button.d.ts.map +1 -1
  32. package/dist/components/text-button/text-button.js +38 -81
  33. package/dist/components/text-button/text-button.js.map +1 -1
  34. package/dist/components/text-button/text-button.spec.js +55 -9
  35. package/dist/components/text-button/text-button.spec.js.map +1 -1
  36. package/dist/hudini.js +2375 -3881
  37. package/dist/hudini.min.js +1 -1
  38. package/dist/loaders/load-fonts.d.ts +29 -0
  39. package/dist/loaders/load-fonts.d.ts.map +1 -1
  40. package/dist/loaders/load-fonts.js +20 -1
  41. package/dist/loaders/load-fonts.js.map +1 -1
  42. package/dist/scene/index.d.ts +1 -0
  43. package/dist/scene/index.d.ts.map +1 -1
  44. package/dist/scene/index.js +1 -0
  45. package/dist/scene/index.js.map +1 -1
  46. package/dist/scene/scene-with-hudini.d.ts +24 -1
  47. package/dist/scene/scene-with-hudini.d.ts.map +1 -1
  48. package/dist/scene/scene-with-hudini.js +24 -1
  49. package/dist/scene/scene-with-hudini.js.map +1 -1
  50. package/dist/scene/with-hudini.d.ts +35 -0
  51. package/dist/scene/with-hudini.d.ts.map +1 -0
  52. package/dist/scene/with-hudini.js +33 -0
  53. package/dist/scene/with-hudini.js.map +1 -0
  54. package/dist/utils/button-style.d.ts +16 -0
  55. package/dist/utils/button-style.d.ts.map +1 -0
  56. package/dist/utils/button-style.js +35 -0
  57. package/dist/utils/button-style.js.map +1 -0
  58. package/dist/utils/index.d.ts +2 -0
  59. package/dist/utils/index.d.ts.map +1 -1
  60. package/dist/utils/index.js +2 -0
  61. package/dist/utils/index.js.map +1 -1
  62. package/dist/utils/number-to-rgb.d.ts +16 -0
  63. package/dist/utils/number-to-rgb.d.ts.map +1 -0
  64. package/dist/utils/number-to-rgb.js +20 -0
  65. package/dist/utils/number-to-rgb.js.map +1 -0
  66. package/package.json +2 -2
  67. package/dist/components/flat-icon-button/flat-icon-button.d.ts +0 -60
  68. package/dist/components/flat-icon-button/flat-icon-button.d.ts.map +0 -1
  69. package/dist/components/flat-icon-button/flat-icon-button.js +0 -279
  70. package/dist/components/flat-icon-button/flat-icon-button.js.map +0 -1
  71. package/dist/components/flat-icon-button/index.d.ts +0 -2
  72. package/dist/components/flat-icon-button/index.d.ts.map +0 -1
  73. package/dist/components/flat-icon-button/index.js +0 -2
  74. package/dist/components/flat-icon-button/index.js.map +0 -1
  75. package/dist/components/flat-section-header/flat-section-header.d.ts +0 -143
  76. package/dist/components/flat-section-header/flat-section-header.d.ts.map +0 -1
  77. package/dist/components/flat-section-header/flat-section-header.js +0 -275
  78. package/dist/components/flat-section-header/flat-section-header.js.map +0 -1
  79. package/dist/components/flat-section-header/flat-section-header.spec.d.ts +0 -2
  80. package/dist/components/flat-section-header/flat-section-header.spec.d.ts.map +0 -1
  81. package/dist/components/flat-section-header/flat-section-header.spec.js +0 -255
  82. package/dist/components/flat-section-header/flat-section-header.spec.js.map +0 -1
  83. package/dist/components/flat-section-header/index.d.ts +0 -2
  84. package/dist/components/flat-section-header/index.d.ts.map +0 -1
  85. package/dist/components/flat-section-header/index.js +0 -2
  86. package/dist/components/flat-section-header/index.js.map +0 -1
  87. package/dist/components/flat-text-button/flat-text-button.d.ts +0 -165
  88. package/dist/components/flat-text-button/flat-text-button.d.ts.map +0 -1
  89. package/dist/components/flat-text-button/flat-text-button.js +0 -325
  90. package/dist/components/flat-text-button/flat-text-button.js.map +0 -1
  91. package/dist/components/flat-text-button/flat-text-button.spec.d.ts +0 -2
  92. package/dist/components/flat-text-button/flat-text-button.spec.d.ts.map +0 -1
  93. package/dist/components/flat-text-button/flat-text-button.spec.js +0 -243
  94. package/dist/components/flat-text-button/flat-text-button.spec.js.map +0 -1
  95. package/dist/components/flat-text-button/index.d.ts +0 -2
  96. package/dist/components/flat-text-button/index.d.ts.map +0 -1
  97. package/dist/components/flat-text-button/index.js +0 -2
  98. package/dist/components/flat-text-button/index.js.map +0 -1
  99. package/dist/components/section-header/index.d.ts +0 -2
  100. package/dist/components/section-header/index.d.ts.map +0 -1
  101. package/dist/components/section-header/index.js +0 -2
  102. package/dist/components/section-header/index.js.map +0 -1
  103. package/dist/components/section-header/section-header.d.ts +0 -149
  104. package/dist/components/section-header/section-header.d.ts.map +0 -1
  105. package/dist/components/section-header/section-header.js +0 -292
  106. package/dist/components/section-header/section-header.js.map +0 -1
  107. package/dist/components/section-header/section-header.spec.d.ts +0 -2
  108. package/dist/components/section-header/section-header.spec.d.ts.map +0 -1
  109. package/dist/components/section-header/section-header.spec.js +0 -264
  110. package/dist/components/section-header/section-header.spec.js.map +0 -1
@@ -1,8 +1,37 @@
1
+ /**
2
+ * Options for {@link loadFonts}.
3
+ *
4
+ * @property fontAwesomeUrl - Optional override for the Font Awesome stylesheet URL.
5
+ * When omitted, `font-awesome-for-phaser` uses its own default.
6
+ * @property baseFont - Stylesheet URL for the base HUD font. Defaults to
7
+ * Google Fonts' Fredoka (variable, weights 300..700).
8
+ * @property baseFontFamily - Font-family name matching the stylesheet above.
9
+ * Must be the exact name the browser knows the font by. Defaults to `'Fredoka'`.
10
+ */
1
11
  type LoadFontsOptions = {
2
12
  fontAwesomeUrl?: string;
3
13
  baseFont?: string;
4
14
  baseFontFamily?: string;
5
15
  };
16
+ /**
17
+ * Loads the fonts Hudini needs at runtime: Font Awesome (for the icon
18
+ * components) and a base HUD font (used by text-based components).
19
+ *
20
+ * By default it pulls Fredoka from Google Fonts. Pass `baseFont` + `baseFontFamily`
21
+ * to swap it for any other web font — just make sure both point to the same
22
+ * font-family name the browser will see.
23
+ *
24
+ * @example
25
+ * // Use the defaults (Font Awesome + Fredoka)
26
+ * await loadFonts();
27
+ *
28
+ * @example
29
+ * // Use a custom base font
30
+ * await loadFonts({
31
+ * baseFont: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap',
32
+ * baseFontFamily: 'Inter',
33
+ * });
34
+ */
6
35
  export declare const loadFonts: (options?: LoadFontsOptions) => Promise<void>;
7
36
  export {};
8
37
  //# sourceMappingURL=load-fonts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-fonts.d.ts","sourceRoot":"","sources":["../../src/loaders/load-fonts.ts"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAiCF,eAAO,MAAM,SAAS,GAAU,UAAU,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAexE,CAAC"}
1
+ {"version":3,"file":"load-fonts.d.ts","sourceRoot":"","sources":["../../src/loaders/load-fonts.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,KAAK,gBAAgB,GAAG;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAiCF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,SAAS,GAAU,UAAU,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAexE,CAAC"}
@@ -26,8 +26,27 @@ const ensureBaseFontReady = async (fontFamily) => {
26
26
  await Promise.all(loads);
27
27
  await document['fonts'].ready;
28
28
  };
29
+ /**
30
+ * Loads the fonts Hudini needs at runtime: Font Awesome (for the icon
31
+ * components) and a base HUD font (used by text-based components).
32
+ *
33
+ * By default it pulls Fredoka from Google Fonts. Pass `baseFont` + `baseFontFamily`
34
+ * to swap it for any other web font — just make sure both point to the same
35
+ * font-family name the browser will see.
36
+ *
37
+ * @example
38
+ * // Use the defaults (Font Awesome + Fredoka)
39
+ * await loadFonts();
40
+ *
41
+ * @example
42
+ * // Use a custom base font
43
+ * await loadFonts({
44
+ * baseFont: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap',
45
+ * baseFontFamily: 'Inter',
46
+ * });
47
+ */
29
48
  export const loadFonts = async (options) => {
30
- const { fontAwesomeUrl, baseFont = 'https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap', baseFontFamily = 'Bebas Neue', } = options ?? {};
49
+ const { fontAwesomeUrl, baseFont = 'https://fonts.googleapis.com/css2?family=Fredoka:wght@300..700&display=swap', baseFontFamily = 'Fredoka', } = options ?? {};
31
50
  try {
32
51
  await loadFontAwesomeForPhaser(fontAwesomeUrl);
33
52
  await loadStylesheet(baseFont);
@@ -1 +1 @@
1
- {"version":3,"file":"load-fonts.js","sourceRoot":"","sources":["../../src/loaders/load-fonts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAQ/E,MAAM,cAAc,GAAG,CAAC,GAAW,EAAiB,EAAE;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;QAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QACnE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,GAAS,EAAE;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,GAAS,EAAE;YACxB,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAAkB,EAAiB,EAAE;IACtE,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,UAAU,GAAG,EAAE,GAAG,CAAC;QACpD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,UAAU,GAAG,EAAE,GAAG,CAAC;KACrD,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,MAAO,QAA2D,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;AACpF,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,OAA0B,EAAiB,EAAE;IAC3E,MAAM,EACJ,cAAc,EACd,QAAQ,GAAG,kEAAkE,EAC7E,cAAc,GAAG,YAAY,GAC9B,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,IAAI,CAAC;QACH,MAAM,wBAAwB,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"load-fonts.js","sourceRoot":"","sources":["../../src/loaders/load-fonts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAkB/E,MAAM,cAAc,GAAG,CAAC,GAAW,EAAiB,EAAE;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;QAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QACnE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,GAAS,EAAE;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,GAAS,EAAE;YACxB,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAAkB,EAAiB,EAAE;IACtE,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,UAAU,GAAG,EAAE,GAAG,CAAC;QACpD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,UAAU,GAAG,EAAE,GAAG,CAAC;KACrD,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,MAAO,QAA2D,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;AACpF,CAAC,CAAC;AAGF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,OAA0B,EAAiB,EAAE;IAC3E,MAAM,EACJ,cAAc,EACd,QAAQ,GAAG,6EAA6E,EACxF,cAAc,GAAG,SAAS,GAC3B,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,IAAI,CAAC;QACH,MAAM,wBAAwB,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;AACH,CAAC,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './scene-with-hudini';
2
+ export * from './with-hudini';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scene/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scene/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './scene-with-hudini';
2
+ export * from './with-hudini';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scene/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scene/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
@@ -1,8 +1,31 @@
1
1
  import { BaseThemeConfig, SceneWithPhaserWind } from 'phaser-wind';
2
2
  import { HudiniPlugin } from '../plugin/plugin';
3
+ /**
4
+ * @deprecated Use {@link withHudini} instead.
5
+ *
6
+ * Forces single inheritance, which conflicts with any user-defined `BaseScene`
7
+ * or other libraries that ship their own scene base class. It also relies on a
8
+ * non-null assertion (`hudini!`) that lies to TypeScript about when the plugin
9
+ * is available — touching `this.hudini` before the plugin mounts throws at
10
+ * runtime.
11
+ *
12
+ * Prefer the `withHudini(scene)` accessor:
13
+ *
14
+ * ```ts
15
+ * import { withHudini } from 'hudini';
16
+ * import type { ThemeType } from './theme';
17
+ *
18
+ * class MyScene extends Phaser.Scene {
19
+ * create() {
20
+ * const hudini = withHudini<ThemeType>(this);
21
+ * }
22
+ * }
23
+ * ```
24
+ *
25
+ * Kept exported to avoid breaking existing consumers.
26
+ */
3
27
  export declare abstract class SceneWithHudini<T extends BaseThemeConfig = BaseThemeConfig> extends SceneWithPhaserWind<T> {
4
28
  /**
5
- *
6
29
  * @param config The scene key or scene specific configuration settings.
7
30
  */
8
31
  constructor(config?: string | Phaser.Types.Scenes.SettingsConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"scene-with-hudini.d.ts","sourceRoot":"","sources":["../../src/scene/scene-with-hudini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,8BAAsB,eAAe,CACnC,CAAC,SAAS,eAAe,GAAG,eAAe,CAC3C,SAAQ,mBAAmB,CAAC,CAAC,CAAC;IAC9B;;;OAGG;gBACS,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc;IAIzD,MAAM,EAAG,YAAY,CAAC,CAAC,CAAC,CAAC;CACjC"}
1
+ {"version":3,"file":"scene-with-hudini.d.ts","sourceRoot":"","sources":["../../src/scene/scene-with-hudini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,8BAAsB,eAAe,CACnC,CAAC,SAAS,eAAe,GAAG,eAAe,CAC3C,SAAQ,mBAAmB,CAAC,CAAC,CAAC;IAC9B;;OAEG;gBACS,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc;IAIzD,MAAM,EAAG,YAAY,CAAC,CAAC,CAAC,CAAC;CACjC"}
@@ -1,7 +1,30 @@
1
1
  import { SceneWithPhaserWind } from 'phaser-wind';
2
+ /**
3
+ * @deprecated Use {@link withHudini} instead.
4
+ *
5
+ * Forces single inheritance, which conflicts with any user-defined `BaseScene`
6
+ * or other libraries that ship their own scene base class. It also relies on a
7
+ * non-null assertion (`hudini!`) that lies to TypeScript about when the plugin
8
+ * is available — touching `this.hudini` before the plugin mounts throws at
9
+ * runtime.
10
+ *
11
+ * Prefer the `withHudini(scene)` accessor:
12
+ *
13
+ * ```ts
14
+ * import { withHudini } from 'hudini';
15
+ * import type { ThemeType } from './theme';
16
+ *
17
+ * class MyScene extends Phaser.Scene {
18
+ * create() {
19
+ * const hudini = withHudini<ThemeType>(this);
20
+ * }
21
+ * }
22
+ * ```
23
+ *
24
+ * Kept exported to avoid breaking existing consumers.
25
+ */
2
26
  export class SceneWithHudini extends SceneWithPhaserWind {
3
27
  /**
4
- *
5
28
  * @param config The scene key or scene specific configuration settings.
6
29
  */
7
30
  constructor(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"scene-with-hudini.js","sourceRoot":"","sources":["../../src/scene/scene-with-hudini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAInE,MAAM,OAAgB,eAEpB,SAAQ,mBAAsB;IAC9B;;;OAGG;IACH,YAAY,MAAoD;QAC9D,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEM,MAAM,CAAmB;CACjC"}
1
+ {"version":3,"file":"scene-with-hudini.js","sourceRoot":"","sources":["../../src/scene/scene-with-hudini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAInE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAgB,eAEpB,SAAQ,mBAAsB;IAC9B;;OAEG;IACH,YAAY,MAAoD;QAC9D,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEM,MAAM,CAAmB;CACjC"}
@@ -0,0 +1,35 @@
1
+ import type { Scene } from 'phaser';
2
+ import type { BaseThemeConfig } from 'phaser-wind';
3
+ import { HudiniPlugin } from '../plugin/plugin';
4
+ /**
5
+ * Accessor for the Hudini plugin from within a Phaser scene.
6
+ *
7
+ * Preferred over {@link SceneWithHudini} (inheritance) and over module
8
+ * augmentation of `Phaser.Scene`, because it:
9
+ * - Composes with any existing base scene (no forced inheritance).
10
+ * - Keeps the theme type explicit at the call site (no silent `any`).
11
+ * - Doesn't rely on non-null assertions that lie about lifecycle.
12
+ *
13
+ * Call it inside `create()` / `update()` (after the plugin has been installed).
14
+ *
15
+ * @typeParam T - The theme config type. Pass your `ThemeType` to get
16
+ * type-narrowed access to your custom tokens (through `hudini.pw`).
17
+ * @param scene - The Phaser scene instance.
18
+ * @returns The Hudini plugin instance bound to the given theme type.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { withHudini } from 'hudini';
23
+ * import type { ThemeType } from './theme';
24
+ *
25
+ * class MyScene extends Phaser.Scene {
26
+ * create() {
27
+ * const hudini = withHudini<ThemeType>(this);
28
+ * const pw = hudini.pw;
29
+ * this.cameras.main.setBackgroundColor(pw.color.rgb('background'));
30
+ * }
31
+ * }
32
+ * ```
33
+ */
34
+ export declare const withHudini: <T extends BaseThemeConfig = BaseThemeConfig>(scene: Scene) => HudiniPlugin<T>;
35
+ //# sourceMappingURL=with-hudini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-hudini.d.ts","sourceRoot":"","sources":["../../src/scene/with-hudini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAc,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,eAAe,GAAG,eAAe,EACpE,OAAO,KAAK,KACX,YAAY,CAAC,CAAC,CAC4C,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { HUDINI_KEY } from '../plugin/plugin';
2
+ /**
3
+ * Accessor for the Hudini plugin from within a Phaser scene.
4
+ *
5
+ * Preferred over {@link SceneWithHudini} (inheritance) and over module
6
+ * augmentation of `Phaser.Scene`, because it:
7
+ * - Composes with any existing base scene (no forced inheritance).
8
+ * - Keeps the theme type explicit at the call site (no silent `any`).
9
+ * - Doesn't rely on non-null assertions that lie about lifecycle.
10
+ *
11
+ * Call it inside `create()` / `update()` (after the plugin has been installed).
12
+ *
13
+ * @typeParam T - The theme config type. Pass your `ThemeType` to get
14
+ * type-narrowed access to your custom tokens (through `hudini.pw`).
15
+ * @param scene - The Phaser scene instance.
16
+ * @returns The Hudini plugin instance bound to the given theme type.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { withHudini } from 'hudini';
21
+ * import type { ThemeType } from './theme';
22
+ *
23
+ * class MyScene extends Phaser.Scene {
24
+ * create() {
25
+ * const hudini = withHudini<ThemeType>(this);
26
+ * const pw = hudini.pw;
27
+ * this.cameras.main.setBackgroundColor(pw.color.rgb('background'));
28
+ * }
29
+ * }
30
+ * ```
31
+ */
32
+ export const withHudini = (scene) => scene.plugins.get(HUDINI_KEY);
33
+ //# sourceMappingURL=with-hudini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-hudini.js","sourceRoot":"","sources":["../../src/scene/with-hudini.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAgB,MAAM,kBAAkB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,KAAY,EACK,EAAE,CACnB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAA+B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Thickness of the outline stroke around a button's text or icon glyph. */
2
+ export declare const BUTTON_STROKE_THICKNESS = 3;
3
+ /**
4
+ * Compute the outline (stroke) color for the text or icon of a button, given
5
+ * the button's own color input.
6
+ *
7
+ * - Palette-based color (family like `'blue'` or a full token like
8
+ * `'blue-500'`): a darker shade in the same palette family via
9
+ * {@link Color.shift}.
10
+ * - Arbitrary CSS color (`'#3B82F6'`, `'rgb(...)'`): soft translucent black.
11
+ *
12
+ * Shared between {@link TextButton} and {@link IconButton} so both render
13
+ * with the same outline style.
14
+ */
15
+ export declare const getButtonStrokeColor: (colorInput: string) => string;
16
+ //# sourceMappingURL=button-style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-style.d.ts","sourceRoot":"","sources":["../../src/utils/button-style.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAkBzC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,GAAI,YAAY,MAAM,KAAG,MAMzD,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { Color, isColorKey, Opacity } from 'phaser-wind';
2
+ /** Thickness of the outline stroke around a button's text or icon glyph. */
3
+ export const BUTTON_STROKE_THICKNESS = 3;
4
+ /**
5
+ * Amount added to the palette shade to derive the button's stroke color.
6
+ * `blue-500` + 400 → `blue-900` — a darker outline that still lives in the
7
+ * same palette family, so it never clashes with the fill.
8
+ */
9
+ const STROKE_DARKER_SHIFT = 400;
10
+ /**
11
+ * Opacity token used for the fallback stroke when the button color isn't a
12
+ * palette reference. Solid black chapado is too harsh against many fills;
13
+ * ~60% translucent black keeps the outline readable while blending in.
14
+ */
15
+ const FALLBACK_STROKE_OPACITY_KEY = '60';
16
+ const blackWithAlpha = (alpha) => `rgba(0, 0, 0, ${alpha})`;
17
+ /**
18
+ * Compute the outline (stroke) color for the text or icon of a button, given
19
+ * the button's own color input.
20
+ *
21
+ * - Palette-based color (family like `'blue'` or a full token like
22
+ * `'blue-500'`): a darker shade in the same palette family via
23
+ * {@link Color.shift}.
24
+ * - Arbitrary CSS color (`'#3B82F6'`, `'rgb(...)'`): soft translucent black.
25
+ *
26
+ * Shared between {@link TextButton} and {@link IconButton} so both render
27
+ * with the same outline style.
28
+ */
29
+ export const getButtonStrokeColor = (colorInput) => {
30
+ const isPaletteColor = isColorKey(colorInput) || Color.isValidColorToken(colorInput);
31
+ return isPaletteColor
32
+ ? Color.rgb(Color.shift(colorInput, STROKE_DARKER_SHIFT))
33
+ : blackWithAlpha(Opacity.value(FALLBACK_STROKE_OPACITY_KEY));
34
+ };
35
+ //# sourceMappingURL=button-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-style.js","sourceRoot":"","sources":["../../src/utils/button-style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAC;AAExE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;;GAIG;AACH,MAAM,2BAA2B,GAAG,IAAa,CAAC;AAElD,MAAM,cAAc,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,iBAAiB,KAAK,GAAG,CAAC;AAE5E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAkB,EAAU,EAAE;IACjE,MAAM,cAAc,GAClB,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAChE,OAAO,cAAc;QACnB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAsB,EAAE,mBAAmB,CAAC,CAAC;QACrE,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC"}
@@ -1,4 +1,6 @@
1
+ export * from './button-style';
1
2
  export * from './color-variants';
2
3
  export * from './get-hudini';
3
4
  export * from './get-pw-from-scene';
5
+ export * from './number-to-rgb';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
@@ -1,4 +1,6 @@
1
+ export * from './button-style';
1
2
  export * from './color-variants';
2
3
  export * from './get-hudini';
3
4
  export * from './get-pw-from-scene';
5
+ export * from './number-to-rgb';
4
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Convert a `0xRRGGBB` color number into a CSS `rgb(r, g, b)` string.
3
+ *
4
+ * Handy when a numeric Phaser color (e.g. produced by `pw.color.hex(...)` or
5
+ * `getColorVariant(...)`) needs to feed a `Phaser.GameObjects.Text` style
6
+ * field like `color`, `stroke` or `shadow.color`, which expect strings.
7
+ *
8
+ * @param color - Color as a 24-bit integer (`0xRRGGBB`).
9
+ * @returns CSS `rgb(r, g, b)` string.
10
+ *
11
+ * @example
12
+ * const dark = getColorVariant('blue-500', 400, 0); // number
13
+ * text.setStroke(numberToRgb(dark), 3);
14
+ */
15
+ export declare const numberToRgb: (color: number) => string;
16
+ //# sourceMappingURL=number-to-rgb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-to-rgb.d.ts","sourceRoot":"","sources":["../../src/utils/number-to-rgb.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAG3C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import Phaser from 'phaser';
2
+ /**
3
+ * Convert a `0xRRGGBB` color number into a CSS `rgb(r, g, b)` string.
4
+ *
5
+ * Handy when a numeric Phaser color (e.g. produced by `pw.color.hex(...)` or
6
+ * `getColorVariant(...)`) needs to feed a `Phaser.GameObjects.Text` style
7
+ * field like `color`, `stroke` or `shadow.color`, which expect strings.
8
+ *
9
+ * @param color - Color as a 24-bit integer (`0xRRGGBB`).
10
+ * @returns CSS `rgb(r, g, b)` string.
11
+ *
12
+ * @example
13
+ * const dark = getColorVariant('blue-500', 400, 0); // number
14
+ * text.setStroke(numberToRgb(dark), 3);
15
+ */
16
+ export const numberToRgb = (color) => {
17
+ const c = Phaser.Display.Color.ValueToColor(color);
18
+ return `rgb(${c.red}, ${c.green}, ${c.blue})`;
19
+ };
20
+ //# sourceMappingURL=number-to-rgb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-to-rgb.js","sourceRoot":"","sources":["../../src/utils/number-to-rgb.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;AAChD,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hudini",
3
- "version": "0.18.1",
3
+ "version": "0.20.0",
4
4
  "description": "🎩 Magical Phaser UI components - Reusable HUD elements for game development. Is magic, like a wizard",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -62,7 +62,7 @@
62
62
  "vitest": "^3.2.4"
63
63
  },
64
64
  "dependencies": {
65
- "phaser-wind": "0.9.1",
65
+ "phaser-wind": "0.11.0",
66
66
  "font-awesome-for-phaser": "0.10.0"
67
67
  },
68
68
  "peerDependencies": {
@@ -1,60 +0,0 @@
1
- import { IconText, type IconKey, type IconStyle } from 'font-awesome-for-phaser';
2
- import { GameObjects, Scene } from 'phaser';
3
- import { type ColorKey, type FontSizeKey } from 'phaser-wind';
4
- export type FlatIconButtonParams = {
5
- scene: Scene;
6
- x: number;
7
- y: number;
8
- icon: IconKey;
9
- iconStyle?: IconStyle;
10
- size?: FontSizeKey | number;
11
- backgroundColor?: ColorKey | string;
12
- iconColor?: ColorKey | string;
13
- onClick?: () => void;
14
- borderRadius?: string | number;
15
- backgroundOpacity?: number;
16
- iconOpacity?: number;
17
- };
18
- export declare class FlatIconButton extends GameObjects.Container {
19
- backgroundSprite: GameObjects.Sprite;
20
- whiteBorderSprite: GameObjects.Sprite;
21
- iconText: IconText;
22
- private pw;
23
- private baseSizePx;
24
- private borderRadiusPx;
25
- private backgroundColorValue;
26
- private iconColorValue;
27
- private backgroundOpacityValue;
28
- private iconOpacityValue;
29
- constructor({ scene, x, y, icon, iconStyle, size, backgroundColor, iconColor, onClick, borderRadius, backgroundOpacity, iconOpacity, }: FlatIconButtonParams);
30
- setBackgroundColor(color: ColorKey | string): this;
31
- setIconColor(color: ColorKey | string): this;
32
- setBackgroundOpacity(opacity: number): this;
33
- setIconOpacity(opacity: number): this;
34
- setBorderRadius(borderRadius: string | number): this;
35
- setIcon(icon: IconKey, opts?: {
36
- iconStyle?: IconStyle;
37
- }): this;
38
- setButtonSize(size: FontSizeKey | number): this;
39
- private updateSize;
40
- private createWhiteBorderSprite;
41
- private createBackgroundSprite;
42
- private regenerateBackgroundTexture;
43
- private createWhiteBorderTexture;
44
- private createBackgroundTexture;
45
- private createIconText;
46
- private setupContainer;
47
- private setupInteractivity;
48
- /**
49
- * Gets the interactive sprite of the icon button
50
- * @returns The interactive sprite
51
- */
52
- get interactive(): Pick<GameObjects.Sprite, 'on' | 'off' | 'setInteractive' | 'setInteractive' | 'once'>;
53
- /**
54
- * Gets the bounds of the flat icon button for layout calculations
55
- * @param output Optional rectangle to store the result
56
- * @returns Rectangle with the button bounds
57
- */
58
- getBounds(output?: Phaser.Geom.Rectangle): Phaser.Geom.Rectangle;
59
- }
60
- //# sourceMappingURL=flat-icon-button.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flat-icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/flat-icon-button/flat-icon-button.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,KAAK,OAAO,EACZ,KAAK,SAAS,EACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAIrB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA4BF,qBAAa,cAAe,SAAQ,WAAW,CAAC,SAAS;IAChD,gBAAgB,EAAG,WAAW,CAAC,MAAM,CAAC;IACtC,iBAAiB,EAAG,WAAW,CAAC,MAAM,CAAC;IACvC,QAAQ,EAAG,QAAQ,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAuB;IAEjC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,gBAAgB,CAAK;gBAEjB,EACV,KAAK,EACL,CAAC,EACD,CAAC,EACD,IAAI,EACJ,SAAmB,EACnB,IAAI,EACJ,eAA4B,EAC5B,SAAmB,EACnB,OAAO,EACP,YAAmB,EACnB,iBAAqB,EACrB,WAAe,GAChB,EAAE,oBAAoB;IA6BhB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAMlD,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAQ5C,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOrC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBpD,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI;IAK9D,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI;IAiBtD,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,wBAAwB;IA8BhC,OAAO,CAAC,uBAAuB;IAsC/B,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,kBAAkB;IA+C1B;;;OAGG;IACH,IAAW,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,MAAM,CAAC,CAQ9G;IAED;;;;OAIG;IACa,SAAS,CACvB,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,GAC7B,MAAM,CAAC,IAAI,CAAC,SAAS;CAoBzB"}