@websolutespa/bom-llm 0.0.11 → 0.0.12

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @websolutespa/bom-llm
2
2
 
3
+ ## 0.0.12
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixing: markdown links
8
+ - Added: embeds IntersectionObserver, MutationObserber
9
+
3
10
  ## 0.0.11
4
11
 
5
12
  ### Patch Changes
package/dist/umd/index.js CHANGED
@@ -28409,10 +28409,17 @@ void main(void) {
28409
28409
  marked.use({
28410
28410
  renderer: {
28411
28411
  link(href, title, text) {
28412
- return `<a href="${href}" target="_blank"${title ? ` title="${title}"` : ''}>${text}</a>`;
28412
+ return `<a class="llm__text-link" href="${href}" target="_blank"
28413
+ ${title ? `title="${title}"` : ''}
28414
+ onclick="javascript:event.preventDefault(),window.open(event.currentTarget.href);">
28415
+ ${text}
28416
+ </a>`;
28413
28417
  },
28414
28418
  image(href, title, text) {
28415
- return `<a class="llm__text-img" href="${href}" target="_blank"><img src="${href}"${title ? ` title="${title}"` : ''} alt="${text}" /></a>`;
28419
+ return `<a class="llm__text-img" href="${href}" target="_blank"
28420
+ onclick="javascript:event.preventDefault(),window.open(event.currentTarget.href);">
28421
+ <img src="${href}"${title ? ` title="${title}"` : ''} alt="${text}" />
28422
+ </a>`;
28416
28423
  }
28417
28424
  }
28418
28425
  });
@@ -29370,20 +29377,130 @@ void main(void) {
29370
29377
  instance: llm
29371
29378
  }))
29372
29379
  }));
29373
- const nodes = Array.from(document.querySelectorAll('llm-embed'));
29374
- nodes.forEach(node => {
29375
- const root = client.createRoot(node);
29376
- root.render(jsxRuntimeExports.jsx(React.StrictMode, {
29377
- children: jsxRuntimeExports.jsx(App, Object.assign({}, props, {
29378
- embedded: true
29379
- }))
29380
- }));
29380
+ const renderEmbed = node => {
29381
+ if (!node.hasAttribute('data-llm')) {
29382
+ node.setAttribute('data-llm', '');
29383
+ const root = client.createRoot(node);
29384
+ root.render(jsxRuntimeExports.jsx(React.StrictMode, {
29385
+ children: jsxRuntimeExports.jsx(App, Object.assign({}, props, {
29386
+ embedded: true
29387
+ }))
29388
+ }));
29389
+ }
29390
+ };
29391
+ // observe embeds
29392
+ const onIntersection = node => {
29393
+ // console.log('onIntersection', node);
29394
+ renderEmbed(node);
29395
+ };
29396
+ const targetElement = document;
29397
+ const intersectionObserver = observeIntersections(targetElement, onIntersection);
29398
+ const embeds = Array.from(document.querySelectorAll('llm-embed')).filter(element => !element.hasAttribute('data-llm'));
29399
+ embeds.forEach(element => intersectionObserver.observe(element));
29400
+ observeMutations(targetElement, _ref => {
29401
+ let {
29402
+ addedNodes,
29403
+ removedNodes
29404
+ } = _ref;
29405
+ // console.log('addedNodes', addedNodes);
29406
+ const addedElements = Array.from(addedNodes).filter(x => x.nodeType === Node.ELEMENT_NODE);
29407
+ // console.log('addedElements', addedElements);
29408
+ const elements = queryElements(addedElements);
29409
+ // console.log('elements', elements);
29410
+ elements.forEach(element => intersectionObserver.observe(element));
29381
29411
  });
29412
+ const elements = queryElements(targetElement);
29413
+ elements.forEach(element => intersectionObserver.observe(element));
29414
+ // return dispose;
29382
29415
  return llm;
29383
29416
  }
29384
29417
  if (typeof window !== 'undefined') {
29385
29418
  window.bomLlm = bomLlm;
29386
29419
  }
29420
+ function observeIntersections(targetElement, callback) {
29421
+ if (targetElement === void 0) {
29422
+ targetElement = document;
29423
+ }
29424
+ if (callback === void 0) {
29425
+ callback = target => {};
29426
+ }
29427
+ let observer;
29428
+ if ('IntersectionObserver' in window) {
29429
+ const observerOptions = {
29430
+ root: targetElement.parentElement ? targetElement.parentElement : targetElement,
29431
+ rootMargin: '50px',
29432
+ threshold: [0.01, 0.99]
29433
+ };
29434
+ observer = new IntersectionObserver((entries, observer) => {
29435
+ entries.forEach(entry => {
29436
+ if (entry.isIntersecting) {
29437
+ callback(entry.target);
29438
+ observer.unobserve(entry.target);
29439
+ }
29440
+ });
29441
+ }, observerOptions);
29442
+ } else {
29443
+ observer = {
29444
+ observe: callback,
29445
+ disconnect: () => {}
29446
+ };
29447
+ }
29448
+ return observer;
29449
+ }
29450
+ function observeMutations(targetElement, callback) {
29451
+ if (targetElement === void 0) {
29452
+ targetElement = document;
29453
+ }
29454
+ if (callback === void 0) {
29455
+ callback = mutation => {};
29456
+ }
29457
+ let observer;
29458
+ if ('MutationObserver' in window) {
29459
+ const config = {
29460
+ attributes: false,
29461
+ childList: true,
29462
+ subtree: true
29463
+ };
29464
+ observer = new MutationObserver((mutationList, observer) => {
29465
+ for (const mutation of mutationList) {
29466
+ if (mutation.type === 'childList') {
29467
+ callback(mutation);
29468
+ }
29469
+ /*
29470
+ else if (mutation.type === 'attributes') {
29471
+ console.log(`The ${mutation.attributeName} attribute was modified.`);
29472
+ }
29473
+ */
29474
+ }
29475
+ });
29476
+ observer.observe(targetElement, config);
29477
+ } else {
29478
+ observer = {
29479
+ disconnect: () => {}
29480
+ };
29481
+ }
29482
+ return observer;
29483
+ }
29484
+ function queryElements(elements) {
29485
+ const filteredElements = [];
29486
+ const iterable = Array.isArray(elements) ? elements : isIterable(elements) ? elements : [elements];
29487
+ for (const element of iterable) {
29488
+ const childElements = element.querySelectorAll('llm-embed');
29489
+ for (const childElement of childElements) {
29490
+ if (!childElement.hasAttribute('data-llm')) {
29491
+ filteredElements.push(childElement);
29492
+ }
29493
+ }
29494
+ // console.log('element.tagName', element.tagName);
29495
+ if (element.tagName.toLowerCase() === 'llm-embed' && !element.hasAttribute('data-llm')) {
29496
+ filteredElements.push(element);
29497
+ }
29498
+ }
29499
+ return filteredElements;
29500
+ }
29501
+ function isIterable(element) {
29502
+ return element != null && typeof element[Symbol.iterator] === 'function';
29503
+ }
29387
29504
 
29388
29505
  exports.bomLlm = bomLlm;
29389
29506