Skip to content

Commit 4dd95e6

Browse files
Merge pull request #87 from cloudflare/sm/RTK-7389-uikit-overrides
[RTK-7389] Introduce UI Kit overrides in rtk-ui-provider and rtk-meeting
2 parents cf18c7f + e30fc7c commit 4dd95e6

File tree

10 files changed

+180
-81
lines changed

10 files changed

+180
-81
lines changed

packages/angular-library/projects/components/src/lib/stencil-generated/components.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -602,14 +602,14 @@ export declare interface RtkChannelSelectorView extends Components.RtkChannelSel
602602

603603

604604
@ProxyCmp({
605-
inputs: ['config', 'disablePrivateChat', 'displayFilter', 'iconPack', 'meeting', 'privatePresetFilter', 'size', 't']
605+
inputs: ['config', 'disablePrivateChat', 'displayFilter', 'iconPack', 'meeting', 'overrides', 'privatePresetFilter', 'size', 't']
606606
})
607607
@Component({
608608
selector: 'rtk-chat',
609609
changeDetection: ChangeDetectionStrategy.OnPush,
610610
template: '<ng-content></ng-content>',
611611
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
612-
inputs: ['config', 'disablePrivateChat', 'displayFilter', 'iconPack', 'meeting', 'privatePresetFilter', 'size', 't'],
612+
inputs: ['config', 'disablePrivateChat', 'displayFilter', 'iconPack', 'meeting', 'overrides', 'privatePresetFilter', 'size', 't'],
613613
})
614614
export class RtkChat {
615615
protected el: HTMLRtkChatElement;
@@ -1931,14 +1931,14 @@ export declare interface RtkMarkdownView extends Components.RtkMarkdownView {}
19311931

19321932

19331933
@ProxyCmp({
1934-
inputs: ['applyDesignSystem', 'config', 'gridLayout', 'iconPack', 'leaveOnUnmount', 'loadConfigFromPreset', 'meeting', 'mode', 'showSetupScreen', 'size', 't']
1934+
inputs: ['applyDesignSystem', 'config', 'gridLayout', 'iconPack', 'leaveOnUnmount', 'loadConfigFromPreset', 'meeting', 'mode', 'overrides', 'showSetupScreen', 'size', 't']
19351935
})
19361936
@Component({
19371937
selector: 'rtk-meeting',
19381938
changeDetection: ChangeDetectionStrategy.OnPush,
19391939
template: '<ng-content></ng-content>',
19401940
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
1941-
inputs: ['applyDesignSystem', 'config', 'gridLayout', 'iconPack', 'leaveOnUnmount', 'loadConfigFromPreset', 'meeting', 'mode', 'showSetupScreen', 'size', 't'],
1941+
inputs: ['applyDesignSystem', 'config', 'gridLayout', 'iconPack', 'leaveOnUnmount', 'loadConfigFromPreset', 'meeting', 'mode', 'overrides', 'showSetupScreen', 'size', 't'],
19421942
})
19431943
export class RtkMeeting {
19441944
protected el: HTMLRtkMeetingElement;
@@ -3655,14 +3655,14 @@ export declare interface RtkTranscripts extends Components.RtkTranscripts {}
36553655

36563656

36573657
@ProxyCmp({
3658-
inputs: ['config', 'iconPack', 'meeting', 'mode', 'showSetupScreen', 't']
3658+
inputs: ['config', 'iconPack', 'meeting', 'mode', 'overrides', 'showSetupScreen', 't']
36593659
})
36603660
@Component({
36613661
selector: 'rtk-ui-provider',
36623662
changeDetection: ChangeDetectionStrategy.OnPush,
36633663
template: '<ng-content></ng-content>',
36643664
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
3665-
inputs: ['config', 'iconPack', 'meeting', 'mode', 'showSetupScreen', 't'],
3665+
inputs: ['config', 'iconPack', 'meeting', 'mode', 'overrides', 'showSetupScreen', 't'],
36663666
})
36673667
export class RtkUiProvider {
36683668
protected el: HTMLRtkUiProviderElement;

packages/core/src/components.d.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ import { IconPack } from "./lib/icons";
1212
import { RtkI18n } from "./lib/lang";
1313
import { AIView } from "./components/rtk-ai/rtk-ai";
1414
import { ControlBarVariant } from "./components/rtk-controlbar-button/rtk-controlbar-button";
15-
import { IconPack as IconPack1, RtkI18n as RtkI18n1, Size as Size1, States as States1, UIConfig as UIConfig1 } from "./exports";
15+
import { IconPack as IconPack1, Overrides as Overrides1, RtkI18n as RtkI18n1, Size as Size1, States as States1, UIConfig as UIConfig1 } from "./exports";
1616
import { AudioVisualizerVariant } from "./components/rtk-audio-visualizer/rtk-audio-visualizer";
1717
import { AvatarVariant } from "./components/rtk-avatar/rtk-avatar";
1818
import { DraftMeeting } from "./utils/breakout-rooms-manager";
1919
import { ButtonKind, ButtonVariant } from "./components/rtk-button/rtk-button";
2020
import { FileMessage, ImageMessage, Message, RTKBasicParticipant, RTKPermissionsPreset, RTKPlugin, TextMessage } from "@cloudflare/realtimekit";
21+
import { Overrides } from "./lib/overrides";
2122
import { ChatFilter } from "./components/rtk-chat/rtk-chat";
2223
import { RtkNewMessageEvent } from "./components/rtk-chat-composer-ui/rtk-chat-composer-ui";
2324
import { NewMessageEvent } from "./components/rtk-chat-composer-view/rtk-chat-composer-view";
@@ -52,12 +53,13 @@ export { IconPack } from "./lib/icons";
5253
export { RtkI18n } from "./lib/lang";
5354
export { AIView } from "./components/rtk-ai/rtk-ai";
5455
export { ControlBarVariant } from "./components/rtk-controlbar-button/rtk-controlbar-button";
55-
export { IconPack as IconPack1, RtkI18n as RtkI18n1, Size as Size1, States as States1, UIConfig as UIConfig1 } from "./exports";
56+
export { IconPack as IconPack1, Overrides as Overrides1, RtkI18n as RtkI18n1, Size as Size1, States as States1, UIConfig as UIConfig1 } from "./exports";
5657
export { AudioVisualizerVariant } from "./components/rtk-audio-visualizer/rtk-audio-visualizer";
5758
export { AvatarVariant } from "./components/rtk-avatar/rtk-avatar";
5859
export { DraftMeeting } from "./utils/breakout-rooms-manager";
5960
export { ButtonKind, ButtonVariant } from "./components/rtk-button/rtk-button";
6061
export { FileMessage, ImageMessage, Message, RTKBasicParticipant, RTKPermissionsPreset, RTKPlugin, TextMessage } from "@cloudflare/realtimekit";
62+
export { Overrides } from "./lib/overrides";
6163
export { ChatFilter } from "./components/rtk-chat/rtk-chat";
6264
export { RtkNewMessageEvent } from "./components/rtk-chat-composer-ui/rtk-chat-composer-ui";
6365
export { NewMessageEvent } from "./components/rtk-chat-composer-view/rtk-chat-composer-view";
@@ -676,6 +678,10 @@ export namespace Components {
676678
* Meeting object
677679
*/
678680
"meeting": Meeting;
681+
/**
682+
* UI Overrides
683+
*/
684+
"overrides": Overrides;
679685
/**
680686
* @deprecated Beta API, will change in future List of target presets allowed as private chat recipient
681687
*/
@@ -1988,6 +1994,10 @@ export namespace Components {
19881994
* Fill type
19891995
*/
19901996
"mode": MeetingMode;
1997+
/**
1998+
* UI Kit Overrides
1999+
*/
2000+
"overrides": Overrides;
19912001
/**
19922002
* Whether to show setup screen or not
19932003
*/
@@ -3919,6 +3929,10 @@ export namespace Components {
39193929
* Fill type
39203930
*/
39213931
"mode": MeetingMode1;
3932+
/**
3933+
* UI Kit Overrides
3934+
*/
3935+
"overrides": Overrides1;
39223936
/**
39233937
* Whether to show setup screen or not
39243938
*/
@@ -7311,6 +7325,10 @@ declare namespace LocalJSX {
73117325
* Emits updated state data
73127326
*/
73137327
"onRtkStateUpdate"?: (event: RtkChatCustomEvent<States1>) => void;
7328+
/**
7329+
* UI Overrides
7330+
*/
7331+
"overrides"?: Overrides;
73147332
/**
73157333
* @deprecated Beta API, will change in future List of target presets allowed as private chat recipient
73167334
*/
@@ -8812,6 +8830,10 @@ declare namespace LocalJSX {
88128830
* Emits `rtkStatesUpdate` so that developers can listen to onRtkStatesUpdate and update their own stores Do not confuse this with `rtkStateUpdate` that other components emit
88138831
*/
88148832
"onRtkStatesUpdate"?: (event: RtkMeetingCustomEvent<States>) => void;
8833+
/**
8834+
* UI Kit Overrides
8835+
*/
8836+
"overrides"?: Overrides;
88158837
/**
88168838
* Whether to show setup screen or not
88178839
*/
@@ -10909,6 +10931,10 @@ declare namespace LocalJSX {
1090910931
* Emits `rtkStatesUpdate` so that developers can listen to onRtkStatesUpdate and update their own stores Do not confuse this with `rtkStateUpdate` that other components emit
1091010932
*/
1091110933
"onRtkStatesUpdate"?: (event: RtkUiProviderCustomEvent<States1>) => void;
10934+
/**
10935+
* UI Kit Overrides
10936+
*/
10937+
"overrides"?: Overrides1;
1091210938
/**
1091310939
* Whether to show setup screen or not
1091410940
*/

packages/core/src/components/rtk-chat/rtk-chat.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { States, UIConfig, createDefaultConfig } from '../../exports';
3030
import { ChannelItem } from '../rtk-channel-selector-view/rtk-channel-selector-view';
3131
import { SyncWithStore } from '../../utils/sync-with-store';
3232
import { NewMessageEvent } from '../rtk-chat-composer-view/rtk-chat-composer-view';
33+
import { Overrides, defaultOverrides } from '../../lib/overrides';
3334

3435
export type ChatFilter = (message: Message) => boolean;
3536

@@ -82,6 +83,11 @@ export class RtkChat {
8283
@Prop()
8384
t: RtkI18n = useLanguage();
8485

86+
/** UI Overrides */
87+
@SyncWithStore()
88+
@Prop()
89+
overrides: Overrides = defaultOverrides;
90+
8591
/** disables private chat */
8692
@Prop() disablePrivateChat: boolean = false;
8793

@@ -572,11 +578,7 @@ export class RtkChat {
572578
isEditing={!!this.editingMessage}
573579
canSendTextMessage={this.isTextMessagingAllowed()}
574580
canSendFiles={this.isFileMessagingAllowed()}
575-
disableEmojiPicker={
576-
!!this.meeting?.__internals__?.features.hasFeature(
577-
FlagsmithFeatureFlags.DISABLE_EMOJI_PICKER
578-
)
579-
}
581+
disableEmojiPicker={this.overrides.disableEmojiPicker}
580582
maxLength={this.meeting.chat.maxTextLimit}
581583
rateLimits={this.meeting.chat.rateLimits}
582584
inputTextPlaceholder={this.t('chat.message_placeholder')}

packages/core/src/components/rtk-meeting/rtk-meeting.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
uiStore as legacyGlobalUIStore,
1818
type RtkUiStoreExtended,
1919
} from '../../utils/sync-with-store/ui-store';
20+
import { Overrides, defaultOverrides } from '../../lib/overrides';
2021

2122
export type MeetingMode = 'fixed' | 'fill';
2223

@@ -119,6 +120,10 @@ export class RtkMeeting {
119120
@Prop()
120121
iconPack: IconPack = defaultIconPack;
121122

123+
/** UI Kit Overrides */
124+
@Prop()
125+
overrides: Overrides = defaultOverrides;
126+
122127
/**
123128
* Emits `rtkStatesUpdate` so that developers can listen to onRtkStatesUpdate and update their own stores
124129
* Do not confuse this with `rtkStateUpdate` that other components emit
@@ -150,6 +155,7 @@ export class RtkMeeting {
150155
this.iconPackChanged(this.iconPack);
151156
this.tChanged(this.t);
152157
this.configChanged(this.config);
158+
this.overridesChanged(this.overrides);
153159

154160
this.resizeObserver = new ResizeObserver(() => this.handleResize());
155161
this.resizeObserver.observe(this.host);
@@ -251,6 +257,7 @@ export class RtkMeeting {
251257
iconPack: this.iconPack,
252258
t: this.t,
253259
providerId: this.providerId,
260+
overrides: deepMerge({ ...defaultOverrides }, this.overrides) as Overrides,
254261
}) as RtkUiStoreExtended;
255262

256263
// Notify components that peer specific store is now available
@@ -356,6 +363,13 @@ export class RtkMeeting {
356363
}
357364
}
358365

366+
@Watch('overrides')
367+
overridesChanged(overrides: Overrides) {
368+
if (this.peerStore) {
369+
this.peerStore.state.overrides = deepMerge({ ...defaultOverrides }, overrides) as Overrides;
370+
}
371+
}
372+
359373
private handleResize() {
360374
this.size = getSize(this.host.clientWidth);
361375
}

packages/core/src/components/rtk-ui-provider/rtk-ui-provider.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import {
1010
useLanguage,
1111
defaultIconPack,
1212
provideRtkDesignSystem,
13+
Overrides,
14+
defaultOverrides,
1315
} from '../../exports';
1416
import {
1517
uiStore as legacyGlobalUIStore,
@@ -56,6 +58,10 @@ export class RtkUiProvider {
5658
/** Whether to show setup screen or not */
5759
@Prop() showSetupScreen: boolean = false;
5860

61+
/** UI Kit Overrides */
62+
@Prop()
63+
overrides: Overrides = defaultOverrides;
64+
5965
/**
6066
* Emits `rtkStatesUpdate` so that developers can listen to onRtkStatesUpdate and update their own stores
6167
* Do not confuse this with `rtkStateUpdate` that other components emit
@@ -81,6 +87,7 @@ export class RtkUiProvider {
8187
this.iconPackChanged(this.iconPack);
8288
this.tChanged(this.t);
8389
this.configChanged(this.config);
90+
this.overridesChanged(this.overrides);
8491
}
8592

8693
disconnectedCallback() {
@@ -169,6 +176,7 @@ export class RtkUiProvider {
169176
iconPack: this.iconPack,
170177
t: this.t,
171178
providerId: this.providerId,
179+
overrides: deepMerge({ ...defaultOverrides }, this.overrides) as Overrides,
172180
}) as RtkUiStoreExtended;
173181

174182
// Notify components that peer specific store is now available
@@ -243,6 +251,13 @@ export class RtkUiProvider {
243251
}
244252
}
245253

254+
@Watch('overrides')
255+
overridesChanged(overrides: Overrides) {
256+
if (this.peerStore) {
257+
this.peerStore.state.overrides = deepMerge({ ...defaultOverrides }, overrides) as Overrides;
258+
}
259+
}
260+
246261
private roomJoinedListener = () => {
247262
this.updateStates({ meeting: 'joined' });
248263
};

packages/core/src/exports.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ export { provideRtkDesignSystem } from './utils/provide-design-system';
55
export { extendConfig, generateConfig } from './utils/config';
66
export { sendNotification } from './utils/notification';
77
export { RtkUiBuilder } from './lib/builder';
8-
export { uiStore, uiState, getInitialStates, createPeerStore } from './utils/sync-with-store/ui-store';
8+
export {
9+
uiStore,
10+
uiState,
11+
getInitialStates,
12+
createPeerStore,
13+
} from './utils/sync-with-store/ui-store';
914

1015
// addons
1116
export { registerAddons, Addon } from './lib/addons';
@@ -25,6 +30,7 @@ export { Peer } from './types/rtk-client';
2530
// UIConfig, Icon Pack, i18n and Notification Sounds
2631
export { defaultConfig, createDefaultConfig } from './lib/default-ui-config';
2732
export { IconPack, defaultIconPack } from './lib/icons';
33+
export { type Overrides, defaultOverrides } from './lib/overrides';
2834
export { LangDict, defaultLanguage, RtkI18n, useLanguage } from './lib/lang';
2935
export { Sound, default as RtkNotificationsAudio } from './lib/notification';
3036

0 commit comments

Comments
 (0)