ember-primitives 0.48.1 → 0.49.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 (123) hide show
  1. package/README.md +9 -2
  2. package/declarations/components/menu.d.ts +26 -10
  3. package/declarations/components/menu.d.ts.map +1 -1
  4. package/declarations/components/portal.d.ts.map +1 -1
  5. package/declarations/tabster.d.ts.map +1 -1
  6. package/declarations/utils.d.ts.map +1 -1
  7. package/declarations/viewport/in-viewport.d.ts +70 -0
  8. package/declarations/viewport/in-viewport.d.ts.map +1 -0
  9. package/declarations/viewport/viewport.d.ts +59 -0
  10. package/declarations/viewport/viewport.d.ts.map +1 -0
  11. package/declarations/viewport.d.ts +3 -0
  12. package/declarations/viewport.d.ts.map +1 -0
  13. package/dist/-private.js +0 -1
  14. package/dist/-private.js.map +1 -1
  15. package/dist/color-scheme.js +0 -1
  16. package/dist/color-scheme.js.map +1 -1
  17. package/dist/{component-Bs3N-G9z.js → component-BXy_iafw.js} +2 -3
  18. package/dist/component-BXy_iafw.js.map +1 -0
  19. package/dist/components/accordion.js +5 -6
  20. package/dist/components/accordion.js.map +1 -1
  21. package/dist/components/avatar.js +3 -4
  22. package/dist/components/avatar.js.map +1 -1
  23. package/dist/components/dialog.js +2 -3
  24. package/dist/components/dialog.js.map +1 -1
  25. package/dist/components/external-link.js +1 -2
  26. package/dist/components/external-link.js.map +1 -1
  27. package/dist/components/form.js +1 -2
  28. package/dist/components/form.js.map +1 -1
  29. package/dist/components/heading.js +1 -2
  30. package/dist/components/heading.js.map +1 -1
  31. package/dist/components/keys.js +2 -3
  32. package/dist/components/keys.js.map +1 -1
  33. package/dist/components/layout/hero.js +1 -1
  34. package/dist/components/layout/sticky-footer.js +1 -1
  35. package/dist/components/link.js +1 -2
  36. package/dist/components/link.js.map +1 -1
  37. package/dist/components/menu.js +6 -9
  38. package/dist/components/menu.js.map +1 -1
  39. package/dist/components/one-time-password.js +1 -2
  40. package/dist/components/popover.js +3 -4
  41. package/dist/components/popover.js.map +1 -1
  42. package/dist/components/portal-targets.js +2 -3
  43. package/dist/components/portal-targets.js.map +1 -1
  44. package/dist/components/portal.js +3 -7
  45. package/dist/components/portal.js.map +1 -1
  46. package/dist/components/progress.js +2 -3
  47. package/dist/components/progress.js.map +1 -1
  48. package/dist/components/rating.js +1 -2
  49. package/dist/components/scroller.js +1 -2
  50. package/dist/components/scroller.js.map +1 -1
  51. package/dist/components/shadowed.js +2 -3
  52. package/dist/components/shadowed.js.map +1 -1
  53. package/dist/components/switch.js +5 -6
  54. package/dist/components/switch.js.map +1 -1
  55. package/dist/components/tabs.js +6 -7
  56. package/dist/components/tabs.js.map +1 -1
  57. package/dist/components/toggle-group.js +3 -4
  58. package/dist/components/toggle-group.js.map +1 -1
  59. package/dist/components/toggle.js +2 -3
  60. package/dist/components/toggle.js.map +1 -1
  61. package/dist/components/visually-hidden.js +1 -2
  62. package/dist/components/visually-hidden.js.map +1 -1
  63. package/dist/components/zoetrope.js +1 -2
  64. package/dist/dom-context.js +2 -3
  65. package/dist/dom-context.js.map +1 -1
  66. package/dist/floating-ui.js +1 -2
  67. package/dist/head.js +1 -2
  68. package/dist/head.js.map +1 -1
  69. package/dist/helpers/body-class.js +0 -1
  70. package/dist/helpers/body-class.js.map +1 -1
  71. package/dist/helpers/link.js +0 -1
  72. package/dist/helpers/link.js.map +1 -1
  73. package/dist/helpers/service.js +0 -1
  74. package/dist/helpers/service.js.map +1 -1
  75. package/dist/helpers.js +0 -1
  76. package/dist/helpers.js.map +1 -1
  77. package/dist/iframe.js +0 -1
  78. package/dist/iframe.js.map +1 -1
  79. package/dist/{index-DKE67I8L.js → index-gRO4Cvlf.js} +2 -2
  80. package/dist/index-gRO4Cvlf.js.map +1 -0
  81. package/dist/index.js +3 -4
  82. package/dist/index.js.map +1 -1
  83. package/dist/load.js +0 -1
  84. package/dist/load.js.map +1 -1
  85. package/dist/narrowing.js +0 -1
  86. package/dist/narrowing.js.map +1 -1
  87. package/dist/on-resize.js +0 -1
  88. package/dist/on-resize.js.map +1 -1
  89. package/dist/{otp-C6hCCXKx.js → otp-7rz1PWP0.js} +6 -7
  90. package/dist/otp-7rz1PWP0.js.map +1 -0
  91. package/dist/proper-links.js +0 -1
  92. package/dist/proper-links.js.map +1 -1
  93. package/dist/qp.js +0 -1
  94. package/dist/qp.js.map +1 -1
  95. package/dist/{rating-D052JWRa.js → rating-CjBVsX6q.js} +5 -6
  96. package/dist/rating-CjBVsX6q.js.map +1 -0
  97. package/dist/resize-observer.js +0 -1
  98. package/dist/resize-observer.js.map +1 -1
  99. package/dist/service.js +0 -1
  100. package/dist/service.js.map +1 -1
  101. package/dist/store.js +0 -1
  102. package/dist/store.js.map +1 -1
  103. package/dist/styles.css.js +0 -1
  104. package/dist/tabster.js +0 -1
  105. package/dist/tabster.js.map +1 -1
  106. package/dist/test-support.js +0 -1
  107. package/dist/test-support.js.map +1 -1
  108. package/dist/{utils-C5796IKA.js → utils-D0v9WKmV.js} +1 -2
  109. package/dist/utils-D0v9WKmV.js.map +1 -0
  110. package/dist/utils.js +4 -1
  111. package/dist/utils.js.map +1 -1
  112. package/dist/viewport/in-viewport.js +82 -0
  113. package/dist/viewport/in-viewport.js.map +1 -0
  114. package/dist/viewport/viewport.js +92 -0
  115. package/dist/viewport/viewport.js.map +1 -0
  116. package/dist/viewport.js +3 -0
  117. package/dist/viewport.js.map +1 -0
  118. package/package.json +20 -20
  119. package/dist/component-Bs3N-G9z.js.map +0 -1
  120. package/dist/index-DKE67I8L.js.map +0 -1
  121. package/dist/otp-C6hCCXKx.js.map +0 -1
  122. package/dist/rating-D052JWRa.js.map +0 -1
  123. package/dist/utils-C5796IKA.js.map +0 -1
package/README.md CHANGED
@@ -38,6 +38,13 @@ See the [Contributing](CONTRIBUTING.md) guide for details.
38
38
  <sub><b>Liam Potter</b></sub>
39
39
  </a>
40
40
  </td>
41
+ <td align="center">
42
+ <a href="https://github.com/barryofguilder">
43
+ <img src="https://avatars.githubusercontent.com/u/5649106?v=4" width="100;" alt="barryofguilder"/>
44
+ <br />
45
+ <sub><b>Jason Barry</b></sub>
46
+ </a>
47
+ </td>
41
48
  <td align="center">
42
49
  <a href="https://github.com/lukasnys">
43
50
  <img src="https://avatars.githubusercontent.com/u/22593230?v=4" width="100;" alt="lukasnys"/>
@@ -52,6 +59,8 @@ See the [Contributing](CONTRIBUTING.md) guide for details.
52
59
  <sub><b>Ryan Tablada</b></sub>
53
60
  </a>
54
61
  </td>
62
+ </tr>
63
+ <tr>
55
64
  <td align="center">
56
65
  <a href="https://github.com/kaermorchen">
57
66
  <img src="https://avatars.githubusercontent.com/u/11972062?v=4" width="100;" alt="kaermorchen"/>
@@ -59,8 +68,6 @@ See the [Contributing](CONTRIBUTING.md) guide for details.
59
68
  <sub><b>Stanislav Romanov</b></sub>
60
69
  </a>
61
70
  </td>
62
- </tr>
63
- <tr>
64
71
  <td align="center">
65
72
  <a href="https://github.com/pulien">
66
73
  <img src="https://avatars.githubusercontent.com/u/120576344?v=4" width="100;" alt="pulien"/>
@@ -29,24 +29,38 @@ export interface SeparatorSignature {
29
29
  };
30
30
  }
31
31
  declare const Separator: TOC<SeparatorSignature>;
32
- export interface ItemSignature {
32
+ interface PrivateItemSignature {
33
33
  Element: HTMLButtonElement;
34
34
  Args: {
35
35
  onSelect?: (event: Event) => void;
36
+ toggle: () => void;
36
37
  };
37
38
  Blocks: {
38
39
  default: [];
39
40
  };
40
41
  }
41
- declare const Item: TOC<ItemSignature>;
42
- export interface LinkItemSignature {
42
+ export interface ItemSignature {
43
+ Element: PrivateItemSignature["Element"];
44
+ Args: Omit<PrivateItemSignature["Args"], "toggle">;
45
+ Blocks: PrivateItemSignature["Blocks"];
46
+ }
47
+ declare const Item: TOC<PrivateItemSignature>;
48
+ interface LinkItemArgs extends LinkArgs {
49
+ toggle: () => void;
50
+ }
51
+ interface PrivateLinkItemSignature {
43
52
  Element: HTMLAnchorElement;
44
- Args: LinkArgs;
53
+ Args: LinkItemArgs;
45
54
  Blocks: {
46
55
  default: [];
47
56
  };
48
57
  }
49
- declare const LinkItem: TOC<LinkItemSignature>;
58
+ export interface LinkItemSignature {
59
+ Element: PrivateLinkItemSignature["Element"];
60
+ Args: LinkArgs;
61
+ Blocks: PrivateLinkItemSignature["Blocks"];
62
+ }
63
+ declare const LinkItem: TOC<PrivateLinkItemSignature>;
50
64
  interface PrivateContentSignature {
51
65
  Element: HTMLDivElement;
52
66
  Args: {
@@ -56,11 +70,13 @@ interface PrivateContentSignature {
56
70
  PopoverContent: PopoverBlockParams["Content"];
57
71
  };
58
72
  Blocks: {
59
- default: [{
60
- Item: typeof Item;
61
- LinkItem: typeof LinkItem;
62
- Separator: typeof Separator;
63
- }];
73
+ default: [
74
+ {
75
+ Item: WithBoundArgs<typeof Item, "toggle">;
76
+ LinkItem: WithBoundArgs<typeof LinkItem, "toggle">;
77
+ Separator: typeof Separator;
78
+ }
79
+ ];
64
80
  };
65
81
  }
66
82
  export interface ContentSignature {
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/components/menu.gts"],"names":[],"mappings":"AAwVA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAM3C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,OAAO,EAAQ,KAAK,SAAS,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAW,KAAK,SAAS,IAAI,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,KAAK,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,KAAK,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AACtC,KAAK,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC5C,KAAK,kBAAkB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAiBnE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE;QACN,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACnC,OAAO,EAAE,aAAa,CACpB,OAAO,OAAO,EACd,gBAAgB,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,CAC3D,CAAC;gBACF,OAAO,EAAE,aAAa,CAAC,OAAO,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAC1D,OAAO,EAAE,aAAa,CACpB,OAAO,OAAO,EACd,gBAAgB,GAAG,WAAW,GAAG,QAAQ,GAAG,gBAAgB,CAC7D,CAAC;gBACF,MAAM,EAAE,OAAO,CAAC;aACjB;SACF,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE;QAAE,OAAO,EAAE,EAAE,CAAA;KAAE,CAAC;CACzB;AAED,QAAA,MAAM,SAAS,EAAE,GAAG,CAAC,kBAAkB,CAYrC,CAAC;AAqBH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;KAAE,CAAC;IAC5C,MAAM,EAAE;QAAE,OAAO,EAAE,EAAE,CAAA;KAAE,CAAC;CACzB;AAED,QAAA,MAAM,IAAI,EAAE,GAAG,CAAC,aAAa,CA6B3B,CAAC;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE;QAAE,OAAO,EAAE,EAAE,CAAA;KAAE,CAAC;CACzB;AAED,QAAA,MAAM,QAAQ,EAAE,GAAG,CAAC,iBAAiB,CAmBnC,CAAC;AA+CH,UAAU,uBAAuB;IAC/B,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE;QACJ,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,cAAc,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;KAC/C,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,OAAO,IAAI,CAAC;YAAC,QAAQ,EAAE,OAAO,QAAQ,CAAC;YAAC,SAAS,EAAE,OAAO,SAAS,CAAA;SAAE,CAAC,CAAC;KAC1F,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;CAC3C;AAED,QAAA,MAAM,OAAO,EAAE,GAAG,CAAC,uBAAuB,CA6BxC,CAAC;AAEH,UAAU,+BAA+B;IACvC,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,SAAS,EAAE,MAAM,CAAC;YAClB,YAAY,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;YACjD,eAAe,CAAC,EAAE,OAAO,CAAC;YAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;SAC1B,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,+BAA+B,CAAC,SAAS,CAAC,CAAC;CACrD;AAED,QAAA,MAAM,OAAO;;;;4BAdS,IAAI,CAAC,WAAW,CAAC;oBACzB,IAAI,CAAC,OAAO,CAAC;uBACV,MAAM;0BACH,kBAAkB,CAAC,cAAc,CAAC;8BAC9B,OAAO;6BACR,OAAO;;;;EAiD7B,CAAC;AAEF,UAAU,uBAAuB;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE;QACJ,eAAe,EAAE,aAAa,CAC5B,OAAO,OAAO,EACd,gBAAgB,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,CAC3D,CAAC;QACF,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE;QAAE,OAAO,EAAE,EAAE,CAAA;KAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;CAC3C;AAED,QAAA,MAAM,OAAO,EAAE,GAAG,CAAC,uBAAuB,CAaxC,CAAC;AAKH,qBAAa,IAAK,SAAQ,SAAS,CAAC,SAAS,CAAC;IAC5C,SAAS,SAAiB;CAuC3B;AAED,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/components/menu.gts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../src/components/portal.gts"],"names":[],"mappings":"AA8MA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AAE1D,KAAK,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAqBtD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE;QACJ;;;;;;WAMG;QACH,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;QAEzC;;;;WAIG;QACH,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KAC7B,CAAC;IACF,MAAM,EAAE;QACN;;WAEG;QACH,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;CACH;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,kBAYlE;AA4CD,eAAO,MAAM,MAAM,EAAE,GAAG,CAAC,SAAS,CA+ChC,CAAC;AAkEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../src/components/portal.gts"],"names":[],"mappings":"AA0MA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AAE1D,KAAK,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAqBtD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE;QACJ;;;;;;WAMG;QACH,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;QAEzC;;;;WAIG;QACH,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KAC7B,CAAC;IACF,MAAM,EAAE;QACN;;WAEG;QACH,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;CACH;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,kBAYlE;AA0CD,eAAO,MAAM,MAAM,EAAE,GAAG,CAAC,SAAS,CA+ChC,CAAC;AAkEH,eAAe,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tabster.d.ts","sourceRoot":"","sources":["../src/tabster.ts"],"names":[],"mappings":"AAEA,wBAAsB,YAAY;AAChC;;;;GAIG;AACH,OAAO,EAAE,MAAM,EACf,EACE,OAAO,EACP,cAAc,GACf,GAAE;IACD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CACrB,iBA0BP"}
1
+ {"version":3,"file":"tabster.d.ts","sourceRoot":"","sources":["../src/tabster.ts"],"names":[],"mappings":"AAEA,wBAAsB,YAAY;AAChC;;;;GAIG;AACH,OAAO,EAAE,MAAM,EACf,EACE,OAAO,EACP,cAAc,GACf,GAAE;IACD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CACrB,iBAyBP"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,wBAAgB,QAAQ,IAAI,MAAM,CAQjC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,WAAW,CAAC,MAAM,CAAC,CAMtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,CAI9C;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAKxE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,cAAc,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAWpE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,wBAAgB,QAAQ,IAAI,MAAM,CAQjC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,WAAW,CAAC,MAAM,CAAC,CAMtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,CAI9C;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAKxE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,cAAc,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAiBpE"}
@@ -0,0 +1,70 @@
1
+ import Component from "@glimmer/component";
2
+ export type InViewportMode = "replace" | "contain";
3
+ /**
4
+ * Configuration for the InViewport component
5
+ */
6
+ export interface InViewportSignature {
7
+ Element: HTMLElement;
8
+ Args: {
9
+ /**
10
+ * The tag name for the placeholder element.
11
+ * Can be any valid HTML tag name.
12
+ * Default: 'div'
13
+ */
14
+ tagName?: string;
15
+ /**
16
+ * The mode determines how yielded content is rendered:
17
+ * - 'replace': yielded content replaces the placeholder element
18
+ * - 'contain': yielded content is rendered within the placeholder
19
+ * Default: 'contain'
20
+ */
21
+ mode?: InViewportMode;
22
+ };
23
+ Blocks: {
24
+ /**
25
+ * Default block - rendered when the element is in the viewport
26
+ */
27
+ default: [];
28
+ };
29
+ }
30
+ /**
31
+ * A component that only renders its content when the element is near the viewport.
32
+ *
33
+ * This is useful for deferring the rendering of heavy components until they're
34
+ * actually needed, improving performance for pages with many components.
35
+ *
36
+ * Example usage:
37
+ * ```gjs
38
+ * import { InViewport } from 'ember-primitives';
39
+ *
40
+ * <template>
41
+ * <InViewport>
42
+ * <ExpensiveComponent />
43
+ * </InViewport>
44
+ * </template>
45
+ * ```
46
+ *
47
+ * The component uses the Intersection Observer API to detect when the element
48
+ * is near the viewport. Once detected, the observer is destroyed and the content
49
+ * is rendered permanently.
50
+ */
51
+ export declare class InViewport extends Component<InViewportSignature> {
52
+ #private;
53
+ /**
54
+ * Whether the element has been detected as in/near the viewport
55
+ */
56
+ hasIntersected: boolean;
57
+ setupObserver: import("ember-modifier").FunctionBasedModifier<{
58
+ Args: {
59
+ Positional: unknown[];
60
+ Named: import("ember-modifier/-private/signature").EmptyObject;
61
+ };
62
+ Element: Element;
63
+ }>;
64
+ handle: (entry: IntersectionObserverEntry) => void;
65
+ get mode(): InViewportMode;
66
+ get tagName(): string;
67
+ get hasReachedViewport(): boolean;
68
+ get isReplacing(): boolean;
69
+ }
70
+ //# sourceMappingURL=in-viewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-viewport.d.ts","sourceRoot":"","sources":["../../src/viewport/in-viewport.gts"],"names":[],"mappings":"AAgIA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAS3C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE;QACJ;;;;WAIG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB;;;;;WAKG;QACH,IAAI,CAAC,EAAE,cAAc,CAAC;KACvB,CAAC;IACF,MAAM,EAAE;QACN;;WAEG;QACH,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,UAAW,SAAQ,SAAS,CAAC,mBAAmB,CAAC;;IAC5D;;OAEG;IACM,cAAc,UAAS;IAMhC,aAAa;;;;;;OAQV;IAEH,MAAM,GAAI,OAAO,yBAAyB,UAMxC;IAEF,IAAI,IAAI,IAAI,cAAc,CAOzB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;CAmCF"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Creates or returns the ViewportObserverManager.
3
+ *
4
+ * Only one of these will exist per owner.
5
+ *
6
+ * Has only two methods:
7
+ * - observe(element, callback: (intersectionObserverEntry) => void, options?)
8
+ * - unobserve(element, callback: (intersectionObserverEntry) => void)
9
+ *
10
+ * Like with the underlying IntersectionObserver API (and all event listeners),
11
+ * the callback passed to unobserve must be the same reference as the one
12
+ * passed to observe.
13
+ */
14
+ export declare function viewport(context: object): ViewportObserverManager;
15
+ export interface ViewportOptions {
16
+ /**
17
+ * A margin around the root. Can have values similar to the CSS margin property.
18
+ * The values can be percentages. This set of values serves to grow or shrink each
19
+ * side of the root element's bounding box before computing intersections.
20
+ * Defaults to all zeros.
21
+ */
22
+ rootMargin?: string;
23
+ /**
24
+ * Either a single number or an array of numbers which indicate at what percentage
25
+ * of the target's visibility the observer's callback should be executed. If you only
26
+ * want to detect when visibility passes the 50% mark, you can use a value of 0.5.
27
+ * If you want the callback to run every time visibility passes another 25%, you would
28
+ * specify the array [0, 0.25, 0.5, 0.75, 1]. The default is 0 (meaning as soon as
29
+ * even one pixel is visible, the callback will be run).
30
+ */
31
+ threshold?: number | number[];
32
+ }
33
+ declare class ViewportObserverManager {
34
+ #private;
35
+ constructor();
36
+ /**
37
+ * Initiate the observing of the `element` or add an additional `callback`
38
+ * if the `element` is already observed.
39
+ *
40
+ * @param {object} element
41
+ * @param {function} callback The `callback` is called whenever the `element`
42
+ * intersects with the viewport. It is called with an `IntersectionObserverEntry`
43
+ * object for the particular `element`.
44
+ */
45
+ observe(element: Element, callback: (entry: IntersectionObserverEntry) => unknown): void;
46
+ /**
47
+ * End the observing of the `element` or just remove the provided `callback`.
48
+ *
49
+ * It will unobserve the `element` if the `callback` is not provided
50
+ * or there are no more callbacks left for this `element`.
51
+ *
52
+ * @param {Element | undefined | null} element
53
+ * @param {function?} callback - The `callback` to remove from the listeners
54
+ * of the `element` intersection changes.
55
+ */
56
+ unobserve(element: Element | undefined | null, callback: (entry: IntersectionObserverEntry) => unknown): void;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=viewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../../src/viewport/viewport.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,2BAEvC;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED,cAAM,uBAAuB;;;IA8B3B;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,OAAO;IAWjF;;;;;;;;;OASG;IACH,SAAS,CACP,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,EACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,OAAO;CAmB1D"}
@@ -0,0 +1,3 @@
1
+ export { InViewport, type InViewportSignature } from './viewport/in-viewport';
2
+ export { viewport, type ViewportOptions } from './viewport/viewport.ts';
3
+ //# sourceMappingURL=viewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../src/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/-private.js CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  /**
3
2
  * @internal
4
3
  */
@@ -1 +1 @@
1
- {"version":3,"file":"-private.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"-private.js","sources":["../src/-private.ts"],"sourcesContent":["/**\n * @internal\n */\nexport const PRIMITIVES = Symbol.for('ember-primitives-globals');\n"],"names":["PRIMITIVES","Symbol","for"],"mappings":"AAAA;AACA;AACA;AACO,MAAMA,UAAU,GAAGC,MAAM,CAACC,GAAG,CAAC,0BAA0B;;;;"}
@@ -1,4 +1,3 @@
1
-
2
1
  import { waitForPromise } from '@ember/test-waiters';
3
2
  import { cell } from 'ember-resources';
4
3
 
@@ -1 +1 @@
1
- {"version":3,"file":"color-scheme.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"color-scheme.js","sources":["../src/color-scheme.ts"],"sourcesContent":["import { waitForPromise } from '@ember/test-waiters';\n\nimport { cell } from 'ember-resources';\n\nconst _colorScheme = cell<string | undefined>();\n\nlet callbacks: Set<(colorScheme: string) => void> = new Set();\n\nasync function runCallbacks(theme: string) {\n await Promise.resolve();\n\n for (const callback of callbacks.values()) {\n callback(theme);\n }\n}\n\n/**\n * Object for managing the color scheme\n */\nexport const colorScheme = {\n /**\n * Set's the current color scheme to the passed value\n */\n update: (value: string) => {\n colorScheme.current = value;\n\n void waitForPromise(runCallbacks(value));\n },\n\n on: {\n /**\n * register a function to be called when the color scheme changes.\n */\n update: (callback: (colorScheme: string) => void) => {\n callbacks.add(callback);\n },\n },\n off: {\n /**\n * unregister a function that would have been called when the color scheme changes.\n */\n update: (callback: (colorScheme: string) => void) => {\n callbacks.delete(callback);\n },\n },\n\n /**\n * the current valuel of the \"color scheme\"\n */\n get current(): string | undefined {\n return _colorScheme.current;\n },\n set current(value: string | undefined) {\n _colorScheme.current = value;\n\n if (!value) {\n localPreference.delete();\n\n return;\n }\n\n localPreference.update(value);\n setColorScheme(value);\n },\n};\n\n/**\n * Synchronizes state of `colorScheme` with the users preferences as well as reconciles with previously set theme in local storage.\n *\n * This may only be called once per app.\n */\nexport function sync() {\n /**\n * reset the callbacks\n */\n callbacks = new Set();\n\n /**\n * If local prefs are set, then we don't care what prefers-color-scheme is\n */\n const userPreference = localPreference.read();\n\n if (userPreference) {\n setColorScheme(userPreference);\n _colorScheme.current = userPreference;\n\n return;\n }\n\n if (prefers.dark()) {\n setColorScheme('dark');\n _colorScheme.current = 'dark';\n } else if (prefers.light()) {\n setColorScheme('light');\n _colorScheme.current = 'light';\n }\n}\n\n/**\n * Helper methods to determining what the user's preferred color scheme is\n * based on the system preferences rather than the users explicit preference.\n */\nexport const prefers = {\n dark: () => window.matchMedia('(prefers-color-scheme: dark)').matches,\n light: () => window.matchMedia('(prefers-color-scheme: light)').matches,\n custom: (name: string) => window.matchMedia(`(prefers-color-scheme: ${name})`).matches,\n none: () => window.matchMedia('(prefers-color-scheme: no-preference)').matches,\n};\n\nconst LOCAL_PREF_KEY = 'ember-primitives/color-scheme#local-preference';\n\n/**\n * Helper methods for working with the color scheme preference in local storage\n */\nexport const localPreference = {\n isSet: () => Boolean(localPreference.read()),\n read: () => localStorage.getItem(LOCAL_PREF_KEY),\n update: (value: string) => localStorage.setItem(LOCAL_PREF_KEY, value),\n delete: () => localStorage.removeItem(LOCAL_PREF_KEY),\n};\n\n/**\n * For the given element, returns the `color-scheme` of that element.\n */\nexport function getColorScheme(element?: HTMLElement) {\n const style = styleOf(element);\n\n return style.getPropertyValue('color-scheme');\n}\n\nexport function setColorScheme(element: HTMLElement, value: string): void;\nexport function setColorScheme(value: string): void;\n\nexport function setColorScheme(...args: [string] | [HTMLElement, string]): void {\n if (typeof args[0] === 'string') {\n styleOf().setProperty('color-scheme', args[0]);\n\n return;\n }\n\n if (typeof args[1] === 'string') {\n styleOf(args[0]).setProperty('color-scheme', args[1]);\n\n return;\n }\n\n throw new Error(`Invalid arity, expected up to 2 args, received ${args.length}`);\n}\n\n/**\n * Removes the `color-scheme` from the given element\n */\nexport function removeColorScheme(element?: HTMLElement) {\n const style = styleOf(element);\n\n style.removeProperty('color-scheme');\n}\n\nfunction styleOf(element?: HTMLElement) {\n if (element) {\n return element.style;\n }\n\n return document.documentElement.style;\n}\n"],"names":["_colorScheme","cell","callbacks","Set","runCallbacks","theme","Promise","resolve","callback","values","colorScheme","update","value","current","waitForPromise","on","add","off","delete","localPreference","setColorScheme","sync","userPreference","read","prefers","dark","light","window","matchMedia","matches","custom","name","none","LOCAL_PREF_KEY","isSet","Boolean","localStorage","getItem","setItem","removeItem","getColorScheme","element","style","styleOf","getPropertyValue","args","setProperty","Error","length","removeColorScheme","removeProperty","document","documentElement"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
-
2
1
  import Component from '@glimmer/component';
3
2
  import { tracked } from '@glimmer/tracking';
4
3
  import { hash } from '@ember/helper';
@@ -132,7 +131,7 @@ class FloatingUI extends Component {
132
131
  this.reference = element;
133
132
  };
134
133
  static {
135
- setComponentTemplate(precompileTemplate("\n {{#let (modifier anchorTo flipOptions=@flipOptions hideOptions=@hideOptions middleware=@middleware offsetOptions=@offsetOptions placement=@placement shiftOptions=@shiftOptions strategy=@strategy setData=this.setData) as |prewiredAnchorTo|}}\n {{#let (if this.reference (modifier prewiredAnchorTo this.reference)) as |floating|}}\n {{!-- @glint-nocheck -- Excessively deep, possibly infinite --}}\n {{yield (modifier ref this.setReference) floating (hash setReference=this.setReference data=this.data)}}\n {{/let}}\n {{/let}}\n ", {
134
+ setComponentTemplate(precompileTemplate("{{#let (modifier anchorTo flipOptions=@flipOptions hideOptions=@hideOptions middleware=@middleware offsetOptions=@offsetOptions placement=@placement shiftOptions=@shiftOptions strategy=@strategy setData=this.setData) as |prewiredAnchorTo|}}\n {{#let (if this.reference (modifier prewiredAnchorTo this.reference)) as |floating|}}\n {{!-- @glint-nocheck -- Excessively deep, possibly infinite --}}\n {{yield (modifier ref this.setReference) floating (hash setReference=this.setReference data=this.data)}}\n {{/let}}\n{{/let}}", {
136
135
  strictMode: true,
137
136
  scope: () => ({
138
137
  anchorTo,
@@ -144,4 +143,4 @@ class FloatingUI extends Component {
144
143
  }
145
144
 
146
145
  export { FloatingUI as F, anchorTo as a };
147
- //# sourceMappingURL=component-Bs3N-G9z.js.map
146
+ //# sourceMappingURL=component-BXy_iafw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-BXy_iafw.js","sources":["../src/floating-ui/middleware.ts","../src/floating-ui/modifier.ts","../src/floating-ui/component.gts"],"sourcesContent":["import type { Middleware } from '@floating-ui/dom';\n\nexport function exposeMetadata(): Middleware {\n return {\n name: 'metadata',\n fn: (data) => {\n // https://floating-ui.com/docs/middleware#always-return-an-object\n return {\n data,\n };\n },\n };\n}\n","import { assert } from '@ember/debug';\n\nimport { autoUpdate, computePosition, flip, hide, offset, shift } from '@floating-ui/dom';\nimport { modifier as eModifier } from 'ember-modifier';\n\nimport { exposeMetadata } from './middleware.ts';\n\nimport type {\n FlipOptions,\n HideOptions,\n Middleware,\n OffsetOptions,\n Placement,\n ShiftOptions,\n Strategy,\n} from '@floating-ui/dom';\n\nexport interface Signature {\n /**\n *\n */\n Element: HTMLElement;\n Args: {\n Positional: [\n /**\n * What do use as the reference element.\n * Can be a selector or element instance.\n *\n * Example:\n * ```gjs\n * import { anchorTo } from 'ember-primitives/floating-ui';\n *\n * <template>\n * <div id=\"reference\">...</div>\n * <div {{anchorTo \"#reference\"}}> ... </div>\n * </template>\n * ```\n */\n referenceElement: string | HTMLElement | SVGElement,\n ];\n Named: {\n /**\n * This is the type of CSS position property to use.\n * By default this is 'fixed', but can also be 'absolute'.\n *\n * See: [The strategy docs](https://floating-ui.com/docs/computePosition#strategy)\n */\n strategy?: Strategy;\n /**\n * Options to pass to the [offset middleware](https://floating-ui.com/docs/offset)\n */\n offsetOptions?: OffsetOptions;\n /**\n * Where to place the floating element relative to its reference element.\n * The default is 'bottom'.\n *\n * See: [The placement docs](https://floating-ui.com/docs/computePosition#placement)\n */\n placement?: Placement;\n /**\n * Options to pass to the [flip middleware](https://floating-ui.com/docs/flip)\n */\n flipOptions?: FlipOptions;\n /**\n * Options to pass to the [shift middleware](https://floating-ui.com/docs/shift)\n */\n shiftOptions?: ShiftOptions;\n /**\n * Options to pass to the [hide middleware](https://floating-ui.com/docs/hide)\n */\n hideOptions?: HideOptions;\n /**\n * Additional middleware to pass to FloatingUI.\n *\n * See: [The middleware docs](https://floating-ui.com/docs/middleware)\n */\n middleware?: Middleware[];\n /**\n * A callback for when data changes about the position / placement / etc\n * of the floating element.\n */\n setData?: Middleware['fn'];\n };\n };\n}\n\n/**\n * A modifier to apply to the _floating_ element.\n * This is what will anchor to the reference element.\n *\n * Example\n * ```gjs\n * import { anchorTo } from 'ember-primitives/floating-ui';\n *\n * <template>\n * <button id=\"my-button\"> ... </button>\n * <menu {{anchorTo \"#my-button\"}}> ... </menu>\n * </template>\n * ```\n */\nexport const anchorTo = eModifier<Signature>(\n (\n floatingElement,\n [_referenceElement],\n {\n strategy = 'fixed',\n offsetOptions = 0,\n placement = 'bottom',\n flipOptions,\n shiftOptions,\n middleware = [],\n setData,\n }\n ) => {\n const referenceElement: null | HTMLElement | SVGElement =\n typeof _referenceElement === 'string'\n ? document.querySelector(_referenceElement)\n : _referenceElement;\n\n assert(\n 'no reference element defined',\n referenceElement instanceof HTMLElement || referenceElement instanceof SVGElement\n );\n\n assert(\n 'no floating element defined',\n floatingElement instanceof HTMLElement || _referenceElement instanceof SVGElement\n );\n\n assert(\n 'reference and floating elements cannot be the same element',\n floatingElement !== _referenceElement\n );\n\n assert('@middleware must be an array of one or more objects', Array.isArray(middleware));\n\n Object.assign(floatingElement.style, {\n position: strategy,\n top: '0',\n left: '0',\n });\n\n const update = async () => {\n const { middlewareData, x, y } = await computePosition(referenceElement, floatingElement, {\n middleware: [\n offset(offsetOptions),\n flip(flipOptions),\n shift(shiftOptions),\n ...middleware,\n hide({ strategy: 'referenceHidden' }),\n hide({ strategy: 'escaped' }),\n exposeMetadata(),\n ],\n placement,\n strategy,\n });\n\n const referenceHidden = middlewareData.hide?.referenceHidden;\n\n Object.assign(floatingElement.style, {\n top: `${y}px`,\n left: `${x}px`,\n margin: 0,\n visibility: referenceHidden ? 'hidden' : 'visible',\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n void setData?.(middlewareData['metadata']);\n };\n\n void update();\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const cleanup = autoUpdate(referenceElement, floatingElement, update);\n\n /**\n * in the function-modifier manager, teardown of the previous modifier\n * occurs before setup of the next\n * https://github.com/ember-modifier/ember-modifier/blob/main/ember-modifier/src/-private/function-based/modifier-manager.ts#L58\n */\n return cleanup;\n }\n);\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { hash } from \"@ember/helper\";\n\nimport { modifier as eModifier } from \"ember-modifier\";\n\nimport { anchorTo } from \"./modifier.ts\";\n\nimport type { Signature as ModifierSignature } from \"./modifier.ts\";\nimport type { MiddlewareState } from \"@floating-ui/dom\";\nimport type { ModifierLike } from \"@glint/template\";\n\ntype ModifierArgs = ModifierSignature[\"Args\"][\"Named\"];\n\ninterface ReferenceSignature {\n Element: HTMLElement | SVGElement;\n}\n\nexport interface Signature {\n Args: {\n /**\n * Additional middleware to pass to FloatingUI.\n *\n * See: [The middleware docs](https://floating-ui.com/docs/middleware)\n */\n middleware?: ModifierArgs[\"middleware\"];\n /**\n * Where to place the floating element relative to its reference element.\n * The default is 'bottom'.\n *\n * See: [The placement docs](https://floating-ui.com/docs/computePosition#placement)\n */\n placement?: ModifierArgs[\"placement\"];\n /**\n * This is the type of CSS position property to use.\n * By default this is 'fixed', but can also be 'absolute'.\n *\n * See: [The strategy docs](https://floating-ui.com/docs/computePosition#strategy)\n */\n strategy?: ModifierArgs[\"strategy\"];\n /**\n * Options to pass to the [flip middleware](https://floating-ui.com/docs/flip)\n */\n flipOptions?: ModifierArgs[\"flipOptions\"];\n /**\n * Options to pass to the [hide middleware](https://floating-ui.com/docs/hide)\n */\n hideOptions?: ModifierArgs[\"hideOptions\"];\n /**\n * Options to pass to the [shift middleware](https://floating-ui.com/docs/shift)\n */\n shiftOptions?: ModifierArgs[\"shiftOptions\"];\n /**\n * Options to pass to the [offset middleware](https://floating-ui.com/docs/offset)\n */\n offsetOptions?: ModifierArgs[\"offsetOptions\"];\n };\n Blocks: {\n default: [\n /**\n * A modifier to apply to the _reference_ element.\n * This is what the floating element will use to anchor to.\n *\n * Example\n * ```gjs\n * import { FloatingUI } from 'ember-primitives/floating-ui';\n *\n * <template>\n * <FloatingUI as |reference floating|>\n * <button {{reference}}> ... </button>\n * ...\n * </FloatingUI>\n * </template>\n * ```\n */\n reference: ModifierLike<ReferenceSignature>,\n /**\n * A modifier to apply to the _floating_ element.\n * This is what will anchor to the reference element.\n *\n * Example\n * ```gjs\n * import { FloatingUI } from 'ember-primitives/floating-ui';\n *\n * <template>\n * <FloatingUI as |reference floating|>\n * <button {{reference}}> ... </button>\n * <menu {{floating}}> ... </menu>\n * </FloatingUI>\n * </template>\n * ```\n */\n floating:\n | undefined\n | ModifierLike<{\n Element: HTMLElement;\n Args: {\n Named: ModifierArgs;\n };\n }>,\n /**\n * Special utilities for advanced usage\n */\n util: {\n /**\n * If you want to have a single modifier with custom behavior\n * on your reference element, you may use this `setReference`\n * function to set the reference, rather than having multiple modifiers\n * on that element.\n */\n setReference: (element: HTMLElement | SVGElement) => void;\n /**\n * Metadata exposed from floating-ui.\n * Gives you x, y position, among other things.\n */\n data?: MiddlewareState;\n },\n ];\n };\n}\n\nconst ref = eModifier<{\n Element: HTMLElement | SVGElement;\n Args: {\n Positional: [setRef: (element: HTMLElement | SVGElement) => void];\n };\n}>((element: HTMLElement | SVGElement, positional) => {\n const fn = positional[0];\n\n fn(element);\n});\n\n/**\n * A component that provides no DOM and yields two modifiers for creating\n * creating floating uis, such as menus, popovers, tooltips, etc.\n * This component currently uses [Floating UI](https://floating-ui.com/)\n * but will be switching to [CSS Anchor Positioning](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_anchor_positioning) when that lands.\n *\n * Example usage:\n * ```gjs\n * import { FloatingUI } from 'ember-primitives/floating-ui';\n *\n * <template>\n * <FloatingUI as |reference floating|>\n * <button {{reference}}> ... </button>\n * <menu {{floating}}> ... </menu>\n * </FloatingUI>\n * </template>\n * ```\n */\nexport class FloatingUI extends Component<Signature> {\n @tracked reference?: HTMLElement | SVGElement = undefined;\n @tracked data?: MiddlewareState = undefined;\n\n setData: ModifierArgs[\"setData\"] = (data) => (this.data = data);\n\n setReference = (element: HTMLElement | SVGElement) => {\n this.reference = element;\n };\n\n <template>\n {{#let\n (modifier\n anchorTo\n flipOptions=@flipOptions\n hideOptions=@hideOptions\n middleware=@middleware\n offsetOptions=@offsetOptions\n placement=@placement\n shiftOptions=@shiftOptions\n strategy=@strategy\n setData=this.setData\n )\n as |prewiredAnchorTo|\n }}\n {{#let (if this.reference (modifier prewiredAnchorTo this.reference)) as |floating|}}\n {{! @glint-nocheck -- Excessively deep, possibly infinite }}\n {{yield\n (modifier ref this.setReference)\n floating\n (hash setReference=this.setReference data=this.data)\n }}\n {{/let}}\n {{/let}}\n </template>\n}\n"],"names":["exposeMetadata","name","fn","data","anchorTo","eModifier","floatingElement","_referenceElement","strategy","offsetOptions","placement","flipOptions","shiftOptions","middleware","setData","referenceElement","document","querySelector","assert","HTMLElement","SVGElement","Array","isArray","Object","assign","style","position","top","left","update","middlewareData","x","y","computePosition","offset","flip","shift","hide","referenceHidden","margin","visibility","cleanup","autoUpdate","ref","element","positional","FloatingUI","Component","g","prototype","tracked","undefined","i","setReference","reference","setComponentTemplate","precompileTemplate","strictMode","scope","hash"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
-
2
1
  import Component from '@glimmer/component';
3
2
  import { assert } from '@ember/debug';
4
3
  import { hash } from '@ember/helper';
@@ -11,7 +10,7 @@ import { g, i } from 'decorator-transforms/runtime';
11
10
 
12
11
  class AccordionContent extends Component {
13
12
  static {
14
- setComponentTemplate(precompileTemplate("\n <div role=\"region\" id={{@value}} data-state={{getDataState @isExpanded}} hidden={{this.isHidden}} data-disabled={{@disabled}} ...attributes>\n {{yield}}\n </div>\n ", {
13
+ setComponentTemplate(precompileTemplate("<div role=\"region\" id={{@value}} data-state={{getDataState @isExpanded}} hidden={{this.isHidden}} data-disabled={{@disabled}} ...attributes>\n {{yield}}\n</div>", {
15
14
  strictMode: true,
16
15
  scope: () => ({
17
16
  getDataState
@@ -23,7 +22,7 @@ class AccordionContent extends Component {
23
22
  }
24
23
  }
25
24
 
26
- const AccordionTrigger = setComponentTemplate(precompileTemplate("\n <button type=\"button\" aria-controls={{@value}} aria-expanded={{@isExpanded}} data-state={{getDataState @isExpanded}} data-disabled={{@disabled}} aria-disabled={{if @disabled \"true\" \"false\"}} {{on \"click\" @toggleItem}} ...attributes>\n {{yield}}\n </button>\n", {
25
+ const AccordionTrigger = setComponentTemplate(precompileTemplate("<button type=\"button\" aria-controls={{@value}} aria-expanded={{@isExpanded}} data-state={{getDataState @isExpanded}} data-disabled={{@disabled}} aria-disabled={{if @disabled \"true\" \"false\"}} {{on \"click\" @toggleItem}} ...attributes>\n {{yield}}\n</button>", {
27
26
  strictMode: true,
28
27
  scope: () => ({
29
28
  getDataState,
@@ -31,7 +30,7 @@ const AccordionTrigger = setComponentTemplate(precompileTemplate("\n <button ty
31
30
  })
32
31
  }), templateOnly());
33
32
 
34
- const AccordionHeader = setComponentTemplate(precompileTemplate("\n <div role=\"heading\" aria-level=\"3\" data-state={{getDataState @isExpanded}} data-disabled={{@disabled}} ...attributes>\n {{yield (hash Trigger=(component Trigger value=@value isExpanded=@isExpanded disabled=@disabled toggleItem=@toggleItem))}}\n </div>\n", {
33
+ const AccordionHeader = setComponentTemplate(precompileTemplate("<div role=\"heading\" aria-level=\"3\" data-state={{getDataState @isExpanded}} data-disabled={{@disabled}} ...attributes>\n {{yield (hash Trigger=(component Trigger value=@value isExpanded=@isExpanded disabled=@disabled toggleItem=@toggleItem))}}\n</div>", {
35
34
  strictMode: true,
36
35
  scope: () => ({
37
36
  getDataState,
@@ -45,7 +44,7 @@ function getDataState(isExpanded) {
45
44
  }
46
45
  class AccordionItem extends Component {
47
46
  static {
48
- setComponentTemplate(precompileTemplate("\n <div data-state={{getDataState this.isExpanded}} data-disabled={{@disabled}} ...attributes>\n {{yield (hash isExpanded=this.isExpanded Header=(component Header value=@value isExpanded=this.isExpanded disabled=@disabled toggleItem=this.toggleItem) Content=(component Content value=@value isExpanded=this.isExpanded disabled=@disabled))}}\n </div>\n ", {
47
+ setComponentTemplate(precompileTemplate("<div data-state={{getDataState this.isExpanded}} data-disabled={{@disabled}} ...attributes>\n {{yield (hash isExpanded=this.isExpanded Header=(component Header value=@value isExpanded=this.isExpanded disabled=@disabled toggleItem=this.toggleItem) Content=(component Content value=@value isExpanded=this.isExpanded disabled=@disabled))}}\n</div>", {
49
48
  strictMode: true,
50
49
  scope: () => ({
51
50
  getDataState,
@@ -69,7 +68,7 @@ class AccordionItem extends Component {
69
68
 
70
69
  class Accordion extends Component {
71
70
  static {
72
- setComponentTemplate(precompileTemplate("\n <div data-disabled={{@disabled}} ...attributes>\n {{yield (hash Item=(component AccordionItem selectedValue=this.selectedValue toggleItem=this.toggleItem disabled=@disabled))}}\n </div>\n ", {
71
+ setComponentTemplate(precompileTemplate("<div data-disabled={{@disabled}} ...attributes>\n {{yield (hash Item=(component AccordionItem selectedValue=this.selectedValue toggleItem=this.toggleItem disabled=@disabled))}}\n</div>", {
73
72
  strictMode: true,
74
73
  scope: () => ({
75
74
  hash,
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"accordion.js","sources":["../../src/components/accordion/content.gts","../../src/components/accordion/trigger.gts","../../src/components/accordion/header.gts","../../src/components/accordion/item.gts","../../src/components/accordion.gts"],"sourcesContent":["import Component from \"@glimmer/component\";\n\nimport { getDataState } from \"./item.gts\";\n\nimport type { AccordionContentExternalSignature } from \"./public.ts\";\n\ninterface Signature extends AccordionContentExternalSignature {\n Args: {\n isExpanded: boolean;\n value: string;\n disabled?: boolean;\n };\n}\n\nexport class AccordionContent extends Component<Signature> {\n <template>\n <div\n role=\"region\"\n id={{@value}}\n data-state={{getDataState @isExpanded}}\n hidden={{this.isHidden}}\n data-disabled={{@disabled}}\n ...attributes\n >\n {{yield}}\n </div>\n </template>\n\n get isHidden() {\n return !this.args.isExpanded;\n }\n}\n\nexport default AccordionContent;\n","import { on } from \"@ember/modifier\";\n\nimport { getDataState } from \"./item.gts\";\n\nimport type { AccordionTriggerExternalSignature } from \"./public.ts\";\nimport type { TOC } from \"@ember/component/template-only\";\n\ninterface Signature extends AccordionTriggerExternalSignature {\n Args: {\n isExpanded: boolean;\n value: string;\n disabled?: boolean;\n toggleItem: () => void;\n };\n}\n\nexport const AccordionTrigger: TOC<Signature> = <template>\n <button\n type=\"button\"\n aria-controls={{@value}}\n aria-expanded={{@isExpanded}}\n data-state={{getDataState @isExpanded}}\n data-disabled={{@disabled}}\n aria-disabled={{if @disabled \"true\" \"false\"}}\n {{on \"click\" @toggleItem}}\n ...attributes\n >\n {{yield}}\n </button>\n</template>;\n\nexport default AccordionTrigger;\n","import { hash } from \"@ember/helper\";\n\nimport { getDataState } from \"./item.gts\";\nimport Trigger from \"./trigger.gts\";\n\nimport type { AccordionHeaderExternalSignature } from \"./public.ts\";\nimport type { TOC } from \"@ember/component/template-only\";\n\ninterface Signature extends AccordionHeaderExternalSignature {\n Args: {\n value: string;\n isExpanded: boolean;\n disabled?: boolean;\n toggleItem: () => void;\n };\n}\n\nexport const AccordionHeader: TOC<Signature> = <template>\n <div\n role=\"heading\"\n aria-level=\"3\"\n data-state={{getDataState @isExpanded}}\n data-disabled={{@disabled}}\n ...attributes\n >\n {{yield\n (hash\n Trigger=(component\n Trigger value=@value isExpanded=@isExpanded disabled=@disabled toggleItem=@toggleItem\n )\n )\n }}\n </div>\n</template>;\n\nexport default AccordionHeader;\n","import Component from \"@glimmer/component\";\nimport { hash } from \"@ember/helper\";\n\nimport Content from \"./content.gts\";\nimport Header from \"./header.gts\";\n\nimport type { AccordionItemExternalSignature } from \"./public.ts\";\n\nexport function getDataState(isExpanded: boolean): string {\n return isExpanded ? \"open\" : \"closed\";\n}\n\ninterface Signature extends AccordionItemExternalSignature {\n Args: AccordionItemExternalSignature[\"Args\"] & {\n selectedValue?: string | string[];\n disabled?: boolean;\n toggleItem: (value: string) => void;\n };\n}\n\nexport class AccordionItem extends Component<Signature> {\n <template>\n <div data-state={{getDataState this.isExpanded}} data-disabled={{@disabled}} ...attributes>\n {{yield\n (hash\n isExpanded=this.isExpanded\n Header=(component\n Header\n value=@value\n isExpanded=this.isExpanded\n disabled=@disabled\n toggleItem=this.toggleItem\n )\n Content=(component Content value=@value isExpanded=this.isExpanded disabled=@disabled)\n )\n }}\n </div>\n </template>\n\n get isExpanded(): boolean {\n if (Array.isArray(this.args.selectedValue)) {\n return this.args.selectedValue.includes(this.args.value);\n }\n\n return this.args.selectedValue === this.args.value;\n }\n\n toggleItem = (): void => {\n if (this.args.disabled) return;\n\n this.args.toggleItem(this.args.value);\n };\n}\n\nexport default AccordionItem;\n","import Component from \"@glimmer/component\";\nimport { assert } from \"@ember/debug\";\nimport { hash } from \"@ember/helper\";\n\n// temp\n// https://github.com/tracked-tools/tracked-toolbox/issues/38\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { localCopy } from \"tracked-toolbox\";\n\nimport AccordionItem from \"./accordion/item.gts\";\n\nimport type { WithBoundArgs } from \"@glint/template\";\n\ntype AccordionSingleArgs = {\n /**\n * The type of accordion. If `single`, only one item can be selected at a time. If `multiple`, multiple items can be selected at a time.\n */\n type: \"single\";\n /**\n * Whether the accordion is disabled. When `true`, all items cannot be expanded or collapsed.\n */\n disabled?: boolean;\n /**\n * When type is `single`, whether the accordion is collapsible. When `true`, the selected item can be collapsed by clicking its trigger.\n */\n collapsible?: boolean;\n} & (\n | {\n /**\n * The currently selected value. To be used in a controlled fashion in conjunction with `onValueChange`.\n */\n value: string;\n /**\n * A callback that is called when the selected value changes. To be used in a controlled fashion in conjunction with `value`.\n */\n onValueChange: (value: string | undefined) => void;\n /**\n * Not available in a controlled fashion.\n */\n defaultValue?: never;\n }\n | {\n /**\n * Not available in an uncontrolled fashion.\n */\n value?: never;\n /**\n * Not available in an uncontrolled fashion.\n */\n onValueChange?: never;\n /**\n * The default value of the accordion. To be used in an uncontrolled fashion.\n */\n defaultValue?: string;\n }\n);\n\ntype AccordionMultipleArgs = {\n /**\n * The type of accordion. If `single`, only one item can be selected at a time. If `multiple`, multiple items can be selected at a time.\n */\n type: \"multiple\";\n /**\n * Whether the accordion is disabled. When `true`, all items cannot be expanded or collapsed.\n */\n disabled?: boolean;\n} & (\n | {\n /**\n * The currently selected values. To be used in a controlled fashion in conjunction with `onValueChange`.\n */\n value: string[];\n /**\n * A callback that is called when the selected values change. To be used in a controlled fashion in conjunction with `value`.\n */\n onValueChange: (value?: string[]) => void;\n /**\n * Not available in a controlled fashion.\n */\n defaultValue?: never;\n }\n | {\n /**\n * Not available in an uncontrolled fashion.\n */\n value?: never;\n /**\n * Not available in an uncontrolled fashion.\n */\n onValueChange?: never;\n /**\n * The default values of the accordion. To be used in an uncontrolled fashion.\n */\n defaultValue?: string[];\n }\n);\n\nexport class Accordion extends Component<{\n Element: HTMLDivElement;\n Args: AccordionSingleArgs | AccordionMultipleArgs;\n Blocks: {\n default: [\n {\n /**\n * The AccordionItem component.\n */\n Item: WithBoundArgs<typeof AccordionItem, \"selectedValue\" | \"toggleItem\" | \"disabled\">;\n },\n ];\n };\n}> {\n <template>\n <div data-disabled={{@disabled}} ...attributes>\n {{yield\n (hash\n Item=(component\n AccordionItem\n selectedValue=this.selectedValue\n toggleItem=this.toggleItem\n disabled=@disabled\n )\n )\n }}\n </div>\n </template>\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n @localCopy(\"args.defaultValue\") declare _internallyManagedValue?: string | string[];\n\n get selectedValue() {\n return this.args.value ?? this._internallyManagedValue;\n }\n\n toggleItem = (value: string) => {\n if (this.args.disabled) {\n return;\n }\n\n if (this.args.type === \"single\") {\n this.toggleItemSingle(value);\n } else if (this.args.type === \"multiple\") {\n this.toggleItemMultiple(value);\n }\n };\n\n toggleItemSingle = (value: string) => {\n assert(\"Cannot call `toggleItemSingle` when `disabled` is true.\", !this.args.disabled);\n assert(\n \"Cannot call `toggleItemSingle` when `type` is not `single`.\",\n this.args.type === \"single\",\n );\n\n if (value === this.selectedValue && !this.args.collapsible) {\n return;\n }\n\n const newValue = value === this.selectedValue ? undefined : value;\n\n if (this.args.onValueChange) {\n this.args.onValueChange(newValue);\n } else {\n this._internallyManagedValue = newValue;\n }\n };\n\n toggleItemMultiple = (value: string) => {\n assert(\"Cannot call `toggleItemMultiple` when `disabled` is true.\", !this.args.disabled);\n assert(\n \"Cannot call `toggleItemMultiple` when `type` is not `multiple`.\",\n this.args.type === \"multiple\",\n );\n\n const currentValues = (this.selectedValue as string[] | undefined) ?? [];\n const indexOfValue = currentValues.indexOf(value);\n let newValue: string[];\n\n if (indexOfValue === -1) {\n newValue = [...currentValues, value];\n } else {\n newValue = [\n ...currentValues.slice(0, indexOfValue),\n ...currentValues.slice(indexOfValue + 1),\n ];\n }\n\n if (this.args.onValueChange) {\n this.args.onValueChange(newValue);\n } else {\n this._internallyManagedValue = newValue;\n }\n };\n}\n\nexport default Accordion;\n"],"names":["AccordionContent","Component","setComponentTemplate","precompileTemplate","strictMode","scope","getDataState","isHidden","args","isExpanded","AccordionTrigger","on","templateOnly","AccordionHeader","hash","Trigger","AccordionItem","Header","Content","Array","isArray","selectedValue","includes","value","toggleItem","disabled","Accordion","g","prototype","localCopy","i","_internallyManagedValue","type","toggleItemSingle","toggleItemMultiple","assert","collapsible","newValue","undefined","onValueChange","currentValues","indexOfValue","indexOf","slice"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
-
2
1
  import { hash } from '@ember/helper';
3
2
  import { ReactiveImage } from 'reactiveweb/image';
4
3
  import { WaitUntil } from 'reactiveweb/wait-until';
@@ -6,16 +5,16 @@ import { precompileTemplate } from '@ember/template-compilation';
6
5
  import { setComponentTemplate } from '@ember/component';
7
6
  import templateOnly from '@ember/component/template-only';
8
7
 
9
- const Fallback = setComponentTemplate(precompileTemplate("\n {{#unless @isLoaded}}\n {{#let (WaitUntil @delayMs) as |delayFinished|}}\n {{#if delayFinished}}\n {{yield}}\n {{/if}}\n {{/let}}\n {{/unless}}\n", {
8
+ const Fallback = setComponentTemplate(precompileTemplate("{{#unless @isLoaded}}\n {{#let (WaitUntil @delayMs) as |delayFinished|}}\n {{#if delayFinished}}\n {{yield}}\n {{/if}}\n {{/let}}\n{{/unless}}", {
10
9
  strictMode: true,
11
10
  scope: () => ({
12
11
  WaitUntil
13
12
  })
14
13
  }), templateOnly());
15
- const Image = setComponentTemplate(precompileTemplate("\n {{#if @isLoaded}}\n <img alt=\"__missing__\" ...attributes src={{@src}} />\n {{/if}}\n", {
14
+ const Image = setComponentTemplate(precompileTemplate("{{#if @isLoaded}}\n <img alt=\"__missing__\" ...attributes src={{@src}} />\n{{/if}}", {
16
15
  strictMode: true
17
16
  }), templateOnly());
18
- const Avatar = setComponentTemplate(precompileTemplate("\n {{#let (ReactiveImage @src) as |imgState|}}\n <span data-prim-avatar ...attributes data-loading={{imgState.isLoading}} data-error={{imgState.isError}}>\n {{yield (hash Image=(component Image src=@src isLoaded=imgState.isResolved) Fallback=(component Fallback isLoaded=imgState.isResolved) isLoading=imgState.isLoading isError=imgState.isError)}}\n </span>\n {{/let}}\n", {
17
+ const Avatar = setComponentTemplate(precompileTemplate("{{#let (ReactiveImage @src) as |imgState|}}\n <span data-prim-avatar ...attributes data-loading={{imgState.isLoading}} data-error={{imgState.isError}}>\n {{yield (hash Image=(component Image src=@src isLoaded=imgState.isResolved) Fallback=(component Fallback isLoaded=imgState.isResolved) isLoading=imgState.isLoading isError=imgState.isError)}}\n </span>\n{{/let}}", {
19
18
  strictMode: true,
20
19
  scope: () => ({
21
20
  ReactiveImage,
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"avatar.js","sources":["../../src/components/avatar.gts"],"sourcesContent":["import { hash } from \"@ember/helper\";\n\nimport { ReactiveImage } from \"reactiveweb/image\";\nimport { WaitUntil } from \"reactiveweb/wait-until\";\n\nimport type { TOC } from \"@ember/component/template-only\";\nimport type { WithBoundArgs } from \"@glint/template\";\n\nconst Fallback: TOC<{\n Blocks: { default: [] };\n Args: {\n /**\n * The number of milliseconds to wait for the image to load\n * before displaying the fallback\n */\n delayMs?: number;\n /**\n * @private\n * Bound internally by ember-primitives\n */\n isLoaded: boolean;\n };\n}> = <template>\n {{#unless @isLoaded}}\n {{#let (WaitUntil @delayMs) as |delayFinished|}}\n {{#if delayFinished}}\n {{yield}}\n {{/if}}\n {{/let}}\n {{/unless}}\n</template>;\n\nconst Image: TOC<{\n Element: HTMLImageElement;\n Args: {\n /**\n * @private\n * The `src` value for the image.\n *\n * Bound internally by ember-primitives\n */\n src: string;\n /**\n * @private\n * Bound internally by ember-primitives\n */\n isLoaded: boolean;\n };\n}> = <template>\n {{#if @isLoaded}}\n <img alt=\"__missing__\" ...attributes src={{@src}} />\n {{/if}}\n</template>;\n\nexport const Avatar: TOC<{\n Element: HTMLSpanElement;\n Args: {\n /**\n * The `src` value for the image.\n */\n src: string;\n };\n Blocks: {\n default: [\n avatar: {\n /**\n * The image to render. It will only render when it has loaded.\n */\n Image: WithBoundArgs<typeof Image, \"src\" | \"isLoaded\">;\n /**\n * An element that renders when the image hasn't loaded.\n * This means whilst it's loading, or if there was an error.\n * If you notice a flash during loading,\n * you can provide a delayMs prop to delay its rendering so it only renders for those with slower connections.\n */\n Fallback: WithBoundArgs<typeof Fallback, \"isLoaded\">;\n /**\n * true while the image is loading\n */\n isLoading: boolean;\n /**\n * If the image fails to load, this will be `true`\n */\n isError: boolean;\n },\n ];\n };\n}> = <template>\n {{#let (ReactiveImage @src) as |imgState|}}\n <span\n data-prim-avatar\n ...attributes\n data-loading={{imgState.isLoading}}\n data-error={{imgState.isError}}\n >\n {{yield\n (hash\n Image=(component Image src=@src isLoaded=imgState.isResolved)\n Fallback=(component Fallback isLoaded=imgState.isResolved)\n isLoading=imgState.isLoading\n isError=imgState.isError\n )\n }}\n </span>\n {{/let}}\n</template>;\n\nexport default Avatar;\n"],"names":["Fallback","setComponentTemplate","precompileTemplate","strictMode","scope","WaitUntil","templateOnly","Image","Avatar","ReactiveImage","hash"],"mappings":";;;;;;;AAQA,MAAMA,QAcD,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,6JAAA,EAQL;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;AAEV,MAAMC,KAgBD,GAAAN,oBAAA,CAAAC,kBAAA,CAAA,sFAAA,EAIL;EAAAC,UAAA,EAAA;AAAU,CAAA,CAAA,EAAAG,YAAA,EAAA,CAAA;MAEGE,MAiCR,GAAAP,oBAAA,CAAAC,kBAAA,CAAA,oXAAA,EAkBL;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAK,aAAA;IAAAC,IAAA;IAAAH,KAAA;AAAAP,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAM,YAAA,EAAA;;;;"}
@@ -1,4 +1,3 @@
1
-
2
1
  import Component from '@glimmer/component';
3
2
  import { tracked } from '@glimmer/tracking';
4
3
  import { assert } from '@ember/debug';
@@ -11,7 +10,7 @@ import { setComponentTemplate } from '@ember/component';
11
10
  import templateOnly from '@ember/component/template-only';
12
11
  import { g, i } from 'decorator-transforms/runtime';
13
12
 
14
- const DialogElement = setComponentTemplate(precompileTemplate("\n <dialog ...attributes open={{@open}} {{on \"close\" @onClose}} {{@register}}>\n {{yield}}\n </dialog>\n", {
13
+ const DialogElement = setComponentTemplate(precompileTemplate("<dialog ...attributes open={{@open}} {{on \"close\" @onClose}} {{@register}}>\n {{yield}}\n</dialog>", {
15
14
  strictMode: true,
16
15
  scope: () => ({
17
16
  on
@@ -19,7 +18,7 @@ const DialogElement = setComponentTemplate(precompileTemplate("\n <dialog ...at
19
18
  }), templateOnly());
20
19
  class ModalDialog extends Component {
21
20
  static {
22
- setComponentTemplate(precompileTemplate("\n {{yield (hash isOpen=this.isOpen open=this.open close=this.close focusOnClose=this.refocus Dialog=(component DialogElement open=@open onClose=this.handleClose register=this.register))}}\n ", {
21
+ setComponentTemplate(precompileTemplate("{{yield (hash isOpen=this.isOpen open=this.open close=this.close focusOnClose=this.refocus Dialog=(component DialogElement open=@open onClose=this.handleClose register=this.register))}}", {
23
22
  strictMode: true,
24
23
  scope: () => ({
25
24
  hash,
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"dialog.js","sources":["../../src/components/dialog.gts"],"sourcesContent":["import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { assert } from \"@ember/debug\";\nimport { hash } from \"@ember/helper\";\nimport { on } from \"@ember/modifier\";\n\nimport { modifier as eModifier } from \"ember-modifier\";\n// temp\n// https://github.com/tracked-tools/tracked-toolbox/issues/38\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport { localCopy } from \"tracked-toolbox\";\n\nimport type { TOC } from \"@ember/component/template-only\";\nimport type { ModifierLike, WithBoundArgs } from \"@glint/template\";\n\nconst DialogElement: TOC<{\n Element: HTMLDialogElement;\n Args: {\n /**\n * @internal\n */\n open: boolean | undefined;\n /**\n * @internal\n */\n onClose: () => void;\n\n /**\n * @internal\n */\n register: ModifierLike<{ Element: HTMLDialogElement }>;\n };\n Blocks: { default: [] };\n}> = <template>\n <dialog ...attributes open={{@open}} {{on \"close\" @onClose}} {{@register}}>\n {{yield}}\n </dialog>\n</template>;\n\nexport interface Signature {\n Args: {\n /**\n * Optionally set the open state of the `<dialog>`\n * The state will still be managed internally,\n * so this does not need to be a maintained value, but whenever it changes,\n * the dialog element will reflect that change accordingly.\n */\n open?: boolean;\n /**\n * When the `<dialog>` is closed, this function will be called\n * and the `<dialog>`'s `returnValue` will be passed.\n *\n * This can be used to determine which button was clicked to close the modal\n *\n * Note though that this value is only populated when using\n * `<form method='dialog'>`\n */\n onClose?: (returnValue: string) => void;\n };\n Blocks: {\n default: [\n {\n /**\n * Represents the open state of the `<dialog>` element.\n */\n isOpen: boolean;\n\n /**\n * Closes the `<dialog>` element\n * Will throw an error if `Dialog` is not rendered.\n */\n close: () => void;\n\n /**\n * Opens the `<dialog>` element.\n * Will throw an error if `Dialog` is not rendered.\n */\n open: () => void;\n\n /**\n * This modifier should be applied to the button that opens the Dialog so that it can be re-focused when the dialog closes.\n *\n * Example:\n *\n * ```gjs\n * <template>\n * <Modal as |m|>\n * <button {{m.focusOnClose}} {{on \"click\" m.open}}>Open</button>\n *\n * <m.Dialog>...</m.Dialog>\n * </Modal>\n * </template>\n * ```\n */\n focusOnClose: ModifierLike<{ Element: HTMLElement }>;\n\n /**\n * This is the `<dialog>` element (with some defaults pre-wired).\n * This is required to be rendered.\n */\n Dialog: WithBoundArgs<typeof DialogElement, \"onClose\" | \"register\" | \"open\">;\n },\n ];\n };\n}\n\nclass ModalDialog extends Component<Signature> {\n <template>\n {{yield\n (hash\n isOpen=this.isOpen\n open=this.open\n close=this.close\n focusOnClose=this.refocus\n Dialog=(component DialogElement open=@open onClose=this.handleClose register=this.register)\n )\n }}\n </template>\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n @localCopy(\"args.open\") declare _isOpen: boolean;\n\n get isOpen() {\n /**\n * Always fallback to false (closed)\n */\n return this._isOpen ?? false;\n }\n set isOpen(val: boolean) {\n this._isOpen = val;\n }\n\n #lastIsOpen = false;\n refocus = eModifier((element) => {\n assert(`focusOnClose is only valid on a HTMLElement`, element instanceof HTMLElement);\n\n if (!this.isOpen && this.#lastIsOpen) {\n element.focus();\n }\n\n this.#lastIsOpen = this.isOpen;\n });\n\n @tracked declare dialogElement: HTMLDialogElement | undefined;\n\n register = eModifier((element: HTMLDialogElement) => {\n /**\n * This is very sad.\n *\n * But we need the element to be 'root state'\n * so that when we read things like \"isOpen\",\n * when the dialog is finally rendered, all the\n * downstream properties render.\n *\n * This has to be an async / delayed a bit, so that\n * the tracking frame can exit, and we don't infinite loop\n */\n void (async () => {\n await Promise.resolve();\n\n this.dialogElement = element;\n })();\n });\n\n /**\n * Closes the dialog -- this will throw an error in development if the dialog element was not rendered\n */\n close = () => {\n assert(\n \"Cannot call `close` on <Dialog> without rendering the dialog element.\",\n this.dialogElement,\n );\n\n /**\n * If the element is already closed, don't run all this again\n */\n if (!this.dialogElement.hasAttribute(\"open\")) {\n return;\n }\n\n /**\n * removes the `open` attribute\n * handleClose will be called because the dialog has bound the `close` event.\n */\n this.dialogElement.close();\n };\n\n /**\n * @internal\n *\n * handles the <dialog> element's native close behavior.\n * listened to via addEventListener('close', ...);\n */\n handleClose = () => {\n assert(\n \"Cannot call `handleDialogClose` on <Dialog> without rendering the dialog element. This is likely a bug in ember-primitives. Please open an issue <3\",\n this.dialogElement,\n );\n\n this.isOpen = false;\n this.args.onClose?.(this.dialogElement.returnValue);\n // the return value ends up staying... which is annoying\n this.dialogElement.returnValue = \"\";\n };\n\n /**\n * Opens the dialog -- this will throw an error in development if the dialog element was not rendered\n */\n open = () => {\n assert(\n \"Cannot call `open` on <Dialog> without rendering the dialog element.\",\n this.dialogElement,\n );\n\n /**\n * If the element is already open, don't run all this again\n */\n if (this.dialogElement.hasAttribute(\"open\")) {\n return;\n }\n\n /**\n * adds the `open` attribute\n */\n this.dialogElement.showModal();\n this.isOpen = true;\n };\n}\n\nexport const Modal = ModalDialog;\nexport const Dialog = ModalDialog;\n\nexport default ModalDialog;\n"],"names":["DialogElement","setComponentTemplate","precompileTemplate","strictMode","scope","on","templateOnly","ModalDialog","Component","hash","g","prototype","localCopy","i","isOpen","_isOpen","val","refocus","eModifier","element","assert","HTMLElement","focus","tracked","register","Promise","resolve","dialogElement","close","hasAttribute","handleClose","args","onClose","returnValue","open","showModal","Modal","Dialog"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
-
2
1
  import { precompileTemplate } from '@ember/template-compilation';
3
2
  import { setComponentTemplate } from '@ember/component';
4
3
  import templateOnly from '@ember/component/template-only';
5
4
 
6
- const ExternalLink = setComponentTemplate(precompileTemplate("\n <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"##missing##\" ...attributes>\n {{yield}}\n </a>\n", {
5
+ const ExternalLink = setComponentTemplate(precompileTemplate("<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"##missing##\" ...attributes>\n {{yield}}\n</a>", {
7
6
  strictMode: true
8
7
  }), templateOnly());
9
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"external-link.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"external-link.js","sources":["../../src/components/external-link.gts"],"sourcesContent":["import type { TOC } from \"@ember/component/template-only\";\n\nexport const ExternalLink: TOC<{\n Element: HTMLAnchorElement;\n Blocks: {\n default: [];\n };\n}> = <template>\n <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"##missing##\" ...attributes>\n {{yield}}\n </a>\n</template>;\n\nexport default ExternalLink;\n"],"names":["ExternalLink","setComponentTemplate","precompileTemplate","strictMode","templateOnly"],"mappings":";;;;MAEaA,YAKR,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,yGAAA,EAIL;EAAAC,UAAA,EAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -1,4 +1,3 @@
1
-
2
1
  import { fn } from '@ember/helper';
3
2
  import { on } from '@ember/modifier';
4
3
  import { dataFrom } from 'form-data-utils';
@@ -15,7 +14,7 @@ const handleSubmit = (onChange, event) => {
15
14
  event.preventDefault();
16
15
  handleInput(onChange, event, "submit");
17
16
  };
18
- const Form = setComponentTemplate(precompileTemplate("\n <form {{on \"input\" (fn handleInput @onChange)}} {{on \"submit\" (fn handleSubmit @onChange)}} ...attributes>\n {{yield}}\n </form>\n", {
17
+ const Form = setComponentTemplate(precompileTemplate("<form {{on \"input\" (fn handleInput @onChange)}} {{on \"submit\" (fn handleSubmit @onChange)}} ...attributes>\n {{yield}}\n</form>", {
19
18
  strictMode: true,
20
19
  scope: () => ({
21
20
  on,