File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -59,6 +59,16 @@ function noop() {}
5959
6060const getCursor = ( { isDragging} ) => ( isDragging ? 'grabbing' : 'grab' ) ;
6161
62+ const DEFAULT_CANVAS_STYLE = {
63+ userSelect : 'none'
64+ } as const ;
65+
66+ const DEFAULT_CANVAS_CSS_PROPERTIES = {
67+ '-webkit-user-select' : 'none' ,
68+ '-webkit-touch-callout' : 'none' ,
69+ '-webkit-tap-highlight-color' : 'transparent'
70+ } as const ;
71+
6272export type DeckMetrics = {
6373 fps : number ;
6474 setPropsTime : number ;
@@ -1041,7 +1051,10 @@ export default class Deck<ViewsT extends ViewOrViews = null> {
10411051 parent . appendChild ( canvas ) ;
10421052 }
10431053
1044- Object . assign ( canvas . style , props . style ) ;
1054+ for ( const [ key , value ] of Object . entries ( DEFAULT_CANVAS_CSS_PROPERTIES ) ) {
1055+ canvas . style . setProperty ( key , value ) ;
1056+ }
1057+ Object . assign ( canvas . style , DEFAULT_CANVAS_STYLE , props . style ) ;
10451058
10461059 return canvas ;
10471060 }
Original file line number Diff line number Diff line change @@ -131,6 +131,37 @@ test('Deck#constructor', async () => {
131131 console . log ( 'Deck constructor did not throw' ) ;
132132} ) ;
133133
134+ test ( 'Deck#auto-created canvas disables touch selection callouts' , ( ) => {
135+ const parent = document . createElement ( 'div' ) ;
136+ const deck = Object . create ( Deck . prototype ) as {
137+ _createCanvas : ( props : {
138+ parent ?: HTMLElement ;
139+ id ?: string ;
140+ width ?: number ;
141+ height ?: number ;
142+ canvas ?: HTMLCanvasElement | string | null ;
143+ style ?: Partial < CSSStyleDeclaration > | null ;
144+ } ) => HTMLCanvasElement ;
145+ } ;
146+
147+ const canvas = deck . _createCanvas ( {
148+ parent,
149+ id : 'deck-canvas-style-test' ,
150+ width : 1 ,
151+ height : 1 ,
152+ canvas : null ,
153+ style : null
154+ } ) ;
155+ expect ( canvas . style . userSelect , 'auto-created canvas is not selectable' ) . toBe ( 'none' ) ;
156+
157+ const styledCanvas = document . createElement ( 'canvas' ) ;
158+ deck . _createCanvas ( {
159+ canvas : styledCanvas ,
160+ style : { userSelect : 'text' }
161+ } ) ;
162+ expect ( styledCanvas . style . userSelect , 'user canvas style can override defaults' ) . toBe ( 'text' ) ;
163+ } ) ;
164+
134165test ( 'Deck#abort' , async ( ) => {
135166 const deck = new Deck ( {
136167 device,
You can’t perform that action at this time.
0 commit comments