kritzel-stencil 0.1.16 → 0.1.17

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 (50) hide show
  1. package/dist/cjs/{default-line-tool.config-BXYWjUSM.js → default-line-tool.config-D-Ru2SSK.js} +101 -130
  2. package/dist/cjs/index.cjs.js +1 -1
  3. package/dist/cjs/kritzel-back-to-content_32.cjs.entry.js +11 -5
  4. package/dist/collection/classes/handlers/move.handler.js +2 -2
  5. package/dist/collection/classes/objects/path.class.js +4 -9
  6. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +1 -1
  7. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +7 -1
  8. package/dist/collection/components/ui/kritzel-tool-config/kritzel-tool-config.css +1 -1
  9. package/dist/collection/constants/version.js +1 -1
  10. package/dist/collection/helpers/keyboard.helper.js +70 -10
  11. package/dist/collection/themes/dark-theme.js +0 -44
  12. package/dist/collection/themes/light-theme.js +0 -39
  13. package/dist/components/index.js +1 -1
  14. package/dist/components/kritzel-brush-style.js +1 -1
  15. package/dist/components/kritzel-color-palette.js +1 -1
  16. package/dist/components/kritzel-color.js +1 -1
  17. package/dist/components/kritzel-controls.js +1 -1
  18. package/dist/components/kritzel-dropdown.js +1 -1
  19. package/dist/components/kritzel-editor.js +1 -1
  20. package/dist/components/kritzel-engine.js +1 -1
  21. package/dist/components/kritzel-font-family.js +1 -1
  22. package/dist/components/kritzel-settings.js +1 -1
  23. package/dist/components/kritzel-stroke-size.js +1 -1
  24. package/dist/components/kritzel-tool-config.js +1 -1
  25. package/dist/components/p--Bo4GaCK.js +1 -0
  26. package/dist/components/{p-Bzv0vavh.js → p-B8IOGWhN.js} +1 -1
  27. package/dist/components/{p-y6zswJUQ.js → p-BDFu1vsS.js} +1 -1
  28. package/dist/components/{p-dQFQsn5l.js → p-CmqXj79q.js} +1 -1
  29. package/dist/components/{p-CCvoXqIn.js → p-CwP7yBQP.js} +1 -1
  30. package/dist/components/p-Cy7mncoG.js +1 -0
  31. package/dist/components/p-DKDoQ9nc.js +1 -0
  32. package/dist/components/{p-C__BfmIJ.js → p-DPR5Yq3I.js} +1 -1
  33. package/dist/components/{p-BrAnZtQA.js → p-DZpC1x_I.js} +1 -1
  34. package/dist/components/{p-bE-Bpn0g.js → p-DrwG_00J.js} +2 -2
  35. package/dist/components/{p-dYHgrz6o.js → p-MlG9hN-3.js} +1 -1
  36. package/dist/esm/{default-line-tool.config-BKFxgp0p.js → default-line-tool.config-CYM64Io0.js} +101 -130
  37. package/dist/esm/index.js +2 -2
  38. package/dist/esm/kritzel-back-to-content_32.entry.js +11 -5
  39. package/dist/stencil/index.esm.js +1 -1
  40. package/dist/stencil/p-CYM64Io0.js +1 -0
  41. package/dist/stencil/{p-afc040bc.entry.js → p-e3cf8ef3.entry.js} +2 -2
  42. package/dist/stencil/stencil.esm.js +1 -1
  43. package/dist/types/components/shared/kritzel-dropdown/kritzel-dropdown.d.ts +1 -0
  44. package/dist/types/constants/version.d.ts +1 -1
  45. package/dist/types/helpers/keyboard.helper.d.ts +1 -0
  46. package/package.json +1 -1
  47. package/dist/components/p-CKG7ycw4.js +0 -1
  48. package/dist/components/p-Cuf-GvO0.js +0 -1
  49. package/dist/components/p-UNc_oph8.js +0 -1
  50. package/dist/stencil/p-BKFxgp0p.js +0 -1
@@ -418,6 +418,32 @@ class KritzelBaseObject {
418
418
  }
419
419
  }
420
420
 
421
+ class KritzelDevicesHelper {
422
+ static isTouchDevice() {
423
+ return window.matchMedia('(any-pointer: coarse)').matches;
424
+ }
425
+ static isAndroid() {
426
+ return /android/i.test(navigator.userAgent);
427
+ }
428
+ static isIOS() {
429
+ return /iPad|iPhone|iPod/.test(navigator.userAgent);
430
+ }
431
+ static detectOS() {
432
+ if (this.isIOS()) {
433
+ return 'iOS';
434
+ }
435
+ else if (this.isAndroid()) {
436
+ return 'Android';
437
+ }
438
+ else {
439
+ return 'Other';
440
+ }
441
+ }
442
+ static isFirefox() {
443
+ return /firefox/i.test(navigator.userAgent);
444
+ }
445
+ }
446
+
421
447
  class KritzelKeyboardHelper {
422
448
  static forceHideKeyboard() {
423
449
  if (document.activeElement instanceof HTMLElement) {
@@ -447,49 +473,82 @@ class KritzelKeyboardHelper {
447
473
  meta.setAttribute('content', newContent);
448
474
  }
449
475
  }
476
+ static isTextInputFocused() {
477
+ const activeElement = document.activeElement;
478
+ if (!activeElement)
479
+ return false;
480
+ // Check for standard text input elements
481
+ if (activeElement instanceof HTMLInputElement) {
482
+ const textTypes = ['text', 'password', 'email', 'number', 'search', 'tel', 'url'];
483
+ return textTypes.includes(activeElement.type);
484
+ }
485
+ if (activeElement instanceof HTMLTextAreaElement) {
486
+ return true;
487
+ }
488
+ // Check for contenteditable elements
489
+ if (activeElement instanceof HTMLElement && activeElement.isContentEditable) {
490
+ return true;
491
+ }
492
+ return false;
493
+ }
450
494
  static onKeyboardVisibleChanged(callback) {
495
+ const os = KritzelDevicesHelper.detectOS();
496
+ if (os !== 'iOS' && os !== 'Android') {
497
+ return () => { };
498
+ }
499
+ // Use VirtualKeyboard API if available (modern browsers)
500
+ if ('virtualKeyboard' in navigator) {
501
+ const vk = navigator.virtualKeyboard;
502
+ const onGeometryChange = () => {
503
+ const isOpen = vk.boundingRect.height > 0;
504
+ callback(isOpen);
505
+ };
506
+ vk.addEventListener('geometrychange', onGeometryChange);
507
+ return () => vk.removeEventListener('geometrychange', onGeometryChange);
508
+ }
509
+ // Fallback: combine focus detection with viewport changes
451
510
  if ('visualViewport' in window) {
452
511
  const VIEWPORT_VS_CLIENT_HEIGHT_RATIO = 0.75;
453
- const onResize = (event) => {
454
- const target = event.target;
455
- const isOpen = (target.height * target.scale) / window.screen.height < VIEWPORT_VS_CLIENT_HEIGHT_RATIO;
512
+ let initialHeight = window.visualViewport.height;
513
+ const checkKeyboardState = () => {
514
+ const viewportRatio = (window.visualViewport.height * window.visualViewport.scale) / initialHeight;
515
+ const viewportShrunk = viewportRatio < VIEWPORT_VS_CLIENT_HEIGHT_RATIO;
516
+ const isOpen = viewportShrunk && this.isTextInputFocused();
456
517
  callback(isOpen);
457
518
  };
519
+ const onResize = () => {
520
+ checkKeyboardState();
521
+ };
522
+ const onFocusIn = () => {
523
+ // Update initial height when focus changes to capture pre-keyboard state
524
+ if (!this.isTextInputFocused()) {
525
+ initialHeight = window.visualViewport.height;
526
+ }
527
+ // Small delay to allow viewport to adjust
528
+ setTimeout(checkKeyboardState, 100);
529
+ };
530
+ const onFocusOut = () => {
531
+ // Keyboard closes when focus leaves text inputs
532
+ setTimeout(() => {
533
+ if (!this.isTextInputFocused()) {
534
+ callback(false);
535
+ // Reset initial height after keyboard closes
536
+ setTimeout(() => {
537
+ initialHeight = window.visualViewport.height;
538
+ }, 300);
539
+ }
540
+ }, 100);
541
+ };
458
542
  window.visualViewport.addEventListener('resize', onResize);
459
- return () => window.visualViewport.removeEventListener('resize', onResize);
460
- }
461
- else {
462
- // Fallback for older browsers does not provide a reliable event-based mechanism.
463
- console.warn('Listening for keyboard visibility changes is not reliably supported in this browser.');
464
- // Return a no-op cleanup function.
465
- return () => { };
466
- }
467
- }
468
- }
469
-
470
- class KritzelDevicesHelper {
471
- static isTouchDevice() {
472
- return window.matchMedia('(any-pointer: coarse)').matches;
473
- }
474
- static isAndroid() {
475
- return /android/i.test(navigator.userAgent);
476
- }
477
- static isIOS() {
478
- return /iPad|iPhone|iPod/.test(navigator.userAgent);
479
- }
480
- static detectOS() {
481
- if (this.isIOS()) {
482
- return 'iOS';
483
- }
484
- else if (this.isAndroid()) {
485
- return 'Android';
486
- }
487
- else {
488
- return 'Other';
543
+ document.addEventListener('focusin', onFocusIn);
544
+ document.addEventListener('focusout', onFocusOut);
545
+ return () => {
546
+ window.visualViewport.removeEventListener('resize', onResize);
547
+ document.removeEventListener('focusin', onFocusIn);
548
+ document.removeEventListener('focusout', onFocusOut);
549
+ };
489
550
  }
490
- }
491
- static isFirefox() {
492
- return /firefox/i.test(navigator.userAgent);
551
+ return () => { };
493
552
  }
494
553
  }
495
554
 
@@ -14126,17 +14185,11 @@ const lightTheme = {
14126
14185
  contextMenu: {
14127
14186
  backgroundColor: '#ffffff',
14128
14187
  border: '1px solid #ebebeb',
14129
- borderRadius: '12px',
14130
14188
  boxShadow: '0 1px 6px rgba(0, 0, 0, 0.12)',
14131
14189
  itemActiveBackgroundColor: 'hsl(0, 0%, 0%, 8.6%)',
14132
- itemBorderRadius: '12px',
14133
14190
  itemColor: '#333333',
14134
14191
  itemDisabledColor: '#aaaaaa',
14135
- itemFontSize: '14px',
14136
- itemGap: '8px',
14137
14192
  itemHoverBackgroundColor: 'hsl(0, 0%, 0%, 4.3%)',
14138
- itemPadding: '8px',
14139
- padding: '4px',
14140
14193
  },
14141
14194
  controls: {
14142
14195
  backgroundColor: '#ffffff',
@@ -14169,16 +14222,6 @@ const lightTheme = {
14169
14222
  selectedBackgroundColor: '#007bff1a',
14170
14223
  textColor: '#333333',
14171
14224
  },
14172
- editor: {
14173
- controlsBottom: '16px',
14174
- controlsTransform: 'translateX(-50%)',
14175
- controlsTransition: 'opacity 0.2s ease',
14176
- controlsTransitionDuration: '0.2s',
14177
- topLeftButtonsLeft: '16px',
14178
- topLeftButtonsTop: '16px',
14179
- topRightButtonsRight: '16px',
14180
- topRightButtonsTop: '16px',
14181
- },
14182
14225
  engine: {
14183
14226
  backgroundColor: '#ffffff',
14184
14227
  },
@@ -14214,27 +14257,17 @@ const lightTheme = {
14214
14257
  menu: {
14215
14258
  backgroundColor: '#ffffff',
14216
14259
  border: '1px solid #ebebeb',
14217
- borderRadius: '12px',
14218
14260
  boxShadow: '0 0 3px rgba(0, 0, 0, 0.08)',
14219
- gap: '4px',
14220
- itemBorderRadius: '12px',
14221
14261
  itemButtonHoverBackgroundColor: 'hsl(0, 0%, 0%, 4.3%)',
14222
14262
  itemChildOpenBackgroundColor: 'hsl(0, 0%, 0%, 3%)',
14223
14263
  itemColor: '#333333',
14224
14264
  itemEditingBackgroundColor: '#f0f0f0',
14225
- itemFontSize: '14px',
14226
- itemHeight: '40px',
14227
14265
  itemInputBorder: '1px solid #ccc',
14228
- itemInputHeight: '32px',
14229
14266
  itemInputSelectionColor: 'rgba(255, 255, 255, 0.16)',
14230
14267
  itemInputSelectionTextColor: '#000000',
14231
- itemMinHeight: '40px',
14232
14268
  itemOverlayBackgroundColor: 'hsl(0, 0%, 0%, 4.3%)',
14233
- itemPadding: '8px',
14234
14269
  itemSelectedBackgroundColor: '#007aff',
14235
14270
  itemSelectedColor: '#ffffff',
14236
- padding: '8px',
14237
- width: '200px',
14238
14271
  },
14239
14272
  moreMenu: {
14240
14273
  buttonActiveBackgroundColor: '#e9e9e9',
@@ -14263,9 +14296,6 @@ const lightTheme = {
14263
14296
  thumbColor: '#ffffff',
14264
14297
  trackColor: '#e0e0e0',
14265
14298
  },
14266
- portal: {
14267
- maxHeight: '300px',
14268
- },
14269
14299
  settings: {
14270
14300
  contentHeadingColor: '#000000',
14271
14301
  contentTextColor: '#333333',
@@ -14278,14 +14308,10 @@ const lightTheme = {
14278
14308
  selectedBackgroundColor: '#ebebeb',
14279
14309
  },
14280
14310
  slideToggle: {
14281
- borderRadius: '11px',
14282
- height: '22px',
14283
14311
  thumbColor: '#fff',
14284
14312
  thumbSize: '18px',
14285
14313
  trackCheckedColor: '#007AFF',
14286
14314
  trackColor: '#ccc',
14287
- transitionDuration: '0.2s',
14288
- width: '40px',
14289
14315
  },
14290
14316
  splitButton: {
14291
14317
  backgroundColor: '#ffffff',
@@ -14299,20 +14325,14 @@ const lightTheme = {
14299
14325
  hoverBackgroundColor: '#ebebeb',
14300
14326
  selectedBackgroundColor: '#ebebeb',
14301
14327
  },
14302
- submenu: {
14303
- gap: '4px',
14304
- },
14305
14328
  tooltip: {
14306
14329
  backgroundColor: '#ffffff',
14307
14330
  border: '1px solid #ebebeb',
14308
- borderRadius: '16px',
14309
14331
  boxShadow: '0 1px 6px rgba(0, 0, 0, 0.12)',
14310
14332
  color: '#000000',
14311
- padding: '12px',
14312
14333
  },
14313
14334
  utilityPanel: {
14314
14335
  backgroundColor: '#e2e2e2',
14315
- buttonBorderRadius: '8px',
14316
14336
  buttonColor: '#333333',
14317
14337
  buttonHoverBackgroundColor: 'hsl(0, 0%, 0%, 4.3%)',
14318
14338
  separatorColor: 'hsl(0, 0%, 0%, 8%)',
@@ -14359,17 +14379,11 @@ const darkTheme = {
14359
14379
  contextMenu: {
14360
14380
  backgroundColor: '#2a2a2a',
14361
14381
  border: '1px solid #3a3a3a',
14362
- borderRadius: '12px',
14363
14382
  boxShadow: '0 1px 8px rgba(0, 0, 0, 0.4)',
14364
14383
  itemActiveBackgroundColor: 'hsl(0, 0%, 100%, 12%)',
14365
- itemBorderRadius: '12px',
14366
14384
  itemColor: '#e0e0e0',
14367
14385
  itemDisabledColor: '#666666',
14368
- itemFontSize: '14px',
14369
- itemGap: '8px',
14370
14386
  itemHoverBackgroundColor: 'hsl(0, 0%, 100%, 8%)',
14371
- itemPadding: '8px',
14372
- padding: '4px',
14373
14387
  },
14374
14388
  controls: {
14375
14389
  backgroundColor: '#2a2a2a',
@@ -14384,9 +14398,7 @@ const darkTheme = {
14384
14398
  dialog: {
14385
14399
  backdropColor: 'rgba(0, 0, 0, 0.6)',
14386
14400
  backgroundColor: '#2a2a2a',
14387
- bodyPadding: '16px',
14388
14401
  border: '1px solid #3a3a3a',
14389
- borderRadius: '16px',
14390
14402
  boxShadow: '0 4px 24px rgba(0, 0, 0, 0.5)',
14391
14403
  closeButtonActiveBackground: 'hsl(0, 0%, 100%, 12%)',
14392
14404
  closeButtonBackground: 'transparent',
@@ -14396,8 +14408,6 @@ const darkTheme = {
14396
14408
  footerBorder: '1px solid #3a3a3a',
14397
14409
  headerBorder: '1px solid #3a3a3a',
14398
14410
  titleColor: '#ffffff',
14399
- titleFontSize: '18px',
14400
- titleFontWeight: '600',
14401
14411
  },
14402
14412
  dropdown: {
14403
14413
  accentColor: '#0A84FF',
@@ -14405,16 +14415,6 @@ const darkTheme = {
14405
14415
  selectedBackgroundColor: 'rgba(10, 132, 255, 0.2)',
14406
14416
  textColor: '#e0e0e0',
14407
14417
  },
14408
- editor: {
14409
- controlsBottom: '16px',
14410
- controlsTransform: 'translateX(-50%)',
14411
- controlsTransition: 'opacity 0.2s ease',
14412
- controlsTransitionDuration: '0.2s',
14413
- topLeftButtonsLeft: '16px',
14414
- topLeftButtonsTop: '16px',
14415
- topRightButtonsRight: '16px',
14416
- topRightButtonsTop: '16px',
14417
- },
14418
14418
  engine: {
14419
14419
  backgroundColor: '#1a1a1a',
14420
14420
  },
@@ -14450,33 +14450,22 @@ const darkTheme = {
14450
14450
  menu: {
14451
14451
  backgroundColor: '#2a2a2a',
14452
14452
  border: '1px solid #3a3a3a',
14453
- borderRadius: '12px',
14454
14453
  boxShadow: '0 0 6px rgba(0, 0, 0, 0.3)',
14455
- gap: '4px',
14456
- itemBorderRadius: '12px',
14457
14454
  itemButtonHoverBackgroundColor: 'hsl(0, 0%, 100%, 8%)',
14458
14455
  itemChildOpenBackgroundColor: 'hsl(0, 0%, 100%, 6%)',
14459
14456
  itemColor: '#e0e0e0',
14460
14457
  itemEditingBackgroundColor: '#3a3a3a',
14461
- itemFontSize: '14px',
14462
- itemHeight: '40px',
14463
14458
  itemInputBorder: '1px solid #4a4a4a',
14464
- itemInputHeight: '32px',
14465
14459
  itemInputSelectionColor: 'rgba(255, 255, 255, 0.2)',
14466
14460
  itemInputSelectionTextColor: '#ffffff',
14467
- itemMinHeight: '40px',
14468
14461
  itemOverlayBackgroundColor: 'hsl(0, 0%, 0%, 20%)',
14469
- itemPadding: '8px',
14470
14462
  itemSelectedBackgroundColor: '#0A84FF',
14471
14463
  itemSelectedColor: '#ffffff',
14472
- padding: '8px',
14473
- width: '200px',
14474
14464
  },
14475
14465
  moreMenu: {
14476
14466
  buttonActiveBackgroundColor: '#444444',
14477
14467
  buttonBackgroundColor: '#2a2a2a',
14478
14468
  buttonBorder: '1px solid #3a3a3a',
14479
- buttonBorderRadius: '12px',
14480
14469
  buttonBoxShadow: '0 0 6px rgba(0, 0, 0, 0.3)',
14481
14470
  buttonColor: '#ffffff',
14482
14471
  buttonHoverBackgroundColor: '#3b3b3b',
@@ -14499,9 +14488,6 @@ const darkTheme = {
14499
14488
  thumbColor: '#ffffff',
14500
14489
  trackColor: '#4a4a4a',
14501
14490
  },
14502
- portal: {
14503
- maxHeight: '300px',
14504
- },
14505
14491
  settings: {
14506
14492
  contentHeadingColor: '#ffffff',
14507
14493
  contentTextColor: '#e0e0e0',
@@ -14514,14 +14500,10 @@ const darkTheme = {
14514
14500
  selectedBackgroundColor: '#3a3a3a',
14515
14501
  },
14516
14502
  slideToggle: {
14517
- borderRadius: '11px',
14518
- height: '22px',
14519
14503
  thumbColor: '#ffffff',
14520
- thumbSize: '18px',
14521
14504
  trackCheckedColor: '#0A84FF',
14522
14505
  trackColor: '#4a4a4a',
14523
14506
  transitionDuration: '0.2s',
14524
- width: '40px',
14525
14507
  },
14526
14508
  splitButton: {
14527
14509
  backgroundColor: '#2a2a2a',
@@ -14535,20 +14517,14 @@ const darkTheme = {
14535
14517
  hoverBackgroundColor: '#3a3a3a',
14536
14518
  selectedBackgroundColor: '#3a3a3a',
14537
14519
  },
14538
- submenu: {
14539
- gap: '4px',
14540
- },
14541
14520
  tooltip: {
14542
14521
  backgroundColor: '#2a2a2a',
14543
14522
  border: '1px solid #3a3a3a',
14544
- borderRadius: '16px',
14545
14523
  boxShadow: '0 1px 8px rgba(0, 0, 0, 0.4)',
14546
14524
  color: '#ffffff',
14547
- padding: '12px',
14548
14525
  },
14549
14526
  utilityPanel: {
14550
14527
  backgroundColor: '#3a3a3a',
14551
- buttonBorderRadius: '8px',
14552
14528
  buttonColor: '#e0e0e0',
14553
14529
  buttonHoverBackgroundColor: 'hsl(0, 0%, 100%, 8%)',
14554
14530
  separatorColor: 'hsl(0, 0%, 100%, 12%)',
@@ -15291,15 +15267,10 @@ class KritzelPath extends KritzelBaseObject {
15291
15267
  * Does NOT modify translateX/translateY (use updateDimensions for initial setup).
15292
15268
  */
15293
15269
  updateBoundingBox() {
15294
- const rotatedPoints = this.points.map(([x, y]) => {
15295
- const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);
15296
- const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);
15297
- return [rotatedX, rotatedY];
15298
- });
15299
- const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));
15300
- const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));
15301
- const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));
15302
- const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));
15270
+ const minX = Math.min(...this.points.map(p => p[0])) - this.strokeWidth / 2;
15271
+ const minY = Math.min(...this.points.map(p => p[1])) - this.strokeWidth / 2;
15272
+ const maxX = Math.max(...this.points.map(p => p[0])) + this.strokeWidth / 2;
15273
+ const maxY = Math.max(...this.points.map(p => p[1])) + this.strokeWidth / 2;
15303
15274
  this.width = maxX - minX + this.lineSlack;
15304
15275
  this.height = maxY - minY + this.lineSlack;
15305
15276
  this.x = minX;
@@ -17779,7 +17750,7 @@ class KritzelMoveHandler extends KritzelBaseHandler {
17779
17750
  const moveDeltaX = Math.abs(clientX - this.startX);
17780
17751
  const moveDeltaY = Math.abs(clientY - this.startY);
17781
17752
  const moveThreshold = 5;
17782
- if (moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
17753
+ if (this.hasMoved || moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
17783
17754
  // Check for anchor disconnect threshold on lines
17784
17755
  this.checkAndDisconnectAnchors(clientX, clientY);
17785
17756
  selectionGroup.move(clientX, clientY, this.dragStartX, this.dragStartY);
@@ -17805,7 +17776,7 @@ class KritzelMoveHandler extends KritzelBaseHandler {
17805
17776
  const moveDeltaX = Math.abs(x - this.startX);
17806
17777
  const moveDeltaY = Math.abs(y - this.startY);
17807
17778
  const moveThreshold = 5;
17808
- if (moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
17779
+ if (this.hasMoved || moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
17809
17780
  clearTimeout(this._core.store.state.longTouchTimeout);
17810
17781
  // Check for anchor disconnect threshold on lines
17811
17782
  this.checkAndDisconnectAnchors(x, y);
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var defaultLineTool_config = require('./default-line-tool.config-BXYWjUSM.js');
3
+ var defaultLineTool_config = require('./default-line-tool.config-D-Ru2SSK.js');
4
4
 
5
5
  /**
6
6
  * BroadcastChannel sync provider for cross-tab synchronization
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-i21-qqbc.js');
4
- var defaultLineTool_config = require('./default-line-tool.config-BXYWjUSM.js');
4
+ var defaultLineTool_config = require('./default-line-tool.config-D-Ru2SSK.js');
5
5
 
6
6
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7
7
 
@@ -1173,7 +1173,7 @@ const KritzelDialog = class {
1173
1173
  };
1174
1174
  KritzelDialog.style = kritzelDialogCss();
1175
1175
 
1176
- const kritzelDropdownCss = () => `:host{display:inline-flex;vertical-align:middle;width:100%;position:relative}.dropdown-wrapper{display:flex;align-items:center;border:1px solid var(--kritzel-global-border-color, #ebebeb);border-radius:var(--kritzel-controls-control-border-radius, 12px);overflow:visible;height:32px;width:100%;position:relative}.dropdown-container{flex:1;height:100%;min-width:0}.dropdown-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 8px;height:100%;width:100%;box-sizing:border-box;border-radius:var(--kritzel-controls-control-border-radius, 12px);border:none;background-color:var(--kritzel-controls-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);outline:none;font-size:inherit;font-family:inherit;color:var(--kritzel-dropdown-text-color, #333333);-webkit-tap-highlight-color:transparent;text-align:left}.dropdown-trigger:focus-visible{outline:revert}.dropdown-trigger.has-suffix-border{border-right:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-trigger.has-prefix-border{border-left:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.dropdown-trigger-arrow{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;transition:transform 0.2s ease}.dropdown-trigger-arrow svg{width:100%;height:100%}.dropdown-trigger.is-open .dropdown-trigger-arrow{transform:rotate(180deg)}.dropdown-trigger.is-open.open-up .dropdown-trigger-arrow{transform:rotate(0deg)}.dropdown-menu{position:absolute;left:0;right:0;margin:0;padding:4px 0;list-style:none;background-color:var(--kritzel-controls-background-color, #ffffff);border:1px solid var(--kritzel-global-border-color, #ebebeb);border-radius:var(--kritzel-controls-control-border-radius, 12px);box-shadow:var(--kritzel-controls-box-shadow, 0 4px 12px rgba(0, 0, 0, 0.15));z-index:1000;max-height:240px;overflow-y:auto;opacity:0;visibility:hidden;transition:opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;outline:none}.dropdown-menu.open-down{top:calc(100% + 4px);bottom:auto;transform:translateY(-8px)}.dropdown-menu.open-up{bottom:calc(100% + 4px);top:auto;transform:translateY(8px)}.dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}.dropdown-menu.open-up{box-shadow:var(--kritzel-controls-box-shadow, 0 -4px 12px rgba(0, 0, 0, 0.15))}.dropdown-option{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;cursor:var(--kritzel-global-pointer-cursor, pointer);color:var(--kritzel-dropdown-text-color, #333333);transition:background-color 0.1s ease;-webkit-tap-highlight-color:transparent}.dropdown-option.is-focused{background-color:var(--kritzel-dropdown-hover-background-color, #f0f0f0)}.dropdown-option.is-selected{font-weight:600;background-color:var(--kritzel-dropdown-selected-background-color, #007bff1a)}.dropdown-option-check{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;color:var(--kritzel-dropdown-accent-color, #007bff)}.dropdown-option-check svg{width:100%;height:100%}.dropdown-menu{scrollbar-color:var(--kritzel-global-scrollbar-thumb-color, #ebebeb) transparent;scrollbar-width:thin}::slotted(*){height:100%;box-sizing:border-box}`;
1176
+ const kritzelDropdownCss = () => `:host{display:inline-flex;vertical-align:middle;width:100%;position:relative}.dropdown-wrapper{display:flex;align-items:center;border:1px solid var(--kritzel-global-border-color, #ebebeb);border-radius:var(--kritzel-controls-control-border-radius, 12px);overflow:visible;height:32px;width:100%;position:relative}.dropdown-container{flex:1;height:100%;min-width:0}.dropdown-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 8px;height:100%;width:100%;box-sizing:border-box;border-radius:var(--kritzel-controls-control-border-radius, 12px);border:none;background-color:var(--kritzel-controls-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);outline:none;font-size:inherit;font-family:inherit;color:var(--kritzel-dropdown-text-color, #333333);-webkit-tap-highlight-color:transparent;text-align:left}.dropdown-trigger:focus-visible{outline:revert}.dropdown-trigger.has-suffix-border{border-right:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-trigger.has-prefix-border{border-left:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.dropdown-trigger-arrow{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;transition:transform 0.2s ease}.dropdown-trigger-arrow svg{width:100%;height:100%}.dropdown-trigger.is-open .dropdown-trigger-arrow{transform:rotate(180deg)}.dropdown-trigger.is-open.open-up .dropdown-trigger-arrow{transform:rotate(0deg)}.dropdown-menu{position:absolute;left:0;right:0;margin:0;padding:4px 0;list-style:none;background-color:var(--kritzel-controls-background-color, #ffffff);border:1px solid var(--kritzel-global-border-color, #ebebeb);border-radius:var(--kritzel-controls-control-border-radius, 12px);box-shadow:var(--kritzel-controls-box-shadow, 0 4px 12px rgba(0, 0, 0, 0.15));z-index:1000;max-height:240px;overflow-y:auto;opacity:0;visibility:hidden;transition:opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;outline:none}.dropdown-menu.open-down{top:calc(100% + 4px);bottom:auto;transform:translateY(-8px)}.dropdown-menu.open-up{bottom:calc(100% + 4px);top:auto;transform:translateY(8px)}.dropdown-menu.is-open{opacity:1;visibility:inherit;transform:translateY(0)}.dropdown-menu.open-up{box-shadow:var(--kritzel-controls-box-shadow, 0 -4px 12px rgba(0, 0, 0, 0.15))}.dropdown-option{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;cursor:var(--kritzel-global-pointer-cursor, pointer);color:var(--kritzel-dropdown-text-color, #333333);transition:background-color 0.1s ease;-webkit-tap-highlight-color:transparent}.dropdown-option.is-focused{background-color:var(--kritzel-dropdown-hover-background-color, #f0f0f0)}.dropdown-option.is-selected{font-weight:600;background-color:var(--kritzel-dropdown-selected-background-color, #007bff1a)}.dropdown-option-check{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;color:var(--kritzel-dropdown-accent-color, #007bff)}.dropdown-option-check svg{width:100%;height:100%}.dropdown-menu{scrollbar-color:var(--kritzel-global-scrollbar-thumb-color, #ebebeb) transparent;scrollbar-width:thin}::slotted(*){height:100%;box-sizing:border-box}`;
1177
1177
 
1178
1178
  const KritzelDropdown = class {
1179
1179
  constructor(hostRef) {
@@ -1210,6 +1210,12 @@ const KritzelDropdown = class {
1210
1210
  this.evaluateSuffixContent();
1211
1211
  this.evaluatePrefixContent();
1212
1212
  }
1213
+ disconnectedCallback() {
1214
+ // Close menu when component is removed from DOM to prevent orphaned open dropdowns
1215
+ if (this.isOpen) {
1216
+ this.isOpen = false;
1217
+ }
1218
+ }
1213
1219
  handleDocumentClick(event) {
1214
1220
  if (this.isOpen && !this.el.contains(event.target)) {
1215
1221
  this.closeMenu();
@@ -1399,7 +1405,7 @@ const KritzelDropdown = class {
1399
1405
  'open-up': this.openDirection === 'up',
1400
1406
  'open-down': this.openDirection === 'down',
1401
1407
  };
1402
- return (index.h(index.Host, { key: '29d076eb2ef76527c0930ab82ace0d05c896ab6c' }, index.h("div", { key: '1afac5cc0b7f408849670b8cb62fe0bd0f3b27f1', class: "dropdown-wrapper", ref: el => (this.wrapperElement = el) }, index.h("slot", { key: '3cfcf787c3b3eedbd6bf30c7506a0a4912429672', name: "prefix", ref: el => (this.prefixSlotElement = el), onSlotchange: this.evaluatePrefixContent }), index.h("div", { key: 'b88120ed3e44871220e6ba61e8bef457651a2086', class: "dropdown-container", style: { width: this.width } }, index.h("button", { key: '79082189066f3d0b4f5797420ec222847792fe52', type: "button", class: triggerClasses, style: { ...this.selectStyles, ...this.getSelectedStyle() }, onClick: this.toggleMenu, onKeyDown: this.handleTriggerKeyDown, "aria-haspopup": "listbox", "aria-expanded": this.isOpen ? 'true' : 'false', ref: el => (this.triggerElement = el) }, index.h("span", { key: 'a490bb6689ec1820144fe82f6833bee82e6ead0e', class: "dropdown-trigger-label" }, this.getSelectedLabel()), index.h("span", { key: '8bd7768f6fdd3c507bbca54d7d135adabe04901f', class: "dropdown-trigger-arrow", "aria-hidden": "true" }, index.h("svg", { key: 'e1b854d2c93e3067181108f8d782e1393ddb615c', xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, index.h("polyline", { key: '3622cbf8964f4e50aa55be5209240dfd252f1d84', points: "6 9 12 15 18 9" }))))), index.h("slot", { key: 'b91317736904cbeee0f87058b822bd77c6b163ca', name: "suffix", ref: el => (this.suffixSlotElement = el), onSlotchange: this.evaluateSuffixContent }), index.h("ul", { key: '0ca8690345974e9b7ad184f4c7ab7cf5367b183c', class: menuClasses, role: "listbox", tabindex: "-1", onKeyDown: this.handleMenuKeyDown, ref: el => (this.menuElement = el) }, this.options.map((option, index$1) => {
1408
+ return (index.h(index.Host, { key: '83e46921e04c655ed185bfe3de524a61e9510447' }, index.h("div", { key: '251ee0af926e24e13a2b07fa6b8b41d02212434d', class: "dropdown-wrapper", ref: el => (this.wrapperElement = el) }, index.h("slot", { key: '2cf811d76e5e626d19aa746e4f59b4d25ca45ae0', name: "prefix", ref: el => (this.prefixSlotElement = el), onSlotchange: this.evaluatePrefixContent }), index.h("div", { key: '1d54e16f12814c150d842266f6ee6ae8891a0130', class: "dropdown-container", style: { width: this.width } }, index.h("button", { key: '3c99b3dd4a25a59579eed072953c3d7f502f7a21', type: "button", class: triggerClasses, style: { ...this.selectStyles, ...this.getSelectedStyle() }, onClick: this.toggleMenu, onKeyDown: this.handleTriggerKeyDown, "aria-haspopup": "listbox", "aria-expanded": this.isOpen ? 'true' : 'false', ref: el => (this.triggerElement = el) }, index.h("span", { key: '1bfa6da63ffdd6bf2b022f92425ce212e009d507', class: "dropdown-trigger-label" }, this.getSelectedLabel()), index.h("span", { key: 'e08ae142512344ffcd0ecfb477133a18fcfb3f34', class: "dropdown-trigger-arrow", "aria-hidden": "true" }, index.h("svg", { key: '8386ae9c934762f8e054f42c580cf750c5a9440a', xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, index.h("polyline", { key: '024d4ecbc8a3ab9879edc02c890df7ceabef1f8a', points: "6 9 12 15 18 9" }))))), index.h("slot", { key: '028de1fa2049c7d682b967f34a3a5e9c39d32fe2', name: "suffix", ref: el => (this.suffixSlotElement = el), onSlotchange: this.evaluateSuffixContent }), index.h("ul", { key: '51cd0ecefc1dcb0cd869d7e67c56f1944847efef', class: menuClasses, role: "listbox", tabindex: "-1", onKeyDown: this.handleMenuKeyDown, ref: el => (this.menuElement = el) }, this.options.map((option, index$1) => {
1403
1409
  const isSelected = option.value === this.internalValue;
1404
1410
  const isFocused = index$1 === this.focusedIndex;
1405
1411
  const optionClasses = {
@@ -23717,7 +23723,7 @@ const KritzelPortal = class {
23717
23723
  * This file is auto-generated by the version bump scripts.
23718
23724
  * Do not modify manually.
23719
23725
  */
23720
- const KRITZEL_VERSION = '0.1.16';
23726
+ const KRITZEL_VERSION = '0.1.17';
23721
23727
 
23722
23728
  const kritzelSettingsCss = () => `:host{display:contents}kritzel-dialog{--kritzel-dialog-body-padding:0;--kritzel-dialog-width-large:800px;--kritzel-dialog-height-large:500px}.footer-button{padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px}.cancel-button{border:1px solid #ebebeb;background:#fff;color:inherit}.cancel-button:hover{background:#f5f5f5}.settings-content{padding:0}.settings-content h3{margin:0 0 16px 0;font-size:18px;font-weight:600;color:var(--kritzel-settings-content-heading-color, #333333)}.settings-content p{margin:0;font-size:14px;color:var(--kritzel-settings-content-text-color, #666666);line-height:1.5}.settings-group{display:flex;flex-direction:column;gap:24px}.settings-item{display:flex;flex-direction:column;gap:8px}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.settings-label{font-size:14px;font-weight:500;color:var(--kritzel-settings-label-color, #333333);margin:0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}`;
23723
23729
 
@@ -24008,7 +24014,7 @@ const KritzelStrokeSize = class {
24008
24014
  };
24009
24015
  KritzelStrokeSize.style = kritzelStrokeSizeCss();
24010
24016
 
24011
- const kritzelToolConfigCss = () => `.expand-toggle{background:none;border:none;cursor:pointer;padding:0;margin:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:var(--kritzel-icon-color, currentColor);transition:transform 0.2s ease}.expand-toggle:hover{opacity:0.7}.expand-toggle:focus{outline:none}.expand-toggle:focus-visible{outline:2px solid var(--kritzel-focus-color, #007acc);outline-offset:2px}.expand-toggle:active{transform:scale(0.95)}.divider{height:1px;background-color:var(--kritzel-divider-color, #e0e0e0);margin:4px 0;width:100%}`;
24017
+ const kritzelToolConfigCss = () => `.expand-toggle{background:none;border:none;cursor:var(--kritzel-global-pointer-cursor, pointer);padding:0;margin:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:var(--kritzel-icon-color, currentColor);transition:transform 0.2s ease}.expand-toggle:hover{opacity:0.7}.expand-toggle:focus{outline:none}.expand-toggle:focus-visible{outline:2px solid var(--kritzel-focus-color, #007acc);outline-offset:2px}.expand-toggle:active{transform:scale(0.95)}.divider{height:1px;background-color:var(--kritzel-divider-color, #e0e0e0);margin:4px 0;width:100%}`;
24012
24018
 
24013
24019
  const KritzelToolConfig = class {
24014
24020
  constructor(hostRef) {
@@ -102,7 +102,7 @@ export class KritzelMoveHandler extends KritzelBaseHandler {
102
102
  const moveDeltaX = Math.abs(clientX - this.startX);
103
103
  const moveDeltaY = Math.abs(clientY - this.startY);
104
104
  const moveThreshold = 5;
105
- if (moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
105
+ if (this.hasMoved || moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
106
106
  // Check for anchor disconnect threshold on lines
107
107
  this.checkAndDisconnectAnchors(clientX, clientY);
108
108
  selectionGroup.move(clientX, clientY, this.dragStartX, this.dragStartY);
@@ -128,7 +128,7 @@ export class KritzelMoveHandler extends KritzelBaseHandler {
128
128
  const moveDeltaX = Math.abs(x - this.startX);
129
129
  const moveDeltaY = Math.abs(y - this.startY);
130
130
  const moveThreshold = 5;
131
- if (moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
131
+ if (this.hasMoved || moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {
132
132
  clearTimeout(this._core.store.state.longTouchTimeout);
133
133
  // Check for anchor disconnect threshold on lines
134
134
  this.checkAndDisconnectAnchors(x, y);
@@ -246,15 +246,10 @@ export class KritzelPath extends KritzelBaseObject {
246
246
  * Does NOT modify translateX/translateY (use updateDimensions for initial setup).
247
247
  */
248
248
  updateBoundingBox() {
249
- const rotatedPoints = this.points.map(([x, y]) => {
250
- const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);
251
- const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);
252
- return [rotatedX, rotatedY];
253
- });
254
- const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));
255
- const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));
256
- const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));
257
- const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));
249
+ const minX = Math.min(...this.points.map(p => p[0])) - this.strokeWidth / 2;
250
+ const minY = Math.min(...this.points.map(p => p[1])) - this.strokeWidth / 2;
251
+ const maxX = Math.max(...this.points.map(p => p[0])) + this.strokeWidth / 2;
252
+ const maxY = Math.max(...this.points.map(p => p[1])) + this.strokeWidth / 2;
258
253
  this.width = maxX - minX + this.lineSlack;
259
254
  this.height = maxY - minY + this.lineSlack;
260
255
  this.x = minX;
@@ -126,7 +126,7 @@
126
126
 
127
127
  .dropdown-menu.is-open {
128
128
  opacity: 1;
129
- visibility: visible;
129
+ visibility: inherit;
130
130
  transform: translateY(0);
131
131
  }
132
132
 
@@ -30,6 +30,12 @@ export class KritzelDropdown {
30
30
  this.evaluateSuffixContent();
31
31
  this.evaluatePrefixContent();
32
32
  }
33
+ disconnectedCallback() {
34
+ // Close menu when component is removed from DOM to prevent orphaned open dropdowns
35
+ if (this.isOpen) {
36
+ this.isOpen = false;
37
+ }
38
+ }
33
39
  handleDocumentClick(event) {
34
40
  if (this.isOpen && !this.el.contains(event.target)) {
35
41
  this.closeMenu();
@@ -219,7 +225,7 @@ export class KritzelDropdown {
219
225
  'open-up': this.openDirection === 'up',
220
226
  'open-down': this.openDirection === 'down',
221
227
  };
222
- return (h(Host, { key: '29d076eb2ef76527c0930ab82ace0d05c896ab6c' }, h("div", { key: '1afac5cc0b7f408849670b8cb62fe0bd0f3b27f1', class: "dropdown-wrapper", ref: el => (this.wrapperElement = el) }, h("slot", { key: '3cfcf787c3b3eedbd6bf30c7506a0a4912429672', name: "prefix", ref: el => (this.prefixSlotElement = el), onSlotchange: this.evaluatePrefixContent }), h("div", { key: 'b88120ed3e44871220e6ba61e8bef457651a2086', class: "dropdown-container", style: { width: this.width } }, h("button", { key: '79082189066f3d0b4f5797420ec222847792fe52', type: "button", class: triggerClasses, style: { ...this.selectStyles, ...this.getSelectedStyle() }, onClick: this.toggleMenu, onKeyDown: this.handleTriggerKeyDown, "aria-haspopup": "listbox", "aria-expanded": this.isOpen ? 'true' : 'false', ref: el => (this.triggerElement = el) }, h("span", { key: 'a490bb6689ec1820144fe82f6833bee82e6ead0e', class: "dropdown-trigger-label" }, this.getSelectedLabel()), h("span", { key: '8bd7768f6fdd3c507bbca54d7d135adabe04901f', class: "dropdown-trigger-arrow", "aria-hidden": "true" }, h("svg", { key: 'e1b854d2c93e3067181108f8d782e1393ddb615c', xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("polyline", { key: '3622cbf8964f4e50aa55be5209240dfd252f1d84', points: "6 9 12 15 18 9" }))))), h("slot", { key: 'b91317736904cbeee0f87058b822bd77c6b163ca', name: "suffix", ref: el => (this.suffixSlotElement = el), onSlotchange: this.evaluateSuffixContent }), h("ul", { key: '0ca8690345974e9b7ad184f4c7ab7cf5367b183c', class: menuClasses, role: "listbox", tabindex: "-1", onKeyDown: this.handleMenuKeyDown, ref: el => (this.menuElement = el) }, this.options.map((option, index) => {
228
+ return (h(Host, { key: '83e46921e04c655ed185bfe3de524a61e9510447' }, h("div", { key: '251ee0af926e24e13a2b07fa6b8b41d02212434d', class: "dropdown-wrapper", ref: el => (this.wrapperElement = el) }, h("slot", { key: '2cf811d76e5e626d19aa746e4f59b4d25ca45ae0', name: "prefix", ref: el => (this.prefixSlotElement = el), onSlotchange: this.evaluatePrefixContent }), h("div", { key: '1d54e16f12814c150d842266f6ee6ae8891a0130', class: "dropdown-container", style: { width: this.width } }, h("button", { key: '3c99b3dd4a25a59579eed072953c3d7f502f7a21', type: "button", class: triggerClasses, style: { ...this.selectStyles, ...this.getSelectedStyle() }, onClick: this.toggleMenu, onKeyDown: this.handleTriggerKeyDown, "aria-haspopup": "listbox", "aria-expanded": this.isOpen ? 'true' : 'false', ref: el => (this.triggerElement = el) }, h("span", { key: '1bfa6da63ffdd6bf2b022f92425ce212e009d507', class: "dropdown-trigger-label" }, this.getSelectedLabel()), h("span", { key: 'e08ae142512344ffcd0ecfb477133a18fcfb3f34', class: "dropdown-trigger-arrow", "aria-hidden": "true" }, h("svg", { key: '8386ae9c934762f8e054f42c580cf750c5a9440a', xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("polyline", { key: '024d4ecbc8a3ab9879edc02c890df7ceabef1f8a', points: "6 9 12 15 18 9" }))))), h("slot", { key: '028de1fa2049c7d682b967f34a3a5e9c39d32fe2', name: "suffix", ref: el => (this.suffixSlotElement = el), onSlotchange: this.evaluateSuffixContent }), h("ul", { key: '51cd0ecefc1dcb0cd869d7e67c56f1944847efef', class: menuClasses, role: "listbox", tabindex: "-1", onKeyDown: this.handleMenuKeyDown, ref: el => (this.menuElement = el) }, this.options.map((option, index) => {
223
229
  const isSelected = option.value === this.internalValue;
224
230
  const isFocused = index === this.focusedIndex;
225
231
  const optionClasses = {
@@ -1,7 +1,7 @@
1
1
  .expand-toggle {
2
2
  background: none;
3
3
  border: none;
4
- cursor: pointer;
4
+ cursor: var(--kritzel-global-pointer-cursor, pointer);
5
5
  padding: 0;
6
6
  margin: 0;
7
7
  display: flex;
@@ -3,4 +3,4 @@
3
3
  * This file is auto-generated by the version bump scripts.
4
4
  * Do not modify manually.
5
5
  */
6
- export const KRITZEL_VERSION = '0.1.16';
6
+ export const KRITZEL_VERSION = '0.1.17';