@activecollab/components 2.0.451 → 2.0.453

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 (26) hide show
  1. package/dist/cjs/presentation/whiteboard/elements.js +146 -191
  2. package/dist/cjs/presentation/whiteboard/elements.js.map +1 -1
  3. package/dist/cjs/presentation/whiteboard/entityCardActions.js +4 -1
  4. package/dist/cjs/presentation/whiteboard/entityCardActions.js.map +1 -1
  5. package/dist/cjs/presentation/whiteboard/fileElement.js +2 -2
  6. package/dist/cjs/presentation/whiteboard/fileElement.js.map +1 -1
  7. package/dist/cjs/presentation/whiteboard/inspector.js +2 -2
  8. package/dist/cjs/presentation/whiteboard/inspector.js.map +1 -1
  9. package/dist/esm/presentation/whiteboard/elements.d.ts +5 -19
  10. package/dist/esm/presentation/whiteboard/elements.d.ts.map +1 -1
  11. package/dist/esm/presentation/whiteboard/elements.js +129 -168
  12. package/dist/esm/presentation/whiteboard/elements.js.map +1 -1
  13. package/dist/esm/presentation/whiteboard/entityCardActions.d.ts.map +1 -1
  14. package/dist/esm/presentation/whiteboard/entityCardActions.js +4 -1
  15. package/dist/esm/presentation/whiteboard/entityCardActions.js.map +1 -1
  16. package/dist/esm/presentation/whiteboard/fileElement.js +3 -3
  17. package/dist/esm/presentation/whiteboard/fileElement.js.map +1 -1
  18. package/dist/esm/presentation/whiteboard/inspector.js +3 -3
  19. package/dist/esm/presentation/whiteboard/inspector.js.map +1 -1
  20. package/package.json +1 -1
  21. package/dist/cjs/presentation/whiteboard/glyphs.js +0 -67
  22. package/dist/cjs/presentation/whiteboard/glyphs.js.map +0 -1
  23. package/dist/esm/presentation/whiteboard/glyphs.d.ts +0 -32
  24. package/dist/esm/presentation/whiteboard/glyphs.d.ts.map +0 -1
  25. package/dist/esm/presentation/whiteboard/glyphs.js +0 -50
  26. package/dist/esm/presentation/whiteboard/glyphs.js.map +0 -1
@@ -3,15 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.withOpacity = exports.stopClick = exports.stickyGradient = exports.snapValue = exports.shapeBorder = exports.renderShapeBody = exports.gridLevel = exports.defaultShapeState = exports.WHEEL_SIZE = exports.WHEEL_RADIUS = exports.ToolbarTextControls = exports.ToolbarColorSwatch = exports.ToolbarActions = exports.THICKNESS_OPTIONS = exports.StyledToolbarLink = exports.StyledToolbarButton = exports.StyledSwatchRow = exports.StyledSticky = exports.StyledHandles = exports.StyledFormattingToolbar = exports.StyledFontSizeValue = exports.StyledColorWheel = exports.StyledColorPopover = exports.StyledCanvasLayer = exports.StyledCanvasElement = exports.ShapeTypeMenu = exports.ShapeFormattingToolbar = exports.SUBMENU_SHADOW = exports.STYLE_OPTIONS = exports.STICKY_FILL = exports.SHAPE_TYPE_OPTIONS = exports.SHAPE_TYPE_ICON = exports.SELECTION_BLUE = exports.ResizeHandles = exports.RESIZE_DIRECTIONS = exports.RADIUS_OPTIONS = exports.PostitFormattingToolbar = exports.OPACITY_OPTIONS = exports.INITIAL_SHAPES = exports.INITIAL_POSITIONS = exports.GRID_LEVELS = exports.FONT_SIZE_OPTIONS = exports.ELEMENT_TEXT = exports.ELEMENT_STROKE = exports.ELEMENT_FILL = exports.ELEMENT_BODIES = exports.ColorWheel = exports.ColorSwatchRow = exports.COLOR_PALETTE = exports.COLOR_OPTIONS = exports.CANVAS_ELEMENTS = exports.BORDER_STYLE_OPTIONS = exports.AlignmentMenu = exports.ALIGN_OPTIONS = void 0;
6
+ exports.withOpacity = exports.stopClick = exports.stickyGradient = exports.snapValue = exports.shapeBorder = exports.renderShapeBody = exports.gridLevel = exports.defaultShapeState = exports.ToolbarTextControls = exports.ToolbarFontSizeSelect = exports.ToolbarColorSwatch = exports.ToolbarActions = exports.THICKNESS_OPTIONS = exports.StyledToolbarLink = exports.StyledToolbarButton = exports.StyledSticky = exports.StyledHandles = exports.StyledFormattingToolbar = exports.StyledCanvasLayer = exports.StyledCanvasElement = exports.ShapeTypeMenu = exports.ShapeFormattingToolbar = exports.STYLE_OPTIONS = exports.STICKY_FILL = exports.SHAPE_TYPE_OPTIONS = exports.SHAPE_TYPE_ICON = exports.SELECTION_BLUE = exports.ResizeHandles = exports.RESIZE_DIRECTIONS = exports.RADIUS_OPTIONS = exports.PostitFormattingToolbar = exports.OPACITY_OPTIONS = exports.INITIAL_SHAPES = exports.INITIAL_POSITIONS = exports.GRID_LEVELS = exports.FONT_SIZE_OPTIONS = exports.ELEMENT_TEXT = exports.ELEMENT_STROKE = exports.ELEMENT_FILL = exports.ELEMENT_BODIES = exports.COLOR_OPTIONS = exports.CANVAS_ELEMENTS = exports.BORDER_STYLE_OPTIONS = exports.AlignmentMenu = exports.ALIGN_OPTIONS = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _styledComponents = _interopRequireDefault(require("styled-components"));
9
- var _glyphs = require("./glyphs");
10
9
  var _Dot = require("../../components/Dot");
11
10
  var _IconButton = require("../../components/IconButton");
12
11
  var _Icons = require("../../components/Icons");
13
12
  var _List = require("../../components/List");
14
13
  var _Menu = require("../../components/Menu");
14
+ var _Select = require("../../components/Select");
15
+ var _SelectTrigger = require("../../components/SelectTrigger");
15
16
  var _Tooltip = require("../../components/Tooltip");
16
17
  var _colors = require("../../utils/colors");
17
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -41,9 +42,6 @@ var ELEMENT_TEXT = exports.ELEMENT_TEXT = "#1f2937";
41
42
  var STICKY_FILL = exports.STICKY_FILL = "#fbbf24";
42
43
  var SELECTION_BLUE = exports.SELECTION_BLUE = "#3b82f6";
43
44
 
44
- /* COLOR_PALETTE from toolbar/colorPalette.js (submenu swatch rows) */
45
- var COLOR_PALETTE = exports.COLOR_PALETTE = ["#ffffff", "#3b82f6", "#ef4444", "#10b981", "#f59e0b", "#8b5cf6", "#f97316", "#06b6d4", "#84cc16", "#ec4899", "#6b7280"];
46
-
47
45
  /* Discrete option sets for the right Inspector — mirror the app's fixed
48
46
  font-size ladder and the border-thickness steps offered in the toolbar. */
49
47
  var FONT_SIZE_OPTIONS = exports.FONT_SIZE_OPTIONS = [10, 13, 16, 20, 24, 30, 36, 48, 72, 96, 144, 216, 288];
@@ -261,13 +259,17 @@ var ResizeHandles = exports.ResizeHandles = function ResizeHandles() {
261
259
  var StyledFormattingToolbar = exports.StyledFormattingToolbar = _styledComponents.default.div.withConfig({
262
260
  displayName: "elements__StyledFormattingToolbar",
263
261
  componentId: "sc-ohnju4-4"
264
- })(["position:absolute;bottom:calc(100% + 10px);left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:4px;padding:8px;border-radius:8px;background-color:var(--page-paper-main);box-shadow:var(--shadow-tertiary);white-space:nowrap;cursor:auto;z-index:20;.tb-group{position:relative;display:flex;align-items:center;gap:4px;padding-right:8px;margin-right:8px;border-right:1px solid var(--border-primary);}.tb-rel{position:relative;display:inline-flex;}.divider{width:1px;height:20px;background-color:var(--border-primary);margin:0 4px;flex-shrink:0;}"]);
262
+ })(["position:absolute;bottom:calc(100% + 10px);left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:4px;padding:8px;border-radius:8px;background-color:var(--page-paper-main);box-shadow:var(--shadow-tertiary);white-space:nowrap;cursor:auto;z-index:20;.tb-group{position:relative;display:flex;align-items:center;gap:4px;padding-right:8px;margin-right:8px;border-right:1px solid var(--border-primary);}.tb-rel{position:relative;display:inline-flex;}.tb-color-value{display:inline-flex;align-items:center;justify-content:center;width:100%;}.divider{width:1px;height:20px;background-color:var(--border-primary);margin:0 4px;flex-shrink:0;}"]);
265
263
 
266
- /* Button variant="option" (idle) / "tertiary" (active), h-8 px-2 gap-1 */
264
+ /* The app's toolbar buttons are DS `Button` / `IconButton` variant="option",
265
+ size small, h-8 px-2: grey text (theme-700) that darkens on hover over a
266
+ theme-300 wash, and the primary colour only for a PRESSED state (an armed
267
+ lock, an active text style). Same palette here, so the story's bars read as
268
+ the app's and not as a row of links. */
267
269
  var StyledToolbarButton = exports.StyledToolbarButton = _styledComponents.default.button.withConfig({
268
270
  displayName: "elements__StyledToolbarButton",
269
271
  componentId: "sc-ohnju4-5"
270
- })(["display:inline-flex;align-items:center;justify-content:center;gap:4px;height:32px;box-sizing:border-box;padding:0 8px;border:0;border-radius:8px;background-color:transparent;color:var(--color-secondary);font-family:-apple-system,BlinkMacSystemFont,\"Roboto\",\"Helvetica Neue\",Arial,sans-serif;font-size:14px;cursor:pointer;&:hover{background-color:var(--color-theme-200);}&.active{background-color:var(--color-theme-300);}&.icon-only{width:32px;padding:0;}&:disabled{opacity:0.45;cursor:default;&:hover{background-color:transparent;}}svg{fill:currentColor;flex-shrink:0;}svg.i16{width:16px;height:16px;}svg.i12{width:12px;height:12px;}"]);
272
+ })(["display:inline-flex;align-items:center;justify-content:center;gap:4px;height:32px;box-sizing:border-box;padding:0 8px;border:0;border-radius:var(--ac-br-6);background-color:transparent;color:var(--color-theme-700);font-family:-apple-system,BlinkMacSystemFont,\"Roboto\",\"Helvetica Neue\",Arial,sans-serif;font-size:14px;font-weight:500;cursor:pointer;&:hover,&:focus-visible{background-color:var(--color-theme-300);color:var(--color-theme-900);}&.active,&.active:hover{color:var(--color-primary);}&.icon-only{width:32px;padding:0;}&:disabled{opacity:0.45;cursor:default;&:hover{background-color:transparent;}}svg{fill:currentColor;flex-shrink:0;}svg.i16{width:16px;height:16px;}svg.i12{width:12px;height:12px;}"]);
271
273
 
272
274
  /* Same chrome as a toolbar button, but an <a> — used where the action is a real
273
275
  navigation (Visit). `withComponent` keeps the styles and swaps the element, so
@@ -276,101 +278,29 @@ var StyledToolbarLink = exports.StyledToolbarLink = (0, _styledComponents.defaul
276
278
  displayName: "elements__StyledToolbarLink",
277
279
  componentId: "sc-ohnju4-6"
278
280
  })(["text-decoration:none;"]);
279
-
280
- /* font-mono min-w-[24px] text-xs readout between the stepper buttons */
281
- var StyledFontSizeValue = exports.StyledFontSizeValue = _styledComponents.default.span.withConfig({
282
- displayName: "elements__StyledFontSizeValue",
283
- componentId: "sc-ohnju4-7"
284
- })(["min-width:24px;text-align:center;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--color-secondary);"]);
285
281
  var stopClick = exports.stopClick = function stopClick(event) {
286
282
  return event.stopPropagation();
287
283
  };
288
284
 
289
- /* Shared drop shadow for the colour swatch popover / colour wheel that the
290
- compact toolbar swatch trigger opens. */
291
- var SUBMENU_SHADOW = exports.SUBMENU_SHADOW = "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)";
292
-
293
- /* ColorWheelPopover: beside the submenu (SHAPE_POPOVER_CLASS) or below
294
- a toolbar trigger (sticky default class) */
295
- var StyledColorPopover = exports.StyledColorPopover = _styledComponents.default.div.withConfig({
296
- displayName: "elements__StyledColorPopover",
297
- componentId: "sc-ohnju4-8"
298
- })(["position:absolute;box-sizing:border-box;padding:12px;background-color:var(--page-paper-main);border:1px solid var(--border-primary);border-radius:8px;box-shadow:", ";z-index:70;cursor:auto;&.beside{top:0;left:100%;margin-left:8px;}&.below{top:40px;left:0;}"], SUBMENU_SHADOW);
299
-
300
- /* ImprovedColorWheel: hue = angle from east (atan2), saturation = distance,
301
- lightness 50 — the canvas wheel replicated with CSS gradients */
302
- var WHEEL_SIZE = exports.WHEEL_SIZE = 200;
303
- var WHEEL_RADIUS = exports.WHEEL_RADIUS = WHEEL_SIZE / 2 - 5;
304
- var StyledColorWheel = exports.StyledColorWheel = _styledComponents.default.button.withConfig({
305
- displayName: "elements__StyledColorWheel",
306
- componentId: "sc-ohnju4-9"
307
- })(["display:block;width:", "px;height:", "px;padding:0;border:0;border-radius:50%;cursor:crosshair;box-shadow:", ";background:radial-gradient( circle closest-side,#ffffff,rgba(255,255,255,0) ),conic-gradient( from 90deg,#ff0000,#ffff00,#00ff00,#00ffff,#0000ff,#ff00ff,#ff0000 );"], WHEEL_SIZE, WHEEL_SIZE, SUBMENU_SHADOW);
308
- var ColorWheel = exports.ColorWheel = function ColorWheel(_ref) {
309
- var onColorChange = _ref.onColorChange;
310
- return /*#__PURE__*/_react.default.createElement(StyledColorWheel, {
311
- onClick: function onClick(event) {
312
- var rect = event.currentTarget.getBoundingClientRect();
313
- var dx = event.clientX - rect.left - WHEEL_SIZE / 2;
314
- var dy = event.clientY - rect.top - WHEEL_SIZE / 2;
315
- var distance = Math.sqrt(dx * dx + dy * dy);
316
- if (distance > WHEEL_RADIUS) {
317
- return;
318
- }
319
- var angle = Math.atan2(dy, dx);
320
- if (angle < 0) {
321
- angle += 2 * Math.PI;
322
- }
323
- var hue = Math.round(angle * 180 / Math.PI);
324
- var saturation = Math.round(Math.min(100, distance / WHEEL_RADIUS * 100));
325
- onColorChange("hsl(".concat(hue, ", ").concat(saturation, "%, 50%)"));
326
- }
327
- });
328
- };
285
+ /* The trigger widths the app gives its toolbar selects: `tw-w-20` for the font
286
+ size ("16 pt"), `tw-w-16 tw-px-2` for the swatch-only colour trigger. */
287
+ var TOOLBAR_SELECT_WIDTH = 80;
288
+ var TOOLBAR_COLOR_TRIGGER_WIDTH = 64;
329
289
 
330
- /* ColorSwatchRow.jsx: 32px swatches + a "+" that opens the color wheel */
331
- var StyledSwatchRow = exports.StyledSwatchRow = _styledComponents.default.div.withConfig({
332
- displayName: "elements__StyledSwatchRow",
333
- componentId: "sc-ohnju4-10"
334
- })(["display:flex;flex-wrap:wrap;gap:8px;.swatch{width:32px;height:32px;box-sizing:border-box;padding:0;border:2px solid var(--border-primary);border-radius:4px;cursor:pointer;&:hover{border-color:var(--color-theme-500);}&.selected{box-shadow:0 0 0 2px ", ";}}.swatch-add{display:flex;align-items:center;justify-content:center;background-color:var(--color-theme-200);color:var(--color-secondary);}"], SELECTION_BLUE);
335
- var ColorSwatchRow = exports.ColorSwatchRow = function ColorSwatchRow(_ref2) {
336
- var selectedColor = _ref2.selectedColor,
337
- includeTransparent = _ref2.includeTransparent,
338
- onSelect = _ref2.onSelect,
339
- onAddClick = _ref2.onAddClick;
340
- return /*#__PURE__*/_react.default.createElement(StyledSwatchRow, null, includeTransparent ? /*#__PURE__*/_react.default.createElement("button", {
341
- type: "button",
342
- className: selectedColor === "transparent" ? "swatch swatch-add selected" : "swatch swatch-add",
343
- "aria-label": "Transparent",
344
- onClick: function onClick() {
345
- return onSelect("transparent");
346
- }
347
- }, /*#__PURE__*/_react.default.createElement(_Icons.CircleSlashIcon, {
348
- width: 20,
349
- height: 20,
350
- fill: "currentColor"
351
- })) : null, COLOR_PALETTE.map(function (color) {
352
- return /*#__PURE__*/_react.default.createElement("button", {
353
- key: color,
354
- type: "button",
355
- className: selectedColor === color ? "swatch selected" : "swatch",
356
- style: {
357
- backgroundColor: color
358
- },
359
- onClick: function onClick() {
360
- return onSelect(color);
361
- }
362
- });
363
- }), /*#__PURE__*/_react.default.createElement("button", {
364
- type: "button",
365
- className: "swatch swatch-add",
366
- onClick: onAddClick
367
- }, /*#__PURE__*/_react.default.createElement(_glyphs.PlusGlyph, null)));
368
- };
290
+ /* Hollow rounded rectangle, the app's own glyph for the "Rounded Rectangle"
291
+ shape option (its ShapeTypeMenu draws a bordered span, because the icon set
292
+ has one rectangle glyph and it is already taken by "Rectangle"). */
293
+ var RoundedRectangleOutline = _styledComponents.default.span.withConfig({
294
+ displayName: "elements__RoundedRectangleOutline",
295
+ componentId: "sc-ohnju4-7"
296
+ })(["display:block;width:16px;height:16px;box-sizing:border-box;border:1px solid currentColor;border-radius:4px;"]);
369
297
  var SHAPE_TYPE_ICON = exports.SHAPE_TYPE_ICON = {
370
- rectangle: /*#__PURE__*/_react.default.createElement(_glyphs.SquareGlyph, null),
371
- roundedRectangle: /*#__PURE__*/_react.default.createElement(_Icons.RoundedRectangleIcon, {
298
+ rectangle: /*#__PURE__*/_react.default.createElement(_Icons.RoundedRectangleIcon, {
372
299
  className: "i16"
373
300
  }),
301
+ roundedRectangle: /*#__PURE__*/_react.default.createElement(RoundedRectangleOutline, {
302
+ "aria-hidden": "true"
303
+ }),
374
304
  circle: /*#__PURE__*/_react.default.createElement(_Icons.CircleIcon, {
375
305
  className: "i16"
376
306
  }),
@@ -419,10 +349,10 @@ var BORDER_STYLE_OPTIONS = exports.BORDER_STYLE_OPTIONS = [{
419
349
  separator → Lock → Delete, in the standard control colour (not red). Mirrors
420
350
  app `toolbar/ToolbarActions.jsx`. */
421
351
 
422
- var ToolbarActions = exports.ToolbarActions = function ToolbarActions(_ref3) {
423
- var locked = _ref3.locked,
424
- onToggleLock = _ref3.onToggleLock,
425
- onDelete = _ref3.onDelete;
352
+ var ToolbarActions = exports.ToolbarActions = function ToolbarActions(_ref) {
353
+ var locked = _ref.locked,
354
+ onToggleLock = _ref.onToggleLock,
355
+ onDelete = _ref.onDelete;
426
356
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
427
357
  className: "divider"
428
358
  }), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
@@ -447,9 +377,9 @@ var ToolbarActions = exports.ToolbarActions = function ToolbarActions(_ref3) {
447
377
  current shape, opening a dropdown of the four types. Modeled on the app's
448
378
  ShapeTypeMenu (DS Menu + List). */
449
379
 
450
- var ShapeTypeMenu = exports.ShapeTypeMenu = function ShapeTypeMenu(_ref4) {
451
- var value = _ref4.value,
452
- onChange = _ref4.onChange;
380
+ var ShapeTypeMenu = exports.ShapeTypeMenu = function ShapeTypeMenu(_ref2) {
381
+ var value = _ref2.value,
382
+ onChange = _ref2.onChange;
453
383
  var _useState = (0, _react.useState)(false),
454
384
  _useState2 = _slicedToArray(_useState, 2),
455
385
  open = _useState2[0],
@@ -465,7 +395,7 @@ var ShapeTypeMenu = exports.ShapeTypeMenu = function ShapeTypeMenu(_ref4) {
465
395
  position: "bottom-start",
466
396
  target: /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
467
397
  type: "button",
468
- variant: "text gray",
398
+ variant: "option",
469
399
  active: open,
470
400
  "aria-label": "Shape"
471
401
  }, SHAPE_TYPE_ICON[value])
@@ -490,11 +420,11 @@ var ShapeTypeMenu = exports.ShapeTypeMenu = function ShapeTypeMenu(_ref4) {
490
420
  compact-toolbar counterpart to the Inspector's expanded four-button row.
491
421
  Mirrors the app's AlignmentMenu. */
492
422
 
493
- var AlignmentMenu = exports.AlignmentMenu = function AlignmentMenu(_ref5) {
423
+ var AlignmentMenu = exports.AlignmentMenu = function AlignmentMenu(_ref3) {
494
424
  var _ALIGN_OPTIONS$find;
495
- var value = _ref5.value,
496
- onChange = _ref5.onChange,
497
- disabled = _ref5.disabled;
425
+ var value = _ref3.value,
426
+ onChange = _ref3.onChange,
427
+ disabled = _ref3.disabled;
498
428
  var _useState3 = (0, _react.useState)(false),
499
429
  _useState4 = _slicedToArray(_useState3, 2),
500
430
  open = _useState4[0],
@@ -513,7 +443,7 @@ var AlignmentMenu = exports.AlignmentMenu = function AlignmentMenu(_ref5) {
513
443
  position: "bottom-start",
514
444
  target: /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
515
445
  type: "button",
516
- variant: "text gray",
446
+ variant: "option",
517
447
  active: open,
518
448
  disabled: disabled,
519
449
  "aria-label": "Alignment"
@@ -535,71 +465,113 @@ var AlignmentMenu = exports.AlignmentMenu = function AlignmentMenu(_ref5) {
535
465
  })));
536
466
  };
537
467
 
538
- /* Compact swatch-only colour trigger: a single dot (or a CircleSlash chip when
539
- transparent) that opens a swatch popover. The Inspector's ColorPickerField
540
- keeps the swatch + name; the floating toolbars use this swatch-only variant.
541
- `includeTransparent` is passed through to the swatch row shape fill opts
542
- in, sticky fill and text colour do not. */
543
-
544
- var ToolbarColorSwatch = exports.ToolbarColorSwatch = function ToolbarColorSwatch(_ref6) {
545
- var value = _ref6.value,
546
- includeTransparent = _ref6.includeTransparent,
547
- label = _ref6.label,
548
- onChange = _ref6.onChange;
549
- var _useState5 = (0, _react.useState)(false),
550
- _useState6 = _slicedToArray(_useState5, 2),
551
- open = _useState6[0],
552
- setOpen = _useState6[1];
553
- var _useState7 = (0, _react.useState)(false),
554
- _useState8 = _slicedToArray(_useState7, 2),
555
- wheelOpen = _useState8[0],
556
- setWheelOpen = _useState8[1];
557
- var isTransparent = value === "transparent";
558
- return /*#__PURE__*/_react.default.createElement("span", {
559
- className: "tb-rel"
560
- }, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
561
- title: label
562
- }, /*#__PURE__*/_react.default.createElement(StyledToolbarButton, {
563
- className: open ? "icon-only active" : "icon-only",
564
- "aria-label": label,
565
- onClick: function onClick() {
566
- setOpen(function (current) {
567
- return !current;
568
- });
569
- setWheelOpen(false);
570
- }
571
- }, isTransparent ? /*#__PURE__*/_react.default.createElement(_Icons.CircleSlashIcon, {
468
+ /* The app's compact `ColorPicker`: a DS `Select` whose trigger is the swatch
469
+ alone (a Dot, or the CircleSlash chip when transparent) and whose menu is the
470
+ standard dot-and-name list the same control the Inspector's colour field
471
+ uses, minus the name on the trigger. `includeTransparent` adds "Transparent"
472
+ first: shape fill opts in, sticky fill and text colour do not. */
473
+
474
+ var TOOLBAR_TRANSPARENT_OPTION = {
475
+ id: "transparent",
476
+ name: "Transparent",
477
+ color: "transparent",
478
+ textColor: "transparent"
479
+ };
480
+ var sameHex = function sameHex(a, b) {
481
+ return a.toLowerCase() === b.toLowerCase();
482
+ };
483
+ var ColorDot = function ColorDot(_ref4) {
484
+ var color = _ref4.color;
485
+ return sameHex(color, "transparent") ? /*#__PURE__*/_react.default.createElement(_Icons.CircleSlashIcon, {
572
486
  width: 16,
573
487
  height: 16,
574
488
  fill: "currentColor"
575
489
  }) : /*#__PURE__*/_react.default.createElement(_Dot.Dot, {
576
- color: value,
490
+ color: color,
577
491
  size: 16
578
- }))), open ? /*#__PURE__*/_react.default.createElement(StyledColorPopover, {
579
- className: "below"
580
- }, /*#__PURE__*/_react.default.createElement(ColorSwatchRow, {
581
- selectedColor: value,
582
- includeTransparent: includeTransparent,
583
- onSelect: function onSelect(color) {
584
- onChange(color);
585
- setOpen(false);
492
+ });
493
+ };
494
+ var ToolbarColorSwatch = exports.ToolbarColorSwatch = function ToolbarColorSwatch(_ref5) {
495
+ var _options$find$id, _options$find;
496
+ var value = _ref5.value,
497
+ includeTransparent = _ref5.includeTransparent,
498
+ label = _ref5.label,
499
+ _onChange = _ref5.onChange;
500
+ var options = includeTransparent ? [TOOLBAR_TRANSPARENT_OPTION, ...COLOR_OPTIONS] : COLOR_OPTIONS;
501
+ var selected = (_options$find$id = (_options$find = options.find(function (option) {
502
+ return sameHex(option.id, value);
503
+ })) === null || _options$find === void 0 ? void 0 : _options$find.id) !== null && _options$find$id !== void 0 ? _options$find$id : value;
504
+ return /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
505
+ title: label
506
+ }, /*#__PURE__*/_react.default.createElement("span", {
507
+ className: "tb-rel"
508
+ }, /*#__PURE__*/_react.default.createElement(_Select.Select, {
509
+ type: "single",
510
+ disableSearch: true,
511
+ forceCloseMenu: true,
512
+ keepSameOptionsOrder: true,
513
+ options: options,
514
+ selected: selected,
515
+ onChange: function onChange(next) {
516
+ return _onChange(String(Array.isArray(next) ? next[0] : next));
586
517
  },
587
- onAddClick: function onAddClick() {
588
- return setWheelOpen(function (current) {
589
- return !current;
590
- });
591
- }
592
- }), wheelOpen ? /*#__PURE__*/_react.default.createElement(StyledColorPopover, {
593
- className: "beside"
594
- }, /*#__PURE__*/_react.default.createElement(ColorWheel, {
595
- onColorChange: function onColorChange(color) {
596
- onChange(color);
597
- setOpen(false);
598
- }
599
- })) : null) : null);
518
+ renderOption: function renderOption(option) {
519
+ return /*#__PURE__*/_react.default.createElement("span", {
520
+ className: "tb-color-option"
521
+ }, /*#__PURE__*/_react.default.createElement(ColorDot, {
522
+ color: String(option.id)
523
+ }), option.name);
524
+ },
525
+ target: /*#__PURE__*/_react.default.createElement(_SelectTrigger.SelectTrigger, {
526
+ "aria-label": label,
527
+ style: {
528
+ width: TOOLBAR_COLOR_TRIGGER_WIDTH,
529
+ paddingLeft: 8,
530
+ paddingRight: 8
531
+ }
532
+ }, /*#__PURE__*/_react.default.createElement("span", {
533
+ className: "tb-color-value"
534
+ }, /*#__PURE__*/_react.default.createElement(ColorDot, {
535
+ color: value
536
+ })))
537
+ })));
538
+ };
539
+
540
+ /* The app's `ValuePicker` for the font size: a DS `Select` over the fixed size
541
+ ladder, its trigger reading "16 pt". */
542
+
543
+ var ToolbarFontSizeSelect = exports.ToolbarFontSizeSelect = function ToolbarFontSizeSelect(_ref6) {
544
+ var value = _ref6.value,
545
+ _onChange2 = _ref6.onChange;
546
+ return /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
547
+ title: "Font Size"
548
+ }, /*#__PURE__*/_react.default.createElement("span", {
549
+ className: "tb-rel"
550
+ }, /*#__PURE__*/_react.default.createElement(_Select.Select, {
551
+ type: "single",
552
+ disableSearch: true,
553
+ forceCloseMenu: true,
554
+ keepSameOptionsOrder: true,
555
+ options: FONT_SIZE_OPTIONS.map(function (size) {
556
+ return {
557
+ id: size,
558
+ name: "".concat(size, " pt")
559
+ };
560
+ }),
561
+ selected: value,
562
+ onChange: function onChange(next) {
563
+ return _onChange2(Number(Array.isArray(next) ? next[0] : next));
564
+ },
565
+ target: /*#__PURE__*/_react.default.createElement(_SelectTrigger.SelectTrigger, {
566
+ "aria-label": "Font Size",
567
+ style: {
568
+ width: TOOLBAR_SELECT_WIDTH
569
+ }
570
+ }, value, " pt")
571
+ })));
600
572
  };
601
573
 
602
- /* The text controls shared by the shape and sticky toolbars: font-size stepper,
574
+ /* The text controls shared by the shape and sticky toolbars: font-size select,
603
575
  B / I / U / S, and the collapsed alignment menu. Same set the app's sticky
604
576
  and shape toolbars share (font-size picker, TextStyleButtons, AlignmentMenu).
605
577
  Kept generic so both element shapes can drive it. */
@@ -611,27 +583,10 @@ var ToolbarTextControls = exports.ToolbarTextControls = function ToolbarTextCont
611
583
  onFontSize = _ref7.onFontSize,
612
584
  onToggleStyle = _ref7.onToggleStyle,
613
585
  onAlign = _ref7.onAlign;
614
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
615
- title: "Decrease font size"
616
- }, /*#__PURE__*/_react.default.createElement(StyledToolbarButton, {
617
- className: "icon-only",
618
- "aria-label": "Decrease font size",
619
- onClick: function onClick() {
620
- return onFontSize(Math.max(8, fontSize - 2));
621
- }
622
- }, /*#__PURE__*/_react.default.createElement(_glyphs.MinusGlyph, {
623
- className: "i16"
624
- }))), /*#__PURE__*/_react.default.createElement(StyledFontSizeValue, null, fontSize), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
625
- title: "Increase font size"
626
- }, /*#__PURE__*/_react.default.createElement(StyledToolbarButton, {
627
- className: "icon-only",
628
- "aria-label": "Increase font size",
629
- onClick: function onClick() {
630
- return onFontSize(Math.min(96, fontSize + 2));
631
- }
632
- }, /*#__PURE__*/_react.default.createElement(_glyphs.PlusGlyph, {
633
- className: "i16"
634
- }))), STYLE_OPTIONS.map(function (option) {
586
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ToolbarFontSizeSelect, {
587
+ value: fontSize,
588
+ onChange: onFontSize
589
+ }), STYLE_OPTIONS.map(function (option) {
635
590
  return /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
636
591
  key: option.key,
637
592
  title: option.label
@@ -709,7 +664,7 @@ var ShapeFormattingToolbar = exports.ShapeFormattingToolbar = function ShapeForm
709
664
  Mirrors the app's PostitFormattingToolbar. */
710
665
  var PostitFormattingToolbar = exports.PostitFormattingToolbar = function PostitFormattingToolbar(_ref9) {
711
666
  var value = _ref9.value,
712
- _onChange = _ref9.onChange,
667
+ _onChange3 = _ref9.onChange,
713
668
  onDelete = _ref9.onDelete,
714
669
  locked = _ref9.locked,
715
670
  onToggleLock = _ref9.onToggleLock;
@@ -720,7 +675,7 @@ var PostitFormattingToolbar = exports.PostitFormattingToolbar = function PostitF
720
675
  value: value.color,
721
676
  label: "Note color",
722
677
  onChange: function onChange(color) {
723
- return _onChange(_objectSpread(_objectSpread({}, value), {}, {
678
+ return _onChange3(_objectSpread(_objectSpread({}, value), {}, {
724
679
  color
725
680
  }));
726
681
  }
@@ -729,17 +684,17 @@ var PostitFormattingToolbar = exports.PostitFormattingToolbar = function PostitF
729
684
  styleFlags: value,
730
685
  align: value.align,
731
686
  onFontSize: function onFontSize(fontSize) {
732
- return _onChange(_objectSpread(_objectSpread({}, value), {}, {
687
+ return _onChange3(_objectSpread(_objectSpread({}, value), {}, {
733
688
  fontSize
734
689
  }));
735
690
  },
736
691
  onToggleStyle: function onToggleStyle(key) {
737
- return _onChange(_objectSpread(_objectSpread({}, value), {}, {
692
+ return _onChange3(_objectSpread(_objectSpread({}, value), {}, {
738
693
  [key]: !value[key]
739
694
  }));
740
695
  },
741
696
  onAlign: function onAlign(align) {
742
- return _onChange(_objectSpread(_objectSpread({}, value), {}, {
697
+ return _onChange3(_objectSpread(_objectSpread({}, value), {}, {
743
698
  align
744
699
  }));
745
700
  }