or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

effects.mdindex.mdinteractions.mdutilities.mdwidgets.md
tile.json

interactions.mddocs/

0

# Interactions

1

2

jQuery UI interactions provide mouse-based behaviors for dragging, dropping, resizing, selecting, and sorting elements. These widgets inherit from the mouse widget and share common interaction patterns.

3

4

## Capabilities

5

6

### Draggable

7

8

Makes elements draggable with mouse interaction and extensive customization options.

9

10

```javascript { .api }

11

/**

12

* Creates a draggable widget

13

* @param {DraggableOptions} options - Configuration options

14

*/

15

$(...).draggable(options);

16

17

interface DraggableOptions {

18

addClasses?: boolean; // Add ui-draggable class (default: true)

19

appendTo?: string | Element; // Element to append helper to

20

axis?: 'x' | 'y' | false; // Constrain dragging to axis

21

cancel?: string; // Selector for elements that cancel dragging

22

classes?: object; // CSS classes to apply

23

connectToSortable?: string; // Selector for sortable containers

24

containment?: string | Element | Array; // Containment boundary

25

cursor?: string; // CSS cursor during drag

26

cursorAt?: { top?: number, left?: number, right?: number, bottom?: number }; // Cursor position relative to helper

27

delay?: number; // Delay in milliseconds before dragging starts

28

disabled?: boolean; // Disable the draggable

29

distance?: number; // Distance in pixels before dragging starts

30

grid?: [number, number]; // Snap to grid coordinates

31

handle?: string | Element; // Handle selector for dragging

32

helper?: 'original' | 'clone' | Function; // Helper element type

33

iframeFix?: boolean | string; // Fix iframe mousemove issues

34

opacity?: number; // Opacity of helper during drag

35

refreshPositions?: boolean; // Refresh droppable positions during drag

36

revert?: boolean | 'valid' | 'invalid' | Function; // Revert behavior

37

revertDuration?: number; // Revert animation duration

38

scope?: string; // Scope for droppable interaction

39

scroll?: boolean; // Enable scrolling during drag

40

scrollSensitivity?: number; // Distance from edge to start scrolling

41

scrollSpeed?: number; // Scroll speed

42

snap?: boolean | string; // Snap to elements

43

snapMode?: 'inner' | 'outer' | 'both'; // Snap mode

44

snapTolerance?: number; // Snap tolerance in pixels

45

stack?: string; // Selector for elements to stack

46

zIndex?: number; // Z-index of helper during drag

47

}

48

```

49

50

**Events:**

51

- `dragcreate` - Triggered when draggable is created

52

- `dragstart` - Triggered when dragging starts

53

- `drag` - Triggered during dragging

54

- `dragstop` - Triggered when dragging stops

55

56

**Usage Examples:**

57

```javascript

58

// Basic draggable

59

$('#draggable').draggable();

60

61

// Constrained to container

62

$('#draggable').draggable({

63

containment: '#container'

64

});

65

66

// Snap to grid

67

$('#draggable').draggable({

68

grid: [20, 20]

69

});

70

71

// Custom helper

72

$('#draggable').draggable({

73

helper: 'clone',

74

opacity: 0.7

75

});

76

```

77

78

### Droppable

79

80

Makes elements targets for draggable elements with customizable acceptance criteria.

81

82

```javascript { .api }

83

/**

84

* Creates a droppable widget

85

* @param {DroppableOptions} options - Configuration options

86

*/

87

$(...).droppable(options);

88

89

interface DroppableOptions {

90

accept?: string | Function; // Selector or function for acceptable draggables

91

activeClass?: string; // Class applied when acceptable draggable is being dragged

92

addClasses?: boolean; // Add ui-droppable class (default: true)

93

classes?: object; // CSS classes to apply

94

disabled?: boolean; // Disable the droppable

95

greedy?: boolean; // Prevent event propagation to parent droppables

96

hoverClass?: string; // Class applied when acceptable draggable hovers

97

scope?: string; // Scope for draggable interaction

98

tolerance?: 'fit' | 'intersect' | 'pointer' | 'touch'; // Drop tolerance

99

}

100

```

101

102

**Events:**

103

- `dropactivate` - Triggered when acceptable draggable starts dragging

104

- `dropcreate` - Triggered when droppable is created

105

- `dropdeactivate` - Triggered when acceptable draggable stops dragging

106

- `dropdrop` - Triggered when acceptable draggable is dropped

107

- `dropout` - Triggered when acceptable draggable moves out

108

- `dropover` - Triggered when acceptable draggable moves over

109

110

**Usage Examples:**

111

```javascript

112

// Basic droppable

113

$('#droppable').droppable({

114

drop: function(event, ui) {

115

$(this).addClass('dropped');

116

}

117

});

118

119

// Accept specific elements

120

$('#droppable').droppable({

121

accept: '.draggable-item',

122

hoverClass: 'drop-hover',

123

drop: function(event, ui) {

124

ui.draggable.detach().appendTo(this);

125

}

126

});

127

128

// Multiple droppables with scope

129

$('.droppable').droppable({

130

scope: 'special',

131

tolerance: 'intersect'

132

});

133

```

134

135

### Resizable

136

137

Makes elements resizable with drag handles and size constraints.

138

139

```javascript { .api }

140

/**

141

* Creates a resizable widget

142

* @param {ResizableOptions} options - Configuration options

143

*/

144

$(...).resizable(options);

145

146

interface ResizableOptions {

147

alsoResize?: string | Element; // Elements to resize simultaneously

148

animate?: boolean; // Animate resize

149

animateDuration?: number | string; // Animation duration

150

animateEasing?: string; // Animation easing

151

aspectRatio?: boolean | number; // Maintain aspect ratio

152

autoHide?: boolean; // Auto-hide handles when not hovering

153

cancel?: string; // Selector for elements that cancel resizing

154

classes?: object; // CSS classes to apply

155

containment?: string | Element; // Containment boundary

156

delay?: number; // Delay before resizing starts

157

disabled?: boolean; // Disable the resizable

158

distance?: number; // Distance before resizing starts

159

ghost?: boolean; // Show ghost outline during resize

160

grid?: [number, number]; // Snap to grid coordinates

161

handles?: string | object; // Resize handles configuration

162

helper?: string; // Helper class name

163

maxHeight?: number; // Maximum height

164

maxWidth?: number; // Maximum width

165

minHeight?: number; // Minimum height

166

minWidth?: number; // Minimum width

167

}

168

```

169

170

**Events:**

171

- `resizecreate` - Triggered when resizable is created

172

- `resizestart` - Triggered when resizing starts

173

- `resize` - Triggered during resizing

174

- `resizestop` - Triggered when resizing stops

175

176

**Usage Examples:**

177

```javascript

178

// Basic resizable

179

$('#resizable').resizable();

180

181

// With constraints

182

$('#resizable').resizable({

183

minWidth: 100,

184

minHeight: 100,

185

maxWidth: 500,

186

maxHeight: 300

187

});

188

189

// Maintain aspect ratio

190

$('#resizable').resizable({

191

aspectRatio: true,

192

handles: 'n, e, s, w, ne, se, sw, nw'

193

});

194

195

// Ghost resize

196

$('#resizable').resizable({

197

ghost: true,

198

helper: 'resizable-helper'

199

});

200

```

201

202

### Selectable

203

204

Makes elements selectable with mouse interaction, supporting individual and lasso selection.

205

206

```javascript { .api }

207

/**

208

* Creates a selectable widget

209

* @param {SelectableOptions} options - Configuration options

210

*/

211

$(...).selectable(options);

212

213

interface SelectableOptions {

214

appendTo?: string; // Element to append lasso helper to

215

autoRefresh?: boolean; // Auto-refresh element positions

216

cancel?: string; // Selector for elements that cancel selection

217

classes?: object; // CSS classes to apply

218

delay?: number; // Delay before selection starts

219

disabled?: boolean; // Disable the selectable

220

distance?: number; // Distance before selection starts

221

filter?: string; // Selector for selectable elements

222

tolerance?: 'fit' | 'touch'; // Selection tolerance

223

}

224

```

225

226

**Events:**

227

- `selectablecreate` - Triggered when selectable is created

228

- `selectablestart` - Triggered when selection starts

229

- `selectableselecting` - Triggered for each element being selected

230

- `selectableselected` - Triggered for each element after selection

231

- `selectableunselecting` - Triggered for each element being unselected

232

- `selectableunselected` - Triggered for each element after unselection

233

- `selectablestop` - Triggered when selection stops

234

235

**Usage Examples:**

236

```javascript

237

// Basic selectable list

238

$('#selectable').selectable();

239

240

// Custom filter and tolerance

241

$('#selectable').selectable({

242

filter: 'li',

243

tolerance: 'touch'

244

});

245

246

// Handle selection events

247

$('#selectable').selectable({

248

selected: function(event, ui) {

249

$(ui.selected).addClass('highlighted');

250

},

251

unselected: function(event, ui) {

252

$(ui.unselected).removeClass('highlighted');

253

}

254

});

255

```

256

257

### Sortable

258

259

Makes list elements sortable by dragging with extensive customization options.

260

261

```javascript { .api }

262

/**

263

* Creates a sortable widget

264

* @param {SortableOptions} options - Configuration options

265

*/

266

$(...).sortable(options);

267

268

/**

269

* Cancels current sort operation

270

*/

271

$(...).sortable('cancel');

272

273

/**

274

* Refreshes cached information about sortable items

275

*/

276

$(...).sortable('refresh');

277

278

/**

279

* Refreshes cached position information

280

*/

281

$(...).sortable('refreshPositions');

282

283

/**

284

* Serializes sortable items to URL query string

285

* @param {object} options - Serialization options

286

* @returns {string} Query string

287

*/

288

$(...).sortable('serialize', options);

289

290

/**

291

* Returns array of item IDs in current order

292

* @param {object} options - Array options

293

* @returns {string[]} Array of IDs

294

*/

295

$(...).sortable('toArray', options);

296

297

interface SortableOptions {

298

appendTo?: string | Element; // Element to append helper to

299

axis?: 'x' | 'y' | false; // Constrain sorting to axis

300

cancel?: string; // Selector for elements that cancel sorting

301

classes?: object; // CSS classes to apply

302

connectWith?: string; // Selector for connected sortables

303

containment?: string | Element | Array; // Containment boundary

304

cursor?: string; // CSS cursor during sort

305

cursorAt?: { top?: number, left?: number, right?: number, bottom?: number }; // Cursor position

306

delay?: number; // Delay before sorting starts

307

disabled?: boolean; // Disable the sortable

308

distance?: number; // Distance before sorting starts

309

dropOnEmpty?: boolean; // Allow dropping on empty lists

310

forceHelperSize?: boolean; // Force helper to have size

311

forcePlaceholderSize?: boolean; // Force placeholder to have size

312

grid?: [number, number]; // Snap to grid coordinates

313

handle?: string | Element; // Handle selector for sorting

314

helper?: 'original' | 'clone' | Function; // Helper element type

315

items?: string; // Selector for sortable items

316

opacity?: number; // Opacity of helper during sort

317

placeholder?: string; // Class name for placeholder

318

revert?: boolean | number; // Revert animation

319

scroll?: boolean; // Enable scrolling during sort

320

scrollSensitivity?: number; // Distance from edge to start scrolling

321

scrollSpeed?: number; // Scroll speed

322

tolerance?: 'intersect' | 'pointer'; // Sort tolerance

323

zIndex?: number; // Z-index of helper during sort

324

}

325

```

326

327

**Events:**

328

- `sortactivate` - Triggered when sorting starts on connected sortable

329

- `sortbeforeStop` - Triggered before sorting stops

330

- `sortchange` - Triggered when sort order changes

331

- `sortcreate` - Triggered when sortable is created

332

- `sortdeactivate` - Triggered when sorting stops on connected sortable

333

- `sortout` - Triggered when item moves out of connected sortable

334

- `sortover` - Triggered when item moves over connected sortable

335

- `sortreceive` - Triggered when item is received from connected sortable

336

- `sortremove` - Triggered when item is removed to connected sortable

337

- `sortsort` - Triggered during sorting

338

- `sortstart` - Triggered when sorting starts

339

- `sortstop` - Triggered when sorting stops

340

- `sortupdate` - Triggered when sort order changes and DOM position updates

341

342

**Usage Examples:**

343

```javascript

344

// Basic sortable list

345

$('#sortable').sortable();

346

347

// Connected sortables

348

$('#list1, #list2').sortable({

349

connectWith: '.connected-sortable'

350

});

351

352

// Handle sort events

353

$('#sortable').sortable({

354

update: function(event, ui) {

355

var order = $(this).sortable('toArray');

356

console.log('New order:', order);

357

}

358

});

359

360

// Serialize to form data

361

$('#sortable').sortable({

362

stop: function() {

363

var serialized = $(this).sortable('serialize');

364

$.post('update-order.php', serialized);

365

}

366

});

367

368

// Custom placeholder and helper

369

$('#sortable').sortable({

370

placeholder: 'sort-highlight',

371

helper: 'clone',

372

opacity: 0.6

373

});

374

```

375

376

## Mouse Widget Base

377

378

All interaction widgets inherit from the mouse widget, which provides common mouse handling:

379

380

```javascript { .api }

381

interface MouseOptions {

382

cancel?: string; // Selector for elements that cancel mouse interaction

383

delay?: number; // Delay in milliseconds before interaction starts

384

distance?: number; // Distance in pixels before interaction starts

385

}

386

```

387

388

**Mouse Events:**

389

- Mouse widgets trigger standard jQuery UI widget events

390

- All mouse interactions respect the `cancel`, `delay`, and `distance` options

391

- Custom mouse handling can be implemented by extending `$.ui.mouse`

392

393

## Types

394

395

```javascript { .api }

396

// Common interaction event object

397

interface InteractionEvent {

398

type: string;

399

target: Element;

400

currentTarget: Element;

401

originalEvent: MouseEvent;

402

helper?: jQuery;

403

position?: { top: number, left: number };

404

offset?: { top: number, left: number };

405

}

406

407

// Draggable-specific event object

408

interface DraggableEvent extends InteractionEvent {

409

helper: jQuery;

410

position: { top: number, left: number };

411

offset: { top: number, left: number };

412

}

413

414

// Droppable-specific event object

415

interface DroppableEvent extends InteractionEvent {

416

draggable: jQuery;

417

}

418

419

// Resizable-specific event object

420

interface ResizableEvent extends InteractionEvent {

421

size: { width: number, height: number };

422

originalSize: { width: number, height: number };

423

position: { top: number, left: number };

424

originalPosition: { top: number, left: number };

425

}

426

427

// Selectable-specific event object

428

interface SelectableEvent extends InteractionEvent {

429

selecting?: Element;

430

selected?: Element;

431

unselecting?: Element;

432

unselected?: Element;

433

}

434

435

// Sortable-specific event object

436

interface SortableEvent extends InteractionEvent {

437

item: jQuery;

438

helper: jQuery;

439

position: { top: number, left: number };

440

offset: { top: number, left: number };

441

sender?: jQuery;

442

placeholder: jQuery;

443

}

444

445

// Utility types for coordinates and dimensions

446

interface Coordinates {

447

top: number;

448

left: number;

449

}

450

451

interface Dimensions {

452

width: number;

453

height: number;

454

}

455

456

interface Rectangle extends Coordinates, Dimensions {}

457

```