@txstate-mws/svelte-components 0.0.66 → 1.0.2

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 (61) hide show
  1. package/README.md +12 -0
  2. package/dist/actions/{a11y.js → buttonify.js} +1 -1
  3. package/dist/actions/buttonify.js.map +1 -0
  4. package/dist/actions/glue.js +1 -3
  5. package/dist/actions/glue.js.map +1 -1
  6. package/dist/actions/index.js +1 -1
  7. package/dist/actions/index.js.map +1 -1
  8. package/dist/actions/portal.js +3 -7
  9. package/dist/actions/portal.js.map +1 -1
  10. package/dist/actions/stickyfixed.js +5 -5
  11. package/dist/components/CollapsingTable.svelte +3 -3
  12. package/dist/components/ConditionalWrapper.svelte +1 -1
  13. package/dist/components/FocusLock.svelte +13 -11
  14. package/dist/components/Modal.svelte +19 -11
  15. package/dist/components/PopupMenu.svelte +19 -18
  16. package/dist/components/ScreenReaderOnly.svelte +4 -5
  17. package/dist/lib/activestore.js +123 -0
  18. package/dist/lib/activestore.js.map +1 -0
  19. package/dist/lib/convertedstore.js +41 -0
  20. package/dist/lib/convertedstore.js.map +1 -0
  21. package/dist/lib/derivedstore.js +37 -25
  22. package/dist/lib/derivedstore.js.map +1 -1
  23. package/dist/lib/index.js +3 -1
  24. package/dist/lib/index.js.map +1 -1
  25. package/dist/lib/safestore.js +2 -2
  26. package/dist/lib/safestore.js.map +1 -1
  27. package/dist/lib/store.js +27 -0
  28. package/dist/lib/store.js.map +1 -0
  29. package/dist/lib/substore.js +10 -9
  30. package/dist/lib/substore.js.map +1 -1
  31. package/dist/ts/actions/{a11y.d.ts → buttonify.d.ts} +0 -0
  32. package/dist/ts/actions/glue.d.ts +1 -1
  33. package/dist/ts/actions/index.d.ts +1 -1
  34. package/dist/ts/actions/stickyfixed.d.ts +5 -5
  35. package/dist/ts/components/CollapsingTable.svelte +3 -3
  36. package/dist/ts/components/ConditionalWrapper.svelte +1 -1
  37. package/dist/ts/components/FocusLock.svelte +13 -10
  38. package/dist/ts/components/Modal.svelte +20 -11
  39. package/dist/ts/components/PopupMenu.svelte +18 -17
  40. package/dist/ts/components/ScreenReaderOnly.svelte +5 -5
  41. package/dist/ts/lib/activestore.d.ts +60 -0
  42. package/dist/ts/lib/convertedstore.d.ts +16 -0
  43. package/dist/ts/lib/derivedstore.d.ts +15 -8
  44. package/dist/ts/lib/index.d.ts +3 -1
  45. package/dist/ts/lib/safestore.d.ts +2 -2
  46. package/dist/ts/lib/store.d.ts +16 -0
  47. package/dist/ts/lib/substore.d.ts +7 -6
  48. package/dist/ts/tests/Modal/ModalTest.svelte +2 -2
  49. package/dist/ts/tests/PopupMenu/PopupMenuSimple.svelte +8 -2
  50. package/docs/CollapsingTable.md +11 -12
  51. package/docs/ConditionalWrapper.md +35 -0
  52. package/docs/Modal.md +63 -0
  53. package/docs/PopupMenu.md +31 -0
  54. package/docs/ScreenReaderOnly.md +10 -0
  55. package/docs/actions.md +76 -2
  56. package/docs/stores.md +203 -0
  57. package/package.json +17 -9
  58. package/dist/actions/a11y.js.map +0 -1
  59. package/dist/lib/deepstore.js +0 -80
  60. package/dist/lib/deepstore.js.map +0 -1
  61. package/dist/ts/lib/deepstore.d.ts +0 -42
package/README.md CHANGED
@@ -3,3 +3,15 @@ A set of generically useful components for svelte.
3
3
 
4
4
  # Components
5
5
  [CollapsingTable](/docs/CollapsingTable.md)
6
+ [ConditionalWrapper](/docs/ConditionalWrapper.md)
7
+ [FocusLock](/docs/Modal.md#FocusLock)
8
+ [Modal](/docs/Modal.md#Modal)
9
+ [PopupMenu](/docs/PopupMenu.md)
10
+ [ScreenReaderOnly](/docs/ScreenReaderOnly.md)
11
+
12
+ # Actions
13
+ [use:buttonify](/docs/actions.md#use:buttonify)
14
+ [use:glue](/docs/actions.md#use:glue)
15
+ [use:offset](/docs/actions.md#use:offset)
16
+ [use:portal](/docs/actions.md#use:portal)
17
+ [use:resize](/docs/actions.md#use:resize)
@@ -28,4 +28,4 @@ function buttonify(node) {
28
28
  };
29
29
  }
30
30
  exports.buttonify = buttonify;
31
- //# sourceMappingURL=a11y.js.map
31
+ //# sourceMappingURL=buttonify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttonify.js","sourceRoot":"","sources":["../../src/actions/buttonify.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,SAAgB,SAAS,CAAE,IAAiB;IAC1C,SAAS,OAAO,CAAE,CAAgB;QAChC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YACrB,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;gBACxD,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,CAAC,CAAC,eAAe,EAAE,CAAA;gBACnB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;aAC7C;SACF;IACH,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACzC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;QAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;IACxC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;IAE7B,OAAO;QACL,OAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAC9C,CAAC;KACF,CAAA;AACH,CAAC;AArBD,8BAqBC"}
@@ -80,9 +80,7 @@ function glue(el, { target, align = 'auto', cover = false, store }) {
80
80
  update(target, sharedOffset, reposition);
81
81
  }
82
82
  },
83
- destroy() {
84
- destroy();
85
- }
83
+ destroy
86
84
  };
87
85
  }
88
86
  exports.glue = glue;
@@ -1 +1 @@
1
- {"version":3,"file":"glue.js","sourceRoot":"","sources":["../../src/actions/glue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glue.js","sourceRoot":"","sources":["../../src/actions/glue.ts"],"names":[],"mappings":";;;AAAA,gCAAqJ;AAgBrJ,IAAI,eAAe,GAAG,KAAK,CAAA;AAC3B,SAAgB,IAAI,CAAE,EAAe,EAAE,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAY;IAC/F,IAAI,CAAC,eAAe,EAAE;QACpB,eAAe,GAAG,IAAI,CAAA;QACtB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAA;KAC1C;IACD,IAAI,MAAgC,CAAA;IACpC,IAAI,MAAgC,CAAA;IACpC,IAAI,YAAY,GAAG,IAAA,wBAAkB,EAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAEjD,SAAS,UAAU,CAAE,MAAgC;QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,YAAY,WAAW,CAAC;YAAE,OAAM;QACjF,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,KAAK,YAAY,IAAI,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,kBAAY,EAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;QACzK,IAAI,KAAK,KAAK,MAAM,EAAE;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAA;YAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;YAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAA;YAChF,SAAS,GAAG,SAAS,GAAG,SAAmB,CAAA;SAC5C;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;QACxC,IAAI,SAAS,KAAK,YAAY,EAAE;YAC9B,qBAAqB,CAAC,GAAG,EAAE;gBACzB,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,GAAG,IAAI,CAAA;gBAChF,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,CAAA;gBACtD,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;gBACpB,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAA;YACrB,CAAC,CAAC,CAAA;YACF,MAAM,GAAG,QAAQ,CAAA;YACjB,MAAM,GAAG,MAAM,CAAA;SAChB;aAAM,IAAI,SAAS,KAAK,aAAa,EAAE;YACtC,qBAAqB,CAAC,GAAG,EAAE;gBACzB,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,GAAG,IAAI,CAAA;gBAChF,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAA;gBAClB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;gBACpB,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,IAAI,CAAA;YAC3D,CAAC,CAAC,CAAA;YACF,MAAM,GAAG,QAAQ,CAAA;YACjB,MAAM,GAAG,OAAO,CAAA;SACjB;aAAM,IAAI,SAAS,KAAK,SAAS,EAAE;YAClC,qBAAqB,CAAC,GAAG,EAAE;gBACzB,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAA;gBACjB,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,CAAA;gBACtD,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,CAAA;gBACzF,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAA;YACrB,CAAC,CAAC,CAAA;YACF,MAAM,GAAG,KAAK,CAAA;YACd,MAAM,GAAG,MAAM,CAAA;SAChB;aAAM,IAAI,SAAS,KAAK,UAAU,EAAE;YACnC,qBAAqB,CAAC,GAAG,EAAE;gBACzB,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAA;gBACjB,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAA;gBAClB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,CAAA;gBACzF,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,IAAI,CAAA;YAC3D,CAAC,CAAC,CAAA;YACF,MAAM,GAAG,KAAK,CAAA;YACd,MAAM,GAAG,OAAO,CAAA;SACjB;QACD,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iCAAM,CAAC,KAAE,MAAM,EAAE,MAAM,IAAG,CAAC,CAAA;IAChD,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,uCAAiC,EAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;IAE/F,OAAO;QACL,MAAM,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,EAAY;YACjG,KAAK,GAAG,MAAM,CAAA;YACd,KAAK,GAAG,MAAM,CAAA;YACd,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE;gBAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iCAAM,CAAC,KAAE,MAAM,EAAE,MAAM,IAAG,CAAC,CAAA;gBAC9C,KAAK,GAAG,MAAM,CAAA;aACf;YACD,IAAI,MAAM,KAAK,OAAO,EAAE;gBACtB,YAAY,GAAG,IAAA,wBAAkB,EAAC,EAAE,EAAE,OAAO,CAAC,CAAA;gBAC9C,MAAM,GAAG,OAAO,CAAA;gBAChB,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;aACzC;QACH,CAAC;QACD,OAAO;KACR,CAAA;AACH,CAAC;AA7ED,oBA6EC"}
@@ -10,7 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./a11y"), exports);
13
+ __exportStar(require("./buttonify"), exports);
14
14
  __exportStar(require("./glue"), exports);
15
15
  __exportStar(require("./offset"), exports);
16
16
  __exportStar(require("./portal"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAsB;AACtB,yCAAsB;AACtB,2CAAwB;AACxB,2CAAwB;AACxB,2CAAwB;AACxB,2CAAwB;AACxB,gDAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA2B;AAC3B,yCAAsB;AACtB,2CAAwB;AACxB,2CAAwB;AACxB,2CAAwB;AACxB,2CAAwB;AACxB,gDAA6B"}
@@ -3,15 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.portal = void 0;
4
4
  function portal(el, target = document.body) {
5
5
  function update(target = document.body) {
6
- if (!target)
7
- return;
8
- target.appendChild(el);
9
- el.hidden = false;
6
+ target === null || target === void 0 ? void 0 : target.appendChild(el);
10
7
  }
11
8
  function destroy() {
12
- if (el.parentElement) {
13
- el.parentElement.removeChild(el);
14
- }
9
+ var _a;
10
+ (_a = el.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(el);
15
11
  }
16
12
  update(target);
17
13
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../src/actions/portal.ts"],"names":[],"mappings":";;;AAAA,SAAgB,MAAM,CAAE,EAAe,EAAE,SAA2B,QAAQ,CAAC,IAAI;IAC/E,SAAS,MAAM,CAAE,SAA2B,QAAQ,CAAC,IAAI;QACvD,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QACtB,EAAE,CAAC,MAAM,GAAG,KAAK,CAAA;IACnB,CAAC;IACD,SAAS,OAAO;QACd,IAAI,EAAE,CAAC,aAAa,EAAE;YACpB,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;SACjC;IACH,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,CAAA;IACd,OAAO;QACL,MAAM;QACN,OAAO;KACR,CAAA;AACH,CAAC;AAhBD,wBAgBC"}
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../src/actions/portal.ts"],"names":[],"mappings":";;;AAAA,SAAgB,MAAM,CAAE,EAAe,EAAE,SAA2B,QAAQ,CAAC,IAAI;IAC/E,SAAS,MAAM,CAAE,SAA2B,QAAQ,CAAC,IAAI;QACvD,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAC,EAAE,CAAC,CAAA;IACzB,CAAC;IACD,SAAS,OAAO;;QACd,MAAA,EAAE,CAAC,aAAa,0CAAE,WAAW,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,CAAA;IACd,OAAO;QACL,MAAM;QACN,OAAO;KACR,CAAA;AACH,CAAC;AAZD,wBAYC"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stickyfixed = void 0;
4
4
  const lib_1 = require("../lib");
5
5
  /**
6
- * An implementation of stickyness based on `transform: translateY()`. Only use when
6
+ * An implementation of stickyness based on `positon: fixed`. Only use when
7
7
  * `position: sticky` won't work for you. If `position: sticky` does work for you, use it,
8
8
  * it performs better.
9
9
  *
@@ -13,10 +13,10 @@ const lib_1 = require("../lib");
13
13
  * 3) it always stays within the boundaries of the closest parent element that has a `position`
14
14
  * * use:sticky accepts a `target` element as a parameter, defining the bounding container
15
15
  *
16
- * Note that this implementation sacrifices simplicity for animation performance. It does a lot of
17
- * work like cloning the element you place it on, placing the cloned element next to yours in the DOM,
18
- * setting widths to match between them, watching for mutations to keep them in sync, etc. Some of
19
- * this work may get foiled if you have a complex html/css/js situation.
16
+ * Note that this implementation gets great animation performance at the cost of extra complexity.
17
+ * It does a lot of work like cloning the element you place it on, placing the cloned element next
18
+ * to yours in the DOM, setting widths to match between them, watching for mutations to keep them
19
+ * in sync, etc. Some of this work may get foiled if you have a complex html/css/js situation.
20
20
  *
21
21
  * You may also want to try use:sticky. It is based on setting `transform: translateY()` as appropriate,
22
22
  * and is less fragile than this. However, it cannot do its work before the scroll on mobile, only after,
@@ -1,5 +1,5 @@
1
1
  <script>var _a;
2
- import { DeepStore, classes } from '../lib';
2
+ import { Store, classes } from '../lib';
3
3
  import { derived } from 'svelte/store';
4
4
  import DefaultPopupMenu from './PopupMenu.svelte';
5
5
  import ScreenReaderOnly from './ScreenReaderOnly.svelte';
@@ -41,7 +41,7 @@ function reactToColumns(columns) {
41
41
  }
42
42
  $: sortedcolumns = reactToColumns(columns);
43
43
  $: itemkeys = items.map(item => { var _a, _b; return (_b = (_a = item.id) !== null && _a !== void 0 ? _a : item._id) !== null && _b !== void 0 ? _b : identifyingkeys.map(k => item[k]).join('.'); });
44
- const state = new DeepStore({
44
+ const state = new Store({
45
45
  keepcolumns: [],
46
46
  hiddencolumns: [],
47
47
  dropdowncolumn: undefined
@@ -113,7 +113,7 @@ $: menubuttonelement = headers[$state.keepcolumns.length - 1];
113
113
  </table>
114
114
  </div>
115
115
  {#if $menuitems.length > 0}
116
- <svelte:component this={PopupMenu} {menuContainerClass} {menuClass} {menuItemClass} {menuItemHilitedClass} items={$menuitems} buttonelement={menubuttonelement} bind:selected></svelte:component>
116
+ <svelte:component this={PopupMenu} {menuContainerClass} {menuClass} {menuItemClass} {menuItemHilitedClass} items={$menuitems} buttonelement={menubuttonelement} on:change={e => selected = e.detail}></svelte:component>
117
117
  {/if}
118
118
 
119
119
  <style>
@@ -9,7 +9,7 @@
9
9
  }
10
10
  return t;
11
11
  };
12
- export let condition = undefined;
12
+ export let condition;
13
13
  export let component = undefined;
14
14
  export let a = false;
15
15
  export let span = false;
@@ -10,15 +10,17 @@ let className = '';
10
10
  export { className as class };
11
11
  import { onMount, onDestroy, createEventDispatcher, tick } from 'svelte';
12
12
  import { tabbable } from 'tabbable';
13
+ import { sleep } from 'txstate-utils';
13
14
  import { buttonify } from '../actions';
14
15
  import ScreenReaderOnly from './ScreenReaderOnly.svelte';
15
16
  const dispatch = createEventDispatcher();
16
17
  let lockelement;
17
18
  let abovelockelement;
18
19
  let active = true;
20
+ let listenforescape = false;
19
21
  if (initialfocus)
20
22
  hidefocus = false;
21
- onMount(() => {
23
+ onMount(async () => {
22
24
  const prevFocusLock = FocusLockStack.slice(-1)[0];
23
25
  if (prevFocusLock)
24
26
  prevFocusLock.pause();
@@ -29,6 +31,7 @@ onMount(() => {
29
31
  if (typeof returnfocusto === 'undefined') {
30
32
  returnfocusto = document.querySelector(':focus');
31
33
  }
34
+ await sleep(1); // sapper resets focus on page load, so we'll wait a millisecond in case our modal is on screen at load
32
35
  if (initialfocus) {
33
36
  const focusEl = lockelement.querySelector(initialfocus);
34
37
  if (focusEl instanceof HTMLElement)
@@ -37,20 +40,13 @@ onMount(() => {
37
40
  else {
38
41
  setInitialFocus();
39
42
  }
43
+ setTimeout(() => listenforescape = true, 0);
40
44
  });
41
45
  onDestroy(async () => {
42
46
  const wasactive = active;
43
- let focuswasinside;
44
- try {
45
- focuswasinside = lockelement.matches(':focus-within');
46
- }
47
- catch (e) {
48
- // browser doesn't support :focus-within
49
- focuswasinside = true;
50
- }
51
47
  active = false;
52
48
  await tick();
53
- if (returnfocusto && wasactive && focuswasinside) {
49
+ if (returnfocusto && wasactive) {
54
50
  returnfocusto.focus();
55
51
  }
56
52
  FocusLockStack.pop();
@@ -84,8 +80,14 @@ const focusin = (e) => {
84
80
  setInitialFocus();
85
81
  }
86
82
  };
83
+ const windowclick = (_) => {
84
+ if (listenforescape && active) {
85
+ returnfocusto = undefined;
86
+ dispatch('escape');
87
+ }
88
+ };
87
89
  </script>
88
-
90
+ <svelte:window on:click={windowclick} />
89
91
  <div class={className} role="alertdialog" aria-modal="true" on:click|stopPropagation on:keydown|stopPropagation={keydown} on:focusin={focusin}>
90
92
  <div bind:this={abovelockelement} tabindex="0"></div>
91
93
  <div bind:this={lockelement} on:keydown={keydown}>
@@ -1,25 +1,29 @@
1
- <script>export let lockbackdrop = false;
1
+ <script>export let escapable = true;
2
2
  export let hidefocus = true;
3
3
  export let hidefocuslabel = undefined;
4
4
  export let returnfocusto = undefined;
5
5
  export let initialfocus = undefined;
6
+ export let containerClass = '';
7
+ export let opaque = false;
6
8
  import FocusLock from './FocusLock.svelte';
7
9
  import { createEventDispatcher, onMount } from 'svelte';
8
10
  import { portal } from '../actions';
9
11
  const dispatch = createEventDispatcher();
10
12
  const endmodal = () => {
11
- dispatch('dismiss');
13
+ dispatch('escape');
12
14
  };
13
15
  onMount(() => {
16
+ document.body.style.marginRight = (window.innerWidth - document.body.clientWidth) + 'px';
14
17
  document.body.style.overflow = 'hidden';
15
18
  return () => {
16
19
  document.body.style.overflow = '';
20
+ document.body.style.marginRight = '';
17
21
  };
18
22
  });
19
23
  </script>
20
24
 
21
- <div use:portal class="modal-backdrop" on:click={() => lockbackdrop || endmodal()}>
22
- <FocusLock class="modal-container" escapable={!lockbackdrop} on:escape={endmodal} {hidefocus} {hidefocuslabel} {returnfocusto} {initialfocus} on:escape={() => lockbackdrop || endmodal()}>
25
+ <div use:portal class="modal-backdrop" class:opaque on:click|stopPropagation|preventDefault={() => escapable && endmodal()}>
26
+ <FocusLock class="modal-container {containerClass}" {escapable} on:escape {hidefocus} {hidefocuslabel} {returnfocusto} {initialfocus}>
23
27
  <slot></slot>
24
28
  </FocusLock>
25
29
  </div>
@@ -29,16 +33,20 @@ onMount(() => {
29
33
  position: fixed;
30
34
  top: 0;
31
35
  left: 0;
32
- width: 100%;
33
- height: 100%;
36
+ width: 100vw;
37
+ height: 100vh;
34
38
  background-color: var(--modal-bg, rgba(0, 0, 0, 0.7));
35
- overflow: auto;
36
39
  z-index: 100;
40
+ display: flex;
41
+ justify-content: center;
42
+ align-items: center
43
+ }
44
+ .modal-backdrop.opaque {
45
+ background-color: var(--modal-bg-opaque, #4c4c4c);
37
46
  }
38
47
  .modal-backdrop :global(.modal-container) {
39
- position: absolute;
40
- left: 50%;
41
- top: 50%;
42
- transform: translate(-50%, -50%);
48
+ max-width: 100vw;
49
+ max-height: 100vh;
50
+ overflow: auto;
43
51
  }
44
52
  </style>
@@ -1,7 +1,7 @@
1
1
  <script>import { glue, portal } from '../actions';
2
2
  import { createEventDispatcher, onDestroy, tick } from 'svelte';
3
3
  import { randomid } from 'txstate-utils';
4
- import { DeepStore } from '../lib';
4
+ import { Store } from '../lib';
5
5
  import ScreenReaderOnly from './ScreenReaderOnly.svelte';
6
6
  const dispatch = createEventDispatcher();
7
7
  export let menushown = false;
@@ -16,18 +16,18 @@ export let align = 'auto';
16
16
  export let cover = false;
17
17
  export let showSelected = true;
18
18
  export let width = undefined;
19
- export let computedalign = new DeepStore({ valign: 'bottom', halign: 'left' });
19
+ export let computedalign = new Store({ valign: 'bottom', halign: 'left' });
20
20
  export let usePortal = undefined;
21
21
  export let emptyText = undefined;
22
- export let hilited = undefined;
23
- export let selected = undefined;
22
+ export let value = undefined;
23
+ let hilited = undefined;
24
24
  let menuelement;
25
25
  let itemelements = [];
26
26
  const menuid = randomid();
27
27
  let firstactive = 0;
28
28
  let lastactive = items.length - 1;
29
29
  function hiddenItem(item) {
30
- return !!item && !showSelected && item.value === (selected === null || selected === void 0 ? void 0 : selected.value);
30
+ return !!item && !showSelected && item.value === value;
31
31
  }
32
32
  async function reactToItems(..._) {
33
33
  var _a;
@@ -36,7 +36,7 @@ async function reactToItems(..._) {
36
36
  if (hilited && ((_a = items[hilited]) === null || _a === void 0 ? void 0 : _a.disabled))
37
37
  hilited = firstactive;
38
38
  }
39
- $: reactToItems(items, selected);
39
+ $: reactToItems(items, value);
40
40
  async function reactToMenuShown(_) {
41
41
  if (!buttonelement) {
42
42
  hilited = undefined;
@@ -66,7 +66,7 @@ function move(idx) {
66
66
  buttonelement.setAttribute('aria-activedescendant', `${menuid}-${hilited}`);
67
67
  }
68
68
  function onkeydown(e) {
69
- var _a, _b;
69
+ var _a, _b, _c, _d;
70
70
  if (e.key === 'ArrowDown') {
71
71
  e.preventDefault();
72
72
  if (menushown) {
@@ -98,8 +98,8 @@ function onkeydown(e) {
98
98
  if (menushown) {
99
99
  menushown = false;
100
100
  if (typeof hilited !== 'undefined') {
101
- selected = items[hilited];
102
- dispatch('change', items[hilited].value);
101
+ value = (_c = items[hilited]) === null || _c === void 0 ? void 0 : _c.value;
102
+ dispatch('change', items[hilited]);
103
103
  }
104
104
  }
105
105
  else {
@@ -114,8 +114,8 @@ function onkeydown(e) {
114
114
  if (typeof hilited !== 'undefined') {
115
115
  e.preventDefault();
116
116
  menushown = false;
117
- selected = items[hilited];
118
- dispatch('change', items[hilited].value);
117
+ value = (_d = items[hilited]) === null || _d === void 0 ? void 0 : _d.value;
118
+ dispatch('change', items[hilited]);
119
119
  }
120
120
  else {
121
121
  if (buttonelement.tagName !== 'INPUT') {
@@ -152,6 +152,7 @@ function cleanup(element) {
152
152
  element.removeEventListener('click', onbuttonclick);
153
153
  element.removeEventListener('keydown', onkeydown);
154
154
  element.removeEventListener('blur', onblur);
155
+ element.removeAttribute('aria-disabled');
155
156
  element.removeAttribute('aria-haspopup');
156
157
  element.removeAttribute('aria-expanded');
157
158
  element.removeAttribute('aria-controls');
@@ -178,29 +179,29 @@ const onclick = (item) => (e) => {
178
179
  if (item.disabled)
179
180
  return;
180
181
  menushown = false;
181
- selected = item;
182
- dispatch('change', item.value);
182
+ value = item.value;
183
+ dispatch('change', item);
183
184
  };
184
- $: hasSelected = showSelected && !!items.find(itm => itm.value === (selected === null || selected === void 0 ? void 0 : selected.value));
185
+ $: hasSelected = showSelected && items.some(itm => itm.value === value);
185
186
  </script>
186
187
 
187
188
  {#if menushown}
188
189
  <div use:portal={usePortal === true ? document.body : (usePortal || null)} use:glue={{ target: buttonelement, align, cover, store: computedalign }} class={menuContainerClass}>
189
190
  <ul bind:this={menuelement} id={menuid} role='listbox' style={width ? `width: ${width}` : ''} class={menuClass} class:hasSelected class:defaultmenu={!menuClass && !menuContainerClass} on:keydown={onkeydown}>
190
191
  {#each items as item, i (item.value)}
191
- {#if showSelected || !selected || item.value !== selected.value}
192
+ {#if showSelected || item.value !== value}
192
193
  <li
193
194
  id={`${menuid}-${i}`}
194
195
  bind:this={itemelements[i]}
195
- class={`${menuItemClass} ${i === hilited ? menuItemHilitedClass || '' : ''} ${selected && selected.value === item.value ? menuItemSelectedClass || '' : ''}`}
196
+ class={`${menuItemClass} ${i === hilited ? menuItemHilitedClass || '' : ''} ${value === item.value ? menuItemSelectedClass || '' : ''}`}
196
197
  class:disabled={!!item.disabled}
197
198
  class:hilited={!menuItemHilitedClass && i === hilited}
198
- class:selected={showSelected && !menuItemSelectedClass && selected && selected.value === item.value}
199
+ class:selected={showSelected && !menuItemSelectedClass && value === item.value}
199
200
  on:click={onclick(item)}
200
201
  role="option"
201
202
  tabindex=-1
202
203
  aria-disabled={item.disabled}
203
- ><slot {item} label={item.label || item.value} hilited={i === hilited} selected={selected && selected.value === item.value}>{item.label || item.value}</slot></li>
204
+ ><slot {item} label={item.label || item.value} hilited={i === hilited} selected={value === item.value}>{item.label || item.value}</slot></li>
204
205
  {/if}
205
206
  {/each}
206
207
  {#if items.length === 0}
@@ -1,7 +1,6 @@
1
- <script>
2
- export let id = ''
3
- export let arialive = ''
4
- export let ariaatomic = ''
1
+ <script>export let id = undefined;
2
+ export let arialive = undefined;
3
+ export let ariaatomic = undefined;
5
4
  </script>
6
5
 
7
6
  <style>
@@ -23,4 +22,4 @@
23
22
  }
24
23
  </style>
25
24
 
26
- <span id={id} class="sr-only" aria-live={arialive} aria-atomic={ariaatomic}><slot/></span>
25
+ <span {id} class="sr-only" aria-live={arialive} aria-atomic={ariaatomic}><slot/></span>
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActiveStore = exports.isSettable = exports.isWritable = exports.isUsable = void 0;
4
+ function isUsable(value) {
5
+ return !!value && typeof value.subscribe === 'function';
6
+ }
7
+ exports.isUsable = isUsable;
8
+ function isWritable(value) {
9
+ return isUsable(value) && typeof value.update === 'function';
10
+ }
11
+ exports.isWritable = isWritable;
12
+ function isSettable(value) {
13
+ return isWritable(value) && typeof value.set === 'function';
14
+ }
15
+ exports.isSettable = isSettable;
16
+ /**
17
+ * An alternative to svelte's "writable" that does not check equality before notifying
18
+ * subscribers. A writable will notify subscribers after a shallow equality check, which
19
+ * does not work with mutated states:
20
+ * store.update(v => { v.someprop = 'newvalue'; return v })
21
+ *
22
+ * With a writable, this line would NOT notify subscribers because the state will be compared
23
+ * against itself and always found to be equal.
24
+ *
25
+ * An alternative to this store type is SafeStore, which will do a deep equality check but
26
+ * clone data so that it is safe against mutations. It costs more CPU cycles but results in
27
+ * fewer notifications to subscribers which could be an overall win.
28
+ */
29
+ class ActiveStore {
30
+ constructor(value) {
31
+ this.cleanups = [];
32
+ this.sourceInits = [];
33
+ this.subscribers = new Map();
34
+ this.value = this.clone(value);
35
+ }
36
+ // this is here to support SafeStore: the regular store makes this a null-op, but
37
+ // SafeStore overrides the implementation to a deep clone operation
38
+ clone(value) {
39
+ return value;
40
+ }
41
+ // always returns false so that subscribers are notified on every `set` or `update`.
42
+ // Subclasses can override this for shallow or deep equality checks.
43
+ equal(a, b) {
44
+ return false;
45
+ }
46
+ set(value) {
47
+ if (!this.equal(value, this.value)) {
48
+ this.value = this.clone(value);
49
+ for (const [id, run] of this.subscribers) {
50
+ run(value);
51
+ }
52
+ }
53
+ }
54
+ update(updater) {
55
+ // we have to send the user's updater function a cloned value, because they might mutate it
56
+ this.set(updater(this.clone(this.value)));
57
+ }
58
+ subscribe(run) {
59
+ // if we previously had no listeners, then we will have unsubscribed from our sources
60
+ // and we need to re-subscribe so our new listener will get updates
61
+ if (this.subscribers.size === 0)
62
+ this.subscribeToSources();
63
+ // generate a random id for this subscriber, it makes unsubscription O(1) instead of O(n)
64
+ let id;
65
+ do {
66
+ id = Math.random().toString(32);
67
+ } while (this.subscribers.has(id));
68
+ // register our new subscriber to receive updates
69
+ this.subscribers.set(id, run);
70
+ // immediately send the current value to our new subscriber
71
+ run(this.value);
72
+ // return an unsubscribe function
73
+ return () => {
74
+ this.subscribers.delete(id);
75
+ // if we have no listeners, stop listening to our sources for updates
76
+ // this makes it possible for us to be properly garbage collected
77
+ if (this.subscribers.size === 0)
78
+ this.unsubscribeFromSources();
79
+ };
80
+ }
81
+ /**
82
+ * Provided as a last ditch avenue to clean up memory after rogue subscribers forget
83
+ * to unsubscribe themselves. For example, in an SSR environment one could clear out
84
+ * global stores anytime a request finishes and no other requests are being processed.
85
+ */
86
+ clearSubscribers() {
87
+ this.subscribers.clear();
88
+ this.unsubscribeFromSources();
89
+ }
90
+ /**
91
+ * Stores that subscribe to external events should set it up with a start/stop mentality
92
+ * so that the external events can be unsubscribed when the store itself has no listeners
93
+ * to notify. This helps ensure unused stores can be garbage collected.
94
+ *
95
+ * To do this, pass registerSource a function that initializes the subscription to the external
96
+ * event, and returns a function that can unsubscribe from the external event. This parent
97
+ * class will take care of running those functions at appropriate times.
98
+ */
99
+ registerSource(fn) {
100
+ if (this.subscribers.size)
101
+ this.cleanups.push(fn());
102
+ this.sourceInits.push(fn);
103
+ }
104
+ /**
105
+ * Provided in case a child class has a need to change out the external resources
106
+ */
107
+ unregisterSources() {
108
+ this.unsubscribeFromSources();
109
+ this.sourceInits = [];
110
+ }
111
+ subscribeToSources() {
112
+ for (const fn of this.sourceInits) {
113
+ this.cleanups.push(fn());
114
+ }
115
+ }
116
+ unsubscribeFromSources() {
117
+ for (const fn of this.cleanups)
118
+ fn();
119
+ this.cleanups = [];
120
+ }
121
+ }
122
+ exports.ActiveStore = ActiveStore;
123
+ //# sourceMappingURL=activestore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activestore.js","sourceRoot":"","sources":["../../src/lib/activestore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertStore = exports.ConvertedStore = void 0;
4
+ const store_1 = require("./store");
5
+ const activestore_1 = require("./activestore");
6
+ /**
7
+ * A store that allows you to pass in a traditional svelte store in the constructor.
8
+ *
9
+ * Updates to the original store will be sent to subscribers of this store, but only after a deep equality check.
10
+ *
11
+ * Updates to this store will also be sent to the original store after a deep equality check.
12
+ */
13
+ class ConvertedStore extends store_1.Store {
14
+ constructor(value) {
15
+ super({});
16
+ this.pause = false;
17
+ this.valueStore = value;
18
+ this.registerSource(() => this.valueStore.subscribe(v => this.set(v)));
19
+ }
20
+ set(value) {
21
+ if (this.pause)
22
+ return;
23
+ if (!this.equal(value, this.value)) {
24
+ this.value = this.clone(value);
25
+ for (const [id, run] of this.subscribers) {
26
+ run(value);
27
+ }
28
+ if ((0, activestore_1.isSettable)(this.valueStore)) {
29
+ this.pause = true;
30
+ this.valueStore.set(value);
31
+ this.pause = false;
32
+ }
33
+ }
34
+ }
35
+ }
36
+ exports.ConvertedStore = ConvertedStore;
37
+ function convertStore(store) {
38
+ return new ConvertedStore(store);
39
+ }
40
+ exports.convertStore = convertStore;
41
+ //# sourceMappingURL=convertedstore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertedstore.js","sourceRoot":"","sources":["../../src/lib/convertedstore.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAC/B,+CAAyD;AAEzD;;;;;;GAMG;AACH,MAAa,cAAkB,SAAQ,aAAQ;IAI7C,YAAa,KAAuB;QAClC,KAAK,CAAC,EAAS,CAAC,CAAA;QAHV,UAAK,GAAG,KAAK,CAAA;QAInB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QACvB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxE,CAAC;IAED,GAAG,CAAE,KAAQ;QACX,IAAI,IAAI,CAAC,KAAK;YAAE,OAAM;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC9B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;gBACxC,GAAG,CAAC,KAAK,CAAC,CAAA;aACX;YACD,IAAI,IAAA,wBAAU,EAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;gBACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;aACnB;SACF;IACH,CAAC;CACF;AAxBD,wCAwBC;AAED,SAAgB,YAAY,CAAM,KAAuB;IACvD,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAA;AAClC,CAAC;AAFD,oCAEC"}