From 884ac79b5b4e2c4b7fef8857b51eda6f7032fed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Wed, 28 Aug 2024 13:56:53 +0200 Subject: [PATCH 01/19] =?UTF-8?q?chore:=20=F0=9F=A4=96=20Update=20`SECURIT?= =?UTF-8?q?Y.md`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SECURITY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 1520f598..20791843 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -8,8 +8,8 @@ These are the versions that is updated with security patches. | Version | Supported | | ------- | ------------------ | -| >= 10.0 | :white_check_mark: | -| < 10.0 | :x: | +| >= 11.0 | :white_check_mark: | +| < 11.0 | :x: | ## Reporting a Vulnerability From b16054dd3d0fc9915da6a7cafb0fcdab77215400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Thu, 29 Aug 2024 09:53:40 +0200 Subject: [PATCH 02/19] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20Make=20sure=20?= =?UTF-8?q?we=20set=20a=20relation=20id=20to=20target=20elements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/grid/index.ts | 6 ++++++ src/features/mark/index.ts | 31 ++++++++++++++++++------------ src/features/measure/index.ts | 24 ++++++++++++++++++----- src/features/spacing/index.ts | 8 ++++++++ src/features/typography/index.ts | 13 +++++++++++-- src/utils/__tests__/get-options.ts | 2 +- 6 files changed, 64 insertions(+), 20 deletions(-) diff --git a/src/features/grid/index.ts b/src/features/grid/index.ts index fc28f1f3..78bdf979 100644 --- a/src/features/grid/index.ts +++ b/src/features/grid/index.ts @@ -2,6 +2,7 @@ import { SpeccerOptionsInterface } from '../../types/speccer'; import { SPECCER_DATA_ATTRIBUTE } from '../../utils/constants'; import { getOptions } from '../../utils/get-options'; +import { uniqueID } from '../../utils/id'; import { isElementHidden } from '../../utils/node'; import { offset } from '../../utils/position'; import { get as getStyles } from '../../utils/styles'; @@ -39,6 +40,9 @@ export const create = async ( const { height, width } = targetElement.getBoundingClientRect(); const { top, left } = await offset(targetElement); const { gridTemplateColumns, gridTemplateRows, padding } = styles; + const _pin_element_id = `speccer-${options.slug}-${targetElement.getAttribute('id') || uniqueID()}`; + + targetElement.setAttribute('data-speccer-element-id', _pin_element_id); if (toggle === 'columns' || toggle === 'both') { const columnGap = parseInt(styles.columnGap); @@ -55,6 +59,7 @@ export const create = async ( if (columnGap < 24) gridColumnContainer.classList.add('speccer-small-grid'); + gridColumnContainer.setAttribute('data-speccer-id', _pin_element_id); gridColumnContainer.classList.add('ph-speccer'); gridColumnContainer.classList.add('speccer'); gridColumnContainer.classList.add('speccer-grid-container'); @@ -94,6 +99,7 @@ export const create = async ( if (rowGap < 24) gridRowContainer.classList.add('speccer-small-grid'); + gridRowContainer.setAttribute('data-speccer-id', _pin_element_id); gridRowContainer.classList.add('ph-speccer'); gridRowContainer.classList.add('speccer'); gridRowContainer.classList.add('speccer-grid-row-container'); diff --git a/src/features/mark/index.ts b/src/features/mark/index.ts index 673e8627..24a9d7f0 100644 --- a/src/features/mark/index.ts +++ b/src/features/mark/index.ts @@ -2,6 +2,7 @@ import { cx, set } from '../../utils/classnames'; import { SPECCER_DATA_ATTRIBUTE } from '../../utils/constants'; import { getOptions } from '../../utils/get-options'; +import { uniqueID } from '../../utils/id'; import { isElementHidden } from '../../utils/node'; import { getRec } from '../../utils/position'; import { add as addStyles } from '../../utils/styles'; @@ -10,6 +11,7 @@ import { waitForFrame } from '../../utils/wait'; /** * Create a marker element with an optional element type. * + * @param {string} id - The id. * @param {string} n - The element type. * @returns {HTMLElement} - The created marker element. * @@ -19,13 +21,16 @@ import { waitForFrame } from '../../utils/wait'; * document.body.appendChild(marker); * ``` */ -export const create = (n = 'span'): HTMLElement => { - const markElement = document.createElement(n); - const classNames = cx('ph-speccer speccer mark'); +export const create = (id: string, n = 'span'): HTMLElement => { + const _mark_element = document.createElement(n); - set(markElement, classNames); + _mark_element.setAttribute('id', id); - return markElement; + const _class_names = cx('ph-speccer speccer mark'); + + set(_mark_element, _class_names); + + return _mark_element; }; /** @@ -54,20 +59,22 @@ export const element = async (targetElement: HTMLElement): Promise => { if (_options.type !== 'mark') return; - if (isElementHidden(targetElement)) return; + const _pin_element_id = `speccer-${_options.slug}-${targetElement.getAttribute('id') || uniqueID()}`; + + targetElement.setAttribute('data-speccer-element-id', _pin_element_id); - const markElement = create(); + const _mark_element = create(_pin_element_id); - document.body.appendChild(markElement); + document.body.appendChild(_mark_element); - const positionalStyles = await getRec(markElement, targetElement); - const { left, top, height, width } = positionalStyles.absolute(); - const markStyles = { + const _positional_styles = await getRec(_mark_element, targetElement); + const { left, top, height, width } = _positional_styles.absolute(); + const _mark_styles = { left: `${left}px`, top: `${top}px`, height: `${height}px`, width: `${width}px` }; - await addStyles(markElement, markStyles); + await addStyles(_mark_element, _mark_styles); }; diff --git a/src/features/measure/index.ts b/src/features/measure/index.ts index 0636f5e3..d81041cc 100644 --- a/src/features/measure/index.ts +++ b/src/features/measure/index.ts @@ -3,6 +3,7 @@ import { MeasureAreaEnum } from '../../types/enums/area'; import { SpeccerOptionsInterface } from '../../types/speccer'; import { cx, set as setClassNames } from '../../utils/classnames'; import { getOptions } from '../../utils/get-options'; +import { uniqueID } from '../../utils/id'; import { isElementHidden } from '../../utils/node'; import { getRec } from '../../utils/position'; import { add as addStyles } from '../../utils/styles'; @@ -13,6 +14,7 @@ import { waitForFrame } from '../../utils/wait'; * * @param {string | number} text - The text to display on the element. * @param {SpeccerOptionsInterface} options - The options. + * @param {string} id - The element id. * @param {string} tag - The element type. * @returns {HTMLElement} - The created measurement element. * @@ -25,11 +27,13 @@ import { waitForFrame } from '../../utils/wait'; export const create = ( text: string | number = '', options: SpeccerOptionsInterface, + id: string, tag = 'span' ): HTMLElement => { const _el = document.createElement(tag); _el.setAttribute('title', `${text}px`); + _el.setAttribute('id', id); _el.setAttribute('data-measure', `${parseInt(String(text), 10)}px`); const { measure, position } = options; @@ -75,14 +79,16 @@ export const element = async (targetElement: HTMLElement): Promise => { await waitForFrame(); - const { measure, position } = _options; const _target_rect = targetElement.getBoundingClientRect(); const _width_modifier = !measure.slim ? 48 : 0; const _height_modifier = !measure.slim ? 96 : 0; + const _pin_element_id = `speccer-${_options.slug}-${targetElement.getAttribute('id') || uniqueID()}`; + + targetElement.setAttribute('data-speccer-element-id', _pin_element_id); if (measure.width) { if (position === MeasureAreaEnum.Bottom) { - const _measure_el = create(_target_rect.width, _options); + const _measure_el = create(_target_rect.width, _options, _pin_element_id); document.body.appendChild(_measure_el); @@ -111,7 +117,7 @@ export const element = async (targetElement: HTMLElement): Promise => { }); } } else { - const _measure_el = create(_target_rect.width, _options); + const _measure_el = create(_target_rect.width, _options, _pin_element_id); document.body.appendChild(_measure_el); @@ -142,7 +148,11 @@ export const element = async (targetElement: HTMLElement): Promise => { } } else if (measure.height) { if (position === MeasureAreaEnum.Right) { - const _measure_el = create(_target_rect.height, _options); + const _measure_el = create( + _target_rect.height, + _options, + _pin_element_id + ); document.body.appendChild(_measure_el); @@ -171,7 +181,11 @@ export const element = async (targetElement: HTMLElement): Promise => { }); } } else { - const _measure_el = create(_target_rect.height, _options); + const _measure_el = create( + _target_rect.height, + _options, + _pin_element_id + ); document.body.appendChild(_measure_el); diff --git a/src/features/spacing/index.ts b/src/features/spacing/index.ts index e4dc9d72..7638b47f 100644 --- a/src/features/spacing/index.ts +++ b/src/features/spacing/index.ts @@ -6,6 +6,7 @@ import { getClassNameFromCSSProperty, getNumberValue } from '../../utils/css'; +import { uniqueID } from '../../utils/id'; import { isElementHidden } from '../../utils/node'; import { get as getStyles } from '../../utils/styles'; @@ -70,9 +71,16 @@ export const element = async (targetElement: HTMLElement): Promise => { if (!_target_pruned_spacing_styles.length) return; + const _pin_element_id = `speccer-spacing-${targetElement.getAttribute('id') || uniqueID()}`; + + targetElement.setAttribute('data-speccer-element-id', _pin_element_id); + _target_pruned_spacing_styles.forEach(async (property) => { const _value = getNumberValue(_target_spacing_styles[property]); const _speccer_el = create(_value); + + _speccer_el.setAttribute('data-speccer-id', _pin_element_id); + const _class_name = getClassNameFromCSSProperty(property); setClassNames(_speccer_el, _class_name); diff --git a/src/features/typography/index.ts b/src/features/typography/index.ts index 73db73d8..fbaf29ff 100644 --- a/src/features/typography/index.ts +++ b/src/features/typography/index.ts @@ -3,6 +3,7 @@ import { SpeccerOptionsInterface } from '../../types/speccer'; import { set as setClassNames, cx } from '../../utils/classnames'; import { getOptions } from '../../utils/get-options'; +import { uniqueID } from '../../utils/id'; import { isElementHidden } from '../../utils/node'; import { add as addStyles } from '../../utils/styles'; import { waitForFrame } from '../../utils/wait'; @@ -15,6 +16,7 @@ import { template } from './utils/template'; * * @param {string} html - The HTML content to be set in the created element. * @param {SpeccerOptionsInterface} options - Options. + * @param {string} id - The id. * @returns {HTMLElement} - The created DOM element. * * @example @@ -27,7 +29,8 @@ import { template } from './utils/template'; */ export const create = ( html: string, - options: SpeccerOptionsInterface + options: SpeccerOptionsInterface, + id: string ): HTMLElement => { const _el = document.createElement('div'); const { typography, position } = options; @@ -36,6 +39,8 @@ export const create = ( [position]: true }); + _el.setAttribute('id', id); + _el.innerHTML = html; setClassNames(_el, _class_names); @@ -79,7 +84,11 @@ export const element = async (targetElement: HTMLElement): Promise => { targetElement, _options.typography.useSyntaxHighlighting ); - const _speccer_el = create(_html, _options); + const _pin_element_id = `speccer-${_options.slug}-${targetElement.getAttribute('id') || uniqueID()}`; + + targetElement.setAttribute('data-speccer-element-id', _pin_element_id); + + const _speccer_el = create(_html, _options, _pin_element_id); document.body.appendChild(_speccer_el); diff --git a/src/utils/__tests__/get-options.ts b/src/utils/__tests__/get-options.ts index d3cb68b1..731073e6 100644 --- a/src/utils/__tests__/get-options.ts +++ b/src/utils/__tests__/get-options.ts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import { describe, it } from 'node:test'; -import {getOptions } from '../get-options'; +import { getOptions } from '../get-options'; describe('getOptions', () => { const mockTargetStyle = {} as CSSStyleDeclaration; From 1078ca4699497b221912c18f91676d600cc4c795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Thu, 29 Aug 2024 10:04:42 +0200 Subject: [PATCH 03/19] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Add=20function=20t?= =?UTF-8?q?o=20remove=20given=20speccer=20elements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/pin/index.ts | 3 ++ src/features/pin/utils/unpin-element.ts | 48 +++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/features/pin/utils/unpin-element.ts diff --git a/src/features/pin/index.ts b/src/features/pin/index.ts index 8e182558..eb4f970b 100644 --- a/src/features/pin/index.ts +++ b/src/features/pin/index.ts @@ -23,6 +23,9 @@ export { createPinElement } from './utils/create-pin-element'; // eslint-disable-next-line import/no-unused-modules export { pinElement } from './utils/pin-element'; +// eslint-disable-next-line import/no-unused-modules +export { unpinElement } from './utils/unpin-element'; + import { SPECCER_LITERALS } from '../../utils/constants'; import { getOptions } from '../../utils/get-options'; import { isElementHidden } from '../../utils/node'; diff --git a/src/features/pin/utils/unpin-element.ts b/src/features/pin/utils/unpin-element.ts new file mode 100644 index 00000000..bc8974be --- /dev/null +++ b/src/features/pin/utils/unpin-element.ts @@ -0,0 +1,48 @@ +/** + * Unpins an HTML element by removing associated pin elements and SVG paths. + * + * This function removes any pin elements linked to the specified element and + * also removes any SVG paths that might be associated with it. + * + * @param {HTMLElement} el - The HTML element to unpin. + * @returns {void} This function does not return a value. + * + * @example + * ```ts + * const element = document.getElementById('my-element'); + * if (element) { + * unpinElement(element); + * } + * ``` + */ +export const unpinElement = (el: HTMLElement): void => { + const _selector = el.getAttribute('data-speccer-element-id'); + + + if (!_selector) return; + + const _pin_element = + document.getElementById(_selector) || + document.querySelectorAll(`[data-speccer-id="${_selector}"]`); + + if (!_pin_element) return; + + if (Object.prototype.isPrototypeOf.call(NodeList.prototype, _pin_element)) { + [...(_pin_element as unknown as HTMLElement[])].forEach((el:HTMLElement) => { + el.remove(); + el.classList.remove('is-specced'); + }); + } else { + // We also need to remove the svg paths if it is in use + if ( + (_pin_element as HTMLElement).classList.contains('curly') || + (_pin_element as HTMLElement).classList.contains('svg') + ) { + const _el_ID = el.getAttribute('id'); + + document + .querySelectorAll(`#ph-speccer-svg path[data-start-el="${_el_ID}"]`) + .forEach((el) => el.remove()); + } + } +}; From b09cecd66158bdd3f4825a1b81efdc8fb26a423b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Thu, 29 Aug 2024 10:05:16 +0200 Subject: [PATCH 04/19] =?UTF-8?q?perf:=20=E2=9A=A1=EF=B8=8F=20Return=20ear?= =?UTF-8?q?ly=20if=20the=20element=20is=20hidden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/grid/index.ts | 4 ++-- src/features/mark/index.ts | 2 ++ src/features/measure/index.ts | 4 +++- src/features/spacing/index.ts | 3 +-- src/features/typography/index.ts | 4 ++-- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/features/grid/index.ts b/src/features/grid/index.ts index 78bdf979..e38add78 100644 --- a/src/features/grid/index.ts +++ b/src/features/grid/index.ts @@ -148,6 +148,8 @@ export const create = async ( export const element = async (targetElement: HTMLElement): Promise => { if (!targetElement) return; + if (isElementHidden(targetElement)) return; + const _areas_string: string = targetElement.getAttribute(SPECCER_DATA_ATTRIBUTE) || ''; const _target_style = await getStyles(targetElement); @@ -155,8 +157,6 @@ export const element = async (targetElement: HTMLElement): Promise => { if (_options.type !== 'grid' || !_options.grid) return; - if (isElementHidden(targetElement)) return; - await waitForFrame(); await create(targetElement, _target_style, _options); diff --git a/src/features/mark/index.ts b/src/features/mark/index.ts index 24a9d7f0..7eb8370b 100644 --- a/src/features/mark/index.ts +++ b/src/features/mark/index.ts @@ -50,6 +50,8 @@ export const create = (id: string, n = 'span'): HTMLElement => { export const element = async (targetElement: HTMLElement): Promise => { if (!targetElement) return; + if (isElementHidden(targetElement)) return; + const _areas_string: string = targetElement.getAttribute(SPECCER_DATA_ATTRIBUTE) || ''; diff --git a/src/features/measure/index.ts b/src/features/measure/index.ts index d81041cc..b4c6966d 100644 --- a/src/features/measure/index.ts +++ b/src/features/measure/index.ts @@ -66,6 +66,8 @@ export const create = ( export const element = async (targetElement: HTMLElement): Promise => { if (!targetElement) return; + if (isElementHidden(targetElement)) return; + const _areas_string: string = targetElement.getAttribute('data-speccer') || ''; @@ -75,7 +77,7 @@ export const element = async (targetElement: HTMLElement): Promise => { if (_options.type !== 'measure' || !_options.measure) return; - if (isElementHidden(targetElement)) return; + const { measure, position } = _options; await waitForFrame(); diff --git a/src/features/spacing/index.ts b/src/features/spacing/index.ts index 7638b47f..ee8fb556 100644 --- a/src/features/spacing/index.ts +++ b/src/features/spacing/index.ts @@ -56,10 +56,9 @@ export const create = ( export const element = async (targetElement: HTMLElement): Promise => { if (!targetElement) return; - const _target_styles = await getStyles(targetElement); - if (isElementHidden(targetElement)) return; + const _target_styles = await getStyles(targetElement); const _target_spacing_styles = getSpacing(_target_styles); const _target_pruned_spacing_styles = Object.keys( _target_spacing_styles diff --git a/src/features/typography/index.ts b/src/features/typography/index.ts index fbaf29ff..f0e6b23e 100644 --- a/src/features/typography/index.ts +++ b/src/features/typography/index.ts @@ -67,6 +67,8 @@ export const create = ( export const element = async (targetElement: HTMLElement): Promise => { if (!targetElement) return; + if (isElementHidden(targetElement)) return; + const _areas_string: string = targetElement.getAttribute('data-speccer') || ''; @@ -76,8 +78,6 @@ export const element = async (targetElement: HTMLElement): Promise => { if (_options.type !== 'typography' || !_options.typography) return; - if (isElementHidden(targetElement)) return; - targetElement.classList.add('is-specced'); const _html = await template( From 0962b6516c42f20f50cd0bf60565e60aad1f7ec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Thu, 29 Aug 2024 10:05:26 +0200 Subject: [PATCH 05/19] =?UTF-8?q?style:=20=F0=9F=92=84=20Format?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/__tests__/get-options.ts | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/utils/__tests__/get-options.ts b/src/utils/__tests__/get-options.ts index 731073e6..e1bcb4d7 100644 --- a/src/utils/__tests__/get-options.ts +++ b/src/utils/__tests__/get-options.ts @@ -10,7 +10,7 @@ describe('getOptions', () => { const areaString = 'pin'; const options = getOptions(areaString, mockTargetStyle); - assert.deepEqual(options,{ + assert.deepEqual(options, { slug: 'pin', // Assuming camelCase('pin') returns 'pin' position: 'top', type: 'pin', @@ -30,7 +30,7 @@ describe('getOptions', () => { const areaString = 'measure'; const options = getOptions(areaString, mockTargetStyle); - assert.deepEqual(options,{ + assert.deepEqual(options, { slug: 'measure', // Assuming camelCase('measure') returns 'measure' position: 'top', type: 'measure', @@ -46,7 +46,7 @@ describe('getOptions', () => { const areaString = 'typography'; const options = getOptions(areaString, mockTargetStyle); - assert.deepEqual(options,{ + assert.deepEqual(options, { slug: 'typography', // Assuming camelCase('typography') returns 'typography' position: 'top', type: 'typography', @@ -58,9 +58,12 @@ describe('getOptions', () => { it('should return options for a grid type with columns', () => { const areaString = 'grid columns'; - const options = getOptions(areaString, {...mockTargetStyle, display: 'grid'}); + const options = getOptions(areaString, { + ...mockTargetStyle, + display: 'grid' + }); - assert.deepEqual(options,{ + assert.deepEqual(options, { slug: 'gridColumns', // Assuming camelCase('grid columns') returns 'gridColumns' position: 'top', type: 'grid', @@ -72,9 +75,12 @@ describe('getOptions', () => { it('should return options for a grid type with rows', () => { const areaString = 'grid rows'; - const options = getOptions(areaString, {...mockTargetStyle, display: 'grid'}); + const options = getOptions(areaString, { + ...mockTargetStyle, + display: 'grid' + }); - assert.deepEqual(options,{ + assert.deepEqual(options, { slug: 'gridRows', // Assuming camelCase('grid rows') returns 'gridRows' position: 'top', type: 'grid', @@ -86,9 +92,12 @@ describe('getOptions', () => { it('should default to toggle both if no specific grid type is provided', () => { const areaString = 'grid'; - const options = getOptions(areaString, {...mockTargetStyle, display: 'grid'}); + const options = getOptions(areaString, { + ...mockTargetStyle, + display: 'grid' + }); - assert.deepEqual(options,{ + assert.deepEqual(options, { slug: 'grid', // Assuming camelCase('grid') returns 'grid' position: 'top', type: 'grid', From 79f532cdf7d7ab2e87282097ce98d1016e9054f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Thu, 29 Aug 2024 11:27:43 +0200 Subject: [PATCH 06/19] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20Rename=20funct?= =?UTF-8?q?ion,=20and=20move=20it=20to=20correct=20location?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This function can remove _any_ speccer element, not only pin elements --- src/features/pin/index.ts | 3 --- src/main.ts | 3 +++ .../unpin-element.ts => utils/remove-speccer-element.ts} | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) rename src/{features/pin/utils/unpin-element.ts => utils/remove-speccer-element.ts} (82%) diff --git a/src/features/pin/index.ts b/src/features/pin/index.ts index eb4f970b..8e182558 100644 --- a/src/features/pin/index.ts +++ b/src/features/pin/index.ts @@ -23,9 +23,6 @@ export { createPinElement } from './utils/create-pin-element'; // eslint-disable-next-line import/no-unused-modules export { pinElement } from './utils/pin-element'; -// eslint-disable-next-line import/no-unused-modules -export { unpinElement } from './utils/unpin-element'; - import { SPECCER_LITERALS } from '../../utils/constants'; import { getOptions } from '../../utils/get-options'; import { isElementHidden } from '../../utils/node'; diff --git a/src/main.ts b/src/main.ts index 9e28d298..d81a62e4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -46,6 +46,9 @@ import { } from './utils/constants'; import { removeAll } from './utils/node'; +// eslint-disable-next-line import/no-unused-modules +export { removeSpeccerElement } from './utils/remove-speccer-element'; + export const grid = { create: gridCreate, element: gridElement diff --git a/src/features/pin/utils/unpin-element.ts b/src/utils/remove-speccer-element.ts similarity index 82% rename from src/features/pin/utils/unpin-element.ts rename to src/utils/remove-speccer-element.ts index bc8974be..81c40b82 100644 --- a/src/features/pin/utils/unpin-element.ts +++ b/src/utils/remove-speccer-element.ts @@ -1,7 +1,7 @@ /** - * Unpins an HTML element by removing associated pin elements and SVG paths. + * Remove a speccer element by removing associated elements and SVG paths. * - * This function removes any pin elements linked to the specified element and + * This function removes any speccer elements linked to the specified element and * also removes any SVG paths that might be associated with it. * * @param {HTMLElement} el - The HTML element to unpin. @@ -11,11 +11,11 @@ * ```ts * const element = document.getElementById('my-element'); * if (element) { - * unpinElement(element); + * removeSpeccerElement(element); * } * ``` */ -export const unpinElement = (el: HTMLElement): void => { +export const removeSpeccerElement = (el: HTMLElement): void => { const _selector = el.getAttribute('data-speccer-element-id'); From b34036fa1180b1945927ba0f6153849546fc033e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:22:48 +0200 Subject: [PATCH 07/19] =?UTF-8?q?docs:=20=E2=9C=8F=EF=B8=8F=20Regenerate?= =?UTF-8?q?=20API=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/README.md | 3 +- api/config/browser.md | 10 +- api/features/a11y.md | 83 ++++++--- api/features/a11y/constants.md | 2 +- .../a11y/utils/create-a11y-element.md | 2 +- api/features/a11y/utils/styles.md | 2 +- api/features/grid.md | 73 ++++++-- api/features/mark.md | 45 ++++- api/features/measure.md | 86 +++++++-- api/features/pin.md | 13 +- api/features/pin/utils/create-pin-element.md | 2 +- .../pin/utils/get-character-to-use.md | 2 +- api/features/pin/utils/get-content-for-pin.md | 2 +- api/features/pin/utils/pin-element.md | 2 +- api/features/pin/utils/styles.md | 2 +- api/features/spacing.md | 74 +++++++- api/features/spacing/utils/position.md | 20 +- api/features/typography.md | 75 +++++++- api/features/typography/utils/position.md | 2 +- api/features/typography/utils/template.md | 2 +- api/main.md | 78 ++++---- api/types/bezier.md | 174 +++++++++++++++++- api/types/css.md | 2 +- api/types/debounce.md | 2 +- api/types/enums/area.md | 2 +- api/types/interfaces/attributes.md | 2 +- api/types/interfaces/classnames.md | 2 +- api/types/interfaces/global.md | 2 +- api/types/interfaces/position.md | 2 +- api/types/position.md | 2 +- api/types/speccer.md | 14 +- api/types/styles.md | 2 +- api/types/xy.md | 2 +- api/utils/angle.md | 2 +- api/utils/area.md | 2 +- api/utils/attributes.md | 2 +- api/utils/bezier.md | 79 ++------ api/utils/camel-case.md | 2 +- api/utils/cardinal.md | 2 +- api/utils/classes/DrawCircle.md | 2 +- api/utils/classes/DrawSVGCurlyBracket.md | 2 +- api/utils/classes/DrawSVGLine.md | 2 +- api/utils/classnames.md | 2 +- api/utils/constants.md | 2 +- api/utils/coords.md | 2 +- api/utils/css.md | 27 +-- api/utils/debounce.md | 2 +- api/utils/direction-of-element.md | 2 +- api/utils/get-coords-pair-from-objects.md | 2 +- api/utils/get-options.md | 19 +- api/utils/id.md | 2 +- api/utils/intrinsic-coords.md | 2 +- api/utils/node.md | 2 +- api/utils/number.md | 2 +- api/utils/position.md | 6 +- api/utils/remove-speccer-element.md | 67 +++++++ api/utils/resize.md | 2 +- api/utils/style-property.md | 2 +- api/utils/styles.md | 2 +- api/utils/typeof.md | 2 +- api/utils/wait.md | 2 +- api/utils/xy.md | 2 +- 62 files changed, 752 insertions(+), 282 deletions(-) create mode 100644 api/utils/remove-speccer-element.md diff --git a/api/README.md b/api/README.md index 165adf2c..2fe2829a 100644 --- a/api/README.md +++ b/api/README.md @@ -8,7 +8,7 @@ --- -> Last updated 2024-08-28T10:13:18.025Z +> Last updated 2024-08-30T19:21:42.296Z ## Modules @@ -66,6 +66,7 @@ - [utils/node](utils/node.md) - [utils/number](utils/number.md) - [utils/position](utils/position.md) +- [utils/remove-speccer-element](utils/remove-speccer-element.md) - [utils/resize](utils/resize.md) - [utils/style-property](utils/style-property.md) - [utils/styles](utils/styles.md) diff --git a/api/config/browser.md b/api/config/browser.md index 31b50663..28edb32b 100644 --- a/api/config/browser.md +++ b/api/config/browser.md @@ -6,7 +6,7 @@ # config/browser -> Last updated 2024-08-28T10:13:18.027Z +> Last updated 2024-08-30T19:21:42.299Z Contains the helper functions to activate SPECCER via a script tag, based on attributes: @@ -102,7 +102,7 @@ A function to activate speccer based on script attributes. #### Defined in -[config/browser.ts:156](https://github.com/phun-ky/speccer/blob/main/src/config/browser.ts#L156) +[config/browser.ts:217](https://github.com/phun-ky/speccer/blob/main/src/config/browser.ts#L217) --- @@ -133,7 +133,7 @@ A function to initialize speccer when the DOM is ready. #### Defined in -[config/browser.ts:69](https://github.com/phun-ky/speccer/blob/main/src/config/browser.ts#L69) +[config/browser.ts:81](https://github.com/phun-ky/speccer/blob/main/src/config/browser.ts#L81) --- @@ -158,7 +158,7 @@ A function to initialize lazy speccer functionality. #### Defined in -[config/browser.ts:87](https://github.com/phun-ky/speccer/blob/main/src/config/browser.ts#L87) +[config/browser.ts:99](https://github.com/phun-ky/speccer/blob/main/src/config/browser.ts#L99) --- @@ -189,7 +189,7 @@ A function to manually activate speccer. #### Defined in -[config/browser.ts:141](https://github.com/phun-ky/speccer/blob/main/src/config/browser.ts#L141) +[config/browser.ts:202](https://github.com/phun-ky/speccer/blob/main/src/config/browser.ts#L202) --- diff --git a/api/features/a11y.md b/api/features/a11y.md index 52671d55..6a51907a 100644 --- a/api/features/a11y.md +++ b/api/features/a11y.md @@ -6,10 +6,59 @@ # features/a11y -> Last updated 2024-08-28T10:13:18.031Z +> Last updated 2024-08-30T19:21:42.301Z + +This feature will highlight accessibility areas like landmarks and region. It can also display tab stops/sequence and any keyboard shortcuts assigned + +![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-a11y-tabstops-light.png?raw=true) + +## Table of Contents + +- [Example](#example) +- [Functions](#functions) + - [a11y()](#a11y) + - [element()](#element) + - [shortcut()](#shortcut) + +## Example + +Use the following code, either for html or js: + +```html +
+``` + +```ts +const targetElement = document.getElementById('target'); +a11y(targetElement); +``` ## Functions +### a11y() + +```ts +function a11y(): void; +``` + +Initializes the accessibility elements on the document. + +#### Returns + +`void` + +#### Example + +```ts +a11y(); +``` + +#### Defined in + +[features/a11y/index.ts:154](https://github.com/phun-ky/speccer/blob/main/src/features/a11y/index.ts#L154) + +--- + ### element() ```ts @@ -19,7 +68,7 @@ function element(targetEl, content?, type?): Promise; Adds an accessibility element to the document body based on the target element and type. ![Screenshot of speccer a11y tab stops in use](https://github.com/phun-ky/speccer/blob/main/public/speccer-a11y-tabstops-light.png?raw=true) -![Screenshot of speccer a11y landmark in use](https://github.com/phun-ky/speccer/blob/main/public/a11y-landmark.png?raw=true) +![Screenshot of speccer a11y landmark in use](https://github.com/phun-ky/speccer/blob/main/public/speccer-a11y-landmarks-light.png?raw=true) #### Parameters @@ -47,31 +96,7 @@ if (targetElement) { #### Defined in -[features/a11y/index.ts:34](https://github.com/phun-ky/speccer/blob/main/src/features/a11y/index.ts#L34) - ---- - -### init() - -```ts -function init(): void; -``` - -Initializes the accessibility elements on the document. - -#### Returns - -`void` - -#### Example - -```ts -init(); -``` - -#### Defined in - -[features/a11y/index.ts:129](https://github.com/phun-ky/speccer/blob/main/src/features/a11y/index.ts#L129) +[features/a11y/index.ts:59](https://github.com/phun-ky/speccer/blob/main/src/features/a11y/index.ts#L59) --- @@ -83,7 +108,7 @@ function shortcut(el, shortcutString): Promise; Adds a shortcut element to the document body based on the provided HTML element and shortcut string. -![Screenshot of speccer a11y shortcuts in use](https://github.com/phun-ky/speccer/blob/main/public/a11y-shortcut.png?raw=true) +![Screenshot of speccer a11y shortcuts in use](https://github.com/phun-ky/speccer/blob/main/public/speccer-a11y-shortcuts-light.png?raw=true) #### Parameters @@ -109,7 +134,7 @@ if (shortcutElement) { #### Defined in -[features/a11y/index.ts:77](https://github.com/phun-ky/speccer/blob/main/src/features/a11y/index.ts#L77) +[features/a11y/index.ts:102](https://github.com/phun-ky/speccer/blob/main/src/features/a11y/index.ts#L102) --- diff --git a/api/features/a11y/constants.md b/api/features/a11y/constants.md index a747c910..55630c46 100644 --- a/api/features/a11y/constants.md +++ b/api/features/a11y/constants.md @@ -6,7 +6,7 @@ # features/a11y/constants -> Last updated 2024-08-28T10:13:18.032Z +> Last updated 2024-08-30T19:21:42.302Z ## Variables diff --git a/api/features/a11y/utils/create-a11y-element.md b/api/features/a11y/utils/create-a11y-element.md index 1ee16e7f..a45b1633 100644 --- a/api/features/a11y/utils/create-a11y-element.md +++ b/api/features/a11y/utils/create-a11y-element.md @@ -6,7 +6,7 @@ # features/a11y/utils/create-a11y-element -> Last updated 2024-08-28T10:13:18.034Z +> Last updated 2024-08-30T19:21:42.303Z ## Functions diff --git a/api/features/a11y/utils/styles.md b/api/features/a11y/utils/styles.md index 11809875..77ca6097 100644 --- a/api/features/a11y/utils/styles.md +++ b/api/features/a11y/utils/styles.md @@ -6,7 +6,7 @@ # features/a11y/utils/styles -> Last updated 2024-08-28T10:13:18.034Z +> Last updated 2024-08-30T19:21:42.303Z ## Functions diff --git a/api/features/grid.md b/api/features/grid.md index 07cc572f..2f95ce88 100644 --- a/api/features/grid.md +++ b/api/features/grid.md @@ -6,7 +6,38 @@ # features/grid -> Last updated 2024-08-28T10:13:18.035Z +> Last updated 2024-08-30T19:21:42.303Z + +This feature will highlight the grid spacing in a `display: grid;` element. + +![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-light.png?raw=true) + +## Table of Contents + +- [Example](#example) +- [Functions](#functions) + - [create()](#create) + - [grid()](#grid) + +## Example + +Use the following code, either for html or js: + +```html +
+``` + +```ts +const targetElement = document.getElementById('target'); +const options = { + type: 'grid', + grid: { + toggle: 'both' + } +}; + +grid(targetElement, options); +``` ## Functions @@ -42,27 +73,28 @@ if (targetElement) { #### Defined in -[features/grid/index.ts:27](https://github.com/phun-ky/speccer/blob/main/src/features/grid/index.ts#L27) +[features/grid/index.ts:60](https://github.com/phun-ky/speccer/blob/main/src/features/grid/index.ts#L60) --- -### element() +### grid() ```ts -function element(targetElement): Promise; +function grid(targetElement, options?): Promise; ``` Create a visual overlay to present the column gaps for a grid container Adds a visual grid overlay to the target element if it has the appropriate data attribute and is a grid. -![grid](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-dark.png?raw=true) +![grid](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-light.png?raw=true) #### Parameters -| Parameter | Type | Description | -| --------------- | ----------------------------------------------------------------------- | ---------------------------------------------- | -| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element to add the grid overlay to. | +| Parameter | Type | Description | +| --------------- | ------------------------------------------------------------------------ | ---------------------------------------------- | +| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element to add the grid overlay to. | +| `options`? | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | Options. | #### Returns @@ -74,16 +106,29 @@ A promise that resolves once the overlay has been added. ```ts const targetElement = document.getElementById('target'); -if (targetElement) { - element(targetElement).then(() => { - console.log('Grid overlay added'); - }); -} + +grid(targetElement); +``` + +##### Only rows + +![grid](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-dark.png?raw=true) + +```ts +const targetElement = document.getElementById('target'); +const options = { + type: 'grid', + grid: { + toggle: 'rows' + } +}; + +grid(targetElement, options); ``` #### Defined in -[features/grid/index.ts:142](https://github.com/phun-ky/speccer/blob/main/src/features/grid/index.ts#L142) +[features/grid/index.ts:194](https://github.com/phun-ky/speccer/blob/main/src/features/grid/index.ts#L194) --- diff --git a/api/features/mark.md b/api/features/mark.md index e35be246..a7714551 100644 --- a/api/features/mark.md +++ b/api/features/mark.md @@ -6,14 +6,42 @@ # features/mark -> Last updated 2024-08-28T10:13:18.036Z +> Last updated 2024-08-30T19:21:42.304Z + +This feature marks given element + +![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-pin-mark-light.png?raw=true) + +## Table of Contents + +- [Example](#example) +- [Functions](#functions) + - [create()](#create) + - [mark()](#mark) + +## Example + +Use the following code, either for html or js: + +```html +
+``` + +```ts +const targetElement = document.getElementById('target'); +const options = { + type: 'mark' +}; + +mark(targetElement, options); +``` ## Functions ### create() ```ts -function create(n): HTMLElement; +function create(id, n): HTMLElement; ``` Create a marker element with an optional element type. @@ -22,6 +50,7 @@ Create a marker element with an optional element type. | Parameter | Type | Default value | Description | | --------- | -------- | ------------- | ----------------- | +| `id` | `string` | `undefined` | The id. | | `n` | `string` | `'span'` | The element type. | #### Returns @@ -39,19 +68,19 @@ document.body.appendChild(marker); #### Defined in -[features/mark/index.ts:22](https://github.com/phun-ky/speccer/blob/main/src/features/mark/index.ts#L22) +[features/mark/index.ts:53](https://github.com/phun-ky/speccer/blob/main/src/features/mark/index.ts#L53) --- -### element() +### mark() ```ts -function element(targetElement): Promise; +function mark(targetElement): Promise; ``` Create a marker element and add it to the body with styles matching a specified element. -![mark](https://github.com/phun-ky/speccer/blob/main/public/mark.png?raw=true) +![mark](https://github.com/phun-ky/speccer/blob/main/public/speccer-pin-mark-light.png?raw=true) #### Parameters @@ -69,12 +98,12 @@ Create a marker element and add it to the body with styles matching a specified ```typescript const targetElement = document.getElementById('target'); -element(targetElement); +mark(targetElement); ``` #### Defined in -[features/mark/index.ts:45](https://github.com/phun-ky/speccer/blob/main/src/features/mark/index.ts#L45) +[features/mark/index.ts:79](https://github.com/phun-ky/speccer/blob/main/src/features/mark/index.ts#L79) --- diff --git a/api/features/measure.md b/api/features/measure.md index 7b6a52ea..235e5bb1 100644 --- a/api/features/measure.md +++ b/api/features/measure.md @@ -6,14 +6,50 @@ # features/measure -> Last updated 2024-08-28T10:13:18.037Z +> Last updated 2024-08-30T19:21:42.304Z + +This feature measures given element + +![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-pin-measure-height-light.png?raw=true) + +## Table of Contents + +- [Example](#example) +- [Functions](#functions) + - [create()](#create) + - [measure()](#measure) + +## Example + +Use the following code, either for html or js: + +```html +
+ … +
+``` + +```ts +const targetElement = document.getElementById('target'); +const options = { + position: 'right', + measure: { + height: true + } +}; + +measure(targetElement, options); +``` ## Functions ### create() ```ts -function create(text, options, tag): HTMLElement; +function create(text, options, id, tag): HTMLElement; ``` Create a measurement element with optional text, area, and element type. @@ -24,6 +60,7 @@ Create a measurement element with optional text, area, and element type. | --------- | ------------------------------------------------------------------------ | ------------- | ----------------------------------- | | `text` | `string` \| `number` | `''` | The text to display on the element. | | `options` | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | `undefined` | The options. | +| `id` | `string` | `undefined` | The element id. | | `tag` | `string` | `'span'` | The element type. | #### Returns @@ -41,25 +78,26 @@ document.body.appendChild(measurement); #### Defined in -[features/measure/index.ts:25](https://github.com/phun-ky/speccer/blob/main/src/features/measure/index.ts#L25) +[features/measure/index.ts:59](https://github.com/phun-ky/speccer/blob/main/src/features/measure/index.ts#L59) --- -### element() +### measure() ```ts -function element(targetElement): Promise; +function measure(targetElement, options?): Promise; ``` Create a measurement element and add it to the body with styles matching a specified target element based on the attribute values from `data-speccer`. -![measure](https://github.com/phun-ky/speccer/blob/main/public/measure.png?raw=true) +![measure](https://github.com/phun-ky/speccer/blob/main/public/speccer-measure-right-full-light.png?raw=true) #### Parameters -| Parameter | Type | Description | -| --------------- | ----------------------------------------------------------------------- | ---------------------------------------- | -| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element to match styles with. | +| Parameter | Type | Description | +| --------------- | ------------------------------------------------------------------------ | ---------------------------------------- | +| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element to match styles with. | +| `options`? | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | Options. | #### Returns @@ -69,14 +107,40 @@ Create a measurement element and add it to the body with styles matching a speci #### Example +##### Height to the right + +```ts +const targetElement = document.getElementById('target'); +const options = { + position: 'right', + measure: { + height: true + } +}; + +measure(targetElement, options); +``` + +##### Slim width to the bottom + +![measure](https://github.com/phun-ky/speccer/blob/main/public/speccer-measure-bottom-dark.png?raw=true) + ```ts const targetElement = document.getElementById('target'); -element(targetElement); +const options = { + position: 'bottom', + measure: { + slim: true, + width: true + } +}; + +measure(targetElement, options); ``` #### Defined in -[features/measure/index.ts:62](https://github.com/phun-ky/speccer/blob/main/src/features/measure/index.ts#L62) +[features/measure/index.ts:125](https://github.com/phun-ky/speccer/blob/main/src/features/measure/index.ts#L125) --- diff --git a/api/features/pin.md b/api/features/pin.md index 98b826f2..76e5e1c0 100644 --- a/api/features/pin.md +++ b/api/features/pin.md @@ -6,7 +6,7 @@ # features/pin -> Last updated 2024-08-28T10:13:18.037Z +> Last updated 2024-08-30T19:21:42.305Z This feature highlights the anatomy of an element. @@ -49,16 +49,17 @@ Re-exports [pinElement](pin/utils/pin-element.md#pinelement) ### pinElements() ```ts -function pinElements(sectionElement): Promise; +function pinElements(sectionElement, options?): Promise; ``` Create pinned elements based on the section element and its data-speccer attributes. #### Parameters -| Parameter | Type | Description | -| ---------------- | ----------------------------------------------------------------------- | ----------------------------------------------- | -| `sectionElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The section element containing pinned elements. | +| Parameter | Type | Description | +| ---------------- | ------------------------------------------------------------------------ | ----------------------------------------------- | +| `sectionElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The section element containing pinned elements. | +| `options`? | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | Options. | #### Returns @@ -75,7 +76,7 @@ pinElements(sectionElement); #### Defined in -[features/pin/index.ts:47](https://github.com/phun-ky/speccer/blob/main/src/features/pin/index.ts#L47) +[features/pin/index.ts:49](https://github.com/phun-ky/speccer/blob/main/src/features/pin/index.ts#L49) --- diff --git a/api/features/pin/utils/create-pin-element.md b/api/features/pin/utils/create-pin-element.md index d4fdfb60..f7600dd0 100644 --- a/api/features/pin/utils/create-pin-element.md +++ b/api/features/pin/utils/create-pin-element.md @@ -6,7 +6,7 @@ # features/pin/utils/create-pin-element -> Last updated 2024-08-28T10:13:18.038Z +> Last updated 2024-08-30T19:21:42.306Z ## Functions diff --git a/api/features/pin/utils/get-character-to-use.md b/api/features/pin/utils/get-character-to-use.md index e671812e..27697ef3 100644 --- a/api/features/pin/utils/get-character-to-use.md +++ b/api/features/pin/utils/get-character-to-use.md @@ -6,7 +6,7 @@ # features/pin/utils/get-character-to-use -> Last updated 2024-08-28T10:13:18.039Z +> Last updated 2024-08-30T19:21:42.306Z ## Functions diff --git a/api/features/pin/utils/get-content-for-pin.md b/api/features/pin/utils/get-content-for-pin.md index 3728210b..7aee7a3b 100644 --- a/api/features/pin/utils/get-content-for-pin.md +++ b/api/features/pin/utils/get-content-for-pin.md @@ -6,7 +6,7 @@ # features/pin/utils/get-content-for-pin -> Last updated 2024-08-28T10:13:18.039Z +> Last updated 2024-08-30T19:21:42.306Z ## Functions diff --git a/api/features/pin/utils/pin-element.md b/api/features/pin/utils/pin-element.md index 838bc801..a6f5ca53 100644 --- a/api/features/pin/utils/pin-element.md +++ b/api/features/pin/utils/pin-element.md @@ -6,7 +6,7 @@ # features/pin/utils/pin-element -> Last updated 2024-08-28T10:13:18.040Z +> Last updated 2024-08-30T19:21:42.306Z ## Functions diff --git a/api/features/pin/utils/styles.md b/api/features/pin/utils/styles.md index 6efd99bd..143eb4d3 100644 --- a/api/features/pin/utils/styles.md +++ b/api/features/pin/utils/styles.md @@ -6,7 +6,7 @@ # features/pin/utils/styles -> Last updated 2024-08-28T10:13:18.040Z +> Last updated 2024-08-30T19:21:42.307Z ## Functions diff --git a/api/features/spacing.md b/api/features/spacing.md index 29b3c41a..20f3dfe0 100644 --- a/api/features/spacing.md +++ b/api/features/spacing.md @@ -6,7 +6,31 @@ # features/spacing -> Last updated 2024-08-28T10:13:18.041Z +> Last updated 2024-08-30T19:21:42.307Z + +This feature highlights the spacing of an element. + +![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-spacing-dark.png?raw=true) \* + +## Table of Contents + +- [Example](#example) +- [Functions](#functions) + - [create()](#create) + - [spacing()](#spacing) + +## Example + +Use the following code, either for html or js: + +```html +
+``` + +```ts +const targetElement = document.getElementById('target'); +element(targetElement); +``` ## Functions @@ -40,25 +64,26 @@ document.body.appendChild(spacingElement); #### Defined in -[features/spacing/index.ts:27](https://github.com/phun-ky/speccer/blob/main/src/features/spacing/index.ts#L27) +[features/spacing/index.ts:52](https://github.com/phun-ky/speccer/blob/main/src/features/spacing/index.ts#L52) --- -### element() +### spacing() ```ts -function element(targetElement): Promise; +function spacing(targetElement, options?): Promise; ``` Create and position spacing elements based on the target element's computed spacing styles. -![spacing](https://github.com/phun-ky/speccer/blob/main/public/spacing.png?raw=true) +![spacing](https://github.com/phun-ky/speccer/blob/main/public/speccer-spacing-light.png?raw=true) #### Parameters -| Parameter | Type | Description | -| --------------- | ----------------------------------------------------------------------- | -------------------------------------------------- | -| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element to create spacing elements for. | +| Parameter | Type | Description | +| --------------- | ------------------------------------------------------------------------ | -------------------------------------------------- | +| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element to create spacing elements for. | +| `options`? | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | Options | #### Returns @@ -68,14 +93,45 @@ Create and position spacing elements based on the target element's computed spac #### Example +##### Default, padding and margin + ```ts const targetElement = document.getElementById('target'); element(targetElement); ``` +##### Only padding + +````ts +const targetElement = document.getElementById('target'); +const options = { + spacing: { + padding: true + } +}; + +element(targetElement, options); + +##### Bound style, like the old feature + +![spacing](https://github.com/phun-ky/speccer/blob/main/public/speccer-spacing-bound.png?raw=true) + +This option binds the speccer elements to the bounds of the element container. + +```ts +const targetElement = document.getElementById('target'); +const options = { + spacing: { + bound: true, + } +}; + +element(targetElement, options); +```` + #### Defined in -[features/spacing/index.ts:55](https://github.com/phun-ky/speccer/blob/main/src/features/spacing/index.ts#L55) +[features/spacing/index.ts:113](https://github.com/phun-ky/speccer/blob/main/src/features/spacing/index.ts#L113) --- diff --git a/api/features/spacing/utils/position.md b/api/features/spacing/utils/position.md index d091d80f..dc47e818 100644 --- a/api/features/spacing/utils/position.md +++ b/api/features/spacing/utils/position.md @@ -6,7 +6,7 @@ # features/spacing/utils/position -> Last updated 2024-08-28T10:13:18.043Z +> Last updated 2024-08-30T19:21:42.307Z ## Functions @@ -17,7 +17,8 @@ function position( property, value, spacingElement, - targetElement + targetElement, + options? ): Promise; ``` @@ -25,12 +26,13 @@ Set the position and dimensions of a spacing element relative to a target elemen #### Parameters -| Parameter | Type | Description | -| ---------------- | ----------------------------------------------------------------------- | ---------------------------------------------------------------- | -| `property` | `string` | The CSS property to set (e.g., 'marginTop', 'marginLeft', etc.). | -| `value` | `number` | The value of the CSS property. | -| `spacingElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The spacing element. | -| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element. | +| Parameter | Type | Description | +| ---------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------- | +| `property` | `string` | The CSS property to set (e.g., 'marginTop', 'marginLeft', etc.). | +| `value` | `number` | The value of the CSS property. | +| `spacingElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The spacing element. | +| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element. | +| `options`? | [`SpeccerOptionsInterface`](../../../types/speccer.md#specceroptionsinterface) | Options. | #### Returns @@ -48,7 +50,7 @@ position('marginTop', 20, spacingElement, targetElement); #### Defined in -[features/spacing/utils/position.ts:21](https://github.com/phun-ky/speccer/blob/main/src/features/spacing/utils/position.ts#L21) +[features/spacing/utils/position.ts:23](https://github.com/phun-ky/speccer/blob/main/src/features/spacing/utils/position.ts#L23) --- diff --git a/api/features/typography.md b/api/features/typography.md index a7beba3d..dd3f2481 100644 --- a/api/features/typography.md +++ b/api/features/typography.md @@ -6,14 +6,48 @@ # features/typography -> Last updated 2024-08-28T10:13:18.043Z +> Last updated 2024-08-30T19:21:42.307Z + +This feature presents typography + +![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-typography-light.png?raw=true) + +## Table of Contents + +- [Example](#example) +- [Functions](#functions) + - [create()](#create) + - [typography()](#typography) + +## Example + +Use the following code, either for html or js: + +```html +
+ … +
+``` + +```ts +const targetElement = document.getElementById('target'); +const options = { + position: 'right', + type: 'typography', + typography: { + useSyntaxHighlighting: false + } +}; + +typography(targetElement, options); +``` ## Functions ### create() ```ts -function create(html, options): HTMLElement; +function create(html, options, id): HTMLElement; ``` Create a DOM element with provided HTML and optional CSS class names. @@ -24,6 +58,7 @@ Create a DOM element with provided HTML and optional CSS class names. | --------- | ------------------------------------------------------------------------ | -------------------------------------------------- | | `html` | `string` | The HTML content to be set in the created element. | | `options` | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | Options. | +| `id` | `string` | The id. | #### Returns @@ -42,25 +77,26 @@ document.body.appendChild(createdElement); #### Defined in -[features/typography/index.ts:28](https://github.com/phun-ky/speccer/blob/main/src/features/typography/index.ts#L28) +[features/typography/index.ts:63](https://github.com/phun-ky/speccer/blob/main/src/features/typography/index.ts#L63) --- -### element() +### typography() ```ts -function element(targetElement): Promise; +function typography(targetElement, options?): Promise; ``` Create a specced typography element for a given target element. -![typography](https://github.com/phun-ky/speccer/blob/main/public/typography.png?raw=true) +![typography](https://github.com/phun-ky/speccer/blob/main/public/speccer-typography-light.png?raw=true) #### Parameters -| Parameter | Type | Description | -| --------------- | ----------------------------------------------------------------------- | ------------------------------------------- | -| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element to specc typography for. | +| Parameter | Type | Description | +| --------------- | ------------------------------------------------------------------------ | ------------------------------------------- | +| `targetElement` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The target element to specc typography for. | +| `options`? | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | Custom options | #### Returns @@ -70,6 +106,8 @@ Create a specced typography element for a given target element. #### Example +##### Default + ```ts const targetElement = document.querySelector('.target'); if (targetElement) { @@ -77,9 +115,26 @@ if (targetElement) { } ``` +##### With syntax higlight feature + +![typography](https://github.com/phun-ky/speccer/blob/main/public/speccer-typography-syntax-light.png?raw=true) + +```ts +const targetElement = document.querySelector('.target'); +const options = { + typography: { + useSyntaxHighlighting: true + } +}; + +if (targetElement) { + element(targetElement, options); +} +``` + #### Defined in -[features/typography/index.ts:62](https://github.com/phun-ky/speccer/blob/main/src/features/typography/index.ts#L62) +[features/typography/index.ts:121](https://github.com/phun-ky/speccer/blob/main/src/features/typography/index.ts#L121) --- diff --git a/api/features/typography/utils/position.md b/api/features/typography/utils/position.md index 03a9dd21..7b87b18a 100644 --- a/api/features/typography/utils/position.md +++ b/api/features/typography/utils/position.md @@ -6,7 +6,7 @@ # features/typography/utils/position -> Last updated 2024-08-28T10:13:18.044Z +> Last updated 2024-08-30T19:21:42.308Z ## Functions diff --git a/api/features/typography/utils/template.md b/api/features/typography/utils/template.md index ead33e0b..c8b00ab6 100644 --- a/api/features/typography/utils/template.md +++ b/api/features/typography/utils/template.md @@ -6,7 +6,7 @@ # features/typography/utils/template -> Last updated 2024-08-28T10:13:18.045Z +> Last updated 2024-08-30T19:21:42.308Z ## Functions diff --git a/api/main.md b/api/main.md index 5a7a6dc4..36c9aca8 100644 --- a/api/main.md +++ b/api/main.md @@ -6,11 +6,13 @@ # main -> Last updated 2024-08-28T10:13:18.045Z +> Last updated 2024-08-30T19:21:42.308Z ## Table of Contents - [Examples](#examples) +- [References](#references) + - [removeSpeccerElement](#removespeccerelement) - [Variables](#variables) - [grid](#grid) - [mark](#mark) @@ -37,6 +39,12 @@ speccer(); ``` +## References + +### removeSpeccerElement + +Re-exports [removeSpeccerElement](utils/remove-speccer-element.md#removespeccerelement) + ## Variables ### grid @@ -75,7 +83,7 @@ gridCreate -[main.ts:50](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L50) +[main.ts:53](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L53) @@ -87,7 +95,7 @@ gridCreate -(`targetElement`) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> +(`targetElement`, `options`?) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> @@ -97,7 +105,7 @@ gridElement -[main.ts:51](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L51) +[main.ts:54](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L54) @@ -105,7 +113,7 @@ gridElement #### Defined in -[main.ts:49](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L49) +[main.ts:52](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L52) --- @@ -135,7 +143,7 @@ const mark: { -(`n`) => [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) +(`id`, `n`) => [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) @@ -145,7 +153,7 @@ markCreate -[main.ts:71](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L71) +[main.ts:74](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L74) @@ -167,7 +175,7 @@ markElement -[main.ts:72](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L72) +[main.ts:75](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L75) @@ -175,7 +183,7 @@ markElement #### Defined in -[main.ts:70](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L70) +[main.ts:73](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L73) --- @@ -205,7 +213,7 @@ const measure: { -(`text`, `options`, `tag`) => [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) +(`text`, `options`, `id`, `tag`) => [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) @@ -215,7 +223,7 @@ measureCreate -[main.ts:66](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L66) +[main.ts:69](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L69) @@ -227,7 +235,7 @@ measureCreate -(`targetElement`) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> +(`targetElement`, `options`?) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> @@ -237,7 +245,7 @@ measureElement -[main.ts:67](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L67) +[main.ts:70](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L70) @@ -245,7 +253,7 @@ measureElement #### Defined in -[main.ts:65](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L65) +[main.ts:68](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L68) --- @@ -281,7 +289,7 @@ const modes: { -[main.ts:84](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L84) +[main.ts:87](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L87) @@ -298,7 +306,7 @@ const modes: { -[main.ts:81](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L81) +[main.ts:84](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L84) @@ -315,7 +323,7 @@ const modes: { -[main.ts:82](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L82) +[main.ts:85](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L85) @@ -332,7 +340,7 @@ const modes: { -[main.ts:83](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L83) +[main.ts:86](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L86) @@ -340,7 +348,7 @@ const modes: { #### Defined in -[main.ts:80](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L80) +[main.ts:83](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L83) --- @@ -355,7 +363,7 @@ const pin: { content, options ) => Promise; - pinElements: (sectionElement) => Promise; + pinElements: (sectionElement, options?) => Promise; }; ``` @@ -380,7 +388,7 @@ const pin: { -[main.ts:60](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L60) +[main.ts:63](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L63) @@ -397,7 +405,7 @@ const pin: { -[main.ts:61](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L61) +[main.ts:64](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L64) @@ -409,12 +417,12 @@ const pin: { -(`sectionElement`) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> +(`sectionElement`, `options`?) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> -[main.ts:62](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L62) +[main.ts:65](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L65) @@ -422,7 +430,7 @@ const pin: { #### Defined in -[main.ts:59](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L59) +[main.ts:62](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L62) --- @@ -462,7 +470,7 @@ spacingCreate -[main.ts:55](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L55) +[main.ts:58](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L58) @@ -474,7 +482,7 @@ spacingCreate -(`targetElement`) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> +(`targetElement`, `options`?) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> @@ -484,7 +492,7 @@ spacingElement -[main.ts:56](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L56) +[main.ts:59](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L59) @@ -492,7 +500,7 @@ spacingElement #### Defined in -[main.ts:54](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L54) +[main.ts:57](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L57) --- @@ -522,7 +530,7 @@ const typography: { -(`html`, `options`) => [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) +(`html`, `options`, `id`) => [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) @@ -532,7 +540,7 @@ typographyCreate -[main.ts:76](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L76) +[main.ts:79](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L79) @@ -544,7 +552,7 @@ typographyCreate -(`targetElement`) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> +(`targetElement`, `options`?) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`> @@ -554,7 +562,7 @@ typographyElement -[main.ts:77](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L77) +[main.ts:80](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L80) @@ -562,7 +570,7 @@ typographyElement #### Defined in -[main.ts:75](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L75) +[main.ts:78](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L78) ## Functions @@ -578,7 +586,7 @@ function speccer(): void; #### Defined in -[main.ts:87](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L87) +[main.ts:90](https://github.com/phun-ky/speccer/blob/main/src/main.ts#L90) --- diff --git a/api/types/bezier.md b/api/types/bezier.md index 5dd454f5..c5edae4d 100644 --- a/api/types/bezier.md +++ b/api/types/bezier.md @@ -6,7 +6,7 @@ # types/bezier -> Last updated 2024-08-28T10:13:18.048Z +> Last updated 2024-08-30T19:21:42.310Z ## Type Aliases @@ -82,6 +82,160 @@ The second position. --- +### CoordinatesForBezierObjectType + +```ts +type CoordinatesForBezierObjectType: { + firstControl: CoordinatesType; + firstPoint: CoordinatesType; + lastControl: CoordinatesType; + lastPoint: CoordinatesType; +}; +``` + +#### Type declaration + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefined in
+ +`firstControl` + + + +[`CoordinatesType`](bezier.md#coordinatestype) + + + +[types/bezier.ts:48](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L48) + +
+ +`firstPoint` + + + +[`CoordinatesType`](bezier.md#coordinatestype) + + + +[types/bezier.ts:47](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L47) + +
+ +`lastControl` + + + +[`CoordinatesType`](bezier.md#coordinatestype) + + + +[types/bezier.ts:50](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L50) + +
+ +`lastPoint` + + + +[`CoordinatesType`](bezier.md#coordinatestype) + + + +[types/bezier.ts:49](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L49) + +
+ +#### Defined in + +[types/bezier.ts:46](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L46) + +--- + +### CoordinatesType + +```ts +type CoordinatesType: { + x: number; + y: number; +}; +``` + +#### Type declaration + + + + + + + + + + + + + + + + + +
NameTypeDefined in
+ +`x` + + + +`number` + + + +[types/bezier.ts:42](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L42) + +
+ +`y` + + + +`number` + + + +[types/bezier.ts:43](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L43) + +
+ +#### Defined in + +[types/bezier.ts:41](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L41) + +--- + ### CreateCoordinatesForCurveCoordParamType ```ts @@ -122,7 +276,7 @@ The x-coordinate of the first point. -[types/bezier.ts:48](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L48) +[types/bezier.ts:60](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L60) @@ -144,7 +298,7 @@ The x-coordinate of the second point. -[types/bezier.ts:53](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L53) +[types/bezier.ts:65](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L65) @@ -166,7 +320,7 @@ The y-coordinate of the first point. -[types/bezier.ts:58](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L58) +[types/bezier.ts:70](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L70) @@ -188,7 +342,7 @@ The y-coordinate of the second point. -[types/bezier.ts:63](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L63) +[types/bezier.ts:75](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L75) @@ -196,7 +350,7 @@ The y-coordinate of the second point. #### Defined in -[types/bezier.ts:44](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L44) +[types/bezier.ts:56](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L56) --- @@ -239,7 +393,7 @@ Indicates whether the curve is direct. -[types/bezier.ts:73](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L73) +[types/bezier.ts:85](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L85) @@ -261,7 +415,7 @@ The direction of the curve. -[types/bezier.ts:83](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L83) +[types/bezier.ts:95](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L95) @@ -283,7 +437,7 @@ Indicates if this is the first set of coordinates. -[types/bezier.ts:78](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L78) +[types/bezier.ts:90](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L90) @@ -291,7 +445,7 @@ Indicates if this is the first set of coordinates. #### Defined in -[types/bezier.ts:69](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L69) +[types/bezier.ts:81](https://github.com/phun-ky/speccer/blob/main/src/types/bezier.ts#L81) --- diff --git a/api/types/css.md b/api/types/css.md index edb9fbe5..b9c66d4e 100644 --- a/api/types/css.md +++ b/api/types/css.md @@ -6,7 +6,7 @@ # types/css -> Last updated 2024-08-28T10:13:18.049Z +> Last updated 2024-08-30T19:21:42.311Z ## Type Aliases diff --git a/api/types/debounce.md b/api/types/debounce.md index 732197f2..9cb04e71 100644 --- a/api/types/debounce.md +++ b/api/types/debounce.md @@ -6,7 +6,7 @@ # types/debounce -> Last updated 2024-08-28T10:13:18.049Z +> Last updated 2024-08-30T19:21:42.311Z ## Type Aliases diff --git a/api/types/enums/area.md b/api/types/enums/area.md index 3b0ac26a..63025dbe 100644 --- a/api/types/enums/area.md +++ b/api/types/enums/area.md @@ -6,7 +6,7 @@ # types/enums/area -> Last updated 2024-08-28T10:13:18.050Z +> Last updated 2024-08-30T19:21:42.311Z ## Enumerations diff --git a/api/types/interfaces/attributes.md b/api/types/interfaces/attributes.md index 5a0afd6b..6ae049a3 100644 --- a/api/types/interfaces/attributes.md +++ b/api/types/interfaces/attributes.md @@ -6,7 +6,7 @@ # types/interfaces/attributes -> Last updated 2024-08-28T10:13:18.051Z +> Last updated 2024-08-30T19:21:42.312Z ## Interfaces diff --git a/api/types/interfaces/classnames.md b/api/types/interfaces/classnames.md index 7eb6a3d7..a2c522cf 100644 --- a/api/types/interfaces/classnames.md +++ b/api/types/interfaces/classnames.md @@ -6,7 +6,7 @@ # types/interfaces/classnames -> Last updated 2024-08-28T10:13:18.051Z +> Last updated 2024-08-30T19:21:42.312Z ## Type Aliases diff --git a/api/types/interfaces/global.md b/api/types/interfaces/global.md index cec91bdd..201fa7ff 100644 --- a/api/types/interfaces/global.md +++ b/api/types/interfaces/global.md @@ -6,7 +6,7 @@ # types/interfaces/global -> Last updated 2024-08-28T10:13:18.051Z +> Last updated 2024-08-30T19:21:42.312Z ## Interfaces diff --git a/api/types/interfaces/position.md b/api/types/interfaces/position.md index fbbe58b8..b4a6e1ba 100644 --- a/api/types/interfaces/position.md +++ b/api/types/interfaces/position.md @@ -6,7 +6,7 @@ # types/interfaces/position -> Last updated 2024-08-28T10:13:18.052Z +> Last updated 2024-08-30T19:21:42.313Z ## Interfaces diff --git a/api/types/position.md b/api/types/position.md index 957de9b6..126f8383 100644 --- a/api/types/position.md +++ b/api/types/position.md @@ -6,7 +6,7 @@ # types/position -> Last updated 2024-08-28T10:13:18.053Z +> Last updated 2024-08-30T19:21:42.313Z ## Type Aliases diff --git a/api/types/speccer.md b/api/types/speccer.md index 3e03953f..11876fab 100644 --- a/api/types/speccer.md +++ b/api/types/speccer.md @@ -6,7 +6,7 @@ # types/speccer -> Last updated 2024-08-28T10:13:18.053Z +> Last updated 2024-08-30T19:21:42.313Z ## Table of Contents @@ -25,8 +25,11 @@ | Property | Type | Defined in | | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `grid?` | \{ `toggle`: `string`; } | [types/speccer.ts:34](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L34) | -| `grid.toggle` | `string` | [types/speccer.ts:35](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L35) | +| `grid?` | \{ `both`: `boolean`; `columns`: `boolean`; `rows`: `boolean`; `toggle`: `string`; } | [types/speccer.ts:40](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L40) | +| `grid.both?` | `boolean` | [types/speccer.ts:42](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L42) | +| `grid.columns?` | `boolean` | [types/speccer.ts:44](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L44) | +| `grid.rows?` | `boolean` | [types/speccer.ts:43](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L43) | +| `grid.toggle` | `string` | [types/speccer.ts:41](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L41) | | `measure?` | \{ `height`: `boolean`; `slim`: `boolean`; `width`: `boolean`; } | [types/speccer.ts:26](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L26) | | `measure.height` | `boolean` | [types/speccer.ts:28](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L28) | | `measure.slim` | `boolean` | [types/speccer.ts:27](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L27) | @@ -41,6 +44,11 @@ | `pin.useSVGLine` | `boolean` | [types/speccer.ts:23](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L23) | | `position` | [`SpeccerPositionType`](speccer.md#speccerpositiontype) | [types/speccer.ts:15](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L15) | | `slug` | `string` | [types/speccer.ts:14](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L14) | +| `spacing?` | \{ `both`: `boolean`; `bound`: `boolean`; `margin`: `boolean`; `padding`: `boolean`; } | [types/speccer.ts:34](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L34) | +| `spacing.both?` | `boolean` | [types/speccer.ts:37](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L37) | +| `spacing.bound?` | `boolean` | [types/speccer.ts:38](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L38) | +| `spacing.margin?` | `boolean` | [types/speccer.ts:35](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L35) | +| `spacing.padding?` | `boolean` | [types/speccer.ts:36](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L36) | | `type` | [`SpeccerFeatureType`](speccer.md#speccerfeaturetype) | [types/speccer.ts:16](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L16) | | `typography?` | \{ `useSyntaxHighlighting`: `boolean`; } | [types/speccer.ts:31](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L31) | | `typography.useSyntaxHighlighting` | `boolean` | [types/speccer.ts:32](https://github.com/phun-ky/speccer/blob/main/src/types/speccer.ts#L32) | diff --git a/api/types/styles.md b/api/types/styles.md index b6d3b08d..25b91b1b 100644 --- a/api/types/styles.md +++ b/api/types/styles.md @@ -6,7 +6,7 @@ # types/styles -> Last updated 2024-08-28T10:13:18.054Z +> Last updated 2024-08-30T19:21:42.314Z ## Type Aliases diff --git a/api/types/xy.md b/api/types/xy.md index 6296df74..0b900f7e 100644 --- a/api/types/xy.md +++ b/api/types/xy.md @@ -6,7 +6,7 @@ # types/xy -> Last updated 2024-08-28T10:13:18.054Z +> Last updated 2024-08-30T19:21:42.314Z ## Interfaces diff --git a/api/utils/angle.md b/api/utils/angle.md index 60fd9a3e..fc946813 100644 --- a/api/utils/angle.md +++ b/api/utils/angle.md @@ -6,7 +6,7 @@ # utils/angle -> Last updated 2024-08-28T10:13:18.054Z +> Last updated 2024-08-30T19:21:42.314Z ## Functions diff --git a/api/utils/area.md b/api/utils/area.md index 59ca09b0..99e2cebf 100644 --- a/api/utils/area.md +++ b/api/utils/area.md @@ -6,7 +6,7 @@ # utils/area -> Last updated 2024-08-28T10:13:18.055Z +> Last updated 2024-08-30T19:21:42.314Z ## Functions diff --git a/api/utils/attributes.md b/api/utils/attributes.md index 385a0c46..77641b54 100644 --- a/api/utils/attributes.md +++ b/api/utils/attributes.md @@ -6,7 +6,7 @@ # utils/attributes -> Last updated 2024-08-28T10:13:18.056Z +> Last updated 2024-08-30T19:21:42.315Z ## Functions diff --git a/api/utils/bezier.md b/api/utils/bezier.md index a0c0c4bd..20fa16db 100644 --- a/api/utils/bezier.md +++ b/api/utils/bezier.md @@ -6,7 +6,7 @@ # utils/bezier -> Last updated 2024-08-28T10:13:18.057Z +> Last updated 2024-08-30T19:21:42.315Z ## Functions @@ -16,24 +16,7 @@ function createBezierCurveCoordinates( coords, options -): { - firstControl: { - x: number; - y: y1; - }; - firstPoint: { - x: x1; - y: y1; - }; - lastControl: { - x: number; - y: y2; - }; - lastPoint: { - x: x2; - y: y2; - }; -}; +): CoordinatesForBezierObjectType; ``` Calculates coordinates for a Bezier curve between two points. @@ -47,44 +30,10 @@ Calculates coordinates for a Bezier curve between two points. #### Returns -```ts -{ - firstControl: { - x: number; - y: y1; - } - firstPoint: { - x: x1; - y: y1; - } - lastControl: { - x: number; - y: y2; - } - lastPoint: { - x: x2; - y: y2; - } -} -``` +[`CoordinatesForBezierObjectType`](../types/bezier.md#coordinatesforbezierobjecttype) Coordinates for the Bezier curve. -| Name | Type | Default value | Defined in | -| ---------------- | ------------------------------ | ------------- | ------------------------------------------------------------------------------------------ | -| `firstControl` | \{ `x`: `number`; `y`: `y1`; } | - | [utils/bezier.ts:71](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L71) | -| `firstControl.x` | `number` | - | [utils/bezier.ts:34](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L34) | -| `firstControl.y` | `number` | y1 | [utils/bezier.ts:34](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L34) | -| `firstPoint` | \{ `x`: `x1`; `y`: `y1`; } | - | [utils/bezier.ts:70](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L70) | -| `firstPoint.x` | `number` | x1 | [utils/bezier.ts:31](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L31) | -| `firstPoint.y` | `number` | y1 | [utils/bezier.ts:31](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L31) | -| `lastControl` | \{ `x`: `number`; `y`: `y2`; } | - | [utils/bezier.ts:73](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L73) | -| `lastControl.x` | `number` | - | [utils/bezier.ts:35](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L35) | -| `lastControl.y` | `number` | y2 | [utils/bezier.ts:35](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L35) | -| `lastPoint` | \{ `x`: `x2`; `y`: `y2`; } | - | [utils/bezier.ts:72](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L72) | -| `lastPoint.x` | `number` | x2 | [utils/bezier.ts:32](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L32) | -| `lastPoint.y` | `number` | y2 | [utils/bezier.ts:32](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L32) | - #### Example ```ts @@ -96,7 +45,7 @@ const coordinates = createBezierCurveCoordinates( #### Defined in -[utils/bezier.ts:25](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L25) +[utils/bezier.ts:26](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L26) --- @@ -135,7 +84,7 @@ const svgPath = getCurlySVGPath(startElement, stopElement, { #### Defined in -[utils/bezier.ts:95](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L95) +[utils/bezier.ts:125](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L125) --- @@ -173,10 +122,10 @@ Positions for creating an SVG path for a curved line. | Name | Type | Defined in | | ----------- | -------- | -------------------------------------------------------------------------------------------- | -| `path1pos1` | `string` | [utils/bezier.ts:269](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L269) | -| `path1pos2` | `string` | [utils/bezier.ts:270](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L270) | -| `path2pos1` | `string` | [utils/bezier.ts:271](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L271) | -| `path2pos2` | `string` | [utils/bezier.ts:272](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L272) | +| `path1pos1` | `string` | [utils/bezier.ts:299](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L299) | +| `path1pos2` | `string` | [utils/bezier.ts:300](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L300) | +| `path2pos1` | `string` | [utils/bezier.ts:301](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L301) | +| `path2pos2` | `string` | [utils/bezier.ts:302](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L302) | #### Example @@ -186,7 +135,7 @@ const positions = getPositionsForCurlySVGPath('west'); #### Defined in -[utils/bezier.ts:234](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L234) +[utils/bezier.ts:264](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L264) --- @@ -220,8 +169,8 @@ Positions for creating an SVG path. | Name | Type | Defined in | | ------ | -------- | -------------------------------------------------------------------------------------------- | -| `pos1` | `string` | [utils/bezier.ts:220](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L220) | -| `pos2` | `string` | [utils/bezier.ts:220](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L220) | +| `pos1` | `string` | [utils/bezier.ts:250](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L250) | +| `pos2` | `string` | [utils/bezier.ts:250](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L250) | #### Example @@ -231,7 +180,7 @@ const positions = getPositionsForSVGPath('east'); #### Defined in -[utils/bezier.ts:196](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L196) +[utils/bezier.ts:226](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L226) --- @@ -268,7 +217,7 @@ const svgPath = getSVGPath(startElement, stopElement, { #### Defined in -[utils/bezier.ts:156](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L156) +[utils/bezier.ts:186](https://github.com/phun-ky/speccer/blob/main/src/utils/bezier.ts#L186) --- diff --git a/api/utils/camel-case.md b/api/utils/camel-case.md index cd0c40f3..f4813d94 100644 --- a/api/utils/camel-case.md +++ b/api/utils/camel-case.md @@ -6,7 +6,7 @@ # utils/camel-case -> Last updated 2024-08-28T10:13:18.058Z +> Last updated 2024-08-30T19:21:42.316Z ## Functions diff --git a/api/utils/cardinal.md b/api/utils/cardinal.md index 2ea08eb1..67cc8cc4 100644 --- a/api/utils/cardinal.md +++ b/api/utils/cardinal.md @@ -6,7 +6,7 @@ # utils/cardinal -> Last updated 2024-08-28T10:13:18.058Z +> Last updated 2024-08-30T19:21:42.316Z ## Functions diff --git a/api/utils/classes/DrawCircle.md b/api/utils/classes/DrawCircle.md index 1f6c5719..32e08122 100644 --- a/api/utils/classes/DrawCircle.md +++ b/api/utils/classes/DrawCircle.md @@ -6,7 +6,7 @@ # utils/classes/DrawCircle -> Last updated 2024-08-28T10:13:18.059Z +> Last updated 2024-08-30T19:21:42.316Z ## Classes diff --git a/api/utils/classes/DrawSVGCurlyBracket.md b/api/utils/classes/DrawSVGCurlyBracket.md index 2c297f8b..1ca106a8 100644 --- a/api/utils/classes/DrawSVGCurlyBracket.md +++ b/api/utils/classes/DrawSVGCurlyBracket.md @@ -6,7 +6,7 @@ # utils/classes/DrawSVGCurlyBracket -> Last updated 2024-08-28T10:13:18.059Z +> Last updated 2024-08-30T19:21:42.317Z ## Classes diff --git a/api/utils/classes/DrawSVGLine.md b/api/utils/classes/DrawSVGLine.md index d51bfd7e..62939704 100644 --- a/api/utils/classes/DrawSVGLine.md +++ b/api/utils/classes/DrawSVGLine.md @@ -6,7 +6,7 @@ # utils/classes/DrawSVGLine -> Last updated 2024-08-28T10:13:18.060Z +> Last updated 2024-08-30T19:21:42.317Z ## Classes diff --git a/api/utils/classnames.md b/api/utils/classnames.md index f468f5ad..afc419e6 100644 --- a/api/utils/classnames.md +++ b/api/utils/classnames.md @@ -6,7 +6,7 @@ # utils/classnames -> Last updated 2024-08-28T10:13:18.060Z +> Last updated 2024-08-30T19:21:42.317Z ## Functions diff --git a/api/utils/constants.md b/api/utils/constants.md index c2660ed5..fc8a25d3 100644 --- a/api/utils/constants.md +++ b/api/utils/constants.md @@ -6,7 +6,7 @@ # utils/constants -> Last updated 2024-08-28T10:13:18.061Z +> Last updated 2024-08-30T19:21:42.317Z ## Variables diff --git a/api/utils/coords.md b/api/utils/coords.md index cfb324a4..cb528704 100644 --- a/api/utils/coords.md +++ b/api/utils/coords.md @@ -6,7 +6,7 @@ # utils/coords -> Last updated 2024-08-28T10:13:18.062Z +> Last updated 2024-08-30T19:21:42.318Z ## Variables diff --git a/api/utils/css.md b/api/utils/css.md index 55f640d2..4b548362 100644 --- a/api/utils/css.md +++ b/api/utils/css.md @@ -6,7 +6,7 @@ # utils/css -> Last updated 2024-08-28T10:13:18.062Z +> Last updated 2024-08-30T19:21:42.318Z ## Functions @@ -40,7 +40,7 @@ console.log(className); // Example output: "margin top" #### Defined in -[utils/css.ts:63](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L63) +[utils/css.ts:64](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L64) --- @@ -74,23 +74,24 @@ console.log(intValue); // Example output: 42 #### Defined in -[utils/css.ts:26](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L26) +[utils/css.ts:27](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L27) --- ### getSpacing() ```ts -function getSpacing(style): SpacingCSSPropertiesType; +function getSpacing(style, options?): SpacingCSSPropertiesType; ``` Extracts spacing-related CSS properties from a style object. #### Parameters -| Parameter | Type | Description | -| --------- | ---------------------------------------------------------------------- | ----------------- | -| `style` | [`SpacingCSSPropertiesType`](../types/css.md#spacingcsspropertiestype) | The style object. | +| Parameter | Type | Description | +| ---------- | ------------------------------------------------------------------------ | ----------------- | +| `style` | [`SpacingCSSPropertiesType`](../types/css.md#spacingcsspropertiestype) | The style object. | +| `options`? | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | Options | #### Returns @@ -111,7 +112,7 @@ console.log(spacing); // Example output: { marginTop: "10px", marginLeft: "20px" #### Defined in -[utils/css.ts:91](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L91) +[utils/css.ts:93](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L93) --- @@ -148,7 +149,7 @@ console.log(typography); // Example output: { fontSize: "16px", fontWeight: "bol #### Defined in -[utils/css.ts:133](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L133) +[utils/css.ts:154](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L154) --- @@ -182,7 +183,7 @@ console.log(value); // Example output: 1.5 #### Defined in -[utils/css.ts:206](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L206) +[utils/css.ts:227](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L227) --- @@ -216,7 +217,7 @@ console.log(value); // Example output: 20 #### Defined in -[utils/css.ts:188](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L188) +[utils/css.ts:209](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L209) --- @@ -251,7 +252,7 @@ console.log(normalizedValue); // Example output: 0.5 #### Defined in -[utils/css.ts:42](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L42) +[utils/css.ts:43](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L43) --- @@ -285,7 +286,7 @@ console.log(value); // Example output: 10 #### Defined in -[utils/css.ts:170](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L170) +[utils/css.ts:191](https://github.com/phun-ky/speccer/blob/main/src/utils/css.ts#L191) --- diff --git a/api/utils/debounce.md b/api/utils/debounce.md index c8dd88a8..12744e28 100644 --- a/api/utils/debounce.md +++ b/api/utils/debounce.md @@ -6,7 +6,7 @@ # utils/debounce -> Last updated 2024-08-28T10:13:18.064Z +> Last updated 2024-08-30T19:21:42.319Z ## Functions diff --git a/api/utils/direction-of-element.md b/api/utils/direction-of-element.md index 8ec189dd..1598a001 100644 --- a/api/utils/direction-of-element.md +++ b/api/utils/direction-of-element.md @@ -6,7 +6,7 @@ # utils/direction-of-element -> Last updated 2024-08-28T10:13:18.064Z +> Last updated 2024-08-30T19:21:42.319Z ## Functions diff --git a/api/utils/get-coords-pair-from-objects.md b/api/utils/get-coords-pair-from-objects.md index 8de04aa4..f5df9bb9 100644 --- a/api/utils/get-coords-pair-from-objects.md +++ b/api/utils/get-coords-pair-from-objects.md @@ -6,7 +6,7 @@ # utils/get-coords-pair-from-objects -> Last updated 2024-08-28T10:13:18.065Z +> Last updated 2024-08-30T19:21:42.319Z ## Functions diff --git a/api/utils/get-options.md b/api/utils/get-options.md index acd96a56..cb40056a 100644 --- a/api/utils/get-options.md +++ b/api/utils/get-options.md @@ -6,24 +6,29 @@ # utils/get-options -> Last updated 2024-08-28T10:13:18.065Z +> Last updated 2024-08-30T19:21:42.319Z ## Functions ### getOptions() ```ts -function getOptions(areaString, targetStyle): SpeccerOptionsInterface; +function getOptions( + areaString, + targetStyle, + customOptions? +): SpeccerOptionsInterface; ``` Generates Speccer options based on the target element and the specified area string. #### Parameters -| Parameter | Type | Description | -| ------------- | --------------------------------------------------------------------------------------- | --------------------------------------------- | -| `areaString` | `string` | The string representing different area types. | -| `targetStyle` | [`CSSStyleDeclaration`](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration) | - | +| Parameter | Type | Description | +| ---------------- | --------------------------------------------------------------------------------------- | --------------------------------------------- | +| `areaString` | `string` | The string representing different area types. | +| `targetStyle` | [`CSSStyleDeclaration`](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration) | - | +| `customOptions`? | [`SpeccerOptionsInterface`](../types/speccer.md#specceroptionsinterface) | Custom options | #### Returns @@ -44,7 +49,7 @@ console.log(options); #### Defined in -[utils/get-options.ts:86](https://github.com/phun-ky/speccer/blob/main/src/utils/get-options.ts#L86) +[utils/get-options.ts:101](https://github.com/phun-ky/speccer/blob/main/src/utils/get-options.ts#L101) --- diff --git a/api/utils/id.md b/api/utils/id.md index 65e4fac0..1a159e7f 100644 --- a/api/utils/id.md +++ b/api/utils/id.md @@ -6,7 +6,7 @@ # utils/id -> Last updated 2024-08-28T10:13:18.065Z +> Last updated 2024-08-30T19:21:42.319Z ## Functions diff --git a/api/utils/intrinsic-coords.md b/api/utils/intrinsic-coords.md index dcc2eded..5f88da48 100644 --- a/api/utils/intrinsic-coords.md +++ b/api/utils/intrinsic-coords.md @@ -6,7 +6,7 @@ # utils/intrinsic-coords -> Last updated 2024-08-28T10:13:18.066Z +> Last updated 2024-08-30T19:21:42.319Z ## Functions diff --git a/api/utils/node.md b/api/utils/node.md index b34815df..f005beed 100644 --- a/api/utils/node.md +++ b/api/utils/node.md @@ -6,7 +6,7 @@ # utils/node -> Last updated 2024-08-28T10:13:18.066Z +> Last updated 2024-08-30T19:21:42.320Z ## Functions diff --git a/api/utils/number.md b/api/utils/number.md index be38db23..bf767d55 100644 --- a/api/utils/number.md +++ b/api/utils/number.md @@ -6,7 +6,7 @@ # utils/number -> Last updated 2024-08-28T10:13:18.067Z +> Last updated 2024-08-30T19:21:42.320Z ## Functions diff --git a/api/utils/position.md b/api/utils/position.md index 8f200bf8..abbc9c61 100644 --- a/api/utils/position.md +++ b/api/utils/position.md @@ -6,7 +6,7 @@ # utils/position -> Last updated 2024-08-28T10:13:18.067Z +> Last updated 2024-08-30T19:21:42.320Z ## Functions @@ -46,7 +46,7 @@ const aboveProps = recProps.toTop(); #### Defined in -[utils/position.ts:159](https://github.com/phun-ky/speccer/blob/main/src/utils/position.ts#L159) +[utils/position.ts:164](https://github.com/phun-ky/speccer/blob/main/src/utils/position.ts#L164) --- @@ -183,7 +183,7 @@ const offsetProps = await offsetWithCenter(sourceElement, targetElement); #### Defined in -[utils/position.ts:117](https://github.com/phun-ky/speccer/blob/main/src/utils/position.ts#L117) +[utils/position.ts:119](https://github.com/phun-ky/speccer/blob/main/src/utils/position.ts#L119) --- diff --git a/api/utils/remove-speccer-element.md b/api/utils/remove-speccer-element.md new file mode 100644 index 00000000..cde21764 --- /dev/null +++ b/api/utils/remove-speccer-element.md @@ -0,0 +1,67 @@ +
+ SPECCER logo +
+ +[@phun-ky/speccer](../README.md) / utils/remove-speccer-element + +# utils/remove-speccer-element + +> Last updated 2024-08-30T19:21:42.320Z + +## Functions + +### removeSpeccerElement() + +```ts +function removeSpeccerElement(el): void; +``` + +Remove a speccer element by removing associated elements and SVG paths. + +This function removes any speccer elements linked to the specified element and +also removes any SVG paths that might be associated with it. + +#### Parameters + +| Parameter | Type | Description | +| --------- | ----------------------------------------------------------------------- | -------------------------- | +| `el` | [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) | The HTML element to unpin. | + +#### Returns + +`void` + +This function does not return a value. + +#### Example + +```ts +const element = document.getElementById('my-element'); +if (element) { + removeSpeccerElement(element); +} +``` + +#### Defined in + +[utils/remove-speccer-element.ts:18](https://github.com/phun-ky/speccer/blob/main/src/utils/remove-speccer-element.ts#L18) + +--- + +**Contributing** + +Want to contribute? Please read the [CONTRIBUTING.md](https://github.com/phun-ky/speccer/blob/main/CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](https://github.com/phun-ky/speccer/blob/main/CODE_OF_CONDUCT.md) + +**Sponsor me** + +I'm an Open Source evangelist, creating stuff that does not exist yet to help get rid of secondary activities and to enhance systems already in place, be it documentation or web sites. + +The sponsorship is an unique opportunity to alleviate more hours for me to maintain my projects, create new ones and contribute to the large community we're all part of :) + +[Support me on GitHub Sponsors](https://github.com/sponsors/phun-ky). + +![Speccer banner, with logo and slogan: A zero dependency package to highlight elements](https://github.com/phun-ky/speccer/blob/main/public/speccer-banner.png?raw=true) + +--- + +This project created by [Alexander Vassbotn Røyne-Helgesen](http://phun-ky.net) is licensed under a [MIT License](https://choosealicense.com/licenses/mit/). diff --git a/api/utils/resize.md b/api/utils/resize.md index bcdec1fb..e37893b0 100644 --- a/api/utils/resize.md +++ b/api/utils/resize.md @@ -6,7 +6,7 @@ # utils/resize -> Last updated 2024-08-28T10:13:18.068Z +> Last updated 2024-08-30T19:21:42.321Z ## Functions diff --git a/api/utils/style-property.md b/api/utils/style-property.md index c1718d5f..526a7820 100644 --- a/api/utils/style-property.md +++ b/api/utils/style-property.md @@ -6,7 +6,7 @@ # utils/style-property -> Last updated 2024-08-28T10:13:18.069Z +> Last updated 2024-08-30T19:21:42.321Z ## Functions diff --git a/api/utils/styles.md b/api/utils/styles.md index 82a3ae1c..28605f36 100644 --- a/api/utils/styles.md +++ b/api/utils/styles.md @@ -6,7 +6,7 @@ # utils/styles -> Last updated 2024-08-28T10:13:18.069Z +> Last updated 2024-08-30T19:21:42.321Z ## Functions diff --git a/api/utils/typeof.md b/api/utils/typeof.md index f6e8165c..9fc88d82 100644 --- a/api/utils/typeof.md +++ b/api/utils/typeof.md @@ -6,7 +6,7 @@ # utils/typeof -> Last updated 2024-08-28T10:13:18.070Z +> Last updated 2024-08-30T19:21:42.321Z ## Functions diff --git a/api/utils/wait.md b/api/utils/wait.md index 725225b3..67ecf07d 100644 --- a/api/utils/wait.md +++ b/api/utils/wait.md @@ -6,7 +6,7 @@ # utils/wait -> Last updated 2024-08-28T10:13:18.071Z +> Last updated 2024-08-30T19:21:42.321Z ## Functions diff --git a/api/utils/xy.md b/api/utils/xy.md index 1f54454a..0806c3e0 100644 --- a/api/utils/xy.md +++ b/api/utils/xy.md @@ -6,7 +6,7 @@ # utils/xy -> Last updated 2024-08-28T10:13:18.071Z +> Last updated 2024-08-30T19:21:42.321Z ## Variables From 095e9a10c41261516fed0b8cbaefbf51d5d84f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:25:56 +0200 Subject: [PATCH 08/19] =?UTF-8?q?docs:=20=E2=9C=8F=EF=B8=8F=20Update=20scr?= =?UTF-8?q?eenshots=20and=20add=20more=20feature=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/pin-text.html | 230 +++++++++++++++++++++++- dev/spacing.html | 20 +++ public/speccer-a11y-landmarks-light.png | Bin 23762 -> 133846 bytes public/speccer-a11y-shortcuts-light.png | Bin 13865 -> 140218 bytes public/speccer-spacing-bound.png | Bin 0 -> 124785 bytes src/features/a11y/index.ts | 29 ++- src/features/grid/index.ts | 57 +++++- src/features/mark/index.ts | 31 +++- src/features/measure/index.ts | 60 ++++++- src/features/spacing/index.ts | 54 +++++- src/features/typography/index.ts | 33 ++++ 11 files changed, 500 insertions(+), 14 deletions(-) create mode 100644 public/speccer-spacing-bound.png diff --git a/dev/pin-text.html b/dev/pin-text.html index 2d928a3a..40f9b1f4 100644 --- a/dev/pin-text.html +++ b/dev/pin-text.html @@ -148,6 +148,232 @@

Pin with text

/> +
+
+
+

Settings

+
+ + +
+
+ + +
+
+ Flip + + + + + + + Rotate + + + + + +
+
+

+ View settings +

+
+ + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+
+
View settings
-
+

Settings

Default >
+
+

Only padding

+
+
+
+

Example with measure

O39YU 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

v0$!-!!SLRCqp%Q6xy6zHrPm*8wR%t(b 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 JR6U0i{{<0T literal 23762 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 diff --git a/public/speccer-a11y-shortcuts-light.png b/public/speccer-a11y-shortcuts-light.png index 4902f23e601c785f376048f012f58b4037a7cffa..dfc5037b6f84ca75b53abd9e1417f8c69223b32b 100644 GIT binary patch literal 140218 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 z%0D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 literal 13865 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 CB~ttV diff --git a/public/speccer-spacing-bound.png b/public/speccer-spacing-bound.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0cfc8eff99b19f6855566664f384e153c49a49 GIT binary patch literal 124785 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 literal 0 HcmV?d00001 diff --git a/src/features/a11y/index.ts b/src/features/a11y/index.ts index a713aa3b..82db8e86 100644 --- a/src/features/a11y/index.ts +++ b/src/features/a11y/index.ts @@ -1,3 +1,28 @@ +/** + * This feature will highlight accessibility areas like landmarks and region. It can also display tab stops/sequence and any keyboard shortcuts assigned + * + * ![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-a11y-tabstops-light.png?raw=true) + * + * @example + * + * Use the following code, either for html or js: + * + * ```html + *

+ * … + *
+ * ``` + * + * ```ts + * const targetElement = document.getElementById('target'); + * a11y(targetElement); + * ``` + * + * @packageDocumentation + */ /* eslint-disable import/no-unused-modules */ import { isElementHidden } from '../../utils/node'; import { add } from '../../utils/styles'; @@ -15,7 +40,7 @@ import { styles } from './utils/styles'; * Adds an accessibility element to the document body based on the target element and type. * * ![Screenshot of speccer a11y tab stops in use](https://github.com/phun-ky/speccer/blob/main/public/speccer-a11y-tabstops-light.png?raw=true) - * ![Screenshot of speccer a11y landmark in use](https://github.com/phun-ky/speccer/blob/main/public/a11y-landmark.png?raw=true) + * ![Screenshot of speccer a11y landmark in use](https://github.com/phun-ky/speccer/blob/main/public/speccer-a11y-landmarks-light.png?raw=true) * * @param {HTMLElement} targetEl - Target HTML element. * @param {unknown} [content] - Content to be added to the accessibility element. @@ -60,7 +85,7 @@ export const element = async ( /** * Adds a shortcut element to the document body based on the provided HTML element and shortcut string. * - * ![Screenshot of speccer a11y shortcuts in use](https://github.com/phun-ky/speccer/blob/main/public/a11y-shortcut.png?raw=true) + * ![Screenshot of speccer a11y shortcuts in use](https://github.com/phun-ky/speccer/blob/main/public/speccer-a11y-shortcuts-light.png?raw=true) * * @param {HTMLElement} el - Target HTML element. * @param {string} shortcutString - Shortcut string to be displayed. diff --git a/src/features/grid/index.ts b/src/features/grid/index.ts index e38add78..c96fe674 100644 --- a/src/features/grid/index.ts +++ b/src/features/grid/index.ts @@ -1,3 +1,35 @@ +/** + * This feature will highlight the grid spacing in a `display: grid;` element. + * + * ![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-light.png?raw=true) + * + * @example + * + * Use the following code, either for html or js: + * + * ```html + *
+ * … + *
+ * ``` + * + * ```ts + * const targetElement = document.getElementById('target'); + * const options = { + * type: 'grid', + * grid: { + * toggle: 'both' + * } + * }; + * + * grid(targetElement, options); + * ``` + * + * @packageDocumentation + */ /* eslint no-console:0 */ import { SpeccerOptionsInterface } from '../../types/speccer'; import { SPECCER_DATA_ATTRIBUTE } from '../../utils/constants'; @@ -130,7 +162,7 @@ export const create = async ( * * Adds a visual grid overlay to the target element if it has the appropriate data attribute and is a grid. * - * ![grid](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-dark.png?raw=true) + * ![grid](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-light.png?raw=true) * * @param {HTMLElement} targetElement - The target element to add the grid overlay to. * @returns {Promise} A promise that resolves once the overlay has been added. @@ -138,11 +170,24 @@ export const create = async ( * @example * ```ts * const targetElement = document.getElementById('target'); - * if (targetElement) { - * element(targetElement).then(() => { - * console.log('Grid overlay added'); - * }); - * } + * + * grid(targetElement); + * ``` + * + * ##### Only rows + * + * ![grid](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-dark.png?raw=true) + * + * ```ts + * const targetElement = document.getElementById('target'); + * const options = { + * type: 'grid', + * grid: { + * toggle: 'rows' + * } + * }; + * + * grid(targetElement, options); * ``` */ export const element = async (targetElement: HTMLElement): Promise => { diff --git a/src/features/mark/index.ts b/src/features/mark/index.ts index 7eb8370b..4c40fc42 100644 --- a/src/features/mark/index.ts +++ b/src/features/mark/index.ts @@ -1,3 +1,32 @@ +/** + * This feature marks given element + * + * ![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-pin-mark-light.png?raw=true) + * + * @example + * + * Use the following code, either for html or js: + * + * ```html + *
+ * … + *
+ * ``` + * + * ```ts + * const targetElement = document.getElementById('target'); + * const options = { + * type: 'mark' + * }; + * + * mark(targetElement, options); + * ``` + * + * @packageDocumentation + */ /* eslint no-console:0 */ import { cx, set } from '../../utils/classnames'; import { SPECCER_DATA_ATTRIBUTE } from '../../utils/constants'; @@ -36,7 +65,7 @@ export const create = (id: string, n = 'span'): HTMLElement => { /** * Create a marker element and add it to the body with styles matching a specified element. * - * ![mark](https://github.com/phun-ky/speccer/blob/main/public/mark.png?raw=true) + * ![mark](https://github.com/phun-ky/speccer/blob/main/public/speccer-pin-mark-light.png?raw=true) * * @param {HTMLElement} targetElement - The target element to match styles with. * @returns {Promise} - A promise that resolves after creating and styling the marker element. diff --git a/src/features/measure/index.ts b/src/features/measure/index.ts index b4c6966d..37095881 100644 --- a/src/features/measure/index.ts +++ b/src/features/measure/index.ts @@ -1,3 +1,35 @@ +/** + * This feature measures given element + * + * ![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-pin-measure-height-light.png?raw=true) + * + * @example + * + * Use the following code, either for html or js: + * + * ```html + *
+ * … + *
+ * ``` + * + * ```ts + * const targetElement = document.getElementById('target'); + * const options = { + * position: 'right', + * measure: { + * height: true + * } + * }; + * + * measure(targetElement, options); + * ``` + * + * @packageDocumentation + */ /* eslint no-console:0 */ import { MeasureAreaEnum } from '../../types/enums/area'; import { SpeccerOptionsInterface } from '../../types/speccer'; @@ -52,7 +84,7 @@ export const create = ( /** * Create a measurement element and add it to the body with styles matching a specified target element based on the attribute values from `data-speccer`. * - * ![measure](https://github.com/phun-ky/speccer/blob/main/public/measure.png?raw=true) + * ![measure](https://github.com/phun-ky/speccer/blob/main/public/speccer-measure-right-full-light.png?raw=true) * * @param {HTMLElement} targetElement - The target element to match styles with. * @returns {Promise} - A promise that resolves after creating and styling the measurement element. @@ -60,7 +92,31 @@ export const create = ( * @example * ```ts * const targetElement = document.getElementById('target'); - * element(targetElement); + * const options = { + * position: 'right', + * measure: { + * height: true + * } + * }; + * + * measure(targetElement,options); + * ``` + * + * ##### Slim width to the bottom + * + * ![measure](https://github.com/phun-ky/speccer/blob/main/public/speccer-measure-bottom-dark.png?raw=true) + * + * ```ts + * const targetElement = document.getElementById('target'); + * const options = { + * position: 'bottom', + * measure: { + * slim: true, + * width: true + * } + * }; + * + * measure(targetElement,options); * ``` */ export const element = async (targetElement: HTMLElement): Promise => { diff --git a/src/features/spacing/index.ts b/src/features/spacing/index.ts index ee8fb556..0d016bf5 100644 --- a/src/features/spacing/index.ts +++ b/src/features/spacing/index.ts @@ -1,3 +1,26 @@ +/** + * This feature highlights the spacing of an element. + * + * ![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-spacing-dark.png?raw=true) + * * + * @example + * + * Use the following code, either for html or js: + * + * ```html + *
+ * … + *
+ * ``` + * ```ts + * const targetElement = document.getElementById('target'); + * element(targetElement); + * ``` + * @packageDocumentation + */ /* eslint no-console:0 */ import { isValidSpacingElement } from '../../utils/area'; import { set as setClassNames } from '../../utils/classnames'; @@ -42,7 +65,7 @@ export const create = ( /** * Create and position spacing elements based on the target element's computed spacing styles. * - * ![spacing](https://github.com/phun-ky/speccer/blob/main/public/spacing.png?raw=true) + * ![spacing](https://github.com/phun-ky/speccer/blob/main/public/speccer-spacing-light.png?raw=true) * * @param {HTMLElement} targetElement - The target element to create spacing elements for. * @returns {Promise} - A promise that resolves after creating and positioning the spacing elements. @@ -52,6 +75,35 @@ export const create = ( * const targetElement = document.getElementById('target'); * element(targetElement); * ``` + * + * ##### Only padding + * + * ```ts + * const targetElement = document.getElementById('target'); + * const options = { + * spacing: { + * padding: true + * } + * }; + * + * element(targetElement, options); + * + * ##### Bound style, like the old feature + * + * ![spacing](https://github.com/phun-ky/speccer/blob/main/public/speccer-spacing-bound.png?raw=true) + * + * This option binds the speccer elements to the bounds of the element container. + * + * ```ts + * const targetElement = document.getElementById('target'); + * const options = { + * spacing: { + * bound: true, + * } + * }; + * + * element(targetElement, options); + * ``` */ export const element = async (targetElement: HTMLElement): Promise => { if (!targetElement) return; diff --git a/src/features/typography/index.ts b/src/features/typography/index.ts index f0e6b23e..a2868488 100644 --- a/src/features/typography/index.ts +++ b/src/features/typography/index.ts @@ -1,3 +1,36 @@ +/** + * This feature presents typography + * + * ![pin](https://github.com/phun-ky/speccer/blob/main/public/speccer-typography-light.png?raw=true) + * + * @example + * + * Use the following code, either for html or js: + * + * ```html + *
+ * … + *
+ * ``` + * + * ```ts + * const targetElement = document.getElementById('target'); + * const options = { + * position: 'right', + * type: 'typography', + * typography: { + * useSyntaxHighlighting: false + * } + * }; + * + * typography(targetElement, options); + * ``` + * + * @packageDocumentation + */ /* eslint-disable import/no-unused-modules */ /* eslint no-console:0 */ import { SpeccerOptionsInterface } from '../../types/speccer'; From 65e7314e4e4b07840f43a41c324f1d9e7ae49517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:29:20 +0200 Subject: [PATCH 09/19] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Add=20`bound`=20op?= =?UTF-8?q?tion=20to=20the=20`spacing`=20feature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also added the possibility to only display `padding` or `margin` --- README.md | 15 +++++++++++++-- src/features/spacing/index.ts | 25 ++++++++++++++++++++----- src/features/spacing/styles/index.styl | 1 + src/types/css.ts | 16 ++++++++-------- src/types/speccer.ts | 9 +++++++++ src/utils/css.ts | 21 ++++++++++++++++++++- src/utils/get-options.ts | 14 ++++++++++++++ 7 files changed, 85 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index dc6a24f2..4a651032 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ - [React](#react) - [Features](#features) - [Element spacing](#element-spacing) + - [Bound spacing](#bound-spacing) - [Element dimensions](#element-dimensions) - [Slim measure](#slim-measure) - [Pin element to highlight the anatomy](#pin-element-to-highlight-the-anatomy) @@ -207,13 +208,23 @@ export default Component; Use the following attribute to display element padding and margin: ```html -
+
``` -This will display the element _and all of it's children_ padding and margin. +This will display the element _and all of it's children_ padding and margin, unless you specify `padding` and `margin` ![Image of the spacing feature in dark mode](./public/speccer-spacing-dark.png) +#### Bound spacing + +![spacing](./public/speccer-spacing-bound.png) + +This option binds the speccer elements to the bounds of the element container. + +```html +
+``` + ### Element dimensions ![Image of the measure feature](./public/speccer-measure-right-full-light.png) diff --git a/src/features/spacing/index.ts b/src/features/spacing/index.ts index 0d016bf5..36d2bbde 100644 --- a/src/features/spacing/index.ts +++ b/src/features/spacing/index.ts @@ -105,13 +105,22 @@ export const create = ( * element(targetElement, options); * ``` */ -export const element = async (targetElement: HTMLElement): Promise => { +export const spacing = async ( + targetElement: HTMLElement, + options?: SpeccerOptionsInterface | undefined +): Promise => { if (!targetElement) return; if (isElementHidden(targetElement)) return; + const _areas_string: string = + targetElement.getAttribute('data-speccer') || ''; const _target_styles = await getStyles(targetElement); - const _target_spacing_styles = getSpacing(_target_styles); + const _options = getOptions(_areas_string, _target_styles, options); + + if (_options.type !== 'spacing' || !_options.spacing) return; + + const _target_spacing_styles = getSpacing(_target_styles, _options); const _target_pruned_spacing_styles = Object.keys( _target_spacing_styles ).filter((property) => { @@ -122,6 +131,8 @@ export const element = async (targetElement: HTMLElement): Promise => { if (!_target_pruned_spacing_styles.length) return; + targetElement.classList.add('is-specced'); + const _pin_element_id = `speccer-spacing-${targetElement.getAttribute('id') || uniqueID()}`; targetElement.setAttribute('data-speccer-element-id', _pin_element_id); @@ -134,10 +145,14 @@ export const element = async (targetElement: HTMLElement): Promise => { const _class_name = getClassNameFromCSSProperty(property); - setClassNames(_speccer_el, _class_name); + setClassNames( + _speccer_el, + cx(_class_name, { + bound: _options?.spacing?.bound ? true : false + }) + ); document.body.appendChild(_speccer_el); - targetElement.classList.add('is-specced'); - await position(property, _value, _speccer_el, targetElement); + await position(property, _value, _speccer_el, targetElement, _options); }); }; diff --git a/src/features/spacing/styles/index.styl b/src/features/spacing/styles/index.styl index 480566f6..7b90a310 100644 --- a/src/features/spacing/styles/index.styl +++ b/src/features/spacing/styles/index.styl @@ -7,3 +7,4 @@ @require './padding.styl' @require './margin.styl' +@require './bound.styl' diff --git a/src/types/css.ts b/src/types/css.ts index 484ea2d2..58509c15 100644 --- a/src/types/css.ts +++ b/src/types/css.ts @@ -5,42 +5,42 @@ export type SpacingCSSPropertiesType = { /** * The margin top property. */ - marginTop: string; + marginTop?: string; /** * The margin bottom property. */ - marginBottom: string; + marginBottom?: string; /** * The margin left property. */ - marginLeft: string; + marginLeft?: string; /** * The margin right property. */ - marginRight: string; + marginRight?: string; /** * The padding top property. */ - paddingTop: string; + paddingTop?: string; /** * The padding bottom property. */ - paddingBottom: string; + paddingBottom?: string; /** * The padding left property. */ - paddingLeft: string; + paddingLeft?: string; /** * The padding right property. */ - paddingRight: string; + paddingRight?: string; }; /** diff --git a/src/types/speccer.ts b/src/types/speccer.ts index 0da18e35..82a34104 100644 --- a/src/types/speccer.ts +++ b/src/types/speccer.ts @@ -31,7 +31,16 @@ export interface SpeccerOptionsInterface { typography?: { useSyntaxHighlighting: boolean; }; + spacing?: { + margin?: boolean; + padding?: boolean; + both?: boolean; + bound?: boolean; + }; grid?: { toggle: string; + both?: boolean; + rows?: boolean; + columns?: boolean; }; } diff --git a/src/utils/css.ts b/src/utils/css.ts index c93464d9..7ba196d7 100644 --- a/src/utils/css.ts +++ b/src/utils/css.ts @@ -89,7 +89,8 @@ export const getClassNameFromCSSProperty = (property: string): string => { * ``` */ export const getSpacing = ( - style: SpacingCSSPropertiesType + style: SpacingCSSPropertiesType, + options?: SpeccerOptionsInterface | undefined ): SpacingCSSPropertiesType => { const { marginTop, @@ -102,6 +103,24 @@ export const getSpacing = ( paddingRight } = style; + if (options?.spacing?.padding) { + return { + paddingTop, + paddingBottom, + paddingLeft, + paddingRight + }; + } + + if (options?.spacing?.margin) { + return { + marginTop, + marginBottom, + marginLeft, + marginRight + }; + } + return { marginTop, marginBottom, diff --git a/src/utils/get-options.ts b/src/utils/get-options.ts index d55897ee..0fb49036 100644 --- a/src/utils/get-options.ts +++ b/src/utils/get-options.ts @@ -68,6 +68,20 @@ const getPositionBasedOnArea = (areaString: string): SpeccerPositionType => { return 'top'; }; +const getGridToggleValue = (areaString: string) => { + if (areaString?.includes('columns')) return 'columns'; + + if (areaString?.includes('rows')) return 'rows'; + + return 'both'; +}; +const getSpacingToggleValue = (areaString: string) => { + if (areaString?.includes('margin')) return 'margin'; + + if (areaString?.includes('padding')) return 'padding'; + + return 'both'; +}; /** * Generates Speccer options based on the target element and the specified area string. From 3869cf0fae86aac1640714f7c8cdb9bec0e9ec6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:29:52 +0200 Subject: [PATCH 10/19] =?UTF-8?q?docs:=20=E2=9C=8F=EF=B8=8F=20use=20`?= =?UTF-8?q?=E2=80=A6`=20instead=20of=20`...`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 4a651032..12f93a02 100644 --- a/README.md +++ b/README.md @@ -235,7 +235,7 @@ Display dimensions with: ```html
``` @@ -250,7 +250,7 @@ Where `height` and `width` comes with placement flags. Default for `height` is ` Use a slim style: ```html -
+
``` This will give a slimmer look and feel. @@ -260,7 +260,7 @@ This will give a slimmer look and feel. Use a subtle style for the slim option, uses a dashed line instead of a solid line: ```html -
+
``` This will give a dashed border. @@ -275,7 +275,7 @@ In your component examples, use the following attribute. Remember to use the `da
``` @@ -288,7 +288,7 @@ This will place a pin to the outline of the element. Default is `top`. ```html
-
+
``` @@ -298,7 +298,7 @@ This will place a pin to the outline of the element. Default is `top`. ```html
-
+
``` @@ -308,7 +308,7 @@ This will place a pin to the outline of the element. Default is `top`. ```html
-
+
``` @@ -320,7 +320,7 @@ You can also align the pins to the parent container. ```html
-
+
``` @@ -411,7 +411,7 @@ You can also give a more subtle touch to the anatomy elements. ```html
-
+
``` @@ -458,7 +458,7 @@ from v9.5 you can utilize the `pin` feature to highlight the anatomy of an eleme Display typography details: ```html -

Some text

+

Some text

``` This will place a box to display typography information. Default is `left`. @@ -471,7 +471,7 @@ This will place a box to display typography information. Default is `left`. If you want to produce a box that uses `pre` and `code` tags with support for syntax highlighting ([PrismJS](https://prismjs.com/) compatible), add `syntax` to the `data-speccer="typography"` attribute. ```html -

Some text

+

Some text

``` You can then override the colors, based on these variables: From f97802e89bb7676fe8d465c7f624dd6bf0c20ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:30:34 +0200 Subject: [PATCH 11/19] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Add=20missing=20fea?= =?UTF-8?q?tures=20to=20lazy=20loading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/browser.ts | 81 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 71 insertions(+), 10 deletions(-) diff --git a/src/config/browser.ts b/src/config/browser.ts index fd508536..6f7e17c7 100644 --- a/src/config/browser.ts +++ b/src/config/browser.ts @@ -49,10 +49,22 @@ * * @packageDocumentation */ -import { element as measureElement } from '../features/measure'; +import { grid as gridElement } from '../features/grid'; +import { mark as markElement } from '../features/mark'; +import { measure as measureElement } from '../features/measure'; import { pinElements } from '../features/pin'; -import { element as specElement } from '../features/spacing'; +import { spacing as spacingElement } from '../features/spacing'; +import { typography as typographyElement } from '../features/typography'; import { SpeccerFunctionType } from '../types/speccer'; +import { + SPECCER_DATA_ATTRIBUTE, + SPECCER_FEATURE_GRID, + SPECCER_FEATURE_MARK, + SPECCER_FEATURE_MEASURE, + SPECCER_FEATURE_PIN_AREA, + SPECCER_FEATURE_SPACING, + SPECCER_FEATURE_TYPOGRAPHY +} from '../utils/constants'; import { activate as resizeActivate } from '../utils/resize'; /** @@ -85,19 +97,19 @@ export const dom = (speccer: SpeccerFunctionType): void => { * ``` */ export const lazy = (): void => { - const _spec_observer = new IntersectionObserver((els, observer) => { + const _spacing_observer = new IntersectionObserver((els, observer) => { for (const el of els) { if (el.intersectionRatio > 0) { - specElement(el.target as HTMLElement); + spacingElement(el.target as HTMLElement); observer.unobserve(el.target); } } }); for (const el of document.querySelectorAll( - '[data-speccer^="spacing"],[data-speccer^="spacing"] *:not(td):not(tr):not(th):not(tfoot):not(thead):not(tbody)' + `[${SPECCER_DATA_ATTRIBUTE}^="${SPECCER_FEATURE_SPACING}"],[${SPECCER_DATA_ATTRIBUTE}^="${SPECCER_FEATURE_SPACING}"] *:not(td):not(tr):not(th):not(tfoot):not(thead):not(tbody)` )) { - _spec_observer.observe(el); + _spacing_observer.observe(el); } const _measure_observer = new IntersectionObserver((els, observer) => { @@ -109,11 +121,58 @@ export const lazy = (): void => { } }); - for (const el of document.querySelectorAll('[data-speccer^="measure"]')) { + for (const el of document.querySelectorAll( + `[${SPECCER_DATA_ATTRIBUTE}^="${SPECCER_FEATURE_MEASURE}"]` + )) { _measure_observer.observe(el); } - const _dissect_observer = new IntersectionObserver(async (els, observer) => { + const _mark_observer = new IntersectionObserver((els, observer) => { + for (const el of els) { + if (el.intersectionRatio > 0) { + markElement(el.target as HTMLElement); + observer.unobserve(el.target); + } + } + }); + + for (const el of document.querySelectorAll( + `[${SPECCER_DATA_ATTRIBUTE}^="${SPECCER_FEATURE_MARK}"]` + )) { + _mark_observer.observe(el); + } + + const _typography_observer = new IntersectionObserver((els, observer) => { + for (const el of els) { + if (el.intersectionRatio > 0) { + typographyElement(el.target as HTMLElement); + observer.unobserve(el.target); + } + } + }); + + for (const el of document.querySelectorAll( + `[${SPECCER_DATA_ATTRIBUTE}^="${SPECCER_FEATURE_TYPOGRAPHY}"]` + )) { + _typography_observer.observe(el); + } + + const _grid_observer = new IntersectionObserver((els, observer) => { + for (const el of els) { + if (el.intersectionRatio > 0) { + gridElement(el.target as HTMLElement); + observer.unobserve(el.target); + } + } + }); + + for (const el of document.querySelectorAll( + `[${SPECCER_DATA_ATTRIBUTE}^="${SPECCER_FEATURE_GRID}"]` + )) { + _grid_observer.observe(el); + } + + const _pin_observer = new IntersectionObserver(async (els, observer) => { for (const el of els) { if (el.intersectionRatio > 0) { await pinElements(el.target as HTMLElement); @@ -122,8 +181,10 @@ export const lazy = (): void => { } }); - for (const el of document.querySelectorAll('[data-speccer="pin-area"]')) { - _dissect_observer.observe(el); + for (const el of document.querySelectorAll( + `[${SPECCER_DATA_ATTRIBUTE}="${SPECCER_FEATURE_PIN_AREA}"]` + )) { + _pin_observer.observe(el); } }; From dd5a49e77144b593f14c9382f4eec9762244c4bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:36:11 +0200 Subject: [PATCH 12/19] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Add=20possibility?= =?UTF-8?q?=20to=20pass=20options=20programatically?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also renamed some feature init functions to match what they do. This is not a breaking change, since the exported function is the same --- src/features/a11y/index.ts | 4 +-- src/features/grid/index.ts | 10 +++++--- src/features/mark/index.ts | 4 +-- src/features/measure/index.ts | 14 +++++++++-- src/features/pin/index.ts | 7 ++++-- src/features/spacing/index.ts | 9 +++++-- src/features/spacing/utils/position.ts | 31 +++++++++++++---------- src/features/typography/index.ts | 34 +++++++++++++++++++++++--- src/main.ts | 12 ++++----- src/utils/css.ts | 2 ++ src/utils/get-options.ts | 26 ++++++++++++++------ 11 files changed, 111 insertions(+), 42 deletions(-) diff --git a/src/features/a11y/index.ts b/src/features/a11y/index.ts index 82db8e86..fd86083a 100644 --- a/src/features/a11y/index.ts +++ b/src/features/a11y/index.ts @@ -148,10 +148,10 @@ export const shortcut = async ( * * @example * ```ts - * init(); + * a11y(); * ``` */ -export const init = () => { +export const a11y = () => { const _tab_order_elements = document.querySelectorAll( '[data-speccer*="a11y tabstops"]' ); diff --git a/src/features/grid/index.ts b/src/features/grid/index.ts index c96fe674..97ffee9d 100644 --- a/src/features/grid/index.ts +++ b/src/features/grid/index.ts @@ -45,7 +45,7 @@ import { waitForFrame } from '../../utils/wait'; * * @param {HTMLElement} targetElement - The target element to create the grid overlay for. * @param {CSSStyleDeclaration} styles - The computed styles of the target element. - * @param {Record} options - Options to determine what to draw + * @param {SpeccerOptionsInterface} options - Options to determine what to draw * @returns {Promise} * * @example @@ -165,6 +165,7 @@ export const create = async ( * ![grid](https://github.com/phun-ky/speccer/blob/main/public/speccer-grid-full-light.png?raw=true) * * @param {HTMLElement} targetElement - The target element to add the grid overlay to. + * @param {SpeccerOptionsInterface|undefined} [options] - Options. * @returns {Promise} A promise that resolves once the overlay has been added. * * @example @@ -190,7 +191,10 @@ export const create = async ( * grid(targetElement, options); * ``` */ -export const element = async (targetElement: HTMLElement): Promise => { +export const grid = async ( + targetElement: HTMLElement, + options?: SpeccerOptionsInterface | undefined +): Promise => { if (!targetElement) return; if (isElementHidden(targetElement)) return; @@ -198,7 +202,7 @@ export const element = async (targetElement: HTMLElement): Promise => { const _areas_string: string = targetElement.getAttribute(SPECCER_DATA_ATTRIBUTE) || ''; const _target_style = await getStyles(targetElement); - const _options = getOptions(_areas_string, _target_style); + const _options = getOptions(_areas_string, _target_style, options); if (_options.type !== 'grid' || !_options.grid) return; diff --git a/src/features/mark/index.ts b/src/features/mark/index.ts index 4c40fc42..5cadcccc 100644 --- a/src/features/mark/index.ts +++ b/src/features/mark/index.ts @@ -73,10 +73,10 @@ export const create = (id: string, n = 'span'): HTMLElement => { * @example * ```typescript * const targetElement = document.getElementById('target'); - * element(targetElement); + * mark(targetElement); * ``` */ -export const element = async (targetElement: HTMLElement): Promise => { +export const mark = async (targetElement: HTMLElement): Promise => { if (!targetElement) return; if (isElementHidden(targetElement)) return; diff --git a/src/features/measure/index.ts b/src/features/measure/index.ts index 37095881..68ab5cc2 100644 --- a/src/features/measure/index.ts +++ b/src/features/measure/index.ts @@ -87,9 +87,12 @@ export const create = ( * ![measure](https://github.com/phun-ky/speccer/blob/main/public/speccer-measure-right-full-light.png?raw=true) * * @param {HTMLElement} targetElement - The target element to match styles with. + * @param {SpeccerOptionsInterface|undefined} [options] - Options. * @returns {Promise} - A promise that resolves after creating and styling the measurement element. * * @example + * ##### Height to the right + * * ```ts * const targetElement = document.getElementById('target'); * const options = { @@ -119,7 +122,10 @@ export const create = ( * measure(targetElement,options); * ``` */ -export const element = async (targetElement: HTMLElement): Promise => { +export const measure = async ( + targetElement: HTMLElement, + options?: SpeccerOptionsInterface | undefined +): Promise => { if (!targetElement) return; if (isElementHidden(targetElement)) return; @@ -129,7 +135,11 @@ export const element = async (targetElement: HTMLElement): Promise => { await waitForFrame(); - const _options = getOptions(_areas_string, getComputedStyle(targetElement)); + const _options = getOptions( + _areas_string, + getComputedStyle(targetElement), + options + ); if (_options.type !== 'measure' || !_options.measure) return; diff --git a/src/features/pin/index.ts b/src/features/pin/index.ts index 8e182558..6fe6b302 100644 --- a/src/features/pin/index.ts +++ b/src/features/pin/index.ts @@ -23,6 +23,7 @@ export { createPinElement } from './utils/create-pin-element'; // eslint-disable-next-line import/no-unused-modules export { pinElement } from './utils/pin-element'; +import { SpeccerOptionsInterface } from '../../types/speccer'; import { SPECCER_LITERALS } from '../../utils/constants'; import { getOptions } from '../../utils/get-options'; import { isElementHidden } from '../../utils/node'; @@ -36,6 +37,7 @@ import { pinElement } from './utils/pin-element'; * Create pinned elements based on the section element and its data-speccer attributes. * * @param {HTMLElement} sectionElement - The section element containing pinned elements. + * @param {SpeccerOptionsInterface|undefined} [options] - Options. * @returns {Promise} - A promise that resolves after creating pinned elements. * * @example @@ -45,7 +47,8 @@ import { pinElement } from './utils/pin-element'; * ``` */ export const pinElements = async ( - sectionElement: HTMLElement + sectionElement: HTMLElement, + options?: SpeccerOptionsInterface | undefined ): Promise => { if (!sectionElement) return; @@ -75,7 +78,7 @@ export const pinElements = async ( await waitForFrame(); const _target_style = getComputedStyle(targetElement); - const _options = getOptions(_areas_string, _target_style); + const _options = getOptions(_areas_string, _target_style, options); const _content = getContentForPin(_symbol, targetElement, _options); await pinElement(targetElement, sectionElement, _content, _options); diff --git a/src/features/spacing/index.ts b/src/features/spacing/index.ts index 36d2bbde..13c81eed 100644 --- a/src/features/spacing/index.ts +++ b/src/features/spacing/index.ts @@ -22,13 +22,14 @@ * @packageDocumentation */ /* eslint no-console:0 */ -import { isValidSpacingElement } from '../../utils/area'; -import { set as setClassNames } from '../../utils/classnames'; +import { SpeccerOptionsInterface } from '../../types/speccer'; +import { cx, set as setClassNames } from '../../utils/classnames'; import { getSpacing, getClassNameFromCSSProperty, getNumberValue } from '../../utils/css'; +import { getOptions } from '../../utils/get-options'; import { uniqueID } from '../../utils/id'; import { isElementHidden } from '../../utils/node'; import { get as getStyles } from '../../utils/styles'; @@ -68,9 +69,13 @@ export const create = ( * ![spacing](https://github.com/phun-ky/speccer/blob/main/public/speccer-spacing-light.png?raw=true) * * @param {HTMLElement} targetElement - The target element to create spacing elements for. + * @param {SpeccerOptionsInterface|undefined} [options] - Options * @returns {Promise} - A promise that resolves after creating and positioning the spacing elements. * * @example + * + * ##### Default, padding and margin + * * ```ts * const targetElement = document.getElementById('target'); * element(targetElement); diff --git a/src/features/spacing/utils/position.ts b/src/features/spacing/utils/position.ts index 2cb300c0..a274b25b 100644 --- a/src/features/spacing/utils/position.ts +++ b/src/features/spacing/utils/position.ts @@ -1,3 +1,4 @@ +import { SpeccerOptionsInterface } from '../../../types/speccer'; import { offset } from '../../../utils/position'; import { add as addStyles } from '../../../utils/styles'; import { waitForFrame } from '../../../utils/wait'; @@ -9,6 +10,7 @@ import { waitForFrame } from '../../../utils/wait'; * @param {number} value - The value of the CSS property. * @param {HTMLElement} spacingElement - The spacing element. * @param {HTMLElement} targetElement - The target element. + * @param {SpeccerOptionsInterface|undefined} [options] - Options. * @returns {Promise} - A promise that resolves after setting the position and dimensions. * * @example @@ -22,24 +24,27 @@ export const position = async ( property: string, value: number, spacingElement: HTMLElement, - targetElement: HTMLElement + targetElement: HTMLElement, + options?: SpeccerOptionsInterface | undefined ): Promise => { await waitForFrame(); const _target_rect = targetElement.getBoundingClientRect(); const _target_offset = await offset(targetElement); + const _width_modifier = options?.spacing?.bound ? 0 : 96; + const _height_modifier = options?.spacing?.bound ? 0 : 48; if (property === 'marginTop') addStyles(spacingElement, { height: `${value}px`, - width: _target_rect.width + 96 + 'px', - left: _target_offset.left - 96 + 'px', + width: _target_rect.width + _width_modifier + 'px', + left: _target_offset.left - _width_modifier + 'px', top: _target_offset.top - value + 'px' }); if (property === 'marginRight') addStyles(spacingElement, { - height: _target_rect.height + 48 + 'px', + height: _target_rect.height + _height_modifier + 'px', width: `${value}px`, left: _target_offset.left + parseInt(_target_rect.width + '', 10) + 'px', top: _target_offset.top + 'px' @@ -48,14 +53,14 @@ export const position = async ( if (property === 'marginBottom') addStyles(spacingElement, { height: `${value}px`, - width: _target_rect.width + 96 + 'px', - left: _target_offset.left - 96 + 'px', + width: _target_rect.width + _width_modifier + 'px', + left: _target_offset.left - _width_modifier + 'px', top: _target_offset.top + parseInt(_target_rect.height + '', 10) + 'px' }); if (property === 'marginLeft') addStyles(spacingElement, { - height: _target_rect.height + 48 + 'px', + height: _target_rect.height + _height_modifier + 'px', width: `${value}px`, left: _target_offset.left - value + 'px', top: _target_offset.top + 'px' @@ -64,16 +69,16 @@ export const position = async ( if (property === 'paddingTop') addStyles(spacingElement, { height: `${value}px`, - width: _target_rect.width + 96 + 'px', - left: _target_offset.left - 96 + 'px', + width: _target_rect.width + _width_modifier + 'px', + left: _target_offset.left - _width_modifier + 'px', top: _target_offset.top + 'px' }); if (property === 'paddingBottom') addStyles(spacingElement, { height: `${value}px`, - width: _target_rect.width + 96 + 'px', - left: _target_offset.left - 96 + 'px', + width: _target_rect.width + _width_modifier + 'px', + left: _target_offset.left - _width_modifier + 'px', top: _target_offset.top + (parseInt(_target_rect.height + '', 10) - value) + @@ -82,7 +87,7 @@ export const position = async ( if (property === 'paddingRight') addStyles(spacingElement, { - height: _target_rect.height + 48 + 'px', + height: _target_rect.height + _height_modifier + 'px', width: `${value}px`, left: _target_offset.left + @@ -93,7 +98,7 @@ export const position = async ( if (property === 'paddingLeft') addStyles(spacingElement, { - height: _target_rect.height + 48 + 'px', + height: _target_rect.height + _height_modifier + 'px', width: `${value}px`, left: _target_offset.left + 'px', top: _target_offset.top + 'px' diff --git a/src/features/typography/index.ts b/src/features/typography/index.ts index a2868488..2f31c2e4 100644 --- a/src/features/typography/index.ts +++ b/src/features/typography/index.ts @@ -84,20 +84,44 @@ export const create = ( /** * Create a specced typography element for a given target element. * - * ![typography](https://github.com/phun-ky/speccer/blob/main/public/typography.png?raw=true) + * ![typography](https://github.com/phun-ky/speccer/blob/main/public/speccer-typography-light.png?raw=true) * * @param {HTMLElement} targetElement - The target element to specc typography for. + * @param {SpeccerOptionsInterface|undefined} [options] - Custom options * @returns {Promise} - A promise that resolves once typography element is created and positioned. * * @example + * + * ##### Default + * * ```ts * const targetElement = document.querySelector('.target'); * if (targetElement) { * element(targetElement); * } * ``` + * + * ##### With syntax higlight feature + * + * ![typography](https://github.com/phun-ky/speccer/blob/main/public/speccer-typography-syntax-light.png?raw=true) + * + * ```ts + * const targetElement = document.querySelector('.target'); + * const options = { + * typography : { + * useSyntaxHighlighting: true + * } + * }; + * + * if (targetElement) { + * element(targetElement, options); + * } + * ``` */ -export const element = async (targetElement: HTMLElement): Promise => { +export const typography = async ( + targetElement: HTMLElement, + options?: SpeccerOptionsInterface | undefined +): Promise => { if (!targetElement) return; if (isElementHidden(targetElement)) return; @@ -107,7 +131,11 @@ export const element = async (targetElement: HTMLElement): Promise => { await waitForFrame(); - const _options = getOptions(_areas_string, getComputedStyle(targetElement)); + const _options = getOptions( + _areas_string, + getComputedStyle(targetElement), + options + ); if (_options.type !== 'typography' || !_options.typography) return; diff --git a/src/main.ts b/src/main.ts index d81a62e4..856cab60 100644 --- a/src/main.ts +++ b/src/main.ts @@ -19,21 +19,21 @@ /* eslint no-console:0 */ import './types/interfaces/global'; import { dom, lazy, manual, activate } from './config/browser'; -import { init as initA11y } from './features/a11y'; -import { create as gridCreate, element as gridElement } from './features/grid'; -import { create as markCreate, element as markElement } from './features/mark'; +import { a11y as initA11y } from './features/a11y'; +import { create as gridCreate, grid as gridElement } from './features/grid'; +import { create as markCreate, mark as markElement } from './features/mark'; import { create as measureCreate, - element as measureElement + measure as measureElement } from './features/measure'; import { createPinElement, pinElement, pinElements } from './features/pin'; import { create as spacingCreate, - element as spacingElement + spacing as spacingElement } from './features/spacing'; import { create as typographyCreate, - element as typographyElement + typography as typographyElement } from './features/typography'; import { SPECCER_DATA_ATTRIBUTE, diff --git a/src/utils/css.ts b/src/utils/css.ts index 7ba196d7..57f6f2b9 100644 --- a/src/utils/css.ts +++ b/src/utils/css.ts @@ -3,6 +3,7 @@ import { SpacingCSSPropertiesType, TypographyCSSPropertiesType } from '../types/css'; +import { SpeccerOptionsInterface } from '../types/speccer'; import { SPECCER_DEFAULT_PIN_SPACE, @@ -76,6 +77,7 @@ export const getClassNameFromCSSProperty = (property: string): string => { * Extracts spacing-related CSS properties from a style object. * * @param {SpacingCSSPropertiesType} style - The style object. + * @param {SpeccerOptionsInterface|undefined} [options] - Options * @returns {SpacingCSSPropertiesType} - The extracted spacing-related properties. * * @example diff --git a/src/utils/get-options.ts b/src/utils/get-options.ts index 0fb49036..6cbd0f25 100644 --- a/src/utils/get-options.ts +++ b/src/utils/get-options.ts @@ -88,6 +88,7 @@ const getSpacingToggleValue = (areaString: string) => { * * @param {HTMLElement} targetElement - The HTML element for which options are being generated. * @param {string} areaString - The string representing different area types. + * @param {SpeccerOptionsInterface|undefined} [customOptions] - Custom options * @returns {SpeccerOptionsInterface} The generated Speccer options. * * @example @@ -99,7 +100,8 @@ const getSpacingToggleValue = (areaString: string) => { */ export const getOptions = ( areaString: string, - targetStyle: CSSStyleDeclaration + targetStyle: CSSStyleDeclaration, + customOptions?: SpeccerOptionsInterface | undefined ): SpeccerOptionsInterface => { const type = getFeatureBasedOnArea(areaString, targetStyle); const options: SpeccerOptionsInterface = { @@ -135,16 +137,26 @@ export const getOptions = ( } if (type === 'grid') { - let toggle = 'both'; + const _toggle_value = getGridToggleValue(areaString); - if (areaString?.includes('columns')) toggle = 'columns'; + options['grid'] = { + toggle: _toggle_value, + both: _toggle_value === 'both', + rows: _toggle_value === 'rows', + columns: _toggle_value === 'columns' + }; + } - if (areaString?.includes('rows')) toggle = 'rows'; + if (type === 'spacing') { + const _toggle_value = getSpacingToggleValue(areaString); - options['grid'] = { - toggle + options['spacing'] = { + both: _toggle_value === 'both', + margin: _toggle_value === 'margin', + padding: _toggle_value === 'padding', + bound: areaString.includes('bound') }; } - return options; + return { ...options, ...customOptions }; }; From 81bdfda0e30b24bd0fbda321e2a923fe563b1839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:36:55 +0200 Subject: [PATCH 13/19] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Add=20missing=20st?= =?UTF-8?q?ylesheet=20to=20`bound`=20option=20for=20`spacing`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/spacing/styles/bound.styl | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/features/spacing/styles/bound.styl diff --git a/src/features/spacing/styles/bound.styl b/src/features/spacing/styles/bound.styl new file mode 100644 index 00000000..a2097f0e --- /dev/null +++ b/src/features/spacing/styles/bound.styl @@ -0,0 +1,11 @@ +.ph-speccer.speccer.spacing.bound + &.padding, + &.margin + &.bottom, + &.top, + &.right, + &.left + justify-content center + align-items center + padding 0 + From 470a77b934b5312b7fbbf6c637c0303b1038d398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:39:30 +0200 Subject: [PATCH 14/19] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20Add=20missing?= =?UTF-8?q?=20types=20and=20refactor=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/types/bezier.ts | 12 +++++ src/utils/bezier.ts | 110 ++++++++++++++++++++++++++++---------------- 2 files changed, 82 insertions(+), 40 deletions(-) diff --git a/src/types/bezier.ts b/src/types/bezier.ts index 44a08f36..46549e2a 100644 --- a/src/types/bezier.ts +++ b/src/types/bezier.ts @@ -38,6 +38,18 @@ export type BezierPathOptionsType = { pos2: string; }; +export type CoordinatesType = { + x: number; + y: number; +}; + +export type CoordinatesForBezierObjectType = { + firstPoint: CoordinatesType; + firstControl: CoordinatesType; + lastPoint: CoordinatesType; + lastControl: CoordinatesType; +}; + /** * Parameters for creating coordinates for a curve. */ diff --git a/src/utils/bezier.ts b/src/utils/bezier.ts index b0a95640..0cb7bd0a 100644 --- a/src/utils/bezier.ts +++ b/src/utils/bezier.ts @@ -1,5 +1,6 @@ import { BezierPathOptionsType, + CoordinatesForBezierObjectType, CreateCoordinatesForCurveCoordParamType, CreateCoordinatesForCurveOptionsParamType, CurlyBezierPathOptionsType @@ -10,8 +11,8 @@ import { getCoordsPairFromObjects } from './get-coords-pair-from-objects'; /** * Calculates coordinates for a Bezier curve between two points. * - * @param coords - The coordinates of the start and end points. - * @param options - Options for controlling the curve's shape. + * @param {CreateCoordinatesForCurveCoordParamType} coords - The coordinates of the start and end points. + * @param {CreateCoordinatesForCurveOptionsParamType} options - Options for controlling the curve's shape. * @returns Coordinates for the Bezier curve. * * @example @@ -25,53 +26,82 @@ import { getCoordsPairFromObjects } from './get-coords-pair-from-objects'; export const createBezierCurveCoordinates = ( coords: CreateCoordinatesForCurveCoordParamType, options: CreateCoordinatesForCurveOptionsParamType -) => { +): CoordinatesForBezierObjectType => { const { x1, x2, y1, y2 } = coords; const { direct = false, firstSet = false, direction } = options; const firstPoint = { x: x1, y: y1 }; // The first point of the curve const lastPoint = { x: x2, y: y2 }; // The last point of the curve - let firstControl = { x: x1 + (x2 - x1) / 2, y: y1 }; // Control point for the first point - let lastControl = { x: x1 + (x2 - x1) / 2, y: y2 }; // Control point for the last point + if (!direct) { + return { + firstPoint, + firstControl: { x: x1 + (x2 - x1) / 2, y: y1 }, // Control point for the first point + lastPoint, + lastControl: { x: x1 + (x2 - x1) / 2, y: y2 } + }; + } - if (direct) { - if (firstSet) { - if (direction === 'west') { - firstControl = { x: x1 - 32, y: y1 - 16 / 2 }; - lastControl = { x: x2 + 32, y: y2 }; - } else if (direction === 'south') { - firstControl = { x: x1 - 16 / 2, y: y1 + 32 }; - lastControl = { x: x2, y: y2 - 32 }; - } else if (direction === 'east') { - firstControl = { x: x1 + 32, y: y1 - 16 / 2 }; - lastControl = { x: x2 - 32, y: y2 }; - } else { - firstControl = { x: x1 - 16 / 2, y: y1 - 32 }; - lastControl = { x: x2, y: y2 + 32 }; - } + if (firstSet) { + if (direction === 'west') { + return { + firstPoint, + firstControl: { x: x1 - 32, y: y1 - 16 / 2 }, + lastPoint, + lastControl: { x: x2 + 32, y: y2 } + }; + } else if (direction === 'south') { + return { + firstPoint, + firstControl: { x: x1 - 16 / 2, y: y1 + 32 }, + lastPoint, + lastControl: { x: x2, y: y2 - 32 } + }; + } else if (direction === 'east') { + return { + firstPoint, + firstControl: { x: x1 + 32, y: y1 - 16 / 2 }, + lastPoint, + lastControl: { x: x2 - 32, y: y2 } + }; } else { - if (direction === 'west') { - firstControl = { x: x1 - 32, y: y1 + 16 / 2 }; - lastControl = { x: x2 + 32, y: y2 }; - } else if (direction === 'south') { - firstControl = { x: x1 + 16 / 2, y: y1 + 32 }; - lastControl = { x: x2, y: y2 - 32 }; - } else if (direction === 'east') { - firstControl = { x: x1 + 32, y: y1 + 16 / 2 }; - lastControl = { x: x2 - 32, y: y2 }; - } else { - firstControl = { x: x1 + 16 / 2, y: y1 - 32 }; - lastControl = { x: x2, y: y2 + 32 }; - } + return { + firstPoint, + firstControl: { x: x1 - 16 / 2, y: y1 - 32 }, + lastPoint, + lastControl: { x: x2, y: y2 + 32 } + }; + } + } else { + if (direction === 'west') { + return { + firstPoint, + firstControl: { x: x1 - 32, y: y1 + 16 / 2 }, + lastPoint, + lastControl: { x: x2 + 32, y: y2 } + }; + } else if (direction === 'south') { + return { + firstPoint, + firstControl: { x: x1 + 16 / 2, y: y1 + 32 }, + lastPoint, + lastControl: { x: x2, y: y2 - 32 } + }; + } else if (direction === 'east') { + return { + firstPoint, + firstControl: { x: x1 + 32, y: y1 + 16 / 2 }, + lastPoint, + lastControl: { x: x2 - 32, y: y2 } + }; + } else { + return { + firstPoint, + firstControl: { x: x1 + 16 / 2, y: y1 - 32 }, + lastPoint, + lastControl: { x: x2, y: y2 + 32 } + }; } } - - return { - firstPoint, - firstControl, - lastPoint, - lastControl - }; }; /** From 70ca6410912d6e8d7e07470f6635a6d44aeafb5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:39:53 +0200 Subject: [PATCH 15/19] =?UTF-8?q?perf:=20=E2=9A=A1=EF=B8=8F=20Use=20`waitF?= =?UTF-8?q?orFrame`=20just=20in=20case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/position.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/utils/position.ts b/src/utils/position.ts index bf458c62..1896443e 100644 --- a/src/utils/position.ts +++ b/src/utils/position.ts @@ -78,6 +78,7 @@ export const offset = async ( await waitForFrame(); _target_rect = targetEl.getBoundingClientRect(); _el_offset_top = _target_rect.top; + await waitForFrame(); targetEl.style.position = originalPosition; } // If any of the parents are sticky, we need to account for that @@ -90,6 +91,7 @@ export const offset = async ( await waitForFrame(); _target_rect = targetEl.getBoundingClientRect(); _el_offset_top = _target_rect.top; + await waitForFrame(); stickyParentElement.style.position = originalPosition; } @@ -121,6 +123,9 @@ export const offsetWithCenter = async ( await waitForFrame(); const _source_rect = sourceEl.getBoundingClientRect(); + + await waitForFrame(); + const _target_rect = targetEl.getBoundingClientRect(); const _el_offset_top = _target_rect.top + window.scrollY; const _el_offset_left = _target_rect.left + window.scrollX; From 7d739cc19c097911e86b9af7069384c70c7f1a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:40:02 +0200 Subject: [PATCH 16/19] =?UTF-8?q?style:=20=F0=9F=92=84=20Format?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/remove-speccer-element.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/utils/remove-speccer-element.ts b/src/utils/remove-speccer-element.ts index 81c40b82..d5bf6f06 100644 --- a/src/utils/remove-speccer-element.ts +++ b/src/utils/remove-speccer-element.ts @@ -18,7 +18,6 @@ export const removeSpeccerElement = (el: HTMLElement): void => { const _selector = el.getAttribute('data-speccer-element-id'); - if (!_selector) return; const _pin_element = @@ -28,15 +27,17 @@ export const removeSpeccerElement = (el: HTMLElement): void => { if (!_pin_element) return; if (Object.prototype.isPrototypeOf.call(NodeList.prototype, _pin_element)) { - [...(_pin_element as unknown as HTMLElement[])].forEach((el:HTMLElement) => { - el.remove(); - el.classList.remove('is-specced'); - }); + [...(_pin_element as unknown as HTMLElement[])].forEach( + (el: HTMLElement) => { + el.remove(); + el.classList.remove('is-specced'); + } + ); } else { // We also need to remove the svg paths if it is in use if ( (_pin_element as HTMLElement).classList.contains('curly') || - (_pin_element as HTMLElement).classList.contains('svg') + (_pin_element as HTMLElement).classList.contains('svg') ) { const _el_ID = el.getAttribute('id'); From 5d84d2efbd52e0b64315d85e2f9b7a5bdd2e399e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 21:45:14 +0200 Subject: [PATCH 17/19] =?UTF-8?q?test:=20=F0=9F=92=8D=20Forgot=20to=20adju?= =?UTF-8?q?st=20test=20after=20adding=20new=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/__tests__/get-options.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/utils/__tests__/get-options.ts b/src/utils/__tests__/get-options.ts index e1bcb4d7..41d2d2d6 100644 --- a/src/utils/__tests__/get-options.ts +++ b/src/utils/__tests__/get-options.ts @@ -68,6 +68,9 @@ describe('getOptions', () => { position: 'top', type: 'grid', grid: { + both: false, + columns: true, + rows: false, toggle: 'columns' } }); @@ -85,6 +88,9 @@ describe('getOptions', () => { position: 'top', type: 'grid', grid: { + both: false, + columns: false, + rows: true, toggle: 'rows' } }); @@ -102,6 +108,9 @@ describe('getOptions', () => { position: 'top', type: 'grid', grid: { + both: true, + columns: false, + rows: false, toggle: 'both' } }); From cf875f49fe93a4d5b3a23e2028690ee96e331d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 22:14:07 +0200 Subject: [PATCH 18/19] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20Make=20positio?= =?UTF-8?q?n=20function=20return=20styles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/spacing/index.ts | 6 ++-- src/features/spacing/utils/position.ts | 45 +++++++++++++------------- src/types/position.ts | 10 ++++++ 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/features/spacing/index.ts b/src/features/spacing/index.ts index 13c81eed..466e0fad 100644 --- a/src/features/spacing/index.ts +++ b/src/features/spacing/index.ts @@ -32,7 +32,7 @@ import { import { getOptions } from '../../utils/get-options'; import { uniqueID } from '../../utils/id'; import { isElementHidden } from '../../utils/node'; -import { get as getStyles } from '../../utils/styles'; +import { get as getStyles, add as addStyles } from '../../utils/styles'; import { position } from './utils/position'; @@ -158,6 +158,8 @@ export const spacing = async ( ); document.body.appendChild(_speccer_el); - await position(property, _value, _speccer_el, targetElement, _options); + const _styles = await position(property, _value, targetElement, _options); + + await addStyles(_speccer_el, _styles as object); }); }; diff --git a/src/features/spacing/utils/position.ts b/src/features/spacing/utils/position.ts index a274b25b..7ece0631 100644 --- a/src/features/spacing/utils/position.ts +++ b/src/features/spacing/utils/position.ts @@ -1,6 +1,6 @@ +import { PositionUnitPropertiesType } from '../../../types/position'; import { SpeccerOptionsInterface } from '../../../types/speccer'; import { offset } from '../../../utils/position'; -import { add as addStyles } from '../../../utils/styles'; import { waitForFrame } from '../../../utils/wait'; /** @@ -8,25 +8,22 @@ import { waitForFrame } from '../../../utils/wait'; * * @param {string} property - The CSS property to set (e.g., 'marginTop', 'marginLeft', etc.). * @param {number} value - The value of the CSS property. - * @param {HTMLElement} spacingElement - The spacing element. * @param {HTMLElement} targetElement - The target element. * @param {SpeccerOptionsInterface|undefined} [options] - Options. - * @returns {Promise} - A promise that resolves after setting the position and dimensions. + * @returns {Promise} - A promise that resolves after setting the position and dimensions. * * @example * ```ts - * const spacingElement = document.getElementById('spacing'); * const targetElement = document.getElementById('target'); - * position('marginTop', 20, spacingElement, targetElement); + * position('marginTop', 20, targetElement); * ``` */ export const position = async ( property: string, value: number, - spacingElement: HTMLElement, targetElement: HTMLElement, options?: SpeccerOptionsInterface | undefined -): Promise => { +): Promise => { await waitForFrame(); const _target_rect = targetElement.getBoundingClientRect(); @@ -35,47 +32,47 @@ export const position = async ( const _height_modifier = options?.spacing?.bound ? 0 : 48; if (property === 'marginTop') - addStyles(spacingElement, { + return { height: `${value}px`, width: _target_rect.width + _width_modifier + 'px', left: _target_offset.left - _width_modifier + 'px', top: _target_offset.top - value + 'px' - }); + }; if (property === 'marginRight') - addStyles(spacingElement, { + return { height: _target_rect.height + _height_modifier + 'px', width: `${value}px`, left: _target_offset.left + parseInt(_target_rect.width + '', 10) + 'px', top: _target_offset.top + 'px' - }); + }; if (property === 'marginBottom') - addStyles(spacingElement, { + return { height: `${value}px`, width: _target_rect.width + _width_modifier + 'px', left: _target_offset.left - _width_modifier + 'px', top: _target_offset.top + parseInt(_target_rect.height + '', 10) + 'px' - }); + }; if (property === 'marginLeft') - addStyles(spacingElement, { + return { height: _target_rect.height + _height_modifier + 'px', width: `${value}px`, left: _target_offset.left - value + 'px', top: _target_offset.top + 'px' - }); + }; if (property === 'paddingTop') - addStyles(spacingElement, { + return { height: `${value}px`, width: _target_rect.width + _width_modifier + 'px', left: _target_offset.left - _width_modifier + 'px', top: _target_offset.top + 'px' - }); + }; if (property === 'paddingBottom') - addStyles(spacingElement, { + return { height: `${value}px`, width: _target_rect.width + _width_modifier + 'px', left: _target_offset.left - _width_modifier + 'px', @@ -83,10 +80,10 @@ export const position = async ( _target_offset.top + (parseInt(_target_rect.height + '', 10) - value) + 'px' - }); + }; if (property === 'paddingRight') - addStyles(spacingElement, { + return { height: _target_rect.height + _height_modifier + 'px', width: `${value}px`, left: @@ -94,13 +91,15 @@ export const position = async ( (parseInt(_target_rect.width + '', 10) - value) + 'px', top: _target_offset.top + 'px' - }); + }; if (property === 'paddingLeft') - addStyles(spacingElement, { + return { height: _target_rect.height + _height_modifier + 'px', width: `${value}px`, left: _target_offset.left + 'px', top: _target_offset.top + 'px' - }); + }; + + return undefined; }; diff --git a/src/types/position.ts b/src/types/position.ts index 9dee8306..a057cc62 100644 --- a/src/types/position.ts +++ b/src/types/position.ts @@ -8,6 +8,16 @@ export type PositionPropertiesType = { width: number; }; +/** + * Type definition for position properties with units. + */ +export type PositionUnitPropertiesType = { + top: string; + left: string; + height: string; + width: string; +}; + /** * Type definition for input parameters related to positioning. */ From 7c308c01c38f52f6dd9e459388d3554c8d963a86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Vassbotn=20R=C3=B8yne-Helgesen?= Date: Fri, 30 Aug 2024 22:14:25 +0200 Subject: [PATCH 19/19] =?UTF-8?q?test:=20=F0=9F=92=8D=20Add=20test=20for?= =?UTF-8?q?=20`spacing/position`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spacing/utils/__tests__/position.ts | 298 +++++++++--------- 1 file changed, 150 insertions(+), 148 deletions(-) diff --git a/src/features/spacing/utils/__tests__/position.ts b/src/features/spacing/utils/__tests__/position.ts index d5c344b4..e61af0eb 100644 --- a/src/features/spacing/utils/__tests__/position.ts +++ b/src/features/spacing/utils/__tests__/position.ts @@ -3,255 +3,257 @@ import { JSDOM } from 'jsdom'; import { strict as assert } from 'assert'; import { describe, test } from 'node:test'; -import { position } from '../position'; // Adjust the path to your module +import { SpeccerOptionsInterface } from '../../../../types/speccer'; +import { position } from '../position'; describe('position', () => { - test('position should correctly apply styles for marginTop', async () => { - const { window } = new JSDOM( - '
' - ); + test('position should correctly calculate properties for marginTop', async () => { + // Set up JSDOM environment + const { window } = new JSDOM('
'); const document = window.document; - const spacingElement = document.getElementById('spacing'); const targetElement = document.getElementById('target'); - // Mock the getBoundingClientRect method to return predefined dimensions + // Mock getBoundingClientRect targetElement.getBoundingClientRect = () => ({ width: 100, height: 50, left: 10, - top: 20 - }); - spacingElement.getBoundingClientRect = () => ({ - width: 100, - height: 20, - left: 10, - top: 0 + top: 20, + right: 110, + bottom: 70 }); - await position('marginTop', 20, spacingElement, targetElement); - assert.deepEqual(spacingElement.getBoundingClientRect(), { - width: 100, - height: 20, - left: 10, - top: 0 + const result = await position('marginTop', 20, targetElement); + + assert.deepEqual(result, { + height: '20px', + width: '196px', + left: '-86px', + top: '0px' }); }); - test('position should correctly apply styles for marginRight', async () => { - const { window } = new JSDOM( - '
' - ); + + test('position should correctly calculate properties for marginRight', async () => { + const { window } = new JSDOM('
'); const document = window.document; - const spacingElement = document.getElementById('spacing'); const targetElement = document.getElementById('target'); - // Mock the getBoundingClientRect method to return predefined dimensions targetElement.getBoundingClientRect = () => ({ width: 100, height: 50, left: 10, - top: 20 - }); - spacingElement.getBoundingClientRect = () => ({ - width: 150, - height: 200, - left: 160, - top: 0 + top: 20, + right: 110, + bottom: 70 }); - await position('marginTop', 150, spacingElement, targetElement); - assert.deepEqual(spacingElement.getBoundingClientRect(), { - width: 150, - height: 200, - left: 160, - top: 0 + + const result = await position('marginRight', 20, targetElement); + + assert.deepEqual(result, { + height: '98px', + width: '20px', + left: '110px', + top: '20px' }); }); - test('position should correctly apply styles for marginBottom', async () => { - const { window } = new JSDOM( - '
' - ); + + test('position should correctly calculate properties for marginBottom with options', async () => { + const { window } = new JSDOM('
'); const document = window.document; - const spacingElement = document.getElementById('spacing'); const targetElement = document.getElementById('target'); - // Mock the getBoundingClientRect method to return predefined dimensions targetElement.getBoundingClientRect = () => ({ width: 100, height: 50, left: 10, - top: 20 + top: 20, + right: 110, + bottom: 70 }); - spacingElement.getBoundingClientRect = () => ({ - width: 100, - height: 200, - left: 110, - top: 0 + + + + const result = await position('marginBottom', 30, targetElement, { spacing: { bound: true } } as unknown as SpeccerOptionsInterface); + + assert.deepEqual(result, { + height: '30px', + width: '100px', + left: '10px', + top: '70px' }); + }); - await position('marginTop', 200, spacingElement, targetElement); + test('position should return undefined for unsupported properties', async () => { + const { window } = new JSDOM('
'); + const document = window.document; + const targetElement = document.getElementById('target'); - assert.deepEqual(spacingElement.getBoundingClientRect(), { + targetElement.getBoundingClientRect = () => ({ width: 100, - height: 200, - left: 110, - top: 0 + height: 50, + left: 10, + top: 20, + right: 110, + bottom: 70 }); + + + + const result = await position('unsupportedProperty', 20, targetElement); + + assert.equal(result, undefined); }); - test('position should correctly apply styles for marginLeft', async () => { - const { window } = new JSDOM( - '
' - ); + + test('position should correctly calculate properties for marginLeft', async () => { + const { window } = new JSDOM('
'); const document = window.document; - const spacingElement = document.getElementById('spacing'); const targetElement = document.getElementById('target'); - // Mock the getBoundingClientRect method to return predefined dimensions targetElement.getBoundingClientRect = () => ({ width: 100, height: 50, left: 10, - top: 20 - }); - spacingElement.getBoundingClientRect = () => ({ - width: 200, - height: 200, - left: -90, - top: 0 + top: 20, + right: 110, + bottom: 70 }); - await position('marginTop', 200, spacingElement, targetElement); - assert.deepEqual(spacingElement.getBoundingClientRect(), { - width: 200, - height: 200, - left: -90, - top: 0 + const result = await position('marginLeft', 20, targetElement); + + assert.deepEqual(result, { + height: '98px', + width: '20px', + left: '-10px', + top: '20px' }); }); - test('position should correctly apply styles for paddingTop', async () => { - const { window } = new JSDOM( - '
' - ); + + test('position should correctly calculate properties for paddingTop', async () => { + const { window } = new JSDOM('
'); const document = window.document; - const spacingElement = document.getElementById('spacing'); const targetElement = document.getElementById('target'); - // Mock the getBoundingClientRect method to return predefined dimensions targetElement.getBoundingClientRect = () => ({ width: 100, height: 50, left: 10, - top: 20 + top: 20, + right: 110, + bottom: 70 }); - spacingElement.getBoundingClientRect = () => ({ - width: 100, - height: 20, - left: 10, - top: 0 + + + const result = await position('paddingTop', 30, targetElement); + + assert.deepEqual(result, { + height: '30px', + width: '196px', + left: '-86px', + top: '20px' }); + }); - await position('paddingTop', 20, spacingElement, targetElement); + test('position should correctly calculate properties for paddingBottom with options', async () => { + const { window } = new JSDOM('
'); + const document = window.document; + const targetElement = document.getElementById('target'); - assert.deepEqual(spacingElement.getBoundingClientRect(), { + targetElement.getBoundingClientRect = () => ({ width: 100, - height: 20, + height: 50, left: 10, - top: 0 + top: 20, + right: 110, + bottom: 70 + }); + + + const result = await position('paddingBottom', 30, targetElement, { spacing: { bound: true } } as unknown as SpeccerOptionsInterface); + + assert.deepEqual(result, { + height: '30px', + width: '100px', + left: '10px', + top: '40px' }); }); - test('position should correctly apply styles for paddingRight', async () => { - const { window } = new JSDOM( - '
' - ); + + test('position should correctly calculate properties for paddingRight', async () => { + const { window } = new JSDOM('
'); const document = window.document; - const spacingElement = document.getElementById('spacing'); const targetElement = document.getElementById('target'); - // Mock the getBoundingClientRect method to return predefined dimensions targetElement.getBoundingClientRect = () => ({ width: 100, height: 50, left: 10, - top: 20 - }); - spacingElement.getBoundingClientRect = () => ({ - width: 150, - height: 200, - left: 160, - top: 0 + top: 20, + right: 110, + bottom: 70 }); - await position('paddingTop', 150, spacingElement, targetElement); - assert.deepEqual(spacingElement.getBoundingClientRect(), { - width: 150, - height: 200, - left: 160, - top: 0 + const result = await position('paddingRight', 40, targetElement); + + assert.deepEqual(result, { + height: '98px', + width: '40px', + left: '70px', + top: '20px' }); }); - test('position should correctly apply styles for paddingBottom', async () => { - const { window } = new JSDOM( - '
' - ); + + test('position should correctly calculate properties for paddingLeft', async () => { + const { window } = new JSDOM('
'); const document = window.document; - const spacingElement = document.getElementById('spacing'); const targetElement = document.getElementById('target'); - // Mock the getBoundingClientRect method to return predefined dimensions targetElement.getBoundingClientRect = () => ({ width: 100, height: 50, left: 10, - top: 20 - }); - spacingElement.getBoundingClientRect = () => ({ - width: 100, - height: 200, - left: 110, - top: 0 + top: 20, + right: 110, + bottom: 70 }); - await position('paddingTop', 200, spacingElement, targetElement); - assert.deepEqual(spacingElement.getBoundingClientRect(), { - width: 100, - height: 200, - left: 110, - top: 0 + const result = await position('paddingLeft', 40, targetElement); + + assert.deepEqual(result, { + height: '98px', + width: '40px', + left: '10px', + top: '20px' }); }); - test('position should correctly apply styles for paddingLeft', async () => { - const { window } = new JSDOM( - '
' - ); + + test('position should correctly handle bound spacing option', async () => { + const { window } = new JSDOM('
'); const document = window.document; - const spacingElement = document.getElementById('spacing'); const targetElement = document.getElementById('target'); - // Mock the getBoundingClientRect method to return predefined dimensions targetElement.getBoundingClientRect = () => ({ width: 100, height: 50, left: 10, - top: 20 - }); - spacingElement.getBoundingClientRect = () => ({ - width: 200, - height: 200, - left: -90, - top: 0 + top: 20, + right: 110, + bottom: 70 }); - await position('paddingTop', 200, spacingElement, targetElement); - assert.deepEqual(spacingElement.getBoundingClientRect(), { - width: 200, - height: 200, - left: -90, - top: 0 + const result = await position('paddingTop', 30, targetElement, { spacing: { bound: true } } as unknown as SpeccerOptionsInterface); + + assert.deepEqual(result, { + height: '30px', + width: '100px', + left: '10px', + top: '20px' }); }); });