@brightspot/ui 1.3.0 → 1.4.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 (109) hide show
  1. package/dist/global.d.ts +10 -0
  2. package/dist/storybook/assets/{Avatar.stories-CpXI9mXR.js → Avatar.stories-DrhezTR1.js} +1 -1
  3. package/dist/storybook/assets/{AvatarGroup.stories-D4NymG47.js → AvatarGroup.stories-DrlxT-mF.js} +1 -1
  4. package/dist/storybook/assets/{Badge.stories-BP4Yixze.js → Badge.stories-DtJcBfOR.js} +1 -1
  5. package/dist/storybook/assets/{Button.stories-DDpQzCOq.js → Button.stories-BKUfLgSY.js} +1 -1
  6. package/dist/storybook/assets/{CircularProgress.stories-B82LXwfS.js → CircularProgress.stories-dpmD-XJT.js} +1 -1
  7. package/dist/storybook/assets/{ClipboardMixin.stories-Cr3efF-v.js → ClipboardMixin.stories-C0pnQ7BY.js} +1 -1
  8. package/dist/storybook/assets/{Color-64QXVMR3-BucypS4O.js → Color-64QXVMR3-Dnd9S2a1.js} +1 -1
  9. package/dist/storybook/assets/{Colors.stories-CeKs5FaB.js → Colors.stories-bKK25qgF.js} +1 -1
  10. package/dist/storybook/assets/{ComponentStatesMixin-BkLj42wt.js → ComponentStatesMixin-C2HZ9ZFb.js} +1 -1
  11. package/dist/storybook/assets/{ComponentStatesMixin.stories--YPoyrpQ.js → ComponentStatesMixin.stories-9mRp2zuB.js} +1 -1
  12. package/dist/storybook/assets/{CopyToClipboard.stories-6vqDwd-F.js → CopyToClipboard.stories-BW3oaT1i.js} +1 -1
  13. package/dist/storybook/assets/Debounce.stories-BXx3CKvQ.js +199 -0
  14. package/dist/storybook/assets/{Events.stories-DD9wfoHi.js → Events.stories-PBeiuWQn.js} +1 -1
  15. package/dist/storybook/assets/{Heading.stories-D-Pvm7NG.js → Heading.stories-Djkl0MoC.js} +1 -1
  16. package/dist/storybook/assets/{Icon.stories-BbR3S56H.js → Icon.stories-Cam1fyud.js} +1 -1
  17. package/dist/storybook/assets/{LinearProgress.stories-B9XHLvVn.js → LinearProgress.stories-BDNoYIJu.js} +1 -1
  18. package/dist/storybook/assets/Rtc.stories-BrTAIAi1.js +281 -0
  19. package/dist/storybook/assets/{ScrollShadow.stories-CHFpB4Zf.js → ScrollShadow.stories-DHcKhkag.js} +1 -1
  20. package/dist/storybook/assets/{Throttle.stories-BGNJSyDp.js → Throttle.stories-cSYT_BXu.js} +1 -1
  21. package/dist/storybook/assets/{WithTooltip-SK46ZJ2J-QQZnlVfm.js → WithTooltip-SK46ZJ2J-Df0E-KJO.js} +5 -5
  22. package/dist/storybook/assets/{formatter-OMEEQ6HG-D3LRXsK-.js → formatter-OMEEQ6HG-DFa_WTfb.js} +1 -1
  23. package/dist/storybook/assets/{iframe-CpEKhsmw.css → iframe-BMxUFmpF.css} +1 -1
  24. package/dist/storybook/assets/{iframe-D-tG1MVV.js → iframe-lTczLWsL.js} +73 -73
  25. package/dist/storybook/assets/{index-mcT8sPvs.js → index-yMswRDPh.js} +1 -1
  26. package/dist/storybook/assets/onFind-C6olvKHR.js +1 -0
  27. package/dist/storybook/assets/{onFind.stories-Dagoyfc5.js → onFind.stories-DfW54CDE.js} +10 -10
  28. package/dist/storybook/assets/onRemove.stories-C7W9KyRr.js +234 -0
  29. package/dist/storybook/assets/onVisible.stories-CIl6R0q4.js +187 -0
  30. package/dist/storybook/assets/{syntaxhighlighter-CAVLW7PM-BoS99i_u.js → syntaxhighlighter-CAVLW7PM-DoI0ixeu.js} +1 -1
  31. package/dist/storybook/iframe.html +2 -2
  32. package/dist/storybook/index.json +1 -1
  33. package/dist/storybook/project.json +1 -1
  34. package/dist/tailwind-plugin-button.js +3 -0
  35. package/dist/tailwind-plugin-button.js.map +1 -1
  36. package/dist/tailwind-plugin-button.ts +4 -0
  37. package/dist/util/Socket.d.ts +29 -0
  38. package/dist/util/Socket.d.ts.map +1 -0
  39. package/dist/util/Socket.js +153 -0
  40. package/dist/util/Socket.js.map +1 -0
  41. package/dist/util/Tether.d.ts +18 -0
  42. package/dist/util/Tether.d.ts.map +1 -0
  43. package/dist/util/Tether.js +102 -0
  44. package/dist/util/Tether.js.map +1 -0
  45. package/dist/util/TetherLayout.d.ts +12 -0
  46. package/dist/util/TetherLayout.d.ts.map +1 -0
  47. package/dist/util/TetherLayout.js +121 -0
  48. package/dist/util/TetherLayout.js.map +1 -0
  49. package/dist/util/debounce.d.ts +3 -0
  50. package/dist/util/debounce.d.ts.map +1 -0
  51. package/dist/util/debounce.js +15 -0
  52. package/dist/util/debounce.js.map +1 -0
  53. package/dist/util/focusable.d.ts +9 -0
  54. package/dist/util/focusable.d.ts.map +1 -0
  55. package/dist/util/focusable.js +19 -0
  56. package/dist/util/focusable.js.map +1 -0
  57. package/dist/util/getComponentKey.d.ts +2 -0
  58. package/dist/util/getComponentKey.d.ts.map +1 -0
  59. package/dist/util/getComponentKey.js +21 -0
  60. package/dist/util/getComponentKey.js.map +1 -0
  61. package/dist/util/keyboard.d.ts +8 -0
  62. package/dist/util/keyboard.d.ts.map +1 -0
  63. package/dist/util/keyboard.js +138 -0
  64. package/dist/util/keyboard.js.map +1 -0
  65. package/dist/util/noise.d.ts +6 -0
  66. package/dist/util/noise.d.ts.map +1 -0
  67. package/dist/util/noise.js +43 -0
  68. package/dist/util/noise.js.map +1 -0
  69. package/dist/util/onFindOnce.d.ts +3 -0
  70. package/dist/util/onFindOnce.d.ts.map +1 -0
  71. package/dist/util/onFindOnce.js +25 -0
  72. package/dist/util/onFindOnce.js.map +1 -0
  73. package/dist/util/onRTEReady.d.ts +22 -0
  74. package/dist/util/onRTEReady.d.ts.map +1 -0
  75. package/dist/util/onRTEReady.js +69 -0
  76. package/dist/util/onRTEReady.js.map +1 -0
  77. package/dist/util/onRemove.d.ts +7 -0
  78. package/dist/util/onRemove.d.ts.map +1 -0
  79. package/dist/util/onRemove.js +24 -0
  80. package/dist/util/onRemove.js.map +1 -0
  81. package/dist/util/onVisible.d.ts +3 -0
  82. package/dist/util/onVisible.d.ts.map +1 -0
  83. package/dist/util/onVisible.js +22 -0
  84. package/dist/util/onVisible.js.map +1 -0
  85. package/dist/util/previousUntil.d.ts +2 -0
  86. package/dist/util/previousUntil.d.ts.map +1 -0
  87. package/dist/util/previousUntil.js +21 -0
  88. package/dist/util/previousUntil.js.map +1 -0
  89. package/dist/util/repaint.d.ts +3 -0
  90. package/dist/util/repaint.d.ts.map +1 -0
  91. package/dist/util/repaint.js +14 -0
  92. package/dist/util/repaint.js.map +1 -0
  93. package/dist/util/rtc.d.ts +10 -0
  94. package/dist/util/rtc.d.ts.map +1 -0
  95. package/dist/util/rtc.js +184 -0
  96. package/dist/util/rtc.js.map +1 -0
  97. package/dist/util/storage.d.ts +6 -0
  98. package/dist/util/storage.d.ts.map +1 -0
  99. package/dist/util/storage.js +18 -0
  100. package/dist/util/storage.js.map +1 -0
  101. package/dist/util/transition.d.ts +2 -0
  102. package/dist/util/transition.d.ts.map +1 -0
  103. package/dist/util/transition.js +4 -0
  104. package/dist/util/transition.js.map +1 -0
  105. package/dist/util/types.d.ts +10 -0
  106. package/dist/util/types.d.ts.map +1 -0
  107. package/dist/util/types.js +2 -0
  108. package/dist/util/types.js.map +1 -0
  109. package/package.json +6 -2
@@ -0,0 +1,3 @@
1
+ import type { CallbackFunction, Selectors } from './onFind.js';
2
+ export declare function onVisible<E extends Element>(selectors: Selectors, callback: CallbackFunction<E>): void;
3
+ //# sourceMappingURL=onVisible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onVisible.d.ts","sourceRoot":"","sources":["../../src/util/onVisible.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAK9D,wBAAgB,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAqB/F"}
@@ -0,0 +1,22 @@
1
+ import onFind from './onFind.js';
2
+ let calledIndex = 0;
3
+ export function onVisible(selectors, callback) {
4
+ const calledId = `_ovc${calledIndex++}`;
5
+ const observer = new IntersectionObserver(changes => {
6
+ for (const change of changes) {
7
+ if (change.isIntersecting) {
8
+ const element = change.target;
9
+ const elementClasses = element.classList;
10
+ if (!elementClasses.contains(calledId)) {
11
+ elementClasses.add(calledId);
12
+ observer.unobserve(element);
13
+ callback(element);
14
+ }
15
+ }
16
+ }
17
+ });
18
+ onFind(selectors, element => {
19
+ observer.observe(element);
20
+ });
21
+ }
22
+ //# sourceMappingURL=onVisible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onVisible.js","sourceRoot":"","sources":["../../src/util/onVisible.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,IAAI,WAAW,GAAG,CAAC,CAAA;AAEnB,MAAM,UAAU,SAAS,CAAoB,SAAoB,EAAE,QAA6B;IAC9F,MAAM,QAAQ,GAAG,OAAO,WAAW,EAAE,EAAE,CAAA;IAEvC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE;QAClD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAA;gBAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAA;gBAExC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;oBAC5B,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;oBAC3B,QAAQ,CAAC,OAAY,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;QAC1B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function previousUntil(elem: Element, selector: string): Element | null;
2
+ //# sourceMappingURL=previousUntil.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previousUntil.d.ts","sourceRoot":"","sources":["../../src/util/previousUntil.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAe7E"}
@@ -0,0 +1,21 @@
1
+ /* Loops through the previous siblings of a DOM element
2
+ and returns the first element which matches the selector.
3
+ If no match is found null is returned. */
4
+ export function previousUntil(elem, selector) {
5
+ if (elem.previousElementSibling !== null) {
6
+ elem = elem.previousElementSibling;
7
+ }
8
+ while (elem) {
9
+ if (elem.matches(selector)) {
10
+ return elem;
11
+ }
12
+ if (elem.previousElementSibling !== null) {
13
+ elem = elem.previousElementSibling;
14
+ }
15
+ else {
16
+ break;
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+ //# sourceMappingURL=previousUntil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previousUntil.js","sourceRoot":"","sources":["../../src/util/previousUntil.ts"],"names":[],"mappings":"AAAA;;4CAE4C;AAC5C,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,QAAgB;IAC3D,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;QACzC,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAA;IACpC,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;YACzC,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { UnknownFunction } from './types.js';
2
+ export declare function repaint(fn: UnknownFunction): UnknownFunction;
3
+ //# sourceMappingURL=repaint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repaint.d.ts","sourceRoot":"","sources":["../../src/util/repaint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAGjD,wBAAgB,OAAO,CAAC,EAAE,EAAE,eAAe,GAAG,eAAe,CAa5D"}
@@ -0,0 +1,14 @@
1
+ /* eslint-disable prefer-rest-params */
2
+ export function repaint(fn) {
3
+ let requestId;
4
+ return function () {
5
+ if (requestId) {
6
+ window.cancelAnimationFrame(requestId);
7
+ }
8
+ requestId = window.requestAnimationFrame(() => {
9
+ requestId = undefined;
10
+ fn.apply(this, [...arguments]);
11
+ });
12
+ };
13
+ }
14
+ //# sourceMappingURL=repaint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repaint.js","sourceRoot":"","sources":["../../src/util/repaint.ts"],"names":[],"mappings":"AAEA,uCAAuC;AACvC,MAAM,UAAU,OAAO,CAAC,EAAmB;IACzC,IAAI,SAA6B,CAAA;IAEjC,OAAO;QACL,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC;QAED,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;YAC5C,SAAS,GAAG,SAAS,CAAA;YACrB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { JSONValue } from './types.js';
2
+ declare let rtc: {
3
+ initialize: (state: string, data: JSONValue, callback: () => void) => void;
4
+ restore: (state: string, data: JSONValue, callback: () => void) => void;
5
+ receive: (broadcast: string, callback: (data: JSONValue) => void) => void;
6
+ receiveOnce: (broadcast: string, callback: () => void) => void;
7
+ execute: (action: string, data: JSONValue) => void;
8
+ };
9
+ export default rtc;
10
+ //# sourceMappingURL=rtc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc.d.ts","sourceRoot":"","sources":["../../src/util/rtc.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAc3C,QAAA,IAAI,GAAG,EAAE;IACP,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC1E,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IACvE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,KAAK,IAAI,CAAA;IACzE,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC9D,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;CACnD,CAAA;AA0ND,eAAe,GAAG,CAAA"}
@@ -0,0 +1,184 @@
1
+ import { BroadcastChannel, createLeaderElection } from 'broadcast-channel';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import { Socket } from './Socket.js';
4
+ const isV5Enabled = window.BRIGHTSPOT?.ui?.cms?.enableV5UI === true;
5
+ const autoUpdatesEnabled = window.BRIGHTSPOT?.ui?.cms?.enableAutomaticUpdates === true;
6
+ // Events that will be blocked when automatic updates are disabled in V5 UI.
7
+ // All other events will continue to be processed normally.
8
+ const BLOCKED_EVENTS = [
9
+ 'com.psddev.cms.tool.page.content.PublishBroadcast',
10
+ 'com.psddev.assign.AssignmentRtcBroadcast',
11
+ 'com.psddev.cms.conversation.PostBroadcast',
12
+ 'brightspot.liveblog.LiveBlogPostRtcBroadcast',
13
+ ];
14
+ let rtc;
15
+ if (window.DISABLE_RTC || !document.documentElement.dataset.userId) {
16
+ // Fake methods that do nothing when the RTC is disabled.
17
+ rtc = {
18
+ initialize: function () { },
19
+ restore: function () { },
20
+ receive: function () { },
21
+ receiveOnce: function () { },
22
+ execute: function () { },
23
+ };
24
+ }
25
+ else {
26
+ const BROADCAST = 'broadcast';
27
+ const CALLBACK = 'callback';
28
+ const CONNECT = 'connect';
29
+ const DISCONNECT = 'connect';
30
+ const EXECUTE = 'execute';
31
+ const RESTORE = 'restore';
32
+ // End restoring state by triggering callbacks.
33
+ const broadcastCallbacks = {};
34
+ const triggerBroadcastCallbacks = (broadcast, data) => {
35
+ if (isV5Enabled && !autoUpdatesEnabled && BLOCKED_EVENTS.includes(broadcast)) {
36
+ // Skip this blocked event when automatic updates are disabled
37
+ return;
38
+ }
39
+ for (const callback of broadcastCallbacks[broadcast] ?? []) {
40
+ callback(data);
41
+ }
42
+ };
43
+ const endRestore = (restoreCallback, broadcasts) => {
44
+ for (const { broadcast, data } of broadcasts ?? []) {
45
+ triggerBroadcastCallbacks(broadcast, data);
46
+ }
47
+ if (restoreCallback) {
48
+ restoreCallback(broadcasts);
49
+ }
50
+ };
51
+ // Start restoring state when not a leader.
52
+ const callbackIdPrefix = `${uuidv4()}-`;
53
+ let callbackIdIndex = 0;
54
+ const channel = new BroadcastChannel('brightspot-rtc');
55
+ const startRestore = (message, callback) => {
56
+ const newCallbackId = callbackIdPrefix + ++callbackIdIndex;
57
+ // [OC] Set up to trigger callbacks when the state restore is done.
58
+ const listener = ({ type, callbackId, broadcasts, }) => {
59
+ if (type === CALLBACK && callbackId === newCallbackId) {
60
+ channel.removeEventListener('message', listener);
61
+ endRestore(callback, broadcasts);
62
+ }
63
+ };
64
+ channel.addEventListener('message', listener);
65
+ // Trigger a send on the leader at [LS].
66
+ channel.postMessage({ type: RESTORE, message, callbackId: newCallbackId });
67
+ };
68
+ // Receive messages from the leader.
69
+ const restores = [];
70
+ const broadcastOnceCallbacks = {};
71
+ channel.addEventListener('message', ({ type, broadcast, data }) => {
72
+ if (type === CONNECT) {
73
+ // [OR] When the leader connects, restore states.
74
+ for (const { message, callback } of restores) {
75
+ startRestore(message, callback);
76
+ }
77
+ }
78
+ else if (type === BROADCAST) {
79
+ // [OB] Trigger broadcast callbacks.
80
+ triggerBroadcastCallbacks(broadcast, data);
81
+ }
82
+ });
83
+ // Make sure that there's only one connection to the server.
84
+ let socket;
85
+ const restore = (message, callback) => {
86
+ socket.send(message, (broadcasts) => {
87
+ endRestore(callback, broadcasts);
88
+ });
89
+ };
90
+ createLeaderElection(channel)
91
+ .awaitLeadership()
92
+ .then(() => {
93
+ socket = new Socket(`${window.ROOT_PATH}/_rtc`);
94
+ // [LS] Send a message on behalf of other windows.
95
+ channel.addEventListener('message', ({ type, message, callbackId }) => {
96
+ if (type === DISCONNECT || type === EXECUTE) {
97
+ socket.send(message);
98
+ }
99
+ else if (type === RESTORE) {
100
+ socket.send(message, broadcasts => {
101
+ // Trigger a callback on other windows at [OC].
102
+ channel.postMessage({ type: CALLBACK, callbackId, broadcasts });
103
+ });
104
+ }
105
+ });
106
+ socket.connect({
107
+ onConnect: () => {
108
+ // Restore states on the other windows at [OR].
109
+ channel.postMessage({ type: CONNECT });
110
+ // Restore states on the leader.
111
+ for (const { message, callback } of restores) {
112
+ restore(message, callback);
113
+ }
114
+ },
115
+ onReceive: ({ broadcast, data }) => {
116
+ if (broadcast && data) {
117
+ // Broadcast to the other windows at [OB].
118
+ channel.postMessage({ type: BROADCAST, broadcast, data });
119
+ // Trigger broadcast callbacks on the leader.
120
+ triggerBroadcastCallbacks(broadcast, data);
121
+ // Check if this event should be blocked when automatic updates are disabled in V5 UI
122
+ if (!(isV5Enabled && !autoUpdatesEnabled && BLOCKED_EVENTS.includes(broadcast))) {
123
+ for (const callback of broadcastOnceCallbacks[broadcast] ?? []) {
124
+ callback(data);
125
+ }
126
+ }
127
+ }
128
+ },
129
+ });
130
+ });
131
+ rtc = {
132
+ initialize: function (state, data, callback) {
133
+ rtc.restore(state, data, callback);
134
+ window.addEventListener('unload', () => {
135
+ const message = {
136
+ type: 'disconnect',
137
+ className: state,
138
+ data: data,
139
+ };
140
+ if (socket) {
141
+ socket.send(message, callback, true);
142
+ }
143
+ else {
144
+ // Send the action to the leader at [LS].
145
+ channel.postMessage({ type: DISCONNECT, message });
146
+ }
147
+ });
148
+ },
149
+ restore: function (state, data, callback) {
150
+ const message = { type: 'restore', className: state, data };
151
+ restores.push({ type: RESTORE, message, callback });
152
+ if (socket) {
153
+ restore(message, callback);
154
+ }
155
+ else {
156
+ startRestore(message, callback);
157
+ }
158
+ },
159
+ receive: function (broadcast, callback) {
160
+ if (callback) {
161
+ ;
162
+ (broadcastCallbacks[broadcast] ??= []).push(callback);
163
+ }
164
+ },
165
+ receiveOnce: function (broadcast, callback) {
166
+ if (callback) {
167
+ ;
168
+ (broadcastOnceCallbacks[broadcast] ??= []).push(callback);
169
+ }
170
+ },
171
+ execute: function (action, data) {
172
+ const message = { type: 'execute', className: action, data };
173
+ if (socket) {
174
+ socket.send(message);
175
+ }
176
+ else {
177
+ // Send the action to the leader at [LS].
178
+ channel.postMessage({ type: EXECUTE, message });
179
+ }
180
+ },
181
+ };
182
+ }
183
+ export default rtc;
184
+ //# sourceMappingURL=rtc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc.js","sourceRoot":"","sources":["../../src/util/rtc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const storage: {
2
+ get: (key: string) => string | null;
3
+ set: (key: string, value: string) => void;
4
+ toggle: (key: string, force?: boolean) => boolean;
5
+ };
6
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/util/storage.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO;eACP,MAAM;eAEN,MAAM,SAAS,MAAM;kBAElB,MAAM,UAAU,OAAO;CAatC,CAAA"}
@@ -0,0 +1,18 @@
1
+ const ls = window.localStorage;
2
+ export const storage = {
3
+ get: (key) => ls.getItem(key),
4
+ set: (key, value) => ls.setItem(key, value),
5
+ toggle: (key, force) => {
6
+ if (typeof force === 'undefined') {
7
+ force = !ls.getItem(key);
8
+ }
9
+ if (force) {
10
+ ls.setItem(key, '1');
11
+ }
12
+ else {
13
+ ls.removeItem(key);
14
+ }
15
+ return force;
16
+ },
17
+ };
18
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/util/storage.ts"],"names":[],"mappings":"AAAA,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAA;AAE9B,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAErC,GAAG,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;IAE3D,MAAM,EAAE,CAAC,GAAW,EAAE,KAAe,EAAE,EAAE;QACvC,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;YACjC,KAAK,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function onTransitionsEnded(el: Element): Promise<PromiseSettledResult<Animation>[]>;
2
+ //# sourceMappingURL=transition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../src/util/transition.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,8CAE7C"}
@@ -0,0 +1,4 @@
1
+ export function onTransitionsEnded(el) {
2
+ return Promise.allSettled(el.getAnimations().map(animation => animation.finished));
3
+ }
4
+ //# sourceMappingURL=transition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transition.js","sourceRoot":"","sources":["../../src/util/transition.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,EAAW;IAC5C,OAAO,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AACpF,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type CSSAbsUnit = 'cm' | 'mm' | 'Q' | 'in' | 'pc' | 'pt' | 'px';
2
+ export type CSSRelUnit = 'em' | 'ex' | 'ch' | 'rem' | 'lh' | 'rlh' | 'vw' | 'vh' | 'vmin' | 'vmax' | 'vb' | 'vi' | 'svw' | 'svh' | 'lvw' | 'lvh' | 'dvw' | 'dvh';
3
+ export type CSSUnit = `${number}${CSSAbsUnit | CSSRelUnit}`;
4
+ export type UnknownFunction = (...args: unknown[]) => unknown;
5
+ export type JSONValue = JSONObject | JSONArray | string | number | boolean | null;
6
+ export interface JSONObject {
7
+ [key: string]: JSONValue;
8
+ }
9
+ export type JSONArray = Array<JSONValue>;
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AACtE,MAAM,MAAM,UAAU,GAClB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,MAAM,GACN,MAAM,GACN,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,CAAA;AAET,MAAM,MAAM,OAAO,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,EAAE,CAAA;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;AAC7D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AACjF,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CACzB;AACD,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspot/ui",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "description": "A UI library for building Brightspot CMS components.",
@@ -35,6 +35,7 @@
35
35
  "@tailwindcss/container-queries": "^0.1.1",
36
36
  "@types/node": "^24.10.0",
37
37
  "@types/postcss-import": "^14.0.3",
38
+ "@types/uuid": "^8.3.0",
38
39
  "@wc-toolkit/storybook-helpers": "^10.0.0",
39
40
  "autoprefixer": "10.4.21",
40
41
  "css-loader": "^6.7.1",
@@ -65,8 +66,11 @@
65
66
  "webpack-merge": "^5.8.0"
66
67
  },
67
68
  "dependencies": {
69
+ "broadcast-channel": "^4.13.0",
68
70
  "lucide-static": "0.508.0",
69
- "tailwindcss": "^3.4.13"
71
+ "tabbable": "6.2.0",
72
+ "tailwindcss": "^3.4.13",
73
+ "uuid": "^8.3.2"
70
74
  },
71
75
  "peerDependencies": {
72
76
  "lit": "^3.0.0"