markmap-toolbar 0.14.4 → 0.15.0-alpha.1

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.
package/README.md CHANGED
@@ -15,7 +15,7 @@ $ npm i markmap-toolbar
15
15
  ```js
16
16
  import { Toolbar } from 'markmap-toolbar';
17
17
 
18
- const el = Toolbar.create(mm);
18
+ const { el } = Toolbar.create(mm);
19
19
  el.style.position = 'absolute';
20
20
  el.style.bottom = '0.5rem';
21
21
  el.style.right = '0.5rem';
@@ -1,4 +1,4 @@
1
- /*! markmap-toolbar v0.14.4 | MIT License */
1
+ /*! markmap-toolbar v0.15.0-alpha.1+1308d8e | MIT License */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
4
4
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
@@ -6,20 +6,17 @@ typeof define === 'function' && define.amd ? define(['exports'], factory) :
6
6
  })(this, (function (exports) { 'use strict';
7
7
 
8
8
  function _extends() {
9
- _extends = Object.assign || function (target) {
9
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
10
10
  for (var i = 1; i < arguments.length; i++) {
11
11
  var source = arguments[i];
12
-
13
12
  for (var key in source) {
14
13
  if (Object.prototype.hasOwnProperty.call(source, key)) {
15
14
  target[key] = source[key];
16
15
  }
17
16
  }
18
17
  }
19
-
20
18
  return target;
21
19
  };
22
-
23
20
  return _extends.apply(this, arguments);
24
21
  }
25
22
 
@@ -35,19 +32,15 @@ var NS_ATTRS = {
35
32
  actuate: XLINK_NS,
36
33
  href: XLINK_NS
37
34
  };
38
-
39
35
  var isLeaf = function isLeaf(c) {
40
36
  return typeof c === 'string' || typeof c === 'number';
41
37
  };
42
-
43
38
  var isElement = function isElement(c) {
44
39
  return (c == null ? void 0 : c.vtype) === VTYPE_ELEMENT;
45
40
  };
46
-
47
41
  var isRenderFunction = function isRenderFunction(c) {
48
42
  return (c == null ? void 0 : c.vtype) === VTYPE_FUNCTION;
49
43
  };
50
-
51
44
  function jsx(type, props) {
52
45
  var vtype;
53
46
  if (typeof type === 'string') vtype = VTYPE_ELEMENT;else if (typeof type === 'function') vtype = VTYPE_FUNCTION;else throw new Error('Invalid VNode type');
@@ -57,17 +50,13 @@ function jsx(type, props) {
57
50
  props: props
58
51
  };
59
52
  }
60
-
61
53
  var jsxs = jsx;
62
-
63
54
  function Fragment(props) {
64
55
  return props.children;
65
56
  }
66
-
67
57
  var DEFAULT_ENV = {
68
58
  isSvg: false
69
59
  };
70
-
71
60
  function insertDom(parent, ref) {
72
61
  if (ref.type === MOUNT_SINGLE) {
73
62
  if (ref.node != null) parent.append(ref.node);
@@ -79,11 +68,9 @@ function insertDom(parent, ref) {
79
68
  throw new Error("Unkown ref type " + JSON.stringify(ref));
80
69
  }
81
70
  }
82
-
83
71
  function mountAttributes(domElement, props, env) {
84
72
  for (var key in props) {
85
73
  if (key === 'key' || key === 'children' || key === 'ref') continue;
86
-
87
74
  if (key === 'dangerouslySetInnerHTML') {
88
75
  domElement.innerHTML = props[key].__html;
89
76
  } else if (key === 'innerHTML' || key === 'textContent' || key === 'innerText') {
@@ -95,22 +82,18 @@ function mountAttributes(domElement, props, env) {
95
82
  }
96
83
  }
97
84
  }
98
-
99
85
  var attrMap = {
100
86
  className: 'class',
101
87
  labelFor: 'for'
102
88
  };
103
-
104
89
  function setDOMAttribute(el, attr, value, isSVG) {
105
90
  attr = attrMap[attr] || attr;
106
-
107
91
  if (value === true) {
108
92
  el.setAttribute(attr, '');
109
93
  } else if (value === false) {
110
94
  el.removeAttribute(attr);
111
95
  } else {
112
96
  var namespace = isSVG ? NS_ATTRS[attr] : undefined;
113
-
114
97
  if (namespace !== undefined) {
115
98
  el.setAttributeNS(namespace, attr, value);
116
99
  } else {
@@ -118,91 +101,72 @@ function setDOMAttribute(el, attr, value, isSVG) {
118
101
  }
119
102
  }
120
103
  }
121
-
122
104
  function mount(vnode, env) {
123
105
  if (env === void 0) {
124
106
  env = DEFAULT_ENV;
125
107
  }
126
-
127
108
  if (vnode == null || typeof vnode === 'boolean') {
128
109
  return {
129
110
  type: MOUNT_SINGLE,
130
111
  node: null
131
112
  };
132
113
  }
133
-
134
114
  if (vnode instanceof Node) {
135
115
  return {
136
116
  type: MOUNT_SINGLE,
137
117
  node: vnode
138
118
  };
139
119
  }
140
-
141
120
  if (isRenderFunction(vnode)) {
142
121
  var _ref = vnode,
143
- type = _ref.type,
144
- props = _ref.props;
145
-
122
+ type = _ref.type,
123
+ props = _ref.props;
146
124
  if (type === Fragment) {
147
125
  var node = document.createDocumentFragment();
148
-
149
126
  if (props.children) {
150
127
  var childrenRef = mount(props.children, env);
151
128
  insertDom(node, childrenRef);
152
129
  }
153
-
154
130
  return {
155
131
  type: MOUNT_SINGLE,
156
132
  node: node
157
133
  };
158
134
  }
159
-
160
135
  var childVNode = type(props);
161
136
  return mount(childVNode, env);
162
137
  }
163
-
164
138
  if (isLeaf(vnode)) {
165
139
  return {
166
140
  type: MOUNT_SINGLE,
167
141
  node: document.createTextNode("" + vnode)
168
142
  };
169
143
  }
170
-
171
144
  if (isElement(vnode)) {
172
145
  var _node;
173
-
174
146
  var _ref2 = vnode,
175
- _type = _ref2.type,
176
- _props = _ref2.props;
177
-
147
+ _type = _ref2.type,
148
+ _props = _ref2.props;
178
149
  if (!env.isSvg && _type === 'svg') {
179
150
  env = Object.assign({}, env, {
180
151
  isSvg: true
181
152
  });
182
153
  }
183
-
184
154
  if (!env.isSvg) {
185
155
  _node = document.createElement(_type);
186
156
  } else {
187
157
  _node = document.createElementNS(SVG_NS, _type);
188
158
  }
189
-
190
159
  mountAttributes(_node, _props, env);
191
-
192
160
  var _childrenRef;
193
-
194
161
  if (_props.children) {
195
162
  var childEnv = env;
196
-
197
163
  if (env.isSvg && _type === 'foreignObject') {
198
164
  childEnv = Object.assign({}, childEnv, {
199
165
  isSvg: false
200
166
  });
201
167
  }
202
-
203
168
  _childrenRef = mount(_props.children, childEnv);
204
169
  }
205
-
206
170
  if (_childrenRef != null) insertDom(_node, _childrenRef);
207
171
  var ref = _props.ref;
208
172
  if (typeof ref === 'function') ref(_node);
@@ -211,7 +175,6 @@ function mount(vnode, env) {
211
175
  node: _node
212
176
  };
213
177
  }
214
-
215
178
  if (Array.isArray(vnode)) {
216
179
  return {
217
180
  type: MOUNT_ARRAY,
@@ -220,60 +183,34 @@ function mount(vnode, env) {
220
183
  })
221
184
  };
222
185
  }
223
-
224
186
  throw new Error('mount: Invalid Vnode!');
225
187
  }
226
-
227
188
  function flattenWithoutNull(array) {
228
189
  var result = [];
229
-
230
190
  for (var i = 0; i < array.length; i += 1) {
231
191
  var item = array[i];
232
192
  if (Array.isArray(item)) result = result.concat(flattenWithoutNull(item));else if (item != null) result.push(item);
233
193
  }
234
-
235
194
  return result;
236
195
  }
237
-
238
196
  function asDom(result) {
239
197
  if (result.type === MOUNT_SINGLE) {
240
198
  return result.node;
241
199
  }
242
-
243
200
  return result.children.map(asDom);
244
201
  }
245
202
  /**
246
203
  * Mount vdom as real DOM nodes.
247
204
  */
248
205
 
249
-
250
206
  function mountDom(vnode) {
251
207
  if (Array.isArray(vnode)) {
252
208
  return flattenWithoutNull(vnode.map(mountDom));
253
209
  }
254
-
255
210
  return asDom(mount(vnode));
256
211
  }
257
212
 
258
- /*! markmap-common v0.14.2 | MIT License */
259
-
260
- Math.random().toString(36).slice(2, 8);
261
-
262
- function walkTree(tree, callback, key = 'children') {
263
- const walk = (item, parent) => callback(item, () => {
264
- var _item$key;
265
-
266
- (_item$key = item[key]) == null ? void 0 : _item$key.forEach(child => {
267
- walk(child, item);
268
- });
269
- }, parent);
270
-
271
- walk(tree);
272
- }
273
-
274
213
  const clsToolbarItem = 'mm-toolbar-item';
275
- const clsActive = 'active';
276
-
277
214
  function renderBrand() {
278
215
  return jsxs("a", {
279
216
  className: "mm-toolbar-brand",
@@ -286,7 +223,6 @@ function renderBrand() {
286
223
  })]
287
224
  });
288
225
  }
289
-
290
226
  function renderItem({
291
227
  title,
292
228
  content,
@@ -299,14 +235,11 @@ function renderItem({
299
235
  children: content
300
236
  });
301
237
  }
302
-
303
238
  let promise;
304
-
305
239
  function safeCaller(fn) {
306
240
  return async (...args) => {
307
241
  if (promise) return;
308
242
  promise = fn(...args);
309
-
310
243
  try {
311
244
  await promise;
312
245
  } finally {
@@ -314,14 +247,13 @@ function safeCaller(fn) {
314
247
  }
315
248
  };
316
249
  }
317
-
318
250
  class Toolbar {
319
251
  static create(mm) {
320
252
  const toolbar = new Toolbar();
321
253
  toolbar.attach(mm);
322
- return toolbar.render();
254
+ toolbar.render();
255
+ return toolbar;
323
256
  }
324
-
325
257
  static icon(path, attrs = {}) {
326
258
  attrs = _extends({
327
259
  stroke: 'none',
@@ -337,11 +269,13 @@ class Toolbar {
337
269
  }))
338
270
  });
339
271
  }
340
-
341
272
  constructor() {
342
273
  this.showBrand = true;
343
274
  this.registry = {};
344
275
  this.markmap = null;
276
+ this.el = mountDom(jsx("div", {
277
+ className: "mm-toolbar"
278
+ }));
345
279
  this.register({
346
280
  id: 'zoomIn',
347
281
  title: 'Zoom in',
@@ -360,81 +294,28 @@ class Toolbar {
360
294
  content: Toolbar.icon('M4 7h2v-2h2v4h-4zM4 13h2v2h2v-4h-4zM16 7h-2v-2h-2v4h4zM16 13h-2v2h-2v-4h4z'),
361
295
  onClick: this.getHandler(mm => mm.fit())
362
296
  });
363
- this.register({
364
- id: 'recurse',
365
- title: 'Recursively toggle the next node',
366
- content: Toolbar.icon('M16 4h-12v12h12v-8h-8v4h2v-2h4v4h-8v-8h10z'),
367
- onClick: e => {
368
- const button = e.target.closest(`.${clsToolbarItem}`);
369
-
370
- const toggle = () => button.classList.toggle(clsActive);
371
-
372
- const active = toggle();
373
- this.handleRecurse(active, toggle);
374
- }
375
- });
376
- this.setItems(Toolbar.defaultItems);
297
+ this.items = Toolbar.defaultItems;
377
298
  }
378
-
379
299
  setBrand(show) {
380
300
  this.showBrand = show;
301
+ return this.render();
381
302
  }
382
-
383
303
  register(data) {
384
304
  this.registry[data.id] = data;
385
305
  }
386
-
387
306
  getHandler(handle) {
388
307
  handle = safeCaller(handle);
389
308
  return () => {
390
309
  if (this.markmap) handle(this.markmap);
391
310
  };
392
311
  }
393
-
394
312
  setItems(items) {
395
313
  this.items = [...items];
314
+ return this.render();
396
315
  }
397
-
398
316
  attach(mm) {
399
317
  this.markmap = mm;
400
318
  }
401
-
402
- handleRecurse(active, reset) {
403
- const mm = this.markmap;
404
-
405
- if (!active) {
406
- var _mm$handleClick, _mm$handleClick$__res;
407
-
408
- (_mm$handleClick = mm.handleClick) == null ? void 0 : (_mm$handleClick$__res = _mm$handleClick['__reset']) == null ? void 0 : _mm$handleClick$__res.call(_mm$handleClick);
409
- return;
410
- }
411
-
412
- const originalClick = mm.handleClick;
413
- if (!originalClick) return;
414
-
415
- const handleClick = (_, d) => {
416
- var _d$data$payload;
417
-
418
- const fold = (_d$data$payload = d.data.payload) != null && _d$data$payload.fold ? 0 : 1;
419
- walkTree(d.data, (item, next) => {
420
- item.payload = _extends({}, item.payload, {
421
- fold
422
- });
423
- next();
424
- });
425
- mm.renderData(d.data);
426
- reset();
427
-
428
- handleClick.__reset();
429
- };
430
-
431
- handleClick.__reset = () => {
432
- mm.handleClick = originalClick;
433
- };
434
-
435
- mm.handleClick = handleClick;
436
- }
437
-
438
319
  render() {
439
320
  const items = this.items.map(item => {
440
321
  if (typeof item === 'string') {
@@ -442,17 +323,18 @@ class Toolbar {
442
323
  if (!data) console.warn(`[markmap-toolbar] ${item} not found`);
443
324
  return data;
444
325
  }
445
-
446
326
  return item;
447
327
  }).filter(Boolean);
448
- return mountDom(jsxs("div", {
449
- className: "mm-toolbar",
328
+ while (this.el.firstChild) {
329
+ this.el.firstChild.remove();
330
+ }
331
+ this.el.append(mountDom(jsxs(Fragment, {
450
332
  children: [this.showBrand && renderBrand(), items.map(renderItem)]
451
- }));
333
+ })));
334
+ return this.el;
452
335
  }
453
-
454
336
  }
455
- Toolbar.defaultItems = ['zoomIn', 'zoomOut', 'fit', 'recurse'];
337
+ Toolbar.defaultItems = ['zoomIn', 'zoomOut', 'fit'];
456
338
 
457
339
  exports.Toolbar = Toolbar;
458
340
 
@@ -1,44 +1,23 @@
1
- /*! markmap-toolbar v0.14.4 | MIT License */
1
+ /*! markmap-toolbar v0.15.0-alpha.1+1308d8e | MIT License */
2
2
  import { mountDom } from '@gera2ld/jsx-dom';
3
- import { jsx, jsxs } from '@gera2ld/jsx-dom/jsx-runtime';
3
+ import { jsx, jsxs, Fragment } from '@gera2ld/jsx-dom/jsx-runtime';
4
4
 
5
5
  function _extends() {
6
- _extends = Object.assign || function (target) {
6
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
7
7
  for (var i = 1; i < arguments.length; i++) {
8
8
  var source = arguments[i];
9
-
10
9
  for (var key in source) {
11
10
  if (Object.prototype.hasOwnProperty.call(source, key)) {
12
11
  target[key] = source[key];
13
12
  }
14
13
  }
15
14
  }
16
-
17
15
  return target;
18
16
  };
19
-
20
17
  return _extends.apply(this, arguments);
21
18
  }
22
19
 
23
- /*! markmap-common v0.14.2 | MIT License */
24
-
25
- Math.random().toString(36).slice(2, 8);
26
-
27
- function walkTree(tree, callback, key = 'children') {
28
- const walk = (item, parent) => callback(item, () => {
29
- var _item$key;
30
-
31
- (_item$key = item[key]) == null ? void 0 : _item$key.forEach(child => {
32
- walk(child, item);
33
- });
34
- }, parent);
35
-
36
- walk(tree);
37
- }
38
-
39
20
  const clsToolbarItem = 'mm-toolbar-item';
40
- const clsActive = 'active';
41
-
42
21
  function renderBrand() {
43
22
  return jsxs("a", {
44
23
  className: "mm-toolbar-brand",
@@ -51,7 +30,6 @@ function renderBrand() {
51
30
  })]
52
31
  });
53
32
  }
54
-
55
33
  function renderItem({
56
34
  title,
57
35
  content,
@@ -64,14 +42,11 @@ function renderItem({
64
42
  children: content
65
43
  });
66
44
  }
67
-
68
45
  let promise;
69
-
70
46
  function safeCaller(fn) {
71
47
  return async (...args) => {
72
48
  if (promise) return;
73
49
  promise = fn(...args);
74
-
75
50
  try {
76
51
  await promise;
77
52
  } finally {
@@ -79,14 +54,13 @@ function safeCaller(fn) {
79
54
  }
80
55
  };
81
56
  }
82
-
83
57
  class Toolbar {
84
58
  static create(mm) {
85
59
  const toolbar = new Toolbar();
86
60
  toolbar.attach(mm);
87
- return toolbar.render();
61
+ toolbar.render();
62
+ return toolbar;
88
63
  }
89
-
90
64
  static icon(path, attrs = {}) {
91
65
  attrs = _extends({
92
66
  stroke: 'none',
@@ -102,11 +76,13 @@ class Toolbar {
102
76
  }))
103
77
  });
104
78
  }
105
-
106
79
  constructor() {
107
80
  this.showBrand = true;
108
81
  this.registry = {};
109
82
  this.markmap = null;
83
+ this.el = mountDom(jsx("div", {
84
+ className: "mm-toolbar"
85
+ }));
110
86
  this.register({
111
87
  id: 'zoomIn',
112
88
  title: 'Zoom in',
@@ -125,81 +101,28 @@ class Toolbar {
125
101
  content: Toolbar.icon('M4 7h2v-2h2v4h-4zM4 13h2v2h2v-4h-4zM16 7h-2v-2h-2v4h4zM16 13h-2v2h-2v-4h4z'),
126
102
  onClick: this.getHandler(mm => mm.fit())
127
103
  });
128
- this.register({
129
- id: 'recurse',
130
- title: 'Recursively toggle the next node',
131
- content: Toolbar.icon('M16 4h-12v12h12v-8h-8v4h2v-2h4v4h-8v-8h10z'),
132
- onClick: e => {
133
- const button = e.target.closest(`.${clsToolbarItem}`);
134
-
135
- const toggle = () => button.classList.toggle(clsActive);
136
-
137
- const active = toggle();
138
- this.handleRecurse(active, toggle);
139
- }
140
- });
141
- this.setItems(Toolbar.defaultItems);
104
+ this.items = Toolbar.defaultItems;
142
105
  }
143
-
144
106
  setBrand(show) {
145
107
  this.showBrand = show;
108
+ return this.render();
146
109
  }
147
-
148
110
  register(data) {
149
111
  this.registry[data.id] = data;
150
112
  }
151
-
152
113
  getHandler(handle) {
153
114
  handle = safeCaller(handle);
154
115
  return () => {
155
116
  if (this.markmap) handle(this.markmap);
156
117
  };
157
118
  }
158
-
159
119
  setItems(items) {
160
120
  this.items = [...items];
121
+ return this.render();
161
122
  }
162
-
163
123
  attach(mm) {
164
124
  this.markmap = mm;
165
125
  }
166
-
167
- handleRecurse(active, reset) {
168
- const mm = this.markmap;
169
-
170
- if (!active) {
171
- var _mm$handleClick, _mm$handleClick$__res;
172
-
173
- (_mm$handleClick = mm.handleClick) == null ? void 0 : (_mm$handleClick$__res = _mm$handleClick['__reset']) == null ? void 0 : _mm$handleClick$__res.call(_mm$handleClick);
174
- return;
175
- }
176
-
177
- const originalClick = mm.handleClick;
178
- if (!originalClick) return;
179
-
180
- const handleClick = (_, d) => {
181
- var _d$data$payload;
182
-
183
- const fold = (_d$data$payload = d.data.payload) != null && _d$data$payload.fold ? 0 : 1;
184
- walkTree(d.data, (item, next) => {
185
- item.payload = _extends({}, item.payload, {
186
- fold
187
- });
188
- next();
189
- });
190
- mm.renderData(d.data);
191
- reset();
192
-
193
- handleClick.__reset();
194
- };
195
-
196
- handleClick.__reset = () => {
197
- mm.handleClick = originalClick;
198
- };
199
-
200
- mm.handleClick = handleClick;
201
- }
202
-
203
126
  render() {
204
127
  const items = this.items.map(item => {
205
128
  if (typeof item === 'string') {
@@ -207,16 +130,17 @@ class Toolbar {
207
130
  if (!data) console.warn(`[markmap-toolbar] ${item} not found`);
208
131
  return data;
209
132
  }
210
-
211
133
  return item;
212
134
  }).filter(Boolean);
213
- return mountDom(jsxs("div", {
214
- className: "mm-toolbar",
135
+ while (this.el.firstChild) {
136
+ this.el.firstChild.remove();
137
+ }
138
+ this.el.append(mountDom(jsxs(Fragment, {
215
139
  children: [this.showBrand && renderBrand(), items.map(renderItem)]
216
- }));
140
+ })));
141
+ return this.el;
217
142
  }
218
-
219
143
  }
220
- Toolbar.defaultItems = ['zoomIn', 'zoomOut', 'fit', 'recurse'];
144
+ Toolbar.defaultItems = ['zoomIn', 'zoomOut', 'fit'];
221
145
 
222
146
  export { Toolbar };
package/dist/style.css CHANGED
@@ -1 +1,65 @@
1
- .mm-toolbar{--tw-border-opacity:1;--tw-bg-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(209 213 219/var(--tw-border-opacity));border-radius:.25rem;border-style:solid;border-width:1px;display:flex;line-height:1;padding:.25rem;-moz-user-select:none;user-select:none}.mm-toolbar:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.mm-toolbar svg{display:block}.mm-toolbar a{display:inline-block;-webkit-text-decoration-line:none;text-decoration-line:none}.mm-toolbar-brand>img{height:1rem;vertical-align:middle;width:1rem}.mm-toolbar-brand>span{padding-left:.25rem;padding-right:.25rem}.mm-toolbar-brand:not(:first-child),.mm-toolbar-item:not(:first-child){margin-left:.25rem}.mm-toolbar-brand>*,.mm-toolbar-item>*{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity));cursor:pointer;font-size:.75rem;height:20px;line-height:1rem;line-height:20px;min-width:20px;text-align:center}.mm-toolbar-brand.active,.mm-toolbar-brand:hover,.mm-toolbar-item.active,.mm-toolbar-item:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity));border-radius:.25rem}.mm-toolbar-brand.active>*,.mm-toolbar-brand:hover>*,.mm-toolbar-item.active>*,.mm-toolbar-item:hover>*{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.mm-toolbar-brand.active,.mm-toolbar-item.active{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}
1
+ .mm-toolbar {
2
+ display: flex;
3
+ -moz-user-select: none;
4
+ user-select: none;
5
+ align-items: center;
6
+ border-radius: 0.25rem;
7
+ border-width: 1px;
8
+ border-style: solid;
9
+ --tw-border-opacity: 1;
10
+ border-color: rgb(209 213 219 / var(--tw-border-opacity));
11
+ --tw-bg-opacity: 1;
12
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
13
+ padding: 0.25rem;
14
+ line-height: 1
15
+ }
16
+ .mm-toolbar:hover {
17
+ --tw-border-opacity: 1;
18
+ border-color: rgb(156 163 175 / var(--tw-border-opacity))
19
+ }
20
+ .mm-toolbar svg {
21
+ display: block
22
+ }
23
+ .mm-toolbar a {
24
+ display: inline-block;
25
+ text-decoration-line: none
26
+ }
27
+ .mm-toolbar-brand > img {
28
+ height: 1rem;
29
+ width: 1rem;
30
+ vertical-align: middle
31
+ }
32
+ .mm-toolbar-brand > span {
33
+ padding-left: 0.25rem;
34
+ padding-right: 0.25rem
35
+ }
36
+ .mm-toolbar-brand:not(:first-child), .mm-toolbar-item:not(:first-child) {
37
+ margin-left: 0.25rem
38
+ }
39
+ .mm-toolbar-brand > *, .mm-toolbar-item > * {
40
+ cursor: pointer;
41
+ text-align: center;
42
+ font-size: 0.75rem;
43
+ line-height: 1rem;
44
+ --tw-text-opacity: 1;
45
+ color: rgb(156 163 175 / var(--tw-text-opacity));
46
+ min-width: 20px;
47
+ height: 20px;
48
+ line-height: 20px
49
+ }
50
+ .mm-toolbar-brand.active,
51
+ .mm-toolbar-brand:hover,
52
+ .mm-toolbar-item.active,
53
+ .mm-toolbar-item:hover {
54
+ border-radius: 0.25rem;
55
+ --tw-bg-opacity: 1;
56
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity))
57
+ }
58
+ .mm-toolbar-brand.active > *, .mm-toolbar-brand:hover > *, .mm-toolbar-item.active > *, .mm-toolbar-item:hover > * {
59
+ --tw-text-opacity: 1;
60
+ color: rgb(31 41 55 / var(--tw-text-opacity))
61
+ }
62
+ .mm-toolbar-brand.active, .mm-toolbar-item.active {
63
+ --tw-bg-opacity: 1;
64
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity))
65
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "markmap-toolbar",
3
- "version": "0.14.4",
3
+ "version": "0.15.0-alpha.1+1308d8e",
4
4
  "description": "Extensible toolbar for markmap",
5
5
  "author": "Gerald <gera2ld@live.com>",
6
6
  "license": "MIT",
@@ -10,10 +10,10 @@
10
10
  "build:types": "tsc",
11
11
  "build:js": "rollup -c rollup.conf.js"
12
12
  },
13
- "main": "dist/index.umd.js",
14
- "module": "dist/index.esm.js",
15
- "unpkg": "dist/index.umd.min.js",
16
- "jsdelivr": "dist/index.umd.min.js",
13
+ "main": "dist/index.js",
14
+ "module": "dist/index.mjs",
15
+ "unpkg": "dist/index.js",
16
+ "jsdelivr": "dist/index.js",
17
17
  "files": [
18
18
  "dist",
19
19
  "types"
@@ -22,13 +22,25 @@
22
22
  "access": "public",
23
23
  "registry": "https://registry.npmjs.org/"
24
24
  },
25
+ "homepage": "https://github.com/markmap/markmap/packages/markmap-toolbar#readme",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/markmap/markmap.git"
29
+ },
30
+ "bugs": {
31
+ "url": "https://github.com/markmap/markmap/issues"
32
+ },
25
33
  "typings": "types/index.d.ts",
34
+ "peerDependencies": {
35
+ "markmap-common": "*"
36
+ },
26
37
  "devDependencies": {
27
- "markmap-view": "^0.14.4"
38
+ "markmap-common": "0.15.0-alpha.0",
39
+ "markmap-view": "0.15.0-alpha.0"
28
40
  },
29
41
  "dependencies": {
30
42
  "@babel/runtime": "^7.16.3",
31
43
  "@gera2ld/jsx-dom": "^2.1.1"
32
44
  },
33
- "gitHead": "8eb2fa223ab85d1a7699d2c9660fdb5fac24acd1"
45
+ "gitHead": "1308d8ea5a6e6b24b6c5f053a50cc319df4ad93d"
34
46
  }
@@ -1,7 +1,7 @@
1
1
  import { VChildren } from '@gera2ld/jsx-dom';
2
2
  import type { Markmap } from 'markmap-view';
3
3
  import './style.css';
4
- interface IToolbarItem {
4
+ export interface IToolbarItem {
5
5
  id?: string;
6
6
  title?: string;
7
7
  content: VChildren;
@@ -12,18 +12,17 @@ export declare class Toolbar {
12
12
  private registry;
13
13
  private markmap;
14
14
  static defaultItems: (string | IToolbarItem)[];
15
+ el: HTMLDivElement;
15
16
  items: (string | IToolbarItem)[];
16
- static create(mm: Markmap): Node;
17
+ static create(mm: Markmap): Toolbar;
17
18
  static icon(path: string, attrs?: {}): import("@gera2ld/jsx-dom").VNode;
18
19
  constructor();
19
- setBrand(show: boolean): void;
20
+ setBrand(show: boolean): HTMLDivElement;
20
21
  register(data: IToolbarItem & {
21
22
  id: string;
22
23
  }): void;
23
24
  getHandler(handle: (mm: Markmap) => Promise<void>): () => void;
24
- setItems(items: (string | IToolbarItem)[]): void;
25
+ setItems(items: (string | IToolbarItem)[]): HTMLDivElement;
25
26
  attach(mm: Markmap): void;
26
- handleRecurse(active: boolean, reset: () => void): void;
27
- render(): Node;
27
+ render(): HTMLDivElement;
28
28
  }
29
- export {};
@@ -1,4 +0,0 @@
1
- /*! markmap-toolbar v0.14.4 | MIT License */
2
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).markmap=t.markmap||{})}(this,(function(t){"use strict";function e(){return e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var A in r)Object.prototype.hasOwnProperty.call(r,A)&&(t[A]=r[A])}return t},e.apply(this,arguments)}
3
- /*! @gera2ld/jsx-dom v2.1.1 | ISC License */var r="http://www.w3.org/1999/xlink",A={show:r,actuate:r,href:r};function n(t,e){var r;if("string"==typeof t)r=1;else{if("function"!=typeof t)throw new Error("Invalid VNode type");r=2}return{vtype:r,type:t,props:e}}var i=n;function o(t){return t.children}var a={isSvg:!1};function s(t,e){if(1===e.type)null!=e.node&&t.append(e.node);else{if(4!==e.type)throw new Error("Unkown ref type "+JSON.stringify(e));e.children.forEach((function(e){s(t,e)}))}}var l={className:"class",labelFor:"for"};function h(t,e,r,n){if(e=l[e]||e,!0===r)t.setAttribute(e,"");else if(!1===r)t.removeAttribute(e);else{var i=n?A[e]:void 0;void 0!==i?t.setAttributeNS(i,e,r):t.setAttribute(e,r)}}function c(t,e){if(void 0===e&&(e=a),null==t||"boolean"==typeof t)return{type:1,node:null};if(t instanceof Node)return{type:1,node:t};if(2===(null==(l=t)?void 0:l.vtype)){var r=t,A=r.type,n=r.props;if(A===o){var i=document.createDocumentFragment();if(n.children)s(i,c(n.children,e));return{type:1,node:i}}return c(A(n),e)}var l;if(function(t){return"string"==typeof t||"number"==typeof t}(t))return{type:1,node:document.createTextNode(""+t)};if(function(t){return 1===(null==t?void 0:t.vtype)}(t)){var d,u,v=t,f=v.type,g=v.props;if(e.isSvg||"svg"!==f||(e=Object.assign({},e,{isSvg:!0})),function(t,e,r){for(var A in e)"key"!==A&&"children"!==A&&"ref"!==A&&("dangerouslySetInnerHTML"===A?t.innerHTML=e[A].__html:"innerHTML"===A||"textContent"===A||"innerText"===A?t[A]=e[A]:A.startsWith("on")?t[A.toLowerCase()]=e[A]:h(t,A,e[A],r.isSvg))}(d=e.isSvg?document.createElementNS("http://www.w3.org/2000/svg",f):document.createElement(f),g,e),g.children){var p=e;e.isSvg&&"foreignObject"===f&&(p=Object.assign({},p,{isSvg:!1})),u=c(g.children,p)}null!=u&&s(d,u);var m=g.ref;return"function"==typeof m&&m(d),{type:1,node:d}}if(Array.isArray(t))return{type:4,children:t.map((function(t){return c(t,e)}))};throw new Error("mount: Invalid Vnode!")}function d(t){for(var e=[],r=0;r<t.length;r+=1){var A=t[r];Array.isArray(A)?e=e.concat(d(A)):null!=A&&e.push(A)}return e}function u(t){return 1===t.type?t.node:t.children.map(u)}function v(t){return Array.isArray(t)?d(t.map(v)):u(c(t))}
4
- /*! markmap-common v0.14.2 | MIT License */Math.random().toString(36).slice(2,8);const f="mm-toolbar-item";function g({title:t,content:e,onClick:r}){return n("div",{className:f,title:t,onClick:r,children:e})}let p;class m{static create(t){const e=new m;return e.attach(t),e.render()}static icon(t,r={}){return r=e({stroke:"none",fill:"currentColor","fill-rule":"evenodd"},r),n("svg",{width:"20",height:"20",viewBox:"0 0 20 20",children:n("path",e({},r,{d:t}))})}constructor(){this.showBrand=!0,this.registry={},this.markmap=null,this.register({id:"zoomIn",title:"Zoom in",content:m.icon("M9 5v4h-4v2h4v4h2v-4h4v-2h-4v-4z"),onClick:this.getHandler((t=>t.rescale(1.25)))}),this.register({id:"zoomOut",title:"Zoom out",content:m.icon("M5 9h10v2h-10z"),onClick:this.getHandler((t=>t.rescale(.8)))}),this.register({id:"fit",title:"Fit window size",content:m.icon("M4 7h2v-2h2v4h-4zM4 13h2v2h2v-4h-4zM16 7h-2v-2h-2v4h4zM16 13h-2v2h-2v-4h4z"),onClick:this.getHandler((t=>t.fit()))}),this.register({id:"recurse",title:"Recursively toggle the next node",content:m.icon("M16 4h-12v12h12v-8h-8v4h2v-2h4v4h-8v-8h10z"),onClick:t=>{const e=t.target.closest(".mm-toolbar-item"),r=()=>e.classList.toggle("active"),A=r();this.handleRecurse(A,r)}}),this.setItems(m.defaultItems)}setBrand(t){this.showBrand=t}register(t){this.registry[t.id]=t}getHandler(t){var e;return e=t,t=async(...t)=>{if(!p){p=e(...t);try{await p}finally{p=null}}},()=>{this.markmap&&t(this.markmap)}}setItems(t){this.items=[...t]}attach(t){this.markmap=t}handleRecurse(t,r){const A=this.markmap;var n,i;if(!t)return void(null==(n=A.handleClick)||null==(i=n.__reset)||i.call(n));const o=A.handleClick;if(!o)return;const a=(t,n)=>{var i;const o=null!=(i=n.data.payload)&&i.fold?0:1;!function(t,e,r="children"){const A=(t,n)=>e(t,(()=>{var e;null==(e=t[r])||e.forEach((e=>{A(e,t)}))}),n);A(t)}(n.data,((t,r)=>{t.payload=e({},t.payload,{fold:o}),r()})),A.renderData(n.data),r(),a.__reset()};a.__reset=()=>{A.handleClick=o},A.handleClick=a}render(){const t=this.items.map((t=>{if("string"==typeof t){const e=this.registry[t];return e||console.warn(`[markmap-toolbar] ${t} not found`),e}return t})).filter(Boolean);return v(i("div",{className:"mm-toolbar",children:[this.showBrand&&i("a",{className:"mm-toolbar-brand",href:"https://markmap.js.org/",children:[n("img",{alt:"markmap",src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACoFBMVEUAAAAAAAD//wAAAACAgAD//wAAAABVVQCqqgBAQACAQACAgABmZgBtbQAAAABgQABgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaFQAAAAAAAAAAAAAAAAAHAAARBQIdGAIYEwI/OgJYUQUfHQI+OgJDPgJJRARBPQRJQgRRSwRRTQRIQQRUTgRUUARZUgRSTQRPSQRjWgZORQRfWQZsZAhTTQRNRwRWUAZkXAZOSARUTgZPRwRRSQRoYwZWUQZWTgRbUwZmXQZoXghmXwdqYwdsYwdfVwVmXQdqYgdiWgVpYAl3bgl6cgl4cAqLggw8OAOWjA2Uig1OSAR2bQihlg55cAh5cAh6cQmMgwyOhAyUjA2QhQ2Uiw2Viw2soBCflA+voxGwpRGhlg+hlg+snxGroBGjmBCpnBC0pxKyphKxpRG2qhK0qBK5rBK5rBP/7h3/8B7/8R3/8h3/8R7/8h786x397B3+7R3EtxT66Rz66hz76hz86xz96xz97Bz+7Rz45xz56Bz76hz97Bz97B3MvRX15Rv25Rv45xz66Rz76hz97B3+7R3IuxX05Bv15Bv25Rz56Bz66Ry/sxPAsxPCtRTCthTNvxbZyxfczxfi0xjl1Rnn2Bnr2xrr3Brs3Rru3Rru3xrv3hrw3xrx4Bvx4Rvy4hvz4hvz4xv04xv05Bv14xv15Bv15Rv25Bv25Rv25Rz25hv35hv35xv45xv45xz55xz56Bv56Bz66Rv66Rz76Rv76Rz76hz86hv86xz+7h3/7R3/7h3/7x3/8B3/8B7/8R3/8R4Yqhj5AAAAq3RSTlMAAQECAgIDAwMEBAQFBwgICAwQERITFRYXGBkbHB0eHyQlJyguNTg8RUZISU5PV2FiY2RlZmdqa2xubnJzc3R2d3d3eXl5eXp7fH1+gIGCgoKDg4SEhIWGh4eHiYmJjIyMjZSUlJ+sra+zt7i4uru8ztHV1tbW2d7g4OHi4uPk5ufp7Ozv9fX29/f3+Pj6+vr7+/v7+/v7+/z8/Pz8/f39/f39/f3+/v7+/v7K6J1dAAACHklEQVQ4y2NgwAoYWdi5uLm5GXHIcrLCmMzYpDmAhKCKjoGtp40MFhVsDAwSxmmVEzZu2XvqSLkchjw3g0h445Ybd24vmTN1Usd5X3R5DgaNqgN35sycP2/GxMkTMRVwMOivvtO3YsWUm3duX790EcMKdgbNNXdnnJh1+9T6ipzU+FB0RzIyiFYB5WdfaElUF8TmTQ6GwH39J2bvypMHcpg4MAKKkUGo5s6KWRfyGRh4WJClGEGBCgS8DLobliy/3abMwM8NBYwQjXDgf3ryxOspyKYyg+RFTFwdnYDAzbrw+oLFm9Ot3J3AwNHFTBykQrhg++GDh48cOXzk4P6VZy8s230MyAGCwwcP7iyRBJpiur1n8hQIWHX27NkLi6bAwOSuow5ABeY7OydOhoCFIAULe6E8YFCf8QAqEC86evniZTA4tfLsuRXHr0E4ly9ePF0uC3KnpH1MZBQQxPoVgxyZ5RMdBQaRMc6yIEcihWbQGaA3k9G8CfQoN0pAtSoxCMACihk9qGtBQZ2LHtRIkRUMiqwd2TJADiswsrjQlAGju/o+MLrPNkWo8mFN1ewMWmvBCebQ0rKMJG87QzF0FRwMRuvugpLcrXu3rp7Zs61UCtMZ2nVHbk+fMX/+jMmTp3Sf9MLiULG45q237txaPG3yxPYrYQzYMo60RWbD3E27Ll68Uq+AK+uJqOlZBiSEKGLNnMA0iDfzwrI/NKgBOivk9piPdtUAAAAASUVORK5CYII="}),n("span",{children:"markmap"})]}),t.map(g)]}))}}m.defaultItems=["zoomIn","zoomOut","fit","recurse"],t.Toolbar=m}));