diff --git a/babel.config.mjs b/babel.config.mjs index d5db5463..85813868 100644 --- a/babel.config.mjs +++ b/babel.config.mjs @@ -1,11 +1,12 @@ export default { + sourceType: 'unambiguous', presets: [ ['@babel/preset-env', { targets: { browsers: ['> 1%', 'last 3 versions', 'not dead'] } }], - '@babel/preset-typescript' + '@babel/preset-typescript', ], plugins: [ [ diff --git a/dev/dev-light.css b/dev/dev-light.css new file mode 100644 index 00000000..59d69a0a --- /dev/null +++ b/dev/dev-light.css @@ -0,0 +1,202 @@ +/* ---ONLY FOR LOCAL DEV--- */ +/* ---final version is in mashlib--- */ + + +/* +** Light Theme (Default) +** Default color scheme for SolidOS +*/ + +:root { + /* Background and Text */ + --color-background: white; + --color-text: ##1A1A1A; + --color-text-secondary: #666; + --color-text-light: #aaa; + --color-text-link: #3B5998; + --color-text-link-visited: #3B5998; + --color-text-link-hover: #3B5998; + --color-text-link-active: #888; + --color-text-answer: #00c; + --color-text-muted: #444; + --color-text-dark-gray: #202; + --color-text-blue: #004; + --color-text-brown: #440; + + /* Borders */ + --color-border: #ccc; + --color-border-dark: #777; + --color-border-darker: #444; + --color-border-light: #aaa; + --color-border-pale: #eee; + + /* Status Colors */ + --color-selected-bg: #8F3; + --color-warning: red; + --color-success-bg: #dfd; + --color-success-border: green; + --color-failure-bg: white; + --color-failure-border: red; + + /* Info and Alert Colors */ + --color-info-bg: #ccccff; + --color-info-border: #3399ff; + --color-alert-bg: #ffffdd; + --color-alert-border: yellow; + --color-fetch-bg: #eeffee; + --color-request-bg: yellow; + --color-error-bg: white; + --color-error-notice-bg: #fee; + --color-unparseable-bg: #ffcc00; + + /* Component Colors */ + --color-container-border: black; + --color-iframe-bg: white; + --color-main-block-bg: #fff; + --color-nav-block-bg: #eee; + --color-nav-block-border: gray; + --color-category-bg: #f8fff8; + --color-category-border: #777777; + --color-category-class-bg: #efe; + --color-category-class-border: green; + --color-pubs-pane-bg: #F2F6DA; + --color-pubs-pane-border: #777777; + --color-cv-pane-bg: LightSkyBlue; + + /* Data Content Pane */ + --color-data-pane-border-top: black; + --color-data-pane-border-side: #777; + --color-table-header-bg: #ddf; + --color-table-result-bg: #fff; + --color-table-border-dark: #777; + + /* Notification Colors */ + --color-log-normal: black; + --color-log-info: black; + --color-log-warn: black; + --color-log-warn-bg: #ffd; + --color-log-error: black; + --color-log-error-bg: #fdd; + --color-log-message: green; + --color-log-debug: black; + --color-log-debug-bg: #ddf; + + /* Suggestion List */ + --color-suggestion-bg: white; + --color-suggestion-border: navy; + --color-suggestion-link: navy; + --color-suggestion-selected-bg: navy; + --color-suggestion-selected-text: white; + + /* Photo Pane */ + --color-photo-border: #AAAAAA; + --color-photo-tag-highlight: #DDEEFF; + --color-photo-tag-highlight-border: #DDBB99; + --color-photo-thumb-border: #CCCCCC; + + /* Menu and Tab Colors */ + --color-menu-bg: #FFFFFF; + --color-menu-item-text: #654d6c; + --color-menu-item-active: #D1C6DA; + --color-view-tab-bg: #fff; + --color-view-window-bg: #ccc; + --color-query-select-bg: #ccc; + --color-tab-inactive-bg: #eee; + --color-tab-inactive-border: #ddd; + --color-tab-inactive-border-light: #aaa; + --color-tab-inactive-text: #99f; + --color-tab-active-bg: #ccc; + --color-tab-active-border: #ddd; + --color-tab-active-border-light: #aaa; + --color-tab-active-text: #22f; + + /* Special Highlights */ + --color-source-highlight: yellow; + --color-hover-visibility: visible; + --color-hidden-visibility: hidden; + --color-mild-notice-bg: #ffe; + --color-bottom-border-highlight: rgb(100%,65%,0%); + --color-col-close: #aaa; + --color-sort-arrow: #aaa; + --color-pending-edit: #bbb; + + /* Typography */ + --font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + --font-family-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + --font-size-base: 100%; + --font-size-strong: 120%; + --font-weight-normal: normal; + --font-weight-bold: bold; + --line-height-base: 1.5; + --line-height-tight: 1.4; + --line-height-loose: 1.6; + --letter-spacing-wide: 0.025em; + --font-size-sm: 0.875rem; + --font-size-lg: 1.125rem; + --font-size-xl: 1.25rem; + + /* Spacing and Sizing */ + --spacing-tiny: 0.05em; + --spacing-small: 0.1em; + --spacing-xs: 0.5rem; + --spacing-sm: 0.75em; + --spacing-base: 0.5em; + --spacing-md: 1em; + --spacing-lg: 1.5em; + --spacing-xl: 2em; + --spacing-2xl: 3em; + --border-width-thin: 1px; + --border-width-medium: 2px; + --border-width-bold: 5px; + --border-radius-base: 0.5em; + --border-radius-lg: 0.75em; + --border-radius-full: 1em; + + /* Primary/Accent Colors */ + --color-primary: #7C4DFF; + --color-primary-alpha: rgba(124, 77, 255, 0.25); + --color-primary-alpha-light: rgba(124, 77, 255, 0.1); + --color-secondary: #0077B6; + --color-accent: #FFD600; + --color-error: #B00020; + --color-success: #00C853; + + /* Card/Section Backgrounds */ + --color-card-bg: #FFFFFF; + --color-section-bg: #F5F5F5; + --color-zebra-stripe: rgba(0, 0, 0, 0.02); + --color-hover-bg: rgba(0, 0, 0, 0.05); + + /* Shadows */ + --box-shadow: 0 2px 8px rgba(124,77,255,0.08); + --box-shadow-sm: 0 1px 4px rgba(124,77,255,0.12); + + /* Accessibility */ + --min-touch-target: 44px; + --focus-ring-width: 2px; + --focus-indicator-width: 3px; + --animation-duration: 0.2s; + --animation-duration-slow: 0.3s; + --min-font-size: 14px; + --min-line-height: 1.4; + --high-contrast-ratio: 7:1; /* WCAG AAA standard */ + + /* Overlay and Modal */ + --overlay-bg: rgba(0, 0, 0, 0.5); + --z-index-modal: 9999; + --z-index-skip-links: 1000; + + /* Opacity */ + --opacity-disabled: 0.6; + + /* Layout Values */ + --max-width-readable: 65ch; + --max-width-readable-wide: 70ch; + --grid-min-column: 30em; + + /* Outline Offsets */ + --outline-offset-sm: 2px; + + /* Success Alpha */ + --color-success-alpha: rgba(0, 200, 83, 0.1); +} diff --git a/dev/dev-mash-utilities.css b/dev/dev-mash-utilities.css new file mode 100644 index 00000000..7a476155 --- /dev/null +++ b/dev/dev-mash-utilities.css @@ -0,0 +1,691 @@ +/* ---ONLY FOR LOCAL DEV--- */ +/* ---final version is in mashlib--- */ + +/* =========================================== + ACCESSIBILITY UTILITIES (HIGH PRIORITY) + =========================================== */ + +/* Screen reader only content - hidden visually but available to assistive tech */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +/* Visually hidden but can become visible on focus */ +.visually-hidden { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.visually-hidden.focusable:focus, +.visually-hidden.focusable:active { + position: static !important; + width: auto !important; + height: auto !important; + padding: inherit !important; + margin: inherit !important; + overflow: visible !important; + clip: auto !important; + white-space: inherit !important; +} + +/* Minimum touch target for mobile accessibility (WCAG 2.5.5) */ +.min-touch-target { + min-height: var(--min-touch-target); + min-width: var(--min-touch-target); +} + +/* Reduced motion support */ +.reduced-motion { + animation: none !important; + transition: none !important; +} + +/* Focus ring utility */ +.focus-ring { + outline: var(--focus-ring-width) solid var(--color-primary); + outline-offset: var(--outline-offset-sm); +} + +.no-focus-ring { + outline: none; +} + +/* ARIA live regions - for dynamic content announcements */ +.live-region { + position: absolute; + left: -10000px; + width: 1px; + height: 1px; + overflow: hidden; +} + +/* Skip links for keyboard navigation */ +.skip-links { + position: absolute; + top: -100px; + left: 0; + z-index: var(--z-index-skip-links); +} + +.skip-links a { + position: absolute; + left: var(--spacing-xs); + top: var(--spacing-xs); + padding: var(--spacing-sm); + background: var(--color-primary); + color: var(--color-background); + text-decoration: none; + border-radius: var(--border-radius-base); +} + +.skip-links a:focus { + top: var(--spacing-xs); +} + +/* =========================================== + LAYOUT UTILITIES + =========================================== */ + +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.center { + display: flex; + justify-content: center; + align-items: center; +} + +.flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +.flex-column { + display: flex; + flex-direction: column; +} + +.flex-column-center { + display: flex; + flex-direction: column; + align-items: center; +} + +.flex-row { + display: flex; + flex-direction: row; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.flex-1 { + flex: 1; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-end { + justify-content: flex-end; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.align-start { + align-items: flex-start; +} + +.align-end { + align-items: flex-end; +} + +.align-center { + align-items: center; +} + +/* =========================================== + SPACING UTILITIES + =========================================== */ + +/* Gap utilities */ +.gap-xs { gap: var(--spacing-xs); } +.gap-sm { gap: var(--spacing-sm); } +.gap-md { gap: var(--spacing-md); } +.gap-lg { gap: var(--spacing-lg); } +.gap-xl { gap: var(--spacing-xl); } + +/* Margin top */ +.mt-0 { margin-top: 0; } +.mt-xs { margin-top: var(--spacing-xs); } +.mt-sm { margin-top: var(--spacing-sm); } +.mt-md { margin-top: var(--spacing-md); } +.mt-lg { margin-top: var(--spacing-lg); } +.mt-xl { margin-top: var(--spacing-xl); } + +/* Margin bottom */ +.mb-0 { margin-bottom: 0; } +.mb-xs { margin-bottom: var(--spacing-xs); } +.mb-sm { margin-bottom: var(--spacing-sm); } +.mb-md { margin-bottom: var(--spacing-md); } +.mb-lg { margin-bottom: var(--spacing-lg); } +.mb-xl { margin-bottom: var(--spacing-xl); } + +/* Margin left */ +.ml-0 { margin-left: 0; } +.ml-xs { margin-left: var(--spacing-xs); } +.ml-sm { margin-left: var(--spacing-sm); } +.ml-md { margin-left: var(--spacing-md); } +.ml-lg { margin-left: var(--spacing-lg); } + +/* Margin right */ +.mr-0 { margin-right: 0; } +.mr-xs { margin-right: var(--spacing-xs); } +.mr-sm { margin-right: var(--spacing-sm); } +.mr-md { margin-right: var(--spacing-md); } +.mr-lg { margin-right: var(--spacing-lg); } + +/* Margin horizontal (left + right) */ +.mx-auto { margin-left: auto; margin-right: auto; } +.mx-xs { margin-left: var(--spacing-xs); margin-right: var(--spacing-xs); } +.mx-sm { margin-left: var(--spacing-sm); margin-right: var(--spacing-sm); } +.mx-md { margin-left: var(--spacing-md); margin-right: var(--spacing-md); } + +/* Margin vertical (top + bottom) */ +.my-xs { margin-top: var(--spacing-xs); margin-bottom: var(--spacing-xs); } +.my-sm { margin-top: var(--spacing-sm); margin-bottom: var(--spacing-sm); } +.my-md { margin-top: var(--spacing-md); margin-bottom: var(--spacing-md); } + +/* Padding */ +.p-0 { padding: 0; } +.p-xs { padding: var(--spacing-xs); } +.p-sm { padding: var(--spacing-sm); } +.p-md { padding: var(--spacing-md); } +.p-lg { padding: var(--spacing-lg); } +.p-xl { padding: var(--spacing-xl); } + +/* Padding top */ +.pt-xs { padding-top: var(--spacing-xs); } +.pt-sm { padding-top: var(--spacing-sm); } +.pt-md { padding-top: var(--spacing-md); } +.pt-lg { padding-top: var(--spacing-lg); } + +/* Padding bottom */ +.pb-xs { padding-bottom: var(--spacing-xs); } +.pb-sm { padding-bottom: var(--spacing-sm); } +.pb-md { padding-bottom: var(--spacing-md); } +.pb-lg { padding-bottom: var(--spacing-lg); } + +/* Padding horizontal */ +.px-xs { padding-left: var(--spacing-xs); padding-right: var(--spacing-xs); } +.px-sm { padding-left: var(--spacing-sm); padding-right: var(--spacing-sm); } +.px-md { padding-left: var(--spacing-md); padding-right: var(--spacing-md); } +.px-lg { padding-left: var(--spacing-lg); padding-right: var(--spacing-lg); } + +/* Padding vertical */ +.py-xs { padding-top: var(--spacing-xs); padding-bottom: var(--spacing-xs); } +.py-sm { padding-top: var(--spacing-sm); padding-bottom: var(--spacing-sm); } +.py-md { padding-top: var(--spacing-md); padding-bottom: var(--spacing-md); } +.py-lg { padding-top: var(--spacing-lg); padding-bottom: var(--spacing-lg); } + +/* =========================================== + TEXT UTILITIES + =========================================== */ + +.text-center { text-align: center; } +.text-left { text-align: left; } +.text-right { text-align: right; } + +.text-secondary { color: var(--color-text-secondary); } +.text-muted { color: var(--color-text-muted); } +.text-primary { color: var(--color-primary); } +.text-error { color: var(--color-error); } +.text-success { color: var(--color-success); } + +.text-bold { font-weight: var(--font-weight-bold); } +.text-normal { font-weight: var(--font-weight-normal); } + +.text-sm { font-size: var(--font-size-sm); } +.text-lg { font-size: var(--font-size-lg); } +.text-xl { font-size: var(--font-size-xl); } + +/* Text that respects accessibility guidelines */ +.text-readable { + line-height: var(--line-height-base); + max-width: var(--max-width-readable); +} + +.text-scale-friendly { + line-height: var(--line-height-base); + max-width: var(--max-width-readable-wide); +} + +/* Text with minimum font size safety */ +.text-small { + font-size: max(var(--font-size-sm), var(--min-font-size)); + line-height: var(--min-line-height); +} + +.text-large { + font-size: var(--font-size-lg); + line-height: var(--line-height-base); +} + +/* Text overflow handling */ +.text-truncate { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.text-wrap-anywhere { + overflow-wrap: anywhere; + word-break: break-word; +} + +.text-nowrap { + white-space: nowrap; +} + +/* High contrast text for accessibility */ +.text-contrast-high { + color: var(--color-text); + font-weight: var(--font-weight-bold); +} + +/* Better focus for text elements */ +.focusable-text:focus { + background-color: var(--color-primary-alpha-light); + outline: var(--focus-ring-width) solid var(--color-primary); + outline-offset: var(--outline-offset-sm); + border-radius: var(--outline-offset-sm); +} + +/* High contrast box */ +.high-contrast { + color: var(--color-text); + background: var(--color-background); + border: var(--border-width-thin) solid var(--color-border-pale); +} + +/* =========================================== + BORDER & SHADOW UTILITIES + =========================================== */ + +.rounded { border-radius: var(--border-radius-full); } +.rounded-sm { border-radius: var(--border-radius-base); } +.rounded-lg { border-radius: var(--border-radius-lg); } +.rounded-none { border-radius: 0; } + +.shadow { box-shadow: var(--box-shadow); } +.shadow-sm { box-shadow: var(--box-shadow-sm); } +.shadow-none { box-shadow: none; } + +.border { border: var(--border-width-thin) solid var(--color-border); } +.border-dark { border: var(--border-width-thin) solid var(--color-border-dark); } +.border-light { border: var(--border-width-thin) solid var(--color-border-light); } +.border-none { border: none; } + +/* =========================================== + BACKGROUND UTILITIES + =========================================== */ + +.bg-primary { + background: var(--color-primary); + color: var(--color-background); +} + +.bg-card { + background: var(--color-card-bg); +} + +.bg-section { + background: var(--color-section-bg); +} + +.bg-transparent { + background: transparent; +} + +.bg-white { + background: var(--color-background); +} + +/* =========================================== + BUTTON COMPONENTS + =========================================== */ + +/* Primary button */ +.btn-primary { + min-height: var(--min-touch-target); + padding: var(--spacing-sm) var(--spacing-md); + border: var(--border-width-thin) solid var(--color-primary); + border-radius: var(--border-radius-base); + background: var(--color-primary); + color: var(--color-background); + font-weight: var(--font-weight-bold); + cursor: pointer; + transition: all var(--animation-duration) ease; + text-decoration: none; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.btn-primary:hover { + background: color-mix(in srgb, var(--color-primary) 85%, black); + box-shadow: 0 2px 4px var(--color-primary-alpha); +} + +.btn-primary:active { + box-shadow: 0 1px 2px var(--color-primary-alpha); +} + +.btn-primary:focus, +.btn-primary:focus-visible { + outline: var(--focus-indicator-width) solid var(--color-primary); + outline-offset: var(--outline-offset-sm); + box-shadow: 0 0 0 var(--focus-ring-width) var(--color-background), 0 0 0 calc(var(--focus-ring-width) + var(--focus-indicator-width)) var(--color-primary-alpha); +} + +.btn-primary:disabled { + opacity: var(--opacity-disabled); + cursor: not-allowed; + transform: none; +} + +/* Secondary button */ +.btn-secondary { + min-height: var(--min-touch-target); + padding: var(--spacing-sm) var(--spacing-md); + border: var(--border-width-thin) solid var(--color-secondary); + border-radius: var(--border-radius-base); + background: var(--color-secondary); + color: var(--color-background); + font-weight: var(--font-weight-bold); + cursor: pointer; + transition: all var(--animation-duration) ease; + text-decoration: none; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.btn-secondary:hover { + background: color-mix(in srgb, var(--color-secondary) 85%, black); +} + +.btn-secondary:disabled { + opacity: var(--opacity-disabled); + cursor: not-allowed; +} + +/* Outline button */ +.btn-outline { + min-height: var(--min-touch-target); + padding: var(--spacing-sm) var(--spacing-md); + border: var(--border-width-medium) solid var(--color-primary); + border-radius: var(--border-radius-base); + background: transparent; + color: var(--color-primary); + font-weight: var(--font-weight-bold); + cursor: pointer; + transition: all var(--animation-duration) ease; + text-decoration: none; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.btn-outline:hover { + background: var(--color-primary); + color: var(--color-background); +} + +.btn-outline:disabled { + opacity: var(--opacity-disabled); + cursor: not-allowed; +} + +/* Transparent button (for solid-ui integration) */ +.btn-transparent { + background-color: transparent; + border: none; + cursor: pointer; +} + +.btn-transparent:hover { + background-color: var(--color-hover-bg); +} + +/* Button focus state */ +.action-button-focus:focus, +.action-button-focus:focus-visible { + outline: var(--focus-indicator-width) solid var(--color-primary) !important; + outline-offset: var(--outline-offset-sm) !important; + box-shadow: 0 0 0 var(--focus-ring-width) var(--color-background), 0 0 0 calc(var(--focus-ring-width) + var(--focus-indicator-width)) var(--color-primary-alpha) !important; + z-index: 1; +} + +/* =========================================== + CARD & SECTION COMPONENTS + =========================================== */ + +.module-card { + background: var(--color-card-bg); + border-radius: var(--border-radius-full); + box-shadow: var(--box-shadow); + padding: var(--spacing-lg); + margin-bottom: var(--spacing-lg); + width: 100%; + max-width: 100%; + box-sizing: border-box; +} + +.module-header { + text-align: center; + margin-bottom: var(--spacing-md); +} + +.section-centered { + display: flex; + flex-direction: column; + align-items: center; +} + +.section-bg { + background: var(--color-section-bg); + border-radius: var(--border-radius-full); + box-shadow: var(--box-shadow); + padding: var(--spacing-md); +} + +.section-title { + font-size: var(--font-size-xl); + font-weight: var(--font-weight-bold); + color: var(--color-primary); + margin: 0; +} + +/* =========================================== + LIST & TABLE UTILITIES + =========================================== */ + +.list-reset { + list-style: none; + padding: 0; + margin: 0; +} + +.zebra-stripe tr:nth-child(even), +.zebra-stripe > *:nth-child(even) { + background-color: var(--color-zebra-stripe); +} + +/* =========================================== + DISPLAY & VISIBILITY UTILITIES + =========================================== */ + +.block { display: block; } +.inline { display: inline; } +.inline-block { display: inline-block; } +.hidden { display: none; } +.visible { visibility: visible; } +.invisible { visibility: hidden; } + +/* =========================================== + WIDTH & HEIGHT UTILITIES + =========================================== */ + +.w-full { width: 100%; } +.w-auto { width: auto; } +.h-full { height: 100%; } +.h-auto { height: auto; } +.max-w-full { max-width: 100%; } + +/* =========================================== + POSITION UTILITIES + =========================================== */ + +.relative { position: relative; } +.absolute { position: absolute; } +.fixed { position: fixed; } +.sticky { position: sticky; } + +/* =========================================== + LOADING & STATUS INDICATORS + =========================================== */ + +.loading-text { + color: var(--color-primary); + text-align: center; + margin: var(--spacing-md) 0; +} + +.loading-spinner { + width: var(--min-touch-target); + height: var(--min-touch-target); + border: var(--focus-indicator-width) solid var(--color-border-pale); + border-top: var(--focus-indicator-width) solid var(--color-primary); + border-radius: var(--border-radius-full); + animation: spin var(--animation-duration-slow) linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* =========================================== + ARIA ROLE STYLING + =========================================== */ + +[role="alert"] { + padding: var(--spacing-md); + border: var(--border-width-medium) solid var(--color-error); + border-radius: var(--border-radius-base); + background-color: var(--color-primary-alpha-light); + margin: var(--spacing-md) 0; +} + +[role="status"] { + padding: var(--spacing-md); + border: var(--border-width-medium) solid var(--color-success); + border-radius: var(--border-radius-base); + background-color: var(--color-success-alpha); + margin: var(--spacing-md) 0; +} + +/* =========================================== + FOCUS TRAP FOR MODALS + =========================================== */ + +.focus-trap { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: var(--z-index-modal); + background: var(--overlay-bg); + display: flex; + justify-content: center; + align-items: center; +} + +/* =========================================== + MEDIA QUERIES + =========================================== */ + +/* Respect reduced motion preferences */ +@media (prefers-reduced-motion: reduce) { + .loading-spinner { + animation: none; + border-top-color: var(--color-primary); + } + + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +} + +/* High contrast mode support */ +@media (prefers-contrast: high) { + .btn-primary, + .btn-secondary, + .btn-outline { + border-width: var(--border-width-medium); + } + + .module-card, + .section-bg { + border: var(--border-width-medium) solid var(--color-border-dark); + } +} + +/* Mobile minimum font size */ +@media screen and (max-width: 768px) { + html { + font-size: max(16px, 1rem); + } +} + +/* Smooth scroll when no motion preference */ +@media (prefers-reduced-motion: no-preference) { + html { + scroll-behavior: smooth; + } +} diff --git a/dev/dev-mash.css b/dev/dev-mash.css new file mode 100644 index 00000000..8aa75274 --- /dev/null +++ b/dev/dev-mash.css @@ -0,0 +1,1411 @@ +/* ---ONLY FOR LOCAL DEV--- */ +/* ---final version is in mashlib--- */ + +/* +** ------SolidOS Styles------ +** +*/ +@import url("./dev-light.css"); +@import url("./dev-mash-utilities.css"); + +/* I couldn't find the code for the collapse image. this is a quick work around +to make the collapsing easier to use ( the triangles dont jump 20 pixels). ~cm2 +*/ +img[title="Hide details."] { + float: left; +} + +html { + height: 100%; + line-height: 1.15; +} +body { + height: 100%; + background-color: var(--color-background); + color: var(--color-text); + font-family: var(--font-family-base); +} + +/* Improved heading hierarchy */ +h1, h2, h3, h4, h5, h6 { + color: var(--color-primary); + font-weight: 600; + line-height: var(--line-height-tight); + margin-top: 0; + margin-bottom: var(--spacing-sm); +} + +h1 { font-size: 2em; } /* 32px */ +h2 { font-size: 1.5em; } /* 24px */ +h3 { font-size: 1.25em; } /* 20px */ +h4 { font-size: 1.125em; }/* 18px */ +h5, h6 { font-size: 1em; }/* 16px */ + +/* Better paragraph spacing */ +p { + margin-bottom: var(--spacing-md); + line-height: var(--line-height-base); + max-width: 65ch; /* Optimal reading width */ +} + +/* Improved link accessibility */ +a { + color: var(--color-primary); + text-decoration: underline; + text-underline-offset: 0.125em; + text-decoration-thickness: 0.0625em; +} + +a:hover, a:focus { + text-decoration-thickness: 0.125em; +} + + +/* Main page elements in databrowser.html */ +#PageBody { + display: flex; + flex-direction: column; +} +#DummyUUID { + flex: 1 0 auto; +} +#PageHeader { + flex-shrink: 0; +} +#PageFooter { + flex-shrink: 0; +} + +.warning { + color: var(--color-warning); +} +.selected { + background-color: var(--color-selected-bg); +} + +.licOkay { + background-color: var(--color-success-bg); +} + +/* +** other potential colors for CC: +** #C4FF55. "faded" version of CC +** #486d00, actual CC +** #ccff99, mit page color +*/ + +strong { + font-size: 120%; + color: var(--color-text); + font-weight: bold; +} +div.Outliner { + margin-top: 2em; + padding: 0.8em; +} +form#TabulateForm { + padding: 0.8em; +} +div#addViewForm { + padding: 0.8em; +} +iframe { + background: var(--color-iframe-bg); +} + +/* Map */ + +img.pic { + max-height: 20em; +} + +/* Sources */ + +.fetched { + background-color: var(--color-fetch-bg); +} +.requested { + background-color: var(--color-request-bg); +} +.failed { + color: var(--color-warning); + background-color: var(--color-error-bg); +} +.unparseable { + background-color: var(--color-unparseable-bg); +} + +pre#status { + font-size: 100%; +} + +/* Panes */ +/* +td.internal { } + +/* Moved into code: +div.internalPane { background-color: #ddddff; padding: 0.5em; +border-radius: 1em; border-radius: .4em; } + +div.instancePane { + border-top: solid 1px #777; border-bottom: solid 1px #777; + margin-top: 0.5em; margin-bottom: 0.5em } +*/ +/* ***************** For the Justification UI Panes **********/ + +div.container { + border-top: solid 5px var(--color-container-border); + border-left: solid 5px var(--color-container-border); + border-bottom: solid 5px var(--color-container-border); + border-right: solid 5px var(--color-container-border); + margin-top: 0.5em; + margin-bottom: 0.5em; + border-radius: 0.75em; +} +/* +div.nonCompliantPane { + border-top: solid 1px red; + border-left: solid 1px red; + border-bottom: solid 1px red; + border-right: solid 1px red; + padding: 0.5em; + background-color: #fbf0f7; + margin-top: 0.5em; margin-bottom: 0.5em; + border-radius: 1em; +} + +div.compliantPane { + border-top: solid 1px green; + border-left: solid 1px green; + border-bottom: solid 1px green; + border-right: solid 1px green; + padding: 0.5em; + background-color: #def8e0; + margin-top: 0.5em; margin-bottom: 0.5em; + border-radius: 1em; +} +*/ +div.justification { + font-size: 100%; + padding: 0 5px; + width: 80%; /* @@ Don't use pixels -- use em */ + background-color: var(--color-background); + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +div.description { + font-size: 120%; + border-top: solid 1px var(--color-alert-border); + border-left: solid 1px var(--color-alert-border); + border-bottom: solid 1px var(--color-alert-border); + border-right: solid 1px var(--color-alert-border); + padding: 15px; + width: 100%; + background-color: var(--color-alert-bg); + margin-top: 0.5em; + margin-bottom: 0.5em; + margin-left: 0.5em; + margin-right: 0.5em; + border-radius: 0.75em; + position: relative; + left: 0%; +} + +div.premises { + font-size: 100%; + border-top: solid 1px var(--color-info-border); + border-left: solid 1px var(--color-info-border); + border-bottom: solid 1px var(--color-info-border); + border-right: solid 1px var(--color-info-border); + padding: 0.5px; + width: 100%; + background-color: var(--color-info-bg); + margin-top: 0.5em; + margin-bottom: 0.5em; + margin-left: 0.5em; + margin-right: 0.5em; + border-radius: 0.75em; + position: relative; + left: 0%; /*May be we could shift the left margin a bit?*/ +} + +/* ***************** Social Pane **********/ + +div.socialPane { + border-top: solid 1px var(--color-border-dark); + border-bottom: solid 1px var(--color-border-dark); + padding-top: 0.5em; + padding-bottom: 0.5em; + margin: 0; +} + +img.foafPic { + width: 100%; + border: none; + margin: 0; + padding: 0; + /*float:right; */ +} + +div.mildNotice { + border: dashed 0.1em var(--color-border-dark); + margin: 1em; + padding: 1em; + width: 80%; /* float: right; */ + background-color: var(--color-mild-notice-bg); +} + +.friendBox { + /* height: 4em; */ + border-top: solid 0.01em var(--color-border); + margin: 0; + padding: 0.3em; + /* float: left; */ +} +.friendBoxBig { + height: 20em; + border-top: solid 0.01em var(--color-text-dark-gray); /* float: left; */ +} + +.socialPane a { + color: var(--color-text-link); + text-decoration: none; + font-weight: bold; +} +.socialPane a:link { + color: var(--color-text-link); + text-decoration: none; + font-weight: bold; +} +.socialPane a:visited { + color: var(--color-text-link-visited); + text-decoration: none; + font-weight: bold; +} +.socialPane a:hover { + color: var(--color-text-link-hover); + text-decoration: underline; + font-weight: bold; +} +.socialPane a:active { + color: var(--color-text-link-active); + text-decoration: none; +} + +img.foafThumb { + height: 3em; + border: 0px; + margin: 0.1em; + padding: 0.1em; + vertical-align: middle; +} /* Thumbnail of a fiend etc */ + +.friendBox .confirmed { + font-weight: bold; +} + +table.inputForm { + font-size: 100%; +} + +.mainBlock { + background: var(--color-main-block-bg); + color: var(--color-text); + float: left; + width: 46%; + margin: 0; + border-left: 1px solid var(--color-border); + border-right: 1px solid var(--color-border); + border-bottom: 1px solid var(--color-border); + padding: 0; +} + +.navBlock { + background-color: var(--color-nav-block-bg); + float: left; + width: 25%; + border: 0; + padding: 0.5em; + margin: 0; +} + +.navBlock .navSection { + border: solid 0.05em var(--color-nav-block-border); + padding: 0.5em; + border-radius: 0.5em; /* CSS3: border-radius: .4em; */ +} + +div.socialPane h2 { + color: var(--color-text-dark-gray); +} +div.socialPane h3 { + color: var(--color-text-dark-gray); +} + +div.social_linkButton { + width: 80%; + background-color: var(--color-background); + border: solid 0.05em var(--color-border); + margin-top: 0.1em; + margin-bottom: 0.1em; + padding: 0.1em; + text-align: center; +} + +/* For question-and-answer stuff for new web id but quite reusable. +*/ +.answer { + font-style: italic; + color: var(--color-text-answer); + text-decoration: underline; +} +.tip { + font-style: normal; + color: var(--color-text); + margin: 1em; +} +.task { + font-style: normal; + color: var(--color-text); + margin: 1em; + background-color: var(--color-mild-notice-bg); + padding: 1em; + border-radius: 1em; /* CSS3: border-radius: 1em; */ +} +.success { + background-color: var(--color-success-bg); +} +.failure { + background-color: var(--color-failure-bg); + border: 0.5em var(--color-failure-border); +} +div.unknown { + display: none; +} +div.yes > div.negative { + display: none; +} +div.no > div.affirmative { + display: none; +} + +/******************* Exception Pane ******** +** +** A pane created when the loading of a pane +** throws an exception +**/ + +div.exceptionPane pre { + background-color: var(--color-error-notice-bg); +} + +/******************* Category Pane *********/ + +.categoryPane a { + color: var(--color-text-link); + text-decoration: none; + font-weight: bold; +} +.categoryPane a:link { + color: var(--color-text-link); + text-decoration: none; + font-weight: bold; +} +.categoryPane a:visited { + color: var(--color-text-link-visited); + text-decoration: none; + font-weight: bold; +} +.categoryPane a:hover { + color: var(--color-text-link-hover); + text-decoration: underline; + font-weight: bold; +} +.categoryPane a:active { + color: var(--color-text-link-active); + text-decoration: none; +} + +.categoryBottomClass { + background-color: var(--color-category-class-bg); + border: 0.1em solid var(--color-category-class-border); +} + +.categoryTable { + padding-left: 2em; +} +.categoryPane { + background-color: var(--color-category-bg); + padding: 0.5em; + border-width: 0.1em; + border-color: var(--color-category-border); + border-radius: 1em; /* CSS3: border-radius: .4em; */ +} + +.categoryPane a.categoryWhy { + color: var(--color-border-pale); +} +.categoryPane a.categoryWhy:link { + color: var(--color-border-pale); + text-decoration: none; + font-weight: bold; +} +.categoryPane a.categoryWhy:visited { + color: var(--color-border-pale); + text-decoration: none; + font-weight: bold; +} +.categoryPane a.categoryWhy:hover { + color: var(--color-text-link-hover); + text-decoration: underline; + font-weight: bold; +} +.categoryPane a.categoryWhy:active { + color: var(--color-border-pale); + text-decoration: none; +} + +.categoryPane a.categoryWhy { + color: grey; +} +/* a.categoryWhy:hover { color: #3B5998 } */ + +/******************* PubsPane *********/ + +.pubsPane { + background-color: var(--color-pubs-pane-bg); + border-width: 0.1em; + border-color: var(--color-pubs-pane-border); + border-radius: 1em; /* CSS3: border-radius: .4em; */ + padding: 1em; + + text-decoration: none; + font-weight: bold; +} + +.pubsPane h2 { + margin: 0; + padding: 0; +} + +.pubsPane form { + padding-left: 1em; +} + +/*Clear both - start things on individula lines */ +.pubsRow { + margin: 0.5em 3em 0.5em 0em; + clear: both; +} + +/*inputs float right to line up */ +.pubsRow input { + float: right; + width: 20em; + height: 1em; +} +#inpid_book_description { + float: right; + height: 8em; + width: 17em; +} + +.pubsRow button { + float: left; + height: 2em; + padding: 0.5em; + margin: 0.5em; +} + +.hideit { + display: none; +} + +.active { + /* display: visible; */ +} + +.submitRow { + clear: both; + height: 5em; +} + +.submitRow button { + width: 7em; + height: 100%; +} + +#buttonid { + display: none; +} + +#buttonid.active { + display: inline; +} + +/******************* CV Pane *****************/ + +.CVclass { + background-color: var(--color-cv-pane-bg); +} + +/******************* Data Content Pane *****************/ + +div.dataContentPane { + border-top: solid 1px var(--color-data-pane-border-top); + border-left: solid 1px var(--color-data-pane-border-top); + border-bottom: solid 1px var(--color-data-pane-border-side); + border-right: solid 1px var(--color-data-pane-border-side); + padding: 0.5em; /* color: #404; */ + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +.nestedFormula { + border-top: solid 1px var(--color-data-pane-border-top); + border-left: solid 1px var(--color-data-pane-border-top); + border-bottom: solid 1px var(--color-data-pane-border-side); + border-right: solid 1px var(--color-data-pane-border-side); + padding: 0.5em; + border-radius: 0.5em; +} + +div.dataContentPane td { + padding-left: 0.2em; + padding-top: 0.1em; + padding-right: 0.2em; + padding-bottom: 0.05em; + /* vertical-align: middle; /*@@ Lalana's request*/ + vertical-align: top; /*@@ Tims's request*/ + /* With middel, you can't tell what is with what */ + /* background-color: white; */ +} + +div.dataContentPane tr { + margin-bottom: 0.6em; + padding-top: 1em; + padding-bottom: 1em; +} + +.dataContentPane a { + color: var(--color-text-link); + text-decoration: none; + font-weight: bold; +} +.dataContentPane a:link { + color: var(--color-text-link); + text-decoration: none; + font-weight: bold; +} +.dataContentPane a:visited { + color: var(--color-text-link-visited); + text-decoration: none; + font-weight: bold; +} +.dataContentPane a:hover { + color: var(--color-text-link-hover); + text-decoration: underline; + font-weight: bold; +} +.dataContentPane a:active { + color: var(--color-text-link-active); + text-decoration: none; +} + +.dataContentPane.embeddedText { + white-space: pre-wrap; +} +.dataContentPane.embeddedXHTML { +} + +/* div.dataContentPane a { text-decoration: none; color: #006} /* Only very slightly blue */ +div.dataContentPane td.pred { + min-width: 12em; +} /* Keep aligned with others better */ +div.dataContentPane td.pred a { + color: var(--color-text-muted); +} /* Greyish as form field names have less info value */ + +/* .collectionAsTables {border-right: green 1px; margin: 0.2em;} */ + +div.n3Pane { + padding: 1em; + border-top: solid 1px var(--color-data-pane-border-top); + border-left: solid 1px var(--color-data-pane-border-top); + border-bottom: solid 1px var(--color-data-pane-border-side); + border-right: solid 1px var(--color-data-pane-border-side); + color: var(--color-text-blue); +} + +.imageView { + border: 1em var(--color-background); + margin: 1em; +} + +.n3Pane pre { + font-size: 120%; +} +div.n3Pane { +} + +.RDFXMLPane pre { + font-size: 120%; +} +div.RDFXMLPane { +} + +div.RDFXMLPane { + padding: 1em; + border-top: solid 2px var(--color-data-pane-border-top); + border-left: solid 2px var(--color-data-pane-border-top); + border-bottom: solid 2px var(--color-data-pane-border-side); + border-right: solid 2px var(--color-data-pane-border-side); + color: var(--color-text-brown); +} + +/* Generic things useful anywhere */ + +img.hideTillHover { + visibility: hidden; +} +img.hideTillHover:hover { + visibility: visible; +} +.hideTillHover img { + visibility: hidden; +} +.hideTillHover:hover img { + visibility: visible; +} +.hideTillHover a { + visibility: hidden; +} +.hideTillHover:hover a { + visibility: visible; +} +.hoverControl .hoverControlHide { + visibility: hidden; +} +.hoverControl:hover .hoverControlHide { + visibility: visible; +} + +/* Pane icons: */ + +/* +.hoverControl .paneShown{ border-radius: 0.5em; + border-top: solid #222 1px; + border-left: solid #222 0.1em; border-bottom: solid #eee 0.1em; + border-right: solid #eee 0.1em; + margin-left: 1em; padding: 3px; + background-color: #ffd; + visibility: hidden;} + +.hoverControl:hover .paneShown{ border-radius: 0.5em; + border-top: solid #222 1px; + border-left: solid #222 0.1em; border-bottom: solid #eee 0.1em; + border-right: solid #eee 0.1em; + margin-left: 1em; padding: 3px; + background-color: #ffd; + visibility:visible; } + +.paneHidden { border-radius: 0.5em; margin-left: 1em; padding: 3px} + +.hoverControl .paneHidden { border-radius: 0.5em; margin-left: 1em; padding: 3px; visibility:hidden;} +.hoverControl:hover .paneHidden { border-radius: 0.5em; margin-left: 1em; padding: 3px; visibility:visible; } +*/ + +/* outline object view */ +img.outlineImage { + max-height: 20em; + max-width: 30em; +} /* save vertical space */ +/* Compare facebook which only limits width -> lots of tall images! */ + +img.phoneIcon { + border: 0; + margin-left: 1em; +} + +table#sources { + width: 100%; +} + +table { + border-spacing: 0; +} + +table { + margin: 0em; +} + +td { + font-size: 100%; + border-left: none; + border-top: none; + border-right: none; + border-bottom: none; + margin: 0.2em; + /* border-right: solid purple 0.1em ; + border-bottom: solid purple 0.1em; +*/ + vertical-align: top; + /* display: compact; Causes console errors in ffox */ +} + +td.pred { + padding-left: 0.5em; +} +/*td.optButton { display: none } +tr[parentOfSelected] > td.pred td.optButton { display: block } +*/ + +table.results { + width: 100%; +} + +table.results td { + font-size: 100%; + background-color: var(--color-table-result-bg); + border-left: none; + border-top: none; + border-right: none; + border-bottom: none; + margin: 0.1em; + border-right: solid var(--color-table-border-dark) 0.1em; + border-bottom: solid var(--color-table-border-dark) 0.1em; + + vertical-align: top; +} + +table.results th { + font-size: 100%; + background-color: var(--color-table-header-bg); + border-left: none; + border-top: none; + border-right: solid var(--color-table-border-dark) 0.1em; + border-bottom: solid var(--color-table-border-dark) 0.1em; + margin: 0.3em; + padding-top: 0.5em; + padding-right: 0.5em; + border-right: solid var(--color-table-border-dark) 0.1em; + border-bottom: solid var(--color-table-border-dark) 0.1em; + + vertical-align: top; +} + +/* Hide sections of the display. +Collpase not actually in CSS1 except for table row and col. +Supposed to leave layoutunchanged. So we float it too. */ + +.collapse { + display: none; +} +.expand { + display: block; +} + +/* log classes */ +.nrml { + color: var(--color-log-normal); +} +.info { + color: var(--color-log-info); +} +.warn { + color: var(--color-log-warn); + background-color: var(--color-log-warn-bg); +} +.eror { + color: var(--color-log-error); + background-color: var(--color-log-error-bg); +} +.mesg { + color: var(--color-log-message); +} +.dbug { + color: var(--color-log-debug); + background-color: var(--color-log-debug-bg); +} /* Blue */ + +/* Try to get the icons to flush right in the cell */ + +.sortheader { + color: var(--color-log-normal); + text-decoration: none; + position: relative; + border: none; /* Jim's commented out */ +} + +.colclose { + float: right; + color: var(--color-col-close); +} /* Should be 67% transp black */ +.sortarrow { + float: left; + color: var(--color-sort-arrow); + border: none; +} + +/* CSS Stuff for tabbed Views.. */ +table.viewTable { + padding: 0; + margin: 0; + border-style: none; + border-width: 0; + height: 40em; + width: 100%; + border-spacing: 0; +} + +div.viewTabs { + background-color: var(--color-view-tab-bg); + padding: 0; +} + +div.viewWindows { + width: 100%; + height: 100%; + overflow: auto; + margin: 0em; + padding: 0em; + border-right: solid var(--color-border-light) 0.1em; /* was 2px */ + border-left: solid var(--color-border-light) 0.1em; + border-bottom: solid var(--color-border-light) 0.1em; + background-color: var(--color-view-window-bg); +} + +div.querySelect { + background-color: var(--color-query-select-bg); + width: 100%; + height: 100%; + border-left: solid var(--color-border-light) 0.1em; + border-bottom: solid var(--color-border-light) 0.1em; + overflow: auto; + margin: 0em; + padding: 0em; +} + +td.viewTableData { + padding: 0em; + margin: 0em; + height: 100%; + width: 80%; +} + +td.queryTableData { + padding: 0em; + margin: 0em; + border-width: 0em; + height: 100%; + width: 20%; + border-style: none; +} + +table.viewTable tr { + height: 100%; + margin: 0em; + padding: 0em; + border-style: none; +} + +a { + color: var(--color-text-link); + text-decoration: none; + cursor: pointer; +} +a.inactive { + background-color: var(--color-tab-inactive-bg); + border-right: solid var(--color-tab-inactive-border) 0.1em; + border-top: solid var(--color-tab-inactive-border-light) 0.1em; + border-left: solid var(--color-tab-inactive-border-light) 0.1em; + padding-top: 0.3em; + padding-left: 0.8em; + padding-right: 0.8em; + padding-bottom: 0em; + margin-right: 0.1em; + color: var(--color-tab-inactive-text); + text-decoration: none; +} + +a.active { + background-color: var(--color-tab-active-bg); + border-right: solid var(--color-tab-active-border) 0.1em; + border-top: solid var(--color-tab-active-border-light) 0.1em; + border-left: solid var(--color-tab-active-border-light) 0.1em; + padding-top: 0.3em; + padding-left: 0.8em; + padding-right: 0.8em; + padding-bottom: 0em; + margin-right: 0.1em; + color: var(--color-tab-active-text); + text-decoration: none; +} + +input.tabQueryName { + border: solid var(--color-border-light) 0.1em; + width: 100%; + padding: 0em; +} + +input.delQueryButton { + border: none; + color: var(--color-warning); + background-color: var(--color-tab-active-bg); + cursor: pointer; + padding: 0em; +} + +td.checkboxTD { + padding-right: 0.5em; +} + +.sourceHighlight { + background-color: var(--color-source-highlight); +} + +#MenuBar { + padding: 0.5em; + position: fixed; + top: 0; + bottom: auto; + left: 0; + right: 0; + background-color: var(--color-nav-block-bg); + border: 0.1em solid var(--color-border-light); +} + +#TabulatorStatusWidget { + position: fixed; + top: 0; + bottom: auto; + left: auto; + right: 0; +} + +div.mapKeyDiv { + position: relative; + float: right; + margin: 0.3em; + color: var(--color-border-dark); + background: var(--color-background); + border: solid var(--color-border-dark) 0.1em; + padding: 0.1em; +} + +span.closeQuerySpan { + float: right; + text-align: right; + height: 0.1em; + overflow: visible; +} + +span.openQuerySpan { + float: left; + overflow: visible; + height: 0em; + text-align: left; + position: relative; + top: 0em; + z-index: 1; +} + +input.textinput { + width: 100%; + border: none; + font-size: 95%; + padding: 0em; + margin: 0; +} + +textarea.textinput { + border: none; +} + +.pendingedit { + color: var(--color-pending-edit); +} + +td.undetermined { + color: var(--color-nav-block-border); + font-style: italic; +} + +/*revert back*/ +td.undetermined table { + color: var(--color-text); + font-style: normal; +} + +/*color style from http://developer.yahoo.com/yui/docs/module_menu.html*/ +.outlineMenu { + position: absolute; + /*width:10em;*/ + height: 10em; /* Jim's commented out */ + background: var(--color-menu-bg) none repeat scroll 0%; + overflow-x: hidden; + overflow-y: auto; + border: 1px solid; + /*padding:.2em;*/ +} +.outlineMenu table { + cursor: default; + width: 100%; + text-align: left; + padding: 5px 5px; +} +.outlineMenu div { + /*width:6em;*/ + overflow: auto; + white-space: nowrap; +} +.outlineMenu td { + color: var(--color-menu-item-text); +} +.outlineMenu .activeItem { + background: var(--color-menu-item-active); +} /* @@ Jim's: #f4e8fc; */ +.outlineMenu input { + margin: 0.2em; +} + +div.bottom-border { + border: 0.2em solid transparent; + width: 100%; +} + +div.bottom-border-active { + cursor: copy; + border: 0.2em solid; + border-color: var(--color-bottom-border-highlight); +} + +/* The thing below was for the kenny's orange bar*/ +/* @@@ This is not specific enough +td{ + margin: 0; + padding: 0; +} +*/ + +.deleteIcon { + margin-left: 0.1em; +} + +.deleteCol { + float: right; + display: inline; +} + +.suggestion_list { + background: var(--color-suggestion-bg); + border: 1px solid var(--color-suggestion-border); + padding: 4px; +} + +.suggestion_list ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +.suggestion_list a { + text-decoration: none; + color: var(--color-suggestion-link); +} + +.suggestion_list .selected { + background: var(--color-suggestion-selected-bg); + color: var(--color-suggestion-selected-text); +} + +.suggestion_list .selected a { + color: var(--color-suggestion-selected-text); +} + +#autosuggest { + display: none; +} + +/* +Start of styles for the photoPane, by albert08@csail.mit.edu +*/ +div.PhotoContentPane { + float: left; + width: 900px; + border: 1px solid var(--color-photo-border); + padding: 10px; +} +div.PhotoListPanel { + float: left; + padding: 5px; + border: 1px solid var(--color-photo-border); + width: 540px; + min-height: 300px; +} +div.PhotoInfoPanel { + float: left; + padding: 10px; + border: 1px solid var(--color-photo-border); + width: 300px; + text-align: center; + margin: 0px 0px 10px 10px; +} +div.TagMenu { + float: left; + padding: 10px; + border: 1px solid var(--color-photo-border); + width: 300px; + margin: 0px 0px 0px 10px; + text-align: justify; +} +.tagItem { + float: left; + padding: 2px; + margin: 2px; + cursor: pointer; +} +.tagItem_h { + float: left; + padding: 2px; + margin: 1px; + border: 1px solid var(--color-photo-tag-highlight-border); + background-color: var(--color-photo-tag-highlight); + cursor: pointer; +} +div.photoItem { + float: left; + width: 100%; +} +div.photoFrame { + border-right: 1px solid var(--color-photo-border); + width: 260px; + padding: 10px; + margin: 10px 10px 10px 10px; + text-align: center; + float: left; +} +img.photoThumbnail { + border: 1px solid var(--color-photo-thumb-border); + margin: auto auto auto auto; +} +.photoListTags { + width: 200px; + margin-top: 10px; + padding-top: 10px; + float: left; +} +.photoList_tag { + background: transparent + url("https://solidos.github.io/solid-ui/src/originalIcons/tag_tiny.png") 0px + 1px no-repeat; + padding: 1px 0px 1px 18px; + margin-left: 5px; +} +.TagMenu_tag { + background: transparent + url("https://solidos.github.io/solid-ui/src/originalIcons/tag_tiny.png") 0px + 1px no-repeat; + padding: 1px 0px 1px 18px; + margin-left: 5px; +} +div.photoImportContentPane { + float: left; + padding: 0px; + width: 930px; + border: 1px solid var(--color-photo-border); + padding: 10px; +} +.photoImportTitle { + font-size: 1rem; + font-weight: bold; +} +.photoItemPanel { + width: 260px; + height: 300px; + float: left; + padding: 10px; + border: 1px solid var(--color-photo-border); + margin: 0px 10px 10px 0px; +} +.photoControlImg { + border: 0px; + cursor: pointer; +} +.photoControlImgInactive { + opacity: 0.5; + border: 0px; +} +#photoPageInfo { + font-family: var(--font-family-ui); + font-size: 0.875rem; + font-weight: bold; +} +.controls { + clear: both; + text-align: right; + margin: 15px 15px 0px 0px; +} +.controlButton { + margin: 0px 0px 0px 10px; +} +div.TagPane { + min-width: 500px; + border: 1px solid var(--color-photo-border); + padding: 10px; +} +div.TagSemanticsPanel { + margin: 5px 0px 20px 0px; +} +div.TagSemanticsTable { + width: 100%; + font-family: var(--font-family-ui); + font-size: 0.75rem; +} +div.AddTagSemantics { + margin: 50px 0px 10px 0px; +} +.controlSelect { + margin: 5px; + font-family: var(--font-family-ui); + font-size: 0.75rem; +} +.tagURIInput { + margin: 5px; + font-family: var(--font-family-ui); + font-size: 0.75rem; + width: 300px; +} +div.TagPane hr { + border: 1px solid var(--color-photo-border); +} +/* +End of styles for the photoPane +*/ + +/* +Styles for tableViewPane +*/ + +.tableViewPane table th { + background-color: var(--color-tab-inactive-bg); + color: var(--color-log-normal); +} + +.tableViewPane table th a { + color: var(--color-text-secondary); +} + +.tableViewPane table .selectors td { + background-color: var(--color-tab-active-bg); +} + +.tableViewPane table td { + border-bottom: 1px solid var(--color-data-pane-border-top); + border-right: 1px solid var(--color-data-pane-border-top); +} + +.tableViewPane .toolbar td { + border: none; +} + +.tableViewPane .sparqlButton { + width: 16px; + height: 16px; + border: 1px solid var(--color-data-pane-border-top); +} + +.tableViewPane .sparqlDialog { + position: fixed; + top: 40px; + left: 100px; + width: 600px; + background: var(--color-background); + border: 1px solid var(--color-data-pane-border-top); + padding: 5px; +} + +.tableViewPane .sparqlDialog textarea { + width: 590px; + height: 250px; +} + +/* These should be the same as with hthe dataContentPane */ +.tableViewPane a { + color: var(--color-text-link); + text-decoration: none; + font-weight: bold; +} +.tableViewPane a:link { + color: var(--color-text-link); + text-decoration: none; + font-weight: bold; +} +.tableViewPane a:visited { + color: var(--color-text-link-visited); + text-decoration: none; + font-weight: bold; +} +.tableViewPane a:hover { + color: var(--color-text-link-hover); + text-decoration: underline; + font-weight: bold; +} +.tableViewPane a:active { + color: var(--color-text-link-active); + text-decoration: none; +} + +.tableViewPane tr { + border-color: var(--color-border-darker); + padding-left: 0.3em; + padding-right: 0.3em; +} + +/*The 'display explanation' feature*/ +.inquiry { + padding-left: 0.2em; + color: var(--color-warning); + font-family: var(--font-family-ui); + font-weight: bold; +} + +/* +End of styles for tableViewPane +*/ + +/* Styles for FORM PANE +** +** Colors from data cotent pane +*/ + +.formPane a { + color: var(--color-text-link); + text-decoration: none; +} +.formPane a:link { + color: var(--color-text-link); + text-decoration: none; +} +.formPane a:visited { + color: var(--color-text-link-visited); + text-decoration: none; +} +.formPane a:hover { + color: var(--color-text-link-hover); + font-weight: bold; +} /* was text-decoration: underline; */ +.formPane a:active { + color: var(--color-text-link-active); + text-decoration: none; +} + +/* ends */ + +@mixin box-shadow($x-axis: 0, $y-axis: 1px, $blur: 4px, $color: $default) { + box-shadow: $x-axis $y-axis $blur $color; + -webkit-box-shadow: $x-axis $y-axis $blur $color; + -moz-box-shadow: $x-axis $y-axis $blur $color; + -o-box-shadow: $x-axis $y-axis $blur $color; +} diff --git a/dev/index.html b/dev/index.html index 515ef587..e3ee4f64 100644 --- a/dev/index.html +++ b/dev/index.html @@ -14,15 +14,16 @@ if (typeof UI !== 'undefined') window.UI = UI; @@ -30,7 +31,7 @@

Solid Pane Tester

A handy tool for pane developers. Put your JS or TS file in dev/pane/. - Run renderPane('https://solidos.solidcommunity.net/profile/card#me') from the console. + Run renderPane('https://testingsolidos.solidcommunity.net/profile/card#me') from the console. Don't forget that the resource owner needs to add http://localhost:9000 as a trusted app.

HTML element from pane.render will be inserted here ...
diff --git a/dev/loader.ts b/dev/loader.ts index 14eebf04..207e35db 100644 --- a/dev/loader.ts +++ b/dev/loader.ts @@ -1,11 +1,20 @@ + import * as paneRegistry from 'pane-registry' import * as $rdf from 'rdflib' import { solidLogicSingleton, store, authSession } from 'solid-logic' import { getOutliner } from '../src' import Pane from 'profile-pane' +import './dev-mash.css' -// FIXME: -window.$rdf = $rdf +// Add custom properties to the Window interface for TypeScript +declare global { + interface Window { + logout: () => void; + login: () => Promise; + renderPane: typeof renderPane; + Pane: typeof Pane; + } +} async function renderPane (uri: string) { if (!uri) { @@ -28,17 +37,22 @@ async function renderPane (uri: string) { logic: solidLogicSingleton } } - const options = {} - console.log(subject, Pane) + + console.log(subject, context) const icon = createIconElement(Pane) - const paneDiv = Pane.render(subject, context, options) + const paneDiv = Pane.render(subject, context) + const target = document.getElementById('render') - target.innerHTML = '' - target.appendChild(icon) - target.appendChild(paneDiv) + if (target) { + target.innerHTML = '' + target.appendChild(icon) + target.appendChild(paneDiv) + } else { + console.error("Element with id 'render' not found.") + } } -function createIconElement (Pane) { +function createIconElement (Pane: { icon: string }) { const icon = Pane.icon const img = document.createElement('img') img.src = icon @@ -46,12 +60,6 @@ function createIconElement (Pane) { return img } -document.addEventListener('DOMContentLoaded', () => { - renderPane( - 'https://solidos.solidcommunity.net/Team/SolidOs%20team%20chat/index.ttl#this' - ) -}) - window.onload = async () => { console.log('document ready') // registerPanes((cjsOrEsModule: any) => paneRegistry.register(cjsOrEsModule.default || cjsOrEsModule)) @@ -62,30 +70,38 @@ window.onload = async () => { const session = await authSession if (!session.info.isLoggedIn) { console.log('The user is not logged in') - document.getElementById('loginBanner').innerHTML = - '' - } else { - console.log(`Logged in as ${session.info.webId}`) - - document.getElementById( - 'loginBanner' - ).innerHTML = `Logged in as ${session.info.webId} ` + const loginBanner = document.getElementById('loginBanner'); + if (loginBanner) { + loginBanner.innerHTML = ''; + } + } else { + console.log(`Logged in as ${session.info.webId}`) + + const loginBanner = document.getElementById('loginBanner'); + if (loginBanner) { + loginBanner.innerHTML = `Logged in as ${session.info.webId} `; + } } - renderPane() + renderPane('https://testingsolidos.solidcommunity.net/profile/card#me') } window.logout = () => { authSession.logout() - window.location = '' + window.location.href = '' } window.login = async function () { const session = await authSession if (!session.info.isLoggedIn) { const issuer = prompt('Please enter an issuer URI', 'https://solidcommunity.net') - await authSession.login({ - oidcIssuer: issuer, - redirectUrl: window.location.href, - clientName: 'Solid Panes Dev Loader' - }) + if (issuer) { + await authSession.login({ + oidcIssuer: issuer, + redirectUrl: window.location.href, + clientName: 'Solid Panes Dev Loader' + }) + } else { + console.warn('Login cancelled: No issuer provided.') + } } }; (window as any).renderPane = renderPane +console.log("Pane at runtime:", Pane); window.Pane = Pane; diff --git a/eslint.config.mjs b/eslint.config.mjs index 427d7dbf..b97e1bab 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -7,11 +7,11 @@ export default [ { ignores: [ 'dist/**', + 'dist-dev/**', 'lib/**', 'docs/**', 'node_modules/**', 'dev/**', - 'dev-dist/**', 'coverage/**', ], }, @@ -84,10 +84,21 @@ export default [ { files: ['test/**/**/*.js', 'test/**/*.js'], rules: { + // Code style - match TypeScript settings semi: ['error', 'never'], quotes: ['error', 'single'], - 'no-console': 'off', // Allow console in tests - 'no-undef': 'off', // Tests may define globals - } + + // Strict checking - match TypeScript strictness + 'no-console': 'warn', + 'no-unused-vars': 'warn', // Match TypeScript noUnusedLocals: true + 'no-undef': 'error', + strict: ['error', 'global'], // Match TypeScript alwaysStrict: true + + // Additional strictness to match TypeScript behavior + 'no-implicit-globals': 'error', + 'prefer-const': 'error', // Encourage immutability + 'no-var': 'error', // Use let/const only + 'no-redeclare': 'error' + }, } ] diff --git a/package-lock.json b/package-lock.json index c42a6dcf..6e660df3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,63 +1,67 @@ { "name": "solid-panes", - "version": "4.0.0", + "version": "4.0.0-newStyle", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "solid-panes", - "version": "4.0.0", + "version": "4.0.0-newStyle", "license": "MIT", "dependencies": { "@solid/better-simple-slideshow": "^0.1.0", - "activitystreams-pane": "^1.0.0", - "chat-pane": "^3.0.0", - "contacts-pane": "^3.0.0", - "dompurify": "^3.2.6", - "folder-pane": "^3.0.0", - "issue-pane": "^3.0.0", - "marked": "^17.0.0", - "meeting-pane": "^3.0.0", - "mime-types": "^3.0.1", - "pane-registry": "^3.0.0", - "profile-pane": "^2.0.0", + "activitystreams-pane": "^1.0.1", + "chat-pane": "^3.0.1", + "contacts-pane": "^3.0.1", + "dompurify": "^3.3.1", + "folder-pane": "^3.0.1", + "issue-pane": "^3.0.1", + "marked": "^17.0.1", + "meeting-pane": "^3.0.1", + "mime-types": "^3.0.2", + "pane-registry": "^3.0.1", + "profile-pane": "^2.0.0-newStyle-5eff9c57", "solid-namespace": "^0.5.4", - "source-pane": "^3.0.0" + "source-pane": "^3.0.1" }, "devDependencies": { - "@babel/cli": "^7.28.0", - "@babel/core": "^7.28.0", - "@babel/preset-env": "^7.28.0", - "@babel/preset-typescript": "^7.27.1", + "@babel/cli": "^7.28.6", + "@babel/core": "^7.28.6", + "@babel/preset-env": "^7.28.6", + "@babel/preset-typescript": "^7.28.5", "@testing-library/dom": "^10.4.1", - "@testing-library/jest-dom": "^6.6.4", + "@testing-library/jest-dom": "^6.9.1", "@types/jest": "^30.0.0", "@types/webpack-env": "^1.18.8", - "@typescript-eslint/parser": "^8.39.0", + "@typescript-eslint/parser": "^8.53.1", "@webpack-cli/serve": "^3.0.1", - "babel-jest": "^30.1.2", + "babel-jest": "^30.2.0", "babel-loader": "^10.0.0", "babel-plugin-inline-import": "^3.0.0", "buffer": "^6.0.3", - "eslint": "^9.33.0", - "globals": "^17.0.0", - "html-webpack-plugin": "^5.6.3", - "jest": "^30.0.5", - "jest-environment-jsdom": "^30.0.5", + "css-loader": "^7.1.2", + "eslint": "^9.39.2", + "globals": "^17.1.0", + "html-webpack-plugin": "^5.6.6", + "jest": "^30.2.0", + "jest-environment-jsdom": "^30.2.0", "jest-fetch-mock": "^3.0.3", "neostandard": "^0.12.2", "node-polyfill-webpack-plugin": "^4.1.0", "path-browserify": "^1.0.1", - "rdflib": "^2.3.0", - "react": "^19.1.1", - "react-dom": "^19.1.1", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0", - "ts-jest": "^29.4.1", - "typescript": "^5.9.2", - "webpack": "^5.101.0", + "raw-loader": "^4.0.2", + "rdflib": "^2.3.5", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3", + "style-loader": "^4.0.0", + "ts-jest": "^29.4.6", + "ts-loader": "^9.5.4", + "typescript": "^5.9.3", + "webpack": "^5.104.1", "webpack-cli": "^6.0.1", - "webpack-dev-server": "^5.2.2" + "webpack-dev-server": "^5.2.3" } }, "node_modules/@adobe/css-tools": { @@ -149,7 +153,6 @@ "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", @@ -1849,9 +1852,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -2000,7 +2003,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2024,7 +2026,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -3334,27 +3335,27 @@ "optional": true }, "node_modules/@noble/curves": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", - "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz", + "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.8.0" + "@noble/hashes": "2.0.1" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -5040,7 +5041,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5072,21 +5072,21 @@ } }, "node_modules/activitystreams-pane": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/activitystreams-pane/-/activitystreams-pane-1.0.0.tgz", - "integrity": "sha512-hdayUTYNeJalu7mY7RoXHag5SbuNz3uC55E1jC+obJ/tvIl5QqroEONxqGsDCr4qDQ1UEQPuPsOckUOJWl4eXQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/activitystreams-pane/-/activitystreams-pane-1.0.1.tgz", + "integrity": "sha512-XBusVxTkRHzt3rbzMla9dw932q23AM93MLCEByeGbDWU2p/cAzTD5D2fg+S3o69OwIuun4WDZTuWg+u7PdF1nQ==", "license": "MIT", "dependencies": { - "pane-registry": "^3.0.0", - "react": "^19.2.0", - "react-dom": "^19.2.0", + "pane-registry": "^3.0.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", "react-jss": "^10.10.0", "timeago.js": "^4.0.2" }, "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3" } }, "node_modules/agent-base": { @@ -5158,6 +5158,16 @@ "dev": true, "license": "MIT" }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -5686,6 +5696,16 @@ "dev": true, "license": "MIT" }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -5990,7 +6010,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6247,14 +6266,14 @@ } }, "node_modules/chat-pane": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chat-pane/-/chat-pane-3.0.0.tgz", - "integrity": "sha512-Zr2BXbSDInVOgz1CrdmBxiziJUhCkeDAxfpTtlEnpMn13gZsg9p2AmMTmxV+yKCZZpQJCkOURU5Z+XKb3uOIZw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/chat-pane/-/chat-pane-3.0.1.tgz", + "integrity": "sha512-J9OdnIueNcRfuHZ3vkL7cjhrXCeDHTwq6MtAdcDbAsehb7hugFlhO4zQ7IkajZz5fGUpisf76KpoVzcjizlRYQ==", "license": "MIT", "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3" } }, "node_modules/chokidar": { @@ -6516,17 +6535,17 @@ "license": "MIT" }, "node_modules/contacts-pane": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/contacts-pane/-/contacts-pane-3.0.0.tgz", - "integrity": "sha512-tFG53tUZQv6FFQzAltrkpCtY4xTO+oHeSisIIP4O45Eo22Q7YgP5jvsjuhkQGan3CK1moVfA7MieUFsfjvWKWw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/contacts-pane/-/contacts-pane-3.0.1.tgz", + "integrity": "sha512-+kI4WpSv+Kms3Z7pnAazCozw2V4t132d5gmVTGVeLgIBMfMr/h9xACBTuhbPV9feaa8WHfV2RbGuBfzKp5juew==", "license": "MIT", "dependencies": { - "mime-types": "^3.0.1" + "mime-types": "^3.0.2" }, "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3" } }, "node_modules/content-disposition": { @@ -6577,9 +6596,9 @@ "license": "MIT" }, "node_modules/core-js": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", - "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", + "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -6731,6 +6750,55 @@ "jss-preset-default": "^10.10.0" } }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/css-select": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", @@ -6778,6 +6846,19 @@ "dev": true, "license": "MIT" }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cssstyle": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", @@ -7318,6 +7399,16 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -7768,7 +7859,6 @@ "integrity": "sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/types": "^8.35.0", "comment-parser": "^1.4.1", @@ -8449,13 +8539,13 @@ "license": "ISC" }, "node_modules/folder-pane": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/folder-pane/-/folder-pane-3.0.0.tgz", - "integrity": "sha512-7igSdUResLf1MlJnV8VjG/tWFJsdrYx07v5Wz9cVSr5G9zNqQx9VjgB7VqqA0wPEgHho12o0bRHPsaFPDPPGwQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/folder-pane/-/folder-pane-3.0.1.tgz", + "integrity": "sha512-4M3sKNMAsJRnAUZ8ii8UnfCPcQdChR9RkC65PM+eAz1gU5jQgHbplQOuyf+VtJgsqluHHohwjBbz3JafVnXNIw==", "license": "MIT", "peerDependencies": { - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0" + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3" } }, "node_modules/follow-redirects": { @@ -8820,9 +8910,9 @@ } }, "node_modules/globals": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.0.0.tgz", - "integrity": "sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.1.0.tgz", + "integrity": "sha512-8HoIcWI5fCvG5NADj4bDav+er9B9JMj2vyL2pI8D0eismKyUvPLTSs+Ln3wqhwcp306i73iyVnEKx3F6T47TGw==", "dev": true, "license": "MIT", "engines": { @@ -9381,6 +9471,19 @@ "node": ">=0.10.0" } }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -10171,17 +10274,17 @@ } }, "node_modules/issue-pane": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/issue-pane/-/issue-pane-3.0.0.tgz", - "integrity": "sha512-EtDf3jDNO+cSFJcjd9ZdpLNEbEDfFAAJ7RYpHHTaupjp0bYDaft33rnaBMqI2F4VY+9CIHZjWQL09KOlNO04Aw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/issue-pane/-/issue-pane-3.0.1.tgz", + "integrity": "sha512-vL92VCe8zFWFHfbfk+Ne0cL8cwAJ9eQEoS1m36dMqgzlAaepHF+XRCYQXRdtEpeLkPTlX1iM+GWBX84rrhlFJw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.28.3" + "@babel/runtime": "^7.28.6" }, "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3" } }, "node_modules/istanbul-lib-coverage": { @@ -10337,7 +10440,6 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -11416,7 +11518,6 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -11795,9 +11896,9 @@ "license": "MIT" }, "node_modules/lit-html": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.1.tgz", - "integrity": "sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" @@ -11817,6 +11918,21 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -11989,14 +12105,14 @@ } }, "node_modules/meeting-pane": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/meeting-pane/-/meeting-pane-3.0.0.tgz", - "integrity": "sha512-/QuRUKTm7wNRnnaUeWBeVmir5ZSxWvOpr0T1G0WXzVtCwD0yRc0O9JVXt3qkOCxxleXF7BL7FkYgO2qwEwRrjA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/meeting-pane/-/meeting-pane-3.0.1.tgz", + "integrity": "sha512-qFR8VTEkxzceFxfoLvTY6svXd+uSQd5DXfSsS23Iaw5n+KOXGyyz8izkqEKLVoNgpZtiQFY7NbRk9RXX7eg+wA==", "license": "MIT", "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3" } }, "node_modules/memfs": { @@ -12238,6 +12354,25 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -12853,13 +12988,13 @@ "license": "(MIT AND Zlib)" }, "node_modules/pane-registry": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pane-registry/-/pane-registry-3.0.0.tgz", - "integrity": "sha512-eNgtBtUx2f/3yem+CruYbMh7ULJ6oOvYoeswtQ5P/ippXgDbhZsl95xrahUJ6dPWi0TRzSDSHQ4SL3/G8eZOhQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pane-registry/-/pane-registry-3.0.1.tgz", + "integrity": "sha512-kcAcMGMBL8NAipfErxv+UlqUn7vfkY0TPFl+NyCbOPuUqaVkhNp3G/NSPAvBM/p3MytAxbR0N9fEqfHL0312BQ==", "license": "MIT", "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2" } }, "node_modules/param-case": { @@ -13224,6 +13359,119 @@ "node": ">= 0.4" } }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13290,20 +13538,20 @@ "license": "MIT" }, "node_modules/profile-pane": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/profile-pane/-/profile-pane-2.0.0.tgz", - "integrity": "sha512-YOaG9Ep9IM05HjognsPenfPzjvgqnftQyieUY46ASxpp84VvPx8sPC8w4+jvms6gqtyRkf5+LRn/u32Fkvb1VQ==", + "version": "2.0.0-newStyle-5eff9c57", + "resolved": "https://registry.npmjs.org/profile-pane/-/profile-pane-2.0.0-newStyle-5eff9c57.tgz", + "integrity": "sha512-F4/RjIlRT9TT48FyCgRWt8Yk2tbZxyCtMRI0E2dMyMNfAtAB8iWKz8/xOqAdxYVuAZG29KYydzAZ/m4sVSyGxQ==", "license": "MIT", "dependencies": { - "lit-html": "^3.2.1", - "pane-registry": "^3.0.0", + "lit-html": "^3.3.2", + "pane-registry": "^3.0.1", "qrcode": "^1.5.4", "validate-color": "^2.2.4" }, "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3" } }, "node_modules/promise-polyfill": { @@ -13657,6 +13905,46 @@ "node": ">= 0.8" } }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/raw-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/rdf-canonize": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-5.0.0.tgz", @@ -13674,7 +13962,6 @@ "resolved": "https://registry.npmjs.org/rdflib/-/rdflib-2.3.5.tgz", "integrity": "sha512-dXW3GbHSKx3vctY3YUm7O/EVj4pNVueUgrm3GBsWjwrRkkFBu2+9Sd5zjhi/skbzhpQ9d45rO/2HGD8zi0oubw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@frogcat/ttl2jsonld": "^0.0.10", @@ -13700,7 +13987,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -14270,7 +14556,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -14779,17 +15064,19 @@ } }, "node_modules/solid-logic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/solid-logic/-/solid-logic-4.0.1.tgz", - "integrity": "sha512-srCwjX171dUQKN9Pp12lBD4mghRrbSvLfPFmeYP3TezAd5yGleb1ojcbMeN15RVSJQHrPqZDh9TiBUXZo3knLw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/solid-logic/-/solid-logic-4.0.2.tgz", + "integrity": "sha512-B87MiOkYEyIN0lVFbqzHh//qrjg+T4Tvo+McmsTXVSPLgctdQbxPOqjSlrRwVSsUgPdY+XlU61cJco4xdY/YZg==", "license": "MIT", - "peer": true, "dependencies": { "@inrupt/solid-client-authn-browser": "^3.1.0", "solid-namespace": "^0.5.4" }, + "engines": { + "node": ">=18" + }, "peerDependencies": { - "rdflib": "^2.3.0" + "rdflib": "^2.3.5" } }, "node_modules/solid-namespace": { @@ -14799,26 +15086,38 @@ "license": "MIT" }, "node_modules/solid-ui": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/solid-ui/-/solid-ui-3.0.1.tgz", - "integrity": "sha512-bmeSnNoDWjC9Vu36hf854QxXrzDt3+WvkPqMtbPn9qruYbfeJxzfTRycUhUyc1ZfILJ2OJR7bVkNOgJ6PVZr6g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/solid-ui/-/solid-ui-3.0.3.tgz", + "integrity": "sha512-lH6JjF1WvpBMhsyEmF+gvHXLFumnzO6bZGpvMbkdnsmNoBD3GMi8/BElz7hPNiX6Fubgya/s/ZykQm1NmXRdnQ==", "license": "MIT", - "peer": true, "dependencies": { - "@noble/curves": "^1.9.6", - "@noble/hashes": "^1.8.0", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", "escape-html": "^1.0.3", "mime-types": "^3.0.2", - "pane-registry": "^3.0.0", + "pane-registry": "^3.0.1", "solid-namespace": "^0.5.4", - "uuid": "^11.1.0" + "uuid": "^13.0.0" }, "optionalDependencies": { "fsevents": "*" }, "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2" + } + }, + "node_modules/solid-ui/node_modules/uuid": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" } }, "node_modules/source-map": { @@ -14831,6 +15130,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -14843,14 +15152,14 @@ } }, "node_modules/source-pane": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/source-pane/-/source-pane-3.0.0.tgz", - "integrity": "sha512-VCVWwiSJaWKyO+0FsA8o3hw8BRNZuX8umvKXYvb/2mWEX7FASFz7/f0RKAgUWamgNcZqI3kgYCud7CXmXwCtyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/source-pane/-/source-pane-3.0.1.tgz", + "integrity": "sha512-AcRmKM5u66QQafXCml1vqdYgzfnmJTqb26RRxMqVfOaZEV/aml1LcPDKQqA+X2qiNKPf/cyxpTbdRyO0nQB5gQ==", "license": "MIT", "peerDependencies": { - "rdflib": "^2.3.0", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0" + "rdflib": "^2.3.5", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3" } }, "node_modules/spdy": { @@ -15203,6 +15512,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.27.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15535,7 +15861,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -15789,13 +16114,56 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ts-loader": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", + "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tsyringe": { "version": "4.10.0", @@ -16392,7 +16760,6 @@ "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -16442,7 +16809,6 @@ "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", diff --git a/package.json b/package.json index 820acab9..429075de 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,12 @@ { "name": "solid-panes", - "version": "4.0.0", + "version": "4.0.0-newStyle", "description": "Solid-compatible Panes: applets and views for the mashlib and databrowser", "main": "dist/index.js", "types": "dist/index.d.ts", - "sideEffects": false, + "sideEffects": [ + "*.css" + ], "files": [ "dist/", "README.md", @@ -13,7 +15,7 @@ "scripts": { "clean": "rm -rf dist src/versionInfo.ts", "build": "npm run clean && npm run build-version && npm run typecheck && npm run build-dist && npm run postbuild-js", - "build-version": "./timestamp.sh > src/versionInfo.ts && eslint 'src/versionInfo.ts' --fix", + "build-version": "bash timestamp.sh > src/versionInfo.ts && ./node_modules/.bin/eslint 'src/versionInfo.ts' --fix", "build-dist": "npm run build-js && npm run build-types", "build-js": "babel src --out-dir dist --extensions '.ts,.js' --source-maps", "build-types": "tsc --emitDeclarationOnly", @@ -26,11 +28,11 @@ "test-watch": "npm run lint && jest --onlyChanged --watch", "test-coverage": "jest --coverage --collectCoverageFrom=src/**/*.[jt]s", "test-debug": "node --inspect-brk ./node_modules/.bin/jest -i --env jest-environment-node-debug", - "prepublishOnly": "npm test && npm run build", + "prepublishOnly": "npm run build && npm run lint && npm test", "preversion": "npm run lint && npm run typecheck && npm test", "postversion": "git push origin main --follow-tags", "watch": "npm run build-version && babel src -d dist --source-maps --extensions '.ts,.js' --watch", - "start": "webpack serve --config webpack.dev.config.js --open" + "start": "webpack serve --config webpack.dev.config.mjs --open" }, "repository": { "type": "git", @@ -57,19 +59,19 @@ "homepage": "https://github.com/solidos/solid-panes", "dependencies": { "@solid/better-simple-slideshow": "^0.1.0", - "activitystreams-pane": "^1.0.0", - "chat-pane": "^3.0.0", - "contacts-pane": "^3.0.0", - "dompurify": "^3.2.6", - "folder-pane": "^3.0.0", - "issue-pane": "^3.0.0", - "marked": "^17.0.0", - "meeting-pane": "^3.0.0", - "mime-types": "^3.0.1", - "pane-registry": "^3.0.0", - "profile-pane": "^2.0.0", + "activitystreams-pane": "^1.0.1", + "chat-pane": "^3.0.1", + "contacts-pane": "^3.0.1", + "dompurify": "^3.3.1", + "folder-pane": "^3.0.1", + "issue-pane": "^3.0.1", + "marked": "^17.0.1", + "meeting-pane": "^3.0.1", + "mime-types": "^3.0.2", + "pane-registry": "^3.0.1", + "profile-pane": "^2.0.0-newStyle-5eff9c57", "solid-namespace": "^0.5.4", - "source-pane": "^3.0.0" + "source-pane": "^3.0.1" }, "overrides": { "rdflib": "$rdflib", @@ -77,38 +79,42 @@ "solid-ui": "$solid-ui" }, "devDependencies": { - "@babel/cli": "^7.28.0", - "@babel/core": "^7.28.0", - "@babel/preset-env": "^7.28.0", - "@babel/preset-typescript": "^7.27.1", + "@babel/cli": "^7.28.6", + "@babel/core": "^7.28.6", + "@babel/preset-env": "^7.28.6", + "@babel/preset-typescript": "^7.28.5", "@testing-library/dom": "^10.4.1", - "@testing-library/jest-dom": "^6.6.4", + "@testing-library/jest-dom": "^6.9.1", "@types/jest": "^30.0.0", "@types/webpack-env": "^1.18.8", - "@typescript-eslint/parser": "^8.39.0", + "@typescript-eslint/parser": "^8.53.1", "@webpack-cli/serve": "^3.0.1", - "babel-jest": "^30.1.2", + "babel-jest": "^30.2.0", "babel-loader": "^10.0.0", "babel-plugin-inline-import": "^3.0.0", "buffer": "^6.0.3", - "eslint": "^9.33.0", - "globals": "^17.0.0", - "html-webpack-plugin": "^5.6.3", - "jest": "^30.0.5", - "jest-environment-jsdom": "^30.0.5", + "css-loader": "^7.1.2", + "eslint": "^9.39.2", + "globals": "^17.1.0", + "html-webpack-plugin": "^5.6.6", + "jest": "^30.2.0", + "jest-environment-jsdom": "^30.2.0", "jest-fetch-mock": "^3.0.3", "neostandard": "^0.12.2", "node-polyfill-webpack-plugin": "^4.1.0", "path-browserify": "^1.0.1", - "rdflib": "^2.3.0", - "react": "^19.1.1", - "react-dom": "^19.1.1", - "solid-logic": "^4.0.0", - "solid-ui": "^3.0.0", - "ts-jest": "^29.4.1", - "typescript": "^5.9.2", - "webpack": "^5.101.0", + "raw-loader": "^4.0.2", + "rdflib": "^2.3.5", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "solid-logic": "^4.0.2", + "solid-ui": "^3.0.3", + "style-loader": "^4.0.0", + "ts-jest": "^29.4.6", + "ts-loader": "^9.5.4", + "typescript": "^5.9.3", + "webpack": "^5.104.1", "webpack-cli": "^6.0.1", - "webpack-dev-server": "^5.2.2" + "webpack-dev-server": "^5.2.3" } } diff --git a/test/unit/test-import-export/edit-importer.js b/test/unit/test-import-export/edit-importer.js index 9934d158..597d4b29 100644 --- a/test/unit/test-import-export/edit-importer.js +++ b/test/unit/test-import-export/edit-importer.js @@ -1,4 +1,3 @@ -'use strict' // Suspect this is unsed test code /* Profile Editing Appp Pane diff --git a/timestamp.sh b/timestamp.sh index 88d51254..75356bb8 100755 --- a/timestamp.sh +++ b/timestamp.sh @@ -1,13 +1,22 @@ #!/bin/bash echo "export default {" -date -u '+buildTime: "%Y-%m-%dT%H:%M:%SZ",' -git log | grep commit | head -1 | sed -e 's/ /: "/' | sed -e 's/$/",/' +date -u '+ buildTime: "%Y-%m-%dT%H:%M:%SZ",' +if [ -d .git ]; then + commit=$(git log --pretty=format:'%H' -n 1) +else + commit="unknown" +fi +echo " commit: \"$commit\"," echo " npmInfo: {" - npm version | sed 's/\x1b\[[0-9;:]*[mG]//g' | grep -v '^{' | while read line; do - key=$(echo "$line" | cut -d ':' -f 1 | tr -d ' ') - value=$(echo "$line" | cut -d ':' -f 2- | tr -d ' ') - echo " \"${key}\": \"${value}\"," - done +npm version | grep -v '^{' | while IFS=: read key value; do + key=$(echo "$key" | xargs) + value=$(echo $value | xargs) + # Remove any trailing comma from value + value=$(echo "$value" | sed 's/,$//') + if [ "$key" != "}" ]; then + echo " '$key': '$value'," + fi +done echo " }" echo "}" \ No newline at end of file diff --git a/tsconfig.dev.json b/tsconfig.dev.json new file mode 100644 index 00000000..8a4f7fa3 --- /dev/null +++ b/tsconfig.dev.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "." + }, + "include": ["dev/index.ts", "dev/**/*.ts", "typings/**/*"] +} diff --git a/tsconfig.json b/tsconfig.json index 9ab6e381..cce40837 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -53,8 +53,7 @@ "node_modules/@types", "node_modules/@testing-library", "typings", - "src/types.ts", - "declarations.d.ts", + "src/types.ts" ] /* List of folders to include type definitions from. */, // "types": [], /* Type declaration files to be included in compilation. */ // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ @@ -73,8 +72,7 @@ }, "include": [ "src/**/*", - "typings/**/*", - "declarations.d.ts" + "typings/**/*" ], "exclude": ["node_modules", "dist"] } diff --git a/declarations.d.ts b/typings/declarations.d.ts similarity index 76% rename from declarations.d.ts rename to typings/declarations.d.ts index ca8ebec2..a3d226c8 100644 --- a/declarations.d.ts +++ b/typings/declarations.d.ts @@ -1,3 +1,4 @@ +declare module '*.css'; declare module '*.ttl' { const content: string export default content diff --git a/typings/raw-loader.d.ts b/typings/raw-loader.d.ts deleted file mode 100644 index ca8ebec2..00000000 --- a/typings/raw-loader.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.ttl' { - const content: string - export default content -} diff --git a/webpack.dev.config.js b/webpack.dev.config.mjs similarity index 52% rename from webpack.dev.config.js rename to webpack.dev.config.mjs index 6ffe580d..0ed1a44e 100644 --- a/webpack.dev.config.js +++ b/webpack.dev.config.mjs @@ -23,11 +23,32 @@ export default [ module: { rules: [ { - test: /\.(mjs|js|ts)$/, + test: /\.(mjs|js)$/, exclude: /(node_modules)/, use: { - loader: 'babel-loader' + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'], + }, } + }, + { + test: /\.ts$/, + exclude: /node_modules/, + use: { + loader: 'ts-loader', + options: { + configFile: 'tsconfig.dev.json' + } + }, + }, + { + test: /\.css$/i, + use: ['style-loader', 'css-loader'] + }, + { + test: /\.ttl$/, + use: 'raw-loader' } ] }, @@ -40,7 +61,12 @@ export default [ } ], compress: true, - port: 9000 + port: 9001, + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS', + 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization' + } }, devtool: 'source-map' }]