🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@tylertech/forge-core

Package Overview
Dependencies
Maintainers
6
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tylertech/forge-core - npm Package Compare versions

Comparing version
3.2.1
to
3.3.0-dev.0
+16
dist/a11y/live-announcer.d.ts
declare const LIVE_ANNOUNCER_KEY: unique symbol;
export type LiveAnnouncerPoliteness = 'polite' | 'assertive';
declare global {
interface Window {
[LIVE_ANNOUNCER_KEY]: LiveAnnouncer;
}
}
export declare class LiveAnnouncer {
private _politeElement;
private _assertiveElement;
private constructor();
static get instance(): LiveAnnouncer;
announce(message: string, politeness?: LiveAnnouncerPoliteness): void;
private _getElement;
}
export {};
import { createVisuallyHiddenElement } from '../utils/a11y.js';
const LIVE_ANNOUNCER_KEY = Symbol('forgeLiveAnnouncer');
export class LiveAnnouncer {
constructor() {
this._politeElement = null;
this._assertiveElement = null;
}
static get instance() {
if (!window[LIVE_ANNOUNCER_KEY]) {
window[LIVE_ANNOUNCER_KEY] = new LiveAnnouncer();
}
return window[LIVE_ANNOUNCER_KEY];
}
announce(message, politeness = 'polite') {
const element = this._getElement(politeness);
element.textContent = '';
setTimeout(() => {
element.textContent = message;
}, 100);
}
_getElement(politeness) {
const isPolite = politeness === 'polite';
const existing = isPolite ? this._politeElement : this._assertiveElement;
if (existing && document.body.contains(existing)) {
return existing;
}
const element = createVisuallyHiddenElement(`data-forge-live-announcer-${politeness}`);
element.setAttribute('aria-live', politeness);
element.setAttribute('aria-atomic', 'true');
document.body.appendChild(element);
if (isPolite) {
this._politeElement = element;
}
else {
this._assertiveElement = element;
}
return element;
}
}
+2
-1

@@ -1,1 +0,2 @@

export * from './a11y';
export * from './a11y.js';
export * from './live-announcer.js';

@@ -1,1 +0,2 @@

export * from './a11y';
export * from './a11y.js';
export * from './live-announcer.js';

@@ -1,47 +0,5 @@

const days = [
'Su',
'Mo',
'Tu',
'We',
'Th',
'Fr',
'Sa'
];
const daysLong = [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
];
const months = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
];
const monthsLong = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
];
const days = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
const daysLong = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const monthsLong = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
export const DATE_CONSTANTS = {

@@ -48,0 +6,0 @@ days,

@@ -1,1 +0,1 @@

export * from './date-constants';
export * from './date-constants.js';

@@ -1,1 +0,1 @@

export * from './date-constants';
export * from './date-constants.js';

@@ -1,3 +0,3 @@

import { replaceElement, isArray, removeAllChildren, walkUpUntil } from '../utils';
import { CUSTOM_ELEMENT_CSS_PROPERTY, CUSTOM_ELEMENT_DEPENDENCIES_PROPERTY, CUSTOM_ELEMENT_NAME_PROPERTY, CUSTOM_ELEMENT_STYLESHEETS_PROPERTY, CUSTOM_ELEMENT_TEMPLATE_PROPERTY, supportsConstructableStyleSheets } from './constants';
import { replaceElement, isArray, removeAllChildren, walkUpUntil } from '../utils/index.js';
import { CUSTOM_ELEMENT_CSS_PROPERTY, CUSTOM_ELEMENT_DEPENDENCIES_PROPERTY, CUSTOM_ELEMENT_NAME_PROPERTY, CUSTOM_ELEMENT_STYLESHEETS_PROPERTY, CUSTOM_ELEMENT_TEMPLATE_PROPERTY, supportsConstructableStyleSheets } from './constants.js';
/**

@@ -47,3 +47,3 @@ * Recursively defines a component as a custom elements and all of its dependencies.

export function upgradeProperty(instance, property) {
if (instance.hasOwnProperty(property)) {
if (Object.prototype.hasOwnProperty.call(instance, property)) {
const value = instance[property];

@@ -50,0 +50,0 @@ delete instance[property];

@@ -11,3 +11,3 @@ class CorePropertyOptions {

const CORE_PROPERTY_NAME = '_core';
const corePropertyNotFoundMessage = (className, propertyName) => `${className}\'s core does not contain the property \"${propertyName}\"`;
const corePropertyNotFoundMessage = (className, propertyName) => `${className}'s core does not contain the property "${propertyName}"`;
const coreNotFoundMessage = (className) => `${className} does not have a core`;

@@ -72,4 +72,3 @@ function runIfVerified(target, propertyName, action) {

get() {
const that = this;
return wireDescriptorGet(that, corePropertyName, attrs => {
return wireDescriptorGet(this, corePropertyName, attrs => {
let setter;

@@ -79,3 +78,3 @@ if (allOptions.set) {

}
Reflect.defineProperty(that, corePropertyName, { configurable: true, enumerable: true, ...attrs, ...setter });
Reflect.defineProperty(this, corePropertyName, { configurable: true, enumerable: true, ...attrs, ...setter });
return attrs.get();

@@ -87,4 +86,3 @@ });

set(value) {
const that = this;
return wireDescriptorSet(that, corePropertyName, attrs => {
return wireDescriptorSet(this, corePropertyName, attrs => {
let getter;

@@ -94,3 +92,3 @@ if (allOptions.get) {

}
Reflect.defineProperty(that, corePropertyName, { configurable: true, enumerable: true, ...attrs, ...getter });
Reflect.defineProperty(this, corePropertyName, { configurable: true, enumerable: true, ...attrs, ...getter });
attrs.set(value);

@@ -97,0 +95,0 @@ });

@@ -1,3 +0,3 @@

import { defineCustomElement } from '../component-utils';
import { CUSTOM_ELEMENT_NAME_PROPERTY, CUSTOM_ELEMENT_DEPENDENCIES_PROPERTY } from '../constants';
import { defineCustomElement } from '../component-utils.js';
import { CUSTOM_ELEMENT_NAME_PROPERTY, CUSTOM_ELEMENT_DEPENDENCIES_PROPERTY } from '../constants.js';
/**

@@ -4,0 +4,0 @@ * This decorator is intended to be used on classes that extend `HTMLElement` to

@@ -1,2 +0,2 @@

export * from './custom-element';
export * from './core-property';
export * from './custom-element.js';
export * from './core-property.js';

@@ -1,2 +0,2 @@

export * from './custom-element';
export * from './core-property';
export * from './custom-element.js';
export * from './core-property.js';

@@ -1,4 +0,4 @@

export * from './decorators';
export * from './component-utils';
export * from './constants';
export * from './decorators/index.js';
export * from './component-utils.js';
export * from './constants.js';
export interface ICustomElement extends HTMLElement {

@@ -5,0 +5,0 @@ initializedCallback?: () => void;

@@ -1,3 +0,3 @@

export * from './decorators';
export * from './component-utils';
export * from './constants';
export * from './decorators/index.js';
export * from './component-utils.js';
export * from './constants.js';

@@ -1,1 +0,1 @@

export * from './event-aware';
export * from './event-aware.js';

@@ -1,1 +0,1 @@

export * from './event-aware';
export * from './event-aware.js';

@@ -6,11 +6,11 @@ /**

*/
export * from './a11y';
export * from './constants';
export * from './custom-elements';
export * from './events';
export * from './media-observer';
export * from './message-list';
export * from './resize';
export * from './scroll';
export * from './services';
export * from './utils';
export * from './a11y/index.js';
export * from './constants/index.js';
export * from './custom-elements/index.js';
export * from './events/index.js';
export * from './media-observer/index.js';
export * from './message-list/index.js';
export * from './resize/index.js';
export * from './scroll/index.js';
export * from './services/index.js';
export * from './utils/index.js';

@@ -6,11 +6,11 @@ /**

*/
export * from './a11y';
export * from './constants';
export * from './custom-elements';
export * from './events';
export * from './media-observer';
export * from './message-list';
export * from './resize';
export * from './scroll';
export * from './services';
export * from './utils';
export * from './a11y/index.js';
export * from './constants/index.js';
export * from './custom-elements/index.js';
export * from './events/index.js';
export * from './media-observer/index.js';
export * from './message-list/index.js';
export * from './resize/index.js';
export * from './scroll/index.js';
export * from './services/index.js';
export * from './utils/index.js';

@@ -1,3 +0,3 @@

export * from './media-observer';
export * from './media-observer-utils';
export * from './types';
export * from './media-observer.js';
export * from './media-observer-utils.js';
export * from './types.js';

@@ -1,3 +0,3 @@

export * from './media-observer';
export * from './media-observer-utils';
export * from './types';
export * from './media-observer.js';
export * from './media-observer-utils.js';
export * from './types.js';

@@ -1,2 +0,2 @@

import { IMediaRange, MediaFeature, NamedMediaQuery, RangeMediaFeature } from './types';
import { IMediaRange, MediaFeature, NamedMediaQuery, RangeMediaFeature } from './types.js';
/** Returns the names of all queries that match. Used for range media features. */

@@ -3,0 +3,0 @@ export declare function getMatchingValues(namedQueries: NamedMediaQuery[]): string[];

@@ -1,2 +0,2 @@

import { ALL_MEDIA_FEATURES } from './types';
import { ALL_MEDIA_FEATURES } from './types.js';
/** Returns the names of all queries that match. Used for range media features. */

@@ -3,0 +3,0 @@ export function getMatchingValues(namedQueries) {

@@ -1,3 +0,3 @@

import { Subject } from '../observable';
import { BooleanMediaFeature, IMediaObserverOptions, IMediaRange, MediaFeature as DiscreteMediaFeature, NamedMediaQuery, RangeMediaFeature } from './types';
import { Subject } from '../observable/index.js';
import { BooleanMediaFeature, IMediaObserverOptions, IMediaRange, MediaFeature as DiscreteMediaFeature, NamedMediaQuery, RangeMediaFeature } from './types.js';
/**

@@ -4,0 +4,0 @@ * A Subject that tracks the value of a media feature and exposes it synchronously and

@@ -1,4 +0,4 @@

import { Subject } from '../observable';
import { getBooleanValue, getMatchingValue, getMatchingValues, getRangeQuery, validateName } from './media-observer-utils';
import { mediaFeatureValues } from './types';
import { Subject } from '../observable/index.js';
import { getBooleanValue, getMatchingValue, getMatchingValues, getRangeQuery, validateName } from './media-observer-utils.js';
import { mediaFeatureValues } from './types.js';
/**

@@ -10,2 +10,7 @@ * A Subject that tracks the value of a media feature and exposes it synchronously and

/**
* STATIC MEMBERS
*/
/** A collection of all managed media observers. */
static { this._observers = {}; }
/**
* Returns a new media observer tracking a discrete feature.

@@ -91,3 +96,2 @@ * @param feature The name of a discrete media feature.

}
// eslint-disable-next-line @tylertech-eslint/require-private-modifier
constructor(name, namedQueries, value, track = true) {

@@ -113,3 +117,3 @@ super(value);

const queryList = window.matchMedia(query);
const handler = (event) => this.setValue(event, name);
const handler = event => this.setValue(event, name);
handler(queryList);

@@ -122,7 +126,2 @@ queryList.addEventListener('change', handler);

/**
* STATIC MEMBERS
*/
/** A collection of all managed media observers. */
MediaObserver._observers = {};
/**
* A media observer that tracks one feature with multiple discrete keyword values.

@@ -132,3 +131,6 @@ */

static create(feature, options) {
const namedQueries = mediaFeatureValues[feature].map(featureValue => ({ name: featureValue.toString(), query: `(${feature}: ${featureValue})` }));
const namedQueries = mediaFeatureValues[feature].map(featureValue => ({
name: featureValue.toString(),
query: `(${feature}: ${featureValue})`
}));
const value = getMatchingValue(namedQueries);

@@ -156,3 +158,2 @@ const name = validateName(options?.name) ?? feature;

}
// eslint-disable-next-line @tylertech-eslint/require-private-modifier
constructor(name, namedQueries, value, track = true) {

@@ -159,0 +160,0 @@ super(name, namedQueries, value, track);

export declare const DISCRETE_MEDIA_FEATURES: readonly ["any-hover", "any-pointer", "color-gamut", "display-mode", "dynamic-range", "forced-colors", "grid", "hover", "inverted-colors", "orientation", "overflow-block", "overflow-inline", "pointer", "prefers-contrast", "prefers-color-scheme", "prefers-reduced-motion", "scripting", "update", "video-dynamic-range"];
export declare const RANGE_MEDIA_FEATURES: readonly ["aspect-ratio", "color", "color-index", "height", "monochrome", "resolution", "width"];
export declare const ALL_MEDIA_FEATURES: ("resolution" | "height" | "width" | "color" | "grid" | "update" | "orientation" | "any-hover" | "any-pointer" | "color-gamut" | "display-mode" | "dynamic-range" | "forced-colors" | "hover" | "inverted-colors" | "overflow-block" | "overflow-inline" | "pointer" | "prefers-contrast" | "prefers-color-scheme" | "prefers-reduced-motion" | "scripting" | "video-dynamic-range" | "aspect-ratio" | "color-index" | "monochrome")[];
export declare const ALL_MEDIA_FEATURES: ("height" | "width" | "any-hover" | "any-pointer" | "color-gamut" | "display-mode" | "dynamic-range" | "forced-colors" | "grid" | "hover" | "inverted-colors" | "orientation" | "overflow-block" | "overflow-inline" | "pointer" | "prefers-contrast" | "prefers-color-scheme" | "prefers-reduced-motion" | "scripting" | "update" | "video-dynamic-range" | "aspect-ratio" | "color" | "color-index" | "monochrome" | "resolution")[];
export declare const BOOLEAN_MEDIA_FEATURES: readonly ["any-hover", "any-pointer", "color", "color-index", "dynamic-range", "forced-colors", "grid", "height", "hover", "inverted-colors", "monochrome", "overflow-block", "overflow-inline", "pointer", "prefers-contrast", "prefers-reduced-motion", "scripting", "update", "video-dynamic-range", "width"];
export type DiscreteMediaFeature = typeof DISCRETE_MEDIA_FEATURES[number];
export type RangeMediaFeature = typeof RANGE_MEDIA_FEATURES[number];
export type DiscreteMediaFeature = (typeof DISCRETE_MEDIA_FEATURES)[number];
export type RangeMediaFeature = (typeof RANGE_MEDIA_FEATURES)[number];
export type MediaFeature = DiscreteMediaFeature | RangeMediaFeature;
export type BooleanMediaFeature = typeof BOOLEAN_MEDIA_FEATURES[number];
export type BooleanMediaFeature = (typeof BOOLEAN_MEDIA_FEATURES)[number];
export declare const colorGamutValues: readonly ["srbg", "p3", "rec2020"];

@@ -26,27 +26,27 @@ export declare const displayModeValues: readonly ["fullscreen", "standalone", "minimal-ui", "browser", "window-controls-overlay"];

export declare const videoDynamicRangeValues: readonly ["standard", "high"];
export type ColorGamutValue = typeof colorGamutValues[number];
export type DisplayModeValue = typeof displayModeValues[number];
export type DynamicRangeValue = typeof dynamicRangeValues[number];
export type ForcedColorsValue = typeof forcedColorsValues[number];
export type GridValue = typeof gridValues[number];
export type HoverValue = typeof hoverValues[number];
export type InvertedColorsValue = typeof invertedColorsValues[number];
export type OrientationValue = typeof orientationValues[number];
export type OverflowBlockValue = typeof overflowBlockValues[number];
export type OverflowInlineValue = typeof overflowInlineValues[number];
export type PointerValue = typeof pointerValues[number];
export type PrefersContrastValue = typeof prefersContrastValues[number];
export type PrefersColorSchemeValue = typeof prefersColorSchemeValues[number];
export type PrefersReducedMotionValue = typeof prefersReducedMotionValues[number];
export type ScriptingValue = typeof scriptingValues[number];
export type UpdateValue = typeof updateValues[number];
export type VideoDynamicRangeValue = typeof videoDynamicRangeValues[number];
export type NamedMediaQuery = {
export type ColorGamutValue = (typeof colorGamutValues)[number];
export type DisplayModeValue = (typeof displayModeValues)[number];
export type DynamicRangeValue = (typeof dynamicRangeValues)[number];
export type ForcedColorsValue = (typeof forcedColorsValues)[number];
export type GridValue = (typeof gridValues)[number];
export type HoverValue = (typeof hoverValues)[number];
export type InvertedColorsValue = (typeof invertedColorsValues)[number];
export type OrientationValue = (typeof orientationValues)[number];
export type OverflowBlockValue = (typeof overflowBlockValues)[number];
export type OverflowInlineValue = (typeof overflowInlineValues)[number];
export type PointerValue = (typeof pointerValues)[number];
export type PrefersContrastValue = (typeof prefersContrastValues)[number];
export type PrefersColorSchemeValue = (typeof prefersColorSchemeValues)[number];
export type PrefersReducedMotionValue = (typeof prefersReducedMotionValues)[number];
export type ScriptingValue = (typeof scriptingValues)[number];
export type UpdateValue = (typeof updateValues)[number];
export type VideoDynamicRangeValue = (typeof videoDynamicRangeValues)[number];
export interface NamedMediaQuery {
name: string;
query: string;
};
export type ManagedMediaQuery = {
}
export interface ManagedMediaQuery {
queryList: MediaQueryList;
handler: MediaQueryHandler;
};
}
export type MediaQueryHandler = (event: MediaQueryList | MediaQueryListEvent) => void;

@@ -56,5 +56,5 @@ export declare const mediaFeatureValues: {

'any-pointer': ("none" | "coarse" | "fine")[];
'color-gamut': ("p3" | "rec2020" | "srbg")[];
'display-mode': ("browser" | "fullscreen" | "standalone" | "minimal-ui" | "window-controls-overlay")[];
'dynamic-range': ("high" | "standard")[];
'color-gamut': ("srbg" | "p3" | "rec2020")[];
'display-mode': ("fullscreen" | "standalone" | "minimal-ui" | "browser" | "window-controls-overlay")[];
'dynamic-range': ("standard" | "high")[];
'forced-colors': ("none" | "active")[];

@@ -68,3 +68,3 @@ grid: (0 | 1)[];

pointer: ("none" | "coarse" | "fine")[];
'prefers-contrast': ("custom" | "no-preference" | "more" | "less")[];
'prefers-contrast': ("no-preference" | "more" | "less" | "custom")[];
'prefers-color-scheme': ("light" | "dark")[];

@@ -74,3 +74,3 @@ 'prefers-reduced-motion': ("reduce" | "no-preference")[];

update: ("none" | "slow" | "fast")[];
'video-dynamic-range': ("high" | "standard")[];
'video-dynamic-range': ("standard" | "high")[];
};

@@ -77,0 +77,0 @@ export interface IMediaObserverOptions {

@@ -22,11 +22,3 @@ export const DISCRETE_MEDIA_FEATURES = [

];
export const RANGE_MEDIA_FEATURES = [
'aspect-ratio',
'color',
'color-index',
'height',
'monochrome',
'resolution',
'width'
];
export const RANGE_MEDIA_FEATURES = ['aspect-ratio', 'color', 'color-index', 'height', 'monochrome', 'resolution', 'width'];
export const ALL_MEDIA_FEATURES = [...DISCRETE_MEDIA_FEATURES, ...RANGE_MEDIA_FEATURES];

@@ -79,15 +71,15 @@ export const BOOLEAN_MEDIA_FEATURES = [

'forced-colors': Array.from(forcedColorsValues.values()),
'grid': Array.from(gridValues.values()),
'hover': Array.from(hoverValues.values()),
grid: Array.from(gridValues.values()),
hover: Array.from(hoverValues.values()),
'inverted-colors': Array.from(invertedColorsValues.values()),
'orientation': Array.from(orientationValues.values()),
orientation: Array.from(orientationValues.values()),
'overflow-block': Array.from(overflowBlockValues.values()),
'overflow-inline': Array.from(overflowInlineValues.values()),
'pointer': Array.from(pointerValues.values()),
pointer: Array.from(pointerValues.values()),
'prefers-contrast': Array.from(prefersContrastValues.values()),
'prefers-color-scheme': Array.from(prefersColorSchemeValues.values()),
'prefers-reduced-motion': Array.from(prefersReducedMotionValues.values()),
'scripting': Array.from(scriptingValues.values()),
'update': Array.from(updateValues.values()),
scripting: Array.from(scriptingValues.values()),
update: Array.from(updateValues.values()),
'video-dynamic-range': Array.from(videoDynamicRangeValues.values())
};

@@ -1,2 +0,2 @@

export * from './message-list-entry';
export * from './message-list';
export * from './message-list-entry.js';
export * from './message-list.js';

@@ -1,2 +0,2 @@

export * from './message-list-entry';
export * from './message-list';
export * from './message-list-entry.js';
export * from './message-list.js';

@@ -9,44 +9,44 @@ /**

/**
* True if ellipsis management occurs automatically. Default is true.
*/
* True if ellipsis management occurs automatically. Default is true.
*/
get useAutoEllipsis(): boolean;
set useAutoEllipsis(value: boolean);
/**
* The message that is made up of all messages in the entries.
*/
* The message that is made up of all messages in the entries.
*/
message: string;
constructor(useAutoEllipsis?: boolean);
/**
* Adds a message to the entry map.
* @param {string} message The message string.
* @param {T} identifier The message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
* Adds a message to the entry map.
* @param {string} message The message string.
* @param {T} identifier The message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
add(message: string, identifier: T): MessageList<T>;
/**
* Removes a message using the provided identifier.
* @param {T} identifier The message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
* Removes a message using the provided identifier.
* @param {T} identifier The message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
remove(identifier: T): MessageList<T>;
/**
* Updates an existing message value.
* @param {string} message The message string.
* @param {T} identifier The existing message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
* Updates an existing message value.
* @param {string} message The message string.
* @param {T} identifier The existing message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
update(message: string, identifier: T): MessageList<T>;
/**
* Gets the number of messages in the list.
* @returns {number}
*/
* Gets the number of messages in the list.
* @returns {number}
*/
get messageCount(): number;
/**
* Resets the message list to it's original state and removes all messages.
*/
* Resets the message list to it's original state and removes all messages.
*/
reset(): void;
/**
* Determines if a message with the provided identifier exists.
* @param {T} identifier The message identifier.
*/
* Determines if a message with the provided identifier exists.
* @param {T} identifier The message identifier.
*/
hasMessage(identifier: T): boolean;

@@ -53,0 +53,0 @@ private _updateMessage;

@@ -1,2 +0,2 @@

import { MessageListEntry } from './message-list-entry';
import { MessageListEntry } from './message-list-entry.js';
/**

@@ -8,4 +8,4 @@ * Represents a message list of any type. This class can be used to attach a string message to

/**
* True if ellipsis management occurs automatically. Default is true.
*/
* True if ellipsis management occurs automatically. Default is true.
*/
get useAutoEllipsis() {

@@ -24,7 +24,7 @@ return this._useAutoEllipsis;

/**
* Adds a message to the entry map.
* @param {string} message The message string.
* @param {T} identifier The message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
* Adds a message to the entry map.
* @param {string} message The message string.
* @param {T} identifier The message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
add(message, identifier) {

@@ -36,6 +36,6 @@ this._messages.push(new MessageListEntry(message, identifier));

/**
* Removes a message using the provided identifier.
* @param {T} identifier The message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
* Removes a message using the provided identifier.
* @param {T} identifier The message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
remove(identifier) {

@@ -50,7 +50,7 @@ const index = this._getMessageIndex(identifier);

/**
* Updates an existing message value.
* @param {string} message The message string.
* @param {T} identifier The existing message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
* Updates an existing message value.
* @param {string} message The message string.
* @param {T} identifier The existing message identifier.
* @returns {MessageList<T>} A reference to `this` for chaining.
*/
update(message, identifier) {

@@ -65,5 +65,5 @@ const index = this._getMessageIndex(identifier);

/**
* Gets the number of messages in the list.
* @returns {number}
*/
* Gets the number of messages in the list.
* @returns {number}
*/
get messageCount() {

@@ -73,4 +73,4 @@ return this._messages.length;

/**
* Resets the message list to it's original state and removes all messages.
*/
* Resets the message list to it's original state and removes all messages.
*/
reset() {

@@ -81,5 +81,5 @@ this._messages = [];

/**
* Determines if a message with the provided identifier exists.
* @param {T} identifier The message identifier.
*/
* Determines if a message with the provided identifier exists.
* @param {T} identifier The message identifier.
*/
hasMessage(identifier) {

@@ -86,0 +86,0 @@ return this._getMessageIndex(identifier) >= 0;

@@ -1,2 +0,2 @@

export * from './observable';
export * from './types';
export * from './observable.js';
export * from './types.js';

@@ -1,2 +0,2 @@

export * from './observable';
export * from './types';
export * from './observable.js';
export * from './types.js';

@@ -1,2 +0,2 @@

import { Observer } from './types';
import { Observer } from './types.js';
export declare class Subject<T> {

@@ -3,0 +3,0 @@ protected source: T;

@@ -20,3 +20,2 @@ export class Subject {

for (const subscriber of this.subscribers) {
// eslint-disable-next-line @typescript-eslint/dot-notation
subscriber.observer?.(value);

@@ -34,3 +33,2 @@ }

}
;
constructor(parent, observer) {

@@ -37,0 +35,0 @@ this._closed = false;

@@ -1,2 +0,2 @@

export * from './resize-observer';
export * from './resize-types';
export * from './resize-observer.js';
export * from './resize-types.js';

@@ -1,2 +0,2 @@

export * from './resize-observer';
export * from './resize-types';
export * from './resize-observer.js';
export * from './resize-types.js';

@@ -1,2 +0,2 @@

import { ForgeResizeObserverCallback, IResizeObserverOptions } from './resize-types';
import { ForgeResizeObserverCallback, IResizeObserverOptions } from './resize-types.js';
/**

@@ -3,0 +3,0 @@ * Provides a set of methods for observing and responding to resizing of elements.

@@ -5,2 +5,3 @@ /**

export class ForgeResizeObserver {
static { this._targets = new Map(); }
/**

@@ -50,13 +51,12 @@ * Initiates the observing of a specified `Element`. Calling with an already observed `Element`

}
/**
* Runs the callback function of targets when they are resized.
*
* @param entries An array of `ResizeObserverEntry`s.
*/
static { this._handleResize = entries => {
entries.forEach(entry => {
ForgeResizeObserver._targets.get(entry.target)?.(entry);
});
}; }
}
ForgeResizeObserver._targets = new Map();
/**
* Runs the callback function of targets when they are resized.
*
* @param entries An array of `ResizeObserverEntry`s.
*/
ForgeResizeObserver._handleResize = entries => {
entries.forEach(entry => {
ForgeResizeObserver._targets.get(entry.target)?.(entry);
});
};

@@ -1,2 +0,2 @@

export * from './scroll-axis-observer';
export * from './scroll-types';
export * from './scroll-axis-observer.js';
export * from './scroll-types.js';

@@ -1,2 +0,2 @@

export * from './scroll-axis-observer';
export * from './scroll-types';
export * from './scroll-axis-observer.js';
export * from './scroll-types.js';

@@ -1,3 +0,3 @@

import { EventAware, IEventAware } from '../events/event-aware';
import { IScrollObserverConfiguration } from './scroll-types';
import { EventAware, IEventAware } from '../events/event-aware.js';
import { IScrollObserverConfiguration } from './scroll-types.js';
export interface IScrollAxisObserver extends IEventAware {

@@ -4,0 +4,0 @@ scrollPosition: number;

@@ -1,4 +0,4 @@

import { EventAware } from '../events/event-aware';
import { ScrollEvents, ScrollDirection } from './scroll-types';
import { isDefined, throttle, isNumber } from '../utils';
import { EventAware } from '../events/event-aware.js';
import { ScrollEvents, ScrollDirection } from './scroll-types.js';
import { isDefined, throttle, isNumber } from '../utils/index.js';
const DEFAULT_SCROLL_THROTTLE = 100;

@@ -62,3 +62,9 @@ /**

const position = this.scrollPosition;
const direction = this._lastScrollPosition - position < 0 ? this._axis === 'vertical' ? ScrollDirection.Down : ScrollDirection.Right : this._axis === 'vertical' ? ScrollDirection.Up : ScrollDirection.Left;
const direction = this._lastScrollPosition - position < 0
? this._axis === 'vertical'
? ScrollDirection.Down
: ScrollDirection.Right
: this._axis === 'vertical'
? ScrollDirection.Up
: ScrollDirection.Left;
this._emit(ScrollEvents.Scroll, { direction, position });

@@ -76,3 +82,3 @@ if (this._lastScrollPosition <= this._scrollThreshold && position > this._scrollThreshold) {

}
else if (this._lastScrollPosition <= (this.scrollSize - this._scrollThreshold) && scrollEnd <= this._scrollThreshold) {
else if (this._lastScrollPosition <= this.scrollSize - this._scrollThreshold && scrollEnd <= this._scrollThreshold) {
this._emit(ScrollEvents.ScrolledEnd);

@@ -79,0 +85,0 @@ }

@@ -1,1 +0,1 @@

export * from './service-adapter';
export * from './service-adapter.js';

@@ -1,1 +0,1 @@

export * from './service-adapter';
export * from './service-adapter.js';

@@ -1,6 +0,2 @@

import { isArray } from './utils';
/**
* Holds regular expressions
*/
/* tslint:disable-next-line:require-private-underscore */
import { isArray } from './utils.js';
const REGULAR_EXPRESSIONS = {

@@ -15,6 +11,2 @@ placement: {

};
/**
* Holds the browser scrollbar width.
*/
/* tslint:disable-next-line:require-private-underscore */
let SCROLLBAR_WIDTH;

@@ -397,8 +389,7 @@ /**

const el = document.createElement('fakeelement');
// tslint:disable:object-literal-key-quotes
const animations = {
'animation': 'animationend',
'OAnimation': 'oAnimationEnd',
'MozAnimation': 'animationend',
'WebkitAnimation': 'webkitAnimationEnd'
animation: 'animationend',
OAnimation: 'oAnimationEnd',
MozAnimation: 'animationend',
WebkitAnimation: 'webkitAnimationEnd'
};

@@ -629,3 +620,3 @@ for (const t in animations) {

const slotNodes = rootElement.assignedNodes();
slotNodes.forEach(slottedNode => nodes = nodes.concat(deepQuerySelectorAll(slottedNode, selectors, true)));
slotNodes.forEach(slottedNode => (nodes = nodes.concat(deepQuerySelectorAll(slottedNode, selectors, true))));
}

@@ -752,5 +743,5 @@ else {

if (isClippedStart) {
return (targetOffset - scrollOffset) - targetSize;
return targetOffset - scrollOffset - targetSize;
}
return (targetOffset - scrollSize) + targetSize * 2;
return targetOffset - scrollSize + targetSize * 2;
}

@@ -757,0 +748,0 @@ return targetOffset - scrollOffset - scrollSize / 2 + targetSize / 2;

@@ -11,3 +11,3 @@ /**

for (const property in obj) {
if (!obj.hasOwnProperty(property)) {
if (!Object.prototype.hasOwnProperty.call(obj, property)) {
continue;

@@ -17,4 +17,6 @@ }

for (const index in obj[property]) {
if (obj[property].hasOwnProperty(index)) {
params.push(encodeURIComponent(property) + '=' + (obj[property][index] !== null && typeof obj[property][index] !== 'undefined' ? encodeURIComponent(obj[property][index]) : ''));
if (Object.prototype.hasOwnProperty.call(obj[property], index)) {
params.push(encodeURIComponent(property) +
'=' +
(obj[property][index] !== null && typeof obj[property][index] !== 'undefined' ? encodeURIComponent(obj[property][index]) : ''));
}

@@ -21,0 +23,0 @@ }

@@ -1,10 +0,10 @@

export * from './a11y';
export * from './clipboard';
export * from './dom-utils';
export * from './event-utils';
export * from './http-utils';
export * from './item-manager';
export * from './object-utils';
export * from './platform';
export * from './string-utils';
export * from './utils';
export * from './a11y.js';
export * from './clipboard.js';
export * from './dom-utils.js';
export * from './event-utils.js';
export * from './http-utils.js';
export * from './item-manager.js';
export * from './object-utils.js';
export * from './platform.js';
export * from './string-utils.js';
export * from './utils.js';

@@ -1,10 +0,10 @@

export * from './a11y';
export * from './clipboard';
export * from './dom-utils';
export * from './event-utils';
export * from './http-utils';
export * from './item-manager';
export * from './object-utils';
export * from './platform';
export * from './string-utils';
export * from './utils';
export * from './a11y.js';
export * from './clipboard.js';
export * from './dom-utils.js';
export * from './event-utils.js';
export * from './http-utils.js';
export * from './item-manager.js';
export * from './object-utils.js';
export * from './platform.js';
export * from './string-utils.js';
export * from './utils.js';

@@ -1,2 +0,2 @@

import { findWhere, createPredicate } from './object-utils';
import { findWhere, createPredicate } from './object-utils.js';
export class ItemManager {

@@ -3,0 +3,0 @@ constructor(_key) {

@@ -81,3 +81,3 @@ /**

let propObj = obj;
if (!obj.hasOwnProperty(prop)) {
if (!Object.prototype.hasOwnProperty.call(obj, prop)) {
propObj = Object.getPrototypeOf(obj);

@@ -92,9 +92,9 @@ }

get() {
return originalValueDescriptor.get ? originalValueDescriptor.get.apply(this, arguments) : undefined;
return originalValueDescriptor.get ? originalValueDescriptor.get.call(this) : undefined;
},
set() {
set(value) {
if (originalValueDescriptor.set) {
originalValueDescriptor.set.apply(this, arguments);
originalValueDescriptor.set.call(this, value);
}
listener.apply(context, arguments);
listener.call(context, value);
}

@@ -101,0 +101,0 @@ });

@@ -32,3 +32,3 @@ /**

static get BLINK() {
return Platform.isBrowser && (!!(window.chrome || hasV8BreakIterator) && !!CSS && !Platform.EDGE && !Platform.TRIDENT);
return Platform.isBrowser && !!(window.chrome || hasV8BreakIterator) && !!CSS && !Platform.EDGE && !Platform.TRIDENT;
}

@@ -35,0 +35,0 @@ // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to

@@ -1,2 +0,2 @@

import { isDefined, isString } from './utils';
import { isDefined, isString } from './utils.js';
/**

@@ -3,0 +3,0 @@ * Converts a string value to dash-case.

/** Generates random characters. Defaults to a length of 5. */
export function randomChars(length = 5) {
const skip = 2; // Skip the first two chars which are always "0."
return Math.random().toString(36).substring(skip, skip + length);
return Math.random()
.toString(36)
.substring(skip, skip + length);
}

@@ -110,3 +112,6 @@ /**

if (typeof strOrNumOrArray === 'string') {
return strOrNumOrArray.replace(/ |\[|]|\"/g, '').split(',').map(n => Number(n));
return strOrNumOrArray
.replace(/ |\[|]|"/g, '')
.split(',')
.map(n => Number(n));
}

@@ -155,5 +160,6 @@ else if (typeof strOrNumOrArray === 'number') {

};
return function () {
return function (...restArgs) {
// eslint-disable-next-line @typescript-eslint/no-this-alias
context = this;
args = arguments;
args = restArgs;
timestamp = Date.now();

@@ -196,3 +202,3 @@ const callNow = immediate && !timeout;

};
return function () {
return function (...restArgs) {
const now = Date.now();

@@ -203,4 +209,5 @@ if (!timestamp && options.leading === false) {

const remaining = wait - (now - timestamp);
// eslint-disable-next-line @typescript-eslint/no-this-alias
context = this;
args = arguments;
args = restArgs;
if (remaining <= 0 || remaining > wait) {

@@ -247,11 +254,3 @@ if (timeout) {

export function idleWatch(callback, timespan) {
const events = [
'mousedown',
'mousemove',
'touchstart',
'touchmove',
'keydown',
'wheel',
'resize'
];
const events = ['mousedown', 'mousemove', 'touchstart', 'touchmove', 'keydown', 'wheel', 'resize'];
events.forEach(e => {

@@ -258,0 +257,0 @@ window.addEventListener(e, throttle((event) => {

{
"name": "@tylertech/forge-core",
"version": "3.2.1",
"version": "3.3.0-dev.0",
"description": "A library of core web utilities that support Tyler Forge™ based libraries.",

@@ -9,3 +9,4 @@ "author": "Tyler Technologies, Inc.",

"type": "git",
"url": "git+https://github.com/tyler-technologies-oss/forge-core.git"
"url": "git+https://github.com/tyler-technologies-oss/forge.git",
"directory": "packages/forge-core"
},

@@ -15,41 +16,20 @@ "main": "./dist/index.js",

"typings": "./dist/index.d.ts",
"type": "module",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"default": "./dist/index.js"
},
"./package.json": {
"default": "./package.json"
}
},
"files": [
"dist"
],
"scripts": {
"prepare": "husky",
"build": "npm run lint && rimraf ./dist && tsc",
"lint": "eslint ./src",
"test": "wtr --coverage --watch",
"ci:test": "wtr",
"serve:coverage": "http-server -c 1 -o -p 9875 .coverage/lcov-report",
"release": "auto shipit"
},
"dependencies": {
"tslib": "^2.8.1"
},
"devDependencies": {
"@auto-it/conventional-commits": "^11.3.0",
"@auto-it/first-time-contributor": "^11.3.0",
"@auto-it/npm": "^11.3.0",
"@commitlint/cli": "^19.8.1",
"@commitlint/config-conventional": "^19.8.1",
"@esm-bundle/chai": "^4.3.4-fix.0",
"@tylertech-eslint/eslint-plugin": "^2.1.0",
"@types/mocha": "^10.0.10",
"@types/node": "^22.15.21",
"@types/sinon": "^17.0.4",
"@web/dev-server-esbuild": "^1.0.4",
"@web/test-runner": "^0.20.2",
"auto": "^11.3.0",
"commitlint": "^19.8.1",
"http-server": "^14.1.1",
"husky": "^9.1.7",
"rimraf": "^6.0.1",
"sinon": "^20.0.0",
"typescript": "~5.8.3"
},
"overrides": {
"@typescript-eslint/typescript-estree": "^7.12.0"
}
}
"publishedAt": "2026-03-25T19:37:48.611Z"
}
# Tyler Forge™ Core
This library contains the core building blocks and utilities that are used when building Tyler Forge™ based Web Component libraries.
## Usage
```bash
npm i @tylertech/forge-core
```
## Development
Install dependencies:
```bash
npm i
```
Build library:
```bash
npm run build
```
Run tests:
```bash
npm test
```
This library contains core utilities that are used within Tyler Forge™.